@impartner/design-components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE.txt +11 -0
  2. package/README.md +22 -0
  3. package/constants/fontawesome-icons.d.ts +6 -0
  4. package/constants/index.d.ts +1 -0
  5. package/esm2020/constants/fontawesome-icons.mjs +3012 -0
  6. package/esm2020/constants/index.mjs +2 -0
  7. package/esm2020/impartner-design-components.mjs +5 -0
  8. package/esm2020/lib/alert/alert.component.mjs +57 -0
  9. package/esm2020/lib/alert/alert.module.mjs +18 -0
  10. package/esm2020/lib/alert/index.mjs +4 -0
  11. package/esm2020/lib/alert/theme/alert-theme.mjs +2 -0
  12. package/esm2020/lib/alert/theme/index.mjs +2 -0
  13. package/esm2020/lib/avatar/avatar.component.mjs +47 -0
  14. package/esm2020/lib/avatar/avatar.module.mjs +18 -0
  15. package/esm2020/lib/avatar/index.mjs +3 -0
  16. package/esm2020/lib/avatar-group/avatar-group.component.mjs +16 -0
  17. package/esm2020/lib/avatar-group/avatar-group.module.mjs +19 -0
  18. package/esm2020/lib/avatar-group/index.mjs +3 -0
  19. package/esm2020/lib/backdrop/backdrop.component.mjs +34 -0
  20. package/esm2020/lib/backdrop/backdrop.module.mjs +19 -0
  21. package/esm2020/lib/backdrop/index.mjs +3 -0
  22. package/esm2020/lib/badge/badge.component.mjs +98 -0
  23. package/esm2020/lib/badge/badge.module.mjs +19 -0
  24. package/esm2020/lib/badge/index.mjs +4 -0
  25. package/esm2020/lib/badge/types/badge-icon.mjs +2 -0
  26. package/esm2020/lib/badge/types/badge-size.mjs +7 -0
  27. package/esm2020/lib/badge/types/index.mjs +2 -0
  28. package/esm2020/lib/branding/branded.directive.mjs +19 -0
  29. package/esm2020/lib/branding/branding.module.mjs +19 -0
  30. package/esm2020/lib/branding/index.mjs +3 -0
  31. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +25 -0
  32. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +33 -0
  33. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +19 -0
  34. package/esm2020/lib/breadcrumb/index.mjs +4 -0
  35. package/esm2020/lib/button/button.component.mjs +116 -0
  36. package/esm2020/lib/button/button.module.mjs +21 -0
  37. package/esm2020/lib/button/index.mjs +4 -0
  38. package/esm2020/lib/button/themes/button-theme.mjs +2 -0
  39. package/esm2020/lib/button/themes/index.mjs +2 -0
  40. package/esm2020/lib/button-group/button-group.component.mjs +52 -0
  41. package/esm2020/lib/button-group/button-group.module.mjs +20 -0
  42. package/esm2020/lib/button-group/index.mjs +3 -0
  43. package/esm2020/lib/card-heading/card-heading.component.mjs +30 -0
  44. package/esm2020/lib/card-heading/card-heading.module.mjs +19 -0
  45. package/esm2020/lib/card-heading/index.mjs +3 -0
  46. package/esm2020/lib/design-components.module.mjs +119 -0
  47. package/esm2020/lib/dropdown/components/dropdown-item/dropdown-item.component.mjs +22 -0
  48. package/esm2020/lib/dropdown/components/index.mjs +2 -0
  49. package/esm2020/lib/dropdown/dropdown.component.mjs +140 -0
  50. package/esm2020/lib/dropdown/dropdown.module.mjs +21 -0
  51. package/esm2020/lib/dropdown/index.mjs +5 -0
  52. package/esm2020/lib/dropdown/types/dropdown-position.mjs +2 -0
  53. package/esm2020/lib/dropdown/types/index.mjs +2 -0
  54. package/esm2020/lib/file-upload/directives/file-drop.directive.mjs +50 -0
  55. package/esm2020/lib/file-upload/directives/index.mjs +2 -0
  56. package/esm2020/lib/file-upload/file-upload.component.mjs +334 -0
  57. package/esm2020/lib/file-upload/file-upload.module.mjs +29 -0
  58. package/esm2020/lib/file-upload/index.mjs +5 -0
  59. package/esm2020/lib/file-upload/pipes/human-readable-byte-size.pipe.mjs +23 -0
  60. package/esm2020/lib/file-upload/pipes/index.mjs +2 -0
  61. package/esm2020/lib/form-field/controls/checkbox/checkbox.component.mjs +337 -0
  62. package/esm2020/lib/form-field/controls/checkbox/checkbox.module.mjs +19 -0
  63. package/esm2020/lib/form-field/controls/checkbox/index.mjs +3 -0
  64. package/esm2020/lib/form-field/controls/index.mjs +5 -0
  65. package/esm2020/lib/form-field/controls/input/index.mjs +2 -0
  66. package/esm2020/lib/form-field/controls/input/input.directive.mjs +233 -0
  67. package/esm2020/lib/form-field/controls/radio/index.mjs +6 -0
  68. package/esm2020/lib/form-field/controls/radio/injection-tokens.mjs +4 -0
  69. package/esm2020/lib/form-field/controls/radio/interfaces/index.mjs +4 -0
  70. package/esm2020/lib/form-field/controls/radio/interfaces/radio-button.interface.mjs +2 -0
  71. package/esm2020/lib/form-field/controls/radio/interfaces/radio-change-event.interface.mjs +11 -0
  72. package/esm2020/lib/form-field/controls/radio/interfaces/radio-group.interface.mjs +2 -0
  73. package/esm2020/lib/form-field/controls/radio/radio-button/radio-button.component.mjs +260 -0
  74. package/esm2020/lib/form-field/controls/radio/radio-group/radio-group.directive.mjs +288 -0
  75. package/esm2020/lib/form-field/controls/radio/radio.module.mjs +20 -0
  76. package/esm2020/lib/form-field/controls/select/index.mjs +6 -0
  77. package/esm2020/lib/form-field/controls/select/option/index.mjs +2 -0
  78. package/esm2020/lib/form-field/controls/select/option/select-option.component.mjs +138 -0
  79. package/esm2020/lib/form-field/controls/select/option-parent.mjs +3 -0
  80. package/esm2020/lib/form-field/controls/select/select-model.mjs +149 -0
  81. package/esm2020/lib/form-field/controls/select/select.component.mjs +522 -0
  82. package/esm2020/lib/form-field/controls/select/select.module.mjs +20 -0
  83. package/esm2020/lib/form-field/controls/shared/index.mjs +2 -0
  84. package/esm2020/lib/form-field/controls/shared/toggle/components/index.mjs +2 -0
  85. package/esm2020/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.mjs +17 -0
  86. package/esm2020/lib/form-field/controls/shared/toggle/index.mjs +4 -0
  87. package/esm2020/lib/form-field/controls/shared/toggle/toggle.component.mjs +96 -0
  88. package/esm2020/lib/form-field/controls/shared/toggle/toggle.module.mjs +20 -0
  89. package/esm2020/lib/form-field/directives/corner-hint.directive.mjs +14 -0
  90. package/esm2020/lib/form-field/directives/error.directive.mjs +26 -0
  91. package/esm2020/lib/form-field/directives/form-root.directive.mjs +91 -0
  92. package/esm2020/lib/form-field/directives/hint.directive.mjs +24 -0
  93. package/esm2020/lib/form-field/directives/index.mjs +8 -0
  94. package/esm2020/lib/form-field/directives/label.directive.mjs +14 -0
  95. package/esm2020/lib/form-field/directives/prefix.directive.mjs +24 -0
  96. package/esm2020/lib/form-field/directives/suffix.directive.mjs +24 -0
  97. package/esm2020/lib/form-field/form-field-errors.mjs +5 -0
  98. package/esm2020/lib/form-field/form-field.component.mjs +132 -0
  99. package/esm2020/lib/form-field/impdc-forms.mjs +8 -0
  100. package/esm2020/lib/form-field/impdc-forms.module.mjs +68 -0
  101. package/esm2020/lib/form-field/index.mjs +2 -0
  102. package/esm2020/lib/form-field/services/error-state-matcher.service.mjs +28 -0
  103. package/esm2020/lib/form-field/services/index.mjs +3 -0
  104. package/esm2020/lib/form-field/services/unique-selection-dispatcher.service.mjs +48 -0
  105. package/esm2020/lib/form-field/shared/constructors.type.mjs +2 -0
  106. package/esm2020/lib/form-field/shared/disabled.mixin.mjs +15 -0
  107. package/esm2020/lib/form-field/shared/error-state.mixin.mjs +24 -0
  108. package/esm2020/lib/form-field/shared/form-field-control.mjs +10 -0
  109. package/esm2020/lib/form-field/shared/index.mjs +5 -0
  110. package/esm2020/lib/form-field/shared/tab-index.mixin.mjs +19 -0
  111. package/esm2020/lib/icon/icon.component.mjs +70 -0
  112. package/esm2020/lib/icon/icon.module.mjs +19 -0
  113. package/esm2020/lib/icon/index.mjs +3 -0
  114. package/esm2020/lib/index.mjs +26 -0
  115. package/esm2020/lib/modal/index.mjs +4 -0
  116. package/esm2020/lib/modal/modal.component.mjs +141 -0
  117. package/esm2020/lib/modal/modal.module.mjs +37 -0
  118. package/esm2020/lib/modal/types/index.mjs +3 -0
  119. package/esm2020/lib/modal/types/modal-component-sizes.mjs +9 -0
  120. package/esm2020/lib/modal/types/modal-theme.mjs +12 -0
  121. package/esm2020/lib/pagination/index.mjs +3 -0
  122. package/esm2020/lib/pagination/pagination.component.mjs +134 -0
  123. package/esm2020/lib/pagination/pagination.module.mjs +21 -0
  124. package/esm2020/lib/progress-bar/index.mjs +3 -0
  125. package/esm2020/lib/progress-bar/progress-bar.component.mjs +35 -0
  126. package/esm2020/lib/progress-bar/progress-bar.module.mjs +18 -0
  127. package/esm2020/lib/scrollable/index.mjs +3 -0
  128. package/esm2020/lib/scrollable/scrollable.component.mjs +193 -0
  129. package/esm2020/lib/scrollable/scrollable.module.mjs +21 -0
  130. package/esm2020/lib/select-icon/index.mjs +3 -0
  131. package/esm2020/lib/select-icon/select-icon.component.mjs +307 -0
  132. package/esm2020/lib/select-icon/select-icon.module.mjs +35 -0
  133. package/esm2020/lib/size-detection/directive/element-size.interface.mjs +2 -0
  134. package/esm2020/lib/size-detection/directive/index.mjs +3 -0
  135. package/esm2020/lib/size-detection/directive/size-detector.directive.mjs +43 -0
  136. package/esm2020/lib/size-detection/index.mjs +3 -0
  137. package/esm2020/lib/size-detection/size-detection.module.mjs +18 -0
  138. package/esm2020/lib/spinner/index.mjs +3 -0
  139. package/esm2020/lib/spinner/spinner.component.mjs +24 -0
  140. package/esm2020/lib/spinner/spinner.module.mjs +18 -0
  141. package/esm2020/lib/table/index.mjs +3 -0
  142. package/esm2020/lib/table/table.component.mjs +33 -0
  143. package/esm2020/lib/table/table.module.mjs +19 -0
  144. package/esm2020/lib/text-highlight/index.mjs +3 -0
  145. package/esm2020/lib/text-highlight/text-highlight.component.mjs +81 -0
  146. package/esm2020/lib/text-highlight/text-highlight.module.mjs +19 -0
  147. package/esm2020/public-api.mjs +9 -0
  148. package/esm2020/services/index.mjs +2 -0
  149. package/esm2020/services/interaction.service.mjs +54 -0
  150. package/esm2020/types/component-size.mjs +12 -0
  151. package/esm2020/types/component-theme.mjs +22 -0
  152. package/esm2020/types/index.mjs +3 -0
  153. package/esm2020/utilities/boolean-props.mjs +7 -0
  154. package/esm2020/utilities/dc.mjs +9 -0
  155. package/esm2020/utilities/index.mjs +6 -0
  156. package/esm2020/utilities/lc.mjs +9 -0
  157. package/esm2020/utilities/number-props.mjs +18 -0
  158. package/esm2020/utilities/sanitize.mjs +7 -0
  159. package/fesm2015/impartner-design-components.mjs +8295 -0
  160. package/fesm2015/impartner-design-components.mjs.map +1 -0
  161. package/fesm2020/impartner-design-components.mjs +8264 -0
  162. package/fesm2020/impartner-design-components.mjs.map +1 -0
  163. package/index.d.ts +5 -0
  164. package/lib/alert/alert.component.d.ts +29 -0
  165. package/lib/alert/alert.module.d.ts +8 -0
  166. package/lib/alert/index.d.ts +3 -0
  167. package/lib/alert/theme/alert-theme.d.ts +1 -0
  168. package/lib/alert/theme/index.d.ts +1 -0
  169. package/lib/avatar/avatar.component.d.ts +28 -0
  170. package/lib/avatar/avatar.module.d.ts +8 -0
  171. package/lib/avatar/index.d.ts +2 -0
  172. package/lib/avatar-group/avatar-group.component.d.ts +10 -0
  173. package/lib/avatar-group/avatar-group.module.d.ts +9 -0
  174. package/lib/avatar-group/index.d.ts +2 -0
  175. package/lib/backdrop/backdrop.component.d.ts +19 -0
  176. package/lib/backdrop/backdrop.module.d.ts +9 -0
  177. package/lib/backdrop/index.d.ts +2 -0
  178. package/lib/badge/badge.component.d.ts +48 -0
  179. package/lib/badge/badge.module.d.ts +9 -0
  180. package/lib/badge/index.d.ts +3 -0
  181. package/lib/badge/types/badge-icon.d.ts +1 -0
  182. package/lib/badge/types/badge-size.d.ts +6 -0
  183. package/lib/badge/types/index.d.ts +2 -0
  184. package/lib/branding/branded.directive.d.ts +6 -0
  185. package/lib/branding/branding.module.d.ts +9 -0
  186. package/lib/branding/index.d.ts +2 -0
  187. package/lib/breadcrumb/breadcrumb-item.component.d.ts +7 -0
  188. package/lib/breadcrumb/breadcrumb.component.d.ts +18 -0
  189. package/lib/breadcrumb/breadcrumb.module.d.ts +9 -0
  190. package/lib/breadcrumb/index.d.ts +3 -0
  191. package/lib/button/button.component.d.ts +47 -0
  192. package/lib/button/button.module.d.ts +11 -0
  193. package/lib/button/index.d.ts +3 -0
  194. package/lib/button/themes/button-theme.d.ts +1 -0
  195. package/lib/button/themes/index.d.ts +1 -0
  196. package/lib/button-group/button-group.component.d.ts +22 -0
  197. package/lib/button-group/button-group.module.d.ts +10 -0
  198. package/lib/button-group/index.d.ts +2 -0
  199. package/lib/card-heading/card-heading.component.d.ts +18 -0
  200. package/lib/card-heading/card-heading.module.d.ts +9 -0
  201. package/lib/card-heading/index.d.ts +2 -0
  202. package/lib/design-components.module.d.ts +22 -0
  203. package/lib/dropdown/components/dropdown-item/dropdown-item.component.d.ts +11 -0
  204. package/lib/dropdown/components/index.d.ts +1 -0
  205. package/lib/dropdown/dropdown.component.d.ts +65 -0
  206. package/lib/dropdown/dropdown.module.d.ts +11 -0
  207. package/lib/dropdown/index.d.ts +4 -0
  208. package/lib/dropdown/types/dropdown-position.d.ts +1 -0
  209. package/lib/dropdown/types/index.d.ts +1 -0
  210. package/lib/file-upload/directives/file-drop.directive.d.ts +11 -0
  211. package/lib/file-upload/directives/index.d.ts +1 -0
  212. package/lib/file-upload/file-upload.component.d.ts +105 -0
  213. package/lib/file-upload/file-upload.module.d.ts +13 -0
  214. package/lib/file-upload/index.d.ts +4 -0
  215. package/lib/file-upload/pipes/human-readable-byte-size.pipe.d.ts +7 -0
  216. package/lib/file-upload/pipes/index.d.ts +1 -0
  217. package/lib/form-field/controls/checkbox/checkbox.component.d.ts +133 -0
  218. package/lib/form-field/controls/checkbox/checkbox.module.d.ts +9 -0
  219. package/lib/form-field/controls/checkbox/index.d.ts +2 -0
  220. package/lib/form-field/controls/index.d.ts +4 -0
  221. package/lib/form-field/controls/input/index.d.ts +1 -0
  222. package/lib/form-field/controls/input/input.directive.d.ts +84 -0
  223. package/lib/form-field/controls/radio/index.d.ts +5 -0
  224. package/lib/form-field/controls/radio/injection-tokens.d.ts +4 -0
  225. package/lib/form-field/controls/radio/interfaces/index.d.ts +3 -0
  226. package/lib/form-field/controls/radio/interfaces/radio-button.interface.d.ts +6 -0
  227. package/lib/form-field/controls/radio/interfaces/radio-change-event.interface.d.ts +12 -0
  228. package/lib/form-field/controls/radio/interfaces/radio-group.interface.d.ts +13 -0
  229. package/lib/form-field/controls/radio/radio-button/radio-button.component.d.ts +98 -0
  230. package/lib/form-field/controls/radio/radio-group/radio-group.directive.d.ts +104 -0
  231. package/lib/form-field/controls/radio/radio.module.d.ts +10 -0
  232. package/lib/form-field/controls/select/index.d.ts +5 -0
  233. package/lib/form-field/controls/select/option/index.d.ts +1 -0
  234. package/lib/form-field/controls/select/option/select-option.component.d.ts +60 -0
  235. package/lib/form-field/controls/select/option-parent.d.ts +5 -0
  236. package/lib/form-field/controls/select/select-model.d.ts +36 -0
  237. package/lib/form-field/controls/select/select.component.d.ts +170 -0
  238. package/lib/form-field/controls/select/select.module.d.ts +10 -0
  239. package/lib/form-field/controls/shared/index.d.ts +1 -0
  240. package/lib/form-field/controls/shared/toggle/components/index.d.ts +1 -0
  241. package/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.d.ts +6 -0
  242. package/lib/form-field/controls/shared/toggle/index.d.ts +3 -0
  243. package/lib/form-field/controls/shared/toggle/toggle.component.d.ts +26 -0
  244. package/lib/form-field/controls/shared/toggle/toggle.module.d.ts +10 -0
  245. package/lib/form-field/directives/corner-hint.directive.d.ts +5 -0
  246. package/lib/form-field/directives/error.directive.d.ts +8 -0
  247. package/lib/form-field/directives/form-root.directive.d.ts +26 -0
  248. package/lib/form-field/directives/hint.directive.d.ts +6 -0
  249. package/lib/form-field/directives/index.d.ts +7 -0
  250. package/lib/form-field/directives/label.directive.d.ts +5 -0
  251. package/lib/form-field/directives/prefix.directive.d.ts +9 -0
  252. package/lib/form-field/directives/suffix.directive.d.ts +9 -0
  253. package/lib/form-field/form-field-errors.d.ts +2 -0
  254. package/lib/form-field/form-field.component.d.ts +39 -0
  255. package/lib/form-field/impdc-forms.d.ts +7 -0
  256. package/lib/form-field/impdc-forms.module.d.ts +19 -0
  257. package/lib/form-field/index.d.ts +1 -0
  258. package/lib/form-field/services/error-state-matcher.service.d.ts +12 -0
  259. package/lib/form-field/services/index.d.ts +2 -0
  260. package/lib/form-field/services/unique-selection-dispatcher.service.d.ts +29 -0
  261. package/lib/form-field/shared/constructors.type.d.ts +7 -0
  262. package/lib/form-field/shared/disabled.mixin.d.ts +10 -0
  263. package/lib/form-field/shared/error-state.mixin.d.ts +31 -0
  264. package/lib/form-field/shared/form-field-control.d.ts +24 -0
  265. package/lib/form-field/shared/index.d.ts +5 -0
  266. package/lib/form-field/shared/tab-index.mixin.d.ts +13 -0
  267. package/lib/icon/icon.component.d.ts +30 -0
  268. package/lib/icon/icon.module.d.ts +9 -0
  269. package/lib/icon/index.d.ts +2 -0
  270. package/lib/index.d.ts +25 -0
  271. package/lib/modal/index.d.ts +3 -0
  272. package/lib/modal/modal.component.d.ts +80 -0
  273. package/lib/modal/modal.module.d.ts +13 -0
  274. package/lib/modal/types/index.d.ts +2 -0
  275. package/lib/modal/types/modal-component-sizes.d.ts +3 -0
  276. package/lib/modal/types/modal-theme.d.ts +7 -0
  277. package/lib/pagination/index.d.ts +2 -0
  278. package/lib/pagination/pagination.component.d.ts +41 -0
  279. package/lib/pagination/pagination.module.d.ts +11 -0
  280. package/lib/progress-bar/index.d.ts +2 -0
  281. package/lib/progress-bar/progress-bar.component.d.ts +22 -0
  282. package/lib/progress-bar/progress-bar.module.d.ts +8 -0
  283. package/lib/scrollable/index.d.ts +2 -0
  284. package/lib/scrollable/scrollable.component.d.ts +39 -0
  285. package/lib/scrollable/scrollable.module.d.ts +11 -0
  286. package/lib/select-icon/index.d.ts +2 -0
  287. package/lib/select-icon/select-icon.component.d.ts +123 -0
  288. package/lib/select-icon/select-icon.module.d.ts +11 -0
  289. package/lib/size-detection/directive/element-size.interface.d.ts +4 -0
  290. package/lib/size-detection/directive/index.d.ts +2 -0
  291. package/lib/size-detection/directive/size-detector.directive.d.ts +14 -0
  292. package/lib/size-detection/index.d.ts +3 -0
  293. package/lib/size-detection/size-detection.module.d.ts +8 -0
  294. package/lib/spinner/index.d.ts +2 -0
  295. package/lib/spinner/spinner.component.d.ts +13 -0
  296. package/lib/spinner/spinner.module.d.ts +8 -0
  297. package/lib/table/index.d.ts +2 -0
  298. package/lib/table/table.component.d.ts +15 -0
  299. package/lib/table/table.module.d.ts +9 -0
  300. package/lib/text-highlight/index.d.ts +2 -0
  301. package/lib/text-highlight/text-highlight.component.d.ts +31 -0
  302. package/lib/text-highlight/text-highlight.module.d.ts +9 -0
  303. package/package.json +51 -0
  304. package/public-api.d.ts +4 -0
  305. package/services/index.d.ts +1 -0
  306. package/services/interaction.service.d.ts +14 -0
  307. package/types/component-size.d.ts +12 -0
  308. package/types/component-theme.d.ts +12 -0
  309. package/types/index.d.ts +2 -0
  310. package/utilities/boolean-props.d.ts +8 -0
  311. package/utilities/dc.d.ts +6 -0
  312. package/utilities/index.d.ts +5 -0
  313. package/utilities/lc.d.ts +6 -0
  314. package/utilities/number-props.d.ts +15 -0
  315. package/utilities/sanitize.d.ts +1 -0
