ngx-material-entity 18.0.1 → 18.2.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 (109) hide show
  1. package/README.md +10 -13
  2. package/components/create-page/create-page.component.d.ts +3 -0
  3. package/components/custom-table/custom-table-configuration.model.d.ts +65 -0
  4. package/components/custom-table/custom-table.component.d.ts +111 -0
  5. package/components/edit-page/edit-page.component.d.ts +8 -1
  6. package/components/input/array/array-date-input/array-date-input.component.d.ts +2 -2
  7. package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +3 -3
  8. package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +3 -3
  9. package/components/input/array/array-table.class.d.ts +25 -19
  10. package/components/input/file/file-default-input/file-default-input.component.d.ts +1 -1
  11. package/components/input/file/file-image-input/file-image-input.component.d.ts +3 -0
  12. package/components/input/file/file-input/file-input.component.d.ts +8 -2
  13. package/components/input/input.component.d.ts +101 -80
  14. package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +2 -0
  15. package/components/input/relations/references-many-input/references-many-input.component.d.ts +14 -17
  16. package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +2 -0
  17. package/components/input/string/string-password-input/string-password-input.component.d.ts +3 -0
  18. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +5 -5
  19. package/components/table/table-data.d.ts +9 -4
  20. package/components/table/table.component.d.ts +15 -37
  21. package/components/tooltip/tooltip.component.d.ts +2 -0
  22. package/decorators/array/array-decorator-internal.data.d.ts +8 -3
  23. package/decorators/array/array-decorator.data.d.ts +45 -88
  24. package/decorators/base/property-decorator.data.d.ts +2 -2
  25. package/decorators/file/file-decorator-internal.data.d.ts +3 -2
  26. package/decorators/file/file-decorator.data.d.ts +4 -3
  27. package/decorators/references-many/references-many-decorator-internal.data.d.ts +3 -1
  28. package/decorators/references-many/references-many-decorator.data.d.ts +13 -1
  29. package/directives/dynamic-style-class.directive.d.ts +4 -5
  30. package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +7 -8
  31. package/esm2022/components/create-page/create-page.component.mjs +17 -11
  32. package/esm2022/components/custom-table/custom-table-configuration.model.mjs +37 -0
  33. package/esm2022/components/custom-table/custom-table.component.mjs +213 -0
  34. package/esm2022/components/edit-page/edit-page.component.mjs +29 -12
  35. package/esm2022/components/form/form.component.mjs +7 -8
  36. package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +17 -21
  37. package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +28 -27
  38. package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +18 -22
  39. package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +9 -7
  40. package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +9 -7
  41. package/esm2022/components/input/array/array-table.class.mjs +53 -45
  42. package/esm2022/components/input/base-input.component.mjs +3 -3
  43. package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +4 -4
  44. package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +3 -3
  45. package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +4 -4
  46. package/esm2022/components/input/custom/custom.component.mjs +3 -3
  47. package/esm2022/components/input/date/date-input/date-input.component.mjs +3 -3
  48. package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +7 -8
  49. package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +6 -6
  50. package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +5 -5
  51. package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +10 -9
  52. package/esm2022/components/input/file/file-input/file-input.component.mjs +27 -15
  53. package/esm2022/components/input/input.component.mjs +162 -114
  54. package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +11 -8
  55. package/esm2022/components/input/number/number-input/number-input.component.mjs +3 -3
  56. package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +4 -4
  57. package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +46 -57
  58. package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +6 -7
  59. package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +11 -8
  60. package/esm2022/components/input/string/string-input/string-input.component.mjs +3 -3
  61. package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +13 -8
  62. package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +3 -3
  63. package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +9 -10
  64. package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +3 -3
  65. package/esm2022/components/table/display-column-value/display-column-value.component.mjs +3 -3
  66. package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +1 -1
  67. package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +21 -16
  68. package/esm2022/components/table/table-data.builder.mjs +3 -1
  69. package/esm2022/components/table/table-data.mjs +1 -1
  70. package/esm2022/components/table/table.component.mjs +41 -114
  71. package/esm2022/components/tooltip/tooltip.component.mjs +9 -5
  72. package/esm2022/decorators/array/array-decorator-internal.data.mjs +18 -3
  73. package/esm2022/decorators/array/array-decorator.data.mjs +33 -2
  74. package/esm2022/decorators/array/array.decorator.mjs +15 -8
  75. package/esm2022/decorators/base/property-decorator.data.mjs +2 -2
  76. package/esm2022/decorators/file/file-decorator-internal.data.mjs +4 -3
  77. package/esm2022/decorators/file/file-decorator.data.mjs +3 -3
  78. package/esm2022/decorators/file/file.decorator.mjs +7 -4
  79. package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +1 -1
  80. package/esm2022/decorators/number/number.decorator.mjs +7 -4
  81. package/esm2022/decorators/object/object.decorator.mjs +5 -3
  82. package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +8 -1
  83. package/esm2022/decorators/references-many/references-many-decorator.data.mjs +1 -1
  84. package/esm2022/decorators/string/string-decorator-internal.data.mjs +2 -1
  85. package/esm2022/decorators/string/string.decorator.mjs +11 -6
  86. package/esm2022/directives/drag-drop.directive.mjs +3 -3
  87. package/esm2022/directives/dynamic-style-class.directive.mjs +7 -7
  88. package/esm2022/directives/included-in.directive.mjs +3 -3
  89. package/esm2022/directives/number.directive.mjs +3 -3
  90. package/esm2022/directives/password-match.directive.mjs +3 -3
  91. package/esm2022/directives/tooltip.directive.mjs +7 -4
  92. package/esm2022/functions/dropdown-values-to-function.function.mjs +2 -1
  93. package/esm2022/functions/get-changes-tooltip-content.function.mjs +23 -0
  94. package/esm2022/functions/get-validation-errors-tooltip-content.function.mjs +23 -0
  95. package/esm2022/functions/table-column-value-to-sort-value.function.mjs +33 -0
  96. package/esm2022/public-api.mjs +3 -2
  97. package/esm2022/utilities/date.utilities.mjs +7 -6
  98. package/esm2022/utilities/entity.utilities.mjs +58 -27
  99. package/esm2022/utilities/file.utilities.mjs +7 -4
  100. package/esm2022/utilities/validation.utilities.mjs +41 -21
  101. package/fesm2022/ngx-material-entity.mjs +2767 -2336
  102. package/fesm2022/ngx-material-entity.mjs.map +1 -1
  103. package/functions/get-changes-tooltip-content.function.d.ts +13 -0
  104. package/functions/table-column-value-to-sort-value.function.d.ts +9 -0
  105. package/package.json +4 -2
  106. package/public-api.d.ts +2 -1
  107. package/utilities/entity.utilities.d.ts +11 -7
  108. package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +0 -23
  109. /package/functions/{get-validation-errors-tooltip-content.function.ts.d.ts → get-validation-errors-tooltip-content.function.d.ts} +0 -0
