ngx-material-entity 0.1.4 → 1.0.5

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 (156) hide show
  1. package/README.md +416 -39
  2. package/capsulation/lodash.utilities.d.ts +62 -0
  3. package/capsulation/reflect.utilities.d.ts +56 -0
  4. package/classes/base.builder.d.ts +2 -1
  5. package/classes/date.utilities.d.ts +18 -6
  6. package/classes/entity.model.d.ts +9 -2
  7. package/classes/entity.service.d.ts +38 -1
  8. package/classes/entity.utilities.d.ts +45 -16
  9. package/classes/file.utilities.d.ts +52 -0
  10. package/components/input/add-array-item-dialog-data.builder.d.ts +3 -2
  11. package/components/input/add-array-item-dialog-data.d.ts +2 -1
  12. package/components/input/array/array-date-input/array-date-input.component.d.ts +11 -0
  13. package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +20 -0
  14. package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +22 -0
  15. package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +50 -0
  16. package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +42 -0
  17. package/components/input/array/array-table.class.d.ts +48 -0
  18. package/components/input/base-input.component.d.ts +57 -0
  19. package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +10 -0
  20. package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +9 -0
  21. package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +10 -0
  22. package/components/input/custom/custom.component.d.ts +13 -0
  23. package/components/input/date/date-input/date-input.component.d.ts +11 -0
  24. package/components/input/date/date-range-input/date-range-input.component.d.ts +19 -0
  25. package/components/input/date/date-time-input/date-time-input.component.d.ts +30 -0
  26. package/components/input/file/file-default-input/file-default-input.component.d.ts +13 -0
  27. package/components/input/file/file-image-input/file-image-input.component.d.ts +22 -0
  28. package/components/input/file/file-input/dragDrop.directive.d.ts +32 -0
  29. package/components/input/file/file-input/file-input.component.d.ts +33 -0
  30. package/components/input/input.component.d.ts +49 -92
  31. package/components/input/input.module.d.ts +41 -16
  32. package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +9 -0
  33. package/components/input/number/number-input/number-input.component.d.ts +9 -0
  34. package/components/input/number/number-slider-input/number-slider-input.component.d.ts +9 -0
  35. package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +18 -0
  36. package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +9 -0
  37. package/components/input/string/string-input/string-input.component.d.ts +9 -0
  38. package/components/input/string/string-password-input/string-password-input.component.d.ts +15 -0
  39. package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +9 -0
  40. package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +3 -2
  41. package/components/table/create-dialog/create-entity-dialog-data.d.ts +2 -1
  42. package/components/table/create-dialog/create-entity-dialog.component.d.ts +7 -2
  43. package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +3 -2
  44. package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +6 -1
  45. package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +5 -3
  46. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +6 -2
  47. package/components/table/table-data.builder.d.ts +9 -8
  48. package/components/table/table-data.d.ts +18 -10
  49. package/components/table/table.component.d.ts +2 -1
  50. package/decorators/array/array-decorator-internal.data.d.ts +71 -6
  51. package/decorators/array/array-decorator.data.d.ts +178 -12
  52. package/decorators/array/array.decorator.d.ts +3 -2
  53. package/decorators/base/base-property.decorator.d.ts +2 -3
  54. package/decorators/base/decorator-types.enum.d.ts +15 -5
  55. package/decorators/custom/custom-decorator-internal.data.d.ts +17 -0
  56. package/decorators/custom/custom-decorator.data.d.ts +37 -0
  57. package/decorators/custom/custom.decorator.d.ts +11 -0
  58. package/decorators/date/date-decorator-internal.data.d.ts +2 -2
  59. package/decorators/date/date.decorator.d.ts +8 -0
  60. package/decorators/file/file-decorator-internal.data.d.ts +92 -0
  61. package/decorators/file/file-decorator.data.d.ts +92 -0
  62. package/decorators/file/file.decorator.d.ts +9 -0
  63. package/decorators/number/number-decorator-internal.data.d.ts +20 -1
  64. package/decorators/number/number-decorator.data.d.ts +27 -1
  65. package/decorators/number/number.decorator.d.ts +2 -2
  66. package/decorators/object/object-decorator-internal.data.d.ts +2 -2
  67. package/decorators/object/object-decorator.data.d.ts +3 -3
  68. package/decorators/object/object.decorator.d.ts +2 -1
  69. package/decorators/string/string-decorator-internal.data.d.ts +14 -1
  70. package/decorators/string/string-decorator.data.d.ts +37 -1
  71. package/decorators/string/string.decorator.d.ts +2 -2
  72. package/esm2020/capsulation/lodash.utilities.mjs +75 -0
  73. package/esm2020/capsulation/reflect.utilities.mjs +69 -0
  74. package/esm2020/classes/base.builder.mjs +2 -3
  75. package/esm2020/classes/date.utilities.mjs +35 -15
  76. package/esm2020/classes/entity.model.mjs +5 -1
  77. package/esm2020/classes/entity.service.mjs +103 -6
  78. package/esm2020/classes/entity.utilities.mjs +241 -71
  79. package/esm2020/classes/file.utilities.mjs +124 -0
  80. package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +4 -4
  81. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
  82. package/esm2020/components/input/add-array-item-dialog-data.builder.mjs +2 -2
  83. package/esm2020/components/input/add-array-item-dialog-data.mjs +1 -1
  84. package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +26 -0
  85. package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +50 -0
  86. package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +50 -0
  87. package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +103 -0
  88. package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +85 -0
  89. package/esm2020/components/input/array/array-table.class.mjs +104 -0
  90. package/esm2020/components/input/base-input.component.mjs +65 -0
  91. package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +21 -0
  92. package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +17 -0
  93. package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +21 -0
  94. package/esm2020/components/input/custom/custom.component.mjs +26 -0
  95. package/esm2020/components/input/date/date-input/date-input.component.mjs +22 -0
  96. package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +51 -0
  97. package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +63 -0
  98. package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +23 -0
  99. package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +84 -0
  100. package/esm2020/components/input/file/file-input/dragDrop.directive.mjs +64 -0
  101. package/esm2020/components/input/file/file-input/file-input.component.mjs +154 -0
  102. package/esm2020/components/input/input.component.mjs +137 -236
  103. package/esm2020/components/input/input.module.mjs +82 -6
  104. package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +18 -0
  105. package/esm2020/components/input/number/number-input/number-input.component.mjs +16 -0
  106. package/esm2020/components/input/number/number-slider-input/number-slider-input.component.mjs +17 -0
  107. package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +35 -0
  108. package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +18 -0
  109. package/esm2020/components/input/string/string-input/string-input.component.mjs +16 -0
  110. package/esm2020/components/input/string/string-password-input/string-password-input.component.mjs +36 -0
  111. package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +17 -0
  112. package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +2 -2
  113. package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +1 -1
  114. package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
  115. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +15 -8
  116. package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +2 -2
  117. package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
  118. package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +4 -3
  119. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +19 -10
  120. package/esm2020/components/table/table-data.builder.mjs +13 -10
  121. package/esm2020/components/table/table-data.mjs +1 -1
  122. package/esm2020/components/table/table.component.mjs +35 -35
  123. package/esm2020/decorators/array/array-decorator-internal.data.mjs +102 -14
  124. package/esm2020/decorators/array/array-decorator.data.mjs +2 -2
  125. package/esm2020/decorators/array/array.decorator.mjs +8 -2
  126. package/esm2020/decorators/base/base-property.decorator.mjs +4 -3
  127. package/esm2020/decorators/base/decorator-types.enum.mjs +9 -1
  128. package/esm2020/decorators/base/property-decorator-internal.data.mjs +10 -10
  129. package/esm2020/decorators/base/property-decorator.data.mjs +1 -1
  130. package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +3 -3
  131. package/esm2020/decorators/custom/custom-decorator-internal.data.mjs +26 -0
  132. package/esm2020/decorators/custom/custom-decorator.data.mjs +2 -0
  133. package/esm2020/decorators/custom/custom.decorator.mjs +13 -0
  134. package/esm2020/decorators/date/date-decorator-internal.data.mjs +5 -5
  135. package/esm2020/decorators/date/date.decorator.mjs +21 -0
  136. package/esm2020/decorators/file/file-decorator-internal.data.mjs +98 -0
  137. package/esm2020/decorators/file/file-decorator.data.mjs +7 -0
  138. package/esm2020/decorators/file/file.decorator.mjs +22 -0
  139. package/esm2020/decorators/number/number-decorator-internal.data.mjs +24 -1
  140. package/esm2020/decorators/number/number-decorator.data.mjs +1 -1
  141. package/esm2020/decorators/number/number.decorator.mjs +9 -7
  142. package/esm2020/decorators/object/object-decorator-internal.data.mjs +1 -1
  143. package/esm2020/decorators/object/object-decorator.data.mjs +1 -1
  144. package/esm2020/decorators/object/object.decorator.mjs +1 -1
  145. package/esm2020/decorators/string/string-decorator-internal.data.mjs +16 -1
  146. package/esm2020/decorators/string/string-decorator.data.mjs +1 -1
  147. package/esm2020/decorators/string/string.decorator.mjs +13 -13
  148. package/esm2020/mocks/placeholder-data.png.mjs +3 -0
  149. package/esm2020/public-api.mjs +9 -1
  150. package/fesm2015/ngx-material-entity.mjs +2488 -524
  151. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  152. package/fesm2020/ngx-material-entity.mjs +2363 -493
  153. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  154. package/mocks/placeholder-data.png.d.ts +1 -0
  155. package/package.json +1 -1
  156. package/public-api.d.ts +8 -0
