@one-paragon/angular-utilities 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +4 -4
  2. package/esm2022/table-builder/classes/filter-info.mjs +1 -1
  3. package/esm2022/table-builder/components/array-column.component.mjs +37 -29
  4. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +7 -6
  5. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +4 -5
  6. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +4 -5
  7. package/esm2022/table-builder/components/filter/filter.component.mjs +7 -8
  8. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +21 -15
  9. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +5 -5
  10. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +5 -5
  11. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +15 -11
  12. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +4 -5
  13. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +5 -5
  14. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +5 -6
  15. package/esm2022/table-builder/components/link-column.component.mjs +20 -19
  16. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +4 -5
  17. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +6 -6
  18. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +4 -3
  19. package/esm2022/table-builder/components/table-container/table-container.mjs +3 -3
  20. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +6 -6
  21. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +5 -5
  22. package/esm2022/table-builder/enums/filterTypes.mjs +30 -30
  23. package/esm2022/utilities/pipes/function.pipe.mjs +1 -1
  24. package/fesm2022/one-paragon-angular-utilities.mjs +169 -147
  25. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/table-builder/classes/filter-info.d.ts +94 -7
  28. package/table-builder/components/array-column.component.d.ts +1 -1
  29. package/table-builder/components/column-builder/column-builder.component.d.ts +1 -1
  30. package/table-builder/components/filter/filter.component.d.ts +93 -352
  31. package/table-builder/components/in-filter/in-filter.component.d.ts +1 -1
  32. package/table-builder/components/table-container/table-container-imports.d.ts +3 -2
  33. package/table-builder/enums/filterTypes.d.ts +47 -7
  34. package/utilities/pipes/function.pipe.d.ts +1 -1
@@ -3,7 +3,7 @@ import { filterTypeMap } from '../../classes/filter-info';
3
3
  import { FilterType } from '../../enums/filterTypes';
4
4
  import { FieldType } from '../../interfaces/report-def';
5
5
  import { MatCardModule } from '@angular/material/card';
6
- import { KeyValuePipe, NgFor, NgIf, NgSwitch, NgSwitchCase, NgTemplateOutlet } from '@angular/common';
6
+ import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';
7
7
  import { FormsModule } from '@angular/forms';
8
8
  import { PreventEnterDirective, SpaceCasePipe } from '../../../utilities';
9
9
  import { MatButtonModule } from '@angular/material/button';
@@ -30,7 +30,6 @@ import * as i9 from "@angular/material/select";
30
30
  import * as i10 from "@angular/material/core";
31
31
  import * as i11 from "@angular/material/radio";
