@softheon/armature 17.15.12 → 17.15.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ag-grid-components/src/sof-table/sof-table.component.d.ts +1 -1
- package/esm2022/ag-grid-components/src/sof-table/sof-table.component.mjs +13 -6
- package/fesm2022/softheon-armature-ag-grid-components.mjs +12 -5
- package/fesm2022/softheon-armature-ag-grid-components.mjs.map +1 -1
- package/package.json +1 -1
- package/ag-grid-components/package.json +0 -3
|
@@ -155,7 +155,7 @@ export declare class SofTableComponent implements OnInit, OnChanges {
|
|
|
155
155
|
* @returns an array of column data formatted to be ingested by the `SofColumnOptionsComponent`
|
|
156
156
|
*/
|
|
157
157
|
private columnStateToData;
|
|
158
|
-
/** Emit the current filtered row data */
|
|
158
|
+
/** Emit the current filtered/sorted row data */
|
|
159
159
|
exportFilteredRowData(): void;
|
|
160
160
|
static ɵfac: i0.ɵɵFactoryDeclaration<SofTableComponent, never>;
|
|
161
161
|
static ɵcmp: i0.ɵɵComponentDeclaration<SofTableComponent, "sof-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "colDefs": { "alias": "colDefs"; "required": false; }; "sizeMode": { "alias": "sizeMode"; "required": false; }; "paginationPageSizeSelector": { "alias": "paginationPageSizeSelector"; "required": false; }; "enableSearch": { "alias": "enableSearch"; "required": false; }; "enableFilter": { "alias": "enableFilter"; "required": false; }; "enableColumnOptions": { "alias": "enableColumnOptions"; "required": false; }; "enableExport": { "alias": "enableExport"; "required": false; }; "showSaveColumnOptionsText": { "alias": "showSaveColumnOptionsText"; "required": false; }; "tableName": { "alias": "tableName"; "required": false; }; "savedColumnState": { "alias": "savedColumnState"; "required": false; }; }, { "updatedColumnState": "updatedColumnState"; "filteredRowDataForExport": "filteredRowDataForExport"; }, never, ["[sof-table-right-buttons]"], false, never>;
|
|
@@ -420,13 +420,20 @@ export class SofTableComponent {
|
|
|
420
420
|
};
|
|
421
421
|
});
|
|
422
422
|
}
|
|
423
|
-
/** Emit the current filtered row data */
|
|
423
|
+
/** Emit the current filtered/sorted row data */
|
|
424
424
|
exportFilteredRowData() {
|
|
425
|
-
const
|
|
426
|
-
this.gridApi.
|
|
427
|
-
|
|
425
|
+
const exportedRows = [];
|
|
426
|
+
const columns = this.gridApi.getAllDisplayedColumns().filter((col) => col.getColDef().headerName);
|
|
427
|
+
this.gridApi.forEachNodeAfterFilterAndSort((node) => {
|
|
428
|
+
const rowData = {};
|
|
429
|
+
columns.forEach(col => {
|
|
430
|
+
const colId = col.getColId();
|
|
431
|
+
// Use gridApi's getCellValue to get the value transformed by valueGetter
|
|
432
|
+
rowData[colId] = this.gridApi.getCellValue({ rowNode: node, colKey: colId });
|
|
433
|
+
});
|
|
434
|
+
exportedRows.push(rowData);
|
|
428
435
|
});
|
|
429
|
-
this.filteredRowDataForExport.emit(
|
|
436
|
+
this.filteredRowDataForExport.emit(exportedRows);
|
|
430
437
|
}
|
|
431
438
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SofTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
432
439
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: SofTableComponent, selector: "sof-table", inputs: { rowData: "rowData", colDefs: "colDefs", sizeMode: "sizeMode", paginationPageSizeSelector: "paginationPageSizeSelector", enableSearch: "enableSearch", enableFilter: "enableFilter", enableColumnOptions: "enableColumnOptions", enableExport: "enableExport", showSaveColumnOptionsText: "showSaveColumnOptionsText", tableName: "tableName", savedColumnState: "savedColumnState" }, outputs: { updatedColumnState: "updatedColumnState", filteredRowDataForExport: "filteredRowDataForExport" }, viewQueries: [{ propertyName: "gridSearchTextInput", first: true, predicate: ["gridSearchTextInput"], descendants: true }, { propertyName: "ariaResultsCount", first: true, predicate: ["ariaResultsCount"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n fxLayoutGap=\"16px\" m-b-24>\r\n @if (enableFilter && colFilters.length) {\r\n <button \r\n (click)=\"toggleFilterPanel()\" \r\n mat-flat-button class=\"sof-button-v2\"\r\n [class.filter-selected]=\"filterOpenState\" \r\n id=\"btn-enable-filter\" color=\"secondary\" size=\"small\">\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n {{'armature.sof-table.filter' | translate}}\r\n </button>\r\n }\r\n @if (enableSearch) {\r\n <mat-form-field class=\"sof-form-field table-search-field dense-4\" fxFlex=\"auto\">\r\n <span matPrefix>\r\n <i class=\"ph-bold ph-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <mat-label class=\"search-label\">{{'armature.sof-table.search' | translate}}</mat-label>\r\n <input \r\n (input)=\"onSearchTextChanged()\" \r\n #gridSearchTextInput matInput type=\"text\" id=\"gridSearchTextInput\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.search-filter-description' | translate\"/>\r\n </mat-form-field>\r\n }\r\n @if (enableColumnOptions) {\r\n <button \r\n (click)=\"openColumnOptions()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"open-column-options\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-pause\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if(enableExport) {\r\n <button \r\n (click)=\"exportFilteredRowData()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"export-table\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-export\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <ng-content select=\"[sof-table-right-buttons]\"></ng-content>\r\n <!-- \r\n Only inject <button>'s inside an <ng-container sof-table-right-buttons>\r\n ... \r\n <ng-container sof-table-right-buttons>\r\n <button \r\n (click)=\"anyFunction()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" aria-label=\"any button\"\r\n matTooltip=\"any button\" matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-acorn\" aria-hidden=\"true\"></i>\r\n </button>\r\n </ng-container>\r\n ... \r\n note: make sure buttons have the following attributes to match others =\r\n `mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"`\r\n * remember to add aria-label and tooltip for icon button\r\n -->\r\n</div>\r\n\r\n<div #ariaResultsCount class=\"sr-only\" aria-live=\"assertive\"></div>\r\n\r\n@if (isGridDataRendered() && filterOpenState) {\r\n <fieldset \r\n class=\"filter-panel\" role=\"region\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.select-filters-description' | translate\">\r\n <p>\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n <span class=\"m-l-8\">{{'armature.sof-table.filter' | translate}}</span>\r\n </p>\r\n <div class=\"filter-panel-select-container m-v-20\">\r\n @for (colFilter of colFilters; let i = $index; track i) {\r\n <mat-form-field appearance=\"outline\" class=\"sof-form-field table-filter-select\">\r\n <mat-label>{{colFilter.label}}</mat-label>\r\n <mat-select \r\n [(ngModel)]=\"filterSelections[i]\" \r\n multiple \r\n id=\"filterDropdown{{i}}\"\r\n placeholder=\"{{'armature.sof-table.all' | translate}}\" disableRipple=\"true\">\r\n @for (colOption of colFilter.options; track $index) {\r\n <mat-option [value]=\"colOption\">\r\n {{colOption}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n <div fxLayout=\"row\">\r\n <div fxFlex=\"50%\">\r\n <button \r\n (click)=\"clearFilters()\" [disabled]=\"hasEmptyFilters()\" \r\n mat-button class=\"sof-button-v2\" size=\"medium\"\r\n id=\"tableFilterClear\" color=\"tertiary\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"50%\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"2%\" fxLayoutAlign=\"flex-end\">\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"cancelFilterChanges()\" mat-button class=\"sof-button-v2\" \r\n size=\"medium\" id=\"tableFilterCancel\" color=\"tertiary\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"applyFilters()\" mat-flat-button class=\"sof-button-v2\"\r\n size=\"medium\" id=\"tableFilterApply\" color=\"primary\">\r\n {{'armature.sof-table.results' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n<ag-grid-angular \r\n [fxShow]=\"isGridDataRendered()\"\r\n (gridReady)=\"onGridReady($event)\" \r\n (firstDataRendered)=\"onFirstDataRendered()\"\r\n (filterChanged)=\"onFilterChanged()\"\r\n (paginationChanged)=\"changePageSize($event)\" \r\n [rowData]=\"rowData\" \r\n [columnDefs]=\"colDefs\" \r\n [defaultColDef]=\"defaultColDef\" \r\n [pagination]=\"true\" \r\n [suppressPaginationPanel]=\"true\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" \r\n [paginationPageSize]=\"paginationPageSize\"\r\n [headerHeight]=\"rowHeight\" \r\n [rowHeight]=\"rowHeight\" \r\n [domLayout]=\"'autoHeight'\" \r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [overlayNoRowsTemplate]=\"'armature.sof-table.no-rows' | translate\"\r\n [class.no-rows]=\"!totalLength\"\r\n class=\"ag-theme-material\">\r\n</ag-grid-angular>\r\n\r\n<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n class=\"custom-paginator\">\r\n <div class=\"first-section\">\r\n <button class=\"button-part-1\" type=\"button\">\r\n <mat-select \r\n #pageSizeSelect\r\n id=\"pageSizeInput\" name=\"pageSizeInput\" \r\n [(value)]=\"paginationPageSize\" disableRipple=\"true\">\r\n @for (size of paginationPageSizeSelector; let i = $index; track i) {\r\n <mat-option \r\n class=\"page-option\" id=\"size{{i}}\"\r\n [value]=\"paginationPageSizeSelector[i]\">\r\n {{size}}\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{paginationPageSize}}</span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageSizeSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n <span class=\"pageChangeText\">\r\n {{pageChangeText}} {{'armature.sof-table.of' | translate}} {{totalLength}}\r\n </span>\r\n </div>\r\n <div class=\"go-to-page\">\r\n <div class=\"outer-box\">\r\n <button class=\"button-part\" type=\"button\">\r\n <mat-select \r\n #pageNumberSelect\r\n (selectionChange)=\"onPageNumberChange($event.value)\"\r\n [(value)]=\"currentPage\" \r\n id=\"pageSelelctor\" name=\"pageSelector\" disableRipple=\"true\">\r\n @for (page of pageSelector; track $index) {\r\n <mat-option [value]=\"page\" class=\"page-option\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{page}}</span>\r\n </span>\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{currentPage}}</span>\r\n <span class=\"of-page\"> {{'armature.sof-table.of' | translate}} {{totalNumberOfPages}} </span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageNumberSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n </div>\r\n <nav class=\"second-section\">\r\n <button \r\n (click)=\"previousPage()\"\r\n id=\"prev-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === 1\" \r\n [attr.aria-label]=\"'screen-reader.pagination.previous' | translate\">\r\n <i class=\"ph-bold ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button \r\n (click)=\"nextPage()\" \r\n id=\"next-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === totalNumberOfPages\"\r\n [attr.aria-label]=\"'screen-reader.pagination.next' | translate\">\r\n <i class=\"ph-bold ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n@if (!isGridDataRendered()) {\r\n <div class=\"loading-container\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"/>\r\n </div>\r\n}\r\n", styles: ["@font-face{font-family:agGridMaterial;src:url(data:font/woff2;charset=utf-8;base64,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);font-weight:400;font-style:normal}.ag-theme-material,.ag-theme-material-dark,.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #ff4081;--ag-foreground-color: rgba(0, 0, 0, .87);--ag-secondary-foreground-color: rgba(0, 0, 0, .54);--ag-disabled-foreground-color: rgba(0, 0, 0, .38);--ag-background-color: #fff;--ag-header-background-color: #fff;--ag-tooltip-background-color: #fff;--ag-subheader-background-color: #eee;--ag-subheader-toolbar-background-color: rgba(238, 238, 238, .5);--ag-header-cell-hover-background-color: #f2f2f2;--ag-chip-background-color: #e2e2e2;--ag-range-selection-background-color: rgba(122, 134, 203, .1);--ag-range-selection-background-color-2: rgba(122, 134, 203, .19);--ag-range-selection-background-color-3: rgba(122, 134, 203, .27);--ag-range-selection-background-color-4: rgba(122, 134, 203, .34);--ag-range-selection-highlight-color: #fce4ec;--ag-row-hover-color: #fafafa;--ag-column-hover-color: #fafafa;--ag-control-panel-background-color: #fafafa;--ag-selected-row-background-color: rgba(33, 150, 243, .3);--ag-checkbox-unchecked-color: #333;--ag-value-change-value-highlight-background-color: #00acc1;--ag-side-button-selected-background-color: transparent;--ag-advanced-filter-join-pill-color: #f08e8d;--ag-advanced-filter-column-pill-color: #a6e194;--ag-advanced-filter-option-pill-color: #f3c08b;--ag-advanced-filter-value-pill-color: #85c0e4;--ag-range-selection-border-color: var(--ag-material-primary-color);--ag-checkbox-checked-color: var(--ag-material-accent-color);--ag-borders: none;--ag-borders-critical: solid 1px;--ag-border-color: #e2e2e2;--ag-grid-size: 8px;--ag-icon-size: 18px;--ag-header-height: calc(var(--ag-grid-size) * 7);--ag-row-height: calc(var(--ag-grid-size) * 6);--ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);--ag-list-item-height: calc(var(--ag-grid-size) * 4);--ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));--ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);--ag-checkbox-border-radius: 2px;--ag-toggle-button-switch-border-width: 2px;--ag-toggle-button-height: var(--ag-icon-size);--ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);--ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);--ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);--ag-font-family: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ag-font-size: 13px;--ag-icon-font-family: agGridMaterial;--ag-selected-tab-underline-color: var(--ag-material-primary-color);--ag-selected-tab-underline-width: 2px;--ag-input-focus-border-color: var(--ag-material-primary-color);--ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, .122);--ag-card-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12);--ag-card-radius: 2px;--ag-invalid-color: #e02525}.ag-theme-material-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}@media (prefers-color-scheme: dark){.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material .ag-filter-toolpanel-search,.ag-theme-material .ag-status-bar,.ag-theme-material .ag-header-row,.ag-theme-material .ag-panel-title-bar-title,.ag-theme-material .ag-multi-filter-group-title-bar,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-search,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-dark .ag-header-row,.ag-theme-material-dark .ag-panel-title-bar-title,.ag-theme-material-dark .ag-multi-filter-group-title-bar,.ag-theme-material-auto-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-search,.ag-theme-material-auto-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-header-row,.ag-theme-material-auto-dark .ag-panel-title-bar-title,.ag-theme-material-auto-dark .ag-multi-filter-group-title-bar{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-header-foreground-color)}.ag-theme-material .ag-tab,.ag-theme-material-dark .ag-tab,.ag-theme-material-auto-dark .ag-tab{height:calc(var(--ag-grid-size) * 4.5);flex:1 1 auto}.ag-theme-material .ag-tabs-header,.ag-theme-material .ag-column-drop-horizontal,.ag-theme-material-dark .ag-tabs-header,.ag-theme-material-dark .ag-column-drop-horizontal,.ag-theme-material-auto-dark .ag-tabs-header,.ag-theme-material-auto-dark .ag-column-drop-horizontal{background-color:var(--ag-subheader-background-color)}.ag-theme-material .ag-tabs-body,.ag-theme-material-dark .ag-tabs-body,.ag-theme-material-auto-dark .ag-tabs-body{padding:calc(var(--ag-grid-size) * .5) 0}.ag-theme-material .ag-tabs-body .ag-menu-list,.ag-theme-material-dark .ag-tabs-body .ag-menu-list,.ag-theme-material-auto-dark .ag-tabs-body .ag-menu-list{padding-top:0;padding-bottom:0}.ag-theme-material .ag-header-cell,.ag-theme-material .ag-header-group-cell,.ag-theme-material-dark .ag-header-cell,.ag-theme-material-dark .ag-header-group-cell,.ag-theme-material-auto-dark .ag-header-cell,.ag-theme-material-auto-dark .ag-header-group-cell{transition:background-color .5s}.ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing{bottom:0}.ag-theme-material .ag-cell-inline-editing,.ag-theme-material-dark .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-cell-inline-editing{padding:var(--ag-grid-size);height:calc(var(--ag-row-height) + var(--ag-grid-size) * 3);border-color:var(--ag-border-color)!important}.ag-theme-material .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-dark .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-has-focus .ag-cell-inline-editing{border-color:var(--ag-input-focus-border-color)!important}.ag-theme-material .ag-column-drop-vertical,.ag-theme-material-dark .ag-column-drop-vertical,.ag-theme-material-auto-dark .ag-column-drop-vertical{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color);padding-top:var(--ag-grid-size)}.ag-theme-material .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-dark .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-auto-dark .ag-column-drop-vertical.ag-last-column-drop{border-bottom:none}.ag-theme-material .ag-column-drop-vertical-cell,.ag-theme-material-dark .ag-column-drop-vertical-cell,.ag-theme-material-auto-dark .ag-column-drop-vertical-cell{margin-left:0}.ag-theme-material .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-column-drop-vertical-empty-message{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-disabled-foreground-color)}.ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-ltr .ag-column-drop-vertical-empty-message{padding-left:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-right:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-rtl .ag-column-drop-vertical-empty-message{padding-right:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-left:var(--ag-grid-size)}.ag-theme-material .ag-status-bar,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-status-bar{border:solid 1px;border-color:var(--ag-border-color)}.ag-theme-material .ag-column-panel-column-select,.ag-theme-material-dark .ag-column-panel-column-select,.ag-theme-material-auto-dark .ag-column-panel-column-select{border-top:solid 1px;border-top-color:var(--ag-border-color)}.ag-theme-material .ag-column-select,.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select,.ag-theme-material-auto-dark .ag-column-select-header{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color)}.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select-header{height:var(--ag-header-height)}.ag-theme-material .ag-group-title-bar,.ag-theme-material-dark .ag-group-title-bar,.ag-theme-material-auto-dark .ag-group-title-bar{padding:calc(var(--ag-grid-size) * .75) var(--ag-grid-size)}.ag-theme-material .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-dark .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-auto-dark .ag-charts-format-sub-level-group-title-bar{padding:calc(var(--ag-grid-size) * .5) var(--ag-grid-size)}.ag-theme-material .ag-chart-data-section,.ag-theme-material .ag-chart-format-section,.ag-theme-material .ag-chart-advanced-settings-section,.ag-theme-material-dark .ag-chart-data-section,.ag-theme-material-dark .ag-chart-format-section,.ag-theme-material-dark .ag-chart-advanced-settings-section,.ag-theme-material-auto-dark .ag-chart-data-section,.ag-theme-material-auto-dark .ag-chart-format-section,.ag-theme-material-auto-dark .ag-chart-advanced-settings-section{padding-bottom:calc(var(--ag-grid-size) * .5)}.ag-theme-material .ag-chart-menu-close,.ag-theme-material-dark .ag-chart-menu-close,.ag-theme-material-auto-dark .ag-chart-menu-close{background:var(--ag-background-color)}.ag-theme-material .ag-chart-menu-close .ag-icon,.ag-theme-material-dark .ag-chart-menu-close .ag-icon,.ag-theme-material-auto-dark .ag-chart-menu-close .ag-icon{background:var(--ag-subheader-background-color)}.ag-theme-material input[class^=ag-]:not([type]),.ag-theme-material input[class^=ag-][type=text],.ag-theme-material input[class^=ag-][type=number],.ag-theme-material input[class^=ag-][type=tel],.ag-theme-material input[class^=ag-][type=date],.ag-theme-material input[class^=ag-][type=datetime-local],.ag-theme-material textarea[class^=ag-],.ag-theme-material-dark input[class^=ag-]:not([type]),.ag-theme-material-dark input[class^=ag-][type=text],.ag-theme-material-dark input[class^=ag-][type=number],.ag-theme-material-dark input[class^=ag-][type=tel],.ag-theme-material-dark input[class^=ag-][type=date],.ag-theme-material-dark input[class^=ag-][type=datetime-local],.ag-theme-material-dark textarea[class^=ag-],.ag-theme-material-auto-dark input[class^=ag-]:not([type]),.ag-theme-material-auto-dark input[class^=ag-][type=text],.ag-theme-material-auto-dark input[class^=ag-][type=number],.ag-theme-material-auto-dark input[class^=ag-][type=tel],.ag-theme-material-auto-dark input[class^=ag-][type=date],.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local],.ag-theme-material-auto-dark textarea[class^=ag-]{background:transparent;color:var(--ag-foreground-color);font-family:inherit;font-size:inherit;height:calc(var(--ag-grid-size) * 5);padding-bottom:var(--ag-grid-size);border-width:0;border-radius:0;border-bottom:2px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):focus,.ag-theme-material input[class^=ag-][type=text]:focus,.ag-theme-material input[class^=ag-][type=number]:focus,.ag-theme-material input[class^=ag-][type=tel]:focus,.ag-theme-material input[class^=ag-][type=date]:focus,.ag-theme-material input[class^=ag-][type=datetime-local]:focus,.ag-theme-material textarea[class^=ag-]:focus,.ag-theme-material-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-dark input[class^=ag-][type=text]:focus,.ag-theme-material-dark input[class^=ag-][type=number]:focus,.ag-theme-material-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-dark input[class^=ag-][type=date]:focus,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-dark textarea[class^=ag-]:focus,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-auto-dark input[class^=ag-][type=text]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=number]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=date]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-auto-dark textarea[class^=ag-]:focus{border-bottom:2px solid;border-bottom-color:var(--ag-material-primary-color);outline:none;box-shadow:none}.ag-theme-material input[class^=ag-]:not([type])::placeholder,.ag-theme-material input[class^=ag-][type=text]::placeholder,.ag-theme-material input[class^=ag-][type=number]::placeholder,.ag-theme-material input[class^=ag-][type=tel]::placeholder,.ag-theme-material input[class^=ag-][type=date]::placeholder,.ag-theme-material input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material textarea[class^=ag-]::placeholder,.ag-theme-material-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-dark textarea[class^=ag-]::placeholder,.ag-theme-material-auto-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-auto-dark textarea[class^=ag-]::placeholder{color:var(--ag-disabled-foreground-color)}.ag-theme-material input[class^=ag-]:not([type]):disabled,.ag-theme-material input[class^=ag-][type=text]:disabled,.ag-theme-material input[class^=ag-][type=number]:disabled,.ag-theme-material input[class^=ag-][type=tel]:disabled,.ag-theme-material input[class^=ag-][type=date]:disabled,.ag-theme-material input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material textarea[class^=ag-]:disabled,.ag-theme-material-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-dark textarea[class^=ag-]:disabled,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-auto-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-auto-dark textarea[class^=ag-]:disabled{border-bottom:1px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):invalid,.ag-theme-material input[class^=ag-][type=text]:invalid,.ag-theme-material input[class^=ag-][type=number]:invalid,.ag-theme-material input[class^=ag-][type=tel]:invalid,.ag-theme-material input[class^=ag-][type=date]:invalid,.ag-theme-material input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material textarea[class^=ag-]:invalid,.ag-theme-material-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-dark textarea[class^=ag-]:invalid,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-auto-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-auto-dark textarea[class^=ag-]:invalid{border-width:0;border-bottom:1px solid;border-bottom-color:var(--ag-invalid-color);color:var(--ag-invalid-color)}.ag-theme-material .ag-standard-button,.ag-theme-material-dark .ag-standard-button,.ag-theme-material-auto-dark .ag-standard-button{appearance:none;background-color:transparent;border:0;color:var(--ag-material-primary-color);font-family:inherit;font-size:inherit;margin:0;padding:0;text-transform:uppercase}.ag-theme-material .ag-standard-button:disabled,.ag-theme-material-dark .ag-standard-button:disabled,.ag-theme-material-auto-dark .ag-standard-button:disabled{color:var(--ag-disabled-foreground-color);background-color:var(--ag-input-disabled-background-color);border-color:var(--ag-input-disabled-border-color)}.ag-theme-material.ag-dnd-ghost,.ag-theme-material-dark.ag-dnd-ghost,.ag-theme-material-auto-dark.ag-dnd-ghost{font-size:calc(var(--ag-font-size) - 1px);font-weight:600}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-header{height:calc(var(--ag-grid-size) * 4)}.ag-theme-material .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-dark .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-group-level-0-header{height:calc(var(--ag-grid-size) * 7)}.ag-theme-material .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-builder-button{margin-left:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-builder-button{margin-right:var(--ag-grid-size)}.ag-theme-material .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material .ag-layout-print .ag-center-cols-viewport,.ag-theme-material .ag-layout-print .ag-center-cols-container,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-print .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-container{min-height:150px}.ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-auto-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height{padding-top:60px}.ag-theme-material .ag-picker-field-wrapper:focus-within,.ag-theme-material-dark .ag-picker-field-wrapper:focus-within,.ag-theme-material-auto-dark .ag-picker-field-wrapper:focus-within{box-shadow:0 0 0 1px var(--ag-material-primary-color)}.ag-theme-material .ag-rich-select-list,.ag-theme-material-dark .ag-rich-select-list,.ag-theme-material-auto-dark .ag-rich-select-list{box-shadow:#0003 0 5px 5px -3px,#00000024 0 8px 10px 1px,#0000001f 0 3px 14px 2px}.ag-theme-material .ag-advanced-filter-builder-button-label,.ag-theme-material-dark .ag-advanced-filter-builder-button-label,.ag-theme-material-auto-dark .ag-advanced-filter-builder-button-label{text-transform:uppercase}.ag-theme-material .ag-filter-active .ag-icon-filter,.ag-theme-material-dark .ag-filter-active .ag-icon-filter,.ag-theme-material-auto-dark .ag-filter-active .ag-icon-filter{color:var(--ag-material-accent-color)}.ag-theme-material textarea[class^=ag-chart-title-edit],.ag-theme-material-dark textarea[class^=ag-chart-title-edit],.ag-theme-material-auto-dark textarea[class^=ag-chart-title-edit]{background-color:var(--ag-background-color)}:root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: rgba(20, 110, 246, .04);--primary-color-A200-parts: rgba(20, 110, 246, .08);--primary-color-A300-parts: rgba(20, 110, 246, .16);--primary-color-A400-parts: rgba(20, 110, 246, .24);--primary-color-A500-parts: rgba(20, 110, 246, .32);--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A500-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 20, 110, 246, .04;--primary-color-A200-parts-rgb: 20, 110, 246, .08;--primary-color-A300-parts-rgb: 20, 110, 246, .16;--primary-color-A400-parts-rgb: 20, 110, 246, .24;--primary-color-A500-parts-rgb: 20, 110, 246, .32;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: rgba(0, 150, 136, .04);--accent-color-A200-parts: rgba(0, 150, 136, .08);--accent-color-A300-parts: rgba(0, 150, 136, .16);--accent-color-A400-parts: rgba(0, 150, 136, .24);--accent-color-A500-parts: rgba(0, 150, 136, .32);--accent-color-contrast-50-parts: rgba(0, 0, 0, .87);--accent-color-contrast-100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-500-parts: rgba(255, 255, 255, 1);--accent-color-contrast-600-parts: rgba(255, 255, 255, 1);--accent-color-contrast-700-parts: rgba(255, 255, 255, 1);--accent-color-contrast-800-parts: rgba(255, 255, 255, 1);--accent-color-contrast-900-parts: rgba(255, 255, 255, 1);--accent-color-contrast-A100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A500-parts: rgba(0, 0, 0, .87);--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 0, 150, 136, .04;--accent-color-A200-parts-rgb: 0, 150, 136, .08;--accent-color-A300-parts-rgb: 0, 150, 136, .16;--accent-color-A400-parts-rgb: 0, 150, 136, .24;--accent-color-A500-parts-rgb: 0, 150, 136, .32;--warn-color-50-parts: #fceee3;--warn-color-100-parts: #f8d4b9;--warn-color-200-parts: #f4b78b;--warn-color-300-parts: #ef9a5d;--warn-color-400-parts: #eb843a;--warn-color-500-parts: #e86e17;--warn-color-600-parts: #e56614;--warn-color-700-parts: #e25b11;--warn-color-800-parts: #de510d;--warn-color-900-parts: #d83f07;--warn-color-A100-parts: rgba(232, 110, 23, .04);--warn-color-A200-parts: rgba(232, 110, 23, .08);--warn-color-A300-parts: rgba(232, 110, 23, .16);--warn-color-A400-parts: rgba(232, 110, 23, .24);--warn-color-A500-parts: rgba(232, 110, 23, .32);--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(255, 255, 255, 1);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A500-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 252, 238, 227;--warn-color-100-parts-rgb: 248, 212, 185;--warn-color-200-parts-rgb: 244, 183, 139;--warn-color-300-parts-rgb: 239, 154, 93;--warn-color-400-parts-rgb: 235, 132, 58;--warn-color-500-parts-rgb: 232, 110, 23;--warn-color-600-parts-rgb: 229, 102, 20;--warn-color-700-parts-rgb: 226, 91, 17;--warn-color-800-parts-rgb: 222, 81, 13;--warn-color-900-parts-rgb: 216, 63, 7;--warn-color-A100-parts-rgb: 232, 110, 23, .04;--warn-color-A200-parts-rgb: 232, 110, 23, .08;--warn-color-A300-parts-rgb: 232, 110, 23, .16;--warn-color-A400-parts-rgb: 232, 110, 23, .24;--warn-color-A500-parts-rgb: 232, 110, 23, .32;--info-color-50-parts: #edf4ff;--info-color-100-parts: #b9d4fc;--info-color-200-parts: #8ab7fb;--info-color-300-parts: #5b9af9;--info-color-400-parts: #3784f7;--info-color-500-parts: #146ef6;--info-color-600-parts: #1266f5;--info-color-700-parts: #0e5bf3;--info-color-800-parts: #0b51f2;--info-color-900-parts: #063fef;--info-color-A100-parts: rgba(20, 110, 246, .04);--info-color-A200-parts: rgba(20, 110, 246, .08);--info-color-A300-parts: rgba(20, 110, 246, .16);--info-color-A400-parts: rgba(20, 110, 246, .24);--info-color-A500-parts: rgba(20, 110, 246, .32);--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A300-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A500-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 237, 244, 255;--info-color-100-parts-rgb: 185, 212, 252;--info-color-200-parts-rgb: 138, 183, 251;--info-color-300-parts-rgb: 91, 154, 249;--info-color-400-parts-rgb: 55, 132, 247;--info-color-500-parts-rgb: 20, 110, 246;--info-color-600-parts-rgb: 18, 102, 245;--info-color-700-parts-rgb: 14, 91, 243;--info-color-800-parts-rgb: 11, 81, 242;--info-color-900-parts-rgb: 6, 63, 239;--info-color-A100-parts-rgb: 20, 110, 246, .04;--info-color-A200-parts-rgb: 20, 110, 246, .08;--info-color-A300-parts-rgb: 20, 110, 246, .16;--info-color-A400-parts-rgb: 20, 110, 246, .24;--info-color-A500-parts-rgb: 20, 110, 246, .32;--success-color-50-parts: #e7f0e6;--success-color-100-parts: #c4dac1;--success-color-200-parts: #9cc198;--success-color-300-parts: #74a86e;--success-color-400-parts: #57954f;--success-color-500-parts: #398230;--success-color-600-parts: #337a2b;--success-color-700-parts: #2c6f24;--success-color-800-parts: #24651e;--success-color-900-parts: #175213;--success-color-A100-parts: rgba(57, 130, 48, .04);--success-color-A200-parts: rgba(57, 130, 48, .08);--success-color-A300-parts: rgba(57, 130, 48, .16);--success-color-A400-parts: rgba(57, 130, 48, .24);--success-color-A500-parts: rgba(57, 130, 48, .32);--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(255, 255, 255, 1);--success-color-contrast-600-parts: rgba(255, 255, 255, 1);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A300-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A500-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 231, 240, 230;--success-color-100-parts-rgb: 196, 218, 193;--success-color-200-parts-rgb: 156, 193, 152;--success-color-300-parts-rgb: 116, 168, 110;--success-color-400-parts-rgb: 87, 149, 79;--success-color-500-parts-rgb: 57, 130, 48;--success-color-600-parts-rgb: 51, 122, 43;--success-color-700-parts-rgb: 44, 111, 36;--success-color-800-parts-rgb: 36, 101, 30;--success-color-900-parts-rgb: 23, 82, 19;--success-color-A100-parts-rgb: 57, 130, 48, .04;--success-color-A200-parts-rgb: 57, 130, 48, .08;--success-color-A300-parts-rgb: 57, 130, 48, .16;--success-color-A400-parts-rgb: 57, 130, 48, .24;--success-color-A500-parts-rgb: 57, 130, 48, .32;--error-color-50-parts: #fae5e4;--error-color-100-parts: #f3bdba;--error-color-200-parts: #eb928d;--error-color-300-parts: #e3665f;--error-color-400-parts: #dd453c;--error-color-500-parts: #d7241a;--error-color-600-parts: #d32017;--error-color-700-parts: #cd1b13;--error-color-800-parts: #c7160f;--error-color-900-parts: #be0d08;--error-color-A100-parts: rgba(215, 36, 26, .04);--error-color-A200-parts: rgba(215, 36, 26, .08);--error-color-A300-parts: rgba(215, 36, 26, .16);--error-color-A400-parts: rgba(215, 36, 26, .24);--error-color-A500-parts: rgba(215, 36, 26, .32);--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A300-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A500-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 250, 229, 228;--error-color-100-parts-rgb: 243, 189, 186;--error-color-200-parts-rgb: 235, 146, 141;--error-color-300-parts-rgb: 227, 102, 95;--error-color-400-parts-rgb: 221, 69, 60;--error-color-500-parts-rgb: 215, 36, 26;--error-color-600-parts-rgb: 211, 32, 23;--error-color-700-parts-rgb: 205, 27, 19;--error-color-800-parts-rgb: 199, 22, 15;--error-color-900-parts-rgb: 190, 13, 8;--error-color-A100-parts-rgb: 215, 36, 26, .04;--error-color-A200-parts-rgb: 215, 36, 26, .08;--error-color-A300-parts-rgb: 215, 36, 26, .16;--error-color-A400-parts-rgb: 215, 36, 26, .24;--error-color-A500-parts-rgb: 215, 36, 26, .32;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: rgba(81, 81, 81, .04);--neutral-color-A200-parts: rgba(81, 81, 81, .08);--neutral-color-A300-parts: rgba(81, 81, 81, .16);--neutral-color-A400-parts: rgba(81, 81, 81, .24);--neutral-color-A500-parts: rgba(81, 81, 81, .32);--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A500-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 81, 81, 81, .04;--neutral-color-A200-parts-rgb: 81, 81, 81, .08;--neutral-color-A300-parts-rgb: 81, 81, 81, .16;--neutral-color-A400-parts-rgb: 81, 81, 81, .24;--neutral-color-A500-parts-rgb: 81, 81, 81, .32}#btn-enable-filter.filter-selected{background-color:#515151!important;color:#fff!important}.filter-panel{border-radius:8px!important;background-color:#fafafa;border:none;margin:0 0 24px;padding:20px}.filter-panel p{font-family:Poppins!important;font-style:normal!important;font-weight:500!important;font-size:16px!important;line-height:24px!important;margin-top:0!important}.filter-panel .filter-panel-select-container{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.ag-theme-material{width:100%;justify-content:center!important;--ag-font-size: 16px;--ag-font-family: \"Poppins\";--ag-header-background-color: #FAFAFA;--ag-background-color: #FFFFFF;--ag-borders: solid 1px #E9E9E9;--ag-wrapper-border-radius: 8px;--ag-cell-horizontal-padding: 16px;--ag-border-color: #E9E9E9;--ag-material-primary-color: var(--primary-color-500-parts) !important;--ag-material-accent-color: var(--primary-color-300-parts) !important;--ag-icon-size: 18px;--ag-header-cell-hover-background-color: #FFFFFF;--ag-row-hover-color: #FFFFFF;--ag-column-hover-color: #FFFFFF}@media only screen and (max-width: 752px){.ag-theme-material{--ag-cell-horizontal-padding: 8px;--ag-font-size: 12px}}.ag-theme-material ::ng-deep .ag-root-wrapper{border-left:solid 1px #E9E9E9!important;border-top:solid 1px #E9E9E9!important;border-bottom:solid 1px #E9E9E9!important}.ag-theme-material ::ng-deep .ag-cell-focus{border-color:var(--primary-color-300-parts)!important;border-width:3px!important}.ag-theme-material ::ng-deep .ag-header ::ng-deep .ag-pinned-left-header,.ag-theme-material ::ng-deep .ag-body-viewport ::ng-deep .ag-pinned-left-cols-container{position:relative;z-index:1;-webkit-box-shadow:2px 0px 2px 0px rgba(42,42,42,.1);box-shadow:2px 0 2px #2a2a2a1a}.ag-theme-material ::ng-deep .ag-checkbox{padding-right:16px!important;padding-left:16px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll,.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport{height:8px!important;max-height:8px!important;min-height:8px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible),.ag-theme-material ::ng-deep .ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:none}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport,.ag-theme-material ::ng-deep .ag-body-vertical-scroll-viewport{overflow:hidden}.ag-theme-material ::ng-deep .ag-horizontal-left-spacer{overflow-x:hidden}.ag-theme-material ::ng-deep .ag-header-cell{font-size:16px!important;font-weight:400;color:#0009!important}@media only screen and (max-width: 752px){.ag-theme-material ::ng-deep .ag-header-cell{font-size:12px!important}}.ag-theme-material ::ng-deep .ag-cell{font-weight:400!important;display:flex!important;flex-direction:column!important}.ag-theme-material ::ng-deep .ag-header-icon.ag-header-label-icon.ag-filter-icon{display:none!important}.ag-theme-material ::ng-deep .ag-center-cols-viewport,.ag-theme-material ::ng-deep .ag-center-cols-viewport .ag-center-cols-container{min-height:53px!important}.ag-theme-material ::ng-deep .ag-overlay-wrapper.ag-overlay-no-rows-wrapper{font-size:14px;font-weight:500;color:#0009}.ag-theme-material.no-rows ::ng-deep .ag-body-horizontal-scroll{display:none!important}.ag-theme-material.no-rows ::ng-deep .ag-root-wrapper{border:none!important}.ag-theme-material.no-rows ::ng-deep .ag-header{border-top:solid 1px #E9E9E9;border-left:solid 1px #E9E9E9;border-right:solid 1px #E9E9E9;border-top-left-radius:8px;border-top-right-radius:8px}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport{overflow-y:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport{overflow-x:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar{height:8px!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar{width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;height:8px!important;border:1px solid #FFFFFF}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.dense-4{--mat-form-field-container-height: 40px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 8px;--mat-form-field-filled-with-label-container-padding-top: 8px;--mat-form-field-filled-with-label-container-padding-bottom: 8px}.search-icon{font-weight:700;font-size:20px;color:#000000de;opacity:.87}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-form-field-subscript-wrapper{display:none}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper{border-radius:10px}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-right:8px!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#fafafa!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:#000000de;caret-color:#000000de;opacity:.87;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:before,:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:after{border:none!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above){display:block!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above) .search-label{color:#000000de;opacity:.6;font-family:Poppins;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper{outline:3px solid var(--primary-color-300-parts);outline-offset:2px}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper i.search-icon{color:var(--primary-color-500-parts)}::ng-deep .custom-paginator{width:100%;justify-content:flex-start;align-items:flex-start;display:inline-flex;height:40px!important;margin-top:24px}::ng-deep .custom-paginator .first-section{flex:1 1 0;align-self:stretch;justify-content:flex-start;align-items:center!important;gap:16px!important;display:flex}::ng-deep .custom-paginator .first-section .button-part-1{height:40px!important;align-self:center;padding-left:16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:center;display:inline-flex;border:none;gap:16px;border:2px solid transparent}::ng-deep .custom-paginator .first-section .button-part-1:hover,::ng-deep .custom-paginator .first-section .button-part-1:focus,::ng-deep .custom-paginator .first-section .button-part-1:active{border-radius:10px;justify-content:center;display:inline-flex;border-color:var(--primary-color-500-parts);height:40px!important;align-self:center;padding-left:16px;background:#fafafa;overflow:unset!important;align-items:center;gap:16px}::ng-deep .custom-paginator .first-section .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{align-items:center!important;width:100px!important}::ng-deep .custom-paginator .second-section{justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .page-select{height:100%;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:hidden;justify-content:flex-start;align-items:center;gap:16px;display:inline-flex}::ng-deep .custom-paginator .select-icon{width:100%;position:relative;height:20px!important;font-size:20px!important}::ng-deep .custom-paginator .pageChangeText{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .mat-select{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .go-to-page{width:fit-content;align-self:stretch;justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .go-to-page .outer-box{height:40px;flex-direction:column;justify-content:flex-start;align-items:flex-start;display:inline-flex}::ng-deep .custom-paginator .go-to-page .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .go-to-page .button-part{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border:2px solid transparent}::ng-deep .custom-paginator .go-to-page .button-part:hover,::ng-deep .custom-paginator .go-to-page .button-part:focus,::ng-deep .custom-paginator .go-to-page .button-part:active{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:10px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border-color:var(--primary-color-500-parts)}::ng-deep .custom-paginator .go-to-page .current-page{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .go-to-page .page{position:relative}::ng-deep .custom-paginator .go-to-page .of-page{position:relative;color:#0009}::ng-deep .custom-paginator .mat-mdc-select-value{font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .mat-form-field-appearance-outline .mat-mdc-select-arrow-wrapper{transform:none!important}::ng-deep .custom-paginator .mat-mdc-select-arrow{display:none!important}::ng-deep .custom-paginator .mat-form-field-underline{display:none!important}::ng-deep .custom-paginator .mdc-line-ripple{display:none!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper{background-color:#fff!important;height:40px!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-focus-overlay{display:none!important}::ng-deep .page-option mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar{-webkit-appearance:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:vertical{width:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:horizontal{height:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-thumb{border-radius:8px!important;border:2px solid #FFFFFF!important;background-color:#cfcfcf80!important}.table-filter-select ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.loading-container{display:flex;align-items:center;justify-content:center;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i6.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i9.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: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] }); }
|
|
@@ -477,4 +484,4 @@ class SofTableFilter {
|
|
|
477
484
|
/** A filter combining multiple conditions, taken from AgGrid*/
|
|
478
485
|
class CombinedSimpleModel {
|
|
479
486
|
}
|
|
480
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL2FnLWdyaWQtY29tcG9uZW50cy9zcmMvc29mLXRhYmxlL3NvZi10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9hZy1ncmlkLWNvbXBvbmVudHMvc3JjL3NvZi10YWJsZS9zb2YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUdMLHlCQUF5QixFQUMxQixNQUFNLGtEQUFrRCxDQUFDO0FBZTFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUV2RCw0Q0FBNEM7QUFNNUMsTUFBTSxPQUFPLGlCQUFpQjtJQUw5QjtRQU9FLHNFQUFzRTtRQUN0RCxZQUFPLEdBQWUsRUFBRSxDQUFDO1FBRXpDLDJEQUEyRDtRQUMzQyxZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUs1QyxrQkFBa0I7UUFDRiwrQkFBMEIsR0FBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU5RSxvQkFBb0I7UUFDSixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUU3QywwQ0FBMEM7UUFDMUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0MsNENBQTRDO1FBQzVCLHdCQUFtQixHQUFZ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QUFyRCxTQUFTO3VCQUFDLGtCQUFrQjs7QUF1Yi9CLHFDQUFxQztBQUNyQyxNQUFNLGNBQWM7SUFBcEI7UUFLRSxnQ0FBZ0M7UUFDaEMsWUFBTyxHQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQUE7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxtQkFBbUI7Q0FPeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBcclxuICBDb21wb25lbnQsIFxyXG4gIEVsZW1lbnRSZWYsIFxyXG4gIEV2ZW50RW1pdHRlciwgXHJcbiAgaW5qZWN0LCBcclxuICBJbnB1dCwgXHJcbiAgT25DaGFuZ2VzLCBcclxuICBPbkluaXQsIFxyXG4gIE91dHB1dCwgXHJcbiAgc2lnbmFsLCBcclxuICBTaW1wbGVDaGFuZ2VzLCBcclxuICBWaWV3Q2hpbGQsIFxyXG4gIFdyaXRhYmxlU2lnbmFsIFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBcclxuICBDb2x1bW5EYXRhLCBcclxuICBDb2x1bW5PcHRpb25zRGF0YSwgXHJcbiAgU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudCBcclxufSBmcm9tICcuLi9jb2x1bW4tb3B0aW9ucy1tb2RhbC9jb2x1bW4tb3B0aW9ucy5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBcHBseUNvbHVtblN0YXRlUGFyYW1zLFxyXG4gIENvbERlZixcclxuICBDb2x1bW5TdGF0ZSxcclxuICBGaWx0ZXJNb2RlbCxcclxuICBHcmlkQXBpLFxyXG4gIEdyaWRSZWFkeUV2ZW50LFxyXG4gIElSb3dOb2RlLFxyXG4gIFBhZ2luYXRpb25DaGFuZ2VkRXZlbnQsXHJcbiAgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zLFxyXG4gIFRleHRGaWx0ZXJNb2RlbFxyXG59IGZyb20gXCJhZy1ncmlkLWNvbW11bml0eVwiO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuLyoqIFRoZSBTb2Z0aGVvbiBBcm1hdHVyZSBUYWJsZSBjb21wb25lbnQgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzb2YtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zb2YtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zb2YtdGFibGUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTb2ZUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqIFRoZSBsYW5ndWFnZSB0ZXh0IG9yIGEga2V5IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGlzIGNvbXBvbmVudCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByb3dEYXRhOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIC8qKiBDb2x1bW4gRGVmaW5pdGlvbnM6IERlZmluZXMgJiBjb250cm9scyBncmlkIGNvbHVtbnMuICovXHJcbiAgQElucHV0KCkgcHVibGljIGNvbERlZnM6IEFycmF5PENvbERlZj4gPSBbXTtcclxuXHJcbiAgLyoqIFNpemUgbW9kZXMgZm9yIHRhYmxlICovXHJcbiAgQElucHV0KCkgcHJpdmF0ZSBzaXplTW9kZTogJ0NvbXBhY3QnIHwgJ1Jvb215JyB8ICdEZWZhdWx0JztcclxuXHJcbiAgLyoqIFBhZ2VzIHNpemVzICovXHJcbiAgQElucHV0KCkgcHVibGljIHBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yOiBBcnJheTxudW1iZXI+ID0gWzEwLCAyMCwgNTAsIDEwMF07XHJcblxyXG4gIC8qKiBFbmFibGUgc2VhcmNoICovXHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBFbmFibGUgY3VzdG9tIHRleHQgZmlsdGVyIGRyb3Bkb3ducyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogRW5hYmxlIGNvbHVtbiBvcHRpb25zIG1vZGFsIHNlbGVjdGlvbiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVDb2x1bW5PcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIEVuYWJsZSBleHBvcnQgYnV0dG9uIHRvIG91dHB1dCBmaWx0ZXJlZCByb3cgZGF0YSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFxyXG4gICAqIFRvIGRpc3BsYXkgdGhlIHRleHQgb24gdGhlIGNvbHVtbiBvcHRpb25zIG1vZGFsLCB3aGljaCBzdGF0ZXMgLVxyXG4gICAqIGBcIk9wdGlvbnMgd2lsbCBiZSBzYXZlZCBmb3IgdGhlIG5leHQgdGltZSB5b3UgbG9nIGluLlwiYFxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICogQGRlc2NyaXB0aW9uIHNldCB0byB0cnVlIGlmIHNldC11cCBmb3Igc2F2aW5nIHByZWZlcmVuY2VzIHRvIFVzZXIgZGF0YS5cclxuICAgKiBAbm90ZSBZb3UgY2FuIHN0aWxsIHNhdmUgcHJlZmVyZW5jZXMgdG8gX2xvY2FsXyBvciBfc2Vzc2lvbl8gc3RvcmFnZVxyXG4gICAqIHVzaW5nIHRoZSBgc2F2ZWRDb2x1bW5TdGF0ZWAgaW5wdXQsIGFuZCBgdXBkYXRlZENvbHVtblN0YXRlYCBvdXRwdXQgZXZlbnQuXHJcbiAgICogQHNlZSBUaGUgRGVtbyBzaXRlIGlzIHNhdmluZyB0byBsb2NhbCBzdG9yYWdlLlxyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIHNob3dTYXZlQ29sdW1uT3B0aW9uc1RleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFxyXG4gICAqIE5hbWUvbGFiZWwgb2YgdGhlIHRhYmxlIFxyXG4gICAqIEBub3RlIHNob3VsZCBiZSBhIHRyYW5zbGF0aW9uIGtleVxyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIHRhYmxlTmFtZTogc3RyaW5nO1xyXG5cclxuICAvKiogVXNlcnMgc2F2ZWQgY29sdW1uIG9wdGlvbnMgc3RhdGUgKi9cclxuICBASW5wdXQoKSBwcml2YXRlIHNhdmVkQ29sdW1uU3RhdGU6IEFwcGx5Q29sdW1uU3RhdGVQYXJhbXM7XHJcblxyXG4gIC8qKiBPdXRwdXQgdXBkYXRlZCBjb2x1bW4gb3B0aW9ucyBldmVudCB0byBzYXZlIHRvIHVzZXIgb3IgYnJvd3NlciBzdG9yYWdlICovXHJcbiAgQE91dHB1dCgpIHVwZGF0ZWRDb2x1bW5TdGF0ZTogRXZlbnRFbWl0dGVyPEFwcGx5Q29sdW1uU3RhdGVQYXJhbXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKiogT3V0cHV0IHVwZGF0ZWQgY29sdW1uIG9wdGlvbnMgZXZlbnQgdG8gc2F2ZSB0byB1c2VyIG9yIGJyb3dzZXIgc3RvcmFnZSAqL1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZFJvd0RhdGFGb3JFeHBvcnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKiogdGhlIHNlYXJjaCBpbnB1dCAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRTZWFyY2hUZXh0SW5wdXQnKSBncmlkU2VhcmNoVGV4dElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICAvKiogVGhlIGhpZGRlbiBlbGVtZW50IHRoYXQgYW5ub3VuY2VzIHdoZW4gdGhlIHRhYmxlIGNvbnRlbnQgY2hhbmdlcyBmcm9tIGZpbHRlciAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2FyaWFSZXN1bHRzQ291bnQnKSBwdWJsaWMgYXJpYVJlc3VsdHNDb3VudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIC8qKiBcclxuICAgKiBLZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGNvbHVtbiBzdGF0ZVxyXG4gICAqIEBub3RlIElmIGNvbHVtbnMgYXJlIHJlLWRlZmluZWQgKG9uQ2hhbmdlcyksIHRoaXMgc3RhdGUgd2lsbCBiZSBhcHBsaWVkXHJcbiAgKi9cclxuICBwcml2YXRlIGN1cnJlbnRDb2x1bW5TdGF0ZTogQXBwbHlDb2x1bW5TdGF0ZVBhcmFtcztcclxuXHJcbiAgLyoqIENvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJhYmxlICovXHJcbiAgcHVibGljIGNvbEZpbHRlcnM6IEFycmF5PFNvZlRhYmxlRmlsdGVyPiA9IFtdO1xyXG5cclxuICAvKiogUm93IEhlaWdodCBmb3IgdGFibGUgKi9cclxuICBwdWJsaWMgcm93SGVpZ2h0OiBudW1iZXIgPSA0ODtcclxuXHJcbiAgLyoqIEN1cnJlbnQgUGFnZSBJbmRleCAqL1xyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqIEdyaWQgQVBJICovXHJcbiAgcHJpdmF0ZSBncmlkQXBpITogR3JpZEFwaTtcclxuXHJcbiAgLyoqIElzIHRoZSB0YWJsZSByZWFkeSB0byBiZSBkaXNwbGF5ZWQgKi9cclxuICBwdWJsaWMgaXNHcmlkRGF0YVJlbmRlcmVkOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XHJcblxyXG4gIC8qKiBEZWZhdWx0IFBhZ2UgU2l6ZSAqL1xyXG4gIHB1YmxpYyBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDIwOyBcclxuXHJcbiAgLyoqIFRvb2wgdGlwIHNob3cgZGVsYXkgKi9cclxuICBwdWJsaWMgdG9vbHRpcFNob3dEZWxheTogbnVtYmVyID0gNTAwO1xyXG5cclxuICAvKiogXHJcbiAgICogRGVmYXVsdCBDb2x1bW4gRGVmaW5pdGlvbiBcclxuICAgKiBAbm90ZSAoc3VwcHJlc3NLZXlib2FyZEV2ZW50KSBUYWJsZSBjZWxscyBjYW4gYmUgbmF2aWdhdGVkIHdpdGggdGhlIGFycm93IGtleXMsIFxyXG4gICAqIGlmIHRoZSBjZWxsIGNvbnRhaW5zIGEgYnV0dG9uIHlvdSBjYW4gVGFiIGludG8gdGhlIGJ1dHRvbiwgZW50ZXIgfCBzcGFjZSB0byBpbnRlcmFjdC5cclxuICAqL1xyXG4gIHB1YmxpYyBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICByZXNpemFibGU6IGZhbHNlLCAvLyBkaXNhYmxlIHJlc2l6ZSBcclxuICAgIHN1cHByZXNzSGVhZGVyTWVudUJ1dHRvbjogdHJ1ZSwgLy8gZGlzYWJsZSBkZWZhdWx0IGZpbHRlciBtZW51IFxyXG4gICAgc3VwcHJlc3NNb3ZhYmxlOiB0cnVlLCAvLyBkaXNhYmxlIGRlZmF1bHQgZHJhZyAmIGRyb3AgZm9yIGNvbHVtbnMgXHJcbiAgICBjZWxsU3R5bGU6IHsganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIgfSxcclxuICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogKHBhcmFtczogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zKSA9PiB7XHJcbiAgICAgIHJldHVybiBwYXJhbXMuZXZlbnQua2V5ID09PSAnVGFiJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKiogTGVuZ3RoIG9mIGRhdGEgKi9cclxuICBwdWJsaWMgdG90YWxMZW5ndGg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlRvdGFsIG51bWJlciBvZiBwYWdlcyAqL1xyXG4gIHB1YmxpYyB0b3RhbE51bWJlck9mUGFnZXM6IG51bWJlcjtcclxuXHJcbiAgLyoqIFBhZ2UgQ2hhbmdlIHRleHQgKi9cclxuICBwdWJsaWMgcGFnZUNoYW5nZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFBhZ2Ugc2VsZWN0b3IgYXJyYXkgKi9cclxuICBwdWJsaWMgcGFnZVNlbGVjdG9yOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gIC8qKiBGaWx0ZXIgUGFuZWwgb3BlbiBzdGF0ZSAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJPcGVuU3RhdGU6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBUaGUgbGlzdCBvZiBmaWx0ZXJzIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWVzICovXHJcbiAgcHVibGljIGZpbHRlclNlbGVjdGlvbnM6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XHJcblxyXG4gIC8qKiBtYXQtZGlhbG9nICovXHJcbiAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xyXG5cclxuICAvKiogVHJhbnNsYXRpb24gc2VydmljZSAqL1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuXHJcbiAgLyoqIE9uIGNvbXBvbmVudCBpbml0ICovXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNpemVHcmlkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIE9uIENoYW5nZXNcclxuICAgKiBAcGFyYW0gY2hhbmdlcyBUaGUgaW5wdXQgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5yb3dEYXRhICYmICFjaGFuZ2VzLnJvd0RhdGEuZmlyc3RDaGFuZ2UgJiYgISF0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy50b3RhbExlbmd0aCA9IHRoaXMucm93RGF0YS5sZW5ndGg7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVGaWx0ZXJzKCk7XHJcbiAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgICAgdGhpcy5pc0dyaWREYXRhUmVuZGVyZWQuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMuY29sRGVmcyAmJiAhY2hhbmdlcy5jb2xEZWZzLmZpcnN0Q2hhbmdlICYmICEhdGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5hcHBseUNvbHVtblN0YXRlKHRoaXMuY3VycmVudENvbHVtblN0YXRlKTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlRmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSBncmlkIGhhcyBpbmdlc3RlZCB0aGUgaW5wdXQgZGF0YVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgR3JpZCBSZWFkeSBFdmVudCxcclxuICAgKiBUaGUgZ3JpZCBoYXMgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlYWR5IGZvciBtb3N0IGFwaSBjYWxscywgYnV0IG1heSBub3QgYmUgZnVsbHkgcmVuZGVyZWQgeWV0LlxyXG4gICAqIEBub3RlIHlvdSBjYW4gbm90IGFjY2VzcyB0aGlzLmdyaWRBcGkgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgcnVuLCBcclxuICAgKiBhbnkgYXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMuZ3JpZEFwaSBpbiB0aGlzIGNvbXBvbmVudHMgbmdPbkluaXQgb3IgdGhlIGZpcnN0IG5nT25DaGFuZ2VzIGN5Y2xlXHJcbiAgICogd2lsbCByZXN1bHQgaW4gYSB0eXBlIGVycm9yOyBiZWluZyB0aGlzLmdyaWRBcGkgaXMgdW5kZWZpbmVkIGF0IHRoYXQgdGltZS5cclxuICAgKi9cclxuICBwdWJsaWMgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCkge1xyXG4gICAgdGhpcy5ncmlkQXBpID0gcGFyYW1zLmFwaTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxO1xyXG4gICAgdGhpcy50b3RhbExlbmd0aCA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Um93Q291bnQoKTtcclxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcclxuICAgICAgY29uc3QgbW9iaWxlV2lkdGhUaHJlc2hvbGQgPSA3NTI7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSBtb2JpbGVXaWR0aFRocmVzaG9sZCkge1xyXG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gNDA7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgPSAxMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUdyaWQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRmlyZWQgdGhlIGZpcnN0IHRpbWUgZGF0YSBpcyByZW5kZXJlZCBpbnRvIHRoZSBncmlkLiAqL1xyXG4gIHB1YmxpYyBvbkZpcnN0RGF0YVJlbmRlcmVkKCkge1xyXG4gICAgaWYgKCF0aGlzLnNhdmVkQ29sdW1uU3RhdGU/LnN0YXRlLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBjb2x1bW5TdGF0ZTogQXJyYXk8Q29sdW1uU3RhdGU+ID0gc3RydWN0dXJlZENsb25lKHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5TdGF0ZSgpKTtcclxuICAgICAgdGhpcy5zYXZlZENvbHVtblN0YXRlID0ge1xyXG4gICAgICAgIHN0YXRlOiBjb2x1bW5TdGF0ZSxcclxuICAgICAgICBhcHBseU9yZGVyOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyaWRBcGkuYXBwbHlDb2x1bW5TdGF0ZSh0aGlzLnNhdmVkQ29sdW1uU3RhdGUpO1xyXG4gICAgdGhpcy51cGRhdGVkQ29sdW1uU3RhdGUuZW1pdCh0aGlzLnNhdmVkQ29sdW1uU3RhdGUpO1xyXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uU3RhdGUgPSB0aGlzLnNhdmVkQ29sdW1uU3RhdGU7XHJcbiAgICB0aGlzLnBvcHVsYXRlRmlsdGVycygpO1xyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gICAgdGhpcy5pc0dyaWREYXRhUmVuZGVyZWQuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc2l6ZSBncmlkIGZyb20gc2l6ZSBtb2RlICovXHJcbiAgcHJpdmF0ZSByZXNpemVHcmlkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2l6ZU1vZGUgPT09ICdDb21wYWN0Jykge1xyXG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDQwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zaXplTW9kZSA9PT0gJ1Jvb215Jykge1xyXG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDU2O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNDg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBwYWdlIHNlbGVjdGlvbiBjaGFuZ2VcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNlbGVjdGVkIHBhZ2UgbnVtYmVyXHJcbiAgICovXHJcbiAgcHVibGljIG9uUGFnZU51bWJlckNoYW5nZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBUaGUgcGFnZSB2YWx1ZXMgYXJlIDEgb2ZmIHRvIG1ha2UgYSAxLWJhc2VkIGFycmF5LCBidXQgdGhlIGFjdHVhbCBwYWdlcyBhcmUgYSAwLWJhc2VkIGFycmF5LlxyXG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZSh2YWx1ZSAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9uIG5leHQgcGFnZSBldmVudCAqL1xyXG4gIHB1YmxpYyBuZXh0UGFnZSgpIHtcclxuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub05leHRQYWdlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KClcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9uIFByZXZpb3VzIFBhZ2UgRXZlbnQgKi9cclxuICBwdWJsaWMgcHJldmlvdXNQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUHJldmlvdXNQYWdlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KClcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gQ2hhbmdlIFBhZ2UgU2l6ZSBFdmVudFxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgcGFnaW5hdGlvbiBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBjaGFuZ2VQYWdlU2l6ZShldmVudDogUGFnaW5hdGlvbkNoYW5nZWRFdmVudCkge1xyXG4gICAgLy8gT25seSBuZWVkIHRvIGRvIHRoaXMgd29yayBpZiB0aGUgcGFnZSBzaXplIGhhcyBjaGFuZ2VkLlxyXG4gICAgaWYgKGV2ZW50Lm5ld1BhZ2VTaXplKSB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGZpbHRlcmVkIHJvd3MuXHJcbiAgICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XHJcbiAgICAgIC8vIEhhbmRsZSB0ZXh0IGNoYW5nZXNcclxuICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSBncmlkIGZpbHRlciBpcyBjaGFuZ2VkIFxyXG4gICAqIEB0b2RvIHVwZGF0ZSB0aGUgZmlsdGVyIGRyb3Bkb3duIG9wdGlvbnMgYmFzZWQgb24gdGhlIGZpbHRlcmVkIGRhdGEgc2V0LCBpbnN0ZWFkIG9mIHRoZSBjb21wbGV0ZSBkYXRhIHNldC5cclxuICAgKi9cclxuICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJldmlvdXNUb3RhbExlbmd0aDogbnVtYmVyID0gTnVtYmVyKHRoaXMudG90YWxMZW5ndGgpO1xyXG4gICAgLy8gVXBkYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZmlsdGVyZWQgcm93cy5cclxuICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XHJcbiAgICBpZiAodGhpcy50b3RhbExlbmd0aCAhPT0gcHJldmlvdXNUb3RhbExlbmd0aCkge1xyXG4gICAgICB0aGlzLmFyaWFSZXN1bHRzQ291bnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICB0aGlzLmFyaWFSZXN1bHRzQ291bnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnRvdGFsTGVuZ3RoID09PSAwXHJcbiAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZmlsdGVyZWQtcmVzdWx0cy5uby1yZXN1bHRzJylcclxuICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmZpbHRlcmVkLXJlc3VsdHMuaGFzLXJlc3VsdHMnLCB7J3Jlc3VsdHNDb3VudCc6IHRoaXMudG90YWxMZW5ndGh9XHJcbiAgICAgICAgKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcmlhUmVzdWx0c0NvdW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKiBHZW5lcmF0ZWQgdGV4dCBmb3Igc2hvd2luZyBwYWdlcyBpbiBmb3JtYXQ6IDEtMTEgb2YgMTEgKi9cclxuICBwcml2YXRlIGhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk6IHZvaWQge1xyXG4gICAgLy8gSGFuZGxlIGVtcHR5IHRhYmxlXHJcbiAgICBpZiAoIXRoaXMudG90YWxMZW5ndGggfHwgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgPT09IDApIHtcclxuICAgICAgLy8gUmVzZXQgdGhlIHBhZ2luYXRpb24gVUlcclxuICAgICAgdGhpcy50b3RhbE51bWJlck9mUGFnZXMgPSAxO1xyXG4gICAgICB0aGlzLnBhZ2VTZWxlY3RvciA9IFsxXTtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlVGV4dCA9IGAwYDtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgfVxyXG4gICAgLy8gVXBkYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXNcclxuICAgIHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRUb3RhbFBhZ2VzKCkgfHwgTWF0aC5jZWlsKHRoaXMudG90YWxMZW5ndGggLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSkgfHwgMTtcclxuICAgIC8vIFJlc2V0IHRoZSBwYWdlIHNlbGVjdG9yXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIGNvbnN0IHBhZ2VTZWxlY3RvciA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy50b3RhbE51bWJlck9mUGFnZXM7IGkrKykge1xyXG4gICAgICBwYWdlU2VsZWN0b3IucHVzaChpKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFnZVNlbGVjdG9yID0gcGFnZVNlbGVjdG9yO1xyXG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgodGhpcy50b3RhbExlbmd0aCwgMCk7XHJcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSAqIHBhZ2VTaXplO1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4IDwgbGVuZ3RoID8gTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBsZW5ndGgpIDogc3RhcnRJbmRleCArIHBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlVGV4dCA9IGAke3N0YXJ0SW5kZXggKyAxfSAtICR7ZW5kSW5kZXh9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IHRoZSBzZWFyY2ggZmlsdGVyIG9uIGRhdGEgd2hlbiBzZWFyY2ggdGV4dCBjaGFuZ2VkXHJcbiAgICovXHJcbiAgcHVibGljIG9uU2VhcmNoVGV4dENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbihcInF1aWNrRmlsdGVyVGV4dFwiLCB0aGlzLmdyaWRTZWFyY2hUZXh0SW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9nZ2xlIHRoZSBmaWx0ZXIgcGFuZWwgZGlzcGxheSAqL1xyXG4gIHB1YmxpYyB0b2dnbGVGaWx0ZXJQYW5lbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyT3BlblN0YXRlID0gIXRoaXMuZmlsdGVyT3BlblN0YXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFwcGx5IHRoZSBzZWxlY3RlZCBmaWx0ZXJzICovXHJcbiAgcHVibGljIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIGxldCB0YWJsZUZpbHRlck1vZGVsOiBGaWx0ZXJNb2RlbCA9IHt9O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY29sRmlsdGVyID0gdGhpcy5jb2xGaWx0ZXJzW2ldO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5maWx0ZXJTZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gUmVzZXQgb3V0IHRoZSBjb2x1bW4gZmlsdGVyc1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRDb2x1bW5GaWx0ZXJNb2RlbChjb2xGaWx0ZXIuaGVhZGVyLCBudWxsKTtcclxuICAgICAgICB0YWJsZUZpbHRlck1vZGVsW2NvbEZpbHRlci5oZWFkZXJdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgLy8gU2V0IHRoZSBzaW5nbGUgZmlsdGVyIGZvciB0aGUgY29sdW1uXHJcbiAgICAgICAgbGV0IGZpbHRlck1vZGVsOiBUZXh0RmlsdGVyTW9kZWwgPSB7IGZpbHRlclR5cGU6ICd0ZXh0JywgdHlwZTogJ2VxdWFscycsIGZpbHRlcjogc2VsZWN0ZWRFbGVtZW50c1swXSB9O1xyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIgbW9kZWwgdG8gdGhlIGNvbHVtblxyXG4gICAgICAgIHRhYmxlRmlsdGVyTW9kZWxbY29sRmlsdGVyLmhlYWRlcl0gPSBmaWx0ZXJNb2RlbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBTZXQgbXVsdGlwbGUgT1IgZmlsdGVycyBmb3IgdGhlIGNvbHVtblxyXG4gICAgICAgIGxldCBmaWx0ZXJNb2RlbHM6IENvbWJpbmVkU2ltcGxlTW9kZWw8VGV4dEZpbHRlck1vZGVsPiA9IHsgZmlsdGVyVHlwZTogJ3RleHQnLCBvcGVyYXRvcjogJ09SJywgY29uZGl0aW9uczogW10gfTtcclxuICAgICAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIGluIHRoZSBtb2RlbFxyXG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRFbGVtZW50IG9mIHNlbGVjdGVkRWxlbWVudHMpIHtcclxuICAgICAgICAgIGZpbHRlck1vZGVscy5jb25kaXRpb25zLnB1c2goeyBmaWx0ZXJUeXBlOiAndGV4dCcsIHR5cGU6ICdlcXVhbHMnLCBmaWx0ZXI6IHNlbGVjdGVkRWxlbWVudCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlciBtb2RlbCBjb2xsZWN0aW9uIHRvIHRoZSBjb2x1bW5cclxuICAgICAgICB0YWJsZUZpbHRlck1vZGVsW2NvbEZpbHRlci5oZWFkZXJdID0gZmlsdGVyTW9kZWxzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBPbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0LCB1cGRhdGUgdGhlIGZpbHRlcnNcclxuICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbCh0YWJsZUZpbHRlck1vZGVsKTtcclxuICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKiBDbGVhciBhbGwgZmlsdGVycyAqL1xyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAvLyBDbGVhciBhbGwgc2VsZWN0aW9uc1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbHRlclNlbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb25zW2ldID0gW107XHJcbiAgICB9XHJcbiAgICAvLyBTZXQgdGhlIGZ1bGwgZ3JpZCBmaWx0ZXIgbW9kZWwgdG8gbnVsbFxyXG4gICAgdGhpcy5ncmlkQXBpLnNldEZpbHRlck1vZGVsKG51bGwpO1xyXG4gICAgLy8gVXBkYXRlIHRoZSBkaXNwbGF5XHJcbiAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgbm8gZmlsdGVycyBhcmUgc2VsZWN0ZWRcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgZmlsdGVyIGlzIHNlbGVjdGVkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIGhhc0VtcHR5RmlsdGVycygpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJTZWxlY3Rpb25zIHx8ICF0aGlzLmZpbHRlclNlbGVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBmaWx0ZXJTZWxlY3Qgb2YgdGhpcy5maWx0ZXJTZWxlY3Rpb25zKSB7XHJcbiAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBmaWx0ZXIgaGFzIGJlZW4gc2VsZWN0ZWQsIHJldHVybiBmYWxzZVxyXG4gICAgICBpZiAoZmlsdGVyU2VsZWN0Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogQ2FuY2VsIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIgYW5kIGNsb3NlcyB0aGUgZmlsdGVyIHBhbmVsICovXHJcbiAgcHVibGljIGNhbmNlbEZpbHRlckNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sRmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyBHZXQgdGhlIHN0b3JlZCBmaWx0ZXJzIGZvciB0aGUgZ2l2ZW4gbW9kZWxcclxuICAgICAgY29uc3QgY29sRmlsdGVyID0gdGhpcy5jb2xGaWx0ZXJzW2ldO1xyXG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5GaWx0ZXJNb2RlbChjb2xGaWx0ZXIuaGVhZGVyKTtcclxuICAgICAgbGV0IGZpbHRlclNlbGVjdGlvbkRhdGEgPSBbXTtcclxuICAgICAgaWYgKG1vZGVsICYmIG1vZGVsW1wiY29uZGl0aW9uc1wiXSkge1xyXG4gICAgICAgIC8vIFRoZSBtb2RlbCBpcyBhIGNvbWJpbmVkIG1vZGVsIHdpdGggbXVsdGlwbGUgc2VsZWN0aW9uc1xyXG4gICAgICAgIGNvbnN0IGZpbHRlck1vZGVsID0gbW9kZWwgYXMgQ29tYmluZWRTaW1wbGVNb2RlbDxUZXh0RmlsdGVyTW9kZWw+O1xyXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmaWx0ZXJNb2RlbC5jb25kaXRpb25zKSB7XHJcbiAgICAgICAgICBmaWx0ZXJTZWxlY3Rpb25EYXRhLnB1c2goZWxlbWVudC5maWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtb2RlbCkge1xyXG4gICAgICAgIC8vIEFzc3VtZSB0aGUgbW9kZWwgaXMgYSBzaW5nbGUgVGV4dCBGaWx0ZXIgTW9kZWxcclxuICAgICAgICBsZXQgZmlsdGVyU2VsZWN0aW9uOiBUZXh0RmlsdGVyTW9kZWwgPSBtb2RlbDtcclxuICAgICAgICBmaWx0ZXJTZWxlY3Rpb25EYXRhLnB1c2goZmlsdGVyU2VsZWN0aW9uLmZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU2V0IHRoZSBmaWx0ZXIgc2VsZWN0aW9uc1xyXG4gICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnNbaV0gPSBmaWx0ZXJTZWxlY3Rpb25EYXRhO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xvc2UgdGhlIGZpbHRlciBwYW5lbFxyXG4gICAgdGhpcy50b2dnbGVGaWx0ZXJQYW5lbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBvcHVsYXRlcyB0aGUgZmlsdGVyIGRyb3Bkb3ducyAqL1xyXG4gIHByaXZhdGUgcG9wdWxhdGVGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgLy8gUmVzZXQgdGhlIGZpbHRlciBkcm9wZG93bnNcclxuICAgIHRoaXMuZmlsdGVyU2VsZWN0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5jb2xGaWx0ZXJzID0gW107XHJcbiAgICAvLyBHZXQgdGhlIGNvbHVtbiBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYSBmaWx0ZXJcclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sczogQXJyYXk8Q29sRGVmPiA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWZzKCkuZmlsdGVyKChkZWYpID0+IGRlZlsnZmlsdGVyJ10pO1xyXG4gICAgLy8gQ3JlYXRlIGEgbWFwIHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMgZm9yIGVhY2ggZmllbGRcclxuICAgIGNvbnN0IGZpbHRlclZhbHVlc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8YW55Pj4oKTtcclxuICAgIC8vIEluaXRpYWxpemUgc2V0cyBmb3IgZWFjaCBmaWVsZCAoY29sdW1uKSBcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGZpbHRlcmVkQ29scykge1xyXG4gICAgICBjb25zdCBmaWVsZDogc3RyaW5nID0gY29sW1wiZmllbGRcIl07XHJcbiAgICAgIGZpbHRlclZhbHVlc01hcC5zZXQoZmllbGQsIG5ldyBTZXQ8YW55PigpKTtcclxuICAgIH1cclxuICAgIC8vIFVzZSBmb3JFYWNoTm9kZSB0byBpdGVyYXRlIG92ZXIgdGhlIHJvd3NcclxuICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZTogSVJvd05vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuZGF0YSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGZpbHRlcmVkQ29scykge1xyXG4gICAgICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGNvbFtcImZpZWxkXCJdO1xyXG4gICAgICAgICAgY29uc3QgdmFsdWU6IGFueSA9IHRoaXMuZ3JpZEFwaS5nZXRDZWxsVmFsdWUoe3Jvd05vZGU6IG5vZGUsIGNvbEtleTogZmllbGR9KTtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZXNNYXAuZ2V0KGZpZWxkKT8uYWRkKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0aGUgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBmaWVsZCwgcG9wdWxhdGUgZmlsdGVyIG9wdGlvbnNcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGZpbHRlcmVkQ29scykge1xyXG4gICAgICBjb25zdCBmaWVsZDogc3RyaW5nID0gY29sW1wiZmllbGRcIl07XHJcbiAgICAgIGNvbnN0IGxhYmVsOiBzdHJpbmcgPSBjb2xbXCJoZWFkZXJOYW1lXCJdO1xyXG4gICAgICBjb25zdCB1bmlxdWVWYWx1ZXM6IEFycmF5PGFueT4gPSBBcnJheS5mcm9tKGZpbHRlclZhbHVlc01hcC5nZXQoZmllbGQpIHx8IFtdKS5zb3J0KCk7XHJcbiAgICAgIGlmICh1bmlxdWVWYWx1ZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIEVuc3VyZSB0aGVyZSdzIHNwYWNlIGZvciBmaWx0ZXIgc2VsZWN0aW9uc1xyXG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0aW9ucy5wdXNoKFtdKTsgXHJcbiAgICAgICAgdGhpcy5jb2xGaWx0ZXJzLnB1c2goeyBoZWFkZXI6IGZpZWxkLCBsYWJlbDogbGFiZWwsIG9wdGlvbnM6IHVuaXF1ZVZhbHVlcyB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE9wZW4gdGhlIGNvbHVtbiBvcHRpb25zIG1vZGFsICovXHJcbiAgcHVibGljIG9wZW5Db2x1bW5PcHRpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sdW1uU3RhdGU6IEFycmF5PENvbHVtblN0YXRlPiA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5TdGF0ZSgpO1xyXG4gICAgY29uc3QgY29sdW1uRGF0YTogQXJyYXk8Q29sdW1uRGF0YT4gPSB0aGlzLmNvbHVtblN0YXRlVG9EYXRhKGNvbHVtblN0YXRlKTtcclxuICAgIGNvbnN0IGluaXRpYWxDb2x1bW5EYXRhOiBBcnJheTxDb2x1bW5EYXRhPiA9IHRoaXMuY29sdW1uU3RhdGVUb0RhdGEodGhpcy5zYXZlZENvbHVtblN0YXRlLnN0YXRlKTtcclxuICAgIGNvbnN0IGNvbHVtbk9wdGlvbnNEYXRhOiBDb2x1bW5PcHRpb25zRGF0YSA9IHtcclxuICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcclxuICAgICAgY29sdW1uRGF0YSxcclxuICAgICAgaW5pdGlhbENvbHVtbkRhdGEsXHJcbiAgICAgIHNob3dTYXZlQ29sdW1uT3B0aW9uc1RleHQ6IHRoaXMuc2hvd1NhdmVDb2x1bW5PcHRpb25zVGV4dFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgcG9zaXRpb246IHsgYm90dG9tOiAnNDBweCcsIHJpZ2h0OiAnNDBweCcgfSxcclxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdjb2x1bW4tb3B0aW9ucy1oZWFkaW5nJyxcclxuICAgICAgZGF0YTogY29sdW1uT3B0aW9uc0RhdGFcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgdGFwKCh1cGRhdGVkQ29sdW1uU3RhdGU6IEFwcGx5Q29sdW1uU3RhdGVQYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAodXBkYXRlZENvbHVtblN0YXRlICYmIHVwZGF0ZWRDb2x1bW5TdGF0ZS5zdGF0ZS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5hcHBseUNvbHVtblN0YXRlKHVwZGF0ZWRDb2x1bW5TdGF0ZSk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZWRDb2x1bW5TdGF0ZS5lbWl0KHVwZGF0ZWRDb2x1bW5TdGF0ZSk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bW5TdGF0ZSA9IHVwZGF0ZWRDb2x1bW5TdGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBgQXJyYXk8Q29sdW1uU3RhdGU+YCB0byBgQXJyYXk8Q29sdW1uRGF0YT5gIFxyXG4gICAqIEBub3RlIGZpbHRlcnMgb3V0IGFueSBjb2x1bW5zIG1hcmtlZCBhcyAncGlubmVkJyBieSB0aGUgY29sdW1uIGRlZmluaXRpb25zLlxyXG4gICAqIEBub3RlIGZpbHRlcnMgYW55IGNvbHVtbnMgd2l0aG91dCBhICdoZWFkZXJOYW1lJy5cclxuICAgKiBAcGFyYW0gY29sdW1uU3RhdGUgdGhlIGNvbHVtbiBzdGF0ZSB0byBtb2RpZnlcclxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBjb2x1bW4gZGF0YSBmb3JtYXR0ZWQgdG8gYmUgaW5nZXN0ZWQgYnkgdGhlIGBTb2ZDb2x1bW5PcHRpb25zQ29tcG9uZW50YFxyXG4gICovXHJcbiAgcHJpdmF0ZSBjb2x1bW5TdGF0ZVRvRGF0YShjb2x1bW5TdGF0ZTogQXJyYXk8Q29sdW1uU3RhdGU+KTogQXJyYXk8Q29sdW1uRGF0YT4ge1xyXG4gICAgcmV0dXJuIGNvbHVtblN0YXRlXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWU6IHN0cmluZyA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWYoY29sdW1uLmNvbElkKT8uaGVhZGVyTmFtZSB8fCBcIlwiO1xyXG4gICAgICAgIGlmIChoZWFkZXJOYW1lICYmIGhlYWRlck5hbWUubGVuZ3RoICYmICFjb2x1bW4ucGlubmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyTmFtZTogc3RyaW5nID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZihjb2x1bW4uY29sSWQpLmhlYWRlck5hbWU7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGlkOiBjb2x1bW4uY29sSWQsXHJcbiAgICAgICAgICBpc0NoZWNrZWQ6ICFjb2x1bW4uaGlkZSxcclxuICAgICAgICAgIHRleHQ6IGhlYWRlck5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXQgdGhlIGN1cnJlbnQgZmlsdGVyZWQgcm93IGRhdGEgKi9cclxuICBwdWJsaWMgZXhwb3J0RmlsdGVyZWRSb3dEYXRhKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsdGVyZWRSb3dzID0gW107XHJcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlcigobm9kZSkgPT4ge1xyXG4gICAgICBmaWx0ZXJlZFJvd3MucHVzaChub2RlLmRhdGEpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUm93RGF0YUZvckV4cG9ydC5lbWl0KGZpbHRlcmVkUm93cyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiogVXNlZCBmb3Igc2V0dGluZyBmaWx0ZXIgdmFsdWVzICovXHJcbmNsYXNzIFNvZlRhYmxlRmlsdGVyIHtcclxuICAvKiogVGhlIGNvbHVtbiBoZWFkZXIgKi9cclxuICBoZWFkZXI6IHN0cmluZztcclxuICAvKiogVGhlIGNvbHVtbiBsYWJlbCBvciB0cmFuc2xhdGlvbiBrZXkgKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgY29sdW1uIGZpbHRlciBvcHRpb25zICovXHJcbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcclxufVxyXG5cclxuLyoqIEEgZmlsdGVyIGNvbWJpbmluZyBtdWx0aXBsZSBjb25kaXRpb25zLCB0YWtlbiBmcm9tIEFnR3JpZCovXHJcbmNsYXNzIENvbWJpbmVkU2ltcGxlTW9kZWw8VD4ge1xyXG4gIC8qKiBUaGUgZmlsdGVyIHR5cGUuIFVzdWFsbHkgJ3RleHQnICovXHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgb3BlcmF0b3IuIFVzdWFsbHkgJ09SJyAqL1xyXG4gIG9wZXJhdG9yOiAnQU5EJyB8ICdPUic7XHJcbiAgLyoqIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgRmlsdGVyIE1vZGVsICovXHJcbiAgY29uZGl0aW9uczogVFtdO1xyXG59XHJcbiIsIjxkaXYgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgZnhMYXlvdXRHYXA9XCIxNnB4XCIgbS1iLTI0PlxyXG4gIEBpZiAoZW5hYmxlRmlsdGVyICYmIGNvbEZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZWwoKVwiIFxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCJcclxuICAgICAgW2NsYXNzLmZpbHRlci1zZWxlY3RlZF09XCJmaWx0ZXJPcGVuU3RhdGVcIiBcclxuICAgICAgaWQ9XCJidG4tZW5hYmxlLWZpbHRlclwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGggcGgtYm9sZCBwaC1zbGlkZXJzLWhvcml6b250YWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIHt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGVuYWJsZVNlYXJjaCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtc2VhcmNoLWZpZWxkIGRlbnNlLTRcIiBmeEZsZXg9XCJhdXRvXCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtbWFnbmlmeWluZy1nbGFzcyBzZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VhcmNoLWxhYmVsXCI+e3snYXJtYXR1cmUuc29mLXRhYmxlLnNlYXJjaCcgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVGV4dENoYW5nZWQoKVwiIFxyXG4gICAgICAgICNncmlkU2VhcmNoVGV4dElucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJncmlkU2VhcmNoVGV4dElucHV0XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5zZWFyY2gtZmlsdGVyLWRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgfVxyXG4gIEBpZiAoZW5hYmxlQ29sdW1uT3B0aW9ucykge1xyXG4gICAgPGJ1dHRvbiBcclxuICAgICAgKGNsaWNrKT1cIm9wZW5Db2x1bW5PcHRpb25zKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cIm9wZW4tY29sdW1uLW9wdGlvbnNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5jb2x1bW4tb3B0aW9ucy1idG4nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmNvbHVtbi1vcHRpb25zLWJ0bicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1kYy10b29sdGlwX19zdXJmYWNlIGJlbG93XCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGgtYm9sZCBwaC1wYXVzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoZW5hYmxlRXhwb3J0KSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwiZXhwb3J0RmlsdGVyZWRSb3dEYXRhKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cImV4cG9ydC10YWJsZVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmV4cG9ydC10YWJsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZXhwb3J0LXRhYmxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWV4cG9ydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLXRhYmxlLXJpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwhLS0gXHJcbiAgT25seSBpbmplY3QgPGJ1dHRvbj4ncyBpbnNpZGUgYW4gPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAuLi4gXHJcbiAgPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAgIDxidXR0b24gXHJcbiAgICAgIChjbGljayk9XCJhbnlGdW5jdGlvbigpXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgXHJcbiAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cImFueSBidXR0b25cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiYW55IGJ1dHRvblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWFjb3JuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgLi4uIFxyXG4gIG5vdGU6IG1ha2Ugc3VyZSBidXR0b25zIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIG1hdGNoIG90aGVycyA9XHJcbiAgYG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24taWNvbi12MlwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCJgXHJcbiAgKiByZW1lbWJlciB0byBhZGQgYXJpYS1sYWJlbCBhbmQgdG9vbHRpcCBmb3IgaWNvbiBidXR0b25cclxuICAtLT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICNhcmlhUmVzdWx0c0NvdW50IGNsYXNzPVwic3Itb25seVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPjwvZGl2PlxyXG5cclxuQGlmIChpc0dyaWREYXRhUmVuZGVyZWQoKSAmJiBmaWx0ZXJPcGVuU3RhdGUpIHtcclxuICA8ZmllbGRzZXQgXHJcbiAgICBjbGFzcz1cImZpbHRlci1wYW5lbFwiIHJvbGU9XCJyZWdpb25cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuc2VsZWN0LWZpbHRlcnMtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8cD5cclxuICAgICAgPGkgY2xhc3M9XCJwaCBwaC1ib2xkIHBoLXNsaWRlcnMtaG9yaXpvbnRhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtOFwiPnt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLXNlbGVjdC1jb250YWluZXIgbS12LTIwXCI+XHJcbiAgICAgIEBmb3IgKGNvbEZpbHRlciBvZiBjb2xGaWx0ZXJzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e2NvbEZpbHRlci5sYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTZWxlY3Rpb25zW2ldXCIgXHJcbiAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICBpZD1cImZpbHRlckRyb3Bkb3due3tpfX1cIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2FybWF0dXJlLnNvZi10YWJsZS5hbGwnIHwgdHJhbnNsYXRlfX1cIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBAZm9yIChjb2xPcHRpb24gb2YgY29sRmlsdGVyLm9wdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjb2xPcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIHt7Y29sT3B0aW9ufX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCI1MCVcIj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImhhc0VtcHR5RmlsdGVycygpXCIgXHJcbiAgICAgICAgICBtYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi12MlwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgaWQ9XCJ0YWJsZUZpbHRlckNsZWFyXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxyXG4gICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLnJlc2V0JyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwJVwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIlXCIgZnhMYXlvdXRBbGlnbj1cImZsZXgtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjAgMSBhdXRvXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpbHRlckNoYW5nZXMoKVwiIG1hdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCIgXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiIGlkPVwidGFibGVGaWx0ZXJDYW5jZWxcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XHJcbiAgICAgICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLmNhbmNlbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIwIDEgYXV0b1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24tdjJcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIiBpZD1cInRhYmxlRmlsdGVyQXBwbHlcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICB7eydhcm1hdHVyZS5zb2YtdGFibGUucmVzdWx0cycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbn1cclxuXHJcbjxhZy1ncmlkLWFuZ3VsYXIgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgKGZpcnN0RGF0YVJlbmRlcmVkKT1cIm9uRmlyc3REYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGZpbHRlckNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKClcIlxyXG4gIChwYWdpbmF0aW9uQ2hhbmdlZCk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCIgXHJcbiAgW3Jvd0RhdGFdPVwicm93RGF0YVwiIFxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbERlZnNcIiBcclxuICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgXHJcbiAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFxyXG4gIFtzdXBwcmVzc1BhZ2luYXRpb25QYW5lbF09XCJ0cnVlXCJcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIiBcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXHJcbiAgW2hlYWRlckhlaWdodF09XCJyb3dIZWlnaHRcIiBcclxuICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiIFxyXG4gIFtkb21MYXlvdXRdPVwiJ2F1dG9IZWlnaHQnXCIgXHJcbiAgW3Rvb2x0aXBTaG93RGVsYXldPVwidG9vbHRpcFNob3dEZWxheVwiXHJcbiAgW292ZXJsYXlOb1Jvd3NUZW1wbGF0ZV09XCInYXJtYXR1cmUuc29mLXRhYmxlLm5vLXJvd3MnIHwgdHJhbnNsYXRlXCJcclxuICBbY2xhc3Mubm8tcm93c109XCIhdG90YWxMZW5ndGhcIlxyXG4gIGNsYXNzPVwiYWctdGhlbWUtbWF0ZXJpYWxcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG48ZGl2IFxyXG4gIFtmeFNob3ddPVwiaXNHcmlkRGF0YVJlbmRlcmVkKClcIlxyXG4gIGNsYXNzPVwiY3VzdG9tLXBhZ2luYXRvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaXJzdC1zZWN0aW9uXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnQtMVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgI3BhZ2VTaXplU2VsZWN0XHJcbiAgICAgICAgaWQ9XCJwYWdlU2l6ZUlucHV0XCIgbmFtZT1cInBhZ2VTaXplSW5wdXRcIiBcclxuICAgICAgICBbKHZhbHVlKV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgIEBmb3IgKHNpemUgb2YgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBcclxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW9wdGlvblwiIGlkPVwic2l6ZXt7aX19XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yW2ldXCI+XHJcbiAgICAgICAgICAgIHt7c2l6ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LXBhZ2VcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2luYXRpb25QYWdlU2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWljb25cIj5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlU2l6ZVNlbGVjdC5wYW5lbE9wZW4gPyAndXAnOidkb3duJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGFnZUNoYW5nZVRleHRcIj5cclxuICAgICAge3twYWdlQ2hhbmdlVGV4dH19IHt7J2FybWF0dXJlLnNvZi10YWJsZS5vZicgfCB0cmFuc2xhdGV9fSB7e3RvdGFsTGVuZ3RofX1cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tdG8tcGFnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWJveFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgICAjcGFnZU51bWJlclNlbGVjdFxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblBhZ2VOdW1iZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgICAgICAgaWQ9XCJwYWdlU2VsZWxjdG9yXCIgbmFtZT1cInBhZ2VTZWxlY3RvclwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+XHJcbiAgICAgICAgICBAZm9yIChwYWdlIG9mIHBhZ2VTZWxlY3RvcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJwYWdlXCIgY2xhc3M9XCJwYWdlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e2N1cnJlbnRQYWdlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9mLXBhZ2VcIj4ge3snYXJtYXR1cmUuc29mLXRhYmxlLm9mJyB8IHRyYW5zbGF0ZX19IHt7dG90YWxOdW1iZXJPZlBhZ2VzfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlTnVtYmVyU2VsZWN0LnBhbmVsT3BlbiA/ICd1cCc6J2Rvd24nKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBjbGFzcz1cInNlY29uZC1zZWN0aW9uXCI+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICBpZD1cInByZXYtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIFxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NjcmVlbi1yZWFkZXIucGFnaW5hdGlvbi5wcmV2aW91cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIiBcclxuICAgICAgICBpZD1cIm5leHQtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxOdW1iZXJPZlBhZ2VzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidzY3JlZW4tcmVhZGVyLnBhZ2luYXRpb24ubmV4dCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uYXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmICghaXNHcmlkRGF0YVJlbmRlcmVkKCkpIHtcclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL2FnLWdyaWQtY29tcG9uZW50cy9zcmMvc29mLXRhYmxlL3NvZi10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9hZy1ncmlkLWNvbXBvbmVudHMvc3JjL3NvZi10YWJsZS9zb2YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUdMLHlCQUF5QixFQUMxQixNQUFNLGtEQUFrRCxDQUFDO0FBZ0IxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFdkQsNENBQTRDO0FBTTVDLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFPRSxzRUFBc0U7UUFDdEQsWUFBTyxHQUFlLEVBQUUsQ0FBQztRQUV6QywyREFBMkQ7UUFDM0MsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFLNUMsa0JBQWtCO1FBQ0YsK0JBQTBCLEdBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFOUUsb0JBQW9CO1FBQ0osaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0MsMENBQTBDO1FBQzFCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdDLDRDQUE0QztRQUM1Qix3QkFBbUIsR0FB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LGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzhCQU9MLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVyxRQUFRO3NCQUF4QixLQUFLO2dCQUdVLDBCQUEwQjtzQkFBekMsS0FBSztnQkFHVSxZQUFZO3NCQUEzQixLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBR1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBV1UseUJBQXlCO3NCQUF4QyxLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBR1csZ0JBQWdCO3NCQUFoQyxLQUFLO2dCQUdJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBRzJCLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBR00sZ0JBQWdCO3NCQUFyRCxTQUFTO3VCQUFDLGtCQUFrQjs7QUE4Yi9CLHFDQUFxQztBQUNyQyxNQUFNLGNBQWM7SUFBcEI7UUFLRSxnQ0FBZ0M7UUFDaEMsWUFBTyxHQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQUE7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxtQkFBbUI7Q0FPeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBcclxuICBDb21wb25lbnQsIFxyXG4gIEVsZW1lbnRSZWYsIFxyXG4gIEV2ZW50RW1pdHRlciwgXHJcbiAgaW5qZWN0LCBcclxuICBJbnB1dCwgXHJcbiAgT25DaGFuZ2VzLCBcclxuICBPbkluaXQsIFxyXG4gIE91dHB1dCwgXHJcbiAgc2lnbmFsLCBcclxuICBTaW1wbGVDaGFuZ2VzLCBcclxuICBWaWV3Q2hpbGQsIFxyXG4gIFdyaXRhYmxlU2lnbmFsIFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBcclxuICBDb2x1bW5EYXRhLCBcclxuICBDb2x1bW5PcHRpb25zRGF0YSwgXHJcbiAgU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudCBcclxufSBmcm9tICcuLi9jb2x1bW4tb3B0aW9ucy1tb2RhbC9jb2x1bW4tb3B0aW9ucy5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBcHBseUNvbHVtblN0YXRlUGFyYW1zLFxyXG4gIENvbERlZixcclxuICBDb2x1bW4sXHJcbiAgQ29sdW1uU3RhdGUsXHJcbiAgRmlsdGVyTW9kZWwsXHJcbiAgR3JpZEFwaSxcclxuICBHcmlkUmVhZHlFdmVudCxcclxuICBJUm93Tm9kZSxcclxuICBQYWdpbmF0aW9uQ2hhbmdlZEV2ZW50LFxyXG4gIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyxcclxuICBUZXh0RmlsdGVyTW9kZWxcclxufSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbi8qKiBUaGUgU29mdGhlb24gQXJtYXR1cmUgVGFibGUgY29tcG9uZW50ICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc29mLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc29mLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc29mLXRhYmxlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU29mVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKiBUaGUgbGFuZ3VhZ2UgdGV4dCBvciBhIGtleSB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhpcyBjb21wb25lbnQgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcm93RGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAvKiogQ29sdW1uIERlZmluaXRpb25zOiBEZWZpbmVzICYgY29udHJvbHMgZ3JpZCBjb2x1bW5zLiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xEZWZzOiBBcnJheTxDb2xEZWY+ID0gW107XHJcblxyXG4gIC8qKiBTaXplIG1vZGVzIGZvciB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHByaXZhdGUgc2l6ZU1vZGU6ICdDb21wYWN0JyB8ICdSb29teScgfCAnRGVmYXVsdCc7XHJcblxyXG4gIC8qKiBQYWdlcyBzaXplcyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvcjogQXJyYXk8bnVtYmVyPiA9IFsxMCwgMjAsIDUwLCAxMDBdO1xyXG5cclxuICAvKiogRW5hYmxlIHNlYXJjaCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogRW5hYmxlIGN1c3RvbSB0ZXh0IGZpbHRlciBkcm9wZG93bnMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIEVuYWJsZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlQ29sdW1uT3B0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBFbmFibGUgZXhwb3J0IGJ1dHRvbiB0byBvdXRwdXQgZmlsdGVyZWQgcm93IGRhdGEgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBUbyBkaXNwbGF5IHRoZSB0ZXh0IG9uIHRoZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCwgd2hpY2ggc3RhdGVzIC1cclxuICAgKiBgXCJPcHRpb25zIHdpbGwgYmUgc2F2ZWQgZm9yIHRoZSBuZXh0IHRpbWUgeW91IGxvZyBpbi5cImBcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqIEBkZXNjcmlwdGlvbiBzZXQgdG8gdHJ1ZSBpZiBzZXQtdXAgZm9yIHNhdmluZyBwcmVmZXJlbmNlcyB0byBVc2VyIGRhdGEuXHJcbiAgICogQG5vdGUgWW91IGNhbiBzdGlsbCBzYXZlIHByZWZlcmVuY2VzIHRvIF9sb2NhbF8gb3IgX3Nlc3Npb25fIHN0b3JhZ2VcclxuICAgKiB1c2luZyB0aGUgYHNhdmVkQ29sdW1uU3RhdGVgIGlucHV0LCBhbmQgYHVwZGF0ZWRDb2x1bW5TdGF0ZWAgb3V0cHV0IGV2ZW50LlxyXG4gICAqIEBzZWUgVGhlIERlbW8gc2l0ZSBpcyBzYXZpbmcgdG8gbG9jYWwgc3RvcmFnZS5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93U2F2ZUNvbHVtbk9wdGlvbnNUZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBOYW1lL2xhYmVsIG9mIHRoZSB0YWJsZSBcclxuICAgKiBAbm90ZSBzaG91bGQgYmUgYSB0cmFuc2xhdGlvbiBrZXlcclxuICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqIFVzZXJzIHNhdmVkIGNvbHVtbiBvcHRpb25zIHN0YXRlICovXHJcbiAgQElucHV0KCkgcHJpdmF0ZSBzYXZlZENvbHVtblN0YXRlOiBBcHBseUNvbHVtblN0YXRlUGFyYW1zO1xyXG5cclxuICAvKiogT3V0cHV0IHVwZGF0ZWQgY29sdW1uIG9wdGlvbnMgZXZlbnQgdG8gc2F2ZSB0byB1c2VyIG9yIGJyb3dzZXIgc3RvcmFnZSAqL1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVkQ29sdW1uU3RhdGU6IEV2ZW50RW1pdHRlcjxBcHBseUNvbHVtblN0YXRlUGFyYW1zPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqIE91dHB1dCB1cGRhdGVkIGNvbHVtbiBvcHRpb25zIGV2ZW50IHRvIHNhdmUgdG8gdXNlciBvciBicm93c2VyIHN0b3JhZ2UgKi9cclxuICBAT3V0cHV0KCkgZmlsdGVyZWRSb3dEYXRhRm9yRXhwb3J0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqIHRoZSBzZWFyY2ggaW5wdXQgKi9cclxuICBAVmlld0NoaWxkKCdncmlkU2VhcmNoVGV4dElucHV0JykgZ3JpZFNlYXJjaFRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgLyoqIFRoZSBoaWRkZW4gZWxlbWVudCB0aGF0IGFubm91bmNlcyB3aGVuIHRoZSB0YWJsZSBjb250ZW50IGNoYW5nZXMgZnJvbSBmaWx0ZXIgKi9cclxuICBAVmlld0NoaWxkKCdhcmlhUmVzdWx0c0NvdW50JykgcHVibGljIGFyaWFSZXN1bHRzQ291bnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAvKiogXHJcbiAgICogS2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBjb2x1bW4gc3RhdGVcclxuICAgKiBAbm90ZSBJZiBjb2x1bW5zIGFyZSByZS1kZWZpbmVkIChvbkNoYW5nZXMpLCB0aGlzIHN0YXRlIHdpbGwgYmUgYXBwbGllZFxyXG4gICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50Q29sdW1uU3RhdGU6IEFwcGx5Q29sdW1uU3RhdGVQYXJhbXM7XHJcblxyXG4gIC8qKiBDb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgZmlsdGVyYWJsZSAqL1xyXG4gIHB1YmxpYyBjb2xGaWx0ZXJzOiBBcnJheTxTb2ZUYWJsZUZpbHRlcj4gPSBbXTtcclxuXHJcbiAgLyoqIFJvdyBIZWlnaHQgZm9yIHRhYmxlICovXHJcbiAgcHVibGljIHJvd0hlaWdodDogbnVtYmVyID0gNDg7XHJcblxyXG4gIC8qKiBDdXJyZW50IFBhZ2UgSW5kZXggKi9cclxuICBwdWJsaWMgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBHcmlkIEFQSSAqL1xyXG4gIHByaXZhdGUgZ3JpZEFwaSE6IEdyaWRBcGk7XHJcblxyXG4gIC8qKiBJcyB0aGUgdGFibGUgcmVhZHkgdG8gYmUgZGlzcGxheWVkICovXHJcbiAgcHVibGljIGlzR3JpZERhdGFSZW5kZXJlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvKiogRGVmYXVsdCBQYWdlIFNpemUgKi9cclxuICBwdWJsaWMgcGFnaW5hdGlvblBhZ2VTaXplOiBudW1iZXIgPSAyMDsgXHJcblxyXG4gIC8qKiBUb29sIHRpcCBzaG93IGRlbGF5ICovXHJcbiAgcHVibGljIHRvb2x0aXBTaG93RGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgLyoqIFxyXG4gICAqIERlZmF1bHQgQ29sdW1uIERlZmluaXRpb24gXHJcbiAgICogQG5vdGUgKHN1cHByZXNzS2V5Ym9hcmRFdmVudCkgVGFibGUgY2VsbHMgY2FuIGJlIG5hdmlnYXRlZCB3aXRoIHRoZSBhcnJvdyBrZXlzLCBcclxuICAgKiBpZiB0aGUgY2VsbCBjb250YWlucyBhIGJ1dHRvbiB5b3UgY2FuIFRhYiBpbnRvIHRoZSBidXR0b24sIGVudGVyIHwgc3BhY2UgdG8gaW50ZXJhY3QuXHJcbiAgKi9cclxuICBwdWJsaWMgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiBmYWxzZSwgLy8gZGlzYWJsZSByZXNpemUgXHJcbiAgICBzdXBwcmVzc0hlYWRlck1lbnVCdXR0b246IHRydWUsIC8vIGRpc2FibGUgZGVmYXVsdCBmaWx0ZXIgbWVudSBcclxuICAgIHN1cHByZXNzTW92YWJsZTogdHJ1ZSwgLy8gZGlzYWJsZSBkZWZhdWx0IGRyYWcgJiBkcm9wIGZvciBjb2x1bW5zIFxyXG4gICAgY2VsbFN0eWxlOiB7IGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiIH0sXHJcbiAgICBzdXBwcmVzc0tleWJvYXJkRXZlbnQ6IChwYXJhbXM6IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcykgPT4ge1xyXG4gICAgICByZXR1cm4gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ1RhYicgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqIExlbmd0aCBvZiBkYXRhICovXHJcbiAgcHVibGljIHRvdGFsTGVuZ3RoOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cclxuICBwdWJsaWMgdG90YWxOdW1iZXJPZlBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8qKiBQYWdlIENoYW5nZSB0ZXh0ICovXHJcbiAgcHVibGljIHBhZ2VDaGFuZ2VUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBQYWdlIHNlbGVjdG9yIGFycmF5ICovXHJcbiAgcHVibGljIHBhZ2VTZWxlY3RvcjogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAvKiogRmlsdGVyIFBhbmVsIG9wZW4gc3RhdGUgKi9cclxuICBwdWJsaWMgZmlsdGVyT3BlblN0YXRlOiBib29sZWFuO1xyXG5cclxuICAvKiogVGhlIGxpc3Qgb2YgZmlsdGVycyBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJTZWxlY3Rpb25zOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xyXG5cclxuICAvKiogbWF0LWRpYWxvZyAqL1xyXG4gIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuXHJcbiAgLyoqIFRyYW5zbGF0aW9uIHNlcnZpY2UgKi9cclxuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIC8qKiBPbiBjb21wb25lbnQgaW5pdCAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplR3JpZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5ndWxhciBPbiBDaGFuZ2VzXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGlucHV0IGNoYW5nZXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMucm93RGF0YSAmJiAhY2hhbmdlcy5yb3dEYXRhLmZpcnN0Q2hhbmdlICYmICEhdGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLnJvd0RhdGEubGVuZ3RoO1xyXG4gICAgICB0aGlzLnBvcHVsYXRlRmlsdGVycygpO1xyXG4gICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgICAgIHRoaXMuaXNHcmlkRGF0YVJlbmRlcmVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLmNvbERlZnMgJiYgIWNoYW5nZXMuY29sRGVmcy5maXJzdENoYW5nZSAmJiAhIXRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmdyaWRBcGkuYXBwbHlDb2x1bW5TdGF0ZSh0aGlzLmN1cnJlbnRDb2x1bW5TdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZ3JpZCBoYXMgaW5nZXN0ZWQgdGhlIGlucHV0IGRhdGFcclxuICAgKiBAcGFyYW0gcGFyYW1zIEdyaWQgUmVhZHkgRXZlbnQsXHJcbiAgICogVGhlIGdyaWQgaGFzIGluaXRpYWxpemVkIGFuZCBpcyByZWFkeSBmb3IgbW9zdCBhcGkgY2FsbHMsIGJ1dCBtYXkgbm90IGJlIGZ1bGx5IHJlbmRlcmVkIHlldC5cclxuICAgKiBAbm90ZSB5b3UgY2FuIG5vdCBhY2Nlc3MgdGhpcy5ncmlkQXBpIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1biwgXHJcbiAgICogYW55IGF0dGVtcHRzIHRvIGFjY2VzcyB0aGlzLmdyaWRBcGkgaW4gdGhpcyBjb21wb25lbnRzIG5nT25Jbml0IG9yIHRoZSBmaXJzdCBuZ09uQ2hhbmdlcyBjeWNsZVxyXG4gICAqIHdpbGwgcmVzdWx0IGluIGEgdHlwZSBlcnJvcjsgYmVpbmcgdGhpcy5ncmlkQXBpIGlzIHVuZGVmaW5lZCBhdCB0aGF0IHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XHJcbiAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1vYmlsZVdpZHRoVGhyZXNob2xkID0gNzUyO1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gbW9iaWxlV2lkdGhUaHJlc2hvbGQpIHtcclxuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IDQwO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID0gMTA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVHcmlkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEZpcmVkIHRoZSBmaXJzdCB0aW1lIGRhdGEgaXMgcmVuZGVyZWQgaW50byB0aGUgZ3JpZC4gKi9cclxuICBwdWJsaWMgb25GaXJzdERhdGFSZW5kZXJlZCgpIHtcclxuICAgIGlmICghdGhpcy5zYXZlZENvbHVtblN0YXRlPy5zdGF0ZS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgY29sdW1uU3RhdGU6IEFycmF5PENvbHVtblN0YXRlPiA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uU3RhdGUoKSk7XHJcbiAgICAgIHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZSA9IHtcclxuICAgICAgICBzdGF0ZTogY29sdW1uU3RhdGUsXHJcbiAgICAgICAgYXBwbHlPcmRlcjogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUodGhpcy5zYXZlZENvbHVtblN0YXRlKTtcclxuICAgIHRoaXMudXBkYXRlZENvbHVtblN0YXRlLmVtaXQodGhpcy5zYXZlZENvbHVtblN0YXRlKTtcclxuICAgIHRoaXMuY3VycmVudENvbHVtblN0YXRlID0gdGhpcy5zYXZlZENvbHVtblN0YXRlO1xyXG4gICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcclxuICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgIHRoaXMuaXNHcmlkRGF0YVJlbmRlcmVkLnNldCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXNpemUgZ3JpZCBmcm9tIHNpemUgbW9kZSAqL1xyXG4gIHByaXZhdGUgcmVzaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNpemVNb2RlID09PSAnQ29tcGFjdCcpIHtcclxuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0MDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2l6ZU1vZGUgPT09ICdSb29teScpIHtcclxuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA1NjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDQ4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gcGFnZSBzZWxlY3Rpb24gY2hhbmdlXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzZWxlY3RlZCBwYWdlIG51bWJlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblBhZ2VOdW1iZXJDaGFuZ2UodmFsdWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gVGhlIHBhZ2UgdmFsdWVzIGFyZSAxIG9mZiB0byBtYWtlIGEgMS1iYXNlZCBhcnJheSwgYnV0IHRoZSBhY3R1YWwgcGFnZXMgYXJlIGEgMC1iYXNlZCBhcnJheS5cclxuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UodmFsdWUgLSAxKTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBuZXh0IHBhZ2UgZXZlbnQgKi9cclxuICBwdWJsaWMgbmV4dFBhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9OZXh0UGFnZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBQcmV2aW91cyBQYWdlIEV2ZW50ICovXHJcbiAgcHVibGljIHByZXZpb3VzUGFnZSgpIHtcclxuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1ByZXZpb3VzUGFnZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIENoYW5nZSBQYWdlIFNpemUgRXZlbnRcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBhZ2luYXRpb24gZXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgY2hhbmdlUGFnZVNpemUoZXZlbnQ6IFBhZ2luYXRpb25DaGFuZ2VkRXZlbnQpIHtcclxuICAgIC8vIE9ubHkgbmVlZCB0byBkbyB0aGlzIHdvcmsgaWYgdGhlIHBhZ2Ugc2l6ZSBoYXMgY2hhbmdlZC5cclxuICAgIGlmIChldmVudC5uZXdQYWdlU2l6ZSkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBmaWx0ZXJlZCByb3dzLlxyXG4gICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xyXG4gICAgICAvLyBIYW5kbGUgdGV4dCBjaGFuZ2VzXHJcbiAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZ3JpZCBmaWx0ZXIgaXMgY2hhbmdlZCBcclxuICAgKiBAdG9kbyB1cGRhdGUgdGhlIGZpbHRlciBkcm9wZG93biBvcHRpb25zIGJhc2VkIG9uIHRoZSBmaWx0ZXJlZCBkYXRhIHNldCwgaW5zdGVhZCBvZiB0aGUgY29tcGxldGUgZGF0YSBzZXQuXHJcbiAgICovXHJcbiAgcHVibGljIG9uRmlsdGVyQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXZpb3VzVG90YWxMZW5ndGg6IG51bWJlciA9IE51bWJlcih0aGlzLnRvdGFsTGVuZ3RoKTtcclxuICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGZpbHRlcmVkIHJvd3MuXHJcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xyXG4gICAgaWYgKHRoaXMudG90YWxMZW5ndGggIT09IHByZXZpb3VzVG90YWxMZW5ndGgpIHtcclxuICAgICAgdGhpcy5hcmlhUmVzdWx0c0NvdW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgdGhpcy5hcmlhUmVzdWx0c0NvdW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy50b3RhbExlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmZpbHRlcmVkLXJlc3VsdHMubm8tcmVzdWx0cycpXHJcbiAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgICAgICdhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5maWx0ZXJlZC1yZXN1bHRzLmhhcy1yZXN1bHRzJywgeydyZXN1bHRzQ291bnQnOiB0aGlzLnRvdGFsTGVuZ3RofVxyXG4gICAgICAgICk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJpYVJlc3VsdHNDb3VudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2VuZXJhdGVkIHRleHQgZm9yIHNob3dpbmcgcGFnZXMgaW4gZm9ybWF0OiAxLTExIG9mIDExICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVQYWdlQ2hhbmdlVGV4dCgpOiB2b2lkIHtcclxuICAgIC8vIEhhbmRsZSBlbXB0eSB0YWJsZVxyXG4gICAgaWYgKCF0aGlzLnRvdGFsTGVuZ3RoIHx8IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIFJlc2V0IHRoZSBwYWdpbmF0aW9uIFVJXHJcbiAgICAgIHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzID0gMTtcclxuICAgICAgdGhpcy5wYWdlU2VsZWN0b3IgPSBbMV07XHJcbiAgICAgIHRoaXMucGFnZUNoYW5nZVRleHQgPSBgMGA7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgIH1cclxuICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXHJcbiAgICB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpIHx8IE1hdGguY2VpbCh0aGlzLnRvdGFsTGVuZ3RoIC8gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUpIHx8IDE7XHJcbiAgICAvLyBSZXNldCB0aGUgcGFnZSBzZWxlY3RvclxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICBjb25zdCBwYWdlU2VsZWN0b3IgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzOyBpKyspIHtcclxuICAgICAgcGFnZVNlbGVjdG9yLnB1c2goaSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTZWxlY3RvciA9IHBhZ2VTZWxlY3RvcjtcclxuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHRoaXMudG90YWxMZW5ndGgsIDApO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKiBwYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCA8IGxlbmd0aCA/IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgbGVuZ3RoKSA6IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZUNoYW5nZVRleHQgPSBgJHtzdGFydEluZGV4ICsgMX0gLSAke2VuZEluZGV4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSB0aGUgc2VhcmNoIGZpbHRlciBvbiBkYXRhIHdoZW4gc2VhcmNoIHRleHQgY2hhbmdlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblNlYXJjaFRleHRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oXCJxdWlja0ZpbHRlclRleHRcIiwgdGhpcy5ncmlkU2VhcmNoVGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgZmlsdGVyIHBhbmVsIGRpc3BsYXkgKi9cclxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyUGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlck9wZW5TdGF0ZSA9ICF0aGlzLmZpbHRlck9wZW5TdGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKiBBcHBseSB0aGUgc2VsZWN0ZWQgZmlsdGVycyAqL1xyXG4gIHB1YmxpYyBhcHBseUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgdGFibGVGaWx0ZXJNb2RlbDogRmlsdGVyTW9kZWwgPSB7fTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvbEZpbHRlciA9IHRoaXMuY29sRmlsdGVyc1tpXTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuZmlsdGVyU2VsZWN0aW9uc1tpXTtcclxuICAgICAgaWYgKCFzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIFJlc2V0IG91dCB0aGUgY29sdW1uIGZpbHRlcnNcclxuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Q29sdW1uRmlsdGVyTW9kZWwoY29sRmlsdGVyLmhlYWRlciwgbnVsbCk7XHJcbiAgICAgICAgdGFibGVGaWx0ZXJNb2RlbFtjb2xGaWx0ZXIuaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIC8vIFNldCB0aGUgc2luZ2xlIGZpbHRlciBmb3IgdGhlIGNvbHVtblxyXG4gICAgICAgIGxldCBmaWx0ZXJNb2RlbDogVGV4dEZpbHRlck1vZGVsID0geyBmaWx0ZXJUeXBlOiAndGV4dCcsIHR5cGU6ICdlcXVhbHMnLCBmaWx0ZXI6IHNlbGVjdGVkRWxlbWVudHNbMF0gfTtcclxuICAgICAgICAvLyBBcHBseSB0aGUgZmlsdGVyIG1vZGVsIHRvIHRoZSBjb2x1bW5cclxuICAgICAgICB0YWJsZUZpbHRlck1vZGVsW2NvbEZpbHRlci5oZWFkZXJdID0gZmlsdGVyTW9kZWw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gU2V0IG11bHRpcGxlIE9SIGZpbHRlcnMgZm9yIHRoZSBjb2x1bW5cclxuICAgICAgICBsZXQgZmlsdGVyTW9kZWxzOiBDb21iaW5lZFNpbXBsZU1vZGVsPFRleHRGaWx0ZXJNb2RlbD4gPSB7IGZpbHRlclR5cGU6ICd0ZXh0Jywgb3BlcmF0b3I6ICdPUicsIGNvbmRpdGlvbnM6IFtdIH07XHJcbiAgICAgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGUgbW9kZWxcclxuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGVkRWxlbWVudCBvZiBzZWxlY3RlZEVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBmaWx0ZXJNb2RlbHMuY29uZGl0aW9ucy5wdXNoKHsgZmlsdGVyVHlwZTogJ3RleHQnLCB0eXBlOiAnZXF1YWxzJywgZmlsdGVyOiBzZWxlY3RlZEVsZW1lbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIgbW9kZWwgY29sbGVjdGlvbiB0byB0aGUgY29sdW1uXHJcbiAgICAgICAgdGFibGVGaWx0ZXJNb2RlbFtjb2xGaWx0ZXIuaGVhZGVyXSA9IGZpbHRlck1vZGVscztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gT25jZSBldmVyeXRoaW5nIGlzIHNldCwgdXBkYXRlIHRoZSBmaWx0ZXJzXHJcbiAgICB0aGlzLmdyaWRBcGkuc2V0RmlsdGVyTW9kZWwodGFibGVGaWx0ZXJNb2RlbCk7XHJcbiAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xlYXIgYWxsIGZpbHRlcnMgKi9cclxuICBwdWJsaWMgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgLy8gQ2xlYXIgYWxsIHNlbGVjdGlvbnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJTZWxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0aW9uc1tpXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gU2V0IHRoZSBmdWxsIGdyaWQgZmlsdGVyIG1vZGVsIHRvIG51bGxcclxuICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChudWxsKTtcclxuICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheVxyXG4gICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIG5vIGZpbHRlcnMgYXJlIHNlbGVjdGVkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGZpbHRlciBpcyBzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNFbXB0eUZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyU2VsZWN0aW9ucyB8fCAhdGhpcy5maWx0ZXJTZWxlY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgZmlsdGVyU2VsZWN0IG9mIHRoaXMuZmlsdGVyU2VsZWN0aW9ucykge1xyXG4gICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgZmlsdGVyIGhhcyBiZWVuIHNlbGVjdGVkLCByZXR1cm4gZmFsc2VcclxuICAgICAgaWYgKGZpbHRlclNlbGVjdC5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIENhbmNlbCB0aGUgY2hhbmdlcyB0byB0aGUgZmlsdGVyIGFuZCBjbG9zZXMgdGhlIGZpbHRlciBwYW5lbCAqL1xyXG4gIHB1YmxpYyBjYW5jZWxGaWx0ZXJDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gR2V0IHRoZSBzdG9yZWQgZmlsdGVycyBmb3IgdGhlIGdpdmVuIG1vZGVsXHJcbiAgICAgIGNvbnN0IGNvbEZpbHRlciA9IHRoaXMuY29sRmlsdGVyc1tpXTtcclxuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRmlsdGVyTW9kZWwoY29sRmlsdGVyLmhlYWRlcik7XHJcbiAgICAgIGxldCBmaWx0ZXJTZWxlY3Rpb25EYXRhID0gW107XHJcbiAgICAgIGlmIChtb2RlbCAmJiBtb2RlbFtcImNvbmRpdGlvbnNcIl0pIHtcclxuICAgICAgICAvLyBUaGUgbW9kZWwgaXMgYSBjb21iaW5lZCBtb2RlbCB3aXRoIG11bHRpcGxlIHNlbGVjdGlvbnNcclxuICAgICAgICBjb25zdCBmaWx0ZXJNb2RlbCA9IG1vZGVsIGFzIENvbWJpbmVkU2ltcGxlTW9kZWw8VGV4dEZpbHRlck1vZGVsPjtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZmlsdGVyTW9kZWwuY29uZGl0aW9ucykge1xyXG4gICAgICAgICAgZmlsdGVyU2VsZWN0aW9uRGF0YS5wdXNoKGVsZW1lbnQuZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobW9kZWwpIHtcclxuICAgICAgICAvLyBBc3N1bWUgdGhlIG1vZGVsIGlzIGEgc2luZ2xlIFRleHQgRmlsdGVyIE1vZGVsXHJcbiAgICAgICAgbGV0IGZpbHRlclNlbGVjdGlvbjogVGV4dEZpbHRlck1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgZmlsdGVyU2VsZWN0aW9uRGF0YS5wdXNoKGZpbHRlclNlbGVjdGlvbi5maWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCB0aGUgZmlsdGVyIHNlbGVjdGlvbnNcclxuICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb25zW2ldID0gZmlsdGVyU2VsZWN0aW9uRGF0YTtcclxuICAgIH1cclxuICAgIC8vIENsb3NlIHRoZSBmaWx0ZXIgcGFuZWxcclxuICAgIHRoaXMudG9nZ2xlRmlsdGVyUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKiBQb3B1bGF0ZXMgdGhlIGZpbHRlciBkcm9wZG93bnMgKi9cclxuICBwcml2YXRlIHBvcHVsYXRlRmlsdGVycygpOiB2b2lkIHtcclxuICAgIC8vIFJlc2V0IHRoZSBmaWx0ZXIgZHJvcGRvd25zXHJcbiAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuY29sRmlsdGVycyA9IFtdO1xyXG4gICAgLy8gR2V0IHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGEgZmlsdGVyXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHM6IEFycmF5PENvbERlZj4gPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmcygpLmZpbHRlcigoZGVmKSA9PiBkZWZbJ2ZpbHRlciddKTtcclxuICAgIC8vIENyZWF0ZSBhIG1hcCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzIGZvciBlYWNoIGZpZWxkXHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgU2V0PGFueT4+KCk7XHJcbiAgICAvLyBJbml0aWFsaXplIHNldHMgZm9yIGVhY2ggZmllbGQgKGNvbHVtbikgXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGNvbFtcImZpZWxkXCJdO1xyXG4gICAgICBmaWx0ZXJWYWx1ZXNNYXAuc2V0KGZpZWxkLCBuZXcgU2V0PGFueT4oKSk7XHJcbiAgICB9XHJcbiAgICAvLyBVc2UgZm9yRWFjaE5vZGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXHJcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGU6IElSb3dOb2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmRhdGEpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBjb2xbXCJmaWVsZFwiXTtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLmdyaWRBcGkuZ2V0Q2VsbFZhbHVlKHtyb3dOb2RlOiBub2RlLCBjb2xLZXk6IGZpZWxkfSk7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZmlsdGVyVmFsdWVzTWFwLmdldChmaWVsZCk/LmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHVuaXF1ZSB2YWx1ZXMgZm9yIGVhY2ggZmllbGQsIHBvcHVsYXRlIGZpbHRlciBvcHRpb25zXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGNvbFtcImZpZWxkXCJdO1xyXG4gICAgICBjb25zdCBsYWJlbDogc3RyaW5nID0gY29sW1wiaGVhZGVyTmFtZVwiXTtcclxuICAgICAgY29uc3QgdW5pcXVlVmFsdWVzOiBBcnJheTxhbnk+ID0gQXJyYXkuZnJvbShmaWx0ZXJWYWx1ZXNNYXAuZ2V0KGZpZWxkKSB8fCBbXSkuc29ydCgpO1xyXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBzcGFjZSBmb3IgZmlsdGVyIHNlbGVjdGlvbnNcclxuICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnMucHVzaChbXSk7IFxyXG4gICAgICAgIHRoaXMuY29sRmlsdGVycy5wdXNoKHsgaGVhZGVyOiBmaWVsZCwgbGFiZWw6IGxhYmVsLCBvcHRpb25zOiB1bmlxdWVWYWx1ZXMgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBPcGVuIHRoZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCAqL1xyXG4gIHB1YmxpYyBvcGVuQ29sdW1uT3B0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtblN0YXRlOiBBcnJheTxDb2x1bW5TdGF0ZT4gPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uU3RhdGUoKTtcclxuICAgIGNvbnN0IGNvbHVtbkRhdGE6IEFycmF5PENvbHVtbkRhdGE+ID0gdGhpcy5jb2x1bW5TdGF0ZVRvRGF0YShjb2x1bW5TdGF0ZSk7XHJcbiAgICBjb25zdCBpbml0aWFsQ29sdW1uRGF0YTogQXJyYXk8Q29sdW1uRGF0YT4gPSB0aGlzLmNvbHVtblN0YXRlVG9EYXRhKHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZS5zdGF0ZSk7XHJcbiAgICBjb25zdCBjb2x1bW5PcHRpb25zRGF0YTogQ29sdW1uT3B0aW9uc0RhdGEgPSB7XHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXHJcbiAgICAgIGNvbHVtbkRhdGEsXHJcbiAgICAgIGluaXRpYWxDb2x1bW5EYXRhLFxyXG4gICAgICBzaG93U2F2ZUNvbHVtbk9wdGlvbnNUZXh0OiB0aGlzLnNob3dTYXZlQ29sdW1uT3B0aW9uc1RleHRcclxuICAgIH07XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNvZkNvbHVtbk9wdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgIHBvc2l0aW9uOiB7IGJvdHRvbTogJzQwcHgnLCByaWdodDogJzQwcHgnIH0sXHJcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnY29sdW1uLW9wdGlvbnMtaGVhZGluZycsXHJcbiAgICAgIGRhdGE6IGNvbHVtbk9wdGlvbnNEYXRhXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIHRhcCgodXBkYXRlZENvbHVtblN0YXRlOiBBcHBseUNvbHVtblN0YXRlUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKHVwZGF0ZWRDb2x1bW5TdGF0ZSAmJiB1cGRhdGVkQ29sdW1uU3RhdGUuc3RhdGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRBcGkuYXBwbHlDb2x1bW5TdGF0ZSh1cGRhdGVkQ29sdW1uU3RhdGUpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVkQ29sdW1uU3RhdGUuZW1pdCh1cGRhdGVkQ29sdW1uU3RhdGUpO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1uU3RhdGUgPSB1cGRhdGVkQ29sdW1uU3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYEFycmF5PENvbHVtblN0YXRlPmAgdG8gYEFycmF5PENvbHVtbkRhdGE+YCBcclxuICAgKiBAbm90ZSBmaWx0ZXJzIG91dCBhbnkgY29sdW1ucyBtYXJrZWQgYXMgJ3Bpbm5lZCcgYnkgdGhlIGNvbHVtbiBkZWZpbml0aW9ucy5cclxuICAgKiBAbm90ZSBmaWx0ZXJzIGFueSBjb2x1bW5zIHdpdGhvdXQgYSAnaGVhZGVyTmFtZScuXHJcbiAgICogQHBhcmFtIGNvbHVtblN0YXRlIHRoZSBjb2x1bW4gc3RhdGUgdG8gbW9kaWZ5XHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgY29sdW1uIGRhdGEgZm9ybWF0dGVkIHRvIGJlIGluZ2VzdGVkIGJ5IHRoZSBgU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudGBcclxuICAqL1xyXG4gIHByaXZhdGUgY29sdW1uU3RhdGVUb0RhdGEoY29sdW1uU3RhdGU6IEFycmF5PENvbHVtblN0YXRlPik6IEFycmF5PENvbHVtbkRhdGE+IHtcclxuICAgIHJldHVybiBjb2x1bW5TdGF0ZVxyXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lOiBzdHJpbmcgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmKGNvbHVtbi5jb2xJZCk/LmhlYWRlck5hbWUgfHwgXCJcIjtcclxuICAgICAgICBpZiAoaGVhZGVyTmFtZSAmJiBoZWFkZXJOYW1lLmxlbmd0aCAmJiAhY29sdW1uLnBpbm5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWU6IHN0cmluZyA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWYoY29sdW1uLmNvbElkKS5oZWFkZXJOYW1lO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBpZDogY29sdW1uLmNvbElkLFxyXG4gICAgICAgICAgaXNDaGVja2VkOiAhY29sdW1uLmhpZGUsXHJcbiAgICAgICAgICB0ZXh0OiBoZWFkZXJOYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0IHRoZSBjdXJyZW50IGZpbHRlcmVkL3NvcnRlZCByb3cgZGF0YSAqL1xyXG4gIHB1YmxpYyBleHBvcnRGaWx0ZXJlZFJvd0RhdGEoKTogdm9pZCB7XHJcbiAgICBjb25zdCBleHBvcnRlZFJvd3M6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGNvbnN0IGNvbHVtbnM6IEFycmF5PENvbHVtbj4gPSB0aGlzLmdyaWRBcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpLmZpbHRlcigoY29sKSA9PiBjb2wuZ2V0Q29sRGVmKCkuaGVhZGVyTmFtZSk7XHJcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQoKG5vZGU6IElSb3dOb2RlPGFueT4pID0+IHtcclxuICAgICAgY29uc3Qgcm93RGF0YTogYW55ID0ge307XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbElkOiBzdHJpbmcgPSBjb2wuZ2V0Q29sSWQoKTtcclxuICAgICAgICAvLyBVc2UgZ3JpZEFwaSdzIGdldENlbGxWYWx1ZSB0byBnZXQgdGhlIHZhbHVlIHRyYW5zZm9ybWVkIGJ5IHZhbHVlR2V0dGVyXHJcbiAgICAgICAgcm93RGF0YVtjb2xJZF0gPSB0aGlzLmdyaWRBcGkuZ2V0Q2VsbFZhbHVlKHsgcm93Tm9kZTogbm9kZSwgY29sS2V5OiBjb2xJZCB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGV4cG9ydGVkUm93cy5wdXNoKHJvd0RhdGEpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUm93RGF0YUZvckV4cG9ydC5lbWl0KGV4cG9ydGVkUm93cyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiogVXNlZCBmb3Igc2V0dGluZyBmaWx0ZXIgdmFsdWVzICovXHJcbmNsYXNzIFNvZlRhYmxlRmlsdGVyIHtcclxuICAvKiogVGhlIGNvbHVtbiBoZWFkZXIgKi9cclxuICBoZWFkZXI6IHN0cmluZztcclxuICAvKiogVGhlIGNvbHVtbiBsYWJlbCBvciB0cmFuc2xhdGlvbiBrZXkgKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgY29sdW1uIGZpbHRlciBvcHRpb25zICovXHJcbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcclxufVxyXG5cclxuLyoqIEEgZmlsdGVyIGNvbWJpbmluZyBtdWx0aXBsZSBjb25kaXRpb25zLCB0YWtlbiBmcm9tIEFnR3JpZCovXHJcbmNsYXNzIENvbWJpbmVkU2ltcGxlTW9kZWw8VD4ge1xyXG4gIC8qKiBUaGUgZmlsdGVyIHR5cGUuIFVzdWFsbHkgJ3RleHQnICovXHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgb3BlcmF0b3IuIFVzdWFsbHkgJ09SJyAqL1xyXG4gIG9wZXJhdG9yOiAnQU5EJyB8ICdPUic7XHJcbiAgLyoqIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgRmlsdGVyIE1vZGVsICovXHJcbiAgY29uZGl0aW9uczogVFtdO1xyXG59XHJcbiIsIjxkaXYgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgZnhMYXlvdXRHYXA9XCIxNnB4XCIgbS1iLTI0PlxyXG4gIEBpZiAoZW5hYmxlRmlsdGVyICYmIGNvbEZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZWwoKVwiIFxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCJcclxuICAgICAgW2NsYXNzLmZpbHRlci1zZWxlY3RlZF09XCJmaWx0ZXJPcGVuU3RhdGVcIiBcclxuICAgICAgaWQ9XCJidG4tZW5hYmxlLWZpbHRlclwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGggcGgtYm9sZCBwaC1zbGlkZXJzLWhvcml6b250YWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIHt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGVuYWJsZVNlYXJjaCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtc2VhcmNoLWZpZWxkIGRlbnNlLTRcIiBmeEZsZXg9XCJhdXRvXCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtbWFnbmlmeWluZy1nbGFzcyBzZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VhcmNoLWxhYmVsXCI+e3snYXJtYXR1cmUuc29mLXRhYmxlLnNlYXJjaCcgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVGV4dENoYW5nZWQoKVwiIFxyXG4gICAgICAgICNncmlkU2VhcmNoVGV4dElucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJncmlkU2VhcmNoVGV4dElucHV0XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5zZWFyY2gtZmlsdGVyLWRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgfVxyXG4gIEBpZiAoZW5hYmxlQ29sdW1uT3B0aW9ucykge1xyXG4gICAgPGJ1dHRvbiBcclxuICAgICAgKGNsaWNrKT1cIm9wZW5Db2x1bW5PcHRpb25zKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cIm9wZW4tY29sdW1uLW9wdGlvbnNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5jb2x1bW4tb3B0aW9ucy1idG4nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmNvbHVtbi1vcHRpb25zLWJ0bicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1kYy10b29sdGlwX19zdXJmYWNlIGJlbG93XCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGgtYm9sZCBwaC1wYXVzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoZW5hYmxlRXhwb3J0KSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwiZXhwb3J0RmlsdGVyZWRSb3dEYXRhKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cImV4cG9ydC10YWJsZVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmV4cG9ydC10YWJsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZXhwb3J0LXRhYmxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWV4cG9ydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLXRhYmxlLXJpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwhLS0gXHJcbiAgT25seSBpbmplY3QgPGJ1dHRvbj4ncyBpbnNpZGUgYW4gPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAuLi4gXHJcbiAgPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAgIDxidXR0b24gXHJcbiAgICAgIChjbGljayk9XCJhbnlGdW5jdGlvbigpXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgXHJcbiAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cImFueSBidXR0b25cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiYW55IGJ1dHRvblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWFjb3JuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgLi4uIFxyXG4gIG5vdGU6IG1ha2Ugc3VyZSBidXR0b25zIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIG1hdGNoIG90aGVycyA9XHJcbiAgYG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24taWNvbi12MlwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCJgXHJcbiAgKiByZW1lbWJlciB0byBhZGQgYXJpYS1sYWJlbCBhbmQgdG9vbHRpcCBmb3IgaWNvbiBidXR0b25cclxuICAtLT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICNhcmlhUmVzdWx0c0NvdW50IGNsYXNzPVwic3Itb25seVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPjwvZGl2PlxyXG5cclxuQGlmIChpc0dyaWREYXRhUmVuZGVyZWQoKSAmJiBmaWx0ZXJPcGVuU3RhdGUpIHtcclxuICA8ZmllbGRzZXQgXHJcbiAgICBjbGFzcz1cImZpbHRlci1wYW5lbFwiIHJvbGU9XCJyZWdpb25cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuc2VsZWN0LWZpbHRlcnMtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8cD5cclxuICAgICAgPGkgY2xhc3M9XCJwaCBwaC1ib2xkIHBoLXNsaWRlcnMtaG9yaXpvbnRhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtOFwiPnt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLXNlbGVjdC1jb250YWluZXIgbS12LTIwXCI+XHJcbiAgICAgIEBmb3IgKGNvbEZpbHRlciBvZiBjb2xGaWx0ZXJzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e2NvbEZpbHRlci5sYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTZWxlY3Rpb25zW2ldXCIgXHJcbiAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICBpZD1cImZpbHRlckRyb3Bkb3due3tpfX1cIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2FybWF0dXJlLnNvZi10YWJsZS5hbGwnIHwgdHJhbnNsYXRlfX1cIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBAZm9yIChjb2xPcHRpb24gb2YgY29sRmlsdGVyLm9wdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjb2xPcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIHt7Y29sT3B0aW9ufX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCI1MCVcIj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImhhc0VtcHR5RmlsdGVycygpXCIgXHJcbiAgICAgICAgICBtYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi12MlwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgaWQ9XCJ0YWJsZUZpbHRlckNsZWFyXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxyXG4gICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLnJlc2V0JyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwJVwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIlXCIgZnhMYXlvdXRBbGlnbj1cImZsZXgtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjAgMSBhdXRvXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpbHRlckNoYW5nZXMoKVwiIG1hdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCIgXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiIGlkPVwidGFibGVGaWx0ZXJDYW5jZWxcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XHJcbiAgICAgICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLmNhbmNlbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIwIDEgYXV0b1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24tdjJcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIiBpZD1cInRhYmxlRmlsdGVyQXBwbHlcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICB7eydhcm1hdHVyZS5zb2YtdGFibGUucmVzdWx0cycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbn1cclxuXHJcbjxhZy1ncmlkLWFuZ3VsYXIgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgKGZpcnN0RGF0YVJlbmRlcmVkKT1cIm9uRmlyc3REYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGZpbHRlckNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKClcIlxyXG4gIChwYWdpbmF0aW9uQ2hhbmdlZCk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCIgXHJcbiAgW3Jvd0RhdGFdPVwicm93RGF0YVwiIFxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbERlZnNcIiBcclxuICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgXHJcbiAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFxyXG4gIFtzdXBwcmVzc1BhZ2luYXRpb25QYW5lbF09XCJ0cnVlXCJcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIiBcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXHJcbiAgW2hlYWRlckhlaWdodF09XCJyb3dIZWlnaHRcIiBcclxuICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiIFxyXG4gIFtkb21MYXlvdXRdPVwiJ2F1dG9IZWlnaHQnXCIgXHJcbiAgW3Rvb2x0aXBTaG93RGVsYXldPVwidG9vbHRpcFNob3dEZWxheVwiXHJcbiAgW292ZXJsYXlOb1Jvd3NUZW1wbGF0ZV09XCInYXJtYXR1cmUuc29mLXRhYmxlLm5vLXJvd3MnIHwgdHJhbnNsYXRlXCJcclxuICBbY2xhc3Mubm8tcm93c109XCIhdG90YWxMZW5ndGhcIlxyXG4gIGNsYXNzPVwiYWctdGhlbWUtbWF0ZXJpYWxcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG48ZGl2IFxyXG4gIFtmeFNob3ddPVwiaXNHcmlkRGF0YVJlbmRlcmVkKClcIlxyXG4gIGNsYXNzPVwiY3VzdG9tLXBhZ2luYXRvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaXJzdC1zZWN0aW9uXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnQtMVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgI3BhZ2VTaXplU2VsZWN0XHJcbiAgICAgICAgaWQ9XCJwYWdlU2l6ZUlucHV0XCIgbmFtZT1cInBhZ2VTaXplSW5wdXRcIiBcclxuICAgICAgICBbKHZhbHVlKV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgIEBmb3IgKHNpemUgb2YgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBcclxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW9wdGlvblwiIGlkPVwic2l6ZXt7aX19XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yW2ldXCI+XHJcbiAgICAgICAgICAgIHt7c2l6ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LXBhZ2VcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2luYXRpb25QYWdlU2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWljb25cIj5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlU2l6ZVNlbGVjdC5wYW5lbE9wZW4gPyAndXAnOidkb3duJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGFnZUNoYW5nZVRleHRcIj5cclxuICAgICAge3twYWdlQ2hhbmdlVGV4dH19IHt7J2FybWF0dXJlLnNvZi10YWJsZS5vZicgfCB0cmFuc2xhdGV9fSB7e3RvdGFsTGVuZ3RofX1cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tdG8tcGFnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWJveFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgICAjcGFnZU51bWJlclNlbGVjdFxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblBhZ2VOdW1iZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgICAgICAgaWQ9XCJwYWdlU2VsZWxjdG9yXCIgbmFtZT1cInBhZ2VTZWxlY3RvclwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+XHJcbiAgICAgICAgICBAZm9yIChwYWdlIG9mIHBhZ2VTZWxlY3RvcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJwYWdlXCIgY2xhc3M9XCJwYWdlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e2N1cnJlbnRQYWdlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9mLXBhZ2VcIj4ge3snYXJtYXR1cmUuc29mLXRhYmxlLm9mJyB8IHRyYW5zbGF0ZX19IHt7dG90YWxOdW1iZXJPZlBhZ2VzfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlTnVtYmVyU2VsZWN0LnBhbmVsT3BlbiA/ICd1cCc6J2Rvd24nKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBjbGFzcz1cInNlY29uZC1zZWN0aW9uXCI+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICBpZD1cInByZXYtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIFxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NjcmVlbi1yZWFkZXIucGFnaW5hdGlvbi5wcmV2aW91cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIiBcclxuICAgICAgICBpZD1cIm5leHQtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxOdW1iZXJPZlBhZ2VzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidzY3JlZW4tcmVhZGVyLnBhZ2luYXRpb24ubmV4dCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uYXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmICghaXNHcmlkRGF0YVJlbmRlcmVkKCkpIHtcclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=
|
|
@@ -475,13 +475,20 @@ class SofTableComponent {
|
|
|
475
475
|
};
|
|
476
476
|
});
|
|
477
477
|
}
|
|
478
|
-
/** Emit the current filtered row data */
|
|
478
|
+
/** Emit the current filtered/sorted row data */
|
|
479
479
|
exportFilteredRowData() {
|
|
480
|
-
const
|
|
481
|
-
this.gridApi.
|
|
482
|
-
|
|
480
|
+
const exportedRows = [];
|
|
481
|
+
const columns = this.gridApi.getAllDisplayedColumns().filter((col) => col.getColDef().headerName);
|
|
482
|
+
this.gridApi.forEachNodeAfterFilterAndSort((node) => {
|
|
483
|
+
const rowData = {};
|
|
484
|
+
columns.forEach(col => {
|
|
485
|
+
const colId = col.getColId();
|
|
486
|
+
// Use gridApi's getCellValue to get the value transformed by valueGetter
|
|
487
|
+
rowData[colId] = this.gridApi.getCellValue({ rowNode: node, colKey: colId });
|
|
488
|
+
});
|
|
489
|
+
exportedRows.push(rowData);
|
|
483
490
|
});
|
|
484
|
-
this.filteredRowDataForExport.emit(
|
|
491
|
+
this.filteredRowDataForExport.emit(exportedRows);
|
|
485
492
|
}
|
|
486
493
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SofTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
487
494
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: SofTableComponent, selector: "sof-table", inputs: { rowData: "rowData", colDefs: "colDefs", sizeMode: "sizeMode", paginationPageSizeSelector: "paginationPageSizeSelector", enableSearch: "enableSearch", enableFilter: "enableFilter", enableColumnOptions: "enableColumnOptions", enableExport: "enableExport", showSaveColumnOptionsText: "showSaveColumnOptionsText", tableName: "tableName", savedColumnState: "savedColumnState" }, outputs: { updatedColumnState: "updatedColumnState", filteredRowDataForExport: "filteredRowDataForExport" }, viewQueries: [{ propertyName: "gridSearchTextInput", first: true, predicate: ["gridSearchTextInput"], descendants: true }, { propertyName: "ariaResultsCount", first: true, predicate: ["ariaResultsCount"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n fxLayoutGap=\"16px\" m-b-24>\r\n @if (enableFilter && colFilters.length) {\r\n <button \r\n (click)=\"toggleFilterPanel()\" \r\n mat-flat-button class=\"sof-button-v2\"\r\n [class.filter-selected]=\"filterOpenState\" \r\n id=\"btn-enable-filter\" color=\"secondary\" size=\"small\">\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n {{'armature.sof-table.filter' | translate}}\r\n </button>\r\n }\r\n @if (enableSearch) {\r\n <mat-form-field class=\"sof-form-field table-search-field dense-4\" fxFlex=\"auto\">\r\n <span matPrefix>\r\n <i class=\"ph-bold ph-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <mat-label class=\"search-label\">{{'armature.sof-table.search' | translate}}</mat-label>\r\n <input \r\n (input)=\"onSearchTextChanged()\" \r\n #gridSearchTextInput matInput type=\"text\" id=\"gridSearchTextInput\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.search-filter-description' | translate\"/>\r\n </mat-form-field>\r\n }\r\n @if (enableColumnOptions) {\r\n <button \r\n (click)=\"openColumnOptions()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"open-column-options\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-pause\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if(enableExport) {\r\n <button \r\n (click)=\"exportFilteredRowData()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"export-table\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-export\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <ng-content select=\"[sof-table-right-buttons]\"></ng-content>\r\n <!-- \r\n Only inject <button>'s inside an <ng-container sof-table-right-buttons>\r\n ... \r\n <ng-container sof-table-right-buttons>\r\n <button \r\n (click)=\"anyFunction()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" aria-label=\"any button\"\r\n matTooltip=\"any button\" matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-acorn\" aria-hidden=\"true\"></i>\r\n </button>\r\n </ng-container>\r\n ... \r\n note: make sure buttons have the following attributes to match others =\r\n `mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"`\r\n * remember to add aria-label and tooltip for icon button\r\n -->\r\n</div>\r\n\r\n<div #ariaResultsCount class=\"sr-only\" aria-live=\"assertive\"></div>\r\n\r\n@if (isGridDataRendered() && filterOpenState) {\r\n <fieldset \r\n class=\"filter-panel\" role=\"region\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.select-filters-description' | translate\">\r\n <p>\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n <span class=\"m-l-8\">{{'armature.sof-table.filter' | translate}}</span>\r\n </p>\r\n <div class=\"filter-panel-select-container m-v-20\">\r\n @for (colFilter of colFilters; let i = $index; track i) {\r\n <mat-form-field appearance=\"outline\" class=\"sof-form-field table-filter-select\">\r\n <mat-label>{{colFilter.label}}</mat-label>\r\n <mat-select \r\n [(ngModel)]=\"filterSelections[i]\" \r\n multiple \r\n id=\"filterDropdown{{i}}\"\r\n placeholder=\"{{'armature.sof-table.all' | translate}}\" disableRipple=\"true\">\r\n @for (colOption of colFilter.options; track $index) {\r\n <mat-option [value]=\"colOption\">\r\n {{colOption}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n <div fxLayout=\"row\">\r\n <div fxFlex=\"50%\">\r\n <button \r\n (click)=\"clearFilters()\" [disabled]=\"hasEmptyFilters()\" \r\n mat-button class=\"sof-button-v2\" size=\"medium\"\r\n id=\"tableFilterClear\" color=\"tertiary\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"50%\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"2%\" fxLayoutAlign=\"flex-end\">\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"cancelFilterChanges()\" mat-button class=\"sof-button-v2\" \r\n size=\"medium\" id=\"tableFilterCancel\" color=\"tertiary\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"applyFilters()\" mat-flat-button class=\"sof-button-v2\"\r\n size=\"medium\" id=\"tableFilterApply\" color=\"primary\">\r\n {{'armature.sof-table.results' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n<ag-grid-angular \r\n [fxShow]=\"isGridDataRendered()\"\r\n (gridReady)=\"onGridReady($event)\" \r\n (firstDataRendered)=\"onFirstDataRendered()\"\r\n (filterChanged)=\"onFilterChanged()\"\r\n (paginationChanged)=\"changePageSize($event)\" \r\n [rowData]=\"rowData\" \r\n [columnDefs]=\"colDefs\" \r\n [defaultColDef]=\"defaultColDef\" \r\n [pagination]=\"true\" \r\n [suppressPaginationPanel]=\"true\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" \r\n [paginationPageSize]=\"paginationPageSize\"\r\n [headerHeight]=\"rowHeight\" \r\n [rowHeight]=\"rowHeight\" \r\n [domLayout]=\"'autoHeight'\" \r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [overlayNoRowsTemplate]=\"'armature.sof-table.no-rows' | translate\"\r\n [class.no-rows]=\"!totalLength\"\r\n class=\"ag-theme-material\">\r\n</ag-grid-angular>\r\n\r\n<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n class=\"custom-paginator\">\r\n <div class=\"first-section\">\r\n <button class=\"button-part-1\" type=\"button\">\r\n <mat-select \r\n #pageSizeSelect\r\n id=\"pageSizeInput\" name=\"pageSizeInput\" \r\n [(value)]=\"paginationPageSize\" disableRipple=\"true\">\r\n @for (size of paginationPageSizeSelector; let i = $index; track i) {\r\n <mat-option \r\n class=\"page-option\" id=\"size{{i}}\"\r\n [value]=\"paginationPageSizeSelector[i]\">\r\n {{size}}\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{paginationPageSize}}</span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageSizeSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n <span class=\"pageChangeText\">\r\n {{pageChangeText}} {{'armature.sof-table.of' | translate}} {{totalLength}}\r\n </span>\r\n </div>\r\n <div class=\"go-to-page\">\r\n <div class=\"outer-box\">\r\n <button class=\"button-part\" type=\"button\">\r\n <mat-select \r\n #pageNumberSelect\r\n (selectionChange)=\"onPageNumberChange($event.value)\"\r\n [(value)]=\"currentPage\" \r\n id=\"pageSelelctor\" name=\"pageSelector\" disableRipple=\"true\">\r\n @for (page of pageSelector; track $index) {\r\n <mat-option [value]=\"page\" class=\"page-option\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{page}}</span>\r\n </span>\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{currentPage}}</span>\r\n <span class=\"of-page\"> {{'armature.sof-table.of' | translate}} {{totalNumberOfPages}} </span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageNumberSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n </div>\r\n <nav class=\"second-section\">\r\n <button \r\n (click)=\"previousPage()\"\r\n id=\"prev-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === 1\" \r\n [attr.aria-label]=\"'screen-reader.pagination.previous' | translate\">\r\n <i class=\"ph-bold ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button \r\n (click)=\"nextPage()\" \r\n id=\"next-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === totalNumberOfPages\"\r\n [attr.aria-label]=\"'screen-reader.pagination.next' | translate\">\r\n <i class=\"ph-bold ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n@if (!isGridDataRendered()) {\r\n <div class=\"loading-container\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"/>\r\n </div>\r\n}\r\n", styles: ["@font-face{font-family:agGridMaterial;src:url(data:font/woff2;charset=utf-8;base64,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);font-weight:400;font-style:normal}.ag-theme-material,.ag-theme-material-dark,.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #ff4081;--ag-foreground-color: rgba(0, 0, 0, .87);--ag-secondary-foreground-color: rgba(0, 0, 0, .54);--ag-disabled-foreground-color: rgba(0, 0, 0, .38);--ag-background-color: #fff;--ag-header-background-color: #fff;--ag-tooltip-background-color: #fff;--ag-subheader-background-color: #eee;--ag-subheader-toolbar-background-color: rgba(238, 238, 238, .5);--ag-header-cell-hover-background-color: #f2f2f2;--ag-chip-background-color: #e2e2e2;--ag-range-selection-background-color: rgba(122, 134, 203, .1);--ag-range-selection-background-color-2: rgba(122, 134, 203, .19);--ag-range-selection-background-color-3: rgba(122, 134, 203, .27);--ag-range-selection-background-color-4: rgba(122, 134, 203, .34);--ag-range-selection-highlight-color: #fce4ec;--ag-row-hover-color: #fafafa;--ag-column-hover-color: #fafafa;--ag-control-panel-background-color: #fafafa;--ag-selected-row-background-color: rgba(33, 150, 243, .3);--ag-checkbox-unchecked-color: #333;--ag-value-change-value-highlight-background-color: #00acc1;--ag-side-button-selected-background-color: transparent;--ag-advanced-filter-join-pill-color: #f08e8d;--ag-advanced-filter-column-pill-color: #a6e194;--ag-advanced-filter-option-pill-color: #f3c08b;--ag-advanced-filter-value-pill-color: #85c0e4;--ag-range-selection-border-color: var(--ag-material-primary-color);--ag-checkbox-checked-color: var(--ag-material-accent-color);--ag-borders: none;--ag-borders-critical: solid 1px;--ag-border-color: #e2e2e2;--ag-grid-size: 8px;--ag-icon-size: 18px;--ag-header-height: calc(var(--ag-grid-size) * 7);--ag-row-height: calc(var(--ag-grid-size) * 6);--ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);--ag-list-item-height: calc(var(--ag-grid-size) * 4);--ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));--ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);--ag-checkbox-border-radius: 2px;--ag-toggle-button-switch-border-width: 2px;--ag-toggle-button-height: var(--ag-icon-size);--ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);--ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);--ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);--ag-font-family: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ag-font-size: 13px;--ag-icon-font-family: agGridMaterial;--ag-selected-tab-underline-color: var(--ag-material-primary-color);--ag-selected-tab-underline-width: 2px;--ag-input-focus-border-color: var(--ag-material-primary-color);--ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, .122);--ag-card-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12);--ag-card-radius: 2px;--ag-invalid-color: #e02525}.ag-theme-material-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}@media (prefers-color-scheme: dark){.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material .ag-filter-toolpanel-search,.ag-theme-material .ag-status-bar,.ag-theme-material .ag-header-row,.ag-theme-material .ag-panel-title-bar-title,.ag-theme-material .ag-multi-filter-group-title-bar,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-search,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-dark .ag-header-row,.ag-theme-material-dark .ag-panel-title-bar-title,.ag-theme-material-dark .ag-multi-filter-group-title-bar,.ag-theme-material-auto-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-search,.ag-theme-material-auto-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-header-row,.ag-theme-material-auto-dark .ag-panel-title-bar-title,.ag-theme-material-auto-dark .ag-multi-filter-group-title-bar{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-header-foreground-color)}.ag-theme-material .ag-tab,.ag-theme-material-dark .ag-tab,.ag-theme-material-auto-dark .ag-tab{height:calc(var(--ag-grid-size) * 4.5);flex:1 1 auto}.ag-theme-material .ag-tabs-header,.ag-theme-material .ag-column-drop-horizontal,.ag-theme-material-dark .ag-tabs-header,.ag-theme-material-dark .ag-column-drop-horizontal,.ag-theme-material-auto-dark .ag-tabs-header,.ag-theme-material-auto-dark .ag-column-drop-horizontal{background-color:var(--ag-subheader-background-color)}.ag-theme-material .ag-tabs-body,.ag-theme-material-dark .ag-tabs-body,.ag-theme-material-auto-dark .ag-tabs-body{padding:calc(var(--ag-grid-size) * .5) 0}.ag-theme-material .ag-tabs-body .ag-menu-list,.ag-theme-material-dark .ag-tabs-body .ag-menu-list,.ag-theme-material-auto-dark .ag-tabs-body .ag-menu-list{padding-top:0;padding-bottom:0}.ag-theme-material .ag-header-cell,.ag-theme-material .ag-header-group-cell,.ag-theme-material-dark .ag-header-cell,.ag-theme-material-dark .ag-header-group-cell,.ag-theme-material-auto-dark .ag-header-cell,.ag-theme-material-auto-dark .ag-header-group-cell{transition:background-color .5s}.ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing{bottom:0}.ag-theme-material .ag-cell-inline-editing,.ag-theme-material-dark .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-cell-inline-editing{padding:var(--ag-grid-size);height:calc(var(--ag-row-height) + var(--ag-grid-size) * 3);border-color:var(--ag-border-color)!important}.ag-theme-material .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-dark .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-has-focus .ag-cell-inline-editing{border-color:var(--ag-input-focus-border-color)!important}.ag-theme-material .ag-column-drop-vertical,.ag-theme-material-dark .ag-column-drop-vertical,.ag-theme-material-auto-dark .ag-column-drop-vertical{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color);padding-top:var(--ag-grid-size)}.ag-theme-material .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-dark .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-auto-dark .ag-column-drop-vertical.ag-last-column-drop{border-bottom:none}.ag-theme-material .ag-column-drop-vertical-cell,.ag-theme-material-dark .ag-column-drop-vertical-cell,.ag-theme-material-auto-dark .ag-column-drop-vertical-cell{margin-left:0}.ag-theme-material .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-column-drop-vertical-empty-message{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-disabled-foreground-color)}.ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-ltr .ag-column-drop-vertical-empty-message{padding-left:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-right:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-rtl .ag-column-drop-vertical-empty-message{padding-right:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-left:var(--ag-grid-size)}.ag-theme-material .ag-status-bar,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-status-bar{border:solid 1px;border-color:var(--ag-border-color)}.ag-theme-material .ag-column-panel-column-select,.ag-theme-material-dark .ag-column-panel-column-select,.ag-theme-material-auto-dark .ag-column-panel-column-select{border-top:solid 1px;border-top-color:var(--ag-border-color)}.ag-theme-material .ag-column-select,.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select,.ag-theme-material-auto-dark .ag-column-select-header{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color)}.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select-header{height:var(--ag-header-height)}.ag-theme-material .ag-group-title-bar,.ag-theme-material-dark .ag-group-title-bar,.ag-theme-material-auto-dark .ag-group-title-bar{padding:calc(var(--ag-grid-size) * .75) var(--ag-grid-size)}.ag-theme-material .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-dark .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-auto-dark .ag-charts-format-sub-level-group-title-bar{padding:calc(var(--ag-grid-size) * .5) var(--ag-grid-size)}.ag-theme-material .ag-chart-data-section,.ag-theme-material .ag-chart-format-section,.ag-theme-material .ag-chart-advanced-settings-section,.ag-theme-material-dark .ag-chart-data-section,.ag-theme-material-dark .ag-chart-format-section,.ag-theme-material-dark .ag-chart-advanced-settings-section,.ag-theme-material-auto-dark .ag-chart-data-section,.ag-theme-material-auto-dark .ag-chart-format-section,.ag-theme-material-auto-dark .ag-chart-advanced-settings-section{padding-bottom:calc(var(--ag-grid-size) * .5)}.ag-theme-material .ag-chart-menu-close,.ag-theme-material-dark .ag-chart-menu-close,.ag-theme-material-auto-dark .ag-chart-menu-close{background:var(--ag-background-color)}.ag-theme-material .ag-chart-menu-close .ag-icon,.ag-theme-material-dark .ag-chart-menu-close .ag-icon,.ag-theme-material-auto-dark .ag-chart-menu-close .ag-icon{background:var(--ag-subheader-background-color)}.ag-theme-material input[class^=ag-]:not([type]),.ag-theme-material input[class^=ag-][type=text],.ag-theme-material input[class^=ag-][type=number],.ag-theme-material input[class^=ag-][type=tel],.ag-theme-material input[class^=ag-][type=date],.ag-theme-material input[class^=ag-][type=datetime-local],.ag-theme-material textarea[class^=ag-],.ag-theme-material-dark input[class^=ag-]:not([type]),.ag-theme-material-dark input[class^=ag-][type=text],.ag-theme-material-dark input[class^=ag-][type=number],.ag-theme-material-dark input[class^=ag-][type=tel],.ag-theme-material-dark input[class^=ag-][type=date],.ag-theme-material-dark input[class^=ag-][type=datetime-local],.ag-theme-material-dark textarea[class^=ag-],.ag-theme-material-auto-dark input[class^=ag-]:not([type]),.ag-theme-material-auto-dark input[class^=ag-][type=text],.ag-theme-material-auto-dark input[class^=ag-][type=number],.ag-theme-material-auto-dark input[class^=ag-][type=tel],.ag-theme-material-auto-dark input[class^=ag-][type=date],.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local],.ag-theme-material-auto-dark textarea[class^=ag-]{background:transparent;color:var(--ag-foreground-color);font-family:inherit;font-size:inherit;height:calc(var(--ag-grid-size) * 5);padding-bottom:var(--ag-grid-size);border-width:0;border-radius:0;border-bottom:2px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):focus,.ag-theme-material input[class^=ag-][type=text]:focus,.ag-theme-material input[class^=ag-][type=number]:focus,.ag-theme-material input[class^=ag-][type=tel]:focus,.ag-theme-material input[class^=ag-][type=date]:focus,.ag-theme-material input[class^=ag-][type=datetime-local]:focus,.ag-theme-material textarea[class^=ag-]:focus,.ag-theme-material-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-dark input[class^=ag-][type=text]:focus,.ag-theme-material-dark input[class^=ag-][type=number]:focus,.ag-theme-material-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-dark input[class^=ag-][type=date]:focus,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-dark textarea[class^=ag-]:focus,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-auto-dark input[class^=ag-][type=text]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=number]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=date]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-auto-dark textarea[class^=ag-]:focus{border-bottom:2px solid;border-bottom-color:var(--ag-material-primary-color);outline:none;box-shadow:none}.ag-theme-material input[class^=ag-]:not([type])::placeholder,.ag-theme-material input[class^=ag-][type=text]::placeholder,.ag-theme-material input[class^=ag-][type=number]::placeholder,.ag-theme-material input[class^=ag-][type=tel]::placeholder,.ag-theme-material input[class^=ag-][type=date]::placeholder,.ag-theme-material input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material textarea[class^=ag-]::placeholder,.ag-theme-material-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-dark textarea[class^=ag-]::placeholder,.ag-theme-material-auto-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-auto-dark textarea[class^=ag-]::placeholder{color:var(--ag-disabled-foreground-color)}.ag-theme-material input[class^=ag-]:not([type]):disabled,.ag-theme-material input[class^=ag-][type=text]:disabled,.ag-theme-material input[class^=ag-][type=number]:disabled,.ag-theme-material input[class^=ag-][type=tel]:disabled,.ag-theme-material input[class^=ag-][type=date]:disabled,.ag-theme-material input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material textarea[class^=ag-]:disabled,.ag-theme-material-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-dark textarea[class^=ag-]:disabled,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-auto-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-auto-dark textarea[class^=ag-]:disabled{border-bottom:1px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):invalid,.ag-theme-material input[class^=ag-][type=text]:invalid,.ag-theme-material input[class^=ag-][type=number]:invalid,.ag-theme-material input[class^=ag-][type=tel]:invalid,.ag-theme-material input[class^=ag-][type=date]:invalid,.ag-theme-material input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material textarea[class^=ag-]:invalid,.ag-theme-material-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-dark textarea[class^=ag-]:invalid,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-auto-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-auto-dark textarea[class^=ag-]:invalid{border-width:0;border-bottom:1px solid;border-bottom-color:var(--ag-invalid-color);color:var(--ag-invalid-color)}.ag-theme-material .ag-standard-button,.ag-theme-material-dark .ag-standard-button,.ag-theme-material-auto-dark .ag-standard-button{appearance:none;background-color:transparent;border:0;color:var(--ag-material-primary-color);font-family:inherit;font-size:inherit;margin:0;padding:0;text-transform:uppercase}.ag-theme-material .ag-standard-button:disabled,.ag-theme-material-dark .ag-standard-button:disabled,.ag-theme-material-auto-dark .ag-standard-button:disabled{color:var(--ag-disabled-foreground-color);background-color:var(--ag-input-disabled-background-color);border-color:var(--ag-input-disabled-border-color)}.ag-theme-material.ag-dnd-ghost,.ag-theme-material-dark.ag-dnd-ghost,.ag-theme-material-auto-dark.ag-dnd-ghost{font-size:calc(var(--ag-font-size) - 1px);font-weight:600}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-header{height:calc(var(--ag-grid-size) * 4)}.ag-theme-material .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-dark .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-group-level-0-header{height:calc(var(--ag-grid-size) * 7)}.ag-theme-material .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-builder-button{margin-left:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-builder-button{margin-right:var(--ag-grid-size)}.ag-theme-material .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material .ag-layout-print .ag-center-cols-viewport,.ag-theme-material .ag-layout-print .ag-center-cols-container,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-print .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-container{min-height:150px}.ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-auto-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height{padding-top:60px}.ag-theme-material .ag-picker-field-wrapper:focus-within,.ag-theme-material-dark .ag-picker-field-wrapper:focus-within,.ag-theme-material-auto-dark .ag-picker-field-wrapper:focus-within{box-shadow:0 0 0 1px var(--ag-material-primary-color)}.ag-theme-material .ag-rich-select-list,.ag-theme-material-dark .ag-rich-select-list,.ag-theme-material-auto-dark .ag-rich-select-list{box-shadow:#0003 0 5px 5px -3px,#00000024 0 8px 10px 1px,#0000001f 0 3px 14px 2px}.ag-theme-material .ag-advanced-filter-builder-button-label,.ag-theme-material-dark .ag-advanced-filter-builder-button-label,.ag-theme-material-auto-dark .ag-advanced-filter-builder-button-label{text-transform:uppercase}.ag-theme-material .ag-filter-active .ag-icon-filter,.ag-theme-material-dark .ag-filter-active .ag-icon-filter,.ag-theme-material-auto-dark .ag-filter-active .ag-icon-filter{color:var(--ag-material-accent-color)}.ag-theme-material textarea[class^=ag-chart-title-edit],.ag-theme-material-dark textarea[class^=ag-chart-title-edit],.ag-theme-material-auto-dark textarea[class^=ag-chart-title-edit]{background-color:var(--ag-background-color)}:root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: rgba(20, 110, 246, .04);--primary-color-A200-parts: rgba(20, 110, 246, .08);--primary-color-A300-parts: rgba(20, 110, 246, .16);--primary-color-A400-parts: rgba(20, 110, 246, .24);--primary-color-A500-parts: rgba(20, 110, 246, .32);--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A500-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 20, 110, 246, .04;--primary-color-A200-parts-rgb: 20, 110, 246, .08;--primary-color-A300-parts-rgb: 20, 110, 246, .16;--primary-color-A400-parts-rgb: 20, 110, 246, .24;--primary-color-A500-parts-rgb: 20, 110, 246, .32;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: rgba(0, 150, 136, .04);--accent-color-A200-parts: rgba(0, 150, 136, .08);--accent-color-A300-parts: rgba(0, 150, 136, .16);--accent-color-A400-parts: rgba(0, 150, 136, .24);--accent-color-A500-parts: rgba(0, 150, 136, .32);--accent-color-contrast-50-parts: rgba(0, 0, 0, .87);--accent-color-contrast-100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-500-parts: rgba(255, 255, 255, 1);--accent-color-contrast-600-parts: rgba(255, 255, 255, 1);--accent-color-contrast-700-parts: rgba(255, 255, 255, 1);--accent-color-contrast-800-parts: rgba(255, 255, 255, 1);--accent-color-contrast-900-parts: rgba(255, 255, 255, 1);--accent-color-contrast-A100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A500-parts: rgba(0, 0, 0, .87);--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 0, 150, 136, .04;--accent-color-A200-parts-rgb: 0, 150, 136, .08;--accent-color-A300-parts-rgb: 0, 150, 136, .16;--accent-color-A400-parts-rgb: 0, 150, 136, .24;--accent-color-A500-parts-rgb: 0, 150, 136, .32;--warn-color-50-parts: #fceee3;--warn-color-100-parts: #f8d4b9;--warn-color-200-parts: #f4b78b;--warn-color-300-parts: #ef9a5d;--warn-color-400-parts: #eb843a;--warn-color-500-parts: #e86e17;--warn-color-600-parts: #e56614;--warn-color-700-parts: #e25b11;--warn-color-800-parts: #de510d;--warn-color-900-parts: #d83f07;--warn-color-A100-parts: rgba(232, 110, 23, .04);--warn-color-A200-parts: rgba(232, 110, 23, .08);--warn-color-A300-parts: rgba(232, 110, 23, .16);--warn-color-A400-parts: rgba(232, 110, 23, .24);--warn-color-A500-parts: rgba(232, 110, 23, .32);--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(255, 255, 255, 1);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A500-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 252, 238, 227;--warn-color-100-parts-rgb: 248, 212, 185;--warn-color-200-parts-rgb: 244, 183, 139;--warn-color-300-parts-rgb: 239, 154, 93;--warn-color-400-parts-rgb: 235, 132, 58;--warn-color-500-parts-rgb: 232, 110, 23;--warn-color-600-parts-rgb: 229, 102, 20;--warn-color-700-parts-rgb: 226, 91, 17;--warn-color-800-parts-rgb: 222, 81, 13;--warn-color-900-parts-rgb: 216, 63, 7;--warn-color-A100-parts-rgb: 232, 110, 23, .04;--warn-color-A200-parts-rgb: 232, 110, 23, .08;--warn-color-A300-parts-rgb: 232, 110, 23, .16;--warn-color-A400-parts-rgb: 232, 110, 23, .24;--warn-color-A500-parts-rgb: 232, 110, 23, .32;--info-color-50-parts: #edf4ff;--info-color-100-parts: #b9d4fc;--info-color-200-parts: #8ab7fb;--info-color-300-parts: #5b9af9;--info-color-400-parts: #3784f7;--info-color-500-parts: #146ef6;--info-color-600-parts: #1266f5;--info-color-700-parts: #0e5bf3;--info-color-800-parts: #0b51f2;--info-color-900-parts: #063fef;--info-color-A100-parts: rgba(20, 110, 246, .04);--info-color-A200-parts: rgba(20, 110, 246, .08);--info-color-A300-parts: rgba(20, 110, 246, .16);--info-color-A400-parts: rgba(20, 110, 246, .24);--info-color-A500-parts: rgba(20, 110, 246, .32);--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A300-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A500-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 237, 244, 255;--info-color-100-parts-rgb: 185, 212, 252;--info-color-200-parts-rgb: 138, 183, 251;--info-color-300-parts-rgb: 91, 154, 249;--info-color-400-parts-rgb: 55, 132, 247;--info-color-500-parts-rgb: 20, 110, 246;--info-color-600-parts-rgb: 18, 102, 245;--info-color-700-parts-rgb: 14, 91, 243;--info-color-800-parts-rgb: 11, 81, 242;--info-color-900-parts-rgb: 6, 63, 239;--info-color-A100-parts-rgb: 20, 110, 246, .04;--info-color-A200-parts-rgb: 20, 110, 246, .08;--info-color-A300-parts-rgb: 20, 110, 246, .16;--info-color-A400-parts-rgb: 20, 110, 246, .24;--info-color-A500-parts-rgb: 20, 110, 246, .32;--success-color-50-parts: #e7f0e6;--success-color-100-parts: #c4dac1;--success-color-200-parts: #9cc198;--success-color-300-parts: #74a86e;--success-color-400-parts: #57954f;--success-color-500-parts: #398230;--success-color-600-parts: #337a2b;--success-color-700-parts: #2c6f24;--success-color-800-parts: #24651e;--success-color-900-parts: #175213;--success-color-A100-parts: rgba(57, 130, 48, .04);--success-color-A200-parts: rgba(57, 130, 48, .08);--success-color-A300-parts: rgba(57, 130, 48, .16);--success-color-A400-parts: rgba(57, 130, 48, .24);--success-color-A500-parts: rgba(57, 130, 48, .32);--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(255, 255, 255, 1);--success-color-contrast-600-parts: rgba(255, 255, 255, 1);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A300-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A500-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 231, 240, 230;--success-color-100-parts-rgb: 196, 218, 193;--success-color-200-parts-rgb: 156, 193, 152;--success-color-300-parts-rgb: 116, 168, 110;--success-color-400-parts-rgb: 87, 149, 79;--success-color-500-parts-rgb: 57, 130, 48;--success-color-600-parts-rgb: 51, 122, 43;--success-color-700-parts-rgb: 44, 111, 36;--success-color-800-parts-rgb: 36, 101, 30;--success-color-900-parts-rgb: 23, 82, 19;--success-color-A100-parts-rgb: 57, 130, 48, .04;--success-color-A200-parts-rgb: 57, 130, 48, .08;--success-color-A300-parts-rgb: 57, 130, 48, .16;--success-color-A400-parts-rgb: 57, 130, 48, .24;--success-color-A500-parts-rgb: 57, 130, 48, .32;--error-color-50-parts: #fae5e4;--error-color-100-parts: #f3bdba;--error-color-200-parts: #eb928d;--error-color-300-parts: #e3665f;--error-color-400-parts: #dd453c;--error-color-500-parts: #d7241a;--error-color-600-parts: #d32017;--error-color-700-parts: #cd1b13;--error-color-800-parts: #c7160f;--error-color-900-parts: #be0d08;--error-color-A100-parts: rgba(215, 36, 26, .04);--error-color-A200-parts: rgba(215, 36, 26, .08);--error-color-A300-parts: rgba(215, 36, 26, .16);--error-color-A400-parts: rgba(215, 36, 26, .24);--error-color-A500-parts: rgba(215, 36, 26, .32);--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A300-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A500-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 250, 229, 228;--error-color-100-parts-rgb: 243, 189, 186;--error-color-200-parts-rgb: 235, 146, 141;--error-color-300-parts-rgb: 227, 102, 95;--error-color-400-parts-rgb: 221, 69, 60;--error-color-500-parts-rgb: 215, 36, 26;--error-color-600-parts-rgb: 211, 32, 23;--error-color-700-parts-rgb: 205, 27, 19;--error-color-800-parts-rgb: 199, 22, 15;--error-color-900-parts-rgb: 190, 13, 8;--error-color-A100-parts-rgb: 215, 36, 26, .04;--error-color-A200-parts-rgb: 215, 36, 26, .08;--error-color-A300-parts-rgb: 215, 36, 26, .16;--error-color-A400-parts-rgb: 215, 36, 26, .24;--error-color-A500-parts-rgb: 215, 36, 26, .32;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: rgba(81, 81, 81, .04);--neutral-color-A200-parts: rgba(81, 81, 81, .08);--neutral-color-A300-parts: rgba(81, 81, 81, .16);--neutral-color-A400-parts: rgba(81, 81, 81, .24);--neutral-color-A500-parts: rgba(81, 81, 81, .32);--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A500-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 81, 81, 81, .04;--neutral-color-A200-parts-rgb: 81, 81, 81, .08;--neutral-color-A300-parts-rgb: 81, 81, 81, .16;--neutral-color-A400-parts-rgb: 81, 81, 81, .24;--neutral-color-A500-parts-rgb: 81, 81, 81, .32}#btn-enable-filter.filter-selected{background-color:#515151!important;color:#fff!important}.filter-panel{border-radius:8px!important;background-color:#fafafa;border:none;margin:0 0 24px;padding:20px}.filter-panel p{font-family:Poppins!important;font-style:normal!important;font-weight:500!important;font-size:16px!important;line-height:24px!important;margin-top:0!important}.filter-panel .filter-panel-select-container{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.ag-theme-material{width:100%;justify-content:center!important;--ag-font-size: 16px;--ag-font-family: \"Poppins\";--ag-header-background-color: #FAFAFA;--ag-background-color: #FFFFFF;--ag-borders: solid 1px #E9E9E9;--ag-wrapper-border-radius: 8px;--ag-cell-horizontal-padding: 16px;--ag-border-color: #E9E9E9;--ag-material-primary-color: var(--primary-color-500-parts) !important;--ag-material-accent-color: var(--primary-color-300-parts) !important;--ag-icon-size: 18px;--ag-header-cell-hover-background-color: #FFFFFF;--ag-row-hover-color: #FFFFFF;--ag-column-hover-color: #FFFFFF}@media only screen and (max-width: 752px){.ag-theme-material{--ag-cell-horizontal-padding: 8px;--ag-font-size: 12px}}.ag-theme-material ::ng-deep .ag-root-wrapper{border-left:solid 1px #E9E9E9!important;border-top:solid 1px #E9E9E9!important;border-bottom:solid 1px #E9E9E9!important}.ag-theme-material ::ng-deep .ag-cell-focus{border-color:var(--primary-color-300-parts)!important;border-width:3px!important}.ag-theme-material ::ng-deep .ag-header ::ng-deep .ag-pinned-left-header,.ag-theme-material ::ng-deep .ag-body-viewport ::ng-deep .ag-pinned-left-cols-container{position:relative;z-index:1;-webkit-box-shadow:2px 0px 2px 0px rgba(42,42,42,.1);box-shadow:2px 0 2px #2a2a2a1a}.ag-theme-material ::ng-deep .ag-checkbox{padding-right:16px!important;padding-left:16px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll,.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport{height:8px!important;max-height:8px!important;min-height:8px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible),.ag-theme-material ::ng-deep .ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:none}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport,.ag-theme-material ::ng-deep .ag-body-vertical-scroll-viewport{overflow:hidden}.ag-theme-material ::ng-deep .ag-horizontal-left-spacer{overflow-x:hidden}.ag-theme-material ::ng-deep .ag-header-cell{font-size:16px!important;font-weight:400;color:#0009!important}@media only screen and (max-width: 752px){.ag-theme-material ::ng-deep .ag-header-cell{font-size:12px!important}}.ag-theme-material ::ng-deep .ag-cell{font-weight:400!important;display:flex!important;flex-direction:column!important}.ag-theme-material ::ng-deep .ag-header-icon.ag-header-label-icon.ag-filter-icon{display:none!important}.ag-theme-material ::ng-deep .ag-center-cols-viewport,.ag-theme-material ::ng-deep .ag-center-cols-viewport .ag-center-cols-container{min-height:53px!important}.ag-theme-material ::ng-deep .ag-overlay-wrapper.ag-overlay-no-rows-wrapper{font-size:14px;font-weight:500;color:#0009}.ag-theme-material.no-rows ::ng-deep .ag-body-horizontal-scroll{display:none!important}.ag-theme-material.no-rows ::ng-deep .ag-root-wrapper{border:none!important}.ag-theme-material.no-rows ::ng-deep .ag-header{border-top:solid 1px #E9E9E9;border-left:solid 1px #E9E9E9;border-right:solid 1px #E9E9E9;border-top-left-radius:8px;border-top-right-radius:8px}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport{overflow-y:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport{overflow-x:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar{height:8px!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar{width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;height:8px!important;border:1px solid #FFFFFF}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.dense-4{--mat-form-field-container-height: 40px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 8px;--mat-form-field-filled-with-label-container-padding-top: 8px;--mat-form-field-filled-with-label-container-padding-bottom: 8px}.search-icon{font-weight:700;font-size:20px;color:#000000de;opacity:.87}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-form-field-subscript-wrapper{display:none}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper{border-radius:10px}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-right:8px!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#fafafa!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:#000000de;caret-color:#000000de;opacity:.87;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:before,:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:after{border:none!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above){display:block!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above) .search-label{color:#000000de;opacity:.6;font-family:Poppins;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper{outline:3px solid var(--primary-color-300-parts);outline-offset:2px}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper i.search-icon{color:var(--primary-color-500-parts)}::ng-deep .custom-paginator{width:100%;justify-content:flex-start;align-items:flex-start;display:inline-flex;height:40px!important;margin-top:24px}::ng-deep .custom-paginator .first-section{flex:1 1 0;align-self:stretch;justify-content:flex-start;align-items:center!important;gap:16px!important;display:flex}::ng-deep .custom-paginator .first-section .button-part-1{height:40px!important;align-self:center;padding-left:16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:center;display:inline-flex;border:none;gap:16px;border:2px solid transparent}::ng-deep .custom-paginator .first-section .button-part-1:hover,::ng-deep .custom-paginator .first-section .button-part-1:focus,::ng-deep .custom-paginator .first-section .button-part-1:active{border-radius:10px;justify-content:center;display:inline-flex;border-color:var(--primary-color-500-parts);height:40px!important;align-self:center;padding-left:16px;background:#fafafa;overflow:unset!important;align-items:center;gap:16px}::ng-deep .custom-paginator .first-section .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{align-items:center!important;width:100px!important}::ng-deep .custom-paginator .second-section{justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .page-select{height:100%;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:hidden;justify-content:flex-start;align-items:center;gap:16px;display:inline-flex}::ng-deep .custom-paginator .select-icon{width:100%;position:relative;height:20px!important;font-size:20px!important}::ng-deep .custom-paginator .pageChangeText{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .mat-select{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .go-to-page{width:fit-content;align-self:stretch;justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .go-to-page .outer-box{height:40px;flex-direction:column;justify-content:flex-start;align-items:flex-start;display:inline-flex}::ng-deep .custom-paginator .go-to-page .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .go-to-page .button-part{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border:2px solid transparent}::ng-deep .custom-paginator .go-to-page .button-part:hover,::ng-deep .custom-paginator .go-to-page .button-part:focus,::ng-deep .custom-paginator .go-to-page .button-part:active{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:10px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border-color:var(--primary-color-500-parts)}::ng-deep .custom-paginator .go-to-page .current-page{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .go-to-page .page{position:relative}::ng-deep .custom-paginator .go-to-page .of-page{position:relative;color:#0009}::ng-deep .custom-paginator .mat-mdc-select-value{font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .mat-form-field-appearance-outline .mat-mdc-select-arrow-wrapper{transform:none!important}::ng-deep .custom-paginator .mat-mdc-select-arrow{display:none!important}::ng-deep .custom-paginator .mat-form-field-underline{display:none!important}::ng-deep .custom-paginator .mdc-line-ripple{display:none!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper{background-color:#fff!important;height:40px!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-focus-overlay{display:none!important}::ng-deep .page-option mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar{-webkit-appearance:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:vertical{width:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:horizontal{height:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-thumb{border-radius:8px!important;border:2px solid #FFFFFF!important;background-color:#cfcfcf80!important}.table-filter-select ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.loading-container{display:flex;align-items:center;justify-content:center;width:100%}\n"], dependencies: [{ kind: "directive", type: i1$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i6.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i9.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: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"softheon-armature-ag-grid-components.mjs","sources":["../../../../projects/armature/ag-grid-components/src/column-options-modal/column-options.component.ts","../../../../projects/armature/ag-grid-components/src/column-options-modal/column-options.component.html","../../../../projects/armature/ag-grid-components/src/sof-table/sof-table.component.ts","../../../../projects/armature/ag-grid-components/src/sof-table/sof-table.component.html","../../../../projects/armature/ag-grid-components/src/table-cell/table-cell.component.ts","../../../../projects/armature/ag-grid-components/src/table-cell/table-cell.component.html","../../../../projects/armature/ag-grid-components/src/ag-grid-components.module.ts","../../../../projects/armature/ag-grid-components/public-api.ts","../../../../projects/armature/ag-grid-components/softheon-armature-ag-grid-components.ts"],"sourcesContent":["import { Component, inject } from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { ApplyColumnStateParams, ColumnState } from \"ag-grid-community\";\r\n\r\n/** Table Column options dialog */\r\n@Component({\r\n selector: 'sof-column-options',\r\n templateUrl: './column-options.component.html',\r\n styleUrl: './column-options.component.scss'\r\n})\r\nexport class SofColumnOptionsComponent {\r\n\r\n /** dialog reference */\r\n private dialogRef: MatDialogRef<SofColumnOptionsComponent> = inject(MatDialogRef<SofColumnOptionsComponent>);\r\n\r\n /** dialog data */\r\n public data: ColumnOptionsData = inject(MAT_DIALOG_DATA);\r\n\r\n /** emit the updated column state */\r\n public applyUpdatedColumnState(): void {\r\n const columnState: Array<ColumnState> = this.data.columnData.map((column) => {\r\n return {\r\n colId: column.id,\r\n hide: !column.isChecked\r\n }\r\n });\r\n const updatedColumnState: ApplyColumnStateParams = {\r\n state: [...columnState],\r\n applyOrder: true\r\n };\r\n this.dialogRef.close(updatedColumnState);\r\n }\r\n\r\n /** reset the column data to its first saved value */\r\n public resetColumnData(): void {\r\n this.data.columnData = structuredClone(this.data.initialColumnData);\r\n }\r\n}\r\n\r\n/** \r\n * Column options modal data\r\n * @description data passed from the 'SofTableComponent'\r\n * @property `tableName: string` name of the table using the column options\r\n * @property `columnData: Array<ColumnData>` column data returned from the agGrid api\r\n * @property `initialColumnData: Array<ColumnData>` column data from saved user preference or initial `columnData` \r\n * @see {@link ColumnData}\r\n */\r\nexport interface ColumnOptionsData {\r\n /** name of the table using the column options */\r\n tableName?: string;\r\n /** column data returned from the agGrid api */\r\n columnData?: Array<ColumnData>;\r\n /** column data from saved user preference or initial `columnData` */\r\n initialColumnData?: Array<ColumnData>;\r\n /** \r\n * To display the text on the column options modal, which states -\r\n * `\"Options will be saved for the next time you log in.\"`\r\n */\r\n showSaveColumnOptionsText?: boolean;\r\n}\r\n\r\n/** \r\n * Column data \r\n * @description column data derived from the agGrid api, adds id property to type `HandleInput`\r\n * @property `id: string` columns unique id\r\n * @property `text: string` columns header text\r\n * @property `isChecked: boolean` column not hidden\r\n*/\r\nexport interface ColumnData {\r\n /** columns unique id */\r\n id?: string;\r\n /** columns header text */\r\n text?: string;\r\n /** column not hidden */\r\n isChecked?: boolean;\r\n}\r\n","<div class=\"column-options-header\">\r\n <i class=\"ph-bold ph-square-split-horizontal\" aria-hidden=\"true\"></i>\r\n <h2 id=\"column-options-heading\">{{'armature.sof-table.column-options' | translate}}</h2>\r\n <button \r\n mat-dialog-close m-l-auto \r\n disableRipple=\"true\" id=\"column-options-close\" aria-label=\"close\">\r\n <i class=\"ph-bold ph-x close\" aria-hidden=\"true\"></i>\r\n </button>\r\n</div>\r\n<div class=\"column-options-container\">\r\n <div class=\"column-options-description\">\r\n <p>\r\n {{'armature.sof-table.column-options-description' | translate}} \r\n {{ data.showSaveColumnOptionsText ? ('armature.sof-table.column-options-description-saving' | translate) : ''}}\r\n </p>\r\n <p class=\"table-label\">{{data.tableName | translate}} {{'armature.sof-table.columns' | translate}}</p>\r\n </div>\r\n <div class=\"column-options-selections\">\r\n <sof-handle [handleList]=\"data.columnData\"/>\r\n </div>\r\n <div class=\"column-options-bottom\">\r\n <button\r\n (click)=\"resetColumnData()\"\r\n mat-flat-button color=\"tertiary\" \r\n size=\"small\" class=\"sof-button-v2\" m-r-auto\r\n id=\"column-options-reset\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n <button \r\n mat-flat-button mat-dialog-close \r\n color=\"secondary\" size=\"small\" class=\"sof-button-v2\"\r\n id=\"column-options-cancel\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n <button \r\n (click)=\"applyUpdatedColumnState()\"\r\n mat-flat-button color=\"primary\" \r\n size=\"small\" class=\"sof-button-v2\"\r\n id=\"column-options-update\">\r\n {{'armature.sof-table.update' | translate}}\r\n </button>\r\n </div>\r\n</div>\r\n","import { \r\n Component, \r\n ElementRef, \r\n EventEmitter, \r\n inject, \r\n Input, \r\n OnChanges, \r\n OnInit, \r\n Output, \r\n signal, \r\n SimpleChanges, \r\n ViewChild, \r\n WritableSignal \r\n} from '@angular/core';\r\n\r\nimport { take, tap } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { \r\n ColumnData, \r\n ColumnOptionsData, \r\n SofColumnOptionsComponent \r\n} from '../column-options-modal/column-options.component';\r\n\r\nimport {\r\n ApplyColumnStateParams,\r\n ColDef,\r\n ColumnState,\r\n FilterModel,\r\n GridApi,\r\n GridReadyEvent,\r\n IRowNode,\r\n PaginationChangedEvent,\r\n SuppressKeyboardEventParams,\r\n TextFilterModel\r\n} from \"ag-grid-community\";\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n/** The Softheon Armature Table component */\r\n@Component({\r\n selector: 'sof-table',\r\n templateUrl: './sof-table.component.html',\r\n styleUrl: './sof-table.component.scss'\r\n})\r\nexport class SofTableComponent implements OnInit, OnChanges {\r\n\r\n /** The language text or a key that will be shown in this component */\r\n @Input() public rowData: Array<any> = [];\r\n\r\n /** Column Definitions: Defines & controls grid columns. */\r\n @Input() public colDefs: Array<ColDef> = [];\r\n\r\n /** Size modes for table */\r\n @Input() private sizeMode: 'Compact' | 'Roomy' | 'Default';\r\n\r\n /** Pages sizes */\r\n @Input() public paginationPageSizeSelector: Array<number> = [10, 20, 50, 100];\r\n\r\n /** Enable search */\r\n @Input() public enableSearch: boolean = true;\r\n\r\n /** Enable custom text filter dropdowns */\r\n @Input() public enableFilter: boolean = true;\r\n\r\n /** Enable column options modal selection */\r\n @Input() public enableColumnOptions: boolean = true;\r\n\r\n /** Enable export button to output filtered row data */\r\n @Input() public enableExport: boolean = false;\r\n\r\n /** \r\n * To display the text on the column options modal, which states -\r\n * `\"Options will be saved for the next time you log in.\"`\r\n * @default false\r\n * @description set to true if set-up for saving preferences to User data.\r\n * @note You can still save preferences to _local_ or _session_ storage\r\n * using the `savedColumnState` input, and `updatedColumnState` output event.\r\n * @see The Demo site is saving to local storage.\r\n */\r\n @Input() public showSaveColumnOptionsText: boolean = false;\r\n\r\n /** \r\n * Name/label of the table \r\n * @note should be a translation key\r\n */\r\n @Input() public tableName: string;\r\n\r\n /** Users saved column options state */\r\n @Input() private savedColumnState: ApplyColumnStateParams;\r\n\r\n /** Output updated column options event to save to user or browser storage */\r\n @Output() updatedColumnState: EventEmitter<ApplyColumnStateParams> = new EventEmitter();\r\n\r\n /** Output updated column options event to save to user or browser storage */\r\n @Output() filteredRowDataForExport: EventEmitter<any> = new EventEmitter();\r\n\r\n /** the search input */\r\n @ViewChild('gridSearchTextInput') gridSearchTextInput: ElementRef<HTMLInputElement>;\r\n\r\n /** The hidden element that announces when the table content changes from filter */\r\n @ViewChild('ariaResultsCount') public ariaResultsCount: ElementRef<HTMLElement>;\r\n\r\n /** \r\n * Keep track of the current column state\r\n * @note If columns are re-defined (onChanges), this state will be applied\r\n */\r\n private currentColumnState: ApplyColumnStateParams;\r\n\r\n /** Column names that should be filterable */\r\n public colFilters: Array<SofTableFilter> = [];\r\n\r\n /** Row Height for table */\r\n public rowHeight: number = 48;\r\n\r\n /** Current Page Index */\r\n public currentPage: number = 0;\r\n\r\n /** Grid API */\r\n private gridApi!: GridApi;\r\n\r\n /** Is the table ready to be displayed */\r\n public isGridDataRendered: WritableSignal<boolean> = signal(false);\r\n\r\n /** Default Page Size */\r\n public paginationPageSize: number = 20; \r\n\r\n /** Tool tip show delay */\r\n public tooltipShowDelay: number = 500;\r\n\r\n /** \r\n * Default Column Definition \r\n * @note (suppressKeyboardEvent) Table cells can be navigated with the arrow keys, \r\n * if the cell contains a button you can Tab into the button, enter | space to interact.\r\n */\r\n public defaultColDef: ColDef = {\r\n resizable: false, // disable resize \r\n suppressHeaderMenuButton: true, // disable default filter menu \r\n suppressMovable: true, // disable default drag & drop for columns \r\n cellStyle: { justifyContent: \"center\" },\r\n suppressKeyboardEvent: (params: SuppressKeyboardEventParams) => {\r\n return params.event.key === 'Tab' ? true : false;\r\n }\r\n };\r\n\r\n /** Length of data */\r\n public totalLength: number = 0;\r\n\r\n /**Total number of pages */\r\n public totalNumberOfPages: number;\r\n\r\n /** Page Change text */\r\n public pageChangeText: string;\r\n\r\n /** Page selector array */\r\n public pageSelector: Array<number> = [];\r\n\r\n /** Filter Panel open state */\r\n public filterOpenState: boolean;\r\n\r\n /** The list of filters and the selected values */\r\n public filterSelections: Array<Array<string>> = [];\r\n\r\n /** mat-dialog */\r\n private dialog: MatDialog = inject(MatDialog);\r\n\r\n /** Translation service */\r\n private translateService: TranslateService = inject(TranslateService);\r\n\r\n /** On component init */\r\n public ngOnInit(): void {\r\n this.resizeGrid();\r\n }\r\n\r\n /**\r\n * Angular On Changes\r\n * @param changes The input changes\r\n */\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.rowData && !changes.rowData.firstChange && !!this.gridApi) {\r\n this.totalLength = this.rowData.length;\r\n this.populateFilters();\r\n this.handlePageChangeText();\r\n this.isGridDataRendered.set(true);\r\n }\r\n if (changes.colDefs && !changes.colDefs.firstChange && !!this.gridApi) {\r\n setTimeout(() => {\r\n this.gridApi.applyColumnState(this.currentColumnState);\r\n this.populateFilters();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Called when the grid has ingested the input data\r\n * @param params Grid Ready Event,\r\n * The grid has initialized and is ready for most api calls, but may not be fully rendered yet.\r\n * @note you can not access this.gridApi before this function is run, \r\n * any attempts to access this.gridApi in this components ngOnInit or the first ngOnChanges cycle\r\n * will result in a type error; being this.gridApi is undefined at that time.\r\n */\r\n public onGridReady(params: GridReadyEvent) {\r\n this.gridApi = params.api;\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n window.onresize = () => {\r\n const mobileWidthThreshold = 752;\r\n if (window.innerWidth <= mobileWidthThreshold) {\r\n this.rowHeight = 40;\r\n this.paginationPageSize = 10;\r\n }\r\n else {\r\n this.resizeGrid();\r\n }\r\n this.handlePageChangeText();\r\n }\r\n }\r\n\r\n /** Fired the first time data is rendered into the grid. */\r\n public onFirstDataRendered() {\r\n if (!this.savedColumnState?.state.length) {\r\n const columnState: Array<ColumnState> = structuredClone(this.gridApi.getColumnState());\r\n this.savedColumnState = {\r\n state: columnState,\r\n applyOrder: true\r\n };\r\n }\r\n this.gridApi.applyColumnState(this.savedColumnState);\r\n this.updatedColumnState.emit(this.savedColumnState);\r\n this.currentColumnState = this.savedColumnState;\r\n this.populateFilters();\r\n this.handlePageChangeText();\r\n this.isGridDataRendered.set(true);\r\n }\r\n\r\n /** Resize grid from size mode */\r\n private resizeGrid(): void {\r\n if (this.sizeMode === 'Compact') {\r\n this.rowHeight = 40;\r\n }\r\n else if (this.sizeMode === 'Roomy') {\r\n this.rowHeight = 56;\r\n }\r\n else {\r\n this.rowHeight = 48;\r\n }\r\n }\r\n\r\n /**\r\n * On page selection change\r\n * @param value The selected page number\r\n */\r\n public onPageNumberChange(value: number): void {\r\n // The page values are 1 off to make a 1-based array, but the actual pages are a 0-based array.\r\n this.gridApi.paginationGoToPage(value - 1);\r\n }\r\n\r\n /** On next page event */\r\n public nextPage() {\r\n this.gridApi.paginationGoToNextPage();\r\n this.handlePageChangeText()\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n }\r\n\r\n /** On Previous Page Event */\r\n public previousPage() {\r\n this.gridApi.paginationGoToPreviousPage();\r\n this.handlePageChangeText()\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n }\r\n\r\n /**\r\n * On Change Page Size Event\r\n * @param event The pagination event\r\n */\r\n public changePageSize(event: PaginationChangedEvent) {\r\n // Only need to do this work if the page size has changed.\r\n if (event.newPageSize) {\r\n // Update the total number of filtered rows.\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n // Handle text changes\r\n this.handlePageChangeText();\r\n }\r\n }\r\n\r\n /** \r\n * Called when the grid filter is changed \r\n * @todo update the filter dropdown options based on the filtered data set, instead of the complete data set.\r\n */\r\n public onFilterChanged(): void {\r\n const previousTotalLength: number = Number(this.totalLength);\r\n // Update the total number of filtered rows.\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n if (this.totalLength !== previousTotalLength) {\r\n this.ariaResultsCount.nativeElement.innerHTML = \"\";\r\n this.ariaResultsCount.nativeElement.innerHTML = this.totalLength === 0\r\n ? this.translateService.instant('armature.sof-table.screen-reader.filtered-results.no-results')\r\n : this.translateService.instant(\r\n 'armature.sof-table.screen-reader.filtered-results.has-results', {'resultsCount': this.totalLength}\r\n );\r\n setTimeout(() => {\r\n this.ariaResultsCount.nativeElement.innerHTML = \"\";\r\n }, 100);\r\n }\r\n this.handlePageChangeText();\r\n }\r\n\r\n /** Generated text for showing pages in format: 1-11 of 11 */\r\n private handlePageChangeText(): void {\r\n // Handle empty table\r\n if (!this.totalLength || this.paginationPageSize === 0) {\r\n // Reset the pagination UI\r\n this.totalNumberOfPages = 1;\r\n this.pageSelector = [1];\r\n this.pageChangeText = `0`;\r\n this.gridApi.showNoRowsOverlay();\r\n return;\r\n } else {\r\n this.gridApi.hideOverlay();\r\n }\r\n // Update the total number of pages\r\n this.totalNumberOfPages = this.gridApi.paginationGetTotalPages() || Math.ceil(this.totalLength / this.paginationPageSize) || 1;\r\n // Reset the page selector\r\n this.currentPage = 1;\r\n const pageSelector = [];\r\n for (let i = 1; i <= this.totalNumberOfPages; i++) {\r\n pageSelector.push(i);\r\n }\r\n this.pageSelector = pageSelector;\r\n const length = Math.max(this.totalLength, 0);\r\n const pageSize = this.paginationPageSize;\r\n const startIndex = this.gridApi.paginationGetCurrentPage() * pageSize;\r\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\r\n this.pageChangeText = `${startIndex + 1} - ${endIndex}`;\r\n }\r\n\r\n /**\r\n * Apply the search filter on data when search text changed\r\n */\r\n public onSearchTextChanged(): void {\r\n this.gridApi.setGridOption(\"quickFilterText\", this.gridSearchTextInput.nativeElement.value);\r\n }\r\n\r\n /** Toggle the filter panel display */\r\n public toggleFilterPanel(): void {\r\n this.filterOpenState = !this.filterOpenState;\r\n }\r\n\r\n /** Apply the selected filters */\r\n public applyFilters(): void {\r\n let tableFilterModel: FilterModel = {};\r\n for (let i = 0; i < this.colFilters.length; i++) {\r\n const colFilter = this.colFilters[i];\r\n const selectedElements = this.filterSelections[i];\r\n if (!selectedElements.length) {\r\n // Reset out the column filters\r\n this.gridApi.setColumnFilterModel(colFilter.header, null);\r\n tableFilterModel[colFilter.header] = null;\r\n }\r\n else if (selectedElements.length == 1) {\r\n // Set the single filter for the column\r\n let filterModel: TextFilterModel = { filterType: 'text', type: 'equals', filter: selectedElements[0] };\r\n // Apply the filter model to the column\r\n tableFilterModel[colFilter.header] = filterModel;\r\n }\r\n else {\r\n // Set multiple OR filters for the column\r\n let filterModels: CombinedSimpleModel<TextFilterModel> = { filterType: 'text', operator: 'OR', conditions: [] };\r\n // Set the selected elements in the model\r\n for (const selectedElement of selectedElements) {\r\n filterModels.conditions.push({ filterType: 'text', type: 'equals', filter: selectedElement });\r\n }\r\n // Apply the filter model collection to the column\r\n tableFilterModel[colFilter.header] = filterModels;\r\n }\r\n }\r\n // Once everything is set, update the filters\r\n this.gridApi.setFilterModel(tableFilterModel);\r\n this.gridApi.onFilterChanged();\r\n }\r\n\r\n /** Clear all filters */\r\n public clearFilters(): void {\r\n // Clear all selections\r\n for (let i = 0; i < this.filterSelections.length; i++) {\r\n this.filterSelections[i] = [];\r\n }\r\n // Set the full grid filter model to null\r\n this.gridApi.setFilterModel(null);\r\n // Update the display\r\n this.gridApi.onFilterChanged();\r\n }\r\n\r\n /**\r\n * Returns true if no filters are selected\r\n * @returns True if a filter is selected, false otherwise.\r\n */\r\n public hasEmptyFilters(): boolean {\r\n if (!this.filterSelections || !this.filterSelections.length) {\r\n return true;\r\n }\r\n for (const filterSelect of this.filterSelections) {\r\n // If at least one filter has been selected, return false\r\n if (filterSelect.length) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Cancel the changes to the filter and closes the filter panel */\r\n public cancelFilterChanges(): void {\r\n for (let i = 0; i < this.colFilters.length; i++) {\r\n // Get the stored filters for the given model\r\n const colFilter = this.colFilters[i];\r\n const model = this.gridApi.getColumnFilterModel(colFilter.header);\r\n let filterSelectionData = [];\r\n if (model && model[\"conditions\"]) {\r\n // The model is a combined model with multiple selections\r\n const filterModel = model as CombinedSimpleModel<TextFilterModel>;\r\n for (const element of filterModel.conditions) {\r\n filterSelectionData.push(element.filter);\r\n }\r\n }\r\n else if (model) {\r\n // Assume the model is a single Text Filter Model\r\n let filterSelection: TextFilterModel = model;\r\n filterSelectionData.push(filterSelection.filter);\r\n }\r\n // Set the filter selections\r\n this.filterSelections[i] = filterSelectionData;\r\n }\r\n // Close the filter panel\r\n this.toggleFilterPanel();\r\n }\r\n\r\n /** Populates the filter dropdowns */\r\n private populateFilters(): void {\r\n // Reset the filter dropdowns\r\n this.filterSelections = [];\r\n this.colFilters = [];\r\n // Get the column definitions that have a filter\r\n const filteredCols: Array<ColDef> = this.gridApi.getColumnDefs().filter((def) => def['filter']);\r\n // Create a map to store unique values for each field\r\n const filterValuesMap = new Map<string, Set<any>>();\r\n // Initialize sets for each field (column) \r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n filterValuesMap.set(field, new Set<any>());\r\n }\r\n // Use forEachNode to iterate over the rows\r\n this.gridApi.forEachNode((node: IRowNode) => {\r\n if (node.data) {\r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n const value: any = this.gridApi.getCellValue({rowNode: node, colKey: field});\r\n if (value) {\r\n filterValuesMap.get(field)?.add(value);\r\n }\r\n }\r\n }\r\n });\r\n // Now that we have the unique values for each field, populate filter options\r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n const label: string = col[\"headerName\"];\r\n const uniqueValues: Array<any> = Array.from(filterValuesMap.get(field) || []).sort();\r\n if (uniqueValues.length > 1) {\r\n // Ensure there's space for filter selections\r\n this.filterSelections.push([]); \r\n this.colFilters.push({ header: field, label: label, options: uniqueValues });\r\n }\r\n }\r\n }\r\n\r\n /** Open the column options modal */\r\n public openColumnOptions(): void {\r\n const columnState: Array<ColumnState> = this.gridApi.getColumnState();\r\n const columnData: Array<ColumnData> = this.columnStateToData(columnState);\r\n const initialColumnData: Array<ColumnData> = this.columnStateToData(this.savedColumnState.state);\r\n const columnOptionsData: ColumnOptionsData = {\r\n tableName: this.tableName,\r\n columnData,\r\n initialColumnData,\r\n showSaveColumnOptionsText: this.showSaveColumnOptionsText\r\n };\r\n const dialogRef = this.dialog.open(SofColumnOptionsComponent, {\r\n width: '500px',\r\n position: { bottom: '40px', right: '40px' },\r\n ariaLabelledBy: 'column-options-heading',\r\n data: columnOptionsData\r\n });\r\n dialogRef.afterClosed().pipe(\r\n take(1),\r\n tap((updatedColumnState: ApplyColumnStateParams) => {\r\n if (updatedColumnState && updatedColumnState.state.length) {\r\n this.gridApi.applyColumnState(updatedColumnState);\r\n this.updatedColumnState.emit(updatedColumnState);\r\n this.currentColumnState = updatedColumnState;\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n /**\r\n * Maps `Array<ColumnState>` to `Array<ColumnData>` \r\n * @note filters out any columns marked as 'pinned' by the column definitions.\r\n * @note filters any columns without a 'headerName'.\r\n * @param columnState the column state to modify\r\n * @returns an array of column data formatted to be ingested by the `SofColumnOptionsComponent`\r\n */\r\n private columnStateToData(columnState: Array<ColumnState>): Array<ColumnData> {\r\n return columnState\r\n .filter((column) => {\r\n const headerName: string = this.gridApi.getColumnDef(column.colId)?.headerName || \"\";\r\n if (headerName && headerName.length && !column.pinned) {\r\n return column;\r\n }\r\n })\r\n .map((column) => {\r\n const headerName: string = this.gridApi.getColumnDef(column.colId).headerName;\r\n return {\r\n id: column.colId,\r\n isChecked: !column.hide,\r\n text: headerName\r\n };\r\n }\r\n );\r\n }\r\n\r\n /** Emit the current filtered row data */\r\n public exportFilteredRowData(): void {\r\n const filteredRows = [];\r\n this.gridApi.forEachNodeAfterFilter((node) => {\r\n filteredRows.push(node.data);\r\n });\r\n this.filteredRowDataForExport.emit(filteredRows);\r\n }\r\n}\r\n\r\n/** Used for setting filter values */\r\nclass SofTableFilter {\r\n /** The column header */\r\n header: string;\r\n /** The column label or translation key */\r\n label: string;\r\n /** The column filter options */\r\n options: string[] = [];\r\n}\r\n\r\n/** A filter combining multiple conditions, taken from AgGrid*/\r\nclass CombinedSimpleModel<T> {\r\n /** The filter type. Usually 'text' */\r\n filterType: string;\r\n /** The operator. Usually 'OR' */\r\n operator: 'AND' | 'OR';\r\n /** multiple instances of the Filter Model */\r\n conditions: T[];\r\n}\r\n","<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n fxLayoutGap=\"16px\" m-b-24>\r\n @if (enableFilter && colFilters.length) {\r\n <button \r\n (click)=\"toggleFilterPanel()\" \r\n mat-flat-button class=\"sof-button-v2\"\r\n [class.filter-selected]=\"filterOpenState\" \r\n id=\"btn-enable-filter\" color=\"secondary\" size=\"small\">\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n {{'armature.sof-table.filter' | translate}}\r\n </button>\r\n }\r\n @if (enableSearch) {\r\n <mat-form-field class=\"sof-form-field table-search-field dense-4\" fxFlex=\"auto\">\r\n <span matPrefix>\r\n <i class=\"ph-bold ph-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <mat-label class=\"search-label\">{{'armature.sof-table.search' | translate}}</mat-label>\r\n <input \r\n (input)=\"onSearchTextChanged()\" \r\n #gridSearchTextInput matInput type=\"text\" id=\"gridSearchTextInput\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.search-filter-description' | translate\"/>\r\n </mat-form-field>\r\n }\r\n @if (enableColumnOptions) {\r\n <button \r\n (click)=\"openColumnOptions()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"open-column-options\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-pause\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if(enableExport) {\r\n <button \r\n (click)=\"exportFilteredRowData()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"export-table\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-export\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <ng-content select=\"[sof-table-right-buttons]\"></ng-content>\r\n <!-- \r\n Only inject <button>'s inside an <ng-container sof-table-right-buttons>\r\n ... \r\n <ng-container sof-table-right-buttons>\r\n <button \r\n (click)=\"anyFunction()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" aria-label=\"any button\"\r\n matTooltip=\"any button\" matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-acorn\" aria-hidden=\"true\"></i>\r\n </button>\r\n </ng-container>\r\n ... \r\n note: make sure buttons have the following attributes to match others =\r\n `mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"`\r\n * remember to add aria-label and tooltip for icon button\r\n -->\r\n</div>\r\n\r\n<div #ariaResultsCount class=\"sr-only\" aria-live=\"assertive\"></div>\r\n\r\n@if (isGridDataRendered() && filterOpenState) {\r\n <fieldset \r\n class=\"filter-panel\" role=\"region\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.select-filters-description' | translate\">\r\n <p>\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n <span class=\"m-l-8\">{{'armature.sof-table.filter' | translate}}</span>\r\n </p>\r\n <div class=\"filter-panel-select-container m-v-20\">\r\n @for (colFilter of colFilters; let i = $index; track i) {\r\n <mat-form-field appearance=\"outline\" class=\"sof-form-field table-filter-select\">\r\n <mat-label>{{colFilter.label}}</mat-label>\r\n <mat-select \r\n [(ngModel)]=\"filterSelections[i]\" \r\n multiple \r\n id=\"filterDropdown{{i}}\"\r\n placeholder=\"{{'armature.sof-table.all' | translate}}\" disableRipple=\"true\">\r\n @for (colOption of colFilter.options; track $index) {\r\n <mat-option [value]=\"colOption\">\r\n {{colOption}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n <div fxLayout=\"row\">\r\n <div fxFlex=\"50%\">\r\n <button \r\n (click)=\"clearFilters()\" [disabled]=\"hasEmptyFilters()\" \r\n mat-button class=\"sof-button-v2\" size=\"medium\"\r\n id=\"tableFilterClear\" color=\"tertiary\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"50%\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"2%\" fxLayoutAlign=\"flex-end\">\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"cancelFilterChanges()\" mat-button class=\"sof-button-v2\" \r\n size=\"medium\" id=\"tableFilterCancel\" color=\"tertiary\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"applyFilters()\" mat-flat-button class=\"sof-button-v2\"\r\n size=\"medium\" id=\"tableFilterApply\" color=\"primary\">\r\n {{'armature.sof-table.results' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n<ag-grid-angular \r\n [fxShow]=\"isGridDataRendered()\"\r\n (gridReady)=\"onGridReady($event)\" \r\n (firstDataRendered)=\"onFirstDataRendered()\"\r\n (filterChanged)=\"onFilterChanged()\"\r\n (paginationChanged)=\"changePageSize($event)\" \r\n [rowData]=\"rowData\" \r\n [columnDefs]=\"colDefs\" \r\n [defaultColDef]=\"defaultColDef\" \r\n [pagination]=\"true\" \r\n [suppressPaginationPanel]=\"true\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" \r\n [paginationPageSize]=\"paginationPageSize\"\r\n [headerHeight]=\"rowHeight\" \r\n [rowHeight]=\"rowHeight\" \r\n [domLayout]=\"'autoHeight'\" \r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [overlayNoRowsTemplate]=\"'armature.sof-table.no-rows' | translate\"\r\n [class.no-rows]=\"!totalLength\"\r\n class=\"ag-theme-material\">\r\n</ag-grid-angular>\r\n\r\n<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n class=\"custom-paginator\">\r\n <div class=\"first-section\">\r\n <button class=\"button-part-1\" type=\"button\">\r\n <mat-select \r\n #pageSizeSelect\r\n id=\"pageSizeInput\" name=\"pageSizeInput\" \r\n [(value)]=\"paginationPageSize\" disableRipple=\"true\">\r\n @for (size of paginationPageSizeSelector; let i = $index; track i) {\r\n <mat-option \r\n class=\"page-option\" id=\"size{{i}}\"\r\n [value]=\"paginationPageSizeSelector[i]\">\r\n {{size}}\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{paginationPageSize}}</span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageSizeSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n <span class=\"pageChangeText\">\r\n {{pageChangeText}} {{'armature.sof-table.of' | translate}} {{totalLength}}\r\n </span>\r\n </div>\r\n <div class=\"go-to-page\">\r\n <div class=\"outer-box\">\r\n <button class=\"button-part\" type=\"button\">\r\n <mat-select \r\n #pageNumberSelect\r\n (selectionChange)=\"onPageNumberChange($event.value)\"\r\n [(value)]=\"currentPage\" \r\n id=\"pageSelelctor\" name=\"pageSelector\" disableRipple=\"true\">\r\n @for (page of pageSelector; track $index) {\r\n <mat-option [value]=\"page\" class=\"page-option\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{page}}</span>\r\n </span>\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{currentPage}}</span>\r\n <span class=\"of-page\"> {{'armature.sof-table.of' | translate}} {{totalNumberOfPages}} </span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageNumberSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n </div>\r\n <nav class=\"second-section\">\r\n <button \r\n (click)=\"previousPage()\"\r\n id=\"prev-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === 1\" \r\n [attr.aria-label]=\"'screen-reader.pagination.previous' | translate\">\r\n <i class=\"ph-bold ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button \r\n (click)=\"nextPage()\" \r\n id=\"next-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === totalNumberOfPages\"\r\n [attr.aria-label]=\"'screen-reader.pagination.next' | translate\">\r\n <i class=\"ph-bold ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n@if (!isGridDataRendered()) {\r\n <div class=\"loading-container\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"/>\r\n </div>\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n/** The Softheon Armature Table Cell component */\r\n@Component({\r\n selector: 'sof-table-cell',\r\n templateUrl: './table-cell.component.html',\r\n styleUrl: './table-cell.component.scss'\r\n})\r\nexport class SofTableCellComponent {\r\n\r\n /** All Components for Table Cell */\r\n @Input() public components: TableCellComponent[] = [];\r\n\r\n /** Any logic related to ag grid cell renderer data can be added here */\r\n public agInit(params): void {\r\n this.components = params['components'];\r\n }\r\n}\r\n\r\n/** Components to Render in Table Cell */\r\ninterface TableCellComponent {\r\n /** Component Class */\r\n component: any,\r\n /** Inputs needed for specific component */\r\n inputs: any\r\n}\r\n","<div class=\"table-cell\">\r\n <ng-container *ngFor=\"let currentComponent of components\">\r\n <ng-container *ngComponentOutlet=\"currentComponent.component; \r\n inputs:currentComponent.inputs;\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\nimport { SofTableComponent } from './sof-table/sof-table.component';\r\nimport { SofTableCellComponent } from './table-cell/table-cell.component';\r\nimport { SofColumnOptionsComponent } from './column-options-modal/column-options.component';\r\nimport { BaseComponentModule } from '@softheon/armature';\r\n\r\n\r\n/** The material modules */\r\nconst materialModules = [\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatCheckboxModule,\r\n MatIconModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatToolbarModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatCardModule,\r\n MatRadioModule,\r\n MatProgressSpinnerModule\r\n];\r\n\r\n@NgModule({\r\n declarations: [\r\n SofTableComponent,\r\n SofTableCellComponent,\r\n SofColumnOptionsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TranslateModule,\r\n AgGridModule,\r\n ...materialModules,\r\n BaseComponentModule\r\n ],\r\n exports: [\r\n SofTableComponent,\r\n SofTableCellComponent,\r\n SofColumnOptionsComponent\r\n ]\r\n})\r\nexport class AgGridComponentsModule { }\r\n","/** Public API Surface of Ag Grid components */\r\nexport * from './src/ag-grid-components.module';\r\nexport * from './src/sof-table/sof-table.component';\r\nexport * from './src/table-cell/table-cell.component';\r\nexport * from './src/column-options-modal/column-options.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i8","i12"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"softheon-armature-ag-grid-components.mjs","sources":["../../../../projects/armature/ag-grid-components/src/column-options-modal/column-options.component.ts","../../../../projects/armature/ag-grid-components/src/column-options-modal/column-options.component.html","../../../../projects/armature/ag-grid-components/src/sof-table/sof-table.component.ts","../../../../projects/armature/ag-grid-components/src/sof-table/sof-table.component.html","../../../../projects/armature/ag-grid-components/src/table-cell/table-cell.component.ts","../../../../projects/armature/ag-grid-components/src/table-cell/table-cell.component.html","../../../../projects/armature/ag-grid-components/src/ag-grid-components.module.ts","../../../../projects/armature/ag-grid-components/public-api.ts","../../../../projects/armature/ag-grid-components/softheon-armature-ag-grid-components.ts"],"sourcesContent":["import { Component, inject } from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { ApplyColumnStateParams, ColumnState } from \"ag-grid-community\";\r\n\r\n/** Table Column options dialog */\r\n@Component({\r\n selector: 'sof-column-options',\r\n templateUrl: './column-options.component.html',\r\n styleUrl: './column-options.component.scss'\r\n})\r\nexport class SofColumnOptionsComponent {\r\n\r\n /** dialog reference */\r\n private dialogRef: MatDialogRef<SofColumnOptionsComponent> = inject(MatDialogRef<SofColumnOptionsComponent>);\r\n\r\n /** dialog data */\r\n public data: ColumnOptionsData = inject(MAT_DIALOG_DATA);\r\n\r\n /** emit the updated column state */\r\n public applyUpdatedColumnState(): void {\r\n const columnState: Array<ColumnState> = this.data.columnData.map((column) => {\r\n return {\r\n colId: column.id,\r\n hide: !column.isChecked\r\n }\r\n });\r\n const updatedColumnState: ApplyColumnStateParams = {\r\n state: [...columnState],\r\n applyOrder: true\r\n };\r\n this.dialogRef.close(updatedColumnState);\r\n }\r\n\r\n /** reset the column data to its first saved value */\r\n public resetColumnData(): void {\r\n this.data.columnData = structuredClone(this.data.initialColumnData);\r\n }\r\n}\r\n\r\n/** \r\n * Column options modal data\r\n * @description data passed from the 'SofTableComponent'\r\n * @property `tableName: string` name of the table using the column options\r\n * @property `columnData: Array<ColumnData>` column data returned from the agGrid api\r\n * @property `initialColumnData: Array<ColumnData>` column data from saved user preference or initial `columnData` \r\n * @see {@link ColumnData}\r\n */\r\nexport interface ColumnOptionsData {\r\n /** name of the table using the column options */\r\n tableName?: string;\r\n /** column data returned from the agGrid api */\r\n columnData?: Array<ColumnData>;\r\n /** column data from saved user preference or initial `columnData` */\r\n initialColumnData?: Array<ColumnData>;\r\n /** \r\n * To display the text on the column options modal, which states -\r\n * `\"Options will be saved for the next time you log in.\"`\r\n */\r\n showSaveColumnOptionsText?: boolean;\r\n}\r\n\r\n/** \r\n * Column data \r\n * @description column data derived from the agGrid api, adds id property to type `HandleInput`\r\n * @property `id: string` columns unique id\r\n * @property `text: string` columns header text\r\n * @property `isChecked: boolean` column not hidden\r\n*/\r\nexport interface ColumnData {\r\n /** columns unique id */\r\n id?: string;\r\n /** columns header text */\r\n text?: string;\r\n /** column not hidden */\r\n isChecked?: boolean;\r\n}\r\n","<div class=\"column-options-header\">\r\n <i class=\"ph-bold ph-square-split-horizontal\" aria-hidden=\"true\"></i>\r\n <h2 id=\"column-options-heading\">{{'armature.sof-table.column-options' | translate}}</h2>\r\n <button \r\n mat-dialog-close m-l-auto \r\n disableRipple=\"true\" id=\"column-options-close\" aria-label=\"close\">\r\n <i class=\"ph-bold ph-x close\" aria-hidden=\"true\"></i>\r\n </button>\r\n</div>\r\n<div class=\"column-options-container\">\r\n <div class=\"column-options-description\">\r\n <p>\r\n {{'armature.sof-table.column-options-description' | translate}} \r\n {{ data.showSaveColumnOptionsText ? ('armature.sof-table.column-options-description-saving' | translate) : ''}}\r\n </p>\r\n <p class=\"table-label\">{{data.tableName | translate}} {{'armature.sof-table.columns' | translate}}</p>\r\n </div>\r\n <div class=\"column-options-selections\">\r\n <sof-handle [handleList]=\"data.columnData\"/>\r\n </div>\r\n <div class=\"column-options-bottom\">\r\n <button\r\n (click)=\"resetColumnData()\"\r\n mat-flat-button color=\"tertiary\" \r\n size=\"small\" class=\"sof-button-v2\" m-r-auto\r\n id=\"column-options-reset\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n <button \r\n mat-flat-button mat-dialog-close \r\n color=\"secondary\" size=\"small\" class=\"sof-button-v2\"\r\n id=\"column-options-cancel\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n <button \r\n (click)=\"applyUpdatedColumnState()\"\r\n mat-flat-button color=\"primary\" \r\n size=\"small\" class=\"sof-button-v2\"\r\n id=\"column-options-update\">\r\n {{'armature.sof-table.update' | translate}}\r\n </button>\r\n </div>\r\n</div>\r\n","import { \r\n Component, \r\n ElementRef, \r\n EventEmitter, \r\n inject, \r\n Input, \r\n OnChanges, \r\n OnInit, \r\n Output, \r\n signal, \r\n SimpleChanges, \r\n ViewChild, \r\n WritableSignal \r\n} from '@angular/core';\r\n\r\nimport { take, tap } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { \r\n ColumnData, \r\n ColumnOptionsData, \r\n SofColumnOptionsComponent \r\n} from '../column-options-modal/column-options.component';\r\n\r\nimport {\r\n ApplyColumnStateParams,\r\n ColDef,\r\n Column,\r\n ColumnState,\r\n FilterModel,\r\n GridApi,\r\n GridReadyEvent,\r\n IRowNode,\r\n PaginationChangedEvent,\r\n SuppressKeyboardEventParams,\r\n TextFilterModel\r\n} from \"ag-grid-community\";\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n/** The Softheon Armature Table component */\r\n@Component({\r\n selector: 'sof-table',\r\n templateUrl: './sof-table.component.html',\r\n styleUrl: './sof-table.component.scss'\r\n})\r\nexport class SofTableComponent implements OnInit, OnChanges {\r\n\r\n /** The language text or a key that will be shown in this component */\r\n @Input() public rowData: Array<any> = [];\r\n\r\n /** Column Definitions: Defines & controls grid columns. */\r\n @Input() public colDefs: Array<ColDef> = [];\r\n\r\n /** Size modes for table */\r\n @Input() private sizeMode: 'Compact' | 'Roomy' | 'Default';\r\n\r\n /** Pages sizes */\r\n @Input() public paginationPageSizeSelector: Array<number> = [10, 20, 50, 100];\r\n\r\n /** Enable search */\r\n @Input() public enableSearch: boolean = true;\r\n\r\n /** Enable custom text filter dropdowns */\r\n @Input() public enableFilter: boolean = true;\r\n\r\n /** Enable column options modal selection */\r\n @Input() public enableColumnOptions: boolean = true;\r\n\r\n /** Enable export button to output filtered row data */\r\n @Input() public enableExport: boolean = false;\r\n\r\n /** \r\n * To display the text on the column options modal, which states -\r\n * `\"Options will be saved for the next time you log in.\"`\r\n * @default false\r\n * @description set to true if set-up for saving preferences to User data.\r\n * @note You can still save preferences to _local_ or _session_ storage\r\n * using the `savedColumnState` input, and `updatedColumnState` output event.\r\n * @see The Demo site is saving to local storage.\r\n */\r\n @Input() public showSaveColumnOptionsText: boolean = false;\r\n\r\n /** \r\n * Name/label of the table \r\n * @note should be a translation key\r\n */\r\n @Input() public tableName: string;\r\n\r\n /** Users saved column options state */\r\n @Input() private savedColumnState: ApplyColumnStateParams;\r\n\r\n /** Output updated column options event to save to user or browser storage */\r\n @Output() updatedColumnState: EventEmitter<ApplyColumnStateParams> = new EventEmitter();\r\n\r\n /** Output updated column options event to save to user or browser storage */\r\n @Output() filteredRowDataForExport: EventEmitter<any> = new EventEmitter();\r\n\r\n /** the search input */\r\n @ViewChild('gridSearchTextInput') gridSearchTextInput: ElementRef<HTMLInputElement>;\r\n\r\n /** The hidden element that announces when the table content changes from filter */\r\n @ViewChild('ariaResultsCount') public ariaResultsCount: ElementRef<HTMLElement>;\r\n\r\n /** \r\n * Keep track of the current column state\r\n * @note If columns are re-defined (onChanges), this state will be applied\r\n */\r\n private currentColumnState: ApplyColumnStateParams;\r\n\r\n /** Column names that should be filterable */\r\n public colFilters: Array<SofTableFilter> = [];\r\n\r\n /** Row Height for table */\r\n public rowHeight: number = 48;\r\n\r\n /** Current Page Index */\r\n public currentPage: number = 0;\r\n\r\n /** Grid API */\r\n private gridApi!: GridApi;\r\n\r\n /** Is the table ready to be displayed */\r\n public isGridDataRendered: WritableSignal<boolean> = signal(false);\r\n\r\n /** Default Page Size */\r\n public paginationPageSize: number = 20; \r\n\r\n /** Tool tip show delay */\r\n public tooltipShowDelay: number = 500;\r\n\r\n /** \r\n * Default Column Definition \r\n * @note (suppressKeyboardEvent) Table cells can be navigated with the arrow keys, \r\n * if the cell contains a button you can Tab into the button, enter | space to interact.\r\n */\r\n public defaultColDef: ColDef = {\r\n resizable: false, // disable resize \r\n suppressHeaderMenuButton: true, // disable default filter menu \r\n suppressMovable: true, // disable default drag & drop for columns \r\n cellStyle: { justifyContent: \"center\" },\r\n suppressKeyboardEvent: (params: SuppressKeyboardEventParams) => {\r\n return params.event.key === 'Tab' ? true : false;\r\n }\r\n };\r\n\r\n /** Length of data */\r\n public totalLength: number = 0;\r\n\r\n /**Total number of pages */\r\n public totalNumberOfPages: number;\r\n\r\n /** Page Change text */\r\n public pageChangeText: string;\r\n\r\n /** Page selector array */\r\n public pageSelector: Array<number> = [];\r\n\r\n /** Filter Panel open state */\r\n public filterOpenState: boolean;\r\n\r\n /** The list of filters and the selected values */\r\n public filterSelections: Array<Array<string>> = [];\r\n\r\n /** mat-dialog */\r\n private dialog: MatDialog = inject(MatDialog);\r\n\r\n /** Translation service */\r\n private translateService: TranslateService = inject(TranslateService);\r\n\r\n /** On component init */\r\n public ngOnInit(): void {\r\n this.resizeGrid();\r\n }\r\n\r\n /**\r\n * Angular On Changes\r\n * @param changes The input changes\r\n */\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.rowData && !changes.rowData.firstChange && !!this.gridApi) {\r\n this.totalLength = this.rowData.length;\r\n this.populateFilters();\r\n this.handlePageChangeText();\r\n this.isGridDataRendered.set(true);\r\n }\r\n if (changes.colDefs && !changes.colDefs.firstChange && !!this.gridApi) {\r\n setTimeout(() => {\r\n this.gridApi.applyColumnState(this.currentColumnState);\r\n this.populateFilters();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Called when the grid has ingested the input data\r\n * @param params Grid Ready Event,\r\n * The grid has initialized and is ready for most api calls, but may not be fully rendered yet.\r\n * @note you can not access this.gridApi before this function is run, \r\n * any attempts to access this.gridApi in this components ngOnInit or the first ngOnChanges cycle\r\n * will result in a type error; being this.gridApi is undefined at that time.\r\n */\r\n public onGridReady(params: GridReadyEvent) {\r\n this.gridApi = params.api;\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n window.onresize = () => {\r\n const mobileWidthThreshold = 752;\r\n if (window.innerWidth <= mobileWidthThreshold) {\r\n this.rowHeight = 40;\r\n this.paginationPageSize = 10;\r\n }\r\n else {\r\n this.resizeGrid();\r\n }\r\n this.handlePageChangeText();\r\n }\r\n }\r\n\r\n /** Fired the first time data is rendered into the grid. */\r\n public onFirstDataRendered() {\r\n if (!this.savedColumnState?.state.length) {\r\n const columnState: Array<ColumnState> = structuredClone(this.gridApi.getColumnState());\r\n this.savedColumnState = {\r\n state: columnState,\r\n applyOrder: true\r\n };\r\n }\r\n this.gridApi.applyColumnState(this.savedColumnState);\r\n this.updatedColumnState.emit(this.savedColumnState);\r\n this.currentColumnState = this.savedColumnState;\r\n this.populateFilters();\r\n this.handlePageChangeText();\r\n this.isGridDataRendered.set(true);\r\n }\r\n\r\n /** Resize grid from size mode */\r\n private resizeGrid(): void {\r\n if (this.sizeMode === 'Compact') {\r\n this.rowHeight = 40;\r\n }\r\n else if (this.sizeMode === 'Roomy') {\r\n this.rowHeight = 56;\r\n }\r\n else {\r\n this.rowHeight = 48;\r\n }\r\n }\r\n\r\n /**\r\n * On page selection change\r\n * @param value The selected page number\r\n */\r\n public onPageNumberChange(value: number): void {\r\n // The page values are 1 off to make a 1-based array, but the actual pages are a 0-based array.\r\n this.gridApi.paginationGoToPage(value - 1);\r\n }\r\n\r\n /** On next page event */\r\n public nextPage() {\r\n this.gridApi.paginationGoToNextPage();\r\n this.handlePageChangeText()\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n }\r\n\r\n /** On Previous Page Event */\r\n public previousPage() {\r\n this.gridApi.paginationGoToPreviousPage();\r\n this.handlePageChangeText()\r\n this.currentPage = this.gridApi.paginationGetCurrentPage() + 1;\r\n }\r\n\r\n /**\r\n * On Change Page Size Event\r\n * @param event The pagination event\r\n */\r\n public changePageSize(event: PaginationChangedEvent) {\r\n // Only need to do this work if the page size has changed.\r\n if (event.newPageSize) {\r\n // Update the total number of filtered rows.\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n // Handle text changes\r\n this.handlePageChangeText();\r\n }\r\n }\r\n\r\n /** \r\n * Called when the grid filter is changed \r\n * @todo update the filter dropdown options based on the filtered data set, instead of the complete data set.\r\n */\r\n public onFilterChanged(): void {\r\n const previousTotalLength: number = Number(this.totalLength);\r\n // Update the total number of filtered rows.\r\n this.totalLength = this.gridApi.paginationGetRowCount();\r\n if (this.totalLength !== previousTotalLength) {\r\n this.ariaResultsCount.nativeElement.innerHTML = \"\";\r\n this.ariaResultsCount.nativeElement.innerHTML = this.totalLength === 0\r\n ? this.translateService.instant('armature.sof-table.screen-reader.filtered-results.no-results')\r\n : this.translateService.instant(\r\n 'armature.sof-table.screen-reader.filtered-results.has-results', {'resultsCount': this.totalLength}\r\n );\r\n setTimeout(() => {\r\n this.ariaResultsCount.nativeElement.innerHTML = \"\";\r\n }, 100);\r\n }\r\n this.handlePageChangeText();\r\n }\r\n\r\n /** Generated text for showing pages in format: 1-11 of 11 */\r\n private handlePageChangeText(): void {\r\n // Handle empty table\r\n if (!this.totalLength || this.paginationPageSize === 0) {\r\n // Reset the pagination UI\r\n this.totalNumberOfPages = 1;\r\n this.pageSelector = [1];\r\n this.pageChangeText = `0`;\r\n this.gridApi.showNoRowsOverlay();\r\n return;\r\n } else {\r\n this.gridApi.hideOverlay();\r\n }\r\n // Update the total number of pages\r\n this.totalNumberOfPages = this.gridApi.paginationGetTotalPages() || Math.ceil(this.totalLength / this.paginationPageSize) || 1;\r\n // Reset the page selector\r\n this.currentPage = 1;\r\n const pageSelector = [];\r\n for (let i = 1; i <= this.totalNumberOfPages; i++) {\r\n pageSelector.push(i);\r\n }\r\n this.pageSelector = pageSelector;\r\n const length = Math.max(this.totalLength, 0);\r\n const pageSize = this.paginationPageSize;\r\n const startIndex = this.gridApi.paginationGetCurrentPage() * pageSize;\r\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\r\n this.pageChangeText = `${startIndex + 1} - ${endIndex}`;\r\n }\r\n\r\n /**\r\n * Apply the search filter on data when search text changed\r\n */\r\n public onSearchTextChanged(): void {\r\n this.gridApi.setGridOption(\"quickFilterText\", this.gridSearchTextInput.nativeElement.value);\r\n }\r\n\r\n /** Toggle the filter panel display */\r\n public toggleFilterPanel(): void {\r\n this.filterOpenState = !this.filterOpenState;\r\n }\r\n\r\n /** Apply the selected filters */\r\n public applyFilters(): void {\r\n let tableFilterModel: FilterModel = {};\r\n for (let i = 0; i < this.colFilters.length; i++) {\r\n const colFilter = this.colFilters[i];\r\n const selectedElements = this.filterSelections[i];\r\n if (!selectedElements.length) {\r\n // Reset out the column filters\r\n this.gridApi.setColumnFilterModel(colFilter.header, null);\r\n tableFilterModel[colFilter.header] = null;\r\n }\r\n else if (selectedElements.length == 1) {\r\n // Set the single filter for the column\r\n let filterModel: TextFilterModel = { filterType: 'text', type: 'equals', filter: selectedElements[0] };\r\n // Apply the filter model to the column\r\n tableFilterModel[colFilter.header] = filterModel;\r\n }\r\n else {\r\n // Set multiple OR filters for the column\r\n let filterModels: CombinedSimpleModel<TextFilterModel> = { filterType: 'text', operator: 'OR', conditions: [] };\r\n // Set the selected elements in the model\r\n for (const selectedElement of selectedElements) {\r\n filterModels.conditions.push({ filterType: 'text', type: 'equals', filter: selectedElement });\r\n }\r\n // Apply the filter model collection to the column\r\n tableFilterModel[colFilter.header] = filterModels;\r\n }\r\n }\r\n // Once everything is set, update the filters\r\n this.gridApi.setFilterModel(tableFilterModel);\r\n this.gridApi.onFilterChanged();\r\n }\r\n\r\n /** Clear all filters */\r\n public clearFilters(): void {\r\n // Clear all selections\r\n for (let i = 0; i < this.filterSelections.length; i++) {\r\n this.filterSelections[i] = [];\r\n }\r\n // Set the full grid filter model to null\r\n this.gridApi.setFilterModel(null);\r\n // Update the display\r\n this.gridApi.onFilterChanged();\r\n }\r\n\r\n /**\r\n * Returns true if no filters are selected\r\n * @returns True if a filter is selected, false otherwise.\r\n */\r\n public hasEmptyFilters(): boolean {\r\n if (!this.filterSelections || !this.filterSelections.length) {\r\n return true;\r\n }\r\n for (const filterSelect of this.filterSelections) {\r\n // If at least one filter has been selected, return false\r\n if (filterSelect.length) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Cancel the changes to the filter and closes the filter panel */\r\n public cancelFilterChanges(): void {\r\n for (let i = 0; i < this.colFilters.length; i++) {\r\n // Get the stored filters for the given model\r\n const colFilter = this.colFilters[i];\r\n const model = this.gridApi.getColumnFilterModel(colFilter.header);\r\n let filterSelectionData = [];\r\n if (model && model[\"conditions\"]) {\r\n // The model is a combined model with multiple selections\r\n const filterModel = model as CombinedSimpleModel<TextFilterModel>;\r\n for (const element of filterModel.conditions) {\r\n filterSelectionData.push(element.filter);\r\n }\r\n }\r\n else if (model) {\r\n // Assume the model is a single Text Filter Model\r\n let filterSelection: TextFilterModel = model;\r\n filterSelectionData.push(filterSelection.filter);\r\n }\r\n // Set the filter selections\r\n this.filterSelections[i] = filterSelectionData;\r\n }\r\n // Close the filter panel\r\n this.toggleFilterPanel();\r\n }\r\n\r\n /** Populates the filter dropdowns */\r\n private populateFilters(): void {\r\n // Reset the filter dropdowns\r\n this.filterSelections = [];\r\n this.colFilters = [];\r\n // Get the column definitions that have a filter\r\n const filteredCols: Array<ColDef> = this.gridApi.getColumnDefs().filter((def) => def['filter']);\r\n // Create a map to store unique values for each field\r\n const filterValuesMap = new Map<string, Set<any>>();\r\n // Initialize sets for each field (column) \r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n filterValuesMap.set(field, new Set<any>());\r\n }\r\n // Use forEachNode to iterate over the rows\r\n this.gridApi.forEachNode((node: IRowNode) => {\r\n if (node.data) {\r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n const value: any = this.gridApi.getCellValue({rowNode: node, colKey: field});\r\n if (value) {\r\n filterValuesMap.get(field)?.add(value);\r\n }\r\n }\r\n }\r\n });\r\n // Now that we have the unique values for each field, populate filter options\r\n for (const col of filteredCols) {\r\n const field: string = col[\"field\"];\r\n const label: string = col[\"headerName\"];\r\n const uniqueValues: Array<any> = Array.from(filterValuesMap.get(field) || []).sort();\r\n if (uniqueValues.length > 1) {\r\n // Ensure there's space for filter selections\r\n this.filterSelections.push([]); \r\n this.colFilters.push({ header: field, label: label, options: uniqueValues });\r\n }\r\n }\r\n }\r\n\r\n /** Open the column options modal */\r\n public openColumnOptions(): void {\r\n const columnState: Array<ColumnState> = this.gridApi.getColumnState();\r\n const columnData: Array<ColumnData> = this.columnStateToData(columnState);\r\n const initialColumnData: Array<ColumnData> = this.columnStateToData(this.savedColumnState.state);\r\n const columnOptionsData: ColumnOptionsData = {\r\n tableName: this.tableName,\r\n columnData,\r\n initialColumnData,\r\n showSaveColumnOptionsText: this.showSaveColumnOptionsText\r\n };\r\n const dialogRef = this.dialog.open(SofColumnOptionsComponent, {\r\n width: '500px',\r\n position: { bottom: '40px', right: '40px' },\r\n ariaLabelledBy: 'column-options-heading',\r\n data: columnOptionsData\r\n });\r\n dialogRef.afterClosed().pipe(\r\n take(1),\r\n tap((updatedColumnState: ApplyColumnStateParams) => {\r\n if (updatedColumnState && updatedColumnState.state.length) {\r\n this.gridApi.applyColumnState(updatedColumnState);\r\n this.updatedColumnState.emit(updatedColumnState);\r\n this.currentColumnState = updatedColumnState;\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n /**\r\n * Maps `Array<ColumnState>` to `Array<ColumnData>` \r\n * @note filters out any columns marked as 'pinned' by the column definitions.\r\n * @note filters any columns without a 'headerName'.\r\n * @param columnState the column state to modify\r\n * @returns an array of column data formatted to be ingested by the `SofColumnOptionsComponent`\r\n */\r\n private columnStateToData(columnState: Array<ColumnState>): Array<ColumnData> {\r\n return columnState\r\n .filter((column) => {\r\n const headerName: string = this.gridApi.getColumnDef(column.colId)?.headerName || \"\";\r\n if (headerName && headerName.length && !column.pinned) {\r\n return column;\r\n }\r\n })\r\n .map((column) => {\r\n const headerName: string = this.gridApi.getColumnDef(column.colId).headerName;\r\n return {\r\n id: column.colId,\r\n isChecked: !column.hide,\r\n text: headerName\r\n };\r\n }\r\n );\r\n }\r\n\r\n /** Emit the current filtered/sorted row data */\r\n public exportFilteredRowData(): void {\r\n const exportedRows: Array<any> = [];\r\n const columns: Array<Column> = this.gridApi.getAllDisplayedColumns().filter((col) => col.getColDef().headerName);\r\n this.gridApi.forEachNodeAfterFilterAndSort((node: IRowNode<any>) => {\r\n const rowData: any = {};\r\n columns.forEach(col => {\r\n const colId: string = col.getColId();\r\n // Use gridApi's getCellValue to get the value transformed by valueGetter\r\n rowData[colId] = this.gridApi.getCellValue({ rowNode: node, colKey: colId });\r\n });\r\n exportedRows.push(rowData);\r\n });\r\n this.filteredRowDataForExport.emit(exportedRows);\r\n }\r\n}\r\n\r\n/** Used for setting filter values */\r\nclass SofTableFilter {\r\n /** The column header */\r\n header: string;\r\n /** The column label or translation key */\r\n label: string;\r\n /** The column filter options */\r\n options: string[] = [];\r\n}\r\n\r\n/** A filter combining multiple conditions, taken from AgGrid*/\r\nclass CombinedSimpleModel<T> {\r\n /** The filter type. Usually 'text' */\r\n filterType: string;\r\n /** The operator. Usually 'OR' */\r\n operator: 'AND' | 'OR';\r\n /** multiple instances of the Filter Model */\r\n conditions: T[];\r\n}\r\n","<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n fxLayoutGap=\"16px\" m-b-24>\r\n @if (enableFilter && colFilters.length) {\r\n <button \r\n (click)=\"toggleFilterPanel()\" \r\n mat-flat-button class=\"sof-button-v2\"\r\n [class.filter-selected]=\"filterOpenState\" \r\n id=\"btn-enable-filter\" color=\"secondary\" size=\"small\">\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n {{'armature.sof-table.filter' | translate}}\r\n </button>\r\n }\r\n @if (enableSearch) {\r\n <mat-form-field class=\"sof-form-field table-search-field dense-4\" fxFlex=\"auto\">\r\n <span matPrefix>\r\n <i class=\"ph-bold ph-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <mat-label class=\"search-label\">{{'armature.sof-table.search' | translate}}</mat-label>\r\n <input \r\n (input)=\"onSearchTextChanged()\" \r\n #gridSearchTextInput matInput type=\"text\" id=\"gridSearchTextInput\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.search-filter-description' | translate\"/>\r\n </mat-form-field>\r\n }\r\n @if (enableColumnOptions) {\r\n <button \r\n (click)=\"openColumnOptions()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"open-column-options\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-pause\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if(enableExport) {\r\n <button \r\n (click)=\"exportFilteredRowData()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"export-table\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-export\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <ng-content select=\"[sof-table-right-buttons]\"></ng-content>\r\n <!-- \r\n Only inject <button>'s inside an <ng-container sof-table-right-buttons>\r\n ... \r\n <ng-container sof-table-right-buttons>\r\n <button \r\n (click)=\"anyFunction()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" aria-label=\"any button\"\r\n matTooltip=\"any button\" matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-acorn\" aria-hidden=\"true\"></i>\r\n </button>\r\n </ng-container>\r\n ... \r\n note: make sure buttons have the following attributes to match others =\r\n `mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"`\r\n * remember to add aria-label and tooltip for icon button\r\n -->\r\n</div>\r\n\r\n<div #ariaResultsCount class=\"sr-only\" aria-live=\"assertive\"></div>\r\n\r\n@if (isGridDataRendered() && filterOpenState) {\r\n <fieldset \r\n class=\"filter-panel\" role=\"region\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.select-filters-description' | translate\">\r\n <p>\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n <span class=\"m-l-8\">{{'armature.sof-table.filter' | translate}}</span>\r\n </p>\r\n <div class=\"filter-panel-select-container m-v-20\">\r\n @for (colFilter of colFilters; let i = $index; track i) {\r\n <mat-form-field appearance=\"outline\" class=\"sof-form-field table-filter-select\">\r\n <mat-label>{{colFilter.label}}</mat-label>\r\n <mat-select \r\n [(ngModel)]=\"filterSelections[i]\" \r\n multiple \r\n id=\"filterDropdown{{i}}\"\r\n placeholder=\"{{'armature.sof-table.all' | translate}}\" disableRipple=\"true\">\r\n @for (colOption of colFilter.options; track $index) {\r\n <mat-option [value]=\"colOption\">\r\n {{colOption}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n <div fxLayout=\"row\">\r\n <div fxFlex=\"50%\">\r\n <button \r\n (click)=\"clearFilters()\" [disabled]=\"hasEmptyFilters()\" \r\n mat-button class=\"sof-button-v2\" size=\"medium\"\r\n id=\"tableFilterClear\" color=\"tertiary\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"50%\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"2%\" fxLayoutAlign=\"flex-end\">\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"cancelFilterChanges()\" mat-button class=\"sof-button-v2\" \r\n size=\"medium\" id=\"tableFilterCancel\" color=\"tertiary\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"applyFilters()\" mat-flat-button class=\"sof-button-v2\"\r\n size=\"medium\" id=\"tableFilterApply\" color=\"primary\">\r\n {{'armature.sof-table.results' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n<ag-grid-angular \r\n [fxShow]=\"isGridDataRendered()\"\r\n (gridReady)=\"onGridReady($event)\" \r\n (firstDataRendered)=\"onFirstDataRendered()\"\r\n (filterChanged)=\"onFilterChanged()\"\r\n (paginationChanged)=\"changePageSize($event)\" \r\n [rowData]=\"rowData\" \r\n [columnDefs]=\"colDefs\" \r\n [defaultColDef]=\"defaultColDef\" \r\n [pagination]=\"true\" \r\n [suppressPaginationPanel]=\"true\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" \r\n [paginationPageSize]=\"paginationPageSize\"\r\n [headerHeight]=\"rowHeight\" \r\n [rowHeight]=\"rowHeight\" \r\n [domLayout]=\"'autoHeight'\" \r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [overlayNoRowsTemplate]=\"'armature.sof-table.no-rows' | translate\"\r\n [class.no-rows]=\"!totalLength\"\r\n class=\"ag-theme-material\">\r\n</ag-grid-angular>\r\n\r\n<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n class=\"custom-paginator\">\r\n <div class=\"first-section\">\r\n <button class=\"button-part-1\" type=\"button\">\r\n <mat-select \r\n #pageSizeSelect\r\n id=\"pageSizeInput\" name=\"pageSizeInput\" \r\n [(value)]=\"paginationPageSize\" disableRipple=\"true\">\r\n @for (size of paginationPageSizeSelector; let i = $index; track i) {\r\n <mat-option \r\n class=\"page-option\" id=\"size{{i}}\"\r\n [value]=\"paginationPageSizeSelector[i]\">\r\n {{size}}\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{paginationPageSize}}</span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageSizeSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n <span class=\"pageChangeText\">\r\n {{pageChangeText}} {{'armature.sof-table.of' | translate}} {{totalLength}}\r\n </span>\r\n </div>\r\n <div class=\"go-to-page\">\r\n <div class=\"outer-box\">\r\n <button class=\"button-part\" type=\"button\">\r\n <mat-select \r\n #pageNumberSelect\r\n (selectionChange)=\"onPageNumberChange($event.value)\"\r\n [(value)]=\"currentPage\" \r\n id=\"pageSelelctor\" name=\"pageSelector\" disableRipple=\"true\">\r\n @for (page of pageSelector; track $index) {\r\n <mat-option [value]=\"page\" class=\"page-option\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{page}}</span>\r\n </span>\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{currentPage}}</span>\r\n <span class=\"of-page\"> {{'armature.sof-table.of' | translate}} {{totalNumberOfPages}} </span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageNumberSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n </div>\r\n <nav class=\"second-section\">\r\n <button \r\n (click)=\"previousPage()\"\r\n id=\"prev-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === 1\" \r\n [attr.aria-label]=\"'screen-reader.pagination.previous' | translate\">\r\n <i class=\"ph-bold ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button \r\n (click)=\"nextPage()\" \r\n id=\"next-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === totalNumberOfPages\"\r\n [attr.aria-label]=\"'screen-reader.pagination.next' | translate\">\r\n <i class=\"ph-bold ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n@if (!isGridDataRendered()) {\r\n <div class=\"loading-container\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"/>\r\n </div>\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n/** The Softheon Armature Table Cell component */\r\n@Component({\r\n selector: 'sof-table-cell',\r\n templateUrl: './table-cell.component.html',\r\n styleUrl: './table-cell.component.scss'\r\n})\r\nexport class SofTableCellComponent {\r\n\r\n /** All Components for Table Cell */\r\n @Input() public components: TableCellComponent[] = [];\r\n\r\n /** Any logic related to ag grid cell renderer data can be added here */\r\n public agInit(params): void {\r\n this.components = params['components'];\r\n }\r\n}\r\n\r\n/** Components to Render in Table Cell */\r\ninterface TableCellComponent {\r\n /** Component Class */\r\n component: any,\r\n /** Inputs needed for specific component */\r\n inputs: any\r\n}\r\n","<div class=\"table-cell\">\r\n <ng-container *ngFor=\"let currentComponent of components\">\r\n <ng-container *ngComponentOutlet=\"currentComponent.component; \r\n inputs:currentComponent.inputs;\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\nimport { SofTableComponent } from './sof-table/sof-table.component';\r\nimport { SofTableCellComponent } from './table-cell/table-cell.component';\r\nimport { SofColumnOptionsComponent } from './column-options-modal/column-options.component';\r\nimport { BaseComponentModule } from '@softheon/armature';\r\n\r\n\r\n/** The material modules */\r\nconst materialModules = [\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatCheckboxModule,\r\n MatIconModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatToolbarModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatCardModule,\r\n MatRadioModule,\r\n MatProgressSpinnerModule\r\n];\r\n\r\n@NgModule({\r\n declarations: [\r\n SofTableComponent,\r\n SofTableCellComponent,\r\n SofColumnOptionsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TranslateModule,\r\n AgGridModule,\r\n ...materialModules,\r\n BaseComponentModule\r\n ],\r\n exports: [\r\n SofTableComponent,\r\n SofTableCellComponent,\r\n SofColumnOptionsComponent\r\n ]\r\n})\r\nexport class AgGridComponentsModule { }\r\n","/** Public API Surface of Ag Grid components */\r\nexport * from './src/ag-grid-components.module';\r\nexport * from './src/sof-table/sof-table.component';\r\nexport * from './src/table-cell/table-cell.component';\r\nexport * from './src/column-options-modal/column-options.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i8","i12"],"mappings":"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"}
|
package/package.json
CHANGED