@@ -0,0 +1,103 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component } from '@angular/core';
3
+ import { LodashUtilities } from '../../../../capsulation/lodash.utilities';
4
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/form-field";
7
+ import * as i2 from "@angular/material/chips";
8
+ import * as i3 from "@angular/material/autocomplete";
9
+ import * as i4 from "@angular/material/core";
10
+ import * as i5 from "@angular/forms";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "@angular/material/input";
13
+ export class ArrayStringAutocompleteChipsComponent extends NgxMatEntityBaseInputComponent {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.chipsInput = '';
17
+ }
18
+ ngOnInit() {
19
+ super.ngOnInit();
20
+ this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.metadata.autocompleteValues);
21
+ }
22
+ /**
23
+ * Handles adding strings to the chipsArray.
24
+ * Checks validation and also creates a new array if it is undefined.
25
+ * This is needed because two things are validated: The array itself
26
+ * and the contents of the array. And we need a way to display an
27
+ * mat-error. As the only validation for the array is whether or not
28
+ * it contains values, we can set it to undefined when the last element is removed
29
+ * (removeStringChipArrayValue). That way we can use the "required" validator.
30
+ *
31
+ * @param event - The event that fires when a new chip is completed.
32
+ */
33
+ addStringChipArrayValue(event) {
34
+ const value = (event.value || '').trim();
35
+ if (value) {
36
+ if (this.metadata.minLength && value.length < this.metadata.minLength) {
37
+ return;
38
+ }
39
+ if (this.metadata.maxLength && value.length > this.metadata.maxLength) {
40
+ return;
41
+ }
42
+ if (this.metadata.regex && !value.match(this.metadata.regex)) {
43
+ return;
44
+ }
45
+ this.propertyValue = this.propertyValue ?? [];
46
+ this.propertyValue.push(value);
47
+ }
48
+ event.chipInput?.clear();
49
+ }
50
+ /**
51
+ * Removes the given value from the array.
52
+ * Sets the array to undefined if it is now empty.
53
+ * This is needed because two things are validated: The array itself
54
+ * and the contents of the array. And we need a way to display an
55
+ * mat-error. As the only validation for the array is whether or not
56
+ * it is empty, setting it to undefined here enables us to use the "required" validator.
57
+ *
58
+ * @param value - The string to remove from the array.
59
+ */
60
+ removeStringChipArrayValue(value) {
61
+ this.propertyValue?.splice(this.propertyValue.indexOf(value), 1);
62
+ this.propertyValue = this.propertyValue?.length ? this.propertyValue : undefined;
63
+ }
64
+ /**
65
+ * Handles adding a string to the array when an autocomplete value has been selected.
66
+ *
67
+ * @param event - The autocomplete selected event.
68
+ * @param chipsInput - The element where the user typed the value.
69
+ */
70
+ selected(event, chipsInput) {
71
+ const value = (event.option.viewValue || '').trim();
72
+ if (this.metadata.minLength && value.length < this.metadata.minLength) {
73
+ return;
74
+ }
75
+ if (this.metadata.maxLength && value.length > this.metadata.maxLength) {
76
+ return;
77
+ }
78
+ if (this.metadata.regex && !value.match(this.metadata.regex)) {
79
+ return;
80
+ }
81
+ this.propertyValue = this.propertyValue ?? [];
82
+ this.propertyValue.push(value);
83
+ chipsInput.value = '';
84
+ }
85
+ /**
86
+ * Dynamically filters the Autocomplete options when the user inputs something.
87
+ *
88
+ * @param input - The input of the user.
89
+ */
90
+ filterAutocompleteStrings(input) {
91
+ if (input != null) {
92
+ const filterValue = input.toLowerCase();
93
+ this.filteredAutocompleteStrings = this.metadata.autocompleteValues.filter(s => s.toLowerCase().includes(filterValue));
94
+ }
95
+ }
96
+ }
97
+ ArrayStringAutocompleteChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayStringAutocompleteChipsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
98
+ ArrayStringAutocompleteChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ArrayStringAutocompleteChipsComponent, selector: "array-string-autocomplete-chips", usesInheritance: true, ngImport: i0, template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement)\">\n <mat-option *ngFor=\"let value of metadata.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i2.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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]" }, { type: i5.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayStringAutocompleteChipsComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ selector: 'array-string-autocomplete-chips', template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement)\">\n <mat-option *ngFor=\"let value of metadata.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"] }]
102
+ }] });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMvYXJyYXktc3RyaW5nLWF1dG9jb21wbGV0ZS1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFM0UsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQVE1RSxNQUFNLE9BQU8scUNBQ1QsU0FBUSw4QkFBb0c7SUFQaEg7O1FBV0ksZUFBVSxHQUFXLEVBQUUsQ0FBQztLQW9GM0I7SUFsRlksUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsMkJBQTJCLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCx1QkFBdUIsQ0FBQyxLQUF3QjtRQUM1QyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxF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anNkb2MgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LXN0cmluZy1hdXRvY29tcGxldGUtY2hpcHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcnJheS1zdHJpbmctYXV0b2NvbXBsZXRlLWNoaXBzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlTdHJpbmdBdXRvY29tcGxldGVDaGlwc0NvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0FVVE9DT01QTEVURV9DSElQUywgc3RyaW5nW10+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGZpbHRlcmVkQXV0b2NvbXBsZXRlU3RyaW5ncyE6IHN0cmluZ1tdO1xuXG4gICAgY2hpcHNJbnB1dDogc3RyaW5nID0gJyc7XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEF1dG9jb21wbGV0ZVN0cmluZ3MgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMubWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFkZGluZyBzdHJpbmdzIHRvIHRoZSBjaGlwc0FycmF5LlxuICAgICAqIENoZWNrcyB2YWxpZGF0aW9uIGFuZCBhbHNvIGNyZWF0ZXMgYSBuZXcgYXJyYXkgaWYgaXQgaXMgdW5kZWZpbmVkLlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdHdvIHRoaW5ncyBhcmUgdmFsaWRhdGVkOiBUaGUgYXJyYXkgaXRzZWxmXG4gICAgICogYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkuIEFuZCB3ZSBuZWVkIGEgd2F5IHRvIGRpc3BsYXkgYW5cbiAgICAgKiBtYXQtZXJyb3IuIEFzIHRoZSBvbmx5IHZhbGlkYXRpb24gZm9yIHRoZSBhcnJheSBpcyB3aGV0aGVyIG9yIG5vdFxuICAgICAqIGl0IGNvbnRhaW5zIHZhbHVlcywgd2UgY2FuIHNldCBpdCB0byB1bmRlZmluZWQgd2hlbiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlbW92ZWRcbiAgICAgKiAocmVtb3ZlU3RyaW5nQ2hpcEFycmF5VmFsdWUpLiBUaGF0IHdheSB3ZSBjYW4gdXNlIHRoZSBcInJlcXVpcmVkXCIgdmFsaWRhdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRoYXQgZmlyZXMgd2hlbiBhIG5ldyBjaGlwIGlzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBhZGRTdHJpbmdDaGlwQXJyYXlWYWx1ZShldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5tZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5yZWdleCAgJiYgIXZhbHVlLm1hdGNoKHRoaXMubWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LmNoaXBJbnB1dD8uY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBhcnJheS5cbiAgICAgKiBTZXRzIHRoZSBhcnJheSB0byB1bmRlZmluZWQgaWYgaXQgaXMgbm93IGVtcHR5LlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdHdvIHRoaW5ncyBhcmUgdmFsaWRhdGVkOiBUaGUgYXJyYXkgaXRzZWxmXG4gICAgICogYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkuIEFuZCB3ZSBuZWVkIGEgd2F5IHRvIGRpc3BsYXkgYW5cbiAgICAgKiBtYXQtZXJyb3IuIEFzIHRoZSBvbmx5IHZhbGlkYXRpb24gZm9yIHRoZSBhcnJheSBpcyB3aGV0aGVyIG9yIG5vdFxuICAgICAqIGl0IGlzIGVtcHR5LCBzZXR0aW5nIGl0IHRvIHVuZGVmaW5lZCBoZXJlIGVuYWJsZXMgdXMgdG8gdXNlIHRoZSBcInJlcXVpcmVkXCIgdmFsaWRhdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byByZW1vdmUgZnJvbSB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgcmVtb3ZlU3RyaW5nQ2hpcEFycmF5VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWU/LnNwbGljZSh0aGlzLnByb3BlcnR5VmFsdWUuaW5kZXhPZih2YWx1ZSksIDEpO1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUgPSB0aGlzLnByb3BlcnR5VmFsdWU/Lmxlbmd0aCA/IHRoaXMucHJvcGVydHlWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFkZGluZyBhIHN0cmluZyB0byB0aGUgYXJyYXkgd2hlbiBhbiBhdXRvY29tcGxldGUgdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgYXV0b2NvbXBsZXRlIHNlbGVjdGVkIGV2ZW50LlxuICAgICAqIEBwYXJhbSBjaGlwc0lucHV0IC0gVGhlIGVsZW1lbnQgd2hlcmUgdGhlIHVzZXIgdHlwZWQgdGhlIHZhbHVlLlxuICAgICAqL1xuICAgIHNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBjaGlwc0lucHV0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50Lm9wdGlvbi52aWV3VmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMubWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEucmVnZXggICYmICF2YWx1ZS5tYXRjaCh0aGlzLm1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZSA/PyBbXTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICBjaGlwc0lucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHluYW1pY2FsbHkgZmlsdGVycyB0aGUgQXV0b2NvbXBsZXRlIG9wdGlvbnMgd2hlbiB0aGUgdXNlciBpbnB1dHMgc29tZXRoaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IG9mIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIGZpbHRlckF1dG9jb21wbGV0ZVN0cmluZ3MoaW5wdXQ6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gKGlucHV0IGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBdXRvY29tcGxldGVTdHJpbmdzID0gdGhpcy5tZXRhZGF0YS5hdXRvY29tcGxldGVWYWx1ZXMuZmlsdGVyKHMgPT4gcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG59IiwiPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS5kaXNwbGF5TmFtZX19PC9tYXQtbGFiZWw+XG4gICAgPG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0XG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlWYWx1ZVwiIFtuYW1lXT1cImtleS50b1N0cmluZygpXCIgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICA+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgcHJvcGVydHlWYWx1ZVwiIChyZW1vdmVkKT1cInJlbW92ZVN0cmluZ0NoaXBBcnJheVZhbHVlKHZhbHVlKVwiPlxuICAgICAgICAgICAge3t2YWx1ZX19XG4gICAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e21ldGFkYXRhLmRlbGV0ZUljb259fVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxuICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkU3RyaW5nQ2hpcEFycmF5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyQXV0b2NvbXBsZXRlU3RyaW5ncyhjaGlwc0lucHV0KVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaXBzSW5wdXRcIiBbbmFtZV09XCJrZXkudG9TdHJpbmcoKVwiICNjaGlwc01vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjY2hpcHNFbGVtZW50XG4gICAgICAgICAgICBbbWlubGVuZ3RoXT0nbWV0YWRhdGEubWluTGVuZ3RoID8/IG51bGwnXG4gICAgICAgICAgICBbbWF4bGVuZ3RoXT0nbWV0YWRhdGEubWF4TGVuZ3RoID8/IG51bGwnXG4gICAgICAgICAgICBbcGF0dGVybl09XCJtZXRhZGF0YS5yZWdleCA/PyAnW1xcXFxzXFxcXFNdKidcIlxuICAgICAgICA+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjaGlwc01vZGVsLmVycm9yc1wiPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShjaGlwc01vZGVsKX19PC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtY2hpcC1saXN0PlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cInNlbGVjdGVkKCRldmVudCwgY2hpcHNFbGVtZW50KVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgbWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG4gICAgICAgICAge3t2YWx1ZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cIiFjaGlwc01vZGVsLmVycm9yc1wiPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -0,0 +1,85 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component } from '@angular/core';
3
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/form-field";
6
+ import * as i2 from "@angular/material/chips";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/material/input";
10
+ export class ArrayStringChipsInputComponent extends NgxMatEntityBaseInputComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.chipsInput = '';
14
+ }
15
+ /**
16
+ * Handles adding strings to the chipsArray.
17
+ * Checks validation and also creates a new array if it is undefined.
18
+ * This is needed because two things are validated: The array itself
19
+ * and the contents of the array. And we need a way to display an
20
+ * mat-error. As the only validation for the array is whether or not
21
+ * it contains values, we can set it to undefined when the last element is removed
22
+ * (removeStringChipArrayValue). That way we can use the "required" validator.
23
+ *
24
+ * @param event - The event that fires when a new chip is completed.
25
+ */
26
+ addStringChipArrayValue(event) {
27
+ const value = (event.value || '').trim();
28
+ if (value) {
29
+ if (this.metadata.minLength && value.length < this.metadata.minLength) {
30
+ return;
31
+ }
32
+ if (this.metadata.maxLength && value.length > this.metadata.maxLength) {
33
+ return;
34
+ }
35
+ if (this.metadata.regex && !value.match(this.metadata.regex)) {
36
+ return;
37
+ }
38
+ this.propertyValue = this.propertyValue ?? [];
39
+ this.propertyValue.push(value);
40
+ }
41
+ event.chipInput?.clear();
42
+ }
43
+ /**
44
+ * Removes the given value from the array.
45
+ * Sets the array to undefined if it is now empty.
46
+ * This is needed because two things are validated: The array itself
47
+ * and the contents of the array. And we need a way to display an
48
+ * mat-error. As the only validation for the array is whether or not
49
+ * it is empty, setting it to undefined here enables us to use the "required" validator.
50
+ *
51
+ * @param value - The string to remove from the array.
52
+ */
53
+ removeStringChipArrayValue(value) {
54
+ this.propertyValue?.splice(this.propertyValue.indexOf(value), 1);
55
+ this.propertyValue = this.propertyValue?.length ? this.propertyValue : undefined;
56
+ }
57
+ /**
58
+ * Handles adding a string to the array when an autocomplete value has been selected.
59
+ *
60
+ * @param event - The autocomplete selected event.
61
+ * @param chipsInput - The element where the user typed the value.
62
+ */
63
+ selected(event, chipsInput) {
64
+ const value = (event.option.viewValue || '').trim();
65
+ if (this.metadata.minLength && value.length < this.metadata.minLength) {
66
+ return;
67
+ }
68
+ if (this.metadata.maxLength && value.length > this.metadata.maxLength) {
69
+ return;
70
+ }
71
+ if (this.metadata.regex && !value.match(this.metadata.regex)) {
72
+ return;
73
+ }
74
+ this.propertyValue = this.propertyValue ?? [];
75
+ this.propertyValue.push(value);
76
+ chipsInput.value = '';
77
+ }
78
+ }
79
+ ArrayStringChipsInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayStringChipsInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
80
+ ArrayStringChipsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ArrayStringChipsInputComponent, selector: "array-string-chips-input", usesInheritance: true, ngImport: i0, template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i2.MatChipRemove, selector: "[matChipRemove]" }, { type: i5.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"] }, { type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayStringChipsInputComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'array-string-chips-input', template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"] }]
84
+ }] });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYXJyYXkvYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC9hcnJheS1zdHJpbmctY2hpcHMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFLbEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFRNUUsTUFBTSxPQUFPLDhCQUNULFNBQVEsOEJBQXVGO0lBUG5HOztRQVNJLGVBQVUsR0FBVyxFQUFFLENBQUM7S0FtRTNCO0lBakVHOzs7Ozs7Ozs7O09BVUc7SUFDSCx1QkFBdUIsQ0FBQyxLQUF3QjtRQUM1QyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7Z0JBQ25FLE9BQU87YUFDVjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDbkUsT0FBTzthQUNWO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0QsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDBCQUEwQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxLQUFtQyxFQUFFLFVBQTRCO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ25FLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNuRSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7NEhBckVRLDhCQUE4QjtnSEFBOUIsOEJBQThCLHVGQ2QzQyx5dkNBMEJpQjs0RkRaSiw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBRUksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FycmF5LXN0cmluZy1jaGlwcy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXJyYXktc3RyaW5nLWNoaXBzLWlucHV0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlTdHJpbmdDaGlwc0lucHV0Q29tcG9uZW50PEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj5cbiAgICBleHRlbmRzIE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlLCBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFMsIHN0cmluZ1tdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBjaGlwc0lucHV0OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYWRkaW5nIHN0cmluZ3MgdG8gdGhlIGNoaXBzQXJyYXkuXG4gICAgICogQ2hlY2tzIHZhbGlkYXRpb24gYW5kIGFsc28gY3JlYXRlcyBhIG5ldyBhcnJheSBpZiBpdCBpcyB1bmRlZmluZWQuXG4gICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0d28gdGhpbmdzIGFyZSB2YWxpZGF0ZWQ6IFRoZSBhcnJheSBpdHNlbGZcbiAgICAgKiBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcnJheS4gQW5kIHdlIG5lZWQgYSB3YXkgdG8gZGlzcGxheSBhblxuICAgICAqIG1hdC1lcnJvci4gQXMgdGhlIG9ubHkgdmFsaWRhdGlvbiBmb3IgdGhlIGFycmF5IGlzIHdoZXRoZXIgb3Igbm90XG4gICAgICogaXQgY29udGFpbnMgdmFsdWVzLCB3ZSBjYW4gc2V0IGl0IHRvIHVuZGVmaW5lZCB3aGVuIHRoZSBsYXN0IGVsZW1lbnQgaXMgcmVtb3ZlZFxuICAgICAqIChyZW1vdmVTdHJpbmdDaGlwQXJyYXlWYWx1ZSkuIFRoYXQgd2F5IHdlIGNhbiB1c2UgdGhlIFwicmVxdWlyZWRcIiB2YWxpZGF0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgdGhhdCBmaXJlcyB3aGVuIGEgbmV3IGNoaXAgaXMgY29tcGxldGVkLlxuICAgICAqL1xuICAgIGFkZFN0cmluZ0NoaXBBcnJheVZhbHVlKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCB0aGlzLm1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLnJlZ2V4ICAmJiAhdmFsdWUubWF0Y2godGhpcy5tZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUgPSB0aGlzLnByb3BlcnR5VmFsdWUgPz8gW107XG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuY2hpcElucHV0Py5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICAgICAqIFNldHMgdGhlIGFycmF5IHRvIHVuZGVmaW5lZCBpZiBpdCBpcyBub3cgZW1wdHkuXG4gICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0d28gdGhpbmdzIGFyZSB2YWxpZGF0ZWQ6IFRoZSBhcnJheSBpdHNlbGZcbiAgICAgKiBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcnJheS4gQW5kIHdlIG5lZWQgYSB3YXkgdG8gZGlzcGxheSBhblxuICAgICAqIG1hdC1lcnJvci4gQXMgdGhlIG9ubHkgdmFsaWRhdGlvbiBmb3IgdGhlIGFycmF5IGlzIHdoZXRoZXIgb3Igbm90XG4gICAgICogaXQgaXMgZW1wdHksIHNldHRpbmcgaXQgdG8gdW5kZWZpbmVkIGhlcmUgZW5hYmxlcyB1cyB0byB1c2UgdGhlIFwicmVxdWlyZWRcIiB2YWxpZGF0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIHJlbW92ZSBmcm9tIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICByZW1vdmVTdHJpbmdDaGlwQXJyYXlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZT8uc3BsaWNlKHRoaXMucHJvcGVydHlWYWx1ZS5pbmRleE9mKHZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZT8ubGVuZ3RoID8gdGhpcy5wcm9wZXJ0eVZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYWRkaW5nIGEgc3RyaW5nIHRvIHRoZSBhcnJheSB3aGVuIGFuIGF1dG9jb21wbGV0ZSB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBhdXRvY29tcGxldGUgc2VsZWN0ZWQgZXZlbnQuXG4gICAgICogQHBhcmFtIGNoaXBzSW5wdXQgLSBUaGUgZWxlbWVudCB3aGVyZSB0aGUgdXNlciB0eXBlZCB0aGUgdmFsdWUuXG4gICAgICovXG4gICAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsIGNoaXBzSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSB8fCAnJykudHJpbSgpO1xuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5tZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5yZWdleCAgJiYgIXZhbHVlLm1hdGNoKHRoaXMubWV0YWRhdGEucmVnZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgIGNoaXBzSW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG59IiwiPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS5kaXNwbGF5TmFtZX19PC9tYXQtbGFiZWw+XG4gICAgPG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0XG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlWYWx1ZVwiIFtuYW1lXT1cImtleS50b1N0cmluZygpXCIgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICA+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgcHJvcGVydHlWYWx1ZVwiIChyZW1vdmVkKT1cInJlbW92ZVN0cmluZ0NoaXBBcnJheVZhbHVlKHZhbHVlKVwiPlxuICAgICAgICAgICAge3t2YWx1ZX19XG4gICAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e21ldGFkYXRhLmRlbGV0ZUljb259fVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxuICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICAgICAgICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRTdHJpbmdDaGlwQXJyYXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hpcHNJbnB1dFwiIFtuYW1lXT1cImtleS50b1N0cmluZygpXCIgI2NoaXBzTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIFttaW5sZW5ndGhdPSdtZXRhZGF0YS5taW5MZW5ndGggPz8gbnVsbCdcbiAgICAgICAgICAgIFttYXhsZW5ndGhdPSdtZXRhZGF0YS5tYXhMZW5ndGggPz8gbnVsbCdcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cIm1ldGFkYXRhLnJlZ2V4ID8/ICdbXFxcXHNcXFxcU10qJ1wiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImNoaXBzTW9kZWwuZXJyb3JzXCI+e3tnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlKGNoaXBzTW9kZWwpfX08L21hdC1lcnJvcj5cbiAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cIiFjaGlwc01vZGVsLmVycm9yc1wiPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -0,0 +1,104 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { SelectionModel } from '@angular/cdk/collections';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import { LodashUtilities } from '../../../capsulation/lodash.utilities';
6
+ import { EntityUtilities } from '../../../classes/entity.utilities';
7
+ import { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';
8
+ import { NgxMatEntityBaseInputComponent } from '../base-input.component';
9
+ import { Component } from '@angular/core';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/material/dialog";
12
+ /**
13
+ * The base data needed for all arrays that are displayed as a table.
14
+ */
15
+ export class ArrayTableComponent extends NgxMatEntityBaseInputComponent {
16
+ constructor(matDialog) {
17
+ super();
18
+ this.matDialog = matDialog;
19
+ this.input = undefined;
20
+ this.dataSource = new MatTableDataSource();
21
+ this.selection = new SelectionModel(true, []);
22
+ }
23
+ ngOnInit() {
24
+ super.ngOnInit();
25
+ this.propertyValue = this.propertyValue ?? [];
26
+ const givenDisplayColumns = this.metadata.displayColumns.map((v) => v.displayName);
27
+ if (givenDisplayColumns.find(s => s === 'select')) {
28
+ throw new Error(`The name "select" for a display column is reserved.
29
+ Please choose a different name.`);
30
+ }
31
+ this.displayedColumns = this.isReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);
32
+ this.dataSource.data = this.propertyValue;
33
+ }
34
+ /**
35
+ * Toggles all array-items in the table.
36
+ *
37
+ */
38
+ masterToggle() {
39
+ if (this.isAllSelected()) {
40
+ this.selection.clear();
41
+ }
42
+ else {
43
+ this.dataSource.data.forEach(row => this.selection.select(row));
44
+ }
45
+ }
46
+ /**
47
+ * Checks if all array-items in the table have been selected.
48
+ * This is needed to display the "masterToggle"-checkbox correctly.
49
+ *
50
+ * @returns Whether or not all array-items in the table have been selected.
51
+ */
52
+ isAllSelected() {
53
+ const numSelected = this.selection.selected.length;
54
+ const numRows = this.dataSource.data.length;
55
+ return numSelected === numRows;
56
+ }
57
+ /**
58
+ * Tries to add an item to the array.
59
+ */
60
+ add() {
61
+ if (this.input != null) {
62
+ if (!this.metadata.allowDuplicates
63
+ && this.propertyValue?.find(async (v) => await EntityUtilities.isEqual(this.input, v, this.metadata, this.metadata.itemType)) != null) {
64
+ this.matDialog.open(NgxMatEntityConfirmDialogComponent, {
65
+ data: this.metadata.duplicatesErrorDialog,
66
+ autoFocus: false,
67
+ restoreFocus: false
68
+ });
69
+ return;
70
+ }
71
+ this.propertyValue?.push(LodashUtilities.cloneDeep(this.input));
72
+ this.dataSource.data = this.propertyValue ?? [];
73
+ this.resetInput();
74
+ this.emitChange();
75
+ }
76
+ }
77
+ /**
78
+ * Is split up from the add method to override this functionality more easily.
79
+ */
80
+ resetInput() {
81
+ this.input = undefined;
82
+ }
83
+ /**
84
+ * Removes all selected entries from the entity array.
85
+ */
86
+ remove() {
87
+ this.selection.selected.forEach(s => {
88
+ this.propertyValue?.splice(this.propertyValue.indexOf(s), 1);
89
+ });
90
+ this.dataSource.data = this.propertyValue ?? [];
91
+ this.selection.clear();
92
+ this.emitChange();
93
+ }
94
+ }
95
+ ArrayTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayTableComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
96
+ ArrayTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ArrayTableComponent, selector: "ngx-mat-entity-array-table", usesInheritance: true, ngImport: i0, template: '', isInline: true });
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ArrayTableComponent, decorators: [{
98
+ type: Component,
99
+ args: [{
100
+ selector: 'ngx-mat-entity-array-table',
101
+ template: ''
102
+ }]
103
+ }], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2FycmF5L2FycmF5LXRhYmxlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBS2xEOztHQUVHO0FBS0gsTUFBTSxPQUFnQixtQkFDbEIsU0FBUSw4QkFBa0U7SUFPMUUsWUFBNkIsU0FBb0I7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFEaUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUxqRCxVQUFLLEdBQWUsU0FBUyxDQUFDO1FBQzlCLGVBQVUsR0FBa0MsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JFLGNBQVMsR0FBOEIsSUFBSSxjQUFjLENBQVksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBSy9FLENBQUM7SUFFUSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDOUMs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QUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7O2lIQTdGaUIsbUJBQW1CO3FHQUFuQixtQkFBbUIseUZBRjNCLEVBQUU7NEZBRU0sbUJBQW1CO2tCQUp4QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRSxFQUFFO2lCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL2NhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIEFycmF5VGFibGVUeXBlID0gRGVjb3JhdG9yVHlwZXMuQVJSQVkgfCBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFXG4gICAgfCBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1JBTkdFIHwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9USU1FO1xuXG4vKipcbiAqIFRoZSBiYXNlIGRhdGEgbmVlZGVkIGZvciBhbGwgYXJyYXlzIHRoYXQgYXJlIGRpc3BsYXllZCBhcyBhIHRhYmxlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LWFycmF5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXJyYXlUYWJsZUNvbXBvbmVudDxWYWx1ZVR5cGUsIEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPiwgQXJyYXlUeXBlIGV4dGVuZHMgQXJyYXlUYWJsZVR5cGU+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgQXJyYXlUeXBlLCBWYWx1ZVR5cGVbXT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgaW5wdXQ/OiBWYWx1ZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFZhbHVlVHlwZT4gPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxWYWx1ZVR5cGU+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPFZhbHVlVHlwZT4odHJ1ZSwgW10pO1xuICAgIGRpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICBjb25zdCBnaXZlbkRpc3BsYXlDb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMubWV0YWRhdGEuZGlzcGxheUNvbHVtbnMubWFwKCh2KSA9PiB2LmRpc3BsYXlOYW1lKTtcbiAgICAgICAgaWYgKGdpdmVuRGlzcGxheUNvbHVtbnMuZmluZChzID0+IHMgPT09ICdzZWxlY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBUaGUgbmFtZSBcInNlbGVjdFwiIGZvciBhIGRpc3BsYXkgY29sdW1uIGlzIHJlc2VydmVkLlxuICAgICAgICAgICAgICAgIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgbmFtZS5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuaXNSZWFkT25seSA/IGdpdmVuRGlzcGxheUNvbHVtbnMgOiBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnByb3BlcnR5VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBhbGwgYXJyYXktaXRlbXMgaW4gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICovXG4gICAgbWFzdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIGFycmF5LWl0ZW1zIGluIHRoZSB0YWJsZSBoYXZlIGJlZW4gc2VsZWN0ZWQuXG4gICAgICogVGhpcyBpcyBuZWVkZWQgdG8gZGlzcGxheSB0aGUgXCJtYXN0ZXJUb2dnbGVcIi1jaGVja2JveCBjb3JyZWN0bHkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCBhbGwgYXJyYXktaXRlbXMgaW4gdGhlIHRhYmxlIGhhdmUgYmVlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIGFkZCBhbiBpdGVtIHRvIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICBhZGQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5tZXRhZGF0YS5hbGxvd0R1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnByb3BlcnR5VmFsdWU/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIHYgPT4gYXdhaXQgRW50aXR5VXRpbGl0aWVzLmlzRXF1YWwodGhpcy5pbnB1dCwgdiwgdGhpcy5tZXRhZGF0YSwgdGhpcy5tZXRhZGF0YS5pdGVtVHlwZSlcbiAgICAgICAgICAgICAgICApICE9IG51bGxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLm1ldGFkYXRhLmR1cGxpY2F0ZXNFcnJvckRpYWxvZyxcbiAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZT8ucHVzaChMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKHRoaXMuaW5wdXQpKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNldElucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIHNwbGl0IHVwIGZyb20gdGhlIGFkZCBtZXRob2QgdG8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbmFsaXR5IG1vcmUgZWFzaWx5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNldElucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHNlbGVjdGVkIGVudHJpZXMgZnJvbSB0aGUgZW50aXR5IGFycmF5LlxuICAgICAqL1xuICAgIHJlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZT8uc3BsaWNlKHRoaXMucHJvcGVydHlWYWx1ZS5pbmRleE9mKHMpLCAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5wcm9wZXJ0eVZhbHVlID8/IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG59Il19
@@ -0,0 +1,65 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { EntityUtilities } from '../../classes/entity.utilities';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * The abstract base class of any ngx-mat-entity input.
6
+ * Extend from this when implementing your own custom decorator.
7
+ *
8
+ * It already provides:
9
+ *
10
+ * - entity: The entity which the property is on. (type-safe due to the Generic "EntityType")
11
+ * - key: The key of the property. (type-safe due to the Generic "EntityType")
12
+ * - getValidationErrorMessage: The function that generates the error message when the input is invalid.
13
+ * - isReadOnly: Whether or not the input is read only. Can be used to disable elements.
14
+ * - propertyValue: Just the typed version of the property, its the same as entity[key].
15
+ * - metadata: The metadata of the property. (type-safe due to the Generic "CustomMetadataType")
16
+ * - ngOnInit: Gets the metadata for the property, be aware of this when overriding this method.
17
+ * - emitChange: Should be called when the input has changed. This is needed to trigger validation and dirty checks.
18
+ */
19
+ // eslint-disable-next-line max-len
20
+ export class NgxMatEntityBaseInputComponent {
21
+ constructor() {
22
+ this.inputChangeEvent = new EventEmitter();
23
+ }
24
+ // eslint-disable-next-line jsdoc/require-returns
25
+ /**
26
+ * The property value of entity[key] correctly typed.
27
+ * Uses getters and setters so that inputs are always linked to the original value.
28
+ */
29
+ get propertyValue() {
30
+ return this.entity[this.key];
31
+ }
32
+ // eslint-disable-next-line jsdoc/require-jsdoc
33
+ set propertyValue(value) {
34
+ this.entity[this.key] = value;
35
+ }
36
+ ngOnInit() {
37
+ this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.key);
38
+ }
39
+ /**
40
+ * Should emit when the input has changed. This is needed to trigger validation and dirty checks.
41
+ */
42
+ emitChange() {
43
+ this.inputChangeEvent.emit();
44
+ }
45
+ }
46
+ NgxMatEntityBaseInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityBaseInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ NgxMatEntityBaseInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityBaseInputComponent, selector: "ngx-mat-entity-base-input", inputs: { entity: "entity", key: "key", getValidationErrorMessage: "getValidationErrorMessage", isReadOnly: "isReadOnly" }, outputs: { inputChangeEvent: "inputChangeEvent" }, ngImport: i0, template: '', isInline: true });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityBaseInputComponent, decorators: [{
49
+ type: Component,
50
+ args: [{
51
+ selector: 'ngx-mat-entity-base-input',
52
+ template: ''
53
+ }]
54
+ }], propDecorators: { entity: [{
55
+ type: Input
56
+ }], key: [{
57
+ type: Input
58
+ }], getValidationErrorMessage: [{
59
+ type: Input
60
+ }], isReadOnly: [{
61
+ type: Input
62
+ }], inputChangeEvent: [{
63
+ type: Output
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2Jhc2UtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUVqRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUtILG1DQUFtQztBQUNuQyxNQUFNLE9BQWdCLDhCQUE4QjtJQUxwRDtRQXFDSSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBOEIvQztJQTVCRyxpREFBaUQ7SUFDakQ7OztPQUdHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLENBQUM7SUFDMUQsQ0FBQztJQUNELCtDQUErQztJQUMvQyxJQUFJLGFBQWEsQ0FBQyxLQUE0QjtRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzdELENBQUM7SUFPRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs0SEE3RGlCLDhCQUE4QjtnSEFBOUIsOEJBQThCLGdQQUh0QyxFQUFFOzRGQUdNLDhCQUE4QjtrQkFMbkQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs4QkFZRyxNQUFNO3NCQURMLEtBQUs7Z0JBT04sR0FBRztzQkFERixLQUFLO2dCQU9OLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFRTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlLCBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS51dGlsaXRpZXMnO1xuXG4vKipcbiAqIFRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIG9mIGFueSBuZ3gtbWF0LWVudGl0eSBpbnB1dC5cbiAqIEV4dGVuZCBmcm9tIHRoaXMgd2hlbiBpbXBsZW1lbnRpbmcgeW91ciBvd24gY3VzdG9tIGRlY29yYXRvci5cbiAqXG4gKiBJdCBhbHJlYWR5IHByb3ZpZGVzOlxuICpcbiAqIC0gZW50aXR5OiBUaGUgZW50aXR5IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBvbi4gKHR5cGUtc2FmZSBkdWUgdG8gdGhlIEdlbmVyaWMgXCJFbnRpdHlUeXBlXCIpXG4gKiAtIGtleTogVGhlIGtleSBvZiB0aGUgcHJvcGVydHkuICh0eXBlLXNhZmUgZHVlIHRvIHRoZSBHZW5lcmljIFwiRW50aXR5VHlwZVwiKVxuICogLSBnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlOiBUaGUgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAqIC0gaXNSZWFkT25seTogV2hldGhlciBvciBub3QgdGhlIGlucHV0IGlzIHJlYWQgb25seS4gQ2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBlbGVtZW50cy5cbiAqIC0gcHJvcGVydHlWYWx1ZTogSnVzdCB0aGUgdHlwZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHksIGl0cyB0aGUgc2FtZSBhcyBlbnRpdHlba2V5XS5cbiAqIC0gbWV0YWRhdGE6IFRoZSBtZXRhZGF0YSBvZiB0aGUgcHJvcGVydHkuICh0eXBlLXNhZmUgZHVlIHRvIHRoZSBHZW5lcmljIFwiQ3VzdG9tTWV0YWRhdGFUeXBlXCIpXG4gKiAtIG5nT25Jbml0OiBHZXRzIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHByb3BlcnR5LCBiZSBhd2FyZSBvZiB0aGlzIHdoZW4gb3ZlcnJpZGluZyB0aGlzIG1ldGhvZC5cbiAqIC0gZW1pdENoYW5nZTogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBoYXMgY2hhbmdlZC4gVGhpcyBpcyBuZWVkZWQgdG8gdHJpZ2dlciB2YWxpZGF0aW9uIGFuZCBkaXJ0eSBjaGVja3MuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LW1hdC1lbnRpdHktYmFzZS1pbnB1dCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8XG4gICAgRW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+LFxuICAgIFR5cGUgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcyxcbiAgICBWYWx1ZVR5cGUsXG4gICAgQ3VzdG9tTWV0YWRhdGFUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8Q3VzdG9tTWV0YWRhdGFUeXBlPiA9IHt9XG4+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZW50aXR5IHRoYXQgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgYXMgYW4gaW5wdXQgY29tZXMgZnJvbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVudGl0eSE6IEVudGl0eVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBidWlsZCB0aGUgaW5wdXQgZm9yLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAga2V5IToga2V5b2YgRW50aXR5VHlwZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZSE6IChtb2RlbDogTmdNb2RlbCkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGlucHV0IHNob3VsZCBiZSByZWFkb25seS5cbiAgICAgKiBJbiB0aGF0IGNhc2UgaXQgaXMgZGlzYWJsZWQsIGJ1dCBtb3N0IG9mIHRoZSBkaXNhYmxlZC1zdHlsaW5nIGlzIG92ZXJyaWRkZW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1JlYWRPbmx5ITogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKVxuICAgIGlucHV0Q2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogVGhlIHByb3BlcnR5IHZhbHVlIG9mIGVudGl0eVtrZXldIGNvcnJlY3RseSB0eXBlZC5cbiAgICAgKiBVc2VzIGdldHRlcnMgYW5kIHNldHRlcnMgc28gdGhhdCBpbnB1dHMgYXJlIGFsd2F5cyBsaW5rZWQgdG8gdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAqL1xuICAgIGdldCBwcm9wZXJ0eVZhbHVlKCk6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0eVt0aGlzLmtleV0gYXMgVmFsdWVUeXBlIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIHNldCBwcm9wZXJ0eVZhbHVlKHZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgKHRoaXMuZW50aXR5W3RoaXMua2V5XSBhcyBWYWx1ZVR5cGUgfCB1bmRlZmluZWQpID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGFkYXRhIG9mIHRoZSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBtZXRhZGF0YSE6IERlY29yYXRvclR5cGU8VHlwZSwgQ3VzdG9tTWV0YWRhdGFUeXBlPjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEodGhpcy5lbnRpdHksIHRoaXMua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgZW1pdCB3aGVuIHRoZSBpbnB1dCBoYXMgY2hhbmdlZC4gVGhpcyBpcyBuZWVkZWQgdG8gdHJpZ2dlciB2YWxpZGF0aW9uIGFuZCBkaXJ0eSBjaGVja3MuXG4gICAgICovXG4gICAgZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZUV2ZW50LmVtaXQoKTtcbiAgICB9XG59Il19
@@ -0,0 +1,21 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component } from '@angular/core';
3
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/form-field";
6
+ import * as i2 from "@angular/material/checkbox";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "@angular/material/input";
9
+ export class BooleanCheckboxInputComponent extends NgxMatEntityBaseInputComponent {
10
+ ngOnInit() {
11
+ super.ngOnInit();
12
+ this.propertyValue = this.propertyValue ?? false;
13
+ }
14
+ }
15
+ BooleanCheckboxInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanCheckboxInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
16
+ BooleanCheckboxInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: BooleanCheckboxInputComponent, selector: "boolean-checkbox-input", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n (ngModelChange)=\"emitChange()\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["::ng-deep .hideUnderline .mat-form-field-underline{opacity:0%}::ng-deep .disabled .mat-checkbox-ripple{display:none}::ng-deep .disabled:hover{cursor:default}mat-form-field{width:100%}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.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"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanCheckboxInputComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'boolean-checkbox-input', template: "<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n (ngModelChange)=\"emitChange()\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["::ng-deep .hideUnderline .mat-form-field-underline{opacity:0%}::ng-deep .disabled .mat-checkbox-ripple{display:none}::ng-deep .disabled:hover{cursor:default}mat-form-field{width:100%}\n"] }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1jaGVja2JveC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2Jvb2xlYW4vYm9vbGVhbi1jaGVja2JveC1pbnB1dC9ib29sZWFuLWNoZWNrYm94LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYm9vbGVhbi9ib29sZWFuLWNoZWNrYm94LWlucHV0L2Jvb2xlYW4tY2hlY2tib3gtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQVE1RSxNQUFNLE9BQU8sNkJBQ1QsU0FBUSw4QkFBb0Y7SUFFbkYsUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO0lBQ3JELENBQUM7OzJIQU5RLDZCQUE2QjsrR0FBN0IsNkJBQTZCLHFGQ1oxQyxvNkJBdUJpQjs0RkRYSiw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBRUksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5QmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYm9vbGVhbi1jaGVja2JveC1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tY2hlY2tib3gtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Jvb2xlYW4tY2hlY2tib3gtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCb29sZWFuQ2hlY2tib3hJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQk9PTEVBTl9DSEVDS0JPWCwgYm9vbGVhbj4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZSA/PyBmYWxzZTtcbiAgICB9XG59IiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaGlkZVVuZGVybGluZVwiPlxuICAgIDxtYXQtbGFiZWw+e3ttZXRhZGF0YS5kaXNwbGF5TmFtZX19PC9tYXQtbGFiZWw+XG4gICAgPG1hdC1jaGVja2JveFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJlbWl0Q2hhbmdlKClcIlxuICAgICAgICAoY2xpY2spPVwibW9kZWwuY29udHJvbC5tYXJrQXNUb3VjaGVkKClcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5VmFsdWVcIlxuICAgICAgICBbbmFtZV09XCJrZXkudG9TdHJpbmcoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzUmVhZE9ubHlcIlxuICAgICAgICBbY2xhc3MubWF0LWNoZWNrYm94LWRpc2FibGVkXT1cImZhbHNlXCJcbiAgICA+XG4gICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPCEtLSBoaWRkZW4gaW5wdXQgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGNoZWNrYm94IGNhbiBiZSB1c2VkIGluc2lkZSBhIG1hdC1mb3JtLWZpZWxkIC0tPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW5cbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eVZhbHVlXCJcbiAgICAgICAgW25hbWVdPVwia2V5LnRvU3RyaW5nKCkgKyAnSGVscGVyJ1wiXG4gICAgICAgICNtb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICBbcGF0dGVybl09XCJtZXRhZGF0YS5yZXF1aXJlZCA/ICd0cnVlJyA6ICdbXFxcXHNcXFxcU10qJ1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICA+XG4gICAgPG1hdC1lcnJvcj57e2dldFZhbGlkYXRpb25FcnJvck1lc3NhZ2UobW9kZWwpfX08L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+Il19
@@ -0,0 +1,17 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component } from '@angular/core';
3
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/form-field";
6
+ import * as i2 from "@angular/material/select";
7
+ import * as i3 from "@angular/material/core";
8
+ import * as i4 from "@angular/forms";
9
+ export class BooleanDropdownInputComponent extends NgxMatEntityBaseInputComponent {
10
+ }
11
+ BooleanDropdownInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanDropdownInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ BooleanDropdownInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: BooleanDropdownInputComponent, selector: "boolean-dropdown-input", usesInheritance: true, ngImport: i0, template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadata.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadata.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanDropdownInputComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'boolean-dropdown-input', template: "<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadata.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadata.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["mat-form-field{width:100%}\n"] }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1kcm9wZG93bi1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2Jvb2xlYW4vYm9vbGVhbi1kcm9wZG93bi1pbnB1dC9ib29sZWFuLWRyb3Bkb3duLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYm9vbGVhbi9ib29sZWFuLWRyb3Bkb3duLWlucHV0L2Jvb2xlYW4tZHJvcGRvd24taW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQVE1RSxNQUFNLE9BQU8sNkJBQ1QsU0FBUSw4QkFBb0Y7OzJIQURuRiw2QkFBNkI7K0dBQTdCLDZCQUE2QixxRkNaMUMseW5CQWVpQjs0RkRISiw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBRUksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5QmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYm9vbGVhbi1kcm9wZG93bi1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tZHJvcGRvd24taW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Jvb2xlYW4tZHJvcGRvd24taW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCb29sZWFuRHJvcGRvd25JbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQk9PTEVBTl9EUk9QRE9XTiwgYm9vbGVhbj4gaW1wbGVtZW50cyBPbkluaXQge1xufSIsIjxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVtaXRDaGFuZ2UoKVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlWYWx1ZVwiXG4gICAgICAgIFtuYW1lXT1cImtleS50b1N0cmluZygpXCJcbiAgICAgICAgI21vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJtZXRhZGF0YS5yZXF1aXJlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5XCJcbiAgICA+XG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ1bmRlZmluZWRcIj4tPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPnt7bWV0YWRhdGEuZHJvcGRvd25UcnVlfX08L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPnt7bWV0YWRhdGEuZHJvcGRvd25GYWxzZX19PC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -0,0 +1,21 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component } from '@angular/core';
3
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/form-field";
6
+ import * as i2 from "@angular/material/slide-toggle";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "@angular/material/input";
9
+ export class BooleanToggleInputComponent extends NgxMatEntityBaseInputComponent {
10
+ ngOnInit() {
11
+ super.ngOnInit();
12
+ this.propertyValue = this.propertyValue ?? false;
13
+ }
14
+ }
15
+ BooleanToggleInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanToggleInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
16
+ BooleanToggleInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: BooleanToggleInputComponent, selector: "boolean-toggle-input", usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["::ng-deep .hideUnderline .mat-form-field-underline{opacity:0%}mat-form-field{width:100%}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i1.MatLabel, selector: "mat-label" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.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"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BooleanToggleInputComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'boolean-toggle-input', template: "<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>", styles: ["::ng-deep .hideUnderline .mat-form-field-underline{opacity:0%}mat-form-field{width:100%}\n"] }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi10b2dnbGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy9pbnB1dC9ib29sZWFuL2Jvb2xlYW4tdG9nZ2xlLWlucHV0L2Jvb2xlYW4tdG9nZ2xlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvYm9vbGVhbi9ib29sZWFuLXRvZ2dsZS1pbnB1dC9ib29sZWFuLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBUTVFLE1BQU0sT0FBTywyQkFDVCxTQUFRLDhCQUFrRjtJQUVqRixRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUM7SUFDckQsQ0FBQzs7eUhBTlEsMkJBQTJCOzZHQUEzQiwyQkFBMkIsbUZDWnhDLDZ5QkFvQmlCOzRGRFJKLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFFSSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYXNlLWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdib29sZWFuLXRvZ2dsZS1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tdG9nZ2xlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ib29sZWFuLXRvZ2dsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJvb2xlYW5Ub2dnbGVJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBOZ3hNYXRFbnRpdHlCYXNlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSwgRGVjb3JhdG9yVHlwZXMuQk9PTEVBTl9UT0dHTEUsIGJvb2xlYW4+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWUgPSB0aGlzLnByb3BlcnR5VmFsdWUgPz8gZmFsc2U7XG4gICAgfVxufSIsIjxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhpZGVVbmRlcmxpbmVcIj5cbiAgICA8bWF0LWxhYmVsPnt7bWV0YWRhdGEuZGlzcGxheU5hbWV9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJtb2RlbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlWYWx1ZVwiXG4gICAgICAgIFtuYW1lXT1cImtleS50b1N0cmluZygpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZE9ubHlcIlxuICAgID5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPCEtLSBoaWRkZW4gaW5wdXQgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIHRvZ2dsZSBjYW4gYmUgdXNlZCBpbnNpZGUgYSBtYXQtZm9ybS1maWVsZCAtLT5cbiAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlWYWx1ZVwiXG4gICAgICAgIFtuYW1lXT1cImtleS50b1N0cmluZygpICsgJ0hlbHBlcidcIlxuICAgICAgICAjbW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgW3BhdHRlcm5dPVwibWV0YWRhdGEucmVxdWlyZWQgPyAndHJ1ZScgOiAnW1xcXFxzXFxcXFNdKidcIlxuICAgICAgICBbcmVxdWlyZWRdPVwibWV0YWRhdGEucmVxdWlyZWRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJlbWl0Q2hhbmdlKClcIlxuICAgID5cbiAgICA8bWF0LWVycm9yPnt7Z2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZShtb2RlbCl9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -0,0 +1,26 @@
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
+ import { Component, ViewContainerRef } from '@angular/core';
3
+ import { NgxMatEntityBaseInputComponent } from '../base-input.component';
4
+ import * as i0 from "@angular/core";
5
+ export class CustomInputComponent extends NgxMatEntityBaseInputComponent {
6
+ constructor(viewContainerRef) {
7
+ super();
8
+ this.viewContainerRef = viewContainerRef;
9
+ }
10
+ ngOnInit() {
11
+ super.ngOnInit();
12
+ this.component = this.viewContainerRef.createComponent(this.metadata.component);
13
+ this.component.instance.entity = this.entity;
14
+ this.component.instance.key = this.key;
15
+ this.component.instance.getValidationErrorMessage = this.getValidationErrorMessage;
16
+ this.component.instance.inputChangeEvent.subscribe(this.inputChangeEvent);
17
+ this.component.instance.isReadOnly = this.isReadOnly;
18
+ }
19
+ }
20
+ CustomInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CustomInputComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
21
+ CustomInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CustomInputComponent, selector: "custom-input", usesInheritance: true, ngImport: i0, template: "", styles: [""] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CustomInputComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'custom-input', template: "", styles: [""] }]
25
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvY3VzdG9tL2N1c3RvbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2N1c3RvbS9jdXN0b20uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQThCLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQVF6RSxNQUFNLE9BQU8sb0JBS1gsU0FBUSw4QkFBNEU7SUFJbEYsWUFBNkIsZ0JBQWtDO1FBQzNELEtBQUssRUFBRSxDQUFDO1FBRGlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFFL0QsQ0FBQztJQUVRLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQWdDLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFDbkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pELENBQUM7O2tIQXJCUSxvQkFBb0I7c0dBQXBCLG9CQUFvQiwyRUNaakMsRUFBQTs0RkRZYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBRUksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBPbkluaXQsIFR5cGUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5QmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnY3VzdG9tLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jdXN0b20uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21JbnB1dENvbXBvbmVudDxcbiAgICBFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4sXG4gICAgTWV0YWRhdGFUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8TWV0YWRhdGFUeXBlPixcbiAgICBWYWx1ZVR5cGUsXG4gICAgQ29tcG9uZW50VHlwZSBleHRlbmRzIE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlLCBEZWNvcmF0b3JUeXBlcy5DVVNUT00sIFZhbHVlVHlwZSwgTWV0YWRhdGFUeXBlPlxuPiBleHRlbmRzIE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlLCBEZWNvcmF0b3JUeXBlcy5DVVNUT00sIFZhbHVlVHlwZT4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgY29tcG9uZW50ITogQ29tcG9uZW50UmVmPENvbXBvbmVudFR5cGU+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxDb21wb25lbnRUeXBlPih0aGlzLm1ldGFkYXRhLmNvbXBvbmVudCBhcyBUeXBlPENvbXBvbmVudFR5cGU+KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuZW50aXR5ID0gdGhpcy5lbnRpdHk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmtleSA9IHRoaXMua2V5O1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5nZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlID0gdGhpcy5nZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5pbnB1dENoYW5nZUV2ZW50LnN1YnNjcmliZSh0aGlzLmlucHV0Q2hhbmdlRXZlbnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5pc1JlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIH1cbn0iLCIiXX0=