ngx-material-entity 18.0.0 → 18.1.0

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 (67) hide show
  1. package/components/custom-table/custom-table-configuration.model.d.ts +65 -0
  2. package/components/custom-table/custom-table.component.d.ts +111 -0
  3. package/components/edit-page/edit-page.component.d.ts +5 -1
  4. package/components/input/array/array-date-input/array-date-input.component.d.ts +2 -2
  5. package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +3 -3
  6. package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +3 -3
  7. package/components/input/array/array-table.class.d.ts +25 -19
  8. package/components/input/input.component.d.ts +99 -80
  9. package/components/input/relations/references-many-input/references-many-input.component.d.ts +12 -17
  10. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +5 -5
  11. package/components/table/table-data.d.ts +9 -4
  12. package/components/table/table.component.d.ts +15 -37
  13. package/decorators/array/array-decorator-internal.data.d.ts +5 -1
  14. package/decorators/array/array-decorator.data.d.ts +38 -82
  15. package/decorators/references-many/references-many-decorator-internal.data.d.ts +3 -1
  16. package/decorators/references-many/references-many-decorator.data.d.ts +13 -1
  17. package/directives/dynamic-style-class.directive.d.ts +4 -5
  18. package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +5 -6
  19. package/esm2022/components/create-page/create-page.component.mjs +6 -7
  20. package/esm2022/components/custom-table/custom-table-configuration.model.mjs +37 -0
  21. package/esm2022/components/custom-table/custom-table.component.mjs +213 -0
  22. package/esm2022/components/edit-page/edit-page.component.mjs +19 -9
  23. package/esm2022/components/form/form.component.mjs +5 -6
  24. package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +16 -20
  25. package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +27 -26
  26. package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +17 -21
  27. package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +4 -4
  28. package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +4 -4
  29. package/esm2022/components/input/array/array-table.class.mjs +51 -43
  30. package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +5 -6
  31. package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +4 -4
  32. package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +4 -7
  33. package/esm2022/components/input/file/file-input/file-input.component.mjs +4 -5
  34. package/esm2022/components/input/input.component.mjs +143 -106
  35. package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +4 -5
  36. package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +40 -55
  37. package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +4 -5
  38. package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +4 -5
  39. package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +4 -4
  40. package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +9 -8
  41. package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +22 -14
  42. package/esm2022/components/table/table-data.mjs +1 -1
  43. package/esm2022/components/table/table.component.mjs +40 -107
  44. package/esm2022/components/tooltip/tooltip.component.mjs +3 -3
  45. package/esm2022/decorators/array/array-decorator-internal.data.mjs +14 -1
  46. package/esm2022/decorators/array/array-decorator.data.mjs +33 -2
  47. package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +1 -1
  48. package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +8 -1
  49. package/esm2022/decorators/references-many/references-many-decorator.data.mjs +1 -1
  50. package/esm2022/directives/dynamic-style-class.directive.mjs +5 -5
  51. package/esm2022/directives/tooltip.directive.mjs +4 -1
  52. package/esm2022/functions/get-changes-tooltip-content.function.mjs +23 -0
  53. package/esm2022/functions/get-validation-errors-tooltip-content.function.mjs +23 -0
  54. package/esm2022/functions/table-column-value-to-sort-value.function.mjs +29 -0
  55. package/esm2022/public-api.mjs +3 -2
  56. package/esm2022/utilities/date.utilities.mjs +7 -6
  57. package/esm2022/utilities/entity.utilities.mjs +23 -7
  58. package/esm2022/utilities/validation.utilities.mjs +2 -2
  59. package/fesm2022/ngx-material-entity.mjs +2550 -2224
  60. package/fesm2022/ngx-material-entity.mjs.map +1 -1
  61. package/functions/get-changes-tooltip-content.function.d.ts +13 -0
  62. package/functions/table-column-value-to-sort-value.function.d.ts +9 -0
  63. package/package.json +1 -1
  64. package/public-api.d.ts +2 -1
  65. package/utilities/entity.utilities.d.ts +7 -3
  66. package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +0 -23
  67. /package/functions/{get-validation-errors-tooltip-content.function.ts.d.ts → get-validation-errors-tooltip-content.function.d.ts} +0 -0
@@ -1,18 +1,17 @@
1
1
  /* eslint-disable jsdoc/require-jsdoc */
2
- import { NgFor, NgIf } from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
3
  import { HttpClient } from '@angular/common/http';
4
- import { Component, EnvironmentInjector, Inject } from '@angular/core';
4
+ import { Component, Inject } from '@angular/core';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { MatButtonModule } from '@angular/material/button';
7
- import { MatCheckboxModule } from '@angular/material/checkbox';
8
7
  import { MatDatepickerModule } from '@angular/material/datepicker';
9
8
  import { MatDialog } from '@angular/material/dialog';
10
9
  import { MatFormFieldModule } from '@angular/material/form-field';
