@acorex/components 7.17.15 → 7.17.17

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 (286) hide show
  1. package/common/lib/services/hotkey.service.d.ts +14 -0
  2. package/esm2022/action-sheet/lib/action-sheet.component.mjs +3 -3
  3. package/esm2022/action-sheet/lib/action-sheet.module.mjs +4 -4
  4. package/esm2022/action-sheet/lib/action-sheet.service.mjs +3 -3
  5. package/esm2022/alert/lib/alert.component.mjs +9 -9
  6. package/esm2022/alert/lib/alert.module.mjs +4 -4
  7. package/esm2022/avatar/lib/avatar-group.component.mjs +3 -3
  8. package/esm2022/avatar/lib/avatar.component.mjs +3 -3
  9. package/esm2022/avatar/lib/avatar.module.mjs +4 -4
  10. package/esm2022/badge/lib/badge.component.mjs +3 -3
  11. package/esm2022/badge/lib/badge.module.mjs +4 -4
  12. package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +3 -3
  13. package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +3 -3
  14. package/esm2022/breadcrumbs/lib/breadcrumbs.module.mjs +4 -4
  15. package/esm2022/button/lib/button-item-list.component.mjs +5 -5
  16. package/esm2022/button/lib/button-item.component.mjs +3 -3
  17. package/esm2022/button/lib/button.component.mjs +5 -5
  18. package/esm2022/button/lib/button.module.mjs +4 -4
  19. package/esm2022/button-group/lib/button-group.component.mjs +4 -4
  20. package/esm2022/button-group/lib/button-group.module.mjs +4 -4
  21. package/esm2022/calendar/lib/calendar-range.component.mjs +3 -3
  22. package/esm2022/calendar/lib/calendar.class.mjs +3 -3
  23. package/esm2022/calendar/lib/calendar.component.mjs +3 -3
  24. package/esm2022/calendar/lib/calendar.module.mjs +4 -4
  25. package/esm2022/check-box/lib/check-box.component.mjs +3 -3
  26. package/esm2022/check-box/lib/check-box.module.mjs +4 -4
  27. package/esm2022/chips/lib/chips.component.mjs +3 -3
  28. package/esm2022/chips/lib/chips.module.mjs +4 -4
  29. package/esm2022/circular-progress/lib/circular-progress.component.mjs +4 -4
  30. package/esm2022/circular-progress/lib/circular-progress.module.mjs +4 -4
  31. package/esm2022/collapse/lib/collapse-group.component.mjs +3 -3
  32. package/esm2022/collapse/lib/collapse.component.mjs +5 -5
  33. package/esm2022/collapse/lib/collapse.module.mjs +4 -4
  34. package/esm2022/color-box/lib/color-box.component.mjs +3 -3
  35. package/esm2022/color-box/lib/color-box.module.mjs +4 -4
  36. package/esm2022/color-palette/lib/color-palette-input.component.mjs +4 -4
  37. package/esm2022/color-palette/lib/color-palette-picker.component.mjs +3 -3
  38. package/esm2022/color-palette/lib/color-palette-preview.component.mjs +3 -3
  39. package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +3 -3
  40. package/esm2022/color-palette/lib/color-palette.class.mjs +6 -6
  41. package/esm2022/color-palette/lib/color-palette.component.mjs +3 -3
  42. package/esm2022/color-palette/lib/color-palette.module.mjs +4 -4
  43. package/esm2022/common/lib/classes/components.class.mjs +21 -21
  44. package/esm2022/common/lib/common.module.mjs +4 -4
  45. package/esm2022/common/lib/components/base-component.class.mjs +3 -3
  46. package/esm2022/common/lib/components/input-base-value-component.class.mjs +3 -3
  47. package/esm2022/common/lib/components/look-component.class.mjs +3 -3
  48. package/esm2022/common/lib/components/selection-base.component.class.mjs +6 -6
  49. package/esm2022/common/lib/components/value-component.class.mjs +3 -3
  50. package/esm2022/common/lib/directives/auto-focus.directive.mjs +3 -3
  51. package/esm2022/common/lib/directives/delayed-value-changed.directive.mjs +3 -3
  52. package/esm2022/common/lib/directives/hotkey.directive.mjs +3 -3
  53. package/esm2022/common/lib/directives/infinite-scroll.directive.mjs +3 -3
  54. package/esm2022/common/lib/directives/responsive.directive.mjs +3 -3
  55. package/esm2022/common/lib/directives/ripple.directive.mjs +3 -3
  56. package/esm2022/common/lib/services/dom.service.mjs +3 -3
  57. package/esm2022/common/lib/services/hotkey.service.mjs +12 -4
  58. package/esm2022/data-pager/lib/data-pager-base.component.mjs +6 -6
  59. package/esm2022/data-pager/lib/data-pager-info.component.mjs +3 -3
  60. package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +4 -4
  61. package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +3 -3
  62. package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +3 -3
  63. package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +6 -6
  64. package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +3 -3
  65. package/esm2022/data-pager/lib/data-pager.component.mjs +5 -5
  66. package/esm2022/data-pager/lib/data-pager.module.mjs +4 -4
  67. package/esm2022/data-table/lib/columns/data-table-column.mjs +3 -3
  68. package/esm2022/data-table/lib/columns/data-text-column.component.mjs +3 -3
  69. package/esm2022/data-table/lib/columns/row-command-column.component.mjs +6 -6
  70. package/esm2022/data-table/lib/columns/row-index-column.component.mjs +3 -3
  71. package/esm2022/data-table/lib/columns/row-select-column.component.mjs +3 -3
  72. package/esm2022/data-table/lib/data-table.component.mjs +4 -4
  73. package/esm2022/data-table/lib/data-table.module.mjs +4 -4
  74. package/esm2022/datetime-box/lib/datetime-box.component.mjs +3 -3
  75. package/esm2022/datetime-box/lib/datetime-box.module.mjs +4 -4
  76. package/esm2022/datetime-input/lib/datetime-input.component.mjs +3 -3
  77. package/esm2022/datetime-input/lib/datetime-input.module.mjs +4 -4
  78. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +3 -3
  79. package/esm2022/datetime-picker/lib/datetime-picker.module.mjs +4 -4
  80. package/esm2022/decorators/lib/components/clear-button.component.mjs +7 -7
  81. package/esm2022/decorators/lib/components/close-button.component.mjs +5 -5
  82. package/esm2022/decorators/lib/components/generic-content.component.mjs +3 -3
  83. package/esm2022/decorators/lib/components/icon.component.mjs +3 -3
  84. package/esm2022/decorators/lib/decorators.module.mjs +4 -4
  85. package/esm2022/dialog/lib/dialog.component.mjs +3 -3
  86. package/esm2022/dialog/lib/dialog.module.mjs +4 -4
  87. package/esm2022/dialog/lib/dialog.service.mjs +3 -3
  88. package/esm2022/drawer/lib/drawer-container.component.mjs +3 -3
  89. package/esm2022/drawer/lib/drawer.component.mjs +3 -3
  90. package/esm2022/drawer/lib/drawer.module.mjs +4 -4
  91. package/esm2022/dropdown/lib/dropdown-box.class.mjs +3 -3
  92. package/esm2022/dropdown/lib/dropdown-box.component.mjs +3 -3
  93. package/esm2022/dropdown/lib/dropdown-panel.component.mjs +3 -3
  94. package/esm2022/dropdown/lib/dropdown.module.mjs +4 -4
  95. package/esm2022/form/lib/form-field.component.mjs +3 -3
  96. package/esm2022/form/lib/form.component.mjs +3 -3
  97. package/esm2022/form/lib/form.module.mjs +4 -4
  98. package/esm2022/form/lib/validation-rule.widget.mjs +3 -3
  99. package/esm2022/form/lib/validation-summary.component.mjs +3 -3
  100. package/esm2022/image/lib/image.component.mjs +3 -3
  101. package/esm2022/image/lib/image.module.mjs +4 -4
  102. package/esm2022/label/lib/label.component.mjs +3 -3
  103. package/esm2022/label/lib/label.module.mjs +4 -4
  104. package/esm2022/list/lib/list.component.mjs +5 -5
  105. package/esm2022/list/lib/list.module.mjs +4 -4
  106. package/esm2022/loading/lib/loading-spinner.component.mjs +3 -3
  107. package/esm2022/loading/lib/loading.component.mjs +3 -3
  108. package/esm2022/loading/lib/loading.directive.mjs +3 -3
  109. package/esm2022/loading/lib/loading.module.mjs +4 -4
  110. package/esm2022/loading/lib/loading.service.mjs +3 -3
  111. package/esm2022/menu/lib/menu-item/menu-item.component.mjs +5 -5
  112. package/esm2022/menu/lib/menu.component.mjs +5 -5
  113. package/esm2022/menu/lib/menu.module.mjs +4 -4
  114. package/esm2022/navbar/lib/navbar.component.mjs +3 -3
  115. package/esm2022/navbar/lib/navbar.module.mjs +4 -4
  116. package/esm2022/notification/lib/notification.component.mjs +9 -9
  117. package/esm2022/notification/lib/notification.module.mjs +4 -4
  118. package/esm2022/notification/lib/notification.service.mjs +3 -3
  119. package/esm2022/number-box/lib/number-box.component.mjs +9 -6
  120. package/esm2022/number-box/lib/number-box.module.mjs +4 -4
  121. package/esm2022/otp/lib/otp.component.mjs +3 -3
  122. package/esm2022/otp/lib/otp.module.mjs +4 -4
  123. package/esm2022/page/lib/base-page.class.mjs +4 -4
  124. package/esm2022/page/lib/page.component.mjs +3 -3
  125. package/esm2022/page/lib/page.module.mjs +4 -4
  126. package/esm2022/password-box/lib/password-box.component.mjs +7 -4
  127. package/esm2022/password-box/lib/password-box.module.mjs +4 -4
  128. package/esm2022/picker/lib/picker-column.directive.mjs +3 -3
  129. package/esm2022/picker/lib/picker.component.mjs +3 -3
  130. package/esm2022/picker/lib/picker.module.mjs +4 -4
  131. package/esm2022/popover/lib/popover.component.mjs +3 -3
  132. package/esm2022/popover/lib/popover.module.mjs +4 -4
  133. package/esm2022/popup/lib/popup.component.mjs +10 -5
  134. package/esm2022/popup/lib/popup.module.mjs +4 -4
  135. package/esm2022/popup/lib/popup.service.mjs +3 -3
  136. package/esm2022/progress-bar/lib/progress-bar.component.mjs +3 -3
  137. package/esm2022/progress-bar/lib/progress-bar.module.mjs +4 -4
  138. package/esm2022/radio/lib/radio.component.mjs +3 -3
  139. package/esm2022/radio/lib/radio.module.mjs +4 -4
  140. package/esm2022/range-slider/lib/range-slider.component.mjs +3 -3
  141. package/esm2022/range-slider/lib/range-slider.module.mjs +4 -4
  142. package/esm2022/result/lib/result.component.mjs +3 -3
  143. package/esm2022/result/lib/result.module.mjs +4 -4
  144. package/esm2022/routing-progress/lib/routing-progress.component.mjs +3 -3
  145. package/esm2022/routing-progress/lib/routing-progress.module.mjs +4 -4
  146. package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +3 -3
  147. package/esm2022/scheduler/lib/scheduler-week-view.component.mjs +3 -3
  148. package/esm2022/scheduler/lib/scheduler.component.mjs +3 -3
  149. package/esm2022/scheduler/lib/scheduler.module.mjs +4 -4
  150. package/esm2022/search-box/lib/search-box.component.mjs +3 -3
  151. package/esm2022/search-box/lib/search-box.module.mjs +4 -4
  152. package/esm2022/select-box/lib/select-box.component.mjs +48 -15
  153. package/esm2022/select-box/lib/select-box.module.mjs +4 -4
  154. package/esm2022/selection-list/lib/selection-list.component.mjs +3 -3
  155. package/esm2022/selection-list/lib/selection-list.module.mjs +4 -4
  156. package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +5 -5
  157. package/esm2022/side-menu/lib/side-menu.component.mjs +5 -5
  158. package/esm2022/side-menu/lib/side-menu.module.mjs +4 -4
  159. package/esm2022/skeleton/lib/skeleton.component.mjs +3 -3
  160. package/esm2022/skeleton/lib/skeleton.module.mjs +4 -4
  161. package/esm2022/switch/lib/switch-content.component.mjs +3 -3
  162. package/esm2022/switch/lib/switch.component.mjs +3 -3
  163. package/esm2022/switch/lib/switch.module.mjs +4 -4
  164. package/esm2022/tabs/lib/tab-content.directive.mjs +3 -3
  165. package/esm2022/tabs/lib/tab-item.component.mjs +3 -3
  166. package/esm2022/tabs/lib/tabs.component.mjs +4 -4
  167. package/esm2022/tabs/lib/tabs.module.mjs +4 -4
  168. package/esm2022/tag/lib/tag.component.mjs +3 -3
  169. package/esm2022/tag/lib/tag.module.mjs +4 -4
  170. package/esm2022/text-area/lib/text-area.component.mjs +12 -6
  171. package/esm2022/text-area/lib/text-area.module.mjs +4 -4
  172. package/esm2022/text-box/lib/mask-options.directive.mjs +3 -3
  173. package/esm2022/text-box/lib/text-box.component.mjs +7 -4
  174. package/esm2022/text-box/lib/text-box.module.mjs +4 -4
  175. package/esm2022/toast/lib/toast.component.mjs +9 -9
  176. package/esm2022/toast/lib/toast.module.mjs +4 -4
  177. package/esm2022/toast/lib/toast.service.mjs +3 -3
  178. package/esm2022/tooltip/lib/tooltip.component.mjs +3 -3
  179. package/esm2022/tooltip/lib/tooltip.directive.mjs +3 -3
  180. package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
  181. package/esm2022/uploader/index.mjs +3 -1
  182. package/esm2022/uploader/lib/uploader-browse-handle.directive.mjs +27 -0
  183. package/esm2022/uploader/lib/uploader-dialog-container.component.mjs +39 -0
  184. package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +4 -4
  185. package/esm2022/uploader/lib/uploader-list.component.mjs +11 -37
  186. package/esm2022/uploader/lib/uploader-zone.directive.mjs +7 -4
  187. package/esm2022/uploader/lib/uploader.models.mjs +43 -6
  188. package/esm2022/uploader/lib/uploader.module.mjs +27 -15
  189. package/esm2022/uploader/lib/uploader.service.mjs +24 -34
  190. package/fesm2022/acorex-components-action-sheet.mjs +10 -10
  191. package/fesm2022/acorex-components-alert.mjs +12 -12
  192. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  193. package/fesm2022/acorex-components-avatar.mjs +10 -10
  194. package/fesm2022/acorex-components-badge.mjs +7 -7
  195. package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
  196. package/fesm2022/acorex-components-button-group.mjs +8 -8
  197. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  198. package/fesm2022/acorex-components-button.mjs +17 -17
  199. package/fesm2022/acorex-components-button.mjs.map +1 -1
  200. package/fesm2022/acorex-components-calendar.mjs +13 -13
  201. package/fesm2022/acorex-components-check-box.mjs +7 -7
  202. package/fesm2022/acorex-components-chips.mjs +7 -7
  203. package/fesm2022/acorex-components-circular-progress.mjs +8 -8
  204. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  205. package/fesm2022/acorex-components-collapse.mjs +11 -11
  206. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  207. package/fesm2022/acorex-components-color-box.mjs +7 -7
  208. package/fesm2022/acorex-components-color-palette.mjs +26 -26
  209. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  210. package/fesm2022/acorex-components-common.mjs +75 -67
  211. package/fesm2022/acorex-components-common.mjs.map +1 -1
  212. package/fesm2022/acorex-components-data-pager.mjs +36 -36
  213. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  214. package/fesm2022/acorex-components-data-table.mjs +26 -26
  215. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  216. package/fesm2022/acorex-components-datetime-box.mjs +7 -7
  217. package/fesm2022/acorex-components-datetime-input.mjs +7 -7
  218. package/fesm2022/acorex-components-datetime-picker.mjs +7 -7
  219. package/fesm2022/acorex-components-decorators.mjs +21 -21
  220. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  221. package/fesm2022/acorex-components-dialog.mjs +10 -10
  222. package/fesm2022/acorex-components-drawer.mjs +10 -10
  223. package/fesm2022/acorex-components-dropdown.mjs +13 -13
  224. package/fesm2022/acorex-components-form.mjs +16 -16
  225. package/fesm2022/acorex-components-image.mjs +7 -7
  226. package/fesm2022/acorex-components-label.mjs +7 -7
  227. package/fesm2022/acorex-components-list.mjs +9 -9
  228. package/fesm2022/acorex-components-list.mjs.map +1 -1
  229. package/fesm2022/acorex-components-loading.mjs +16 -16
  230. package/fesm2022/acorex-components-menu.mjs +13 -13
  231. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  232. package/fesm2022/acorex-components-navbar.mjs +7 -7
  233. package/fesm2022/acorex-components-notification.mjs +15 -15
  234. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  235. package/fesm2022/acorex-components-number-box.mjs +12 -9
  236. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  237. package/fesm2022/acorex-components-otp.mjs +7 -7
  238. package/fesm2022/acorex-components-page.mjs +10 -10
  239. package/fesm2022/acorex-components-page.mjs.map +1 -1
  240. package/fesm2022/acorex-components-password-box.mjs +10 -7
  241. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  242. package/fesm2022/acorex-components-picker.mjs +10 -10
  243. package/fesm2022/acorex-components-popover.mjs +7 -7
  244. package/fesm2022/acorex-components-popup.mjs +16 -11
  245. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  246. package/fesm2022/acorex-components-progress-bar.mjs +7 -7
  247. package/fesm2022/acorex-components-radio.mjs +7 -7
  248. package/fesm2022/acorex-components-range-slider.mjs +7 -7
  249. package/fesm2022/acorex-components-result.mjs +7 -7
  250. package/fesm2022/acorex-components-routing-progress.mjs +7 -7
  251. package/fesm2022/acorex-components-scheduler.mjs +13 -13
  252. package/fesm2022/acorex-components-search-box.mjs +7 -7
  253. package/fesm2022/acorex-components-select-box.mjs +50 -17
  254. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  255. package/fesm2022/acorex-components-selection-list.mjs +7 -7
  256. package/fesm2022/acorex-components-side-menu.mjs +12 -12
  257. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  258. package/fesm2022/acorex-components-skeleton.mjs +7 -7
  259. package/fesm2022/acorex-components-switch.mjs +10 -10
  260. package/fesm2022/acorex-components-tabs.mjs +14 -14
  261. package/fesm2022/acorex-components-tag.mjs +7 -7
  262. package/fesm2022/acorex-components-text-area.mjs +15 -9
  263. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  264. package/fesm2022/acorex-components-text-box.mjs +13 -10
  265. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  266. package/fesm2022/acorex-components-toast.mjs +15 -15
  267. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  268. package/fesm2022/acorex-components-tooltip.mjs +10 -10
  269. package/fesm2022/acorex-components-uploader.mjs +179 -101
  270. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  271. package/number-box/lib/number-box.component.d.ts +1 -1
  272. package/package.json +1 -1
  273. package/page/lib/base-page.class.d.ts +1 -0
  274. package/password-box/lib/password-box.component.d.ts +1 -1
  275. package/select-box/lib/select-box.component.d.ts +10 -3
  276. package/side-menu/lib/side-menu.component.d.ts +1 -1
  277. package/text-area/lib/text-area.component.d.ts +2 -1
  278. package/text-box/lib/text-box.component.d.ts +1 -1
  279. package/uploader/index.d.ts +2 -0
  280. package/uploader/lib/uploader-browse-handle.directive.d.ts +11 -0
  281. package/uploader/lib/uploader-dialog-container.component.d.ts +9 -0
  282. package/uploader/lib/uploader-list.component.d.ts +2 -8
  283. package/uploader/lib/uploader-zone.directive.d.ts +1 -0
  284. package/uploader/lib/uploader.models.d.ts +9 -1
  285. package/uploader/lib/uploader.module.d.ts +14 -11
  286. package/uploader/lib/uploader.service.d.ts +4 -4
