@rosoftlab/material 1.0.0-alpha-7 → 1.0.0-alpha-8

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ import { BaseService, CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';
9
9
  import * as jsonLogic from 'json-logic-js/logic.js';
10
10
  import { Subject, fromEvent, merge, of } from 'rxjs';
11
11
  import { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
12
- import { DialogServiceImpl } from '../../../services/dialog.service-implementation';
12
+ import { DialogServiceMaterial } from '../../../services/dialog.service-implementation';
13
13
  import { RSLMaterialModule } from '../../rsl-material-module';
14
14
  import { GridLayoutService } from '../../services';
15
15
  import * as i0 from "@angular/core";
@@ -365,13 +365,13 @@ export class GenericTableComponent {
365
365
  getCellClass(model, property) {
366
366
  return model.getCellClass(property);
367
367
  }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1.DialogServiceImpl }, { token: i2.Router }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
368
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1.DialogServiceMaterial }, { token: i2.Router }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
369
369
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: GenericTableComponent, isStandalone: true, selector: "rsl-generic-table", inputs: { modelType: "modelType", baseService: "baseService", gridLayoutService: "gridLayoutService", editLink: "editLink", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deleteDisableRule: "deleteDisableRule", deletePropertyName: "deletePropertyName", hasSearch: "hasSearch", searchFields: "searchFields", defaultFilter: "defaultFilter", allowReorderItems: "allowReorderItems", stickyColumns: "stickyColumns", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick", allowEdit: "allowEdit", popupEdit: "popupEdit", customInclude: "customInclude", changeItemPosition: "changeItemPosition", infiniteScroll: "infiniteScroll" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ElementRef, descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: RSLMaterialModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
370
370
  }
371
371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, decorators: [{
372
372
  type: Component,
373
373
  args: [{ standalone: true, selector: 'rsl-generic-table', encapsulation: ViewEncapsulation.None, imports: [RSLMaterialModule], template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"] }]
374
- }], ctorParameters: function () { return [{ type: i1.DialogServiceImpl }, { type: i2.Router }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }, { type: i0.Renderer2 }]; }, propDecorators: { modelType: [{
374
+ }], ctorParameters: function () { return [{ type: i1.DialogServiceMaterial }, { type: i2.Router }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }, { type: i0.Renderer2 }]; }, propDecorators: { modelType: [{
375
375
  type: Input
376
376
  }], baseService: [{
377
377
  type: Input
@@ -433,4 +433,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
433
433
  }], editModel: [{
434
434
  type: Output
435
435
  }] } });
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFpQixXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQWMsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0s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QUUsVUFBVSxFQUFFO2dCQUs5QixjQUFjO3NCQUF2QixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlUXVlcnlEYXRhLCBCYXNlU2VydmljZSwgQ2VsbFRleHRBbGlnbiwgR3JpZExheW91dEZvcm1hdCwgUnVsZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGpzb25Mb2dpYyBmcm9tICdqc29uLWxvZ2ljLWpzL2xvZ2ljLmpzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlSW1wbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLWltcGxlbWVudGF0aW9uJztcclxuaW1wb3J0IHsgR3JpZExheW91dE1vZGVsLCBNYXRlcmlhbEJhc2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFJTTE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vcnNsLW1hdGVyaWFsLW1vZHVsZSc7XHJcbmltcG9ydCB7IEdyaWRMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAncnNsLWdlbmVyaWMtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBpbXBvcnRzOiBbUlNMTWF0ZXJpYWxNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIE1hdGVyaWFsQmFzZU1vZGVsPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICAvLyBkaXNwbGF5ZWRDb2x1bW5zID0gWydjb2RlJ107IC8vLCAnbmFtZScsICdjaWYnLCAnY2l0eScsICdhZGRyZXNzJywgJ3N0YXRlJywgJ3ByaWNlTGlzdE5hbWUnLCAnZGVsZXRlJ107XHJcbiAgQElucHV0KCkgbW9kZWxUeXBlOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xyXG4gIEBJbnB1dCgpIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZTxUPjtcclxuICBASW5wdXQoKSBncmlkTGF5b3V0U2VydmljZT86IEdyaWRMYXlvdXRTZXJ2aWNlPFQ+O1xyXG4gIEBJbnB1dCgpIGVkaXRMaW5rOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVmYXVsdFNvcnQ6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdFNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZURpc2FibGVSdWxlOiBSdWxlW107XHJcbiAgQElucHV0KCkgZGVsZXRlUHJvcGVydHlOYW1lOiBzdHJpbmcgPSAnbmFtZSc7XHJcbiAgQElucHV0KCkgaGFzU2VhcmNoOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEZpZWxkczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRGaWx0ZXI6IHN0cmluZztcclxuICBASW5wdXQoKSBhbGxvd1Jlb3JkZXJJdGVtczogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzdGlja3lDb2x1bW5zOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVkaXRPbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdE9uRGJsQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhbGxvd0VkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBvcHVwRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUluY2x1ZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgY2hhbmdlSXRlbVBvc2l0aW9uOiAocHJldkl0ZW06IFQsIGN1cnJlbnRJdGVtOiBUKSA9PiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQ+ID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xyXG4gIHJlc3VsdHNMZW5ndGggPSAwO1xyXG4gIGlzTG9hZGluZ1Jlc3VsdHMgPSB0cnVlO1xyXG4gIGlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG5cclxuICBmaWx0ZXJWYWx1ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgZmlsdGVyQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgZmlsdGVyQ2hhbmdlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50UmVmLCB7IHN0YXRpYzogZmFsc2UgfSkgZmlsdGVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU6IE1hdFRhYmxlPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHVibGljIG1hdFRhYmxlUmVmOiBFbGVtZW50UmVmO1xyXG4gIHJlc2l6ZVN1YnNjcmlwdGlvbjogYW55O1xyXG5cclxuICBzZWxlY3RlZEl0ZW06IFQ7XHJcbiAgZ3JpZExheW91dDogR3JpZExheW91dE1vZGVsW107XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkT2JqZWN0OiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrOiBFdmVudEVtaXR0ZXI8eyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgbW9kZWw6IFQgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG1vZGVsOiBUIH0+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXRNb2RlbDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG5cclxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcclxuICAvLyBydWxlRW5naW5lU2VydmljZTogUnVsZUVuZ2luZVNlcnZpY2U8VD47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZUltcGwsXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgbnVtYmVyUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHBlcmNlbnRQaXBlOiBQZXJjZW50UGlwZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5iYXNlU2VydmljZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuYmFzZVNlcnZpY2UgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZExheW91dFNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZExheW91dCA9IHRoaXMuZ3JpZExheW91dFNlcnZpY2UuZ2V0R3JpZExheW91dCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5iYXNlU2VydmljZS5uZXdNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMuZ3JpZExheW91dCA9IG1vZGVsLmdldEdyaWRMYXlvdXQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuYWxsb3dSZW9yZGVySXRlbXMpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgncG9zaXRpb24nKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoLmFwcGx5KHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdGhpcy5ncmlkTGF5b3V0Lm1hcCh4ID0+IHgucHJvcGVydHlOYW1lKSk7XHJcbiAgICAgIGlmICghdGhpcy5lZGl0T25DbGljayAmJiAhdGhpcy5lZGl0T25EYmxDbGljayAmJiB0aGlzLmFsbG93RWRpdCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKCdkZWxldGUnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLmZpbHRlckNoYW5nZWRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUobmV3VGV4dCA9PiB7XHJcbiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID49IDMgfHwgbmV3VGV4dC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IG5ld1RleHQ7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaEZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gdGhpcy5nZXRHcmlkTGF5b3V0KCk7XHJcbiAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMCk7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IDE1O1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgdGhpcy5zb3J0LmFjdGl2ZSA9IHRoaXMuZGVmYXVsdFNvcnQ7XHJcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0LmRpcmVjdGlvbiA9IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zb3J0LmRpcmVjdGlvbiA9ICdhc2MnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgbWVyZ2UodGhpcy5zb3J0LnNvcnRDaGFuZ2UsIHRoaXMucGFnaW5hdG9yLnBhZ2UpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCh7fSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbWFwKGRhdGEgPT4ge1xyXG4gICAgICAgICAgLy8gRmxpcCBmbGFnIHRvIHNob3cgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZC5cclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1JhdGVMaW1pdFJlYWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IGRhdGEuZ2V0TWV0YSgpLm1ldGEuY291bnQ7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmdldE1vZGVscygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBDYXRjaCBpZiB0aGUgR2l0SHViIEFQSSBoYXMgcmVhY2hlZCBpdHMgcmF0ZSBsaW1pdC4gUmV0dXJuIGVtcHR5IGRhdGEuXHJcbiAgICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIC8vIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAgICAgLy8gICBsZXQgb2xkRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhID8/IG51bGw7XHJcbiAgICAgICAgLy8gICAvLyBpZiAob2xkRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAvLyAgIC8vICAgb2xkRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgLy8gICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICBvbGREYXRhPW9sZERhdGEuY29uY2F0KGRhdGEpO1xyXG4gICAgICAgIC8vICAgLy8gfVxyXG4gICAgICAgIC8vICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBvbGREYXRhO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgIC8vIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKClcclxuICB9XHJcbiAgZ2V0RGF0YSgpOiBPYnNlcnZhYmxlPEJhc2VRdWVyeURhdGE8VD4+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IHRydWU7XHJcbiAgICBjb25zdCBwYWdlSW5kZXggPSAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgMjA7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcblxyXG4gICAgbGV0IHNvcnRzID0gJyc7XHJcbiAgICBpZiAodGhpcy5zb3J0LmFjdGl2ZSkge1xyXG4gICAgICBpZiAodGhpcy5zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgICAgc29ydHMgPSAnLScgKyB0aGlzLnNvcnQuYWN0aXZlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNvcnRzID0gdGhpcy5zb3J0LmFjdGl2ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGFzU2VhcmNoKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsdGVyc0FyciA9IHRoaXMuc2VhcmNoRmllbGRzLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAvLyBmaWx0ZXJzQXJyLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgLy8gICBmaWx0ZXJzLnB1c2goZWxlbWVudCArICdAPSonICsgdGhpcy5maWx0ZXJWYWx1ZSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgeSA9ICcoJyArIHRoaXMuc2VhcmNoRmllbGRzLnJlcGxhY2UoJywnLCAnfCcpICsgJyknO1xyXG4gICAgICAgIGZpbHRlcnMucHVzaCh5ICsgJ0A9KicgKyB0aGlzLmZpbHRlclZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdEZpbHRlcikge1xyXG4gICAgICBmaWx0ZXJzLnB1c2godGhpcy5kZWZhdWx0RmlsdGVyKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlcnNWYWx1ZSA9IGZpbHRlcnMuam9pbignLCAnKTtcclxuICAgIHJldHVybiB0aGlzLmJhc2VTZXJ2aWNlLmdldEFsbChwYWdlSW5kZXgsIHBhZ2VTaXplLCBzb3J0cywgZmlsdGVyc1ZhbHVlLCB0aGlzLmN1c3RvbUluY2x1ZGUpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaEZvcm0oKSB7XHJcbiAgICB0aGlzLmdldERhdGEoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1JhdGVMaW1pdFJlYWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSBkYXRhLmdldE1ldGEoKS5tZXRhLmNvdW50O1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YS5nZXRNb2RlbHMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGlnaGxpZ2h0KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmhpZ2hsaWdodGVkID0gZWxlbWVudC5oaWdobGlnaHRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgIGVsZW1lbnQuaGlnaGxpZ2h0ZWQgPSAhZWxlbWVudC5oaWdobGlnaHRlZDtcclxuICAgIGlmIChlbGVtZW50LmhpZ2hsaWdodGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gZWxlbWVudDtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdC5lbWl0KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBkZWxldGVPYmplY3QobW9kZWw6IFQpIHtcclxuICAgIGNvbnN0IG1zZyA9ICdEbyB5b3Ugd2FudCB0byBkZWxldGUgJyArIG1vZGVsW3RoaXMuZGVsZXRlUHJvcGVydHlOYW1lXSArICc/JztcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG1zZykuc3Vic2NyaWJlKChyZXNwb25zZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLmRlbGV0ZShtb2RlbC5pZCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IG1vZGVsLmlkKSB7XHJcbiAgICAgICAgICAgICAgdGVtcERhdGEucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRlbXBEYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZWRpdE9iamVjdChtb2RlbDogVCkge1xyXG4gICAgaWYgKCF0aGlzLnBvcHVwRWRpdCkge1xyXG4gICAgICBjb25zdCBpZCA9IG1vZGVsLmlkO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5lZGl0TGluaywgaWRdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdE1vZGVsLmVtaXQobW9kZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRGbGV4U3R5bGUoY29sdW1uOiBHcmlkTGF5b3V0TW9kZWwpIHtcclxuICAgIGlmIChjb2x1bW4ud2lkdGgpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSBjb2x1bW4uZ3JvdyArICcgJyArIGNvbHVtbi5zaHJpbmsgKyAnICcgKyBjb2x1bW4ud2lkdGggKyAncHgnO1xyXG4gICAgICByZXR1cm4gc3R5bGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldENlbGxUZXh0QWxpZ24oY29sdW1uOiBHcmlkTGF5b3V0TW9kZWwpIHtcclxuICAgIHJldHVybiBjb2x1bW4udGV4dEFsaWduID8/IENlbGxUZXh0QWxpZ24ubGVmdDtcclxuICB9XHJcblxyXG4gIHNob3dQaWN0dXJlQ2VsbChjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjb2x1bW4/LmZvcm1hdGluZyA/PyBHcmlkTGF5b3V0Rm9ybWF0Lm5vbmUpID09PSBHcmlkTGF5b3V0Rm9ybWF0LnBpY3R1cmU7XHJcbiAgfVxyXG5cclxuICBkZWxldGVEaXNhYmxlZChtb2RlbDogVCkge1xyXG4gICAgaWYgKHRoaXMuZGVsZXRlRGlzYWJsZVJ1bGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVSdWxlKHRoaXMuZGVsZXRlRGlzYWJsZVJ1bGUsIG1vZGVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgY2VsbENsaWNrKG1vZGVsOiBULCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jbGljay5lbWl0KHsgcHJvcGVydHlOYW1lLCBtb2RlbCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbHVhdGVSdWxlKHJ1bGVzOiBSdWxlW10sIG1vZGVsOiBUKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XHJcbiAgICAgIGxldCBqc29uUnVsZTogYW55O1xyXG4gICAgICBpZiAodHlwZW9mIHJ1bGUucnVsZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBqc29uUnVsZSA9IEpTT04ucGFyc2UocnVsZS5ydWxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBqc29uUnVsZSA9IHJ1bGUucnVsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocnVsZS5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9ICd7JyArIHJ1bGUucGFyYW1ldGVycy5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICdcIicgKyBpdGVtICsgJ1wiOlwiJyArIG1vZGVsW2l0ZW1dICsgJ1wiJztcclxuICAgICAgICB9KS5qb2luKCcsJykgKyAnfSc7XHJcbiAgICAgICAgcmVzdWx0ID0ganNvbkxvZ2ljLmFwcGx5KGpzb25SdWxlLCBKU09OLnBhcnNlKGRhdGEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBqc29uTG9naWMuYXBwbHkoanNvblJ1bGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIGdldENlbFZhbHVlKHJvdzogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoIXJvdylcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAvLyBpZiAocHJvcGVydHlOYW1lID09ICdrb21wZXRlbnplblN0ZGV2JylcclxuICAgIC8vICAgY29uc29sZS5sb2cocHJvcGVydHlOYW1lKTtcclxuICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID09PSAtMSkge1xyXG4gICAgICB2YXIgZ3JpZExheW91dCA9IHRoaXMuZ3JpZExheW91dC5maW5kKGYgPT4gZi5wcm9wZXJ0eU5hbWUuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID4gLTEpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXRlZFZhbHVlKGdyaWRMYXlvdXQsIHJvd1twcm9wZXJ0eU5hbWVdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0eU5hbWUuc3BsaXQoJy4nKVswXTtcclxuICAgICAgY29uc3Qgc3ViUHJvcCA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKHByb3AgKyAnLicsICcnKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2VsVmFsdWUocm93W3Byb3BdLCBzdWJQcm9wKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRGb3JtYXRlZFZhbHVlKGdyaWRMYXlvdXQ6IEdyaWRMYXlvdXRNb2RlbCwgdmFsdWU6IGFueSkge1xyXG5cclxuICAgIGlmIChncmlkTGF5b3V0KSB7XHJcbiAgICAgIHN3aXRjaCAoZ3JpZExheW91dC5mb3JtYXRpbmcpIHtcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQuZGF0ZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZ3JpZExheW91dC5mb3JtYXQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBHcmlkTGF5b3V0Rm9ybWF0Lm51bWJlcjpcclxuICAgICAgICAgIHJldHVybiB0aGlzLm51bWJlclBpcGUudHJhbnNmb3JtKHZhbHVlLCBncmlkTGF5b3V0LmZvcm1hdCk7XHJcbiAgICAgICAgY2FzZSBHcmlkTGF5b3V0Rm9ybWF0LnBlcmNlbnQ6XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZVByYyA9IHZhbHVlIC8gMTAwO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVyY2VudFBpcGUudHJhbnNmb3JtKHZhbHVlUHJjLCBncmlkTGF5b3V0LmZvcm1hdCk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG4gIGFwcGx5RmlsdGVyKGV2ZW50OiBFdmVudCkge1xyXG4gIH1cclxuICBkcm9wVGFibGUoZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcclxuICAgIGlmICh0aGlzLmNoYW5nZUl0ZW1Qb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBwcmV2SXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhW2V2ZW50LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhW2V2ZW50LmN1cnJlbnRJbmRleF07XHJcblxyXG4gICAgICBpZiAodGhpcy5jaGFuZ2VJdGVtUG9zaXRpb24ocHJldkl0ZW0sIGN1cnJlbnRJdGVtKSkge1xyXG4gICAgICAgIGNvbnN0IHByZXZJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleCgoZCkgPT4gZCA9PT0gZXZlbnQuaXRlbS5kYXRhKTtcclxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5kYXRhU291cmNlLmRhdGEsIHByZXZJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgICAgICB0aGlzLnRhYmxlLnJlbmRlclJvd3MoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpc0NvbHVtblN0aWNreShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbnMpIHtcclxuICAgICAgY29uc3QgZmlsdGVyc0FyciA9IHRoaXMuc3RpY2t5Q29sdW1ucy5zcGxpdChcIixcIik7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJzQXJyLmZpbmRJbmRleChmID0+IGYgPT0gbmFtZSkgIT09IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICB1cGRhdGVFbGVtZW50KG1vZGVsOiBUKSB7XHJcbiAgICAvL0ZpbmQgaWYgZWxlbWVudCBleGlzdFxyXG4gICAgdmFyIGN1cnJlbnRFbGVtZW50ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChmID0+IGYuaWQgPT09IG1vZGVsLmlkKTtcclxuICAgIGlmIChjdXJyZW50RWxlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2YoY3VycmVudEVsZW1lbnQpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSBtb2RlbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnB1c2gobW9kZWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3RGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IG5ld0RhdGE7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xyXG4gIH1cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgZnJvbUV2ZW50KHRoaXMubWF0VGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChlOiBhbnkpID0+IHRoaXMub25UYWJsZVNjcm9sbChlKSk7XHJcbiAgfVxyXG4gIG9uVGFibGVTY3JvbGwoZSkge1xyXG4gICAgY29uc3QgdGFibGVWaWV3SGVpZ2h0ID0gZS50YXJnZXQub2Zmc2V0SGVpZ2h0IC8vIHZpZXdwb3J0OiB+NTAwcHhcclxuICAgIGNvbnN0IHRhYmxlU2Nyb2xsSGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0IC8vIGxlbmd0aCBvZiBhbGwgdGFibGVcclxuICAgIGNvbnN0IHNjcm9sbExvY2F0aW9uID0gZS50YXJnZXQuc2Nyb2xsVG9wOyAvLyBob3cgZmFyIHVzZXIgc2Nyb2xsZWRcclxuXHJcbiAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgd2l0aGluIDIwMHB4IG9mIHRoZSBib3R0b20sIGFkZCBtb3JlIGRhdGFcclxuICAgIGNvbnN0IHNjcm9sbFRocmVzaG9sZCA9IDIwMDtcclxuXHJcbiAgICBjb25zdCBzY3JvbGxVcExpbWl0ID0gc2Nyb2xsVGhyZXNob2xkO1xyXG4gICAgaWYgKHNjcm9sbExvY2F0aW9uIDwgc2Nyb2xsVXBMaW1pdCAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPiAwKSB7XHJcbiAgICAgIC8vIHRoaXMuZmlyc3RQYWdlLS07XHJcbiAgICAgIGNvbnNvbGUubG9nKGBvblRhYmxlU2Nyb2xsKCkgVVA6IGZpcnN0UGFnZSBkZWNyZWFzZWQgdG8gJHt0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXh9LiBOb3cgZmV0Y2hpbmcgZGF0YS4uLmApO1xyXG4gICAgICAvLyB0aGlzLmZldGNoRGF0YSgpO1xyXG5cclxuICAgICAgdGhpcy5zY3JvbGxUbyh0YWJsZVNjcm9sbEhlaWdodCAvIDIgLSAyICogdGFibGVWaWV3SGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY3JvbGxEb3duTGltaXQgPSB0YWJsZVNjcm9sbEhlaWdodCAtIHRhYmxlVmlld0hlaWdodCAtIHNjcm9sbFRocmVzaG9sZDtcclxuICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IHNjcm9sbERvd25MaW1pdCAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPCB0aGlzLnBhZ2luYXRvci5nZXROdW1iZXJPZlBhZ2VzKCkpIHtcclxuICAgICAgLy8gdGhpcy5maXJzdFBhZ2UrKztcclxuICAgICAgY29uc29sZS5sb2coYG9uVGFibGVTY3JvbGwoKTogZmlyc3RQYWdlIGluY3JlYXNlZCB0byAke3RoaXMucGFnaW5hdG9yLnBhZ2VJbmRleH0uIE5vdyBmZXRjaGluZyBkYXRhLi4uYCk7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XHJcbiAgICAgIC8vIHRoaXMuc2Nyb2xsVG8odGFibGVTY3JvbGxIZWlnaHQgLyAyICsgdGFibGVWaWV3SGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzY3JvbGxUbyhwb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubWF0VGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3Njcm9sbFRvcCcsIHBvc2l0aW9uKTtcclxuICB9XHJcbiAgZ2V0Q2VsbENsYXNzKG1vZGVsOiBULCBwcm9wZXJ0eTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbW9kZWwuZ2V0Q2VsbENsYXNzKHByb3BlcnR5KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclhcIiAqbmdJZj1cImhhc1NlYXJjaFwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC54cz1cImNvbHVtblwiIGZ4TGF5b3V0LnNtPVwiY29sdW1uXCIgZnhGbGV4RmlsbD5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XHJcbiAgICAgIDxtYXQtbGFiZWw+RmlsdGVyPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09J2ZpbHRlclZhbHVlJyAobmdNb2RlbENoYW5nZSk9J2ZpbHRlckNoYW5nZWQubmV4dCgkZXZlbnQpJyAjZmlsdGVyPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIj5cclxuICAgIDwhLS0gICNhcHBsaWNhdGlvbnNDb250YWluZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1sb2FkaW5nLXNoYWRlXCIgKm5nSWY9XCJpc0xvYWRpbmdSZXN1bHRzIHx8IGlzUmF0ZUxpbWl0UmVhY2hlZFwiPlxyXG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc0xvYWRpbmdSZXN1bHRzXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtcmF0ZS1saW1pdC1yZWFjaGVkXCIgKm5nSWY9XCJpc1JhdGVMaW1pdFJlYWNoZWRcIj5cclxuICAgICAgICB7eydHZW5lcmFsLkxvYWRpbmdEYXRhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxtYXQtdGFibGUgZnhGbGV4ICN0YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgaWQ9XCJ0ZW1wYWx0ZS1mb3Jtcy10YWJsZVwiIG1hdFNvcnQgbWF0U29ydERpc2FibGVDbGVhclxyXG4gICAgICBtYXRTb3J0RGlyZWN0aW9uPVwiYXNjXCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhU291cmNlXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wVGFibGUoJGV2ZW50KVwiPlxyXG4gICAgICA8IS0tIChzY3JvbGwpPVwib25UYWJsZVNjcm9sbCgkZXZlbnQpXCIgLS0+XHJcblxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwb3NpdGlvblwiPlxyXG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZUNsZWFyPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPCEtLSB7eydHZW5lcmFsLk9yZGVyJyB8IHRyYW5zbGF0ZX19IC0tPlxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgIDxtYXQtY2VsbCBmeEZsZXggKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPnJlb3JkZXI8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBncmlkTGF5b3V0XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ucHJvcGVydHlOYW1lXCJcclxuICAgICAgICBbc3RpY2t5XT1cImlzQ29sdW1uU3RpY2t5KGNvbHVtbi5wcm9wZXJ0eU5hbWUpXCI+XHJcbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCBtYXQtc29ydC1oZWFkZXIgZGlzYWJsZUNsZWFyIFtzdHlsZS5mbGV4XT1cImdldEZsZXhTdHlsZShjb2x1bW4pXCIgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICB7e2NvbHVtbi50cmFuc2xhdGVLZXkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgIDxtYXQtY2VsbCBtYXRUb29sdGlwPXt7Z2V0Q2VsVmFsdWUocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpfX0gW3N0eWxlLmZsZXhdPVwiZ2V0RmxleFN0eWxlKGNvbHVtbilcIlxyXG4gICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiZ2V0Q2VsbFRleHRBbGlnbihjb2x1bW4pXCIgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgIChjbGljayk9XCJjZWxsQ2xpY2socm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyb3csY29sdW1uLnByb3BlcnR5TmFtZSlcIiAqbmdJZj1cIiFzaG93UGljdHVyZUNlbGwoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICB7e2dldENlbFZhbHVlKHJvdyxjb2x1bW4ucHJvcGVydHlOYW1lKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxpbWcgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJvdyxjb2x1bW4ucHJvcGVydHlOYW1lKVwiICpuZ0lmPVwic2hvd1BpY3R1cmVDZWxsKGNvbHVtbilcIj5cclxuICAgICAgICA8L21hdC1jZWxsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRlbGV0ZVwiIHN0aWNreUVuZCAqbmdJZj1cIiFlZGl0T25DbGljayAmJiAhZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGVDbGVhcj1cInRydWVcIj5cclxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmVlbiBidG4tZmlsbCBidG4td2QgYnRuLWp1c3QtaWNvblwiIChjbGljayk9XCJlZGl0T2JqZWN0KHJvdylcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwie3snR2VuZXJhbC5FZGl0JyB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmVkaXQ8L2k+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaXBwbGUtY29udGFpbmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXJlZCBidG4tZmlsbCBidG4td2QgYnRuLWp1c3QtaWNvblwiIChjbGljayk9XCJkZWxldGVPYmplY3Qocm93KVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZWxldGVEaXNhYmxlZChyb3cpXCIgbWF0VG9vbHRpcD1cInt7J0dlbmVyYWwuRGVsZXRlJyB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5kZWxldGU8L2k+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaXBwbGUtY29udGFpbmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jZWxsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1ucztzdGlja3k6IHRydWVcIj48L21hdC1oZWFkZXItcm93PlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlZGl0T25DbGljayAmJiAhZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdztsZXQgaW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwicm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcmVkOiByb3cuaG92ZXJlZCwgaGlnaGxpZ2h0ZWQ6IHJvdy5oaWdobGlnaHRlZH1cIiAoY2xpY2spPVwiaGlnaGxpZ2h0KHJvdylcIlxyXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJyb3cuaG92ZXJlZCA9IHRydWVcIiAobW91c2VvdXQpPVwicm93LmhvdmVyZWQgPSBmYWxzZVwiPlxyXG4gICAgICAgIDwvbWF0LXJvdz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdE9uQ2xpY2sgJiYgIWVkaXRPbkRibENsaWNrXCI+XHJcbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7bGV0IGluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cInJvd1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXJlZDogcm93LmhvdmVyZWQsIGhpZ2hsaWdodGVkOiByb3cuaGlnaGxpZ2h0ZWR9XCIgKGNsaWNrKT1cImVkaXRPYmplY3Qocm93KVwiXHJcbiAgICAgICAgICAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+PC9tYXQtcm93PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdE9uQ2xpY2sgJiYgZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdztsZXQgaW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwicm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcmVkOiByb3cuaG92ZXJlZCwgaGlnaGxpZ2h0ZWQ6IHJvdy5oaWdobGlnaHRlZH1cIiAoZGJsY2xpY2spPVwiZWRpdE9iamVjdChyb3cpXCJcclxuICAgICAgICAgIChjbGljayk9XCJoaWdobGlnaHQocm93KVwiIChtb3VzZW92ZXIpPVwicm93LmhvdmVyZWQgPSB0cnVlXCIgKG1vdXNlb3V0KT1cInJvdy5ob3ZlcmVkID0gZmFsc2VcIlxyXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+PC9tYXQtcm93PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImhpZ2hsaWdodChyb3cpXCIgKG1vdXNlb3Zlcik9XCJyb3cuaG92ZXJlZCA9IHRydWVcIiAobW91c2VvdXQpPVwicm93LmhvdmVyZWQgPSBmYWxzZVwiIC0tPlxyXG4gICAgPC9tYXQtdGFibGU+XHJcbiAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtoaWRkZW5dPVwiaW5maW5pdGVTY3JvbGxcIiBbbGVuZ3RoXT1cInJlc3VsdHNMZW5ndGhcIiBbcGFnZVNpemVdPVwiMTVcIlxyXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cIlsxNSwgMzAsICAxMDBdXCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIj5cclxuICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFpQixXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQWMsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0s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QUUsVUFBVSxFQUFFO2dCQUs5QixjQUFjO3NCQUF2QixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlUXVlcnlEYXRhLCBCYXNlU2VydmljZSwgQ2VsbFRleHRBbGlnbiwgR3JpZExheW91dEZvcm1hdCwgUnVsZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGpzb25Mb2dpYyBmcm9tICdqc29uLWxvZ2ljLWpzL2xvZ2ljLmpzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG1lcmdlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlTWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS1pbXBsZW1lbnRhdGlvbic7XHJcbmltcG9ydCB7IEdyaWRMYXlvdXRNb2RlbCwgTWF0ZXJpYWxCYXNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBSU0xNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL3JzbC1tYXRlcmlhbC1tb2R1bGUnO1xyXG5pbXBvcnQgeyBHcmlkTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzZWxlY3RvcjogJ3JzbC1nZW5lcmljLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgaW1wb3J0czogW1JTTE1hdGVyaWFsTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBNYXRlcmlhbEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLy8gZGlzcGxheWVkQ29sdW1ucyA9IFsnY29kZSddOyAvLywgJ25hbWUnLCAnY2lmJywgJ2NpdHknLCAnYWRkcmVzcycsICdzdGF0ZScsICdwcmljZUxpc3ROYW1lJywgJ2RlbGV0ZSddO1xyXG4gIEBJbnB1dCgpIG1vZGVsVHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcclxuICBASW5wdXQoKSBiYXNlU2VydmljZTogQmFzZVNlcnZpY2U8VD47XHJcbiAgQElucHV0KCkgZ3JpZExheW91dFNlcnZpY2U/OiBHcmlkTGF5b3V0U2VydmljZTxUPjtcclxuICBASW5wdXQoKSBlZGl0TGluazogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0OiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWxldGVEaXNhYmxlUnVsZTogUnVsZVtdO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVByb3BlcnR5TmFtZTogc3RyaW5nID0gJ25hbWUnO1xyXG4gIEBJbnB1dCgpIGhhc1NlYXJjaDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IHN0cmluZztcclxuICBASW5wdXQoKSBkZWZhdWx0RmlsdGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWxsb3dSZW9yZGVySXRlbXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc3RpY2t5Q29sdW1uczogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBlZGl0T25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRPbkRibENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWxsb3dFZGl0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwb3B1cEVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21JbmNsdWRlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGNoYW5nZUl0ZW1Qb3NpdGlvbjogKHByZXZJdGVtOiBULCBjdXJyZW50SXRlbTogVCkgPT4gYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICByZXN1bHRzTGVuZ3RoID0gMDtcclxuICBpc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICBpc1JhdGVMaW1pdFJlYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIGZpbHRlckNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudFJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpbHRlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlOiBNYXRUYWJsZTxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHB1YmxpYyBtYXRUYWJsZVJlZjogRWxlbWVudFJlZjtcclxuICByZXNpemVTdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBUO1xyXG4gIGdyaWRMYXlvdXQ6IEdyaWRMYXlvdXRNb2RlbFtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZE9iamVjdDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gIEBPdXRwdXQoKSBjbGljazogRXZlbnRFbWl0dGVyPHsgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG1vZGVsOiBUIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByb3BlcnR5TmFtZTogc3RyaW5nLCBtb2RlbDogVCB9PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0TW9kZWw6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgLy8gcnVsZUVuZ2luZVNlcnZpY2U6IFJ1bGVFbmdpbmVTZXJ2aWNlPFQ+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VNYXRlcmlhbCxcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBudW1iZXJQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcGVyY2VudFBpcGU6IFBlcmNlbnRQaXBlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmJhc2VTZXJ2aWNlICE9PSB1bmRlZmluZWQgfHwgdGhpcy5iYXNlU2VydmljZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkTGF5b3V0U2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0U2VydmljZS5nZXRHcmlkTGF5b3V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmJhc2VTZXJ2aWNlLm5ld01vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0ID0gbW9kZWwuZ2V0R3JpZExheW91dCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5hbGxvd1Jlb3JkZXJJdGVtcykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKCdwb3NpdGlvbicpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2guYXBwbHkodGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB0aGlzLmdyaWRMYXlvdXQubWFwKHggPT4geC5wcm9wZXJ0eU5hbWUpKTtcclxuICAgICAgaWYgKCF0aGlzLmVkaXRPbkNsaWNrICYmICF0aGlzLmVkaXRPbkRibENsaWNrICYmIHRoaXMuYWxsb3dFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ2RlbGV0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlZFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShuZXdUZXh0ID0+IHtcclxuICAgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPj0gMyB8fCBuZXdUZXh0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gbmV3VGV4dDtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAvLyB0aGlzLmdldEdyaWRMYXlvdXQoKTtcclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwKTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gMTU7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydCkge1xyXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gdGhpcy5kZWZhdWx0U29ydDtcclxuICAgICAgaWYgKHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICBtZXJnZSh0aGlzLnNvcnQuc29ydENoYW5nZSwgdGhpcy5wYWdpbmF0b3IucGFnZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3RhcnRXaXRoKHt9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoZGF0YSA9PiB7XHJcbiAgICAgICAgICAvLyBGbGlwIGZsYWcgdG8gc2hvdyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkLlxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gZGF0YS5nZXRNZXRhKCkubWV0YS5jb3VudDtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0TW9kZWxzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIENhdGNoIGlmIHRoZSBHaXRIdWIgQVBJIGhhcyByZWFjaGVkIGl0cyByYXRlIGxpbWl0LiBSZXR1cm4gZW1wdHkgZGF0YS5cclxuICAgICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgICAvLyAgIGxldCBvbGREYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEgPz8gbnVsbDtcclxuICAgICAgICAvLyAgIC8vIGlmIChvbGREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vICAgLy8gICBvbGREYXRhID0gZGF0YTtcclxuICAgICAgICAvLyAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIG9sZERhdGE9b2xkRGF0YS5jb25jYXQoZGF0YSk7XHJcbiAgICAgICAgLy8gICAvLyB9XHJcbiAgICAgICAgLy8gICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IG9sZERhdGE7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKVxyXG4gIH1cclxuICBnZXREYXRhKCk6IE9ic2VydmFibGU8QmFzZVF1ZXJ5RGF0YTxUPj4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBhZ2VJbmRleCA9ICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggfHwgMCkgKyAxO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCAyMDtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuXHJcbiAgICBsZXQgc29ydHMgPSAnJztcclxuICAgIGlmICh0aGlzLnNvcnQuYWN0aXZlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICBzb3J0cyA9ICctJyArIHRoaXMuc29ydC5hY3RpdmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc29ydHMgPSB0aGlzLnNvcnQuYWN0aXZlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zZWFyY2hGaWVsZHMuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIC8vIGZpbHRlcnNBcnIuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAvLyAgIGZpbHRlcnMucHVzaChlbGVtZW50ICsgJ0A9KicgKyB0aGlzLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCB5ID0gJygnICsgdGhpcy5zZWFyY2hGaWVsZHMucmVwbGFjZSgnLCcsICd8JykgKyAnKSc7XHJcbiAgICAgICAgZmlsdGVycy5wdXNoKHkgKyAnQD0qJyArIHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0RmlsdGVyKSB7XHJcbiAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyc1ZhbHVlID0gZmlsdGVycy5qb2luKCcsICcpO1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVNlcnZpY2UuZ2V0QWxsKHBhZ2VJbmRleCwgcGFnZVNpemUsIHNvcnRzLCBmaWx0ZXJzVmFsdWUsIHRoaXMuY3VzdG9tSW5jbHVkZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoRm9ybSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IGRhdGEuZ2V0TWV0YSgpLm1ldGEuY291bnQ7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhLmdldE1vZGVscygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBoaWdobGlnaHQoZWxlbWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uaGlnaGxpZ2h0ZWQgPSBlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgZWxlbWVudC5oaWdobGlnaHRlZCA9ICFlbGVtZW50LmhpZ2hsaWdodGVkO1xyXG4gICAgaWYgKGVsZW1lbnQuaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlbGVtZW50O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmVtaXQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRlbGV0ZU9iamVjdChtb2RlbDogVCkge1xyXG4gICAgY29uc3QgbXNnID0gJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSAnICsgbW9kZWxbdGhpcy5kZWxldGVQcm9wZXJ0eU5hbWVdICsgJz8nO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0obXNnKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuYmFzZVNlcnZpY2UuZGVsZXRlKG1vZGVsLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGVtcERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QuZW1pdChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pZCAhPT0gbW9kZWwuaWQpIHtcclxuICAgICAgICAgICAgICB0ZW1wRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGVtcERhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBlZGl0T2JqZWN0KG1vZGVsOiBUKSB7XHJcbiAgICBpZiAoIXRoaXMucG9wdXBFZGl0KSB7XHJcbiAgICAgIGNvbnN0IGlkID0gbW9kZWwuaWQ7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmVkaXRMaW5rLCBpZF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0TW9kZWwuZW1pdChtb2RlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEZsZXhTdHlsZShjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgaWYgKGNvbHVtbi53aWR0aCkge1xyXG4gICAgICBjb25zdCBzdHlsZSA9IGNvbHVtbi5ncm93ICsgJyAnICsgY29sdW1uLnNocmluayArICcgJyArIGNvbHVtbi53aWR0aCArICdweCc7XHJcbiAgICAgIHJldHVybiBzdHlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2VsbFRleHRBbGlnbihjb2x1bW46IEdyaWRMYXlvdXRNb2RlbCkge1xyXG4gICAgcmV0dXJuIGNvbHVtbi50ZXh0QWxpZ24gPz8gQ2VsbFRleHRBbGlnbi5sZWZ0O1xyXG4gIH1cclxuXHJcbiAgc2hvd1BpY3R1cmVDZWxsKGNvbHVtbjogR3JpZExheW91dE1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKGNvbHVtbj8uZm9ybWF0aW5nID8/IEdyaWRMYXlvdXRGb3JtYXQubm9uZSkgPT09IEdyaWRMYXlvdXRGb3JtYXQucGljdHVyZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZURpc2FibGVkKG1vZGVsOiBUKSB7XHJcbiAgICBpZiAodGhpcy5kZWxldGVEaXNhYmxlUnVsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZVJ1bGUodGhpcy5kZWxldGVEaXNhYmxlUnVsZSwgbW9kZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjZWxsQ2xpY2sobW9kZWw6IFQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsaWNrLmVtaXQoeyBwcm9wZXJ0eU5hbWUsIG1vZGVsIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsdWF0ZVJ1bGUocnVsZXM6IFJ1bGVbXSwgbW9kZWw6IFQpOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xyXG4gICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcclxuICAgICAgbGV0IGpzb25SdWxlOiBhbnk7XHJcbiAgICAgIGlmICh0eXBlb2YgcnVsZS5ydWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGpzb25SdWxlID0gSlNPTi5wYXJzZShydWxlLnJ1bGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpzb25SdWxlID0gcnVsZS5ydWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChydWxlLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gJ3snICsgcnVsZS5wYXJhbWV0ZXJzLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gJ1wiJyArIGl0ZW0gKyAnXCI6XCInICsgbW9kZWxbaXRlbV0gKyAnXCInO1xyXG4gICAgICAgIH0pLmpvaW4oJywnKSArICd9JztcclxuICAgICAgICByZXN1bHQgPSBqc29uTG9naWMuYXBwbHkoanNvblJ1bGUsIEpTT04ucGFyc2UoZGF0YSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IGpzb25Mb2dpYy5hcHBseShqc29uUnVsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgZ2V0Q2VsVmFsdWUocm93OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICghcm93KVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIC8vIGlmIChwcm9wZXJ0eU5hbWUgPT0gJ2tvbXBldGVuemVuU3RkZXYnKVxyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgIHZhciBncmlkTGF5b3V0ID0gdGhpcy5ncmlkTGF5b3V0LmZpbmQoZiA9PiBmLnByb3BlcnR5TmFtZS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPiAtMSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dCwgcm93W3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnR5TmFtZS5zcGxpdCgnLicpWzBdO1xyXG4gICAgICBjb25zdCBzdWJQcm9wID0gcHJvcGVydHlOYW1lLnJlcGxhY2UocHJvcCArICcuJywgJycpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDZWxWYWx1ZShyb3dbcHJvcF0sIHN1YlByb3ApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGdldEZvcm1hdGVkVmFsdWUoZ3JpZExheW91dDogR3JpZExheW91dE1vZGVsLCB2YWx1ZTogYW55KSB7XHJcblxyXG4gICAgaWYgKGdyaWRMYXlvdXQpIHtcclxuICAgICAgc3dpdGNoIChncmlkTGF5b3V0LmZvcm1hdGluZykge1xyXG4gICAgICAgIGNhc2UgR3JpZExheW91dEZvcm1hdC5kYXRlOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBncmlkTGF5b3V0LmZvcm1hdCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQubnVtYmVyOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyUGlwZS50cmFuc2Zvcm0odmFsdWUsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBjYXNlIEdyaWRMYXlvdXRGb3JtYXQucGVyY2VudDpcclxuICAgICAgICAgIGNvbnN0IHZhbHVlUHJjID0gdmFsdWUgLyAxMDA7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50UGlwZS50cmFuc2Zvcm0odmFsdWVQcmMsIGdyaWRMYXlvdXQuZm9ybWF0KTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgfVxyXG4gIGRyb3BUYWJsZShldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuY2hhbmdlSXRlbVBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGFbZXZlbnQuY3VycmVudEluZGV4XTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNoYW5nZUl0ZW1Qb3NpdGlvbihwcmV2SXRlbSwgY3VycmVudEl0ZW0pKSB7XHJcbiAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChkKSA9PiBkID09PSBldmVudC5pdGVtLmRhdGEpO1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UuZGF0YSwgcHJldkluZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgIHRoaXMudGFibGUucmVuZGVyUm93cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzQ29sdW1uU3RpY2t5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1ucykge1xyXG4gICAgICBjb25zdCBmaWx0ZXJzQXJyID0gdGhpcy5zdGlja3lDb2x1bW5zLnNwbGl0KFwiLFwiKTtcclxuICAgICAgcmV0dXJuIGZpbHRlcnNBcnIuZmluZEluZGV4KGYgPT4gZiA9PSBuYW1lKSAhPT0gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHVwZGF0ZUVsZW1lbnQobW9kZWw6IFQpIHtcclxuICAgIC8vRmluZCBpZiBlbGVtZW50IGV4aXN0XHJcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGYgPT4gZi5pZCA9PT0gbW9kZWwuaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRFbGVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IG1vZGVsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEucHVzaChtb2RlbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbmV3RGF0YTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBmcm9tRXZlbnQodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDcwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGU6IGFueSkgPT4gdGhpcy5vblRhYmxlU2Nyb2xsKGUpKTtcclxuICB9XHJcbiAgb25UYWJsZVNjcm9sbChlKSB7XHJcbiAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQgLy8gdmlld3BvcnQ6IH41MDBweFxyXG4gICAgY29uc3QgdGFibGVTY3JvbGxIZWlnaHQgPSBlLnRhcmdldC5zY3JvbGxIZWlnaHQgLy8gbGVuZ3RoIG9mIGFsbCB0YWJsZVxyXG4gICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMjAwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkID0gMjAwO1xyXG5cclxuICAgIGNvbnN0IHNjcm9sbFVwTGltaXQgPSBzY3JvbGxUaHJlc2hvbGQ7XHJcbiAgICBpZiAoc2Nyb2xsTG9jYXRpb24gPCBzY3JvbGxVcExpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcclxuICAgICAgLy8gdGhpcy5maXJzdFBhZ2UtLTtcclxuICAgICAgY29uc29sZS5sb2coYG9uVGFibGVTY3JvbGwoKSBVUDogZmlyc3RQYWdlIGRlY3JlYXNlZCB0byAke3RoaXMucGFnaW5hdG9yLnBhZ2VJbmRleH0uIE5vdyBmZXRjaGluZyBkYXRhLi4uYCk7XHJcbiAgICAgIC8vIHRoaXMuZmV0Y2hEYXRhKCk7XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbFRvKHRhYmxlU2Nyb2xsSGVpZ2h0IC8gMiAtIDIgKiB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjcm9sbERvd25MaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gc2Nyb2xsVGhyZXNob2xkO1xyXG4gICAgaWYgKHNjcm9sbExvY2F0aW9uID4gc2Nyb2xsRG93bkxpbWl0ICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA8IHRoaXMucGFnaW5hdG9yLmdldE51bWJlck9mUGFnZXMoKSkge1xyXG4gICAgICAvLyB0aGlzLmZpcnN0UGFnZSsrO1xyXG4gICAgICBjb25zb2xlLmxvZyhgb25UYWJsZVNjcm9sbCgpOiBmaXJzdFBhZ2UgaW5jcmVhc2VkIHRvICR7dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4fS4gTm93IGZldGNoaW5nIGRhdGEuLi5gKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuICAgICAgLy8gdGhpcy5zY3JvbGxUbyh0YWJsZVNjcm9sbEhlaWdodCAvIDIgKyB0YWJsZVZpZXdIZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHNjcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5tYXRUYWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsVG9wJywgcG9zaXRpb24pO1xyXG4gIH1cclxuICBnZXRDZWxsQ2xhc3MobW9kZWw6IFQsIHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBtb2RlbC5nZXRDZWxsQ2xhc3MocHJvcGVydHkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyWFwiICpuZ0lmPVwiaGFzU2VhcmNoXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgZnhMYXlvdXQuc209XCJjb2x1bW5cIiBmeEZsZXhGaWxsPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cclxuICAgICAgPG1hdC1sYWJlbD5GaWx0ZXI8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT0nZmlsdGVyVmFsdWUnIChuZ01vZGVsQ2hhbmdlKT0nZmlsdGVyQ2hhbmdlZC5uZXh0KCRldmVudCknICNmaWx0ZXI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPlxyXG4gICAgPCEtLSAgI2FwcGxpY2F0aW9uc0NvbnRhaW5lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWxvYWRpbmctc2hhZGVcIiAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHMgfHwgaXNSYXRlTGltaXRSZWFjaGVkXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1Jlc3VsdHNcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1yYXRlLWxpbWl0LXJlYWNoZWRcIiAqbmdJZj1cImlzUmF0ZUxpbWl0UmVhY2hlZFwiPlxyXG4gICAgICAgIHt7J0dlbmVyYWwuTG9hZGluZ0RhdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPG1hdC10YWJsZSBmeEZsZXggI3RhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBpZD1cInRlbXBhbHRlLWZvcm1zLXRhYmxlXCIgbWF0U29ydCBtYXRTb3J0RGlzYWJsZUNsZWFyXHJcbiAgICAgIG1hdFNvcnREaXJlY3Rpb249XCJhc2NcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2VcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BUYWJsZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwhLS0gKHNjcm9sbCk9XCJvblRhYmxlU2Nyb2xsKCRldmVudClcIiAtLT5cclxuXHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XHJcbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlQ2xlYXI9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8IS0tIHt7J0dlbmVyYWwuT3JkZXInIHwgdHJhbnNsYXRlfX0gLS0+XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIGZ4RmxleCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+cmVvcmRlcjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyaWRMYXlvdXRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5wcm9wZXJ0eU5hbWVcIlxyXG4gICAgICAgIFtzdGlja3ldPVwiaXNDb2x1bW5TdGlja3koY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsIG1hdC1zb3J0LWhlYWRlciBkaXNhYmxlQ2xlYXIgW3N0eWxlLmZsZXhdPVwiZ2V0RmxleFN0eWxlKGNvbHVtbilcIiAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7Y29sdW1uLnRyYW5zbGF0ZUtleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgPG1hdC1jZWxsIG1hdFRvb2x0aXA9e3tnZXRDZWxWYWx1ZShyb3csY29sdW1uLnByb3BlcnR5TmFtZSl9fSBbc3R5bGUuZmxleF09XCJnZXRGbGV4U3R5bGUoY29sdW1uKVwiXHJcbiAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJnZXRDZWxsVGV4dEFsaWduKGNvbHVtbilcIiAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAgKGNsaWNrKT1cImNlbGxDbGljayhyb3csY29sdW1uLnByb3BlcnR5TmFtZSlcIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJvdyxjb2x1bW4ucHJvcGVydHlOYW1lKVwiICpuZ0lmPVwiIXNob3dQaWN0dXJlQ2VsbChjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgIHt7Z2V0Q2VsVmFsdWUocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGltZyBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3Mocm93LGNvbHVtbi5wcm9wZXJ0eU5hbWUpXCIgKm5nSWY9XCJzaG93UGljdHVyZUNlbGwoY29sdW1uKVwiPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVsZXRlXCIgc3RpY2t5RW5kICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZUNsZWFyPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyZWVuIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImVkaXRPYmplY3Qocm93KVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydHZW5lcmFsLkVkaXQnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZWRpdDwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVkIGJ0bi1maWxsIGJ0bi13ZCBidG4tanVzdC1pY29uXCIgKGNsaWNrKT1cImRlbGV0ZU9iamVjdChyb3cpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlbGV0ZURpc2FibGVkKHJvdylcIiBtYXRUb29sdGlwPVwie3snR2VuZXJhbC5EZWxldGUnIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvaT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpcHBsZS1jb250YWluZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zO3N0aWNreTogdHJ1ZVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRPbkNsaWNrICYmICFlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChjbGljayk9XCJoaWdobGlnaHQocm93KVwiXHJcbiAgICAgICAgICAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCI+XHJcbiAgICAgICAgPC9tYXQtcm93PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0T25DbGljayAmJiAhZWRpdE9uRGJsQ2xpY2tcIj5cclxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdztsZXQgaW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwicm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcmVkOiByb3cuaG92ZXJlZCwgaGlnaGxpZ2h0ZWQ6IHJvdy5oaWdobGlnaHRlZH1cIiAoY2xpY2spPVwiZWRpdE9iamVjdChyb3cpXCJcclxuICAgICAgICAgIChtb3VzZW92ZXIpPVwicm93LmhvdmVyZWQgPSB0cnVlXCIgKG1vdXNlb3V0KT1cInJvdy5ob3ZlcmVkID0gZmFsc2VcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlZGl0T25DbGljayAmJiBlZGl0T25EYmxDbGlja1wiPlxyXG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93O2xldCBpbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyZWQ6IHJvdy5ob3ZlcmVkLCBoaWdobGlnaHRlZDogcm93LmhpZ2hsaWdodGVkfVwiIChkYmxjbGljayk9XCJlZGl0T2JqZWN0KHJvdylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImhpZ2hsaWdodChyb3cpXCIgKG1vdXNlb3Zlcik9XCJyb3cuaG92ZXJlZCA9IHRydWVcIiAobW91c2VvdXQpPVwicm93LmhvdmVyZWQgPSBmYWxzZVwiXHJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L21hdC1yb3c+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBbbmdDbGFzc109XCJ7aG92ZXJlZDogcm93LmhvdmVyZWQsIGhpZ2hsaWdodGVkOiByb3cuaGlnaGxpZ2h0ZWR9XCJcclxuICAgICAgICAoY2xpY2spPVwiaGlnaGxpZ2h0KHJvdylcIiAobW91c2VvdmVyKT1cInJvdy5ob3ZlcmVkID0gdHJ1ZVwiIChtb3VzZW91dCk9XCJyb3cuaG92ZXJlZCA9IGZhbHNlXCIgLS0+XHJcbiAgICA8L21hdC10YWJsZT5cclxuICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgW2hpZGRlbl09XCJpbmZpbml0ZVNjcm9sbFwiIFtsZW5ndGhdPVwicmVzdWx0c0xlbmd0aFwiIFtwYWdlU2l6ZV09XCIxNVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzE1LCAzMCwgIDEwMF1cIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -8,7 +8,7 @@ import * as i0 from "@angular/core";
8
8
  * DialogService makes this app easier to test by faking this service.
