ngx-aur-mat-table 17.0.4 → 17.0.5

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.
@@ -255,7 +255,7 @@ export class NgxAurMatTableComponent {
255
255
  this.resizeColumnOffsetsObserver.disconnect();
256
256
  }
257
257
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxAurMatTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NgxAurMatTableComponent, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", highlight: "highlight" }, outputs: { sort: "sort", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important;background-color:#f8f8f8}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "pipe", type: i12.DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NgxAurMatTableComponent, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", highlight: "highlight" }, outputs: { sort: "sort", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\" class=\"enbl\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "pipe", type: i12.DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
259
259
  trigger('detailExpand', [
260
260
  state(ExpandState.COLLAPSED, style({ height: '0px', minHeight: '0' })),
261
261
  state(ExpandState.EXPANDED, style({ height: '*' })),
@@ -271,7 +271,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
271
271
  state(ExpandState.EXPANDED, style({ height: '*' })),
272
272
  transition(`${ExpandState.EXPANDED} <=> ${ExpandState.COLLAPSED}`, animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
273
273
  ]),
274
- ], template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important;background-color:#f8f8f8}\n"] }]
274
+ ], template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\" class=\"enbl\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important}\n"] }]
275
275
  }], ctorParameters: () => [], propDecorators: { displayColumns: [{
276
276
  type: Input
277
277
  }], subFooterRowTemplate: [{
@@ -320,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
320
320
  }], highlight: [{
321
321
  type: Input
322
322
  }] } });
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9uZ3gtYXVyLW1hdC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXVyLW1hdC10YWJsZS9zcmMvbGliL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsT0FBTyxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hGLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXJHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsVUFB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TTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBdUJFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sdW1uVmlldywgVGFibGVDb25maWd9IGZyb20gJy4vbW9kZWwvQ29sdW1uQ29uZmlnJztcclxuaW1wb3J0IHtNYXRTb3J0LCBTb3J0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHtNYXRQYWdpbmF0b3J9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7U2VsZWN0aW9uUHJvdmlkZXIsIFNlbGVjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1NlbGVjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtBY3Rpb25FdmVudCwgUm93QWN0aW9uUHJvdmlkZXIsIFJvd0FjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1Jvd0FjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSBcIi4vbW9kZWwvVGFibGVSb3dcIjtcclxuaW1wb3J0IHtUYWJsZVZpZXdGYWN0b3J5fSBmcm9tIFwiLi9tb2RlbC9UYWJsZVZpZXdGYWN0b3J5XCI7XHJcbmltcG9ydCB7SW5kZXhQcm92aWRlciwgSW5kZXhQcm92aWRlckR1bW15fSBmcm9tIFwiLi9wcm92aWRlcnMvSW5kZXhQcm92aWRlclwiO1xyXG5pbXBvcnQge1BhZ2luYXRpb25Qcm92aWRlciwgUGFnaW5hdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9QYWdpbmF0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2VGYWN0b3J5fSBmcm9tIFwiLi9mYWN0b3JpZXMvTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeVwiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb2x1bW5zRmFjdG9yeX0gZnJvbSBcIi4vZmFjdG9yaWVzL0Rpc3BsYXlDb2x1bW5zRmFjdG9yeVwiO1xyXG5pbXBvcnQge0VtcHR5VmFsdWV9IGZyb20gXCIuL21vZGVsL0VtcHR5VmFsdWVcIjtcclxuaW1wb3J0IHtUb3RhbFJvd1Byb3ZpZGVyLCBUb3RhbFJvd1Byb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9Ub3RhbFJvd1Byb3ZpZGVyXCI7XHJcbmltcG9ydCB7Tmd4QXVyRmlsdGVyc30gZnJvbSBcIi4vZmlsdGVycy9OZ3hBdXJGaWx0ZXJzXCI7XHJcbmltcG9ydCB7Tmd4QXVyTWF0VGFibGVQdWJsaWN9IGZyb20gXCIuL25neC1hdXItbWF0LXRhYmxlLXB1YmxpY1wiO1xyXG5pbXBvcnQge09mZnNldFV0aWx9IGZyb20gXCIuL3V0aWxzL29mZnNldC51dGlsXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQge05neFRhYmxlU3ViRm9vdGVyUm93RGlyZWN0aXZlfSBmcm9tIFwiLi9kaXJlY3RpdmUvbmd4LXRhYmxlLXN1Yi1mb290ZXItcm93LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCI7XHJcbmltcG9ydCB7SGVhZGVyQnV0dG9uUHJvdmlkZXIsIEhlYWRlckJ1dHRvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9IZWFkZXJCdXR0b25Qcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRDb250YWluZXI8VD4ge1xyXG4gIHZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXIsXHJcbiAgd2lkdGg6IG51bWJlcixcclxuICBrZXk6IHN0cmluZ1xyXG59XHJcblxyXG5lbnVtIEV4cGFuZFN0YXRlIHtcclxuICBDT0xMQVBTRUQgPSAnY29sbGFwc2VkJyxcclxuICBFWFBBTkRFRCA9ICdleHBhbmRlZCdcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXItbWF0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZShFeHBhbmRTdGF0ZS5DT0xMQVBTRUQsIHN0eWxlKHtoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJ30pKSxcclxuICAgICAgc3RhdGUoRXhwYW5kU3RhdGUuRVhQQU5ERUQsIHN0eWxlKHtoZWlnaHQ6ICcqJ30pKSxcclxuICAgICAgdHJhbnNpdGlvbihgJHtFeHBhbmRTdGF0ZS5FWFBBTkRFRH0gPD0+ICR7RXhwYW5kU3RhdGUuQ09MTEFQU0VEfWAsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hBdXJNYXRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE5neEF1ck1hdFRhYmxlUHVibGljPFQ+IHtcclxuXHJcbiAgZXhwYW5kZWRTdGF0ZUVudW0gPSBFeHBhbmRTdGF0ZTtcclxuXHJcbiAgcHVibGljIHRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VGFibGVSb3c8VD4+KFtdKTtcclxuICBfZGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgX2N1c3RvbURpc3BsYXlDb2x1bW5zRW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGlzcGxheUNvbHVtbnMoY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIGlmIChjb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuX2Rpc3BsYXlDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICB0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQgPSBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhYmxlVmlldzogTWFwPHN0cmluZywgQ29sdW1uVmlldzxzdHJpbmc+PltdID0gW107XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoTmd4VGFibGVTdWJGb290ZXJSb3dEaXJlY3RpdmUpIHN1YkZvb3RlclJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Jvd0xpbmsnLCB7cmVhZDogRWxlbWVudFJlZn0pIHJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHRhYmxlOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQElucHV0KCkgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnPFQ+O1xyXG5cclxuICBASW5wdXQoKSB0YWJsZURhdGE6IFRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBleHRlbmRlZFJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwge3N0YXRpYzogZmFsc2V9KSBtYXRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7c3RhdGljOiB0cnVlfSkgbWF0U29ydDogTWF0U29ydDtcclxuXHJcbiAgQE91dHB1dCgpIHNvcnQ6IEV2ZW50RW1pdHRlcjxTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gZXZlbnRzIGlmIGVuYWJsZWQgYWN0aW9uc1xyXG4gIEBPdXRwdXQoKSBvblJvd0FjdGlvbjogRXZlbnRFbWl0dGVyPEFjdGlvbkV2ZW50PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uRXZlbnQ8VD4+KCk7XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8gZXZlbnRzIGlmIGVuYWJsZWQgc2VsZWN0IGV2ZW50XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGVzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWRSb3dzQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25FdmVudDxUW10+PigpO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uTW9kZWwgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbk1vZGVsPFQ+PigpO1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG5cclxuICAvKipcclxuICAgKiByZXR1cm4gZmlsdGVyZWQgcm93c1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgY29sdW1uT2Zmc2V0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uT2Zmc2V0W10+KCk7XHJcbiAgcHJpdmF0ZSBwcmV2Q29sdW1uT2Zmc2V0czogQ29sdW1uT2Zmc2V0W10gPSBbXTtcclxuXHJcbiAgaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXJEdW1teSgpO1xyXG4gIEBPdXRwdXQoKSBvbkhlYWRlckJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uT2Zmc2V0c09ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IEVtcHR5VmFsdWUuUkVTSVpFX09CU0VSVkVSO1xyXG5cclxuICBzZWxlY3Rpb25Qcm92aWRlcjogU2VsZWN0aW9uUHJvdmlkZXI8VD4gPSBuZXcgU2VsZWN0aW9uUHJvdmlkZXJEdW1teSgpO1xyXG5cclxuICByb3dBY3Rpb25zUHJvdmlkZXI6IFJvd0FjdGlvblByb3ZpZGVyPFQ+ID0gbmV3IFJvd0FjdGlvblByb3ZpZGVyRHVtbXk8VD4oKTtcclxuXHJcbiAgaW5kZXhQcm92aWRlcjogSW5kZXhQcm92aWRlciA9IG5ldyBJbmRleFByb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgcGFnaW5hdGlvblByb3ZpZGVyOiBQYWdpbmF0aW9uUHJvdmlkZXIgPSBuZXcgUGFnaW5hdGlvblByb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgdG90YWxSb3dQcm92aWRlcjogVG90YWxSb3dQcm92aWRlcjxUPiA9IG5ldyBUb3RhbFJvd1Byb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgaGlnaGxpZ2h0ZWQ6IFQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgY3VzdG9tU29ydEZ1bmN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCAoZGF0YTogVGFibGVSb3c8VD4sIGtleTogc3RyaW5nKSA9PiBhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyU3RvcmFnZSA9IG5ldyBNYXA8c3RyaW5nLCBOZ3hBdXJGaWx0ZXJzLkJhc2U8VD4+KCk7XHJcblxyXG4gIC8v0LfQvdCw0YfQtdC90LjQtSDQv9C10YDQtdC00LDQtdGC0YHRjyDQsiDQutC+0L3RgtC10LnQvdC10YDQtSDQuNC90LDRh9C1IE9uQ2hhbmdlINC90LUg0LLQuNC00LjRgiDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtCz0LTQsCDQv9C10YDQtdC00LDRjtGC0YHRjyDQvtC00LjQvdCw0LrQvtCy0YvQtSDQt9C90LDRh9C10L3QuNC1INC4INC/0L7QtNGB0LLQtdGC0LrQsCDRgdGC0YDQvtC60Lgg0L3QtSDQvtGC0LrQu9GO0YfQsNC10YLRgdGPXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodDogSGlnaGxpZ2h0Q29udGFpbmVyPFQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICgoY2hhbmdlc1sndGFibGVEYXRhJ10gJiYgdGhpcy50YWJsZURhdGEpIHx8IChjaGFuZ2VzWydkaXNwbGF5Q29sdW1ucyddICYmIHRoaXMuX2Rpc3BsYXlDb2x1bW5zKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2hpZ2hsaWdodCddICYmIHRoaXMuaGlnaGxpZ2h0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKHRoaXMuaGlnaGxpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoVGFibGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uUHJvdmlkZXI/LnNlbGVjdGlvbj8uc2VsZWN0ZWQgPz8gW107XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhIHx8IFtdO1xyXG4gICAgdGhpcy5wcmVwYXJlVGFibGVEYXRhKHNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKGg6IEhpZ2hsaWdodENvbnRhaW5lcjxUPikge1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWQgPT09IGgudmFsdWUpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodGVkID0gaC52YWx1ZTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyb3cgPT4gcm93LnJvd1NyYyA9PT0gaC52YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yb3dzPy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxyXG4gICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBpbmxpbmU6IFwiY2VudGVyXCJcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5pdCBpbnB1dHMgW3RhYmxlQ29uZmlnXSBpcyBtYW5kYXRvcnkhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB3ZSBuZWVkIHRoaXMsIGluIG9yZGVyIHRvIG1ha2UgcGFnaW5hdGlvbiB3b3JrIHdpdGggKm5nSWZcclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRQYWdpbmF0b3IoKVxyXG4gICAgdGhpcy5pbml0U29ydGluZ0RhdGFBY2Nlc3NvcigpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCkpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRQYWdpbmF0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAoZGF0YSwga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tU29ydEZ1bmN0aW9uID0gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLmdldChrZXkpO1xyXG4gICAgICAgIHJldHVybiBjdXN0b21Tb3J0RnVuY3Rpb24gPyBjdXN0b21Tb3J0RnVuY3Rpb24oZGF0YSwga2V5KSA6IGRhdGFba2V5XTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uT2Zmc2V0cygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldHM6IENvbHVtbk9mZnNldFtdID0gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGgnKSlcclxuICAgICAgICAubWFwKChjKSA9PiAoYyBhcyBIVE1MRWxlbWVudCkpXHJcbiAgICAgICAgLm1hcCgoYywgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICBsZWZ0OiBjLm9mZnNldExlZnQsXHJcbiAgICAgICAgICB3aWR0aDogYy5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgIGtleTogdGhpcy5fZGlzcGxheUNvbHVtbnNbaW5kZXhdXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICBpZiAoT2Zmc2V0VXRpbC5hcmVOb3RFcXVhbCh0aGlzLnByZXZDb2x1bW5PZmZzZXRzLCBvZmZzZXRzKSkge1xyXG4gICAgICAgIHRoaXMucHJldkNvbHVtbk9mZnNldHMgPSBvZmZzZXRzO1xyXG4gICAgICAgIHRoaXMuY29sdW1uT2Zmc2V0cy5lbWl0KG9mZnNldHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVUYWJsZURhdGEoaW5pdFNlbGVjdGlvbjogVFtdID0gW10pIHtcclxuICAgIHRoaXMuaW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLmluaXRDdXN0b21Tb3J0RnVuY3Rpb25zTWFwKCk7XHJcbiAgICB0aGlzLmluaXRQYWdpbmF0b3IoKTtcclxuICAgIHRoaXMuaW5pdFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcclxuICAgIHRoaXMuaW5kZXhQcm92aWRlciA9IEluZGV4UHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcpXHJcbiAgICAgIC5hZGRJbmRleENvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucyk7XHJcblxyXG4gICAgdGhpcy5yb3dBY3Rpb25zUHJvdmlkZXIgPSBSb3dBY3Rpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZylcclxuICAgICAgLmFkZEFjdGlvbkNvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucylcclxuICAgICAgLnNldFZpZXcodGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IFNlbGVjdGlvblByb3ZpZGVyLmNyZWF0ZSh0aGlzLnRhYmxlQ29uZmlnLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSwgaW5pdFNlbGVjdGlvbilcclxuICAgICAgLmFkZENoZWNrYm94Q29sdW1uKHRoaXMuX2Rpc3BsYXlDb2x1bW5zKVxyXG4gICAgICAuYmluZEV2ZW50RW1pdHRlcnModGhpcy5zZWxlY3RlZCwgdGhpcy5vblNlbGVjdCwgdGhpcy5vbkRlc2VsZWN0LCB0aGlzLnNlbGVjdGlvbk1vZGVsKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25Qcm92aWRlciA9IFBhZ2luYXRpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy50b3RhbFJvd1Byb3ZpZGVyID0gVG90YWxSb3dQcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZywgdGhpcy50YWJsZURhdGFTb3VyY2UpXHJcbiAgICAgIC5zZXRTdHlsZSgpXHJcbiAgICAgIC5zZXRUb3RhbFJvdygpO1xyXG5cclxuICAgIHRoaXMuaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXIodGhpcy50YWJsZUNvbmZpZy50YWJsZUhlYWRlckJ1dHRvbkNmZylcclxuXHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJlZFZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q3VzdG9tU29ydEZ1bmN0aW9uc01hcCgpIHtcclxuICAgIHRoaXMudGFibGVDb25maWcuY29sdW1uc0NmZ1xyXG4gICAgICAuZmlsdGVyKGMgPT4gYy5zb3J0ICYmIGMuc29ydC5lbmFibGUgJiYgYy5zb3J0LmN1c3RvbVNvcnQpXHJcbiAgICAgIC5mb3JFYWNoKGMgPT4gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLnNldChjLmtleSwgYy5zb3J0IS5jdXN0b21Tb3J0ISkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJsZSgpIHtcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeS5jb252ZXJ0KHRoaXMudGFibGVEYXRhLCB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNDZmcpO1xyXG4gICAgdGhpcy50YWJsZVZpZXcgPSBUYWJsZVZpZXdGYWN0b3J5LnRvVmlldyh0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLCB0aGlzLnRhYmxlQ29uZmlnKVxyXG4gICAgaWYgKCF0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5fZGlzcGxheUNvbHVtbnMgPSBEaXNwbGF5Q29sdW1uc0ZhY3RvcnkuY3JlYXRlKHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWFyY2hGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuZW1pdEZpbHRlcmVkVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yYWdlLmRlbGV0ZShmaWx0ZXJOYW1lKTtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNJbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZywgZmlsdGVyOiBOZ3hBdXJGaWx0ZXJzLkJhc2U8VD4pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJTdG9yYWdlLmdldChmaWx0ZXJOYW1lKSB8fCAoIXRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkhLmVxdWFscyhmaWx0ZXIpKSkge1xyXG4gICAgICB0aGlzLmZpbHRlclN0b3JhZ2Uuc2V0KGZpbHRlck5hbWUsIGZpbHRlcik7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlclN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJBY3Rpb25zID0gWy4uLnRoaXMuZmlsdGVyU3RvcmFnZS52YWx1ZXMoKV07XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmlsdGVyQWN0aW9ucy5ldmVyeShmaWx0ZXJBY3Rpb24gPT4gZmlsdGVyQWN0aW9uLmZpbHRlckZuKCkoZGF0YSkpO1xyXG4gICAgfTtcclxuICAgIC8vINCf0YDQuNC80LXQvdC10L3QuNC1INGE0LjQu9GM0YLRgNCw0YbQuNC4LiDQvdGD0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0YPQvdC40LrQsNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRh9GC0L7QsdGLINGE0LjQu9GM0YLRgNCw0YbQuNGPINC30LDQv9GD0YHRgtC40LvQsNGB0YxcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlciA9ICd0cmlnZ2VyLScgKyBNYXRoLnJhbmRvbSgpO1xyXG4gICAgdGhpcy5lbWl0RmlsdGVyZWRWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEZpbHRlcmVkVmFsdWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlcmVkRGF0YS5tYXAoZiA9PiBmLnJvd1NyYykpXHJcbiAgfVxyXG5cclxuICBzb3J0VGFibGUoc29ydFBhcmFtZXRlcnM6IFNvcnQpIHtcclxuICAgIHRoaXMuc29ydC5lbWl0KHNvcnRQYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIGVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHJvd3M6IFRbXSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93c0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3dzfSk7XHJcbiAgfVxyXG5cclxuICBlbWl0Um93QWN0aW9uKGFjdGlvbjogc3RyaW5nLCByb3c6IFQsICRldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vblJvd0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3d9KTtcclxuICB9XHJcblxyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIubWFzdGVyVG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIuaXNBbGxTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2FzdFNyYyhyb3c6IGFueSk6IFRhYmxlUm93PFQ+IHtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfVxyXG5cclxuICByb3dDbGljayhyb3c6IFRhYmxlUm93PFQ+KSB7XHJcbiAgICBpZiAocm93LnJvd1NyYyAhPT0gdGhpcy5oaWdobGlnaHRlZCB8fCAocm93LnJvd1NyYyA9PT0gdGhpcy5oaWdobGlnaHRlZCAmJiAhdGhpcy50YWJsZUNvbmZpZy5jbGlja0NmZz8uY2FuY2VsYWJsZSkpIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93LnJvd1NyYyk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSByb3cucm93U3JjO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5oaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25Nb2RlbCgpOiBTZWxlY3Rpb25Nb2RlbDxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhvdmVyVGltZXI6IGFueSA9IG51bGw7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaG92ZXJUaW1lcik7XHJcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbk9mZnNldHNPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImF1ci1tYXQtdGFibGVcIj5cclxuICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gRmlsdGVyIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnLmZpbHRlckNmZ1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyB0YWJsZUNvbmZpZy5maWx0ZXJDZmc/LmxhYmVsIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseVNlYXJjaEZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3RhYmxlQ29uZmlnLmZpbHRlckNmZz8ucGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJoZWFkZXJCdXR0b25Qcm92aWRlci5pc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtc2V0dGluZ3MtYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyQnV0dG9uUHJvdmlkZXIuY29sb3JcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImhlYWRlckJ1dHRvblByb3ZpZGVyLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkhlYWRlckJ1dHRvbi5lbWl0KCRldmVudClcIj5cclxuICAgICAge3sgaGVhZGVyQnV0dG9uUHJvdmlkZXIuaWNvbiB9fVxyXG4gICAgPC9tYXQtaWNvbj5cclxuXHJcbiAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgPHRhYmxlICN0YWJsZSBtYXQtdGFibGUgbWF0U29ydFxyXG4gICAgICAgICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSAhPT0gbnVsbFwiXHJcbiAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCJcclxuICAgICAgICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0VGFibGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJ0YWJsZUNvbmZpZy50YWJsZVZpZXc/LmhlaWdodFwiXHJcbiAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5tYXhIZWlnaHRcIlxyXG4gICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cInRhYmxlQ29uZmlnLnRhYmxlVmlldz8ubWluSGVpZ2h0XCI+XHJcblxyXG4gICAgICA8IS0tICAgICAgICBpbmRleC1jb2x1bW4tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4UHJvdmlkZXIuaXNFbmFibGVkXCIgW21hdENvbHVtbkRlZl09XCJpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FXCI+XHJcblxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8bGliLWNvbHVtbi12aWV3IFtjb25maWddPVwiaW5kZXhQcm92aWRlci5oZWFkZXJWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7IGluZGV4UHJvdmlkZXIubmFtZSB9fVxyXG4gICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICB7eyByb3dJbmRleCArIGluZGV4UHJvdmlkZXIub2Zmc2V0IH19XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FKSB8fCAnJyB9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSAgICAgICAgc2VsZWN0aW9uLWNvbHVtbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwic2VsZWN0aW9uUHJvdmlkZXIuQ09MVU1OX05BTUVcIiAqbmdJZj1cInNlbGVjdGlvblByb3ZpZGVyLmlzRW5hYmxlZFwiPlxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dTZWxlY3RlZENvdW50ICYmIHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIHt7IHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggfX1cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dUb3RhbENvdW50ICE9PSBmYWxzZVwiPi97eyB0YWJsZURhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIHRhYmxlQ29uZmlnPy5zZWxlY3Rpb25DZmc/LmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uLmFjdGlvbiwgc2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLnNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24uaWNvbi50b29sdGlwIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdGFibGVDb25maWcuc2VsZWN0aW9uQ2ZnIS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cImFjdGlvbi5pY29uLmNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5pY29uLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5pc1NlbGVjdGVkKGNhc3RTcmMocm93KS5yb3dTcmMpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBhY3Rpb24gY29sdW1uIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93QWN0aW9uc1Byb3ZpZGVyLmlzRW5hYmxlZFwiIFttYXRDb2x1bW5EZWZdPVwicm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FXCI+XHJcbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFJvd0FjdGlvbihhY3Rpb24uYWN0aW9uLCBlbGVtZW50LnJvd1NyYywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImFjdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNQcm92aWRlci5hY3Rpb25WaWV3LmdldChlbGVtZW50LmlkKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cImFjdGlvbi5pY29uLmNvbG9yXCI+XHJcbiAgICAgICAgICAgICAge3sgYWN0aW9uLmljb24ubmFtZSB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogcm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gICAgdmFsdWUtaWNvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW5Db25maWcgb2YgdGFibGVDb25maWcuY29sdW1uc0NmZ1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uQ29uZmlnLmtleVwiPlxyXG5cclxuICAgICAgICA8IS0tIGlmIHNvcnRhYmxlIGNvbHVtbiBoZWFkZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkNvbmZpZy5zb3J0ICYmIGNvbHVtbkNvbmZpZy5zb3J0LmVuYWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0LXNvcnQtaGVhZGVyXT1cImNvbHVtbkNvbmZpZy5rZXlcIlxyXG4gICAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbkNvbmZpZy5zb3J0LnBvc2l0aW9uID09PSAncmlnaHQnID8gJ2JlZm9yZScgOiAnYWZ0ZXInXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJWYWx1ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBlbHNlIG5vdCBzb3J0YWJsZSAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclZhbHVlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICBoZWFkZXIgdmFsdWUtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclZhbHVlPlxyXG4gICAgICAgICAgPGxpYi1jb2x1bW4tdmlldyBbY29uZmlnXT1cImNvbHVtbkNvbmZpZy5oZWFkZXJWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkNvbmZpZy5uYW1lXCI+XHJcbiAgICAgICAgICA8L2xpYi1jb2x1bW4tdmlldz5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIGNvbHVtbiB2YWx1ZSDQv9C+0LvRg9GH0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQutC+0LvQvtC90L7QuiDQvdGD0LbQvdC+INGH0LXRgNC10LcgZ2V0Vmlldyhyb3dJbmRleCwgY29sdW1uQ29uZmlnLmtleSkg0YLQsNC8INC90LDRhdC+0LTRj9GC0YHRjyDRg9C20LVcclxuICAgICAgICDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPLS0+XHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7XCI+XHJcbiAgICAgICAgICA8bGliLWNvbHVtbi12aWV3XHJcbiAgICAgICAgICAgIFtjb25maWddPVwidGFibGVWaWV3W2VsZW1lbnQuaWRdPy5nZXQoY29sdW1uQ29uZmlnLmtleSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudCB8IGRhdGFQcm9wZXJ0eUdldHRlcjogY29sdW1uQ29uZmlnLmtleVwiPlxyXG4gICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5Db25maWcua2V5KSB8fCAnJyB9fVxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiX2Rpc3BsYXlDb2x1bW5zOyAgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8uaGVhZGVyXCI+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDx0ciBtYXQtcm93ICNyb3dMaW5rXHJcbiAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogX2Rpc3BsYXlDb2x1bW5zO1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93KVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3BvaW50ZXInOiB0YWJsZUNvbmZpZy5jbGlja0NmZz8ucG9pbnRlciB8fCBmYWxzZSwgJ25ldy1jb2xvcic6IGhpZ2hsaWdodGVkPT09cm93LnJvd1NyYyAmJiB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmNvbG9yfVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAnY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uY29sb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhpZ2hsaWdodGVkID09PSByb3cucm93U3JjPyB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmJhY2tncm91bmQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYm9yZGVyJzogaGlnaGxpZ2h0ZWQgPT09IHJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uYm9yZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgIDwvdHI+XHJcblxyXG4gICAgICA8IS0tZXhwYW5kZWQtcm93LS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWRSb3dcIj5cclxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFthdHRyLmNvbHNwYW5dPVwiX2Rpc3BsYXlDb2x1bW5zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1kZXRhaWxcIlxyXG4gICAgICAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50LnJvd1NyYyA9PT0gaGlnaGxpZ2h0ZWQgPyBleHBhbmRlZFN0YXRlRW51bS5FWFBBTkRFRCA6IGV4cGFuZGVkU3RhdGVFbnVtLkNPTExBUFNFRFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogZWxlbWVudH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dGVuZGVkUm93VGVtcGxhdGVcIj5cclxuICAgICAgICA8dHIgbWF0LXJvdyBjbGFzcz1cImV4cGFuZGVkLXJvd1wiICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkUm93J11cIj48L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLWV4cGFuZGVkLXJvdy0tPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93UHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJfZGlzcGxheUNvbHVtbnM7IHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LnRvdGFsXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInRvdGFsUm93UHJvdmlkZXIuc3R5bGVcIj48L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1zdWItZm9vdGVyLXJvdy0tPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN1YkZvb3RlclJvd1wiPlxyXG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTdWJGb290ZXJSb3ddXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViRm9vdGVyUm93VGVtcGxhdGVcIj5cclxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3ViRm9vdGVyUm93J107IHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LnN1YkZvb3RlclwiPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1yb3cgRU5ELS0+XHJcblxyXG4gICAgICA8IS0tc3ViLWZvb3Rlci1wYWdpbmF0aW9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3ViRm9vdGVyUGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uUHJvdmlkZXIuc2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25Qcm92aWRlci5zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ0aGlzLnRhYmxlQ29uZmlnPy5wYWdlYWJsZUNmZz8uc3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcblxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Qcm92aWRlci5pc0VuYWJsZWRcIj5cclxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3dcclxuICAgICAgICAgICAgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3ViRm9vdGVyUGFnaW5hdGlvbiddOyBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5zdWJGb290ZXJQYWdpbmF0aW9uXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInRoaXMudGFibGVDb25maWc/LnBhZ2VhYmxlQ2ZnPy5zdHlsZVwiPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1wYWdpbmF0aW9uIEVORC0tPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cclxuXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNmb290ZXJDZWxsVGVtcGxhdGUgbGV0LWNvbHVtbk5hbWU+XHJcbiAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5OYW1lKSB8fCAnJyB9fVxyXG4gIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9uZ3gtYXVyLW1hdC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXVyLW1hdC10YWJsZS9zcmMvbGliL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsT0FBTyxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hGLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXJHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsVUFB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TTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBdUJFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sdW1uVmlldywgVGFibGVDb25maWd9IGZyb20gJy4vbW9kZWwvQ29sdW1uQ29uZmlnJztcclxuaW1wb3J0IHtNYXRTb3J0LCBTb3J0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHtNYXRQYWdpbmF0b3J9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7U2VsZWN0aW9uUHJvdmlkZXIsIFNlbGVjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1NlbGVjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtBY3Rpb25FdmVudCwgUm93QWN0aW9uUHJvdmlkZXIsIFJvd0FjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1Jvd0FjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSBcIi4vbW9kZWwvVGFibGVSb3dcIjtcclxuaW1wb3J0IHtUYWJsZVZpZXdGYWN0b3J5fSBmcm9tIFwiLi9tb2RlbC9UYWJsZVZpZXdGYWN0b3J5XCI7XHJcbmltcG9ydCB7SW5kZXhQcm92aWRlciwgSW5kZXhQcm92aWRlckR1bW15fSBmcm9tIFwiLi9wcm92aWRlcnMvSW5kZXhQcm92aWRlclwiO1xyXG5pbXBvcnQge1BhZ2luYXRpb25Qcm92aWRlciwgUGFnaW5hdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9QYWdpbmF0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2VGYWN0b3J5fSBmcm9tIFwiLi9mYWN0b3JpZXMvTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeVwiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb2x1bW5zRmFjdG9yeX0gZnJvbSBcIi4vZmFjdG9yaWVzL0Rpc3BsYXlDb2x1bW5zRmFjdG9yeVwiO1xyXG5pbXBvcnQge0VtcHR5VmFsdWV9IGZyb20gXCIuL21vZGVsL0VtcHR5VmFsdWVcIjtcclxuaW1wb3J0IHtUb3RhbFJvd1Byb3ZpZGVyLCBUb3RhbFJvd1Byb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9Ub3RhbFJvd1Byb3ZpZGVyXCI7XHJcbmltcG9ydCB7Tmd4QXVyRmlsdGVyc30gZnJvbSBcIi4vZmlsdGVycy9OZ3hBdXJGaWx0ZXJzXCI7XHJcbmltcG9ydCB7Tmd4QXVyTWF0VGFibGVQdWJsaWN9IGZyb20gXCIuL25neC1hdXItbWF0LXRhYmxlLXB1YmxpY1wiO1xyXG5pbXBvcnQge09mZnNldFV0aWx9IGZyb20gXCIuL3V0aWxzL29mZnNldC51dGlsXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQge05neFRhYmxlU3ViRm9vdGVyUm93RGlyZWN0aXZlfSBmcm9tIFwiLi9kaXJlY3RpdmUvbmd4LXRhYmxlLXN1Yi1mb290ZXItcm93LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCI7XHJcbmltcG9ydCB7SGVhZGVyQnV0dG9uUHJvdmlkZXIsIEhlYWRlckJ1dHRvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9IZWFkZXJCdXR0b25Qcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRDb250YWluZXI8VD4ge1xyXG4gIHZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXIsXHJcbiAgd2lkdGg6IG51bWJlcixcclxuICBrZXk6IHN0cmluZ1xyXG59XHJcblxyXG5lbnVtIEV4cGFuZFN0YXRlIHtcclxuICBDT0xMQVBTRUQgPSAnY29sbGFwc2VkJyxcclxuICBFWFBBTkRFRCA9ICdleHBhbmRlZCdcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXItbWF0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZShFeHBhbmRTdGF0ZS5DT0xMQVBTRUQsIHN0eWxlKHtoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJ30pKSxcclxuICAgICAgc3RhdGUoRXhwYW5kU3RhdGUuRVhQQU5ERUQsIHN0eWxlKHtoZWlnaHQ6ICcqJ30pKSxcclxuICAgICAgdHJhbnNpdGlvbihgJHtFeHBhbmRTdGF0ZS5FWFBBTkRFRH0gPD0+ICR7RXhwYW5kU3RhdGUuQ09MTEFQU0VEfWAsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hBdXJNYXRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE5neEF1ck1hdFRhYmxlUHVibGljPFQ+IHtcclxuXHJcbiAgZXhwYW5kZWRTdGF0ZUVudW0gPSBFeHBhbmRTdGF0ZTtcclxuXHJcbiAgcHVibGljIHRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VGFibGVSb3c8VD4+KFtdKTtcclxuICBfZGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgX2N1c3RvbURpc3BsYXlDb2x1bW5zRW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGlzcGxheUNvbHVtbnMoY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIGlmIChjb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuX2Rpc3BsYXlDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICB0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQgPSBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhYmxlVmlldzogTWFwPHN0cmluZywgQ29sdW1uVmlldzxzdHJpbmc+PltdID0gW107XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoTmd4VGFibGVTdWJGb290ZXJSb3dEaXJlY3RpdmUpIHN1YkZvb3RlclJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Jvd0xpbmsnLCB7cmVhZDogRWxlbWVudFJlZn0pIHJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHRhYmxlOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQElucHV0KCkgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnPFQ+O1xyXG5cclxuICBASW5wdXQoKSB0YWJsZURhdGE6IFRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBleHRlbmRlZFJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwge3N0YXRpYzogZmFsc2V9KSBtYXRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7c3RhdGljOiB0cnVlfSkgbWF0U29ydDogTWF0U29ydDtcclxuXHJcbiAgQE91dHB1dCgpIHNvcnQ6IEV2ZW50RW1pdHRlcjxTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gZXZlbnRzIGlmIGVuYWJsZWQgYWN0aW9uc1xyXG4gIEBPdXRwdXQoKSBvblJvd0FjdGlvbjogRXZlbnRFbWl0dGVyPEFjdGlvbkV2ZW50PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uRXZlbnQ8VD4+KCk7XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8gZXZlbnRzIGlmIGVuYWJsZWQgc2VsZWN0IGV2ZW50XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGVzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWRSb3dzQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25FdmVudDxUW10+PigpO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uTW9kZWwgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbk1vZGVsPFQ+PigpO1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG5cclxuICAvKipcclxuICAgKiByZXR1cm4gZmlsdGVyZWQgcm93c1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgY29sdW1uT2Zmc2V0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uT2Zmc2V0W10+KCk7XHJcbiAgcHJpdmF0ZSBwcmV2Q29sdW1uT2Zmc2V0czogQ29sdW1uT2Zmc2V0W10gPSBbXTtcclxuXHJcbiAgaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXJEdW1teSgpO1xyXG4gIEBPdXRwdXQoKSBvbkhlYWRlckJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uT2Zmc2V0c09ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IEVtcHR5VmFsdWUuUkVTSVpFX09CU0VSVkVSO1xyXG5cclxuICBzZWxlY3Rpb25Qcm92aWRlcjogU2VsZWN0aW9uUHJvdmlkZXI8VD4gPSBuZXcgU2VsZWN0aW9uUHJvdmlkZXJEdW1teSgpO1xyXG5cclxuICByb3dBY3Rpb25zUHJvdmlkZXI6IFJvd0FjdGlvblByb3ZpZGVyPFQ+ID0gbmV3IFJvd0FjdGlvblByb3ZpZGVyRHVtbXk8VD4oKTtcclxuXHJcbiAgaW5kZXhQcm92aWRlcjogSW5kZXhQcm92aWRlciA9IG5ldyBJbmRleFByb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgcGFnaW5hdGlvblByb3ZpZGVyOiBQYWdpbmF0aW9uUHJvdmlkZXIgPSBuZXcgUGFnaW5hdGlvblByb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgdG90YWxSb3dQcm92aWRlcjogVG90YWxSb3dQcm92aWRlcjxUPiA9IG5ldyBUb3RhbFJvd1Byb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgaGlnaGxpZ2h0ZWQ6IFQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgY3VzdG9tU29ydEZ1bmN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCAoZGF0YTogVGFibGVSb3c8VD4sIGtleTogc3RyaW5nKSA9PiBhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyU3RvcmFnZSA9IG5ldyBNYXA8c3RyaW5nLCBOZ3hBdXJGaWx0ZXJzLkJhc2U8VD4+KCk7XHJcblxyXG4gIC8v0LfQvdCw0YfQtdC90LjQtSDQv9C10YDQtdC00LDQtdGC0YHRjyDQsiDQutC+0L3RgtC10LnQvdC10YDQtSDQuNC90LDRh9C1IE9uQ2hhbmdlINC90LUg0LLQuNC00LjRgiDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtCz0LTQsCDQv9C10YDQtdC00LDRjtGC0YHRjyDQvtC00LjQvdCw0LrQvtCy0YvQtSDQt9C90LDRh9C10L3QuNC1INC4INC/0L7QtNGB0LLQtdGC0LrQsCDRgdGC0YDQvtC60Lgg0L3QtSDQvtGC0LrQu9GO0YfQsNC10YLRgdGPXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodDogSGlnaGxpZ2h0Q29udGFpbmVyPFQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICgoY2hhbmdlc1sndGFibGVEYXRhJ10gJiYgdGhpcy50YWJsZURhdGEpIHx8IChjaGFuZ2VzWydkaXNwbGF5Q29sdW1ucyddICYmIHRoaXMuX2Rpc3BsYXlDb2x1bW5zKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2hpZ2hsaWdodCddICYmIHRoaXMuaGlnaGxpZ2h0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKHRoaXMuaGlnaGxpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoVGFibGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uUHJvdmlkZXI/LnNlbGVjdGlvbj8uc2VsZWN0ZWQgPz8gW107XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhIHx8IFtdO1xyXG4gICAgdGhpcy5wcmVwYXJlVGFibGVEYXRhKHNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKGg6IEhpZ2hsaWdodENvbnRhaW5lcjxUPikge1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWQgPT09IGgudmFsdWUpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodGVkID0gaC52YWx1ZTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyb3cgPT4gcm93LnJvd1NyYyA9PT0gaC52YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yb3dzPy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxyXG4gICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBpbmxpbmU6IFwiY2VudGVyXCJcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5pdCBpbnB1dHMgW3RhYmxlQ29uZmlnXSBpcyBtYW5kYXRvcnkhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB3ZSBuZWVkIHRoaXMsIGluIG9yZGVyIHRvIG1ha2UgcGFnaW5hdGlvbiB3b3JrIHdpdGggKm5nSWZcclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRQYWdpbmF0b3IoKVxyXG4gICAgdGhpcy5pbml0U29ydGluZ0RhdGFBY2Nlc3NvcigpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCkpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRQYWdpbmF0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAoZGF0YSwga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tU29ydEZ1bmN0aW9uID0gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLmdldChrZXkpO1xyXG4gICAgICAgIHJldHVybiBjdXN0b21Tb3J0RnVuY3Rpb24gPyBjdXN0b21Tb3J0RnVuY3Rpb24oZGF0YSwga2V5KSA6IGRhdGFba2V5XTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uT2Zmc2V0cygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldHM6IENvbHVtbk9mZnNldFtdID0gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGgnKSlcclxuICAgICAgICAubWFwKChjKSA9PiAoYyBhcyBIVE1MRWxlbWVudCkpXHJcbiAgICAgICAgLm1hcCgoYywgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICBsZWZ0OiBjLm9mZnNldExlZnQsXHJcbiAgICAgICAgICB3aWR0aDogYy5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgIGtleTogdGhpcy5fZGlzcGxheUNvbHVtbnNbaW5kZXhdXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICBpZiAoT2Zmc2V0VXRpbC5hcmVOb3RFcXVhbCh0aGlzLnByZXZDb2x1bW5PZmZzZXRzLCBvZmZzZXRzKSkge1xyXG4gICAgICAgIHRoaXMucHJldkNvbHVtbk9mZnNldHMgPSBvZmZzZXRzO1xyXG4gICAgICAgIHRoaXMuY29sdW1uT2Zmc2V0cy5lbWl0KG9mZnNldHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVUYWJsZURhdGEoaW5pdFNlbGVjdGlvbjogVFtdID0gW10pIHtcclxuICAgIHRoaXMuaW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLmluaXRDdXN0b21Tb3J0RnVuY3Rpb25zTWFwKCk7XHJcbiAgICB0aGlzLmluaXRQYWdpbmF0b3IoKTtcclxuICAgIHRoaXMuaW5pdFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcclxuICAgIHRoaXMuaW5kZXhQcm92aWRlciA9IEluZGV4UHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcpXHJcbiAgICAgIC5hZGRJbmRleENvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucyk7XHJcblxyXG4gICAgdGhpcy5yb3dBY3Rpb25zUHJvdmlkZXIgPSBSb3dBY3Rpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZylcclxuICAgICAgLmFkZEFjdGlvbkNvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucylcclxuICAgICAgLnNldFZpZXcodGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IFNlbGVjdGlvblByb3ZpZGVyLmNyZWF0ZSh0aGlzLnRhYmxlQ29uZmlnLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSwgaW5pdFNlbGVjdGlvbilcclxuICAgICAgLmFkZENoZWNrYm94Q29sdW1uKHRoaXMuX2Rpc3BsYXlDb2x1bW5zKVxyXG4gICAgICAuYmluZEV2ZW50RW1pdHRlcnModGhpcy5zZWxlY3RlZCwgdGhpcy5vblNlbGVjdCwgdGhpcy5vbkRlc2VsZWN0LCB0aGlzLnNlbGVjdGlvbk1vZGVsKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25Qcm92aWRlciA9IFBhZ2luYXRpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy50b3RhbFJvd1Byb3ZpZGVyID0gVG90YWxSb3dQcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZywgdGhpcy50YWJsZURhdGFTb3VyY2UpXHJcbiAgICAgIC5zZXRTdHlsZSgpXHJcbiAgICAgIC5zZXRUb3RhbFJvdygpO1xyXG5cclxuICAgIHRoaXMuaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXIodGhpcy50YWJsZUNvbmZpZy50YWJsZUhlYWRlckJ1dHRvbkNmZylcclxuXHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJlZFZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q3VzdG9tU29ydEZ1bmN0aW9uc01hcCgpIHtcclxuICAgIHRoaXMudGFibGVDb25maWcuY29sdW1uc0NmZ1xyXG4gICAgICAuZmlsdGVyKGMgPT4gYy5zb3J0ICYmIGMuc29ydC5lbmFibGUgJiYgYy5zb3J0LmN1c3RvbVNvcnQpXHJcbiAgICAgIC5mb3JFYWNoKGMgPT4gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLnNldChjLmtleSwgYy5zb3J0IS5jdXN0b21Tb3J0ISkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJsZSgpIHtcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeS5jb252ZXJ0KHRoaXMudGFibGVEYXRhLCB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNDZmcpO1xyXG4gICAgdGhpcy50YWJsZVZpZXcgPSBUYWJsZVZpZXdGYWN0b3J5LnRvVmlldyh0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLCB0aGlzLnRhYmxlQ29uZmlnKVxyXG4gICAgaWYgKCF0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5fZGlzcGxheUNvbHVtbnMgPSBEaXNwbGF5Q29sdW1uc0ZhY3RvcnkuY3JlYXRlKHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWFyY2hGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuZW1pdEZpbHRlcmVkVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yYWdlLmRlbGV0ZShmaWx0ZXJOYW1lKTtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNJbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZywgZmlsdGVyOiBOZ3hBdXJGaWx0ZXJzLkJhc2U8VD4pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJTdG9yYWdlLmdldChmaWx0ZXJOYW1lKSB8fCAoIXRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkhLmVxdWFscyhmaWx0ZXIpKSkge1xyXG4gICAgICB0aGlzLmZpbHRlclN0b3JhZ2Uuc2V0KGZpbHRlck5hbWUsIGZpbHRlcik7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlclN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJBY3Rpb25zID0gWy4uLnRoaXMuZmlsdGVyU3RvcmFnZS52YWx1ZXMoKV07XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmlsdGVyQWN0aW9ucy5ldmVyeShmaWx0ZXJBY3Rpb24gPT4gZmlsdGVyQWN0aW9uLmZpbHRlckZuKCkoZGF0YSkpO1xyXG4gICAgfTtcclxuICAgIC8vINCf0YDQuNC80LXQvdC10L3QuNC1INGE0LjQu9GM0YLRgNCw0YbQuNC4LiDQvdGD0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0YPQvdC40LrQsNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRh9GC0L7QsdGLINGE0LjQu9GM0YLRgNCw0YbQuNGPINC30LDQv9GD0YHRgtC40LvQsNGB0YxcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlciA9ICd0cmlnZ2VyLScgKyBNYXRoLnJhbmRvbSgpO1xyXG4gICAgdGhpcy5lbWl0RmlsdGVyZWRWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEZpbHRlcmVkVmFsdWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlcmVkRGF0YS5tYXAoZiA9PiBmLnJvd1NyYykpXHJcbiAgfVxyXG5cclxuICBzb3J0VGFibGUoc29ydFBhcmFtZXRlcnM6IFNvcnQpIHtcclxuICAgIHRoaXMuc29ydC5lbWl0KHNvcnRQYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIGVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHJvd3M6IFRbXSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93c0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3dzfSk7XHJcbiAgfVxyXG5cclxuICBlbWl0Um93QWN0aW9uKGFjdGlvbjogc3RyaW5nLCByb3c6IFQsICRldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vblJvd0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3d9KTtcclxuICB9XHJcblxyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIubWFzdGVyVG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIuaXNBbGxTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2FzdFNyYyhyb3c6IGFueSk6IFRhYmxlUm93PFQ+IHtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfVxyXG5cclxuICByb3dDbGljayhyb3c6IFRhYmxlUm93PFQ+KSB7XHJcbiAgICBpZiAocm93LnJvd1NyYyAhPT0gdGhpcy5oaWdobGlnaHRlZCB8fCAocm93LnJvd1NyYyA9PT0gdGhpcy5oaWdobGlnaHRlZCAmJiAhdGhpcy50YWJsZUNvbmZpZy5jbGlja0NmZz8uY2FuY2VsYWJsZSkpIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93LnJvd1NyYyk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSByb3cucm93U3JjO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5oaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25Nb2RlbCgpOiBTZWxlY3Rpb25Nb2RlbDxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhvdmVyVGltZXI6IGFueSA9IG51bGw7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaG92ZXJUaW1lcik7XHJcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbk9mZnNldHNPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImF1ci1tYXQtdGFibGVcIj5cclxuICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gRmlsdGVyIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnLmZpbHRlckNmZ1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyB0YWJsZUNvbmZpZy5maWx0ZXJDZmc/LmxhYmVsIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseVNlYXJjaEZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3RhYmxlQ29uZmlnLmZpbHRlckNmZz8ucGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJoZWFkZXJCdXR0b25Qcm92aWRlci5pc0VuYWJsZWRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtc2V0dGluZ3MtYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyQnV0dG9uUHJvdmlkZXIuY29sb3JcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImhlYWRlckJ1dHRvblByb3ZpZGVyLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkhlYWRlckJ1dHRvbi5lbWl0KCRldmVudClcIj5cclxuICAgICAge3sgaGVhZGVyQnV0dG9uUHJvdmlkZXIuaWNvbiB9fVxyXG4gICAgPC9tYXQtaWNvbj5cclxuXHJcbiAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgPHRhYmxlICN0YWJsZSBtYXQtdGFibGUgbWF0U29ydFxyXG4gICAgICAgICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSAhPT0gbnVsbFwiXHJcbiAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCJcclxuICAgICAgICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0VGFibGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJ0YWJsZUNvbmZpZy50YWJsZVZpZXc/LmhlaWdodFwiXHJcbiAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5tYXhIZWlnaHRcIlxyXG4gICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cInRhYmxlQ29uZmlnLnRhYmxlVmlldz8ubWluSGVpZ2h0XCI+XHJcblxyXG4gICAgICA8IS0tICAgICAgICBpbmRleC1jb2x1bW4tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4UHJvdmlkZXIuaXNFbmFibGVkXCIgW21hdENvbHVtbkRlZl09XCJpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FXCI+XHJcblxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8bGliLWNvbHVtbi12aWV3IFtjb25maWddPVwiaW5kZXhQcm92aWRlci5oZWFkZXJWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7IGluZGV4UHJvdmlkZXIubmFtZSB9fVxyXG4gICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICB7eyByb3dJbmRleCArIGluZGV4UHJvdmlkZXIub2Zmc2V0IH19XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FKSB8fCAnJyB9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSAgICAgICAgc2VsZWN0aW9uLWNvbHVtbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwic2VsZWN0aW9uUHJvdmlkZXIuQ09MVU1OX05BTUVcIiAqbmdJZj1cInNlbGVjdGlvblByb3ZpZGVyLmlzRW5hYmxlZFwiPlxyXG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dTZWxlY3RlZENvdW50ICYmIHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIHt7IHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggfX1cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dUb3RhbENvdW50ICE9PSBmYWxzZVwiPi97eyB0YWJsZURhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIHRhYmxlQ29uZmlnPy5zZWxlY3Rpb25DZmc/LmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uLmFjdGlvbiwgc2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLnNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24uaWNvbi50b29sdGlwIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdGFibGVDb25maWcuc2VsZWN0aW9uQ2ZnIS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cImFjdGlvbi5pY29uLmNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5pY29uLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5pc1NlbGVjdGVkKGNhc3RTcmMocm93KS5yb3dTcmMpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBhY3Rpb24gY29sdW1uIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93QWN0aW9uc1Byb3ZpZGVyLmlzRW5hYmxlZFwiIFttYXRDb2x1bW5EZWZdPVwicm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FXCI+XHJcbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFJvd0FjdGlvbihhY3Rpb24uYWN0aW9uLCBlbGVtZW50LnJvd1NyYywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImFjdGlvbi5pY29uLnRvb2x0aXAgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNQcm92aWRlci5hY3Rpb25WaWV3LmdldChlbGVtZW50LmlkKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cImFjdGlvbi5pY29uLmNvbG9yXCI+XHJcbiAgICAgICAgICAgICAge3sgYWN0aW9uLmljb24ubmFtZSB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogcm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gICAgdmFsdWUtaWNvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW5Db25maWcgb2YgdGFibGVDb25maWcuY29sdW1uc0NmZ1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uQ29uZmlnLmtleVwiPlxyXG5cclxuICAgICAgICA8IS0tIGlmIHNvcnRhYmxlIGNvbHVtbiBoZWFkZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkNvbmZpZy5zb3J0ICYmIGNvbHVtbkNvbmZpZy5zb3J0LmVuYWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0LXNvcnQtaGVhZGVyXT1cImNvbHVtbkNvbmZpZy5rZXlcIlxyXG4gICAgICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbkNvbmZpZy5zb3J0LnBvc2l0aW9uID09PSAncmlnaHQnID8gJ2JlZm9yZScgOiAnYWZ0ZXInXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJWYWx1ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBlbHNlIG5vdCBzb3J0YWJsZSAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclZhbHVlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICBoZWFkZXIgdmFsdWUtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclZhbHVlPlxyXG4gICAgICAgICAgPGxpYi1jb2x1bW4tdmlldyBbY29uZmlnXT1cImNvbHVtbkNvbmZpZy5oZWFkZXJWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkNvbmZpZy5uYW1lXCI+XHJcbiAgICAgICAgICA8L2xpYi1jb2x1bW4tdmlldz5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIGNvbHVtbiB2YWx1ZSDQv9C+0LvRg9GH0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQutC+0LvQvtC90L7QuiDQvdGD0LbQvdC+INGH0LXRgNC10LcgZ2V0Vmlldyhyb3dJbmRleCwgY29sdW1uQ29uZmlnLmtleSkg0YLQsNC8INC90LDRhdC+0LTRj9GC0YHRjyDRg9C20LVcclxuICAgICAgICDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPLS0+XHJcbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7XCI+XHJcbiAgICAgICAgICA8bGliLWNvbHVtbi12aWV3XHJcbiAgICAgICAgICAgIFtjb25maWddPVwidGFibGVWaWV3W2VsZW1lbnQuaWRdPy5nZXQoY29sdW1uQ29uZmlnLmtleSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudCB8IGRhdGFQcm9wZXJ0eUdldHRlcjogY29sdW1uQ29uZmlnLmtleVwiPlxyXG4gICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5Db25maWcua2V5KSB8fCAnJyB9fVxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiX2Rpc3BsYXlDb2x1bW5zOyAgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8uaGVhZGVyXCIgY2xhc3M9XCJlbmJsXCI+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDx0ciBtYXQtcm93ICNyb3dMaW5rXHJcbiAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogX2Rpc3BsYXlDb2x1bW5zO1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93KVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3BvaW50ZXInOiB0YWJsZUNvbmZpZy5jbGlja0NmZz8ucG9pbnRlciB8fCBmYWxzZSwgJ25ldy1jb2xvcic6IGhpZ2hsaWdodGVkPT09cm93LnJvd1NyYyAmJiB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmNvbG9yfVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAnY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uY29sb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhpZ2hsaWdodGVkID09PSByb3cucm93U3JjPyB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmJhY2tncm91bmQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYm9yZGVyJzogaGlnaGxpZ2h0ZWQgPT09IHJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uYm9yZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgIDwvdHI+XHJcblxyXG4gICAgICA8IS0tZXhwYW5kZWQtcm93LS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWRSb3dcIj5cclxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFthdHRyLmNvbHNwYW5dPVwiX2Rpc3BsYXlDb2x1bW5zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1kZXRhaWxcIlxyXG4gICAgICAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50LnJvd1NyYyA9PT0gaGlnaGxpZ2h0ZWQgPyBleHBhbmRlZFN0YXRlRW51bS5FWFBBTkRFRCA6IGV4cGFuZGVkU3RhdGVFbnVtLkNPTExBUFNFRFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogZWxlbWVudH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dGVuZGVkUm93VGVtcGxhdGVcIj5cclxuICAgICAgICA8dHIgbWF0LXJvdyBjbGFzcz1cImV4cGFuZGVkLXJvd1wiICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkUm93J11cIj48L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLWV4cGFuZGVkLXJvdy0tPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93UHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJfZGlzcGxheUNvbHVtbnM7IHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LnRvdGFsXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInRvdGFsUm93UHJvdmlkZXIuc3R5bGVcIj48L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS1zdWItZm9vdGVyLXJvdy0tPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN1YkZvb3RlclJvd1wiPlxyXG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTdWJGb290ZXJSb3ddXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViRm9vdGVyUm93VGVtcGxhdGVcIj5cclxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3ViRm9vdGVyUm93J107IHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LnN1YkZvb3RlclwiPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1yb3cgRU5ELS0+XHJcblxyXG4gICAgICA8IS0tc3ViLWZvb3Rlci1wYWdpbmF0aW9uLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3ViRm9vdGVyUGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uUHJvdmlkZXIuc2l6ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25Qcm92aWRlci5zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ0aGlzLnRhYmxlQ29uZmlnPy5wYWdlYWJsZUNmZz8uc3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcblxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Qcm92aWRlci5pc0VuYWJsZWRcIj5cclxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3dcclxuICAgICAgICAgICAgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3ViRm9vdGVyUGFnaW5hdGlvbiddOyBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5zdWJGb290ZXJQYWdpbmF0aW9uXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInRoaXMudGFibGVDb25maWc/LnBhZ2VhYmxlQ2ZnPy5zdHlsZVwiPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1wYWdpbmF0aW9uIEVORC0tPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cclxuXHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNmb290ZXJDZWxsVGVtcGxhdGUgbGV0LWNvbHVtbk5hbWU+XHJcbiAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cclxuICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5OYW1lKSB8fCAnJyB9fVxyXG4gIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -774,7 +774,7 @@ class NgxAurMatTableComponent {
774
774
  this.resizeColumnOffsetsObserver.disconnect();
775
775
  }
