design-angular-kit 1.0.0-1 → 1.0.0-3

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 (218) hide show
  1. package/README.md +152 -18
  2. package/assets/i18n/it.json +81 -0
  3. package/esm2020/lib/abstracts/abstract-form-component.mjs +165 -0
  4. package/esm2020/lib/abstracts/abstract.component.mjs +20 -0
  5. package/esm2020/lib/components/core/accordion/accordion.component.mjs +20 -0
  6. package/esm2020/lib/components/core/alert/alert.component.mjs +29 -0
  7. package/esm2020/lib/components/core/badge/badge.directive.mjs +34 -0
  8. package/esm2020/lib/components/core/button/button.directive.mjs +78 -0
  9. package/esm2020/lib/components/core/callout/callout.component.mjs +84 -0
  10. package/esm2020/lib/components/core/card/card.component.mjs +58 -0
  11. package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +66 -0
  12. package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +14 -0
  13. package/esm2020/lib/components/core/chip/chip.component.mjs +89 -0
  14. package/esm2020/lib/components/core/collapse/collapse.component.mjs +96 -0
  15. package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
  16. package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  17. package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +59 -0
  18. package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +60 -0
  19. package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +71 -0
  20. package/esm2020/lib/components/core/forward/forward.directive.mjs +51 -0
  21. package/esm2020/lib/components/core/link/link.component.mjs +39 -0
  22. package/esm2020/lib/components/core/list/list/list.component.mjs +13 -0
  23. package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +36 -0
  24. package/esm2020/lib/components/core/modal/modal.component.mjs +98 -0
  25. package/esm2020/lib/components/core/notifications/notifications.component.mjs +66 -0
  26. package/esm2020/lib/components/core/pagination/pagination.component.mjs +51 -0
  27. package/esm2020/lib/components/core/popover/popover.directive.mjs +176 -0
  28. package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  29. package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +27 -0
  30. package/esm2020/lib/components/core/spinner/spinner.component.mjs +35 -0
  31. package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +33 -0
  32. package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +36 -0
  33. package/esm2020/lib/components/core/table/table.component.mjs +57 -0
  34. package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +140 -0
  35. package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +40 -0
  36. package/esm2020/lib/components/form/input/input.component.mjs +226 -0
  37. package/esm2020/lib/components/form/password-input/password-input.component.mjs +112 -0
  38. package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +53 -0
  39. package/esm2020/lib/components/form/select/select.component.mjs +62 -0
  40. package/esm2020/lib/components/form/textarea/textarea.component.mjs +46 -0
  41. package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +134 -0
  42. package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +99 -0
  43. package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +69 -0
  44. package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +39 -0
  45. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +45 -0
  46. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +23 -0
  47. package/esm2020/lib/components/navigation/header/header.component.mjs +61 -0
  48. package/esm2020/lib/components/utils/icon/icon.component.mjs +54 -0
  49. package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +13 -0
  50. package/esm2020/lib/design-angular-kit.module.mjs +32 -132
  51. package/esm2020/lib/interfaces/core.mjs +16 -0
  52. package/esm2020/lib/interfaces/form.mjs +2 -0
  53. package/esm2020/lib/interfaces/icon.mjs +2 -0
  54. package/esm2020/lib/modules/components.module.mjs +245 -0
  55. package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +36 -0
  56. package/esm2020/lib/services/notifications/notifications.service.mjs +122 -0
  57. package/esm2020/lib/utils/boolean-input.mjs +15 -0
  58. package/esm2020/lib/utils/file-utils.mjs +65 -0
  59. package/esm2020/lib/utils/regex.mjs +26 -0
  60. package/esm2020/lib/validators/it-validators.mjs +131 -0
  61. package/esm2020/public_api.mjs +62 -36
  62. package/fesm2015/design-angular-kit.mjs +2856 -2640
  63. package/fesm2015/design-angular-kit.mjs.map +1 -1
  64. package/fesm2020/design-angular-kit.mjs +2837 -2640
  65. package/fesm2020/design-angular-kit.mjs.map +1 -1
  66. package/lib/abstracts/abstract-form-component.d.ts +84 -0
  67. package/lib/abstracts/abstract.component.d.ts +14 -0
  68. package/lib/components/core/accordion/accordion.component.d.ts +16 -0
  69. package/lib/components/core/alert/alert.component.d.ts +17 -0
  70. package/lib/components/core/badge/badge.directive.d.ts +16 -0
  71. package/lib/components/core/button/button.directive.d.ts +38 -0
  72. package/lib/components/core/callout/callout.component.d.ts +47 -0
  73. package/lib/components/core/card/card.component.d.ts +41 -0
  74. package/lib/components/core/carousel/carousel/carousel.component.d.ts +46 -0
  75. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +10 -0
  76. package/lib/components/core/chip/chip.component.d.ts +62 -0
  77. package/lib/components/core/collapse/collapse.component.d.ts +59 -0
  78. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  79. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  80. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  81. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +43 -0
  82. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +44 -0
  83. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  84. package/lib/components/core/link/link.component.d.ts +34 -0
  85. package/lib/components/core/list/list/list.component.d.ts +10 -0
  86. package/lib/components/core/list/list-item/list-item.component.d.ts +24 -0
  87. package/lib/components/core/modal/modal.component.d.ts +59 -0
  88. package/lib/components/core/notifications/notifications.component.d.ts +30 -0
  89. package/lib/components/core/pagination/pagination.component.d.ts +31 -0
  90. package/lib/components/core/popover/popover.directive.d.ts +97 -0
  91. package/lib/components/core/progress-bar/progress-bar.component.d.ts +28 -0
  92. package/lib/components/core/progress-button/progress-button.component.d.ts +22 -0
  93. package/lib/components/core/spinner/spinner.component.d.ts +21 -0
  94. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +28 -0
  95. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +34 -0
  96. package/lib/components/core/table/table.component.d.ts +54 -0
  97. package/lib/components/core/tooltip/tooltip.directive.d.ts +80 -0
  98. package/lib/components/form/checkbox/checkbox.component.d.ts +30 -0
  99. package/lib/components/form/input/input.component.d.ts +94 -0
  100. package/lib/components/form/password-input/password-input.component.d.ts +54 -0
  101. package/lib/components/form/radio-button/radio-button.component.d.ts +29 -0
  102. package/lib/components/form/select/select.component.d.ts +30 -0
  103. package/lib/components/form/textarea/textarea.component.d.ts +24 -0
  104. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +53 -0
  105. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +57 -0
  106. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  107. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +27 -0
  108. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +30 -0
  109. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +22 -0
  110. package/lib/components/navigation/header/header.component.d.ts +28 -0
  111. package/lib/components/utils/icon/icon.component.d.ts +40 -0
  112. package/lib/components/utils/not-found-page/not-found-page.component.d.ts +5 -0
  113. package/lib/design-angular-kit.module.d.ts +4 -24
  114. package/lib/interfaces/core.d.ts +36 -0
  115. package/lib/interfaces/form.d.ts +61 -0
  116. package/lib/interfaces/icon.d.ts +3 -0
  117. package/lib/modules/components.module.d.ts +58 -0
  118. package/lib/{form-input → pipes}/mark-matching-text.pipe.d.ts +0 -0
  119. package/lib/services/notifications/notifications.service.d.ts +63 -0
  120. package/lib/utils/boolean-input.d.ts +11 -0
  121. package/lib/utils/file-utils.d.ts +27 -0
  122. package/lib/utils/regex.d.ts +25 -0
  123. package/lib/validators/it-validators.d.ts +58 -0
  124. package/package.json +20 -13
  125. package/public_api.d.ts +54 -35
  126. package/esm2020/lib/badge/badge.directive.mjs +0 -83
  127. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +0 -66
  128. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -89
  129. package/esm2020/lib/button/button.directive.mjs +0 -185
  130. package/esm2020/lib/button/button.module.mjs +0 -18
  131. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -138
  132. package/esm2020/lib/collapse/collapse-group.component.mjs +0 -57
  133. package/esm2020/lib/collapse/collapse-item.component.mjs +0 -79
  134. package/esm2020/lib/collapse/collapse.config.mjs +0 -12
  135. package/esm2020/lib/collapse/collapse.directive.mjs +0 -55
  136. package/esm2020/lib/collapse/collapse.module.mjs +0 -22
  137. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +0 -11
  138. package/esm2020/lib/dropdown/dropdown-item.component.mjs +0 -97
  139. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -143
  140. package/esm2020/lib/dropdown/dropdown.config.mjs +0 -12
  141. package/esm2020/lib/dropdown/dropdown.directive.mjs +0 -156
  142. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -25
  143. package/esm2020/lib/enums/icons.enum.mjs +0 -27
  144. package/esm2020/lib/form-input/form-input-password.utils.mjs +0 -154
  145. package/esm2020/lib/form-input/form-input.component.mjs +0 -495
  146. package/esm2020/lib/form-input/it-prefix.directive.mjs +0 -13
  147. package/esm2020/lib/form-input/it-suffix.directive.mjs +0 -13
  148. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +0 -13
  149. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +0 -13
  150. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +0 -36
  151. package/esm2020/lib/icon/icon.component.mjs +0 -87
  152. package/esm2020/lib/icon/icon.module.mjs +0 -18
  153. package/esm2020/lib/models/Alignment.mjs +0 -15
  154. package/esm2020/lib/models/ButtonSize.mjs +0 -15
  155. package/esm2020/lib/models/InputType.mjs +0 -44
  156. package/esm2020/lib/models/ThemeColor.mjs +0 -30
  157. package/esm2020/lib/popover/popover.config.mjs +0 -17
  158. package/esm2020/lib/popover/popover.directive.mjs +0 -33
  159. package/esm2020/lib/popover/popover.module.mjs +0 -19
  160. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -98
  161. package/esm2020/lib/radio/radio.component.mjs +0 -287
  162. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +0 -55
  163. package/esm2020/lib/tabs/tab-group.component.mjs +0 -177
  164. package/esm2020/lib/tabs/tab.component.mjs +0 -73
  165. package/esm2020/lib/tabs/tabs.module.mjs +0 -20
  166. package/esm2020/lib/toggle/toggle.component.mjs +0 -86
  167. package/esm2020/lib/tooltip/tooltip.config.mjs +0 -17
  168. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -43
  169. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  170. package/esm2020/lib/util/focus-mouse.directive.mjs +0 -32
  171. package/esm2020/lib/util/util.mjs +0 -12
  172. package/esm2020/lib/util/utils.module.mjs +0 -16
  173. package/lib/badge/badge.directive.d.ts +0 -33
  174. package/lib/breadcrumb/breadcrumb-item.component.d.ts +0 -33
  175. package/lib/breadcrumb/breadcrumb.component.d.ts +0 -33
  176. package/lib/button/button.directive.d.ts +0 -72
  177. package/lib/button/button.module.d.ts +0 -8
  178. package/lib/checkbox/checkbox.component.d.ts +0 -61
  179. package/lib/collapse/collapse-group.component.d.ts +0 -16
  180. package/lib/collapse/collapse-item.component.d.ts +0 -46
  181. package/lib/collapse/collapse.config.d.ts +0 -6
  182. package/lib/collapse/collapse.directive.d.ts +0 -25
  183. package/lib/collapse/collapse.module.d.ts +0 -12
  184. package/lib/dropdown/dropdown-divider.component.d.ts +0 -5
  185. package/lib/dropdown/dropdown-item.component.d.ts +0 -56
  186. package/lib/dropdown/dropdown.component.d.ts +0 -65
  187. package/lib/dropdown/dropdown.config.d.ts +0 -6
  188. package/lib/dropdown/dropdown.directive.d.ts +0 -77
  189. package/lib/dropdown/dropdown.module.d.ts +0 -15
  190. package/lib/enums/icons.enum.d.ts +0 -23
  191. package/lib/form-input/form-input-password.utils.d.ts +0 -45
  192. package/lib/form-input/form-input.component.d.ts +0 -283
  193. package/lib/form-input/it-prefix.directive.d.ts +0 -5
  194. package/lib/form-input/it-suffix.directive.d.ts +0 -5
  195. package/lib/form-input/it-text-prefix.directive.d.ts +0 -5
  196. package/lib/form-input/it-text-suffix.directive.d.ts +0 -5
  197. package/lib/icon/icon.component.d.ts +0 -34
  198. package/lib/icon/icon.module.d.ts +0 -8
  199. package/lib/models/Alignment.d.ts +0 -12
  200. package/lib/models/ButtonSize.d.ts +0 -11
  201. package/lib/models/InputType.d.ts +0 -36
  202. package/lib/models/ThemeColor.d.ts +0 -21
  203. package/lib/popover/popover.config.d.ts +0 -11
  204. package/lib/popover/popover.directive.d.ts +0 -20
  205. package/lib/popover/popover.module.d.ts +0 -9
  206. package/lib/progress-bar/progress-bar.component.d.ts +0 -55
  207. package/lib/radio/radio.component.d.ts +0 -116
  208. package/lib/radio/unique-selection-dispatcher.d.ts +0 -36
  209. package/lib/tabs/tab-group.component.d.ts +0 -71
  210. package/lib/tabs/tab.component.d.ts +0 -44
  211. package/lib/tabs/tabs.module.d.ts +0 -10
  212. package/lib/toggle/toggle.component.d.ts +0 -46
  213. package/lib/tooltip/tooltip.config.d.ts +0 -11
  214. package/lib/tooltip/tooltip.directive.d.ts +0 -27
  215. package/lib/tooltip/tooltip.module.d.ts +0 -9
  216. package/lib/util/focus-mouse.directive.d.ts +0 -13
  217. package/lib/util/util.d.ts +0 -5
  218. package/lib/util/utils.module.d.ts +0 -7