@@ -1,124 +1,114 @@
1
- import { MXBaseComponent } from '@acorex/components/common';
2
1
  import * as i0 from '@angular/core';
3
- import { inject, Component, ViewEncapsulation, signal, Injectable, Directive, Input, HostBinding, NgModule } from '@angular/core';
4
- import * as i1$1 from '@acorex/components/decorators';
5
- import { AXDecoratorModule } from '@acorex/components/decorators';
2
+ import { signal, inject, Injectable, Directive, Input, HostBinding, ElementRef, Component, ViewEncapsulation, NgModule } from '@angular/core';
6
3
  import { AXFileService, AXFileModule } from '@acorex/core/file';
7
4
  import * as i3 from '@acorex/core/translation';
8
5
  import { AXTranslator, AXTranslationModule } from '@acorex/core/translation';
9
- import { Dialog } from '@angular/cdk/dialog';
10
- import { GlobalPositionStrategy } from '@angular/cdk/overlay';
11
- import { BehaviorSubject } from 'rxjs';
6
+ import { BehaviorSubject, switchMap, map, interval } from 'rxjs';
7
+ import { sumBy } from 'lodash-es';
8
+ import { AXPopupService, AXPopupModule } from '@acorex/components/popup';
12
9
  import { AUTO_STYLE, style, state, animate, transition, trigger } from '@angular/animations';
