@3kles/kles-material-dynamicforms 1.1.20 → 14.0.2

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 +66 -0
  19. package/esm2020/lib/fields/group.component.mjs +44 -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 +114 -0
  27. package/esm2020/lib/fields/radio.component.mjs +49 -0
  28. package/esm2020/lib/fields/select.component.mjs +211 -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/directive.interface.mjs +2 -0
  39. package/esm2020/lib/interfaces/field.config.interface.mjs +2 -0
  40. package/esm2020/lib/interfaces/field.interface.mjs +2 -0
  41. package/esm2020/lib/interfaces/validator.interface.mjs +2 -0
  42. package/esm2020/lib/kles-material-dynamicforms.module.mjs +191 -0
  43. package/esm2020/lib/matcher/form-error.matcher.mjs +16 -0
  44. package/esm2020/lib/modules/material.module.mjs +278 -0
  45. package/esm2020/lib/pipe/array.pipe.mjs +22 -0
  46. package/esm2020/lib/pipe/transform.pipe.mjs +27 -0
  47. package/esm2020/lib/validators/autocomplete.validator.mjs +23 -0
  48. package/esm2020/public-api.mjs +59 -0
  49. package/fesm2015/3kles-kles-material-dynamicforms.mjs +2839 -0
  50. package/fesm2015/3kles-kles-material-dynamicforms.mjs.map +1 -0
  51. package/fesm2020/3kles-kles-material-dynamicforms.mjs +2835 -0
  52. package/fesm2020/3kles-kles-material-dynamicforms.mjs.map +1 -0
  53. package/{3kles-kles-material-dynamicforms.d.ts → index.d.ts} +1 -1
  54. package/lib/decorators/component.decorator.d.ts +8 -0
  55. package/lib/directive/dynamic-component.directive.d.ts +5 -3
  56. package/lib/directive/dynamic-field.directive.d.ts +7 -5
  57. package/lib/dynamic-form.component.d.ts +6 -3
  58. package/lib/enums/type.enum.d.ts +4 -1
  59. package/lib/fields/array.component.d.ts +5 -2
  60. package/lib/fields/badge.component.d.ts +3 -0
  61. package/lib/fields/button-form.component.d.ts +3 -0
  62. package/lib/fields/button-submit.component.d.ts +3 -0
  63. package/lib/fields/button-toogle-group.component.d.ts +3 -0
  64. package/lib/fields/buttonchecker-form.component.d.ts +3 -0
  65. package/lib/fields/buttonfile-form.component.d.ts +3 -0
  66. package/lib/fields/checkbox.component.d.ts +4 -1
  67. package/lib/fields/chip.component.d.ts +3 -0
  68. package/lib/fields/color.component.d.ts +3 -0
  69. package/lib/fields/date.component.d.ts +3 -0
  70. package/lib/fields/field.abstract.d.ts +5 -2
  71. package/lib/fields/group.component.d.ts +5 -2
  72. package/lib/fields/icon.component.d.ts +3 -0
  73. package/lib/fields/input.clearable.component.d.ts +3 -0
  74. package/lib/fields/input.component.d.ts +3 -0
  75. package/lib/fields/label.component.d.ts +3 -0
  76. package/lib/fields/line-break.component.d.ts +5 -2
  77. package/lib/fields/link.component.d.ts +3 -0
  78. package/lib/fields/list-field.component.d.ts +6 -3
  79. package/lib/fields/radio.component.d.ts +3 -0
  80. package/lib/fields/select.component.d.ts +3 -0
  81. package/lib/fields/select.search.component.d.ts +6 -3
  82. package/lib/fields/selection-list.component.d.ts +3 -0
  83. package/lib/fields/slide-toggle.component.d.ts +3 -0
  84. package/lib/fields/text.component.d.ts +3 -0
  85. package/lib/fields/textarea.component.d.ts +3 -0
  86. package/lib/forms/button-control.component.d.ts +3 -0
  87. package/lib/forms/buttonchecker-control.component.d.ts +3 -0
  88. package/lib/forms/buttonfile-control.component.d.ts +3 -0
  89. package/lib/interfaces/field.config.interface.d.ts +2 -2
  90. package/lib/interfaces/field.interface.d.ts +2 -2
  91. package/lib/kles-material-dynamicforms.module.d.ts +45 -0
  92. package/lib/matcher/form-error.matcher.d.ts +5 -2
  93. package/lib/modules/material.module.d.ts +40 -0
  94. package/lib/pipe/array.pipe.d.ts +3 -0
  95. package/lib/pipe/transform.pipe.d.ts +3 -0
  96. package/package.json +22 -12
  97. package/public-api.d.ts +2 -0
  98. package/3kles-kles-material-dynamicforms.metadata.json +0 -1
  99. package/bundles/3kles-kles-material-dynamicforms.umd.js +0 -1980
  100. package/bundles/3kles-kles-material-dynamicforms.umd.js.map +0 -1
  101. package/bundles/3kles-kles-material-dynamicforms.umd.min.js +0 -16
  102. package/bundles/3kles-kles-material-dynamicforms.umd.min.js.map +0 -1
  103. package/esm2015/3kles-kles-material-dynamicforms.js +0 -6
  104. package/esm2015/lib/directive/dynamic-component.directive.js +0 -50
  105. package/esm2015/lib/directive/dynamic-field.directive.js +0 -95
  106. package/esm2015/lib/dynamic-form.component.js +0 -260
  107. package/esm2015/lib/enums/type.enum.js +0 -16
  108. package/esm2015/lib/fields/array.component.js +0 -37
  109. package/esm2015/lib/fields/badge.component.js +0 -23
  110. package/esm2015/lib/fields/button-form.component.js +0 -31
  111. package/esm2015/lib/fields/button-submit.component.js +0 -23
  112. package/esm2015/lib/fields/button-toogle-group.component.js +0 -35
  113. package/esm2015/lib/fields/buttonchecker-form.component.js +0 -31
  114. package/esm2015/lib/fields/buttonfile-form.component.js +0 -30
  115. package/esm2015/lib/fields/checkbox.component.js +0 -27
  116. package/esm2015/lib/fields/chip.component.js +0 -26
  117. package/esm2015/lib/fields/color.component.js +0 -61
  118. package/esm2015/lib/fields/date.component.js +0 -31
  119. package/esm2015/lib/fields/field.abstract.js +0 -68
  120. package/esm2015/lib/fields/group.component.js +0 -32
  121. package/esm2015/lib/fields/icon.component.js +0 -21
  122. package/esm2015/lib/fields/input.clearable.component.js +0 -59
  123. package/esm2015/lib/fields/input.component.js +0 -104
  124. package/esm2015/lib/fields/label.component.js +0 -26
  125. package/esm2015/lib/fields/line-break.component.js +0 -22
  126. package/esm2015/lib/fields/link.component.js +0 -23
  127. package/esm2015/lib/fields/list-field.component.js +0 -88
  128. package/esm2015/lib/fields/radio.component.js +0 -30
  129. package/esm2015/lib/fields/select.component.js +0 -127
  130. package/esm2015/lib/fields/select.search.component.js +0 -205
  131. package/esm2015/lib/fields/selection-list.component.js +0 -43
  132. package/esm2015/lib/fields/slide-toggle.component.js +0 -27
  133. package/esm2015/lib/fields/text.component.js +0 -23
  134. package/esm2015/lib/fields/textarea.component.js +0 -35
  135. package/esm2015/lib/forms/button-control.component.js +0 -102
  136. package/esm2015/lib/forms/buttonchecker-control.component.js +0 -53
  137. package/esm2015/lib/forms/buttonfile-control.component.js +0 -103
  138. package/esm2015/lib/interfaces/component.interface.js +0 -1
  139. package/esm2015/lib/interfaces/directive.interface.js +0 -1
  140. package/esm2015/lib/interfaces/field.config.interface.js +0 -1
  141. package/esm2015/lib/interfaces/field.interface.js +0 -1
  142. package/esm2015/lib/interfaces/validator.interface.js +0 -1
  143. package/esm2015/lib/kles-material-dynamicforms.module.js +0 -116
  144. package/esm2015/lib/matcher/form-error.matcher.js +0 -9
  145. package/esm2015/lib/modules/material.module.js +0 -129
  146. package/esm2015/lib/pipe/array.pipe.js +0 -20
  147. package/esm2015/lib/pipe/transform.pipe.js +0 -25
  148. package/esm2015/lib/validators/autocomplete.validator.js +0 -23
  149. package/esm2015/public-api.js +0 -51
  150. package/esm5/3kles-kles-material-dynamicforms.js +0 -6
  151. package/esm5/lib/directive/dynamic-component.directive.js +0 -51
  152. package/esm5/lib/directive/dynamic-field.directive.js +0 -96
  153. package/esm5/lib/dynamic-form.component.js +0 -262
  154. package/esm5/lib/enums/type.enum.js +0 -16
  155. package/esm5/lib/fields/array.component.js +0 -31
  156. package/esm5/lib/fields/badge.component.js +0 -24
  157. package/esm5/lib/fields/button-form.component.js +0 -24
  158. package/esm5/lib/fields/button-submit.component.js +0 -24
  159. package/esm5/lib/fields/button-toogle-group.component.js +0 -31
  160. package/esm5/lib/fields/buttonchecker-form.component.js +0 -24
  161. package/esm5/lib/fields/buttonfile-form.component.js +0 -24
  162. package/esm5/lib/fields/checkbox.component.js +0 -22
  163. package/esm5/lib/fields/chip.component.js +0 -22
  164. package/esm5/lib/fields/color.component.js +0 -49
  165. package/esm5/lib/fields/date.component.js +0 -22
  166. package/esm5/lib/fields/field.abstract.js +0 -70
  167. package/esm5/lib/fields/group.component.js +0 -30
  168. package/esm5/lib/fields/icon.component.js +0 -22
  169. package/esm5/lib/fields/input.clearable.component.js +0 -22
  170. package/esm5/lib/fields/input.component.js +0 -73
  171. package/esm5/lib/fields/label.component.js +0 -25
  172. package/esm5/lib/fields/line-break.component.js +0 -23
  173. package/esm5/lib/fields/link.component.js +0 -24
  174. package/esm5/lib/fields/list-field.component.js +0 -68
  175. package/esm5/lib/fields/radio.component.js +0 -22
  176. package/esm5/lib/fields/select.component.js +0 -59
  177. package/esm5/lib/fields/select.search.component.js +0 -119
  178. package/esm5/lib/fields/selection-list.component.js +0 -32
  179. package/esm5/lib/fields/slide-toggle.component.js +0 -22
  180. package/esm5/lib/fields/text.component.js +0 -24
  181. package/esm5/lib/fields/textarea.component.js +0 -25
  182. package/esm5/lib/forms/button-control.component.js +0 -95
  183. package/esm5/lib/forms/buttonchecker-control.component.js +0 -37
  184. package/esm5/lib/forms/buttonfile-control.component.js +0 -119
  185. package/esm5/lib/interfaces/component.interface.js +0 -1
  186. package/esm5/lib/interfaces/directive.interface.js +0 -1
  187. package/esm5/lib/interfaces/field.config.interface.js +0 -1
  188. package/esm5/lib/interfaces/field.interface.js +0 -1
  189. package/esm5/lib/interfaces/validator.interface.js +0 -1
  190. package/esm5/lib/kles-material-dynamicforms.module.js +0 -119
  191. package/esm5/lib/matcher/form-error.matcher.js +0 -11
  192. package/esm5/lib/modules/material.module.js +0 -132
  193. package/esm5/lib/pipe/array.pipe.js +0 -23
  194. package/esm5/lib/pipe/transform.pipe.js +0 -28
  195. package/esm5/lib/validators/autocomplete.validator.js +0 -23
  196. package/esm5/public-api.js +0 -51
  197. package/fesm2015/3kles-kles-material-dynamicforms.js +0 -2087
  198. package/fesm2015/3kles-kles-material-dynamicforms.js.map +0 -1
  199. package/fesm5/3kles-kles-material-dynamicforms.js +0 -1766
  200. package/fesm5/3kles-kles-material-dynamicforms.js.map +0 -1
