design-angular-kit 1.0.0-9 → 1.0.0-prerelease.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/README.md +77 -7
  2. package/assets/i18n/en.json +81 -12
  3. package/assets/i18n/it.json +80 -11
  4. package/esm2022/lib/abstracts/abstract-form.component.mjs +187 -0
  5. package/esm2022/lib/abstracts/abstract.component.mjs +45 -0
  6. package/esm2022/lib/components/components.module.mjs +218 -0
  7. package/esm2022/lib/components/core/accordion/accordion.component.mjs +38 -0
  8. package/esm2022/lib/components/core/alert/alert.component.mjs +72 -0
  9. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
  10. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +38 -0
  11. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
  12. package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
  13. package/esm2022/lib/components/core/button/button.directive.mjs +86 -0
  14. package/esm2022/lib/components/core/callout/callout.component.mjs +57 -0
  15. package/esm2022/lib/components/core/card/card.component.mjs +59 -0
  16. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +81 -0
  17. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
  18. package/esm2022/lib/components/core/carousel/carousel.module.mjs +23 -0
  19. package/esm2022/lib/components/core/chip/chip.component.mjs +96 -0
  20. package/esm2022/lib/components/core/collapse/collapse.component.mjs +104 -0
  21. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
  22. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  23. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +59 -0
  24. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +27 -0
  25. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +141 -0
  26. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +62 -0
  27. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
  28. package/esm2022/lib/components/core/forward/forward.directive.mjs +53 -0
  29. package/esm2022/lib/components/core/link/link.component.mjs +42 -0
  30. package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
  31. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +51 -0
  32. package/esm2022/lib/components/core/list/list.module.mjs +23 -0
  33. package/esm2022/lib/components/core/modal/modal.component.mjs +195 -0
  34. package/esm2022/lib/components/core/notifications/notifications.component.mjs +112 -0
  35. package/esm2022/lib/components/core/pagination/pagination.component.mjs +127 -0
  36. package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
  37. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  38. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +26 -0
  39. package/esm2022/lib/components/core/spinner/spinner.component.mjs +31 -0
  40. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +112 -0
  41. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +19 -0
  42. package/esm2022/lib/components/core/steppers/steppers.module.mjs +23 -0
  43. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +60 -0
  44. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
  45. package/esm2022/lib/components/core/tab/tab.module.mjs +23 -0
  46. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +136 -0
  47. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
  48. package/esm2022/lib/components/core/table/table.component.mjs +45 -0
  49. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
  50. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +95 -0
  51. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
  52. package/esm2022/lib/components/form/form.module.mjs +59 -0
  53. package/esm2022/lib/components/form/input/input.component.mjs +187 -0
  54. package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
  55. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +58 -0
  56. package/esm2022/lib/components/form/range/range.component.mjs +64 -0
  57. package/esm2022/lib/components/form/rating/rating.component.mjs +51 -0
  58. package/esm2022/lib/components/form/select/select.component.mjs +70 -0
  59. package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
  60. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +140 -0
  61. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
  62. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
  63. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +58 -0
  64. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +55 -0
  65. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
  66. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
  67. package/esm2022/lib/components/navigation/header/header.component.mjs +73 -0
  68. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +41 -0
  69. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +13 -0
  70. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
  71. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +75 -0
  72. package/esm2022/lib/components/utils/icon/icon.component.mjs +56 -0
  73. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +47 -0
  74. package/esm2022/lib/design-angular-kit-config.mjs +15 -0
  75. package/esm2022/lib/design-angular-kit.module.mjs +68 -0
  76. package/esm2022/lib/enums/colors.enums.mjs +12 -0
  77. package/esm2022/lib/enums/sizes.enum.mjs +9 -0
  78. package/esm2022/lib/interfaces/core.mjs +16 -0
  79. package/esm2022/lib/interfaces/design-angular-kit-init.mjs +2 -0
  80. package/esm2022/lib/interfaces/form.mjs +2 -0
  81. package/esm2022/lib/interfaces/icon.mjs +165 -0
  82. package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
  83. package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
  84. package/esm2022/lib/pipes/duration.pipe.mjs +110 -0
  85. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
  86. package/esm2022/lib/services/notification/notification.service.mjs +120 -0
  87. package/esm2022/lib/utils/coercion.mjs +18 -0
  88. package/esm2022/lib/utils/date-utils.mjs +160 -0
  89. package/esm2022/lib/utils/file-utils.mjs +73 -0
  90. package/esm2022/lib/utils/regex.mjs +31 -0
  91. package/esm2022/lib/validators/it-validators.mjs +153 -0
  92. package/esm2022/public_api.mjs +98 -0
  93. package/fesm2022/design-angular-kit.mjs +5450 -0
  94. package/fesm2022/design-angular-kit.mjs.map +1 -0
  95. package/lib/abstracts/{abstract-form-component.d.ts → abstract-form.component.d.ts} +12 -14
  96. package/lib/abstracts/abstract.component.d.ts +18 -8
  97. package/lib/components/components.module.d.ts +45 -0
  98. package/lib/components/core/accordion/accordion.component.d.ts +11 -5
  99. package/lib/components/core/alert/alert.component.d.ts +15 -10
  100. package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
  101. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +13 -0
  102. package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
  103. package/lib/components/core/badge/badge.directive.d.ts +14 -7
  104. package/lib/components/core/button/button.directive.d.ts +25 -15
  105. package/lib/components/core/callout/callout.component.d.ts +18 -20
  106. package/lib/components/core/card/card.component.d.ts +46 -18
  107. package/lib/components/core/carousel/carousel/carousel.component.d.ts +34 -15
  108. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +8 -3
  109. package/lib/components/core/carousel/carousel.module.d.ts +8 -0
  110. package/lib/components/core/chip/chip.component.d.ts +8 -5
  111. package/lib/components/core/collapse/collapse.component.d.ts +22 -15
  112. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +3 -3
  113. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +3 -3
  114. package/lib/components/core/dimmer/dimmer.component.d.ts +4 -4
  115. package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
  116. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +24 -17
  117. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +15 -12
  118. package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
  119. package/lib/components/core/forward/forward.directive.d.ts +3 -3
  120. package/lib/components/core/link/link.component.d.ts +14 -10
  121. package/lib/components/core/list/list/list.component.d.ts +20 -6
  122. package/lib/components/core/list/list-item/list-item.component.d.ts +23 -9
  123. package/lib/components/core/list/list.module.d.ts +8 -0
  124. package/lib/components/core/modal/modal.component.d.ts +89 -13
  125. package/lib/components/core/notifications/notifications.component.d.ts +9 -8
  126. package/lib/components/core/pagination/pagination.component.d.ts +71 -10
  127. package/lib/components/core/popover/popover.directive.d.ts +15 -14
  128. package/lib/components/core/progress-bar/progress-bar.component.d.ts +11 -8
  129. package/lib/components/core/progress-button/progress-button.component.d.ts +5 -6
  130. package/lib/components/core/spinner/spinner.component.d.ts +13 -10
  131. package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +55 -27
  132. package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +5 -4
  133. package/lib/components/core/steppers/steppers.module.d.ts +8 -0
  134. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +15 -12
  135. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +14 -10
  136. package/lib/components/core/tab/tab.module.d.ts +8 -0
  137. package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
  138. package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
  139. package/lib/components/core/table/table.component.d.ts +26 -20
  140. package/lib/components/core/tooltip/tooltip.directive.d.ts +12 -11
  141. package/lib/components/form/autocomplete/autocomplete.component.d.ts +49 -0
  142. package/lib/components/form/checkbox/checkbox.component.d.ts +23 -12
  143. package/lib/components/form/form.module.d.ts +17 -0
  144. package/lib/components/form/input/input.component.d.ts +42 -43
  145. package/lib/components/form/password-input/password-input.component.d.ts +35 -10
  146. package/lib/components/form/radio-button/radio-button.component.d.ts +20 -11
  147. package/lib/components/form/range/range.component.d.ts +42 -0
  148. package/lib/components/form/rating/rating.component.d.ts +24 -0
  149. package/lib/components/form/select/select.component.d.ts +12 -6
  150. package/lib/components/form/textarea/textarea.component.d.ts +15 -5
  151. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +5 -5
  152. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +14 -11
  153. package/lib/components/navigation/back-button/back-button.component.d.ts +8 -8
  154. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +15 -16
  155. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +13 -10
  156. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +9 -8
  157. package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  158. package/lib/components/navigation/header/header.component.d.ts +22 -25
  159. package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +16 -0
  160. package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
  161. package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
  162. package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
  163. package/lib/components/utils/icon/icon.component.d.ts +15 -15
  164. package/lib/components/utils/language-switcher/language-switcher.component.d.ts +9 -5
  165. package/lib/design-angular-kit-config.d.ts +16 -0
  166. package/lib/design-angular-kit.module.d.ts +6 -4
  167. package/lib/enums/colors.enums.d.ts +10 -0
  168. package/lib/enums/sizes.enum.d.ts +7 -0
  169. package/lib/interfaces/core.d.ts +16 -15
  170. package/lib/interfaces/design-angular-kit-init.d.ts +7 -0
  171. package/lib/interfaces/form.d.ts +9 -9
  172. package/lib/interfaces/icon.d.ts +4 -3
  173. package/lib/interfaces/sortable-table.d.ts +33 -0
  174. package/lib/pipes/date-ago.pipe.d.ts +17 -0
  175. package/lib/pipes/duration.pipe.d.ts +35 -0
  176. package/lib/pipes/mark-matching-text.pipe.d.ts +15 -7
  177. package/lib/services/{notifications/notifications.service.d.ts → notification/notification.service.d.ts} +3 -3
  178. package/lib/utils/coercion.d.ts +14 -0
  179. package/lib/utils/date-utils.d.ts +78 -0
  180. package/lib/utils/file-utils.d.ts +1 -1
  181. package/lib/utils/regex.d.ts +5 -0
  182. package/lib/validators/it-validators.d.ts +9 -2
  183. package/package.json +14 -20
  184. package/public_api.d.ts +29 -4
  185. package/esm2020/lib/abstracts/abstract-form-component.mjs +0 -174
  186. package/esm2020/lib/abstracts/abstract.component.mjs +0 -27
  187. package/esm2020/lib/components/core/accordion/accordion.component.mjs +0 -31
  188. package/esm2020/lib/components/core/alert/alert.component.mjs +0 -69
  189. package/esm2020/lib/components/core/badge/badge.directive.mjs +0 -34
  190. package/esm2020/lib/components/core/button/button.directive.mjs +0 -80
  191. package/esm2020/lib/components/core/callout/callout.component.mjs +0 -84
  192. package/esm2020/lib/components/core/card/card.component.mjs +0 -58
  193. package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +0 -66
  194. package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +0 -14
  195. package/esm2020/lib/components/core/chip/chip.component.mjs +0 -89
  196. package/esm2020/lib/components/core/collapse/collapse.component.mjs +0 -101
  197. package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +0 -24
  198. package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +0 -11
  199. package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +0 -59
  200. package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +0 -130
  201. package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +0 -68
  202. package/esm2020/lib/components/core/forward/forward.directive.mjs +0 -51
  203. package/esm2020/lib/components/core/link/link.component.mjs +0 -40
  204. package/esm2020/lib/components/core/list/list/list.component.mjs +0 -13
  205. package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +0 -36
  206. package/esm2020/lib/components/core/modal/modal.component.mjs +0 -98
  207. package/esm2020/lib/components/core/notifications/notifications.component.mjs +0 -110
  208. package/esm2020/lib/components/core/pagination/pagination.component.mjs +0 -51
  209. package/esm2020/lib/components/core/popover/popover.directive.mjs +0 -179
  210. package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +0 -34
  211. package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +0 -27
  212. package/esm2020/lib/components/core/spinner/spinner.component.mjs +0 -35
  213. package/esm2020/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +0 -119
  214. package/esm2020/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +0 -18
  215. package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +0 -59
  216. package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +0 -36
  217. package/esm2020/lib/components/core/table/table.component.mjs +0 -57
  218. package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +0 -143
  219. package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +0 -40
  220. package/esm2020/lib/components/form/input/input.component.mjs +0 -222
  221. package/esm2020/lib/components/form/password-input/password-input.component.mjs +0 -112
  222. package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +0 -53
  223. package/esm2020/lib/components/form/select/select.component.mjs +0 -62
  224. package/esm2020/lib/components/form/textarea/textarea.component.mjs +0 -46
  225. package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +0 -137
  226. package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +0 -104
  227. package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +0 -69
  228. package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +0 -74
  229. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -45
  230. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +0 -23
  231. package/esm2020/lib/components/navigation/header/header.component.mjs +0 -63
  232. package/esm2020/lib/components/utils/icon/icon.component.mjs +0 -54
  233. package/esm2020/lib/components/utils/language-switcher/language-switcher.component.mjs +0 -39
  234. package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +0 -13
  235. package/esm2020/lib/design-angular-kit.module.mjs +0 -56
  236. package/esm2020/lib/interfaces/core.mjs +0 -16
  237. package/esm2020/lib/interfaces/form.mjs +0 -2
  238. package/esm2020/lib/interfaces/icon.mjs +0 -2
  239. package/esm2020/lib/modules/components.module.mjs +0 -257
  240. package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +0 -36
  241. package/esm2020/lib/services/notifications/notifications.service.mjs +0 -120
  242. package/esm2020/lib/utils/boolean-input.mjs +0 -15
  243. package/esm2020/lib/utils/file-utils.mjs +0 -73
  244. package/esm2020/lib/utils/regex.mjs +0 -26
  245. package/esm2020/lib/validators/it-validators.mjs +0 -134
  246. package/esm2020/public_api.mjs +0 -70
  247. package/fesm2015/design-angular-kit.mjs +0 -3850
  248. package/fesm2015/design-angular-kit.mjs.map +0 -1
  249. package/fesm2020/design-angular-kit.mjs +0 -3797
  250. package/fesm2020/design-angular-kit.mjs.map +0 -1
  251. package/lib/components/utils/not-found-page/not-found-page.component.d.ts +0 -5
  252. package/lib/modules/components.module.d.ts +0 -61
  253. package/lib/utils/boolean-input.d.ts +0 -11
  254. /package/{esm2020 → esm2022}/design-angular-kit.mjs +0 -0
  255. /package/{esm2020 → esm2022}/lib/interfaces/utils.mjs +0 -0
