design-angular-kit 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/README.md +461 -0
  2. package/esm2022/design-angular-kit.mjs +5 -0
  3. package/esm2022/lib/abstracts/abstract-form.component.mjs +186 -0
  4. package/esm2022/lib/abstracts/abstract.component.mjs +46 -0
  5. package/esm2022/lib/components/core/accordion/accordion.component.mjs +39 -0
  6. package/esm2022/lib/components/core/alert/alert.component.mjs +71 -0
  7. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
  8. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +40 -0
  9. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
  10. package/esm2022/lib/components/core/avatar/avatar.module.mjs +33 -0
  11. package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
  12. package/esm2022/lib/components/core/button/button.directive.mjs +80 -0
  13. package/esm2022/lib/components/core/callout/callout.component.mjs +64 -0
  14. package/esm2022/lib/components/core/card/card.component.mjs +59 -0
  15. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +84 -0
  16. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
  17. package/esm2022/lib/components/core/carousel/carousel.module.mjs +18 -0
  18. package/esm2022/lib/components/core/chip/chip.component.mjs +136 -0
  19. package/esm2022/lib/components/core/collapse/collapse.component.mjs +116 -0
  20. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +27 -0
  21. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  22. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +55 -0
  23. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +19 -0
  24. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +147 -0
  25. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +70 -0
  26. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
  27. package/esm2022/lib/components/core/forward/forward.directive.mjs +57 -0
  28. package/esm2022/lib/components/core/link/link.component.mjs +42 -0
  29. package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
  30. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +56 -0
  31. package/esm2022/lib/components/core/list/list.module.mjs +18 -0
  32. package/esm2022/lib/components/core/modal/modal.component.mjs +194 -0
  33. package/esm2022/lib/components/core/notifications/notifications.component.mjs +111 -0
  34. package/esm2022/lib/components/core/pagination/pagination.component.mjs +130 -0
  35. package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
  36. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  37. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +25 -0
  38. package/esm2022/lib/components/core/spinner/spinner.component.mjs +30 -0
  39. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +116 -0
  40. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +22 -0
  41. package/esm2022/lib/components/core/steppers/steppers.module.mjs +18 -0
  42. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +97 -0
  43. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
  44. package/esm2022/lib/components/core/tab/tab.module.mjs +18 -0
  45. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +134 -0
  46. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
  47. package/esm2022/lib/components/core/table/table.component.mjs +45 -0
  48. package/esm2022/lib/components/core/table/table.module.mjs +19 -0
  49. package/esm2022/lib/components/core/timeline/timeline-item/timeline-item.component.mjs +90 -0
  50. package/esm2022/lib/components/core/timeline/timeline.component.mjs +36 -0
  51. package/esm2022/lib/components/core/timeline/timeline.module.mjs +18 -0
  52. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
  53. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +112 -0
  54. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
  55. package/esm2022/lib/components/form/form.module.mjs +63 -0
  56. package/esm2022/lib/components/form/input/input.component.mjs +190 -0
  57. package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
  58. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +60 -0
  59. package/esm2022/lib/components/form/range/range.component.mjs +64 -0
  60. package/esm2022/lib/components/form/rating/rating.component.mjs +50 -0
  61. package/esm2022/lib/components/form/select/select.component.mjs +70 -0
  62. package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
  63. package/esm2022/lib/components/form/transfer/store/transfer.reducers.mjs +191 -0
  64. package/esm2022/lib/components/form/transfer/store/transfer.state.mjs +2 -0
  65. package/esm2022/lib/components/form/transfer/store/transfer.store.mjs +70 -0
  66. package/esm2022/lib/components/form/transfer/transfer-list/transfer-list.component.mjs +72 -0
  67. package/esm2022/lib/components/form/transfer/transfer.component.mjs +149 -0
  68. package/esm2022/lib/components/form/transfer/transfer.model.mjs +6 -0
  69. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +142 -0
  70. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
  71. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
  72. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +68 -0
  73. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +51 -0
  74. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
  75. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
  76. package/esm2022/lib/components/navigation/header/header.component.mjs +103 -0
  77. package/esm2022/lib/components/navigation/megamenu/megamenu.component.mjs +27 -0
  78. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +49 -0
  79. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +11 -0
  80. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
  81. package/esm2022/lib/components/navigation/navscroll/navscroll-list-item.component.mjs +98 -0
  82. package/esm2022/lib/components/navigation/navscroll/navscroll-list-items.component.mjs +44 -0
  83. package/esm2022/lib/components/navigation/navscroll/navscroll.component.mjs +116 -0
  84. package/esm2022/lib/components/navigation/navscroll/navscroll.model.mjs +2 -0
  85. package/esm2022/lib/components/navigation/navscroll/navscroll.store.mjs +68 -0
  86. package/esm2022/lib/components/navigation/navscroll/navscroll.utils.mjs +23 -0
  87. package/esm2022/lib/components/navigation/sidebar/sidebar.component.mjs +50 -0
  88. package/esm2022/lib/components/navigation/skiplink/skiplink/skiplink.component.mjs +27 -0
  89. package/esm2022/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.mjs +26 -0
  90. package/esm2022/lib/components/navigation/skiplink/skiplink.module.mjs +18 -0
  91. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +74 -0
  92. package/esm2022/lib/components/utils/icon/icon.component.mjs +63 -0
  93. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +50 -0
  94. package/esm2022/lib/design-angular-kit.module.mjs +233 -0
  95. package/esm2022/lib/enums/colors.enums.mjs +12 -0
  96. package/esm2022/lib/enums/sizes.enum.mjs +9 -0
  97. package/esm2022/lib/interfaces/core.mjs +16 -0
  98. package/esm2022/lib/interfaces/design-angular-kit-config.mjs +7 -0
  99. package/esm2022/lib/interfaces/form.mjs +2 -0
  100. package/esm2022/lib/interfaces/icon.mjs +168 -0
  101. package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
  102. package/esm2022/lib/interfaces/utils.mjs +2 -0
  103. package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
  104. package/esm2022/lib/pipes/duration.pipe.mjs +115 -0
  105. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
  106. package/esm2022/lib/provide-design-angular-kit.mjs +64 -0
  107. package/esm2022/lib/services/notification/notification.service.mjs +120 -0
  108. package/esm2022/lib/utils/coercion.mjs +18 -0
  109. package/esm2022/lib/utils/date-utils.mjs +162 -0
  110. package/esm2022/lib/utils/file-utils.mjs +73 -0
  111. package/esm2022/lib/utils/regex.mjs +35 -0
  112. package/esm2022/lib/validators/it-validators.mjs +156 -0
  113. package/esm2022/public_api.mjs +110 -0
  114. package/fesm2022/design-angular-kit.mjs +6731 -0
  115. package/fesm2022/design-angular-kit.mjs.map +1 -0
  116. package/index.d.ts +5 -0
  117. package/lib/abstracts/abstract-form.component.d.ts +87 -0
  118. package/lib/abstracts/abstract.component.d.ts +30 -0
  119. package/lib/components/core/accordion/accordion.component.d.ts +18 -0
  120. package/lib/components/core/alert/alert.component.d.ts +44 -0
  121. package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
  122. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +15 -0
  123. package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
  124. package/lib/components/core/avatar/avatar.module.d.ts +9 -0
  125. package/lib/components/core/badge/badge.directive.d.ts +23 -0
  126. package/lib/components/core/button/button.directive.d.ts +48 -0
  127. package/lib/components/core/callout/callout.component.d.ts +50 -0
  128. package/lib/components/core/card/card.component.d.ts +69 -0
  129. package/lib/components/core/carousel/carousel/carousel.component.d.ts +65 -0
  130. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +15 -0
  131. package/lib/components/core/carousel/carousel.module.d.ts +8 -0
  132. package/lib/components/core/chip/chip.component.d.ts +76 -0
  133. package/lib/components/core/collapse/collapse.component.d.ts +67 -0
  134. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  135. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  136. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  137. package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
  138. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +94 -0
  139. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +46 -0
  140. package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
  141. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  142. package/lib/components/core/link/link.component.d.ts +35 -0
  143. package/lib/components/core/list/list/list.component.d.ts +24 -0
  144. package/lib/components/core/list/list-item/list-item.component.d.ts +41 -0
  145. package/lib/components/core/list/list.module.d.ts +8 -0
  146. package/lib/components/core/modal/modal.component.d.ts +135 -0
  147. package/lib/components/core/notifications/notifications.component.d.ts +45 -0
  148. package/lib/components/core/pagination/pagination.component.d.ts +92 -0
  149. package/lib/components/core/popover/popover.directive.d.ts +99 -0
  150. package/lib/components/core/progress-bar/progress-bar.component.d.ts +31 -0
  151. package/lib/components/core/progress-button/progress-button.component.d.ts +21 -0
  152. package/lib/components/core/spinner/spinner.component.d.ts +24 -0
  153. package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +130 -0
  154. package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +24 -0
  155. package/lib/components/core/steppers/steppers.module.d.ts +8 -0
  156. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +60 -0
  157. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +38 -0
  158. package/lib/components/core/tab/tab.module.d.ts +8 -0
  159. package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
  160. package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
  161. package/lib/components/core/table/table.component.d.ts +60 -0
  162. package/lib/components/core/table/table.module.d.ts +9 -0
  163. package/lib/components/core/timeline/timeline-item/timeline-item.component.d.ts +79 -0
  164. package/lib/components/core/timeline/timeline.component.d.ts +21 -0
  165. package/lib/components/core/timeline/timeline.module.d.ts +8 -0
  166. package/lib/components/core/tooltip/tooltip.directive.d.ts +82 -0
  167. package/lib/components/form/autocomplete/autocomplete.component.d.ts +59 -0
  168. package/lib/components/form/checkbox/checkbox.component.d.ts +41 -0
  169. package/lib/components/form/form.module.d.ts +18 -0
  170. package/lib/components/form/input/input.component.d.ts +95 -0
  171. package/lib/components/form/password-input/password-input.component.d.ts +80 -0
  172. package/lib/components/form/radio-button/radio-button.component.d.ts +38 -0
  173. package/lib/components/form/range/range.component.d.ts +42 -0
  174. package/lib/components/form/rating/rating.component.d.ts +24 -0
  175. package/lib/components/form/select/select.component.d.ts +36 -0
  176. package/lib/components/form/textarea/textarea.component.d.ts +34 -0
  177. package/lib/components/form/transfer/store/transfer.reducers.d.ts +103 -0
  178. package/lib/components/form/transfer/store/transfer.state.d.ts +18 -0
  179. package/lib/components/form/transfer/store/transfer.store.d.ts +23 -0
  180. package/lib/components/form/transfer/transfer-list/transfer-list.component.d.ts +48 -0
  181. package/lib/components/form/transfer/transfer.component.d.ts +75 -0
  182. package/{src/lib/components/form/transfer/transfer.model.ts → lib/components/form/transfer/transfer.model.d.ts} +2 -9
  183. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +60 -0
  184. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +62 -0
  185. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  186. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +50 -0
  187. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +28 -0
  188. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +23 -0
  189. package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  190. package/lib/components/navigation/header/header.component.d.ts +38 -0
  191. package/lib/components/navigation/megamenu/megamenu.component.d.ts +22 -0
  192. package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +19 -0
  193. package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
  194. package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
  195. package/lib/components/navigation/navscroll/navscroll-list-item.component.d.ts +16 -0
  196. package/lib/components/navigation/navscroll/navscroll-list-items.component.d.ts +7 -0
  197. package/lib/components/navigation/navscroll/navscroll.component.d.ts +47 -0
  198. package/{src/lib/components/navigation/navscroll/navscroll.model.ts → lib/components/navigation/navscroll/navscroll.model.d.ts} +5 -7
  199. package/lib/components/navigation/navscroll/navscroll.store.d.ts +16 -0
  200. package/lib/components/navigation/navscroll/navscroll.utils.d.ts +6 -0
  201. package/lib/components/navigation/sidebar/sidebar.component.d.ts +26 -0
  202. package/lib/components/navigation/skiplink/skiplink/skiplink.component.d.ts +17 -0
  203. package/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.d.ts +24 -0
  204. package/lib/components/navigation/skiplink/skiplink.module.d.ts +8 -0
  205. package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
  206. package/lib/components/utils/icon/icon.component.d.ts +53 -0
  207. package/lib/components/utils/language-switcher/language-switcher.component.d.ts +27 -0
  208. package/lib/design-angular-kit.module.d.ts +53 -0
  209. package/lib/enums/colors.enums.d.ts +10 -0
  210. package/lib/enums/sizes.enum.d.ts +7 -0
  211. package/{src/lib/interfaces/core.ts → lib/interfaces/core.d.ts} +53 -95
  212. package/lib/interfaces/design-angular-kit-config.d.ts +30 -0
  213. package/lib/interfaces/form.d.ts +67 -0
  214. package/lib/interfaces/icon.d.ts +4 -0
  215. package/lib/interfaces/sortable-table.d.ts +33 -0
  216. package/lib/interfaces/utils.d.ts +10 -0
  217. package/lib/pipes/date-ago.pipe.d.ts +17 -0
  218. package/lib/pipes/duration.pipe.d.ts +35 -0
  219. package/lib/pipes/mark-matching-text.pipe.d.ts +18 -0
  220. package/lib/provide-design-angular-kit.d.ts +7 -0
  221. package/lib/services/notification/notification.service.d.ts +63 -0
  222. package/{src/lib/utils/coercion.ts → lib/utils/coercion.d.ts} +1 -7
  223. package/lib/utils/date-utils.d.ts +79 -0
  224. package/lib/utils/file-utils.d.ts +32 -0
  225. package/lib/utils/regex.d.ts +34 -0
  226. package/lib/validators/it-validators.d.ts +69 -0
  227. package/package.json +14 -9
  228. package/{src/public_api.ts → public_api.d.ts} +0 -43
  229. package/schematics/ng-add/index.d.ts +3 -0
  230. package/schematics/ng-add/index.js +29 -0
  231. package/schematics/ng-add/index.js.map +1 -0
  232. package/schematics/ng-add/index.spec.d.ts +1 -0
  233. package/schematics/ng-add/index.spec.js +43 -0
  234. package/schematics/ng-add/index.spec.js.map +1 -0
  235. package/schematics/ng-add/rules/setup-project/add-animations.d.ts +2 -0
  236. package/schematics/ng-add/rules/setup-project/add-animations.js +11 -0
  237. package/schematics/ng-add/rules/setup-project/add-animations.js.map +1 -0
  238. package/schematics/ng-add/rules/setup-project/add-assets.d.ts +3 -0
  239. package/schematics/ng-add/rules/setup-project/add-assets.js +50 -0
  240. package/schematics/ng-add/rules/setup-project/add-assets.js.map +1 -0
  241. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.d.ts +3 -0
  242. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js +43 -0
  243. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js.map +1 -0
  244. package/schematics/ng-add/rules/setup-project/add-http-client.d.ts +2 -0
  245. package/schematics/ng-add/rules/setup-project/add-http-client.js +11 -0
  246. package/schematics/ng-add/rules/setup-project/add-http-client.js.map +1 -0
  247. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.d.ts +11 -0
  248. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js +112 -0
  249. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js.map +1 -0
  250. package/schematics/ng-add/rules/setup-project/add-localisation.d.ts +3 -0
  251. package/schematics/ng-add/rules/setup-project/add-localisation.js +50 -0
  252. package/schematics/ng-add/rules/setup-project/add-localisation.js.map +1 -0
  253. package/schematics/ng-add/rules/setup-project/angular-json-helper.d.ts +2 -0
  254. package/schematics/ng-add/rules/setup-project/angular-json-helper.js +13 -0
  255. package/schematics/ng-add/rules/setup-project/angular-json-helper.js.map +1 -0
  256. package/schematics/ng-add/rules/setup-project/exceptions.d.ts +7 -0
  257. package/schematics/ng-add/rules/setup-project/exceptions.js +17 -0
  258. package/schematics/ng-add/rules/setup-project/exceptions.js.map +1 -0
  259. package/schematics/ng-add/rules/setup-project/index.js +23 -0
  260. package/schematics/ng-add/rules/setup-project/index.js.map +1 -0
  261. package/schematics/ng-add/{schema.ts → schema.d.ts} +1 -1
  262. package/schematics/ng-add/schema.js +3 -0
  263. package/schematics/ng-add/schema.js.map +1 -0
  264. package/schematics/ng-add/setup-project.d.ts +3 -0
  265. package/schematics/ng-add/setup-project.js +37 -0
  266. package/schematics/ng-add/setup-project.js.map +1 -0
  267. package/schematics/ng-add/setup-project.spec.d.ts +1 -0
  268. package/schematics/ng-add/setup-project.spec.js +139 -0
  269. package/schematics/ng-add/setup-project.spec.js.map +1 -0
  270. package/schematics/ng-add/utils.d.ts +14 -0
  271. package/schematics/ng-add/utils.js +49 -0
  272. package/schematics/ng-add/utils.js.map +1 -0
  273. package/schematics/ng-add/versions-helper.d.ts +3 -0
  274. package/schematics/ng-add/versions-helper.js +40 -0
  275. package/schematics/ng-add/versions-helper.js.map +1 -0
  276. package/.eslintrc.json +0 -31
  277. package/karma.conf.js +0 -38
  278. package/ng-package.json +0 -9
  279. package/ng-package.prod.json +0 -8
  280. package/schematics/ng-add/index.spec.ts +0 -45
  281. package/schematics/ng-add/index.ts +0 -36
  282. package/schematics/ng-add/rules/setup-project/add-animations.ts +0 -7
  283. package/schematics/ng-add/rules/setup-project/add-assets.ts +0 -45
  284. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.ts +0 -40
  285. package/schematics/ng-add/rules/setup-project/add-http-client.ts +0 -7
  286. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.ts +0 -120
  287. package/schematics/ng-add/rules/setup-project/add-localisation.ts +0 -45
  288. package/schematics/ng-add/rules/setup-project/angular-json-helper.ts +0 -11
  289. package/schematics/ng-add/rules/setup-project/exceptions.ts +0 -13
  290. package/schematics/ng-add/setup-project.spec.ts +0 -166
  291. package/schematics/ng-add/setup-project.ts +0 -31
  292. package/schematics/ng-add/utils.ts +0 -71
  293. package/schematics/ng-add/versions-helper.ts +0 -41
  294. package/src/lib/abstracts/abstract-form.component.ts +0 -200
  295. package/src/lib/abstracts/abstract.component.ts +0 -63
  296. package/src/lib/components/core/accordion/accordion.component.html +0 -27
  297. package/src/lib/components/core/accordion/accordion.component.spec.ts +0 -21
  298. package/src/lib/components/core/accordion/accordion.component.ts +0 -40
  299. package/src/lib/components/core/alert/alert.component.html +0 -19
  300. package/src/lib/components/core/alert/alert.component.scss +0 -3
  301. package/src/lib/components/core/alert/alert.component.spec.ts +0 -62
  302. package/src/lib/components/core/alert/alert.component.ts +0 -75
  303. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.html +0 -23
  304. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.scss +0 -17
  305. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.spec.ts +0 -21
  306. package/src/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.ts +0 -50
  307. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.html +0 -7
  308. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.spec.ts +0 -38
  309. package/src/lib/components/core/avatar/avatar-group/avatar-group.component.ts +0 -25
  310. package/src/lib/components/core/avatar/avatar.directive.ts +0 -73
  311. package/src/lib/components/core/avatar/avatar.module.ts +0 -18
  312. package/src/lib/components/core/badge/badge.directive.spec.ts +0 -59
  313. package/src/lib/components/core/badge/badge.directive.ts +0 -39
  314. package/src/lib/components/core/button/button.directive.spec.ts +0 -96
  315. package/src/lib/components/core/button/button.directive.ts +0 -89
  316. package/src/lib/components/core/callout/callout.component.html +0 -25
  317. package/src/lib/components/core/callout/callout.component.spec.ts +0 -138
  318. package/src/lib/components/core/callout/callout.component.ts +0 -92
  319. package/src/lib/components/core/card/card.component.html +0 -35
  320. package/src/lib/components/core/card/card.component.scss +0 -30
  321. package/src/lib/components/core/card/card.component.spec.ts +0 -21
  322. package/src/lib/components/core/card/card.component.ts +0 -78
  323. package/src/lib/components/core/carousel/carousel/carousel.component.html +0 -29
  324. package/src/lib/components/core/carousel/carousel/carousel.component.scss +0 -1
  325. package/src/lib/components/core/carousel/carousel/carousel.component.spec.ts +0 -21
  326. package/src/lib/components/core/carousel/carousel/carousel.component.ts +0 -119
  327. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.html +0 -3
  328. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.spec.ts +0 -22
  329. package/src/lib/components/core/carousel/carousel-item/carousel-item.component.ts +0 -20
  330. package/src/lib/components/core/carousel/carousel.module.ts +0 -11
  331. package/src/lib/components/core/chip/chip.component.html +0 -26
  332. package/src/lib/components/core/chip/chip.component.spec.ts +0 -87
  333. package/src/lib/components/core/chip/chip.component.ts +0 -154
  334. package/src/lib/components/core/collapse/collapse.component.html +0 -3
  335. package/src/lib/components/core/collapse/collapse.component.spec.ts +0 -21
  336. package/src/lib/components/core/collapse/collapse.component.ts +0 -124
  337. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.html +0 -3
  338. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.spec.ts +0 -35
  339. package/src/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.ts +0 -23
  340. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.html +0 -3
  341. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.spec.ts +0 -22
  342. package/src/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.ts +0 -10
  343. package/src/lib/components/core/dimmer/dimmer.component.html +0 -7
  344. package/src/lib/components/core/dimmer/dimmer.component.spec.ts +0 -49
  345. package/src/lib/components/core/dimmer/dimmer.component.ts +0 -50
  346. package/src/lib/components/core/dimmer/dimmer.module.ts +0 -12
  347. package/src/lib/components/core/dropdown/dropdown/dropdown.component.html +0 -45
  348. package/src/lib/components/core/dropdown/dropdown/dropdown.component.scss +0 -3
  349. package/src/lib/components/core/dropdown/dropdown/dropdown.component.spec.ts +0 -21
  350. package/src/lib/components/core/dropdown/dropdown/dropdown.component.ts +0 -186
  351. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.html +0 -18
  352. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.scss +0 -4
  353. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.spec.ts +0 -21
  354. package/src/lib/components/core/dropdown/dropdown-item/dropdown-item.component.ts +0 -82
  355. package/src/lib/components/core/dropdown/dropdown.module.ts +0 -11
  356. package/src/lib/components/core/forward/forward.directive.spec.ts +0 -60
  357. package/src/lib/components/core/forward/forward.directive.ts +0 -43
  358. package/src/lib/components/core/link/link.component.html +0 -13
  359. package/src/lib/components/core/link/link.component.spec.ts +0 -21
  360. package/src/lib/components/core/link/link.component.ts +0 -54
  361. package/src/lib/components/core/list/list/list.component.html +0 -13
  362. package/src/lib/components/core/list/list/list.component.spec.ts +0 -21
  363. package/src/lib/components/core/list/list/list.component.ts +0 -30
  364. package/src/lib/components/core/list/list-item/list-item.component.html +0 -42
  365. package/src/lib/components/core/list/list-item/list-item.component.scss +0 -16
  366. package/src/lib/components/core/list/list-item/list-item.component.spec.ts +0 -21
  367. package/src/lib/components/core/list/list-item/list-item.component.ts +0 -75
  368. package/src/lib/components/core/list/list.module.ts +0 -11
  369. package/src/lib/components/core/modal/modal.component.html +0 -36
  370. package/src/lib/components/core/modal/modal.component.scss +0 -3
  371. package/src/lib/components/core/modal/modal.component.spec.ts +0 -21
  372. package/src/lib/components/core/modal/modal.component.ts +0 -218
  373. package/src/lib/components/core/notifications/notifications.component.html +0 -25
  374. package/src/lib/components/core/notifications/notifications.component.scss +0 -3
  375. package/src/lib/components/core/notifications/notifications.component.spec.ts +0 -21
  376. package/src/lib/components/core/notifications/notifications.component.ts +0 -123
  377. package/src/lib/components/core/pagination/pagination.component.html +0 -107
  378. package/src/lib/components/core/pagination/pagination.component.spec.ts +0 -21
  379. package/src/lib/components/core/pagination/pagination.component.ts +0 -157
  380. package/src/lib/components/core/popover/popover.directive.spec.ts +0 -21
  381. package/src/lib/components/core/popover/popover.directive.ts +0 -171
  382. package/src/lib/components/core/progress-bar/progress-bar.component.html +0 -20
  383. package/src/lib/components/core/progress-bar/progress-bar.component.spec.ts +0 -21
  384. package/src/lib/components/core/progress-bar/progress-bar.component.ts +0 -46
  385. package/src/lib/components/core/progress-button/progress-button.component.html +0 -5
  386. package/src/lib/components/core/progress-button/progress-button.component.spec.ts +0 -21
  387. package/src/lib/components/core/progress-button/progress-button.component.ts +0 -39
  388. package/src/lib/components/core/spinner/spinner.component.html +0 -7
  389. package/src/lib/components/core/spinner/spinner.component.spec.ts +0 -80
  390. package/src/lib/components/core/spinner/spinner.component.ts +0 -31
  391. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.html +0 -126
  392. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.spec.ts +0 -21
  393. package/src/lib/components/core/steppers/steppers-container/steppers-container.component.ts +0 -185
  394. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.html +0 -3
  395. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.spec.ts +0 -22
  396. package/src/lib/components/core/steppers/steppers-item/steppers-item.component.ts +0 -33
  397. package/src/lib/components/core/steppers/steppers.module.ts +0 -11
  398. package/src/lib/components/core/tab/tab-container/tab-container.component.html +0 -78
  399. package/src/lib/components/core/tab/tab-container/tab-container.component.spec.ts +0 -21
  400. package/src/lib/components/core/tab/tab-container/tab-container.component.ts +0 -137
  401. package/src/lib/components/core/tab/tab-item/tab-item.component.html +0 -3
  402. package/src/lib/components/core/tab/tab-item/tab-item.component.spec.ts +0 -22
  403. package/src/lib/components/core/tab/tab-item/tab-item.component.ts +0 -50
  404. package/src/lib/components/core/tab/tab.module.ts +0 -11
  405. package/src/lib/components/core/table/sort/sort-header/sort-header.component.html +0 -27
  406. package/src/lib/components/core/table/sort/sort-header/sort-header.component.scss +0 -65
  407. package/src/lib/components/core/table/sort/sort-header/sort-header.component.spec.ts +0 -25
  408. package/src/lib/components/core/table/sort/sort-header/sort-header.component.ts +0 -164
  409. package/src/lib/components/core/table/sort/sort.directive.spec.ts +0 -73
  410. package/src/lib/components/core/table/sort/sort.directive.ts +0 -142
  411. package/src/lib/components/core/table/table.component.html +0 -23
  412. package/src/lib/components/core/table/table.component.scss +0 -7
  413. package/src/lib/components/core/table/table.component.spec.ts +0 -21
  414. package/src/lib/components/core/table/table.component.ts +0 -70
  415. package/src/lib/components/core/table/table.module.ts +0 -12
  416. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.html +0 -47
  417. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.spec.ts +0 -24
  418. package/src/lib/components/core/timeline/timeline-item/timeline-item.component.ts +0 -102
  419. package/src/lib/components/core/timeline/timeline.component.html +0 -21
  420. package/src/lib/components/core/timeline/timeline.component.spec.ts +0 -21
  421. package/src/lib/components/core/timeline/timeline.component.ts +0 -31
  422. package/src/lib/components/core/timeline/timeline.module.ts +0 -11
  423. package/src/lib/components/core/tooltip/tooltip.directive.spec.ts +0 -20
  424. package/src/lib/components/core/tooltip/tooltip.directive.ts +0 -141
  425. package/src/lib/components/form/autocomplete/autocomplete.component.html +0 -58
  426. package/src/lib/components/form/autocomplete/autocomplete.component.spec.ts +0 -21
  427. package/src/lib/components/form/autocomplete/autocomplete.component.ts +0 -130
  428. package/src/lib/components/form/checkbox/checkbox.component.html +0 -67
  429. package/src/lib/components/form/checkbox/checkbox.component.spec.ts +0 -21
  430. package/src/lib/components/form/checkbox/checkbox.component.ts +0 -65
  431. package/src/lib/components/form/form.module.ts +0 -34
  432. package/src/lib/components/form/input/input.component.html +0 -92
  433. package/src/lib/components/form/input/input.component.scss +0 -29
  434. package/src/lib/components/form/input/input.component.spec.ts +0 -21
  435. package/src/lib/components/form/input/input.component.ts +0 -234
  436. package/src/lib/components/form/password-input/password-input.component.html +0 -65
  437. package/src/lib/components/form/password-input/password-input.component.scss +0 -9
  438. package/src/lib/components/form/password-input/password-input.component.spec.ts +0 -21
  439. package/src/lib/components/form/password-input/password-input.component.ts +0 -171
  440. package/src/lib/components/form/radio-button/radio-button.component.html +0 -50
  441. package/src/lib/components/form/radio-button/radio-button.component.scss +0 -14
  442. package/src/lib/components/form/radio-button/radio-button.component.spec.ts +0 -21
  443. package/src/lib/components/form/radio-button/radio-button.component.ts +0 -82
  444. package/src/lib/components/form/range/range.component.html +0 -17
  445. package/src/lib/components/form/range/range.component.scss +0 -17
  446. package/src/lib/components/form/range/range.component.spec.ts +0 -21
  447. package/src/lib/components/form/range/range.component.ts +0 -100
  448. package/src/lib/components/form/rating/rating.component.html +0 -24
  449. package/src/lib/components/form/rating/rating.component.spec.ts +0 -21
  450. package/src/lib/components/form/rating/rating.component.ts +0 -52
  451. package/src/lib/components/form/select/select.component.html +0 -54
  452. package/src/lib/components/form/select/select.component.scss +0 -3
  453. package/src/lib/components/form/select/select.component.spec.ts +0 -22
  454. package/src/lib/components/form/select/select.component.ts +0 -91
  455. package/src/lib/components/form/textarea/textarea.component.html +0 -28
  456. package/src/lib/components/form/textarea/textarea.component.scss +0 -12
  457. package/src/lib/components/form/textarea/textarea.component.spec.ts +0 -21
  458. package/src/lib/components/form/textarea/textarea.component.ts +0 -61
  459. package/src/lib/components/form/transfer/store/transfer.reducers.ts +0 -242
  460. package/src/lib/components/form/transfer/store/transfer.state.ts +0 -20
  461. package/src/lib/components/form/transfer/store/transfer.store.ts +0 -88
  462. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.html +0 -42
  463. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.spec.ts +0 -33
  464. package/src/lib/components/form/transfer/transfer-list/transfer-list.component.ts +0 -93
  465. package/src/lib/components/form/transfer/transfer.component.html +0 -52
  466. package/src/lib/components/form/transfer/transfer.component.spec.ts +0 -27
  467. package/src/lib/components/form/transfer/transfer.component.ts +0 -159
  468. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.html +0 -36
  469. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.spec.ts +0 -21
  470. package/src/lib/components/form/upload-drag-drop/upload-drag-drop.component.ts +0 -170
  471. package/src/lib/components/form/upload-file-list/upload-file-list.component.html +0 -46
  472. package/src/lib/components/form/upload-file-list/upload-file-list.component.spec.ts +0 -22
  473. package/src/lib/components/form/upload-file-list/upload-file-list.component.ts +0 -120
  474. package/src/lib/components/navigation/back-button/back-button.component.html +0 -25
  475. package/src/lib/components/navigation/back-button/back-button.component.spec.ts +0 -91
  476. package/src/lib/components/navigation/back-button/back-button.component.ts +0 -67
  477. package/src/lib/components/navigation/back-to-top/back-to-top.component.html +0 -11
  478. package/src/lib/components/navigation/back-to-top/back-to-top.component.spec.ts +0 -21
  479. package/src/lib/components/navigation/back-to-top/back-to-top.component.ts +0 -80
  480. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.html +0 -23
  481. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.spec.ts +0 -21
  482. package/src/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.ts +0 -68
  483. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.html +0 -3
  484. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.spec.ts +0 -22
  485. package/src/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.ts +0 -29
  486. package/src/lib/components/navigation/breadcrumbs/breadcrumbs.module.ts +0 -11
  487. package/src/lib/components/navigation/header/header.component.html +0 -102
  488. package/src/lib/components/navigation/header/header.component.scss +0 -3
  489. package/src/lib/components/navigation/header/header.component.spec.ts +0 -21
  490. package/src/lib/components/navigation/header/header.component.ts +0 -107
  491. package/src/lib/components/navigation/megamenu/megamenu.component.html +0 -34
  492. package/src/lib/components/navigation/megamenu/megamenu.component.scss +0 -5
  493. package/src/lib/components/navigation/megamenu/megamenu.component.ts +0 -30
  494. package/src/lib/components/navigation/navbar/navbar/navbar.component.html +0 -28
  495. package/src/lib/components/navigation/navbar/navbar/navbar.component.ts +0 -45
  496. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.html +0 -3
  497. package/src/lib/components/navigation/navbar/navbar-item/navbar-item.component.ts +0 -10
  498. package/src/lib/components/navigation/navbar/navbar.module.ts +0 -11
  499. package/src/lib/components/navigation/navscroll/navscroll-list-item.component.ts +0 -95
  500. package/src/lib/components/navigation/navscroll/navscroll-list-items.component.ts +0 -27
  501. package/src/lib/components/navigation/navscroll/navscroll.component.html +0 -101
  502. package/src/lib/components/navigation/navscroll/navscroll.component.scss +0 -9
  503. package/src/lib/components/navigation/navscroll/navscroll.component.ts +0 -143
  504. package/src/lib/components/navigation/navscroll/navscroll.store.ts +0 -96
  505. package/src/lib/components/navigation/navscroll/navscroll.utils.ts +0 -28
  506. package/src/lib/components/navigation/sidebar/sidebar.component.html +0 -11
  507. package/src/lib/components/navigation/sidebar/sidebar.component.spec.ts +0 -21
  508. package/src/lib/components/navigation/sidebar/sidebar.component.ts +0 -39
  509. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.html +0 -15
  510. package/src/lib/components/navigation/skiplink/skiplink/skiplink.component.ts +0 -27
  511. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.html +0 -15
  512. package/src/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.ts +0 -38
  513. package/src/lib/components/navigation/skiplink/skiplink.module.ts +0 -11
  514. package/src/lib/components/utils/error-page/error-page.component.html +0 -33
  515. package/src/lib/components/utils/error-page/error-page.component.spec.ts +0 -21
  516. package/src/lib/components/utils/error-page/error-page.component.ts +0 -79
  517. package/src/lib/components/utils/icon/icon.component.html +0 -6
  518. package/src/lib/components/utils/icon/icon.component.spec.ts +0 -21
  519. package/src/lib/components/utils/icon/icon.component.ts +0 -95
  520. package/src/lib/components/utils/language-switcher/language-switcher.component.html +0 -21
  521. package/src/lib/components/utils/language-switcher/language-switcher.component.spec.ts +0 -21
  522. package/src/lib/components/utils/language-switcher/language-switcher.component.ts +0 -56
  523. package/src/lib/design-angular-kit.module.ts +0 -131
  524. package/src/lib/enums/colors.enums.ts +0 -10
  525. package/src/lib/enums/sizes.enum.ts +0 -7
  526. package/src/lib/interfaces/design-angular-kit-config.ts +0 -34
  527. package/src/lib/interfaces/form.ts +0 -78
  528. package/src/lib/interfaces/icon.ts +0 -176
  529. package/src/lib/interfaces/sortable-table.ts +0 -42
  530. package/src/lib/interfaces/utils.ts +0 -11
  531. package/src/lib/pipes/date-ago.pipe.ts +0 -57
  532. package/src/lib/pipes/duration.pipe.ts +0 -112
  533. package/src/lib/pipes/mark-matching-text.pipe.ts +0 -43
  534. package/src/lib/provide-design-angular-kit.ts +0 -73
  535. package/src/lib/services/notification/notification.service.spec.ts +0 -16
  536. package/src/lib/services/notification/notification.service.ts +0 -119
  537. package/src/lib/utils/date-utils.ts +0 -184
  538. package/src/lib/utils/file-utils.ts +0 -80
  539. package/src/lib/utils/regex.ts +0 -44
  540. package/src/lib/validators/it-validators.ts +0 -193
  541. package/src/test.ts +0 -26
  542. package/tsconfig.lib.json +0 -24
  543. package/tsconfig.lib.prod.json +0 -9
  544. package/tsconfig.schematics.json +0 -25
  545. package/tsconfig.spec.json +0 -9
  546. /package/schematics/ng-add/rules/setup-project/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,72 @@