11
- import { MatTableModule } from '@angular/material/table';
12
10
  import { DateRangeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';
13
11
  import { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';
14
12
  import { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES } from '../../../../global-configuration-values';
15
13
  import { DateUtilities } from '../../../../utilities/date.utilities';
14
+ import { CustomTableComponent } from '../../../custom-table/custom-table.component';
16
15
  import { ArrayTableComponent } from '../array-table.class';
17
16
  import * as i0 from "@angular/core";
18
17
  import * as i1 from "@angular/material/dialog";
@@ -20,16 +19,14 @@ import * as i2 from "@angular/common/http";
20
19
  import * as i3 from "@angular/material/form-field";
21
20
  import * as i4 from "@angular/material/datepicker";
22
21
  import * as i5 from "@angular/forms";
23
- import * as i6 from "@angular/material/table";
24
- import * as i7 from "@angular/material/checkbox";
25
- import * as i8 from "@angular/material/button";
22
+ import * as i6 from "@angular/material/button";
26
23
  export class ArrayDateRangeInputComponent extends ArrayTableComponent {
27
24
  globalConfig;
28
25
  DateUtilities = DateUtilities;
29
26
  dateRangeStart;
30
27
  dateRangeEnd;
31
- constructor(matDialog, injector, http, globalConfig) {
32
- super(matDialog, injector, http);
28
+ constructor(dialog, http, globalConfig) {
29
+ super(dialog, http);
33
30
  this.globalConfig = globalConfig;
34
31
  }
35
32
  ngOnInit() {
@@ -41,41 +38,45 @@ export class ArrayDateRangeInputComponent extends ArrayTableComponent {
41
38
  end: undefined,
42
39
  values: undefined
43
40
  };
41
+ this.setTableConfig();
44
42
  }
45
43
  /**
46
44
  * Adds a DateRange to the array.
47
45
  */
48
- addDateRange() {
49
- if (this.input && this.dateRangeStart && this.dateRangeEnd) {
50
- this.input.start = new Date(this.dateRangeStart);
51
- this.input.end = new Date(this.dateRangeEnd);
52
- const values = DateUtilities.getDatesBetween(this.input.start, this.input.end, this.metadata.filter);
53
- this.input.values = values.length ? values : undefined;
54
- this.add();
46
+ async add() {
47
+ if (!this.input || !this.dateRangeStart || !this.dateRangeEnd) {
48
+ return;
55
49
  }
50
+ this.input.start = new Date(this.dateRangeStart);
51
+ this.input.end = new Date(this.dateRangeEnd);
52
+ const values = DateUtilities.getDatesBetween(this.input.start, this.input.end, this.metadata.filter);
53
+ this.input.values = values.length ? values : undefined;
54
+ await super.add();
56
55
  }
57
56
  resetInput() {
58
- this.input = undefined;
57
+ this.input = {
58
+ start: undefined,
59
+ end: undefined,
60
+ values: undefined
61
+ };
59
62
  this.dateRangeStart = undefined;
60
63
  this.dateRangeEnd = undefined;
61
64
  }
62
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateRangeInputComponent, deps: [{ token: i1.MatDialog }, { token: i0.EnvironmentInjector }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
63
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayDateRangeInputComponent, isStandalone: true, selector: "array-date-range-input", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n @if (startModel.errors) {\n <mat-error>{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error>{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"addDateRange()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n }\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}mat-table{border:1px solid #E0E0E0;border-radius:5px;padding-top:5px;padding-bottom:5px}.mat-column-select{flex:0 0 48px;padding-left:0;padding-right:0;justify-content:center}.array-error{display:flex;align-items:center;justify-content:center;margin-top:-6px;border:1px solid #E0E0E0;background-color:#f8d3d7;color:#721c24;height:fit-content;padding-left:4px;padding-right:4px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateRangeInputComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayDateRangeInputComponent, isStandalone: true, selector: "array-date-range-input", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n @if (startModel.errors) {\n <mat-error>{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error>{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <custom-table\n [configuration]=\"tableConfig\"\n [data]=\"propertyValue\"\n [required]=\"metadata.required(entity)\"\n (selectionChanged)=\"selected = $any($event)\"\n >\n </custom-table>\n</div>", styles: ["mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px 15px 0;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: CustomTableComponent, selector: "custom-table", inputs: ["data", "searchString", "required", "isLoading", "configuration"], outputs: ["cellClicked", "selectionChanged"] }] });
64
67
  }
65
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateRangeInputComponent, decorators: [{
66
69
  type: Component,
67
70
  args: [{ selector: 'array-date-range-input', standalone: true, imports: [
68
- NgIf,
71
+ CommonModule,
69
72
  MatFormFieldModule,
70
73
  MatDatepickerModule,
71
74
  FormsModule,
72
- MatTableModule,
73
- MatCheckboxModule,
74
75
  MatButtonModule,
75
- NgFor
76
- ], template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n @if (startModel.errors) {\n <mat-error>{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error>{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"addDateRange()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n }\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}mat-table{border:1px solid #E0E0E0;border-radius:5px;padding-top:5px;padding-bottom:5px}.mat-column-select{flex:0 0 48px;padding-left:0;padding-right:0;justify-content:center}.array-error{display:flex;align-items:center;justify-content:center;margin-top:-6px;border:1px solid #E0E0E0;background-color:#f8d3d7;color:#721c24;height:fit-content;padding-left:4px;padding-right:4px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}\n"] }]
77
- }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i0.EnvironmentInjector }, { type: i2.HttpClient }, { type: undefined, decorators: [{
76
+ CustomTableComponent
77
+ ], template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n @if (startModel.errors) {\n <mat-error>{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error>{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <custom-table\n [configuration]=\"tableConfig\"\n [data]=\"propertyValue\"\n [required]=\"metadata.required(entity)\"\n (selectionChanged)=\"selected = $any($event)\"\n >\n </custom-table>\n</div>", styles: ["mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px 15px 0;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}\n"] }]
78
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.HttpClient }, { type: undefined, decorators: [{
78
79
  type: Inject,
79
80
  args: [NGX_COMPLETE_GLOBAL_DEFAULT_VALUES]
80
81
  }] }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRE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ZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTLCBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsLWNvbmZpZ3VyYXRpb24tdmFsdWVzJztcbmltcG9ydCB7IERhdGVVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvZGF0ZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgQXJyYXlUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2FycmF5LXRhYmxlLmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFuZ3VsYXIvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcnJheS1kYXRlLXJhbmdlLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTmdGb3JcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5RGF0ZVJhbmdlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PlxuICAgIGV4dGVuZHMgQXJyYXlUYWJsZUNvbXBvbmVudDxEYXRlUmFuZ2UsIEVudGl0eVR5cGUsIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0U+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIERhdGVVdGlsaXRpZXM6IHR5cGVvZiBEYXRlVXRpbGl0aWVzID0gRGF0ZVV0aWxpdGllcztcblxuICAgIGRhdGVSYW5nZVN0YXJ0PzogRGF0ZTtcbiAgICBkYXRlUmFuZ2VFbmQ/OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgQEluamVjdChOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlc1xuICAgICkge1xuICAgICAgICBzdXBlcihtYXREaWFsb2csIGluamVjdG9yLCBodHRwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBEYXRlUmFuZ2VBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsKHRoaXMubWV0YWRhdGEsIHRoaXMuZ2xvYmFsQ29uZmlnKTtcbiAgICAgICAgUmVmbGVjdFV0aWxpdGllcy5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhLCB0aGlzLmVudGl0eSwgdGhpcy5rZXkpO1xuICAgICAgICB0aGlzLmlucHV0ID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsXG4gICAgICAgICAgICBlbmQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsXG4gICAgICAgICAgICB2YWx1ZXM6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGVbXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBEYXRlUmFuZ2UgdG8gdGhlIGFycmF5LlxuICAgICAqL1xuICAgIGFkZERhdGVSYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5kYXRlUmFuZ2VTdGFydCAmJiB0aGlzLmRhdGVSYW5nZUVuZCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5zdGFydCA9IG5ldyBEYXRlKHRoaXMuZGF0ZVJhbmdlU3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5lbmQgPSBuZXcgRGF0ZSh0aGlzLmRhdGVSYW5nZUVuZCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IERhdGVbXSA9IERhdGVVdGlsaXRpZXMuZ2V0RGF0ZXNCZXR3ZWVuKFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc3RhcnQsXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5lbmQsXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YS5maWx0ZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlcyA9IHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMgOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBEYXRlW107XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlc2V0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlRW5kID0gdW5kZWZpbmVkO1xuICAgIH1cbn0iLCI8IS0tIGVzbGludC1kaXNhYmxlIGFuZ3VsYXIvbm8tY2FsbC1leHByZXNzaW9uIC0tPlxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggZWxldmF0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICA8Yj57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L2I+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaXNSZWFkT25seSkge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCIgW2RhdGVGaWx0ZXJdPVwibWV0YWRhdGEuZmlsdGVyID8gbWV0YWRhdGEuZmlsdGVyIDogRGF0ZVV0aWxpdGllcy5kZWZhdWx0RGF0ZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjc3RhcnRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdzdGFydCdcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWV0YWRhdGEubWluU3RhcnQgPyBtZXRhZGF0YS5taW5TdGFydChpbnB1dD8uc3RhcnQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJtZXRhZGF0YS5tYXhTdGFydCA/IG1ldGFkYXRhLm1heFN0YXJ0KGlucHV0Py5zdGFydCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWV0YWRhdGEucGxhY2Vob2xkZXJTdGFydFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVJhbmdlU3RhcnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI2VuZE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdEVuZERhdGVcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdlbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1ldGFkYXRhLm1pbkVuZCA/IG1ldGFkYXRhLm1pbkVuZChpbnB1dD8uZW5kKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwibWV0YWRhdGEubWF4RW5kID8gbWV0YWRhdGEubWF4RW5kKGlucHV0Py5lbmQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1ldGFkYXRhLnBsYWNlaG9sZGVyRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlUmFuZ2VFbmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICBAaWYgKHN0YXJ0TW9kZWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2Uoc3RhcnRNb2RlbCl9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghc3RhcnRNb2RlbC5lcnJvcnMgJiYgZW5kTW9kZWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UoZW5kTW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdGFydE1vZGVsLmVycm9ycyB8fCBlbmRNb2RlbC5lcnJvcnNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGREYXRlUmFuZ2UoKVwiPlxuICAgICAgICAgICAgICAgIHt7bWV0YWRhdGEuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YS5yZW1vdmVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCI+XG4gICAgICAgIDwhLS0gc2VsZWN0IENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiIWRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChzZWxlY3Rpb24sIGRhdGFTb3VyY2UpXCIgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIVNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKHNlbGVjdGlvbiwgZGF0YVNvdXJjZSlcIiAoY2hhbmdlKT1cIiRldmVudCA/IFNlbGVjdGlvblV0aWxpdGllcy5tYXN0ZXJUb2dnbGUoc2VsZWN0aW9uLCBkYXRhU291cmNlKSA6IG51bGxcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZW50aXR5KVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUoZW50aXR5KSA6IG51bGxcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICAgICAgQGZvciAoZENvbCBvZiBtZXRhZGF0YS5kaXNwbGF5Q29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiZENvbC5kaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICAgIHt7ZENvbC5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiIGNsYXNzPVwiZW50aXR5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0RGlzcGxheUNvbHVtblZhbHVlKGVudGl0eSwgZENvbCl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgIFxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LXJvdz5cbiAgICA8L21hdC10YWJsZT5cblxuICAgIEBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyYXktZXJyb3JcIj5cbiAgICAgICAgICAgIHt7bWV0YWRhdGEubWlzc2luZ0Vycm9yTWVzc2FnZX19XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQvYXJyYXktZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUduSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0NBQWtDLEVBQTBCLE1BQU0seUNBQXlDLENBQUM7QUFDckgsT0FB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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTLCBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsLWNvbmZpZ3VyYXRpb24tdmFsdWVzJztcbmltcG9ydCB7IERhdGVVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvZGF0ZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ3VzdG9tVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdGFibGUvY3VzdG9tLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcnJheVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXJyYXktdGFibGUuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYW5ndWxhci9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LWRhdGUtcmFuZ2UtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1kYXRlLXJhbmdlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1kYXRlLXJhbmdlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBDdXN0b21UYWJsZUNvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlEYXRlUmFuZ2VJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBBcnJheVRhYmxlQ29tcG9uZW50PERhdGVSYW5nZSwgRW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9SQU5HRT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgRGF0ZVV0aWxpdGllczogdHlwZW9mIERhdGVVdGlsaXRpZXMgPSBEYXRlVXRpbGl0aWVzO1xuXG4gICAgZGF0ZVJhbmdlU3RhcnQ/OiBEYXRlO1xuICAgIGRhdGVSYW5nZUVuZD86IERhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIEBJbmplY3QoTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxDb25maWc6IE5neEdsb2JhbERlZmF1bHRWYWx1ZXNcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGlhbG9nLCBodHRwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBEYXRlUmFuZ2VBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsKHRoaXMubWV0YWRhdGEsIHRoaXMuZ2xvYmFsQ29uZmlnKTtcbiAgICAgICAgUmVmbGVjdFV0aWxpdGllcy5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhLCB0aGlzLmVudGl0eSwgdGhpcy5rZXkpO1xuICAgICAgICB0aGlzLmlucHV0ID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsXG4gICAgICAgICAgICBlbmQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsXG4gICAgICAgICAgICB2YWx1ZXM6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGVbXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIERhdGVSYW5nZSB0byB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgYXN5bmMgYWRkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXQgfHwgIXRoaXMuZGF0ZVJhbmdlU3RhcnQgfHwgIXRoaXMuZGF0ZVJhbmdlRW5kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dC5zdGFydCA9IG5ldyBEYXRlKHRoaXMuZGF0ZVJhbmdlU3RhcnQpO1xuICAgICAgICB0aGlzLmlucHV0LmVuZCA9IG5ldyBEYXRlKHRoaXMuZGF0ZVJhbmdlRW5kKTtcbiAgICAgICAgY29uc3QgdmFsdWVzOiBEYXRlW10gPSBEYXRlVXRpbGl0aWVzLmdldERhdGVzQmV0d2VlbihcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuc3RhcnQsXG4gICAgICAgICAgICB0aGlzLmlucHV0LmVuZCxcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGEuZmlsdGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5wdXQudmFsdWVzID0gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcyA6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGVbXTtcbiAgICAgICAgYXdhaXQgc3VwZXIuYWRkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlc2V0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSB7XG4gICAgICAgICAgICBzdGFydDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRGF0ZSxcbiAgICAgICAgICAgIGVuZDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRGF0ZSxcbiAgICAgICAgICAgIHZhbHVlczogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRGF0ZVtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlRW5kID0gdW5kZWZpbmVkO1xuICAgIH1cbn0iLCI8IS0tIGVzbGludC1kaXNhYmxlIGFuZ3VsYXIvbm8tY2FsbC1leHByZXNzaW9uIC0tPlxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggZWxldmF0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICA8Yj57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L2I+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaXNSZWFkT25seSkge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCIgW2RhdGVGaWx0ZXJdPVwibWV0YWRhdGEuZmlsdGVyID8gbWV0YWRhdGEuZmlsdGVyIDogRGF0ZVV0aWxpdGllcy5kZWZhdWx0RGF0ZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjc3RhcnRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdzdGFydCdcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWV0YWRhdGEubWluU3RhcnQgPyBtZXRhZGF0YS5taW5TdGFydChpbnB1dD8uc3RhcnQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJtZXRhZGF0YS5tYXhTdGFydCA/IG1ldGFkYXRhLm1heFN0YXJ0KGlucHV0Py5zdGFydCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWV0YWRhdGEucGxhY2Vob2xkZXJTdGFydFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVJhbmdlU3RhcnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI2VuZE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdEVuZERhdGVcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdlbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1ldGFkYXRhLm1pbkVuZCA/IG1ldGFkYXRhLm1pbkVuZChpbnB1dD8uZW5kKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwibWV0YWRhdGEubWF4RW5kID8gbWV0YWRhdGEubWF4RW5kKGlucHV0Py5lbmQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1ldGFkYXRhLnBsYWNlaG9sZGVyRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlUmFuZ2VFbmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICBAaWYgKHN0YXJ0TW9kZWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2Uoc3RhcnRNb2RlbCl9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghc3RhcnRNb2RlbC5lcnJvcnMgJiYgZW5kTW9kZWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UoZW5kTW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdGFydE1vZGVsLmVycm9ycyB8fCBlbmRNb2RlbC5lcnJvcnNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAgICAgICAgICAgIHt7bWV0YWRhdGEuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhLnJlbW92ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8Y3VzdG9tLXRhYmxlXG4gICAgICAgIFtjb25maWd1cmF0aW9uXT1cInRhYmxlQ29uZmlnXCJcbiAgICAgICAgW2RhdGFdPVwicHJvcGVydHlWYWx1ZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0ZWQgPSAkYW55KCRldmVudClcIlxuICAgID5cbiAgICA8L2N1c3RvbS10YWJsZT5cbjwvZGl2PiJdfQ==
@@ -1,20 +1,19 @@
1
1
  /* eslint-disable jsdoc/require-jsdoc */
2
- import { NgFor, NgIf } from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
3
  import { HttpClient } from '@angular/common/http';
4
- import { Component, EnvironmentInjector, Inject } from '@angular/core';
4
+ import { Component, Inject } from '@angular/core';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { MatButtonModule } from '@angular/material/button';
7
- import { MatCheckboxModule } from '@angular/material/checkbox';
8
7
  import { MatDatepickerModule } from '@angular/material/datepicker';
9
8
  import { MatDialog } from '@angular/material/dialog';
10
9
  import { MatFormFieldModule } from '@angular/material/form-field';
11
10
  import { MatInputModule } from '@angular/material/input';
12
11
  import { MatSelectModule } from '@angular/material/select';
13
- import { MatTableModule } from '@angular/material/table';
14
12
  import { DateTimeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';
15
13
  import { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';
16
14
  import { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES } from '../../../../global-configuration-values';
17
15
  import { DateUtilities } from '../../../../utilities/date.utilities';
16
+ import { CustomTableComponent } from '../../../custom-table/custom-table.component';
18
17
  import { ArrayTableComponent } from '../array-table.class';
19
18
  import * as i0 from "@angular/core";
20
19
  import * as i1 from "@angular/material/dialog";
@@ -24,18 +23,16 @@ import * as i4 from "@angular/forms";
24
23
  import * as i5 from "@angular/material/datepicker";
25
24
  import * as i6 from "@angular/material/select";
26
25
  import * as i7 from "@angular/material/core";
27
- import * as i8 from "@angular/material/table";
28
- import * as i9 from "@angular/material/checkbox";
29
- import * as i10 from "@angular/material/input";
30
- import * as i11 from "@angular/material/button";
26
+ import * as i8 from "@angular/material/input";
27
+ import * as i9 from "@angular/material/button";
31
28
  export class ArrayDateTimeInputComponent extends ArrayTableComponent {
32
29
  globalConfig;
33
30
  DateUtilities = DateUtilities;
34
31
  dateTime;
35
32
  time;
36
33
  timeDropdownValues;
37
- constructor(matDialog, injector, http, globalConfig) {
38
- super(matDialog, injector, http);
34
+ constructor(matDialog, http, globalConfig) {
35
+ super(matDialog, http);
39
36
  this.globalConfig = globalConfig;
40
37
  }
41
38
  ngOnInit() {
@@ -47,6 +44,7 @@ export class ArrayDateTimeInputComponent extends ArrayTableComponent {
47
44
  if (this.entity[this.key] != undefined) {
48
45
  this.dateTime = new Date(this.entity[this.key]);
49
46
  }
47
+ this.setTableConfig();
50
48
  }
51
49
  resetInput() {
52
50
  this.input = undefined;
@@ -55,32 +53,30 @@ export class ArrayDateTimeInputComponent extends ArrayTableComponent {
55
53
  /**
56
54
  * Adds a date time to the array.
57
55
  */
58
- addDateTime() {
56
+ async addDateTime() {
59
57
  if (this.input && this.time) {
60
58
  this.input = new Date(this.input);
61
59
  this.input.setHours(this.time.hours, this.time.minutes, 0, 0);
62
- this.add();
60
+ await this.add();
63
61
  }
64
62
  }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateTimeInputComponent, deps: [{ token: i1.MatDialog }, { token: i0.EnvironmentInjector }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
66
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayDateTimeInputComponent, isStandalone: true, selector: "array-date-time-input", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, input, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n \n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">{{metadata.missingErrorMessage}}</div>\n }\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}mat-table{border:1px solid #E0E0E0;border-radius:5px;padding-top:5px;padding-bottom:5px}.mat-column-select{flex:0 0 48px;padding-left:0;padding-right:0;justify-content:center}.array-error{display:flex;align-items:center;justify-content:center;margin-top:-6px;border:1px solid #E0E0E0;background-color:#f8d3d7;color:#721c24;height:fit-content;padding-left:4px;padding-right:4px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.date-time{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i9.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: "ngmodule", type: MatInputModule }, { kind: "directive", type: i10.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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateTimeInputComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayDateTimeInputComponent, isStandalone: true, selector: "array-date-time-input", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, input, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n \n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <custom-table\n [configuration]=\"tableConfig\"\n [data]=\"propertyValue\"\n [required]=\"metadata.required(entity)\"\n (selectionChanged)=\"selected = $any($event)\"\n >\n </custom-table>\n</div>", styles: ["mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px 15px 0;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}.date-time{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: CustomTableComponent, selector: "custom-table", inputs: ["data", "searchString", "required", "isLoading", "configuration"], outputs: ["cellClicked", "selectionChanged"] }] });
67
65
  }
68
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateTimeInputComponent, decorators: [{
69
67
  type: Component,
70
68
  args: [{ selector: 'array-date-time-input', standalone: true, imports: [
71
- NgIf,
69
+ CommonModule,
72
70
  MatFormFieldModule,
73
71
  FormsModule,
74
72
  MatDatepickerModule,
75
73
  MatSelectModule,
76
- MatTableModule,
77
- MatCheckboxModule,
78
74
  MatInputModule,
79
75
  MatButtonModule,
80
- NgFor
81
- ], template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, input, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n \n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">{{metadata.missingErrorMessage}}</div>\n }\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}mat-table{border:1px solid #E0E0E0;border-radius:5px;padding-top:5px;padding-bottom:5px}.mat-column-select{flex:0 0 48px;padding-left:0;padding-right:0;justify-content:center}.array-error{display:flex;align-items:center;justify-content:center;margin-top:-6px;border:1px solid #E0E0E0;background-color:#f8d3d7;color:#721c24;height:fit-content;padding-left:4px;padding-right:4px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.date-time{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:10px}\n"] }]
82
- }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i0.EnvironmentInjector }, { type: i2.HttpClient }, { type: undefined, decorators: [{
76
+ CustomTableComponent
77
+ ], template: "<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, input, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n \n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <custom-table\n [configuration]=\"tableConfig\"\n [data]=\"propertyValue\"\n [required]=\"metadata.required(entity)\"\n (selectionChanged)=\"selected = $any($event)\"\n >\n </custom-table>\n</div>", styles: ["mat-form-field{width:100%}.buttons{display:flex;justify-content:space-between;margin-bottom:10px;margin-top:5px;flex-wrap:wrap;gap:10px}.buttons button{flex-grow:1}.elevation-container{border-radius:5px;padding:15px 15px 0;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}.date-time{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:10px}\n"] }]
78
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.HttpClient }, { type: undefined, decorators: [{
83
79
  type: Inject,
84
80
  args: [NGX_COMPLETE_GLOBAL_DEFAULT_VALUES]
85
81
  }] }] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXkvYXJyYXktZGF0ZS10aW1lLWlucHV0L2FycmF5LWRhdGUtdGltZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtdGltZS1pbnB1dC9hcnJheS1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENB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Q2YsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixLQUFLO3FCQUNSOzswQkFlSSxNQUFNOzJCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuXG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IERhdGVUaW1lQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYXJyYXkvYXJyYXktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgRHJvcGRvd25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kcm9wZG93bi12YWx1ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uLy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUywgTmd4R2xvYmFsRGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbC1jb25maWd1cmF0aW9uLXZhbHVlcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzLCBUaW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL2RhdGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEFycmF5VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9hcnJheS10YWJsZS5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhbmd1bGFyL2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXJyYXktZGF0ZS10aW1lLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXJyYXktZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE5nRm9yXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcnJheURhdGVUaW1lSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PlxuICAgIGV4dGVuZHMgQXJyYXlUYWJsZUNvbXBvbmVudDxEYXRlLCBFbnRpdHlUeXBlLCBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIERhdGVVdGlsaXRpZXM6IHR5cGVvZiBEYXRlVXRpbGl0aWVzID0gRGF0ZVV0aWxpdGllcztcblxuICAgIGRhdGVUaW1lPzogRGF0ZTtcbiAgICB0aW1lPzogVGltZTtcbiAgICB0aW1lRHJvcGRvd25WYWx1ZXMhOiBEcm9wZG93blZhbHVlPFRpbWU+W107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KE5HWF9DT01QTEVURV9HTE9CQUxfREVGQVVMVF9WQUxVRVMpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQ29uZmlnOiBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKG1hdERpYWxvZywgaW5qZWN0b3IsIGh0dHApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbmV3IERhdGVUaW1lQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCh0aGlzLm1ldGFkYXRhLCB0aGlzLmdsb2JhbENvbmZpZyk7XG4gICAgICAgIFJlZmxlY3RVdGlsaXRpZXMuZGVmaW5lTWV0YWRhdGEoJ21ldGFkYXRhJywgdGhpcy5tZXRhZGF0YSwgdGhpcy5lbnRpdHksIHRoaXMua2V5KTtcbiAgICAgICAgdGhpcy50aW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodGhpcy5lbnRpdHlbdGhpcy5rZXldIGFzIERhdGUpO1xuICAgICAgICB0aGlzLnRpbWVEcm9wZG93blZhbHVlcyA9IHRoaXMubWV0YWRhdGEudGltZXM7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eVt0aGlzLmtleV0gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lID0gbmV3IERhdGUodGhpcy5lbnRpdHlbdGhpcy5rZXldIGFzIERhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlc2V0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZGF0ZSB0aW1lIHRvIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICBhZGREYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy50aW1lKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IERhdGUodGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnNldEhvdXJzKHRoaXMudGltZS5ob3VycywgdGhpcy50aW1lLm1pbnV0ZXMsIDAsIDApO1xuICAgICAgICAgICAgdGhpcy5hZGQoKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCI8IS0tIGVzbGludC1kaXNhYmxlIGFuZ3VsYXIvbm8tY2FsbC1leHByZXNzaW9uIC0tPlxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggZWxldmF0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICA8Yj57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L2I+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaXNSZWFkT25seSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWV0YWRhdGEubWluRGF0ZSA/IG1ldGFkYXRhLm1pbkRhdGUoaW5wdXQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJtZXRhZGF0YS5tYXhEYXRlID8gbWV0YWRhdGEubWF4RGF0ZShpbnB1dCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJtZXRhZGF0YS5maWx0ZXJEYXRlID8/IERhdGVVdGlsaXRpZXMuZGVmYXVsdERhdGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKG1vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidGltZXBpY2tlclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS50aW1lRGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICN0aW1lTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICd0aW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbGlkVGltZSBvZiBEYXRlVXRpbGl0aWVzLmdldFZhbGlkVGltZXNGb3JEcm9wZG93bihtZXRhZGF0YS50aW1lcywgaW5wdXQsIG1ldGFkYXRhLm1pblRpbWUsIG1ldGFkYXRhLm1heFRpbWUsIG1ldGFkYXRhLmZpbHRlclRpbWUpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ2YWxpZFRpbWUudmFsdWVcIj57e3ZhbGlkVGltZS5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSh0aW1lTW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kZWwuZXJyb3JzIHx8IHRpbWVNb2RlbC5lcnJvcnMgfHwgRGF0ZVV0aWxpdGllcy50aW1lSXNVbnByb2Nlc3NhYmxlKHRpbWUpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGF0ZVRpbWUoKVwiPlxuICAgICAgICAgICAgICAgIHt7bWV0YWRhdGEuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YS5yZW1vdmVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCI+XG4gICAgICAgIDwhLS0gc2VsZWN0IENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiIWRhdGFTb3VyY2UuZGF0YS5sZW5ndGhcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChzZWxlY3Rpb24sIGRhdGFTb3VyY2UpXCIgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIVNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKHNlbGVjdGlvbiwgZGF0YVNvdXJjZSlcIiAoY2hhbmdlKT1cIiRldmVudCA/IFNlbGVjdGlvblV0aWxpdGllcy5tYXN0ZXJUb2dnbGUoc2VsZWN0aW9uLCBkYXRhU291cmNlKSA6IG51bGxcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZW50aXR5KVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUoZW50aXR5KSA6IG51bGxcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICBAZm9yIChkQ29sIG9mIG1ldGFkYXRhLmRpc3BsYXlDb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJkQ29sLmRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICAgICAge3tkQ29sLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZW50aXR5XCIgY2xhc3M9XCJlbnRpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXREaXNwbGF5Q29sdW1uVmFsdWUoZW50aXR5LCBkQ29sKX19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtcm93PlxuICAgIDwvbWF0LXRhYmxlPlxuXG4gICAgQGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFkYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcnJheS1lcnJvclwiPnt7bWV0YWRhdGEubWlzc2luZ0Vycm9yTWVzc2FnZX19PC9kaXY+XG4gICAgfVxuPC9kaXY+Il19
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXkvYXJyYXktZGF0ZS10aW1lLWlucHV0L2FycmF5LWRhdGUtdGltZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtdGltZS1pbnB1dC9hcnJheS1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUdsSCxPQUFPLEVBQUUsZ0JB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TUFBTTsyQkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlVGltZUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IERyb3Bkb3duVmFsdWUgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZHJvcGRvd24tdmFsdWUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlZmxlY3RVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9lbmNhcHN1bGF0aW9uL3JlZmxlY3QudXRpbGl0aWVzJztcbmltcG9ydCB7IE5HWF9DT01QTEVURV9HTE9CQUxfREVGQVVMVF9WQUxVRVMsIE5neEdsb2JhbERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWwtY29uZmlndXJhdGlvbi12YWx1ZXMnO1xuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcywgVGltZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcy9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBDdXN0b21UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9hcnJheS10YWJsZS5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhbmd1bGFyL2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXJyYXktZGF0ZS10aW1lLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXJyYXktZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIEN1c3RvbVRhYmxlQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcnJheURhdGVUaW1lSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PlxuICAgIGV4dGVuZHMgQXJyYXlUYWJsZUNvbXBvbmVudDxEYXRlLCBFbnRpdHlUeXBlLCBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIERhdGVVdGlsaXRpZXM6IHR5cGVvZiBEYXRlVXRpbGl0aWVzID0gRGF0ZVV0aWxpdGllcztcblxuICAgIGRhdGVUaW1lPzogRGF0ZTtcbiAgICB0aW1lPzogVGltZTtcbiAgICB0aW1lRHJvcGRvd25WYWx1ZXMhOiBEcm9wZG93blZhbHVlPFRpbWU+W107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbWF0RGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIEBJbmplY3QoTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxDb25maWc6IE5neEdsb2JhbERlZmF1bHRWYWx1ZXNcbiAgICApIHtcbiAgICAgICAgc3VwZXIobWF0RGlhbG9nLCBodHRwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBEYXRlVGltZUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwodGhpcy5tZXRhZGF0YSwgdGhpcy5nbG9iYWxDb25maWcpO1xuICAgICAgICBSZWZsZWN0VXRpbGl0aWVzLmRlZmluZU1ldGFkYXRhKCdtZXRhZGF0YScsIHRoaXMubWV0YWRhdGEsIHRoaXMuZW50aXR5LCB0aGlzLmtleSk7XG4gICAgICAgIHRoaXMudGltZSA9IERhdGVVdGlsaXRpZXMuZ2V0VGltZUZyb21EYXRlKHRoaXMuZW50aXR5W3RoaXMua2V5XSBhcyBEYXRlKTtcbiAgICAgICAgdGhpcy50aW1lRHJvcGRvd25WYWx1ZXMgPSB0aGlzLm1ldGFkYXRhLnRpbWVzO1xuICAgICAgICBpZiAodGhpcy5lbnRpdHlbdGhpcy5rZXldICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZSA9IG5ldyBEYXRlKHRoaXMuZW50aXR5W3RoaXMua2V5XSBhcyBEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlc2V0SW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZGF0ZSB0aW1lIHRvIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICBhc3luYyBhZGREYXRlVGltZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy50aW1lKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IERhdGUodGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnNldEhvdXJzKHRoaXMudGltZS5ob3VycywgdGhpcy50aW1lLm1pbnV0ZXMsIDAsIDApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGQoKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCI8IS0tIGVzbGludC1kaXNhYmxlIGFuZ3VsYXIvbm8tY2FsbC1leHByZXNzaW9uIC0tPlxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggZWxldmF0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcnJheS1oZWFkbGluZVwiPlxuICAgICAgICA8Yj57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L2I+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaXNSZWFkT25seSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWV0YWRhdGEubWluRGF0ZSA/IG1ldGFkYXRhLm1pbkRhdGUoaW5wdXQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJtZXRhZGF0YS5tYXhEYXRlID8gbWV0YWRhdGEubWF4RGF0ZShpbnB1dCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJtZXRhZGF0YS5maWx0ZXJEYXRlID8/IERhdGVVdGlsaXRpZXMuZGVmYXVsdERhdGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKG1vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidGltZXBpY2tlclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS50aW1lRGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICN0aW1lTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICd0aW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbGlkVGltZSBvZiBEYXRlVXRpbGl0aWVzLmdldFZhbGlkVGltZXNGb3JEcm9wZG93bihtZXRhZGF0YS50aW1lcywgaW5wdXQsIG1ldGFkYXRhLm1pblRpbWUsIG1ldGFkYXRhLm1heFRpbWUsIG1ldGFkYXRhLmZpbHRlclRpbWUpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ2YWxpZFRpbWUudmFsdWVcIj57e3ZhbGlkVGltZS5kaXNwbGF5TmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSh0aW1lTW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kZWwuZXJyb3JzIHx8IHRpbWVNb2RlbC5lcnJvcnMgfHwgRGF0ZVV0aWxpdGllcy50aW1lSXNVbnByb2Nlc3NhYmxlKHRpbWUpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGF0ZVRpbWUoKVwiPlxuICAgICAgICAgICAgICAgIHt7bWV0YWRhdGEuYWRkQnV0dG9uTGFiZWx9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhLnJlbW92ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8Y3VzdG9tLXRhYmxlXG4gICAgICAgIFtjb25maWd1cmF0aW9uXT1cInRhYmxlQ29uZmlnXCJcbiAgICAgICAgW2RhdGFdPVwicHJvcGVydHlWYWx1ZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0ZWQgPSAkYW55KCRldmVudClcIlxuICAgID5cbiAgICA8L2N1c3RvbS10YWJsZT5cbjwvZGl2PiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable jsdoc/require-jsdoc */
2
- import { NgFor } from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
3
  import { Component, EnvironmentInjector, runInInjectionContext } from '@angular/core';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
@@ -62,7 +62,7 @@ export class ArrayStringAutocompleteChipsComponent extends ArrayStringChipsInput
62
62
  this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(filterValue));
63
63
  }
64
64
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayStringAutocompleteChipsComponent, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component });
65
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayStringAutocompleteChipsComponent, isStandalone: true, selector: "array-string-autocomplete-chips", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n @for (value of propertyValue; track $index) {\n <mat-chip-row (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n }\n <input #chipsModel=\"ngModel\"\n #chipsElement\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [includedIn]=\"autocompleteMetadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"chipsInput\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement, model, chipsModel)\">\n @for (value of filteredAutocompleteStrings; track $index) {\n <mat-option [value]=\"value\">{{value}}</mat-option>\n }\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: FormsModule }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: IncludedInValidatorDirective, selector: "[includedIn]", inputs: ["includedIn"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }] });
65
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayStringAutocompleteChipsComponent, isStandalone: true, selector: "array-string-autocomplete-chips", usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable angular/no-call-expression -->\n\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n @for (value of propertyValue; track $index) {\n <mat-chip-row (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n }\n <input #chipsModel=\"ngModel\"\n #chipsElement\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [includedIn]=\"autocompleteMetadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"chipsInput\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement, model, chipsModel)\">\n @for (value of filteredAutocompleteStrings; track $index) {\n <mat-option [value]=\"value\">{{value}}</mat-option>\n }\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: FormsModule }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: IncludedInValidatorDirective, selector: "[includedIn]", inputs: ["includedIn"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }] });
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayStringAutocompleteChipsComponent, decorators: [{
68
68
  type: Component,
@@ -73,7 +73,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
73
73
  MatAutocompleteModule,
74
74
  IncludedInValidatorDirective,
75
75
  MatInputModule,
76
- NgFor
76
+ CommonModule
77
77
  ], template: "<!-- eslint-disable angular/no-call-expression -->\n\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n @for (value of propertyValue; track $index) {\n <mat-chip-row (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n }\n <input #chipsModel=\"ngModel\"\n #chipsElement\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [includedIn]=\"autocompleteMetadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"chipsInput\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement, model, chipsModel)\">\n @for (value of filteredAutocompleteStrings; track $index) {\n <mat-option [value]=\"value\">{{value}}</mat-option>\n }\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"] }]
78
78
  }], ctorParameters: () => [{ type: i0.EnvironmentInjector }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQVUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBZ0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXpELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7QUFrQmhILE1BQU0sT0FBTyxxQ0FDVCxTQUFRLDhCQUEwQztJQVNyQjtJQVA3QiwyQkFBMkIsQ0FBWTtJQUN2QyxtQkFBbUIsR0FBYSxFQUFFLENBQUM7SUFFbkMsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBMEUsQ0FBQztJQUMzRixDQUFDO0lBRUQsWUFBNkIsUUFBNkI7UUFDdEQsS0FBSyxFQUFFLENBQUM7UUFEaUIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7SUFFMUQsQ0FBQztJQUVRLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsUUFBUSxDQUFDLEtBQW1DLEVBQUUsVUFBNEIsRUFBRSxLQUFjLEVBQUUsVUFBbUI7UUFDM0csOERBQThEO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUN0RCxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QixDQUFDLEtBQWE7UUFDbkMsTUFBTSxXQUFXLEdBQVcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7dUdBakRRLHFDQUFxQzsyRkFBckMscUNBQXFDLGtIQy9CbEQsKzBEQXlDaUIscUZEbkJULGtCQUFrQix1WUFDbEIsY0FBYyw0dUJBQ2QsV0FBVywweUNBQ1gscUJBQXFCLHkxQkFDckIsNEJBQTRCLGdGQUM1QixjQUFjOzsyRkFJVCxxQ0FBcUM7a0JBaEJqRCxTQUFTOytCQUVJLGlDQUFpQyxjQUcvQixJQUFJLFdBQ1A7d0JBQ0wsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gscUJBQXFCO3dCQUNyQiw0QkFBNEI7d0JBQzVCLGNBQWM7d0JBQ2QsS0FBSztxQkFDUiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbmltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgT25Jbml0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEluY2x1ZGVkSW5WYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2luY2x1ZGVkLWluLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgQXJyYXlTdHJpbmdDaGlwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYW5ndWxhci9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIEluY2x1ZGVkSW5WYWxpZGF0b3JEaXJlY3RpdmUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBOZ0ZvclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlTdHJpbmdBdXRvY29tcGxldGVDaGlwc0NvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBBcnJheVN0cmluZ0NoaXBzSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgZmlsdGVyZWRBdXRvY29tcGxldGVTdHJpbmdzITogc3RyaW5nW107XG4gICAgYXV0b2NvbXBsZXRlU3RyaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGdldCBhdXRvY29tcGxldGVNZXRhZGF0YSgpOiBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YSBhcyB1bmtub3duIGFzIEF1dG9jb21wbGV0ZVN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHZvaWQgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyaW5ncyA9IGF3YWl0IHRoaXMuYXV0b2NvbXBsZXRlTWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzKHRoaXMuZW50aXR5KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBdXRvY29tcGxldGVTdHJpbmdzID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcCh0aGlzLmF1dG9jb21wbGV0ZVN0cmluZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFkZGluZyBhIHN0cmluZyB0byB0aGUgYXJyYXkgd2hlbiBhbiBhdXRvY29tcGxldGUgdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGF1dG9jb21wbGV0ZSBzZWxlY3RlZCBldmVudC5cbiAgICAgKiBAcGFyYW0gY2hpcHNJbnB1dCAtIFRoZSBlbGVtZW50IHdoZXJlIHRoZSB1c2VyIHR5cGVkIHRoZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgb2YgdGhlIHN0cmluZyBhcnJheS5cbiAgICAgKiBAcGFyYW0gY2hpcHNNb2RlbCAtIFRoZSBtb2RlbCBvZiB0aGUgc2luZ2xlIHN0cmluZyBpbnB1dC5cbiAgICAgKi9cbiAgICBzZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgY2hpcHNJbnB1dDogSFRNTElucHV0RWxlbWVudCwgbW9kZWw6IE5nTW9kZWwsIGNoaXBzTW9kZWw6IE5nTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBpcyBub3QgbmVlZGVkIGFzIHNlbGVjdGVkIG9wdGlvbnMgYXJlIGFsbCB2YWxpZC5cbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUucHVzaChldmVudC5vcHRpb24udmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgY2hpcHNJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLmNoaXBzSW5wdXQgPSAnJztcbiAgICAgICAgdGhpcy5maWx0ZXJBdXRvY29tcGxldGVTdHJpbmdzKHRoaXMuY2hpcHNJbnB1dCk7XG4gICAgICAgIGNoaXBzTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIG1vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25FcnJvcnMobW9kZWwsIGNoaXBzTW9kZWwpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEeW5hbWljYWxseSBmaWx0ZXJzIHRoZSBBdXRvY29tcGxldGUgb3B0aW9ucyB3aGVuIHRoZSB1c2VyIGlucHV0cyBzb21ldGhpbmcuXG4gICAgICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IG9mIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIGZpbHRlckF1dG9jb21wbGV0ZVN0cmluZ3MoaW5wdXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEF1dG9jb21wbGV0ZVN0cmluZ3MgPSB0aGlzLmF1dG9jb21wbGV0ZVN0cmluZ3MuZmlsdGVyKHMgPT4gcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XG4gICAgfVxufSIsIjwhLS0gZXNsaW50LWRpc2FibGUgYW5ndWxhci9uby1jYWxsLWV4cHJlc3Npb24gLS0+XG5cbjxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwR3JpZFxuICAgICAgICAjbW9kZWw9XCJuZ01vZGVsXCIgW25hbWVdPVwibmFtZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZE9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5VmFsdWVcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRWYWxpZGF0aW9uRXJyb3JzKG1vZGVsLCBjaGlwc01vZGVsKVwiXG4gICAgPlxuICAgICAgICBAZm9yICh2YWx1ZSBvZiBwcm9wZXJ0eVZhbHVlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlU3RyaW5nQ2hpcEFycmF5VmFsdWUodmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3t2YWx1ZX19XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIm1ldGFkYXRhLmRlbGV0ZUljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgfVxuICAgICAgICA8aW5wdXQgI2NoaXBzTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICNjaGlwc0VsZW1lbnRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBHcmlkXCJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxuICAgICAgICAgICAgW25hbWVdPVwidXVpZDJcIlxuICAgICAgICAgICAgW21pbmxlbmd0aF09XCJtZXRhZGF0YS5taW5MZW5ndGggPz8gbnVsbFwiXG4gICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIm1ldGFkYXRhLm1heExlbmd0aCA/PyBudWxsXCJcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cIm1ldGFkYXRhLnJlZ2V4ID8/ICdbXFxcXHNcXFxcU10qJ1wiXG4gICAgICAgICAgICBbaW5jbHVkZWRJbl09XCJhdXRvY29tcGxldGVNZXRhZGF0YS5yZXN0cmljdFRvT3B0aW9ucyA/IGF1dG9jb21wbGV0ZVN0cmluZ3MgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlwc0lucHV0XCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJBdXRvY29tcGxldGVTdHJpbmdzKGNoaXBzSW5wdXQpXCJcbiAgICAgICAgICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRTdHJpbmdDaGlwQXJyYXlWYWx1ZSgkZXZlbnQsICEhY2hpcHNNb2RlbC5lcnJvcnMpXCJcbiAgICAgICAgLz5cbiAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0ZWQoJGV2ZW50LCBjaGlwc0VsZW1lbnQsIG1vZGVsLCBjaGlwc01vZGVsKVwiPlxuICAgICAgICBAZm9yICh2YWx1ZSBvZiBmaWx0ZXJlZEF1dG9jb21wbGV0ZVN0cmluZ3M7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxtYXQtZXJyb3I+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKG1vZGVsKX19PC9tYXQtZXJyb3I+XG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQVUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBZ0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXpELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7QUFrQmhILE1BQU0sT0FBTyxxQ0FDVCxTQUFRLDhCQUEwQztJQVNyQjtJQVA3QiwyQkFBMkIsQ0FBWTtJQUN2QyxtQkFBbUIsR0FBYSxFQUFFLENBQUM7SUFFbkMsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBMEUsQ0FBQztJQUMzRixDQUFDO0lBRUQsWUFBNkIsUUFBNkI7UUFDdEQsS0FBSyxFQUFFLENBQUM7UUFEaUIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7SUFFMUQsQ0FBQztJQUVRLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsUUFBUSxDQUFDLEtBQW1DLEVBQUUsVUFBNEIsRUFBRSxLQUFjLEVBQUUsVUFBbUI7UUFDM0csOERBQThEO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUN0RCxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QixDQUFDLEtBQWE7UUFDbkMsTUFBTSxXQUFXLEdBQVcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7dUdBakRRLHFDQUFxQzsyRkFBckMscUNBQXFDLGtIQy9CbEQsKzBEQXlDaUIscUZEbkJULGtCQUFrQix1WUFDbEIsY0FBYyw0dUJBQ2QsV0FBVywweUNBQ1gscUJBQXFCLHkxQkFDckIsNEJBQTRCLGdGQUM1QixjQUFjLDBXQUNkLFlBQVk7OzJGQUdQLHFDQUFxQztrQkFoQmpELFNBQVM7K0JBRUksaUNBQWlDLGNBRy9CLElBQUksV0FDUDt3QkFDTCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxxQkFBcUI7d0JBQ3JCLDRCQUE0Qjt3QkFDNUIsY0FBYzt3QkFDZCxZQUFZO3FCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgT25Jbml0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEluY2x1ZGVkSW5WYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2luY2x1ZGVkLWluLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgQXJyYXlTdHJpbmdDaGlwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYW5ndWxhci9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIEluY2x1ZGVkSW5WYWxpZGF0b3JEaXJlY3RpdmUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBDb21tb25Nb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHNDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PlxuICAgIGV4dGVuZHMgQXJyYXlTdHJpbmdDaGlwc0lucHV0Q29tcG9uZW50PEVudGl0eVR5cGU+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGZpbHRlcmVkQXV0b2NvbXBsZXRlU3RyaW5ncyE6IHN0cmluZ1tdO1xuICAgIGF1dG9jb21wbGV0ZVN0cmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBnZXQgYXV0b2NvbXBsZXRlTWV0YWRhdGEoKTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YWRhdGEgYXMgdW5rbm93biBhcyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3Rvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB2b2lkIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmluZ3MgPSBhd2FpdCB0aGlzLmF1dG9jb21wbGV0ZU1ldGFkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcyh0aGlzLmVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQXV0b2NvbXBsZXRlU3RyaW5ncyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5hdXRvY29tcGxldGVTdHJpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhZGRpbmcgYSBzdHJpbmcgdG8gdGhlIGFycmF5IHdoZW4gYW4gYXV0b2NvbXBsZXRlIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBhdXRvY29tcGxldGUgc2VsZWN0ZWQgZXZlbnQuXG4gICAgICogQHBhcmFtIGNoaXBzSW5wdXQgLSBUaGUgZWxlbWVudCB3aGVyZSB0aGUgdXNlciB0eXBlZCB0aGUgdmFsdWUuXG4gICAgICogQHBhcmFtIG1vZGVsIC0gVGhlIG1vZGVsIG9mIHRoZSBzdHJpbmcgYXJyYXkuXG4gICAgICogQHBhcmFtIGNoaXBzTW9kZWwgLSBUaGUgbW9kZWwgb2YgdGhlIHNpbmdsZSBzdHJpbmcgaW5wdXQuXG4gICAgICovXG4gICAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsIGNoaXBzSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIG1vZGVsOiBOZ01vZGVsLCBjaGlwc01vZGVsOiBOZ01vZGVsKTogdm9pZCB7XG4gICAgICAgIC8vIHZhbGlkYXRpb24gaXMgbm90IG5lZWRlZCBhcyBzZWxlY3RlZCBvcHRpb25zIGFyZSBhbGwgdmFsaWQuXG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZSA/PyBbXTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlLnB1c2goZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgIGNoaXBzSW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5jaGlwc0lucHV0ID0gJyc7XG4gICAgICAgIHRoaXMuZmlsdGVyQXV0b2NvbXBsZXRlU3RyaW5ncyh0aGlzLmNoaXBzSW5wdXQpO1xuICAgICAgICBjaGlwc01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICBtb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRXJyb3JzKG1vZGVsLCBjaGlwc01vZGVsKTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHluYW1pY2FsbHkgZmlsdGVycyB0aGUgQXV0b2NvbXBsZXRlIG9wdGlvbnMgd2hlbiB0aGUgdXNlciBpbnB1dHMgc29tZXRoaW5nLlxuICAgICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBpbnB1dCBvZiB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBmaWx0ZXJBdXRvY29tcGxldGVTdHJpbmdzKGlucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWU6IHN0cmluZyA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRBdXRvY29tcGxldGVTdHJpbmdzID0gdGhpcy5hdXRvY29tcGxldGVTdHJpbmdzLmZpbHRlcihzID0+IHMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xuICAgIH1cbn0iLCI8IS0tIGVzbGludC1kaXNhYmxlIGFuZ3VsYXIvbm8tY2FsbC1leHByZXNzaW9uIC0tPlxuXG48bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57e21ldGFkYXRhLmRpc3BsYXlOYW1lfX08L21hdC1sYWJlbD5cbiAgICA8bWF0LWNoaXAtZ3JpZCAjY2hpcEdyaWRcbiAgICAgICAgI21vZGVsPVwibmdNb2RlbFwiIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eVZhbHVlXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0VmFsaWRhdGlvbkVycm9ycyhtb2RlbCwgY2hpcHNNb2RlbClcIlxuICAgID5cbiAgICAgICAgQGZvciAodmFsdWUgb2YgcHJvcGVydHlWYWx1ZTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZVN0cmluZ0NoaXBBcnJheVZhbHVlKHZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJtZXRhZGF0YS5kZWxldGVJY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgIH1cbiAgICAgICAgPGlucHV0ICNjaGlwc01vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjY2hpcHNFbGVtZW50XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiXG4gICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cInV1aWQyXCJcbiAgICAgICAgICAgIFttaW5sZW5ndGhdPVwibWV0YWRhdGEubWluTGVuZ3RoID8/IG51bGxcIlxuICAgICAgICAgICAgW21heGxlbmd0aF09XCJtZXRhZGF0YS5tYXhMZW5ndGggPz8gbnVsbFwiXG4gICAgICAgICAgICBbcGF0dGVybl09XCJtZXRhZGF0YS5yZWdleCA/PyAnW1xcXFxzXFxcXFNdKidcIlxuICAgICAgICAgICAgW2luY2x1ZGVkSW5dPVwiYXV0b2NvbXBsZXRlTWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPyBhdXRvY29tcGxldGVTdHJpbmdzIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hpcHNJbnB1dFwiXG4gICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyQXV0b2NvbXBsZXRlU3RyaW5ncyhjaGlwc0lucHV0KVwiXG4gICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkU3RyaW5nQ2hpcEFycmF5VmFsdWUoJGV2ZW50LCAhIWNoaXBzTW9kZWwuZXJyb3JzKVwiXG4gICAgICAgIC8+XG4gICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cInNlbGVjdGVkKCRldmVudCwgY2hpcHNFbGVtZW50LCBtb2RlbCwgY2hpcHNNb2RlbClcIj5cbiAgICAgICAgQGZvciAodmFsdWUgb2YgZmlsdGVyZWRBdXRvY29tcGxldGVTdHJpbmdzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=