design-angular-kit 1.2.1 → 1.3.0

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 (564) hide show
  1. package/README.md +461 -0
  2. package/assets/i18n/en.json +89 -0
  3. package/assets/i18n/it.json +89 -0
  4. package/esm2022/design-angular-kit.mjs +5 -0
  5. package/esm2022/lib/abstracts/abstract-form.component.mjs +199 -0
  6. package/esm2022/lib/abstracts/abstract.component.mjs +46 -0
  7. package/esm2022/lib/components/core/accordion/accordion.component.mjs +39 -0
  8. package/esm2022/lib/components/core/alert/alert.component.mjs +71 -0
  9. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
  10. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +40 -0
  11. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
  12. package/esm2022/lib/components/core/avatar/avatar.module.mjs +33 -0
  13. package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
  14. package/esm2022/lib/components/core/button/button.directive.mjs +80 -0
  15. package/esm2022/lib/components/core/callout/callout.component.mjs +64 -0
  16. package/esm2022/lib/components/core/card/card.component.mjs +59 -0
  17. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +86 -0
  18. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
  19. package/esm2022/lib/components/core/carousel/carousel.module.mjs +18 -0
  20. package/esm2022/lib/components/core/chip/chip.component.mjs +136 -0
  21. package/esm2022/lib/components/core/collapse/collapse.component.mjs +116 -0
  22. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +27 -0
  23. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  24. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +55 -0
  25. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +19 -0
  26. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +147 -0
  27. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +70 -0
  28. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
  29. package/esm2022/lib/components/core/forward/forward.directive.mjs +57 -0
  30. package/esm2022/lib/components/core/link/link.component.mjs +42 -0
  31. package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
  32. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +56 -0
  33. package/esm2022/lib/components/core/list/list.module.mjs +18 -0
  34. package/esm2022/lib/components/core/modal/modal.component.mjs +194 -0
  35. package/esm2022/lib/components/core/notifications/notifications.component.mjs +111 -0
  36. package/esm2022/lib/components/core/pagination/pagination.component.mjs +130 -0
  37. package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
  38. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  39. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +25 -0
  40. package/esm2022/lib/components/core/spinner/spinner.component.mjs +30 -0
  41. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +116 -0
  42. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +22 -0
  43. package/esm2022/lib/components/core/steppers/steppers.module.mjs +18 -0
  44. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +97 -0
  45. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
  46. package/esm2022/lib/components/core/tab/tab.module.mjs +18 -0
  47. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +134 -0
  48. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
  49. package/esm2022/lib/components/core/table/table.component.mjs +45 -0
  50. package/esm2022/lib/components/core/table/table.module.mjs +19 -0
  51. package/esm2022/lib/components/core/timeline/timeline-item/timeline-item.component.mjs +90 -0
  52. package/esm2022/lib/components/core/timeline/timeline.component.mjs +36 -0
  53. package/esm2022/lib/components/core/timeline/timeline.module.mjs +18 -0
  54. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
  55. package/esm2022/lib/components/core/video-player/video-player-i18n.model.mjs +2 -0
  56. package/esm2022/lib/components/core/video-player/video-player-i18n.service.mjs +130 -0
  57. package/esm2022/lib/components/core/video-player/video-player.component.mjs +303 -0
  58. package/esm2022/lib/components/core/video-player/video-player.config.mjs +43 -0
  59. package/esm2022/lib/components/core/video-player/video-player.cookie.mjs +25 -0
  60. package/esm2022/lib/components/core/video-player/video-player.model.mjs +3 -0
  61. package/esm2022/lib/components/core/video-player/video-player.module.mjs +16 -0
  62. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +178 -0
  63. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
  64. package/esm2022/lib/components/form/form.module.mjs +67 -0
  65. package/esm2022/lib/components/form/input/input.component.mjs +190 -0
  66. package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
  67. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +60 -0
  68. package/esm2022/lib/components/form/range/range.component.mjs +64 -0
  69. package/esm2022/lib/components/form/rating/rating.component.mjs +50 -0
  70. package/esm2022/lib/components/form/search/search.component.mjs +112 -0
  71. package/esm2022/lib/components/form/select/select.component.mjs +70 -0
  72. package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
  73. package/esm2022/lib/components/form/transfer/store/transfer.reducers.mjs +191 -0
  74. package/esm2022/lib/components/form/transfer/store/transfer.state.mjs +2 -0
  75. package/esm2022/lib/components/form/transfer/store/transfer.store.mjs +70 -0
  76. package/esm2022/lib/components/form/transfer/transfer-list/transfer-list.component.mjs +72 -0
  77. package/esm2022/lib/components/form/transfer/transfer.component.mjs +149 -0
  78. package/esm2022/lib/components/form/transfer/transfer.model.mjs +6 -0
  79. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +142 -0
  80. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
  81. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
  82. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +68 -0
  83. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +51 -0
  84. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
  85. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
  86. package/esm2022/lib/components/navigation/header/header.component.mjs +103 -0
  87. package/esm2022/lib/components/navigation/megamenu/megamenu.component.mjs +27 -0
  88. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +49 -0
  89. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +11 -0
  90. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
  91. package/esm2022/lib/components/navigation/navscroll/navscroll-list-item.component.mjs +97 -0
  92. package/esm2022/lib/components/navigation/navscroll/navscroll-list-items.component.mjs +44 -0
  93. package/esm2022/lib/components/navigation/navscroll/navscroll.component.mjs +116 -0
  94. package/esm2022/lib/components/navigation/navscroll/navscroll.model.mjs +2 -0
  95. package/esm2022/lib/components/navigation/navscroll/navscroll.store.mjs +68 -0
  96. package/esm2022/lib/components/navigation/navscroll/navscroll.utils.mjs +23 -0
  97. package/esm2022/lib/components/navigation/sidebar/sidebar.component.mjs +50 -0
  98. package/esm2022/lib/components/navigation/skiplink/skiplink/skiplink.component.mjs +27 -0
  99. package/esm2022/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.mjs +26 -0
  100. package/esm2022/lib/components/navigation/skiplink/skiplink.module.mjs +18 -0
  101. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +74 -0
  102. package/esm2022/lib/components/utils/icon/icon.component.mjs +63 -0
  103. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +50 -0
  104. package/esm2022/lib/design-angular-kit.module.mjs +237 -0
  105. package/esm2022/lib/enums/colors.enums.mjs +12 -0
  106. package/esm2022/lib/enums/sizes.enum.mjs +9 -0
  107. package/esm2022/lib/interfaces/core.mjs +16 -0
  108. package/esm2022/lib/interfaces/design-angular-kit-config.mjs +7 -0
  109. package/esm2022/lib/interfaces/form.mjs +2 -0
  110. package/esm2022/lib/interfaces/icon.mjs +168 -0
  111. package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
  112. package/esm2022/lib/interfaces/utils.mjs +2 -0
  113. package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
  114. package/esm2022/lib/pipes/duration.pipe.mjs +115 -0
  115. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
  116. package/esm2022/lib/provide-design-angular-kit.mjs +64 -0
  117. package/esm2022/lib/services/notification/notification.service.mjs +120 -0
  118. package/esm2022/lib/utils/coercion.mjs +18 -0
  119. package/esm2022/lib/utils/date-utils.mjs +162 -0
  120. package/esm2022/lib/utils/file-utils.mjs +73 -0
  121. package/esm2022/lib/utils/regex.mjs +35 -0
  122. package/esm2022/lib/validators/it-validators.mjs +161 -0
  123. package/esm2022/public_api.mjs +114 -0
  124. package/fesm2022/design-angular-kit.mjs +7423 -0
  125. package/fesm2022/design-angular-kit.mjs.map +1 -0
  126. package/index.d.ts +5 -0
  127. package/lib/abstracts/abstract-form.component.d.ts +89 -0
  128. package/lib/abstracts/abstract.component.d.ts +30 -0
  129. package/lib/components/core/accordion/accordion.component.d.ts +18 -0
  130. package/lib/components/core/alert/alert.component.d.ts +44 -0
  131. package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
  132. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +15 -0
  133. package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
  134. package/lib/components/core/avatar/avatar.module.d.ts +9 -0
  135. package/lib/components/core/badge/badge.directive.d.ts +23 -0
  136. package/lib/components/core/button/button.directive.d.ts +48 -0
  137. package/lib/components/core/callout/callout.component.d.ts +50 -0
  138. package/lib/components/core/card/card.component.d.ts +69 -0
  139. package/lib/components/core/carousel/carousel/carousel.component.d.ts +65 -0
  140. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +15 -0
  141. package/lib/components/core/carousel/carousel.module.d.ts +8 -0
  142. package/lib/components/core/chip/chip.component.d.ts +76 -0
  143. package/lib/components/core/collapse/collapse.component.d.ts +67 -0
  144. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  145. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  146. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  147. package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
  148. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +94 -0
  149. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +46 -0
  150. package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
  151. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  152. package/lib/components/core/link/link.component.d.ts +35 -0
  153. package/lib/components/core/list/list/list.component.d.ts +24 -0
  154. package/lib/components/core/list/list-item/list-item.component.d.ts +41 -0
  155. package/lib/components/core/list/list.module.d.ts +8 -0
  156. package/lib/components/core/modal/modal.component.d.ts +135 -0
  157. package/lib/components/core/notifications/notifications.component.d.ts +45 -0
  158. package/lib/components/core/pagination/pagination.component.d.ts +92 -0
  159. package/lib/components/core/popover/popover.directive.d.ts +99 -0
  160. package/lib/components/core/progress-bar/progress-bar.component.d.ts +31 -0
  161. package/lib/components/core/progress-button/progress-button.component.d.ts +21 -0
  162. package/lib/components/core/spinner/spinner.component.d.ts +24 -0
  163. package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +130 -0
  164. package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +24 -0
  165. package/lib/components/core/steppers/steppers.module.d.ts +8 -0
  166. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +60 -0
  167. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +38 -0
  168. package/lib/components/core/tab/tab.module.d.ts +8 -0
  169. package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
  170. package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
  171. package/lib/components/core/table/table.component.d.ts +60 -0
  172. package/lib/components/core/table/table.module.d.ts +9 -0
  173. package/lib/components/core/timeline/timeline-item/timeline-item.component.d.ts +79 -0
  174. package/lib/components/core/timeline/timeline.component.d.ts +21 -0
  175. package/lib/components/core/timeline/timeline.module.d.ts +8 -0
  176. package/lib/components/core/tooltip/tooltip.directive.d.ts +82 -0
  177. package/lib/components/core/video-player/video-player-i18n.model.d.ts +179 -0
  178. package/lib/components/core/video-player/video-player-i18n.service.d.ts +17 -0
  179. package/lib/components/core/video-player/video-player.component.d.ts +48 -0
  180. package/lib/components/core/video-player/video-player.config.d.ts +68 -0
  181. package/lib/components/core/video-player/video-player.cookie.d.ts +6 -0
  182. package/lib/components/core/video-player/video-player.model.d.ts +44 -0
  183. package/lib/components/core/video-player/video-player.module.d.ts +7 -0
  184. package/lib/components/form/autocomplete/autocomplete.component.d.ts +75 -0
  185. package/lib/components/form/checkbox/checkbox.component.d.ts +41 -0
  186. package/lib/components/form/form.module.d.ts +19 -0
  187. package/lib/components/form/input/input.component.d.ts +95 -0
  188. package/lib/components/form/password-input/password-input.component.d.ts +80 -0
  189. package/lib/components/form/radio-button/radio-button.component.d.ts +38 -0
  190. package/lib/components/form/range/range.component.d.ts +42 -0
  191. package/lib/components/form/rating/rating.component.d.ts +24 -0
  192. package/lib/components/form/search/search.component.d.ts +59 -0
  193. package/lib/components/form/select/select.component.d.ts +36 -0
  194. package/lib/components/form/textarea/textarea.component.d.ts +34 -0
  195. package/lib/components/form/transfer/store/transfer.reducers.d.ts +103 -0
  196. package/lib/components/form/transfer/store/transfer.state.d.ts +18 -0
  197. package/lib/components/form/transfer/store/transfer.store.d.ts +23 -0
  198. package/lib/components/form/transfer/transfer-list/transfer-list.component.d.ts +48 -0
  199. package/lib/components/form/transfer/transfer.component.d.ts +75 -0
  200. package/{src/lib/components/form/transfer/transfer.model.ts → lib/components/form/transfer/transfer.model.d.ts} +2 -9
  201. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +60 -0
  202. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +62 -0
  203. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  204. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +50 -0
  205. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +28 -0
  206. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +23 -0
  207. package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  208. package/lib/components/navigation/header/header.component.d.ts +38 -0
  209. package/lib/components/navigation/megamenu/megamenu.component.d.ts +22 -0
  210. package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +19 -0
  211. package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
  212. package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
  213. package/lib/components/navigation/navscroll/navscroll-list-item.component.d.ts +16 -0
  214. package/lib/components/navigation/navscroll/navscroll-list-items.component.d.ts +7 -0
  215. package/lib/components/navigation/navscroll/navscroll.component.d.ts +47 -0
  216. package/{src/lib/components/navigation/navscroll/navscroll.model.ts → lib/components/navigation/navscroll/navscroll.model.d.ts} +5 -7
  217. package/lib/components/navigation/navscroll/navscroll.store.d.ts +16 -0
  218. package/lib/components/navigation/navscroll/navscroll.utils.d.ts +6 -0
  219. package/lib/components/navigation/sidebar/sidebar.component.d.ts +26 -0
  220. package/lib/components/navigation/skiplink/skiplink/skiplink.component.d.ts +17 -0
  221. package/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.d.ts +24 -0
  222. package/lib/components/navigation/skiplink/skiplink.module.d.ts +8 -0
  223. package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
  224. package/lib/components/utils/icon/icon.component.d.ts +53 -0
  225. package/lib/components/utils/language-switcher/language-switcher.component.d.ts +27 -0
  226. package/lib/design-angular-kit.module.d.ts +54 -0
  227. package/lib/enums/colors.enums.d.ts +10 -0
  228. package/lib/enums/sizes.enum.d.ts +7 -0
  229. package/{src/lib/interfaces/core.ts → lib/interfaces/core.d.ts} +53 -95
  230. package/lib/interfaces/design-angular-kit-config.d.ts +30 -0
  231. package/lib/interfaces/form.d.ts +67 -0
  232. package/lib/interfaces/icon.d.ts +4 -0
  233. package/lib/interfaces/sortable-table.d.ts +33 -0
  234. package/lib/interfaces/utils.d.ts +10 -0
  235. package/lib/pipes/date-ago.pipe.d.ts +17 -0
  236. package/lib/pipes/duration.pipe.d.ts +35 -0
  237. package/lib/pipes/mark-matching-text.pipe.d.ts +18 -0
  238. package/lib/provide-design-angular-kit.d.ts +7 -0
  239. package/lib/services/notification/notification.service.d.ts +63 -0
  240. package/{src/lib/utils/coercion.ts → lib/utils/coercion.d.ts} +1 -7
  241. package/lib/utils/date-utils.d.ts +79 -0
  242. package/lib/utils/file-utils.d.ts +32 -0
  243. package/lib/utils/regex.d.ts +34 -0
  244. package/lib/validators/it-validators.d.ts +70 -0
  245. package/package.json +33 -15
  246. package/{src/public_api.ts → public_api.d.ts} +6 -45
  247. package/schematics/ng-add/index.d.ts +3 -0
  248. package/schematics/ng-add/index.js +29 -0
  249. package/schematics/ng-add/index.js.map +1 -0
  250. package/schematics/ng-add/index.spec.d.ts +1 -0
  251. package/schematics/ng-add/index.spec.js +43 -0
  252. package/schematics/ng-add/index.spec.js.map +1 -0
  253. package/schematics/ng-add/rules/setup-project/add-animations.d.ts +2 -0
  254. package/schematics/ng-add/rules/setup-project/add-animations.js +11 -0
  255. package/schematics/ng-add/rules/setup-project/add-animations.js.map +1 -0
  256. package/schematics/ng-add/rules/setup-project/add-assets.d.ts +3 -0
  257. package/schematics/ng-add/rules/setup-project/add-assets.js +50 -0
  258. package/schematics/ng-add/rules/setup-project/add-assets.js.map +1 -0
  259. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.d.ts +3 -0
  260. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js +43 -0
  261. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js.map +1 -0
  262. package/schematics/ng-add/rules/setup-project/add-http-client.d.ts +2 -0
  263. package/schematics/ng-add/rules/setup-project/add-http-client.js +11 -0
  264. package/schematics/ng-add/rules/setup-project/add-http-client.js.map +1 -0
  265. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.d.ts +11 -0
  266. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js +112 -0
  267. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js.map +1 -0
  268. package/schematics/ng-add/rules/setup-project/add-localisation.d.ts +3 -0
  269. package/schematics/ng-add/rules/setup-project/add-localisation.js +50 -0
  270. package/schematics/ng-add/rules/setup-project/add-localisation.js.map +1 -0
  271. package/schematics/ng-add/rules/setup-project/angular-json-helper.d.ts +2 -0
  272. package/schematics/ng-add/rules/setup-project/angular-json-helper.js +13 -0
  273. package/schematics/ng-add/rules/setup-project/angular-json-helper.js.map +1 -0
  274. package/schematics/ng-add/rules/setup-project/exceptions.d.ts +7 -0
  275. package/schematics/ng-add/rules/setup-project/exceptions.js +17 -0
  276. package/schematics/ng-add/rules/setup-project/exceptions.js.map +1 -0
  277. package/schematics/ng-add/rules/setup-project/index.js +23 -0
  278. package/schematics/ng-add/rules/setup-project/index.js.map +1 -0
  279. package/schematics/ng-add/{schema.ts → schema.d.ts} +1 -1
  280. package/schematics/ng-add/schema.js +3 -0
  281. package/schematics/ng-add/schema.js.map +1 -0
  282. package/schematics/ng-add/setup-project.d.ts +3 -0
  283. package/schematics/ng-add/setup-project.js +37 -0
  284. package/schematics/ng-add/setup-project.js.map +1 -0
  285. package/schematics/ng-add/setup-project.spec.d.ts +1 -0
  286. package/schematics/ng-add/setup-project.spec.js +139 -0
  287. package/schematics/ng-add/setup-project.spec.js.map +1 -0
  288. package/schematics/ng-add/utils.d.ts +14 -0
  289. package/schematics/ng-add/utils.js +49 -0
  290. package/schematics/ng-add/utils.js.map +1 -0
  291. package/schematics/ng-add/versions-helper.d.ts +3 -0
  292. package/schematics/ng-add/versions-helper.js +40 -0
  293. package/schematics/ng-add/versions-helper.js.map +1 -0
  294. package/.eslintrc.json +0 -31
  295. package/karma.conf.js +0 -38
  296. package/ng-package.json +0 -9
  297. package/ng-package.prod.json +0 -8
  298. package/schematics/ng-add/index.spec.ts +0 -45
  299. package/schematics/ng-add/index.ts +0 -36
  300. package/schematics/ng-add/rules/setup-project/add-animations.ts +0 -7
  301. package/schematics/ng-add/rules/setup-project/add-assets.ts +0 -45
  302. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.ts +0 -40
  303. package/schematics/ng-add/rules/setup-project/add-http-client.ts +0 -7
  304. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.ts +0 -120
  305. package/schematics/ng-add/rules/setup-project/add-localisation.ts +0 -45
  306. package/schematics/ng-add/rules/setup-project/angular-json-helper.ts +0 -11
  307. package/schematics/ng-add/rules/setup-project/exceptions.ts +0 -13
  308. package/schematics/ng-add/setup-project.spec.ts +0 -166
  309. package/schematics/ng-add/setup-project.ts +0 -31
  310. package/schematics/ng-add/utils.ts +0 -71
  311. package/schematics/ng-add/versions-helper.ts +0 -41
  312. package/src/lib/abstracts/abstract-form.component.ts +0 -200
  313. package/src/lib/abstracts/abstract.component.ts +0 -63
  314. package/src/lib/components/core/accordion/accordion.component.html +0 -27
  315. package/src/lib/components/core/accordion/accordion.component.spec.ts +0 -21
  316. package/src/lib/components/core/accordion/accordion.component.ts +0 -40
  317. package/src/lib/components/core/alert/alert.component.html +0 -19
  318. package/src/lib/components/core/alert/alert.component.scss +0 -3
  319. package/src/lib/components/core/alert/alert.component.spec.ts +0 -62
  320. package/src/lib/components/core/alert/alert.component.ts +0 -75
  321. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.html +0 -23
  322. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.scss +0 -17
  323. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.spec.ts +0 -21
  324. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.ts +0 -50
  325. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.html +0 -7
  326. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.spec.ts +0 -38
  327. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.ts +0 -25
  328. package/src/lib/components/core/avatar/avatar.directive.ts +0 -73
  329. package/src/lib/components/core/avatar/avatar.module.ts +0 -18
  330. package/src/lib/components/core/badge/badge.directive.spec.ts +0 -59
  331. package/src/lib/components/core/badge/badge.directive.ts +0 -39
  332. package/src/lib/components/core/button/button.directive.spec.ts +0 -96
  333. package/src/lib/components/core/button/button.directive.ts +0 -89
  334. package/src/lib/components/core/callout/callout.component.html +0 -25
  335. package/src/lib/components/core/callout/callout.component.spec.ts +0 -138
  336. package/src/lib/components/core/callout/callout.component.ts +0 -92
  337. package/src/lib/components/core/card/card.component.html +0 -35
  338. package/src/lib/components/core/card/card.component.scss +0 -30
  339. package/src/lib/components/core/card/card.component.spec.ts +0 -21
  340. package/src/lib/components/core/card/card.component.ts +0 -78
  341. package/src/lib/components/core/carousel/carousel/carousel.component.html +0 -29
  342. package/src/lib/components/core/carousel/carousel/carousel.component.scss +0 -1
  343. package/src/lib/components/core/carousel/carousel/carousel.component.spec.ts +0 -21
  344. package/src/lib/components/core/carousel/carousel/carousel.component.ts +0 -119
  345. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.html +0 -3
  346. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.spec.ts +0 -22
  347. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.ts +0 -20
  348. package/src/lib/components/core/carousel/carousel.module.ts +0 -11
  349. package/src/lib/components/core/chip/chip.component.html +0 -26
  350. package/src/lib/components/core/chip/chip.component.spec.ts +0 -87
  351. package/src/lib/components/core/chip/chip.component.ts +0 -154
  352. package/src/lib/components/core/collapse/collapse.component.html +0 -3
  353. package/src/lib/components/core/collapse/collapse.component.spec.ts +0 -21
  354. package/src/lib/components/core/collapse/collapse.component.ts +0 -124
  355. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.html +0 -3
  356. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.spec.ts +0 -35
  357. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.ts +0 -23
  358. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.html +0 -3
  359. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.spec.ts +0 -22
  360. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.ts +0 -10
  361. package/src/lib/components/core/dimmer/dimmer.component.html +0 -7
  362. package/src/lib/components/core/dimmer/dimmer.component.spec.ts +0 -49
  363. package/src/lib/components/core/dimmer/dimmer.component.ts +0 -50
  364. package/src/lib/components/core/dimmer/dimmer.module.ts +0 -12
  365. package/src/lib/components/core/dropdown/dropdown/dropdown.component.html +0 -45
  366. package/src/lib/components/core/dropdown/dropdown/dropdown.component.scss +0 -3
  367. package/src/lib/components/core/dropdown/dropdown/dropdown.component.spec.ts +0 -21
  368. package/src/lib/components/core/dropdown/dropdown/dropdown.component.ts +0 -186
  369. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.html +0 -18
  370. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.scss +0 -4
  371. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.spec.ts +0 -21
  372. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.ts +0 -82
  373. package/src/lib/components/core/dropdown/dropdown.module.ts +0 -11
  374. package/src/lib/components/core/forward/forward.directive.spec.ts +0 -60
  375. package/src/lib/components/core/forward/forward.directive.ts +0 -43
  376. package/src/lib/components/core/link/link.component.html +0 -13
  377. package/src/lib/components/core/link/link.component.spec.ts +0 -21
  378. package/src/lib/components/core/link/link.component.ts +0 -54
  379. package/src/lib/components/core/list/list/list.component.html +0 -13
  380. package/src/lib/components/core/list/list/list.component.spec.ts +0 -21
  381. package/src/lib/components/core/list/list/list.component.ts +0 -30
  382. package/src/lib/components/core/list/list-item/list-item.component.html +0 -42
  383. package/src/lib/components/core/list/list-item/list-item.component.scss +0 -16
  384. package/src/lib/components/core/list/list-item/list-item.component.spec.ts +0 -21
  385. package/src/lib/components/core/list/list-item/list-item.component.ts +0 -75
  386. package/src/lib/components/core/list/list.module.ts +0 -11
  387. package/src/lib/components/core/modal/modal.component.html +0 -36
  388. package/src/lib/components/core/modal/modal.component.scss +0 -3
  389. package/src/lib/components/core/modal/modal.component.spec.ts +0 -21
  390. package/src/lib/components/core/modal/modal.component.ts +0 -218
  391. package/src/lib/components/core/notifications/notifications.component.html +0 -25
  392. package/src/lib/components/core/notifications/notifications.component.scss +0 -3
  393. package/src/lib/components/core/notifications/notifications.component.spec.ts +0 -21
  394. package/src/lib/components/core/notifications/notifications.component.ts +0 -123
  395. package/src/lib/components/core/pagination/pagination.component.html +0 -107
  396. package/src/lib/components/core/pagination/pagination.component.spec.ts +0 -21
  397. package/src/lib/components/core/pagination/pagination.component.ts +0 -157
  398. package/src/lib/components/core/popover/popover.directive.spec.ts +0 -21
  399. package/src/lib/components/core/popover/popover.directive.ts +0 -171
  400. package/src/lib/components/core/progress-bar/progress-bar.component.html +0 -20
  401. package/src/lib/components/core/progress-bar/progress-bar.component.spec.ts +0 -21
  402. package/src/lib/components/core/progress-bar/progress-bar.component.ts +0 -46
  403. package/src/lib/components/core/progress-button/progress-button.component.html +0 -5
  404. package/src/lib/components/core/progress-button/progress-button.component.spec.ts +0 -21
  405. package/src/lib/components/core/progress-button/progress-button.component.ts +0 -39
  406. package/src/lib/components/core/spinner/spinner.component.html +0 -7
  407. package/src/lib/components/core/spinner/spinner.component.spec.ts +0 -80
  408. package/src/lib/components/core/spinner/spinner.component.ts +0 -31
  409. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.html +0 -126
  410. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.spec.ts +0 -21
  411. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.ts +0 -185
  412. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.html +0 -3
  413. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.spec.ts +0 -22
  414. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.ts +0 -33
  415. package/src/lib/components/core/steppers/steppers.module.ts +0 -11
  416. package/src/lib/components/core/tab/tab-container/tab-container.component.html +0 -78
  417. package/src/lib/components/core/tab/tab-container/tab-container.component.spec.ts +0 -21
  418. package/src/lib/components/core/tab/tab-container/tab-container.component.ts +0 -137
  419. package/src/lib/components/core/tab/tab-item/tab-item.component.html +0 -3
  420. package/src/lib/components/core/tab/tab-item/tab-item.component.spec.ts +0 -22
  421. package/src/lib/components/core/tab/tab-item/tab-item.component.ts +0 -50
  422. package/src/lib/components/core/tab/tab.module.ts +0 -11
  423. package/src/lib/components/core/table/sort/sort-header/sort-header.component.html +0 -27
  424. package/src/lib/components/core/table/sort/sort-header/sort-header.component.scss +0 -65
  425. package/src/lib/components/core/table/sort/sort-header/sort-header.component.spec.ts +0 -25
  426. package/src/lib/components/core/table/sort/sort-header/sort-header.component.ts +0 -164
  427. package/src/lib/components/core/table/sort/sort.directive.spec.ts +0 -73
  428. package/src/lib/components/core/table/sort/sort.directive.ts +0 -142
  429. package/src/lib/components/core/table/table.component.html +0 -23
  430. package/src/lib/components/core/table/table.component.scss +0 -7
  431. package/src/lib/components/core/table/table.component.spec.ts +0 -21
  432. package/src/lib/components/core/table/table.component.ts +0 -70
  433. package/src/lib/components/core/table/table.module.ts +0 -12
  434. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.html +0 -47
  435. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.spec.ts +0 -24
  436. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.ts +0 -102
  437. package/src/lib/components/core/timeline/timeline.component.html +0 -21
  438. package/src/lib/components/core/timeline/timeline.component.spec.ts +0 -21
  439. package/src/lib/components/core/timeline/timeline.component.ts +0 -31
  440. package/src/lib/components/core/timeline/timeline.module.ts +0 -11
  441. package/src/lib/components/core/tooltip/tooltip.directive.spec.ts +0 -20
  442. package/src/lib/components/core/tooltip/tooltip.directive.ts +0 -141
  443. package/src/lib/components/form/autocomplete/autocomplete.component.html +0 -58
  444. package/src/lib/components/form/autocomplete/autocomplete.component.spec.ts +0 -21
  445. package/src/lib/components/form/autocomplete/autocomplete.component.ts +0 -130
  446. package/src/lib/components/form/checkbox/checkbox.component.html +0 -67
  447. package/src/lib/components/form/checkbox/checkbox.component.spec.ts +0 -21
  448. package/src/lib/components/form/checkbox/checkbox.component.ts +0 -65
  449. package/src/lib/components/form/form.module.ts +0 -34
  450. package/src/lib/components/form/input/input.component.html +0 -92
  451. package/src/lib/components/form/input/input.component.scss +0 -29
  452. package/src/lib/components/form/input/input.component.spec.ts +0 -21
  453. package/src/lib/components/form/input/input.component.ts +0 -234
  454. package/src/lib/components/form/password-input/password-input.component.html +0 -65
  455. package/src/lib/components/form/password-input/password-input.component.scss +0 -9
  456. package/src/lib/components/form/password-input/password-input.component.spec.ts +0 -21
  457. package/src/lib/components/form/password-input/password-input.component.ts +0 -171
  458. package/src/lib/components/form/radio-button/radio-button.component.html +0 -50
  459. package/src/lib/components/form/radio-button/radio-button.component.scss +0 -14
  460. package/src/lib/components/form/radio-button/radio-button.component.spec.ts +0 -21
  461. package/src/lib/components/form/radio-button/radio-button.component.ts +0 -82
  462. package/src/lib/components/form/range/range.component.html +0 -17
  463. package/src/lib/components/form/range/range.component.scss +0 -17
  464. package/src/lib/components/form/range/range.component.spec.ts +0 -21
  465. package/src/lib/components/form/range/range.component.ts +0 -100
  466. package/src/lib/components/form/rating/rating.component.html +0 -24
  467. package/src/lib/components/form/rating/rating.component.spec.ts +0 -21
  468. package/src/lib/components/form/rating/rating.component.ts +0 -52
  469. package/src/lib/components/form/select/select.component.html +0 -54
  470. package/src/lib/components/form/select/select.component.scss +0 -3
  471. package/src/lib/components/form/select/select.component.spec.ts +0 -22
  472. package/src/lib/components/form/select/select.component.ts +0 -91
  473. package/src/lib/components/form/textarea/textarea.component.html +0 -28
  474. package/src/lib/components/form/textarea/textarea.component.scss +0 -12
  475. package/src/lib/components/form/textarea/textarea.component.spec.ts +0 -21
  476. package/src/lib/components/form/textarea/textarea.component.ts +0 -61
  477. package/src/lib/components/form/transfer/store/transfer.reducers.ts +0 -242
  478. package/src/lib/components/form/transfer/store/transfer.state.ts +0 -20
  479. package/src/lib/components/form/transfer/store/transfer.store.ts +0 -88
  480. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.html +0 -42
  481. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.spec.ts +0 -33
  482. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.ts +0 -93
  483. package/src/lib/components/form/transfer/transfer.component.html +0 -52
  484. package/src/lib/components/form/transfer/transfer.component.spec.ts +0 -27
  485. package/src/lib/components/form/transfer/transfer.component.ts +0 -159
  486. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.html +0 -36
  487. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.spec.ts +0 -21
  488. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.ts +0 -170
  489. package/src/lib/components/form/upload-file-list/upload-file-list.component.html +0 -46
  490. package/src/lib/components/form/upload-file-list/upload-file-list.component.spec.ts +0 -22
  491. package/src/lib/components/form/upload-file-list/upload-file-list.component.ts +0 -120
  492. package/src/lib/components/navigation/back-button/back-button.component.html +0 -25
  493. package/src/lib/components/navigation/back-button/back-button.component.spec.ts +0 -91
  494. package/src/lib/components/navigation/back-button/back-button.component.ts +0 -67
  495. package/src/lib/components/navigation/back-to-top/back-to-top.component.html +0 -11
  496. package/src/lib/components/navigation/back-to-top/back-to-top.component.spec.ts +0 -21
  497. package/src/lib/components/navigation/back-to-top/back-to-top.component.ts +0 -80
  498. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.html +0 -23
  499. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.spec.ts +0 -21
  500. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.ts +0 -68
  501. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.html +0 -3
  502. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.spec.ts +0 -22
  503. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.ts +0 -29
  504. package/src/lib/components/navigation/breadcrumbs/breadcrumbs.module.ts +0 -11
  505. package/src/lib/components/navigation/header/header.component.html +0 -102
  506. package/src/lib/components/navigation/header/header.component.scss +0 -3
  507. package/src/lib/components/navigation/header/header.component.spec.ts +0 -21
  508. package/src/lib/components/navigation/header/header.component.ts +0 -107
  509. package/src/lib/components/navigation/megamenu/megamenu.component.html +0 -34
  510. package/src/lib/components/navigation/megamenu/megamenu.component.scss +0 -5
  511. package/src/lib/components/navigation/megamenu/megamenu.component.ts +0 -30
  512. package/src/lib/components/navigation/navbar/navbar/navbar.component.html +0 -28
  513. package/src/lib/components/navigation/navbar/navbar/navbar.component.ts +0 -45
  514. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.html +0 -3
  515. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.ts +0 -10
  516. package/src/lib/components/navigation/navbar/navbar.module.ts +0 -11
  517. package/src/lib/components/navigation/navscroll/navscroll-list-item.component.ts +0 -95
  518. package/src/lib/components/navigation/navscroll/navscroll-list-items.component.ts +0 -27
  519. package/src/lib/components/navigation/navscroll/navscroll.component.html +0 -101
  520. package/src/lib/components/navigation/navscroll/navscroll.component.scss +0 -9
  521. package/src/lib/components/navigation/navscroll/navscroll.component.ts +0 -143
  522. package/src/lib/components/navigation/navscroll/navscroll.store.ts +0 -96
  523. package/src/lib/components/navigation/navscroll/navscroll.utils.ts +0 -28
  524. package/src/lib/components/navigation/sidebar/sidebar.component.html +0 -11
  525. package/src/lib/components/navigation/sidebar/sidebar.component.spec.ts +0 -21
  526. package/src/lib/components/navigation/sidebar/sidebar.component.ts +0 -39
  527. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.html +0 -15
  528. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.ts +0 -27
  529. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.html +0 -15
  530. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.ts +0 -38
  531. package/src/lib/components/navigation/skiplink/skiplink.module.ts +0 -11
  532. package/src/lib/components/utils/error-page/error-page.component.html +0 -33
  533. package/src/lib/components/utils/error-page/error-page.component.spec.ts +0 -21
  534. package/src/lib/components/utils/error-page/error-page.component.ts +0 -79
  535. package/src/lib/components/utils/icon/icon.component.html +0 -6
  536. package/src/lib/components/utils/icon/icon.component.spec.ts +0 -21
  537. package/src/lib/components/utils/icon/icon.component.ts +0 -95
  538. package/src/lib/components/utils/language-switcher/language-switcher.component.html +0 -21
  539. package/src/lib/components/utils/language-switcher/language-switcher.component.spec.ts +0 -21
  540. package/src/lib/components/utils/language-switcher/language-switcher.component.ts +0 -56
  541. package/src/lib/design-angular-kit.module.ts +0 -131
  542. package/src/lib/enums/colors.enums.ts +0 -10
  543. package/src/lib/enums/sizes.enum.ts +0 -7
  544. package/src/lib/interfaces/design-angular-kit-config.ts +0 -34
  545. package/src/lib/interfaces/form.ts +0 -78
  546. package/src/lib/interfaces/icon.ts +0 -176
  547. package/src/lib/interfaces/sortable-table.ts +0 -42
  548. package/src/lib/interfaces/utils.ts +0 -11
  549. package/src/lib/pipes/date-ago.pipe.ts +0 -57
  550. package/src/lib/pipes/duration.pipe.ts +0 -112
  551. package/src/lib/pipes/mark-matching-text.pipe.ts +0 -43
  552. package/src/lib/provide-design-angular-kit.ts +0 -73
  553. package/src/lib/services/notification/notification.service.spec.ts +0 -16
  554. package/src/lib/services/notification/notification.service.ts +0 -119
  555. package/src/lib/utils/date-utils.ts +0 -184
  556. package/src/lib/utils/file-utils.ts +0 -80
  557. package/src/lib/utils/regex.ts +0 -44
  558. package/src/lib/validators/it-validators.ts +0 -193
  559. package/src/test.ts +0 -26
  560. package/tsconfig.lib.json +0 -24
  561. package/tsconfig.lib.prod.json +0 -9
  562. package/tsconfig.schematics.json +0 -25
  563. package/tsconfig.spec.json +0 -9
  564. /package/schematics/ng-add/rules/setup-project/{index.ts → index.d.ts} +0 -0