776
776
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxAurMatTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
777
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NgxAurMatTableComponent, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", highlight: "highlight" }, outputs: { sort: "sort", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important;background-color:#f8f8f8}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "pipe", type: DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
777
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NgxAurMatTableComponent, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", highlight: "highlight" }, outputs: { sort: "sort", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\" class=\"enbl\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "pipe", type: DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
778
778
  trigger('detailExpand', [
779
779
  state(ExpandState.COLLAPSED, style({ height: '0px', minHeight: '0' })),
780
780
  state(ExpandState.EXPANDED, style({ height: '*' })),
@@ -790,7 +790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
790
790
  state(ExpandState.EXPANDED, style({ height: '*' })),
791
791
  transition(`${ExpandState.EXPANDED} <=> ${ExpandState.COLLAPSED}`, animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
792
792
  ]),
793
- ], template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important;background-color:#f8f8f8}\n"] }]
793
+ ], template: "<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\" class=\"enbl\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table table{width:100%;border-collapse:collapse}.aur-mat-table th,td{padding-right:10px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:16px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px}.mat-mdc-header-row th:last-child{padding-right:25px!important}\n"] }]
794
794
  }], ctorParameters: () => [], propDecorators: { displayColumns: [{
795
795
  type: Input
796
796
  }], subFooterRowTemplate: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-aur-mat-table.mjs","sources":["../../../projects/ngx-aur-mat-table/src/lib/utils/ngx-aur-table-config.util.ts","../../../projects/ngx-aur-mat-table/src/lib/model/EmptyValue.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/AbstractProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/SelectionProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/ActionViewFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/RowActionProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/model/TableViewFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/IndexProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/PaginationProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/model/TableRow.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/TableRowsFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/MatTableDataSourceFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/DisplayColumnsFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/TotalRowProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/utils/offset.util.ts","../../../projects/ngx-aur-mat-table/src/lib/directive/ngx-table-sub-footer-row.directive.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/HeaderButtonProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/components/column-value/column-view.component.ts","../../../projects/ngx-aur-mat-table/src/lib/components/column-value/column-view.component.html","../../../projects/ngx-aur-mat-table/src/lib/data-property-getter-pipe/data-property-getter.pipe.ts","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.component.ts","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.component.html","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.module.ts","../../../projects/ngx-aur-mat-table/src/lib/style-builder/style-builder.ts","../../../projects/ngx-aur-mat-table/src/lib/filters/NgxAurFilters.ts","../../../projects/ngx-aur-mat-table/src/public-api.ts","../../../projects/ngx-aur-mat-table/src/ngx-aur-mat-table.ts"],"sourcesContent":["import {ColumnConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {SelectionProvider} from \"../providers/SelectionProvider\";\r\nimport {IndexProvider} from \"../providers/IndexProvider\";\r\nimport {RowActionProvider} from \"../providers/RowActionProvider\";\r\n\r\nexport class NgxAurTableConfigUtil {\r\n\r\n public static keys(config: TableConfig<any>): string[] {\r\n return this.columnCfgs(config).map(c => c.key);\r\n }\r\n\r\n private static columnCfgs(config: TableConfig<any>): ColumnConfig<any>[] {\r\n return config.columnsCfg;\r\n }\r\n\r\n /**\r\n * @return Map where the key is 'key' and the value is 'name'\r\n */\r\n public static keyNameMap(config: TableConfig<any>): Map<string, string> {\r\n return new Map(this.columnCfgs(config).map(cfg => [cfg.key, cfg.name]));\r\n }\r\n}\r\n","import {ActionConfig, IndexConfig, PaginationConfig, SelectionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\n\r\nexport class EmptyValue {\r\n\r\n public static readonly SELECTION_CONFIG: SelectionConfig = {\r\n enable: false,\r\n }\r\n\r\n public static readonly ACTION_CONFIG: ActionConfig<any> = {\r\n enable: false,\r\n actions: []\r\n }\r\n\r\n public static readonly INDEX_CONFIG: IndexConfig = {\r\n enable: false,\r\n }\r\n\r\n public static readonly PAGINATION_CONFIG: PaginationConfig = {\r\n enable: false,\r\n size: 0,\r\n sizes: []\r\n }\r\n\r\n\r\n public static readonly TABLE_CONFIG: TableConfig<any> = {\r\n columnsCfg: [],\r\n selectionCfg: EmptyValue.SELECTION_CONFIG,\r\n actionCfg: EmptyValue.ACTION_CONFIG,\r\n indexCfg: EmptyValue.INDEX_CONFIG,\r\n pageableCfg: EmptyValue.PAGINATION_CONFIG\r\n }\r\n\r\n public static readonly MAT_TABLE_DATA_SOURCE: MatTableDataSource<TableRow<any>> = new MatTableDataSource();\r\n\r\n public static readonly RESIZE_OBSERVER = new ResizeObserver(() => {\r\n })\r\n}\r\n","export class AbstractProvider {\r\n\r\n protected hasKey(key: string, keys: string[]): boolean {\r\n return keys.some(k => k === key);\r\n }\r\n\r\n protected notHasKey(key: string, keys: string[]): boolean {\r\n return !this.hasKey(key, keys);\r\n }\r\n}\r\n","import {SelectionModel} from '@angular/cdk/collections';\r\nimport {MatTableDataSource} from '@angular/material/table';\r\nimport {EventEmitter} from '@angular/core';\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {SelectionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class SelectionProvider<T> extends AbstractProvider {\r\n public readonly isEnabled = true;\r\n public static readonly COLUMN_NAME = 'tbl_selects';\r\n selection: SelectionModel<T>;\r\n config: SelectionConfig;\r\n tableDataSource: MatTableDataSource<TableRow<T>>;\r\n\r\n constructor(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>, initSelection: T[]) {\r\n super();\r\n this.config = tableConfig?.selectionCfg || EmptyValue.SELECTION_CONFIG;\r\n this.selection = new SelectionModel<T>(this.config.multiple, initSelection);\r\n this.tableDataSource = tableDataSource;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return SelectionProvider.COLUMN_NAME;\r\n }\r\n\r\n public addCheckboxColumn(columns: string[]): SelectionProvider<T> {\r\n if (this.hasKey(this.COLUMN_NAME, columns)) {\r\n return this;\r\n }\r\n if (this.config.position === 'start') {\r\n columns.unshift(this.COLUMN_NAME);\r\n } else {\r\n columns.push(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n public bindEventEmitters(selected: EventEmitter<T[]>, onSelect: EventEmitter<T[]>, onDeselect: EventEmitter<T[]>, selectionModel: EventEmitter<SelectionModel<T>>): SelectionProvider<T> {\r\n this.selection.changed.subscribe(event => {\r\n if (event.added) {\r\n onSelect.emit(event.added);\r\n }\r\n if (event.removed) {\r\n onDeselect.emit(event.removed);\r\n }\r\n selected.emit(this.selection.selected);\r\n });\r\n selectionModel.emit(this.selection);\r\n return this;\r\n }\r\n\r\n public masterToggle(): void {\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.tableDataSource.filteredData.forEach(row => this.selection.select(row.rowSrc));\r\n }\r\n }\r\n\r\n isAllSelected(): boolean {\r\n const filteredData = this.tableDataSource.filteredData;\r\n const numSelected = this.selection.selected.length;\r\n const numRows = filteredData.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n private static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.selectionCfg && tableConfig.selectionCfg.enable) || false;\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>, initSelection: T[]): SelectionProvider<T> {\r\n if (SelectionProvider.canEnable(tableConfig)) {\r\n return new SelectionProvider(tableConfig, tableDataSource, initSelection);\r\n }\r\n return new SelectionProviderDummy();\r\n }\r\n}\r\n\r\nexport class SelectionProviderDummy<T> extends SelectionProvider<T> {\r\n public override readonly isEnabled = true;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG, EmptyValue.MAT_TABLE_DATA_SOURCE, []);\r\n }\r\n\r\n public override addCheckboxColumn(columns: string[]): SelectionProvider<T> {\r\n return this;\r\n }\r\n\r\n public override bindEventEmitters(selected: EventEmitter<T[]>, onSelect: EventEmitter<T[]>, onDeselect: EventEmitter<T[]>): SelectionProvider<T> {\r\n return this;\r\n }\r\n}\r\n","import {Action, ActionConfig, IconView} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\n\r\nexport class ActionViewFactory {\r\n /**\r\n * Convert rows and actions to a view format.\r\n * @param rows - The data rows to be converted.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Map of row IDs to their associated action views.\r\n */\r\n public static create<T>(rows: TableRow<T>[], actionConfig: ActionConfig<T>): Map<number, Action<string>[]> {\r\n const result = new Map<number, Action<string>[]>();\r\n for (const row of rows) {\r\n result.set(row.id, this.prepareActionsForRow(row, actionConfig));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Prepare the actions for a specific row based on the action configuration.\r\n * @param row - The data row for which actions need to be prepared.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Array of actions for the row.\r\n */\r\n private static prepareActionsForRow<T>(row: TableRow<T>, actionConfig: ActionConfig<T>): Action<string>[] {\r\n return actionConfig.actions.map(action => ({\r\n action: action.action(row.rowSrc),\r\n icon: this.prepareIconConfig(action.icon, row.rowSrc)\r\n }));\r\n }\r\n\r\n private static prepareIconConfig<T>(iconSource: IconView<(value: T) => string>, value: T): IconView<string> {\r\n return {\r\n name: iconSource.name(value),\r\n color: iconSource.color ? iconSource.color(value) : undefined,\r\n tooltip: iconSource.tooltip ? iconSource.tooltip(value) : undefined,\r\n position: iconSource.position,\r\n wrapper: iconSource.wrapper ? {color: iconSource.wrapper.color(value)} : undefined\r\n }\r\n }\r\n}\r\n","import {Action, ActionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {ActionViewFactory} from \"../factories/ActionViewFactory\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport interface ActionEvent<T> {\r\n action: string;\r\n value: T;\r\n}\r\n\r\nexport class RowActionProvider<T> extends AbstractProvider {\r\n public static readonly COLUMN_NAME = 'tbl_actions';\r\n public readonly isEnabled: boolean = true;\r\n\r\n private readonly config: ActionConfig<T>;\r\n\r\n // key is rowId\r\n public actionView: Map<number, Action<string>[]> = new Map();\r\n\r\n constructor(tableConfig: TableConfig<T>) {\r\n super();\r\n if (!tableConfig.actionCfg) {\r\n throw new Error(\"Actions is undefined\")\r\n }\r\n this.config = tableConfig.actionCfg;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return RowActionProvider.COLUMN_NAME;\r\n }\r\n\r\n public addActionColumn(columns: string[]): RowActionProvider<T> {\r\n if (!this.config || this.hasKey(this.COLUMN_NAME, columns)) {\r\n return this;\r\n }\r\n if (this.config.position === 'start') {\r\n columns.unshift(this.COLUMN_NAME);\r\n } else {\r\n columns.push(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert rows and actions to a view format.\r\n * @param rows - The data rows to be converted.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Map of row IDs to their associated action views.\r\n */\r\n public setView(rows: TableRow<T>[]): RowActionProvider<T> {\r\n if (!this.config) {\r\n throw new Error(\"ActionConfig is undefined\");\r\n }\r\n this.actionView = ActionViewFactory.create(rows, this.config);\r\n return this;\r\n }\r\n\r\n private static canEnabled<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.actionCfg && (tableConfig.actionCfg.enable === undefined || tableConfig.actionCfg.enable === null || tableConfig.actionCfg.enable)) || false\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>): RowActionProvider<T> {\r\n if (RowActionProvider.canEnabled(tableConfig)) {\r\n return new RowActionProvider<T>(tableConfig);\r\n }\r\n return new RowActionProviderDummy<T>();\r\n }\r\n}\r\n\r\nexport class RowActionProviderDummy<T> extends RowActionProvider<T> {\r\n public override readonly isEnabled = false;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG);\r\n }\r\n\r\n public override addActionColumn(columns: string[]): RowActionProviderDummy<T> {\r\n return this;\r\n }\r\n\r\n public override setView(rows: TableRow<T>[]): RowActionProvider<T> {\r\n return this;\r\n }\r\n}\r\n","import {TableRow} from \"./TableRow\";\r\nimport {ColumnView, IconView, TextView, TableConfig, ImageView} from \"./ColumnConfig\";\r\n\r\nexport class TableViewFactory {\r\n\r\n /**\r\n * Converts rows into a view format based on table configuration.\r\n * @param rows The rows of the table.\r\n * @param tableConfig The configuration of the table.\r\n * @returns An array of maps representing the view for each row.\r\n */\r\n public static toView<T>(rows: TableRow<T>[], tableConfig: TableConfig<T>): Map<string, ColumnView<string>>[] {\r\n const columnViewMap = new Map<string, ColumnView<(value: TableRow<T>) => string>>();\r\n tableConfig.columnsCfg.forEach(c => {\r\n if (c.valueView) {\r\n columnViewMap .set(c.key, c.valueView)\r\n }\r\n })\r\n return TableViewFactory.toViewInternal(rows, columnViewMap );\r\n }\r\n\r\n private static toViewInternal<T>(rows: TableRow<T>[], source: Map<string, ColumnView<(value: TableRow<T>) => string>>): Map<string, ColumnView<string>>[] {\r\n return rows.map(row => TableViewFactory.createColumnConfig(row, source));\r\n }\r\n\r\n private static createColumnConfig<T>(row: TableRow<T>, columnViewMap: Map<string, ColumnView<(value: TableRow<T>) => string>>): Map<string, ColumnView<string>> {\r\n const result = new Map<string, ColumnView<string>>();\r\n columnViewMap.forEach((view, key) => {\r\n result.set(key, {\r\n icon: TableViewFactory.configureIcon(view.icon, row),\r\n text: TableViewFactory.configureText(view.text, row),\r\n image: TableViewFactory.configureImage(view.image, row),\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n private static configureIcon<T>(iconSource: IconView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): IconView<string> | undefined {\r\n if (!iconSource) return undefined;\r\n\r\n return {\r\n name: iconSource.name(row),\r\n color: iconSource.color ? iconSource.color(row) : undefined,\r\n tooltip: iconSource.tooltip ? iconSource.tooltip(row) : undefined,\r\n position: iconSource.position,\r\n wrapper: iconSource.wrapper? {color: iconSource.wrapper.color(row)}: undefined\r\n }\r\n }\r\n\r\n private static configureText<T>(textSource: TextView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): TextView<string> | undefined {\r\n if (!textSource) return undefined;\r\n\r\n return {\r\n show: textSource.show,\r\n tooltip: textSource.tooltip?.(row),\r\n color: textSource.color?.(row)\r\n }\r\n }\r\n\r\n private static configureImage<T>(imageSource: ImageView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): ImageView<string> | undefined {\r\n if (!imageSource) return undefined;\r\n\r\n return {\r\n src: imageSource.src(row),\r\n width: imageSource.width || undefined,\r\n height: imageSource.height || undefined\r\n }\r\n }\r\n}\r\n","import {ColumnView, IndexConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\n/**\r\n * Provides functionality to manage the index column in a table.\r\n * The class can handle index configurations and modify the column array to include an index column.\r\n */\r\nexport class IndexProvider extends AbstractProvider {\r\n public readonly isEnabled: boolean = true;\r\n public static readonly COLUMN_NAME = 'tbl_index';\r\n public headerView: ColumnView<string> | undefined;\r\n public name: string;\r\n public offset: number;\r\n\r\n constructor(private indexConfig?: IndexConfig) {\r\n super();\r\n this.headerView = indexConfig?.headerColumn;\r\n this.name = indexConfig?.name || '';\r\n this.offset = indexConfig?.offset || 0;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return IndexProvider.COLUMN_NAME;\r\n }\r\n\r\n /**\r\n * Adds the index column to the beginning of the columns array.\r\n * @param columns The array of column names to which the index column should be added.\r\n * @returns The instance of IndexProvider for method chaining.\r\n */\r\n public addIndexColumn(columns: string[]): IndexProvider {\r\n if (this.notHasKey(this.COLUMN_NAME, columns)) {\r\n columns.unshift(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Factory method to create an instance of IndexProvider based on table configuration.\r\n * Returns a dummy provider if the index is not enabled in the configuration.\r\n * @param tableConfig The configuration of the table.\r\n * @returns An instance of IndexProvider or IndexProviderDummy.\r\n */\r\n public static create<T>(tableConfig: TableConfig<T>): IndexProvider {\r\n if (IndexProvider.canCreate(tableConfig)) {\r\n return new IndexProvider(<IndexConfig>tableConfig.indexCfg);\r\n }\r\n return new IndexProviderDummy();\r\n }\r\n\r\n private static canCreate<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.indexCfg && tableConfig.indexCfg.enable) || false;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * A dummy implementation of IndexProvider that is used when index functionality is not enabled.\r\n * This class overrides certain methods to provide no-operation implementations.\r\n */\r\nexport class IndexProviderDummy extends IndexProvider {\r\n public override readonly isEnabled = false;\r\n\r\n /**\r\n * Overrides the addIndexColumn method to return itself without modifying the columns array.\r\n * @param columns The array of column names.\r\n * @returns The instance of IndexProviderDummy for method chaining.\r\n */\r\n public override addIndexColumn(columns: string[]): IndexProviderDummy {\r\n // No operation performed as the index is not enabled.\r\n return this;\r\n }\r\n}\r\n","import {PaginationConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class PaginationProvider extends AbstractProvider{\r\n public readonly isEnabled: boolean = true;\r\n public sizes: number[];\r\n public size;\r\n\r\n constructor(config: PaginationConfig) {\r\n super();\r\n this.sizes = config.sizes || [5, 10, 15, 25, 50]\r\n this.size = config.size || this.sizes[1];\r\n }\r\n\r\n public static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.pageableCfg && tableConfig.pageableCfg.enable) || false;\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>): PaginationProvider {\r\n if (this.canEnable(tableConfig) && tableConfig.pageableCfg) {\r\n return new PaginationProvider(tableConfig.pageableCfg)\r\n }\r\n return new PaginationProviderDummy()\r\n }\r\n\r\n}\r\n\r\nexport class PaginationProviderDummy extends PaginationProvider {\r\n public override readonly isEnabled: boolean = false;\r\n\r\n constructor() {\r\n super(EmptyValue.PAGINATION_CONFIG);\r\n }\r\n}\r\n","export class TableRow<T> {\r\n id: number;\r\n rowSrc: T;\r\n\r\n [key: string]: any;\r\n\r\n constructor(id: number, rowSrc: T) {\r\n this.rowSrc = rowSrc;\r\n this.id = id;\r\n }\r\n}\r\n","import {ColumnConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\n\r\nexport class TableRowsFactory {\r\n\r\n /**\r\n * Converts an array of data objects into an array of TableRow objects.\r\n * @param data Array of data objects to be converted.\r\n * @param config Configuration settings for each column.\r\n * @returns An array of TableRow objects.\r\n */\r\n public static convert<T>(data: T[], config: ColumnConfig<T>[]): TableRow<T>[] {\r\n return data.map((obj, index) => this.createTableRow(index, obj, config));\r\n }\r\n\r\n private static createTableRow<T>(id: number, obj: T, config: ColumnConfig<T>[]): TableRow<T> {\r\n const row = new TableRow<T>(id, obj);\r\n config.forEach(c => row[c.key] = c.valueConverter(obj));\r\n return row;\r\n }\r\n}\r\n","import {ColumnConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\nimport {TableRowsFactory} from \"./TableRowsFactory\";\r\n\r\nexport class MatTableDataSourceFactory {\r\n /**\r\n * Converts an array of data objects into MatTableDataSource.\r\n * @param data Array of data objects to be converted.\r\n * @param config Configuration settings for each column.\r\n * @returns MatTableDataSource.\r\n */\r\n public static convert<T>(data: T[], config: ColumnConfig<T>[]): MatTableDataSource<TableRow<T>> {\r\n let tableRows = TableRowsFactory.convert(data, config);\r\n return new MatTableDataSource<TableRow<T>>(tableRows);\r\n }\r\n}\r\n","import {ColumnConfig, TableConfig} from \"../model/ColumnConfig\";\r\n\r\nexport class DisplayColumnsFactory {\r\n public static create<T>(tableConfig: TableConfig<T>): string[] {\r\n return tableConfig.columnsCfg.map((tableColumn: ColumnConfig<any>) => tableColumn.key)\r\n }\r\n}\r\n","import {TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class TotalRowProvider<T> extends AbstractProvider {\r\n isEnabled = true;\r\n totals = new Map<string, any>();\r\n style: string | undefined;\r\n\r\n constructor(private tableConfig: TableConfig<T>, private tableDataSource: MatTableDataSource<TableRow<T>>) {\r\n super();\r\n }\r\n\r\n setStyle(): TotalRowProvider<T> {\r\n this.style = this.tableConfig.tableView?.totalRowView?.style;\r\n return this;\r\n }\r\n\r\n setTotalRow(): TotalRowProvider<T> {\r\n this.tableConfig.columnsCfg.forEach(col => {\r\n if (col.totalConverter) {\r\n this.totals.set(col.key, col.totalConverter(this.tableDataSource.data))\r\n }\r\n })\r\n return this;\r\n }\r\n\r\n private static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return tableConfig.columnsCfg.some(col => col.totalConverter);\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>): TotalRowProvider<T> {\r\n if (TotalRowProvider.canEnable(tableConfig)) {\r\n return new TotalRowProvider(tableConfig, tableDataSource);\r\n }\r\n return new TotalRowProviderDummy();\r\n }\r\n}\r\n\r\nexport class TotalRowProviderDummy extends TotalRowProvider<any> {\r\n override isEnabled = false;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG, EmptyValue.MAT_TABLE_DATA_SOURCE);\r\n }\r\n\r\n override setTotalRow(): TotalRowProviderDummy {\r\n return this;\r\n }\r\n\r\n}\r\n","import {ColumnOffset} from \"../ngx-aur-mat-table.component\";\r\n\r\nexport class OffsetUtil {\r\n public static areNotEqual(offsets1: ColumnOffset[], offsets2: ColumnOffset[]): boolean {\r\n if (offsets1.length !== offsets2.length) {\r\n return true;\r\n }\r\n\r\n return offsets1.some((offset, index) => {\r\n const otherOffset = offsets2[index];\r\n return offset.left !== otherOffset.left || offset.width !== otherOffset.width || offset.key !== otherOffset.key;\r\n });\r\n }\r\n}\r\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngxAurTableSubFooterRow]'\n})\nexport class NgxTableSubFooterRowDirective {\n constructor() {}\n}\n","import {AbstractProvider} from \"./AbstractProvider\";\r\nimport {TableHeaderButtonConfig} from \"../model/ColumnConfig\";\r\n\r\nexport class HeaderButtonProvider extends AbstractProvider {\r\n isEnabled: boolean;\r\n icon: string;\r\n color: string;\r\n background: string;\r\n\r\n constructor(cfg?: TableHeaderButtonConfig) {\r\n super();\r\n this.isEnabled = cfg?.enable ?? false;\r\n this.icon = cfg?.icon ?? 'more_vert';\r\n this.color = cfg?.color ?? 'black';\r\n this.background = cfg?.background ?? 'white';\r\n }\r\n}\r\n\r\nexport class HeaderButtonProviderDummy extends HeaderButtonProvider {\r\n constructor() {\r\n super({enable: false});\r\n }\r\n}\r\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ColumnView} from \"../../model/ColumnConfig\";\n\n@Component({\n selector: 'lib-column-view',\n templateUrl: './column-view.component.html',\n styleUrls: ['./column-view.component.css']\n})\nexport class ColumnViewComponent {\n @Input() config: ColumnView<string> | undefined;\n @Input() value: any;\n}\n","<div class=\"align-container\">\n <div [ngClass]=\"{'circle': config?.icon?.wrapper}\"\n [style.background-color]=\"config?.icon?.wrapper?.color\"\n >\n <mat-icon *ngIf=\"config?.icon\"\n [matTooltip]=\"config?.icon?.tooltip?.toString() || ''\"\n [style.color]=\"config?.icon?.color\"\n >\n {{config?.icon?.name}}\n </mat-icon>\n </div>\n\n <img\n *ngIf=\"config?.image?.src\"\n [src]=\"config?.image?.src\"\n [style.height]=\"config?.image?.height\"\n [style.width]=\"config?.image?.width\"\n alt=\"img\"\n >\n\n <span *ngIf=\"config?.text?.show != false\"\n [matTooltip]=\"config?.text?.tooltip?.toString() || ''\"\n >\n {{value}}\n </span>\n</div>\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'dataPropertyGetter'\r\n})\r\nexport class DataPropertyGetterPipe implements PipeTransform {\r\n\r\n transform(object: any, keyName: string, ...args: unknown[]): unknown {\r\n return object[keyName];\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewChecked,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {ColumnView, TableConfig} from './model/ColumnConfig';\r\nimport {MatSort, Sort} from '@angular/material/sort';\r\nimport {MatTableDataSource} from '@angular/material/table';\r\nimport {MatPaginator} from '@angular/material/paginator';\r\nimport {SelectionProvider, SelectionProviderDummy} from './providers/SelectionProvider';\r\nimport {ActionEvent, RowActionProvider, RowActionProviderDummy} from './providers/RowActionProvider';\r\nimport {TableRow} from \"./model/TableRow\";\r\nimport {TableViewFactory} from \"./model/TableViewFactory\";\r\nimport {IndexProvider, IndexProviderDummy} from \"./providers/IndexProvider\";\r\nimport {PaginationProvider, PaginationProviderDummy} from \"./providers/PaginationProvider\";\r\nimport {MatTableDataSourceFactory} from \"./factories/MatTableDataSourceFactory\";\r\nimport {DisplayColumnsFactory} from \"./factories/DisplayColumnsFactory\";\r\nimport {EmptyValue} from \"./model/EmptyValue\";\r\nimport {TotalRowProvider, TotalRowProviderDummy} from \"./providers/TotalRowProvider\";\r\nimport {NgxAurFilters} from \"./filters/NgxAurFilters\";\r\nimport {NgxAurMatTablePublic} from \"./ngx-aur-mat-table-public\";\r\nimport {OffsetUtil} from \"./utils/offset.util\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\nimport {NgxTableSubFooterRowDirective} from \"./directive/ngx-table-sub-footer-row.directive\";\r\nimport {SelectionModel} from \"@angular/cdk/collections\";\r\nimport {HeaderButtonProvider, HeaderButtonProviderDummy} from \"./providers/HeaderButtonProvider\";\r\n\r\nexport interface HighlightContainer<T> {\r\n value: any;\r\n}\r\n\r\nexport interface ColumnOffset {\r\n left: number,\r\n width: number,\r\n key: string\r\n}\r\n\r\nenum ExpandState {\r\n COLLAPSED = 'collapsed',\r\n EXPANDED = 'expanded'\r\n}\r\n\r\n@Component({\r\n selector: 'aur-mat-table',\r\n templateUrl: './ngx-aur-mat-table.component.html',\r\n styleUrls: ['./ngx-aur-mat-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(ExpandState.COLLAPSED, style({height: '0px', minHeight: '0'})),\r\n state(ExpandState.EXPANDED, style({height: '*'})),\r\n transition(`${ExpandState.EXPANDED} <=> ${ExpandState.COLLAPSED}`, animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n})\r\nexport class NgxAurMatTableComponent<T> implements OnInit, OnChanges, AfterViewInit, AfterViewChecked, OnDestroy, NgxAurMatTablePublic<T> {\r\n\r\n expandedStateEnum = ExpandState;\r\n\r\n public tableDataSource = new MatTableDataSource<TableRow<T>>([]);\r\n _displayColumns: string[] = [];\r\n _customDisplayColumnsEnabled = false;\r\n\r\n @Input() set displayColumns(columns: string[]) {\r\n if (columns) {\r\n this._displayColumns = [...columns];\r\n this._customDisplayColumnsEnabled = columns && columns.length > 0;\r\n }\r\n }\r\n\r\n tableView: Map<string, ColumnView<string>>[] = [];\r\n\r\n @ContentChild(NgxTableSubFooterRowDirective) subFooterRowTemplate: TemplateRef<any> | null | undefined;\r\n\r\n // @ts-ignore\r\n @ViewChildren('rowLink', {read: ElementRef}) rows: QueryList<ElementRef>;\r\n // @ts-ignore\r\n @ViewChild('table', {read: ElementRef}) table: ElementRef;\r\n\r\n // @ts-ignore\r\n @Input() tableConfig: TableConfig<T>;\r\n\r\n @Input() tableData: T[] = [];\r\n\r\n @Input() extendedRowTemplate: TemplateRef<any> | null = null;\r\n\r\n // @ts-ignore\r\n @ViewChild(MatPaginator, {static: false}) matPaginator: MatPaginator;\r\n // @ts-ignore\r\n @ViewChild(MatSort, {static: true}) matSort: MatSort;\r\n\r\n @Output() sort: EventEmitter<Sort> = new EventEmitter();\r\n\r\n // events if enabled actions\r\n @Output() onRowAction: EventEmitter<ActionEvent<T>> = new EventEmitter<ActionEvent<T>>();\r\n // -----------------------\r\n\r\n // events if enabled select event\r\n @Output() selected = new EventEmitter<T[]>();\r\n @Output() onSelect = new EventEmitter<T[]>();\r\n @Output() onDeselect = new EventEmitter<T[]>();\r\n\r\n @Output() onSelectedRowsAction = new EventEmitter<ActionEvent<T[]>>();\r\n\r\n @Output() selectionModel = new EventEmitter<SelectionModel<T>>();\r\n //------------------------\r\n\r\n @Output() onRowClick = new EventEmitter<T>();\r\n\r\n /**\r\n * return filtered rows\r\n */\r\n @Output() onFilter = new EventEmitter<T[]>();\r\n\r\n @Output() columnOffsets = new EventEmitter<ColumnOffset[]>();\r\n private prevColumnOffsets: ColumnOffset[] = [];\r\n\r\n headerButtonProvider = new HeaderButtonProviderDummy();\r\n @Output() onHeaderButton = new EventEmitter<MouseEvent>();\r\n\r\n // @ts-ignore\r\n private resizeColumnOffsetsObserver: ResizeObserver = EmptyValue.RESIZE_OBSERVER;\r\n\r\n selectionProvider: SelectionProvider<T> = new SelectionProviderDummy();\r\n\r\n rowActionsProvider: RowActionProvider<T> = new RowActionProviderDummy<T>();\r\n\r\n indexProvider: IndexProvider = new IndexProviderDummy();\r\n\r\n paginationProvider: PaginationProvider = new PaginationProviderDummy();\r\n\r\n totalRowProvider: TotalRowProvider<T> = new TotalRowProviderDummy();\r\n\r\n highlighted: T | undefined;\r\n\r\n private customSortFunctions = new Map<string, (data: TableRow<T>, key: string) => any>();\r\n\r\n private filterStorage = new Map<string, NgxAurFilters.Base<T>>();\r\n\r\n //значение передается в контейнере иначе OnChange не видит изменений когда передаются одинаковые значение и подсветка строки не отключается\r\n // @ts-ignore\r\n @Input() highlight: HighlightContainer<T> | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['tableData'] && this.tableData) || (changes['displayColumns'] && this._displayColumns)) {\r\n this.refreshTable();\r\n }\r\n if (changes['highlight'] && this.highlight) {\r\n this.handleHighlightChange(this.highlight);\r\n }\r\n }\r\n\r\n public refreshTable() {\r\n const selected = this.selectionProvider?.selection?.selected ?? [];\r\n this.tableData = this.tableData || [];\r\n this.prepareTableData(selected);\r\n }\r\n\r\n private handleHighlightChange(h: HighlightContainer<T>) {\r\n if (this.highlighted === h.value) {\r\n this.highlight = undefined;\r\n this.highlighted = undefined;\r\n } else {\r\n this.highlighted = h.value;\r\n const index = this.tableDataSource.data.findIndex(row => row.rowSrc === h.value);\r\n if (index >= 0) {\r\n this.rows?.toArray()[index]?.nativeElement.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"center\",\r\n inline: \"center\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.tableConfig) {\r\n throw new Error(\"init inputs [tableConfig] is mandatory!\")\r\n }\r\n }\r\n\r\n // we need this, in order to make pagination work with *ngIf\r\n ngAfterViewInit(): void {\r\n this.initPaginator()\r\n this.initSortingDataAccessor();\r\n this.resizeColumnOffsetsObserver = new ResizeObserver(() => this.updateColumnOffsets());\r\n this.resizeColumnOffsetsObserver.observe(this.table.nativeElement);\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.updateColumnOffsets();\r\n }\r\n\r\n private initPaginator(): void {\r\n if (this.tableDataSource) {\r\n this.tableDataSource.paginator = this.matPaginator;\r\n }\r\n }\r\n\r\n private initSortingDataAccessor(): void {\r\n if (this.tableDataSource) {\r\n this.tableDataSource.sort = this.matSort;\r\n this.tableDataSource.sortingDataAccessor = (data, key) => {\r\n const customSortFunction = this.customSortFunctions.get(key);\r\n return customSortFunction ? customSortFunction(data, key) : data[key];\r\n };\r\n }\r\n }\r\n\r\n private updateColumnOffsets() {\r\n if (this.table?.nativeElement?.querySelectorAll('th')) {\r\n const offsets: ColumnOffset[] = Array.from(this.table.nativeElement.querySelectorAll('th'))\r\n .map((c) => (c as HTMLElement))\r\n .map((c, index) => ({\r\n left: c.offsetLeft,\r\n width: c.offsetWidth,\r\n key: this._displayColumns[index]\r\n }));\r\n if (OffsetUtil.areNotEqual(this.prevColumnOffsets, offsets)) {\r\n this.prevColumnOffsets = offsets;\r\n this.columnOffsets.emit(offsets);\r\n }\r\n }\r\n }\r\n\r\n private prepareTableData(initSelection: T[] = []) {\r\n this.initTable();\r\n this.initCustomSortFunctionsMap();\r\n this.initPaginator();\r\n this.initSortingDataAccessor();\r\n this.indexProvider = IndexProvider.create(this.tableConfig)\r\n .addIndexColumn(this._displayColumns);\r\n\r\n this.rowActionsProvider = RowActionProvider.create(this.tableConfig)\r\n .addActionColumn(this._displayColumns)\r\n .setView(this.tableDataSource.data);\r\n\r\n this.selectionProvider = SelectionProvider.create(this.tableConfig, this.tableDataSource, initSelection)\r\n .addCheckboxColumn(this._displayColumns)\r\n .bindEventEmitters(this.selected, this.onSelect, this.onDeselect, this.selectionModel);\r\n\r\n this.paginationProvider = PaginationProvider.create(this.tableConfig);\r\n\r\n this.totalRowProvider = TotalRowProvider.create(this.tableConfig, this.tableDataSource)\r\n .setStyle()\r\n .setTotalRow();\r\n\r\n this.headerButtonProvider = new HeaderButtonProvider(this.tableConfig.tableHeaderButtonCfg)\r\n\r\n this.emitFilteredValues();\r\n }\r\n\r\n private initCustomSortFunctionsMap() {\r\n this.tableConfig.columnsCfg\r\n .filter(c => c.sort && c.sort.enable && c.sort.customSort)\r\n .forEach(c => this.customSortFunctions.set(c.key, c.sort!.customSort!))\r\n }\r\n\r\n private initTable() {\r\n this.tableDataSource = MatTableDataSourceFactory.convert(this.tableData, this.tableConfig.columnsCfg);\r\n this.tableView = TableViewFactory.toView(this.tableDataSource.data, this.tableConfig)\r\n if (!this._customDisplayColumnsEnabled) {\r\n this._displayColumns = DisplayColumnsFactory.create(this.tableConfig);\r\n }\r\n }\r\n\r\n applySearchFilter(event: Event) {\r\n const filterValue = (event.target as HTMLInputElement).value;\r\n this.tableDataSource.filter = filterValue.trim().toLowerCase();\r\n this.emitFilteredValues();\r\n }\r\n\r\n public removeFilter(filterName: string) {\r\n if (this.filterStorage.get(filterName)) {\r\n this.filterStorage.delete(filterName);\r\n this.applyFiltersInternal();\r\n }\r\n }\r\n\r\n public applyFilter(filterName: string, filter: NgxAurFilters.Base<T>): void {\r\n if (!this.filterStorage.get(filterName) || (!this.filterStorage.get(filterName)!.equals(filter))) {\r\n this.filterStorage.set(filterName, filter);\r\n this.applyFiltersInternal();\r\n }\r\n }\r\n\r\n public clearFilters() {\r\n this.filterStorage.clear();\r\n this.applyFiltersInternal();\r\n }\r\n\r\n private applyFiltersInternal() {\r\n const filterActions = [...this.filterStorage.values()];\r\n this.tableDataSource.filterPredicate = (data) => {\r\n return filterActions.every(filterAction => filterAction.filterFn()(data));\r\n };\r\n // Применение фильтрации. нужно передать уникальное значение чтобы фильтрация запустилась\r\n this.tableDataSource.filter = 'trigger-' + Math.random();\r\n this.emitFilteredValues();\r\n }\r\n\r\n private emitFilteredValues(): void {\r\n this.onFilter.emit(this.tableDataSource.filteredData.map(f => f.rowSrc))\r\n }\r\n\r\n sortTable(sortParameters: Sort) {\r\n this.sort.emit(sortParameters);\r\n }\r\n\r\n emitSelectedRowsAction(action: string, rows: T[]) {\r\n this.onSelectedRowsAction.emit({action, value: rows});\r\n }\r\n\r\n emitRowAction(action: string, row: T, $event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.onRowAction.emit({action, value: row});\r\n }\r\n\r\n masterToggle() {\r\n this.selectionProvider.masterToggle();\r\n }\r\n\r\n isAllSelected(): boolean {\r\n return this.selectionProvider.isAllSelected();\r\n }\r\n\r\n castSrc(row: any): TableRow<T> {\r\n return row;\r\n }\r\n\r\n rowClick(row: TableRow<T>) {\r\n if (row.rowSrc !== this.highlighted || (row.rowSrc === this.highlighted && !this.tableConfig.clickCfg?.cancelable)) {\r\n this.onRowClick.emit(row.rowSrc);\r\n this.highlighted = row.rowSrc;\r\n } else {\r\n this.onRowClick.emit(undefined);\r\n this.highlighted = undefined;\r\n }\r\n }\r\n\r\n public getSelectionModel(): SelectionModel<T> {\r\n return this.selectionProvider.selection;\r\n }\r\n\r\n private hoverTimer: any = null;\r\n\r\n ngOnDestroy() {\r\n clearTimeout(this.hoverTimer);\r\n this.resizeColumnOffsetsObserver.disconnect();\r\n }\r\n\r\n\r\n}\r\n","<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value получать настройки колонок нужно через getView(rowIndex, columnConfig.key) там находятся уже\r\n подготовленные значения для использования-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgxAurMatTableComponent} from './ngx-aur-mat-table.component';\r\nimport {MatIconModule} from \"@angular/material/icon\";\r\nimport {MatTableModule} from \"@angular/material/table\";\r\nimport {MatPaginatorModule} from \"@angular/material/paginator\";\r\nimport {MatButtonModule} from \"@angular/material/button\";\r\nimport {MatInputModule} from \"@angular/material/input\";\r\nimport {MatSortModule} from \"@angular/material/sort\";\r\nimport {MatTooltipModule} from \"@angular/material/tooltip\";\r\nimport {MatCheckboxModule} from \"@angular/material/checkbox\";\r\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\r\nimport {DataPropertyGetterPipe} from \"./data-property-getter-pipe/data-property-getter.pipe\";\r\nimport {ColumnViewComponent} from './components/column-value/column-view.component';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport { NgxTableSubFooterRowDirective } from './directive/ngx-table-sub-footer-row.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxAurMatTableComponent,\r\n DataPropertyGetterPipe,\r\n ColumnViewComponent,\r\n NgxTableSubFooterRowDirective\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatSortModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule\r\n ],\r\n exports: [\r\n NgxAurMatTableComponent,\r\n DataPropertyGetterPipe,\r\n NgxTableSubFooterRowDirective\r\n ]\r\n})\r\nexport class NgxAurMatTableModule {\r\n}\r\n","\r\nexport namespace StyleBuilder {\r\n export class Row {\r\n private _background: string = '';\r\n private _color: string = '';\r\n private _border: string = '';\r\n\r\n private _fontWeight: string = '';\r\n\r\n static builder(): Row {\r\n return new Row();\r\n }\r\n\r\n background(color: string): Row {\r\n this._background = color;\r\n return this;\r\n }\r\n\r\n color(color: string): Row {\r\n this._color = color;\r\n return this;\r\n }\r\n\r\n border(borderBuilderFn: (borderBuilder: BorderStyleBuilder) => BorderStyleBuilder): Row {\r\n const borderBuilder = new BorderStyleBuilder();\r\n this._border = borderBuilderFn(borderBuilder).build();\r\n return this;\r\n }\r\n\r\n fontWeight(weight: FontWeight): Row {\r\n this._fontWeight = weight;\r\n return this;\r\n }\r\n\r\n build(): string {\r\n let styles = '';\r\n if (this._background) styles += `background: ${this._background}; `;\r\n if (this._color) styles += `color: ${this._color}; `;\r\n if (this._fontWeight) styles += `font-weight: ${this._fontWeight}; `;\r\n if (this._border) styles += `${this._border}`;\r\n return styles;\r\n }\r\n }\r\n\r\n export class BorderStyleBuilder {\r\n private _top: string = '';\r\n private _bottom: string = '';\r\n private _right: string = '';\r\n private _left: string = '';\r\n\r\n top(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._top = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n bottom(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._bottom = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n right(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._right = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n left(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._left = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n allBorders(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._top = this._bottom = this._right = this._left = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n build(): string {\r\n let styles = '';\r\n if (this._top) styles += `border-top: ${this._top}; `;\r\n if (this._bottom) styles += `border-bottom: ${this._bottom}; `;\r\n if (this._right) styles += `border-right: ${this._right}; `;\r\n if (this._left) styles += `border-left: ${this._left}; `;\r\n return styles;\r\n }\r\n }\r\n\r\n export enum BorderStyle {\r\n SOLID = \"solid\",\r\n DOTTED = \"dotted\",\r\n DASHED = \"dashed\",\r\n DOUBLE = \"double\",\r\n GROOVE = \"groove\",\r\n RIDGE = \"ridge\",\r\n INSET = \"inset\",\r\n OUTSET = \"outset\",\r\n NONE = \"none\",\r\n HIDDEN = \"hidden\"\r\n }\r\n\r\n export enum FontWeight {\r\n NORMAL = \"normal\",\r\n BOLD = \"bold\",\r\n BOLDER = \"bolder\",\r\n LIGHTER = \"lighter\",\r\n W_100 = \"100\",\r\n W_200 = \"200\",\r\n W_300 = \"300\",\r\n W_400 = \"400\",\r\n W_500 = \"500\",\r\n W_600 = \"600\",\r\n W_700 = \"700\",\r\n W_800 = \"800\",\r\n W_900 = \"900\"\r\n }\r\n\r\n}\r\n","import {TableRow} from \"../model/TableRow\";\r\n\r\nexport namespace NgxAurFilters {\r\n\r\n /**\r\n * Base abstract class for filter.\r\n * Defines a common interface for all filters.\r\n * @template T The type of data to be filtered.\r\n */\r\n export abstract class Base<T> {\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Abstract method to create a filter function for use with Angular Material's MatTable.\r\n * This function is used as the filtering logic applied to the data displayed in the table.\r\n * It must be overridden in subclasses to provide custom filter criteria.\r\n *\r\n * @returns A filter function that takes a single parameter:\r\n * - `data`: An individual data item from the MatTable data source. This represents\r\n * a single row of data in the table. The type of `data` is defined by the generic\r\n * type parameter 'T'.\r\n *\r\n * The function should return a boolean value indicating whether the `data` item\r\n * satisfies the filter criteria. The specific implementation of the filter logic\r\n * will vary depending on the application's requirements and the nature of the data.\r\n */\r\n public abstract filterFn(): (data: TableRow<T>) => boolean;\r\n\r\n /**\r\n * Determines whether the current filter is equivalent to another filter.\r\n * This method is used to compare the current applied filter with a new filter.\r\n * If the filters are equivalent, the method should return `true`, indicating that\r\n * the data table does not need to be rebuilt. If they are not equivalent, it should\r\n * return `false`, indicating that the table should be updated to reflect the new filter.\r\n *\r\n * Implementing this method in subclasses allows for optimized rendering by avoiding\r\n * unnecessary table updates when the filter criteria have not actually changed.\r\n *\r\n * @param other The filter to compare with the current filter.\r\n * @returns `true` if the current filter and the `other` filter are equivalent, otherwise `false`.\r\n */\r\n public abstract equals(other: Base<T>): boolean;\r\n }\r\n\r\n export abstract class ExtractableProperty<T, V> extends Base<T> {\r\n abstract extractProperty(data: TableRow<T>): V;\r\n }\r\n\r\n\r\n /**\r\n * Class for filtering data based on a single value.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the value used for filtering.\r\n */\r\n export abstract class ValueSingle<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public value: V) {\r\n super();\r\n }\r\n\r\n override equals(other: ValueSingle<T, V>): boolean {\r\n return this.value === other.value;\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data based on an array of values.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values used for filtering.\r\n */\r\n export abstract class ValueArray<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public values: V[]) {\r\n super();\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data based on a set of values.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values used for filtering.\r\n */\r\n export abstract class ValueSet<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public values: Set<V>) {\r\n super();\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data within a min-max range.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values defining the range.\r\n */\r\n export abstract class ValueMinMax<T, V> extends ExtractableProperty<T, V> {\r\n constructor(protected _min: V,\r\n protected _max: V) {\r\n super();\r\n }\r\n\r\n get min(): V {\r\n return this._min;\r\n }\r\n\r\n get max(): V {\r\n return this._max;\r\n }\r\n\r\n\r\n override equals(other: ValueMinMax<T, V>): boolean {\r\n return this._min === other._min && this._max === other._max;\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data within a min-max range.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values defining the range.\r\n */\r\n export abstract class ValueMinMaxNumber<T> extends ValueMinMax<T, number> {\r\n constructor(min: number,\r\n max: number) {\r\n super(min, max);\r\n }\r\n\r\n override get min(): number {\r\n return this._min ?? Number.MIN_VALUE;\r\n }\r\n\r\n override get max(): number {\r\n return this._max ?? Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n /**\r\n * Abstract class for filtering data based on whether a specific property\r\n * of the data, when trimmed and converted to lower case, contains a specified\r\n * substring, also trimmed and converted to lower case.\r\n * @template T The type of data to be filtered.\r\n */\r\n export abstract class ContainsStringIgnoreCase<T> extends ValueSingle<T, string> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given?.toLowerCase().includes(this.value?.toLowerCase());\r\n };\r\n }\r\n }\r\n\r\n export abstract class EqualString<T> extends ValueSingle<T, string> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given === this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class EqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given === this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class LessNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given < this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class LessOrEqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given <= this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class MoreNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class MoreOrEqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeInclMinExclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.min && given < this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeExclMinInclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.min && given <= this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeInclMinInclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.min && given <= this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeExclMinExclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.min && given < this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class hasInSet<T, V> extends ValueSet<T, V> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return this.values.has(given);\r\n };\r\n }\r\n }\r\n\r\n export abstract class notHasInSet<T, V> extends ValueSet<T, V> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return !this.values.has(given);\r\n };\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ngx-aur-mat-table\r\n */\r\nexport * from './lib/utils/ngx-aur-table-config.util'\r\nexport * from './lib/ngx-aur-mat-table-public';\r\nexport * from './lib/ngx-aur-mat-table-filterable';\r\nexport * from './lib/ngx-aur-mat-table.component';\r\nexport * from './lib/ngx-aur-mat-table.module';\r\nexport * from './lib/data-property-getter-pipe/data-property-getter.pipe';\r\nexport * from './lib/model/TableRow';\r\nexport * from './lib/model/ColumnConfig';\r\nexport * from './lib/providers/RowActionProvider';\r\nexport * from './lib/providers/SelectionProvider';\r\nexport * from './lib/providers/IndexProvider';\r\nexport * from './lib/style-builder/style-builder';\r\nexport * from './lib/filters/NgxAurFilters';\r\nexport * from './lib/directive/ngx-table-sub-footer-row.directive'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i9","i11.ColumnViewComponent","i12.DataPropertyGetterPipe"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-aur-mat-table.mjs","sources":["../../../projects/ngx-aur-mat-table/src/lib/utils/ngx-aur-table-config.util.ts","../../../projects/ngx-aur-mat-table/src/lib/model/EmptyValue.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/AbstractProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/SelectionProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/ActionViewFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/RowActionProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/model/TableViewFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/IndexProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/PaginationProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/model/TableRow.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/TableRowsFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/MatTableDataSourceFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/factories/DisplayColumnsFactory.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/TotalRowProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/utils/offset.util.ts","../../../projects/ngx-aur-mat-table/src/lib/directive/ngx-table-sub-footer-row.directive.ts","../../../projects/ngx-aur-mat-table/src/lib/providers/HeaderButtonProvider.ts","../../../projects/ngx-aur-mat-table/src/lib/components/column-value/column-view.component.ts","../../../projects/ngx-aur-mat-table/src/lib/components/column-value/column-view.component.html","../../../projects/ngx-aur-mat-table/src/lib/data-property-getter-pipe/data-property-getter.pipe.ts","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.component.ts","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.component.html","../../../projects/ngx-aur-mat-table/src/lib/ngx-aur-mat-table.module.ts","../../../projects/ngx-aur-mat-table/src/lib/style-builder/style-builder.ts","../../../projects/ngx-aur-mat-table/src/lib/filters/NgxAurFilters.ts","../../../projects/ngx-aur-mat-table/src/public-api.ts","../../../projects/ngx-aur-mat-table/src/ngx-aur-mat-table.ts"],"sourcesContent":["import {ColumnConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {SelectionProvider} from \"../providers/SelectionProvider\";\r\nimport {IndexProvider} from \"../providers/IndexProvider\";\r\nimport {RowActionProvider} from \"../providers/RowActionProvider\";\r\n\r\nexport class NgxAurTableConfigUtil {\r\n\r\n public static keys(config: TableConfig<any>): string[] {\r\n return this.columnCfgs(config).map(c => c.key);\r\n }\r\n\r\n private static columnCfgs(config: TableConfig<any>): ColumnConfig<any>[] {\r\n return config.columnsCfg;\r\n }\r\n\r\n /**\r\n * @return Map where the key is 'key' and the value is 'name'\r\n */\r\n public static keyNameMap(config: TableConfig<any>): Map<string, string> {\r\n return new Map(this.columnCfgs(config).map(cfg => [cfg.key, cfg.name]));\r\n }\r\n}\r\n","import {ActionConfig, IndexConfig, PaginationConfig, SelectionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\n\r\nexport class EmptyValue {\r\n\r\n public static readonly SELECTION_CONFIG: SelectionConfig = {\r\n enable: false,\r\n }\r\n\r\n public static readonly ACTION_CONFIG: ActionConfig<any> = {\r\n enable: false,\r\n actions: []\r\n }\r\n\r\n public static readonly INDEX_CONFIG: IndexConfig = {\r\n enable: false,\r\n }\r\n\r\n public static readonly PAGINATION_CONFIG: PaginationConfig = {\r\n enable: false,\r\n size: 0,\r\n sizes: []\r\n }\r\n\r\n\r\n public static readonly TABLE_CONFIG: TableConfig<any> = {\r\n columnsCfg: [],\r\n selectionCfg: EmptyValue.SELECTION_CONFIG,\r\n actionCfg: EmptyValue.ACTION_CONFIG,\r\n indexCfg: EmptyValue.INDEX_CONFIG,\r\n pageableCfg: EmptyValue.PAGINATION_CONFIG\r\n }\r\n\r\n public static readonly MAT_TABLE_DATA_SOURCE: MatTableDataSource<TableRow<any>> = new MatTableDataSource();\r\n\r\n public static readonly RESIZE_OBSERVER = new ResizeObserver(() => {\r\n })\r\n}\r\n","export class AbstractProvider {\r\n\r\n protected hasKey(key: string, keys: string[]): boolean {\r\n return keys.some(k => k === key);\r\n }\r\n\r\n protected notHasKey(key: string, keys: string[]): boolean {\r\n return !this.hasKey(key, keys);\r\n }\r\n}\r\n","import {SelectionModel} from '@angular/cdk/collections';\r\nimport {MatTableDataSource} from '@angular/material/table';\r\nimport {EventEmitter} from '@angular/core';\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {SelectionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class SelectionProvider<T> extends AbstractProvider {\r\n public readonly isEnabled = true;\r\n public static readonly COLUMN_NAME = 'tbl_selects';\r\n selection: SelectionModel<T>;\r\n config: SelectionConfig;\r\n tableDataSource: MatTableDataSource<TableRow<T>>;\r\n\r\n constructor(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>, initSelection: T[]) {\r\n super();\r\n this.config = tableConfig?.selectionCfg || EmptyValue.SELECTION_CONFIG;\r\n this.selection = new SelectionModel<T>(this.config.multiple, initSelection);\r\n this.tableDataSource = tableDataSource;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return SelectionProvider.COLUMN_NAME;\r\n }\r\n\r\n public addCheckboxColumn(columns: string[]): SelectionProvider<T> {\r\n if (this.hasKey(this.COLUMN_NAME, columns)) {\r\n return this;\r\n }\r\n if (this.config.position === 'start') {\r\n columns.unshift(this.COLUMN_NAME);\r\n } else {\r\n columns.push(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n public bindEventEmitters(selected: EventEmitter<T[]>, onSelect: EventEmitter<T[]>, onDeselect: EventEmitter<T[]>, selectionModel: EventEmitter<SelectionModel<T>>): SelectionProvider<T> {\r\n this.selection.changed.subscribe(event => {\r\n if (event.added) {\r\n onSelect.emit(event.added);\r\n }\r\n if (event.removed) {\r\n onDeselect.emit(event.removed);\r\n }\r\n selected.emit(this.selection.selected);\r\n });\r\n selectionModel.emit(this.selection);\r\n return this;\r\n }\r\n\r\n public masterToggle(): void {\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.tableDataSource.filteredData.forEach(row => this.selection.select(row.rowSrc));\r\n }\r\n }\r\n\r\n isAllSelected(): boolean {\r\n const filteredData = this.tableDataSource.filteredData;\r\n const numSelected = this.selection.selected.length;\r\n const numRows = filteredData.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n private static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.selectionCfg && tableConfig.selectionCfg.enable) || false;\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>, initSelection: T[]): SelectionProvider<T> {\r\n if (SelectionProvider.canEnable(tableConfig)) {\r\n return new SelectionProvider(tableConfig, tableDataSource, initSelection);\r\n }\r\n return new SelectionProviderDummy();\r\n }\r\n}\r\n\r\nexport class SelectionProviderDummy<T> extends SelectionProvider<T> {\r\n public override readonly isEnabled = true;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG, EmptyValue.MAT_TABLE_DATA_SOURCE, []);\r\n }\r\n\r\n public override addCheckboxColumn(columns: string[]): SelectionProvider<T> {\r\n return this;\r\n }\r\n\r\n public override bindEventEmitters(selected: EventEmitter<T[]>, onSelect: EventEmitter<T[]>, onDeselect: EventEmitter<T[]>): SelectionProvider<T> {\r\n return this;\r\n }\r\n}\r\n","import {Action, ActionConfig, IconView} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\n\r\nexport class ActionViewFactory {\r\n /**\r\n * Convert rows and actions to a view format.\r\n * @param rows - The data rows to be converted.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Map of row IDs to their associated action views.\r\n */\r\n public static create<T>(rows: TableRow<T>[], actionConfig: ActionConfig<T>): Map<number, Action<string>[]> {\r\n const result = new Map<number, Action<string>[]>();\r\n for (const row of rows) {\r\n result.set(row.id, this.prepareActionsForRow(row, actionConfig));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Prepare the actions for a specific row based on the action configuration.\r\n * @param row - The data row for which actions need to be prepared.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Array of actions for the row.\r\n */\r\n private static prepareActionsForRow<T>(row: TableRow<T>, actionConfig: ActionConfig<T>): Action<string>[] {\r\n return actionConfig.actions.map(action => ({\r\n action: action.action(row.rowSrc),\r\n icon: this.prepareIconConfig(action.icon, row.rowSrc)\r\n }));\r\n }\r\n\r\n private static prepareIconConfig<T>(iconSource: IconView<(value: T) => string>, value: T): IconView<string> {\r\n return {\r\n name: iconSource.name(value),\r\n color: iconSource.color ? iconSource.color(value) : undefined,\r\n tooltip: iconSource.tooltip ? iconSource.tooltip(value) : undefined,\r\n position: iconSource.position,\r\n wrapper: iconSource.wrapper ? {color: iconSource.wrapper.color(value)} : undefined\r\n }\r\n }\r\n}\r\n","import {Action, ActionConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {ActionViewFactory} from \"../factories/ActionViewFactory\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport interface ActionEvent<T> {\r\n action: string;\r\n value: T;\r\n}\r\n\r\nexport class RowActionProvider<T> extends AbstractProvider {\r\n public static readonly COLUMN_NAME = 'tbl_actions';\r\n public readonly isEnabled: boolean = true;\r\n\r\n private readonly config: ActionConfig<T>;\r\n\r\n // key is rowId\r\n public actionView: Map<number, Action<string>[]> = new Map();\r\n\r\n constructor(tableConfig: TableConfig<T>) {\r\n super();\r\n if (!tableConfig.actionCfg) {\r\n throw new Error(\"Actions is undefined\")\r\n }\r\n this.config = tableConfig.actionCfg;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return RowActionProvider.COLUMN_NAME;\r\n }\r\n\r\n public addActionColumn(columns: string[]): RowActionProvider<T> {\r\n if (!this.config || this.hasKey(this.COLUMN_NAME, columns)) {\r\n return this;\r\n }\r\n if (this.config.position === 'start') {\r\n columns.unshift(this.COLUMN_NAME);\r\n } else {\r\n columns.push(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert rows and actions to a view format.\r\n * @param rows - The data rows to be converted.\r\n * @param actionConfig - Configuration for actions on rows.\r\n * @return Map of row IDs to their associated action views.\r\n */\r\n public setView(rows: TableRow<T>[]): RowActionProvider<T> {\r\n if (!this.config) {\r\n throw new Error(\"ActionConfig is undefined\");\r\n }\r\n this.actionView = ActionViewFactory.create(rows, this.config);\r\n return this;\r\n }\r\n\r\n private static canEnabled<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.actionCfg && (tableConfig.actionCfg.enable === undefined || tableConfig.actionCfg.enable === null || tableConfig.actionCfg.enable)) || false\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>): RowActionProvider<T> {\r\n if (RowActionProvider.canEnabled(tableConfig)) {\r\n return new RowActionProvider<T>(tableConfig);\r\n }\r\n return new RowActionProviderDummy<T>();\r\n }\r\n}\r\n\r\nexport class RowActionProviderDummy<T> extends RowActionProvider<T> {\r\n public override readonly isEnabled = false;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG);\r\n }\r\n\r\n public override addActionColumn(columns: string[]): RowActionProviderDummy<T> {\r\n return this;\r\n }\r\n\r\n public override setView(rows: TableRow<T>[]): RowActionProvider<T> {\r\n return this;\r\n }\r\n}\r\n","import {TableRow} from \"./TableRow\";\r\nimport {ColumnView, IconView, TextView, TableConfig, ImageView} from \"./ColumnConfig\";\r\n\r\nexport class TableViewFactory {\r\n\r\n /**\r\n * Converts rows into a view format based on table configuration.\r\n * @param rows The rows of the table.\r\n * @param tableConfig The configuration of the table.\r\n * @returns An array of maps representing the view for each row.\r\n */\r\n public static toView<T>(rows: TableRow<T>[], tableConfig: TableConfig<T>): Map<string, ColumnView<string>>[] {\r\n const columnViewMap = new Map<string, ColumnView<(value: TableRow<T>) => string>>();\r\n tableConfig.columnsCfg.forEach(c => {\r\n if (c.valueView) {\r\n columnViewMap .set(c.key, c.valueView)\r\n }\r\n })\r\n return TableViewFactory.toViewInternal(rows, columnViewMap );\r\n }\r\n\r\n private static toViewInternal<T>(rows: TableRow<T>[], source: Map<string, ColumnView<(value: TableRow<T>) => string>>): Map<string, ColumnView<string>>[] {\r\n return rows.map(row => TableViewFactory.createColumnConfig(row, source));\r\n }\r\n\r\n private static createColumnConfig<T>(row: TableRow<T>, columnViewMap: Map<string, ColumnView<(value: TableRow<T>) => string>>): Map<string, ColumnView<string>> {\r\n const result = new Map<string, ColumnView<string>>();\r\n columnViewMap.forEach((view, key) => {\r\n result.set(key, {\r\n icon: TableViewFactory.configureIcon(view.icon, row),\r\n text: TableViewFactory.configureText(view.text, row),\r\n image: TableViewFactory.configureImage(view.image, row),\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n private static configureIcon<T>(iconSource: IconView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): IconView<string> | undefined {\r\n if (!iconSource) return undefined;\r\n\r\n return {\r\n name: iconSource.name(row),\r\n color: iconSource.color ? iconSource.color(row) : undefined,\r\n tooltip: iconSource.tooltip ? iconSource.tooltip(row) : undefined,\r\n position: iconSource.position,\r\n wrapper: iconSource.wrapper? {color: iconSource.wrapper.color(row)}: undefined\r\n }\r\n }\r\n\r\n private static configureText<T>(textSource: TextView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): TextView<string> | undefined {\r\n if (!textSource) return undefined;\r\n\r\n return {\r\n show: textSource.show,\r\n tooltip: textSource.tooltip?.(row),\r\n color: textSource.color?.(row)\r\n }\r\n }\r\n\r\n private static configureImage<T>(imageSource: ImageView<(value: TableRow<T>) => string> | undefined, row: TableRow<T>): ImageView<string> | undefined {\r\n if (!imageSource) return undefined;\r\n\r\n return {\r\n src: imageSource.src(row),\r\n width: imageSource.width || undefined,\r\n height: imageSource.height || undefined\r\n }\r\n }\r\n}\r\n","import {ColumnView, IndexConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\n/**\r\n * Provides functionality to manage the index column in a table.\r\n * The class can handle index configurations and modify the column array to include an index column.\r\n */\r\nexport class IndexProvider extends AbstractProvider {\r\n public readonly isEnabled: boolean = true;\r\n public static readonly COLUMN_NAME = 'tbl_index';\r\n public headerView: ColumnView<string> | undefined;\r\n public name: string;\r\n public offset: number;\r\n\r\n constructor(private indexConfig?: IndexConfig) {\r\n super();\r\n this.headerView = indexConfig?.headerColumn;\r\n this.name = indexConfig?.name || '';\r\n this.offset = indexConfig?.offset || 0;\r\n }\r\n\r\n get COLUMN_NAME() {\r\n return IndexProvider.COLUMN_NAME;\r\n }\r\n\r\n /**\r\n * Adds the index column to the beginning of the columns array.\r\n * @param columns The array of column names to which the index column should be added.\r\n * @returns The instance of IndexProvider for method chaining.\r\n */\r\n public addIndexColumn(columns: string[]): IndexProvider {\r\n if (this.notHasKey(this.COLUMN_NAME, columns)) {\r\n columns.unshift(this.COLUMN_NAME);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Factory method to create an instance of IndexProvider based on table configuration.\r\n * Returns a dummy provider if the index is not enabled in the configuration.\r\n * @param tableConfig The configuration of the table.\r\n * @returns An instance of IndexProvider or IndexProviderDummy.\r\n */\r\n public static create<T>(tableConfig: TableConfig<T>): IndexProvider {\r\n if (IndexProvider.canCreate(tableConfig)) {\r\n return new IndexProvider(<IndexConfig>tableConfig.indexCfg);\r\n }\r\n return new IndexProviderDummy();\r\n }\r\n\r\n private static canCreate<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.indexCfg && tableConfig.indexCfg.enable) || false;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * A dummy implementation of IndexProvider that is used when index functionality is not enabled.\r\n * This class overrides certain methods to provide no-operation implementations.\r\n */\r\nexport class IndexProviderDummy extends IndexProvider {\r\n public override readonly isEnabled = false;\r\n\r\n /**\r\n * Overrides the addIndexColumn method to return itself without modifying the columns array.\r\n * @param columns The array of column names.\r\n * @returns The instance of IndexProviderDummy for method chaining.\r\n */\r\n public override addIndexColumn(columns: string[]): IndexProviderDummy {\r\n // No operation performed as the index is not enabled.\r\n return this;\r\n }\r\n}\r\n","import {PaginationConfig, TableConfig} from \"../model/ColumnConfig\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class PaginationProvider extends AbstractProvider{\r\n public readonly isEnabled: boolean = true;\r\n public sizes: number[];\r\n public size;\r\n\r\n constructor(config: PaginationConfig) {\r\n super();\r\n this.sizes = config.sizes || [5, 10, 15, 25, 50]\r\n this.size = config.size || this.sizes[1];\r\n }\r\n\r\n public static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return (tableConfig.pageableCfg && tableConfig.pageableCfg.enable) || false;\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>): PaginationProvider {\r\n if (this.canEnable(tableConfig) && tableConfig.pageableCfg) {\r\n return new PaginationProvider(tableConfig.pageableCfg)\r\n }\r\n return new PaginationProviderDummy()\r\n }\r\n\r\n}\r\n\r\nexport class PaginationProviderDummy extends PaginationProvider {\r\n public override readonly isEnabled: boolean = false;\r\n\r\n constructor() {\r\n super(EmptyValue.PAGINATION_CONFIG);\r\n }\r\n}\r\n","export class TableRow<T> {\r\n id: number;\r\n rowSrc: T;\r\n\r\n [key: string]: any;\r\n\r\n constructor(id: number, rowSrc: T) {\r\n this.rowSrc = rowSrc;\r\n this.id = id;\r\n }\r\n}\r\n","import {ColumnConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\n\r\nexport class TableRowsFactory {\r\n\r\n /**\r\n * Converts an array of data objects into an array of TableRow objects.\r\n * @param data Array of data objects to be converted.\r\n * @param config Configuration settings for each column.\r\n * @returns An array of TableRow objects.\r\n */\r\n public static convert<T>(data: T[], config: ColumnConfig<T>[]): TableRow<T>[] {\r\n return data.map((obj, index) => this.createTableRow(index, obj, config));\r\n }\r\n\r\n private static createTableRow<T>(id: number, obj: T, config: ColumnConfig<T>[]): TableRow<T> {\r\n const row = new TableRow<T>(id, obj);\r\n config.forEach(c => row[c.key] = c.valueConverter(obj));\r\n return row;\r\n }\r\n}\r\n","import {ColumnConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\nimport {TableRowsFactory} from \"./TableRowsFactory\";\r\n\r\nexport class MatTableDataSourceFactory {\r\n /**\r\n * Converts an array of data objects into MatTableDataSource.\r\n * @param data Array of data objects to be converted.\r\n * @param config Configuration settings for each column.\r\n * @returns MatTableDataSource.\r\n */\r\n public static convert<T>(data: T[], config: ColumnConfig<T>[]): MatTableDataSource<TableRow<T>> {\r\n let tableRows = TableRowsFactory.convert(data, config);\r\n return new MatTableDataSource<TableRow<T>>(tableRows);\r\n }\r\n}\r\n","import {ColumnConfig, TableConfig} from \"../model/ColumnConfig\";\r\n\r\nexport class DisplayColumnsFactory {\r\n public static create<T>(tableConfig: TableConfig<T>): string[] {\r\n return tableConfig.columnsCfg.map((tableColumn: ColumnConfig<any>) => tableColumn.key)\r\n }\r\n}\r\n","import {TableConfig} from \"../model/ColumnConfig\";\r\nimport {TableRow} from \"../model/TableRow\";\r\nimport {MatTableDataSource} from \"@angular/material/table\";\r\nimport {EmptyValue} from \"../model/EmptyValue\";\r\nimport {AbstractProvider} from \"./AbstractProvider\";\r\n\r\nexport class TotalRowProvider<T> extends AbstractProvider {\r\n isEnabled = true;\r\n totals = new Map<string, any>();\r\n style: string | undefined;\r\n\r\n constructor(private tableConfig: TableConfig<T>, private tableDataSource: MatTableDataSource<TableRow<T>>) {\r\n super();\r\n }\r\n\r\n setStyle(): TotalRowProvider<T> {\r\n this.style = this.tableConfig.tableView?.totalRowView?.style;\r\n return this;\r\n }\r\n\r\n setTotalRow(): TotalRowProvider<T> {\r\n this.tableConfig.columnsCfg.forEach(col => {\r\n if (col.totalConverter) {\r\n this.totals.set(col.key, col.totalConverter(this.tableDataSource.data))\r\n }\r\n })\r\n return this;\r\n }\r\n\r\n private static canEnable<T>(tableConfig: TableConfig<T>): boolean {\r\n return tableConfig.columnsCfg.some(col => col.totalConverter);\r\n }\r\n\r\n public static create<T>(tableConfig: TableConfig<T>, tableDataSource: MatTableDataSource<TableRow<T>>): TotalRowProvider<T> {\r\n if (TotalRowProvider.canEnable(tableConfig)) {\r\n return new TotalRowProvider(tableConfig, tableDataSource);\r\n }\r\n return new TotalRowProviderDummy();\r\n }\r\n}\r\n\r\nexport class TotalRowProviderDummy extends TotalRowProvider<any> {\r\n override isEnabled = false;\r\n\r\n constructor() {\r\n super(EmptyValue.TABLE_CONFIG, EmptyValue.MAT_TABLE_DATA_SOURCE);\r\n }\r\n\r\n override setTotalRow(): TotalRowProviderDummy {\r\n return this;\r\n }\r\n\r\n}\r\n","import {ColumnOffset} from \"../ngx-aur-mat-table.component\";\r\n\r\nexport class OffsetUtil {\r\n public static areNotEqual(offsets1: ColumnOffset[], offsets2: ColumnOffset[]): boolean {\r\n if (offsets1.length !== offsets2.length) {\r\n return true;\r\n }\r\n\r\n return offsets1.some((offset, index) => {\r\n const otherOffset = offsets2[index];\r\n return offset.left !== otherOffset.left || offset.width !== otherOffset.width || offset.key !== otherOffset.key;\r\n });\r\n }\r\n}\r\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngxAurTableSubFooterRow]'\n})\nexport class NgxTableSubFooterRowDirective {\n constructor() {}\n}\n","import {AbstractProvider} from \"./AbstractProvider\";\r\nimport {TableHeaderButtonConfig} from \"../model/ColumnConfig\";\r\n\r\nexport class HeaderButtonProvider extends AbstractProvider {\r\n isEnabled: boolean;\r\n icon: string;\r\n color: string;\r\n background: string;\r\n\r\n constructor(cfg?: TableHeaderButtonConfig) {\r\n super();\r\n this.isEnabled = cfg?.enable ?? false;\r\n this.icon = cfg?.icon ?? 'more_vert';\r\n this.color = cfg?.color ?? 'black';\r\n this.background = cfg?.background ?? 'white';\r\n }\r\n}\r\n\r\nexport class HeaderButtonProviderDummy extends HeaderButtonProvider {\r\n constructor() {\r\n super({enable: false});\r\n }\r\n}\r\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ColumnView} from \"../../model/ColumnConfig\";\n\n@Component({\n selector: 'lib-column-view',\n templateUrl: './column-view.component.html',\n styleUrls: ['./column-view.component.css']\n})\nexport class ColumnViewComponent {\n @Input() config: ColumnView<string> | undefined;\n @Input() value: any;\n}\n","<div class=\"align-container\">\n <div [ngClass]=\"{'circle': config?.icon?.wrapper}\"\n [style.background-color]=\"config?.icon?.wrapper?.color\"\n >\n <mat-icon *ngIf=\"config?.icon\"\n [matTooltip]=\"config?.icon?.tooltip?.toString() || ''\"\n [style.color]=\"config?.icon?.color\"\n >\n {{config?.icon?.name}}\n </mat-icon>\n </div>\n\n <img\n *ngIf=\"config?.image?.src\"\n [src]=\"config?.image?.src\"\n [style.height]=\"config?.image?.height\"\n [style.width]=\"config?.image?.width\"\n alt=\"img\"\n >\n\n <span *ngIf=\"config?.text?.show != false\"\n [matTooltip]=\"config?.text?.tooltip?.toString() || ''\"\n >\n {{value}}\n </span>\n</div>\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'dataPropertyGetter'\r\n})\r\nexport class DataPropertyGetterPipe implements PipeTransform {\r\n\r\n transform(object: any, keyName: string, ...args: unknown[]): unknown {\r\n return object[keyName];\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewChecked,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {ColumnView, TableConfig} from './model/ColumnConfig';\r\nimport {MatSort, Sort} from '@angular/material/sort';\r\nimport {MatTableDataSource} from '@angular/material/table';\r\nimport {MatPaginator} from '@angular/material/paginator';\r\nimport {SelectionProvider, SelectionProviderDummy} from './providers/SelectionProvider';\r\nimport {ActionEvent, RowActionProvider, RowActionProviderDummy} from './providers/RowActionProvider';\r\nimport {TableRow} from \"./model/TableRow\";\r\nimport {TableViewFactory} from \"./model/TableViewFactory\";\r\nimport {IndexProvider, IndexProviderDummy} from \"./providers/IndexProvider\";\r\nimport {PaginationProvider, PaginationProviderDummy} from \"./providers/PaginationProvider\";\r\nimport {MatTableDataSourceFactory} from \"./factories/MatTableDataSourceFactory\";\r\nimport {DisplayColumnsFactory} from \"./factories/DisplayColumnsFactory\";\r\nimport {EmptyValue} from \"./model/EmptyValue\";\r\nimport {TotalRowProvider, TotalRowProviderDummy} from \"./providers/TotalRowProvider\";\r\nimport {NgxAurFilters} from \"./filters/NgxAurFilters\";\r\nimport {NgxAurMatTablePublic} from \"./ngx-aur-mat-table-public\";\r\nimport {OffsetUtil} from \"./utils/offset.util\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\nimport {NgxTableSubFooterRowDirective} from \"./directive/ngx-table-sub-footer-row.directive\";\r\nimport {SelectionModel} from \"@angular/cdk/collections\";\r\nimport {HeaderButtonProvider, HeaderButtonProviderDummy} from \"./providers/HeaderButtonProvider\";\r\n\r\nexport interface HighlightContainer<T> {\r\n value: any;\r\n}\r\n\r\nexport interface ColumnOffset {\r\n left: number,\r\n width: number,\r\n key: string\r\n}\r\n\r\nenum ExpandState {\r\n COLLAPSED = 'collapsed',\r\n EXPANDED = 'expanded'\r\n}\r\n\r\n@Component({\r\n selector: 'aur-mat-table',\r\n templateUrl: './ngx-aur-mat-table.component.html',\r\n styleUrls: ['./ngx-aur-mat-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(ExpandState.COLLAPSED, style({height: '0px', minHeight: '0'})),\r\n state(ExpandState.EXPANDED, style({height: '*'})),\r\n transition(`${ExpandState.EXPANDED} <=> ${ExpandState.COLLAPSED}`, animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n})\r\nexport class NgxAurMatTableComponent<T> implements OnInit, OnChanges, AfterViewInit, AfterViewChecked, OnDestroy, NgxAurMatTablePublic<T> {\r\n\r\n expandedStateEnum = ExpandState;\r\n\r\n public tableDataSource = new MatTableDataSource<TableRow<T>>([]);\r\n _displayColumns: string[] = [];\r\n _customDisplayColumnsEnabled = false;\r\n\r\n @Input() set displayColumns(columns: string[]) {\r\n if (columns) {\r\n this._displayColumns = [...columns];\r\n this._customDisplayColumnsEnabled = columns && columns.length > 0;\r\n }\r\n }\r\n\r\n tableView: Map<string, ColumnView<string>>[] = [];\r\n\r\n @ContentChild(NgxTableSubFooterRowDirective) subFooterRowTemplate: TemplateRef<any> | null | undefined;\r\n\r\n // @ts-ignore\r\n @ViewChildren('rowLink', {read: ElementRef}) rows: QueryList<ElementRef>;\r\n // @ts-ignore\r\n @ViewChild('table', {read: ElementRef}) table: ElementRef;\r\n\r\n // @ts-ignore\r\n @Input() tableConfig: TableConfig<T>;\r\n\r\n @Input() tableData: T[] = [];\r\n\r\n @Input() extendedRowTemplate: TemplateRef<any> | null = null;\r\n\r\n // @ts-ignore\r\n @ViewChild(MatPaginator, {static: false}) matPaginator: MatPaginator;\r\n // @ts-ignore\r\n @ViewChild(MatSort, {static: true}) matSort: MatSort;\r\n\r\n @Output() sort: EventEmitter<Sort> = new EventEmitter();\r\n\r\n // events if enabled actions\r\n @Output() onRowAction: EventEmitter<ActionEvent<T>> = new EventEmitter<ActionEvent<T>>();\r\n // -----------------------\r\n\r\n // events if enabled select event\r\n @Output() selected = new EventEmitter<T[]>();\r\n @Output() onSelect = new EventEmitter<T[]>();\r\n @Output() onDeselect = new EventEmitter<T[]>();\r\n\r\n @Output() onSelectedRowsAction = new EventEmitter<ActionEvent<T[]>>();\r\n\r\n @Output() selectionModel = new EventEmitter<SelectionModel<T>>();\r\n //------------------------\r\n\r\n @Output() onRowClick = new EventEmitter<T>();\r\n\r\n /**\r\n * return filtered rows\r\n */\r\n @Output() onFilter = new EventEmitter<T[]>();\r\n\r\n @Output() columnOffsets = new EventEmitter<ColumnOffset[]>();\r\n private prevColumnOffsets: ColumnOffset[] = [];\r\n\r\n headerButtonProvider = new HeaderButtonProviderDummy();\r\n @Output() onHeaderButton = new EventEmitter<MouseEvent>();\r\n\r\n // @ts-ignore\r\n private resizeColumnOffsetsObserver: ResizeObserver = EmptyValue.RESIZE_OBSERVER;\r\n\r\n selectionProvider: SelectionProvider<T> = new SelectionProviderDummy();\r\n\r\n rowActionsProvider: RowActionProvider<T> = new RowActionProviderDummy<T>();\r\n\r\n indexProvider: IndexProvider = new IndexProviderDummy();\r\n\r\n paginationProvider: PaginationProvider = new PaginationProviderDummy();\r\n\r\n totalRowProvider: TotalRowProvider<T> = new TotalRowProviderDummy();\r\n\r\n highlighted: T | undefined;\r\n\r\n private customSortFunctions = new Map<string, (data: TableRow<T>, key: string) => any>();\r\n\r\n private filterStorage = new Map<string, NgxAurFilters.Base<T>>();\r\n\r\n //значение передается в контейнере иначе OnChange не видит изменений когда передаются одинаковые значение и подсветка строки не отключается\r\n // @ts-ignore\r\n @Input() highlight: HighlightContainer<T> | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['tableData'] && this.tableData) || (changes['displayColumns'] && this._displayColumns)) {\r\n this.refreshTable();\r\n }\r\n if (changes['highlight'] && this.highlight) {\r\n this.handleHighlightChange(this.highlight);\r\n }\r\n }\r\n\r\n public refreshTable() {\r\n const selected = this.selectionProvider?.selection?.selected ?? [];\r\n this.tableData = this.tableData || [];\r\n this.prepareTableData(selected);\r\n }\r\n\r\n private handleHighlightChange(h: HighlightContainer<T>) {\r\n if (this.highlighted === h.value) {\r\n this.highlight = undefined;\r\n this.highlighted = undefined;\r\n } else {\r\n this.highlighted = h.value;\r\n const index = this.tableDataSource.data.findIndex(row => row.rowSrc === h.value);\r\n if (index >= 0) {\r\n this.rows?.toArray()[index]?.nativeElement.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"center\",\r\n inline: \"center\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.tableConfig) {\r\n throw new Error(\"init inputs [tableConfig] is mandatory!\")\r\n }\r\n }\r\n\r\n // we need this, in order to make pagination work with *ngIf\r\n ngAfterViewInit(): void {\r\n this.initPaginator()\r\n this.initSortingDataAccessor();\r\n this.resizeColumnOffsetsObserver = new ResizeObserver(() => this.updateColumnOffsets());\r\n this.resizeColumnOffsetsObserver.observe(this.table.nativeElement);\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.updateColumnOffsets();\r\n }\r\n\r\n private initPaginator(): void {\r\n if (this.tableDataSource) {\r\n this.tableDataSource.paginator = this.matPaginator;\r\n }\r\n }\r\n\r\n private initSortingDataAccessor(): void {\r\n if (this.tableDataSource) {\r\n this.tableDataSource.sort = this.matSort;\r\n this.tableDataSource.sortingDataAccessor = (data, key) => {\r\n const customSortFunction = this.customSortFunctions.get(key);\r\n return customSortFunction ? customSortFunction(data, key) : data[key];\r\n };\r\n }\r\n }\r\n\r\n private updateColumnOffsets() {\r\n if (this.table?.nativeElement?.querySelectorAll('th')) {\r\n const offsets: ColumnOffset[] = Array.from(this.table.nativeElement.querySelectorAll('th'))\r\n .map((c) => (c as HTMLElement))\r\n .map((c, index) => ({\r\n left: c.offsetLeft,\r\n width: c.offsetWidth,\r\n key: this._displayColumns[index]\r\n }));\r\n if (OffsetUtil.areNotEqual(this.prevColumnOffsets, offsets)) {\r\n this.prevColumnOffsets = offsets;\r\n this.columnOffsets.emit(offsets);\r\n }\r\n }\r\n }\r\n\r\n private prepareTableData(initSelection: T[] = []) {\r\n this.initTable();\r\n this.initCustomSortFunctionsMap();\r\n this.initPaginator();\r\n this.initSortingDataAccessor();\r\n this.indexProvider = IndexProvider.create(this.tableConfig)\r\n .addIndexColumn(this._displayColumns);\r\n\r\n this.rowActionsProvider = RowActionProvider.create(this.tableConfig)\r\n .addActionColumn(this._displayColumns)\r\n .setView(this.tableDataSource.data);\r\n\r\n this.selectionProvider = SelectionProvider.create(this.tableConfig, this.tableDataSource, initSelection)\r\n .addCheckboxColumn(this._displayColumns)\r\n .bindEventEmitters(this.selected, this.onSelect, this.onDeselect, this.selectionModel);\r\n\r\n this.paginationProvider = PaginationProvider.create(this.tableConfig);\r\n\r\n this.totalRowProvider = TotalRowProvider.create(this.tableConfig, this.tableDataSource)\r\n .setStyle()\r\n .setTotalRow();\r\n\r\n this.headerButtonProvider = new HeaderButtonProvider(this.tableConfig.tableHeaderButtonCfg)\r\n\r\n this.emitFilteredValues();\r\n }\r\n\r\n private initCustomSortFunctionsMap() {\r\n this.tableConfig.columnsCfg\r\n .filter(c => c.sort && c.sort.enable && c.sort.customSort)\r\n .forEach(c => this.customSortFunctions.set(c.key, c.sort!.customSort!))\r\n }\r\n\r\n private initTable() {\r\n this.tableDataSource = MatTableDataSourceFactory.convert(this.tableData, this.tableConfig.columnsCfg);\r\n this.tableView = TableViewFactory.toView(this.tableDataSource.data, this.tableConfig)\r\n if (!this._customDisplayColumnsEnabled) {\r\n this._displayColumns = DisplayColumnsFactory.create(this.tableConfig);\r\n }\r\n }\r\n\r\n applySearchFilter(event: Event) {\r\n const filterValue = (event.target as HTMLInputElement).value;\r\n this.tableDataSource.filter = filterValue.trim().toLowerCase();\r\n this.emitFilteredValues();\r\n }\r\n\r\n public removeFilter(filterName: string) {\r\n if (this.filterStorage.get(filterName)) {\r\n this.filterStorage.delete(filterName);\r\n this.applyFiltersInternal();\r\n }\r\n }\r\n\r\n public applyFilter(filterName: string, filter: NgxAurFilters.Base<T>): void {\r\n if (!this.filterStorage.get(filterName) || (!this.filterStorage.get(filterName)!.equals(filter))) {\r\n this.filterStorage.set(filterName, filter);\r\n this.applyFiltersInternal();\r\n }\r\n }\r\n\r\n public clearFilters() {\r\n this.filterStorage.clear();\r\n this.applyFiltersInternal();\r\n }\r\n\r\n private applyFiltersInternal() {\r\n const filterActions = [...this.filterStorage.values()];\r\n this.tableDataSource.filterPredicate = (data) => {\r\n return filterActions.every(filterAction => filterAction.filterFn()(data));\r\n };\r\n // Применение фильтрации. нужно передать уникальное значение чтобы фильтрация запустилась\r\n this.tableDataSource.filter = 'trigger-' + Math.random();\r\n this.emitFilteredValues();\r\n }\r\n\r\n private emitFilteredValues(): void {\r\n this.onFilter.emit(this.tableDataSource.filteredData.map(f => f.rowSrc))\r\n }\r\n\r\n sortTable(sortParameters: Sort) {\r\n this.sort.emit(sortParameters);\r\n }\r\n\r\n emitSelectedRowsAction(action: string, rows: T[]) {\r\n this.onSelectedRowsAction.emit({action, value: rows});\r\n }\r\n\r\n emitRowAction(action: string, row: T, $event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.onRowAction.emit({action, value: row});\r\n }\r\n\r\n masterToggle() {\r\n this.selectionProvider.masterToggle();\r\n }\r\n\r\n isAllSelected(): boolean {\r\n return this.selectionProvider.isAllSelected();\r\n }\r\n\r\n castSrc(row: any): TableRow<T> {\r\n return row;\r\n }\r\n\r\n rowClick(row: TableRow<T>) {\r\n if (row.rowSrc !== this.highlighted || (row.rowSrc === this.highlighted && !this.tableConfig.clickCfg?.cancelable)) {\r\n this.onRowClick.emit(row.rowSrc);\r\n this.highlighted = row.rowSrc;\r\n } else {\r\n this.onRowClick.emit(undefined);\r\n this.highlighted = undefined;\r\n }\r\n }\r\n\r\n public getSelectionModel(): SelectionModel<T> {\r\n return this.selectionProvider.selection;\r\n }\r\n\r\n private hoverTimer: any = null;\r\n\r\n ngOnDestroy() {\r\n clearTimeout(this.hoverTimer);\r\n this.resizeColumnOffsetsObserver.disconnect();\r\n }\r\n\r\n\r\n}\r\n","<div class=\"aur-mat-table\">\r\n <ng-container>\r\n\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg\">\r\n <mat-form-field>\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\">\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element; let rowIndex = index\">\r\n {{ rowIndex + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n (\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ tableDataSource.filteredData.length }}</span>\r\n )\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value получать настройки колонок нужно через getView(rowIndex, columnConfig.key) там находятся уже\r\n подготовленные значения для использования-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\" class=\"enbl\">\r\n </tr>\r\n <tr mat-row #rowLink\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n\r\n <!--sub-footer-pagination-->\r\n <ng-container matColumnDef=\"subFooterPagination\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n\r\n <mat-paginator [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"paginationProvider.isEnabled\">\r\n <tr mat-footer-row\r\n *matFooterRowDef=\"['subFooterPagination']; sticky: this.tableConfig.stickyCfg?.subFooterPagination\"\r\n [style]=\"this.tableConfig?.pageableCfg?.style\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-pagination END-->\r\n </table>\r\n <!-- Pagination -->\r\n\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgxAurMatTableComponent} from './ngx-aur-mat-table.component';\r\nimport {MatIconModule} from \"@angular/material/icon\";\r\nimport {MatTableModule} from \"@angular/material/table\";\r\nimport {MatPaginatorModule} from \"@angular/material/paginator\";\r\nimport {MatButtonModule} from \"@angular/material/button\";\r\nimport {MatInputModule} from \"@angular/material/input\";\r\nimport {MatSortModule} from \"@angular/material/sort\";\r\nimport {MatTooltipModule} from \"@angular/material/tooltip\";\r\nimport {MatCheckboxModule} from \"@angular/material/checkbox\";\r\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\r\nimport {DataPropertyGetterPipe} from \"./data-property-getter-pipe/data-property-getter.pipe\";\r\nimport {ColumnViewComponent} from './components/column-value/column-view.component';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport { NgxTableSubFooterRowDirective } from './directive/ngx-table-sub-footer-row.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxAurMatTableComponent,\r\n DataPropertyGetterPipe,\r\n ColumnViewComponent,\r\n NgxTableSubFooterRowDirective\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatSortModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule\r\n ],\r\n exports: [\r\n NgxAurMatTableComponent,\r\n DataPropertyGetterPipe,\r\n NgxTableSubFooterRowDirective\r\n ]\r\n})\r\nexport class NgxAurMatTableModule {\r\n}\r\n","\r\nexport namespace StyleBuilder {\r\n export class Row {\r\n private _background: string = '';\r\n private _color: string = '';\r\n private _border: string = '';\r\n\r\n private _fontWeight: string = '';\r\n\r\n static builder(): Row {\r\n return new Row();\r\n }\r\n\r\n background(color: string): Row {\r\n this._background = color;\r\n return this;\r\n }\r\n\r\n color(color: string): Row {\r\n this._color = color;\r\n return this;\r\n }\r\n\r\n border(borderBuilderFn: (borderBuilder: BorderStyleBuilder) => BorderStyleBuilder): Row {\r\n const borderBuilder = new BorderStyleBuilder();\r\n this._border = borderBuilderFn(borderBuilder).build();\r\n return this;\r\n }\r\n\r\n fontWeight(weight: FontWeight): Row {\r\n this._fontWeight = weight;\r\n return this;\r\n }\r\n\r\n build(): string {\r\n let styles = '';\r\n if (this._background) styles += `background: ${this._background}; `;\r\n if (this._color) styles += `color: ${this._color}; `;\r\n if (this._fontWeight) styles += `font-weight: ${this._fontWeight}; `;\r\n if (this._border) styles += `${this._border}`;\r\n return styles;\r\n }\r\n }\r\n\r\n export class BorderStyleBuilder {\r\n private _top: string = '';\r\n private _bottom: string = '';\r\n private _right: string = '';\r\n private _left: string = '';\r\n\r\n top(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._top = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n bottom(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._bottom = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n right(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._right = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n left(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._left = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n allBorders(width: string, style: BorderStyle, color: string): BorderStyleBuilder {\r\n this._top = this._bottom = this._right = this._left = `${width} ${style} ${color}`;\r\n return this;\r\n }\r\n\r\n build(): string {\r\n let styles = '';\r\n if (this._top) styles += `border-top: ${this._top}; `;\r\n if (this._bottom) styles += `border-bottom: ${this._bottom}; `;\r\n if (this._right) styles += `border-right: ${this._right}; `;\r\n if (this._left) styles += `border-left: ${this._left}; `;\r\n return styles;\r\n }\r\n }\r\n\r\n export enum BorderStyle {\r\n SOLID = \"solid\",\r\n DOTTED = \"dotted\",\r\n DASHED = \"dashed\",\r\n DOUBLE = \"double\",\r\n GROOVE = \"groove\",\r\n RIDGE = \"ridge\",\r\n INSET = \"inset\",\r\n OUTSET = \"outset\",\r\n NONE = \"none\",\r\n HIDDEN = \"hidden\"\r\n }\r\n\r\n export enum FontWeight {\r\n NORMAL = \"normal\",\r\n BOLD = \"bold\",\r\n BOLDER = \"bolder\",\r\n LIGHTER = \"lighter\",\r\n W_100 = \"100\",\r\n W_200 = \"200\",\r\n W_300 = \"300\",\r\n W_400 = \"400\",\r\n W_500 = \"500\",\r\n W_600 = \"600\",\r\n W_700 = \"700\",\r\n W_800 = \"800\",\r\n W_900 = \"900\"\r\n }\r\n\r\n}\r\n","import {TableRow} from \"../model/TableRow\";\r\n\r\nexport namespace NgxAurFilters {\r\n\r\n /**\r\n * Base abstract class for filter.\r\n * Defines a common interface for all filters.\r\n * @template T The type of data to be filtered.\r\n */\r\n export abstract class Base<T> {\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Abstract method to create a filter function for use with Angular Material's MatTable.\r\n * This function is used as the filtering logic applied to the data displayed in the table.\r\n * It must be overridden in subclasses to provide custom filter criteria.\r\n *\r\n * @returns A filter function that takes a single parameter:\r\n * - `data`: An individual data item from the MatTable data source. This represents\r\n * a single row of data in the table. The type of `data` is defined by the generic\r\n * type parameter 'T'.\r\n *\r\n * The function should return a boolean value indicating whether the `data` item\r\n * satisfies the filter criteria. The specific implementation of the filter logic\r\n * will vary depending on the application's requirements and the nature of the data.\r\n */\r\n public abstract filterFn(): (data: TableRow<T>) => boolean;\r\n\r\n /**\r\n * Determines whether the current filter is equivalent to another filter.\r\n * This method is used to compare the current applied filter with a new filter.\r\n * If the filters are equivalent, the method should return `true`, indicating that\r\n * the data table does not need to be rebuilt. If they are not equivalent, it should\r\n * return `false`, indicating that the table should be updated to reflect the new filter.\r\n *\r\n * Implementing this method in subclasses allows for optimized rendering by avoiding\r\n * unnecessary table updates when the filter criteria have not actually changed.\r\n *\r\n * @param other The filter to compare with the current filter.\r\n * @returns `true` if the current filter and the `other` filter are equivalent, otherwise `false`.\r\n */\r\n public abstract equals(other: Base<T>): boolean;\r\n }\r\n\r\n export abstract class ExtractableProperty<T, V> extends Base<T> {\r\n abstract extractProperty(data: TableRow<T>): V;\r\n }\r\n\r\n\r\n /**\r\n * Class for filtering data based on a single value.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the value used for filtering.\r\n */\r\n export abstract class ValueSingle<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public value: V) {\r\n super();\r\n }\r\n\r\n override equals(other: ValueSingle<T, V>): boolean {\r\n return this.value === other.value;\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data based on an array of values.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values used for filtering.\r\n */\r\n export abstract class ValueArray<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public values: V[]) {\r\n super();\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data based on a set of values.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values used for filtering.\r\n */\r\n export abstract class ValueSet<T, V> extends ExtractableProperty<T, V> {\r\n\r\n constructor(public values: Set<V>) {\r\n super();\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data within a min-max range.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values defining the range.\r\n */\r\n export abstract class ValueMinMax<T, V> extends ExtractableProperty<T, V> {\r\n constructor(protected _min: V,\r\n protected _max: V) {\r\n super();\r\n }\r\n\r\n get min(): V {\r\n return this._min;\r\n }\r\n\r\n get max(): V {\r\n return this._max;\r\n }\r\n\r\n\r\n override equals(other: ValueMinMax<T, V>): boolean {\r\n return this._min === other._min && this._max === other._max;\r\n }\r\n }\r\n\r\n /**\r\n * Class for filtering data within a min-max range.\r\n * @template T The type of data to be filtered.\r\n * @template V The type of the values defining the range.\r\n */\r\n export abstract class ValueMinMaxNumber<T> extends ValueMinMax<T, number> {\r\n constructor(min: number,\r\n max: number) {\r\n super(min, max);\r\n }\r\n\r\n override get min(): number {\r\n return this._min ?? Number.MIN_VALUE;\r\n }\r\n\r\n override get max(): number {\r\n return this._max ?? Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n /**\r\n * Abstract class for filtering data based on whether a specific property\r\n * of the data, when trimmed and converted to lower case, contains a specified\r\n * substring, also trimmed and converted to lower case.\r\n * @template T The type of data to be filtered.\r\n */\r\n export abstract class ContainsStringIgnoreCase<T> extends ValueSingle<T, string> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given?.toLowerCase().includes(this.value?.toLowerCase());\r\n };\r\n }\r\n }\r\n\r\n export abstract class EqualString<T> extends ValueSingle<T, string> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given === this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class EqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given === this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class LessNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given < this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class LessOrEqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given <= this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class MoreNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class MoreOrEqualNumber<T> extends ValueSingle<T, number> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.value;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeInclMinExclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.min && given < this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeExclMinInclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.min && given <= this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeInclMinInclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given >= this.min && given <= this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class NumberRangeExclMinExclMax<T> extends ValueMinMaxNumber<T> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return given > this.min && given < this.max;\r\n };\r\n }\r\n }\r\n\r\n export abstract class hasInSet<T, V> extends ValueSet<T, V> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return this.values.has(given);\r\n };\r\n }\r\n }\r\n\r\n export abstract class notHasInSet<T, V> extends ValueSet<T, V> {\r\n\r\n public override filterFn(): (data: TableRow<T>) => boolean {\r\n return (data) => {\r\n const given = this.extractProperty(data);\r\n return !this.values.has(given);\r\n };\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ngx-aur-mat-table\r\n */\r\nexport * from './lib/utils/ngx-aur-table-config.util'\r\nexport * from './lib/ngx-aur-mat-table-public';\r\nexport * from './lib/ngx-aur-mat-table-filterable';\r\nexport * from './lib/ngx-aur-mat-table.component';\r\nexport * from './lib/ngx-aur-mat-table.module';\r\nexport * from './lib/data-property-getter-pipe/data-property-getter.pipe';\r\nexport * from './lib/model/TableRow';\r\nexport * from './lib/model/ColumnConfig';\r\nexport * from './lib/providers/RowActionProvider';\r\nexport * from './lib/providers/SelectionProvider';\r\nexport * from './lib/providers/IndexProvider';\r\nexport * from './lib/style-builder/style-builder';\r\nexport * from './lib/filters/NgxAurFilters';\r\nexport * from './lib/directive/ngx-table-sub-footer-row.directive'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i9","i11.ColumnViewComponent","i12.DataPropertyGetterPipe"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-aur-mat-table",
3
- "version": "17.0.4",
3
+ "version": "17.0.5",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^17.3.3",
6
6
  "@angular/common": "^17.3.3",