@3kles/kles-material-dynamicforms 1.1.19 → 14.0.1

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 (200) hide show
  1. package/esm2020/3kles-kles-material-dynamicforms.mjs +5 -0
  2. package/esm2020/lib/decorators/component.decorator.mjs +7 -0
  3. package/esm2020/lib/directive/dynamic-component.directive.mjs +44 -0
  4. package/esm2020/lib/directive/dynamic-field.directive.mjs +50 -0
  5. package/esm2020/lib/dynamic-form.component.mjs +247 -0
  6. package/esm2020/lib/enums/type.enum.mjs +19 -0
  7. package/esm2020/lib/fields/array.component.mjs +53 -0
  8. package/esm2020/lib/fields/badge.component.mjs +40 -0
  9. package/esm2020/lib/fields/button-form.component.mjs +44 -0
  10. package/esm2020/lib/fields/button-submit.component.mjs +38 -0
  11. package/esm2020/lib/fields/button-toogle-group.component.mjs +51 -0
  12. package/esm2020/lib/fields/buttonchecker-form.component.mjs +44 -0
  13. package/esm2020/lib/fields/buttonfile-form.component.mjs +42 -0
  14. package/esm2020/lib/fields/checkbox.component.mjs +50 -0
  15. package/esm2020/lib/fields/chip.component.mjs +41 -0
  16. package/esm2020/lib/fields/color.component.mjs +84 -0
  17. package/esm2020/lib/fields/date.component.mjs +52 -0
  18. package/esm2020/lib/fields/field.abstract.mjs +57 -0
  19. package/esm2020/lib/fields/group.component.mjs +46 -0
  20. package/esm2020/lib/fields/icon.component.mjs +28 -0
  21. package/esm2020/lib/fields/input.clearable.component.mjs +112 -0
  22. package/esm2020/lib/fields/input.component.mjs +158 -0
  23. package/esm2020/lib/fields/label.component.mjs +40 -0
  24. package/esm2020/lib/fields/line-break.component.mjs +23 -0
  25. package/esm2020/lib/fields/link.component.mjs +32 -0
  26. package/esm2020/lib/fields/list-field.component.mjs +113 -0
  27. package/esm2020/lib/fields/radio.component.mjs +49 -0
  28. package/esm2020/lib/fields/select.component.mjs +210 -0
  29. package/esm2020/lib/fields/select.search.component.mjs +307 -0
  30. package/esm2020/lib/fields/selection-list.component.mjs +63 -0
  31. package/esm2020/lib/fields/slide-toggle.component.mjs +43 -0
  32. package/esm2020/lib/fields/text.component.mjs +40 -0
  33. package/esm2020/lib/fields/textarea.component.mjs +56 -0
  34. package/esm2020/lib/forms/button-control.component.mjs +115 -0
  35. package/esm2020/lib/forms/buttonchecker-control.component.mjs +85 -0
  36. package/esm2020/lib/forms/buttonfile-control.component.mjs +118 -0
  37. package/esm2020/lib/interfaces/component.interface.mjs +2 -0
  38. package/esm2020/lib/interfaces/field.config.interface.mjs +2 -0
  39. package/esm2020/lib/interfaces/field.interface.mjs +2 -0
  40. package/esm2020/lib/interfaces/validator.interface.mjs +2 -0
  41. package/esm2020/lib/kles-material-dynamicforms.module.mjs +191 -0
  42. package/esm2020/lib/matcher/form-error.matcher.mjs +16 -0
  43. package/esm2020/lib/modules/material.module.mjs +278 -0
  44. package/esm2020/lib/pipe/array.pipe.mjs +22 -0
  45. package/esm2020/lib/pipe/transform.pipe.mjs +27 -0
  46. package/esm2020/lib/validators/autocomplete.validator.mjs +23 -0
  47. package/esm2020/public-api.mjs +58 -0
  48. package/fesm2015/3kles-kles-material-dynamicforms.mjs +2829 -0
  49. package/fesm2015/3kles-kles-material-dynamicforms.mjs.map +1 -0
  50. package/fesm2020/3kles-kles-material-dynamicforms.mjs +2826 -0
  51. package/fesm2020/3kles-kles-material-dynamicforms.mjs.map +1 -0
  52. package/{3kles-kles-material-dynamicforms.d.ts → index.d.ts} +1 -1
  53. package/lib/decorators/component.decorator.d.ts +8 -0
  54. package/lib/directive/dynamic-component.directive.d.ts +5 -3
  55. package/lib/directive/dynamic-field.directive.d.ts +7 -5
  56. package/lib/dynamic-form.component.d.ts +6 -3
  57. package/lib/enums/type.enum.d.ts +4 -1
  58. package/lib/fields/array.component.d.ts +5 -2
  59. package/lib/fields/badge.component.d.ts +3 -0
  60. package/lib/fields/button-form.component.d.ts +3 -0
  61. package/lib/fields/button-submit.component.d.ts +3 -0
  62. package/lib/fields/button-toogle-group.component.d.ts +3 -0
  63. package/lib/fields/buttonchecker-form.component.d.ts +3 -0
  64. package/lib/fields/buttonfile-form.component.d.ts +3 -0
  65. package/lib/fields/checkbox.component.d.ts +4 -1
  66. package/lib/fields/chip.component.d.ts +3 -0
  67. package/lib/fields/color.component.d.ts +3 -0
  68. package/lib/fields/date.component.d.ts +3 -0
  69. package/lib/fields/field.abstract.d.ts +6 -6
  70. package/lib/fields/group.component.d.ts +5 -2
  71. package/lib/fields/icon.component.d.ts +3 -0
  72. package/lib/fields/input.clearable.component.d.ts +3 -0
  73. package/lib/fields/input.component.d.ts +3 -0
  74. package/lib/fields/label.component.d.ts +3 -0
  75. package/lib/fields/line-break.component.d.ts +5 -2
  76. package/lib/fields/link.component.d.ts +3 -0
  77. package/lib/fields/list-field.component.d.ts +7 -5
  78. package/lib/fields/radio.component.d.ts +3 -0
  79. package/lib/fields/select.component.d.ts +5 -3
  80. package/lib/fields/select.search.component.d.ts +6 -3
  81. package/lib/fields/selection-list.component.d.ts +3 -0
  82. package/lib/fields/slide-toggle.component.d.ts +3 -0
  83. package/lib/fields/text.component.d.ts +3 -0
  84. package/lib/fields/textarea.component.d.ts +3 -0
  85. package/lib/forms/button-control.component.d.ts +3 -0
  86. package/lib/forms/buttonchecker-control.component.d.ts +3 -0
  87. package/lib/forms/buttonfile-control.component.d.ts +3 -0
  88. package/lib/interfaces/field.config.interface.d.ts +3 -6
  89. package/lib/interfaces/field.interface.d.ts +2 -2
  90. package/lib/kles-material-dynamicforms.module.d.ts +45 -0
  91. package/lib/matcher/form-error.matcher.d.ts +5 -2
  92. package/lib/modules/material.module.d.ts +40 -0
  93. package/lib/pipe/array.pipe.d.ts +3 -0
  94. package/lib/pipe/transform.pipe.d.ts +3 -0
  95. package/package.json +22 -12
  96. package/public-api.d.ts +2 -1
  97. package/3kles-kles-material-dynamicforms.metadata.json +0 -1
  98. package/bundles/3kles-kles-material-dynamicforms.umd.js +0 -1980
  99. package/bundles/3kles-kles-material-dynamicforms.umd.js.map +0 -1
  100. package/bundles/3kles-kles-material-dynamicforms.umd.min.js +0 -16
  101. package/bundles/3kles-kles-material-dynamicforms.umd.min.js.map +0 -1
  102. package/esm2015/3kles-kles-material-dynamicforms.js +0 -6
  103. package/esm2015/lib/directive/dynamic-component.directive.js +0 -50
  104. package/esm2015/lib/directive/dynamic-field.directive.js +0 -95
  105. package/esm2015/lib/dynamic-form.component.js +0 -260
  106. package/esm2015/lib/enums/type.enum.js +0 -16
  107. package/esm2015/lib/fields/array.component.js +0 -37
  108. package/esm2015/lib/fields/badge.component.js +0 -23
  109. package/esm2015/lib/fields/button-form.component.js +0 -31
  110. package/esm2015/lib/fields/button-submit.component.js +0 -23
  111. package/esm2015/lib/fields/button-toogle-group.component.js +0 -35
  112. package/esm2015/lib/fields/buttonchecker-form.component.js +0 -31
  113. package/esm2015/lib/fields/buttonfile-form.component.js +0 -30
  114. package/esm2015/lib/fields/checkbox.component.js +0 -27
  115. package/esm2015/lib/fields/chip.component.js +0 -26
  116. package/esm2015/lib/fields/color.component.js +0 -61
  117. package/esm2015/lib/fields/date.component.js +0 -31
  118. package/esm2015/lib/fields/field.abstract.js +0 -68
  119. package/esm2015/lib/fields/group.component.js +0 -33
  120. package/esm2015/lib/fields/icon.component.js +0 -21
  121. package/esm2015/lib/fields/input.clearable.component.js +0 -59
  122. package/esm2015/lib/fields/input.component.js +0 -104
  123. package/esm2015/lib/fields/label.component.js +0 -26
  124. package/esm2015/lib/fields/line-break.component.js +0 -22
  125. package/esm2015/lib/fields/link.component.js +0 -23
  126. package/esm2015/lib/fields/list-field.component.js +0 -88
  127. package/esm2015/lib/fields/radio.component.js +0 -30
  128. package/esm2015/lib/fields/select.component.js +0 -127
  129. package/esm2015/lib/fields/select.search.component.js +0 -205
  130. package/esm2015/lib/fields/selection-list.component.js +0 -43
  131. package/esm2015/lib/fields/slide-toggle.component.js +0 -27
  132. package/esm2015/lib/fields/text.component.js +0 -23
  133. package/esm2015/lib/fields/textarea.component.js +0 -35
  134. package/esm2015/lib/forms/button-control.component.js +0 -102
  135. package/esm2015/lib/forms/buttonchecker-control.component.js +0 -53
  136. package/esm2015/lib/forms/buttonfile-control.component.js +0 -103
  137. package/esm2015/lib/interfaces/component.interface.js +0 -1
  138. package/esm2015/lib/interfaces/directive.interface.js +0 -1
  139. package/esm2015/lib/interfaces/field.config.interface.js +0 -1
  140. package/esm2015/lib/interfaces/field.interface.js +0 -1
  141. package/esm2015/lib/interfaces/validator.interface.js +0 -1
  142. package/esm2015/lib/kles-material-dynamicforms.module.js +0 -116
  143. package/esm2015/lib/matcher/form-error.matcher.js +0 -9
  144. package/esm2015/lib/modules/material.module.js +0 -129
  145. package/esm2015/lib/pipe/array.pipe.js +0 -20
  146. package/esm2015/lib/pipe/transform.pipe.js +0 -25
  147. package/esm2015/lib/validators/autocomplete.validator.js +0 -23
  148. package/esm2015/public-api.js +0 -51
  149. package/esm5/3kles-kles-material-dynamicforms.js +0 -6
  150. package/esm5/lib/directive/dynamic-component.directive.js +0 -51
  151. package/esm5/lib/directive/dynamic-field.directive.js +0 -96
  152. package/esm5/lib/dynamic-form.component.js +0 -262
  153. package/esm5/lib/enums/type.enum.js +0 -16
  154. package/esm5/lib/fields/array.component.js +0 -31
  155. package/esm5/lib/fields/badge.component.js +0 -24
  156. package/esm5/lib/fields/button-form.component.js +0 -24
  157. package/esm5/lib/fields/button-submit.component.js +0 -24
  158. package/esm5/lib/fields/button-toogle-group.component.js +0 -31
  159. package/esm5/lib/fields/buttonchecker-form.component.js +0 -24
  160. package/esm5/lib/fields/buttonfile-form.component.js +0 -24
  161. package/esm5/lib/fields/checkbox.component.js +0 -22
  162. package/esm5/lib/fields/chip.component.js +0 -22
  163. package/esm5/lib/fields/color.component.js +0 -49
  164. package/esm5/lib/fields/date.component.js +0 -22
  165. package/esm5/lib/fields/field.abstract.js +0 -70
  166. package/esm5/lib/fields/group.component.js +0 -30
  167. package/esm5/lib/fields/icon.component.js +0 -22
  168. package/esm5/lib/fields/input.clearable.component.js +0 -22
  169. package/esm5/lib/fields/input.component.js +0 -73
  170. package/esm5/lib/fields/label.component.js +0 -25
  171. package/esm5/lib/fields/line-break.component.js +0 -23
  172. package/esm5/lib/fields/link.component.js +0 -24
  173. package/esm5/lib/fields/list-field.component.js +0 -68
  174. package/esm5/lib/fields/radio.component.js +0 -22
  175. package/esm5/lib/fields/select.component.js +0 -59
  176. package/esm5/lib/fields/select.search.component.js +0 -119
  177. package/esm5/lib/fields/selection-list.component.js +0 -32
  178. package/esm5/lib/fields/slide-toggle.component.js +0 -22
  179. package/esm5/lib/fields/text.component.js +0 -24
  180. package/esm5/lib/fields/textarea.component.js +0 -25
  181. package/esm5/lib/forms/button-control.component.js +0 -95
  182. package/esm5/lib/forms/buttonchecker-control.component.js +0 -37
  183. package/esm5/lib/forms/buttonfile-control.component.js +0 -119
  184. package/esm5/lib/interfaces/component.interface.js +0 -1
  185. package/esm5/lib/interfaces/directive.interface.js +0 -1
  186. package/esm5/lib/interfaces/field.config.interface.js +0 -1
  187. package/esm5/lib/interfaces/field.interface.js +0 -1
  188. package/esm5/lib/interfaces/validator.interface.js +0 -1
  189. package/esm5/lib/kles-material-dynamicforms.module.js +0 -119
  190. package/esm5/lib/matcher/form-error.matcher.js +0 -11
  191. package/esm5/lib/modules/material.module.js +0 -132
  192. package/esm5/lib/pipe/array.pipe.js +0 -23
  193. package/esm5/lib/pipe/transform.pipe.js +0 -28
  194. package/esm5/lib/validators/autocomplete.validator.js +0 -23
  195. package/esm5/public-api.js +0 -51
  196. package/fesm2015/3kles-kles-material-dynamicforms.js +0 -2088
  197. package/fesm2015/3kles-kles-material-dynamicforms.js.map +0 -1
  198. package/fesm5/3kles-kles-material-dynamicforms.js +0 -1766
  199. package/fesm5/3kles-kles-material-dynamicforms.js.map +0 -1
  200. package/lib/interfaces/directive.interface.d.ts +0 -3