@@ -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==
@@ -0,0 +1,50 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import { ItIconComponent } from '../../utils/icon/icon.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngx-translate/core";
8
+ import * as i2 from "@angular/forms";
9
+ export class ItRatingComponent extends ItAbstractFormComponent {
10
+ constructor() {
11
+ super(...arguments);
12
+ /**
13
+ * Number of stars to show
14
+ * @default 5
15
+ */
16
+ this.starCount = 5;
17
+ this.stars = this.generateStars();
18
+ }
19
+ ngOnChanges(changes) {
20
+ super.ngOnChanges(changes);
21
+ if (changes['starCount'] || !this.stars.length) {
22
+ this.stars = this.generateStars();
23
+ }
24
+ }
25
+ ngOnInit() {
26
+ super.ngOnInit();
27
+ if (!this.control.value && !!this.value) {
28
+ this.writeValue(this.value);
29
+ this.onChange(this.value);
30
+ }
31
+ }
32
+ /**
33
+ * Generate the array of stars
34
+ * @private
35
+ */
36
+ generateStars() {
37
+ return Array.from({ length: this.starCount }, (_, i) => i + 1).reverse();
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRatingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItRatingComponent, isStandalone: true, selector: "it-rating", inputs: { value: "value", starCount: "starCount" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<fieldset class=\"rating\" [class.rating-label]=\"!!label\" [class.rating-read-only]=\"control.disabled\">\n <legend>\n <span>{{ label }}</span>\n <span class=\"visually-hidden\">\n {{ 'it.core.rating-star' | translate: { current: control.value || 0, total: stars.length } }}\n </span>\n </legend>\n\n @for (starValue of stars; track starValue) {\n <input\n [id]=\"id + '-' + starValue\"\n type=\"radio\"\n [name]=\"id\"\n [value]=\"starValue\"\n [attr.aria-hidden]=\"control.disabled\"\n [formControl]=\"control\" />\n <label class=\"full\" [for]=\"id + '-' + starValue\">\n <it-icon name=\"star-full\" size=\"sm\" aria-hidden=\"true\"></it-icon>\n <span class=\"visually-hidden\">\n {{ 'it.core.rate-star' | translate: { current: starValue, total: stars.length } }}\n </span>\n </label>\n }\n</fieldset>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItRatingComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ standalone: true, selector: 'it-rating', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, ReactiveFormsModule, ItIconComponent], template: "<fieldset class=\"rating\" [class.rating-label]=\"!!label\" [class.rating-read-only]=\"control.disabled\">\n <legend>\n <span>{{ label }}</span>\n <span class=\"visually-hidden\">\n {{ 'it.core.rating-star' | translate: { current: control.value || 0, total: stars.length } }}\n </span>\n </legend>\n\n @for (starValue of stars; track starValue) {\n <input\n [id]=\"id + '-' + starValue\"\n type=\"radio\"\n [name]=\"id\"\n [value]=\"starValue\"\n [attr.aria-hidden]=\"control.disabled\"\n [formControl]=\"control\" />\n <label class=\"full\" [for]=\"id + '-' + starValue\">\n <it-icon name=\"star-full\" size=\"sm\" aria-hidden=\"true\"></it-icon>\n <span class=\"visually-hidden\">\n {{ 'it.core.rate-star' | translate: { current: starValue, total: stars.length } }}\n </span>\n </label>\n }\n</fieldset>\n" }]
45
+ }], propDecorators: { value: [{
46
+ type: Input
47
+ }], starCount: [{
48
+ type: Input
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYXRpbmcvcmF0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9yYXRpbmcvcmF0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBU2xFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx1QkFBa0Q7SUFQekY7O1FBYUU7OztXQUdHO1FBQ00sY0FBUyxHQUFXLENBQUMsQ0FBQztRQUVyQixVQUFLLEdBQWtCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQTBCdkQ7SUF4QlUsV0FBVyxDQUFDLE9BQXNCO1FBQ3pDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0IsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRVEsUUFBUTtRQUNmLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWE7UUFDbkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRSxDQUFDOzhHQXJDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixxS0NiOUIsdzNCQXdCQSwyQ0RiWSxlQUFlLDJGQUFFLG1CQUFtQiw2eEJBQUUsZUFBZTs7MkZBRXBELGlCQUFpQjtrQkFQN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sV0FBVyxtQkFFSix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQzs4QkFNdkQsS0FBSztzQkFBYixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEl0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdC1yYXRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmF0aW5nLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEl0SWNvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEl0UmF0aW5nQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQ8bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF0aW5nIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3RhcnMgdG8gc2hvd1xuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICBASW5wdXQoKSBzdGFyQ291bnQ6IG51bWJlciA9IDU7XG5cbiAgcHJvdGVjdGVkIHN0YXJzOiBBcnJheTxudW1iZXI+ID0gdGhpcy5nZW5lcmF0ZVN0YXJzKCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuXG4gICAgaWYgKGNoYW5nZXNbJ3N0YXJDb3VudCddIHx8ICF0aGlzLnN0YXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGFycyA9IHRoaXMuZ2VuZXJhdGVTdGFycygpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAoIXRoaXMuY29udHJvbC52YWx1ZSAmJiAhIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBhcnJheSBvZiBzdGFyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVN0YXJzKCk6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnN0YXJDb3VudCB9LCAoXywgaSkgPT4gaSArIDEpLnJldmVyc2UoKTtcbiAgfVxufVxuIiwiPGZpZWxkc2V0IGNsYXNzPVwicmF0aW5nXCIgW2NsYXNzLnJhdGluZy1sYWJlbF09XCIhIWxhYmVsXCIgW2NsYXNzLnJhdGluZy1yZWFkLW9ubHldPVwiY29udHJvbC5kaXNhYmxlZFwiPlxuICA8bGVnZW5kPlxuICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICB7eyAnaXQuY29yZS5yYXRpbmctc3RhcicgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogY29udHJvbC52YWx1ZSB8fCAwLCB0b3RhbDogc3RhcnMubGVuZ3RoIH0gfX1cbiAgICA8L3NwYW4+XG4gIDwvbGVnZW5kPlxuXG4gIEBmb3IgKHN0YXJWYWx1ZSBvZiBzdGFyczsgdHJhY2sgc3RhclZhbHVlKSB7XG4gICAgPGlucHV0XG4gICAgICBbaWRdPVwiaWQgKyAnLScgKyBzdGFyVmFsdWVcIlxuICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgIFtuYW1lXT1cImlkXCJcbiAgICAgIFt2YWx1ZV09XCJzdGFyVmFsdWVcIlxuICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiY29udHJvbC5kaXNhYmxlZFwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiZnVsbFwiIFtmb3JdPVwiaWQgKyAnLScgKyBzdGFyVmFsdWVcIj5cbiAgICAgIDxpdC1pY29uIG5hbWU9XCJzdGFyLWZ1bGxcIiBzaXplPVwic21cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2l0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICB7eyAnaXQuY29yZS5yYXRlLXN0YXInIHwgdHJhbnNsYXRlOiB7IGN1cnJlbnQ6IHN0YXJWYWx1ZSwgdG90YWw6IHN0YXJzLmxlbmd0aCB9IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgfVxuPC9maWVsZHNldD5cbiJdfQ==
@@ -0,0 +1,112 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { debounceTime, distinctUntilChanged, map, Observable, of, switchMap } from 'rxjs';
3
+ import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import { ItIconComponent } from '../../utils/icon/icon.component';
6
+ import { ItMarkMatchingTextPipe } from '../../../pipes/mark-matching-text.pipe';
7
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
8
+ import { inputToBoolean } from '../../../utils/coercion';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/forms";
11
+ export class ItSearchComponent extends ItAbstractFormComponent {
12
+ constructor() {
13
+ super(...arguments);
14
+ /**
15
+ * Time span [ms] has passed without another source emission, to delay data filtering.
16
+ * Useful when the user is typing multiple letters
17
+ * @default 300 [ms]
18
+ */
19
+ this.debounceTime = 300;
20
+ /**
21
+ * The input placeholder
22
+ */
23
+ this.placeholder = '';
24
+ /**
25
+ * The input label even get labelWaria icon
26
+ */
27
+ this.labelWaria = undefined;
28
+ /**
29
+ * Show the label
30
+ */
31
+ this.forceShowLabel = true;
32
+ /**
33
+ * Fired when the Search Item has been selected
34
+ */
35
+ this.searchSelectedEvent = new EventEmitter();
36
+ this.showAutocompletion = false;
37
+ /** Observable da cui vengono emessi i risultati dell'auto completamento */
38
+ this.searchResults$ = new Observable();
39
+ }
40
+ ngOnInit() {
41
+ super.ngOnInit();
42
+ this.searchResults$ = this.getSearchResults$();
43
+ }
44
+ /**
45
+ * Create the search list
46
+ */
47
+ getSearchResults$() {
48
+ return this.control.valueChanges.pipe(debounceTime(this.debounceTime), // Delay filter data after time span has passed without another source emission, useful when the user is typing multiple letters
49
+ distinctUntilChanged(), // Only if searchValue is distinct in comparison to the last value
50
+ switchMap(searchedValue => {
51
+ if (!this.searchData) {
52
+ return of({
53
+ searchedValue,
54
+ relatedEntries: [],
55
+ });
56
+ }
57
+ const autoCompleteData$ = Array.isArray(this.searchData) ? of(this.searchData) : this.searchData(searchedValue);
58
+ return autoCompleteData$.pipe(map(searchData => {
59
+ if (!searchedValue || typeof searchedValue === 'number') {
60
+ return { searchedValue, relatedEntries: [] };
61
+ }
62
+ const lowercaseValue = searchedValue.toLowerCase();
63
+ const relatedEntries = searchData.filter(item => item.value?.toLowerCase().includes(lowercaseValue));
64
+ return { searchedValue, relatedEntries };
65
+ }));
66
+ }));
67
+ }
68
+ onEntryClick(entry, event) {
69
+ // Se non è stato definito un link associato all'elemento dell'search, probabilmente il desiderata
70
+ // non è effettuare la navigazione al default '#', pertanto in tal caso meglio annullare la navigazione.
71
+ if (!entry.link) {
72
+ event.preventDefault();
73
+ }
74
+ this.searchSelectedEvent.next(entry);
75
+ this.control.setValue(entry.value);
76
+ this.showAutocompletion = false;
77
+ }
78
+ searchItemTrackByValueFn(index, item) {
79
+ return item.value;
80
+ }
81
+ onKeyDown() {
82
+ this.showAutocompletion = true;
83
+ }
84
+ get isActiveLabel() {
85
+ const value = this.control.value;
86
+ return this.forceShowLabel && (!!value || !!this.placeholder);
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSearchComponent, isStandalone: true, selector: "it-search", inputs: { searchData: "searchData", big: ["big", "big", inputToBoolean], debounceTime: "debounceTime", placeholder: "placeholder", labelWaria: "labelWaria", forceShowLabel: ["forceShowLabel", "forceShowLabel", inputToBoolean] }, outputs: { searchSelectedEvent: "searchSelectedEvent" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\" [class.autocomplete-wrapper-big]=\"big\">\n @if (label) {\n <label [for]=\"id\" [class.visually-hidden]=\"!isActiveLabel\" [class.active]=\"isActiveLabel\">\n {{ label }}\n </label>\n }\n\n <input\n [id]=\"id\"\n type=\"search\"\n class=\"autocomplete form-control\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n (keydown)=\"onKeyDown()\" />\n\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon [labelWaria]=\"labelWaria\" name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n @if (searchResults$ | async; as autocomplete) {\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n @for (entry of autocomplete.relatedEntries; track searchItemTrackByValueFn($index, entry)) {\n <li>\n <a [href]=\"entry.link\" (click)=\"onEntryClick(entry, $event)\">\n @if (entry.avatarSrcPath) {\n <div class=\"avatar size-sm\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\" />\n </div>\n }\n @if (entry.icon) {\n <it-icon [name]=\"entry.icon\" size=\"sm\"></it-icon>\n }\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | itMarkMatchingText: autocomplete.searchedValue\"></span>\n @if (entry.label) {\n <em>{{ entry.label }}</em>\n }\n </span>\n </a>\n </li>\n }\n </ul>\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", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "pipe", type: ItMarkMatchingTextPipe, name: "itMarkMatchingText" }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, decorators: [{
92
+ type: Component,
93
+ args: [{ standalone: true, selector: 'it-search', imports: [AsyncPipe, ItIconComponent, ItMarkMatchingTextPipe, NgTemplateOutlet, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\" [class.autocomplete-wrapper-big]=\"big\">\n @if (label) {\n <label [for]=\"id\" [class.visually-hidden]=\"!isActiveLabel\" [class.active]=\"isActiveLabel\">\n {{ label }}\n </label>\n }\n\n <input\n [id]=\"id\"\n type=\"search\"\n class=\"autocomplete form-control\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n (keydown)=\"onKeyDown()\" />\n\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon [labelWaria]=\"labelWaria\" name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n @if (searchResults$ | async; as autocomplete) {\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n @for (entry of autocomplete.relatedEntries; track searchItemTrackByValueFn($index, entry)) {\n <li>\n <a [href]=\"entry.link\" (click)=\"onEntryClick(entry, $event)\">\n @if (entry.avatarSrcPath) {\n <div class=\"avatar size-sm\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\" />\n </div>\n }\n @if (entry.icon) {\n <it-icon [name]=\"entry.icon\" size=\"sm\"></it-icon>\n }\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | itMarkMatchingText: autocomplete.searchedValue\"></span>\n @if (entry.label) {\n <em>{{ entry.label }}</em>\n }\n </span>\n </a>\n </li>\n }\n </ul>\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" }]
94
+ }], propDecorators: { searchData: [{
95
+ type: Input,
96
+ args: [{ required: true }]
97
+ }], big: [{
98
+ type: Input,
99
+ args: [{ transform: inputToBoolean }]
100
+ }], debounceTime: [{
101
+ type: Input
102
+ }], placeholder: [{
103
+ type: Input
104
+ }], labelWaria: [{
105
+ type: Input
106
+ }], forceShowLabel: [{
107
+ type: Input,
108
+ args: [{ transform: inputToBoolean }]
109
+ }], searchSelectedEvent: [{
110
+ type: Output
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVN6RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsdUJBQWtEO0lBUHpGOztRQW9CRTs7OztXQUlHO1FBQ00saUJBQVksR0FBRyxHQUFHLENBQUM7UUFFNUI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQjs7V0FFRztRQUNNLGVBQVUsR0FBdUIs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RSxDQUFDOzhHQS9HVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixxR0FXUixjQUFjLDRJQXNCZCxjQUFjLDZHQ2xEcEMseStEQTBEQSx1Q0Q1Q1ksU0FBUyw4Q0FBRSxlQUFlLCtIQUFFLHNCQUFzQiwwREFBb0IsbUJBQW1COzsyRkFHeEYsaUJBQWlCO2tCQVA3QixTQUFTO2lDQUNJLElBQUksWUFDTixXQUFXLFdBRVosQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLG1CQUNuRix1QkFBdUIsQ0FBQyxNQUFNOzhCQVFwQixVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLYSxHQUFHO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFPM0IsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS2dDLGNBQWM7c0JBQW5ELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUsxQixtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEl0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSXRNYXJrTWF0Y2hpbmdUZXh0UGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL21hcmstbWF0Y2hpbmctdGV4dC5waXBlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2Zvcm0nO1xuaW1wb3J0IHsgaW5wdXRUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb2VyY2lvbic7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2l0LXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBJdEljb25Db21wb25lbnQsIEl0TWFya01hdGNoaW5nVGV4dFBpcGUsIE5nVGVtcGxhdGVPdXRsZXQsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSXRTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGxpc3Qgb2Ygc2VhcmNoYWJsZSBlbGVtZW50cyBvbiB3aGljaCB0byBiYXNlIHRoZSBpbnB1dCBzZWFyY2ggc3lzdGVtXG4gICAqIElmIHlvdSBuZWVkIHRvIHJldHJpZXZlIGl0ZW1zIHZpYSBBUEksIGNhbiBwYXNzIGEgZnVuY3Rpb24gb2YgT2JzZXJ2YWJsZVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNlYXJjaERhdGEhOiBBcnJheTxTZWFyY2hJdGVtPiB8ICgoc2VhcmNoPzogc3RyaW5nIHwgbnVsbCkgPT4gT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hJdGVtPj4pO1xuXG4gIC8qKlxuICAgKiBUbyBnZXQgYSBsYXJnZSB2ZXJzaW9uIG9mIFNlYXJjaFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBiaWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaW1lIHNwYW4gW21zXSBoYXMgcGFzc2VkIHdpdGhvdXQgYW5vdGhlciBzb3VyY2UgZW1pc3Npb24sIHRvIGRlbGF5IGRhdGEgZmlsdGVyaW5nLlxuICAgKiBVc2VmdWwgd2hlbiB0aGUgdXNlciBpcyB0eXBpbmcgbXVsdGlwbGUgbGV0dGVyc1xuICAgKiBAZGVmYXVsdCAzMDAgW21zXVxuICAgKi9cbiAgQElucHV0KCkgZGVib3VuY2VUaW1lID0gMzAwO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2Vob2xkZXJcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBsYWJlbCBldmVuIGdldCBsYWJlbFdhcmlhIGljb25cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsV2FyaWE6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2hvdyB0aGUgbGFiZWxcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgZm9yY2VTaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZSBTZWFyY2ggSXRlbSBoYXMgYmVlbiBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIHNlYXJjaFNlbGVjdGVkRXZlbnQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc2hvd0F1dG9jb21wbGV0aW9uID0gZmFsc2U7XG5cbiAgLyoqIE9ic2VydmFibGUgZGEgY3VpIHZlbmdvbm8gZW1lc3NpIGkgcmlzdWx0YXRpIGRlbGwnYXV0byBjb21wbGV0YW1lbnRvICovXG4gIHByb3RlY3RlZCBzZWFyY2hSZXN1bHRzJDogT2JzZXJ2YWJsZTx7XG4gICAgc2VhcmNoZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICByZWxhdGVkRW50cmllczogQXJyYXk8U2VhcmNoSXRlbT47XG4gIH0+ID0gbmV3IE9ic2VydmFibGUoKTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyQgPSB0aGlzLmdldFNlYXJjaFJlc3VsdHMkKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzZWFyY2ggbGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWFyY2hSZXN1bHRzJCgpOiBPYnNlcnZhYmxlPHtcbiAgICBzZWFyY2hlZFZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHJlbGF0ZWRFbnRyaWVzOiBBcnJheTxTZWFyY2hJdGVtPjtcbiAgfT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLCAvLyBEZWxheSBmaWx0ZXIgZGF0YSBhZnRlciB0aW1lIHNwYW4gaGFzIHBhc3NlZCB3aXRob3V0IGFub3RoZXIgc291cmNlIGVtaXNzaW9uLCB1c2VmdWwgd2hlbiB0aGUgdXNlciBpcyB0eXBpbmcgbXVsdGlwbGUgbGV0dGVyc1xuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgLy8gT25seSBpZiBzZWFyY2hWYWx1ZSBpcyBkaXN0aW5jdCBpbiBjb21wYXJpc29uIHRvIHRoZSBsYXN0IHZhbHVlXG4gICAgICBzd2l0Y2hNYXAoc2VhcmNoZWRWYWx1ZSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hEYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgIHNlYXJjaGVkVmFsdWUsXG4gICAgICAgICAgICByZWxhdGVkRW50cmllczogPEFycmF5PFNlYXJjaEl0ZW0+PltdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXV0b0NvbXBsZXRlRGF0YSQgPSBBcnJheS5pc0FycmF5KHRoaXMuc2VhcmNoRGF0YSkgPyBvZih0aGlzLnNlYXJjaERhdGEpIDogdGhpcy5zZWFyY2hEYXRhKHNlYXJjaGVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gYXV0b0NvbXBsZXRlRGF0YSQucGlwZShcbiAgICAgICAgICBtYXAoc2VhcmNoRGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNlYXJjaGVkVmFsdWUgfHwgdHlwZW9mIHNlYXJjaGVkVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHNlYXJjaGVkVmFsdWUsIHJlbGF0ZWRFbnRyaWVzOiBbXSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb3dlcmNhc2VWYWx1ZSA9IHNlYXJjaGVkVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRFbnRyaWVzID0gc2VhcmNoRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbHVlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVZhbHVlKSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IHNlYXJjaGVkVmFsdWUsIHJlbGF0ZWRFbnRyaWVzIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVudHJ5Q2xpY2soZW50cnk6IFNlYXJjaEl0ZW0sIGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFNlIG5vbiDDqCBzdGF0byBkZWZpbml0byB1biBsaW5rIGFzc29jaWF0byBhbGwnZWxlbWVudG8gZGVsbCdzZWFyY2gsIHByb2JhYmlsbWVudGUgaWwgZGVzaWRlcmF0YVxuICAgIC8vIG5vbiDDqCBlZmZldHR1YXJlIGxhIG5hdmlnYXppb25lIGFsIGRlZmF1bHQgJyMnLCBwZXJ0YW50byBpbiB0YWwgY2FzbyBtZWdsaW8gYW5udWxsYXJlIGxhIG5hdmlnYXppb25lLlxuICAgIGlmICghZW50cnkubGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFNlbGVjdGVkRXZlbnQubmV4dChlbnRyeSk7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGVudHJ5LnZhbHVlKTtcbiAgICB0aGlzLnNob3dBdXRvY29tcGxldGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlYXJjaEl0ZW1UcmFja0J5VmFsdWVGbihpbmRleDogbnVtYmVyLCBpdGVtOiBTZWFyY2hJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25LZXlEb3duKCkge1xuICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNBY3RpdmVMYWJlbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5mb3JjZVNob3dMYWJlbCAmJiAoISF2YWx1ZSB8fCAhIXRoaXMucGxhY2Vob2xkZXIpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtjbGFzcy5hdXRvY29tcGxldGUtd3JhcHBlci1iaWddPVwiYmlnXCI+XG4gIEBpZiAobGFiZWwpIHtcbiAgICA8bGFiZWwgW2Zvcl09XCJpZFwiIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiIWlzQWN0aXZlTGFiZWxcIiBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlTGFiZWxcIj5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgfVxuXG4gIDxpbnB1dFxuICAgIFtpZF09XCJpZFwiXG4gICAgdHlwZT1cInNlYXJjaFwiXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUgZm9ybS1jb250cm9sXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgIFtjbGFzcy5pcy12YWxpZF09XCJpc1ZhbGlkXCJcbiAgICAoYmx1cik9XCJtYXJrQXNUb3VjaGVkKClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigpXCIgLz5cblxuICA8c3BhbiBjbGFzcz1cImF1dG9jb21wbGV0ZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGl0LWljb24gW2xhYmVsV2FyaWFdPVwibGFiZWxXYXJpYVwiIG5hbWU9XCJzZWFyY2hcIiBzaXplPVwic21cIj48L2l0LWljb24+XG4gIDwvc3Bhbj5cblxuICBAaWYgKHNlYXJjaFJlc3VsdHMkIHwgYXN5bmM7IGFzIGF1dG9jb21wbGV0ZSkge1xuICAgIDx1bCBjbGFzcz1cImF1dG9jb21wbGV0ZS1saXN0XCIgW2NsYXNzLmF1dG9jb21wbGV0ZS1saXN0LXNob3ddPVwiYXV0b2NvbXBsZXRlLnJlbGF0ZWRFbnRyaWVzPy5sZW5ndGggJiYgc2hvd0F1dG9jb21wbGV0aW9uXCI+XG4gICAgICBAZm9yIChlbnRyeSBvZiBhdXRvY29tcGxldGUucmVsYXRlZEVudHJpZXM7IHRyYWNrIHNlYXJjaEl0ZW1UcmFja0J5VmFsdWVGbigkaW5kZXgsIGVudHJ5KSkge1xuICAgICAgICA8bGk+XG4gICAgICAgICAgPGEgW2hyZWZdPVwiZW50cnkubGlua1wiIChjbGljayk9XCJvbkVudHJ5Q2xpY2soZW50cnksICRldmVudClcIj5cbiAgICAgICAgICAgIEBpZiAoZW50cnkuYXZhdGFyU3JjUGF0aCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyIHNpemUtc21cIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZW50cnkuYXZhdGFyU3JjUGF0aFwiIFthbHRdPVwiZW50cnkuYXZhdGFyQWx0VGV4dFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChlbnRyeS5pY29uKSB7XG4gICAgICAgICAgICAgIDxpdC1pY29uIFtuYW1lXT1cImVudHJ5Lmljb25cIiBzaXplPVwic21cIj48L2l0LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG9jb21wbGV0ZS1saXN0LXRleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJlbnRyeS52YWx1ZSB8IGl0TWFya01hdGNoaW5nVGV4dDogYXV0b2NvbXBsZXRlLnNlYXJjaGVkVmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoZW50cnkubGFiZWwpIHtcbiAgICAgICAgICAgICAgICA8ZW0+e3sgZW50cnkubGFiZWwgfX08L2VtPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgfVxuICAgIDwvdWw+XG4gIH1cblxuICBAaWYgKGlzSW52YWxpZCkge1xuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgICAgPGRpdiAjY3VzdG9tRXJyb3I+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICB7eyBpbnZhbGlkTWVzc2FnZSB8IGFzeW5jIH19XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19