design-angular-kit 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/README.md +461 -0
  2. package/esm2022/design-angular-kit.mjs +5 -0
  3. package/esm2022/lib/abstracts/abstract-form.component.mjs +186 -0
  4. package/esm2022/lib/abstracts/abstract.component.mjs +46 -0
  5. package/esm2022/lib/components/core/accordion/accordion.component.mjs +39 -0
  6. package/esm2022/lib/components/core/alert/alert.component.mjs +71 -0
  7. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
  8. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +40 -0
  9. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
  10. package/esm2022/lib/components/core/avatar/avatar.module.mjs +33 -0
  11. package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
  12. package/esm2022/lib/components/core/button/button.directive.mjs +80 -0
  13. package/esm2022/lib/components/core/callout/callout.component.mjs +64 -0
  14. package/esm2022/lib/components/core/card/card.component.mjs +59 -0
  15. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +84 -0
  16. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
  17. package/esm2022/lib/components/core/carousel/carousel.module.mjs +18 -0
  18. package/esm2022/lib/components/core/chip/chip.component.mjs +136 -0
  19. package/esm2022/lib/components/core/collapse/collapse.component.mjs +116 -0
  20. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +27 -0
  21. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  22. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +55 -0
  23. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +19 -0
  24. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +147 -0
  25. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +70 -0
  26. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
  27. package/esm2022/lib/components/core/forward/forward.directive.mjs +57 -0
  28. package/esm2022/lib/components/core/link/link.component.mjs +42 -0
  29. package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
  30. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +56 -0
  31. package/esm2022/lib/components/core/list/list.module.mjs +18 -0
  32. package/esm2022/lib/components/core/modal/modal.component.mjs +194 -0
  33. package/esm2022/lib/components/core/notifications/notifications.component.mjs +111 -0
  34. package/esm2022/lib/components/core/pagination/pagination.component.mjs +130 -0
  35. package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
  36. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  37. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +25 -0
  38. package/esm2022/lib/components/core/spinner/spinner.component.mjs +30 -0
  39. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +116 -0
  40. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +22 -0
  41. package/esm2022/lib/components/core/steppers/steppers.module.mjs +18 -0
  42. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +97 -0
  43. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
  44. package/esm2022/lib/components/core/tab/tab.module.mjs +18 -0
  45. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +134 -0
  46. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
  47. package/esm2022/lib/components/core/table/table.component.mjs +45 -0
  48. package/esm2022/lib/components/core/table/table.module.mjs +19 -0
  49. package/esm2022/lib/components/core/timeline/timeline-item/timeline-item.component.mjs +90 -0
  50. package/esm2022/lib/components/core/timeline/timeline.component.mjs +36 -0
  51. package/esm2022/lib/components/core/timeline/timeline.module.mjs +18 -0
  52. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
  53. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +112 -0
  54. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
  55. package/esm2022/lib/components/form/form.module.mjs +63 -0
  56. package/esm2022/lib/components/form/input/input.component.mjs +190 -0
  57. package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
  58. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +60 -0
  59. package/esm2022/lib/components/form/range/range.component.mjs +64 -0
  60. package/esm2022/lib/components/form/rating/rating.component.mjs +50 -0
  61. package/esm2022/lib/components/form/select/select.component.mjs +70 -0
  62. package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
  63. package/esm2022/lib/components/form/transfer/store/transfer.reducers.mjs +191 -0
  64. package/esm2022/lib/components/form/transfer/store/transfer.state.mjs +2 -0
  65. package/esm2022/lib/components/form/transfer/store/transfer.store.mjs +70 -0
  66. package/esm2022/lib/components/form/transfer/transfer-list/transfer-list.component.mjs +72 -0
  67. package/esm2022/lib/components/form/transfer/transfer.component.mjs +149 -0
  68. package/esm2022/lib/components/form/transfer/transfer.model.mjs +6 -0
  69. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +142 -0
  70. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
  71. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
  72. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +68 -0
  73. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +51 -0
  74. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
  75. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
  76. package/esm2022/lib/components/navigation/header/header.component.mjs +103 -0
  77. package/esm2022/lib/components/navigation/megamenu/megamenu.component.mjs +27 -0
  78. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +49 -0
  79. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +11 -0
  80. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
  81. package/esm2022/lib/components/navigation/navscroll/navscroll-list-item.component.mjs +98 -0
  82. package/esm2022/lib/components/navigation/navscroll/navscroll-list-items.component.mjs +44 -0
  83. package/esm2022/lib/components/navigation/navscroll/navscroll.component.mjs +116 -0
  84. package/esm2022/lib/components/navigation/navscroll/navscroll.model.mjs +2 -0
  85. package/esm2022/lib/components/navigation/navscroll/navscroll.store.mjs +68 -0
  86. package/esm2022/lib/components/navigation/navscroll/navscroll.utils.mjs +23 -0
  87. package/esm2022/lib/components/navigation/sidebar/sidebar.component.mjs +50 -0
  88. package/esm2022/lib/components/navigation/skiplink/skiplink/skiplink.component.mjs +27 -0
  89. package/esm2022/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.mjs +26 -0
  90. package/esm2022/lib/components/navigation/skiplink/skiplink.module.mjs +18 -0
  91. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +74 -0
  92. package/esm2022/lib/components/utils/icon/icon.component.mjs +63 -0
  93. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +50 -0
  94. package/esm2022/lib/design-angular-kit.module.mjs +233 -0
  95. package/esm2022/lib/enums/colors.enums.mjs +12 -0
  96. package/esm2022/lib/enums/sizes.enum.mjs +9 -0
  97. package/esm2022/lib/interfaces/core.mjs +16 -0
  98. package/esm2022/lib/interfaces/design-angular-kit-config.mjs +7 -0
  99. package/esm2022/lib/interfaces/form.mjs +2 -0
  100. package/esm2022/lib/interfaces/icon.mjs +168 -0
  101. package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
  102. package/esm2022/lib/interfaces/utils.mjs +2 -0
  103. package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
  104. package/esm2022/lib/pipes/duration.pipe.mjs +115 -0
  105. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
  106. package/esm2022/lib/provide-design-angular-kit.mjs +64 -0
  107. package/esm2022/lib/services/notification/notification.service.mjs +120 -0
  108. package/esm2022/lib/utils/coercion.mjs +18 -0
  109. package/esm2022/lib/utils/date-utils.mjs +162 -0
  110. package/esm2022/lib/utils/file-utils.mjs +73 -0
  111. package/esm2022/lib/utils/regex.mjs +35 -0
  112. package/esm2022/lib/validators/it-validators.mjs +156 -0
  113. package/esm2022/public_api.mjs +110 -0
  114. package/fesm2022/design-angular-kit.mjs +6731 -0
  115. package/fesm2022/design-angular-kit.mjs.map +1 -0
  116. package/index.d.ts +5 -0
  117. package/lib/abstracts/abstract-form.component.d.ts +87 -0
  118. package/lib/abstracts/abstract.component.d.ts +30 -0
  119. package/lib/components/core/accordion/accordion.component.d.ts +18 -0
  120. package/lib/components/core/alert/alert.component.d.ts +44 -0
  121. package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
  122. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +15 -0
  123. package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
  124. package/lib/components/core/avatar/avatar.module.d.ts +9 -0
  125. package/lib/components/core/badge/badge.directive.d.ts +23 -0
  126. package/lib/components/core/button/button.directive.d.ts +48 -0
  127. package/lib/components/core/callout/callout.component.d.ts +50 -0
  128. package/lib/components/core/card/card.component.d.ts +69 -0
  129. package/lib/components/core/carousel/carousel/carousel.component.d.ts +65 -0
  130. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +15 -0
  131. package/lib/components/core/carousel/carousel.module.d.ts +8 -0
  132. package/lib/components/core/chip/chip.component.d.ts +76 -0
  133. package/lib/components/core/collapse/collapse.component.d.ts +67 -0
  134. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  135. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  136. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  137. package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
  138. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +94 -0
  139. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +46 -0
  140. package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
  141. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  142. package/lib/components/core/link/link.component.d.ts +35 -0
  143. package/lib/components/core/list/list/list.component.d.ts +24 -0
  144. package/lib/components/core/list/list-item/list-item.component.d.ts +41 -0
  145. package/lib/components/core/list/list.module.d.ts +8 -0
  146. package/lib/components/core/modal/modal.component.d.ts +135 -0
  147. package/lib/components/core/notifications/notifications.component.d.ts +45 -0
  148. package/lib/components/core/pagination/pagination.component.d.ts +92 -0
  149. package/lib/components/core/popover/popover.directive.d.ts +99 -0
  150. package/lib/components/core/progress-bar/progress-bar.component.d.ts +31 -0
  151. package/lib/components/core/progress-button/progress-button.component.d.ts +21 -0
  152. package/lib/components/core/spinner/spinner.component.d.ts +24 -0
  153. package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +130 -0
  154. package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +24 -0
  155. package/lib/components/core/steppers/steppers.module.d.ts +8 -0
  156. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +60 -0
  157. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +38 -0
  158. package/lib/components/core/tab/tab.module.d.ts +8 -0
  159. package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
  160. package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
  161. package/lib/components/core/table/table.component.d.ts +60 -0
  162. package/lib/components/core/table/table.module.d.ts +9 -0
  163. package/lib/components/core/timeline/timeline-item/timeline-item.component.d.ts +79 -0
  164. package/lib/components/core/timeline/timeline.component.d.ts +21 -0
  165. package/lib/components/core/timeline/timeline.module.d.ts +8 -0
  166. package/lib/components/core/tooltip/tooltip.directive.d.ts +82 -0
  167. package/lib/components/form/autocomplete/autocomplete.component.d.ts +59 -0
  168. package/lib/components/form/checkbox/checkbox.component.d.ts +41 -0
  169. package/lib/components/form/form.module.d.ts +18 -0
  170. package/lib/components/form/input/input.component.d.ts +95 -0
  171. package/lib/components/form/password-input/password-input.component.d.ts +80 -0
  172. package/lib/components/form/radio-button/radio-button.component.d.ts +38 -0
  173. package/lib/components/form/range/range.component.d.ts +42 -0
  174. package/lib/components/form/rating/rating.component.d.ts +24 -0
  175. package/lib/components/form/select/select.component.d.ts +36 -0
  176. package/lib/components/form/textarea/textarea.component.d.ts +34 -0
  177. package/lib/components/form/transfer/store/transfer.reducers.d.ts +103 -0
  178. package/lib/components/form/transfer/store/transfer.state.d.ts +18 -0
  179. package/lib/components/form/transfer/store/transfer.store.d.ts +23 -0
  180. package/lib/components/form/transfer/transfer-list/transfer-list.component.d.ts +48 -0
  181. package/lib/components/form/transfer/transfer.component.d.ts +75 -0
  182. package/{src/lib/components/form/transfer/transfer.model.ts → lib/components/form/transfer/transfer.model.d.ts} +2 -9
  183. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +60 -0
  184. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +62 -0
  185. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  186. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +50 -0
  187. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +28 -0
  188. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +23 -0
  189. package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  190. package/lib/components/navigation/header/header.component.d.ts +38 -0
  191. package/lib/components/navigation/megamenu/megamenu.component.d.ts +22 -0
  192. package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +19 -0
  193. package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
  194. package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
  195. package/lib/components/navigation/navscroll/navscroll-list-item.component.d.ts +16 -0
  196. package/lib/components/navigation/navscroll/navscroll-list-items.component.d.ts +7 -0
  197. package/lib/components/navigation/navscroll/navscroll.component.d.ts +47 -0
  198. package/{src/lib/components/navigation/navscroll/navscroll.model.ts → lib/components/navigation/navscroll/navscroll.model.d.ts} +5 -7
  199. package/lib/components/navigation/navscroll/navscroll.store.d.ts +16 -0
  200. package/lib/components/navigation/navscroll/navscroll.utils.d.ts +6 -0
  201. package/lib/components/navigation/sidebar/sidebar.component.d.ts +26 -0
  202. package/lib/components/navigation/skiplink/skiplink/skiplink.component.d.ts +17 -0
  203. package/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.d.ts +24 -0
  204. package/lib/components/navigation/skiplink/skiplink.module.d.ts +8 -0
  205. package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
  206. package/lib/components/utils/icon/icon.component.d.ts +53 -0
  207. package/lib/components/utils/language-switcher/language-switcher.component.d.ts +27 -0
  208. package/lib/design-angular-kit.module.d.ts +53 -0
  209. package/lib/enums/colors.enums.d.ts +10 -0
  210. package/lib/enums/sizes.enum.d.ts +7 -0
  211. package/{src/lib/interfaces/core.ts → lib/interfaces/core.d.ts} +53 -95
  212. package/lib/interfaces/design-angular-kit-config.d.ts +30 -0
  213. package/lib/interfaces/form.d.ts +67 -0
  214. package/lib/interfaces/icon.d.ts +4 -0
  215. package/lib/interfaces/sortable-table.d.ts +33 -0
  216. package/lib/interfaces/utils.d.ts +10 -0
  217. package/lib/pipes/date-ago.pipe.d.ts +17 -0
  218. package/lib/pipes/duration.pipe.d.ts +35 -0
  219. package/lib/pipes/mark-matching-text.pipe.d.ts +18 -0
  220. package/lib/provide-design-angular-kit.d.ts +7 -0
  221. package/lib/services/notification/notification.service.d.ts +63 -0
  222. package/{src/lib/utils/coercion.ts → lib/utils/coercion.d.ts} +1 -7
  223. package/lib/utils/date-utils.d.ts +79 -0
  224. package/lib/utils/file-utils.d.ts +32 -0
  225. package/lib/utils/regex.d.ts +34 -0
  226. package/lib/validators/it-validators.d.ts +69 -0
  227. package/package.json +14 -9
  228. package/{src/public_api.ts → public_api.d.ts} +0 -43
  229. package/schematics/ng-add/index.d.ts +3 -0
  230. package/schematics/ng-add/index.js +29 -0
  231. package/schematics/ng-add/index.js.map +1 -0
  232. package/schematics/ng-add/index.spec.d.ts +1 -0
  233. package/schematics/ng-add/index.spec.js +43 -0
  234. package/schematics/ng-add/index.spec.js.map +1 -0
  235. package/schematics/ng-add/rules/setup-project/add-animations.d.ts +2 -0
  236. package/schematics/ng-add/rules/setup-project/add-animations.js +11 -0
  237. package/schematics/ng-add/rules/setup-project/add-animations.js.map +1 -0
  238. package/schematics/ng-add/rules/setup-project/add-assets.d.ts +3 -0
  239. package/schematics/ng-add/rules/setup-project/add-assets.js +50 -0
  240. package/schematics/ng-add/rules/setup-project/add-assets.js.map +1 -0
  241. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.d.ts +3 -0
  242. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js +43 -0
  243. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js.map +1 -0
  244. package/schematics/ng-add/rules/setup-project/add-http-client.d.ts +2 -0
  245. package/schematics/ng-add/rules/setup-project/add-http-client.js +11 -0
  246. package/schematics/ng-add/rules/setup-project/add-http-client.js.map +1 -0
  247. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.d.ts +11 -0
  248. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js +112 -0
  249. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js.map +1 -0
  250. package/schematics/ng-add/rules/setup-project/add-localisation.d.ts +3 -0
  251. package/schematics/ng-add/rules/setup-project/add-localisation.js +50 -0
  252. package/schematics/ng-add/rules/setup-project/add-localisation.js.map +1 -0
  253. package/schematics/ng-add/rules/setup-project/angular-json-helper.d.ts +2 -0
  254. package/schematics/ng-add/rules/setup-project/angular-json-helper.js +13 -0
  255. package/schematics/ng-add/rules/setup-project/angular-json-helper.js.map +1 -0
  256. package/schematics/ng-add/rules/setup-project/exceptions.d.ts +7 -0
  257. package/schematics/ng-add/rules/setup-project/exceptions.js +17 -0
  258. package/schematics/ng-add/rules/setup-project/exceptions.js.map +1 -0
  259. package/schematics/ng-add/rules/setup-project/index.js +23 -0
  260. package/schematics/ng-add/rules/setup-project/index.js.map +1 -0
  261. package/schematics/ng-add/{schema.ts → schema.d.ts} +1 -1
  262. package/schematics/ng-add/schema.js +3 -0
  263. package/schematics/ng-add/schema.js.map +1 -0
  264. package/schematics/ng-add/setup-project.d.ts +3 -0
  265. package/schematics/ng-add/setup-project.js +37 -0
  266. package/schematics/ng-add/setup-project.js.map +1 -0
  267. package/schematics/ng-add/setup-project.spec.d.ts +1 -0
  268. package/schematics/ng-add/setup-project.spec.js +139 -0
  269. package/schematics/ng-add/setup-project.spec.js.map +1 -0
  270. package/schematics/ng-add/utils.d.ts +14 -0
  271. package/schematics/ng-add/utils.js +49 -0
  272. package/schematics/ng-add/utils.js.map +1 -0
  273. package/schematics/ng-add/versions-helper.d.ts +3 -0
  274. package/schematics/ng-add/versions-helper.js +40 -0
  275. package/schematics/ng-add/versions-helper.js.map +1 -0
  276. package/.eslintrc.json +0 -31
  277. package/karma.conf.js +0 -38
  278. package/ng-package.json +0 -9
  279. package/ng-package.prod.json +0 -8
  280. package/schematics/ng-add/index.spec.ts +0 -45
  281. package/schematics/ng-add/index.ts +0 -36
  282. package/schematics/ng-add/rules/setup-project/add-animations.ts +0 -7
  283. package/schematics/ng-add/rules/setup-project/add-assets.ts +0 -45
  284. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.ts +0 -40
  285. package/schematics/ng-add/rules/setup-project/add-http-client.ts +0 -7
  286. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.ts +0 -120
  287. package/schematics/ng-add/rules/setup-project/add-localisation.ts +0 -45
  288. package/schematics/ng-add/rules/setup-project/angular-json-helper.ts +0 -11
  289. package/schematics/ng-add/rules/setup-project/exceptions.ts +0 -13
  290. package/schematics/ng-add/setup-project.spec.ts +0 -166
  291. package/schematics/ng-add/setup-project.ts +0 -31
  292. package/schematics/ng-add/utils.ts +0 -71
  293. package/schematics/ng-add/versions-helper.ts +0 -41
  294. package/src/lib/abstracts/abstract-form.component.ts +0 -200
  295. package/src/lib/abstracts/abstract.component.ts +0 -63
  296. package/src/lib/components/core/accordion/accordion.component.html +0 -27
  297. package/src/lib/components/core/accordion/accordion.component.spec.ts +0 -21
  298. package/src/lib/components/core/accordion/accordion.component.ts +0 -40
  299. package/src/lib/components/core/alert/alert.component.html +0 -19
  300. package/src/lib/components/core/alert/alert.component.scss +0 -3
  301. package/src/lib/components/core/alert/alert.component.spec.ts +0 -62
  302. package/src/lib/components/core/alert/alert.component.ts +0 -75
  303. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.html +0 -23
  304. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.scss +0 -17
  305. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.spec.ts +0 -21
  306. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.ts +0 -50
  307. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.html +0 -7
  308. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.spec.ts +0 -38
  309. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.ts +0 -25
  310. package/src/lib/components/core/avatar/avatar.directive.ts +0 -73
  311. package/src/lib/components/core/avatar/avatar.module.ts +0 -18
  312. package/src/lib/components/core/badge/badge.directive.spec.ts +0 -59
  313. package/src/lib/components/core/badge/badge.directive.ts +0 -39
  314. package/src/lib/components/core/button/button.directive.spec.ts +0 -96
  315. package/src/lib/components/core/button/button.directive.ts +0 -89
  316. package/src/lib/components/core/callout/callout.component.html +0 -25
  317. package/src/lib/components/core/callout/callout.component.spec.ts +0 -138
  318. package/src/lib/components/core/callout/callout.component.ts +0 -92
  319. package/src/lib/components/core/card/card.component.html +0 -35
  320. package/src/lib/components/core/card/card.component.scss +0 -30
  321. package/src/lib/components/core/card/card.component.spec.ts +0 -21
  322. package/src/lib/components/core/card/card.component.ts +0 -78
  323. package/src/lib/components/core/carousel/carousel/carousel.component.html +0 -29
  324. package/src/lib/components/core/carousel/carousel/carousel.component.scss +0 -1
  325. package/src/lib/components/core/carousel/carousel/carousel.component.spec.ts +0 -21
  326. package/src/lib/components/core/carousel/carousel/carousel.component.ts +0 -119
  327. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.html +0 -3
  328. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.spec.ts +0 -22
  329. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.ts +0 -20
  330. package/src/lib/components/core/carousel/carousel.module.ts +0 -11
  331. package/src/lib/components/core/chip/chip.component.html +0 -26
  332. package/src/lib/components/core/chip/chip.component.spec.ts +0 -87
  333. package/src/lib/components/core/chip/chip.component.ts +0 -154
  334. package/src/lib/components/core/collapse/collapse.component.html +0 -3
  335. package/src/lib/components/core/collapse/collapse.component.spec.ts +0 -21
  336. package/src/lib/components/core/collapse/collapse.component.ts +0 -124
  337. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.html +0 -3
  338. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.spec.ts +0 -35
  339. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.ts +0 -23
  340. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.html +0 -3
  341. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.spec.ts +0 -22
  342. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.ts +0 -10
  343. package/src/lib/components/core/dimmer/dimmer.component.html +0 -7
  344. package/src/lib/components/core/dimmer/dimmer.component.spec.ts +0 -49
  345. package/src/lib/components/core/dimmer/dimmer.component.ts +0 -50
  346. package/src/lib/components/core/dimmer/dimmer.module.ts +0 -12
  347. package/src/lib/components/core/dropdown/dropdown/dropdown.component.html +0 -45
  348. package/src/lib/components/core/dropdown/dropdown/dropdown.component.scss +0 -3
  349. package/src/lib/components/core/dropdown/dropdown/dropdown.component.spec.ts +0 -21
  350. package/src/lib/components/core/dropdown/dropdown/dropdown.component.ts +0 -186
  351. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.html +0 -18
  352. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.scss +0 -4
  353. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.spec.ts +0 -21
  354. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.ts +0 -82
  355. package/src/lib/components/core/dropdown/dropdown.module.ts +0 -11
  356. package/src/lib/components/core/forward/forward.directive.spec.ts +0 -60
  357. package/src/lib/components/core/forward/forward.directive.ts +0 -43
  358. package/src/lib/components/core/link/link.component.html +0 -13
  359. package/src/lib/components/core/link/link.component.spec.ts +0 -21
  360. package/src/lib/components/core/link/link.component.ts +0 -54
  361. package/src/lib/components/core/list/list/list.component.html +0 -13
  362. package/src/lib/components/core/list/list/list.component.spec.ts +0 -21
  363. package/src/lib/components/core/list/list/list.component.ts +0 -30
  364. package/src/lib/components/core/list/list-item/list-item.component.html +0 -42
  365. package/src/lib/components/core/list/list-item/list-item.component.scss +0 -16
  366. package/src/lib/components/core/list/list-item/list-item.component.spec.ts +0 -21
  367. package/src/lib/components/core/list/list-item/list-item.component.ts +0 -75
  368. package/src/lib/components/core/list/list.module.ts +0 -11
  369. package/src/lib/components/core/modal/modal.component.html +0 -36
  370. package/src/lib/components/core/modal/modal.component.scss +0 -3
  371. package/src/lib/components/core/modal/modal.component.spec.ts +0 -21
  372. package/src/lib/components/core/modal/modal.component.ts +0 -218
  373. package/src/lib/components/core/notifications/notifications.component.html +0 -25
  374. package/src/lib/components/core/notifications/notifications.component.scss +0 -3
  375. package/src/lib/components/core/notifications/notifications.component.spec.ts +0 -21
  376. package/src/lib/components/core/notifications/notifications.component.ts +0 -123
  377. package/src/lib/components/core/pagination/pagination.component.html +0 -107
  378. package/src/lib/components/core/pagination/pagination.component.spec.ts +0 -21
  379. package/src/lib/components/core/pagination/pagination.component.ts +0 -157
  380. package/src/lib/components/core/popover/popover.directive.spec.ts +0 -21
  381. package/src/lib/components/core/popover/popover.directive.ts +0 -171
  382. package/src/lib/components/core/progress-bar/progress-bar.component.html +0 -20
  383. package/src/lib/components/core/progress-bar/progress-bar.component.spec.ts +0 -21
  384. package/src/lib/components/core/progress-bar/progress-bar.component.ts +0 -46
  385. package/src/lib/components/core/progress-button/progress-button.component.html +0 -5
  386. package/src/lib/components/core/progress-button/progress-button.component.spec.ts +0 -21
  387. package/src/lib/components/core/progress-button/progress-button.component.ts +0 -39
  388. package/src/lib/components/core/spinner/spinner.component.html +0 -7
  389. package/src/lib/components/core/spinner/spinner.component.spec.ts +0 -80
  390. package/src/lib/components/core/spinner/spinner.component.ts +0 -31
  391. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.html +0 -126
  392. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.spec.ts +0 -21
  393. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.ts +0 -185
  394. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.html +0 -3
  395. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.spec.ts +0 -22
  396. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.ts +0 -33
  397. package/src/lib/components/core/steppers/steppers.module.ts +0 -11
  398. package/src/lib/components/core/tab/tab-container/tab-container.component.html +0 -78
  399. package/src/lib/components/core/tab/tab-container/tab-container.component.spec.ts +0 -21
  400. package/src/lib/components/core/tab/tab-container/tab-container.component.ts +0 -137
  401. package/src/lib/components/core/tab/tab-item/tab-item.component.html +0 -3
  402. package/src/lib/components/core/tab/tab-item/tab-item.component.spec.ts +0 -22
  403. package/src/lib/components/core/tab/tab-item/tab-item.component.ts +0 -50
  404. package/src/lib/components/core/tab/tab.module.ts +0 -11
  405. package/src/lib/components/core/table/sort/sort-header/sort-header.component.html +0 -27
  406. package/src/lib/components/core/table/sort/sort-header/sort-header.component.scss +0 -65
  407. package/src/lib/components/core/table/sort/sort-header/sort-header.component.spec.ts +0 -25
  408. package/src/lib/components/core/table/sort/sort-header/sort-header.component.ts +0 -164
  409. package/src/lib/components/core/table/sort/sort.directive.spec.ts +0 -73
  410. package/src/lib/components/core/table/sort/sort.directive.ts +0 -142
  411. package/src/lib/components/core/table/table.component.html +0 -23
  412. package/src/lib/components/core/table/table.component.scss +0 -7
  413. package/src/lib/components/core/table/table.component.spec.ts +0 -21
  414. package/src/lib/components/core/table/table.component.ts +0 -70
  415. package/src/lib/components/core/table/table.module.ts +0 -12
  416. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.html +0 -47
  417. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.spec.ts +0 -24
  418. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.ts +0 -102
  419. package/src/lib/components/core/timeline/timeline.component.html +0 -21
  420. package/src/lib/components/core/timeline/timeline.component.spec.ts +0 -21
  421. package/src/lib/components/core/timeline/timeline.component.ts +0 -31
  422. package/src/lib/components/core/timeline/timeline.module.ts +0 -11
  423. package/src/lib/components/core/tooltip/tooltip.directive.spec.ts +0 -20
  424. package/src/lib/components/core/tooltip/tooltip.directive.ts +0 -141
  425. package/src/lib/components/form/autocomplete/autocomplete.component.html +0 -58
  426. package/src/lib/components/form/autocomplete/autocomplete.component.spec.ts +0 -21
  427. package/src/lib/components/form/autocomplete/autocomplete.component.ts +0 -130
  428. package/src/lib/components/form/checkbox/checkbox.component.html +0 -67
  429. package/src/lib/components/form/checkbox/checkbox.component.spec.ts +0 -21
  430. package/src/lib/components/form/checkbox/checkbox.component.ts +0 -65
  431. package/src/lib/components/form/form.module.ts +0 -34
  432. package/src/lib/components/form/input/input.component.html +0 -92
  433. package/src/lib/components/form/input/input.component.scss +0 -29
  434. package/src/lib/components/form/input/input.component.spec.ts +0 -21
  435. package/src/lib/components/form/input/input.component.ts +0 -234
  436. package/src/lib/components/form/password-input/password-input.component.html +0 -65
  437. package/src/lib/components/form/password-input/password-input.component.scss +0 -9
  438. package/src/lib/components/form/password-input/password-input.component.spec.ts +0 -21
  439. package/src/lib/components/form/password-input/password-input.component.ts +0 -171
  440. package/src/lib/components/form/radio-button/radio-button.component.html +0 -50
  441. package/src/lib/components/form/radio-button/radio-button.component.scss +0 -14
  442. package/src/lib/components/form/radio-button/radio-button.component.spec.ts +0 -21
  443. package/src/lib/components/form/radio-button/radio-button.component.ts +0 -82
  444. package/src/lib/components/form/range/range.component.html +0 -17
  445. package/src/lib/components/form/range/range.component.scss +0 -17
  446. package/src/lib/components/form/range/range.component.spec.ts +0 -21
  447. package/src/lib/components/form/range/range.component.ts +0 -100
  448. package/src/lib/components/form/rating/rating.component.html +0 -24
  449. package/src/lib/components/form/rating/rating.component.spec.ts +0 -21
  450. package/src/lib/components/form/rating/rating.component.ts +0 -52
  451. package/src/lib/components/form/select/select.component.html +0 -54
  452. package/src/lib/components/form/select/select.component.scss +0 -3
  453. package/src/lib/components/form/select/select.component.spec.ts +0 -22
  454. package/src/lib/components/form/select/select.component.ts +0 -91
  455. package/src/lib/components/form/textarea/textarea.component.html +0 -28
  456. package/src/lib/components/form/textarea/textarea.component.scss +0 -12
  457. package/src/lib/components/form/textarea/textarea.component.spec.ts +0 -21
  458. package/src/lib/components/form/textarea/textarea.component.ts +0 -61
  459. package/src/lib/components/form/transfer/store/transfer.reducers.ts +0 -242
  460. package/src/lib/components/form/transfer/store/transfer.state.ts +0 -20
  461. package/src/lib/components/form/transfer/store/transfer.store.ts +0 -88
  462. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.html +0 -42
  463. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.spec.ts +0 -33
  464. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.ts +0 -93
  465. package/src/lib/components/form/transfer/transfer.component.html +0 -52
  466. package/src/lib/components/form/transfer/transfer.component.spec.ts +0 -27
  467. package/src/lib/components/form/transfer/transfer.component.ts +0 -159
  468. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.html +0 -36
  469. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.spec.ts +0 -21
  470. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.ts +0 -170
  471. package/src/lib/components/form/upload-file-list/upload-file-list.component.html +0 -46
  472. package/src/lib/components/form/upload-file-list/upload-file-list.component.spec.ts +0 -22
  473. package/src/lib/components/form/upload-file-list/upload-file-list.component.ts +0 -120
  474. package/src/lib/components/navigation/back-button/back-button.component.html +0 -25
  475. package/src/lib/components/navigation/back-button/back-button.component.spec.ts +0 -91
  476. package/src/lib/components/navigation/back-button/back-button.component.ts +0 -67
  477. package/src/lib/components/navigation/back-to-top/back-to-top.component.html +0 -11
  478. package/src/lib/components/navigation/back-to-top/back-to-top.component.spec.ts +0 -21
  479. package/src/lib/components/navigation/back-to-top/back-to-top.component.ts +0 -80
  480. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.html +0 -23
  481. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.spec.ts +0 -21
  482. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.ts +0 -68
  483. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.html +0 -3
  484. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.spec.ts +0 -22
  485. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.ts +0 -29
  486. package/src/lib/components/navigation/breadcrumbs/breadcrumbs.module.ts +0 -11
  487. package/src/lib/components/navigation/header/header.component.html +0 -102
  488. package/src/lib/components/navigation/header/header.component.scss +0 -3
  489. package/src/lib/components/navigation/header/header.component.spec.ts +0 -21
  490. package/src/lib/components/navigation/header/header.component.ts +0 -107
  491. package/src/lib/components/navigation/megamenu/megamenu.component.html +0 -34
  492. package/src/lib/components/navigation/megamenu/megamenu.component.scss +0 -5
  493. package/src/lib/components/navigation/megamenu/megamenu.component.ts +0 -30
  494. package/src/lib/components/navigation/navbar/navbar/navbar.component.html +0 -28
  495. package/src/lib/components/navigation/navbar/navbar/navbar.component.ts +0 -45
  496. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.html +0 -3
  497. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.ts +0 -10
  498. package/src/lib/components/navigation/navbar/navbar.module.ts +0 -11
  499. package/src/lib/components/navigation/navscroll/navscroll-list-item.component.ts +0 -95
  500. package/src/lib/components/navigation/navscroll/navscroll-list-items.component.ts +0 -27
  501. package/src/lib/components/navigation/navscroll/navscroll.component.html +0 -101
  502. package/src/lib/components/navigation/navscroll/navscroll.component.scss +0 -9
  503. package/src/lib/components/navigation/navscroll/navscroll.component.ts +0 -143
  504. package/src/lib/components/navigation/navscroll/navscroll.store.ts +0 -96
  505. package/src/lib/components/navigation/navscroll/navscroll.utils.ts +0 -28
  506. package/src/lib/components/navigation/sidebar/sidebar.component.html +0 -11
  507. package/src/lib/components/navigation/sidebar/sidebar.component.spec.ts +0 -21
  508. package/src/lib/components/navigation/sidebar/sidebar.component.ts +0 -39
  509. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.html +0 -15
  510. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.ts +0 -27
  511. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.html +0 -15
  512. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.ts +0 -38
  513. package/src/lib/components/navigation/skiplink/skiplink.module.ts +0 -11
  514. package/src/lib/components/utils/error-page/error-page.component.html +0 -33
  515. package/src/lib/components/utils/error-page/error-page.component.spec.ts +0 -21
  516. package/src/lib/components/utils/error-page/error-page.component.ts +0 -79
  517. package/src/lib/components/utils/icon/icon.component.html +0 -6
  518. package/src/lib/components/utils/icon/icon.component.spec.ts +0 -21
  519. package/src/lib/components/utils/icon/icon.component.ts +0 -95
  520. package/src/lib/components/utils/language-switcher/language-switcher.component.html +0 -21
  521. package/src/lib/components/utils/language-switcher/language-switcher.component.spec.ts +0 -21
  522. package/src/lib/components/utils/language-switcher/language-switcher.component.ts +0 -56
  523. package/src/lib/design-angular-kit.module.ts +0 -131
  524. package/src/lib/enums/colors.enums.ts +0 -10
  525. package/src/lib/enums/sizes.enum.ts +0 -7
  526. package/src/lib/interfaces/design-angular-kit-config.ts +0 -34
  527. package/src/lib/interfaces/form.ts +0 -78
  528. package/src/lib/interfaces/icon.ts +0 -176
  529. package/src/lib/interfaces/sortable-table.ts +0 -42
  530. package/src/lib/interfaces/utils.ts +0 -11
  531. package/src/lib/pipes/date-ago.pipe.ts +0 -57
  532. package/src/lib/pipes/duration.pipe.ts +0 -112
  533. package/src/lib/pipes/mark-matching-text.pipe.ts +0 -43
  534. package/src/lib/provide-design-angular-kit.ts +0 -73
  535. package/src/lib/services/notification/notification.service.spec.ts +0 -16
  536. package/src/lib/services/notification/notification.service.ts +0 -119
  537. package/src/lib/utils/date-utils.ts +0 -184
  538. package/src/lib/utils/file-utils.ts +0 -80
  539. package/src/lib/utils/regex.ts +0 -44
  540. package/src/lib/validators/it-validators.ts +0 -193
  541. package/src/test.ts +0 -26
  542. package/tsconfig.lib.json +0 -24
  543. package/tsconfig.lib.prod.json +0 -9
  544. package/tsconfig.schematics.json +0 -25
  545. package/tsconfig.spec.json +0 -9
  546. /package/schematics/ng-add/rules/setup-project/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,190 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { ItValidators } from '../../../validators/it-validators';