@@ -1,222 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
- import { Validators } from '@angular/forms';
4
- import { ItValidators } from '../../../validators/it-validators';
5
- import { isTrueBooleanInput } from '../../../utils/boolean-input';
6
- import { debounceTime, distinctUntilChanged, map, Observable, of, switchMap } from 'rxjs';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/forms";
10
- import * as i3 from "../../utils/icon/icon.component";
11
- import * as i4 from "../../../pipes/mark-matching-text.pipe";
12
- export class InputComponent extends AbstractFormComponent {
13
- constructor() {
14
- super(...arguments);
15
- /**
16
- * The input type
17
- * @default text
18
- */
19
- this.type = 'text';
20
- /**
21
- * The input placeholder
22
- */
23
- this.placeholder = '';
24
- /**
25
- * Time span [ms] has passed without another source emission, to delay data filtering.
26
- * Useful when the user is typing multiple letters
27
- * @default 300 [ms]
28
- */
29
- this.autocompleteDebounceTime = 300;
30
- /**
31
- * Fired when the Autocomplete Item has been selected
32
- */
33
- this.onAutocompleteSelected = new EventEmitter();
34
- this.showAutocompletion = false;
35
- /** Observable da cui vengono emessi i risultati dell'auto completamento */
36
- this.autocompleteResults$ = new Observable();
37
- }
38
- get isActiveLabel() {
39
- const value = this.control.value;
40
- if ((!!value && value !== 0) || value === 0 || !!this.placeholder) {
41
- return true;
42
- }
43
- if (this.type === 'number' && (isTrueBooleanInput(this.currency) || isTrueBooleanInput(this.percentage))) {
44
- return true;
45
- }
46
- return this.type === 'date' || this.type === 'time' || this.type === 'color';
47
- }
48
- /**
49
- * Check is readonly field
50
- */
51
- get isReadonly() {
52
- return this.readonly === 'plaintext' || isTrueBooleanInput(this.readonly);
53
- }
54
- /**
55
- * Return the invalid message string from TranslateService
56
- */
57
- get invalidMessage() {
58
- if (this.hasError('min') && this.min) {
59
- return this._translateService.get('it.errors.min-invalid', {
60
- min: this.min
61
- });
62
- }
63
- if (this.hasError('max') && this.max) {
64
- return this._translateService.get('it.errors.max-invalid', {
65
- max: this.max
66
- });
67
- }
68
- if (this.hasError('minlength')) {
69
- const error = this.getError('minlength');
70
- return this._translateService.get('it.errors.min-length-invalid', { min: error.requiredLength });
71
- }
72
- if (this.hasError('maxlength')) {
73
- const error = this.getError('maxlength');
74
- return this._translateService.get('it.errors.max-length-invalid', { max: error.requiredLength });
75
- }
76
- if (this.hasError('email') || this.hasError('invalidEmail')) {
77
- return this._translateService.get('it.errors.email-invalid');
78
- }
79
- if (this.hasError('invalidTel')) {
80
- return this._translateService.get('it.errors.tel-invalid');
81
- }
82
- if (this.hasError('invalidUrl')) {
83
- return this._translateService.get('it.errors.url-invalid');
84
- }
85
- if (this.hasError('invalidTaxCode')) {
86
- return this._translateService.get('it.errors.tax-code-invalid');
87
- }
88
- if (this.hasError('invalidVatNumber')) {
89
- return this._translateService.get('it.errors.vat-number-invalid');
90
- }
91
- if (this.hasError('invalidCap')) {
92
- return this._translateService.get('it.errors.cap-invalid');
93
- }
94
- if (this.hasError('invalidRegex')) {
95
- return this._translateService.get('it.errors.regex-invalid');
96
- }
97
- if (this.hasError('pattern')) {
98
- const error = this.getError('pattern');
99
- return this._translateService.get('it.errors.pattern-invalid', { pattern: error.requiredPattern });
100
- }
101
- return super.invalidMessage;
102
- }
103
- ngOnInit() {
104
- super.ngOnInit();
105
- const validators = [];
106
- switch (this.type) {
107
- case 'number':
108
- if (isTrueBooleanInput(this.percentage)) {
109
- this.min = this.min || 0;
110
- this.max = this.max || 100;
111
- }
112
- // Dynamic min/max validators
113
- validators.push((control) => this.min ? Validators.min(this.min)(control) : null);
114
- validators.push((control) => this.max ? Validators.max(this.max)(control) : null);
115
- break;
116
- case 'email':
117
- validators.push(ItValidators.email);
118
- break;
119
- case 'tel':
120
- validators.push(ItValidators.tel);
121
- break;
122
- case 'url':
123
- validators.push(ItValidators.url);
124
- break;
125
- }
126
- this.addValidators(validators);
127
- this.autocompleteResults$ = this.getAutocompleteResults$();
128
- }
129
- /**
130
- * Increment or decrease the input number value of step
131
- * @param decrease true to decrease value
132
- */
133
- incrementNumber(decrease = false) {
134
- if (this.type !== 'number') {
135
- return;
136
- }
137
- const step = (this.step === 'any' ? 1 : (this.step ?? 1));
138
- let value = Number(this.control.value);
139
- value = (isNaN(value) ? 0 : value) + (decrease ? -step : step);
140
- value = Math.round(value * 1e12) / 1e12; // prevent js decimal error
141
- if (this.min !== undefined && value < this.min) {
142
- value = this.min;
143
- }
144
- else if (this.max !== undefined && value > this.max) {
145
- value = this.max;
146
- }
147
- this.control.setValue(value);
148
- }
149
- /**
150
- * Create the autocomplete list
151
- */
152
- getAutocompleteResults$() {
153
- if (this.type !== 'search') {
154
- return of({ searchedValue: '', relatedEntries: [] });
155
- }
156
- return this.control.valueChanges.pipe(debounceTime(this.autocompleteDebounceTime), // Delay filter data after time span has passed without another source emission, useful when the user is typing multiple letters
157
- distinctUntilChanged(), // Only if searchValue is distinct in comparison to the last value
158
- switchMap(searchedValue => {
159
- if (!this.autocompleteData) {
160
- return of({ searchedValue, relatedEntries: [] });
161
- }
162
- const autoCompleteData$ = Array.isArray(this.autocompleteData) ? of(this.autocompleteData) : this.autocompleteData(searchedValue);
163
- return autoCompleteData$.pipe(map(autocompleteData => {
164
- if (!searchedValue) {
165
- return { searchedValue, relatedEntries: [] };
166
- }
167
- const lowercaseValue = searchedValue.toLowerCase();
168
- const relatedEntries = autocompleteData.filter(item => item.value?.toLowerCase().includes(lowercaseValue));
169
- return { searchedValue, relatedEntries };
170
- }));
171
- }));
172
- }
173
- onEntryClick(entry, event) {
174
- // Se non è stato definito un link associato all'elemento dell'autocomplete, probabilmente il desiderata
175
- // non è effettuare la navigazione al default '#', pertanto in tal caso meglio annullare la navigazione.
176
- if (!entry.link) {
177
- event.preventDefault();
178
- }
179
- this.onAutocompleteSelected.next(entry);
180
- this.control.setValue(entry.value);
181
- this.showAutocompletion = false;
182
- }
183
- autocompleteItemTrackByValueFn(index, item) {
184
- return item.value;
185
- }
186
- onKeyDown() {
187
- this.showAutocompletion = this.type === 'search';
188
- }
189
- }
190
- InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: InputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
191
- InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: InputComponent, selector: "it-input[id]", inputs: { type: "type", placeholder: "placeholder", description: "description", readonly: "readonly", max: "max", min: "min", step: "step", currency: "currency", percentage: "percentage", adaptive: "adaptive", autocompleteData: "autocompleteData", autocompleteDebounceTime: "autocompleteDebounceTime" }, outputs: { onAutocompleteSelected: "onAutocompleteSelected" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\" [class.d-none]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n <div #prepend>\n <ng-content select=\"[prepend]\"></ng-content>\n </div>\n <div class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </div>\n </div>\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"isActiveLabel\"\n [class.empty-prepend-label]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n {{label}}\n </label>\n\n <span *ngIf=\"type === 'number'\"\n class=\"input-number\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n\n <input type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n\n <button type=\"button\" class=\"input-number-add\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{'it.form.increase-value'}}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{'it.form.decrease-value'}}</span>\n </button>\n </span>\n\n <input *ngIf=\"type !== 'number'\"\n [id]=\"id\"\n [type]=\"type\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n (keydown)=\"onKeyDown()\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\">\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n <!-- INIZIO gestione AUTOCOMPLETAMENTO -->\n <ng-container *ngIf=\"type === 'search'\">\n <!-- Icona lente per autocompletamento -->\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n <ng-container *ngIf=\"autocompleteResults$ | async as autocomplete\">\n <!-- Lista di autocompletamento -->\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n <li *ngFor=\"let entry of autocomplete.relatedEntries; trackBy: autocompleteItemTrackByValueFn\"\n (click)=\"onEntryClick(entry, $event)\">\n <a [href]=\"entry.link\">\n <ng-container *ngTemplateOutlet=\"autocompleteItemTemplate\"></ng-container>\n </a>\n <ng-template #autocompleteItemTemplate>\n <div class=\"avatar size-sm\" *ngIf=\"entry.avatarSrcPath\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\">\n </div>\n <it-icon *ngIf=\"entry.icon\" [name]=\"entry.icon\" size=\"sm\"></it-icon>\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | markMatchingText: autocomplete.searchedValue\"></span>\n <em *ngIf=\"entry.label\">{{entry.label}}</em>\n </span>\n </ng-template>\n </li>\n </ul>\n </ng-container>\n </ng-container>\n <!-- FINE gestione AUTOCOMPLETAMENTO -->\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group label{z-index:1000}.form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group .input-number button.input-number-add{top:0}.form-group .input-number button.input-number-sub{bottom:0}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}\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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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" }, { kind: "pipe", type: i4.MarkMatchingTextPipe, name: "markMatchingText" }] });
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: InputComponent, decorators: [{
193
- type: Component,
194
- args: [{ selector: 'it-input[id]', template: "<div class=\"form-group\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\" [class.d-none]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n <div #prepend>\n <ng-content select=\"[prepend]\"></ng-content>\n </div>\n <div class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </div>\n </div>\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"isActiveLabel\"\n [class.empty-prepend-label]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n {{label}}\n </label>\n\n <span *ngIf=\"type === 'number'\"\n class=\"input-number\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n\n <input type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n\n <button type=\"button\" class=\"input-number-add\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{'it.form.increase-value'}}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{'it.form.decrease-value'}}</span>\n </button>\n </span>\n\n <input *ngIf=\"type !== 'number'\"\n [id]=\"id\"\n [type]=\"type\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n (keydown)=\"onKeyDown()\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\">\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n <!-- INIZIO gestione AUTOCOMPLETAMENTO -->\n <ng-container *ngIf=\"type === 'search'\">\n <!-- Icona lente per autocompletamento -->\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n <ng-container *ngIf=\"autocompleteResults$ | async as autocomplete\">\n <!-- Lista di autocompletamento -->\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n <li *ngFor=\"let entry of autocomplete.relatedEntries; trackBy: autocompleteItemTrackByValueFn\"\n (click)=\"onEntryClick(entry, $event)\">\n <a [href]=\"entry.link\">\n <ng-container *ngTemplateOutlet=\"autocompleteItemTemplate\"></ng-container>\n </a>\n <ng-template #autocompleteItemTemplate>\n <div class=\"avatar size-sm\" *ngIf=\"entry.avatarSrcPath\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\">\n </div>\n <it-icon *ngIf=\"entry.icon\" [name]=\"entry.icon\" size=\"sm\"></it-icon>\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | markMatchingText: autocomplete.searchedValue\"></span>\n <em *ngIf=\"entry.label\">{{entry.label}}</em>\n </span>\n </ng-template>\n </li>\n </ul>\n </ng-container>\n </ng-container>\n <!-- FINE gestione AUTOCOMPLETAMENTO -->\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group label{z-index:1000}.form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group .input-number button.input-number-add{top:0}.form-group .input-number button.input-number-sub{bottom:0}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}\n"] }]
195
- }], propDecorators: { type: [{
196
- type: Input
197
- }], placeholder: [{
198
- type: Input
199
- }], description: [{
200
- type: Input
201
- }], readonly: [{
202
- type: Input
203
- }], max: [{
204
- type: Input
205
- }], min: [{
206
- type: Input
207
- }], step: [{
208
- type: Input
209
- }], currency: [{
210
- type: Input
211
- }], percentage: [{
212
- type: Input
213
- }], adaptive: [{
214
- type: Input
215
- }], autocompleteData: [{
216
- type: Input
217
- }], autocompleteDebounceTime: [{
218
- type: Input
219
- }], onAutocompleteSelected: [{
220
- type: Output
221
- }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRW5GLE9BQU8sRUFBZ0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBTzFGLE1BQU0sT0FBTyxjQUFlLFNBQVEscUJBQXNDO0lBTDFFOztRQU9FOzs7V0FHRztRQUNNLFNBQUksR0FBcUIsTUFBTSxDQUFDO1FBRXpDOztXQUVHO1FBQ00sZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFrRGxDOzs7O1dBSUc7UUFDTSw2QkFBd0IsR0FBVyxHQUFHLENBQUM7UUFFaEQ7O1dBRUc7UUFDTywyQkFBc0IsR0FBbUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV0Rix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUEwRTNCLDJFQUEyRTtRQUMzRSx5QkFB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eEI7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxLQUFhLEVBQUUsSUFBc0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQ25ELENBQUM7OzJHQTlQVSxjQUFjOytGQUFkLGNBQWMsMGJDYjNCLHl5SUF3R0E7MkZEM0ZhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsY0FBYzs4QkFVZixJQUFJO3NCQUFaLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csR0FBRztzQkFBWCxLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFLSSxzQkFBc0I7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0tY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUl0ZW0sIElucHV0Q29udHJvbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2Zvcm0nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEl0VmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvcnMvaXQtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGlzVHJ1ZUJvb2xlYW5JbnB1dCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2Jvb2xlYW4taW5wdXQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LWlucHV0W2lkXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZvcm1Db21wb25lbnQ8c3RyaW5nIHwgbnVtYmVyPiB7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB0eXBlXG4gICAqIEBkZWZhdWx0IHRleHRcbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IElucHV0Q29udHJvbFR5cGUgPSAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwbGFjZWhvbGRlclxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZGVzY3JpcHRpb25cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUbyBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGFpbmVkIHZhbHVlLlxuICAgKiAtIDxiPnBsYWludGV4dDwvYj46IFJlYWRvbmx5IGZpZWxkIGluIHRoZSBmb3JtIHN0eWxpemVkIGFzIHBsYWluIHRleHRcbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5PzogQm9vbGVhbklucHV0IHwgJ3BsYWludGV4dCc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXggdmFsdWUgW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqL1xuICBASW5wdXQoKSBtYXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW4gdmFsdWUgW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqL1xuICBASW5wdXQoKSBtaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwIHZhbHVlIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKi9cbiAgQElucHV0KCkgc3RlcD86IG51bWJlciB8ICdhbnknO1xuXG4gIC8qKlxuICAgKiBJZiBpcyBhIGN1cnJlbmN5IG51bWJlciBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICovXG4gIEBJbnB1dCgpIGN1cnJlbmN5PzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBJZiBpcyBhIHBlcmNlbnRhZ2UgbnVtYmVyIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKi9cbiAgQElucHV0KCkgcGVyY2VudGFnZT86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogVG8gbWFrZSB0aGUgbnVtZXJpYyBmaWVsZCBhdXRvbWF0aWNhbGx5IHJlc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIGNvbnRhaW5lZCBpbiBpdC4gW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqL1xuICBASW5wdXQoKSBhZGFwdGl2ZT86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBsaXN0IG9mIHNlYXJjaGFibGUgZWxlbWVudHMgb24gd2hpY2ggdG8gYmFzZSB0aGUgaW5wdXQgYXV0b2NvbXBsZXRlIHN5c3RlbSBbT3B0aW9uYWwuIFVzZWQgb25seSBpbiB0eXBlID0gJ3NlYXJjaCddXG4gICAqIElmIHlvdSBuZWVkIHRvIHJldHJpZXZlIGl0ZW1zIHZpYSBBUEksIGNhbiBwYXNzIGEgZnVuY3Rpb24gb2YgT2JzZXJ2YWJsZVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZURhdGE/OiBBcnJheTxBdXRvY29tcGxldGVJdGVtPiB8ICgoc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PEF1dG9jb21wbGV0ZUl0ZW0+Pik7XG5cbiAgLyoqXG4gICAqIFRpbWUgc3BhbiBbbXNdIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbiwgdG8gZGVsYXkgZGF0YSBmaWx0ZXJpbmcuXG4gICAqIFVzZWZ1bCB3aGVuIHRoZSB1c2VyIGlzIHR5cGluZyBtdWx0aXBsZSBsZXR0ZXJzXG4gICAqIEBkZWZhdWx0IDMwMCBbbXNdXG4gICAqL1xuICBASW5wdXQoKSBhdXRvY29tcGxldGVEZWJvdW5jZVRpbWU6IG51bWJlciA9IDMwMDtcblxuICAvKipcbiAgICogRmlyZWQgd2hlbiB0aGUgQXV0b2NvbXBsZXRlIEl0ZW0gaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBvbkF1dG9jb21wbGV0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlSXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2hvd0F1dG9jb21wbGV0aW9uID0gZmFsc2U7XG5cblxuICBnZXQgaXNBY3RpdmVMYWJlbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcbiAgICBpZiAoKCEhdmFsdWUgJiYgdmFsdWUgIT09IDApIHx8IHZhbHVlID09PSAwIHx8ICEhdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ251bWJlcicgJiYgKGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmN1cnJlbmN5KSB8fCBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5wZXJjZW50YWdlKSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdkYXRlJyB8fCB0aGlzLnR5cGUgPT09ICd0aW1lJyB8fCB0aGlzLnR5cGUgPT09ICdjb2xvcic7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaXMgcmVhZG9ubHkgZmllbGRcbiAgICovXG4gIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5ID09PSAncGxhaW50ZXh0JyB8fCBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5yZWFkb25seSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbnZhbGlkIG1lc3NhZ2Ugc3RyaW5nIGZyb20gVHJhbnNsYXRlU2VydmljZVxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGludmFsaWRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21pbicpICYmIHRoaXMubWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5taW4taW52YWxpZCcsIHtcbiAgICAgICAgbWluOiB0aGlzLm1pblxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtYXgnKSAmJiB0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMubWF4LWludmFsaWQnLCB7XG4gICAgICAgIG1heDogdGhpcy5tYXhcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5nZXRFcnJvcignbWlubGVuZ3RoJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5taW4tbGVuZ3RoLWludmFsaWQnLCB7IG1pbjogZXJyb3IucmVxdWlyZWRMZW5ndGggfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldEVycm9yKCdtYXhsZW5ndGgnKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLm1heC1sZW5ndGgtaW52YWxpZCcsIHsgbWF4OiBlcnJvci5yZXF1aXJlZExlbmd0aCB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2VtYWlsJykgfHwgdGhpcy5oYXNFcnJvcignaW52YWxpZEVtYWlsJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLmVtYWlsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRUZWwnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudGVsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRVcmwnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudXJsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRUYXhDb2RlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnRheC1jb2RlLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRWYXROdW1iZXInKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudmF0LW51bWJlci1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkQ2FwJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLmNhcC1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkUmVnZXgnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucmVnZXgtaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ3BhdHRlcm4nKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhdHRlcm4taW52YWxpZCcsIHsgcGF0dGVybjogZXJyb3IucmVxdWlyZWRQYXR0ZXJuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZhYmxlIGRhIGN1aSB2ZW5nb25vIGVtZXNzaSBpIHJpc3VsdGF0aSBkZWxsJ2F1dG8gY29tcGxldGFtZW50byAqL1xuICBhdXRvY29tcGxldGVSZXN1bHRzJDogT2JzZXJ2YWJsZTx7IHNlYXJjaGVkVmFsdWU6IHN0cmluZywgcmVsYXRlZEVudHJpZXM6IEFycmF5PEF1dG9jb21wbGV0ZUl0ZW0+IH0+ID0gbmV3IE9ic2VydmFibGUoKTtcblxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLnBlcmNlbnRhZ2UpKSB7XG4gICAgICAgICAgdGhpcy5taW4gPSB0aGlzLm1pbiB8fCAwO1xuICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgMTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHluYW1pYyBtaW4vbWF4IHZhbGlkYXRvcnNcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHRoaXMubWluID8gVmFsaWRhdG9ycy5taW4odGhpcy5taW4pKGNvbnRyb2wpIDogbnVsbCk7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB0aGlzLm1heCA/IFZhbGlkYXRvcnMubWF4KHRoaXMubWF4KShjb250cm9sKSA6IG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGVsJzpcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy50ZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChJdFZhbGlkYXRvcnMudXJsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlUmVzdWx0cyQgPSB0aGlzLmdldEF1dG9jb21wbGV0ZVJlc3VsdHMkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IG9yIGRlY3JlYXNlIHRoZSBpbnB1dCBudW1iZXIgdmFsdWUgb2Ygc3RlcFxuICAgKiBAcGFyYW0gZGVjcmVhc2UgdHJ1ZSB0byBkZWNyZWFzZSB2YWx1ZVxuICAgKi9cbiAgaW5jcmVtZW50TnVtYmVyKGRlY3JlYXNlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGVwID0gKHRoaXMuc3RlcCA9PT0gJ2FueScgPyAxIDogKHRoaXMuc3RlcCA/PyAxKSk7XG4gICAgbGV0IHZhbHVlID0gTnVtYmVyKHRoaXMuY29udHJvbC52YWx1ZSk7XG4gICAgdmFsdWUgPSAoaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlKSArIChkZWNyZWFzZSA/IC1zdGVwIDogc3RlcCk7XG4gICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMWUxMikgLyAxZTEyOyAvLyBwcmV2ZW50IGpzIGRlY2ltYWwgZXJyb3JcblxuICAgIGlmICh0aGlzLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgfSBlbHNlIGlmICh0aGlzLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYXV0b2NvbXBsZXRlIGxpc3RcbiAgICovXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUmVzdWx0cyQoKTogT2JzZXJ2YWJsZTx7IHNlYXJjaGVkVmFsdWU6IHN0cmluZywgcmVsYXRlZEVudHJpZXM6IEFycmF5PEF1dG9jb21wbGV0ZUl0ZW0+IH0+IHtcbiAgICBpZiAodGhpcy50eXBlICE9PSAnc2VhcmNoJykge1xuICAgICAgcmV0dXJuIG9mKHsgc2VhcmNoZWRWYWx1ZTogJycsIHJlbGF0ZWRFbnRyaWVzOiBbXSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmF1dG9jb21wbGV0ZURlYm91bmNlVGltZSksIC8vIERlbGF5IGZpbHRlciBkYXRhIGFmdGVyIHRpbWUgc3BhbiBoYXMgcGFzc2VkIHdpdGhvdXQgYW5vdGhlciBzb3VyY2UgZW1pc3Npb24sIHVzZWZ1bCB3aGVuIHRoZSB1c2VyIGlzIHR5cGluZyBtdWx0aXBsZSBsZXR0ZXJzXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCAvLyBPbmx5IGlmIHNlYXJjaFZhbHVlIGlzIGRpc3RpbmN0IGluIGNvbXBhcmlzb24gdG8gdGhlIGxhc3QgdmFsdWVcbiAgICAgIHN3aXRjaE1hcChzZWFyY2hlZFZhbHVlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZURhdGEpIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBzZWFyY2hlZFZhbHVlLCByZWxhdGVkRW50cmllczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdXRvQ29tcGxldGVEYXRhJCA9IEFycmF5LmlzQXJyYXkodGhpcy5hdXRvY29tcGxldGVEYXRhKSA/IG9mKHRoaXMuYXV0b2NvbXBsZXRlRGF0YSkgOiB0aGlzLmF1dG9jb21wbGV0ZURhdGEoc2VhcmNoZWRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhdXRvQ29tcGxldGVEYXRhJC5waXBlKFxuICAgICAgICAgIG1hcChhdXRvY29tcGxldGVEYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghc2VhcmNoZWRWYWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBzZWFyY2hlZFZhbHVlLCByZWxhdGVkRW50cmllczogW10gfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlVmFsdWUgPSBzZWFyY2hlZFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRW50cmllcyA9IGF1dG9jb21wbGV0ZURhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VWYWx1ZSkpO1xuXG4gICAgICAgICAgICByZXR1cm4geyBzZWFyY2hlZFZhbHVlLCByZWxhdGVkRW50cmllcyB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvbkVudHJ5Q2xpY2soZW50cnk6IEF1dG9jb21wbGV0ZUl0ZW0sIGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFNlIG5vbiDDqCBzdGF0byBkZWZpbml0byB1biBsaW5rIGFzc29jaWF0byBhbGwnZWxlbWVudG8gZGVsbCdhdXRvY29tcGxldGUsIHByb2JhYmlsbWVudGUgaWwgZGVzaWRlcmF0YVxuICAgIC8vIG5vbiDDqCBlZmZldHR1YXJlIGxhIG5hdmlnYXppb25lIGFsIGRlZmF1bHQgJyMnLCBwZXJ0YW50byBpbiB0YWwgY2FzbyBtZWdsaW8gYW5udWxsYXJlIGxhIG5hdmlnYXppb25lLlxuICAgIGlmICghZW50cnkubGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQubmV4dChlbnRyeSk7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGVudHJ5LnZhbHVlKTtcbiAgICB0aGlzLnNob3dBdXRvY29tcGxldGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlSXRlbVRyYWNrQnlWYWx1ZUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IEF1dG9jb21wbGV0ZUl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgfVxuXG4gIG9uS2V5RG93bigpIHtcbiAgICB0aGlzLnNob3dBdXRvY29tcGxldGlvbiA9IHRoaXMudHlwZSA9PT0gJ3NlYXJjaCc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCIgW2NsYXNzLmQtbm9uZV09XCIhcHJlcGVuZFRleHQuaGFzQ2hpbGROb2RlcygpICYmICFwcmVwZW5kLmhhc0NoaWxkTm9kZXMoKVwiPlxuICAgICAgPGRpdiAjcHJlcGVuZD5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByZXBlbmRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiICNwcmVwZW5kVGV4dD5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByZXBlbmRUZXh0XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZUxhYmVsXCJcbiAgICAgICAgICAgW2NsYXNzLmVtcHR5LXByZXBlbmQtbGFiZWxdPVwiIXByZXBlbmRUZXh0Lmhhc0NoaWxkTm9kZXMoKSAmJiAhcHJlcGVuZC5oYXNDaGlsZE5vZGVzKClcIj5cbiAgICAgIHt7bGFiZWx9fVxuICAgIDwvbGFiZWw+XG5cbiAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICBjbGFzcz1cImlucHV0LW51bWJlclwiXG4gICAgICAgICAgW2NsYXNzLmlucHV0LW51bWJlci1jdXJyZW5jeV09XCJjdXJyZW5jeVwiXG4gICAgICAgICAgW2NsYXNzLmlucHV0LW51bWJlci1wZXJjZW50YWdlXT1cInBlcmNlbnRhZ2VcIlxuICAgICAgICAgIFtjbGFzcy5pbnB1dC1udW1iZXItYWRhcHRpdmVdPVwiYWRhcHRpdmVcIj5cblxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICAgW3N0ZXBdPVwic3RlcCA/PyBudWxsXCJcbiAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgICAgICAgIFtjbGFzcy5pcy12YWxpZF09XCJpc1ZhbGlkXCJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgICAoYmx1cik9XCJtYXJrQXNUb3VjaGVkKClcIiAvPlxuXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlucHV0LW51bWJlci1hZGRcIiAoY2xpY2spPVwiaW5jcmVtZW50TnVtYmVyKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eydpdC5mb3JtLmluY3JlYXNlLXZhbHVlJ319PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlucHV0LW51bWJlci1zdWJcIiAoY2xpY2spPVwiaW5jcmVtZW50TnVtYmVyKHRydWUpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snaXQuZm9ybS5kZWNyZWFzZS12YWx1ZSd9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cblxuICAgIDxpbnB1dCAqbmdJZj1cInR5cGUgIT09ICdudW1iZXInXCJcbiAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICAgICAgIFtjbGFzcy5mb3JtLWNvbnRyb2xdPVwicmVhZG9ubHkgIT09ICdwbGFpbnRleHQnXCJcbiAgICAgICAgICAgW2NsYXNzLmZvcm0tY29udHJvbC1wbGFpbnRleHRdPVwicmVhZG9ubHkgPT09ICdwbGFpbnRleHQnXCJcbiAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgICAgICAgICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlkICsgJy1kZXNjcmlwdGlvbidcIlxuICAgICAgICAgICAoYmx1cik9XCJtYXJrQXNUb3VjaGVkKClcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthcHBlbmRdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwZW5kVGV4dF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHNtYWxsICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwiZm9ybS10ZXh0XCI+e3tkZXNjcmlwdGlvbn19PC9zbWFsbD5cblxuICA8IS0tIElOSVpJTyBnZXN0aW9uZSBBVVRPQ09NUExFVEFNRU5UTyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdzZWFyY2gnXCI+XG4gICAgPCEtLSBJY29uYSBsZW50ZSBwZXIgYXV0b2NvbXBsZXRhbWVudG8gLS0+XG4gICAgPHNwYW4gY2xhc3M9XCJhdXRvY29tcGxldGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPGl0LWljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9XCJzbVwiPjwvaXQtaWNvbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b2NvbXBsZXRlUmVzdWx0cyQgfCBhc3luYyBhcyBhdXRvY29tcGxldGVcIj5cbiAgICAgIDwhLS0gTGlzdGEgZGkgYXV0b2NvbXBsZXRhbWVudG8gLS0+XG4gICAgICA8dWwgY2xhc3M9XCJhdXRvY29tcGxldGUtbGlzdFwiIFtjbGFzcy5hdXRvY29tcGxldGUtbGlzdC1zaG93XT1cImF1dG9jb21wbGV0ZS5yZWxhdGVkRW50cmllcz8ubGVuZ3RoICYmIHNob3dBdXRvY29tcGxldGlvblwiPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVudHJ5IG9mIGF1dG9jb21wbGV0ZS5yZWxhdGVkRW50cmllczsgdHJhY2tCeTogYXV0b2NvbXBsZXRlSXRlbVRyYWNrQnlWYWx1ZUZuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkVudHJ5Q2xpY2soZW50cnksICRldmVudClcIj5cbiAgICAgICAgICA8YSBbaHJlZl09XCJlbnRyeS5saW5rXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhciBzaXplLXNtXCIgKm5nSWY9XCJlbnRyeS5hdmF0YXJTcmNQYXRoXCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJlbnRyeS5hdmF0YXJTcmNQYXRoXCIgW2FsdF09XCJlbnRyeS5hdmF0YXJBbHRUZXh0XCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpdC1pY29uICpuZ0lmPVwiZW50cnkuaWNvblwiIFtuYW1lXT1cImVudHJ5Lmljb25cIiBzaXplPVwic21cIj48L2l0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG9jb21wbGV0ZS1saXN0LXRleHRcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZW50cnkudmFsdWUgfCBtYXJrTWF0Y2hpbmdUZXh0OiBhdXRvY29tcGxldGUuc2VhcmNoZWRWYWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxlbSAqbmdJZj1cImVudHJ5LmxhYmVsXCI+e3tlbnRyeS5sYWJlbH19PC9lbT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tIEZJTkUgZ2VzdGlvbmUgQVVUT0NPTVBMRVRBTUVOVE8gLS0+XG5cbiAgPGRpdiAqbmdJZj1cImlzSW52YWxpZFwiIGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICA8ZGl2ICNjdXN0b21FcnJvcj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,112 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT2pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxxQkFBNkI7SUFMekU7O1FBT0U7OztXQUdHO1FBQ00sY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUVoQzs7O1dBR0c7UUFDTSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRW5DOzs7V0FHRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7V0FHRztRQUNNLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLHlCQUFvQixHQUFZLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNNLGdCQUFXLEdBQVcsRUFBRSxDQUFDO0tBd0VuQztJQXZEVSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDdEMsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLGVBQWU7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUN4RSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUM5QixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDOUIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYSxjQUFjO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRTtnQkFDakUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDOzttSEExR1Usc0JBQXNCO3VHQUF0QixzQkFBc0IscWNDWm5DLHlzQ0EwQkE7MkZEZGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLHVCQUF1Qjs4QkFVeEIsU0FBUztzQkFBakIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLc0IsWUFBWTtzQkFBdkMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS1jb21wb25lbnQnO1xuaW1wb3J0IHsgSXRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9ycy9pdC12YWxpZGF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgaXNUcnVlQm9vbGVhbklucHV0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYm9vbGVhbi1pbnB1dCc7XG5pbXBvcnQgeyBJbnB1dFBhc3N3b3JkIH0gZnJvbSAnYm9vdHN0cmFwLWl0YWxpYSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXBhc3N3b3JkLWlucHV0W2lkXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRJbnB1dENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmc+IHtcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIG1pbmltdW0gbGVuZ3RoXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICBASW5wdXQoKSBtaW5MZW5ndGg6IG51bWJlciA9IDEwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBudW1iZXJcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgdXNlTnVtYmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdXBwZXJjYXNlIGNoYXJhY3RlclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSB1c2VDYXBpdGFsQ2FzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgdXNlU21hbGxDYXNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgdXNlU3BlY2lhbENoYXJhY3RlcnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2Vob2xkZXJcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGRlc2NyaXB0aW9uXG4gICAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIHRvIHNob3cgdGhlIHN0cmVuZ3RoIG1ldGVyXG4gICAqL1xuICBASW5wdXQoKSBzaG93U3RyZW5ndGhNZXRlcj86IEJvb2xlYW5JbnB1dDtcblxuXG4gIGlucHV0UGFzc3dvcmRCcz86IElucHV0UGFzc3dvcmQ7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIGlucHV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMuYWRkVmFsaWRhdG9ycyhJdFZhbGlkYXRvcnMucGFzc3dvcmQoXG4gICAgICB0aGlzLm1pbkxlbmd0aCxcbiAgICAgIHRoaXMudXNlTnVtYmVyLFxuICAgICAgdGhpcy51c2VDYXBpdGFsQ2FzZSxcbiAgICAgIHRoaXMudXNlU21hbGxDYXNlLFxuICAgICAgdGhpcy51c2VTcGVjaWFsQ2hhcmFjdGVyc1xuICAgICkpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLmlucHV0UGFzc3dvcmRCcyA9IG5ldyBJbnB1dFBhc3N3b3JkKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgLi4udGhpcy5kZXNjcmlwdGlvbiAmJiB7IGVudGVyUGFzczogdGhpcy5kZXNjcmlwdGlvbiB9LFxuICAgICAgICBzaG93VGV4dDogdGhpcy5pc1N0cmVuZ3RoTWV0ZXIsXG4gICAgICAgIG1pbmltdW1MZW5ndGg6IHRoaXMubWluTGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNTdHJlbmd0aE1ldGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5zaG93U3RyZW5ndGhNZXRlcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbnZhbGlkIG1lc3NhZ2Ugc3RyaW5nIGZyb20gVHJhbnNsYXRlU2VydmljZVxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGludmFsaWRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ25vUGFzc3dvcmRNYXRjaCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXNzd29yZC1uby1tYXRjaCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLW1pbi1sZW5ndGgnLCB7XG4gICAgICAgIG1pbkxlbmd0aDogdGhpcy5taW5MZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzTnVtYmVyJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLW51bWJlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzQ2FwaXRhbENhc2UnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtY2FwaXRhbC1jYXNlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdoYXNTbWFsbENhc2UnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtY2FwaXRhbC1jYXNlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdoYXNTcGVjaWFsQ2hhcmFjdGVycycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXNzd29yZC1zcGVjaWFsLWNoYXJhY3RlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIiBbY2xhc3MuYWN0aXZlXT1cIiEhY29udHJvbC52YWx1ZSB8fCAhIXBsYWNlaG9sZGVyXCI+e3tsYWJlbH19PC9sYWJlbD5cblxuICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1wYXNzd29yZFwiXG4gICAgICAgICBbY2xhc3MuaW5wdXQtcGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXJdPVwiaXNTdHJlbmd0aE1ldGVyXCJcbiAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICBbY2xhc3MuaXMtdmFsaWRdPVwiaXNWYWxpZFwiXG4gICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctZGVzY3JpcHRpb24nXCIgI2lucHV0PlxuXG4gIDxzcGFuIGNsYXNzPVwicGFzc3dvcmQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxpdC1pY29uIG5hbWU9XCJwYXNzd29yZC12aXNpYmxlXCIgc2l6ZT1cInNtXCIgY2xhc3M9XCJwYXNzd29yZC1pY29uLXZpc2libGVcIj48L2l0LWljb24+XG4gICAgPGl0LWljb24gbmFtZT1cInBhc3N3b3JkLWludmlzaWJsZVwiIHNpemU9XCJzbVwiIGNsYXNzPVwicGFzc3dvcmQtaWNvbi1pbnZpc2libGUgZC1ub25lXCI+PC9pdC1pY29uPlxuICA8L3NwYW4+XG5cbiAgPHNtYWxsICpuZ0lmPVwiZGVzY3JpcHRpb24gJiYgIWlzU3RyZW5ndGhNZXRlclwiIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57e2Rlc2NyaXB0aW9ufX08L3NtYWxsPlxuXG4gIDxkaXYgKm5nSWY9XCJpc0ludmFsaWRcIiBjbGFzcz1cImZvcm0tZmVlZGJhY2sganVzdC12YWxpZGF0ZS1lcnJvci1sYWJlbFwiIFtpZF09XCJpZCArICctZXJyb3InXCI+XG4gICAgPGRpdiAjY3VzdG9tRXJyb3I+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Vycm9yXVwiPjwvbmctY29udGVudD48L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKVwiPnt7aW52YWxpZE1lc3NhZ2UgfCBhc3luY319PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,53 +0,0 @@
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][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\">\n <div #customLabel>\n <ng-content select=\"[label]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customLabel.hasChildNodes()\">{{label}}</ng-container>\n </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>\n <ng-content select=\"[error]\"></ng-content>\n </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>\n <ng-content select=\"[error]\"></ng-content>\n </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][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\">\n <div #customLabel>\n <ng-content select=\"[label]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customLabel.hasChildNodes()\">{{label}}</ng-container>\n </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>\n <ng-content select=\"[error]\"></ng-content>\n </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>\n <ng-content select=\"[error]\"></ng-content>\n </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQU9yRyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXNDO0lBTGhGOztRQVlFOzs7V0FHRztRQUNNLFdBQU0sR0FBaUIsS0FBSyxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLFVBQUssR0FBaUIsS0FBSyxDQUFDO0tBNkJ0QztJQXRCQyxJQUFJLFFBQVE7UUFDVixPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7O2lIQTdDVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwyS0NUakMsaThDQTJDQTsyRkRsQ2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLDRCQUE0Qjs4QkFTN0IsS0FBSztzQkFBYixLQUFLO2dCQU1HLE1BQU07c0JBQWQsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0tY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgaXNGYWxzZUJvb2xlYW5JbnB1dCwgaXNUcnVlQm9vbGVhbklucHV0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYm9vbGVhbi1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXJhZGlvLWJ1dHRvbltpZF1bdmFsdWVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhZGlvLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGb3JtQ29tcG9uZW50PHN0cmluZyB8IG51bWJlcj4ge1xuXG4gIC8qKlxuICAgKiBUaGUgcmFkaW8gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBzaG93IHJhZGlvIGlubGluZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgaW5saW5lOiBCb29sZWFuSW5wdXQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgaXMgcmFkaW8gZ3JvdXBcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwOiBCb29sZWFuSW5wdXQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgaXMgcmFkaW8gaXMgY2hlY2tlZFxuICAgKi9cbiAgQElucHV0KCkgY2hlY2tlZD86IEJvb2xlYW5JbnB1dDtcblxuICBnZXQgaXNJbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmlubGluZSk7XG4gIH1cblxuICBnZXQgaXNHcm91cCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuZ3JvdXApO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sPy5uYW1lPy50b1N0cmluZygpIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWUgfHwgIXRoaXMudmFsdWUgfHwgaXNGYWxzZUJvb2xlYW5JbnB1dCh0aGlzLmNoZWNrZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiXG4gICAgICAgW2NsYXNzLmZvcm0tY2hlY2stZ3JvdXBdPVwiaXNHcm91cFwiXG4gICAgICAgW2NsYXNzLmZvcm0tY2hlY2staW5saW5lXT1cImlzSW5saW5lXCI+XG5cbiAgICA8aW5wdXRcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICBbY2xhc3MuaXMtdmFsaWRdPVwiaXNWYWxpZFwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlkICsgJy1oZWxwJ1wiPlxuXG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiaWRcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUxhYmVsPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUxhYmVsLmhhc0NoaWxkTm9kZXMoKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8c21hbGwgKm5nSWY9XCJpc0dyb3VwXCIgW2lkXT1cImlkICsgJy1oZWxwJ1wiIGNsYXNzPVwiZm9ybS10ZXh0XCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9zbWFsbD5cblxuICAgIDxkaXYgKm5nSWY9XCJpc0ludmFsaWQgJiYgaXNHcm91cFwiIGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUVycm9yPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZXJyb3JdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKVwiPnt7aW52YWxpZE1lc3NhZ2UgfCBhc3luY319PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImlzSW52YWxpZCAmJiAhaXNHcm91cFwiIGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICA8ZGl2ICNjdXN0b21FcnJvcj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,62 +0,0 @@
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