9
9
  * TODO: better modal implementation that doesn't use window.confirm
10
10
  */
11
- export class DialogServiceImpl {
11
+ export class DialogServiceMaterial {
12
12
  /**
13
13
  * Ask user to confirm an action. `message` explains the action and choices.
14
14
  * Returns observable resolving to `true`=confirm or `false`=cancel
@@ -101,10 +101,10 @@ export class DialogServiceImpl {
101
101
  }).catch();
102
102
  return from(confirmation);
103
103
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
105
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl }); }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial }); }
106
106
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial, decorators: [{
108
108
  type: Injectable
109
109
  }], ctorParameters: function () { return []; } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UtaW1wbGVtZW50YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLWltcGxlbWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7O0FBRy9COzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxPQUFnQixFQUFFLElBQWEsRUFDckMsb0JBQTRCLFFBQVEsRUFDcEMsbUJBQTJCLFFBQVE7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QixLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWU7WUFDakMsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFdBQVcsRUFBRTtnQkFDWCxhQUFhLEVBQUUsNkJBQTZCO2dCQUM1QyxZQUFZLEVBQUUsOEJBQThCO2FBQzdDO1lBQ0QsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQzthQUVDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDaEIsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQWdCLEVBQUUsS0FBYztRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsa0NBQWtDO1lBQ2xDLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLEtBQWM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLGlCQUFpQjthQUNqQztZQUNELGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFNLEVBQUUsT0FBZ0I7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxZQUFZLGlCQUFpQixFQUFFO1lBQ2xDLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckIsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNyRCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1NBQ0Y7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE9BQU87WUFDZCxlQUFlO1lBQ2YsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLGlCQUFpQjthQUNqQztZQUNELGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBL0ZVLGlCQUFpQjttSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuLyoqXHJcbiAqIEFzeW5jIG1vZGFsIGRpYWxvZyBzZXJ2aWNlXHJcbiAqIERpYWxvZ1NlcnZpY2UgbWFrZXMgdGhpcyBhcHAgZWFzaWVyIHRvIHRlc3QgYnkgZmFraW5nIHRoaXMgc2VydmljZS5cclxuICogVE9ETzogYmV0dGVyIG1vZGFsIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCB1c2Ugd2luZG93LmNvbmZpcm1cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2VJbXBsIGltcGxlbWVudHMgRGlhbG9nU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogQXNrIHVzZXIgdG8gY29uZmlybSBhbiBhY3Rpb24uIGBtZXNzYWdlYCBleHBsYWlucyB0aGUgYWN0aW9uIGFuZCBjaG9pY2VzLlxyXG4gICAqIFJldHVybnMgb2JzZXJ2YWJsZSByZXNvbHZpbmcgdG8gYHRydWVgPWNvbmZpcm0gb3IgYGZhbHNlYD1jYW5jZWxcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gIGNvbmZpcm0obWVzc2FnZT86IHN0cmluZywgdGV4dD86IHN0cmluZyxcclxuICAgIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmcgPSAnRGVsZXRlJyxcclxuICAgIGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZyA9ICdDYW5jZWwnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBTd2FsLmZpcmUoe1xyXG4gICAgICB0aXRsZTogbWVzc2FnZSB8fCAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIGljb246ICd3YXJuaW5nJyxcclxuICAgICAgdGV4dDogdGV4dCB8fCAnJyxcclxuICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgY29uZmlybUJ1dHRvblRleHQ6IGNvbmZpcm1CdXR0b25UZXh0LFxyXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiBjYW5jZWxCdXR0b25UZXh0LFxyXG4gICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b246ICdidG4gYnRuLXJlZCBidG4tZmlsbCBidG4td2QnLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvbjogJ2J0biBidG4tZ3JleSBidG4tZmlsbCBidG4td2QnLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLmNhdGNoKCk7XHJcbiAgICByZXR1cm4gZnJvbShjb25maXJtYXRpb24pO1xyXG4gIH1cclxuICBzaG93U2F2ZU1lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgdGl0bGU6IG1lc3NhZ2UsXHJcbiAgICAgIHRpbWVyOiAyMDAwLFxyXG4gICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIC8vIGN1c3RvbUNsYXNzOiAnb3ZlcmZsb3ctaGlkZGVuJyxcclxuICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlXHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pLmNhdGNoKCk7XHJcbiAgICByZXR1cm4gZnJvbShjb25maXJtYXRpb24pO1xyXG4gIH1cclxuICBzaG93UmVnaXN0ZXJlZE1lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgdGl0bGU6IG1lc3NhZ2UsXHJcbiAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxyXG4gICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b246ICdidG4gYnRuLXN1Y2Nlc3MnLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zU3R5bGluZzogZmFsc2VcclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkuY2F0Y2goKTtcclxuICAgIHJldHVybiBmcm9tKGNvbmZpcm1hdGlvbik7XHJcbiAgfVxyXG5cclxuICBzaG93RXJyb3JNZXNzYWdlKGU6IGFueSwgbWVzc2FnZT86IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFtZXNzYWdlKSB7XHJcbiAgICAgIG1lc3NhZ2UgPSAnVmFsaWRhdGlvbiBlcnJvcnMnO1xyXG4gICAgfVxyXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAvLyBWYWxpZGF0aW9uIGVycm9yc1xyXG4gICAgICBpZiAoZS5zdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGUuZXJyb3IuZXJyb3JzO1xyXG4gICAgICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgICAgIGVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgbWVzc2FnZSArPSBlcnJvci5maWVsZCArICcgJyArIGVycm9yLmRldGFpbCArICdcXG4nO1xyXG4gICAgICAgICAgfSk7ICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxyXG4gICAgICAvLyB0aW1lcjogMjAwMCxcclxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgIGN1c3RvbUNsYXNzOiB7XHJcbiAgICAgICAgY29uZmlybUJ1dHRvbjogJ2J0biBidG4tc3VjY2VzcycsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJ1dHRvbnNTdHlsaW5nOiBmYWxzZVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5jYXRjaCgpO1xyXG4gICAgcmV0dXJuIGZyb20oY29uZmlybWF0aW9uKTtcclxuICB9IFxyXG59XHJcblxyXG4iXX0=
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UtaW1wbGVtZW50YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvbWF0ZXJpYWwvc3JjL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLWltcGxlbWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7O0FBRy9COzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDOzs7T0FHRztJQUNILGdCQUFnQixDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxPQUFnQixFQUFFLElBQWEsRUFDckMsb0JBQTRCLFFBQVEsRUFDcEMsbUJBQTJCLFFBQVE7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QixLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWU7WUFDakMsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFdBQVcsRUFBRTtnQkFDWCxhQUFhLEVBQUUsNkJBQTZCO2dCQUM1QyxZQUFZLEVBQUUsOEJBQThCO2FBQzdDO1lBQ0QsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQzthQUVDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDaEIsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQWdCLEVBQUUsS0FBYztRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsa0NBQWtDO1lBQ2xDLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLEtBQWM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLGlCQUFpQjthQUNqQztZQUNELGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFNLEVBQUUsT0FBZ0I7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxZQUFZLGlCQUFpQixFQUFFO1lBQ2xDLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckIsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNyRCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1NBQ0Y7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE9BQU87WUFDZCxlQUFlO1lBQ2YsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLGlCQUFpQjthQUNqQztZQUNELGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBL0ZVLHFCQUFxQjttSEFBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0Byb3NvZnRsYWIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuLyoqXHJcbiAqIEFzeW5jIG1vZGFsIGRpYWxvZyBzZXJ2aWNlXHJcbiAqIERpYWxvZ1NlcnZpY2UgbWFrZXMgdGhpcyBhcHAgZWFzaWVyIHRvIHRlc3QgYnkgZmFraW5nIHRoaXMgc2VydmljZS5cclxuICogVE9ETzogYmV0dGVyIG1vZGFsIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCB1c2Ugd2luZG93LmNvbmZpcm1cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2VNYXRlcmlhbCBpbXBsZW1lbnRzIERpYWxvZ1NlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIEFzayB1c2VyIHRvIGNvbmZpcm0gYW4gYWN0aW9uLiBgbWVzc2FnZWAgZXhwbGFpbnMgdGhlIGFjdGlvbiBhbmQgY2hvaWNlcy5cclxuICAgKiBSZXR1cm5zIG9ic2VydmFibGUgcmVzb2x2aW5nIHRvIGB0cnVlYD1jb25maXJtIG9yIGBmYWxzZWA9Y2FuY2VsXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuICBjb25maXJtKG1lc3NhZ2U/OiBzdHJpbmcsIHRleHQ/OiBzdHJpbmcsXHJcbiAgICBjb25maXJtQnV0dG9uVGV4dDogc3RyaW5nID0gJ0RlbGV0ZScsXHJcbiAgICBjYW5jZWxCdXR0b25UZXh0OiBzdHJpbmcgPSAnQ2FuY2VsJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gU3dhbC5maXJlKHtcclxuICAgICAgdGl0bGU6IG1lc3NhZ2UgfHwgJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBpY29uOiAnd2FybmluZycsXHJcbiAgICAgIHRleHQ6IHRleHQgfHwgJycsXHJcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtQnV0dG9uVGV4dCxcclxuICAgICAgY2FuY2VsQnV0dG9uVGV4dDogY2FuY2VsQnV0dG9uVGV4dCxcclxuICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICBjb25maXJtQnV0dG9uOiAnYnRuIGJ0bi1yZWQgYnRuLWZpbGwgYnRuLXdkJyxcclxuICAgICAgICBjYW5jZWxCdXR0b246ICdidG4gYnRuLWdyZXkgYnRuLWZpbGwgYnRuLXdkJyxcclxuICAgICAgfSxcclxuICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaCgpO1xyXG4gICAgcmV0dXJuIGZyb20oY29uZmlybWF0aW9uKTtcclxuICB9XHJcbiAgc2hvd1NhdmVNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBTd2FsLmZpcmUoe1xyXG4gICAgICBpY29uOiAnc3VjY2VzcycsXHJcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxyXG4gICAgICB0aW1lcjogMjAwMCxcclxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxyXG4gICAgICAvLyBjdXN0b21DbGFzczogJ292ZXJmbG93LWhpZGRlbicsXHJcbiAgICAgIGJ1dHRvbnNTdHlsaW5nOiBmYWxzZVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5jYXRjaCgpO1xyXG4gICAgcmV0dXJuIGZyb20oY29uZmlybWF0aW9uKTtcclxuICB9XHJcbiAgc2hvd1JlZ2lzdGVyZWRNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBTd2FsLmZpcmUoe1xyXG4gICAgICBpY29uOiAnc3VjY2VzcycsXHJcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxyXG4gICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICBjb25maXJtQnV0dG9uOiAnYnRuIGJ0bi1zdWNjZXNzJyxcclxuICAgICAgfSxcclxuICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlXHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pLmNhdGNoKCk7XHJcbiAgICByZXR1cm4gZnJvbShjb25maXJtYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgc2hvd0Vycm9yTWVzc2FnZShlOiBhbnksIG1lc3NhZ2U/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGlmICghbWVzc2FnZSkge1xyXG4gICAgICBtZXNzYWdlID0gJ1ZhbGlkYXRpb24gZXJyb3JzJztcclxuICAgIH1cclxuICAgIGlmIChlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgLy8gVmFsaWRhdGlvbiBlcnJvcnNcclxuICAgICAgaWYgKGUuc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBlLmVycm9yLmVycm9ycztcclxuICAgICAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgICAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyb3IuZmllbGQgKyAnICcgKyBlcnJvci5kZXRhaWwgKyAnXFxuJztcclxuICAgICAgICAgIH0pOyAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBTd2FsLmZpcmUoe1xyXG4gICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICB0aXRsZTogbWVzc2FnZSxcclxuICAgICAgLy8gdGltZXI6IDIwMDAsXHJcbiAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxyXG4gICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b246ICdidG4gYnRuLXN1Y2Nlc3MnLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zU3R5bGluZzogZmFsc2VcclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkuY2F0Y2goKTtcclxuICAgIHJldHVybiBmcm9tKGNvbmZpcm1hdGlvbik7XHJcbiAgfSBcclxufVxyXG5cclxuIl19
@@ -70,7 +70,7 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
70
70
  * DialogService makes this app easier to test by faking this service.
71
71
  * TODO: better modal implementation that doesn't use window.confirm
72
72
  */
73
- class DialogServiceImpl {
73
+ class DialogServiceMaterial {
74
74
  /**
75
75
  * Ask user to confirm an action. `message` explains the action and choices.
76
76
  * Returns observable resolving to `true`=confirm or `false`=cancel
@@ -163,10 +163,10 @@ class DialogServiceImpl {
163
163
  }).catch();
164
164
  return from(confirmation);
165
165
  }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
167
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl }); }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
167
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial }); }
168
168
  }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceImpl, decorators: [{
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: DialogServiceMaterial, decorators: [{
170
170
  type: Injectable
171
171
  }], ctorParameters: function () { return []; } });
172
172
 
@@ -580,13 +580,13 @@ class GenericTableComponent {
580
580
  getCellClass(model, property) {
581
581
  return model.getCellClass(property);
582
582
  }
583
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, deps: [{ token: DialogServiceImpl }, { token: i2.Router }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
583
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, deps: [{ token: DialogServiceMaterial }, { token: i2.Router }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
584
584
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: GenericTableComponent, isStandalone: true, selector: "rsl-generic-table", inputs: { modelType: "modelType", baseService: "baseService", gridLayoutService: "gridLayoutService", editLink: "editLink", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deleteDisableRule: "deleteDisableRule", deletePropertyName: "deletePropertyName", hasSearch: "hasSearch", searchFields: "searchFields", defaultFilter: "defaultFilter", allowReorderItems: "allowReorderItems", stickyColumns: "stickyColumns", editOnClick: "editOnClick", editOnDblClick: "editOnDblClick", allowEdit: "allowEdit", popupEdit: "popupEdit", customInclude: "customInclude", changeItemPosition: "changeItemPosition", infiniteScroll: "infiniteScroll" }, outputs: { selectedObject: "selectedObject", click: "click", editModel: "editModel" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ElementRef, descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: RSLMaterialModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
585
585
  }
586
586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericTableComponent, decorators: [{
587
587
  type: Component,
588
588
  args: [{ standalone: true, selector: 'rsl-generic-table', encapsulation: ViewEncapsulation.None, imports: [RSLMaterialModule], template: "<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>", styles: [".mat-column-delete{flex:0 0 90px;padding-right:30px}.mat-sort-header-button{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-column-position{flex:0 0 60px!important}.mat-table{overflow-x:auto}[hidden]{display:none!important}\n"] }]
589
- }], ctorParameters: function () { return [{ type: DialogServiceImpl }, { type: i2.Router }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }, { type: i0.Renderer2 }]; }, propDecorators: { modelType: [{
589
+ }], ctorParameters: function () { return [{ type: DialogServiceMaterial }, { type: i2.Router }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }, { type: i0.Renderer2 }]; }, propDecorators: { modelType: [{
590
590
  type: Input
591
591
  }], baseService: [{
592
592
  type: Input
@@ -1 +1 @@
1
- {"version":3,"file":"rosoftlab-material.mjs","sources":["../../../../projects/rosoftlab/material/src/services/dialog.service-implementation.ts","../../../../projects/rosoftlab/material/src/lib/rsl-material-module.ts","../../../../projects/rosoftlab/material/src/lib/services/grid-layout.service.ts","../../../../projects/rosoftlab/material/src/lib/components/generic-table/generic-table.component.ts","../../../../projects/rosoftlab/material/src/lib/components/generic-table/generic-table.component.html","../../../../projects/rosoftlab/material/src/lib/components/searchable-dropdown/searchable-dropdown.component.ts","../../../../projects/rosoftlab/material/src/lib/components/searchable-dropdown/searchable-dropdown.component.html","../../../../projects/rosoftlab/material/src/lib/decorators/grid-layout.decorator.ts","../../../../projects/rosoftlab/material/src/lib/models/grid-layout.ts","../../../../projects/rosoftlab/material/src/lib/models/material-base-model.ts","../../../../projects/rosoftlab/material/src/public-api.ts","../../../../projects/rosoftlab/material/src/rosoftlab-material.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DialogService } from '@rosoftlab/core';\r\n\r\nimport { from, Observable } from 'rxjs';\r\nimport Swal from 'sweetalert2';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Async modal dialog service\r\n * DialogService makes this app easier to test by faking this service.\r\n * TODO: better modal implementation that doesn't use window.confirm\r\n */\r\n@Injectable()\r\nexport class DialogServiceImpl implements DialogService {\r\n /**\r\n * Ask user to confirm an action. `message` explains the action and choices.\r\n * Returns observable resolving to `true`=confirm or `false`=cancel\r\n */\r\n constructor() { }\r\n confirm(message?: string, text?: string,\r\n confirmButtonText: string = 'Delete',\r\n cancelButtonText: string = 'Cancel'): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n title: message || 'Are you sure?',\r\n icon: 'warning',\r\n text: text || '',\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n customClass: {\r\n confirmButton: 'btn btn-red btn-fill btn-wd',\r\n cancelButton: 'btn btn-grey btn-fill btn-wd',\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true\r\n })\r\n\r\n .then((result: any) => {\r\n if (result.value) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showSaveMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n timer: 2000,\r\n showConfirmButton: false,\r\n // customClass: 'overflow-hidden',\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n\r\n showErrorMessage(e: any, message?: string): Observable<boolean> {\r\n if (!message) {\r\n message = 'Validation errors';\r\n }\r\n if (e instanceof HttpErrorResponse) {\r\n // Validation errors\r\n if (e.status === 400) {\r\n const errors = e.error.errors;\r\n if (errors) {\r\n errors.forEach(error => {\r\n message += error.field + ' ' + error.detail + '\\n';\r\n }); \r\n }\r\n }\r\n }\r\n const confirmation = Swal.fire({\r\n icon: 'error',\r\n title: message,\r\n // timer: 2000,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n } \r\n}\r\n\r\n","import { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\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 { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule, MatOptionModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nconst COMMON_MODULES = [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule,\r\n MatDialogModule, MatExpansionModule, MatGridListModule, MatIconModule,\r\n MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule,\r\n MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule,\r\n MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatTableModule, MatTabsModule, MatToolbarModule,\r\n MatTooltipModule, MatOptionModule, DragDropModule, MatDividerModule, PortalModule, MatTreeModule, MatBadgeModule, MatStepperModule,\r\n CdkStepperModule\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n ...COMMON_MODULES,\r\n TranslateModule.forRoot({})\r\n ],\r\n exports: [\r\n ...COMMON_MODULES,\r\n TranslateModule\r\n ],\r\n})\r\nexport class RSLMaterialModule {\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BaseService } from '@rosoftlab/core';\nimport { MaterialBaseModel } from '../models';\nimport { GridLayoutModel } from '../models/grid-layout';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GridLayoutService<T extends MaterialBaseModel> {\n\n constructor(protected baseService: BaseService<T>) { }\n public getGridLayout(): GridLayoutModel[] {\n var model = this.baseService.newModel();\n return model.getGridLayout();\n }\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DatePipe, DecimalPipe, PercentPipe } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { BaseQueryData, BaseService, CellTextAlign, GridLayoutFormat, Rule } from '@rosoftlab/core';\r\nimport * as jsonLogic from 'json-logic-js/logic.js';\r\nimport { Observable, Subject, Subscription, fromEvent, merge, of } from 'rxjs';\r\nimport { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { DialogServiceImpl } from '../../../services/dialog.service-implementation';\r\nimport { GridLayoutModel, MaterialBaseModel } from '../../models';\r\nimport { RSLMaterialModule } from '../../rsl-material-module';\r\nimport { GridLayoutService } from '../../services';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'rsl-generic-table',\r\n templateUrl: './generic-table.component.html',\r\n styleUrls: ['./generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [RSLMaterialModule]\r\n})\r\nexport class GenericTableComponent<T extends MaterialBaseModel> implements OnInit, OnChanges, AfterViewInit {\r\n // displayedColumns = ['code']; //, 'name', 'cif', 'city', 'address', 'state', 'priceListName', 'delete'];\r\n @Input() modelType: new (...args: any[]) => T;\r\n @Input() baseService: BaseService<T>;\r\n @Input() gridLayoutService?: GridLayoutService<T>;\r\n @Input() editLink: string;\r\n @Input() defaultSort: string = null;\r\n @Input() defaultSortDirection: SortDirection = null;\r\n @Input() deleteDisableRule: Rule[];\r\n @Input() deletePropertyName: string = 'name';\r\n @Input() hasSearch: boolean;\r\n @Input() searchFields: string;\r\n @Input() defaultFilter: string;\r\n @Input() allowReorderItems: boolean;\r\n @Input() stickyColumns: string = null;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n @Input() allowEdit: boolean = true;\r\n @Input() popupEdit: boolean = false;\r\n @Input() customInclude: string = null;\r\n @Input() changeItemPosition: (prevItem: T, currentItem: T) => boolean;\r\n @Input() infiniteScroll: boolean = false;\r\n dataSource: MatTableDataSource<T> = new MatTableDataSource();\r\n resultsLength = 0;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n filterValue: string;\r\n private filterChanged: Subject<string> = new Subject<string>();\r\n private filterChangedSubscription: Subscription\r\n\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n @ViewChild('table') table: MatTable<any>;\r\n @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n resizeSubscription: any;\r\n\r\n selectedItem: T;\r\n gridLayout: GridLayoutModel[];\r\n @Output() selectedObject: EventEmitter<T> = new EventEmitter<T>();\r\n @Output() click: EventEmitter<{ propertyName: string, model: T }> = new EventEmitter<{ propertyName: string, model: T }>();\r\n @Output() editModel: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n displayedColumns: string[];\r\n // ruleEngineService: RuleEngineService<T>;\r\n constructor(\r\n public dialogService: DialogServiceImpl,\r\n public router: Router,\r\n private datePipe: DatePipe,\r\n private numberPipe: DecimalPipe,\r\n private percentPipe: PercentPipe,\r\n private renderer: Renderer2\r\n ) {\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.baseService !== undefined || this.baseService !== null) {\r\n if (this.gridLayoutService != null) {\r\n this.gridLayout = this.gridLayoutService.getGridLayout();\r\n }\r\n else {\r\n const model = this.baseService.newModel();\r\n this.gridLayout = model.getGridLayout();\r\n }\r\n this.displayedColumns = [];\r\n if (this.allowReorderItems) {\r\n this.displayedColumns.push('position')\r\n }\r\n this.displayedColumns.push.apply(this.displayedColumns, this.gridLayout.map(x => x.propertyName));\r\n if (!this.editOnClick && !this.editOnDblClick && this.allowEdit) {\r\n this.displayedColumns.push('delete');\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.filterChangedSubscription = this.filterChanged\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged()\r\n )\r\n .subscribe(newText => {\r\n if (newText.length >= 3 || newText.length == 0) {\r\n this.filterValue = newText;\r\n\r\n this.paginator.pageIndex = 0;\r\n this.refreshForm();\r\n }\r\n });\r\n // this.getGridLayout();\r\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);\r\n this.paginator.pageSize = 15;\r\n if (this.defaultSort) {\r\n this.sort.active = this.defaultSort;\r\n if (this.defaultSortDirection) {\r\n this.sort.direction = this.defaultSortDirection;\r\n } else {\r\n this.sort.direction = 'asc';\r\n }\r\n }\r\n\r\n // this.dataSource.paginator = this.paginator;\r\n merge(this.sort.sortChange, this.paginator.page)\r\n .pipe(\r\n startWith({}),\r\n switchMap(() => {\r\n this.isLoadingResults = true;\r\n return this.getData();\r\n }),\r\n map(data => {\r\n // Flip flag to show that loading has finished.\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n if (data) {\r\n this.resultsLength = data.getMeta().meta.count;\r\n return data.getModels();\r\n } else {\r\n this.resultsLength = 0;\r\n return [];\r\n }\r\n }),\r\n catchError(() => {\r\n this.isLoadingResults = false;\r\n // Catch if the GitHub API has reached its rate limit. Return empty data.\r\n this.isRateLimitReached = true;\r\n return of([]);\r\n })\r\n ).subscribe(data => {\r\n // if (this.infiniteScroll) {\r\n // let oldData = this.dataSource.data ?? null;\r\n // // if (oldData.length === 0) {\r\n // // oldData = data;\r\n // // } else {\r\n // oldData=oldData.concat(data);\r\n // // }\r\n // this.dataSource.data = oldData;\r\n // }\r\n // else {\r\n this.dataSource.data = data;\r\n // }\r\n });\r\n // this.paginator.nextPage()\r\n }\r\n getData(): Observable<BaseQueryData<T>> {\r\n this.isLoadingResults = true;\r\n const pageIndex = (this.paginator.pageIndex || 0) + 1;\r\n const pageSize = this.paginator.pageSize || 20;\r\n const filters = [];\r\n\r\n let sorts = '';\r\n if (this.sort.active) {\r\n if (this.sort.direction === 'desc') {\r\n sorts = '-' + this.sort.active;\r\n } else {\r\n sorts = this.sort.active;\r\n }\r\n }\r\n if (this.hasSearch) {\r\n if (this.filterValue) {\r\n // const filtersArr = this.searchFields.split(\",\");\r\n // filtersArr.forEach(element => {\r\n // filters.push(element + '@=*' + this.filterValue);\r\n // });\r\n const y = '(' + this.searchFields.replace(',', '|') + ')';\r\n filters.push(y + '@=*' + this.filterValue);\r\n }\r\n }\r\n if (this.defaultFilter) {\r\n filters.push(this.defaultFilter);\r\n }\r\n const filtersValue = filters.join(', ');\r\n return this.baseService.getAll(pageIndex, pageSize, sorts, filtersValue, this.customInclude);\r\n }\r\n\r\n refreshForm() {\r\n this.getData().subscribe(data => {\r\n if (data) {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = data.getMeta().meta.count;\r\n this.dataSource.data = data.getModels();\r\n } else {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = 0;\r\n this.dataSource.data = [];\r\n }\r\n });\r\n }\r\n\r\n\r\n highlight(element: any) {\r\n if (this.selectedItem) {\r\n this.selectedItem.highlighted = element.highlighted;\r\n }\r\n this.selectedItem = null;\r\n element.highlighted = !element.highlighted;\r\n if (element.highlighted) {\r\n this.selectedItem = element;\r\n this.selectedObject.emit(element);\r\n } else {\r\n this.selectedObject.emit(null);\r\n }\r\n }\r\n deleteObject(model: T) {\r\n const msg = 'Do you want to delete ' + model[this.deletePropertyName] + '?';\r\n this.dialogService.confirm(msg).subscribe((response: boolean) => {\r\n if (response) {\r\n this.baseService.delete(model.id).subscribe(() => {\r\n const tempData = [];\r\n this.selectedObject.emit(null);\r\n this.dataSource.data.map((item) => {\r\n if (item.id !== model.id) {\r\n tempData.push(item);\r\n }\r\n });\r\n this.dataSource.data = tempData;\r\n });\r\n }\r\n });\r\n }\r\n editObject(model: T) {\r\n if (!this.popupEdit) {\r\n const id = model.id;\r\n this.router.navigate([this.editLink, id]);\r\n } else {\r\n this.editModel.emit(model);\r\n }\r\n }\r\n getFlexStyle(column: GridLayoutModel) {\r\n if (column.width) {\r\n const style = column.grow + ' ' + column.shrink + ' ' + column.width + 'px';\r\n return style;\r\n }\r\n return null;\r\n }\r\n\r\n getCellTextAlign(column: GridLayoutModel) {\r\n return column.textAlign ?? CellTextAlign.left;\r\n }\r\n\r\n showPictureCell(column: GridLayoutModel): boolean {\r\n return (column?.formating ?? GridLayoutFormat.none) === GridLayoutFormat.picture;\r\n }\r\n\r\n deleteDisabled(model: T) {\r\n if (this.deleteDisableRule) {\r\n return this.evaluateRule(this.deleteDisableRule, model);\r\n } else {\r\n return false;\r\n }\r\n }\r\n cellClick(model: T, propertyName: string) {\r\n this.click.emit({ propertyName, model });\r\n }\r\n\r\n private evaluateRule(rules: Rule[], model: T): boolean {\r\n let result = true;\r\n rules.forEach(rule => {\r\n let jsonRule: any;\r\n if (typeof rule.rule === 'string') {\r\n jsonRule = JSON.parse(rule.rule);\r\n } else {\r\n jsonRule = rule.rule;\r\n }\r\n if (rule.parameters) {\r\n const data = '{' + rule.parameters.map((item: string) => {\r\n return '\"' + item + '\":\"' + model[item] + '\"';\r\n }).join(',') + '}';\r\n result = jsonLogic.apply(jsonRule, JSON.parse(data));\r\n } else {\r\n result = jsonLogic.apply(jsonRule);\r\n }\r\n });\r\n return result;\r\n }\r\n getCelValue(row: any, propertyName: string): any {\r\n if (!row)\r\n return \"\";\r\n // if (propertyName == 'kompetenzenStdev')\r\n // console.log(propertyName);\r\n if (propertyName.indexOf('.') === -1) {\r\n var gridLayout = this.gridLayout.find(f => f.propertyName.indexOf(propertyName) > -1);\r\n return this.getFormatedValue(gridLayout, row[propertyName]);\r\n } else {\r\n const prop = propertyName.split('.')[0];\r\n const subProp = propertyName.replace(prop + '.', '');\r\n return this.getCelValue(row[prop], subProp);\r\n }\r\n }\r\n private getFormatedValue(gridLayout: GridLayoutModel, value: any) {\r\n\r\n if (gridLayout) {\r\n switch (gridLayout.formating) {\r\n case GridLayoutFormat.date:\r\n return this.datePipe.transform(value, gridLayout.format);\r\n break;\r\n case GridLayoutFormat.number:\r\n return this.numberPipe.transform(value, gridLayout.format);\r\n case GridLayoutFormat.percent:\r\n const valuePrc = value / 100;\r\n return this.percentPipe.transform(valuePrc, gridLayout.format);\r\n default:\r\n return value;\r\n break;\r\n }\r\n }\r\n return value;\r\n }\r\n applyFilter(event: Event) {\r\n }\r\n dropTable(event: CdkDragDrop<any>) {\r\n if (this.changeItemPosition) {\r\n const prevItem = this.dataSource.data[event.previousIndex];\r\n const currentItem = this.dataSource.data[event.currentIndex];\r\n\r\n if (this.changeItemPosition(prevItem, currentItem)) {\r\n const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);\r\n moveItemInArray(this.dataSource.data, prevIndex, event.currentIndex);\r\n this.table.renderRows();\r\n }\r\n }\r\n }\r\n isColumnSticky(name: string): boolean {\r\n if (this.stickyColumns) {\r\n const filtersArr = this.stickyColumns.split(\",\");\r\n return filtersArr.findIndex(f => f == name) !== -1;\r\n }\r\n return false;\r\n }\r\n updateElement(model: T) {\r\n //Find if element exist\r\n var currentElement = this.dataSource.data.find(f => f.id === model.id);\r\n if (currentElement !== null) {\r\n const index = this.dataSource.data.indexOf(currentElement);\r\n this.dataSource.data[index] = model;\r\n } else {\r\n this.dataSource.data.push(model);\r\n }\r\n const newData = [...this.dataSource.data];\r\n this.dataSource.data = newData;\r\n this.dataSource._updateChangeSubscription();\r\n }\r\n public ngAfterViewInit(): void {\r\n fromEvent(this.matTableRef.nativeElement, 'scroll')\r\n .pipe(debounceTime(700))\r\n .subscribe((e: any) => this.onTableScroll(e));\r\n }\r\n onTableScroll(e) {\r\n const tableViewHeight = e.target.offsetHeight // viewport: ~500px\r\n const tableScrollHeight = e.target.scrollHeight // length of all table\r\n const scrollLocation = e.target.scrollTop; // how far user scrolled\r\n\r\n // If the user has scrolled within 200px of the bottom, add more data\r\n const scrollThreshold = 200;\r\n\r\n const scrollUpLimit = scrollThreshold;\r\n if (scrollLocation < scrollUpLimit && this.paginator.pageIndex > 0) {\r\n // this.firstPage--;\r\n console.log(`onTableScroll() UP: firstPage decreased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n // this.fetchData();\r\n\r\n this.scrollTo(tableScrollHeight / 2 - 2 * tableViewHeight);\r\n }\r\n\r\n const scrollDownLimit = tableScrollHeight - tableViewHeight - scrollThreshold;\r\n if (scrollLocation > scrollDownLimit && this.paginator.pageIndex < this.paginator.getNumberOfPages()) {\r\n // this.firstPage++;\r\n console.log(`onTableScroll(): firstPage increased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n this.paginator.nextPage();\r\n // this.scrollTo(tableScrollHeight / 2 + tableViewHeight);\r\n }\r\n }\r\n private scrollTo(position: number): void {\r\n this.renderer.setProperty(this.matTableRef.nativeElement, 'scrollTop', position);\r\n }\r\n getCellClass(model: T, property: string) {\r\n return model.getCellClass(property);\r\n }\r\n}\r\n","<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, UntypedFormControl } from '@angular/forms';\r\nimport { BaseModel, BaseQueryData, BaseService } from '@rosoftlab/core';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators';\r\nimport { RSLMaterialModule } from '../../rsl-material-module';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'rsl-searchable-dropdown',\r\n templateUrl: './searchable-dropdown.component.html',\r\n host: {\r\n '[class.example-floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n '[attr.aria-describedby]': 'describedBy',\r\n },\r\n imports: [RSLMaterialModule]\r\n})\r\nexport class SearchableDropdownComponent<T extends BaseModel> implements OnInit, OnDestroy, ControlValueAccessor {\r\n static nextId = 0;\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n errorState = false;\r\n id = `rsl-searchable-dropdown-${SearchableDropdownComponent.nextId++}`;\r\n\r\n // label for the search dropdown\r\n @Input() label: string = '';\r\n\r\n //Name of the form control\r\n @Input() fControlName: string;\r\n\r\n //Reference of the service\r\n @Input() serviceRef: BaseService<T>;\r\n\r\n //Fields for filtering\r\n @Input() searchFields: string;\r\n\r\n //Fields for display \r\n @Input() displayFields: string;\r\n\r\n //Fields for sorting the API data\r\n @Input() sortFields: string = '';\r\n\r\n // The value used to populate the control value\r\n @Input() valueField: string = 'id';\r\n\r\n // The minumum char for search\r\n @Input() minLengthTerm: number = 3;\r\n\r\n // The preload x elements\r\n @Input() preloadElementsCount: number;\r\n\r\n @Output() modelSelected: EventEmitter<BaseModel> = new EventEmitter();\r\n\r\n\r\n get empty() {\r\n return !this.value;\r\n }\r\n\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n\r\n\r\n @Input()\r\n get value(): any | null {\r\n return this._value;\r\n }\r\n set value(value: any | null) {\r\n if (value)\r\n if (this._value !== value) {\r\n this.loadModel(value);\r\n }\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n private _value: any;\r\n // Search form control\r\n searchControl: AbstractControl;\r\n\r\n showSerach = true;\r\n isLoading = false;\r\n options = [];\r\n filteredOptions = [];\r\n /** Subject that emits when the component has been destroyed. */\r\n protected _onDestroy = new Subject<void>();\r\n\r\n constructor(\r\n private _focusMonitor: FocusMonitor,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n @Optional() @Self() public ngControl: NgControl\r\n ) {\r\n\r\n this.searchControl = new UntypedFormControl('');\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n if (!this.displayFields)\r\n this.displayFields = this.searchFields;\r\n\r\n this.loadModel(this.ngControl.value)\r\n\r\n if (this.preloadElementsCount) {\r\n this.serviceRef.getAll(1, this.preloadElementsCount).subscribe({\r\n next: (data: BaseQueryData<T>) => {\r\n this.showSerach = false;\r\n this.options = data.getModels();\r\n this.filteredOptions = this.options;\r\n }\r\n })\r\n }\r\n\r\n this.searchControl.valueChanges\r\n .pipe(\r\n filter((res) => {\r\n const result = res !== null && res.length >= this.minLengthTerm;\r\n if (!result) {\r\n this.options = [];\r\n this.filteredOptions = [];\r\n }\r\n this.showSerach = !result;\r\n return result;\r\n }),\r\n debounceTime(300),\r\n tap(() => {\r\n this.filteredOptions = [];\r\n this.isLoading = true;\r\n }),\r\n switchMap((value: string) =>\r\n this.serviceRef\r\n .getAll(1, 10, this.sortFields, `${this.searchFields.replace(',', '|')}@=*${value}`)\r\n .pipe(\r\n finalize(() => {\r\n this.isLoading = false;\r\n })\r\n )\r\n ),\r\n takeUntil(this._onDestroy)\r\n )\r\n .subscribe((options: any) => {\r\n this.filteredOptions = options.getModels();\r\n });\r\n }\r\n\r\n onSelected($event) {\r\n const value = $event.option.value;\r\n this.searchControl.setValue(value);\r\n this.modelSelected.emit(value);\r\n if (this.valueField in value) {\r\n this.setControlValue(value[this.valueField]);\r\n }\r\n\r\n }\r\n setControlValue(value: any) {\r\n this.value = value;\r\n this.ngControl.control.setValue(value);\r\n }\r\n displayWith(value: any) {\r\n return this.getConcatedFields(value);\r\n }\r\n\r\n clearSelection() {\r\n this.modelSelected.emit(null);\r\n this.setControlValue(null);\r\n this.searchControl.setValue(null);\r\n this.filteredOptions = this.options;\r\n }\r\n\r\n getConcatedFields(option): string {\r\n if (!option) return null;\r\n const filtersArr = this.displayFields.split(',');\r\n return filtersArr.reduce((acc, cv) => {\r\n return acc.concat(option[cv] + ' ');\r\n }, '');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.searchControl = null;\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n this._onDestroy.next();\r\n this._onDestroy.complete();\r\n }\r\n getSearchText(): string {\r\n return `Enter ${this.minLengthTerm} characters to start search`;\r\n\r\n }\r\n writeValue(model: T | null): void {\r\n console.log(model);\r\n this.value = model;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n private loadModel(id: string) {\r\n //Load the model from API to display the value\r\n let needLoad = false;\r\n if (id) {\r\n if (!this.searchControl.value)\r\n needLoad = true\r\n else {\r\n if (this.searchControl.value[this.valueField] !== id) {\r\n needLoad = true\r\n }\r\n }\r\n }\r\n if (needLoad) {\r\n this.serviceRef.get(id).subscribe({\r\n next: (model: T) => {\r\n this.options.push(model);\r\n this.filteredOptions = this.options;\r\n this.searchControl.setValue(model);\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>","import { CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';\nexport function GridLayout(translateKey: string, width?: number | null,\n grow: 0 | 1 = 0, shrink: 0 | 1 = 0, subProperty?: string | null,\n formating: GridLayoutFormat = GridLayoutFormat.none,\n format: string = '', order: number = 0, textAlign: CellTextAlign = CellTextAlign.left) {\n return (target: any, propertyName: string | symbol) => {\n const annotations = Reflect.getMetadata('GridLayout', target) || [];\n let propName = propertyName\n if (subProperty) {\n propName = propertyName.toString() + '.' + subProperty;\n }\n annotations.push({\n propertyName: propName,\n translateKey,\n width,\n grow,\n shrink,\n formating,\n format,\n order,\n textAlign\n });\n\n Reflect.defineMetadata('GridLayout', annotations, target);\n };\n}\n","import { CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';\nexport class GridLayoutModel {\n constructor(\n propertyName: string, translateKey: any = null, width: any = null, grow: 0 | 1 = 0, shrink: 0 | 1 = 0,\n formating: GridLayoutFormat = GridLayoutFormat.none, format = '', order = 0,\n textAlign: CellTextAlign = CellTextAlign.left) {\n this.propertyName = propertyName;\n this.translateKey = translateKey;\n this.width = width;\n this.grow = grow;\n this.shrink = shrink;\n this.formating = formating;\n this.format = format;\n this.order = order;\n this.textAlign = textAlign;\n }\n public propertyName: string;\n public translateKey: string;\n public width: number;\n public grow: 0 | 1;\n public shrink: 0 | 1;\n public formating: GridLayoutFormat = GridLayoutFormat.none;\n public format: string;\n public order: number = 0;\n public textAlign: CellTextAlign = CellTextAlign.left;\n}\n","import { BaseModel } from '@rosoftlab/core';\nimport { GridLayoutModel } from './grid-layout';\nexport class MaterialBaseModel extends BaseModel {\n\n public getGridLayout(): GridLayoutModel[] {\n const result = Array<GridLayoutModel>();\n const gridLayout: any = Reflect.getMetadata('GridLayout', this);\n if (gridLayout) {\n for (const layout of gridLayout) {\n const data = new GridLayoutModel(layout.propertyName, layout.translateKey,\n layout.width, layout.shrink, layout.grow,\n layout.formating, layout.format, layout.order, layout.textAlign);\n result.push(data);\n }\n }\n return result.sort(function (a, b) { return a.order - b.order; })\n //result;\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DialogServiceImpl","i4","i14","i2","i5","i6","i7","i8","i9","i10"],"mappings":"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"}
1
+ {"version":3,"file":"rosoftlab-material.mjs","sources":["../../../../projects/rosoftlab/material/src/services/dialog.service-implementation.ts","../../../../projects/rosoftlab/material/src/lib/rsl-material-module.ts","../../../../projects/rosoftlab/material/src/lib/services/grid-layout.service.ts","../../../../projects/rosoftlab/material/src/lib/components/generic-table/generic-table.component.ts","../../../../projects/rosoftlab/material/src/lib/components/generic-table/generic-table.component.html","../../../../projects/rosoftlab/material/src/lib/components/searchable-dropdown/searchable-dropdown.component.ts","../../../../projects/rosoftlab/material/src/lib/components/searchable-dropdown/searchable-dropdown.component.html","../../../../projects/rosoftlab/material/src/lib/decorators/grid-layout.decorator.ts","../../../../projects/rosoftlab/material/src/lib/models/grid-layout.ts","../../../../projects/rosoftlab/material/src/lib/models/material-base-model.ts","../../../../projects/rosoftlab/material/src/public-api.ts","../../../../projects/rosoftlab/material/src/rosoftlab-material.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DialogService } from '@rosoftlab/core';\r\n\r\nimport { from, Observable } from 'rxjs';\r\nimport Swal from 'sweetalert2';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Async modal dialog service\r\n * DialogService makes this app easier to test by faking this service.\r\n * TODO: better modal implementation that doesn't use window.confirm\r\n */\r\n@Injectable()\r\nexport class DialogServiceMaterial implements DialogService {\r\n /**\r\n * Ask user to confirm an action. `message` explains the action and choices.\r\n * Returns observable resolving to `true`=confirm or `false`=cancel\r\n */\r\n constructor() { }\r\n confirm(message?: string, text?: string,\r\n confirmButtonText: string = 'Delete',\r\n cancelButtonText: string = 'Cancel'): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n title: message || 'Are you sure?',\r\n icon: 'warning',\r\n text: text || '',\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n customClass: {\r\n confirmButton: 'btn btn-red btn-fill btn-wd',\r\n cancelButton: 'btn btn-grey btn-fill btn-wd',\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true\r\n })\r\n\r\n .then((result: any) => {\r\n if (result.value) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showSaveMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n timer: 2000,\r\n showConfirmButton: false,\r\n // customClass: 'overflow-hidden',\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n\r\n showErrorMessage(e: any, message?: string): Observable<boolean> {\r\n if (!message) {\r\n message = 'Validation errors';\r\n }\r\n if (e instanceof HttpErrorResponse) {\r\n // Validation errors\r\n if (e.status === 400) {\r\n const errors = e.error.errors;\r\n if (errors) {\r\n errors.forEach(error => {\r\n message += error.field + ' ' + error.detail + '\\n';\r\n }); \r\n }\r\n }\r\n }\r\n const confirmation = Swal.fire({\r\n icon: 'error',\r\n title: message,\r\n // timer: 2000,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n } \r\n}\r\n\r\n","import { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\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 { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule, MatOptionModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nconst COMMON_MODULES = [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule,\r\n MatDialogModule, MatExpansionModule, MatGridListModule, MatIconModule,\r\n MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule,\r\n MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule,\r\n MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatTableModule, MatTabsModule, MatToolbarModule,\r\n MatTooltipModule, MatOptionModule, DragDropModule, MatDividerModule, PortalModule, MatTreeModule, MatBadgeModule, MatStepperModule,\r\n CdkStepperModule\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n ...COMMON_MODULES,\r\n TranslateModule.forRoot({})\r\n ],\r\n exports: [\r\n ...COMMON_MODULES,\r\n TranslateModule\r\n ],\r\n})\r\nexport class RSLMaterialModule {\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BaseService } from '@rosoftlab/core';\nimport { MaterialBaseModel } from '../models';\nimport { GridLayoutModel } from '../models/grid-layout';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GridLayoutService<T extends MaterialBaseModel> {\n\n constructor(protected baseService: BaseService<T>) { }\n public getGridLayout(): GridLayoutModel[] {\n var model = this.baseService.newModel();\n return model.getGridLayout();\n }\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DatePipe, DecimalPipe, PercentPipe } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { BaseQueryData, BaseService, CellTextAlign, GridLayoutFormat, Rule } from '@rosoftlab/core';\r\nimport * as jsonLogic from 'json-logic-js/logic.js';\r\nimport { Observable, Subject, Subscription, fromEvent, merge, of } from 'rxjs';\r\nimport { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { DialogServiceMaterial } from '../../../services/dialog.service-implementation';\r\nimport { GridLayoutModel, MaterialBaseModel } from '../../models';\r\nimport { RSLMaterialModule } from '../../rsl-material-module';\r\nimport { GridLayoutService } from '../../services';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'rsl-generic-table',\r\n templateUrl: './generic-table.component.html',\r\n styleUrls: ['./generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [RSLMaterialModule]\r\n})\r\nexport class GenericTableComponent<T extends MaterialBaseModel> implements OnInit, OnChanges, AfterViewInit {\r\n // displayedColumns = ['code']; //, 'name', 'cif', 'city', 'address', 'state', 'priceListName', 'delete'];\r\n @Input() modelType: new (...args: any[]) => T;\r\n @Input() baseService: BaseService<T>;\r\n @Input() gridLayoutService?: GridLayoutService<T>;\r\n @Input() editLink: string;\r\n @Input() defaultSort: string = null;\r\n @Input() defaultSortDirection: SortDirection = null;\r\n @Input() deleteDisableRule: Rule[];\r\n @Input() deletePropertyName: string = 'name';\r\n @Input() hasSearch: boolean;\r\n @Input() searchFields: string;\r\n @Input() defaultFilter: string;\r\n @Input() allowReorderItems: boolean;\r\n @Input() stickyColumns: string = null;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n @Input() allowEdit: boolean = true;\r\n @Input() popupEdit: boolean = false;\r\n @Input() customInclude: string = null;\r\n @Input() changeItemPosition: (prevItem: T, currentItem: T) => boolean;\r\n @Input() infiniteScroll: boolean = false;\r\n dataSource: MatTableDataSource<T> = new MatTableDataSource();\r\n resultsLength = 0;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n filterValue: string;\r\n private filterChanged: Subject<string> = new Subject<string>();\r\n private filterChangedSubscription: Subscription\r\n\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n @ViewChild('table') table: MatTable<any>;\r\n @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n resizeSubscription: any;\r\n\r\n selectedItem: T;\r\n gridLayout: GridLayoutModel[];\r\n @Output() selectedObject: EventEmitter<T> = new EventEmitter<T>();\r\n @Output() click: EventEmitter<{ propertyName: string, model: T }> = new EventEmitter<{ propertyName: string, model: T }>();\r\n @Output() editModel: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n displayedColumns: string[];\r\n // ruleEngineService: RuleEngineService<T>;\r\n constructor(\r\n public dialogService: DialogServiceMaterial,\r\n public router: Router,\r\n private datePipe: DatePipe,\r\n private numberPipe: DecimalPipe,\r\n private percentPipe: PercentPipe,\r\n private renderer: Renderer2\r\n ) {\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.baseService !== undefined || this.baseService !== null) {\r\n if (this.gridLayoutService != null) {\r\n this.gridLayout = this.gridLayoutService.getGridLayout();\r\n }\r\n else {\r\n const model = this.baseService.newModel();\r\n this.gridLayout = model.getGridLayout();\r\n }\r\n this.displayedColumns = [];\r\n if (this.allowReorderItems) {\r\n this.displayedColumns.push('position')\r\n }\r\n this.displayedColumns.push.apply(this.displayedColumns, this.gridLayout.map(x => x.propertyName));\r\n if (!this.editOnClick && !this.editOnDblClick && this.allowEdit) {\r\n this.displayedColumns.push('delete');\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.filterChangedSubscription = this.filterChanged\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged()\r\n )\r\n .subscribe(newText => {\r\n if (newText.length >= 3 || newText.length == 0) {\r\n this.filterValue = newText;\r\n\r\n this.paginator.pageIndex = 0;\r\n this.refreshForm();\r\n }\r\n });\r\n // this.getGridLayout();\r\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);\r\n this.paginator.pageSize = 15;\r\n if (this.defaultSort) {\r\n this.sort.active = this.defaultSort;\r\n if (this.defaultSortDirection) {\r\n this.sort.direction = this.defaultSortDirection;\r\n } else {\r\n this.sort.direction = 'asc';\r\n }\r\n }\r\n\r\n // this.dataSource.paginator = this.paginator;\r\n merge(this.sort.sortChange, this.paginator.page)\r\n .pipe(\r\n startWith({}),\r\n switchMap(() => {\r\n this.isLoadingResults = true;\r\n return this.getData();\r\n }),\r\n map(data => {\r\n // Flip flag to show that loading has finished.\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n if (data) {\r\n this.resultsLength = data.getMeta().meta.count;\r\n return data.getModels();\r\n } else {\r\n this.resultsLength = 0;\r\n return [];\r\n }\r\n }),\r\n catchError(() => {\r\n this.isLoadingResults = false;\r\n // Catch if the GitHub API has reached its rate limit. Return empty data.\r\n this.isRateLimitReached = true;\r\n return of([]);\r\n })\r\n ).subscribe(data => {\r\n // if (this.infiniteScroll) {\r\n // let oldData = this.dataSource.data ?? null;\r\n // // if (oldData.length === 0) {\r\n // // oldData = data;\r\n // // } else {\r\n // oldData=oldData.concat(data);\r\n // // }\r\n // this.dataSource.data = oldData;\r\n // }\r\n // else {\r\n this.dataSource.data = data;\r\n // }\r\n });\r\n // this.paginator.nextPage()\r\n }\r\n getData(): Observable<BaseQueryData<T>> {\r\n this.isLoadingResults = true;\r\n const pageIndex = (this.paginator.pageIndex || 0) + 1;\r\n const pageSize = this.paginator.pageSize || 20;\r\n const filters = [];\r\n\r\n let sorts = '';\r\n if (this.sort.active) {\r\n if (this.sort.direction === 'desc') {\r\n sorts = '-' + this.sort.active;\r\n } else {\r\n sorts = this.sort.active;\r\n }\r\n }\r\n if (this.hasSearch) {\r\n if (this.filterValue) {\r\n // const filtersArr = this.searchFields.split(\",\");\r\n // filtersArr.forEach(element => {\r\n // filters.push(element + '@=*' + this.filterValue);\r\n // });\r\n const y = '(' + this.searchFields.replace(',', '|') + ')';\r\n filters.push(y + '@=*' + this.filterValue);\r\n }\r\n }\r\n if (this.defaultFilter) {\r\n filters.push(this.defaultFilter);\r\n }\r\n const filtersValue = filters.join(', ');\r\n return this.baseService.getAll(pageIndex, pageSize, sorts, filtersValue, this.customInclude);\r\n }\r\n\r\n refreshForm() {\r\n this.getData().subscribe(data => {\r\n if (data) {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = data.getMeta().meta.count;\r\n this.dataSource.data = data.getModels();\r\n } else {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = 0;\r\n this.dataSource.data = [];\r\n }\r\n });\r\n }\r\n\r\n\r\n highlight(element: any) {\r\n if (this.selectedItem) {\r\n this.selectedItem.highlighted = element.highlighted;\r\n }\r\n this.selectedItem = null;\r\n element.highlighted = !element.highlighted;\r\n if (element.highlighted) {\r\n this.selectedItem = element;\r\n this.selectedObject.emit(element);\r\n } else {\r\n this.selectedObject.emit(null);\r\n }\r\n }\r\n deleteObject(model: T) {\r\n const msg = 'Do you want to delete ' + model[this.deletePropertyName] + '?';\r\n this.dialogService.confirm(msg).subscribe((response: boolean) => {\r\n if (response) {\r\n this.baseService.delete(model.id).subscribe(() => {\r\n const tempData = [];\r\n this.selectedObject.emit(null);\r\n this.dataSource.data.map((item) => {\r\n if (item.id !== model.id) {\r\n tempData.push(item);\r\n }\r\n });\r\n this.dataSource.data = tempData;\r\n });\r\n }\r\n });\r\n }\r\n editObject(model: T) {\r\n if (!this.popupEdit) {\r\n const id = model.id;\r\n this.router.navigate([this.editLink, id]);\r\n } else {\r\n this.editModel.emit(model);\r\n }\r\n }\r\n getFlexStyle(column: GridLayoutModel) {\r\n if (column.width) {\r\n const style = column.grow + ' ' + column.shrink + ' ' + column.width + 'px';\r\n return style;\r\n }\r\n return null;\r\n }\r\n\r\n getCellTextAlign(column: GridLayoutModel) {\r\n return column.textAlign ?? CellTextAlign.left;\r\n }\r\n\r\n showPictureCell(column: GridLayoutModel): boolean {\r\n return (column?.formating ?? GridLayoutFormat.none) === GridLayoutFormat.picture;\r\n }\r\n\r\n deleteDisabled(model: T) {\r\n if (this.deleteDisableRule) {\r\n return this.evaluateRule(this.deleteDisableRule, model);\r\n } else {\r\n return false;\r\n }\r\n }\r\n cellClick(model: T, propertyName: string) {\r\n this.click.emit({ propertyName, model });\r\n }\r\n\r\n private evaluateRule(rules: Rule[], model: T): boolean {\r\n let result = true;\r\n rules.forEach(rule => {\r\n let jsonRule: any;\r\n if (typeof rule.rule === 'string') {\r\n jsonRule = JSON.parse(rule.rule);\r\n } else {\r\n jsonRule = rule.rule;\r\n }\r\n if (rule.parameters) {\r\n const data = '{' + rule.parameters.map((item: string) => {\r\n return '\"' + item + '\":\"' + model[item] + '\"';\r\n }).join(',') + '}';\r\n result = jsonLogic.apply(jsonRule, JSON.parse(data));\r\n } else {\r\n result = jsonLogic.apply(jsonRule);\r\n }\r\n });\r\n return result;\r\n }\r\n getCelValue(row: any, propertyName: string): any {\r\n if (!row)\r\n return \"\";\r\n // if (propertyName == 'kompetenzenStdev')\r\n // console.log(propertyName);\r\n if (propertyName.indexOf('.') === -1) {\r\n var gridLayout = this.gridLayout.find(f => f.propertyName.indexOf(propertyName) > -1);\r\n return this.getFormatedValue(gridLayout, row[propertyName]);\r\n } else {\r\n const prop = propertyName.split('.')[0];\r\n const subProp = propertyName.replace(prop + '.', '');\r\n return this.getCelValue(row[prop], subProp);\r\n }\r\n }\r\n private getFormatedValue(gridLayout: GridLayoutModel, value: any) {\r\n\r\n if (gridLayout) {\r\n switch (gridLayout.formating) {\r\n case GridLayoutFormat.date:\r\n return this.datePipe.transform(value, gridLayout.format);\r\n break;\r\n case GridLayoutFormat.number:\r\n return this.numberPipe.transform(value, gridLayout.format);\r\n case GridLayoutFormat.percent:\r\n const valuePrc = value / 100;\r\n return this.percentPipe.transform(valuePrc, gridLayout.format);\r\n default:\r\n return value;\r\n break;\r\n }\r\n }\r\n return value;\r\n }\r\n applyFilter(event: Event) {\r\n }\r\n dropTable(event: CdkDragDrop<any>) {\r\n if (this.changeItemPosition) {\r\n const prevItem = this.dataSource.data[event.previousIndex];\r\n const currentItem = this.dataSource.data[event.currentIndex];\r\n\r\n if (this.changeItemPosition(prevItem, currentItem)) {\r\n const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);\r\n moveItemInArray(this.dataSource.data, prevIndex, event.currentIndex);\r\n this.table.renderRows();\r\n }\r\n }\r\n }\r\n isColumnSticky(name: string): boolean {\r\n if (this.stickyColumns) {\r\n const filtersArr = this.stickyColumns.split(\",\");\r\n return filtersArr.findIndex(f => f == name) !== -1;\r\n }\r\n return false;\r\n }\r\n updateElement(model: T) {\r\n //Find if element exist\r\n var currentElement = this.dataSource.data.find(f => f.id === model.id);\r\n if (currentElement !== null) {\r\n const index = this.dataSource.data.indexOf(currentElement);\r\n this.dataSource.data[index] = model;\r\n } else {\r\n this.dataSource.data.push(model);\r\n }\r\n const newData = [...this.dataSource.data];\r\n this.dataSource.data = newData;\r\n this.dataSource._updateChangeSubscription();\r\n }\r\n public ngAfterViewInit(): void {\r\n fromEvent(this.matTableRef.nativeElement, 'scroll')\r\n .pipe(debounceTime(700))\r\n .subscribe((e: any) => this.onTableScroll(e));\r\n }\r\n onTableScroll(e) {\r\n const tableViewHeight = e.target.offsetHeight // viewport: ~500px\r\n const tableScrollHeight = e.target.scrollHeight // length of all table\r\n const scrollLocation = e.target.scrollTop; // how far user scrolled\r\n\r\n // If the user has scrolled within 200px of the bottom, add more data\r\n const scrollThreshold = 200;\r\n\r\n const scrollUpLimit = scrollThreshold;\r\n if (scrollLocation < scrollUpLimit && this.paginator.pageIndex > 0) {\r\n // this.firstPage--;\r\n console.log(`onTableScroll() UP: firstPage decreased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n // this.fetchData();\r\n\r\n this.scrollTo(tableScrollHeight / 2 - 2 * tableViewHeight);\r\n }\r\n\r\n const scrollDownLimit = tableScrollHeight - tableViewHeight - scrollThreshold;\r\n if (scrollLocation > scrollDownLimit && this.paginator.pageIndex < this.paginator.getNumberOfPages()) {\r\n // this.firstPage++;\r\n console.log(`onTableScroll(): firstPage increased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n this.paginator.nextPage();\r\n // this.scrollTo(tableScrollHeight / 2 + tableViewHeight);\r\n }\r\n }\r\n private scrollTo(position: number): void {\r\n this.renderer.setProperty(this.matTableRef.nativeElement, 'scrollTop', position);\r\n }\r\n getCellClass(model: T, property: string) {\r\n return model.getCellClass(property);\r\n }\r\n}\r\n","<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, UntypedFormControl } from '@angular/forms';\r\nimport { BaseModel, BaseQueryData, BaseService } from '@rosoftlab/core';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators';\r\nimport { RSLMaterialModule } from '../../rsl-material-module';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'rsl-searchable-dropdown',\r\n templateUrl: './searchable-dropdown.component.html',\r\n host: {\r\n '[class.example-floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n '[attr.aria-describedby]': 'describedBy',\r\n },\r\n imports: [RSLMaterialModule]\r\n})\r\nexport class SearchableDropdownComponent<T extends BaseModel> implements OnInit, OnDestroy, ControlValueAccessor {\r\n static nextId = 0;\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n errorState = false;\r\n id = `rsl-searchable-dropdown-${SearchableDropdownComponent.nextId++}`;\r\n\r\n // label for the search dropdown\r\n @Input() label: string = '';\r\n\r\n //Name of the form control\r\n @Input() fControlName: string;\r\n\r\n //Reference of the service\r\n @Input() serviceRef: BaseService<T>;\r\n\r\n //Fields for filtering\r\n @Input() searchFields: string;\r\n\r\n //Fields for display \r\n @Input() displayFields: string;\r\n\r\n //Fields for sorting the API data\r\n @Input() sortFields: string = '';\r\n\r\n // The value used to populate the control value\r\n @Input() valueField: string = 'id';\r\n\r\n // The minumum char for search\r\n @Input() minLengthTerm: number = 3;\r\n\r\n // The preload x elements\r\n @Input() preloadElementsCount: number;\r\n\r\n @Output() modelSelected: EventEmitter<BaseModel> = new EventEmitter();\r\n\r\n\r\n get empty() {\r\n return !this.value;\r\n }\r\n\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n\r\n\r\n @Input()\r\n get value(): any | null {\r\n return this._value;\r\n }\r\n set value(value: any | null) {\r\n if (value)\r\n if (this._value !== value) {\r\n this.loadModel(value);\r\n }\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n private _value: any;\r\n // Search form control\r\n searchControl: AbstractControl;\r\n\r\n showSerach = true;\r\n isLoading = false;\r\n options = [];\r\n filteredOptions = [];\r\n /** Subject that emits when the component has been destroyed. */\r\n protected _onDestroy = new Subject<void>();\r\n\r\n constructor(\r\n private _focusMonitor: FocusMonitor,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n @Optional() @Self() public ngControl: NgControl\r\n ) {\r\n\r\n this.searchControl = new UntypedFormControl('');\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n if (!this.displayFields)\r\n this.displayFields = this.searchFields;\r\n\r\n this.loadModel(this.ngControl.value)\r\n\r\n if (this.preloadElementsCount) {\r\n this.serviceRef.getAll(1, this.preloadElementsCount).subscribe({\r\n next: (data: BaseQueryData<T>) => {\r\n this.showSerach = false;\r\n this.options = data.getModels();\r\n this.filteredOptions = this.options;\r\n }\r\n })\r\n }\r\n\r\n this.searchControl.valueChanges\r\n .pipe(\r\n filter((res) => {\r\n const result = res !== null && res.length >= this.minLengthTerm;\r\n if (!result) {\r\n this.options = [];\r\n this.filteredOptions = [];\r\n }\r\n this.showSerach = !result;\r\n return result;\r\n }),\r\n debounceTime(300),\r\n tap(() => {\r\n this.filteredOptions = [];\r\n this.isLoading = true;\r\n }),\r\n switchMap((value: string) =>\r\n this.serviceRef\r\n .getAll(1, 10, this.sortFields, `${this.searchFields.replace(',', '|')}@=*${value}`)\r\n .pipe(\r\n finalize(() => {\r\n this.isLoading = false;\r\n })\r\n )\r\n ),\r\n takeUntil(this._onDestroy)\r\n )\r\n .subscribe((options: any) => {\r\n this.filteredOptions = options.getModels();\r\n });\r\n }\r\n\r\n onSelected($event) {\r\n const value = $event.option.value;\r\n this.searchControl.setValue(value);\r\n this.modelSelected.emit(value);\r\n if (this.valueField in value) {\r\n this.setControlValue(value[this.valueField]);\r\n }\r\n\r\n }\r\n setControlValue(value: any) {\r\n this.value = value;\r\n this.ngControl.control.setValue(value);\r\n }\r\n displayWith(value: any) {\r\n return this.getConcatedFields(value);\r\n }\r\n\r\n clearSelection() {\r\n this.modelSelected.emit(null);\r\n this.setControlValue(null);\r\n this.searchControl.setValue(null);\r\n this.filteredOptions = this.options;\r\n }\r\n\r\n getConcatedFields(option): string {\r\n if (!option) return null;\r\n const filtersArr = this.displayFields.split(',');\r\n return filtersArr.reduce((acc, cv) => {\r\n return acc.concat(option[cv] + ' ');\r\n }, '');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.searchControl = null;\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n this._onDestroy.next();\r\n this._onDestroy.complete();\r\n }\r\n getSearchText(): string {\r\n return `Enter ${this.minLengthTerm} characters to start search`;\r\n\r\n }\r\n writeValue(model: T | null): void {\r\n console.log(model);\r\n this.value = model;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n private loadModel(id: string) {\r\n //Load the model from API to display the value\r\n let needLoad = false;\r\n if (id) {\r\n if (!this.searchControl.value)\r\n needLoad = true\r\n else {\r\n if (this.searchControl.value[this.valueField] !== id) {\r\n needLoad = true\r\n }\r\n }\r\n }\r\n if (needLoad) {\r\n this.serviceRef.get(id).subscribe({\r\n next: (model: T) => {\r\n this.options.push(model);\r\n this.filteredOptions = this.options;\r\n this.searchControl.setValue(model);\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>","import { CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';\nexport function GridLayout(translateKey: string, width?: number | null,\n grow: 0 | 1 = 0, shrink: 0 | 1 = 0, subProperty?: string | null,\n formating: GridLayoutFormat = GridLayoutFormat.none,\n format: string = '', order: number = 0, textAlign: CellTextAlign = CellTextAlign.left) {\n return (target: any, propertyName: string | symbol) => {\n const annotations = Reflect.getMetadata('GridLayout', target) || [];\n let propName = propertyName\n if (subProperty) {\n propName = propertyName.toString() + '.' + subProperty;\n }\n annotations.push({\n propertyName: propName,\n translateKey,\n width,\n grow,\n shrink,\n formating,\n format,\n order,\n textAlign\n });\n\n Reflect.defineMetadata('GridLayout', annotations, target);\n };\n}\n","import { CellTextAlign, GridLayoutFormat } from '@rosoftlab/core';\nexport class GridLayoutModel {\n constructor(\n propertyName: string, translateKey: any = null, width: any = null, grow: 0 | 1 = 0, shrink: 0 | 1 = 0,\n formating: GridLayoutFormat = GridLayoutFormat.none, format = '', order = 0,\n textAlign: CellTextAlign = CellTextAlign.left) {\n this.propertyName = propertyName;\n this.translateKey = translateKey;\n this.width = width;\n this.grow = grow;\n this.shrink = shrink;\n this.formating = formating;\n this.format = format;\n this.order = order;\n this.textAlign = textAlign;\n }\n public propertyName: string;\n public translateKey: string;\n public width: number;\n public grow: 0 | 1;\n public shrink: 0 | 1;\n public formating: GridLayoutFormat = GridLayoutFormat.none;\n public format: string;\n public order: number = 0;\n public textAlign: CellTextAlign = CellTextAlign.left;\n}\n","import { BaseModel } from '@rosoftlab/core';\nimport { GridLayoutModel } from './grid-layout';\nexport class MaterialBaseModel extends BaseModel {\n\n public getGridLayout(): GridLayoutModel[] {\n const result = Array<GridLayoutModel>();\n const gridLayout: any = Reflect.getMetadata('GridLayout', this);\n if (gridLayout) {\n for (const layout of gridLayout) {\n const data = new GridLayoutModel(layout.propertyName, layout.translateKey,\n layout.width, layout.shrink, layout.grow,\n layout.formating, layout.format, layout.order, layout.textAlign);\n result.push(data);\n }\n }\n return result.sort(function (a, b) { return a.order - b.order; })\n //result;\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DialogServiceMaterial","i4","i14","i2","i5","i6","i7","i8","i9","i10"],"mappings":"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"}
@@ -7,12 +7,12 @@ import { MatTable, MatTableDataSource } from '@angular/material/table';
7
7
  import { Router } from '@angular/router';
8
8
  import { BaseQueryData, BaseService, CellTextAlign, Rule } from '@rosoftlab/core';
9
9
  import { Observable } from 'rxjs';
10
- import { DialogServiceImpl } from '../../../services/dialog.service-implementation';
10
+ import { DialogServiceMaterial } from '../../../services/dialog.service-implementation';
11
11
  import { GridLayoutModel, MaterialBaseModel } from '../../models';
12
12
  import { GridLayoutService } from '../../services';
13
13
  import * as i0 from "@angular/core";
14
14
  export declare class GenericTableComponent<T extends MaterialBaseModel> implements OnInit, OnChanges, AfterViewInit {
15
- dialogService: DialogServiceImpl;
15
+ dialogService: DialogServiceMaterial;
16
16
  router: Router;
17
17
  private datePipe;
18
18
  private numberPipe;
@@ -60,7 +60,7 @@ export declare class GenericTableComponent<T extends MaterialBaseModel> implemen
60
60
  }>;
61
61
  editModel: EventEmitter<T>;
62
62
  displayedColumns: string[];
63
- constructor(dialogService: DialogServiceImpl, router: Router, datePipe: DatePipe, numberPipe: DecimalPipe, percentPipe: PercentPipe, renderer: Renderer2);
63
+ constructor(dialogService: DialogServiceMaterial, router: Router, datePipe: DatePipe, numberPipe: DecimalPipe, percentPipe: PercentPipe, renderer: Renderer2);
64
64
  ngOnChanges(): void;
65
65
  ngOnInit(): void;
66
66
  getData(): Observable<BaseQueryData<T>>;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@rosoftlab/material",
3
- "version": "1.0.0-alpha-7",
3
+ "version": "1.0.0-alpha-8",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.2.1",
6
6
  "@angular/core": "^16.2.1",
7
- "@rosoftlab/core": "1.0.0-alpha-7",
7
+ "@rosoftlab/core": "1.0.0-alpha-8",
8
8
  "@sweetalert2/theme-material-ui": "^5.0.15",
9
9
  "@angular/material": "^16.0.0",
10
10
  "sweetalert2": "^11.7.5"
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
6
6
  * DialogService makes this app easier to test by faking this service.
7
7
  * TODO: better modal implementation that doesn't use window.confirm
8
8
  */
9
- export declare class DialogServiceImpl implements DialogService {
9
+ export declare class DialogServiceMaterial implements DialogService {
10
10
  /**
11
11
  * Ask user to confirm an action. `message` explains the action and choices.
12
12
  * Returns observable resolving to `true`=confirm or `false`=cancel
@@ -16,6 +16,6 @@ export declare class DialogServiceImpl implements DialogService {
16
16
  showSaveMessage(message?: string, title?: string): Observable<boolean>;
17
17
  showRegisteredMessage(message?: string, title?: string): Observable<boolean>;
18
18
  showErrorMessage(e: any, message?: string): Observable<boolean>;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<DialogServiceImpl, never>;
20
- static ɵprov: i0.ɵɵInjectableDeclaration<DialogServiceImpl>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogServiceMaterial, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<DialogServiceMaterial>;
21
21
  }