32
32
  export class FilterComponent {
33
- ;
34
33
  constructor(state) {
35
34
  this.state = state;
36
35
  this.filterTypes = filterTypeMap;
@@ -49,19 +48,19 @@ export class FilterComponent {
49
48
  }
50
49
  }
51
50
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: FilterComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
52
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: FilterComponent, isStandalone: true, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "<mat-card appearance=\"outlined\" class=\"filter-card\" *ngIf=\"filter\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" [panelWidth]=\"null\">\r\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\r\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\r\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.DateTime\">\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\r\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n </ng-container>\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\r\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #Enum>\r\n <ng-container *ngIf='currentFilterType === FilterType.In' >\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n </ng-container>\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:-moz-fit-content;width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "aria-describedby", "panelClass", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i11.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i11.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: FilterComponent, isStandalone: true, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "@if (filter) {\r\n<mat-card appearance=\"outlined\" class=\"filter-card\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" [panelWidth]=\"null\">\r\n @for (kvp of filterTypes[filter.fieldType] | keyvalue; track kvp.key) {\r\n <mat-option [value]=\"kvp.value\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\r\n <ng-container *ngTemplateOutlet=\"String\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Boolean){\r\n <ng-container *ngTemplateOutlet=\"Boolean\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Date){\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.DateTime){\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Enum){\r\n <ng-container *ngTemplateOutlet=\"Enum\" />\r\n }\r\n\r\n @if(currentFilterType === FilterType.IsNull){\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n }\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n } @else {\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n }\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n @if(currentFilterType === FilterType.BooleanEquals){\r\n <div class=\"switch\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #Enum>\r\n @if(currentFilterType === FilterType.In){\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n\r\n }\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n}\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:-moz-fit-content;width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "aria-describedby", "panelClass", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i11.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i11.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
52
  }
54
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: FilterComponent, decorators: [{
55
54
  type: Component,
56
55
  args: [{ selector: 'tb-filter', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
57
- MatCardModule, NgIf, FormsModule, SpaceCasePipe, MatButtonModule, MatTooltipModule, MatIconModule,
58
- MatInputModule, MatSelectModule, KeyValuePipe, NgSwitch, NgSwitchCase, NumberFilterComponent,
56
+ MatCardModule, FormsModule, SpaceCasePipe, MatButtonModule, MatTooltipModule, MatIconModule,
57
+ MatInputModule, MatSelectModule, KeyValuePipe, NumberFilterComponent,
59
58
  DateFilterComponent, DateTimeFilterComponent, MatRadioModule, InFilterComponent, InListFilterComponent,
60
- PreventEnterDirective, NgFor, NgTemplateOutlet
61
- ], template: "<mat-card appearance=\"outlined\" class=\"filter-card\" *ngIf=\"filter\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" [panelWidth]=\"null\">\r\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\r\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\r\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.DateTime\">\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\r\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n </ng-container>\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\r\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #Enum>\r\n <ng-container *ngIf='currentFilterType === FilterType.In' >\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n </ng-container>\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:-moz-fit-content;width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
59
+ PreventEnterDirective, NgTemplateOutlet
60
+ ], template: "@if (filter) {\r\n<mat-card appearance=\"outlined\" class=\"filter-card\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" [panelWidth]=\"null\">\r\n @for (kvp of filterTypes[filter.fieldType] | keyvalue; track kvp.key) {\r\n <mat-option [value]=\"kvp.value\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n @if(filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\r\n <ng-container *ngTemplateOutlet=\"String\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency){\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Boolean){\r\n <ng-container *ngTemplateOutlet=\"Boolean\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Date){\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.DateTime){\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" />\r\n }\r\n @else if(filter.fieldType === FieldType.Enum){\r\n <ng-container *ngTemplateOutlet=\"Enum\" />\r\n }\r\n\r\n @if(currentFilterType === FilterType.IsNull){\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n }\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n @if(currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In){\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n } @else {\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" />\r\n }\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n @if(currentFilterType === FilterType.BooleanEquals){\r\n <div class=\"switch\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #Enum>\r\n @if(currentFilterType === FilterType.In){\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n\r\n }\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n}\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:-moz-fit-content;width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
62
61
  }], ctorParameters: () => [{ type: i1.TableStore }], propDecorators: { filter: [{
63
62
  type: Input
64
63
  }], close: [{
65
64
  type: Output
66
65
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUErQyxNQUFNLDJCQUEyQixDQUFDO0FBRXZHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBZTNFLE1BQU0sT0FBTyxlQUFlO0lBSU0sQ0FBQztJQUdqQyxZQUFvQixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBTnJDLGdCQUFXLEdBQUcsYUFBYSxDQUFDO1FBQzVCLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFDeEIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUVaLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRUksQ0FBQztJQUUxQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFDRCxPQUFPLENBQUMsTUFBa0IsRUFBRSxLQUFVO1FBQ3BDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7OEdBbEJVLGVBQWU7a0dBQWYsZUFBZSxnSUNsQzVCLHUySkFpRkEscTBCRHJETSxhQUFhLDJOQUFFLElBQUksNEZBQUUsV0FBVyxtaUNBQUUsYUFBYSxpREFBRSxlQUFlLHdVQUFFLGdCQUFnQiw0VEFBRSxhQUFhLG1MQUNqRyxjQUFjLHFqQkFBRSxlQUFlLGdyQkFBRSxZQUFZLGlEQUFFLFFBQVEsNkVBQUUsWUFBWSxxRkFBRSxxQkFBcUIsb0dBQzVGLG1CQUFtQixrR0FBRSx1QkFBdUIsc0dBQUUsY0FBYyx5aUJBQUUsaUJBQWlCLDRFQUFFLHFCQUFxQixxR0FDL0UsS0FBSyxtSEFBRSxnQkFBZ0I7OzJGQUd2QyxlQUFlO2tCQWIzQixTQUFTOytCQUNJLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsYUFBYSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhO3dCQUNqRyxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLHFCQUFxQjt3QkFDNUYsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDdEcscUJBQXFCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQjtxQkFDL0M7K0VBTU0sTUFBTTtzQkFBZCxLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaWx0ZXJUeXBlTWFwLCBGaWx0ZXJJbmZvLCBtYXBwZWRGaWVsZFR5cGVzLCBQYXJ0aWFsRmlsdGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2ZpbHRlclR5cGVzJztcclxuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZVBpcGUsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFByZXZlbnRFbnRlckRpcmVjdGl2ZSwgU3BhY2VDYXNlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTnVtYmVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbnVtYmVyLWZpbHRlci9udW1iZXItZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWZpbHRlci9kYXRlLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtdGltZS1maWx0ZXIvZGF0ZS10aW1lLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcclxuaW1wb3J0IHsgSW5GaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9pbi1maWx0ZXIvaW4tZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEluTGlzdEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vaW4tbGlzdC9pbi1saXN0LWZpbHRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RiLWZpbHRlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbHRlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBNYXRDYXJkTW9kdWxlLCBOZ0lmLCBGb3Jtc01vZHVsZSwgU3BhY2VDYXNlUGlwZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLFxyXG4gICAgICBNYXRJbnB1dE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBLZXlWYWx1ZVBpcGUsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE51bWJlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgRGF0ZUZpbHRlckNvbXBvbmVudCwgRGF0ZVRpbWVGaWx0ZXJDb21wb25lbnQsIE1hdFJhZGlvTW9kdWxlLCBJbkZpbHRlckNvbXBvbmVudCwgSW5MaXN0RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICBQcmV2ZW50RW50ZXJEaXJlY3RpdmUsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0XHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQge1xyXG4gIGZpbHRlclR5cGVzID0gZmlsdGVyVHlwZU1hcDtcclxuICBGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZTtcclxuICBGaWVsZFR5cGUgPSBGaWVsZFR5cGU7XHJcbiAgQElucHV0KCkgZmlsdGVyITogUGFydGlhbEZpbHRlcjs7XHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGN1cnJlbnRGaWx0ZXJUeXBlPzogRmlsdGVyVHlwZTtcclxuICBjb25zdHJ1Y3RvciggcHVibGljIHN0YXRlOiBUYWJsZVN0b3JlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJUeXBlID0gdGhpcy5maWx0ZXIuZmlsdGVyVHlwZTtcclxuICB9XHJcbiAgb25FbnRlcihmaWx0ZXI6IEZpbHRlckluZm8sIGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoZmlsdGVyLmZpbHRlclZhbHVlICE9IG51bGwgJiYgZmlsdGVyLmZpbHRlclR5cGUpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwib3V0bGluZWRcIiBjbGFzcz1cImZpbHRlci1jYXJkXCIgKm5nSWY9XCJmaWx0ZXJcIj5cclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgIDxmb3JtICNmb3JtPVwibmdGb3JtXCIgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXIoZm9ybS52YWx1ZSwkZXZlbnQpXCIgKGtleWRvd24uZXNjYXBlKT1cImNsb3NlLmVtaXQoKVwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmaWx0ZXJJZFwiIFtuZ01vZGVsXT1cImZpbHRlci5maWx0ZXJJZFwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImtleVwiIFtuZ01vZGVsXT1cImZpbHRlci5rZXlcIiAvPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmaWVsZFR5cGVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmllbGRUeXBlXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWQtcm93XCIgPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cImZpbHRlci1uYW1lXCI+e3soZmlsdGVyLmtleSB8IHNwYWNlQ2FzZSl9fSBGaWx0ZXI8L2g0PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uIHNtYWxsLWJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2UuZW1pdCgpO1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2xvc2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiBjb2xvcj1cInByaW1hcnlcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJteS1maWx0ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRmlsdGVyIFR5cGVcIiBuYW1lPVwiZmlsdGVyVHlwZVwiICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXJUeXBlXCIgW3BhbmVsV2lkdGhdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBrdnAgb2YgIGZpbHRlclR5cGVzW2ZpbHRlci5maWVsZFR5cGVdIHwga2V5dmFsdWUgXCIgW3ZhbHVlXT1cIiRhbnkoa3ZwLnZhbHVlKVswXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBrdnAua2V5IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZyB8fCBmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkgfHwgZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkxpbmsgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVW5rbm93biB8fCBmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuUGhvbmVOdW1iZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJTdHJpbmdcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICAgKm5nU3dpdGNoQ2FzZT1cImZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5OdW1iZXIgfHwgZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkN1cnJlbmN5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0Yi1udW1iZXItZmlsdGVyIFtpbmZvXT1cImZpbHRlclwiIFtDdXJyZW50RmlsdGVyVHlwZV09XCJjdXJyZW50RmlsdGVyVHlwZSFcIiA+PC90Yi1udW1iZXItZmlsdGVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ1N3aXRjaENhc2U9XCJmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiQm9vbGVhblwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5EYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0Yi1kYXRlLWZpbHRlciBbaW5mb109XCJmaWx0ZXJcIiBbQ3VycmVudEZpbHRlclR5cGVdPVwiY3VycmVudEZpbHRlclR5cGUhXCI+PC90Yi1kYXRlLWZpbHRlcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWVcIj5cclxuICAgICAgICAgICAgICAgIDx0Yi1kYXRlLXRpbWUtZmlsdGVyIFtpbmZvXT1cImZpbHRlclwiIFtDdXJyZW50RmlsdGVyVHlwZV09XCJjdXJyZW50RmlsdGVyVHlwZSFcIj48L3RiLWRhdGUtdGltZS1maWx0ZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSdmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuRW51bScgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJFbnVtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgKm5nSWY9XCJjdXJyZW50RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5Jc051bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbdmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzdGF0ZS5hZGRGaWx0ZXIoZm9ybS52YWx1ZSlcIiBkaXNhYmxlUmlwcGxlIFtkaXNhYmxlZF09XCJmb3JtLnZhbHVlLmZpbHRlclZhbHVlPT11bmRlZmluZWQgfHwgIWZvcm0udmFsdWUuZmlsdGVyVHlwZVwiPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICBcclxuICAgIDxuZy10ZW1wbGF0ZSAjU3RyaW5nPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJteS1maWx0ZXJcIiAqbmdJZj1cImN1cnJlbnRGaWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlLklzTnVsbCAmJiBjdXJyZW50RmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZS5JblwiPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudEZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuSW5cIj5cclxuICAgICAgICA8bGliLWluLWZpbHRlciBbdHlwZV09XCJGaWVsZFR5cGUuU3RyaW5nXCIgbmFtZT0nZmlsdGVyVmFsdWUnIFsobmdNb2RlbCldPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgLz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8bmctdGVtcGxhdGUgI0Jvb2xlYW4gPlxyXG4gICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiIFtuZ1N3aXRjaF09XCJjdXJyZW50RmlsdGVyVHlwZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCIgKm5nU3dpdGNoQ2FzZT1cIkZpbHRlclR5cGUuQm9vbGVhbkVxdWFsc1wiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gW3ZhbHVlXT1cInRydWVcIiBwcmV2ZW50RW50ZXI+VHJ1ZTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJmYWxzZVwiIHByZXZlbnRFbnRlcj5GYWxzZTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI0VudW0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2N1cnJlbnRGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLkluJyA+XHJcbiAgICAgICAgPHRiLWluLWxpc3QtZmlsdGVyIFtrZXldPSdmaWx0ZXIua2V5JyBuYW1lPSdmaWx0ZXJWYWx1ZScgWyhuZ01vZGVsKV09J2ZpbHRlci5maWx0ZXJWYWx1ZScgPjwvdGItaW4tbGlzdC1maWx0ZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZm9ybT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbjwvbWF0LWNhcmQ+XHJcbiJdfQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUE2QixNQUFNLDJCQUEyQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFlM0UsTUFBTSxPQUFPLGVBQWU7SUFPMUIsWUFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQU5yQyxnQkFBVyxHQUFHLGFBQWEsQ0FBQztRQUM1QixlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFWixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVJLENBQUM7SUFFMUMsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxDQUFDLE1BQWtCLEVBQUUsS0FBVTtRQUNwQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDOzhHQWxCVSxlQUFlO2tHQUFmLGVBQWUsZ0lDbEM1Qix5MElBd0ZBLHEwQkQ1RE0sYUFBYSwwTkFBRSxXQUFXLG1pQ0FBRSxhQUFhLGlEQUFFLGVBQWUsd1VBQUUsZ0JBQWdCLDRUQUFFLGFBQWEsbUxBQzNGLGNBQWMscWpCQUFFLGVBQWUsZ3JCQUFFLFlBQVksaURBQUUscUJBQXFCLG9HQUNwRSxtQkFBbUIsa0dBQUUsdUJBQXVCLHNHQUFFLGNBQWMseWlCQUFFLGlCQUFpQiw0RUFBRSxxQkFBcUIscUdBQy9FLGdCQUFnQjs7MkZBR2hDLGVBQWU7a0JBYjNCLFNBQVM7K0JBQ0ksV0FBVyxtQkFHSix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYTt3QkFDM0YsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUscUJBQXFCO3dCQUNwRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCO3dCQUN0RyxxQkFBcUIsRUFBRSxnQkFBZ0I7cUJBQ3hDOytFQU1NLE1BQU07c0JBQWQsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmlsdGVyVHlwZU1hcCwgRmlsdGVySW5mbywgUGFydGlhbEZpbHRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm8nO1xyXG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9maWx0ZXJUeXBlcyc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcclxuaW1wb3J0IHsgS2V5VmFsdWVQaXBlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFByZXZlbnRFbnRlckRpcmVjdGl2ZSwgU3BhY2VDYXNlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTnVtYmVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbnVtYmVyLWZpbHRlci9udW1iZXItZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWZpbHRlci9kYXRlLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtdGltZS1maWx0ZXIvZGF0ZS10aW1lLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcclxuaW1wb3J0IHsgSW5GaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9pbi1maWx0ZXIvaW4tZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEluTGlzdEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vaW4tbGlzdC9pbi1saXN0LWZpbHRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RiLWZpbHRlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbHRlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBNYXRDYXJkTW9kdWxlLCBGb3Jtc01vZHVsZSwgU3BhY2VDYXNlUGlwZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLFxyXG4gICAgICBNYXRJbnB1dE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBLZXlWYWx1ZVBpcGUsIE51bWJlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgRGF0ZUZpbHRlckNvbXBvbmVudCwgRGF0ZVRpbWVGaWx0ZXJDb21wb25lbnQsIE1hdFJhZGlvTW9kdWxlLCBJbkZpbHRlckNvbXBvbmVudCwgSW5MaXN0RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICBQcmV2ZW50RW50ZXJEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCB7XHJcbiAgZmlsdGVyVHlwZXMgPSBmaWx0ZXJUeXBlTWFwO1xyXG4gIEZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlO1xyXG4gIEZpZWxkVHlwZSA9IEZpZWxkVHlwZTtcclxuICBASW5wdXQoKSBmaWx0ZXIhOiBQYXJ0aWFsRmlsdGVyO1xyXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjdXJyZW50RmlsdGVyVHlwZT86IEZpbHRlclR5cGU7XHJcbiAgY29uc3RydWN0b3IoIHB1YmxpYyBzdGF0ZTogVGFibGVTdG9yZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyVHlwZSA9IHRoaXMuZmlsdGVyLmZpbHRlclR5cGU7XHJcbiAgfVxyXG4gIG9uRW50ZXIoZmlsdGVyOiBGaWx0ZXJJbmZvLCBldmVudDogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKGZpbHRlci5maWx0ZXJWYWx1ZSAhPSBudWxsICYmIGZpbHRlci5maWx0ZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUuYWRkRmlsdGVyKGZpbHRlcik7XHJcbiAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYgKGZpbHRlcikge1xyXG48bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgY2xhc3M9XCJmaWx0ZXItY2FyZFwiPlxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPGZvcm0gI2Zvcm09XCJuZ0Zvcm1cIiAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcihmb3JtLnZhbHVlLCRldmVudClcIiAoa2V5ZG93bi5lc2NhcGUpPVwiY2xvc2UuZW1pdCgpXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpbHRlcklkXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlcklkXCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwia2V5XCIgW25nTW9kZWxdPVwiZmlsdGVyLmtleVwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpZWxkVHlwZVwiIFtuZ01vZGVsXT1cImZpbHRlci5maWVsZFR5cGVcIiAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1yb3dcIiA+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwiZmlsdGVyLW5hbWVcIj57eyhmaWx0ZXIua2V5IHwgc3BhY2VDYXNlKX19IEZpbHRlcjwvaDQ+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b24gc21hbGwtYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbG9zZS5lbWl0KCk7XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm15LWZpbHRlclwiID5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBGaWx0ZXIgVHlwZVwiIG5hbWU9XCJmaWx0ZXJUeXBlXCIgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlclR5cGVcIiBbcGFuZWxXaWR0aF09XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBmb3IgKGt2cCBvZiBmaWx0ZXJUeXBlc1tmaWx0ZXIuZmllbGRUeXBlXSB8IGtleXZhbHVlOyB0cmFjayBrdnAua2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImt2cC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sga3ZwLmtleSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBAaWYoZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZyB8fCBmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkgfHwgZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkxpbmsgfHxcclxuICAgICAgICAgIGZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5Vbmtub3duIHx8IGZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5QaG9uZU51bWJlcikge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiU3RyaW5nXCIgLz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBlbHNlIGlmKGZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5OdW1iZXIgfHwgZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkN1cnJlbmN5KXtcclxuICAgICAgICAgICAgPHRiLW51bWJlci1maWx0ZXIgW2luZm9dPVwiZmlsdGVyXCIgW0N1cnJlbnRGaWx0ZXJUeXBlXT1cImN1cnJlbnRGaWx0ZXJUeXBlIVwiIC8+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAZWxzZSBpZihmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQm9vbGVhbil7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJCb29sZWFuXCIgLz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBlbHNlIGlmKGZpbHRlci5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKXtcclxuICAgICAgICAgICAgPHRiLWRhdGUtZmlsdGVyIFtpbmZvXT1cImZpbHRlclwiIFtDdXJyZW50RmlsdGVyVHlwZV09XCJjdXJyZW50RmlsdGVyVHlwZSFcIiAvPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGVsc2UgaWYoZmlsdGVyLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkRhdGVUaW1lKXtcclxuICAgICAgICAgICAgPHRiLWRhdGUtdGltZS1maWx0ZXIgW2luZm9dPVwiZmlsdGVyXCIgW0N1cnJlbnRGaWx0ZXJUeXBlXT1cImN1cnJlbnRGaWx0ZXJUeXBlIVwiIC8+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAZWxzZSBpZihmaWx0ZXIuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuRW51bSl7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJFbnVtXCIgLz5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYoY3VycmVudEZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuSXNOdWxsKXtcclxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbdmFsdWVdPVwidHJ1ZVwiPlRydWU8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gW3ZhbHVlXT1cImZhbHNlXCI+RmFsc2U8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzdGF0ZS5hZGRGaWx0ZXIoZm9ybS52YWx1ZSlcIiBkaXNhYmxlUmlwcGxlIFtkaXNhYmxlZF09XCJmb3JtLnZhbHVlLmZpbHRlclZhbHVlPT11bmRlZmluZWQgfHwgIWZvcm0udmFsdWUuZmlsdGVyVHlwZVwiPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgXHJcbiAgICBcclxuICAgIDxuZy10ZW1wbGF0ZSAjU3RyaW5nPlxyXG4gICAgICBAaWYoY3VycmVudEZpbHRlclR5cGUgIT09IEZpbHRlclR5cGUuSXNOdWxsICYmIGN1cnJlbnRGaWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlLkluKXtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJteS1maWx0ZXJcIj5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxsaWItaW4tZmlsdGVyIFt0eXBlXT1cIkZpZWxkVHlwZS5TdHJpbmdcIiBuYW1lPSdmaWx0ZXJWYWx1ZScgWyhuZ01vZGVsKV09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8bmctdGVtcGxhdGUgI0Jvb2xlYW4gPlxyXG4gICAgICBAaWYoY3VycmVudEZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuQm9vbGVhbkVxdWFscyl7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiA+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJ0cnVlXCIgcHJldmVudEVudGVyPlRydWU8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJmYWxzZVwiIHByZXZlbnRFbnRlcj5GYWxzZTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNFbnVtPlxyXG4gICAgICBAaWYoY3VycmVudEZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuSW4pe1xyXG4gICAgICAgIDx0Yi1pbi1saXN0LWZpbHRlciBba2V5XT0nZmlsdGVyLmtleScgbmFtZT0nZmlsdGVyVmFsdWUnIFsobmdNb2RlbCldPSdmaWx0ZXIuZmlsdGVyVmFsdWUnID48L3RiLWluLWxpc3QtZmlsdGVyPlxyXG5cclxuICAgICAgfVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZm9ybT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbjwvbWF0LWNhcmQ+XHJcbn1cclxuIl19
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { map, tap } from 'rxjs/operators';
4
4
  import { FieldType } from '../../../interfaces/report-def';
5
- import { AsyncPipe, KeyValuePipe, NgFor } from '@angular/common';
5
+ import { AsyncPipe, KeyValuePipe } from '@angular/common';
6
6
  import { MatCheckboxModule } from '@angular/material/checkbox';
7
7
  import { SpaceCasePipe, StopPropagationDirective } from '../../../../utilities';
8
8
  import * as i0 from "@angular/core";
@@ -55,28 +55,34 @@ export class InListFilterComponent {
55
55
  this.onChange(this.value);
56
56
  }
57
57
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: InListFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: InListFilterComponent, isStandalone: true, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: InListFilterComponent, isStandalone: true, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
59
59
  provide: NG_VALUE_ACCESSOR,
60
60
  useExisting: InListFilterComponent,
61
61
  multi: true
62
62
  }], ngImport: i0, template: `
63
- <div *ngFor="let item of keyValues$ | async| keyvalue" >
64
- <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
65
- {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
66
- </mat-checkbox>
67
- </div>
68
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
63
+ @for (item of keyValues$ | async| keyvalue; track item.key) {
64
+ <div>
65
+ <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
66
+ {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
67
+ </mat-checkbox>
68
+ </div>
69
+ }
70
+
71
+ `, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
72
  }
70
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: InListFilterComponent, decorators: [{
71
74
  type: Component,
72
75
  args: [{
73
76
  selector: 'tb-in-list-filter , [tb-in-list-filter]',
74
77
  template: `
75
- <div *ngFor="let item of keyValues$ | async| keyvalue" >
76
- <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
77
- {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
78
- </mat-checkbox>
79
- </div>
78
+ @for (item of keyValues$ | async| keyvalue; track item.key) {
79
+ <div>
80
+ <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
81
+ {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
82
+ </mat-checkbox>
83
+ </div>
84
+ }
85
+
80
86
  `,
81
87
  changeDetection: ChangeDetectionStrategy.OnPush,
82
88
  providers: [{
@@ -86,10 +92,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
86
92
  }],
87
93
  standalone: true,
88
94
  imports: [
89
- NgFor, AsyncPipe, KeyValuePipe, MatCheckboxModule, StopPropagationDirective, SpaceCasePipe
95
+ AsyncPipe, KeyValuePipe, MatCheckboxModule, StopPropagationDirective, SpaceCasePipe
90
96
  ]
91
97
  }]
92
98
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TableStore }], propDecorators: { key: [{
93
99
  type: Input
94
100
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbGlzdC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9maWx0ZXIvaW4tbGlzdC9pbi1saXN0LWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBdUJoRixNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQW9CLEdBQXNCLEVBQVUsVUFBc0I7UUFBdEQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzFFLFVBQUssR0FBYSxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQVV0QixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUszQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBT3RCLGlCQUFZLEdBQWMsRUFBRSxDQUFDO0lBeEJpRCxDQUFDO0lBRy9FLFVBQVUsQ0FBQyxH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QkFBd0IsRUFBRSxhQUFhO3FCQUMzRjtpQkFDRjsrR0F3QlUsR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IFNwYWNlQ2FzZVBpcGUsIFN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi1pbi1saXN0LWZpbHRlciAsIFt0Yi1pbi1saXN0LWZpbHRlcl0nLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBrZXlWYWx1ZXMkIHwgYXN5bmN8IGtleXZhbHVlXCIgPlxyXG4gICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09J3NlbGVjdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSknIHN0b3AtcHJvcGFnYXRpb24gKGNoYW5nZSk9J3NlbGVjdEZpbHRlckNoYW5nZWQoJGV2ZW50LCBpdGVtLmtleSknID5cclxuICAgICAge3ttZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5FbnVtID8gKGl0ZW0udmFsdWUgfCBzcGFjZUNhc2UpIDogaXRlbS52YWx1ZX19XHJcbiAgICA8L21hdC1jaGVja2JveD5cclxuICA8L2Rpdj5cclxuICBgLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IEluTGlzdEZpbHRlckNvbXBvbmVudCxcclxuICAgIG11bHRpOiB0cnVlXHJcbiAgfV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ0ZvciwgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE1hdENoZWNrYm94TW9kdWxlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsIFNwYWNlQ2FzZVBpcGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbkxpc3RGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlICkge31cclxuICB2YWx1ZTogc3RyaW5nW10gPSBbXTtcclxuICBGaWVsZFR5cGUgPSBGaWVsZFR5cGU7XHJcbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG5cclxuICAgIGlmKHRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSB0aGlzLnZhbHVlLm1hcCggZiA9PiBmICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGtleSE6IHN0cmluZztcclxuXHJcbiAga2V5VmFsdWVzJCEgOiBPYnNlcnZhYmxlPERpY3Rpb25hcnk8c3RyaW5nPj47XHJcbiAgc2VsZWN0ZWRLZXlzIDogc3RyaW5nW10gPSBbXTtcclxuICBtZXRhRGF0YSE6IE1ldGFEYXRhO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMua2V5VmFsdWVzJCA9IHRoaXMudGFibGVTdGF0ZS5nZXRNZXRhRGF0YSQodGhpcy5rZXkpLnBpcGUoXHJcbiAgICAgIHRhcChtZXRhRGF0YSA9PiB0aGlzLm1ldGFEYXRhID0gbWV0YURhdGEpLFxyXG4gICAgICBtYXAoIG1ldGFEYXRhID0+IHtcclxuICAgICAgICBpZihtZXRhRGF0YS5hZGRpdGlvbmFsPy5maWx0ZXJPcHRpb25zPy5maWx0ZXJhYmxlVmFsdWVzICkge1xyXG4gICAgICAgICAgcmV0dXJuICBtZXRhRGF0YS5hZGRpdGlvbmFsLmZpbHRlck9wdGlvbnMuZmlsdGVyYWJsZVZhbHVlcy5yZWR1Y2UoIChwcmV2OiBhbnksIGN1cik9PiB7IHByZXZbY3VyXSA9IGN1cjsgcmV0dXJuIHByZXYgfSwge30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZihtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5FbnVtICkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0YURhdGEuYWRkaXRpb25hbCEuZW51bU1hcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbHRlckNoYW5nZWQoJGV2ZW50LCB2YWwpIHtcclxuICAgIGlmKCRldmVudC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnB1c2godmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gdGhpcy5zZWxlY3RlZEtleXMuZmlsdGVyKCBpdGVtID0+IGl0ZW0gIT09IHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZEtleXM7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbGlzdC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9maWx0ZXIvaW4tbGlzdC9pbi1saXN0LWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUEwQmhGLE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFBb0IsR0FBc0IsRUFBVSxVQUFzQjtRQUF0RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDMUUsVUFBSyxHQUFhLEVBQUUsQ0FBQztRQUNyQixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBVXRCLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBSzNCLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFPdEIsaUJBQVksR0FBYyxFQUFFLENBQUM7SUF4QmlELENBQUM7SUFHL0UsVUFBVSxDQUFDLEdBQWE7UUFDdEIs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QUNGOytHQXdCVSxHQUFHO3NCQUFYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBTcGFjZUNhc2VQaXBlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItaW4tbGlzdC1maWx0ZXIgLCBbdGItaW4tbGlzdC1maWx0ZXJdJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIEBmb3IgKGl0ZW0gb2Yga2V5VmFsdWVzJCB8IGFzeW5jfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS5rZXkpIHtcclxuICAgIDxkaXY+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPSdzZWxlY3RlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpJyBzdG9wLXByb3BhZ2F0aW9uIChjaGFuZ2UpPSdzZWxlY3RGaWx0ZXJDaGFuZ2VkKCRldmVudCwgaXRlbS5rZXkpJyA+XHJcbiAgICAgICAge3ttZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5FbnVtID8gKGl0ZW0udmFsdWUgfCBzcGFjZUNhc2UpIDogaXRlbS52YWx1ZX19XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBgLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IEluTGlzdEZpbHRlckNvbXBvbmVudCxcclxuICAgIG11bHRpOiB0cnVlXHJcbiAgfV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSwgTWF0Q2hlY2tib3hNb2R1bGUsIFN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSwgU3BhY2VDYXNlUGlwZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEluTGlzdEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRhYmxlU3RhdGU6IFRhYmxlU3RvcmUgKSB7fVxyXG4gIHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEZpZWxkVHlwZSA9IEZpZWxkVHlwZTtcclxuICB3cml0ZVZhbHVlKG9iajogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcblxyXG4gICAgaWYodGhpcy52YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IHRoaXMudmFsdWUubWFwKCBmID0+IGYgKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcbiAgQElucHV0KCkga2V5ITogc3RyaW5nO1xyXG5cclxuICBrZXlWYWx1ZXMkISA6IE9ic2VydmFibGU8RGljdGlvbmFyeTxzdHJpbmc+PjtcclxuICBzZWxlY3RlZEtleXMgOiBzdHJpbmdbXSA9IFtdO1xyXG4gIG1ldGFEYXRhITogTWV0YURhdGE7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5rZXlWYWx1ZXMkID0gdGhpcy50YWJsZVN0YXRlLmdldE1ldGFEYXRhJCh0aGlzLmtleSkucGlwZShcclxuICAgICAgdGFwKG1ldGFEYXRhID0+IHRoaXMubWV0YURhdGEgPSBtZXRhRGF0YSksXHJcbiAgICAgIG1hcCggbWV0YURhdGEgPT4ge1xyXG4gICAgICAgIGlmKG1ldGFEYXRhLmFkZGl0aW9uYWw/LmZpbHRlck9wdGlvbnM/LmZpbHRlcmFibGVWYWx1ZXMgKSB7XHJcbiAgICAgICAgICByZXR1cm4gIG1ldGFEYXRhLmFkZGl0aW9uYWwuZmlsdGVyT3B0aW9ucy5maWx0ZXJhYmxlVmFsdWVzLnJlZHVjZSggKHByZXY6IGFueSwgY3VyKT0+IHsgcHJldltjdXJdID0gY3VyOyByZXR1cm4gcHJldiB9LCB7fSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmKG1ldGFEYXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkVudW0gKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5hZGRpdGlvbmFsIS5lbnVtTWFwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0RmlsdGVyQ2hhbmdlZCgkZXZlbnQsIHZhbCkge1xyXG4gICAgaWYoJGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMucHVzaCh2YWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSB0aGlzLnNlbGVjdGVkS2V5cy5maWx0ZXIoIGl0ZW0gPT4gaXRlbSAhPT0gdmFsKTtcclxuICAgIH1cclxuXHJcbiAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkS2V5cztcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -2,7 +2,7 @@ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { map } from 'rxjs/operators';
3
3
  import { orderViewableMetaData } from '../../classes/table-store';
4
4
  import { DragDropModule } from '@angular/cdk/drag-drop';
5
- import { AsyncPipe, NgFor, NgIf } from '@angular/common';
5
+ import { AsyncPipe } from '@angular/common';
6
6
  import { MatTooltipModule } from '@angular/material/tooltip';
7
7
  import { MatIconModule } from '@angular/material/icon';
8
8
  import { MatButtonModule } from '@angular/material/button';
@@ -40,13 +40,13 @@ export class GenColDisplayerComponent {
40
40
  this.tableState.setHiddenColumns(displayCols.map(c => ({ key: c.key, visible: c.isVisible })));
41
41
  }
42
42
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: GenColDisplayerComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\r\n *ngFor=\"let col of displayCols\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n <ng-template #hidden>\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n </ng-template>\r\n\r\n </div>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n</ng-container>", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i6.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: i6.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: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "@if(columns$ | async; as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i6.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: i6.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: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
44
  }
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: GenColDisplayerComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
48
- NgIf, NgFor, AsyncPipe, MatTooltipModule, MatIconModule, MatButtonModule, MatMenuModule, StopPropagationDirective,
48
+ AsyncPipe, MatTooltipModule, MatIconModule, MatButtonModule, MatMenuModule, StopPropagationDirective,
49
49
  DragDropModule, SpaceCasePipe
50
- ], template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\r\n *ngFor=\"let col of displayCols\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n <ng-template #hidden>\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n </ng-template>\r\n\r\n </div>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n</ng-container>", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
50
+ ], template: "@if(columns$ | async; as displayCols){\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation [cdkDropListLockAxis]=\"'y'\">\r\n @for (col of displayCols; track col.key) {\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\">\r\n @if(col.isVisible){\r\n <button mat-icon-button matTooltip=\"Hide Column\" class=\"show-hide\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n } @else {\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n }\r\n \r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n </div>\r\n </button>\r\n }\r\n\r\n </div>\r\n </mat-menu>\r\n}", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
51
51
  }], ctorParameters: () => [{ type: i1.TableStore }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuLWNvbC1kaXNwbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9nZW4tY29sLWRpc3BsYXllci9nZW4tY29sLWRpc3BsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbi1jb2wtZGlzcGxheWVyL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBYyxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7O0FBYTdFLE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFBcUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDekMsR0FBRyxDQUFFLEtBQUssQ0FBQyxFQUFFLENBQ1gscUJBQXFCLENBQUMsS0FBSyxDQUFDO2FBQ3pCLEdBQUcsQ0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWCxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUc7WUFDWCxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVc7WUFDM0IsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUM5QyxDQUFDLENBQUMsQ0FDTixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQXlCO1FBQzdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUE0QjtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBQ2pHLENBQUM7SUFDRCxLQUFLLENBQUMsV0FBeUI7UUFDN0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxDQUFDLFdBQXlCO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7OEdBN0JVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDRFQ3hCckMseWlFQW1EZSwwdUJEL0JYLElBQUksNkZBQUUsS0FBSyw4R0FBRSxTQUFTLDZDQUFFLGdCQUFnQiw0VEFBRSxhQUFhLG1MQUFFLGVBQWUsMklBQUUsYUFBYSw4dkJBQUUsd0JBQXdCLDhEQUNqSCxjQUFjLHk4QkFBRSxhQUFhOzsyRkFHcEIsd0JBQXdCO2tCQVhwQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSx3QkFBd0I7d0JBQ2pILGNBQWMsRUFBRSxhQUFhO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5Q29sIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9kaXNwbGF5LWNvbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBvcmRlclZpZXdhYmxlTWV0YURhdGEsIFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHtDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgU3BhY2VDYXNlUGlwZSwgU3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItY29sLWRpc3BsYXllcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW4tY29sLWRpc3BsYXllci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoICxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nSWYsIE5nRm9yLCBBc3luY1BpcGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0TWVudU1vZHVsZSwgU3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsIFNwYWNlQ2FzZVBpcGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5Db2xEaXNwbGF5ZXJDb21wb25lbnQge1xyXG4gIGNvbHVtbnMkOiBPYnNlcnZhYmxlPCBEaXNwbGF5Q29sW10+O1xyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIHRhYmxlU3RhdGU6IFRhYmxlU3RvcmUgKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMkID0gdGhpcy50YWJsZVN0YXRlLnN0YXRlJC5waXBlKFxyXG4gICAgICBtYXAoIHN0YXRlID0+XHJcbiAgICAgICAgb3JkZXJWaWV3YWJsZU1ldGFEYXRhKHN0YXRlKVxyXG4gICAgICAgICAgLm1hcCggbWQgPT4gKHtcclxuICAgICAgICAgICAga2V5OiBtZC5rZXksXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBtZC5kaXNwbGF5TmFtZSxcclxuICAgICAgICAgICAgaXNWaXNpYmxlOiAhc3RhdGUuaGlkZGVuS2V5cy5pbmNsdWRlcyhtZC5rZXkpXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXNldChkaXNwbGF5Q29sczogRGlzcGxheUNvbFtdKSB7XHJcbiAgICBkaXNwbGF5Q29scy5mb3JFYWNoKGMgPT4gYy5pc1Zpc2libGUgPSB0cnVlKTtcclxuICAgIHRoaXMuZW1pdChkaXNwbGF5Q29scyk7XHJcbiAgfVxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG4gICAgdGhpcy50YWJsZVN0YXRlLnNldFVzZXJEZWZpbmVkT3JkZXIoe25ld09yZGVyOmV2ZW50LmN1cnJlbnRJbmRleCxvbGRPcmRlcjpldmVudC5wcmV2aW91c0luZGV4fSlcclxuICB9XHJcbiAgdW5zZXQoZGlzcGxheUNvbHM6IERpc3BsYXlDb2xbXSkge1xyXG4gICAgZGlzcGxheUNvbHMuZm9yRWFjaChjID0+IGMuaXNWaXNpYmxlID0gZmFsc2UpO1xyXG4gICAgdGhpcy5lbWl0KGRpc3BsYXlDb2xzKTtcclxuICB9XHJcblxyXG4gIGVtaXQoZGlzcGxheUNvbHM6IERpc3BsYXlDb2xbXSkge1xyXG4gICAgdGhpcy50YWJsZVN0YXRlLnNldEhpZGRlbkNvbHVtbnMoZGlzcGxheUNvbHMubWFwKCBjID0+ICh7a2V5OiBjLmtleSwgdmlzaWJsZTogYy5pc1Zpc2libGV9KSkpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1ucyQgfCBhc3luYyBhcyBkaXNwbGF5Q29sc1wiPlxyXG4gIDxzcGFuIG1hdFRvb2x0aXA9XCJTaG93L2hpZGUgY29sdW1uc1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnZpc2liaWxpdHlfb2ZmPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvc3Bhbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJteS1tYXQtbWVudVwiPlxyXG5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIkNsb3NlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZpbHRlci1idXR0b25cIiBtYXQtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gc3RvcC1wcm9wYWdhdGlvbj5cclxuICAgICAgPHNwYW4gbWF0VG9vbHRpcD1cIlNob3cgYWxsIGNvbHVtbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoZGlzcGxheUNvbHMpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZG9uZV9hbGw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgICA8c3BhbiBtYXRUb29sdGlwPVwiSGlkZSBhbGwgY29sdW1uc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ1bnNldChkaXNwbGF5Q29scylcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCIgc3RvcC1wcm9wYWdhdGlvbiBbY2RrRHJvcExpc3RMb2NrQXhpc109XCIneSdcIj5cclxuICAgICAgPGJ1dHRvbiBbY2xhc3MuaXNIaWRkZW5dPVwiIWNvbC5pc1Zpc2libGVcIiBzdG9wLXByb3BhZ2F0aW9uIG1hdC1tZW51LWl0ZW0gY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGRpc3BsYXlDb2xzXCI+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwiY29sLmlzVmlzaWJsZSA9ICFjb2wuaXNWaXNpYmxlOyBlbWl0KGRpc3BsYXlDb2xzKVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJIaWRlIENvbHVtblwiIGNsYXNzPVwic2hvdy1oaWRlXCIgKm5nSWY9XCJjb2wuaXNWaXNpYmxlOyBlbHNlIGhpZGRlblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+Y2hlY2tfYm94PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICB7e2NvbC5kaXNwbGF5TmFtZSB8fCAoY29sLmtleSB8IHNwYWNlQ2FzZSkgfX1cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hpZGRlbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIlNob3cgQ29sdW1uXCIgY2xhc3M9XCJzaG93LWhpZGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+aW5kZXRlcm1pbmF0ZV9jaGVja19ib3g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LW1lbnU+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuLWNvbC1kaXNwbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9nZW4tY29sLWRpc3BsYXllci9nZW4tY29sLWRpc3BsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbi1jb2wtZGlzcGxheWVyL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBYyxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQWE3RSxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLFlBQXFCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3pDLEdBQUcsQ0FBRSxLQUFLLENBQUMsRUFBRSxDQUNYLHFCQUFxQixDQUFDLEtBQUssQ0FBQzthQUN6QixHQUFHLENBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1lBQ1gsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXO1lBQzNCLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDOUMsQ0FBQyxDQUFDLENBQ04sQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUF5QjtRQUM3QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBNEI7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBQ0QsS0FBSyxDQUFDLFdBQXlCO1FBQzdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksQ0FBQyxXQUF5QjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDOzhHQTdCVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw0RUN4QnJDLG9oRUFzREMscXVCRGxDRyxTQUFTLDZDQUFFLGdCQUFnQiw0VEFBRSxhQUFhLG1MQUFFLGVBQWUsMklBQUUsYUFBYSw4dkJBQUUsd0JBQXdCLDhEQUNwRyxjQUFjLHk4QkFBRSxhQUFhOzsyRkFHcEIsd0JBQXdCO2tCQVhwQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsd0JBQXdCO3dCQUNwRyxjQUFjLEVBQUUsYUFBYTtxQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlzcGxheUNvbCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZGlzcGxheS1jb2wnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgb3JkZXJWaWV3YWJsZU1ldGFEYXRhLCBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7Q2RrRHJhZ0Ryb3AsIERyYWdEcm9wTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgU3BhY2VDYXNlUGlwZSwgU3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItY29sLWRpc3BsYXllcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbi1jb2wtZGlzcGxheWVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW4tY29sLWRpc3BsYXllci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoICxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEFzeW5jUGlwZSwgTWF0VG9vbHRpcE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRNZW51TW9kdWxlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsXHJcbiAgICBEcmFnRHJvcE1vZHVsZSwgU3BhY2VDYXNlUGlwZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbkNvbERpc3BsYXllckNvbXBvbmVudCB7XHJcbiAgY29sdW1ucyQ6IE9ic2VydmFibGU8IERpc3BsYXlDb2xbXT47XHJcbiAgY29uc3RydWN0b3IoIHByaXZhdGUgdGFibGVTdGF0ZTogVGFibGVTdG9yZSApIHtcclxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLnRhYmxlU3RhdGUuc3RhdGUkLnBpcGUoXHJcbiAgICAgIG1hcCggc3RhdGUgPT5cclxuICAgICAgICBvcmRlclZpZXdhYmxlTWV0YURhdGEoc3RhdGUpXHJcbiAgICAgICAgICAubWFwKCBtZCA9PiAoe1xyXG4gICAgICAgICAgICBrZXk6IG1kLmtleSxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG1kLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICBpc1Zpc2libGU6ICFzdGF0ZS5oaWRkZW5LZXlzLmluY2x1ZGVzKG1kLmtleSlcclxuICAgICAgICAgIH0pKVxyXG4gICAgICApLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KGRpc3BsYXlDb2xzOiBEaXNwbGF5Q29sW10pIHtcclxuICAgIGRpc3BsYXlDb2xzLmZvckVhY2goYyA9PiBjLmlzVmlzaWJsZSA9IHRydWUpO1xyXG4gICAgdGhpcy5lbWl0KGRpc3BsYXlDb2xzKTtcclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICB0aGlzLnRhYmxlU3RhdGUuc2V0VXNlckRlZmluZWRPcmRlcih7bmV3T3JkZXI6ZXZlbnQuY3VycmVudEluZGV4LG9sZE9yZGVyOmV2ZW50LnByZXZpb3VzSW5kZXh9KVxyXG4gIH1cclxuICB1bnNldChkaXNwbGF5Q29sczogRGlzcGxheUNvbFtdKSB7XHJcbiAgICBkaXNwbGF5Q29scy5mb3JFYWNoKGMgPT4gYy5pc1Zpc2libGUgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmVtaXQoZGlzcGxheUNvbHMpO1xyXG4gIH1cclxuXHJcbiAgZW1pdChkaXNwbGF5Q29sczogRGlzcGxheUNvbFtdKSB7XHJcbiAgICB0aGlzLnRhYmxlU3RhdGUuc2V0SGlkZGVuQ29sdW1ucyhkaXNwbGF5Q29scy5tYXAoIGMgPT4gKHtrZXk6IGMua2V5LCB2aXNpYmxlOiBjLmlzVmlzaWJsZX0pKSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihjb2x1bW5zJCB8IGFzeW5jOyBhcyBkaXNwbGF5Q29scyl7XHJcbiAgPHNwYW4gbWF0VG9vbHRpcD1cIlNob3cvaGlkZSBjb2x1bW5zXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiPlxyXG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+dmlzaWJpbGl0eV9vZmY8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9zcGFuPlxyXG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm15LW1hdC1tZW51XCI+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8c3BhbiBtYXRUb29sdGlwPVwiQ2xvc2VcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBzdG9wLXByb3BhZ2F0aW9uPlxyXG4gICAgICA8c3BhbiBtYXRUb29sdGlwPVwiU2hvdyBhbGwgY29sdW1uc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZXNldChkaXNwbGF5Q29scylcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5kb25lX2FsbDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9XCJIaWRlIGFsbCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVuc2V0KGRpc3BsYXlDb2xzKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIiBzdG9wLXByb3BhZ2F0aW9uIFtjZGtEcm9wTGlzdExvY2tBeGlzXT1cIid5J1wiPlxyXG4gICAgICBAZm9yIChjb2wgb2YgZGlzcGxheUNvbHM7IHRyYWNrIGNvbC5rZXkpIHtcclxuICAgICAgICA8YnV0dG9uIFtjbGFzcy5pc0hpZGRlbl09XCIhY29sLmlzVmlzaWJsZVwiIHN0b3AtcHJvcGFnYXRpb24gbWF0LW1lbnUtaXRlbSBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IChjbGljayk9XCJjb2wuaXNWaXNpYmxlID0gIWNvbC5pc1Zpc2libGU7IGVtaXQoZGlzcGxheUNvbHMpXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgQGlmKGNvbC5pc1Zpc2libGUpe1xyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiSGlkZSBDb2x1bW5cIiBjbGFzcz1cInNob3ctaGlkZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5jaGVja19ib3g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiU2hvdyBDb2x1bW5cIiBjbGFzcz1cInNob3ctaGlkZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5pbmRldGVybWluYXRlX2NoZWNrX2JveDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+XHJcbiAgICAgICAgICAgIHt7Y29sLmRpc3BsYXlOYW1lIHx8IChjb2wua2V5IHwgc3BhY2VDYXNlKSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1tZW51PlxyXG59Il19