@@ -1,19 +1,18 @@
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
- import { MatTableModule } from '@angular/material/table';
13
11
  import { DateArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';
14
12
  import { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';
15
13
  import { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES } from '../../../../global-configuration-values';
16
14
  import { DateUtilities } from '../../../../utilities/date.utilities';
15
+ import { CustomTableComponent } from '../../../custom-table/custom-table.component';
17
16
  import { ArrayTableComponent } from '../array-table.class';
18
17
  import * as i0 from "@angular/core";
19
18
  import * as i1 from "@angular/material/dialog";
@@ -21,40 +20,37 @@ import * as i2 from "@angular/common/http";
21
20
  import * as i3 from "@angular/material/form-field";
22
21
  import * as i4 from "@angular/forms";
23
22
  import * as i5 from "@angular/material/datepicker";
24
- import * as i6 from "@angular/material/table";
25
- import * as i7 from "@angular/material/checkbox";
26
- import * as i8 from "@angular/material/input";
27
- import * as i9 from "@angular/material/button";
23
+ import * as i6 from "@angular/material/input";
24
+ import * as i7 from "@angular/material/button";
28
25
  export class ArrayDateInputComponent extends ArrayTableComponent {
29
26
  globalConfig;
30
27
  DateUtilities = DateUtilities;
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() {
36
33
  super.ngOnInit();
37
34
  this.metadata = new DateArrayDecoratorConfigInternal(this.metadata, this.globalConfig);
38
35
  ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);
36
+ this.setTableConfig();
39
37
  }
40
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateInputComponent, deps: [{ token: i1.MatDialog }, { token: i0.EnvironmentInjector }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
41
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayDateInputComponent, isStandalone: true, selector: "array-date-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 appearance=\"outline\">\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.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? 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 \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors\"\n (click)=\"add()\">\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 <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}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}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}.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: 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: 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: 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"] }] });
38
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: ArrayDateInputComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpClient }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
39
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.7", type: ArrayDateInputComponent, isStandalone: true, selector: "array-date-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 <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? 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 \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.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: 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: 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: MatButtonModule }, { kind: "component", type: i7.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"] }] });
42
40
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateInputComponent, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: ArrayDateInputComponent, decorators: [{
44
42
  type: Component,
45
43
  args: [{ selector: 'array-date-input', standalone: true, imports: [
46
- NgIf,
44
+ CommonModule,
47
45
  MatFormFieldModule,
48
46
  FormsModule,
49
47
  MatDatepickerModule,
50
- MatTableModule,
51
- MatCheckboxModule,
52
48
  MatInputModule,
53
- NgFor,
54
- MatButtonModule
55
- ], 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 appearance=\"outline\">\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.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? 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 \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors\"\n (click)=\"add()\">\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 <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}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}.elevation-container{border-radius:5px;padding:15px;margin-bottom:15px;margin-top:15px}.array-headline{padding-bottom:10px}.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"] }]
56
- }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i0.EnvironmentInjector }, { type: i2.HttpClient }, { type: undefined, decorators: [{
49
+ MatButtonModule,
50
+ CustomTableComponent
51
+ ], 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 <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? 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 \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.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"] }]
52
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.HttpClient }, { type: undefined, decorators: [{
57
53
  type: Inject,
58
54
  args: [NGX_COMPLETE_GLOBAL_DEFAULT_VALUES]
59
55
  }] }] });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtaW5wdXQvYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtaW5wdXQvYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUU5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0NBQWtDLEVBQTBCLE1BQU0seUNBQXlDLENBQUM7QUFDckgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7OztBQW9CM0QsTUFBTSxPQUFPLHVCQUNULFNBQVEsbUJBQWdFO0lBU25EO0lBUHJCLGFBQWEsR0FBeUIsYUFBYSxDQUFDO0lBRXBELFlBQ0ksU0FBb0IsRUFDcEIsUUFBNkIsRUFDN0IsSUFBZ0IsRUFFQyxZQUFvQztRQUVyRCxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUZoQixpQkFBWSxHQUFaLFlBQVksQ0FBd0I7SUFHekQsQ0FBQztJQUVRLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RixDQUFDO3VHQW5CUSx1QkFBdUIsd0dBU3BCLGtDQUFrQzsyRkFUckMsdUJBQXVCLG1HQ3ZDcEMsc3FHQWtFTSw4MkJEckNFLGtCQUFrQix3Z0JBQ2xCLFdBQVcsMjBCQUNYLG1CQUFtQixpZ0JBQ25CLGNBQWMsc2dDQUNkLGlCQUFpQiw2V0FDakIsY0FBYywwV0FFZCxlQUFlOzsyRkFHVix1QkFBdUI7a0JBbEJuQyxTQUFTOytCQUVJLGtCQUFrQixjQUdoQixJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxLQUFLO3dCQUNMLGVBQWU7cUJBQ2xCOzswQkFXSSxNQUFNOzJCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5cbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFJlZmxlY3RVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9lbmNhcHN1bGF0aW9uL3JlZmxlY3QudXRpbGl0aWVzJztcbmltcG9ydCB7IE5HWF9DT01QTEVURV9HTE9CQUxfREVGQVVMVF9WQUxVRVMsIE5neEdsb2JhbERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWwtY29uZmlndXJhdGlvbi12YWx1ZXMnO1xuaW1wb3J0IHsgRGF0ZVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcy9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcnJheVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXJyYXktdGFibGUuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYW5ndWxhci9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LWRhdGUtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1kYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5RGF0ZUlucHV0Q29tcG9uZW50PEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj5cbiAgICBleHRlbmRzIEFycmF5VGFibGVDb21wb25lbnQ8RGF0ZSwgRW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgRGF0ZVV0aWxpdGllczogdHlwZW9mIERhdGVVdGlsaXRpZXMgPSBEYXRlVXRpbGl0aWVzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgQEluamVjdChOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlc1xuICAgICkge1xuICAgICAgICBzdXBlcihtYXREaWFsb2csIGluamVjdG9yLCBodHRwKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBEYXRlQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCh0aGlzLm1ldGFkYXRhLCB0aGlzLmdsb2JhbENvbmZpZyk7XG4gICAgICAgIFJlZmxlY3RVdGlsaXRpZXMuZGVmaW5lTWV0YWRhdGEoJ21ldGFkYXRhJywgdGhpcy5tZXRhZGF0YSwgdGhpcy5lbnRpdHksIHRoaXMua2V5KTtcbiAgICB9XG59IiwiPCEtLSBlc2xpbnQtZGlzYWJsZSBhbmd1bGFyL25vLWNhbGwtZXhwcmVzc2lvbiAtLT5cbjxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4IGVsZXZhdGlvbi1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXJyYXktaGVhZGxpbmVcIj5cbiAgICAgICAgPGI+e3ttZXRhZGF0YS5kaXNwbGF5TmFtZX19PC9iPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1ldGFkYXRhLm1pbiA/IG1ldGFkYXRhLm1pbihpbnB1dCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWV0YWRhdGEubWF4ID8gbWV0YWRhdGEubWF4KGlucHV0KSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwibWV0YWRhdGEuZmlsdGVyID8/IERhdGVVdGlsaXRpZXMuZGVmYXVsdERhdGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGVsLmVycm9yc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YS5hZGRCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhLnJlbW92ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8bWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIj5cbiAgICAgICAgPCEtLSBzZWxlY3QgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiPlxuICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCIhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aFwiIFtjaGVja2VkXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIFNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKHNlbGVjdGlvbiwgZGF0YVNvdXJjZSlcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhU2VsZWN0aW9uVXRpbGl0aWVzLmlzQWxsU2VsZWN0ZWQoc2VsZWN0aW9uLCBkYXRhU291cmNlKVwiIChjaGFuZ2UpPVwiJGV2ZW50ID8gU2VsZWN0aW9uVXRpbGl0aWVzLm1hc3RlclRvZ2dsZShzZWxlY3Rpb24sIGRhdGFTb3VyY2UpIDogbnVsbFwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZW50aXR5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbnRpdHkpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0aW9uLnRvZ2dsZShlbnRpdHkpIDogbnVsbFwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgIEBmb3IgKGRDb2wgb2YgbWV0YWRhdGEuZGlzcGxheUNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImRDb2wuZGlzcGxheU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgICAgICB7e2RDb2wuZGlzcGxheU5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbnRpdHlcIiBjbGFzcz1cImVudGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2dldERpc3BsYXlDb2x1bW5WYWx1ZShlbnRpdHksIGRDb2wpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L21hdC1yb3c+XG4gICAgPC9tYXQtdGFibGU+XG5cbiAgICBAaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIWRhdGFTb3VyY2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFycmF5LWVycm9yXCI+e3ttZXRhZGF0YS5taXNzaW5nRXJyb3JNZXNzYWdlfX08L2Rpdj5cbiAgICB9XG48L2Rpdj4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtaW5wdXQvYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LWRhdGUtaW5wdXQvYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtDQUFrQyxFQUEwQixNQUFNLHlDQUF5QyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBa0IzRCxNQUFNLE9BQU8sdUJBQ1QsU0FBUSxtQkFBZ0U7SUFRbkQ7SUFOckIsYUFBYSxHQUF5QixhQUFhLENBQUM7SUFFcEQsWUFDSSxNQUFpQixFQUNqQixJQUFnQixFQUVDLFlBQW9DO1FBRXJELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFGSCxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7SUFHekQsQ0FBQztJQUVRLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQzt1R0FuQlEsdUJBQXVCLHFFQVFwQixrQ0FBa0M7MkZBUnJDLHVCQUF1QixtR0NwQ3BDLHl2REE2Q00saVdEbEJFLFlBQVksOEJBQ1osa0JBQWtCLHdnQkFDbEIsV0FBVywyMEJBQ1gsbUJBQW1CLGlnQkFDbkIsY0FBYywwV0FDZCxlQUFlLDROQUNmLG9CQUFvQjs7MkZBR2YsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFFSSxrQkFBa0IsY0FHaEIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG9CQUFvQjtxQkFDdkI7OzBCQVVJLE1BQU07MkJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlQXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvYXJyYXkvYXJyYXktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgUmVmbGVjdFV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uLy4uL2VuY2Fwc3VsYXRpb24vcmVmbGVjdC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUywgTmd4R2xvYmFsRGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbC1jb25maWd1cmF0aW9uLXZhbHVlcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL2RhdGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEN1c3RvbVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJyYXlUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2FycmF5LXRhYmxlLmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFuZ3VsYXIvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcnJheS1kYXRlLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXJyYXktZGF0ZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIEN1c3RvbVRhYmxlQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcnJheURhdGVJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBBcnJheVRhYmxlQ29tcG9uZW50PERhdGUsIEVudGl0eVR5cGUsIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEU+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIERhdGVVdGlsaXRpZXM6IHR5cGVvZiBEYXRlVXRpbGl0aWVzID0gRGF0ZVV0aWxpdGllcztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgQEluamVjdChOR1hfQ09NUExFVEVfR0xPQkFMX0RFRkFVTFRfVkFMVUVTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlc1xuICAgICkge1xuICAgICAgICBzdXBlcihkaWFsb2csIGh0dHApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbmV3IERhdGVBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsKHRoaXMubWV0YWRhdGEsIHRoaXMuZ2xvYmFsQ29uZmlnKTtcbiAgICAgICAgUmVmbGVjdFV0aWxpdGllcy5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhLCB0aGlzLmVudGl0eSwgdGhpcy5rZXkpO1xuICAgICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKCk7XG4gICAgfVxufSIsIjwhLS0gZXNsaW50LWRpc2FibGUgYW5ndWxhci9uby1jYWxsLWV4cHJlc3Npb24gLS0+XG48ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBlbGV2YXRpb24tY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImFycmF5LWhlYWRsaW5lXCI+XG4gICAgICAgIDxiPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvYj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKCFpc1JlYWRPbmx5KSB7XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS5kaXNwbGF5TmFtZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjbW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIm1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWV0YWRhdGEubWluID8gbWV0YWRhdGEubWluKGlucHV0KSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtZXRhZGF0YS5tYXggPyBtZXRhZGF0YS5tYXgoaW5wdXQpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJtZXRhZGF0YS5maWx0ZXIgPz8gRGF0ZVV0aWxpdGllcy5kZWZhdWx0RGF0ZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3I+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKG1vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kZWwuZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkKClcIj5cbiAgICAgICAgICAgICAgICB7e21ldGFkYXRhLmFkZEJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgpXCI+XG4gICAgICAgICAgICAgICAge3ttZXRhZGF0YS5yZW1vdmVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGN1c3RvbS10YWJsZVxuICAgICAgICBbY29uZmlndXJhdGlvbl09XCJ0YWJsZUNvbmZpZ1wiXG4gICAgICAgIFtkYXRhXT1cInByb3BlcnR5VmFsdWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KVwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNlbGVjdGVkID0gJGFueSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9jdXN0b20tdGFibGU+XG48L2Rpdj4iXX0=
@@ -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.7", 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.7", 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
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayDateRangeInputComponent, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", 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==