@@ -0,0 +1,112 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
+ import { ItValidators } from '../../../validators/it-validators';
4
+ import { isTrueBooleanInput } from '../../../utils/boolean-input';
5
+ import { InputPassword } from 'bootstrap-italia';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "../../utils/icon/icon.component";
10
+ export class PasswordInputComponent extends AbstractFormComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ /**
14
+ * The password minimum length
15
+ * @default 10
16
+ */
17
+ this.minLength = 10;
18
+ /**
19
+ * The password must contain at least one number
20
+ * @default true
21
+ */
22
+ this.useNumber = true;
23
+ /**
24
+ * The password must contain at least one uppercase character
25
+ * @default true
26
+ */
27
+ this.useCapitalCase = true;
28
+ /**
29
+ * The password must contain at least one lowercase character
30
+ * @default true
31
+ */
32
+ this.useSmallCase = true;
33
+ /**
34
+ * The password must contain at least one special character
35
+ * @default true
36
+ */
37
+ this.useSpecialCharacters = true;
38
+ /**
39
+ * The input placeholder
40
+ */
41
+ this.placeholder = '';
42
+ }
43
+ ngOnInit() {
44
+ super.ngOnInit();
45
+ this.addValidators(ItValidators.password(this.minLength, this.useNumber, this.useCapitalCase, this.useSmallCase, this.useSpecialCharacters));
46
+ }
47
+ ngAfterViewInit() {
48
+ super.ngAfterViewInit();
49
+ if (this.inputElement) {
50
+ this.inputPasswordBs = new InputPassword(this.inputElement.nativeElement, {
51
+ ...this.description && { enterPass: this.description },
52
+ showText: this.isStrengthMeter,
53
+ minimumLength: this.minLength
54
+ });
55
+ }
56
+ }
57
+ get isStrengthMeter() {
58
+ return isTrueBooleanInput(this.showStrengthMeter);
59
+ }
60
+ /**
61
+ * Return the invalid message string from TranslateService
62
+ */
63
+ get invalidMessage() {
64
+ if (this.hasError('noPasswordMatch')) {
65
+ return this._translateService.get('it.errors.password-no-match');
66
+ }
67
+ if (this.hasError('minlength')) {
68
+ return this._translateService.get('it.errors.password-min-length', {
69
+ minLength: this.minLength
70
+ });
71
+ }
72
+ if (this.hasError('hasNumber')) {
73
+ return this._translateService.get('it.errors.password-number');
74
+ }
75
+ if (this.hasError('hasCapitalCase')) {
76
+ return this._translateService.get('it.errors.password-capital-case');
77
+ }
78
+ if (this.hasError('hasSmallCase')) {
79
+ return this._translateService.get('it.errors.password-capital-case');
80
+ }
81
+ if (this.hasError('hasSpecialCharacters')) {
82
+ return this._translateService.get('it.errors.password-special-character');
83
+ }
84
+ return super.invalidMessage;
85
+ }
86
+ }
87
+ PasswordInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PasswordInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
88
+ PasswordInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PasswordInputComponent, selector: "it-password-input[id]", inputs: { minLength: "minLength", useNumber: "useNumber", useCapitalCase: "useCapitalCase", useSmallCase: "useSmallCase", useSpecialCharacters: "useSpecialCharacters", placeholder: "placeholder", description: "description", showStrengthMeter: "showStrengthMeter" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{label}}</label>\n\n <input type=\"password\"\n [id]=\"id\"\n class=\"form-control input-password\"\n [class.input-password-strength-meter]=\"isStrengthMeter\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [attr.aria-describedby]=\"id + '-description'\" #input>\n\n <span class=\"password-icon\" aria-hidden=\"true\">\n <it-icon name=\"password-visible\" size=\"sm\" class=\"password-icon-visible\"></it-icon>\n <it-icon name=\"password-invisible\" size=\"sm\" class=\"password-icon-invisible d-none\"></it-icon>\n </span>\n\n <small *ngIf=\"description && !isStrengthMeter\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "class"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PasswordInputComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'it-password-input[id]', template: "<div class=\"form-group\">\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{label}}</label>\n\n <input type=\"password\"\n [id]=\"id\"\n class=\"form-control input-password\"\n [class.input-password-strength-meter]=\"isStrengthMeter\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [attr.aria-describedby]=\"id + '-description'\" #input>\n\n <span class=\"password-icon\" aria-hidden=\"true\">\n <it-icon name=\"password-visible\" size=\"sm\" class=\"password-icon-visible\"></it-icon>\n <it-icon name=\"password-invisible\" size=\"sm\" class=\"password-icon-invisible d-none\"></it-icon>\n </span>\n\n <small *ngIf=\"description && !isStrengthMeter\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}\n"] }]
92
+ }], propDecorators: { minLength: [{
93
+ type: Input
94
+ }], useNumber: [{
95
+ type: Input
96
+ }], useCapitalCase: [{
97
+ type: Input
98
+ }], useSmallCase: [{
99
+ type: Input
100
+ }], useSpecialCharacters: [{
101
+ type: Input
102
+ }], placeholder: [{
103
+ type: Input
104
+ }], description: [{
105
+ type: Input
106
+ }], showStrengthMeter: [{
107
+ type: Input
108
+ }], inputElement: [{
109
+ type: ViewChild,
110
+ args: ['input']
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT2pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxxQkFBNkI7SUFMekU7O1FBT0U7OztXQUdHO1FBQ00sY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUVoQzs7O1dBR0c7UUFDTSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRW5DOzs7V0FHRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7V0FHRztRQUNNLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLHlCQUFvQixHQUFZLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNNLGdCQUFXLEdBQVcsRUFBRSxDQUFDO0tBd0VuQztJQXZEVSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDdEMsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLGVBQWU7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUN4RSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUM5QixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDOUIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYSxjQUFjO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRTtnQkFDakUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDOzttSEExR1Usc0JBQXNCO3VHQUF0QixzQkFBc0IscWNDYm5DLHlzQ0EwQkE7MkZEYmEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLHVCQUF1Qjs4QkFVeEIsU0FBUztzQkFBakIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRSxZQUFZO3NCQURuQixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3JzL2l0LXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBpc1RydWVCb29sZWFuSW5wdXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ib29sZWFuLWlucHV0JztcblxuaW1wb3J0IHsgSW5wdXRQYXNzd29yZCB9IGZyb20gJ2Jvb3RzdHJhcC1pdGFsaWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpdC1wYXNzd29yZC1pbnB1dFtpZF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZvcm1Db21wb25lbnQ8c3RyaW5nPiB7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBtaW5pbXVtIGxlbmd0aFxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgQElucHV0KCkgbWluTGVuZ3RoOiBudW1iZXIgPSAxMDtcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbnVtYmVyXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHVzZU51bWJlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHVwcGVyY2FzZSBjaGFyYWN0ZXJcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgdXNlQ2FwaXRhbENhc2U6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHVzZVNtYWxsQ2FzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHVzZVNwZWNpYWxDaGFyYWN0ZXJzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IHBsYWNlaG9sZGVyXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBkZXNjcmlwdGlvblxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0byBzaG93IHRoZSBzdHJlbmd0aCBtZXRlclxuICAgKi9cbiAgQElucHV0KCkgc2hvd1N0cmVuZ3RoTWV0ZXI/OiBCb29sZWFuSW5wdXQ7XG5cbiAgaW5wdXRQYXNzd29yZEJzPzogYW55O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JylcbiAgcHJpdmF0ZSBpbnB1dEVsZW1lbnQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICB0aGlzLmFkZFZhbGlkYXRvcnMoSXRWYWxpZGF0b3JzLnBhc3N3b3JkKFxuICAgICAgdGhpcy5taW5MZW5ndGgsXG4gICAgICB0aGlzLnVzZU51bWJlcixcbiAgICAgIHRoaXMudXNlQ2FwaXRhbENhc2UsXG4gICAgICB0aGlzLnVzZVNtYWxsQ2FzZSxcbiAgICAgIHRoaXMudXNlU3BlY2lhbENoYXJhY3RlcnNcbiAgICApKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dFBhc3N3b3JkQnMgPSBuZXcgSW5wdXRQYXNzd29yZCh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIC4uLnRoaXMuZGVzY3JpcHRpb24gJiYgeyBlbnRlclBhc3M6IHRoaXMuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgc2hvd1RleHQ6IHRoaXMuaXNTdHJlbmd0aE1ldGVyLFxuICAgICAgICBtaW5pbXVtTGVuZ3RoOiB0aGlzLm1pbkxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzU3RyZW5ndGhNZXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuc2hvd1N0cmVuZ3RoTWV0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW52YWxpZCBtZXNzYWdlIHN0cmluZyBmcm9tIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICovXG4gIG92ZXJyaWRlIGdldCBpbnZhbGlkTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdub1Bhc3N3b3JkTWF0Y2gnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtbm8tbWF0Y2gnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXNzd29yZC1taW4tbGVuZ3RoJywge1xuICAgICAgICBtaW5MZW5ndGg6IHRoaXMubWluTGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2hhc051bWJlcicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXNzd29yZC1udW1iZXInKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2hhc0NhcGl0YWxDYXNlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLWNhcGl0YWwtY2FzZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzU21hbGxDYXNlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLWNhcGl0YWwtY2FzZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzU3BlY2lhbENoYXJhY3RlcnMnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtc3BlY2lhbC1jaGFyYWN0ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuaW52YWxpZE1lc3NhZ2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cbiAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzLmFjdGl2ZV09XCIhIWNvbnRyb2wudmFsdWUgfHwgISFwbGFjZWhvbGRlclwiPnt7bGFiZWx9fTwvbGFiZWw+XG5cbiAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtcGFzc3dvcmRcIlxuICAgICAgICAgW2NsYXNzLmlucHV0LXBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyXT1cImlzU3RyZW5ndGhNZXRlclwiXG4gICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiICNpbnB1dD5cblxuICA8c3BhbiBjbGFzcz1cInBhc3N3b3JkLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8aXQtaWNvbiBuYW1lPVwicGFzc3dvcmQtdmlzaWJsZVwiIHNpemU9XCJzbVwiIGNsYXNzPVwicGFzc3dvcmQtaWNvbi12aXNpYmxlXCI+PC9pdC1pY29uPlxuICAgIDxpdC1pY29uIG5hbWU9XCJwYXNzd29yZC1pbnZpc2libGVcIiBzaXplPVwic21cIiBjbGFzcz1cInBhc3N3b3JkLWljb24taW52aXNpYmxlIGQtbm9uZVwiPjwvaXQtaWNvbj5cbiAgPC9zcGFuPlxuXG4gIDxzbWFsbCAqbmdJZj1cImRlc2NyaXB0aW9uICYmICFpc1N0cmVuZ3RoTWV0ZXJcIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwiZm9ybS10ZXh0XCI+e3tkZXNjcmlwdGlvbn19PC9zbWFsbD5cblxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkXCIgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgIDxkaXYgI2N1c3RvbUVycm9yPjxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,53 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
+ import { isFalseBooleanInput, isTrueBooleanInput } from '../../../utils/boolean-input';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class RadioButtonComponent extends AbstractFormComponent {
8
+ constructor() {
9
+ super(...arguments);
10
+ /**
11
+ * If show radio inline
12
+ * @default false
13
+ */
14
+ this.inline = false;
15
+ /**
16
+ * If is radio group
17
+ * @default false
18
+ */
19
+ this.group = false;
20
+ }
21
+ get isInline() {
22
+ return isTrueBooleanInput(this.inline);
23
+ }
24
+ get isGroup() {
25
+ return isTrueBooleanInput(this.group);
26
+ }
27
+ get name() {
28
+ return this._ngControl?.name?.toString() || '';
29
+ }
30
+ ngOnInit() {
31
+ super.ngOnInit();
32
+ if (this.control.value || !this.value || isFalseBooleanInput(this.checked)) {
33
+ return;
34
+ }
35
+ this.writeValue(this.value);
36
+ return this.onChange(this.value);
37
+ }
38
+ }
39
+ RadioButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RadioButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
40
+ RadioButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: RadioButtonComponent, selector: "it-radio-button[id][label][value]", inputs: { value: "value", inline: "inline", group: "group", checked: "checked" }, usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div class=\"form-check\"\n [class.form-check-group]=\"isGroup\"\n [class.form-check-inline]=\"isInline\">\n\n <input\n [id]=\"id\"\n type=\"radio\"\n [value]=\"value\"\n class=\"form-check-input\"\n [name]=\"name\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n\n <label class=\"form-check-label\" [for]=\"id\">{{label}}</label>\n\n <small *ngIf=\"isGroup\" [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n\n <div *ngIf=\"isInvalid && isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n\n </div>\n\n <div *ngIf=\"isInvalid && !isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RadioButtonComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'it-radio-button[id][label][value]', template: "<ng-container>\n <div class=\"form-check\"\n [class.form-check-group]=\"isGroup\"\n [class.form-check-inline]=\"isInline\">\n\n <input\n [id]=\"id\"\n type=\"radio\"\n [value]=\"value\"\n class=\"form-check-input\"\n [name]=\"name\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n\n <label class=\"form-check-label\" [for]=\"id\">{{label}}</label>\n\n <small *ngIf=\"isGroup\" [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n\n <div *ngIf=\"isInvalid && isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n\n </div>\n\n <div *ngIf=\"isInvalid && !isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</ng-container>\n" }]
44
+ }], propDecorators: { value: [{
45
+ type: Input
46
+ }], inline: [{
47
+ type: Input
48
+ }], group: [{
49
+ type: Input
50
+ }], checked: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQU9yRyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXNDO0lBTGhGOztRQVlFOzs7V0FHRztRQUNNLFdBQU0sR0FBaUIsS0FBSyxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLFVBQUssR0FBaUIsS0FBSyxDQUFDO0tBNkJ0QztJQXRCQyxJQUFJLFFBQVE7UUFDVixPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7O2lIQTdDVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixrTENUakMsaXZDQWtDQTsyRkR6QmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG1DQUFtQzs4QkFTcEMsS0FBSztzQkFBYixLQUFLO2dCQU1HLE1BQU07c0JBQWQsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0tY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgaXNGYWxzZUJvb2xlYW5JbnB1dCwgaXNUcnVlQm9vbGVhbklucHV0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYm9vbGVhbi1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXJhZGlvLWJ1dHRvbltpZF1bbGFiZWxdW3ZhbHVlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1idXR0b24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmcgfCBudW1iZXI+IHtcblxuICAvKipcbiAgICogVGhlIHJhZGlvIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZyB8IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgc2hvdyByYWRpbyBpbmxpbmVcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIGlubGluZTogQm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIGlzIHJhZGlvIGdyb3VwXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBncm91cDogQm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIGlzIHJhZGlvIGlzIGNoZWNrZWRcbiAgICovXG4gIEBJbnB1dCgpIGNoZWNrZWQ/OiBCb29sZWFuSW5wdXQ7XG5cbiAgZ2V0IGlzSW5saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5pbmxpbmUpO1xuICB9XG5cbiAgZ2V0IGlzR3JvdXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmdyb3VwKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbD8ubmFtZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlIHx8ICF0aGlzLnZhbHVlIHx8IGlzRmFsc2VCb29sZWFuSW5wdXQodGhpcy5jaGVja2VkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIlxuICAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWdyb3VwXT1cImlzR3JvdXBcIlxuICAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWlubGluZV09XCJpc0lubGluZVwiPlxuXG4gICAgPGlucHV0XG4gICAgICBbaWRdPVwiaWRcIlxuICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctaGVscCdcIj5cblxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImlkXCI+e3tsYWJlbH19PC9sYWJlbD5cblxuICAgIDxzbWFsbCAqbmdJZj1cImlzR3JvdXBcIiBbaWRdPVwiaWQgKyAnLWhlbHAnXCIgY2xhc3M9XCJmb3JtLXRleHRcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NtYWxsPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzSW52YWxpZCAmJiBpc0dyb3VwXCIgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgICAgPGRpdiAjY3VzdG9tRXJyb3I+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Vycm9yXVwiPjwvbmctY29udGVudD48L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tRXJyb3IuaGFzQ2hpbGROb2RlcygpXCI+e3tpbnZhbGlkTWVzc2FnZSB8IGFzeW5jfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkICYmICFpc0dyb3VwXCIgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgIDxkaXYgI2N1c3RvbUVycm9yPjxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,62 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ export class SelectComponent extends AbstractFormComponent {
7
+ ngOnInit() {
8
+ super.ngOnInit();
9
+ if (this.control.value) {
10
+ return;
11
+ }
12
+ const selectedOption = this.options.find(this.optionIsSelected);
13
+ if (selectedOption) {
14
+ this.writeValue(selectedOption.value);
15
+ return this.onChange(selectedOption.value);
16
+ }
17
+ const selectedGroupOption = this.groups?.flatMap(g => g.options).find(this.optionIsSelected);
18
+ if (selectedGroupOption) {
19
+ this.writeValue(selectedGroupOption.value);
20
+ this.onChange(selectedGroupOption.value);
21
+ }
22
+ }
23
+ /**
24
+ * Check if the option is selected
25
+ * @param option the option
26
+ */
27
+ optionIsSelected(option) {
28
+ if (option.selected === true) {
29
+ return true;
30
+ }
31
+ if (typeof option.selected === 'function') {
32
+ return option.selected(this.control.value);
33
+ }
34
+ return false;
35
+ }
36
+ /**
37
+ * Check if the option is disabled
38
+ * @param option the option
39
+ */
40
+ optionIsDisabled(option) {
41
+ if (option.disabled === true) {
42
+ return true;
43
+ }
44
+ if (typeof option.disabled === 'function') {
45
+ return option.disabled(this.control.value);
46
+ }
47
+ return false;
48
+ }
49
+ }
50
+ SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
51
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SelectComponent, selector: "it-select[id][options]", inputs: { options: "options", groups: "groups", description: "description" }, usesInheritance: true, ngImport: i0, template: "<div class=\"select-wrapper\">\n <label [for]=\"id\">{{label}}</label>\n <select [id]=\"id\" [formControl]=\"control\" [attr.aria-describedby]=\"id + '-description'\">\n <option *ngFor=\"let option of options\" [disabled]=\"optionIsDisabled(option)\" [value]=\"option.value\">\n {{option.text ?? option.value}}\n </option>\n\n <ng-container *ngIf=\"groups\">\n <optgroup *ngFor=\"let group of groups\" [label]=\"group.label\">\n <option *ngFor=\"let option of group.options\" [disabled]=\"optionIsDisabled(option)\" [value]=\"option.value\">\n {{option.text ?? option.value}}\n </option>\n </optgroup>\n </ng-container>\n </select>\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n</div>\n", styles: [".select-wrapper{margin-bottom:1.7rem}\n"], dependencies: [{ 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.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SelectComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'it-select[id][options]', template: "<div class=\"select-wrapper\">\n <label [for]=\"id\">{{label}}</label>\n <select [id]=\"id\" [formControl]=\"control\" [attr.aria-describedby]=\"id + '-description'\">\n <option *ngFor=\"let option of options\" [disabled]=\"optionIsDisabled(option)\" [value]=\"option.value\">\n {{option.text ?? option.value}}\n </option>\n\n <ng-container *ngIf=\"groups\">\n <optgroup *ngFor=\"let group of groups\" [label]=\"group.label\">\n <option *ngFor=\"let option of group.options\" [disabled]=\"optionIsDisabled(option)\" [value]=\"option.value\">\n {{option.text ?? option.value}}\n </option>\n </optgroup>\n </ng-container>\n </select>\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n</div>\n", styles: [".select-wrapper{margin-bottom:1.7rem}\n"] }]
55
+ }], propDecorators: { options: [{
56
+ type: Input
57
+ }], groups: [{
58
+ type: Input
59
+ }], description: [{
60
+ type: Input
61
+ }] } });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7O0FBUW5GLE1BQU0sT0FBTyxlQUFnQixTQUFRLHFCQUFxQjtJQWlCL0MsUUFBUTtRQUNmLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUEyQjtRQUMxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDekMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUEyQjtRQUMxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDekMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzRHQWxFVSxlQUFlO2dHQUFmLGVBQWUsbUtDVDVCLGl5QkFpQkE7MkZEUmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSx3QkFBd0I7OEJBU3pCLE9BQU87c0JBQWYsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb250cm9sR3JvdXAsIFNlbGVjdENvbnRyb2xPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2Zvcm0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpdC1zZWxlY3RbaWRdW29wdGlvbnNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWxlY3Qgb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9ucyE6IEFycmF5PFNlbGVjdENvbnRyb2xPcHRpb24+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0IGdyb3VwIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGdyb3Vwcz86IEFycmF5PFNlbGVjdENvbnRyb2xHcm91cD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZWxlY3QgZGVzY3JpcHRpb25cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQodGhpcy5vcHRpb25Jc1NlbGVjdGVkKTtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShzZWxlY3RlZE9wdGlvbi52YWx1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5vbkNoYW5nZShzZWxlY3RlZE9wdGlvbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cE9wdGlvbiA9IHRoaXMuZ3JvdXBzPy5mbGF0TWFwKGcgPT4gZy5vcHRpb25zKS5maW5kKHRoaXMub3B0aW9uSXNTZWxlY3RlZCk7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBPcHRpb24pIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShzZWxlY3RlZEdyb3VwT3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2Uoc2VsZWN0ZWRHcm91cE9wdGlvbi52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWRcbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb3B0aW9uXG4gICAqL1xuICBvcHRpb25Jc1NlbGVjdGVkKG9wdGlvbjogU2VsZWN0Q29udHJvbE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNlbGVjdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnNlbGVjdGVkKHRoaXMuY29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBvcHRpb24gaXMgZGlzYWJsZWRcbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb3B0aW9uXG4gICAqL1xuICBvcHRpb25Jc0Rpc2FibGVkKG9wdGlvbjogU2VsZWN0Q29udHJvbE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChvcHRpb24uZGlzYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLmRpc2FibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmRpc2FibGVkKHRoaXMuY29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cbiAgPGxhYmVsIFtmb3JdPVwiaWRcIj57e2xhYmVsfX08L2xhYmVsPlxuICA8c2VsZWN0IFtpZF09XCJpZFwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctZGVzY3JpcHRpb24nXCI+XG4gICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIiBbZGlzYWJsZWRdPVwib3B0aW9uSXNEaXNhYmxlZChvcHRpb24pXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAge3tvcHRpb24udGV4dCA/PyBvcHRpb24udmFsdWV9fVxuICAgIDwvb3B0aW9uPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwc1wiPlxuICAgICAgPG9wdGdyb3VwICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHNcIiBbbGFiZWxdPVwiZ3JvdXAubGFiZWxcIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIiBbZGlzYWJsZWRdPVwib3B0aW9uSXNEaXNhYmxlZChvcHRpb24pXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgIHt7b3B0aW9uLnRleHQgPz8gb3B0aW9uLnZhbHVlfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICA8L29wdGdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NlbGVjdD5cbiAgPHNtYWxsICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwiZm9ybS10ZXh0XCI+e3tkZXNjcmlwdGlvbn19PC9zbWFsbD5cbjwvZGl2PlxuIl19
@@ -0,0 +1,46 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ export class TextareaComponent extends AbstractFormComponent {
7
+ constructor() {
8
+ super(...arguments);
9
+ /**
10
+ * Textarea Rows
11
+ * @default 3
12
+ */
13
+ this.rows = 3;
14
+ /**
15
+ * The textarea placeholder
16
+ */
17
+ this.placeholder = '';
18
+ }
19
+ /**
20
+ * Return the invalid message string from TranslateService
21
+ */
22
+ get invalidMessage() {
23
+ if (this.control.hasError('maxlength')) {
24
+ const error = this.getError('maxlength');
25
+ return this._translateService.get('it.errors.max-length-invalid', { max: error.requiredLength });
26
+ }
27
+ if (this.control.hasError('pattern')) {
28
+ const error = this.getError('pattern');
29
+ return this._translateService.get('it.errors.pattern-invalid', { pattern: error.requiredPattern });
30
+ }
31
+ return super.invalidMessage;
32
+ }
33
+ }
34
+ TextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
35
+ TextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TextareaComponent, selector: "it-textarea[id]", inputs: { rows: "rows", placeholder: "placeholder", description: "description" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{label}}</label>\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n (blur)=\"markAsTouched()\"></textarea>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: ["textarea.is-invalid{border-color:#d9364f}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TextareaComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'it-textarea[id]', template: "<div class=\"form-group\">\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{label}}</label>\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n (blur)=\"markAsTouched()\"></textarea>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: ["textarea.is-invalid{border-color:#d9364f}\n"] }]
39
+ }], propDecorators: { rows: [{
40
+ type: Input
41
+ }], placeholder: [{
42
+ type: Input
43
+ }], description: [{
44
+ type: Input
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQVFuRixNQUFNLE9BQU8saUJBQWtCLFNBQVEscUJBQTZCO0lBTHBFOztRQU9FOzs7V0FHRztRQUNNLFNBQUksR0FBWSxDQUFDLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztLQXNCbkM7SUFmQzs7T0FFRztJQUNILElBQWEsY0FBYztRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQ2xHO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztTQUNwRztRQUVELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDOzs4R0FoQ1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsZ0tDVDlCLHF3QkFpQkE7MkZEUmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGlCQUFpQjs4QkFVbEIsSUFBSTtzQkFBWixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXRleHRhcmVhW2lkXScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHRhcmVhLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZvcm1Db21wb25lbnQ8c3RyaW5nPiB7XG5cbiAgLyoqXG4gICAqIFRleHRhcmVhIFJvd3NcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgQElucHV0KCkgcm93cz86IG51bWJlciA9IDM7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0YXJlYSBwbGFjZWhvbGRlclxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZGVzY3JpcHRpb25cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGludmFsaWQgbWVzc2FnZSBzdHJpbmcgZnJvbSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAqL1xuICBvdmVycmlkZSBnZXQgaW52YWxpZE1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5jb250cm9sLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldEVycm9yKCdtYXhsZW5ndGgnKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLm1heC1sZW5ndGgtaW52YWxpZCcsIHsgbWF4OiBlcnJvci5yZXF1aXJlZExlbmd0aCB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ3BhdHRlcm4nKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhdHRlcm4taW52YWxpZCcsIHsgcGF0dGVybjogZXJyb3IucmVxdWlyZWRQYXR0ZXJuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzLmFjdGl2ZV09XCIhIWNvbnRyb2wudmFsdWUgfHwgISFwbGFjZWhvbGRlclwiPnt7bGFiZWx9fTwvbGFiZWw+XG4gIDx0ZXh0YXJlYVxuICAgIFtpZF09XCJpZFwiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICBbY2xhc3MuaXMtdmFsaWRdPVwiaXNWYWxpZFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgKGJsdXIpPVwibWFya0FzVG91Y2hlZCgpXCI+PC90ZXh0YXJlYT5cblxuICA8c21hbGwgKm5nSWY9XCJkZXNjcmlwdGlvblwiIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57e2Rlc2NyaXB0aW9ufX08L3NtYWxsPlxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkXCIgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgIDxkaXYgI2N1c3RvbUVycm9yPjxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,134 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import { AbstractComponent } from '../../../abstracts/abstract.component';
3
+ import { FileUtils } from '../../../utils/file-utils';
4
+ import { ProgressDonut } from 'bootstrap-italia';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../../utils/icon/icon.component";
8
+ import * as i3 from "@ngx-translate/core";
9
+ export class UploadDragDropComponent extends AbstractComponent {
10
+ constructor() {
11
+ super(...arguments);
12
+ /**
13
+ * The accepted file type to upload <br>
14
+ * Possible values: <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">MIME Types</a> separated by comma
15
+ * @example application/pdf,image/png
16
+ * @default *
17
+ */
18
+ this.accept = '*';
19
+ /**
20
+ * Fired when file start to upload
21
+ */
22
+ this.fileStartUpload = new EventEmitter();
23
+ this.isDragover = false;
24
+ this.isLoading = false;
25
+ this.isSuccess = false;
26
+ }
27
+ ngAfterViewInit() {
28
+ super.ngAfterViewInit();
29
+ if (this.donutElement) {
30
+ this.donut = ProgressDonut.getOrCreateInstance(this.donutElement.nativeElement);
31
+ }
32
+ }
33
+ // Dragover listener
34
+ onDragOver(evt) {
35
+ evt.preventDefault();
36
+ evt.stopPropagation();
37
+ this.isDragover = !this.isLoading;
38
+ }
39
+ // Dragleave listener
40
+ onDragLeave(evt) {
41
+ evt.preventDefault();
42
+ evt.stopPropagation();
43
+ this.isDragover = false;
44
+ }
45
+ // Drop leave listener
46
+ onDrop(evt) {
47
+ evt.preventDefault();
48
+ evt.stopPropagation();
49
+ this.isDragover = false;
50
+ const files = evt.dataTransfer?.files;
51
+ if (this.isLoading || !files?.length) {
52
+ return;
53
+ }
54
+ this.start(files[0]);
55
+ }
56
+ /**
57
+ * On load file from input
58
+ * @param event
59
+ */
60
+ onLoadFile(event) {
61
+ const files = event.target?.files;
62
+ if (!files?.length) {
63
+ return;
64
+ }
65
+ this.start(files[0]);
66
+ }
67
+ /**
68
+ * Start the upload file
69
+ * @param file
70
+ */
71
+ start(file) {
72
+ if (this.accept !== '*' && !this.accept.includes(file.type)) {
73
+ return;
74
+ }
75
+ this.donut?.set(0);
76
+ this.isLoading = true;
77
+ const splitName = file.name.split('.');
78
+ this.filename = splitName[0];
79
+ this.extension = splitName[1]?.toUpperCase();
80
+ this.fileSize = FileUtils.getFileSizeString(file);
81
+ this.fileStartUpload.emit(file);
82
+ }
83
+ /**
84
+ * Percentage of upload
85
+ * @param value the percentage
86
+ */
87
+ progress(value) {
88
+ if (value >= 100) {
89
+ this.success();
90
+ }
91
+ else {
92
+ this.donut?.set(((value < 0) ? 0 : value) / 100);
93
+ }
94
+ }
95
+ /**
96
+ * Upload success
97
+ */
98
+ success() {
99
+ this.isLoading = false;
100
+ this.isSuccess = true;
101
+ }
102
+ /**
103
+ * Reset file uploader
104
+ */
105
+ reset() {
106
+ this.isLoading = false;
107
+ this.isSuccess = false;
108
+ this.filename = this.extension = this.fileSize = undefined;
109
+ this.donut?.set(0);
110
+ }
111
+ }
112
+ UploadDragDropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: UploadDragDropComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
113
+ UploadDragDropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: UploadDragDropComponent, selector: "it-upload-drag-drop[id]", inputs: { accept: "accept" }, outputs: { fileStartUpload: "fileStartUpload" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, viewQueries: [{ propertyName: "donutElement", first: true, predicate: ["donutElement"], descendants: true }], exportAs: ["itUploadDragDrop"], usesInheritance: true, ngImport: i0, template: "<div class=\"upload-dragdrop\" [class.dragover]=\"isDragover\" [class.loading]=\"isLoading\" [class.success]=\"isSuccess\">\n <div class=\"upload-dragdrop-image\">\n <img src=\"/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg\" alt=\"drag-drop-icon\" aria-hidden=\"true\">\n <div class=\"upload-dragdrop-loading\">\n <div class=\"progress-donut\" #donutElement></div>\n </div>\n <div class=\"upload-dragdrop-success\">\n <it-icon name=\"check\"></it-icon>\n </div>\n </div>\n <div class=\"upload-dragdrop-text\">\n <p class=\"upload-dragdrop-weight\">\n <it-icon name=\"file\" size=\"xs\"></it-icon>\n {{extension}} ({{fileSize}})\n </p>\n <h5>{{filename || ('it.form.upload-drag-file'|translate)}}</h5>\n <p *ngIf=\"isLoading\">{{'it.form.upload-loading'|translate}}</p>\n <p *ngIf=\"isSuccess\">{{'it.form.upload-complete'|translate}}</p>\n <p *ngIf=\"!isLoading && !isSuccess\">{{'it.form.upload-or'|translate}}\n <input type=\"file\" [id]=\"id\" class=\"upload-dragdrop-input\" [accept]=\"accept\" (change)=\"onLoadFile($event)\"/>\n <label [for]=\"id\">{{'it.form.upload-select-device'|translate}}</label>\n </p>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "class"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: UploadDragDropComponent, decorators: [{
115
+ type: Component,
116
+ args: [{ selector: 'it-upload-drag-drop[id]', exportAs: 'itUploadDragDrop', template: "<div class=\"upload-dragdrop\" [class.dragover]=\"isDragover\" [class.loading]=\"isLoading\" [class.success]=\"isSuccess\">\n <div class=\"upload-dragdrop-image\">\n <img src=\"/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg\" alt=\"drag-drop-icon\" aria-hidden=\"true\">\n <div class=\"upload-dragdrop-loading\">\n <div class=\"progress-donut\" #donutElement></div>\n </div>\n <div class=\"upload-dragdrop-success\">\n <it-icon name=\"check\"></it-icon>\n </div>\n </div>\n <div class=\"upload-dragdrop-text\">\n <p class=\"upload-dragdrop-weight\">\n <it-icon name=\"file\" size=\"xs\"></it-icon>\n {{extension}} ({{fileSize}})\n </p>\n <h5>{{filename || ('it.form.upload-drag-file'|translate)}}</h5>\n <p *ngIf=\"isLoading\">{{'it.form.upload-loading'|translate}}</p>\n <p *ngIf=\"isSuccess\">{{'it.form.upload-complete'|translate}}</p>\n <p *ngIf=\"!isLoading && !isSuccess\">{{'it.form.upload-or'|translate}}\n <input type=\"file\" [id]=\"id\" class=\"upload-dragdrop-input\" [accept]=\"accept\" (change)=\"onLoadFile($event)\"/>\n <label [for]=\"id\">{{'it.form.upload-select-device'|translate}}</label>\n </p>\n </div>\n</div>\n" }]
117
+ }], propDecorators: { accept: [{
118
+ type: Input
119
+ }], fileStartUpload: [{
120
+ type: Output
121
+ }], donutElement: [{
122
+ type: ViewChild,
123
+ args: ['donutElement']
124
+ }], onDragOver: [{
125
+ type: HostListener,
126
+ args: ['dragover', ['$event']]
127
+ }], onDragLeave: [{
128
+ type: HostListener,
129
+ args: ['dragleave', ['$event']]
130
+ }], onDrop: [{
131
+ type: HostListener,
132
+ args: ['drop', ['$event']]
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWRyYWctZHJvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdXBsb2FkLWRyYWctZHJvcC91cGxvYWQtZHJhZy1kcm9wLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS91cGxvYWQtZHJhZy1kcm9wL3VwbG9hZC1kcmFnLWRyb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBUWpELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFOOUQ7O1FBUUU7Ozs7O1dBS0c7UUFDTSxXQUFNLEdBQVcsR0FBRyxDQUFDO1FBRTlCOztXQUVHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXJELGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixjQUFTLEdBQVksS0FBSyxDQUFDO0tBK0c1QjtJQXBHVSxlQUFlO1FBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNqRjtJQUNILENBQUM7SUFFRCxvQkFBb0I7SUFFYixVQUFVLENBQUMsR0FBYztRQUM5QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFHRCxxQkFBcUI7SUFFZCxXQUFXLENBQUMsR0FBYztRQUMvQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxzQkFBc0I7SUFFZixNQUFNLENBQUMsR0FBYztRQUMxQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDcEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQVk7UUFDckIsTUFBTSxLQUFLLEdBQUksS0FBSyxDQUFDLE1BQTJCLEVBQUUsS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxJQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDOztvSEE5SFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsNGFDWHBDLCtyQ0F3QkE7MkZEYmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHlCQUF5QixZQUd6QixrQkFBa0I7OEJBVW5CLE1BQU07c0JBQWQsS0FBSztnQkFLSSxlQUFlO3NCQUF4QixNQUFNO2dCQVNDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYztnQkFnQmxCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVU3QixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTOUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGUtdXRpbHMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NEb251dCB9IGZyb20gJ2Jvb3RzdHJhcC1pdGFsaWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpdC11cGxvYWQtZHJhZy1kcm9wW2lkXScsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtZHJhZy1kcm9wLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWRyYWctZHJvcC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2l0VXBsb2FkRHJhZ0Ryb3AnXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZERyYWdEcm9wQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjZXB0ZWQgZmlsZSB0eXBlIHRvIHVwbG9hZCA8YnI+XG4gICAqIFBvc3NpYmxlIHZhbHVlczogPGEgaHJlZj1cImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcy9Db21tb25fdHlwZXNcIj5NSU1FIFR5cGVzPC9hPiBzZXBhcmF0ZWQgYnkgY29tbWFcbiAgICogQGV4YW1wbGUgYXBwbGljYXRpb24vcGRmLGltYWdlL3BuZ1xuICAgKiBAZGVmYXVsdCAqXG4gICAqL1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcqJztcblxuICAvKipcbiAgICogRmlyZWQgd2hlbiBmaWxlIHN0YXJ0IHRvIHVwbG9hZFxuICAgKi9cbiAgQE91dHB1dCgpIGZpbGVTdGFydFVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICBpc0RyYWdvdmVyOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBkb251dD86IGFueTtcblxuICBAVmlld0NoaWxkKCdkb251dEVsZW1lbnQnKVxuICBwcml2YXRlIGRvbnV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICBleHRlbnNpb24/OiBzdHJpbmc7XG4gIGZpbGVTaXplPzogc3RyaW5nO1xuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5kb251dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZG9udXQgPSBQcm9ncmVzc0RvbnV0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcy5kb251dEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRHJhZ292ZXIgbGlzdGVuZXJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnT3ZlcihldnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ292ZXIgPSAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuXG4gIC8vIERyYWdsZWF2ZSBsaXN0ZW5lclxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnTGVhdmUoZXZ0OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdvdmVyID0gZmFsc2U7XG4gIH1cblxuICAvLyBEcm9wIGxlYXZlIGxpc3RlbmVyXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Ecm9wKGV2dDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5pc0RyYWdvdmVyID0gZmFsc2U7XG4gICAgY29uc3QgZmlsZXMgPSBldnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcgfHwgIWZpbGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGFydChmaWxlc1swXSk7XG4gIH1cblxuICAvKipcbiAgICogT24gbG9hZCBmaWxlIGZyb20gaW5wdXRcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBvbkxvYWRGaWxlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uZmlsZXM7XG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhcnQoZmlsZXNbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB1cGxvYWQgZmlsZVxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgcHVibGljIHN0YXJ0KGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY2NlcHQgIT09ICcqJyAmJiAhdGhpcy5hY2NlcHQuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZG9udXQ/LnNldCgwKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBzcGxpdE5hbWUgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKTtcbiAgICB0aGlzLmZpbGVuYW1lID0gc3BsaXROYW1lWzBdO1xuICAgIHRoaXMuZXh0ZW5zaW9uID0gc3BsaXROYW1lWzFdPy50b1VwcGVyQ2FzZSgpO1xuICAgIHRoaXMuZmlsZVNpemUgPSBGaWxlVXRpbHMuZ2V0RmlsZVNpemVTdHJpbmcoZmlsZSk7XG5cbiAgICB0aGlzLmZpbGVTdGFydFVwbG9hZC5lbWl0KGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgdXBsb2FkXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGVyY2VudGFnZVxuICAgKi9cbiAgcHVibGljIHByb2dyZXNzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPj0gMTAwKSB7XG4gICAgICB0aGlzLnN1Y2Nlc3MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb251dD8uc2V0KCgodmFsdWUgPCAwKSA/IDAgOiB2YWx1ZSkgLyAxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgc3VjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN1Y2Nlc3MoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3VjY2VzcyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgZmlsZSB1cGxvYWRlclxuICAgKi9cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVuYW1lID0gdGhpcy5leHRlbnNpb24gPSB0aGlzLmZpbGVTaXplID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZG9udXQ/LnNldCgwKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidXBsb2FkLWRyYWdkcm9wXCIgW2NsYXNzLmRyYWdvdmVyXT1cImlzRHJhZ292ZXJcIiBbY2xhc3MubG9hZGluZ109XCJpc0xvYWRpbmdcIiBbY2xhc3Muc3VjY2Vzc109XCJpc1N1Y2Nlc3NcIj5cbiAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC1pbWFnZVwiPlxuICAgIDxpbWcgc3JjPVwiL2Jvb3RzdHJhcC1pdGFsaWEvZGlzdC9hc3NldHMvdXBsb2FkLWRyYWctZHJvcC1pY29uLnN2Z1wiIGFsdD1cImRyYWctZHJvcC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC1sb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZG9udXRcIiAjZG9udXRFbGVtZW50PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtZHJhZ2Ryb3Atc3VjY2Vzc1wiPlxuICAgICAgPGl0LWljb24gbmFtZT1cImNoZWNrXCI+PC9pdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC10ZXh0XCI+XG4gICAgPHAgY2xhc3M9XCJ1cGxvYWQtZHJhZ2Ryb3Atd2VpZ2h0XCI+XG4gICAgICA8aXQtaWNvbiBuYW1lPVwiZmlsZVwiIHNpemU9XCJ4c1wiPjwvaXQtaWNvbj5cbiAgICAgIHt7ZXh0ZW5zaW9ufX0gKHt7ZmlsZVNpemV9fSlcbiAgICA8L3A+XG4gICAgPGg1Pnt7ZmlsZW5hbWUgfHwgKCdpdC5mb3JtLnVwbG9hZC1kcmFnLWZpbGUnfHRyYW5zbGF0ZSl9fTwvaDU+XG4gICAgPHAgKm5nSWY9XCJpc0xvYWRpbmdcIj57eydpdC5mb3JtLnVwbG9hZC1sb2FkaW5nJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICA8cCAqbmdJZj1cImlzU3VjY2Vzc1wiPnt7J2l0LmZvcm0udXBsb2FkLWNvbXBsZXRlJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICA8cCAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWlzU3VjY2Vzc1wiPnt7J2l0LmZvcm0udXBsb2FkLW9yJ3x0cmFuc2xhdGV9fVxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgW2lkXT1cImlkXCIgY2xhc3M9XCJ1cGxvYWQtZHJhZ2Ryb3AtaW5wdXRcIiBbYWNjZXB0XT1cImFjY2VwdFwiIChjaGFuZ2UpPVwib25Mb2FkRmlsZSgkZXZlbnQpXCIvPlxuICAgICAgPGxhYmVsIFtmb3JdPVwiaWRcIj57eydpdC5mb3JtLnVwbG9hZC1zZWxlY3QtZGV2aWNlJ3x0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19