@@ -0,0 +1,113 @@
1
+ import { Component } from '@angular/core';
2
+ import { KlesFieldAbstract } from './field.abstract';
3
+ import { Validators } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/flex-layout/flex";
8
+ import * as i4 from "@angular/material/button";
9
+ import * as i5 from "@angular/material/icon";
10
+ import * as i6 from "@angular/material/form-field";
11
+ import * as i7 from "@ngx-translate/core";
12
+ export class KlesFormListFieldComponent extends KlesFieldAbstract {
13
+ constructor(fb) {
14
+ super();
15
+ this.fb = fb;
16
+ }
17
+ ngOnInit() {
18
+ this.formArray = this.group.controls[this.field.name];
19
+ super.ngOnInit();
20
+ }
21
+ createFormGroup() {
22
+ const group = this.fb.group({});
23
+ this.field.collections.forEach(item => {
24
+ const control = this.fb.control(null, this.bindValidations(item.validations || []), this.bindAsyncValidations(item.asyncValidations || []));
25
+ group.addControl(item.name, control);
26
+ });
27
+ return group;
28
+ }
29
+ deleteField(index) {
30
+ this.formArray.removeAt(index);
31
+ }
32
+ addField() {
33
+ this.formArray.push(this.createFormGroup());
34
+ }
35
+ bindValidations(validations) {
36
+ if (validations.length > 0) {
37
+ const validList = [];
38
+ validations.forEach(valid => {
39
+ validList.push(valid.validator);
40
+ });
41
+ return Validators.compose(validList);
42
+ }
43
+ return null;
44
+ }
45
+ bindAsyncValidations(validations) {
46
+ if (validations.length > 0) {
47
+ const validList = [];
48
+ validations.forEach(valid => {
49
+ validList.push(valid.validator);
50
+ });
51
+ return Validators.composeAsync(validList);
52
+ }
53
+ return null;
54
+ }
55
+ ngOnDestroy() {
56
+ super.ngOnDestroy();
57
+ }
58
+ }
59
+ KlesFormListFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormListFieldComponent, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
60
+ KlesFormListFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: KlesFormListFieldComponent, selector: "kles-form-listfield", usesInheritance: true, ngImport: i0, template: `
61
+ <div [formGroup]="group" class="form-element">
62
+ {{field.label | translate}}
63
+ <button mat-icon-button color="primary" (click)="addField()">
64
+ <mat-icon>add</mat-icon>
65
+ </button>
66
+
67
+ <div class="dynamic-form" [formGroupName]="field.name">
68
+ <div *ngFor="let subGroup of formArray.controls let index = index;" fxLayout="row" fxLayoutGap="5px">
69
+ <ng-container *ngFor="let subfield of field.collections;"
70
+ dynamicField [field]="subfield" [group]="subGroup">
71
+ </ng-container>
72
+ <button mat-icon-button (click)="deleteField(index)" color="primary">
73
+ <mat-icon>delete_outlined</mat-icon>
74
+ </button>
75
+ </div>
76
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
77
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
78
+ </ng-container>
79
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
80
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
81
+ </ng-container>
82
+ </div>
83
+ </div>
84
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormListFieldComponent, decorators: [{
86
+ type: Component,
87
+ args: [{ selector: 'kles-form-listfield', template: `
88
+ <div [formGroup]="group" class="form-element">
89
+ {{field.label | translate}}
90
+ <button mat-icon-button color="primary" (click)="addField()">
91
+ <mat-icon>add</mat-icon>
92
+ </button>
93
+
94
+ <div class="dynamic-form" [formGroupName]="field.name">
95
+ <div *ngFor="let subGroup of formArray.controls let index = index;" fxLayout="row" fxLayoutGap="5px">
96
+ <ng-container *ngFor="let subfield of field.collections;"
97
+ dynamicField [field]="subfield" [group]="subGroup">
98
+ </ng-container>
99
+ <button mat-icon-button (click)="deleteField(index)" color="primary">
100
+ <mat-icon>delete_outlined</mat-icon>
101
+ </button>
102
+ </div>
103
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
104
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
105
+ </ng-container>
106
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
107
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
108
+ </ng-container>
109
+ </div>
110
+ </div>
111
+ ` }]
112
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; } });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy9zcmMvbGliL2ZpZWxkcy9saXN0LWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQXVFLFVBQVUsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBZ0NuSSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsaUJBQWlCO0lBSTdELFlBQW9CLEVBQXNCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFEsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7SUFFMUMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFxQixDQUFDO1FBQzFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQzNCLElBQUksRUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLEVBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQ3pELENBQUM7WUFDRixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUVqQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBR08sZUFBZSxDQUFDLFdBQTBDO1FBQzlELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBRXhDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUdPLG9CQUFvQixDQUFDLFdBQStDO1FBQ3hFLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBRTdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7dUhBakVRLDBCQUEwQjsyR0FBMUIsMEJBQTBCLGtGQTNCekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVDsyRkFHUSwwQkFBMEI7a0JBN0J0QyxTQUFTOytCQUNJLHFCQUFxQixZQUNyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBd0JUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS2xlc0ZpZWxkQWJzdHJhY3QgfSBmcm9tICcuL2ZpZWxkLmFic3RyYWN0JztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMsIEFzeW5jVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJS2xlc1ZhbGlkYXRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsaWRhdG9yLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2xlcy1mb3JtLWxpc3RmaWVsZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiBjbGFzcz1cImZvcm0tZWxlbWVudFwiPlxuICAgICAgICB7e2ZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZEZpZWxkKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1mb3JtXCIgW2Zvcm1Hcm91cE5hbWVdPVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3ViR3JvdXAgb2YgZm9ybUFycmF5LmNvbnRyb2xzIGxldCBpbmRleCA9IGluZGV4O1wiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCI1cHhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJmaWVsZCBvZiBmaWVsZC5jb2xsZWN0aW9ucztcIlxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljRmllbGQgW2ZpZWxkXT1cInN1YmZpZWxkXCIgW2dyb3VwXT1cInN1Ykdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRlbGV0ZUZpZWxkKGluZGV4KVwiIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucztcIiBuZ1Byb2plY3RBcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJncm91cC5nZXQoZmllbGQubmFtZSkuaGFzRXJyb3IodmFsaWRhdGlvbi5uYW1lKVwiPnt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC5hc3luY1ZhbGlkYXRpb25zO1wiIG5nUHJvamVjdEFzPVwibWF0LWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdyb3VwLmdldChmaWVsZC5uYW1lKS5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpXCI+e3t2YWxpZGF0aW9uLm1lc3NhZ2UgfCB0cmFuc2xhdGV9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGAsXG4gICAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRm9ybUxpc3RGaWVsZENvbXBvbmVudCBleHRlbmRzIEtsZXNGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgZm9ybUFycmF5OiBVbnR5cGVkRm9ybUFycmF5O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICAgIHRoaXMuZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhpdGVtLnZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGl0ZW0uYXN5bmNWYWxpZGF0aW9ucyB8fCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBncm91cC5hZGRDb250cm9sKGl0ZW0ubmFtZSwgY29udHJvbCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuXG4gICAgfVxuXG4gICAgZGVsZXRlRmllbGQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgYWRkRmllbGQoKSB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2godGhpcy5jcmVhdGVGb3JtR3JvdXAoKSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGJpbmRWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8VmFsaWRhdG9yRm4+W10pOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLmZvckVhY2godmFsaWQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkTGlzdC5wdXNoKHZhbGlkLnZhbGlkYXRvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBiaW5kQXN5bmNWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8QXN5bmNWYWxpZGF0b3JGbj5bXSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRMaXN0ID0gW107XG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKHZhbGlkID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlQXN5bmModmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cblxuIl19
@@ -0,0 +1,49 @@
1
+ import { Component } from '@angular/core';
2
+ import { KlesFieldAbstract } from './field.abstract';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/flex-layout/extended";
7
+ import * as i4 from "@angular/material/form-field";
8
+ import * as i5 from "@angular/material/radio";
9
+ import * as i6 from "@angular/material/tooltip";
10
+ import * as i7 from "@ngx-translate/core";
11
+ export class KlesFormRadioComponent extends KlesFieldAbstract {
12
+ ngOnInit() { super.ngOnInit(); }
13
+ ngOnDestroy() {
14
+ super.ngOnDestroy();
15
+ }
16
+ }
17
+ KlesFormRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18
+ KlesFormRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: KlesFormRadioComponent, selector: "kles-form-radiobutton", usesInheritance: true, ngImport: i0, template: `
19
+ <div [formGroup]="group">
20
+ <label class="radio-label-padding">{{field.label}}</label>
21
+ <mat-radio-group matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass" [formControlName]="field.name">
22
+ <mat-radio-button *ngFor="let item of field.options" [value]="item">{{item}}</mat-radio-button>
23
+ </mat-radio-group>
24
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
25
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
26
+ </ng-container>
27
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
28
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
29
+ </ng-container>
30
+ </div>
31
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormRadioComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: 'kles-form-radiobutton', template: `
35
+ <div [formGroup]="group">
36
+ <label class="radio-label-padding">{{field.label}}</label>
37
+ <mat-radio-group matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass" [formControlName]="field.name">
38
+ <mat-radio-button *ngFor="let item of field.options" [value]="item">{{item}}</mat-radio-button>
39
+ </mat-radio-group>
40
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
41
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
42
+ </ng-container>
43
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
44
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
45
+ </ng-container>
46
+ </div>
47
+ ` }]
48
+ }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xlcy1tYXRlcmlhbC1keW5hbWljZm9ybXMvc3JjL2xpYi9maWVsZHMvcmFkaW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7QUFvQnJELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxpQkFBaUI7SUFFekQsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEMsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOzttSEFOUSxzQkFBc0I7dUdBQXRCLHNCQUFzQixvRkFoQnJCOzs7Ozs7Ozs7Ozs7O0NBYWI7MkZBR1ksc0JBQXNCO2tCQWxCbEMsU0FBUzsrQkFDSSx1QkFBdUIsWUFDdkI7Ozs7Ozs7Ozs7Ozs7Q0FhYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtsZXNGaWVsZEFic3RyYWN0IH0gZnJvbSAnLi9maWVsZC5hYnN0cmFjdCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2xlcy1mb3JtLXJhZGlvYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpby1sYWJlbC1wYWRkaW5nXCI+e3tmaWVsZC5sYWJlbH19PC9sYWJlbD5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBtYXRUb29sdGlwPVwie3tmaWVsZC50b29sdGlwfX1cIiBbYXR0ci5pZF09XCJmaWVsZC5pZFwiIFtuZ0NsYXNzXT1cImZpZWxkLm5nQ2xhc3NcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLm9wdGlvbnNcIiBbdmFsdWVdPVwiaXRlbVwiPnt7aXRlbX19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucztcIiBuZ1Byb2plY3RBcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJncm91cC5nZXQoZmllbGQubmFtZSkuaGFzRXJyb3IodmFsaWRhdGlvbi5uYW1lKVwiPnt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC5hc3luY1ZhbGlkYXRpb25zO1wiIG5nUHJvamVjdEFzPVwibWF0LWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdyb3VwLmdldChmaWVsZC5uYW1lKS5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpXCI+e3t2YWxpZGF0aW9uLm1lc3NhZ2UgfCB0cmFuc2xhdGV9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5gLFxuICAgIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgS2xlc0Zvcm1SYWRpb0NvbXBvbmVudCBleHRlbmRzIEtsZXNGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgbmdPbkluaXQoKSB7IHN1cGVyLm5nT25Jbml0KCk7IH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,210 @@
1
+ import { __decorate } from "tslib";
2
+ import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
3
+ import { Component, ViewChild, ViewChildren } from '@angular/core';
4
+ import { MatOption } from '@angular/material/core';
5
+ import { Observable, of } from 'rxjs';
6
+ import { FieldMapper } from '../decorators/component.decorator';
7
+ import { EnumType } from '../enums/type.enum';
8
+ import { KlesFieldAbstract } from './field.abstract';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common";
11
+ import * as i2 from "@angular/forms";
12
+ import * as i3 from "@angular/flex-layout/extended";
13
+ import * as i4 from "@angular/material/form-field";
14
+ import * as i5 from "@angular/material/select";
15
+ import * as i6 from "@angular/material/core";
16
+ import * as i7 from "@angular/material/tooltip";
17
+ import * as i8 from "@angular/cdk/scrolling";
18
+ import * as i9 from "../directive/dynamic-component.directive";
19
+ import * as i10 from "@ngx-translate/core";
20
+ import * as i11 from "../pipe/transform.pipe";
21
+ let KlesFormSelectComponent = class KlesFormSelectComponent extends KlesFieldAbstract {
22
+ constructor() {
23
+ super();
24
+ this.compareFn = (o1, o2) => {
25
+ if (this.field.property && o1 && o2) {
26
+ return o1[this.field.property] === o2[this.field.property];
27
+ }
28
+ return o1 === o2;
29
+ };
30
+ }
31
+ ngOnInit() {
32
+ super.ngOnInit();
33
+ if (!(this.field.options instanceof Observable)) {
34
+ this.options$ = of(this.field.options);
35
+ }
36
+ else {
37
+ this.options$ = this.field.options;
38
+ }
39
+ }
40
+ ngOnDestroy() {
41
+ super.ngOnDestroy();
42
+ }
43
+ openChange($event) {
44
+ if (this.field.virtualScroll) {
45
+ if ($event) {
46
+ this.cdkVirtualScrollViewport.scrollToIndex(0);
47
+ this.cdkVirtualScrollViewport.checkViewportSize();
48
+ }
49
+ }
50
+ }
51
+ };
52
+ KlesFormSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
+ KlesFormSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: KlesFormSelectComponent, selector: "kles-form-select", viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "options", predicate: MatOption, descendants: true }], usesInheritance: true, ngImport: i0, template: `
54
+ <mat-form-field class="margin-top" [color]="field.color" [formGroup]="group">
55
+ <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id"
56
+ (openedChange)="openChange($event)" [compareWith]="compareFn"
57
+ [ngClass]="field.ngClass" [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
58
+ <mat-select-trigger *ngIf="field.triggerComponent">
59
+ <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
60
+ </mat-select-trigger>
61
+
62
+
63
+ <ng-container *ngIf="!field.virtualScroll">
64
+ <ng-container *ngIf="!field.autocompleteComponent">
65
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>
66
+ </ng-container>
67
+
68
+ <ng-container *ngIf="field.autocompleteComponent">
69
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
70
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
71
+ </mat-option>
72
+ </ng-container>
73
+ </ng-container>
74
+
75
+ <ng-container *ngIf="field.virtualScroll">
76
+ <cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 50" [style.height.px]=5*48>
77
+ <ng-container *ngIf="!field.autocompleteComponent">
78
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
79
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
80
+ </mat-option>
81
+
82
+ <ng-container *ngIf="field.multiple">
83
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
84
+ style="display:none">
85
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
86
+ </mat-option>
87
+ </ng-container>
88
+
89
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
90
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
91
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
92
+ </mat-option>
93
+ </ng-container>
94
+ </ng-container>
95
+
96
+ <ng-container *ngIf="field.autocompleteComponent">
97
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
98
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
99
+ </mat-option>
100
+ <ng-container *ngIf="field.multiple">
101
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
102
+ style="display:none">
103
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
104
+ </mat-option>
105
+ </ng-container>
106
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
107
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
108
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
109
+ </mat-option>
110
+ </ng-container>
111
+ </ng-container>
112
+ </cdk-virtual-scroll-viewport>
113
+
114
+ </ng-container>
115
+
116
+ </mat-select>
117
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
118
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
119
+ </ng-container>
120
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
121
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
122
+ </ng-container>
123
+ </mat-form-field>
124
+ `, isInline: true, styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i5.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i8.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i8.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i9.KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.KlesTransformPipe, name: "klesTransform" }] });
125
+ KlesFormSelectComponent = __decorate([
126
+ FieldMapper({ type: EnumType.select })
127
+ ], KlesFormSelectComponent);
128
+ export { KlesFormSelectComponent };
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: KlesFormSelectComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'kles-form-select', template: `
132
+ <mat-form-field class="margin-top" [color]="field.color" [formGroup]="group">
133
+ <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id"
134
+ (openedChange)="openChange($event)" [compareWith]="compareFn"
135
+ [ngClass]="field.ngClass" [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
136
+ <mat-select-trigger *ngIf="field.triggerComponent">
137
+ <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
138
+ </mat-select-trigger>
139
+
140
+
141
+ <ng-container *ngIf="!field.virtualScroll">
142
+ <ng-container *ngIf="!field.autocompleteComponent">
143
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>
144
+ </ng-container>
145
+
146
+ <ng-container *ngIf="field.autocompleteComponent">
147
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
148
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
149
+ </mat-option>
150
+ </ng-container>
151
+ </ng-container>
152
+
153
+ <ng-container *ngIf="field.virtualScroll">
154
+ <cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 50" [style.height.px]=5*48>
155
+ <ng-container *ngIf="!field.autocompleteComponent">
156
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
157
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
158
+ </mat-option>
159
+
160
+ <ng-container *ngIf="field.multiple">
161
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
162
+ style="display:none">
163
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
164
+ </mat-option>
165
+ </ng-container>
166
+
167
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
168
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
169
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
170
+ </mat-option>
171
+ </ng-container>
172
+ </ng-container>
173
+
174
+ <ng-container *ngIf="field.autocompleteComponent">
175
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
176
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
177
+ </mat-option>
178
+ <ng-container *ngIf="field.multiple">
179
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
180
+ style="display:none">
181
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
182
+ </mat-option>
183
+ </ng-container>
184
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
185
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
186
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
187
+ </mat-option>
188
+ </ng-container>
189
+ </ng-container>
190
+ </cdk-virtual-scroll-viewport>
191
+
192
+ </ng-container>
193
+
194
+ </mat-select>
195
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
196
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
197
+ </ng-container>
198
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
199
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
200
+ </ng-container>
201
+ </mat-form-field>
202
+ `, styles: ["mat-form-field{width:100%}\n"] }]
203
+ }], ctorParameters: function () { return []; }, propDecorators: { cdkVirtualScrollViewport: [{
204
+ type: ViewChild,
205
+ args: [CdkVirtualScrollViewport]
206
+ }], options: [{
207
+ type: ViewChildren,
208
+ args: [MatOption]
209
+ }] } });
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsZXMtbWF0ZXJpYWwtZHluYW1pY2Zvcm1zL3NyYy9saWIvZmllbGRzL3NlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBQW9DLFNBQVMsRUFBZ0MsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7OztJQStFeEMsdUJBQXVCLFNBQXZCLHVCQUF3QixTQUFRLGlCQUFpQjtJQU8xRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBMEJaLGNBQVMsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFBO0lBOUJELENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxZQUFZLFVBQVUsQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWU7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUMxQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNyRDtTQUNKO0lBQ0wsQ0FBQztDQVFKLENBQUE7b0hBeENZLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLGtIQUVyQix3QkFBd0IsNkRBQ3JCLFNBQVMsdUVBN0ViOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVFYjtBQUdZLHVCQUF1QjtJQTdFbkMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztHQTZFMUIsdUJBQXVCLENBd0NuQztTQXhDWSx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkE1RW5DLFNBQVM7K0JBQ0ksa0JBQWtCLFlBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVFYjswRUFLd0Msd0JBQXdCO3NCQUE1RCxTQUFTO3VCQUFDLHdCQUF3QjtnQkFDVixPQUFPO3NCQUEvQixZQUFZO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaWVsZE1hcHBlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvY29tcG9uZW50LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4uL2VudW1zL3R5cGUuZW51bSc7XG5pbXBvcnQgeyBLbGVzRmllbGRBYnN0cmFjdCB9IGZyb20gJy4vZmllbGQuYWJzdHJhY3QnO1xuXG5ARmllbGRNYXBwZXIoeyB0eXBlOiBFbnVtVHlwZS5zZWxlY3QgfSlcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2xlcy1mb3JtLXNlbGVjdCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXJnaW4tdG9wXCIgW2NvbG9yXT1cImZpZWxkLmNvbG9yXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCBtYXRUb29sdGlwPVwie3tmaWVsZC50b29sdGlwfX1cIiBbYXR0ci5pZF09XCJmaWVsZC5pZFwiXG4gICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib3BlbkNoYW5nZSgkZXZlbnQpXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVGblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImZpZWxkLm5nQ2xhc3NcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbbXVsdGlwbGVdPVwiZmllbGQubXVsdGlwbGVcIj5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIiBbdmFsdWVdPVwiZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpZWxkLnZpcnR1YWxTY3JvbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQudmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiZmllbGQuaXRlbVNpemUgfHwgNTBcIiBbc3R5bGUuaGVpZ2h0LnB4XT01KjQ4PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyhmaWVsZC5wcm9wZXJ0eSA/IGl0ZW1bZmllbGQucHJvcGVydHldIDogaXRlbSkgfCBrbGVzVHJhbnNmb3JtOmZpZWxkLnBpcGVUcmFuc2Zvcm19fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSB8IHNsaWNlOjA6MzBcIiBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQubXVsdGlwbGUgJiYgZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdXCIgW3ZhbHVlXT1cIml0ZW1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzQ29tcG9uZW50IFtjb21wb25lbnRdPVwiZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCIgW3ZhbHVlXT1cIml0ZW1cIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQubXVsdGlwbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMFwiIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzQ29tcG9uZW50IFtjb21wb25lbnRdPVwiZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCIgW3ZhbHVlXT1cIml0ZW1cIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQubXVsdGlwbGUgJiYgZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtncm91cD8uY29udHJvbHNbZmllbGQubmFtZV0/LnZhbHVlXVwiIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucztcIiBuZ1Byb2plY3RBcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJncm91cC5nZXQoZmllbGQubmFtZSkuaGFzRXJyb3IodmFsaWRhdGlvbi5uYW1lKVwiPnt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC5hc3luY1ZhbGlkYXRpb25zO1wiIG5nUHJvamVjdEFzPVwibWF0LWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdyb3VwLmdldChmaWVsZC5uYW1lKS5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpXCI+e3t2YWxpZGF0aW9uLm1lc3NhZ2UgfCB0cmFuc2xhdGV9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbmAsXG4gICAgc3R5bGVzOiBbJ21hdC1mb3JtLWZpZWxkIHt3aWR0aDogY2FsYygxMDAlKX0nXVxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEtsZXNGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBWaWV3Q2hpbGRyZW4oTWF0T3B0aW9uKSBvcHRpb25zOiBRdWVyeUxpc3Q8TWF0T3B0aW9uPjtcblxuICAgIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICghKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gb2YodGhpcy5maWVsZC5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLmZpZWxkLm9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBvcGVuQ2hhbmdlKCRldmVudDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5maWVsZC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFyZUZuID0gKG8xOiBhbnksIG8yOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQucHJvcGVydHkgJiYgbzEgJiYgbzIpIHtcbiAgICAgICAgICAgIHJldHVybiBvMVt0aGlzLmZpZWxkLnByb3BlcnR5XSA9PT0gbzJbdGhpcy5maWVsZC5wcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG8xID09PSBvMjtcbiAgICB9XG59XG4iXX0=