1
+ import { AsyncPipe, TitleCasePipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, HostAttributeToken, inject, ViewChild } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { combineLatest, distinctUntilChanged, map, shareReplay, skip, startWith, tap } from 'rxjs';
5
+ import { ItAbstractComponent } from '../../../../abstracts/abstract.component';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../store/transfer.store";
9
+ import * as i2 from "@ngx-translate/core";
10
+ export class ItTransferListComponent extends ItAbstractComponent {
11
+ constructor(store) {
12
+ super();
13
+ this.store = store;
14
+ /**
15
+ * Widget title
16
+ */
17
+ this.title = inject(new HostAttributeToken('title'), { optional: true });
18
+ this.sourceType = inject(new HostAttributeToken('sourceType'), { optional: true });
19
+ this.items = this.store.selectItems(this.sourceType).pipe(distinctUntilChanged(), shareReplay());
20
+ this.selected = this.store.selectSelectedItems(this.sourceType).pipe(distinctUntilChanged(), shareReplay());
21
+ this.numberOfItems$ = this.items.pipe(map(items => ({ length: items.length })), startWith({ length: 0 }));
22
+ this.selectAllDisabled = this.items.pipe(map(items => items.length === 0));
23
+ /**
24
+ * Items of the list
25
+ * @default []
26
+ */
27
+ this.items$ = combineLatest([this.items, this.selected]).pipe(map(([items, selected]) => items.map(item => {
28
+ item.selected = selected.has(item);
29
+ return item;
30
+ })));
31
+ this.instanceId = this.getInstanceId();
32
+ this.onItemsUpdate();
33
+ }
34
+ /**
35
+ * Checkbox selection click handler
36
+ */
37
+ checkboxSelectionHandler(item) {
38
+ this.store.checkboxSelection(item, this.sourceType);
39
+ }
40
+ /**
41
+ * Checkbox select all selection handler
42
+ */
43
+ checkboxSelectAllHandler(event) {
44
+ const checked = event.target.checked;
45
+ this.store.selectAllSelection(checked, this.sourceType);
46
+ }
47
+ /**
48
+ * Items update subscription
49
+ */
50
+ onItemsUpdate() {
51
+ this.items
52
+ .pipe(takeUntilDestroyed(), skip(1), tap(() => {
53
+ if (this.selectAllCheckboxRef) {
54
+ this.selectAllCheckboxRef.nativeElement.checked = false;
55
+ }
56
+ }))
57
+ .subscribe();
58
+ }
59
+ getInstanceId() {
60
+ return Math.floor(Math.random() * 100000000).toString();
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferListComponent, deps: [{ token: i1.TransferStore }], target: i0.ɵɵFactoryTarget.Component }); }
63
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItTransferListComponent, isStandalone: true, selector: "it-transfer-list", viewQueries: [{ propertyName: "selectAllCheckboxRef", first: true, predicate: ["selectAllCheckbox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"it-transfer-wrapper source\">\n <div class=\"transfer-header\">\n <div class=\"form-check\">\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n id=\"{{ instanceId }}checkbox{{ title }}\"\n [disabled]=\"selectAllDisabled | async\"\n (click)=\"checkboxSelectAllHandler($event)\" />\n <label for=\"{{ instanceId }}checkbox{{ title }}\">\n <span>\n @if (numberOfItems$ | async; as numberOfItems) {\n <span class=\"num\"> {{ numberOfItems.length }}</span>\n <span> {{ (numberOfItems.length === 1 ? 'it.transfer.item' : 'it.transfer.items') | translate }}</span>\n }\n </span>\n <span class=\"descr\">{{ title | titlecase }}</span>\n </label>\n </div>\n <!-- form check -->\n </div>\n <!-- transfer-header -->\n <div class=\"transfer-scroll\">\n <div class=\"transfer-group\">\n @for (item of items$ | async; track item.value) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n id=\"{{ instanceId }}-{{ item.value }}\"\n [checked]=\"item.selected\"\n (click)=\"checkboxSelectionHandler(item)\" />\n <label for=\"{{ instanceId }}-{{ item.value }}\">\n <span>\n <span>{{ item.text }}</span>\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n<!-- it-transfer-wrapper -->\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferListComponent, decorators: [{
66
+ type: Component,
67
+ args: [{ selector: 'it-transfer-list', standalone: true, imports: [TranslateModule, AsyncPipe, TitleCasePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"it-transfer-wrapper source\">\n <div class=\"transfer-header\">\n <div class=\"form-check\">\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n id=\"{{ instanceId }}checkbox{{ title }}\"\n [disabled]=\"selectAllDisabled | async\"\n (click)=\"checkboxSelectAllHandler($event)\" />\n <label for=\"{{ instanceId }}checkbox{{ title }}\">\n <span>\n @if (numberOfItems$ | async; as numberOfItems) {\n <span class=\"num\"> {{ numberOfItems.length }}</span>\n <span> {{ (numberOfItems.length === 1 ? 'it.transfer.item' : 'it.transfer.items') | translate }}</span>\n }\n </span>\n <span class=\"descr\">{{ title | titlecase }}</span>\n </label>\n </div>\n <!-- form check -->\n </div>\n <!-- transfer-header -->\n <div class=\"transfer-scroll\">\n <div class=\"transfer-group\">\n @for (item of items$ | async; track item.value) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n id=\"{{ instanceId }}-{{ item.value }}\"\n [checked]=\"item.selected\"\n (click)=\"checkboxSelectionHandler(item)\" />\n <label for=\"{{ instanceId }}-{{ item.value }}\">\n <span>\n <span>{{ item.text }}</span>\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n<!-- it-transfer-wrapper -->\n" }]
68
+ }], ctorParameters: () => [{ type: i1.TransferStore }], propDecorators: { selectAllCheckboxRef: [{
69
+ type: ViewChild,
70
+ args: ['selectAllCheckbox']
71
+ }] } });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvdHJhbnNmZXItbGlzdC90cmFuc2Zlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmFuc2Zlci90cmFuc2Zlci1saXN0L3RyYW5zZmVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWN0RCxNQUFNLE9BQU8sdUJBQTJCLFNBQVEsbUJBQW1CO0lBa0NqRSxZQUE2QixLQUF1QjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQURtQixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQWpDcEQ7O1dBRUc7UUFDTSxVQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFD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U0FBUyx5Q0FBRSxhQUFhOzsyRkFJeEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxtQkFFbkMsdUJBQXVCLENBQUMsTUFBTTtrRkFnQy9DLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEF0dHJpYnV0ZVRva2VuLCBpbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHNraXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2ZlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmUvdHJhbnNmZXIuc3RvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTb3VyY2VUeXBlLCBUcmFuc2Zlckl0ZW0gfSBmcm9tICcuLi90cmFuc2Zlci5tb2RlbCc7XG5cbmludGVyZmFjZSBTZWxlY3RhYmxlVHJhbnNmZXJJdGVtPFQ+IGV4dGVuZHMgVHJhbnNmZXJJdGVtPFQ+IHtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXRyYW5zZmVyLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNmZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJdFRyYW5zZmVyTGlzdENvbXBvbmVudDxUPiBleHRlbmRzIEl0QWJzdHJhY3RDb21wb25lbnQge1xuICAvKipcbiAgICogV2lkZ2V0IHRpdGxlXG4gICAqL1xuICByZWFkb25seSB0aXRsZSA9IGluamVjdChuZXcgSG9zdEF0dHJpYnV0ZVRva2VuKCd0aXRsZScpLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IHNvdXJjZVR5cGUgPSBpbmplY3QobmV3IEhvc3RBdHRyaWJ1dGVUb2tlbignc291cmNlVHlwZScpLCB7IG9wdGlvbmFsOiB0cnVlIH0pIGFzIFNvdXJjZVR5cGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RvcmUuc2VsZWN0SXRlbXModGhpcy5zb3VyY2VUeXBlKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkID0gdGhpcy5zdG9yZS5zZWxlY3RTZWxlY3RlZEl0ZW1zKHRoaXMuc291cmNlVHlwZSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgpKTtcblxuICByZWFkb25seSBudW1iZXJPZkl0ZW1zJCA9IHRoaXMuaXRlbXMucGlwZShcbiAgICBtYXAoaXRlbXMgPT4gKHsgbGVuZ3RoOiBpdGVtcy5sZW5ndGggfSkpLFxuICAgIHN0YXJ0V2l0aCh7IGxlbmd0aDogMCB9KVxuICApO1xuICByZWFkb25seSBzZWxlY3RBbGxEaXNhYmxlZCA9IHRoaXMuaXRlbXMucGlwZShtYXAoaXRlbXMgPT4gaXRlbXMubGVuZ3RoID09PSAwKSk7XG4gIC8qKlxuICAgKiBJdGVtcyBvZiB0aGUgbGlzdFxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pdGVtcywgdGhpcy5zZWxlY3RlZF0pLnBpcGUoXG4gICAgbWFwKChbaXRlbXMsIHNlbGVjdGVkXSkgPT5cbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgKGl0ZW0gYXMgU2VsZWN0YWJsZVRyYW5zZmVySXRlbTxUPikuc2VsZWN0ZWQgPSBzZWxlY3RlZC5oYXMoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtIGFzIFNlbGVjdGFibGVUcmFuc2Zlckl0ZW08VD47XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RBbGxDaGVja2JveCcpXG4gIHNlbGVjdEFsbENoZWNrYm94UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICByZWFkb25seSBpbnN0YW5jZUlkID0gdGhpcy5nZXRJbnN0YW5jZUlkKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yZTogVHJhbnNmZXJTdG9yZTxUPikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vbkl0ZW1zVXBkYXRlKCk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrYm94IHNlbGVjdGlvbiBjbGljayBoYW5kbGVyXG4gICAqL1xuICBjaGVja2JveFNlbGVjdGlvbkhhbmRsZXIoaXRlbTogVHJhbnNmZXJJdGVtPFQ+KSB7XG4gICAgdGhpcy5zdG9yZS5jaGVja2JveFNlbGVjdGlvbihpdGVtLCB0aGlzLnNvdXJjZVR5cGUpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja2JveCBzZWxlY3QgYWxsIHNlbGVjdGlvbiBoYW5kbGVyXG4gICAqL1xuICBjaGVja2JveFNlbGVjdEFsbEhhbmRsZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICgoZXZlbnQgYXMgUG9pbnRlckV2ZW50KS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICB0aGlzLnN0b3JlLnNlbGVjdEFsbFNlbGVjdGlvbihjaGVja2VkLCB0aGlzLnNvdXJjZVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZW1zIHVwZGF0ZSBzdWJzY3JpcHRpb25cbiAgICovXG4gIHByaXZhdGUgb25JdGVtc1VwZGF0ZSgpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hSZWYubmF0aXZlRWxlbWVudC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZUlkKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLnRvU3RyaW5nKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpdC10cmFuc2Zlci13cmFwcGVyIHNvdXJjZVwiPlxuICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc2VsZWN0QWxsQ2hlY2tib3hcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJ7eyBpbnN0YW5jZUlkIH19Y2hlY2tib3h7eyB0aXRsZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RBbGxEaXNhYmxlZCB8IGFzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cImNoZWNrYm94U2VsZWN0QWxsSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJ7eyBpbnN0YW5jZUlkIH19Y2hlY2tib3h7eyB0aXRsZSB9fVwiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICBAaWYgKG51bWJlck9mSXRlbXMkIHwgYXN5bmM7IGFzIG51bWJlck9mSXRlbXMpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnVtXCI+IHt7IG51bWJlck9mSXRlbXMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+IHt7IChudW1iZXJPZkl0ZW1zLmxlbmd0aCA9PT0gMSA/ICdpdC50cmFuc2Zlci5pdGVtJyA6ICdpdC50cmFuc2Zlci5pdGVtcycpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyXCI+e3sgdGl0bGUgfCB0aXRsZWNhc2UgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gZm9ybSBjaGVjayAtLT5cbiAgPC9kaXY+XG4gIDwhLS0gdHJhbnNmZXItaGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItc2Nyb2xsXCI+XG4gICAgPGRpdiBjbGFzcz1cInRyYW5zZmVyLWdyb3VwXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zJCB8IGFzeW5jOyB0cmFjayBpdGVtLnZhbHVlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgaWQ9XCJ7eyBpbnN0YW5jZUlkIH19LXt7IGl0ZW0udmFsdWUgfX1cIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hlY2tib3hTZWxlY3Rpb25IYW5kbGVyKGl0ZW0pXCIgLz5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwie3sgaW5zdGFuY2VJZCB9fS17eyBpdGVtLnZhbHVlIH19XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBpdC10cmFuc2Zlci13cmFwcGVyIC0tPlxuIl19
@@ -0,0 +1,149 @@
1
+ import { AsyncPipe, NgClass } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, inject, Input, Optional, Output, Self } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormControlName, NgModel, ReactiveFormsModule } from '@angular/forms';
5
+ import { tap } from 'rxjs';
6
+ import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
7
+ import { TransferStore } from './store/transfer.store';
8
+ import { ItTransferListComponent } from './transfer-list/transfer-list.component';
9
+ import { TranslateModule } from '@ngx-translate/core';
10
+ import { ItIconComponent } from '../../utils/icon/icon.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@ngx-translate/core";
14
+ import * as i3 from "./store/transfer.store";
15
+ /**
16
+ * Transfer
17
+ * @description Component that allows the creation of checkbox lists.
18
+ */
19
+ export class ItTransferComponent extends ItAbstractFormComponent {
20
+ constructor(_ngControl, _translateService, store) {
21
+ super(_translateService, _ngControl);
22
+ this._ngControl = _ngControl;
23
+ this._translateService = _translateService;
24
+ this.store = store;
25
+ /**
26
+ * The select options (left side)
27
+ */
28
+ this.options = [];
29
+ /**
30
+ * The selected options (right side)
31
+ */
32
+ this.selected = [];
33
+ /**
34
+ * Fired when there is a transfer, a backtransfer or a reset event
35
+ */
36
+ this.transferChanges = new EventEmitter();
37
+ /**
38
+ * Enable transfer button
39
+ * @default false
40
+ */
41
+ this.transferEnabled = this.store.transferEnabled;
42
+ /**
43
+ * Enable backtransfer button
44
+ * @default false
45
+ */
46
+ this.backtransferEnabled = this.store.backtransferEnabled;
47
+ /**
48
+ * Enable reset button
49
+ * @default false
50
+ */
51
+ this.resetEnabled = this.store.resetEnabled;
52
+ this.destroyRef = inject(DestroyRef);
53
+ }
54
+ ngOnInit() {
55
+ super.ngOnInit();
56
+ this.storeInit();
57
+ this.onStoreValueChanged();
58
+ }
59
+ /**
60
+ * Transfer button click handler
61
+ */
62
+ transferClickHandler(event) {
63
+ this.buttonEventHandler(event, () => this.store.transfer());
64
+ }
65
+ /**
66
+ * Transfer button keypress handler
67
+ */
68
+ transferKeyPressHandler(event) {
69
+ this.buttonEventHandler(event, () => this.store.transfer());
70
+ }
71
+ /**
72
+ * Backtransfer button click handler
73
+ */
74
+ backtransferClickHandler(event) {
75
+ this.buttonEventHandler(event, () => this.store.backtransfer());
76
+ }
77
+ /**
78
+ * Backtransfer button keypress handler
79
+ */
80
+ backtransferKeyPressHandler(event) {
81
+ this.buttonEventHandler(event, () => this.store.backtransfer());
82
+ }
83
+ /**
84
+ * Reset button click handler
85
+ */
86
+ resetClickHandler(event) {
87
+ this.buttonEventHandler(event, () => this.store.reset());
88
+ }
89
+ /**
90
+ * Reset button keypress handler
91
+ */
92
+ resetKeyPressHandler(event) {
93
+ this.buttonEventHandler(event, () => this.store.reset());
94
+ }
95
+ buttonEventHandler(event, updateStoreCb) {
96
+ event.preventDefault();
97
+ updateStoreCb();
98
+ }
99
+ storeInit() {
100
+ let target = [];
101
+ const ngControl = this._ngControl;
102
+ const isNgControlDefined = Boolean(this._ngControl);
103
+ // if ngControl is defined, take values from it. Input() target will be ignored
104
+ if (isNgControlDefined) {
105
+ console.debug('ngControl instanceof NgModel:', ngControl instanceof NgModel);
106
+ console.debug('ngControl instanceof FormControlName:', ngControl instanceof FormControlName);
107
+ // if ngControl is an ngModel (template-driven form use case), take values from it
108
+ if (ngControl instanceof NgModel) {
109
+ console.debug('ngControl instanceof NgModel');
110
+ const model = ngControl.model;
111
+ target = Array.isArray(model) ? model : [];
112
+ }
113
+ // if ngControl is an FormControlName (reactive form use case), take values from it
114
+ if (ngControl instanceof FormControlName) {
115
+ console.debug('ngControl instanceof FormControlName');
116
+ const model = ngControl.control.value;
117
+ target = Array.isArray(model) ? model : [];
118
+ }
119
+ console.debug('ngControl is defined. Input() target will be ignored');
120
+ }
121
+ else if (this.selected && Array.isArray(this.selected)) {
122
+ target = [...this.selected];
123
+ }
124
+ console.debug('target:', this.selected, 'formControl:', this.control.value, 'ngModel:', this._ngControl);
125
+ this.store.init({ source: [...this.options], target });
126
+ }
127
+ onStoreValueChanged() {
128
+ this.store.valueChanged
129
+ .pipe(takeUntilDestroyed(this.destroyRef), tap(value => this.writeValue(value)), tap(value => this.onChange(value)), tap(value => this.transferChanges.emit(value)))
130
+ .subscribe();
131
+ }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.TranslateService }, { token: i3.TransferStore }], target: i0.ɵɵFactoryTarget.Component }); }
133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItTransferComponent, isStandalone: true, selector: "it-transfer", inputs: { options: "options", selected: "selected" }, outputs: { transferChanges: "transferChanges" }, providers: [TransferStore], usesInheritance: true, ngImport: i0, template: "<div>\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div class=\"row\">\n <div class=\"col-xs-12 col-md-5\">\n <it-transfer-list sourceType=\"source\" [title]=\"'it.transfer.source' | translate\"></it-transfer-list>\n </div>\n <!-- col -->\n <div class=\"col-xs-12 col-md-2\">\n <!-- transfer buttons-->\n <div class=\"it-transfer-buttons\">\n <a\n class=\"transfer\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: transferEnabled | async }\"\n (click)=\"transferClickHandler($event)\"\n (keypress)=\"transferKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-move-forward' | translate\">\n <it-icon name=\"arrow-right\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-move-forward' | translate }}</span>\n <a\n class=\"backtransfer\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: backtransferEnabled | async }\"\n (click)=\"backtransferClickHandler($event)\"\n (keypress)=\"backtransferKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-move-backward' | translate\">\n <it-icon name=\"arrow-left\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-move-backward' | translate }}</span>\n <a\n class=\"reset\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: resetEnabled | async }\"\n (click)=\"resetClickHandler($event)\"\n (keypress)=\"resetKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-reset' | translate\">\n <it-icon name=\"restore\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-reset' | translate }}</span>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-5\">\n <it-transfer-list sourceType=\"target\" [title]=\"'it.transfer.target' | translate\"></it-transfer-list>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "component", type: ItTransferListComponent, selector: "it-transfer-list" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
134
+ }
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferComponent, decorators: [{
136
+ type: Component,
137
+ args: [{ selector: 'it-transfer', standalone: true, imports: [TranslateModule, ItIconComponent, ItTransferListComponent, NgClass, AsyncPipe, ReactiveFormsModule], providers: [TransferStore], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div class=\"row\">\n <div class=\"col-xs-12 col-md-5\">\n <it-transfer-list sourceType=\"source\" [title]=\"'it.transfer.source' | translate\"></it-transfer-list>\n </div>\n <!-- col -->\n <div class=\"col-xs-12 col-md-2\">\n <!-- transfer buttons-->\n <div class=\"it-transfer-buttons\">\n <a\n class=\"transfer\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: transferEnabled | async }\"\n (click)=\"transferClickHandler($event)\"\n (keypress)=\"transferKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-move-forward' | translate\">\n <it-icon name=\"arrow-right\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-move-forward' | translate }}</span>\n <a\n class=\"backtransfer\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: backtransferEnabled | async }\"\n (click)=\"backtransferClickHandler($event)\"\n (keypress)=\"backtransferKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-move-backward' | translate\">\n <it-icon name=\"arrow-left\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-move-backward' | translate }}</span>\n <a\n class=\"reset\"\n role=\"button\"\n href=\"#\"\n [ngClass]=\"{ active: resetEnabled | async }\"\n (click)=\"resetClickHandler($event)\"\n (keypress)=\"resetKeyPressHandler($event)\"\n [attr.aria-label]=\"'it.transfer.aria-label-reset' | translate\">\n <it-icon name=\"restore\"></it-icon>\n </a>\n <span class=\"visually-hidden\">{{ 'it.transfer.label-reset' | translate }}</span>\n </div>\n </div>\n <div class=\"col-xs-12 col-md-5\">\n <it-transfer-list sourceType=\"target\" [title]=\"'it.transfer.target' | translate\"></it-transfer-list>\n </div>\n </div>\n</div>\n" }]
138
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
139
+ type: Self
140
+ }, {
141
+ type: Optional
142
+ }] }, { type: i2.TranslateService }, { type: i3.TransferStore }], propDecorators: { options: [{
143
+ type: Input
144
+ }], selected: [{
145
+ type: Input
146
+ }], transferChanges: [{
147
+ type: Output
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyYW5zZmVyL3RyYW5zZmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmFuc2Zlci90cmFuc2Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQWEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFFbEU7OztHQUdHO0FBU0gsTUFBTSxPQUFPLG1CQUE2QixTQUFRLHVC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bGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xOYW1lLCBOZ0NvbnRyb2wsIE5nTW9kZWwsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zZmVyU3RvcmUgfSBmcm9tICcuL3N0b3JlL3RyYW5zZmVyLnN0b3JlJztcbmltcG9ydCB7IEl0VHJhbnNmZXJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi90cmFuc2Zlci1saXN0L3RyYW5zZmVyLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zZmVySXRlbSB9IGZyb20gJy4vdHJhbnNmZXIubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi91dGlscy9pY29uL2ljb24uY29tcG9uZW50JztcblxuLyoqXG4gKiBUcmFuc2ZlclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCB0aGF0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY2hlY2tib3ggbGlzdHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXRyYW5zZmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYW5zZmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgSXRJY29uQ29tcG9uZW50LCBJdFRyYW5zZmVyTGlzdENvbXBvbmVudCwgTmdDbGFzcywgQXN5bmNQaXBlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbVHJhbnNmZXJTdG9yZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJdFRyYW5zZmVyQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogVGhlIHNlbGVjdCBvcHRpb25zIChsZWZ0IHNpZGUpXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zID0gW107XG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0ZWQgb3B0aW9ucyAocmlnaHQgc2lkZSlcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkID0gW107XG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZXJlIGlzIGEgdHJhbnNmZXIsIGEgYmFja3RyYW5zZmVyIG9yIGEgcmVzZXQgZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB0cmFuc2ZlckNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPFRyYW5zZmVySXRlbTxUPltdPigpO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdHJhbnNmZXIgYnV0dG9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0cmFuc2ZlckVuYWJsZWQgPSB0aGlzLnN0b3JlLnRyYW5zZmVyRW5hYmxlZDtcbiAgLyoqXG4gICAqIEVuYWJsZSBiYWNrdHJhbnNmZXIgYnV0dG9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBiYWNrdHJhbnNmZXJFbmFibGVkID0gdGhpcy5zdG9yZS5iYWNrdHJhbnNmZXJFbmFibGVkO1xuICAvKipcbiAgICogRW5hYmxlIHJlc2V0IGJ1dHRvblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXRFbmFibGVkID0gdGhpcy5zdG9yZS5yZXNldEVuYWJsZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKClcbiAgICBAT3B0aW9uYWwoKVxuICAgIG92ZXJyaWRlIHJlYWRvbmx5IF9uZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBvdmVycmlkZSByZWFkb25seSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBUcmFuc2ZlclN0b3JlPFQ+XG4gICkge1xuICAgIHN1cGVyKF90cmFuc2xhdGVTZXJ2aWNlLCBfbmdDb250cm9sKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zdG9yZUluaXQoKTtcbiAgICB0aGlzLm9uU3RvcmVWYWx1ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2ZlciBidXR0b24gY2xpY2sgaGFuZGxlclxuICAgKi9cbiAgdHJhbnNmZXJDbGlja0hhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmJ1dHRvbkV2ZW50SGFuZGxlcihldmVudCwgKCkgPT4gdGhpcy5zdG9yZS50cmFuc2ZlcigpKTtcbiAgfVxuICAvKipcbiAgICogVHJhbnNmZXIgYnV0dG9uIGtleXByZXNzIGhhbmRsZXJcbiAgICovXG4gIHRyYW5zZmVyS2V5UHJlc3NIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5idXR0b25FdmVudEhhbmRsZXIoZXZlbnQsICgpID0+IHRoaXMuc3RvcmUudHJhbnNmZXIoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEJhY2t0cmFuc2ZlciBidXR0b24gY2xpY2sgaGFuZGxlclxuICAgKi9cbiAgYmFja3RyYW5zZmVyQ2xpY2tIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5idXR0b25FdmVudEhhbmRsZXIoZXZlbnQsICgpID0+IHRoaXMuc3RvcmUuYmFja3RyYW5zZmVyKCkpO1xuICB9XG4gIC8qKlxuICAgKiBCYWNrdHJhbnNmZXIgYnV0dG9uIGtleXByZXNzIGhhbmRsZXJcbiAgICovXG4gIGJhY2t0cmFuc2ZlcktleVByZXNzSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuYnV0dG9uRXZlbnRIYW5kbGVyKGV2ZW50LCAoKSA9PiB0aGlzLnN0b3JlLmJhY2t0cmFuc2ZlcigpKTtcbiAgfVxuICAvKipcbiAgICogUmVzZXQgYnV0dG9uIGNsaWNrIGhhbmRsZXJcbiAgICovXG4gIHJlc2V0Q2xpY2tIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5idXR0b25FdmVudEhhbmRsZXIoZXZlbnQsICgpID0+IHRoaXMuc3RvcmUucmVzZXQoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2V0IGJ1dHRvbiBrZXlwcmVzcyBoYW5kbGVyXG4gICAqL1xuICByZXNldEtleVByZXNzSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuYnV0dG9uRXZlbnRIYW5kbGVyKGV2ZW50LCAoKSA9PiB0aGlzLnN0b3JlLnJlc2V0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidXR0b25FdmVudEhhbmRsZXIoZXZlbnQ6IEV2ZW50LCB1cGRhdGVTdG9yZUNiOiAoKSA9PiB2b2lkKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB1cGRhdGVTdG9yZUNiKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlSW5pdCgpIHtcbiAgICBsZXQgdGFyZ2V0ID0gW107XG4gICAgY29uc3QgbmdDb250cm9sID0gdGhpcy5fbmdDb250cm9sO1xuICAgIGNvbnN0IGlzTmdDb250cm9sRGVmaW5lZCA9IEJvb2xlYW4odGhpcy5fbmdDb250cm9sKTtcblxuICAgIC8vIGlmIG5nQ29udHJvbCBpcyBkZWZpbmVkLCB0YWtlIHZhbHVlcyBmcm9tIGl0LiBJbnB1dCgpIHRhcmdldCB3aWxsIGJlIGlnbm9yZWRcbiAgICBpZiAoaXNOZ0NvbnRyb2xEZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCduZ0NvbnRyb2wgaW5zdGFuY2VvZiBOZ01vZGVsOicsIG5nQ29udHJvbCBpbnN0YW5jZW9mIE5nTW9kZWwpO1xuICAgICAgY29uc29sZS5kZWJ1ZygnbmdDb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lOicsIG5nQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIC8vIGlmIG5nQ29udHJvbCBpcyBhbiBuZ01vZGVsICh0ZW1wbGF0ZS1kcml2ZW4gZm9ybSB1c2UgY2FzZSksIHRha2UgdmFsdWVzIGZyb20gaXRcbiAgICAgIGlmIChuZ0NvbnRyb2wgaW5zdGFuY2VvZiBOZ01vZGVsKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ25nQ29udHJvbCBpbnN0YW5jZW9mIE5nTW9kZWwnKTtcbiAgICAgICAgY29uc3QgbW9kZWwgPSAobmdDb250cm9sIGFzIE5nTW9kZWwpLm1vZGVsO1xuICAgICAgICB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsIDogW107XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIG5nQ29udHJvbCBpcyBhbiBGb3JtQ29udHJvbE5hbWUgKHJlYWN0aXZlIGZvcm0gdXNlIGNhc2UpLCB0YWtlIHZhbHVlcyBmcm9tIGl0XG4gICAgICBpZiAobmdDb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ25nQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sTmFtZScpO1xuICAgICAgICBjb25zdCBtb2RlbCA9IChuZ0NvbnRyb2wgYXMgRm9ybUNvbnRyb2xOYW1lKS5jb250cm9sLnZhbHVlO1xuICAgICAgICB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsIDogW107XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoJ25nQ29udHJvbCBpcyBkZWZpbmVkLiBJbnB1dCgpIHRhcmdldCB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkKSkge1xuICAgICAgdGFyZ2V0ID0gWy4uLnRoaXMuc2VsZWN0ZWRdO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZGVidWcoJ3RhcmdldDonLCB0aGlzLnNlbGVjdGVkLCAnZm9ybUNvbnRyb2w6JywgdGhpcy5jb250cm9sLnZhbHVlLCAnbmdNb2RlbDonLCB0aGlzLl9uZ0NvbnRyb2wpO1xuICAgIHRoaXMuc3RvcmUuaW5pdCh7IHNvdXJjZTogWy4uLnRoaXMub3B0aW9uc10sIHRhcmdldCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdG9yZVZhbHVlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnN0b3JlLnZhbHVlQ2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICB0YXAodmFsdWUgPT4gdGhpcy53cml0ZVZhbHVlKHZhbHVlIGFzIFQpKSxcbiAgICAgICAgdGFwKHZhbHVlID0+IHRoaXMub25DaGFuZ2UodmFsdWUgYXMgVCkpLFxuICAgICAgICB0YXAodmFsdWUgPT4gdGhpcy50cmFuc2ZlckNoYW5nZXMuZW1pdCh2YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIEBpZiAobGFiZWwpIHtcbiAgICA8bGFiZWwgW2Zvcl09XCJpZFwiIFtjbGFzcy5hY3RpdmVdPVwiISFjb250cm9sLnZhbHVlXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICB9XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC01XCI+XG4gICAgICA8aXQtdHJhbnNmZXItbGlzdCBzb3VyY2VUeXBlPVwic291cmNlXCIgW3RpdGxlXT1cIidpdC50cmFuc2Zlci5zb3VyY2UnIHwgdHJhbnNsYXRlXCI+PC9pdC10cmFuc2Zlci1saXN0PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gY29sIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLW1kLTJcIj5cbiAgICAgIDwhLS0gdHJhbnNmZXIgYnV0dG9ucy0tPlxuICAgICAgPGRpdiBjbGFzcz1cIml0LXRyYW5zZmVyLWJ1dHRvbnNcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cInRyYW5zZmVyXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHRyYW5zZmVyRW5hYmxlZCB8IGFzeW5jIH1cIlxuICAgICAgICAgIChjbGljayk9XCJ0cmFuc2ZlckNsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5cHJlc3MpPVwidHJhbnNmZXJLZXlQcmVzc0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInaXQudHJhbnNmZXIuYXJpYS1sYWJlbC1tb3ZlLWZvcndhcmQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPGl0LWljb24gbmFtZT1cImFycm93LXJpZ2h0XCI+PC9pdC1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgJ2l0LnRyYW5zZmVyLmxhYmVsLW1vdmUtZm9yd2FyZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJiYWNrdHJhbnNmZXJcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYmFja3RyYW5zZmVyRW5hYmxlZCB8IGFzeW5jIH1cIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrdHJhbnNmZXJDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXByZXNzKT1cImJhY2t0cmFuc2ZlcktleVByZXNzSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidpdC50cmFuc2Zlci5hcmlhLWxhYmVsLW1vdmUtYmFja3dhcmQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPGl0LWljb24gbmFtZT1cImFycm93LWxlZnRcIj48L2l0LWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQudHJhbnNmZXIubGFiZWwtbW92ZS1iYWNrd2FyZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJyZXNldFwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiByZXNldEVuYWJsZWQgfCBhc3luYyB9XCJcbiAgICAgICAgICAoY2xpY2spPVwicmVzZXRDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXByZXNzKT1cInJlc2V0S2V5UHJlc3NIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2l0LnRyYW5zZmVyLmFyaWEtbGFiZWwtcmVzZXQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPGl0LWljb24gbmFtZT1cInJlc3RvcmVcIj48L2l0LWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQudHJhbnNmZXIubGFiZWwtcmVzZXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNVwiPlxuICAgICAgPGl0LXRyYW5zZmVyLWxpc3Qgc291cmNlVHlwZT1cInRhcmdldFwiIFt0aXRsZV09XCInaXQudHJhbnNmZXIudGFyZ2V0JyB8IHRyYW5zbGF0ZVwiPjwvaXQtdHJhbnNmZXItbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ //Qs
2
+ //Aria hidden?
3
+ //state management with service?
4
+ //interface?
5
+ export {};
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvdHJhbnNmZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSTtBQUNKLGNBQWM7QUFDZCxnQ0FBZ0M7QUFDaEMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8vUXNcbi8vQXJpYSBoaWRkZW4/XG4vL3N0YXRlIG1hbmFnZW1lbnQgd2l0aCBzZXJ2aWNlP1xuLy9pbnRlcmZhY2U/XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJJdGVtPFZhbHVlVHlwZT4ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBWYWx1ZVR5cGU7XG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zZmVySXRlbVNlbGVjdGlvbjxWYWx1ZVR5cGU+ID0gQXJyYXk8VHJhbnNmZXJJdGVtPFZhbHVlVHlwZT4+O1xuXG5leHBvcnQgdHlwZSBTb3VyY2VUeXBlID0gJ3NvdXJjZScgfCAndGFyZ2V0JztcbiJdfQ==
@@ -0,0 +1,142 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, inject, Input, Output, ViewChild, } from '@angular/core';
2
+ import { ItAbstractComponent } from '../../../abstracts/abstract.component';
3
+ import { ItFileUtils } from '../../../utils/file-utils';
4
+ import { ProgressDonut } from 'bootstrap-italia';
5
+ import { ItIconComponent } from '../../utils/icon/icon.component';
6
+ import { NgOptimizedImage } from '@angular/common';
7
+ import { TranslateModule } from '@ngx-translate/core';
8
+ import { IT_ASSET_BASE_PATH } from '../../../interfaces/design-angular-kit-config';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ngx-translate/core";
11
+ export class ItUploadDragDropComponent extends ItAbstractComponent {
12
+ constructor() {
13
+ super();
14
+ /**
15
+ * The accepted file type to upload <br>
16
+ * Possible values: <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">MIME Types</a> separated by comma
17
+ * @example application/pdf,image/png
18
+ * @default *
19
+ */
20
+ this.accept = '*';
21
+ /**
22
+ * Fired when file start to upload
23
+ */
24
+ this.fileStartUpload = new EventEmitter();
25
+ this.isDragover = false;
26
+ this.isLoading = false;
27
+ this.isSuccess = false;
28
+ this.assetBasePath = inject(IT_ASSET_BASE_PATH);
29
+ }
30
+ ngAfterViewInit() {
31
+ super.ngAfterViewInit();
32
+ if (this.donutElement) {
33
+ this.donut = ProgressDonut.getOrCreateInstance(this.donutElement.nativeElement);
34
+ }
35
+ }
36
+ // Dragover listener
37
+ onDragOver(evt) {
38
+ evt.preventDefault();
39
+ evt.stopPropagation();
40
+ this.isDragover = !this.isLoading;
41
+ }
42
+ // Dragleave listener
43
+ onDragLeave(evt) {
44
+ evt.preventDefault();
45
+ evt.stopPropagation();
46
+ this.isDragover = false;
47
+ }
48
+ // Drop leave listener
49
+ onDrop(evt) {
50
+ evt.preventDefault();
51
+ evt.stopPropagation();
52
+ this.isDragover = false;
53
+ const files = evt.dataTransfer?.files;
54
+ if (this.isLoading || !files?.length) {
55
+ return;
56
+ }
57
+ this.start(files[0]);
58
+ }
59
+ /**
60
+ * On load file from input
61
+ * @param event
62
+ */
63
+ onLoadFile(event) {
64
+ const files = event.target?.files;
65
+ if (!files?.length) {
66
+ return;
67
+ }
68
+ this.start(files[0]);
69
+ }
70
+ /**
71
+ * Start the upload file
72
+ * @param file
73
+ */
74
+ start(file) {
75
+ if (this.accept !== '*' && !this.accept.includes(file.type)) {
76
+ return;
77
+ }
78
+ this.reset();
79
+ this.isLoading = true;
80
+ const splitName = file.name.split('.');
81
+ this.filename = splitName[0];
82
+ this.extension = splitName[1]?.toUpperCase();
83
+ this.fileSize = ItFileUtils.getFileSizeString(file);
84
+ this.fileStartUpload.emit(file);
85
+ }
86
+ /**
87
+ * Percentage of upload
88
+ * @param value the percentage [0 - 100]
89
+ */
90
+ progress(value) {
91
+ if (!this.isLoading) {
92
+ return;
93
+ }
94
+ if (value >= 100) {
95
+ this.success();
96
+ }
97
+ else {
98
+ this.donut?.set((value < 0 ? 0 : value) / 100);
99
+ }
100
+ }
101
+ /**
102
+ * Upload success
103
+ */
104
+ success() {
105
+ this.isLoading = false;
106
+ this.isSuccess = true;
107
+ this._changeDetectorRef.detectChanges();
108
+ }
109
+ /**
110
+ * Reset file uploader
111
+ */
112
+ reset() {
113
+ this.isLoading = false;
114
+ this.isSuccess = false;
115
+ this.filename = this.extension = this.fileSize = undefined;
116
+ this.donut?.set(0);
117
+ this._changeDetectorRef.detectChanges();
118
+ }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItUploadDragDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItUploadDragDropComponent, isStandalone: true, selector: "it-upload-drag-drop", inputs: { accept: "accept" }, outputs: { fileStartUpload: "fileStartUpload" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, viewQueries: [{ propertyName: "donutElement", first: true, predicate: ["donutElement"], descendants: true }], exportAs: ["itUploadDragDrop"], usesInheritance: true, ngImport: i0, template: "<div class=\"upload-dragdrop\" [class.dragover]=\"isDragover\" [class.loading]=\"isLoading\" [class.success]=\"isSuccess\">\n <div class=\"upload-dragdrop-image\">\n <img\n [ngSrc]=\"assetBasePath + '/dist/assets/upload-drag-drop-icon.svg'\"\n alt=\"drag-drop-icon\"\n aria-hidden=\"true\"\n [width]=\"180\"\n [height]=\"180\" />\n <div class=\"upload-dragdrop-loading\">\n <div class=\"progress-donut\" #donutElement></div>\n </div>\n <div class=\"upload-dragdrop-success\">\n <it-icon name=\"check\"></it-icon>\n </div>\n </div>\n <div class=\"upload-dragdrop-text\">\n <p class=\"upload-dragdrop-weight\">\n <it-icon name=\"file\" size=\"xs\"></it-icon>\n {{ extension }} ({{ fileSize }})\n </p>\n <h5>{{ filename || ('it.form.upload-drag-file' | translate) }}</h5>\n @if (isLoading) {\n <p>{{ 'it.form.upload-loading' | translate }}</p>\n }\n @if (isSuccess) {\n <p>{{ 'it.form.upload-complete' | translate }}</p>\n }\n @if (!isLoading && !isSuccess) {\n <p>\n {{ 'it.form.upload-or' | translate }}\n <input type=\"file\" [id]=\"id\" class=\"upload-dragdrop-input\" [accept]=\"accept\" (change)=\"onLoadFile($event)\" />\n <label [for]=\"id\">{{ 'it.form.upload-select-device' | translate }}</label>\n </p>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItUploadDragDropComponent, decorators: [{
123
+ type: Component,
124
+ args: [{ standalone: true, selector: 'it-upload-drag-drop', exportAs: 'itUploadDragDrop', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ItIconComponent, TranslateModule, NgOptimizedImage], template: "<div class=\"upload-dragdrop\" [class.dragover]=\"isDragover\" [class.loading]=\"isLoading\" [class.success]=\"isSuccess\">\n <div class=\"upload-dragdrop-image\">\n <img\n [ngSrc]=\"assetBasePath + '/dist/assets/upload-drag-drop-icon.svg'\"\n alt=\"drag-drop-icon\"\n aria-hidden=\"true\"\n [width]=\"180\"\n [height]=\"180\" />\n <div class=\"upload-dragdrop-loading\">\n <div class=\"progress-donut\" #donutElement></div>\n </div>\n <div class=\"upload-dragdrop-success\">\n <it-icon name=\"check\"></it-icon>\n </div>\n </div>\n <div class=\"upload-dragdrop-text\">\n <p class=\"upload-dragdrop-weight\">\n <it-icon name=\"file\" size=\"xs\"></it-icon>\n {{ extension }} ({{ fileSize }})\n </p>\n <h5>{{ filename || ('it.form.upload-drag-file' | translate) }}</h5>\n @if (isLoading) {\n <p>{{ 'it.form.upload-loading' | translate }}</p>\n }\n @if (isSuccess) {\n <p>{{ 'it.form.upload-complete' | translate }}</p>\n }\n @if (!isLoading && !isSuccess) {\n <p>\n {{ 'it.form.upload-or' | translate }}\n <input type=\"file\" [id]=\"id\" class=\"upload-dragdrop-input\" [accept]=\"accept\" (change)=\"onLoadFile($event)\" />\n <label [for]=\"id\">{{ 'it.form.upload-select-device' | translate }}</label>\n </p>\n }\n </div>\n</div>\n" }]
125
+ }], ctorParameters: () => [], propDecorators: { accept: [{
126
+ type: Input
127
+ }], fileStartUpload: [{
128
+ type: Output
129
+ }], donutElement: [{
130
+ type: ViewChild,
131
+ args: ['donutElement']
132
+ }], onDragOver: [{
133
+ type: HostListener,
134
+ args: ['dragover', ['$event']]
135
+ }], onDragLeave: [{
136
+ type: HostListener,
137
+ args: ['dragleave', ['$event']]
138
+ }], onDrop: [{
139
+ type: HostListener,
140
+ args: ['drop', ['$event']]
141
+ }] } });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWRyYWctZHJvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdXBsb2FkLWRyYWctZHJvcC91cGxvYWQtZHJhZy1kcm9wLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS91cGxvYWQtZHJhZy1kcm9wL3VwbG9hZC1kcmFnLWRyb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7QUFVbkYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG1CQUFtQjtJQWdDaEU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQWhDVjs7Ozs7V0FLRztRQUNNLFdBQU0sR0FBVyxHQUFHLENBQUM7UUFFOUI7O1dBRUc7UUFDTyxvQkFBZSxHQUFH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QUF4QixNQUFNO2dCQVE0QixZQUFZO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWM7Z0JBMEJsQixVQUFVO3NCQURoQixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTN0IsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzlCLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSXRBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSXRGaWxlVXRpbHMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlLXV0aWxzJztcbmltcG9ydCB7IFByb2dyZXNzRG9udXQgfSBmcm9tICdib290c3RyYXAtaXRhbGlhJztcbmltcG9ydCB7IEl0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdPcHRpbWl6ZWRJbWFnZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElUX0FTU0VUX0JBU0VfUEFUSCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZGVzaWduLWFuZ3VsYXIta2l0LWNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2l0LXVwbG9hZC1kcmFnLWRyb3AnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWRyYWctZHJvcC5jb21wb25lbnQuaHRtbCcsXG4gIGV4cG9ydEFzOiAnaXRVcGxvYWREcmFnRHJvcCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbSXRJY29uQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIE5nT3B0aW1pemVkSW1hZ2VdLFxufSlcbmV4cG9ydCBjbGFzcyBJdFVwbG9hZERyYWdEcm9wQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogVGhlIGFjY2VwdGVkIGZpbGUgdHlwZSB0byB1cGxvYWQgPGJyPlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6IDxhIGhyZWY9XCJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL01JTUVfdHlwZXMvQ29tbW9uX3R5cGVzXCI+TUlNRSBUeXBlczwvYT4gc2VwYXJhdGVkIGJ5IGNvbW1hXG4gICAqIEBleGFtcGxlIGFwcGxpY2F0aW9uL3BkZixpbWFnZS9wbmdcbiAgICogQGRlZmF1bHQgKlxuICAgKi9cbiAgQElucHV0KCkgYWNjZXB0OiBzdHJpbmcgPSAnKic7XG5cbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gZmlsZSBzdGFydCB0byB1cGxvYWRcbiAgICovXG4gIEBPdXRwdXQoKSBmaWxlU3RhcnRVcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG5cbiAgcHJvdGVjdGVkIGlzRHJhZ292ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGRvbnV0PzogUHJvZ3Jlc3NEb251dDtcblxuICBAVmlld0NoaWxkKCdkb251dEVsZW1lbnQnKSBwcml2YXRlIGRvbnV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByb3RlY3RlZCBmaWxlbmFtZT86IHN0cmluZztcbiAgcHJvdGVjdGVkIGV4dGVuc2lvbj86IHN0cmluZztcbiAgcHJvdGVjdGVkIGZpbGVTaXplPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYm9vdHN0cmFwLWl0YWxpYSBhc3NldCBmb2xkZXIgcGF0aFxuICAgKiBAZGVmYXVsdCAuL2Jvb3RzdHJhcC1pdGFsaWFcbiAgICovXG4gIHByb3RlY3RlZCBhc3NldEJhc2VQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFzc2V0QmFzZVBhdGggPSBpbmplY3QoSVRfQVNTRVRfQkFTRV9QQVRIKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5kb251dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZG9udXQgPSBQcm9ncmVzc0RvbnV0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcy5kb251dEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRHJhZ292ZXIgbGlzdGVuZXJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnT3ZlcihldnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ292ZXIgPSAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICAvLyBEcmFnbGVhdmUgbGlzdGVuZXJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uRHJhZ0xlYXZlKGV2dDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcmFnb3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gRHJvcCBsZWF2ZSBsaXN0ZW5lclxuICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uRHJvcChldnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuaXNEcmFnb3ZlciA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbGVzID0gZXZ0LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nIHx8ICFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhcnQoZmlsZXNbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGxvYWQgZmlsZSBmcm9tIGlucHV0XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgb25Mb2FkRmlsZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlcyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzO1xuICAgIGlmICghZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0KGZpbGVzWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgdXBsb2FkIGZpbGVcbiAgICogQHBhcmFtIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGFydChmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWNjZXB0ICE9PSAnKicgJiYgIXRoaXMuYWNjZXB0LmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3BsaXROYW1lID0gZmlsZS5uYW1lLnNwbGl0KCcuJyk7XG4gICAgdGhpcy5maWxlbmFtZSA9IHNwbGl0TmFtZVswXTtcbiAgICB0aGlzLmV4dGVuc2lvbiA9IHNwbGl0TmFtZVsxXT8udG9VcHBlckNhc2UoKTtcbiAgICB0aGlzLmZpbGVTaXplID0gSXRGaWxlVXRpbHMuZ2V0RmlsZVNpemVTdHJpbmcoZmlsZSk7XG5cbiAgICB0aGlzLmZpbGVTdGFydFVwbG9hZC5lbWl0KGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgdXBsb2FkXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGVyY2VudGFnZSBbMCAtIDEwMF1cbiAgICovXG4gIHB1YmxpYyBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA+PSAxMDApIHtcbiAgICAgIHRoaXMuc3VjY2VzcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbnV0Py5zZXQoKHZhbHVlIDwgMCA/IDAgOiB2YWx1ZSkgLyAxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgc3VjY2Vzc1xuICAgKi9cbiAgcHVibGljIHN1Y2Nlc3MoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3VjY2VzcyA9IHRydWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGZpbGUgdXBsb2FkZXJcbiAgICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgdGhpcy5maWxlbmFtZSA9IHRoaXMuZXh0ZW5zaW9uID0gdGhpcy5maWxlU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRvbnV0Py5zZXQoMCk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidXBsb2FkLWRyYWdkcm9wXCIgW2NsYXNzLmRyYWdvdmVyXT1cImlzRHJhZ292ZXJcIiBbY2xhc3MubG9hZGluZ109XCJpc0xvYWRpbmdcIiBbY2xhc3Muc3VjY2Vzc109XCJpc1N1Y2Nlc3NcIj5cbiAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC1pbWFnZVwiPlxuICAgIDxpbWdcbiAgICAgIFtuZ1NyY109XCJhc3NldEJhc2VQYXRoICsgJy9kaXN0L2Fzc2V0cy91cGxvYWQtZHJhZy1kcm9wLWljb24uc3ZnJ1wiXG4gICAgICBhbHQ9XCJkcmFnLWRyb3AtaWNvblwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgW3dpZHRoXT1cIjE4MFwiXG4gICAgICBbaGVpZ2h0XT1cIjE4MFwiIC8+XG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC1sb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZG9udXRcIiAjZG9udXRFbGVtZW50PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtZHJhZ2Ryb3Atc3VjY2Vzc1wiPlxuICAgICAgPGl0LWljb24gbmFtZT1cImNoZWNrXCI+PC9pdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInVwbG9hZC1kcmFnZHJvcC10ZXh0XCI+XG4gICAgPHAgY2xhc3M9XCJ1cGxvYWQtZHJhZ2Ryb3Atd2VpZ2h0XCI+XG4gICAgICA8aXQtaWNvbiBuYW1lPVwiZmlsZVwiIHNpemU9XCJ4c1wiPjwvaXQtaWNvbj5cbiAgICAgIHt7IGV4dGVuc2lvbiB9fSAoe3sgZmlsZVNpemUgfX0pXG4gICAgPC9wPlxuICAgIDxoNT57eyBmaWxlbmFtZSB8fCAoJ2l0LmZvcm0udXBsb2FkLWRyYWctZmlsZScgfCB0cmFuc2xhdGUpIH19PC9oNT5cbiAgICBAaWYgKGlzTG9hZGluZykge1xuICAgICAgPHA+e3sgJ2l0LmZvcm0udXBsb2FkLWxvYWRpbmcnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgIH1cbiAgICBAaWYgKGlzU3VjY2Vzcykge1xuICAgICAgPHA+e3sgJ2l0LmZvcm0udXBsb2FkLWNvbXBsZXRlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICB9XG4gICAgQGlmICghaXNMb2FkaW5nICYmICFpc1N1Y2Nlc3MpIHtcbiAgICAgIDxwPlxuICAgICAgICB7eyAnaXQuZm9ybS51cGxvYWQtb3InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIFtpZF09XCJpZFwiIGNsYXNzPVwidXBsb2FkLWRyYWdkcm9wLWlucHV0XCIgW2FjY2VwdF09XCJhY2NlcHRcIiAoY2hhbmdlKT1cIm9uTG9hZEZpbGUoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImlkXCI+e3sgJ2l0LmZvcm0udXBsb2FkLXNlbGVjdC1kZXZpY2UnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgIDwvcD5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,107 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { ItAbstractComponent } from '../../../abstracts/abstract.component';
3
+ import { ItFileUtils } from '../../../utils/file-utils';
4
+ import { forkJoin, take, tap } from 'rxjs';
5
+ import { ItIconComponent } from '../../utils/icon/icon.component';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import { ItTooltipDirective } from '../../core/tooltip/tooltip.directive';
8
+ import { ItProgressBarComponent } from '../../core/progress-bar/progress-bar.component';
9
+ import { inputToBoolean } from '../../../utils/coercion';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngx-translate/core";
12
+ export class ItUploadFileListComponent extends ItAbstractComponent {
13
+ constructor() {
14
+ super(...arguments);
15
+ /**
16
+ * The accepted file type to upload <br>
17
+ * Possible values: <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">MIME Types</a> separated by comma
18
+ * @example application/pdf,image/png
19
+ * @default *
20
+ */
21
+ this.accept = '*';
22
+ /**
23
+ * If upload multiple files
24
+ * @default true
25
+ */
26
+ this.multiple = true;
27
+ /**
28
+ * Fired when upload new files
29
+ */
30
+ this.uploadFiles = new EventEmitter();
31
+ /**
32
+ * Fired on delete item button click
33
+ */
34
+ this.deleteItem = new EventEmitter();
35
+ /**
36
+ * Cache to preview image
37
+ */
38
+ this.previewImages = new Map();
39
+ }
40
+ ngOnInit() {
41
+ if (!!this.images && this.accept === '*') {
42
+ this.accept = 'image/*';
43
+ }
44
+ }
45
+ ngOnChanges(changes) {
46
+ if (changes['fileList'] && !!this.images) {
47
+ const images$ = this.fileList.map(item => ItFileUtils.fileToBase64(item.file).pipe(take(1), tap(base64 => this.previewImages.set(item.id, base64))));
48
+ forkJoin(images$).subscribe(() => {
49
+ this._changeDetectorRef.detectChanges();
50
+ super.ngOnChanges(changes);
51
+ });
52
+ }
53
+ else {
54
+ super.ngOnChanges(changes);
55
+ }
56
+ }
57
+ /**
58
+ * On load file from input
59
+ * @param event
60
+ */
61
+ onLoadFiles(event) {
62
+ const input = event.target;
63
+ const files = input?.files;
64
+ if (!files?.length) {
65
+ return;
66
+ }
67
+ const newFiles = Array.from(files).filter(file => !this.fileList.some(item => {
68
+ return item.file.name === file.name && item.file.size === file.size && item.file.type === file.type;
69
+ }));
70
+ const fileList = new DataTransfer();
71
+ newFiles.forEach(file => fileList.items.add(file));
72
+ this.uploadFiles.emit(fileList.files);
73
+ input.value = '';
74
+ }
75
+ /**
76
+ * Get the file size string
77
+ * @param file
78
+ */
79
+ getFileSize(file) {
80
+ return ItFileUtils.getFileSizeString(file);
81
+ }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItUploadFileListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItUploadFileListComponent, isStandalone: true, selector: "it-upload-file-list", inputs: { fileList: "fileList", accept: "accept", multiple: ["multiple", "multiple", inputToBoolean], images: ["images", "images", inputToBoolean], hideLoadButton: ["hideLoadButton", "hideLoadButton", inputToBoolean] }, outputs: { uploadFiles: "uploadFiles", deleteItem: "deleteItem" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (!hideLoadButton) {\n <input type=\"file\" [id]=\"id\" class=\"upload\" [accept]=\"accept\" [multiple]=\"multiple\" (change)=\"onLoadFiles($event)\" />\n <label [for]=\"id\">\n <it-icon name=\"upload\" size=\"sm\"></it-icon>\n <span>{{ 'it.form.upload' | translate }}</span>\n </label>\n}\n\n@if (fileList.length) {\n <ul class=\"upload-file-list\" [class.upload-file-list-image]=\"images\">\n @for (item of fileList; track item.id) {\n <li\n class=\"upload-file\"\n [class.error]=\"item.error\"\n [class.uploading]=\"!item.error && item.progress !== undefined && item.progress > 0 && item.progress < 100\"\n [class.success]=\"!item.error && (!item.progress || item.progress >= 100)\">\n @if (images) {\n <div class=\"upload-image\">\n <img [attr.src]=\"previewImages.get(item.id)\" [alt]=\"item.file.name\" />\n </div>\n } @else {\n <it-icon name=\"file\" size=\"sm\" [color]=\"!item.error ? (item.progress ? 'secondary' : 'primary') : 'danger'\"></it-icon>\n }\n <p [itTooltip]=\"item.tooltip\">\n <span class=\"visually-hidden\">{{ 'it.form.uploaded-file' | translate: { name: item.file.name } }}</span>\n {{ item.file.name }} <span class=\"upload-file-weight\">{{ getFileSize(item.file) }}</span>\n </p>\n @if (item.removable && (!item.progress || item.progress < 100)) {\n <button type=\"button\" (click)=\"deleteItem.emit(item)\">\n <span class=\"visually-hidden\">{{ 'it.form.delete-file' | translate: { name: item.file.name } }}</span>\n <it-icon name=\"close\"></it-icon>\n </button>\n }\n @if ((!item.removable && !item.progress) || (item.progress !== undefined && item.progress >= 100)) {\n <button type=\"button\" disabled>\n <span class=\"visually-hidden\">{{ 'it.form.upload-complete' | translate }}</span>\n <it-icon name=\"check\"></it-icon>\n </button>\n }\n @if (!item.error && item.progress !== undefined && item.progress > 0 && item.progress < 100) {\n <it-progress-bar [value]=\"item.progress!\"></it-progress-bar>\n }\n </li>\n }\n </ul>\n}\n", dependencies: [{ kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: ItTooltipDirective, selector: "[itTooltip]", inputs: ["itTooltip", "tooltipPlacement", "tooltipHtml"], outputs: ["showEvent", "shownEvent", "hideEvent", "hiddenEvent", "insertedEvent"], exportAs: ["itTooltip"] }, { kind: "component", type: ItProgressBarComponent, selector: "it-progress-bar", inputs: ["value", "showLabel", "indeterminate", "color"] }] }); }
84
+ }
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItUploadFileListComponent, decorators: [{
86
+ type: Component,
87
+ args: [{ standalone: true, selector: 'it-upload-file-list', imports: [ItIconComponent, TranslateModule, ItTooltipDirective, ItProgressBarComponent], template: "@if (!hideLoadButton) {\n <input type=\"file\" [id]=\"id\" class=\"upload\" [accept]=\"accept\" [multiple]=\"multiple\" (change)=\"onLoadFiles($event)\" />\n <label [for]=\"id\">\n <it-icon name=\"upload\" size=\"sm\"></it-icon>\n <span>{{ 'it.form.upload' | translate }}</span>\n </label>\n}\n\n@if (fileList.length) {\n <ul class=\"upload-file-list\" [class.upload-file-list-image]=\"images\">\n @for (item of fileList; track item.id) {\n <li\n class=\"upload-file\"\n [class.error]=\"item.error\"\n [class.uploading]=\"!item.error && item.progress !== undefined && item.progress > 0 && item.progress < 100\"\n [class.success]=\"!item.error && (!item.progress || item.progress >= 100)\">\n @if (images) {\n <div class=\"upload-image\">\n <img [attr.src]=\"previewImages.get(item.id)\" [alt]=\"item.file.name\" />\n </div>\n } @else {\n <it-icon name=\"file\" size=\"sm\" [color]=\"!item.error ? (item.progress ? 'secondary' : 'primary') : 'danger'\"></it-icon>\n }\n <p [itTooltip]=\"item.tooltip\">\n <span class=\"visually-hidden\">{{ 'it.form.uploaded-file' | translate: { name: item.file.name } }}</span>\n {{ item.file.name }} <span class=\"upload-file-weight\">{{ getFileSize(item.file) }}</span>\n </p>\n @if (item.removable && (!item.progress || item.progress < 100)) {\n <button type=\"button\" (click)=\"deleteItem.emit(item)\">\n <span class=\"visually-hidden\">{{ 'it.form.delete-file' | translate: { name: item.file.name } }}</span>\n <it-icon name=\"close\"></it-icon>\n </button>\n }\n @if ((!item.removable && !item.progress) || (item.progress !== undefined && item.progress >= 100)) {\n <button type=\"button\" disabled>\n <span class=\"visually-hidden\">{{ 'it.form.upload-complete' | translate }}</span>\n <it-icon name=\"check\"></it-icon>\n </button>\n }\n @if (!item.error && item.progress !== undefined && item.progress > 0 && item.progress < 100) {\n <it-progress-bar [value]=\"item.progress!\"></it-progress-bar>\n }\n </li>\n }\n </ul>\n}\n" }]
88
+ }], propDecorators: { fileList: [{
89
+ type: Input,
90
+ args: [{ required: true }]
91
+ }], accept: [{
92
+ type: Input
93
+ }], multiple: [{
94
+ type: Input,
95
+ args: [{ transform: inputToBoolean }]
96
+ }], images: [{
97
+ type: Input,
98
+ args: [{ transform: inputToBoolean }]
99
+ }], hideLoadButton: [{
100
+ type: Input,
101
+ args: [{ transform: inputToBoolean }]
102
+ }], uploadFiles: [{
103
+ type: Output
104
+ }], deleteItem: [{
105
+ type: Output
106
+ }] } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdXBsb2FkLWZpbGUtbGlzdC91cGxvYWQtZmlsZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS91cGxvYWQtZmlsZS1saXN0L3VwbG9hZC1maWxlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVF6RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0lBTmxFOztRQVlFOzs7OztXQUtHO1FBQ00sV0FBTSxHQUFXLEdBQUcsQ0FBQztRQUU5Qjs7O1dBR0c7UUFDbUMsYUFBUSxHQUFZ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LDRJQy9DcEMsdXNFQThDQSw0Q0QvQlksZUFBZSxtSUFBRSxlQUFlLDRGQUFFLGtCQUFrQiw4TkFBRSxzQkFBc0I7OzJGQUUzRSx5QkFBeUI7a0JBTnJDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixXQUV0QixDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLENBQUM7OEJBTTVELFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVFoQixNQUFNO3NCQUFkLEtBQUs7Z0JBTWdDLFFBQVE7c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLE1BQU07c0JBQTNDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLGNBQWM7c0JBQW5ELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUsxQixXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZEZpbGVMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZm9ybSc7XG5pbXBvcnQgeyBJdEZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGUtdXRpbHMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSXRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEl0VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJdFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtdXBsb2FkLWZpbGUtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtZmlsZS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW0l0SWNvbkNvbXBvbmVudCwgVHJhbnNsYXRlTW9kdWxlLCBJdFRvb2x0aXBEaXJlY3RpdmUsIEl0UHJvZ3Jlc3NCYXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBJdFVwbG9hZEZpbGVMaXN0Q29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGZpbGVzIHRvIHNob3cgaW4gbGlzdFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZmlsZUxpc3QhOiBBcnJheTxVcGxvYWRGaWxlTGlzdEl0ZW0+O1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjZXB0ZWQgZmlsZSB0eXBlIHRvIHVwbG9hZCA8YnI+XG4gICAqIFBvc3NpYmxlIHZhbHVlczogPGEgaHJlZj1cImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcy9Db21tb25fdHlwZXNcIj5NSU1FIFR5cGVzPC9hPiBzZXBhcmF0ZWQgYnkgY29tbWFcbiAgICogQGV4YW1wbGUgYXBwbGljYXRpb24vcGRmLGltYWdlL3BuZ1xuICAgKiBAZGVmYXVsdCAqXG4gICAqL1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcqJztcblxuICAvKipcbiAgICogSWYgdXBsb2FkIG11bHRpcGxlIGZpbGVzXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgbXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJZiBpcyBmaWxlIGxpc3QgaW1hZ2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgaW1hZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSGlkZSB0aGUgbG9hZCBidXR0b25cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgaGlkZUxvYWRCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHVwbG9hZCBuZXcgZmlsZXNcbiAgICovXG4gIEBPdXRwdXQoKSB1cGxvYWRGaWxlczogRXZlbnRFbWl0dGVyPEZpbGVMaXN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUxpc3Q+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVkIG9uIGRlbGV0ZSBpdGVtIGJ1dHRvbiBjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW06IEV2ZW50RW1pdHRlcjxVcGxvYWRGaWxlTGlzdEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxVcGxvYWRGaWxlTGlzdEl0ZW0+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIHRvIHByZXZpZXcgaW1hZ2VcbiAgICovXG4gIHByZXZpZXdJbWFnZXM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMuaW1hZ2VzICYmIHRoaXMuYWNjZXB0ID09PSAnKicpIHtcbiAgICAgIHRoaXMuYWNjZXB0ID0gJ2ltYWdlLyonO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZmlsZUxpc3QnXSAmJiAhIXRoaXMuaW1hZ2VzKSB7XG4gICAgICBjb25zdCBpbWFnZXMkID0gdGhpcy5maWxlTGlzdC5tYXAoaXRlbSA9PlxuICAgICAgICBJdEZpbGVVdGlscy5maWxlVG9CYXNlNjQoaXRlbS5maWxlKS5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgdGFwKGJhc2U2NCA9PiB0aGlzLnByZXZpZXdJbWFnZXMuc2V0KGl0ZW0uaWQsIGJhc2U2NCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb3JrSm9pbihpbWFnZXMkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBsb2FkIGZpbGUgZnJvbSBpbnB1dFxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIG9uTG9hZEZpbGVzKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZXMgPSBpbnB1dD8uZmlsZXM7XG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKS5maWx0ZXIoXG4gICAgICBmaWxlID0+XG4gICAgICAgICF0aGlzLmZpbGVMaXN0LnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZmlsZS5uYW1lID09PSBmaWxlLm5hbWUgJiYgaXRlbS5maWxlLnNpemUgPT09IGZpbGUuc2l6ZSAmJiBpdGVtLmZpbGUudHlwZSA9PT0gZmlsZS50eXBlO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBmaWxlTGlzdCA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmlsZUxpc3QuaXRlbXMuYWRkKGZpbGUpKTtcblxuICAgIHRoaXMudXBsb2FkRmlsZXMuZW1pdChmaWxlTGlzdC5maWxlcyk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgc2l6ZSBzdHJpbmdcbiAgICogQHBhcmFtIGZpbGVcbiAgICovXG4gIGdldEZpbGVTaXplKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBJdEZpbGVVdGlscy5nZXRGaWxlU2l6ZVN0cmluZyhmaWxlKTtcbiAgfVxufVxuIiwiQGlmICghaGlkZUxvYWRCdXR0b24pIHtcbiAgPGlucHV0IHR5cGU9XCJmaWxlXCIgW2lkXT1cImlkXCIgY2xhc3M9XCJ1cGxvYWRcIiBbYWNjZXB0XT1cImFjY2VwdFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIChjaGFuZ2UpPVwib25Mb2FkRmlsZXMoJGV2ZW50KVwiIC8+XG4gIDxsYWJlbCBbZm9yXT1cImlkXCI+XG4gICAgPGl0LWljb24gbmFtZT1cInVwbG9hZFwiIHNpemU9XCJzbVwiPjwvaXQtaWNvbj5cbiAgICA8c3Bhbj57eyAnaXQuZm9ybS51cGxvYWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2xhYmVsPlxufVxuXG5AaWYgKGZpbGVMaXN0Lmxlbmd0aCkge1xuICA8dWwgY2xhc3M9XCJ1cGxvYWQtZmlsZS1saXN0XCIgW2NsYXNzLnVwbG9hZC1maWxlLWxpc3QtaW1hZ2VdPVwiaW1hZ2VzXCI+XG4gICAgQGZvciAoaXRlbSBvZiBmaWxlTGlzdDsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgPGxpXG4gICAgICAgIGNsYXNzPVwidXBsb2FkLWZpbGVcIlxuICAgICAgICBbY2xhc3MuZXJyb3JdPVwiaXRlbS5lcnJvclwiXG4gICAgICAgIFtjbGFzcy51cGxvYWRpbmddPVwiIWl0ZW0uZXJyb3IgJiYgaXRlbS5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0ucHJvZ3Jlc3MgPiAwICYmIGl0ZW0ucHJvZ3Jlc3MgPCAxMDBcIlxuICAgICAgICBbY2xhc3Muc3VjY2Vzc109XCIhaXRlbS5lcnJvciAmJiAoIWl0ZW0ucHJvZ3Jlc3MgfHwgaXRlbS5wcm9ncmVzcyA+PSAxMDApXCI+XG4gICAgICAgIEBpZiAoaW1hZ2VzKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1pbWFnZVwiPlxuICAgICAgICAgICAgPGltZyBbYXR0ci5zcmNdPVwicHJldmlld0ltYWdlcy5nZXQoaXRlbS5pZClcIiBbYWx0XT1cIml0ZW0uZmlsZS5uYW1lXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGl0LWljb24gbmFtZT1cImZpbGVcIiBzaXplPVwic21cIiBbY29sb3JdPVwiIWl0ZW0uZXJyb3IgPyAoaXRlbS5wcm9ncmVzcyA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknKSA6ICdkYW5nZXInXCI+PC9pdC1pY29uPlxuICAgICAgICB9XG4gICAgICAgIDxwIFtpdFRvb2x0aXBdPVwiaXRlbS50b29sdGlwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQuZm9ybS51cGxvYWRlZC1maWxlJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiBpdGVtLmZpbGUubmFtZSB9IH19PC9zcGFuPlxuICAgICAgICAgIHt7IGl0ZW0uZmlsZS5uYW1lIH19IDxzcGFuIGNsYXNzPVwidXBsb2FkLWZpbGUtd2VpZ2h0XCI+e3sgZ2V0RmlsZVNpemUoaXRlbS5maWxlKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICBAaWYgKGl0ZW0ucmVtb3ZhYmxlICYmICghaXRlbS5wcm9ncmVzcyB8fCBpdGVtLnByb2dyZXNzIDwgMTAwKSkge1xuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVJdGVtLmVtaXQoaXRlbSlcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgJ2l0LmZvcm0uZGVsZXRlLWZpbGUnIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGl0ZW0uZmlsZS5uYW1lIH0gfX08L3NwYW4+XG4gICAgICAgICAgICA8aXQtaWNvbiBuYW1lPVwiY2xvc2VcIj48L2l0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICgoIWl0ZW0ucmVtb3ZhYmxlICYmICFpdGVtLnByb2dyZXNzKSB8fCAoaXRlbS5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0ucHJvZ3Jlc3MgPj0gMTAwKSkge1xuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQuZm9ybS51cGxvYWQtY29tcGxldGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPGl0LWljb24gbmFtZT1cImNoZWNrXCI+PC9pdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWl0ZW0uZXJyb3IgJiYgaXRlbS5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0ucHJvZ3Jlc3MgPiAwICYmIGl0ZW0ucHJvZ3Jlc3MgPCAxMDApIHtcbiAgICAgICAgICA8aXQtcHJvZ3Jlc3MtYmFyIFt2YWx1ZV09XCJpdGVtLnByb2dyZXNzIVwiPjwvaXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICB9XG4gICAgICA8L2xpPlxuICAgIH1cbiAgPC91bD5cbn1cbiJdfQ==