@@ -0,0 +1,334 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, Optional, Self, ViewChild } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { nanoid } from 'nanoid';
4
+ import { Subject } from 'rxjs';
5
+ import { coerceBooleanPropertyValue } from '../../utilities';
6
+ import { ImpdcFormFieldControl, IMPDC_FORM_ROOT, mixinDisabled, mixinErrorState, mixinTabIndex } from '../form-field';
7
+ import { FileDropDirective } from './directives';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../form-field";
10
+ import * as i2 from "@angular/forms";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "../button/button.component";
13
+ import * as i5 from "./directives/file-drop.directive";
14
+ import * as i6 from "./pipes/human-readable-byte-size.pipe";
15
+ const _FileUploadComponentBase = mixinTabIndex(mixinDisabled(mixinErrorState(class {
16
+ constructor(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl) {
17
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
18
+ this._formRoot = _formRoot;
19
+ this._parentForm = _parentForm;
20
+ this._parentFormGroup = _parentFormGroup;
21
+ this.ngControl = ngControl;
22
+ this.stateChanges = new Subject();
23
+ }
24
+ })));
25
+ /**
26
+ * The `FileUploadComponent` (`<impdc-file-upload` or `<any impdc-file-upload`) is a file selector that supports drag and drop.
27
+ * To use, import `FileUploadModule` or another module that imports and exports that module from `@impartner/design-components`.
28
+ */
29
+ export class FileUploadComponent extends _FileUploadComponentBase {
30
+ constructor(_changeDetector, _defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl) {
31
+ super(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl);
32
+ this._changeDetector = _changeDetector;
33
+ /**
34
+ * Whether the control supports uploading multiple files.
35
+ */
36
+ this.multiple = false;
37
+ /**
38
+ * The instructional text to display in the file upload dropzone.
39
+ */
40
+ this.uploadText = 'Drag and drop files here or click to upload';
41
+ /**
42
+ * The comma-delimited list of file types that are accepted by the control.
43
+ */
44
+ this.accept = '';
45
+ this._uid = `impdc-file-upload-${nanoid()}`;
46
+ this._value = [];
47
+ this._focused = false;
48
+ this.controlType = 'impdc-file-upload';
49
+ this.supportsAffixes = false;
50
+ if (this.ngControl) {
51
+ this.ngControl.valueAccessor = this;
52
+ this.ngControl.control?.addValidators(() => {
53
+ return this.validate();
54
+ });
55
+ }
56
+ this.id = this.id;
57
+ }
58
+ get canUpload() {
59
+ return this.multiple || this._value.length === 0;
60
+ }
61
+ get acceptTypes() {
62
+ if (!this.accept || !this.accept.length) {
63
+ return [];
64
+ }
65
+ return this.accept
66
+ .split(',')
67
+ .map(a => a.trim())
68
+ .filter(a => !!a);
69
+ }
70
+ get empty() {
71
+ return this._value.length === 0;
72
+ }
73
+ get filesForDisplay() {
74
+ return this._value || [];
75
+ }
76
+ /** @ignore */
77
+ handleChange(event) {
78
+ const fileList = (event.target || {})
79
+ .files;
80
+ if (!fileList) {
81
+ return;
82
+ }
83
+ this._mergeNewFilesWithExistingFiles(fileList);
84
+ }
85
+ /** @ignore */
86
+ handleDrop(event) {
87
+ if (this.disabled || !event) {
88
+ return;
89
+ }
90
+ this._mergeNewFilesWithExistingFiles(event);
91
+ }
92
+ /** @ignore */
93
+ removeFile(fileIndex) {
94
+ const newFilesArr = [...this._value];
95
+ newFilesArr.splice(fileIndex, 1);
96
+ this._updateValueFromInteraction(newFilesArr);
97
+ }
98
+ /** @ignore */
99
+ focus(options) {
100
+ this.fileDropElementRef.nativeElement.focus(options);
101
+ }
102
+ /* Lifecycle Hooks */
103
+ /** @ignore */
104
+ ngDoCheck() {
105
+ this.updateErrorState();
106
+ }
107
+ /** @ignore */
108
+ ngOnDestroy() {
109
+ this.stateChanges.complete();
110
+ }
111
+ /* ImpdcFormFieldControl */
112
+ /**
113
+ * The file(s) currently uploaded into the control. Returns `File | null` when `multiple` is `false`,
114
+ * and `File[]` when `multiple` is `true`.
115
+ */
116
+ get value() {
117
+ return this.multiple ? [...this._value] : this._value[0];
118
+ }
119
+ set value(newValue) {
120
+ if (newValue !== this._value) {
121
+ if (Array.isArray(newValue)) {
122
+ this._value = newValue ? [...newValue] : [];
123
+ }
124
+ else {
125
+ this._value = newValue ? [newValue] : [];
126
+ }
127
+ }
128
+ const fileList = this._getFileList(this._value);
129
+ if (this.fileUploadInputEltRef &&
130
+ this.fileUploadInputEltRef.nativeElement) {
131
+ this.fileUploadInputEltRef.nativeElement.files = fileList;
132
+ }
133
+ }
134
+ /** @ignore */
135
+ get id() {
136
+ return this._id;
137
+ }
138
+ set id(value) {
139
+ this._id = value || this._uid;
140
+ this.stateChanges.next();
141
+ }
142
+ /**
143
+ * Used to set requiredness of control in a template-based manner;
144
+ * not necessary when using the Angular reactive forms API and `required` validator.
145
+ *
146
+ * @default false
147
+ */
148
+ get required() {
149
+ return (this._required ??
150
+ this.ngControl?.control?.hasValidator(Validators.required) ??
151
+ false);
152
+ }
153
+ set required(value) {
154
+ this._required = coerceBooleanPropertyValue(value);
155
+ this.stateChanges.next();
156
+ }
157
+ get focused() {
158
+ return this._focused;
159
+ }
160
+ /* ControlValueAccessor */
161
+ /** @ignore */
162
+ writeValue(value) {
163
+ this.value = value;
164
+ this._changeDetector.markForCheck();
165
+ }
166
+ /** @ignore */
167
+ registerOnChange(fn) {
168
+ this._cvaOnChange = fn;
169
+ }
170
+ /** @ignore */
171
+ registerOnTouched(fn) {
172
+ this._cvaOnTouched = fn;
173
+ this._changeDetector.markForCheck();
174
+ }
175
+ /** @ignore */
176
+ setDisabledState(isDisabled) {
177
+ this.disabled = isDisabled;
178
+ }
179
+ /* Validator */
180
+ /**
181
+ * @ignore
182
+ */
183
+ validate() {
184
+ return !this.disabled && this.required && this._value.length === 0
185
+ ? { required: true }
186
+ : null;
187
+ }
188
+ /* Internals */
189
+ _onFocus() {
190
+ if (!this.disabled) {
191
+ this._focused = true;
192
+ this.stateChanges.next();
193
+ }
194
+ }
195
+ _onBlur() {
196
+ this._focused = false;
197
+ if (!this.disabled) {
198
+ this._cvaOnTouched && this._cvaOnTouched();
199
+ this._changeDetector.markForCheck();
200
+ this.stateChanges.next();
201
+ }
202
+ }
203
+ _updateValueFromInteraction(newValue) {
204
+ this.value = newValue;
205
+ this._cvaOnChange && this._cvaOnChange(this.value);
206
+ this._cvaOnTouched && this._cvaOnTouched();
207
+ this.stateChanges.next();
208
+ }
209
+ _mergeNewFilesWithExistingFiles(fileList) {
210
+ if (!fileList) {
211
+ return;
212
+ }
213
+ if (this._value && this._value.length == 1 && !this.multiple) {
214
+ return;
215
+ }
216
+ const tempFiles = [...this._value];
217
+ Array.from(fileList).forEach(newFile => {
218
+ if (!this.multiple && tempFiles.length > 0) {
219
+ return;
220
+ }
221
+ const existingFile = tempFiles.find(existing => existing.name === newFile.name &&
222
+ existing.lastModified === newFile.lastModified &&
223
+ existing.size === newFile.size);
224
+ if (existingFile) {
225
+ return;
226
+ }
227
+ if (this._acceptedFileType(newFile.type, newFile.name)) {
228
+ tempFiles.push(newFile);
229
+ }
230
+ });
231
+ this._updateValueFromInteraction(tempFiles);
232
+ }
233
+ _getFileList(files) {
234
+ const dataTransfer = new DataTransfer();
235
+ files.forEach(file => {
236
+ dataTransfer.items.add(file);
237
+ });
238
+ return dataTransfer.files;
239
+ }
240
+ _getExtensions(fileName) {
241
+ const nameSegments = fileName.split('.');
242
+ let extensions = [];
243
+ if (nameSegments.length < 2) {
244
+ return extensions;
245
+ }
246
+ const extension = `.${nameSegments.slice(1).join('.')}`;
247
+ extensions.push(extension);
248
+ if (nameSegments.length === 2) {
249
+ return extensions;
250
+ }
251
+ const sub = `.${nameSegments.slice(2).join('.')}`;
252
+ const subExtensions = this._getExtensions(sub);
253
+ extensions = [...extensions, ...subExtensions];
254
+ return extensions;
255
+ }
256
+ _acceptedFileType(type, fileName) {
257
+ if (!this.acceptTypes || this.acceptTypes.length === 0) {
258
+ return true;
259
+ }
260
+ const acceptedByType = this.acceptTypes.includes(type);
261
+ if (acceptedByType) {
262
+ return true;
263
+ }
264
+ const fileExtensions = this._getExtensions(fileName);
265
+ if (!fileExtensions || fileExtensions.length === 0) {
266
+ return false;
267
+ }
268
+ const acceptedByExtension = this.acceptTypes.some(type => fileExtensions.includes(type));
269
+ return acceptedByExtension;
270
+ }
271
+ }
272
+ FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FileUploadComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ErrorStateMatcher }, { token: IMPDC_FORM_ROOT, optional: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
273
+ FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: FileUploadComponent, selector: "impdc-file-upload, [impdc-file-upload]", inputs: { disabled: "disabled", tabIndex: "tabIndex", multiple: "multiple", uploadText: "uploadText", accept: "accept", errorStateMatcher: "errorStateMatcher", value: "value", id: "id", required: "required" }, host: { listeners: { "focus": "_onFocus(); focus()" }, properties: { "attr.id": "id", "attr.tabindex": "tabIndex", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "class.impdc-file-upload--required": "required", "class.impdc-file-upload--disabled": "disabled", "class.impdc-file-upload--invalid": "errorState", "class.impdc-file-upload--multiple": "multiple", "class.impdc-file-upload--empty": "empty" }, classAttribute: "impdc-file-upload" }, providers: [
274
+ {
275
+ provide: ImpdcFormFieldControl,
276
+ useExisting: FileUploadComponent
277
+ }
278
+ ], viewQueries: [{ propertyName: "fileDropElementRef", first: true, predicate: FileDropDirective, descendants: true, read: ElementRef }, { propertyName: "fileUploadInputEltRef", first: true, predicate: ["fileUploadInputElt"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"impdc-file-upload-container\">\n <div\n class=\"impdc-file-upload-dropzone\"\n [ngClass]=\"{\n 'hide-upload': !canUpload\n }\"\n impdcFileDrop\n (filesDropped)=\"handleDrop($event)\"\n (keyup.enter)=\"fileUploadInputElt.click()\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n [tabindex]=\"disabled ? '-1' : '0'\">\n <input\n class=\"file-upload-input\"\n type=\"file\"\n #fileUploadInputElt\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n [accept]=\"accept\"\n (change)=\"handleChange($event)\"\n tabindex=\"-1\" />\n <span class=\"fas fa-cloud-upload-alt upload-icon\"></span>\n <p class=\"upload-text\">{{ uploadText }}</p>\n </div>\n <div class=\"current-files\" *ngIf=\"filesForDisplay.length\">\n <ng-container *ngFor=\"let file of filesForDisplay; let idx = index\">\n <div class=\"current-file\">\n <div class=\"current-file-details\">\n <div class=\"name\">{{ file.name }}</div>\n <div class=\"size\">{{ file.size | humanReadableByteSize }}</div>\n </div>\n <div *ngIf=\"!disabled\" class=\"current-file-actions\">\n <button\n impdcButton\n theme=\"close\"\n tabindex=\"0\"\n (keyup.enter)=\"removeFile(idx)\"\n (click)=\"removeFile(idx)\"></button>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}:host.impdc-file-upload--invalid .impdc-file-upload-dropzone{color:var(--impd-color-red-500);border-color:var(--impd-color-red-500)}:host.impdc-file-upload--invalid .impdc-file-upload-dropzone .upload-text{color:var(--impd-color-red-900)}:host.impdc-file-upload--invalid .impdc-file-upload-container .current-files .current-file{border-color:var(--impd-color-red-500)}:host.impdc-file-upload--disabled .impdc-file-upload-dropzone{color:var(--impd-color-gray-300);background-color:var(--impd-color-gray-50)}:host:not(.impdc-file-upload--disabled) .impdc-file-upload-dropzone:focus,:host:not(.impdc-file-upload--disabled) .impdc-file-upload-dropzone:has(label > button:focus){background-color:var(--impd-color-gray-50);border:2px solid var(--impd-color-motion-blue-500);border-radius:var(--impd-border-radius-md);outline:none}.impdc-file-upload-container{display:flex;flex-direction:column;gap:var(--impd-size-2);width:100%}.impdc-file-upload-container .file-hover:not(.disabled){background-color:var(--impd-color-gray-50);border:2px solid var(--impd-color-motion-blue-500);border-radius:var(--impd-border-radius-md);outline:none}.impdc-file-upload-container .current-files{display:flex;flex-direction:column;gap:var(--impd-size-2)}.impdc-file-upload-container .current-files .current-file{display:inline-flex;background-color:var(--impd-color-gray-50);padding:var(--impd-size-4);gap:var(--impd-size-4);border-radius:var(--impd-border-radius-md);border:1px solid var(--impd-color-gray-200);justify-content:space-between;align-items:center;color:var(--impd-color-gray-600)}.impdc-file-upload-container .current-files .current-file .current-file-details{display:flex;flex-direction:column}.impdc-file-upload-container .current-files .current-file .current-file-details .name{color:var(--impd-color-gray-900);font-size:1.4rem;font-weight:500}.impdc-file-upload-container .current-files .current-file .current-file-details .size{font-size:1.4rem}.impdc-file-upload-container .current-files .current-file .current-file-actions .btn.btn-close-fa{color:var(--impd-color-gray-600)}.impdc-file-upload-dropzone{position:relative;display:flex;flex-direction:column;width:100%;min-height:10rem;padding:3.2rem 1.6rem;gap:2rem;align-items:center;justify-content:center;text-align:center;border:2px dashed var(--impd-color-gray-200);color:var(--impd-color-motion-blue-600);border-radius:5px}.impdc-file-upload-dropzone.hide-upload{display:none}.impdc-file-upload-dropzone .upload-icon{font-size:33px;color:inherit}.impdc-file-upload-dropzone .upload-text{margin:0;font-size:14px;line-height:20px;color:inherit}.impdc-file-upload-dropzone .button-text{border-color:var(--impd-color-motion-blue-600);background-color:var(--impd-color-motion-blue-600);color:#fff}.impdc-file-upload-dropzone input{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;z-index:2;cursor:pointer}.impdc-file-upload-dropzone input:disabled{cursor:default}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[impdcButton]", inputs: ["type", "theme", "text", "disabled", "titleText", "ariaLabel"] }, { kind: "directive", type: i5.FileDropDirective, selector: "[impdcFileDrop]", outputs: ["filesDropped"] }, { kind: "pipe", type: i6.HumanReadableByteSizePipe, name: "humanReadableByteSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FileUploadComponent, decorators: [{
280
+ type: Component,
281
+ args: [{ selector: 'impdc-file-upload, [impdc-file-upload]', inputs: ['disabled', 'tabIndex'], changeDetection: ChangeDetectionStrategy.OnPush, host: {
282
+ class: 'impdc-file-upload',
283
+ '[attr.id]': 'id',
284
+ '[attr.tabindex]': 'tabIndex',
285
+ '[attr.aria-required]': 'required.toString()',
286
+ '[attr.aria-disabled]': 'disabled.toString()',
287
+ '[attr.aria-invalid]': 'errorState',
288
+ '[class.impdc-file-upload--required]': 'required',
289
+ '[class.impdc-file-upload--disabled]': 'disabled',
290
+ '[class.impdc-file-upload--invalid]': 'errorState',
291
+ '[class.impdc-file-upload--multiple]': 'multiple',
292
+ '[class.impdc-file-upload--empty]': 'empty',
293
+ '(focus)': '_onFocus(); focus()'
294
+ }, providers: [
295
+ {
296
+ provide: ImpdcFormFieldControl,
297
+ useExisting: FileUploadComponent
298
+ }
299
+ ], template: "<div class=\"impdc-file-upload-container\">\n <div\n class=\"impdc-file-upload-dropzone\"\n [ngClass]=\"{\n 'hide-upload': !canUpload\n }\"\n impdcFileDrop\n (filesDropped)=\"handleDrop($event)\"\n (keyup.enter)=\"fileUploadInputElt.click()\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n [tabindex]=\"disabled ? '-1' : '0'\">\n <input\n class=\"file-upload-input\"\n type=\"file\"\n #fileUploadInputElt\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n [accept]=\"accept\"\n (change)=\"handleChange($event)\"\n tabindex=\"-1\" />\n <span class=\"fas fa-cloud-upload-alt upload-icon\"></span>\n <p class=\"upload-text\">{{ uploadText }}</p>\n </div>\n <div class=\"current-files\" *ngIf=\"filesForDisplay.length\">\n <ng-container *ngFor=\"let file of filesForDisplay; let idx = index\">\n <div class=\"current-file\">\n <div class=\"current-file-details\">\n <div class=\"name\">{{ file.name }}</div>\n <div class=\"size\">{{ file.size | humanReadableByteSize }}</div>\n </div>\n <div *ngIf=\"!disabled\" class=\"current-file-actions\">\n <button\n impdcButton\n theme=\"close\"\n tabindex=\"0\"\n (keyup.enter)=\"removeFile(idx)\"\n (click)=\"removeFile(idx)\"></button>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}:host.impdc-file-upload--invalid .impdc-file-upload-dropzone{color:var(--impd-color-red-500);border-color:var(--impd-color-red-500)}:host.impdc-file-upload--invalid .impdc-file-upload-dropzone .upload-text{color:var(--impd-color-red-900)}:host.impdc-file-upload--invalid .impdc-file-upload-container .current-files .current-file{border-color:var(--impd-color-red-500)}:host.impdc-file-upload--disabled .impdc-file-upload-dropzone{color:var(--impd-color-gray-300);background-color:var(--impd-color-gray-50)}:host:not(.impdc-file-upload--disabled) .impdc-file-upload-dropzone:focus,:host:not(.impdc-file-upload--disabled) .impdc-file-upload-dropzone:has(label > button:focus){background-color:var(--impd-color-gray-50);border:2px solid var(--impd-color-motion-blue-500);border-radius:var(--impd-border-radius-md);outline:none}.impdc-file-upload-container{display:flex;flex-direction:column;gap:var(--impd-size-2);width:100%}.impdc-file-upload-container .file-hover:not(.disabled){background-color:var(--impd-color-gray-50);border:2px solid var(--impd-color-motion-blue-500);border-radius:var(--impd-border-radius-md);outline:none}.impdc-file-upload-container .current-files{display:flex;flex-direction:column;gap:var(--impd-size-2)}.impdc-file-upload-container .current-files .current-file{display:inline-flex;background-color:var(--impd-color-gray-50);padding:var(--impd-size-4);gap:var(--impd-size-4);border-radius:var(--impd-border-radius-md);border:1px solid var(--impd-color-gray-200);justify-content:space-between;align-items:center;color:var(--impd-color-gray-600)}.impdc-file-upload-container .current-files .current-file .current-file-details{display:flex;flex-direction:column}.impdc-file-upload-container .current-files .current-file .current-file-details .name{color:var(--impd-color-gray-900);font-size:1.4rem;font-weight:500}.impdc-file-upload-container .current-files .current-file .current-file-details .size{font-size:1.4rem}.impdc-file-upload-container .current-files .current-file .current-file-actions .btn.btn-close-fa{color:var(--impd-color-gray-600)}.impdc-file-upload-dropzone{position:relative;display:flex;flex-direction:column;width:100%;min-height:10rem;padding:3.2rem 1.6rem;gap:2rem;align-items:center;justify-content:center;text-align:center;border:2px dashed var(--impd-color-gray-200);color:var(--impd-color-motion-blue-600);border-radius:5px}.impdc-file-upload-dropzone.hide-upload{display:none}.impdc-file-upload-dropzone .upload-icon{font-size:33px;color:inherit}.impdc-file-upload-dropzone .upload-text{margin:0;font-size:14px;line-height:20px;color:inherit}.impdc-file-upload-dropzone .button-text{border-color:var(--impd-color-motion-blue-600);background-color:var(--impd-color-motion-blue-600);color:#fff}.impdc-file-upload-dropzone input{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;z-index:2;cursor:pointer}.impdc-file-upload-dropzone input:disabled{cursor:default}\n"] }]
300
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ErrorStateMatcher }, { type: undefined, decorators: [{
301
+ type: Optional
302
+ }, {
303
+ type: Inject,
304
+ args: [IMPDC_FORM_ROOT]
305
+ }] }, { type: i2.NgForm, decorators: [{
306
+ type: Optional
307
+ }] }, { type: i2.FormGroupDirective, decorators: [{
308
+ type: Optional
309
+ }] }, { type: i2.NgControl, decorators: [{
310
+ type: Self
311
+ }, {
312
+ type: Optional
313
+ }] }]; }, propDecorators: { fileDropElementRef: [{
314
+ type: ViewChild,
315
+ args: [FileDropDirective, { read: ElementRef }]
316
+ }], fileUploadInputEltRef: [{
317
+ type: ViewChild,
318
+ args: ['fileUploadInputElt', { static: false }]
319
+ }], multiple: [{
320
+ type: Input
321
+ }], uploadText: [{
322
+ type: Input
323
+ }], accept: [{
324
+ type: Input
325
+ }], errorStateMatcher: [{
326
+ type: Input
327
+ }], value: [{
328
+ type: Input
329
+ }], id: [{
330
+ type: Input
331
+ }], required: [{
332
+ type: Input
333
+ }] } });
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFPTCxVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFnQiwwQkFBMEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFJTCxxQkFBcUIsRUFFckIsZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFFakQsTUFBTSx3QkFBd0IsR0FBRyxhQUFhLENBQzVDLGFBQWEsQ0FDWCxlQUFlLENBQ2I7SUFHRSxZQUNTLHlCQUE0QyxFQUM1QyxTQUF3QixFQUN4QixXQUFtQixFQUNuQixnQkFBb0MsRUFDcEMsU0FBMkI7UUFKM0IsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUFtQjtRQUM1QyxjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLGdCQUFXLEdBQVgsV0FB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QUM3QyxxQkFBcUIsRUFBRSxZQUFZO3dCQUNuQyxxQ0FBcUMsRUFBRSxVQUFVO3dCQUNqRCxxQ0FBcUMsRUFBRSxVQUFVO3dCQUNqRCxvQ0FBb0MsRUFBRSxZQUFZO3dCQUNsRCxxQ0FBcUMsRUFBRSxVQUFVO3dCQUNqRCxrQ0FBa0MsRUFBRSxPQUFPO3dCQUMzQyxTQUFTLEVBQUUscUJBQXFCO3FCQUNqQyxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFdBQVcscUJBQXFCO3lCQUNqQztxQkFDRjs7MEJBdUVFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ2xDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLElBQUk7OzBCQUFJLFFBQVE7NENBNURULGtCQUFrQjtzQkFEM0IsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSzNDLHFCQUFxQjtzQkFEM0IsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT2xELFFBQVE7c0JBRFAsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQUlVLGlCQUFpQjtzQkFEaEMsS0FBSztnQkE2R0ssS0FBSztzQkFEZixLQUFLO2dCQTBCSyxFQUFFO3NCQURaLEtBQUs7Z0JBaUJLLFFBQVE7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTmdDb250cm9sLFxuICBOZ0Zvcm0sXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQge1xuICBFcnJvclN0YXRlTWF0Y2hlcixcbiAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gIElIYXNFcnJvclN0YXRlLFxuICBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsXG4gIEltcGRjRm9ybVJvb3QsXG4gIElNUERDX0ZPUk1fUk9PVCxcbiAgbWl4aW5EaXNhYmxlZCxcbiAgbWl4aW5FcnJvclN0YXRlLFxuICBtaXhpblRhYkluZGV4XG59IGZyb20gJy4uL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgRmlsZURyb3BEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuXG5jb25zdCBfRmlsZVVwbG9hZENvbXBvbmVudEJhc2UgPSBtaXhpblRhYkluZGV4KFxuICBtaXhpbkRpc2FibGVkKFxuICAgIG1peGluRXJyb3JTdGF0ZShcbiAgICAgIGNsYXNzIHtcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgcHVibGljIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgICAgIHB1YmxpYyBfZm9ybVJvb3Q6IEltcGRjRm9ybVJvb3QsXG4gICAgICAgICAgcHVibGljIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgICAgICAgcHVibGljIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICAgICAgICBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsXG4gICAgICAgICkge31cbiAgICAgIH1cbiAgICApXG4gIClcbik7XG5cbi8qKlxuICogVGhlIGBGaWxlVXBsb2FkQ29tcG9uZW50YCAoYDxpbXBkYy1maWxlLXVwbG9hZGAgb3IgYDxhbnkgaW1wZGMtZmlsZS11cGxvYWRgKSBpcyBhIGZpbGUgc2VsZWN0b3IgdGhhdCBzdXBwb3J0cyBkcmFnIGFuZCBkcm9wLlxuICogVG8gdXNlLCBpbXBvcnQgYEZpbGVVcGxvYWRNb2R1bGVgIG9yIGFub3RoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyBhbmQgZXhwb3J0cyB0aGF0IG1vZHVsZSBmcm9tIGBAaW1wYXJ0bmVyL2Rlc2lnbi1jb21wb25lbnRzYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1wZGMtZmlsZS11cGxvYWQsIFtpbXBkYy1maWxlLXVwbG9hZF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFsnZGlzYWJsZWQnLCAndGFiSW5kZXgnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdpbXBkYy1maWxlLXVwbG9hZCcsXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJJbmRleCcsXG4gICAgJ1thdHRyLmFyaWEtcmVxdWlyZWRdJzogJ3JlcXVpcmVkLnRvU3RyaW5nKCknLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZC50b1N0cmluZygpJyxcbiAgICAnW2F0dHIuYXJpYS1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmltcGRjLWZpbGUtdXBsb2FkLS1yZXF1aXJlZF0nOiAncmVxdWlyZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtZmlsZS11cGxvYWQtLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5pbXBkYy1maWxlLXVwbG9hZC0taW52YWxpZF0nOiAnZXJyb3JTdGF0ZScsXG4gICAgJ1tjbGFzcy5pbXBkYy1maWxlLXVwbG9hZC0tbXVsdGlwbGVdJzogJ211bHRpcGxlJyxcbiAgICAnW2NsYXNzLmltcGRjLWZpbGUtdXBsb2FkLS1lbXB0eV0nOiAnZW1wdHknLFxuICAgICcoZm9jdXMpJzogJ19vbkZvY3VzKCk7IGZvY3VzKCknXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEltcGRjRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBGaWxlVXBsb2FkQ29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnRcbiAgZXh0ZW5kcyBfRmlsZVVwbG9hZENvbXBvbmVudEJhc2VcbiAgaW1wbGVtZW50c1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvcixcbiAgICBJbXBkY0Zvcm1GaWVsZENvbnRyb2w8RmlsZSB8IEZpbGVbXT4sXG4gICAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gICAgSUhhc0Vycm9yU3RhdGUsXG4gICAgRG9DaGVjayxcbiAgICBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZChGaWxlRHJvcERpcmVjdGl2ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByb3RlY3RlZCBmaWxlRHJvcEVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAVmlld0NoaWxkKCdmaWxlVXBsb2FkSW5wdXRFbHQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGZpbGVVcGxvYWRJbnB1dEVsdFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRyb2wgc3VwcG9ydHMgdXBsb2FkaW5nIG11bHRpcGxlIGZpbGVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGluc3RydWN0aW9uYWwgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBmaWxlIHVwbG9hZCBkcm9wem9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHVwbG9hZFRleHQ6IHN0cmluZyA9ICdEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IgY2xpY2sgdG8gdXBsb2FkJztcblxuICAvKipcbiAgICogVGhlIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGZpbGUgdHlwZXMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgdGhlIGNvbnRyb2wuXG4gICAqL1xuICBASW5wdXQoKVxuICBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBlcnJvclN0YXRlTWF0Y2hlciE6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gIHB1YmxpYyBnZXQgY2FuVXBsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlIHx8IHRoaXMuX3ZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGFjY2VwdFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuYWNjZXB0IHx8ICF0aGlzLmFjY2VwdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHRcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGEgPT4gYS50cmltKCkpXG4gICAgICAuZmlsdGVyKGEgPT4gISFhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNGb3JEaXNwbGF5KCk6IHJlYWRvbmx5IEZpbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3ZhT25DaGFuZ2U6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9jdmFPblRvdWNoZWQ6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF91aWQgPSBgaW1wZGMtZmlsZS11cGxvYWQtJHtuYW5vaWQoKX1gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElNUERDX0ZPUk1fUk9PVCkgX2Zvcm1Sb290OiBJbXBkY0Zvcm1Sb290LFxuICAgIEBPcHRpb25hbCgpIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgQE9wdGlvbmFsKCkgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgIF9mb3JtUm9vdCxcbiAgICAgIF9wYXJlbnRGb3JtLFxuICAgICAgX3BhcmVudEZvcm1Hcm91cCxcbiAgICAgIG5nQ29udHJvbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8uYWRkVmFsaWRhdG9ycygoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCA9ICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpIHx8IHt9KVxuICAgICAgLmZpbGVzO1xuXG4gICAgaWYgKCFmaWxlTGlzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21lcmdlTmV3RmlsZXNXaXRoRXhpc3RpbmdGaWxlcyhmaWxlTGlzdCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaGFuZGxlRHJvcChldmVudDogRmlsZUxpc3QpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXJnZU5ld0ZpbGVzV2l0aEV4aXN0aW5nRmlsZXMoZXZlbnQpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlbW92ZUZpbGUoZmlsZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdGaWxlc0FyciA9IFsuLi50aGlzLl92YWx1ZV07XG4gICAgbmV3RmlsZXNBcnIuc3BsaWNlKGZpbGVJbmRleCwgMSk7XG5cbiAgICB0aGlzLl91cGRhdGVWYWx1ZUZyb21JbnRlcmFjdGlvbihuZXdGaWxlc0Fycik7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuZmlsZURyb3BFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICAvKiBMaWZlY3ljbGUgSG9va3MgKi9cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wgKi9cblxuICAvKipcbiAgICogVGhlIGZpbGUocykgY3VycmVudGx5IHVwbG9hZGVkIGludG8gdGhlIGNvbnRyb2wuIFJldHVybnMgYEZpbGUgfCBudWxsYCB3aGVuIGBtdWx0aXBsZWAgaXMgYGZhbHNlYCxcbiAgICogYW5kIGBGaWxlW11gIHdoZW4gYG11bHRpcGxlYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IEZpbGUgfCBGaWxlW10gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFsuLi50aGlzLl92YWx1ZV0gOiB0aGlzLl92YWx1ZVswXTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBGaWxlIHwgRmlsZVtdIHwgbnVsbCkge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlID8gWy4uLm5ld1ZhbHVlXSA6IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZSA/IFtuZXdWYWx1ZV0gOiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWxlTGlzdCA9IHRoaXMuX2dldEZpbGVMaXN0KHRoaXMuX3ZhbHVlKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsZVVwbG9hZElucHV0RWx0UmVmICYmXG4gICAgICB0aGlzLmZpbGVVcGxvYWRJbnB1dEVsdFJlZi5uYXRpdmVFbGVtZW50XG4gICAgKSB7XG4gICAgICB0aGlzLmZpbGVVcGxvYWRJbnB1dEVsdFJlZi5uYXRpdmVFbGVtZW50LmZpbGVzID0gZmlsZUxpc3Q7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiByZWFkb25seSBGaWxlW10gPSBbXTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy5fdWlkO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9pZCE6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgcmVxdWlyZWRuZXNzIG9mIGNvbnRyb2wgaW4gYSB0ZW1wbGF0ZS1iYXNlZCBtYW5uZXI7XG4gICAqIG5vdCBuZWNlc3Nhcnkgd2hlbiB1c2luZyB0aGUgQW5ndWxhciByZWFjdGl2ZSBmb3JtcyBBUEkgYW5kIGByZXF1aXJlZGAgdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fcmVxdWlyZWQgPz9cbiAgICAgIHRoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgPz9cbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCBmb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkO1xuICB9XG4gIHByaXZhdGUgX2ZvY3VzZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbFR5cGU6IHN0cmluZyA9ICdpbXBkYy1maWxlLXVwbG9hZCc7XG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c0FmZml4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiBDb250cm9sVmFsdWVBY2Nlc3NvciAqL1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBGaWxlW10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2N2YU9uVG91Y2hlZCA9IGZuO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qIFZhbGlkYXRvciAqL1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnJlcXVpcmVkICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgPyB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIC8qIEludGVybmFscyAqL1xuXG4gIHByb3RlY3RlZCBfb25Gb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fY3ZhT25Ub3VjaGVkICYmIHRoaXMuX2N2YU9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVGcm9tSW50ZXJhY3Rpb24obmV3VmFsdWU6IEZpbGVbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgIHRoaXMuX2N2YU9uQ2hhbmdlICYmIHRoaXMuX2N2YU9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuX2N2YU9uVG91Y2hlZCAmJiB0aGlzLl9jdmFPblRvdWNoZWQoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9tZXJnZU5ld0ZpbGVzV2l0aEV4aXN0aW5nRmlsZXMoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID09IDEgJiYgIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wRmlsZXMgPSBbLi4udGhpcy5fdmFsdWVdO1xuXG4gICAgQXJyYXkuZnJvbShmaWxlTGlzdCkuZm9yRWFjaChuZXdGaWxlID0+IHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0ZW1wRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBleGlzdGluZ0ZpbGUgPSB0ZW1wRmlsZXMuZmluZChcbiAgICAgICAgZXhpc3RpbmcgPT5cbiAgICAgICAgICBleGlzdGluZy5uYW1lID09PSBuZXdGaWxlLm5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZy5sYXN0TW9kaWZpZWQgPT09IG5ld0ZpbGUubGFzdE1vZGlmaWVkICYmXG4gICAgICAgICAgZXhpc3Rpbmcuc2l6ZSA9PT0gbmV3RmlsZS5zaXplXG4gICAgICApO1xuXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2FjY2VwdGVkRmlsZVR5cGUobmV3RmlsZS50eXBlLCBuZXdGaWxlLm5hbWUpKSB7XG4gICAgICAgIHRlbXBGaWxlcy5wdXNoKG5ld0ZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fdXBkYXRlVmFsdWVGcm9tSW50ZXJhY3Rpb24odGVtcEZpbGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEZpbGVMaXN0KGZpbGVzOiByZWFkb25seSBGaWxlW10pOiBGaWxlTGlzdCB7XG4gICAgY29uc3QgZGF0YVRyYW5zZmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGRhdGFUcmFuc2Zlci5pdGVtcy5hZGQoZmlsZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YVRyYW5zZmVyLmZpbGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RXh0ZW5zaW9ucyhmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5hbWVTZWdtZW50cyA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XG4gICAgbGV0IGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobmFtZVNlZ21lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBleHRlbnNpb25zO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGAuJHtuYW1lU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpfWA7XG4gICAgZXh0ZW5zaW9ucy5wdXNoKGV4dGVuc2lvbik7XG5cbiAgICBpZiAobmFtZVNlZ21lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIGV4dGVuc2lvbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViID0gYC4ke25hbWVTZWdtZW50cy5zbGljZSgyKS5qb2luKCcuJyl9YDtcbiAgICBjb25zdCBzdWJFeHRlbnNpb25zID0gdGhpcy5fZ2V0RXh0ZW5zaW9ucyhzdWIpO1xuICAgIGV4dGVuc2lvbnMgPSBbLi4uZXh0ZW5zaW9ucywgLi4uc3ViRXh0ZW5zaW9uc107XG5cbiAgICByZXR1cm4gZXh0ZW5zaW9ucztcbiAgfVxuXG4gIHByaXZhdGUgX2FjY2VwdGVkRmlsZVR5cGUodHlwZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmFjY2VwdFR5cGVzIHx8IHRoaXMuYWNjZXB0VHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRlZEJ5VHlwZSA9IHRoaXMuYWNjZXB0VHlwZXMuaW5jbHVkZXModHlwZSk7XG5cbiAgICBpZiAoYWNjZXB0ZWRCeVR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gdGhpcy5fZ2V0RXh0ZW5zaW9ucyhmaWxlTmFtZSk7XG5cbiAgICBpZiAoIWZpbGVFeHRlbnNpb25zIHx8IGZpbGVFeHRlbnNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY2VwdGVkQnlFeHRlbnNpb24gPSB0aGlzLmFjY2VwdFR5cGVzLnNvbWUodHlwZSA9PlxuICAgICAgZmlsZUV4dGVuc2lvbnMuaW5jbHVkZXModHlwZSlcbiAgICApO1xuXG4gICAgcmV0dXJuIGFjY2VwdGVkQnlFeHRlbnNpb247XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbXBkYy1maWxlLXVwbG9hZC1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaW1wZGMtZmlsZS11cGxvYWQtZHJvcHpvbmVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdoaWRlLXVwbG9hZCc6ICFjYW5VcGxvYWRcbiAgICB9XCJcbiAgICBpbXBkY0ZpbGVEcm9wXG4gICAgKGZpbGVzRHJvcHBlZCk9XCJoYW5kbGVEcm9wKCRldmVudClcIlxuICAgIChrZXl1cC5lbnRlcik9XCJmaWxlVXBsb2FkSW5wdXRFbHQuY2xpY2soKVwiXG4gICAgKGZvY3VzKT1cIl9vbkZvY3VzKClcIlxuICAgIChibHVyKT1cIl9vbkJsdXIoKVwiXG4gICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gJy0xJyA6ICcwJ1wiPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1pbnB1dFwiXG4gICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAjZmlsZVVwbG9hZElucHV0RWx0XG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtY2xvdWQtdXBsb2FkLWFsdCB1cGxvYWQtaWNvblwiPjwvc3Bhbj5cbiAgICA8cCBjbGFzcz1cInVwbG9hZC10ZXh0XCI+e3sgdXBsb2FkVGV4dCB9fTwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjdXJyZW50LWZpbGVzXCIgKm5nSWY9XCJmaWxlc0ZvckRpc3BsYXkubGVuZ3RoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlc0ZvckRpc3BsYXk7IGxldCBpZHggPSBpbmRleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImN1cnJlbnQtZmlsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VycmVudC1maWxlLWRldGFpbHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXplXCI+e3sgZmlsZS5zaXplIHwgaHVtYW5SZWFkYWJsZUJ5dGVTaXplIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJjdXJyZW50LWZpbGUtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGltcGRjQnV0dG9uXG4gICAgICAgICAgICB0aGVtZT1cImNsb3NlXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicmVtb3ZlRmlsZShpZHgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGlkeClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { FileDropDirective } from './directives';
4
+ import { FileUploadComponent } from './file-upload.component';
5
+ import { ButtonModule } from '../button';
6
+ import { CommonModule } from '@angular/common';
7
+ import { HumanReadableByteSizePipe } from './pipes';
8
+ import * as i0 from "@angular/core";
9
+ export class FileUploadModule {
10
+ constructor() { }
11
+ }
12
+ FileUploadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ FileUploadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: FileUploadModule, declarations: [FileDropDirective,
14
+ FileUploadComponent,
15
+ HumanReadableByteSizePipe], imports: [CommonModule, FormsModule, ButtonModule], exports: [FileDropDirective, FileUploadComponent] });
16
+ FileUploadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FileUploadModule, imports: [CommonModule, FormsModule, ButtonModule] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: FileUploadModule, decorators: [{
18
+ type: NgModule,
19
+ args: [{
20
+ imports: [CommonModule, FormsModule, ButtonModule],
21
+ declarations: [
22
+ FileDropDirective,
23
+ FileUploadComponent,
24
+ HumanReadableByteSizePipe
25
+ ],
26
+ exports: [FileDropDirective, FileUploadComponent]
27
+ }]
28
+ }], ctorParameters: function () { return []; } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFXcEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixnQkFBZSxDQUFDOzs4R0FETCxnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFOekIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQix5QkFBeUIsYUFKakIsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLGFBTXZDLGlCQUFpQixFQUFFLG1CQUFtQjsrR0FFckMsZ0JBQWdCLFlBUmpCLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWTs0RkFRdEMsZ0JBQWdCO2tCQVQ1QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDO29CQUNsRCxZQUFZLEVBQUU7d0JBQ1osaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLHlCQUF5QjtxQkFDMUI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUM7aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsZURyb3BEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHVtYW5SZWFkYWJsZUJ5dGVTaXplUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgQnV0dG9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRmlsZURyb3BEaXJlY3RpdmUsXG4gICAgRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgICBIdW1hblJlYWRhYmxlQnl0ZVNpemVQaXBlXG4gIF0sXG4gIGV4cG9ydHM6IFtGaWxlRHJvcERpcmVjdGl2ZSwgRmlsZVVwbG9hZENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './directives';
2
+ export * from './pipes';
3
+ export { FileUploadComponent } from './file-upload.component';
4
+ export { FileUploadModule } from './file-upload.module';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2ZpbGUtdXBsb2FkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0IHsgRmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWQuY29tcG9uZW50JztcbmV4cG9ydCB7IEZpbGVVcGxvYWRNb2R1bGUgfSBmcm9tICcuL2ZpbGUtdXBsb2FkLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class HumanReadableByteSizePipe {
4
+ transform(bytes) {
5
+ if (bytes < 1024) {
6
+ return `${bytes}B`;
7
+ }
8
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
9
+ const num = bytes / Math.pow(1024, i);
10
+ const round = Math.round(num);
11
+ const display = round < 10 ? num.toFixed(2) : round < 100 ? num.toFixed(1) : round;
12
+ return `${display}${'KMGTPEZY'[i - 1]}B`;
13
+ }
14
+ }
15
+ HumanReadableByteSizePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: HumanReadableByteSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
16
+ HumanReadableByteSizePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: HumanReadableByteSizePipe, name: "humanReadableByteSize" });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: HumanReadableByteSizePipe, decorators: [{
18
+ type: Pipe,
19
+ args: [{
20
+ name: 'humanReadableByteSize'
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4tcmVhZGFibGUtYnl0ZS1zaXplLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2ZpbGUtdXBsb2FkL3BpcGVzL2h1bWFuLXJlYWRhYmxlLWJ5dGUtc2l6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtZQUNoQixPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUM7U0FDcEI7UUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUNYLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVyRSxPQUFPLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMzQyxDQUFDOzt1SEFiVSx5QkFBeUI7cUhBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQUhyQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSx1QkFBdUI7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdodW1hblJlYWRhYmxlQnl0ZVNpemUnXG59KVxuZXhwb3J0IGNsYXNzIEh1bWFuUmVhZGFibGVCeXRlU2l6ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA8IDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtieXRlc31CYDtcbiAgICB9XG5cbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgY29uc3QgbnVtID0gYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBpKTtcbiAgICBjb25zdCByb3VuZCA9IE1hdGgucm91bmQobnVtKTtcbiAgICBjb25zdCBkaXNwbGF5ID1cbiAgICAgIHJvdW5kIDwgMTAgPyBudW0udG9GaXhlZCgyKSA6IHJvdW5kIDwgMTAwID8gbnVtLnRvRml4ZWQoMSkgOiByb3VuZDtcblxuICAgIHJldHVybiBgJHtkaXNwbGF5fSR7J0tNR1RQRVpZJ1tpIC0gMV19QmA7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './human-readable-byte-size.pipe';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2ZpbGUtdXBsb2FkL3BpcGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2h1bWFuLXJlYWRhYmxlLWJ5dGUtc2l6ZS5waXBlJztcbiJdfQ==