@@ -0,0 +1,114 @@
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, viewRef) {
14
+ super(viewRef);
15
+ this.fb = fb;
16
+ this.viewRef = viewRef;
17
+ }
18
+ ngOnInit() {
19
+ this.formArray = this.group.controls[this.field.name];
20
+ super.ngOnInit();
21
+ }
22
+ createFormGroup() {
23
+ const group = this.fb.group({});
24
+ this.field.collections.forEach(item => {
25
+ const control = this.fb.control(null, this.bindValidations(item.validations || []), this.bindAsyncValidations(item.asyncValidations || []));
26
+ group.addControl(item.name, control);
27
+ });
28
+ return group;
29
+ }
30
+ deleteField(index) {
31
+ this.formArray.removeAt(index);
32
+ }
33
+ addField() {
34
+ this.formArray.push(this.createFormGroup());
35
+ }
36
+ bindValidations(validations) {
37
+ if (validations.length > 0) {
38
+ const validList = [];
39
+ validations.forEach(valid => {
40
+ validList.push(valid.validator);
41
+ });
42
+ return Validators.compose(validList);
43
+ }
44
+ return null;
45
+ }
46
+ bindAsyncValidations(validations) {
47
+ if (validations.length > 0) {
48
+ const validList = [];
49
+ validations.forEach(valid => {
50
+ validList.push(valid.validator);
51
+ });
52
+ return Validators.composeAsync(validList);
53
+ }
54
+ return null;
55
+ }
56
+ ngOnDestroy() {
57
+ super.ngOnDestroy();
58
+ }
59
+ }
60
+ KlesFormListFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: KlesFormListFieldComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
61
+ KlesFormListFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: KlesFormListFieldComponent, selector: "kles-form-listfield", usesInheritance: true, ngImport: i0, template: `
62
+ <div [formGroup]="group" class="form-element">
63
+ {{field.label | translate}}
64
+ <button mat-icon-button color="primary" (click)="addField()">
65
+ <mat-icon>add</mat-icon>
66
+ </button>
67
+
68
+ <div class="dynamic-form" [formGroupName]="field.name">
69
+ <div *ngFor="let subGroup of formArray.controls let index = index;" fxLayout="row" fxLayoutGap="5px">
70
+ <ng-container *ngFor="let subfield of field.collections;"
71
+ dynamicField [field]="subfield" [group]="subGroup">
72
+ </ng-container>
73
+ <button mat-icon-button (click)="deleteField(index)" color="primary">
74
+ <mat-icon>delete_outlined</mat-icon>
75
+ </button>
76
+ </div>
77
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
78
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
79
+ </ng-container>
80
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
81
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
82
+ </ng-container>
83
+ </div>
84
+ </div>
85
+ `, 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" }] });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: KlesFormListFieldComponent, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'kles-form-listfield', template: `
89
+ <div [formGroup]="group" class="form-element">
90
+ {{field.label | translate}}
91
+ <button mat-icon-button color="primary" (click)="addField()">
92
+ <mat-icon>add</mat-icon>
93
+ </button>
94
+
95
+ <div class="dynamic-form" [formGroupName]="field.name">
96
+ <div *ngFor="let subGroup of formArray.controls let index = index;" fxLayout="row" fxLayoutGap="5px">
97
+ <ng-container *ngFor="let subfield of field.collections;"
98
+ dynamicField [field]="subfield" [group]="subGroup">
99
+ </ng-container>
100
+ <button mat-icon-button (click)="deleteField(index)" color="primary">
101
+ <mat-icon>delete_outlined</mat-icon>
102
+ </button>
103
+ </div>
104
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
105
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
106
+ </ng-container>
107
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
108
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
109
+ </ng-container>
110
+ </div>
111
+ </div>
112
+ ` }]
113
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i0.ViewContainerRef }]; } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy9zcmMvbGliL2ZpZWxkcy9saXN0LWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQXVFLFVBQVUsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBZ0NuSSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsaUJBQWlCO0lBSTdELFlBQW9CLEVBQXNCLEVBQVksT0FBeUI7UUFDM0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREMsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFrQjtJQUUvRSxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQXFCLENBQUM7UUFDMUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FDM0IsSUFBSSxFQUNKLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsRUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FDekQsQ0FBQztZQUNGLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV6QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBRWpCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFHTyxlQUFlLENBQUMsV0FBMEM7UUFDOUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDckIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FFeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR08sb0JBQW9CLENBQUMsV0FBK0M7UUFDeEUsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDckIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7U0FFN0M7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOzt1SEFqRVEsMEJBQTBCOzJHQUExQiwwQkFBMEIsa0ZBM0J6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBd0JUOzJGQUdRLDBCQUEwQjtrQkE3QnRDLFNBQVM7K0JBQ0kscUJBQXFCLFlBQ3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F3QlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLbGVzRmllbGRBYnN0cmFjdCB9IGZyb20gJy4vZmllbGQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgQXN5bmNWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElLbGVzVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrbGVzLWZvcm0tbGlzdGZpZWxkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJncm91cFwiIGNsYXNzPVwiZm9ybS1lbGVtZW50XCI+XG4gICAgICAgIHt7ZmllbGQubGFiZWwgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYWRkRmllbGQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWZvcm1cIiBbZm9ybUdyb3VwTmFtZV09XCJmaWVsZC5uYW1lXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJHcm91cCBvZiBmb3JtQXJyYXkuY29udHJvbHMgbGV0IGluZGV4ID0gaW5kZXg7XCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjVweFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YmZpZWxkIG9mIGZpZWxkLmNvbGxlY3Rpb25zO1wiXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWNGaWVsZCBbZmllbGRdPVwic3ViZmllbGRcIiBbZ3JvdXBdPVwic3ViR3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlRmllbGQoaW5kZXgpXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zO1wiIG5nUHJvamVjdEFzPVwibWF0LWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdyb3VwLmdldChmaWVsZC5uYW1lKS5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpXCI+e3t2YWxpZGF0aW9uLm1lc3NhZ2UgfCB0cmFuc2xhdGV9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWxpZGF0aW9uIG9mIGZpZWxkLmFzeW5jVmFsaWRhdGlvbnM7XCIgbmdQcm9qZWN0QXM9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ3JvdXAuZ2V0KGZpZWxkLm5hbWUpLmhhc0Vycm9yKHZhbGlkYXRpb24ubmFtZSlcIj57e3ZhbGlkYXRpb24ubWVzc2FnZSB8IHRyYW5zbGF0ZX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYCxcbiAgICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEtsZXNGb3JtTGlzdEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgS2xlc0ZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBmb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsIHByb3RlY3RlZCB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKHZpZXdSZWYpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1BcnJheSA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgICB0aGlzLmZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsaWRhdGlvbnMoaXRlbS52YWxpZGF0aW9ucyB8fCBbXSksXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhpdGVtLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZ3JvdXAuYWRkQ29udHJvbChpdGVtLm5hbWUsIGNvbnRyb2wpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBncm91cDtcblxuICAgIH1cblxuICAgIGRlbGV0ZUZpZWxkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIGFkZEZpZWxkKCkge1xuICAgICAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuY3JlYXRlRm9ybUdyb3VwKCkpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBiaW5kVmFsaWRhdGlvbnModmFsaWRhdGlvbnM6IElLbGVzVmFsaWRhdG9yPFZhbGlkYXRvckZuPltdKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRMaXN0ID0gW107XG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKHZhbGlkID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkTGlzdCk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgYmluZEFzeW5jVmFsaWRhdGlvbnModmFsaWRhdGlvbnM6IElLbGVzVmFsaWRhdG9yPEFzeW5jVmFsaWRhdG9yRm4+W10pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkTGlzdCA9IFtdO1xuICAgICAgICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCh2YWxpZCA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRMaXN0LnB1c2godmFsaWQudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZUFzeW5jKHZhbGlkTGlzdCk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG5cbiJdfQ==
@@ -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.4", ngImport: i0, type: KlesFormRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18
+ KlesFormRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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.4", 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,211 @@
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(viewRef) {
23
+ super(viewRef);
24
+ this.viewRef = viewRef;
25
+ this.compareFn = (o1, o2) => {
26
+ if (this.field.property && o1 && o2) {
27
+ return o1[this.field.property] === o2[this.field.property];
28
+ }
29
+ return o1 === o2;
30
+ };
31
+ }
32
+ ngOnInit() {
33
+ super.ngOnInit();
34
+ if (!(this.field.options instanceof Observable)) {
35
+ this.options$ = of(this.field.options);
36
+ }
37
+ else {
38
+ this.options$ = this.field.options;
39
+ }
40
+ }
41
+ ngOnDestroy() {
42
+ super.ngOnDestroy();
43
+ }
44
+ openChange($event) {
45
+ if (this.field.virtualScroll) {
46
+ if ($event) {
47
+ this.cdkVirtualScrollViewport.scrollToIndex(0);
48
+ this.cdkVirtualScrollViewport.checkViewportSize();
49
+ }
50
+ }
51
+ }
52
+ };
53
+ KlesFormSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: KlesFormSelectComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
54
+ KlesFormSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: `
55
+ <mat-form-field class="margin-top" [color]="field.color" [formGroup]="group">
56
+ <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id"
57
+ (openedChange)="openChange($event)" [compareWith]="compareFn"
58
+ [ngClass]="field.ngClass" [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
59
+ <mat-select-trigger *ngIf="field.triggerComponent">
60
+ <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
61
+ </mat-select-trigger>
62
+
63
+
64
+ <ng-container *ngIf="!field.virtualScroll">
65
+ <ng-container *ngIf="!field.autocompleteComponent">
66
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>
67
+ </ng-container>
68
+
69
+ <ng-container *ngIf="field.autocompleteComponent">
70
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
71
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
72
+ </mat-option>
73
+ </ng-container>
74
+ </ng-container>
75
+
76
+ <ng-container *ngIf="field.virtualScroll">
77
+ <cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 50" [style.height.px]=5*48>
78
+ <ng-container *ngIf="!field.autocompleteComponent">
79
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
80
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
81
+ </mat-option>
82
+
83
+ <ng-container *ngIf="field.multiple">
84
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
85
+ style="display:none">
86
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
87
+ </mat-option>
88
+ </ng-container>
89
+
90
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
91
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
92
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
93
+ </mat-option>
94
+ </ng-container>
95
+ </ng-container>
96
+
97
+ <ng-container *ngIf="field.autocompleteComponent">
98
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
99
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
100
+ </mat-option>
101
+ <ng-container *ngIf="field.multiple">
102
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
103
+ style="display:none">
104
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
105
+ </mat-option>
106
+ </ng-container>
107
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
108
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
109
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
110
+ </mat-option>
111
+ </ng-container>
112
+ </ng-container>
113
+ </cdk-virtual-scroll-viewport>
114
+
115
+ </ng-container>
116
+
117
+ </mat-select>
118
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
119
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
120
+ </ng-container>
121
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
122
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
123
+ </ng-container>
124
+ </mat-form-field>
125
+ `, 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" }] });
126
+ KlesFormSelectComponent = __decorate([
127
+ FieldMapper({ type: EnumType.select })
128
+ ], KlesFormSelectComponent);
129
+ export { KlesFormSelectComponent };
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: KlesFormSelectComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ selector: 'kles-form-select', template: `
133
+ <mat-form-field class="margin-top" [color]="field.color" [formGroup]="group">
134
+ <mat-select matTooltip="{{field.tooltip}}" [attr.id]="field.id"
135
+ (openedChange)="openChange($event)" [compareWith]="compareFn"
136
+ [ngClass]="field.ngClass" [placeholder]="field.placeholder | translate" [formControlName]="field.name" [multiple]="field.multiple">
137
+ <mat-select-trigger *ngIf="field.triggerComponent">
138
+ <ng-container klesComponent [component]="field.triggerComponent" [value]="group.controls[field.name].value" [field]="field"></ng-container>
139
+ </mat-select-trigger>
140
+
141
+
142
+ <ng-container *ngIf="!field.virtualScroll">
143
+ <ng-container *ngIf="!field.autocompleteComponent">
144
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>
145
+ </ng-container>
146
+
147
+ <ng-container *ngIf="field.autocompleteComponent">
148
+ <mat-option *ngFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
149
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
150
+ </mat-option>
151
+ </ng-container>
152
+ </ng-container>
153
+
154
+ <ng-container *ngIf="field.virtualScroll">
155
+ <cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 50" [style.height.px]=5*48>
156
+ <ng-container *ngIf="!field.autocompleteComponent">
157
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
158
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
159
+ </mat-option>
160
+
161
+ <ng-container *ngIf="field.multiple">
162
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
163
+ style="display:none">
164
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
165
+ </mat-option>
166
+ </ng-container>
167
+
168
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
169
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
170
+ {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
171
+ </mat-option>
172
+ </ng-container>
173
+ </ng-container>
174
+
175
+ <ng-container *ngIf="field.autocompleteComponent">
176
+ <mat-option *cdkVirtualFor="let item of options$ | async" [value]="item" [disabled]="item?.disabled">
177
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
178
+ </mat-option>
179
+ <ng-container *ngIf="field.multiple">
180
+ <mat-option *ngFor="let item of group.controls[field.name].value | slice:0:30" [value]="item"
181
+ style="display:none">
182
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
183
+ </mat-option>
184
+ </ng-container>
185
+ <ng-container *ngIf="!field.multiple && group.controls[field.name].value">
186
+ <mat-option *ngFor="let item of [group?.controls[field.name]?.value]" [value]="item" style="display:none">
187
+ <ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
188
+ </mat-option>
189
+ </ng-container>
190
+ </ng-container>
191
+ </cdk-virtual-scroll-viewport>
192
+
193
+ </ng-container>
194
+
195
+ </mat-select>
196
+ <ng-container *ngFor="let validation of field.validations;" ngProjectAs="mat-error">
197
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
198
+ </ng-container>
199
+ <ng-container *ngFor="let validation of field.asyncValidations;" ngProjectAs="mat-error">
200
+ <mat-error *ngIf="group.get(field.name).hasError(validation.name)">{{validation.message | translate}}</mat-error>
201
+ </ng-container>
202
+ </mat-form-field>
203
+ `, styles: ["mat-form-field{width:100%}\n"] }]
204
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { cdkVirtualScrollViewport: [{
205
+ type: ViewChild,
206
+ args: [CdkVirtualScrollViewport]
207
+ }], options: [{
208
+ type: ViewChildren,
209
+ args: [MatOption]
210
+ }] } });
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsZXMtbWF0ZXJpYWwtZHluYW1pY2Zvcm1zL3NyYy9saWIvZmllbGRzL3NlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBQW9DLFNBQVMsRUFBZ0MsU0FBUyxFQUFFLFlBQVksRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUErRXhDLHVCQUF1QixTQUF2Qix1QkFBd0IsU0FBUSxpQkFBaUI7SUFPMUQsWUFBc0IsT0FBeUI7UUFDM0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREcsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUEyQi9DLGNBQVMsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFBO0lBOUJELENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxZQUFZLFVBQVUsQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWU7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUMxQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNyRDtTQUNKO0lBQ0wsQ0FBQztDQVFKLENBQUE7b0hBeENZLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLGtIQUVyQix3QkFBd0IsNkRBQ3JCLFNBQVMsdUVBN0ViOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVFYjtBQUdZLHVCQUF1QjtJQTdFbkMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztHQTZFMUIsdUJBQXVCLENBd0NuQztTQXhDWSx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkE1RW5DLFNBQVM7K0JBQ0ksa0JBQWtCLFlBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXVFYjt1R0FLd0Msd0JBQXdCO3NCQUE1RCxTQUFTO3VCQUFDLHdCQUF3QjtnQkFDVixPQUFPO3NCQUEvQixZQUFZO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaWVsZE1hcHBlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvY29tcG9uZW50LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4uL2VudW1zL3R5cGUuZW51bSc7XG5pbXBvcnQgeyBLbGVzRmllbGRBYnN0cmFjdCB9IGZyb20gJy4vZmllbGQuYWJzdHJhY3QnO1xuXG5ARmllbGRNYXBwZXIoeyB0eXBlOiBFbnVtVHlwZS5zZWxlY3QgfSlcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2xlcy1mb3JtLXNlbGVjdCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXJnaW4tdG9wXCIgW2NvbG9yXT1cImZpZWxkLmNvbG9yXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCBtYXRUb29sdGlwPVwie3tmaWVsZC50b29sdGlwfX1cIiBbYXR0ci5pZF09XCJmaWVsZC5pZFwiXG4gICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib3BlbkNoYW5nZSgkZXZlbnQpXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVGblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImZpZWxkLm5nQ2xhc3NcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbbXVsdGlwbGVdPVwiZmllbGQubXVsdGlwbGVcIj5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLnRyaWdnZXJDb21wb25lbnRcIiBbdmFsdWVdPVwiZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpZWxkLnZpcnR1YWxTY3JvbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0/LmRpc2FibGVkXCI+e3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQudmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiZmllbGQuaXRlbVNpemUgfHwgNTBcIiBbc3R5bGUuaGVpZ2h0LnB4XT01KjQ4PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtXCIgIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyhmaWVsZC5wcm9wZXJ0eSA/IGl0ZW1bZmllbGQucHJvcGVydHldIDogaXRlbSkgfCBrbGVzVHJhbnNmb3JtOmZpZWxkLnBpcGVUcmFuc2Zvcm19fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5jb250cm9sc1tmaWVsZC5uYW1lXS52YWx1ZSB8IHNsaWNlOjA6MzBcIiBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQubXVsdGlwbGUgJiYgZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgW2dyb3VwPy5jb250cm9sc1tmaWVsZC5uYW1lXT8udmFsdWVdXCIgW3ZhbHVlXT1cIml0ZW1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGZpZWxkLnByb3BlcnR5ID8gaXRlbVtmaWVsZC5wcm9wZXJ0eV0gOiBpdGVtKSB8IGtsZXNUcmFuc2Zvcm06ZmllbGQucGlwZVRyYW5zZm9ybX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzQ29tcG9uZW50IFtjb21wb25lbnRdPVwiZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCIgW3ZhbHVlXT1cIml0ZW1cIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQubXVsdGlwbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLmNvbnRyb2xzW2ZpZWxkLm5hbWVdLnZhbHVlIHwgc2xpY2U6MDozMFwiIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzQ29tcG9uZW50IFtjb21wb25lbnRdPVwiZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCIgW3ZhbHVlXT1cIml0ZW1cIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmllbGQubXVsdGlwbGUgJiYgZ3JvdXAuY29udHJvbHNbZmllbGQubmFtZV0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtncm91cD8uY29udHJvbHNbZmllbGQubmFtZV0/LnZhbHVlXVwiIFt2YWx1ZV09XCJpdGVtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtsZXNDb21wb25lbnQgW2NvbXBvbmVudF09XCJmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnRcIiBbdmFsdWVdPVwiaXRlbVwiIFtmaWVsZF09XCJmaWVsZFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucztcIiBuZ1Byb2plY3RBcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJncm91cC5nZXQoZmllbGQubmFtZSkuaGFzRXJyb3IodmFsaWRhdGlvbi5uYW1lKVwiPnt7dmFsaWRhdGlvbi5tZXNzYWdlIHwgdHJhbnNsYXRlfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBmaWVsZC5hc3luY1ZhbGlkYXRpb25zO1wiIG5nUHJvamVjdEFzPVwibWF0LWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdyb3VwLmdldChmaWVsZC5uYW1lKS5oYXNFcnJvcih2YWxpZGF0aW9uLm5hbWUpXCI+e3t2YWxpZGF0aW9uLm1lc3NhZ2UgfCB0cmFuc2xhdGV9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbmAsXG4gICAgc3R5bGVzOiBbJ21hdC1mb3JtLWZpZWxkIHt3aWR0aDogY2FsYygxMDAlKX0nXVxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEtsZXNGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBWaWV3Q2hpbGRyZW4oTWF0T3B0aW9uKSBvcHRpb25zOiBRdWVyeUxpc3Q8TWF0T3B0aW9uPjtcblxuICAgIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKHZpZXdSZWYpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICghKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gb2YodGhpcy5maWVsZC5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLmZpZWxkLm9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBvcGVuQ2hhbmdlKCRldmVudDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5maWVsZC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFyZUZuID0gKG8xOiBhbnksIG8yOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQucHJvcGVydHkgJiYgbzEgJiYgbzIpIHtcbiAgICAgICAgICAgIHJldHVybiBvMVt0aGlzLmZpZWxkLnByb3BlcnR5XSA9PT0gbzJbdGhpcy5maWVsZC5wcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG8xID09PSBvMjtcbiAgICB9XG59XG4iXX0=