13
- import * as i1 from '@angular/common';
10
+ import { AXClosbaleComponent, MXBaseComponent } from '@acorex/components/common';
11
+ import * as i2 from '@angular/common';
14
12
  import { CommonModule } from '@angular/common';
15
- import * as i2 from '@acorex/components/circular-progress';
13
+ import { AXBasePageComponent } from '@acorex/components/page';
14
+ import * as i1 from '@acorex/components/circular-progress';
16
15
  import { AXCircularProgressModule } from '@acorex/components/circular-progress';
17
16
  import * as i4 from '@acorex/core/format';
18
17
  import { AXFormatModule } from '@acorex/core/format';
18
+ import * as i1$1 from '@acorex/components/decorators';
19
+ import { AXDecoratorModule } from '@acorex/components/decorators';
19
20
  import { AXButtonModule } from '@acorex/components/button';
20
21
  import { AXProgressBarModule } from '@acorex/components/progress-bar';
21
- import { HttpClientModule } from '@angular/common/http';
22
22
  import { AXDateTimeModule } from '@acorex/core/dateTime';
23
-
24
- class AXUploaderListComponent extends MXBaseComponent {
25
- constructor() {
26
- super();
27
- this.leftTime = 5;
28
- this.isCollapsed = false;
29
- this.uploadService = inject(AXUploaderService);
30
- }
31
- upload(file) {
32
- //this.uploadService.upload(file)
33
- }
34
- toggle() {
35
- this.isCollapsed = !this.isCollapsed;
36
- }
37
- close() {
38
- this.uploadService.closeDialog();
39
- }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.5", type: AXUploaderListComponent, selector: "ax-uploader-list", usesInheritance: true, ngImport: i0, template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i\n class=\"ax-icon\"\n [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"\n ></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <div class=\"ax-uploader-progress-status\">\n <div>{{ leftTime }}min left</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n </div>\n <ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <i class=\"fa-regular fa-file fa-2xl\"></i>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\">{{ item.name }}</div>\n <small>{{ item.size | format: 'filesize' }}</small>\n <!-- <ax-progress-bar class=\"ax-w-full\" color=\"primary\" [progress]=\"item.progress()\"></ax-progress-bar> -->\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-check-circle-fill ax-state-success ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @case ('canceled') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-block ax-state-danger ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-cancel-fill ax-hide\" (click)=\"item.cancel()\"></i>\n </div>\n }\n }\n </li>\n }\n </ul>\n</div>\n", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-list .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-list .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer;font-size:1.5rem;line-height:2rem;line-height:1}ax-uploader-list .ax-uploader-list-header .ax-icon:hover{opacity:.75}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem}ax-uploader-list .ax-uploader-list-items li .ax-status{cursor:pointer;position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.5rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-info{color:rgba(var(--ax-color-info-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-success{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-danger{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:block!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:block}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none}.ax-uploader-list-pane .cdk-dialog-container:focus,.ax-uploader-list-pane .cdk-dialog-container:focus-visible,.ax-uploader-list-pane .cdk-dialog-container:focus-within{outline:2px solid transparent;outline-offset:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.AXCircularProgressComponent, selector: "ax-circular-progress", inputs: ["color", "progress", "stroke", "size"], outputs: ["ValueChange", "strokeChange", "sizeChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "trans" }, { kind: "pipe", type: i4.AXFormatPipe, name: "format" }], animations: [
42
- trigger('collapse', [
43
- state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
44
- state('true', style({ height: '0', visibility: 'hidden' })),
45
- transition('false => true', animate(150 + 'ms ease-in')),
46
- transition('true => false', animate(150 + 'ms ease-out')),
47
- ]),
48
- ], encapsulation: i0.ViewEncapsulation.None }); }
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderListComponent, decorators: [{
51
- type: Component,
52
- args: [{ selector: 'ax-uploader-list', encapsulation: ViewEncapsulation.None, animations: [
53
- trigger('collapse', [
54
- state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
55
- state('true', style({ height: '0', visibility: 'hidden' })),
56
- transition('false => true', animate(150 + 'ms ease-in')),
57
- transition('true => false', animate(150 + 'ms ease-out')),
58
- ]),
59
- ], template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i\n class=\"ax-icon\"\n [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"\n ></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <div class=\"ax-uploader-progress-status\">\n <div>{{ leftTime }}min left</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n </div>\n <ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <i class=\"fa-regular fa-file fa-2xl\"></i>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\">{{ item.name }}</div>\n <small>{{ item.size | format: 'filesize' }}</small>\n <!-- <ax-progress-bar class=\"ax-w-full\" color=\"primary\" [progress]=\"item.progress()\"></ax-progress-bar> -->\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-check-circle-fill ax-state-success ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @case ('canceled') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-block ax-state-danger ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-cancel-fill ax-hide\" (click)=\"item.cancel()\"></i>\n </div>\n }\n }\n </li>\n }\n </ul>\n</div>\n", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-list .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-list .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer;font-size:1.5rem;line-height:2rem;line-height:1}ax-uploader-list .ax-uploader-list-header .ax-icon:hover{opacity:.75}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem}ax-uploader-list .ax-uploader-list-items li .ax-status{cursor:pointer;position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.5rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-info{color:rgba(var(--ax-color-info-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-success{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-danger{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:block!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:block}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none}.ax-uploader-list-pane .cdk-dialog-container:focus,.ax-uploader-list-pane .cdk-dialog-container:focus-visible,.ax-uploader-list-pane .cdk-dialog-container:focus-within{outline:2px solid transparent;outline-offset:2px}\n"] }]
60
- }], ctorParameters: () => [] });
23
+ import { HttpClientModule } from '@angular/common/http';
61
24
 
62
25
  class AXUploadRequest {
63
26
  get name() {
64
27
  return this.file.name;
65
28
  }
29
+ get ext() {
30
+ const parts = this.name.split('.');
31
+ if (parts.length > 1) {
32
+ return parts[parts.length - 1];
33
+ }
34
+ else {
35
+ // No extension found
36
+ return '';
37
+ }
38
+ }
66
39
  get size() {
67
40
  return this.file.size;
68
41
  }
69
42
  constructor(file) {
70
43
  this.file = file;
71
44
  this.progress = signal(0);
45
+ this.estimateTime = signal(0);
72
46
  this.status = signal('new');
47
+ this.bytesTransferred = 0;
48
+ this.uploadSpeed = 1000000; // Simulated upload speed in bytes per interval (e.g., 50KB per interval)
49
+ this.interval = 1000;
50
+ this.intervalId = -1;
51
+ }
52
+ estimateTimeRemaining(bytesTransferred) {
53
+ const now = Date.now();
54
+ const elapsed = now - this.startTime; // Time in milliseconds
55
+ if (elapsed === 0) {
56
+ return null; // Avoid division by zero
57
+ }
58
+ const speed = bytesTransferred / elapsed; // Bytes per millisecond
59
+ const remainingBytes = this.size - bytesTransferred;
60
+ const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds
61
+ return estimatedTime; // Return the estimated time in milliseconds
73
62
  }
74
63
  async upload() {
64
+ this.startTime = Date.now();
75
65
  this.progress.set(0);
76
66
  this.status.set('inprogress');
77
- const inv = setInterval(() => {
78
- this.progress.update(value => value + 1);
79
- if (this.progress() >= 100) {
67
+ this.intervalId = setInterval(() => {
68
+ this.bytesTransferred += this.uploadSpeed;
69
+ if (this.bytesTransferred > this.size) {
70
+ this.bytesTransferred = this.size;
71
+ }
72
+ const progress = Math.floor(this.bytesTransferred / this.size * 100);
73
+ this.progress.set(progress);
74
+ this.estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));
75
+ if (this.bytesTransferred === this.size) {
76
+ clearInterval(this.intervalId);
80
77
  this.progress.set(100);
81
- clearInterval(inv);
82
78
  this.status.set('completed');
83
79
  }
84
- }, this.size / 5000);
80
+ }, this.interval);
85
81
  }
86
82
  cancel() {
87
83
  this.status.set('canceled');
84
+ this.bytesTransferred = 0;
85
+ this.estimateTime.set(0);
86
+ this.progress.set(0);
87
+ clearInterval(this.intervalId);
88
88
  return Promise.resolve();
89
89
  }
90
90
  }
91
91
 
92
92
  class AXUploaderService {
93
93
  constructor() {
94
- this.dialog = inject(Dialog);
94
+ this.popupService = inject(AXPopupService);
95
95
  this.fileService = inject(AXFileService);
96
96
  this.files$ = new BehaviorSubject([]);
97
+ this.totalEstimateTime = interval(500).pipe(switchMap(() => this.files$.asObservable()), map(f => sumBy(f, c => c.estimateTime())));
97
98
  }
98
99
  get files() {
99
100
  return this.files$;
100
101
  }
101
102
  showDialog() {
102
- const positionStrategy = new GlobalPositionStrategy();
103
- if (!this.dialogRef) {
104
- this.dialogRef = this.dialog.open(AXUploaderListComponent, {
105
- hasBackdrop: false,
106
- closeOnNavigation: false,
107
- width: '320px',
108
- maxWidth: 320,
109
- panelClass: [
110
- 'ax-uploader-list-pane',
111
- 'ax-animate-animated',
112
- 'ax-animate-fadeIn',
113
- 'ax-animate-faster',
114
- ],
115
- positionStrategy: positionStrategy.bottom().end('24px'),
103
+ Promise.resolve().then(function () { return uploaderList_component; }).then(c => {
104
+ this.popupService.open(c.AXUploaderListComponent, {
105
+ size: 'md',
106
+ title: "Upload File"
107
+ }).then(async () => {
108
+ await this.cancelAll();
109
+ this.clearAll();
116
110
  });
117
- }
118
- }
119
- closeDialog() {
120
- this.dialogRef?.close();
121
- this.dialogRef = undefined;
111
+ });
122
112
  }
123
113
  convertFileToRequest(file) {
124
114
  return new AXUploadRequest(file);
@@ -152,22 +142,23 @@ class AXUploaderService {
152
142
  }
153
143
  upload() {
154
144
  }
155
- cancelAll() {
156
- this.files$.value.forEach(c => c.cancel());
157
- this.closeDialog();
145
+ async cancelAll() {
146
+ await Promise.all(this.files$.value.filter(c => c.status() != 'completed').map(c => c.cancel()));
147
+ }
148
+ clearAll() {
149
+ this.files$.value
150
+ .filter(c => c.status() != 'inprogress')
151
+ .forEach(c => this.remove(c));
158
152
  }
159
153
  remove(item) {
160
154
  let currentValue = this.files$.value;
161
155
  currentValue = currentValue.filter(c => c != item);
162
156
  this.files$.next(currentValue);
163
- if (currentValue.length == 0) {
164
- this.closeDialog();
165
- }
166
157
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
168
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderService, providedIn: 'root' }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
159
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, providedIn: 'root' }); }
169
160
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderService, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, decorators: [{
171
162
  type: Injectable,
172
163
  args: [{ providedIn: 'root' }]
173
164
  }] });
@@ -224,13 +215,16 @@ class AXUploaderZoneDirective {
224
215
  removeZone() {
225
216
  this.overlayElement.remove();
226
217
  }
218
+ browser() {
219
+ this.uploadService.browse();
220
+ }
227
221
  get __hostClass() {
228
222
  return `ax-drop-zone`;
229
223
  }
230
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderZoneDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
231
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: { multiple: "multiple" }, host: { properties: { "class": "this.__hostClass" } }, ngImport: i0 }); }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderZoneDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
225
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: { multiple: "multiple" }, host: { properties: { "class": "this.__hostClass" } }, ngImport: i0 }); }
232
226
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderZoneDirective, decorators: [{
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderZoneDirective, decorators: [{
234
228
  type: Directive,
235
229
  args: [{
236
230
  selector: '[axUploaderZone]',
@@ -242,20 +236,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
242
236
  args: ['class']
243
237
  }] } });
244
238
 
239
+ class AXUploaderBrowseDirective {
240
+ constructor() {
241
+ this.uploaderZone = inject(AXUploaderZoneDirective);
242
+ this.elemenrRef = inject((ElementRef));
243
+ }
244
+ ngOnInit() {
245
+ this.elemenrRef.nativeElement.addEventListener('click', this.handleClick.bind(this));
246
+ }
247
+ ngOnDestroy() {
248
+ this.elemenrRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));
249
+ }
250
+ handleClick() {
251
+ this.uploaderZone.browser();
252
+ }
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderBrowseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
254
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderBrowseDirective, selector: "[axUploaderBrowseHandle]", ngImport: i0 }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderBrowseDirective, decorators: [{
257
+ type: Directive,
258
+ args: [{
259
+ selector: '[axUploaderBrowseHandle]',
260
+ }]
261
+ }] });
262
+
263
+ class AXUploaderListComponent extends AXBasePageComponent {
264
+ constructor() {
265
+ super(...arguments);
266
+ this.uploadService = inject(AXUploaderService);
267
+ }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: AXUploaderListComponent, selector: "ax-uploader-list", usesInheritance: true, ngImport: i0, template: "@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n</div>\n}\n<ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <div class=\"ax-file ax-bg-success-500\">\n <span>{{ item.ext }}</span>\n </div>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\" [title]=\"item.name\">{{ item.name }}</div>\n <div><span>{{ item.size | format: 'filesize' }}</span>\n @switch (item.status()) {\n @case ('inprogress') {\n / {{ item.estimateTime() | format: 'timeleft' }}\n }\n }\n </div>\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n </div>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">Canceled</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">Failed</span>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\"\n title=\"{{ 'common.cancel' | trans }}\"></i>\n </div>\n }\n }\n </li>\n }\n</ul>", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:12rem}ax-uploader-list .ax-uploader-list-items li .ax-status{position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.375rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon-close{cursor:pointer}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-canceled{color:rgba(var(--ax-color-neutral-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-failed{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-completed{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:flex!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:flex!important}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none!important}.ax-file{position:relative;display:flex;align-items:center;justify-content:center;width:1.5rem;aspect-ratio:.7;border-radius:.25rem;color:rgba(var(--ax-color-white))}.ax-file>*{position:absolute;bottom:.3rem;font-weight:700;font-size:.65rem;line-height:.65rem}.ax-file:before{content:\"\";position:absolute;top:0;right:0;border-width:0 12px 12px 0;border-color:rgba(var(--ax-color-surface)) rgba(var(--ax-color-surface)) rgba(var(--ax-color-black),.3) rgba(var(--ax-color-black),.3)}\n"], dependencies: [{ kind: "component", type: i1.AXCircularProgressComponent, selector: "ax-circular-progress", inputs: ["color", "progress", "stroke", "size"], outputs: ["ValueChange", "strokeChange", "sizeChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "trans" }, { kind: "pipe", type: i4.AXFormatPipe, name: "format" }], encapsulation: i0.ViewEncapsulation.None }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderListComponent, decorators: [{
272
+ type: Component,
273
+ args: [{ selector: 'ax-uploader-list', encapsulation: ViewEncapsulation.None, template: "@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n</div>\n}\n<ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <div class=\"ax-file ax-bg-success-500\">\n <span>{{ item.ext }}</span>\n </div>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\" [title]=\"item.name\">{{ item.name }}</div>\n <div><span>{{ item.size | format: 'filesize' }}</span>\n @switch (item.status()) {\n @case ('inprogress') {\n / {{ item.estimateTime() | format: 'timeleft' }}\n }\n }\n </div>\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n </div>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">Canceled</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">Failed</span>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\"\n title=\"{{ 'common.cancel' | trans }}\"></i>\n </div>\n }\n }\n </li>\n }\n</ul>", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:12rem}ax-uploader-list .ax-uploader-list-items li .ax-status{position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.375rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon-close{cursor:pointer}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-canceled{color:rgba(var(--ax-color-neutral-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-failed{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-completed{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:flex!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:flex!important}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none!important}.ax-file{position:relative;display:flex;align-items:center;justify-content:center;width:1.5rem;aspect-ratio:.7;border-radius:.25rem;color:rgba(var(--ax-color-white))}.ax-file>*{position:absolute;bottom:.3rem;font-weight:700;font-size:.65rem;line-height:.65rem}.ax-file:before{content:\"\";position:absolute;top:0;right:0;border-width:0 12px 12px 0;border-color:rgba(var(--ax-color-surface)) rgba(var(--ax-color-surface)) rgba(var(--ax-color-black),.3) rgba(var(--ax-color-black),.3)}\n"] }]
274
+ }] });
275
+
276
+ var uploaderList_component = /*#__PURE__*/Object.freeze({
277
+ __proto__: null,
278
+ AXUploaderListComponent: AXUploaderListComponent
279
+ });
280
+
281
+ class AXUploaderDialogContainerComponent {
282
+ constructor() {
283
+ this.parent = inject(AXClosbaleComponent);
284
+ this.isCollapsed = false;
285
+ }
286
+ close() {
287
+ this.parent.close();
288
+ }
289
+ toggle() {
290
+ this.isCollapsed = !this.isCollapsed;
291
+ }
292
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDialogContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
293
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderDialogContainerComponent, selector: "ax-uploader-dialog-container", ngImport: i0, template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i class=\"ax-icon\" [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <ax-uploader-list></ax-uploader-list>\n</div>", styles: ["ax-uploader-dialog-container{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-dialog-container .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon:hover{opacity:.75}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AXUploaderListComponent, selector: "ax-uploader-list" }], animations: [
294
+ trigger('collapse', [
295
+ state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
296
+ state('true', style({ height: '0', visibility: 'hidden' })),
297
+ transition('false => true', animate(150 + 'ms ease-in')),
298
+ transition('true => false', animate(150 + 'ms ease-out')),
299
+ ]),
300
+ ], encapsulation: i0.ViewEncapsulation.None }); }
301
+ }
302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDialogContainerComponent, decorators: [{
303
+ type: Component,
304
+ args: [{ selector: 'ax-uploader-dialog-container', encapsulation: ViewEncapsulation.None, animations: [
305
+ trigger('collapse', [
306
+ state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
307
+ state('true', style({ height: '0', visibility: 'hidden' })),
308
+ transition('false => true', animate(150 + 'ms ease-in')),
309
+ transition('true => false', animate(150 + 'ms ease-out')),
310
+ ]),
311
+ ], template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i class=\"ax-icon\" [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <ax-uploader-list></ax-uploader-list>\n</div>", styles: ["ax-uploader-dialog-container{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-dialog-container .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon:hover{opacity:.75}\n"] }]
312
+ }] });
313
+
245
314
  class AXUploaderDropZoneComponent extends MXBaseComponent {
246
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderDropZoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: AXUploaderDropZoneComponent, selector: "ax-uploader-drop-zone", usesInheritance: true, ngImport: i0, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: ["multiple"] }], encapsulation: i0.ViewEncapsulation.None }); }
315
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDropZoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
316
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderDropZoneComponent, selector: "ax-uploader-drop-zone", usesInheritance: true, ngImport: i0, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>", styles: [".ax-uploader-drop-zone-container{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;margin:1rem;padding:1rem;gap:1rem;border:2px dashed;border-color:rgba(var(--ax-color-border-default))}.ax-uploader-drop-zone-container:hover{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-50))}.ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description p{font-size:.875rem;line-height:1.25rem;color:#a3a3a3}\n"], dependencies: [{ kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: ["multiple"] }], encapsulation: i0.ViewEncapsulation.None }); }
248
317
  }
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderDropZoneComponent, decorators: [{
318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDropZoneComponent, decorators: [{
250
319
  type: Component,
251
- args: [{ selector: 'ax-uploader-drop-zone', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>" }]
320
+ args: [{ selector: 'ax-uploader-drop-zone', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>", styles: [".ax-uploader-drop-zone-container{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;margin:1rem;padding:1rem;gap:1rem;border:2px dashed;border-color:rgba(var(--ax-color-border-default))}.ax-uploader-drop-zone-container:hover{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-50))}.ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description p{font-size:.875rem;line-height:1.25rem;color:#a3a3a3}\n"] }]
252
321
  }] });
253
322
 
254
323
  class AXUploaderModule {
255
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
256
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderModule, declarations: [AXUploaderDropZoneComponent,
324
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
325
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, declarations: [AXUploaderDropZoneComponent,
257
326
  AXUploaderListComponent,
258
- AXUploaderZoneDirective], imports: [CommonModule,
327
+ AXUploaderZoneDirective,
328
+ AXUploaderBrowseDirective,
329
+ AXUploaderDialogContainerComponent], imports: [CommonModule,
259
330
  HttpClientModule,
260
331
  AXDecoratorModule,
261
332
  AXButtonModule,
@@ -264,10 +335,12 @@ class AXUploaderModule {
264
335
  AXFormatModule,
265
336
  AXFileModule,
266
337
  AXDateTimeModule,
267
- AXCircularProgressModule], exports: [AXUploaderDropZoneComponent,
268
- AXUploaderListComponent,
269
- AXUploaderZoneDirective] }); }
270
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderModule, providers: [AXUploaderService], imports: [CommonModule,
338
+ AXCircularProgressModule,
339
+ AXPopupModule], exports: [AXUploaderDropZoneComponent,
340
+ AXUploaderZoneDirective,
341
+ AXUploaderBrowseDirective,
342
+ AXUploaderDialogContainerComponent] }); }
343
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, providers: [AXUploaderService], imports: [CommonModule,
271
344
  HttpClientModule,
272
345
  AXDecoratorModule,
273
346
  AXButtonModule,
@@ -276,15 +349,18 @@ class AXUploaderModule {
276
349
  AXFormatModule,
277
350
  AXFileModule,
278
351
  AXDateTimeModule,
279
- AXCircularProgressModule] }); }
352
+ AXCircularProgressModule,
353
+ AXPopupModule] }); }
280
354
  }
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: AXUploaderModule, decorators: [{
355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, decorators: [{
282
356
  type: NgModule,
283
357
  args: [{
284
358
  declarations: [
285
359
  AXUploaderDropZoneComponent,
286
360
  AXUploaderListComponent,
287
361
  AXUploaderZoneDirective,
362
+ AXUploaderBrowseDirective,
363
+ AXUploaderDialogContainerComponent,
288
364
  ],
289
365
  imports: [
290
366
  CommonModule,
@@ -296,12 +372,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
296
372
  AXFormatModule,
297
373
  AXFileModule,
298
374
  AXDateTimeModule,
299
- AXCircularProgressModule
375
+ AXCircularProgressModule,
376
+ AXPopupModule,
300
377
  ],
301
378
  exports: [
302
379
  AXUploaderDropZoneComponent,
303
- AXUploaderListComponent,
304
380
  AXUploaderZoneDirective,
381
+ AXUploaderBrowseDirective,
382
+ AXUploaderDialogContainerComponent,
305
383
  ],
306
384
  providers: [AXUploaderService],
307
385
  }]
@@ -311,5 +389,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
311
389
  * Generated bundle index. Do not edit.
312
390
  */
313
391
 
314
- export { AXUploaderDropZoneComponent, AXUploaderListComponent, AXUploaderModule, AXUploaderService, AXUploaderZoneDirective };
392
+ export { AXUploaderBrowseDirective, AXUploaderDialogContainerComponent, AXUploaderDropZoneComponent, AXUploaderListComponent, AXUploaderModule, AXUploaderService, AXUploaderZoneDirective };
315
393
  //# sourceMappingURL=acorex-components-uploader.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-uploader.mjs","sources":["../../../../libs/components/uploader/src/lib/uploader-list.component.ts","../../../../libs/components/uploader/src/lib/uploader-list.component.html","../../../../libs/components/uploader/src/lib/uploader.models.ts","../../../../libs/components/uploader/src/lib/uploader.service.ts","../../../../libs/components/uploader/src/lib/uploader-zone.directive.ts","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.ts","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.html","../../../../libs/components/uploader/src/lib/uploader.module.ts","../../../../libs/components/uploader/src/acorex-components-uploader.ts"],"sourcesContent":["import { MXBaseComponent } from '@acorex/components/common';\nimport { AUTO_STYLE, animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\n\n@Component({\n selector: 'ax-uploader-list',\n templateUrl: './uploader-list.component.html',\n styleUrls: ['./uploader-list.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('collapse', [\n state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),\n state('true', style({ height: '0', visibility: 'hidden' })),\n transition('false => true', animate(150 + 'ms ease-in')),\n transition('true => false', animate(150 + 'ms ease-out')),\n ]),\n ],\n})\nexport class AXUploaderListComponent extends MXBaseComponent {\n leftTime = 5;\n isCollapsed = false;\n\n protected uploadService: AXUploaderService = inject(AXUploaderService);\n\n constructor() {\n super();\n }\n\n upload(file: File) {\n //this.uploadService.upload(file)\n }\n\n toggle() {\n this.isCollapsed = !this.isCollapsed;\n }\n\n close() {\n this.uploadService.closeDialog();\n }\n}\n","<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i\n class=\"ax-icon\"\n [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"\n ></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <div class=\"ax-uploader-progress-status\">\n <div>{{ leftTime }}min left</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n </div>\n <ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <i class=\"fa-regular fa-file fa-2xl\"></i>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\">{{ item.name }}</div>\n <small>{{ item.size | format: 'filesize' }}</small>\n <!-- <ax-progress-bar class=\"ax-w-full\" color=\"primary\" [progress]=\"item.progress()\"></ax-progress-bar> -->\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-check-circle-fill ax-state-success ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @case ('canceled') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-block ax-state-danger ax-show\"></i>\n <i\n class=\"ax-icon ax-icon-archive ax-state-info ax-hide\"\n (click)=\"uploadService.remove(item)\"\n ></i>\n </div>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-cancel-fill ax-hide\" (click)=\"item.cancel()\"></i>\n </div>\n }\n }\n </li>\n }\n </ul>\n</div>\n","import { signal } from \"@angular/core\";\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'faild' | 'canceled';\n\n\n\nexport class AXUploadRequest {\n\n get name(): string {\n return this.file.name;\n }\n\n get size(): number {\n return this.file.size;\n }\n\n readonly progress = signal(0);\n\n readonly status = signal<AXUploadStatus>('new');\n\n constructor(private file: File) {\n }\n\n\n\n public async upload(): Promise<void> {\n this.progress.set(0);\n this.status.set('inprogress');\n const inv = setInterval(() => {\n this.progress.update(value => value + 1);\n if (this.progress() >= 100) {\n this.progress.set(100);\n clearInterval(inv);\n this.status.set('completed');\n }\n }, this.size / 5000);\n }\n\n public cancel(): Promise<void> {\n this.status.set('canceled');\n return Promise.resolve();\n }\n}\n\n\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { GlobalPositionStrategy } from '@angular/cdk/overlay';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { AXUploaderListComponent } from './uploader-list.component';\nimport { AXUploadRequest } from './uploader.models';\nimport { AXFileService } from '@acorex/core/file';\n\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n\n private dialog: Dialog = inject(Dialog);\n private fileService: AXFileService = inject(AXFileService);\n private files$: BehaviorSubject<AXUploadRequest[]> = new BehaviorSubject<AXUploadRequest[]>([]);\n public get files(): BehaviorSubject<AXUploadRequest[]> {\n return this.files$;\n }\n\n private dialogRef: DialogRef | undefined;\n\n\n private showDialog() {\n const positionStrategy = new GlobalPositionStrategy();\n if (!this.dialogRef) {\n this.dialogRef = this.dialog.open(AXUploaderListComponent, {\n hasBackdrop: false,\n closeOnNavigation: false,\n width: '320px',\n maxWidth: 320,\n panelClass: [\n 'ax-uploader-list-pane',\n 'ax-animate-animated',\n 'ax-animate-fadeIn',\n 'ax-animate-faster',\n ],\n positionStrategy: positionStrategy.bottom().end('24px'),\n }) as DialogRef;\n }\n }\n\n closeDialog() {\n this.dialogRef?.close();\n this.dialogRef = undefined;\n }\n\n private convertFileToRequest(file: File): AXUploadRequest {\n return new AXUploadRequest(file);\n }\n\n private startUpload() {\n this.files.value.filter(c => c.status() == 'new').forEach(c => {\n c.upload();\n });\n }\n\n async browse(): Promise<AXUploadRequest[]> {\n try {\n const files = await this.fileService.choose();\n if (files.length) {\n return this.add(files);\n }\n return Promise.resolve([]);\n } catch (error) {\n console.error(error);\n return Promise.resolve([]);\n }\n }\n\n async add(files: FileList | File[]): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map(f => this.convertFileToRequest(f));\n const currentValue = this.files$.value;\n currentValue.push(...list);\n this.files$.next(currentValue);\n this.showDialog();\n this.startUpload();\n return Promise.resolve(list);\n }\n\n upload() {\n\n }\n\n cancelAll() {\n this.files$.value.forEach(c => c.cancel());\n this.closeDialog();\n }\n\n remove(item: AXUploadRequest) {\n let currentValue = this.files$.value;\n currentValue = currentValue.filter(c => c != item);\n this.files$.next(currentValue);\n if (currentValue.length == 0) {\n this.closeDialog();\n }\n }\n}\n","import { AXFileService } from '@acorex/core/file';\nimport { AXTranslator } from '@acorex/core/translation';\nimport { Directive, ElementRef, HostBinding, Input, OnDestroy, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\n@Directive({\n selector: '[axUploaderZone]',\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n @Input() multiple = true;\n private fileService: AXFileService = inject(AXFileService);\n private uploadService: AXUploaderService = inject(AXUploaderService);\n private element: HTMLElement;\n\n stateClass = 'ax-uploader-overlay-state';\n overlayElement: HTMLDivElement;\n\n init() {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n }\n\n constructor(private elementRef: ElementRef) {\n this.init();\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', this.removeZone.bind(this), true);\n }\n\n ngOnDestroy(): void {\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n private handleDragEnter(event: Event) {\n this.createZone();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n private handleOnDrop(event: DragEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.uploadService.add(event.dataTransfer?.files);\n this.removeZone();\n }\n\n private handleDragOver(event: Event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n private createZone() {\n this.overlayElement = document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state');\n\n const icon: HTMLSpanElement = document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = document.createElement('span');\n text.innerText = AXTranslator.get('uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n\n private removeZone() {\n this.overlayElement.remove();\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `ax-drop-zone`;\n }\n}\n","import { MXBaseComponent } from '@acorex/components/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-uploader-drop-zone',\n templateUrl: './uploader-drop-zone.component.html',\n styleUrls: ['./uploader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderDropZoneComponent extends MXBaseComponent {}\n","<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { HttpClientModule } from '@angular/common/http';\nimport { AXUploaderDropZoneComponent } from './uploader-drop-zone.component';\nimport { AXUploaderListComponent } from './uploader-list.component';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\nimport { AXUploaderService } from './uploader.service';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXDateTimeModule } from '@acorex/core/dateTime';\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\n\n@NgModule({\n declarations: [\n AXUploaderDropZoneComponent,\n AXUploaderListComponent,\n AXUploaderZoneDirective,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXProgressBarModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXCircularProgressModule\n ],\n exports: [\n AXUploaderDropZoneComponent,\n AXUploaderListComponent,\n AXUploaderZoneDirective,\n ],\n providers: [AXUploaderService],\n})\nexport class AXUploaderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AXUploaderZoneDirective"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-uploader.mjs","sources":["../../../../libs/components/uploader/src/lib/uploader.models.ts","../../../../libs/components/uploader/src/lib/uploader.service.ts","../../../../libs/components/uploader/src/lib/uploader-zone.directive.ts","../../../../libs/components/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../libs/components/uploader/src/lib/uploader-list.component.ts","../../../../libs/components/uploader/src/lib/uploader-list.component.html","../../../../libs/components/uploader/src/lib/uploader-dialog-container.component.ts","../../../../libs/components/uploader/src/lib/uploader-dialog-container.component.html","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.ts","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.html","../../../../libs/components/uploader/src/lib/uploader.module.ts","../../../../libs/components/uploader/src/acorex-components-uploader.ts"],"sourcesContent":["import { signal } from \"@angular/core\";\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\nexport class AXUploadRequest {\n\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n readonly progress = signal(0);\n readonly estimateTime = signal(0);\n\n\n readonly status = signal<AXUploadStatus>('new');\n\n private startTime: number;\n private bytesTransferred = 0;\n private uploadSpeed = 1000000; // Simulated upload speed in bytes per interval (e.g., 50KB per interval)\n private interval = 1000;\n private intervalId = -1;\n\n constructor(private file: File) {\n }\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = bytesTransferred / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this.progress.set(0);\n this.status.set('inprogress');\n\n this.intervalId = setInterval(() => {\n this.bytesTransferred += this.uploadSpeed;\n if (this.bytesTransferred > this.size) {\n this.bytesTransferred = this.size;\n }\n const progress = Math.floor(this.bytesTransferred / this.size * 100);\n this.progress.set(progress);\n\n this.estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n\n if (this.bytesTransferred === this.size) {\n clearInterval(this.intervalId);\n this.progress.set(100);\n this.status.set('completed');\n }\n }, this.interval);\n }\n\n public cancel(): Promise<void> {\n this.status.set('canceled');\n this.bytesTransferred = 0;\n this.estimateTime.set(0);\n this.progress.set(0);\n clearInterval(this.intervalId);\n return Promise.resolve();\n }\n}\n\n\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, interval, map, switchMap } from 'rxjs';\nimport { AXUploadRequest } from './uploader.models';\nimport { AXFileService } from '@acorex/core/file';\nimport { sumBy } from 'lodash-es';\nimport { AXPopupService } from '@acorex/components/popup';\n\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n\n private popupService = inject(AXPopupService);\n private fileService: AXFileService = inject(AXFileService);\n private files$: BehaviorSubject<AXUploadRequest[]> = new BehaviorSubject<AXUploadRequest[]>([]);\n public get files(): BehaviorSubject<AXUploadRequest[]> {\n return this.files$;\n }\n\n public readonly totalEstimateTime = interval(500).pipe(\n switchMap(() => this.files$.asObservable()),\n map(f => sumBy(f, c => c.estimateTime()))\n );\n\n private showDialog() {\n import('./uploader-list.component').then(c => {\n this.popupService.open(c.AXUploaderListComponent, {\n size: 'md',\n title: \"Upload File\"\n }).then(async () => {\n await this.cancelAll();\n this.clearAll();\n });\n })\n }\n\n private convertFileToRequest(file: File): AXUploadRequest {\n return new AXUploadRequest(file);\n }\n\n private startUpload() {\n this.files.value.filter(c => c.status() == 'new').forEach(c => {\n c.upload();\n });\n }\n\n async browse(): Promise<AXUploadRequest[]> {\n try {\n const files = await this.fileService.choose();\n if (files.length) {\n return this.add(files);\n }\n return Promise.resolve([]);\n } catch (error) {\n console.error(error);\n return Promise.resolve([]);\n }\n }\n\n async add(files: FileList | File[]): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map(f => this.convertFileToRequest(f));\n const currentValue = this.files$.value;\n currentValue.push(...list);\n this.files$.next(currentValue);\n this.showDialog();\n this.startUpload();\n return Promise.resolve(list);\n }\n\n upload() {\n\n }\n\n async cancelAll() {\n await Promise.all(this.files$.value.filter(c => c.status() != 'completed').map(c => c.cancel()));\n }\n\n clearAll() {\n this.files$.value\n .filter(c => c.status() != 'inprogress')\n .forEach(c => this.remove(c));\n }\n\n remove(item: AXUploadRequest) {\n let currentValue = this.files$.value;\n currentValue = currentValue.filter(c => c != item);\n this.files$.next(currentValue);\n }\n}\n","import { AXFileService } from '@acorex/core/file';\nimport { AXTranslator } from '@acorex/core/translation';\nimport { Directive, ElementRef, HostBinding, Input, OnDestroy, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\n@Directive({\n selector: '[axUploaderZone]',\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n @Input() multiple = true;\n private fileService: AXFileService = inject(AXFileService);\n private uploadService: AXUploaderService = inject(AXUploaderService);\n private element: HTMLElement;\n\n stateClass = 'ax-uploader-overlay-state';\n overlayElement: HTMLDivElement;\n\n init() {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n }\n\n constructor(private elementRef: ElementRef) {\n this.init();\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', this.removeZone.bind(this), true);\n }\n\n ngOnDestroy(): void {\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n private handleDragEnter(event: Event) {\n this.createZone();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n private handleOnDrop(event: DragEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.uploadService.add(event.dataTransfer?.files);\n this.removeZone();\n }\n\n private handleDragOver(event: Event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n private createZone() {\n this.overlayElement = document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state');\n\n const icon: HTMLSpanElement = document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = document.createElement('span');\n text.innerText = AXTranslator.get('uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n\n private removeZone() {\n this.overlayElement.remove();\n }\n\n public browser() {\n this.uploadService.browse()\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `ax-drop-zone`;\n }\n}\n\n\n\n","import { Directive, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n\n\n\n@Directive({\n selector: '[axUploaderBrowseHandle]',\n})\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private uploaderZone = inject(AXUploaderZoneDirective);\n private elemenrRef: ElementRef<HTMLDivElement> = inject((ElementRef<HTMLDivElement>));\n\n\n ngOnInit() {\n this.elemenrRef.nativeElement.addEventListener('click', this.handleClick.bind(this));\n }\n\n ngOnDestroy(): void {\n this.elemenrRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));\n }\n\n private handleClick() {\n this.uploaderZone.browser();\n }\n\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n selector: 'ax-uploader-list',\n templateUrl: './uploader-list.component.html',\n styleUrls: ['./uploader-list.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderListComponent extends AXBasePageComponent {\n protected uploadService: AXUploaderService = inject(AXUploaderService);\n}\n","@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n</div>\n}\n<ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <div class=\"ax-file ax-bg-success-500\">\n <span>{{ item.ext }}</span>\n </div>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\" [title]=\"item.name\">{{ item.name }}</div>\n <div><span>{{ item.size | format: 'filesize' }}</span>\n @switch (item.status()) {\n @case ('inprogress') {\n / {{ item.estimateTime() | format: 'timeleft' }}\n }\n }\n </div>\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n </div>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">Canceled</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">Failed</span>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\"\n title=\"{{ 'common.cancel' | trans }}\"></i>\n </div>\n }\n }\n </li>\n }\n</ul>","import { AUTO_STYLE, animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXClosbaleComponent } from '@acorex/components/common';\n\n@Component({\n selector: 'ax-uploader-dialog-container',\n templateUrl: './uploader-dialog-container.component.html',\n styleUrls: ['./uploader-dialog-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('collapse', [\n state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),\n state('true', style({ height: '0', visibility: 'hidden' })),\n transition('false => true', animate(150 + 'ms ease-in')),\n transition('true => false', animate(150 + 'ms ease-out')),\n ]),\n ],\n})\nexport class AXUploaderDialogContainerComponent {\n\n private parent = inject(AXClosbaleComponent)\n\n isCollapsed = false;\n\n close() {\n this.parent.close();\n }\n\n toggle() {\n this.isCollapsed = !this.isCollapsed;\n }\n}\n","<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i class=\"ax-icon\" [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <ax-uploader-list></ax-uploader-list>\n</div>","import { MXBaseComponent } from '@acorex/components/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-uploader-drop-zone',\n templateUrl: './uploader-drop-zone.component.html',\n styleUrls: ['./uploader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderDropZoneComponent extends MXBaseComponent {}\n","<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\nimport { AXPopupModule } from '@acorex/components/popup';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXDateTimeModule } from '@acorex/core/dateTime';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { HttpClientModule } from '@angular/common/http';\nimport { AXUploaderBrowseDirective } from './uploader-browse-handle.directive';\nimport { AXUploaderDialogContainerComponent } from './uploader-dialog-container.component';\nimport { AXUploaderDropZoneComponent } from './uploader-drop-zone.component';\nimport { AXUploaderListComponent } from './uploader-list.component';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\nimport { AXUploaderService } from './uploader.service';\n\n@NgModule({\n declarations: [\n AXUploaderDropZoneComponent,\n AXUploaderListComponent,\n AXUploaderZoneDirective,\n AXUploaderBrowseDirective,\n AXUploaderDialogContainerComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXProgressBarModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXCircularProgressModule,\n AXPopupModule,\n ],\n exports: [\n AXUploaderDropZoneComponent,\n AXUploaderZoneDirective,\n AXUploaderBrowseDirective,\n AXUploaderDialogContainerComponent,\n ],\n providers: [AXUploaderService],\n})\nexport class AXUploaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AXUploaderListComponent","i2.AXUploaderZoneDirective"],"mappings":"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"}