5
+ import { AsyncPipe } from '@angular/common';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import { inputToBoolean } from '../../../utils/coercion';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ import * as i2 from "@ngx-translate/core";
11
+ export class ItInputComponent extends ItAbstractFormComponent {
12
+ constructor() {
13
+ super(...arguments);
14
+ /**
15
+ * The input type
16
+ * @default text
17
+ */
18
+ this.type = 'text';
19
+ /**
20
+ * The input placeholder
21
+ */
22
+ this.placeholder = '';
23
+ /**
24
+ * The max date value [Used only in type = 'date']
25
+ * @default '9999-12-31'
26
+ * @example 'yyyy-mm-dd'
27
+ */
28
+ this.maxDate = '9999-12-31';
29
+ }
30
+ get isActiveLabel() {
31
+ const value = this.control.value;
32
+ if ((!!value && value !== 0) || value === 0 || !!this.placeholder) {
33
+ return true;
34
+ }
35
+ // if (this.type === 'number' && (!!this.currency || !!this.percentage)) {
36
+ // return true;
37
+ // }
38
+ return this.type === 'date' || this.type === 'time' || this.type === 'color';
39
+ }
40
+ /**
41
+ * Check is readonly field
42
+ */
43
+ get isReadonly() {
44
+ return this.readonly === 'plaintext' || !!this.readonly;
45
+ }
46
+ /**
47
+ * Return the invalid message string from TranslateService
48
+ */
49
+ get invalidMessage() {
50
+ if (this.hasError('min') && this.min) {
51
+ return this._translateService.get('it.errors.min-invalid', {
52
+ min: this.min,
53
+ });
54
+ }
55
+ if (this.hasError('max') && this.max) {
56
+ return this._translateService.get('it.errors.max-invalid', {
57
+ max: this.max,
58
+ });
59
+ }
60
+ if (this.hasError('minlength')) {
61
+ const error = this.getError('minlength');
62
+ return this._translateService.get('it.errors.min-length-invalid', {
63
+ min: error.requiredLength,
64
+ });
65
+ }
66
+ if (this.hasError('maxlength')) {
67
+ const error = this.getError('maxlength');
68
+ return this._translateService.get('it.errors.max-length-invalid', {
69
+ max: error.requiredLength,
70
+ });
71
+ }
72
+ if (this.hasError('email') || this.hasError('invalidEmail')) {
73
+ return this._translateService.get('it.errors.email-invalid');
74
+ }
75
+ if (this.hasError('invalidTel')) {
76
+ return this._translateService.get('it.errors.tel-invalid');
77
+ }
78
+ if (this.hasError('invalidUrl')) {
79
+ return this._translateService.get('it.errors.url-invalid');
80
+ }
81
+ if (this.hasError('invalidTaxCode')) {
82
+ return this._translateService.get('it.errors.tax-code-invalid');
83
+ }
84
+ if (this.hasError('invalidVatNumber')) {
85
+ return this._translateService.get('it.errors.vat-number-invalid');
86
+ }
87
+ if (this.hasError('invalidCap')) {
88
+ return this._translateService.get('it.errors.cap-invalid');
89
+ }
90
+ if (this.hasError('invalidIban')) {
91
+ return this._translateService.get('it.errors.iban-invalid');
92
+ }
93
+ if (this.hasError('invalidPlate')) {
94
+ return this._translateService.get('it.errors.plate-invalid');
95
+ }
96
+ if (this.hasError('invalidRegex')) {
97
+ return this._translateService.get('it.errors.regex-invalid');
98
+ }
99
+ if (this.hasError('pattern')) {
100
+ const error = this.getError('pattern');
101
+ return this._translateService.get('it.errors.pattern-invalid', {
102
+ pattern: error.requiredPattern,
103
+ });
104
+ }
105
+ return super.invalidMessage;
106
+ }
107
+ ngOnInit() {
108
+ super.ngOnInit();
109
+ const validators = [];
110
+ switch (this.type) {
111
+ case 'number':
112
+ if (this.percentage) {
113
+ this.min = this.min || 0;
114
+ this.max = this.max || 100;
115
+ }
116
+ // Dynamic min/max validators
117
+ validators.push((control) => (this.min ? Validators.min(this.min)(control) : null));
118
+ validators.push((control) => (this.max ? Validators.max(this.max)(control) : null));
119
+ break;
120
+ case 'email':
121
+ validators.push(ItValidators.email);
122
+ break;
123
+ case 'tel':
124
+ validators.push(ItValidators.tel);
125
+ break;
126
+ case 'url':
127
+ validators.push(ItValidators.url);
128
+ break;
129
+ }
130
+ this.addValidators(validators);
131
+ }
132
+ /**
133
+ * Increment or decrease the input number value of step
134
+ * @param decrease true to decrease value
135
+ */
136
+ incrementNumber(decrease = false) {
137
+ if (this.type !== 'number') {
138
+ return;
139
+ }
140
+ const step = this.step === 'any' ? 1 : this.step ?? 1;
141
+ let value = Number(this.control.value);
142
+ value = (isNaN(value) ? 0 : value) + (decrease ? -step : step);
143
+ value = Math.round(value * 1e12) / 1e12; // prevent js decimal error
144
+ if (this.min !== undefined && value < this.min) {
145
+ value = this.min;
146
+ }
147
+ else if (this.max !== undefined && value > this.max) {
148
+ value = this.max;
149
+ }
150
+ this.control.setValue(value);
151
+ }
152
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
153
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItInputComponent, isStandalone: true, selector: "it-input", inputs: { type: "type", placeholder: "placeholder", description: "description", readonly: "readonly", maxDate: "maxDate", minDate: "minDate", max: "max", min: "min", step: "step", currency: ["currency", "currency", inputToBoolean], percentage: ["percentage", "percentage", inputToBoolean], symbol: "symbol", adaptive: ["adaptive", "adaptive", inputToBoolean], autocomplete: "autocomplete" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\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 @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\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 .align-buttons{height:100%}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItInputComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ standalone: true, selector: 'it-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, TranslateModule, AsyncPipe], template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\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 @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\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 .align-buttons{height:100%}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"] }]
158
+ }], propDecorators: { type: [{
159
+ type: Input
160
+ }], placeholder: [{
161
+ type: Input
162
+ }], description: [{
163
+ type: Input
164
+ }], readonly: [{
165
+ type: Input
166
+ }], maxDate: [{
167
+ type: Input
168
+ }], minDate: [{
169
+ type: Input
170
+ }], max: [{
171
+ type: Input
172
+ }], min: [{
173
+ type: Input
174
+ }], step: [{
175
+ type: Input
176
+ }], currency: [{
177
+ type: Input,
178
+ args: [{ transform: inputToBoolean }]
179
+ }], percentage: [{
180
+ type: Input,
181
+ args: [{ transform: inputToBoolean }]
182
+ }], symbol: [{
183
+ type: Input
184
+ }], adaptive: [{
185
+ type: Input,
186
+ args: [{ transform: inputToBoolean }]
187
+ }], autocomplete: [{
188
+ type: Input
189
+ }] } });
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQW1CLG1CQUFtQixFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQVV6RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsdUJBQTJEO0lBUmpHOztRQVNFOzs7V0FHRztRQUNNLFNBQUksR0FBcUIsTUFBTSxDQUFDO1FBRXpDOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFjMUI7Ozs7V0FJRztRQUNNLFlBQU8sR0FBWSxZQUFZLENBQUM7S0EwTDFDO0lBcklDLElBQUksYUFBYTtRQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtB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Z0I7a0JBUjVCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUM7OEJBT2pELElBQUk7c0JBQVosS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQU1nQyxRQUFRO3NCQUE3QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFNRSxVQUFVO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFNM0IsTUFBTTtzQkFBZCxLQUFLO2dCQU1nQyxRQUFRO3NCQUE3QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFNM0IsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0Q29udHJvbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2Zvcm0nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEl0VmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvcnMvaXQtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRJbnB1dENvbXBvbmVudCBleHRlbmRzIEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50PHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB0eXBlXG4gICAqIEBkZWZhdWx0IHRleHRcbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IElucHV0Q29udHJvbFR5cGUgPSAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwbGFjZWhvbGRlclxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGRlc2NyaXB0aW9uXG4gICAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUbyBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGFpbmVkIHZhbHVlLlxuICAgKiAtIDxiPnBsYWludGV4dDwvYj46IFJlYWRvbmx5IGZpZWxkIGluIHRoZSBmb3JtIHN0eWxpemVkIGFzIHBsYWluIHRleHRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiB8ICdwbGFpbnRleHQnIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4IGRhdGUgdmFsdWUgW1VzZWQgb25seSBpbiB0eXBlID0gJ2RhdGUnXVxuICAgKiBAZGVmYXVsdCAnOTk5OS0xMi0zMSdcbiAgICogQGV4YW1wbGUgJ3l5eXktbW0tZGQnXG4gICAqL1xuICBASW5wdXQoKSBtYXhEYXRlPzogc3RyaW5nID0gJzk5OTktMTItMzEnO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluIGRhdGUgdmFsdWUgW1VzZWQgb25seSBpbiB0eXBlID0gJ2RhdGUnXVxuICAgKiBAZXhhbXBsZSAneXl5eS1tbS1kZCdcbiAgICovXG4gIEBJbnB1dCgpIG1pbkRhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG1heCB2YWx1ZSBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICovXG4gIEBJbnB1dCgpIG1heDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluIHZhbHVlIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKi9cbiAgQElucHV0KCkgbWluOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwIHZhbHVlIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKi9cbiAgQElucHV0KCkgc3RlcDogbnVtYmVyIHwgJ2FueScgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIElmIGlzIGEgY3VycmVuY3kgbnVtYmVyIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBjdXJyZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGlzIGEgcGVyY2VudGFnZSBudW1iZXIgW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHBlcmNlbnRhZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVuY3kgb3IgcGVyY2VudGFnZSBzeW1ib2wgW1VzZWQgb25seSBpZiBwZXJjZW50YWdlIG9yIGN1cnJlbmN5XVxuICAgKiBAZXhhbXBsZSAnJCdcbiAgICovXG4gIEBJbnB1dCgpIHN5bWJvbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUbyBtYWtlIHRoZSBudW1lcmljIGZpZWxkIGF1dG9tYXRpY2FsbHkgcmVzaXplIGFjY29yZGluZyB0byB0aGUgdmFsdWUgY29udGFpbmVkIGluIGl0LiBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgYWRhcHRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBhdXRvY29tcGxldGUgYXR0cmlidXRlIChCcm93c2VyIGF1dG9jb21wbGV0ZSlcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBnZXQgaXNBY3RpdmVMYWJlbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcbiAgICBpZiAoKCEhdmFsdWUgJiYgdmFsdWUgIT09IDApIHx8IHZhbHVlID09PSAwIHx8ICEhdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgKHRoaXMudHlwZSA9PT0gJ251bWJlcicgJiYgKCEhdGhpcy5jdXJyZW5jeSB8fCAhIXRoaXMucGVyY2VudGFnZSkpIHtcbiAgICAvLyAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdkYXRlJyB8fCB0aGlzLnR5cGUgPT09ICd0aW1lJyB8fCB0aGlzLnR5cGUgPT09ICdjb2xvcic7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaXMgcmVhZG9ubHkgZmllbGRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSA9PT0gJ3BsYWludGV4dCcgfHwgISF0aGlzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW52YWxpZCBtZXNzYWdlIHN0cmluZyBmcm9tIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICovXG4gIG92ZXJyaWRlIGdldCBpbnZhbGlkTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtaW4nKSAmJiB0aGlzLm1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMubWluLWludmFsaWQnLCB7XG4gICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21heCcpICYmIHRoaXMubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5tYXgtaW52YWxpZCcsIHtcbiAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5nZXRFcnJvcignbWlubGVuZ3RoJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5taW4tbGVuZ3RoLWludmFsaWQnLCB7XG4gICAgICAgIG1pbjogZXJyb3IucmVxdWlyZWRMZW5ndGgsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21heGxlbmd0aCcpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ21heGxlbmd0aCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMubWF4LWxlbmd0aC1pbnZhbGlkJywge1xuICAgICAgICBtYXg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdlbWFpbCcpIHx8IHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRFbWFpbCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5lbWFpbC1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkVGVsJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnRlbC1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkVXJsJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnVybC1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkVGF4Q29kZScpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy50YXgtY29kZS1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkVmF0TnVtYmVyJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnZhdC1udW1iZXItaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaW52YWxpZENhcCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5jYXAtaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaW52YWxpZEliYW4nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMuaWJhbi1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkUGxhdGUnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGxhdGUtaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaW52YWxpZFJlZ2V4JykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnJlZ2V4LWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ3BhdHRlcm4nKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldEVycm9yKCdwYXR0ZXJuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXR0ZXJuLWludmFsaWQnLCB7XG4gICAgICAgIHBhdHRlcm46IGVycm9yLnJlcXVpcmVkUGF0dGVybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKHRoaXMucGVyY2VudGFnZSkge1xuICAgICAgICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgMDtcbiAgICAgICAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIER5bmFtaWMgbWluL21heCB2YWxpZGF0b3JzXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAodGhpcy5taW4gPyBWYWxpZGF0b3JzLm1pbih0aGlzLm1pbikoY29udHJvbCkgOiBudWxsKSk7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAodGhpcy5tYXggPyBWYWxpZGF0b3JzLm1heCh0aGlzLm1heCkoY29udHJvbCkgOiBudWxsKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goSXRWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZWwnOlxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goSXRWYWxpZGF0b3JzLnRlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy51cmwpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmFkZFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IG9yIGRlY3JlYXNlIHRoZSBpbnB1dCBudW1iZXIgdmFsdWUgb2Ygc3RlcFxuICAgKiBAcGFyYW0gZGVjcmVhc2UgdHJ1ZSB0byBkZWNyZWFzZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGluY3JlbWVudE51bWJlcihkZWNyZWFzZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuc3RlcCA9PT0gJ2FueScgPyAxIDogdGhpcy5zdGVwID8/IDE7XG4gICAgbGV0IHZhbHVlID0gTnVtYmVyKHRoaXMuY29udHJvbC52YWx1ZSk7XG4gICAgdmFsdWUgPSAoaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlKSArIChkZWNyZWFzZSA/IC1zdGVwIDogc3RlcCk7XG4gICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMWUxMikgLyAxZTEyOyAvLyBwcmV2ZW50IGpzIGRlY2ltYWwgZXJyb3JcblxuICAgIGlmICh0aGlzLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgfSBlbHNlIGlmICh0aGlzLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXBcIlxuICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29udHJvbC5lbmFibGVkXCJcbiAgICBbY2xhc3MuaW5wdXQtbnVtYmVyXT1cInR5cGUgPT09ICdudW1iZXInXCJcbiAgICBbY2xhc3MuaW5wdXQtbnVtYmVyLWN1cnJlbmN5XT1cImN1cnJlbmN5XCJcbiAgICBbY2xhc3MuaW5wdXQtbnVtYmVyLXBlcmNlbnRhZ2VdPVwicGVyY2VudGFnZVwiXG4gICAgW2NsYXNzLmlucHV0LW51bWJlci1hZGFwdGl2ZV09XCJhZGFwdGl2ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiICNwcmVwZW5kVGV4dD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcmVwZW5kVGV4dF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9zcGFuPlxuICAgIEBpZiAobGFiZWwpIHtcbiAgICAgIDxsYWJlbFxuICAgICAgICBbZm9yXT1cImlkXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZUxhYmVsXCJcbiAgICAgICAgW2NsYXNzLmlucHV0LXN5bWJvbC1sYWJlbF09XCJwZXJjZW50YWdlIHx8IGN1cnJlbmN5XCJcbiAgICAgICAgW2NsYXNzLmlucHV0LW51bWJlci1sYWJlbF09XCJ0eXBlID09PSAnbnVtYmVyJ1wiXG4gICAgICAgIFtjbGFzcy5lbXB0eS1wcmVwZW5kLWxhYmVsXT1cIiEocGVyY2VudGFnZSB8fCBjdXJyZW5jeSkgJiYgIXByZXBlbmRUZXh0LmNsaWVudFdpZHRoXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuICAgIH1cblxuICAgIEBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIEBpZiAoY3VycmVuY3kgfHwgcGVyY2VudGFnZSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZnctc2VtaWJvbGRcIj57eyBzeW1ib2wgfX08L3NwYW4+XG4gICAgICB9XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtzdGVwXT1cInN0ZXAgPz8gbnVsbFwiXG4gICAgICAgIFttaW5dPVwibWluID8/ICcnXCJcbiAgICAgICAgW21heF09XCJtYXggPz8gJydcIlxuICAgICAgICBbY2xhc3MuZm9ybS1jb250cm9sXT1cInJlYWRvbmx5ICE9PSAncGxhaW50ZXh0J1wiXG4gICAgICAgIFtjbGFzcy5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0XT1cInJlYWRvbmx5ID09PSAncGxhaW50ZXh0J1wiXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgIFtjbGFzcy5qdXN0LXZhbGlkYXRlLXN1Y2Nlc3MtZmllbGRdPVwiaXNWYWxpZFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiXG4gICAgICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgYWxpZ24tYnV0dG9ucyBmbGV4LWNvbHVtblwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlucHV0LW51bWJlci1hZGRcIiBbZGlzYWJsZWRdPVwiIWNvbnRyb2wuZW5hYmxlZFwiIChjbGljayk9XCJpbmNyZW1lbnROdW1iZXIoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgJ2l0LmZvcm0uaW5jcmVhc2UtdmFsdWUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJpbnB1dC1udW1iZXItc3ViXCIgW2Rpc2FibGVkXT1cIiFjb250cm9sLmVuYWJsZWRcIiAoY2xpY2spPVwiaW5jcmVtZW50TnVtYmVyKHRydWUpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQuZm9ybS5kZWNyZWFzZS12YWx1ZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGlucHV0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICBbbWF4XT1cInR5cGUgPT09ICdkYXRlJyA/IG1heERhdGUgOiB1bmRlZmluZWRcIlxuICAgICAgICBbbWluXT1cInR5cGUgPT09ICdkYXRlJyA/IG1pbkRhdGUgOiB1bmRlZmluZWRcIlxuICAgICAgICBbY2xhc3MuZm9ybS1jb250cm9sXT1cInJlYWRvbmx5ICE9PSAncGxhaW50ZXh0J1wiXG4gICAgICAgIFtjbGFzcy5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0XT1cInJlYWRvbmx5ID09PSAncGxhaW50ZXh0J1wiXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgIFtjbGFzcy5qdXN0LXZhbGlkYXRlLXN1Y2Nlc3MtZmllbGRdPVwiaXNWYWxpZFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiXG4gICAgICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiIC8+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FwcGVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthcHBlbmRUZXh0XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICBAaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgPHNtYWxsIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57eyBkZXNjcmlwdGlvbiB9fTwvc21hbGw+XG4gIH1cblxuICBAaWYgKGlzSW52YWxpZCkge1xuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgICAgPGRpdiAjY3VzdG9tRXJyb3I+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICB7eyBpbnZhbGlkTWVzc2FnZSB8IGFzeW5jIH19XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,149 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
2
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
+ import { ItValidators } from '../../../validators/it-validators';
4
+ import { map } from 'rxjs';
5
+ import { InputPassword } from 'bootstrap-italia';
6
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
7
+ import { AsyncPipe } from '@angular/common';
8
+ import { ItIconComponent } from '../../utils/icon/icon.component';
9
+ import { TranslateModule } from '@ngx-translate/core';
10
+ import { inputToBoolean } from '../../../utils/coercion';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@ngx-translate/core";
14
+ export class ItPasswordInputComponent extends ItAbstractFormComponent {
15
+ constructor() {
16
+ super(...arguments);
17
+ /**
18
+ * The field is required
19
+ * @default true
20
+ */
21
+ this.required = true;
22
+ /**
23
+ * The password minimum length
24
+ * @default 10
25
+ */
26
+ this.minLength = 10;
27
+ /**
28
+ * The password must contain at least one number
29
+ * @default true
30
+ */
31
+ this.useNumber = true;
32
+ /**
33
+ * The password must contain at least one uppercase character
34
+ * @default true
35
+ */
36
+ this.useCapitalCase = true;
37
+ /**
38
+ * The password must contain at least one lowercase character
39
+ * @default true
40
+ */
41
+ this.useSmallCase = true;
42
+ /**
43
+ * The password must contain at least one special character
44
+ * @default true
45
+ */
46
+ this.useSpecialCharacters = true;
47
+ /**
48
+ * The input placeholder
49
+ */
50
+ this.placeholder = '';
51
+ }
52
+ ngOnInit() {
53
+ super.ngOnInit();
54
+ if (!this.confirmPasswordField) {
55
+ this.addValidators(ItValidators.password(this.minLength, this.useNumber, this.useCapitalCase, this.useSmallCase, this.useSpecialCharacters, this.required));
56
+ }
57
+ else if (this.required) {
58
+ this.addValidators(Validators.required);
59
+ }
60
+ }
61
+ ngAfterViewInit() {
62
+ super.ngAfterViewInit();
63
+ if (this.inputElement) {
64
+ this.inputPasswordBs = InputPassword.getOrCreateInstance(this.inputElement.nativeElement, {
65
+ showText: this.isStrengthMeter,
66
+ minimumLength: this.minLength,
67
+ });
68
+ }
69
+ }
70
+ get isStrengthMeter() {
71
+ return !this.confirmPasswordField && !!this.showStrengthMeter;
72
+ }
73
+ /**
74
+ * Return the invalid message string from TranslateService
75
+ */
76
+ get invalidMessage() {
77
+ if (this.hasError('noPasswordMatch')) {
78
+ return this._translateService.get('it.errors.password-no-match');
79
+ }
80
+ if (this.hasError('minlength')) {
81
+ return this._translateService.get('it.errors.password-min-length', {
82
+ minLength: this.minLength,
83
+ });
84
+ }
85
+ if (this.hasError('hasNumber')) {
86
+ return this._translateService.get('it.errors.password-number');
87
+ }
88
+ if (this.hasError('hasCapitalCase')) {
89
+ return this._translateService.get('it.errors.password-capital-case');
90
+ }
91
+ if (this.hasError('hasSmallCase')) {
92
+ return this._translateService.get('it.errors.password-capital-case');
93
+ }
94
+ if (this.hasError('hasSpecialCharacters')) {
95
+ return this._translateService.get('it.errors.password-special-character');
96
+ }
97
+ return super.invalidMessage;
98
+ }
99
+ /**
100
+ * Retrieve the default StrengthMeter description message from TranslateService
101
+ */
102
+ get strengthMeterDescription() {
103
+ const keys = ['it.form.password-strength-meter.description.default'];
104
+ if (this.useNumber) {
105
+ keys.push('it.form.password-strength-meter.description.number');
106
+ }
107
+ if (this.useCapitalCase) {
108
+ keys.push('it.form.password-strength-meter.description.capital-case');
109
+ }
110
+ if (this.useSpecialCharacters) {
111
+ keys.push('it.form.password-strength-meter.description.special-character');
112
+ }
113
+ return this._translateService.get(keys, { minLength: this.minLength }).pipe(map(labels => Object.values(labels).join(', ')));
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItPasswordInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItPasswordInputComponent, isStandalone: true, selector: "it-password-input", inputs: { required: "required", minLength: "minLength", useNumber: "useNumber", useCapitalCase: "useCapitalCase", useSmallCase: "useSmallCase", useSpecialCharacters: "useSpecialCharacters", placeholder: "placeholder", description: "description", showStrengthMeter: ["showStrengthMeter", "showStrengthMeter", inputToBoolean], confirmPasswordField: ["confirmPasswordField", "confirmPasswordField", inputToBoolean], autocomplete: "autocomplete" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{ label }}</label>\n }\n <input\n #input\n [id]=\"id\"\n type=\"password\"\n class=\"form-control input-password\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [attr.aria-describedby]=\"id + '-description'\"\n [autocomplete]=\"confirmPasswordField ? 'off' : autocomplete\" />\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 @if (isInvalid) {\n <div [id]=\"id + '-error'\" class=\"form-feedback just-validate-error-label\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n\n @if (description !== undefined && !isStrengthMeter) {\n <small [id]=\"id + '-description'\" class=\"form-text\">\n {{ description !== true ? description : (strengthMeterDescription | async) }}\n </small>\n }\n\n <small class=\"password-caps form-text text-warning position-absolute bg-white w-100\">\n {{ 'it.form.caps-inserted' | translate }}\n </small>\n\n @if (isStrengthMeter) {\n <div class=\"password-strength-meter\">\n <small\n [id]=\"id + '-description'\"\n class=\"form-text text-muted\"\n [attr.data-bs-short-pass]=\"'it.form.password-strength-meter.password-short' | translate\"\n [attr.data-bs-bad-pas]=\"'it.form.password-strength-meter.password-bad' | translate\"\n [attr.data-bs-good-pass]=\"'it.form.password-strength-meter.password-good' | translate\"\n [attr.data-bs-strong-pass]=\"'it.form.password-strength-meter.password-strong' | translate\">\n {{ description !== undefined && description !== true ? description : (strengthMeterDescription | async) }}\n </small>\n <div class=\"password-meter progress rounded-0 position-absolute\">\n <div class=\"row position-absolute w-100 m-0\">\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n </div>\n <div class=\"progress-bar bg-muted\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n </div>\n }\n</div>\n", styles: [".form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItPasswordInputComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ standalone: true, selector: 'it-password-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, ItIconComponent, AsyncPipe, TranslateModule], template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{ label }}</label>\n }\n <input\n #input\n [id]=\"id\"\n type=\"password\"\n class=\"form-control input-password\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [attr.aria-describedby]=\"id + '-description'\"\n [autocomplete]=\"confirmPasswordField ? 'off' : autocomplete\" />\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 @if (isInvalid) {\n <div [id]=\"id + '-error'\" class=\"form-feedback just-validate-error-label\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n\n @if (description !== undefined && !isStrengthMeter) {\n <small [id]=\"id + '-description'\" class=\"form-text\">\n {{ description !== true ? description : (strengthMeterDescription | async) }}\n </small>\n }\n\n <small class=\"password-caps form-text text-warning position-absolute bg-white w-100\">\n {{ 'it.form.caps-inserted' | translate }}\n </small>\n\n @if (isStrengthMeter) {\n <div class=\"password-strength-meter\">\n <small\n [id]=\"id + '-description'\"\n class=\"form-text text-muted\"\n [attr.data-bs-short-pass]=\"'it.form.password-strength-meter.password-short' | translate\"\n [attr.data-bs-bad-pas]=\"'it.form.password-strength-meter.password-bad' | translate\"\n [attr.data-bs-good-pass]=\"'it.form.password-strength-meter.password-good' | translate\"\n [attr.data-bs-strong-pass]=\"'it.form.password-strength-meter.password-strong' | translate\">\n {{ description !== undefined && description !== true ? description : (strengthMeterDescription | async) }}\n </small>\n <div class=\"password-meter progress rounded-0 position-absolute\">\n <div class=\"row position-absolute w-100 m-0\">\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n <div class=\"col-3 border-start border-end border-white\"></div>\n </div>\n <div class=\"progress-bar bg-muted\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n </div>\n }\n</div>\n", styles: [".form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"] }]
121
+ }], propDecorators: { required: [{
122
+ type: Input
123
+ }], minLength: [{
124
+ type: Input
125
+ }], useNumber: [{
126
+ type: Input
127
+ }], useCapitalCase: [{
128
+ type: Input
129
+ }], useSmallCase: [{
130
+ type: Input
131
+ }], useSpecialCharacters: [{
132
+ type: Input
133
+ }], placeholder: [{
134
+ type: Input
135
+ }], description: [{
136
+ type: Input
137
+ }], showStrengthMeter: [{
138
+ type: Input,
139
+ args: [{ transform: inputToBoolean }]
140
+ }], confirmPasswordField: [{
141
+ type: Input,
142
+ args: [{ transform: inputToBoolean }]
143
+ }], autocomplete: [{
144
+ type: Input
145
+ }], inputElement: [{
146
+ type: ViewChild,
147
+ args: ['input']
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBVXpELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx1QkFBa0Q7SUFSaEc7O1FBU0U7OztXQUdHO1FBQ00sYUFBUSxHQUFZLElBQUksQ0FBQztRQUVsQzs7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SztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQVFHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTWdDLGlCQUFpQjtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsb0JBQW9CO3NCQUF6RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFNM0IsWUFBWTtzQkFBcEIsS0FBSztnQkFJc0IsWUFBWTtzQkFBdkMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3JzL2l0LXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnB1dFBhc3N3b3JkIH0gZnJvbSAnYm9vdHN0cmFwLWl0YWxpYSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEl0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtcGFzc3dvcmQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIEl0SWNvbkNvbXBvbmVudCwgQXN5bmNQaXBlLCBUcmFuc2xhdGVNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBJdFBhc3N3b3JkSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgaXMgcmVxdWlyZWRcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgbWluaW11bSBsZW5ndGhcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIEBJbnB1dCgpIG1pbkxlbmd0aDogbnVtYmVyID0gMTA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSB1c2VOdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgY2hhcmFjdGVyXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHVzZUNhcGl0YWxDYXNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGNoYXJhY3RlclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSB1c2VTbWFsbENhc2U6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBzcGVjaWFsIGNoYXJhY3RlclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSB1c2VTcGVjaWFsQ2hhcmFjdGVyczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwbGFjZWhvbGRlclxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZGVzY3JpcHRpb25cbiAgICogLSA8Yj50cnVlPC9iPjogc2hvdyB0aGUgU3RyZW5ndGhNZXRlciBkZXNjcmlwdGlvbiBtZXNzYWdlXG4gICAqIC0gPGI+c3RyaW5nPC9iPjogc2hvdyBjdXN0b20gZGVzY3JpcHRpb25cbiAgICogQGRlZmF1bHQgdHJ1ZSBmb3IgU3RyZW5ndGhNZXRlciBtb2RlIGVsc2UgaXMgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdHJ1ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRW5hYmxlIHRvIHNob3cgdGhlIHN0cmVuZ3RoIG1ldGVyXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNob3dTdHJlbmd0aE1ldGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXMgdGhlIGNvbmZpcm1hdGlvbiBwYXNzd29yZCBmaWVsZFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBjb25maXJtUGFzc3dvcmRGaWVsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElucHV0IGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgKEJyb3dzZXIgYXV0b2NvbXBsZXRlKVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW5wdXRQYXNzd29yZEJzPzogSW5wdXRQYXNzd29yZDtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIHByaXZhdGUgaW5wdXRFbGVtZW50PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpcm1QYXNzd29yZEZpZWxkKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRvcnMoXG4gICAgICAgIEl0VmFsaWRhdG9ycy5wYXNzd29yZChcbiAgICAgICAgICB0aGlzLm1pbkxlbmd0aCxcbiAgICAgICAgICB0aGlzLnVzZU51bWJlcixcbiAgICAgICAgICB0aGlzLnVzZUNhcGl0YWxDYXNlLFxuICAgICAgICAgIHRoaXMudXNlU21hbGxDYXNlLFxuICAgICAgICAgIHRoaXMudXNlU3BlY2lhbENoYXJhY3RlcnMsXG4gICAgICAgICAgdGhpcy5yZXF1aXJlZFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dFBhc3N3b3JkQnMgPSBJbnB1dFBhc3N3b3JkLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgICBzaG93VGV4dDogdGhpcy5pc1N0cmVuZ3RoTWV0ZXIsXG4gICAgICAgIG1pbmltdW1MZW5ndGg6IHRoaXMubWluTGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpc1N0cmVuZ3RoTWV0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNvbmZpcm1QYXNzd29yZEZpZWxkICYmICEhdGhpcy5zaG93U3RyZW5ndGhNZXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGludmFsaWQgbWVzc2FnZSBzdHJpbmcgZnJvbSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAqL1xuICBvdmVycmlkZSBnZXQgaW52YWxpZE1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5oYXNFcnJvcignbm9QYXNzd29yZE1hdGNoJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLW5vLW1hdGNoJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtbWluLWxlbmd0aCcsIHtcbiAgICAgICAgbWluTGVuZ3RoOiB0aGlzLm1pbkxlbmd0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzTnVtYmVyJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhc3N3b3JkLW51bWJlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignaGFzQ2FwaXRhbENhc2UnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtY2FwaXRhbC1jYXNlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdoYXNTbWFsbENhc2UnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucGFzc3dvcmQtY2FwaXRhbC1jYXNlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdoYXNTcGVjaWFsQ2hhcmFjdGVycycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5wYXNzd29yZC1zcGVjaWFsLWNoYXJhY3RlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZGVmYXVsdCBTdHJlbmd0aE1ldGVyIGRlc2NyaXB0aW9uIG1lc3NhZ2UgZnJvbSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHN0cmVuZ3RoTWV0ZXJEZXNjcmlwdGlvbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGtleXMgPSBbJ2l0LmZvcm0ucGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXIuZGVzY3JpcHRpb24uZGVmYXVsdCddO1xuICAgIGlmICh0aGlzLnVzZU51bWJlcikge1xuICAgICAga2V5cy5wdXNoKCdpdC5mb3JtLnBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyLmRlc2NyaXB0aW9uLm51bWJlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VDYXBpdGFsQ2FzZSkge1xuICAgICAga2V5cy5wdXNoKCdpdC5mb3JtLnBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyLmRlc2NyaXB0aW9uLmNhcGl0YWwtY2FzZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VTcGVjaWFsQ2hhcmFjdGVycykge1xuICAgICAga2V5cy5wdXNoKCdpdC5mb3JtLnBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyLmRlc2NyaXB0aW9uLnNwZWNpYWwtY2hhcmFjdGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KGtleXMsIHsgbWluTGVuZ3RoOiB0aGlzLm1pbkxlbmd0aCB9KS5waXBlKG1hcChsYWJlbHMgPT4gT2JqZWN0LnZhbHVlcyhsYWJlbHMpLmpvaW4oJywgJykpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgQGlmIChsYWJlbCkge1xuICAgIDxsYWJlbCBbZm9yXT1cImlkXCIgW2NsYXNzLmFjdGl2ZV09XCIhIWNvbnRyb2wudmFsdWUgfHwgISFwbGFjZWhvbGRlclwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgfVxuICA8aW5wdXRcbiAgICAjaW5wdXRcbiAgICBbaWRdPVwiaWRcIlxuICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtcGFzc3dvcmRcIlxuICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiXG4gICAgW2F1dG9jb21wbGV0ZV09XCJjb25maXJtUGFzc3dvcmRGaWVsZCA/ICdvZmYnIDogYXV0b2NvbXBsZXRlXCIgLz5cblxuICA8c3BhbiBjbGFzcz1cInBhc3N3b3JkLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8aXQtaWNvbiBuYW1lPVwicGFzc3dvcmQtdmlzaWJsZVwiIHNpemU9XCJzbVwiIGNsYXNzPVwicGFzc3dvcmQtaWNvbi12aXNpYmxlXCI+PC9pdC1pY29uPlxuICAgIDxpdC1pY29uIG5hbWU9XCJwYXNzd29yZC1pbnZpc2libGVcIiBzaXplPVwic21cIiBjbGFzcz1cInBhc3N3b3JkLWljb24taW52aXNpYmxlIGQtbm9uZVwiPjwvaXQtaWNvbj5cbiAgPC9zcGFuPlxuXG4gIEBpZiAoaXNJbnZhbGlkKSB7XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiIGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCI+XG4gICAgICA8ZGl2ICNjdXN0b21FcnJvcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Vycm9yXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmICghY3VzdG9tRXJyb3IuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIHt7IGludmFsaWRNZXNzYWdlIHwgYXN5bmMgfX1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiAhaXNTdHJlbmd0aE1ldGVyKSB7XG4gICAgPHNtYWxsIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj5cbiAgICAgIHt7IGRlc2NyaXB0aW9uICE9PSB0cnVlID8gZGVzY3JpcHRpb24gOiAoc3RyZW5ndGhNZXRlckRlc2NyaXB0aW9uIHwgYXN5bmMpIH19XG4gICAgPC9zbWFsbD5cbiAgfVxuXG4gIDxzbWFsbCBjbGFzcz1cInBhc3N3b3JkLWNhcHMgZm9ybS10ZXh0IHRleHQtd2FybmluZyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSB3LTEwMFwiPlxuICAgIHt7ICdpdC5mb3JtLmNhcHMtaW5zZXJ0ZWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvc21hbGw+XG5cbiAgQGlmIChpc1N0cmVuZ3RoTWV0ZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXJcIj5cbiAgICAgIDxzbWFsbFxuICAgICAgICBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiXG4gICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWRcIlxuICAgICAgICBbYXR0ci5kYXRhLWJzLXNob3J0LXBhc3NdPVwiJ2l0LmZvcm0ucGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXIucGFzc3dvcmQtc2hvcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1icy1iYWQtcGFzXT1cIidpdC5mb3JtLnBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyLnBhc3N3b3JkLWJhZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYXR0ci5kYXRhLWJzLWdvb2QtcGFzc109XCInaXQuZm9ybS5wYXNzd29yZC1zdHJlbmd0aC1tZXRlci5wYXNzd29yZC1nb29kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtYnMtc3Ryb25nLXBhc3NdPVwiJ2l0LmZvcm0ucGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXIucGFzc3dvcmQtc3Ryb25nJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICB7eyBkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIGRlc2NyaXB0aW9uICE9PSB0cnVlID8gZGVzY3JpcHRpb24gOiAoc3RyZW5ndGhNZXRlckRlc2NyaXB0aW9uIHwgYXN5bmMpIH19XG4gICAgICA8L3NtYWxsPlxuICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLW1ldGVyIHByb2dyZXNzIHJvdW5kZWQtMCBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHBvc2l0aW9uLWFic29sdXRlIHctMTAwIG0tMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBib3JkZXItc3RhcnQgYm9yZGVyLWVuZCBib3JkZXItd2hpdGVcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgYm9yZGVyLXN0YXJ0IGJvcmRlci1lbmQgYm9yZGVyLXdoaXRlXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGJvcmRlci1zdGFydCBib3JkZXItZW5kIGJvcmRlci13aGl0ZVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBib3JkZXItc3RhcnQgYm9yZGVyLWVuZCBib3JkZXItd2hpdGVcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgYmctbXV0ZWRcIiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBhcmlhLXZhbHVlbm93PVwiMFwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,60 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { AsyncPipe } from '@angular/common';
5
+ import { inputToBoolean } from '../../../utils/coercion';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ export class ItRadioButtonComponent extends ItAbstractFormComponent {
9
+ get name() {
10
+ if (this.forceRadioName) {
11
+ return this.forceRadioName;
12
+ }
13
+ let name = '';
14
+ if (this._ngControl) {
15
+ name = this._ngControl.name?.toString() || '';
16
+ // Retrieve parent name, prevent duplicate name inside FormArray or nested FormGroup
17
+ let control = this._ngControl.control?.parent;
18
+ while (control?.parent) {
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ const controls = control?.parent?.controls || {};
21
+ const parentName = Object.keys(controls).find(name => control === controls[name]) || null;
22
+ if (!parentName) {
23
+ break;
24
+ }
25
+ name = `${parentName}.${name}`; // parent.0.radioName
26
+ control = control.parent;
27
+ }
28
+ }
29
+ return name;
30
+ }
31
+ ngOnInit() {
32
+ super.ngOnInit();
33
+ if (this.control.value || !this.value || !this.checked) {
34
+ return;
35
+ }
36
+ this.writeValue(this.value);
37
+ return this.onChange(this.value);
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRadioButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItRadioButtonComponent, isStandalone: true, selector: "it-radio-button", inputs: { value: "value", inline: ["inline", "inline", inputToBoolean], group: ["group", "group", inputToBoolean], checked: ["checked", "checked", inputToBoolean], forceRadioName: "forceRadioName" }, usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div class=\"form-check\" [class.form-check-group]=\"group\" [class.form-check-inline]=\"inline\">\n <input\n [id]=\"id\"\n type=\"radio\"\n [value]=\"value\"\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 @if (!customLabel.hasChildNodes()) {\n {{ label }}\n }\n </label>\n\n @if (group) {\n <small [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n }\n\n @if (isInvalid && group) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n </div>\n\n @if (isInvalid && !group) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRadioButtonComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ standalone: true, selector: 'it-radio-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, AsyncPipe], template: "<ng-container>\n <div class=\"form-check\" [class.form-check-group]=\"group\" [class.form-check-inline]=\"inline\">\n <input\n [id]=\"id\"\n type=\"radio\"\n [value]=\"value\"\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 @if (!customLabel.hasChildNodes()) {\n {{ label }}\n }\n </label>\n\n @if (group) {\n <small [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n }\n\n @if (isInvalid && group) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n </div>\n\n @if (isInvalid && !group) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</ng-container>\n" }]
45
+ }], propDecorators: { value: [{
46
+ type: Input,
47
+ args: [{ required: true }]
48
+ }], inline: [{
49
+ type: Input,
50
+ args: [{ transform: inputToBoolean }]
51
+ }], group: [{
52
+ type: Input,
53
+ args: [{ transform: inputToBoolean }]
54
+ }], checked: [{
55
+ type: Input,
56
+ args: [{ transform: inputToBoolean }]
57
+ }], forceRadioName: [{
58
+ type: Input
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVV6RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsdUJBQTJEO0lBK0JyRyxJQUFJLElBQUk7UUFDTixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFFOUMsb0ZBQW9GO1lBQ3BGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM5QyxPQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsOERBQThEO2dCQUM5RCxNQUFNLFFBQVEsR0FBMkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN6RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEIsTUFBTTtnQkFDUixDQUFDO2dCQUNELElBQUksR0FBRyxHQUFHLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtnQkFDckQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQWxFVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwwR0FVYixjQUFjLDZCQU1kLGNBQWMsbUNBTWQsY0FBYyxzRkNwQ3BDLDg1Q0FrREEseUREdENZLG1CQUFtQix3eEJBQUUsU0FBUzs7MkZBRTdCLHNCQUFzQjtrQkFSbEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04saUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUM7OEJBTWQsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBTWEsTUFBTTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsS0FBSztzQkFBMUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsT0FBTztzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTzNCLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGlucHV0VG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdC1yYWRpby1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRSYWRpb0J1dHRvbkNvbXBvbmVudCBleHRlbmRzIEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50PHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSByYWRpbyB2YWx1ZVxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElmIHNob3cgcmFkaW8gaW5saW5lXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGlubGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGlzIHJhZGlvIGdyb3VwXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGdyb3VwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgaXMgcmFkaW8gaXMgY2hlY2tlZFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBjaGVja2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRoZSByYWRpbyBuYW1lIG1hbnVhbGx5LlxuICAgKiBGb3IgZXhhbXBsZSB3aGVuIHRoZSByYWRpbyBidXR0b24gbmFtZSBpcyBkdXBsaWNhdGVkIGluc2lkZSBwYWdlXG4gICAqIEBkZWZhdWx0IGJ5IGRlZmF1bHQgdGhlIHJhZGlvIG5hbWUgaXMgY2FsY3VsYXRlZCBmcm9tIGZvcm0gZmllbGQgbmFtZVxuICAgKi9cbiAgQElucHV0KCkgZm9yY2VSYWRpb05hbWU/OiBzdHJpbmc7XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mb3JjZVJhZGlvTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9yY2VSYWRpb05hbWU7XG4gICAgfVxuXG4gICAgbGV0IG5hbWUgPSAnJztcbiAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICBuYW1lID0gdGhpcy5fbmdDb250cm9sLm5hbWU/LnRvU3RyaW5nKCkgfHwgJyc7XG5cbiAgICAgIC8vIFJldHJpZXZlIHBhcmVudCBuYW1lLCBwcmV2ZW50IGR1cGxpY2F0ZSBuYW1lIGluc2lkZSBGb3JtQXJyYXkgb3IgbmVzdGVkIEZvcm1Hcm91cFxuICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbD8ucGFyZW50O1xuICAgICAgd2hpbGUgKGNvbnRyb2w/LnBhcmVudCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IGNvbnRyb2w/LnBhcmVudD8uY29udHJvbHMgfHwge307XG4gICAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBPYmplY3Qua2V5cyhjb250cm9scykuZmluZChuYW1lID0+IGNvbnRyb2wgPT09IGNvbnRyb2xzW25hbWVdKSB8fCBudWxsO1xuICAgICAgICBpZiAoIXBhcmVudE5hbWUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBuYW1lID0gYCR7cGFyZW50TmFtZX0uJHtuYW1lfWA7IC8vIHBhcmVudC4wLnJhZGlvTmFtZVxuICAgICAgICBjb250cm9sID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbC52YWx1ZSB8fCAhdGhpcy52YWx1ZSB8fCAhdGhpcy5jaGVja2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIFtjbGFzcy5mb3JtLWNoZWNrLWdyb3VwXT1cImdyb3VwXCIgW2NsYXNzLmZvcm0tY2hlY2staW5saW5lXT1cImlubGluZVwiPlxuICAgIDxpbnB1dFxuICAgICAgW2lkXT1cImlkXCJcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctaGVscCdcIiAvPlxuXG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiaWRcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUxhYmVsPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKCFjdXN0b21MYWJlbC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgIH1cbiAgICA8L2xhYmVsPlxuXG4gICAgQGlmIChncm91cCkge1xuICAgICAgPHNtYWxsIFtpZF09XCJpZCArICctaGVscCdcIiBjbGFzcz1cImZvcm0tdGV4dFwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L3NtYWxsPlxuICAgIH1cblxuICAgIEBpZiAoaXNJbnZhbGlkICYmIGdyb3VwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICAgICAgPGRpdiAjY3VzdG9tRXJyb3I+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Vycm9yXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIHt7IGludmFsaWRNZXNzYWdlIHwgYXN5bmMgfX1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKGlzSW52YWxpZCAmJiAhZ3JvdXApIHtcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUVycm9yPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZXJyb3JdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKCFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAge3sgaW52YWxpZE1lc3NhZ2UgfCBhc3luYyB9fVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
2
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { distinctUntilChanged, startWith } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ export class ItRangeComponent extends ItAbstractFormComponent {
8
+ ngOnInit() {
9
+ super.ngOnInit();
10
+ this.subscription = this.control.valueChanges
11
+ .pipe(distinctUntilChanged(), startWith(undefined))
12
+ .subscribe(() => this.updateSliderColor());
13
+ }
14
+ ngOnChanges(changes) {
15
+ if (changes['leftColor']) {
16
+ this.slider.nativeElement.style.setProperty('--range-left-color', this.leftColor ?? null);
17
+ }
18
+ if (changes['rightColor']) {
19
+ this.slider.nativeElement.style.setProperty('--range-right-color', this.rightColor ?? null);
20
+ }
21
+ }
22
+ ngOnDestroy() {
23
+ this.subscription?.unsubscribe();
24
+ }
25
+ writeValue(value) {
26
+ super.writeValue(value);
27
+ this.updateSliderColor();
28
+ }
29
+ /**
30
+ * Update the percentage of slider color
31
+ * @private
32
+ */
33
+ updateSliderColor() {
34
+ if (!this.leftColor || !this.rightColor) {
35
+ return;
36
+ }
37
+ const max = Number(this.slider.nativeElement.max) || 100;
38
+ const min = Number(this.slider.nativeElement.min) || 0;
39
+ // Calculate visible width
40
+ const diff = max - min;
41
+ const val = (((this.control.value ?? diff / 2) - min) * 100) / diff;
42
+ this.slider.nativeElement.style.setProperty('--range-percentage', `${val}%`);
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItRangeComponent, isStandalone: true, selector: "it-range", inputs: { max: "max", min: "min", step: "step", leftColor: "leftColor", rightColor: "rightColor" }, viewQueries: [{ propertyName: "slider", first: true, predicate: ["slider"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\">{{ label }}</label>\n }\n <ng-content></ng-content>\n</div>\n\n<input\n #slider\n [id]=\"id\"\n type=\"range\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n class=\"form-range\"\n [class.double-color]=\"!!leftColor && !!rightColor\"\n [formControl]=\"control\" />\n", styles: [".form-range.double-color::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--range-left-color) var(--range-percentage),var(--range-right-color) var(--range-percentage))}.form-range.double-color::-moz-range-track{background:linear-gradient(to right,var(--range-left-color) var(--range-percentage),var(--range-right-color) var(--range-percentage))}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRangeComponent, decorators: [{
48
+ type: Component,
49
+ args: [{ selector: 'it-range', standalone: true, imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"d-flex justify-content-between align-items-center\">\n @if (label) {\n <label [for]=\"id\" class=\"form-label\">{{ label }}</label>\n }\n <ng-content></ng-content>\n</div>\n\n<input\n #slider\n [id]=\"id\"\n type=\"range\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n class=\"form-range\"\n [class.double-color]=\"!!leftColor && !!rightColor\"\n [formControl]=\"control\" />\n", styles: [".form-range.double-color::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--range-left-color) var(--range-percentage),var(--range-right-color) var(--range-percentage))}.form-range.double-color::-moz-range-track{background:linear-gradient(to right,var(--range-left-color) var(--range-percentage),var(--range-right-color) var(--range-percentage))}\n"] }]
50
+ }], propDecorators: { max: [{
51
+ type: Input
52
+ }], min: [{
53
+ type: Input
54
+ }], step: [{
55
+ type: Input
56
+ }], leftColor: [{
57
+ type: Input
58
+ }], rightColor: [{
59
+ type: Input
60
+ }], slider: [{
61
+ type: ViewChild,
62
+ args: ['slider', { static: true }]
63
+ }] } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3JhbmdlL3JhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYW5nZS9yYW5nZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7QUFVckUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLHVCQUFrRDtJQWtDN0UsUUFBUTtRQUNmLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTthQUMxQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbEQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVRLFdBQVcsQ0FBQyxPQUFzQjtRQUN6QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUYsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRVEsVUFBVSxDQUFDLEtBQWdDO1FBQ2xELEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCwwQkFBMEI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQy9FLENBQUM7OEdBM0VVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLG9VQ3ZCN0IsNlpBaUJBLDBhRENZLG1CQUFtQjs7MkZBS2xCLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQLENBQUMsbUJBQW1CLENBQUMsbUJBR2IsdUJBQXVCLENBQUMsTUFBTTs4QkFNdEMsR0FBRztzQkFBWCxLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVpQyxNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXQtcmFuZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhbmdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJdFJhbmdlQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQ8bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBtYXggdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIG1heD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbiB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgbWluPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgc3RlcD86IG51bWJlciB8ICdhbnknO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb24gbGVmdCBvZiB0aHVtYiBbUmVxdWlyZSByaWdodENvbG9yXVxuICAgKiBAZXhhbXBsZSAnIzBkNmVmZCcgb3IgJ3ZhcigtLWJzLXByaW1hcnkpJ1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKCd2YXIoLS1icy1ncmF5LTMwMCknKVxuICAgKi9cbiAgQElucHV0KCkgbGVmdENvbG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb24gcmlnaHQgb2YgdGh1bWIgW1JlcXVpcmUgbGVmdENvbG9yXVxuICAgKiBAZXhhbXBsZSAnIzBkNmVmZCcgb3IgJ3ZhcigtLWJzLXByaW1hcnkpJ1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKCd2YXIoLS1icy1ncmF5LTMwMCknKVxuICAgKi9cbiAgQElucHV0KCkgcmlnaHRDb2xvcj86IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdzbGlkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzbGlkZXIhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTbGlkZXJDb2xvcigpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbGVmdENvbG9yJ10pIHtcbiAgICAgIHRoaXMuc2xpZGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcmFuZ2UtbGVmdC1jb2xvcicsIHRoaXMubGVmdENvbG9yID8/IG51bGwpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncmlnaHRDb2xvciddKSB7XG4gICAgICB0aGlzLnNsaWRlci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXJhbmdlLXJpZ2h0LWNvbG9yJywgdGhpcy5yaWdodENvbG9yID8/IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2xpZGVyQ29sb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBlcmNlbnRhZ2Ugb2Ygc2xpZGVyIGNvbG9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVNsaWRlckNvbG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sZWZ0Q29sb3IgfHwgIXRoaXMucmlnaHRDb2xvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IE51bWJlcih0aGlzLnNsaWRlci5uYXRpdmVFbGVtZW50Lm1heCkgfHwgMTAwO1xuICAgIGNvbnN0IG1pbiA9IE51bWJlcih0aGlzLnNsaWRlci5uYXRpdmVFbGVtZW50Lm1pbikgfHwgMDtcblxuICAgIC8vIENhbGN1bGF0ZSB2aXNpYmxlIHdpZHRoXG4gICAgY29uc3QgZGlmZiA9IG1heCAtIG1pbjtcbiAgICBjb25zdCB2YWwgPSAoKCh0aGlzLmNvbnRyb2wudmFsdWUgPz8gZGlmZiAvIDIpIC0gbWluKSAqIDEwMCkgLyBkaWZmO1xuICAgIHRoaXMuc2xpZGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcmFuZ2UtcGVyY2VudGFnZScsIGAke3ZhbH0lYCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gIEBpZiAobGFiZWwpIHtcbiAgICA8bGFiZWwgW2Zvcl09XCJpZFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgfVxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPGlucHV0XG4gICNzbGlkZXJcbiAgW2lkXT1cImlkXCJcbiAgdHlwZT1cInJhbmdlXCJcbiAgW21pbl09XCJtaW5cIlxuICBbbWF4XT1cIm1heFwiXG4gIFtzdGVwXT1cInN0ZXBcIlxuICBjbGFzcz1cImZvcm0tcmFuZ2VcIlxuICBbY2xhc3MuZG91YmxlLWNvbG9yXT1cIiEhbGVmdENvbG9yICYmICEhcmlnaHRDb2xvclwiXG4gIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgLz5cbiJdfQ==