cax-design-system 2.7.12 → 2.8.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 (285) hide show
  1. package/README.md +46 -46
  2. package/esm2022/accordion/accordion.mjs +3 -3
  3. package/esm2022/autocomplete/autocomplete.mjs +3 -3
  4. package/esm2022/avatar/avatar.mjs +3 -3
  5. package/esm2022/avatargroup/avatargroup.mjs +3 -3
  6. package/esm2022/badge/badge.mjs +3 -3
  7. package/esm2022/breadcrumb/breadcrumb.mjs +3 -3
  8. package/esm2022/button/button.mjs +3 -3
  9. package/esm2022/calendar/calendar.mjs +3 -3
  10. package/esm2022/card/card.mjs +3 -3
  11. package/esm2022/cascadeselect/cascadeselect.mjs +5 -5
  12. package/esm2022/checkbox/checkbox.mjs +3 -3
  13. package/esm2022/chip/chip.mjs +3 -3
  14. package/esm2022/chips/chips.mjs +3 -3
  15. package/esm2022/colorpicker/colorpicker.mjs +3 -3
  16. package/esm2022/commentbox/commentbox.mjs +3 -3
  17. package/esm2022/confirmdialog/confirmdialog.mjs +3 -3
  18. package/esm2022/dialog/dialog.mjs +3 -3
  19. package/esm2022/divider/divider.mjs +3 -3
  20. package/esm2022/dropdown/dropdown-item.mjs +3 -3
  21. package/esm2022/dropdown/dropdown.mjs +3 -3
  22. package/esm2022/editor/editor.mjs +3 -3
  23. package/esm2022/image/image.mjs +3 -3
  24. package/esm2022/inputgroup/inputgroup.mjs +3 -3
  25. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +3 -3
  26. package/esm2022/inputmask/inputmask.mjs +3 -3
  27. package/esm2022/inputnumber/inputnumber.mjs +3 -3
  28. package/esm2022/inputtext/inputtext.component.mjs +3 -3
  29. package/esm2022/inputtextarea/inputtextarea.component.mjs +3 -3
  30. package/esm2022/logo/logo.mjs +3 -3
  31. package/esm2022/menu/menu.mjs +5 -5
  32. package/esm2022/messages/messages.mjs +3 -3
  33. package/esm2022/multiselect/multiselect.mjs +5 -5
  34. package/esm2022/navigation/navigation.mjs +3 -3
  35. package/esm2022/overlay/overlay.mjs +3 -3
  36. package/esm2022/overlaypanel/overlaypanel.mjs +3 -3
  37. package/esm2022/paginator/paginator.mjs +3 -3
  38. package/esm2022/progressbar/progressbar.mjs +3 -3
  39. package/esm2022/progressspinner/progressspinner.mjs +3 -3
  40. package/esm2022/radiobutton/radiobutton.mjs +3 -3
  41. package/esm2022/scroller/scroller.mjs +3 -3
  42. package/esm2022/selectbutton/selectbutton.mjs +3 -3
  43. package/esm2022/sidebar/sidebar.mjs +3 -3
  44. package/esm2022/skeleton/skeleton.mjs +3 -3
  45. package/esm2022/speeddial/speeddial.mjs +3 -3
  46. package/esm2022/splitbutton/splitbutton.mjs +3 -3
  47. package/esm2022/splitter/splitter.mjs +3 -3
  48. package/esm2022/steps/steps.mjs +3 -3
  49. package/esm2022/table/components/cell-editor/cell-editor.mjs +3 -3
  50. package/esm2022/table/components/column-filter/column-filter.mjs +3 -3
  51. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +3 -3
  52. package/esm2022/table/components/sort-icon/sort-icon.mjs +3 -3
  53. package/esm2022/table/components/table-body/table-body.mjs +3 -3
  54. package/esm2022/table/components/table-checkbox/table-checkbox.mjs +3 -3
  55. package/esm2022/table/components/table-header-checkbox/table-header-checkbox.mjs +3 -3
  56. package/esm2022/table/components/table-radio-button/table-radio-button.mjs +3 -3
  57. package/esm2022/table/table.mjs +3 -3
  58. package/esm2022/tableconfiguration/tableconfiguration.mjs +3 -3
  59. package/esm2022/tabview/tabview.mjs +5 -5
  60. package/esm2022/tag/tag.mjs +3 -3
  61. package/esm2022/timeline/timeline.mjs +3 -3
  62. package/esm2022/toast/toast.mjs +3 -3
  63. package/esm2022/toast/toastitem.mjs +3 -3
  64. package/esm2022/toggleswitch/toggleswitch.mjs +3 -3
  65. package/esm2022/tree/tree.mjs +5 -5
  66. package/esm2022/treeselect/treeselect.mjs +3 -3
  67. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +3 -3
  68. package/esm2022/upload/upload.component.mjs +3 -3
  69. package/fesm2022/cax-design-system-accordion.mjs +2 -2
  70. package/fesm2022/cax-design-system-accordion.mjs.map +1 -1
  71. package/fesm2022/cax-design-system-autocomplete.mjs +2 -2
  72. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -1
  73. package/fesm2022/cax-design-system-avatar.mjs +2 -2
  74. package/fesm2022/cax-design-system-avatar.mjs.map +1 -1
  75. package/fesm2022/cax-design-system-avatargroup.mjs +2 -2
  76. package/fesm2022/cax-design-system-avatargroup.mjs.map +1 -1
  77. package/fesm2022/cax-design-system-badge.mjs +2 -2
  78. package/fesm2022/cax-design-system-badge.mjs.map +1 -1
  79. package/fesm2022/cax-design-system-breadcrumb.mjs +2 -2
  80. package/fesm2022/cax-design-system-breadcrumb.mjs.map +1 -1
  81. package/fesm2022/cax-design-system-button.mjs +2 -2
  82. package/fesm2022/cax-design-system-button.mjs.map +1 -1
  83. package/fesm2022/cax-design-system-calendar.mjs +2 -2
  84. package/fesm2022/cax-design-system-calendar.mjs.map +1 -1
  85. package/fesm2022/cax-design-system-card.mjs +2 -2
  86. package/fesm2022/cax-design-system-card.mjs.map +1 -1
  87. package/fesm2022/cax-design-system-cascadeselect.mjs +4 -4
  88. package/fesm2022/cax-design-system-cascadeselect.mjs.map +1 -1
  89. package/fesm2022/cax-design-system-checkbox.mjs +2 -2
  90. package/fesm2022/cax-design-system-checkbox.mjs.map +1 -1
  91. package/fesm2022/cax-design-system-chip.mjs +2 -2
  92. package/fesm2022/cax-design-system-chip.mjs.map +1 -1
  93. package/fesm2022/cax-design-system-chips.mjs +2 -2
  94. package/fesm2022/cax-design-system-chips.mjs.map +1 -1
  95. package/fesm2022/cax-design-system-colorpicker.mjs +2 -2
  96. package/fesm2022/cax-design-system-colorpicker.mjs.map +1 -1
  97. package/fesm2022/cax-design-system-commentbox.mjs +2 -2
  98. package/fesm2022/cax-design-system-commentbox.mjs.map +1 -1
  99. package/fesm2022/cax-design-system-confirmdialog.mjs +2 -2
  100. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -1
  101. package/fesm2022/cax-design-system-dialog.mjs +2 -2
  102. package/fesm2022/cax-design-system-dialog.mjs.map +1 -1
  103. package/fesm2022/cax-design-system-divider.mjs +2 -2
  104. package/fesm2022/cax-design-system-divider.mjs.map +1 -1
  105. package/fesm2022/cax-design-system-dropdown.mjs +4 -4
  106. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
  107. package/fesm2022/cax-design-system-editor.mjs +2 -2
  108. package/fesm2022/cax-design-system-editor.mjs.map +1 -1
  109. package/fesm2022/cax-design-system-image.mjs +2 -2
  110. package/fesm2022/cax-design-system-image.mjs.map +1 -1
  111. package/fesm2022/cax-design-system-inputgroup.mjs +2 -2
  112. package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -1
  113. package/fesm2022/cax-design-system-inputgroupaddon.mjs +2 -2
  114. package/fesm2022/cax-design-system-inputgroupaddon.mjs.map +1 -1
  115. package/fesm2022/cax-design-system-inputmask.mjs +2 -2
  116. package/fesm2022/cax-design-system-inputmask.mjs.map +1 -1
  117. package/fesm2022/cax-design-system-inputnumber.mjs +2 -2
  118. package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -1
  119. package/fesm2022/cax-design-system-inputtext.mjs +2 -2
  120. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
  121. package/fesm2022/cax-design-system-inputtextarea.mjs +2 -2
  122. package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -1
  123. package/fesm2022/cax-design-system-logo.mjs +2 -2
  124. package/fesm2022/cax-design-system-logo.mjs.map +1 -1
  125. package/fesm2022/cax-design-system-menu.mjs +4 -4
  126. package/fesm2022/cax-design-system-menu.mjs.map +1 -1
  127. package/fesm2022/cax-design-system-messages.mjs +2 -2
  128. package/fesm2022/cax-design-system-messages.mjs.map +1 -1
  129. package/fesm2022/cax-design-system-multiselect.mjs +4 -4
  130. package/fesm2022/cax-design-system-multiselect.mjs.map +1 -1
  131. package/fesm2022/cax-design-system-navigation.mjs +2 -2
  132. package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
  133. package/fesm2022/cax-design-system-overlay.mjs +2 -2
  134. package/fesm2022/cax-design-system-overlay.mjs.map +1 -1
  135. package/fesm2022/cax-design-system-overlaypanel.mjs +2 -2
  136. package/fesm2022/cax-design-system-overlaypanel.mjs.map +1 -1
  137. package/fesm2022/cax-design-system-paginator.mjs +2 -2
  138. package/fesm2022/cax-design-system-paginator.mjs.map +1 -1
  139. package/fesm2022/cax-design-system-progressbar.mjs +2 -2
  140. package/fesm2022/cax-design-system-progressbar.mjs.map +1 -1
  141. package/fesm2022/cax-design-system-progressspinner.mjs +2 -2
  142. package/fesm2022/cax-design-system-progressspinner.mjs.map +1 -1
  143. package/fesm2022/cax-design-system-radiobutton.mjs +2 -2
  144. package/fesm2022/cax-design-system-radiobutton.mjs.map +1 -1
  145. package/fesm2022/cax-design-system-scroller.mjs +2 -2
  146. package/fesm2022/cax-design-system-scroller.mjs.map +1 -1
  147. package/fesm2022/cax-design-system-selectbutton.mjs +2 -2
  148. package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -1
  149. package/fesm2022/cax-design-system-sidebar.mjs +2 -2
  150. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -1
  151. package/fesm2022/cax-design-system-skeleton.mjs +2 -2
  152. package/fesm2022/cax-design-system-skeleton.mjs.map +1 -1
  153. package/fesm2022/cax-design-system-speeddial.mjs +2 -2
  154. package/fesm2022/cax-design-system-speeddial.mjs.map +1 -1
  155. package/fesm2022/cax-design-system-splitbutton.mjs +2 -2
  156. package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -1
  157. package/fesm2022/cax-design-system-splitter.mjs +2 -2
  158. package/fesm2022/cax-design-system-splitter.mjs.map +1 -1
  159. package/fesm2022/cax-design-system-steps.mjs +2 -2
  160. package/fesm2022/cax-design-system-steps.mjs.map +1 -1
  161. package/fesm2022/cax-design-system-table.mjs +18 -18
  162. package/fesm2022/cax-design-system-table.mjs.map +1 -1
  163. package/fesm2022/cax-design-system-tableconfiguration.mjs +2 -2
  164. package/fesm2022/cax-design-system-tableconfiguration.mjs.map +1 -1
  165. package/fesm2022/cax-design-system-tabview.mjs +4 -4
  166. package/fesm2022/cax-design-system-tabview.mjs.map +1 -1
  167. package/fesm2022/cax-design-system-tag.mjs +2 -2
  168. package/fesm2022/cax-design-system-tag.mjs.map +1 -1
  169. package/fesm2022/cax-design-system-timeline.mjs +2 -2
  170. package/fesm2022/cax-design-system-timeline.mjs.map +1 -1
  171. package/fesm2022/cax-design-system-toast.mjs +4 -4
  172. package/fesm2022/cax-design-system-toast.mjs.map +1 -1
  173. package/fesm2022/cax-design-system-toggleswitch.mjs +2 -2
  174. package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -1
  175. package/fesm2022/cax-design-system-tree.mjs +4 -4
  176. package/fesm2022/cax-design-system-tree.mjs.map +1 -1
  177. package/fesm2022/cax-design-system-treeselect.mjs +2 -2
  178. package/fesm2022/cax-design-system-treeselect.mjs.map +1 -1
  179. package/fesm2022/cax-design-system-tristatecheckbox.mjs +2 -2
  180. package/fesm2022/cax-design-system-tristatecheckbox.mjs.map +1 -1
  181. package/fesm2022/cax-design-system-upload.mjs +2 -2
  182. package/fesm2022/cax-design-system-upload.mjs.map +1 -1
  183. package/package.json +138 -138
  184. package/resources/cax.min.scss +1 -1
  185. package/resources/cax.scss +12518 -12488
  186. package/resources/components/accordion/accordion.scss +46 -46
  187. package/resources/components/autocomplete/autocomplete.scss +183 -183
  188. package/resources/components/avatar/avatar.scss +34 -34
  189. package/resources/components/avatargroup/avatargroup.scss +10 -10
  190. package/resources/components/badge/badge.scss +67 -67
  191. package/resources/components/blockui/blockui.css +26 -26
  192. package/resources/components/breadcrumb/breadcrumb.scss +33 -33
  193. package/resources/components/button/button.scss +163 -163
  194. package/resources/components/calendar/calendar.scss +235 -235
  195. package/resources/components/card/card.scss +50 -50
  196. package/resources/components/carousel/carousel.css +71 -71
  197. package/resources/components/cascadeselect/cascadeselect.scss +105 -105
  198. package/resources/components/checkbox/checkbox.scss +30 -30
  199. package/resources/components/chip/chip.scss +6 -6
  200. package/resources/components/chips/chips.scss +205 -205
  201. package/resources/components/colorpicker/colorpicker-images.scss +6 -6
  202. package/resources/components/colorpicker/colorpicker.scss +82 -82
  203. package/resources/components/commentbox/commentbox.scss +611 -611
  204. package/resources/components/common/common.scss +183 -183
  205. package/resources/components/confirmpopup/confirmpopup.css +53 -53
  206. package/resources/components/contextmenu/contextmenu.css +42 -42
  207. package/resources/components/dataview/dataview.css +13 -13
  208. package/resources/components/dialog/dialog.scss +171 -171
  209. package/resources/components/divider/divider.scss +86 -86
  210. package/resources/components/dock/dock.css +107 -107
  211. package/resources/components/dropdown/dropdown.scss +94 -94
  212. package/resources/components/editor/editor.scss +3 -3
  213. package/resources/components/fieldset/fieldset.css +30 -30
  214. package/resources/components/fileupload/fileupload.css +47 -47
  215. package/resources/components/galleria/galleria.css +281 -281
  216. package/resources/components/iconfield/iconfield.css +5 -5
  217. package/resources/components/image/image.scss +92 -92
  218. package/resources/components/inplace/inplace.css +19 -19
  219. package/resources/components/inputicon/inputicon.css +6 -6
  220. package/resources/components/inputmask/inputmask.scss +12 -12
  221. package/resources/components/inputnumber/inputnumber.scss +109 -109
  222. package/resources/components/inputotp/inputotp.css +2 -2
  223. package/resources/components/inputswitch/inputswitch.css +23 -23
  224. package/resources/components/inputtext/inputtext.scss +145 -145
  225. package/resources/components/inputtextarea/inputtextarea.scss +10 -10
  226. package/resources/components/knob/knob.css +20 -20
  227. package/resources/components/listbox/listbox.css +40 -40
  228. package/resources/components/megamenu/megamenu.css +108 -108
  229. package/resources/components/menu/menu.scss +30 -30
  230. package/resources/components/menubar/menubar.css +81 -81
  231. package/resources/components/message/message.css +17 -17
  232. package/resources/components/messages/messages.scss +55 -55
  233. package/resources/components/multiselect/multiselect.scss +132 -132
  234. package/resources/components/navigation/navigation.scss +196 -196
  235. package/resources/components/orderlist/orderlist.css +78 -78
  236. package/resources/components/organizationchart/organizationchart.css +62 -62
  237. package/resources/components/overlay/overlay.scss +80 -80
  238. package/resources/components/overlaypanel/overlaypanel.scss +66 -66
  239. package/resources/components/paginator/paginator.scss +41 -41
  240. package/resources/components/panel/panel.css +29 -29
  241. package/resources/components/panelmenu/panelmenu.css +45 -45
  242. package/resources/components/password/password.css +54 -54
  243. package/resources/components/picklist/picklist.css +60 -60
  244. package/resources/components/progressbar/progressbar.scss +107 -107
  245. package/resources/components/progressspinner/progressspinner.scss +94 -94
  246. package/resources/components/radiobutton/radiobutton.scss +34 -34
  247. package/resources/components/rating/rating.css +15 -15
  248. package/resources/components/ripple/ripple.scss +29 -29
  249. package/resources/components/scroller/scroller.scss +58 -58
  250. package/resources/components/scrollpanel/scrollpanel.css +50 -50
  251. package/resources/components/scrolltop/scrolltop.css +18 -18
  252. package/resources/components/sidebar/sidebar.scss +117 -117
  253. package/resources/components/skeleton/skeleton.scss +24 -24
  254. package/resources/components/slidemenu/slidemenu.css +100 -100
  255. package/resources/components/slider/slider.css +41 -41
  256. package/resources/components/speeddial/speeddial.scss +122 -122
  257. package/resources/components/spinner/spinner.css +63 -63
  258. package/resources/components/splitbutton/splitbutton.scss +53 -53
  259. package/resources/components/splitter/splitter.scss +73 -73
  260. package/resources/components/stepper/stepper.css +9 -9
  261. package/resources/components/steps/steps.scss +50 -50
  262. package/resources/components/table/table.scss +451 -451
  263. package/resources/components/tableconfiguration/tableconfiguration.scss +115 -115
  264. package/resources/components/tabmenu/tabmenu.css +80 -80
  265. package/resources/components/tabview/tabview.scss +198 -198
  266. package/resources/components/tag/tag.scss +23 -23
  267. package/resources/components/terminal/terminal.css +24 -24
  268. package/resources/components/tieredmenu/tieredmenu.scss +55 -55
  269. package/resources/components/timeline/timeline.scss +128 -128
  270. package/resources/components/toast/toast.scss +87 -87
  271. package/resources/components/toggleswitch/toggleswitch.scss +36 -36
  272. package/resources/components/toolbar/toolbar.css +19 -19
  273. package/resources/components/tooltip/tooltip.scss +124 -124
  274. package/resources/components/tree/tree.scss +154 -154
  275. package/resources/components/treeselect/treeselect.scss +114 -114
  276. package/resources/components/treetable/treetable.css +205 -205
  277. package/resources/components/upload/upload.component.scss +145 -145
  278. package/resources/logo/dataX-dark.svg +12 -12
  279. package/resources/logo/dataX-icon-dark.svg +5 -5
  280. package/resources/logo/dataX-icon.svg +5 -5
  281. package/resources/logo/dataX.svg +12 -12
  282. package/resources/styles/colors.scss +397 -397
  283. package/resources/styles/shadow-blur.scss +21 -21
  284. package/resources/styles/space-radius-border.scss +49 -49
  285. package/resources/styles/typography.scss +116 -135
@@ -1 +1 @@
1
- {"version":3,"file":"cax-design-system-tristatecheckbox.mjs","sources":["../../src/app/components/tristatecheckbox/tristatecheckbox.ts","../../src/app/components/tristatecheckbox/tristatecheckbox.html","../../src/app/components/tristatecheckbox/tristatecheckbox.module.ts","../../src/app/components/tristatecheckbox/cax-design-system-tristatecheckbox.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, Output, QueryList, TemplateRef, ViewEncapsulation, booleanAttribute, forwardRef, numberAttribute } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { caxConfig, CaxTemplate, SharedModule } from 'cax-design-system/api';\nimport { CheckIcon } from 'cax-design-system/icons/check';\nimport { TimesIcon } from 'cax-design-system/icons/times';\nimport { Nullable } from 'cax-design-system/ts-helpers';\nimport { AutoFocusModule } from 'cax-design-system/autofocus';\nimport { TriStateCheckboxChangeEvent } from './tristatecheckbox.interface';\n\nexport const TRISTATECHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TriStateCheckbox),\n multi: true\n};\n/**\n * TriStateCheckbox is used to select either 'true', 'false' or 'null' as the value.\n * @group Components\n */\n@Component({\n selector: 'cax-triStateCheckbox',\n templateUrl: './tristatecheckbox.html',\n providers: [TRISTATECHECKBOX_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [CommonModule, SharedModule, AutoFocusModule, CheckIcon, TimesIcon],\n host: {\n class: 'cax-element'\n }\n})\nexport class TriStateCheckbox implements ControlValueAccessor {\n constructor(\n private cd: ChangeDetectorRef,\n public config: caxConfig\n ) {}\n /**\n * When present, it specifies that the element should be disabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\n /**\n * Name of the component.\n * @group Props\n */\n @Input() name: string | undefined;\n /**\n * Defines a string that labels the input for accessibility.\n * @group Props\n */\n @Input() ariaLabel: string | undefined;\n /**\n * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\n * @group Props\n */\n @Input() ariaLabelledBy: string | undefined;\n /**\n * Specifies the input variant of the component.\n * @group Props\n */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n /**\n * Index of the element in tabbing order.\n * @group Props\n */\n @Input({ transform: numberAttribute }) tabindex: number | undefined;\n /**\n * Identifier of the focus input to match a label defined for the component.\n * @group Props\n */\n @Input() inputId: string | undefined;\n /**\n * Inline style of the component.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the component.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Label of the checkbox.\n * @group Props\n */\n @Input() label: string | undefined;\n /**\n * When present, it specifies that the component cannot be edited.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) readonly: boolean | undefined;\n /**\n * Specifies the icon for checkbox true value.\n * @group Props\n */\n @Input() checkboxTrueIcon: string | undefined;\n /**\n * Specifies the icon for checkbox false value.\n * @group Props\n */\n @Input() checkboxFalseIcon: string | undefined;\n /**\n * When present, it specifies that the component should automatically get focus on load.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autofocus: boolean | undefined;\n /**\n * Callback to invoke on value change.\n * @param {TriStateCheckboxChangeEvent} event - Custom change event.\n * @group Emits\n */\n @Output() onChange: EventEmitter<TriStateCheckboxChangeEvent> = new EventEmitter<TriStateCheckboxChangeEvent>();\n\n @ContentChildren(CaxTemplate) templates!: QueryList<CaxTemplate>;\n\n checkIconTemplate: Nullable<TemplateRef<any>>;\n\n uncheckIconTemplate: Nullable<TemplateRef<any>>;\n\n focused: Nullable<boolean>;\n\n value: Nullable<boolean>;\n\n onModelChange: Function = () => {};\n\n onModelTouched: Function = () => {};\n\n onClick(event: Event, input: HTMLInputElement) {\n if (!this.disabled && !this.readonly) {\n this.toggle(event);\n this.focused = true;\n input.focus();\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.toggle(event);\n event.preventDefault();\n }\n }\n\n toggle(event: Event) {\n if (this.value == null || this.value == undefined) this.value = true;\n else if (this.value == true) this.value = false;\n else if (this.value == false) this.value = null;\n\n this.onModelChange(this.value);\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'checkicon':\n this.checkIconTemplate = item.template;\n break;\n\n case 'uncheckicon':\n this.uncheckIconTemplate = item.template;\n break;\n }\n });\n }\n\n onFocus() {\n this.focused = true;\n }\n\n onBlur() {\n this.focused = false;\n this.onModelTouched();\n }\n\n registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cd.markForCheck();\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.cd.markForCheck();\n }\n}\n","<div\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{ 'cax-checkbox cax-component': true, 'cax-checkbox-disabled': disabled, 'cax-checkbox-focused': focused, 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\r\n [class]=\"styleClass\"\r\n (click)=\"onClick($event, input)\"\r\n [attr.data-pc-name]=\"'tristatecheckbox'\"\r\n [attr.data-pc-section]=\"'root'\"\r\n>\r\n <div class=\"cax-hidden-accessible\">\r\n <input\r\n #input\r\n [attr.id]=\"inputId\"\r\n type=\"checkbox\"\r\n [name]=\"name\"\r\n [attr.tabindex]=\"tabindex\"\r\n [readonly]=\"readonly\"\r\n [disabled]=\"disabled\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n inputmode=\"none\"\r\n [attr.data-pc-section]=\"'hiddenInput'\"\r\n pAutoFocus\r\n [autofocus]=\"autofocus\"\r\n />\r\n </div>\r\n <div class=\"cax-checkbox-box\" role=\"checkbox\" [attr.aria-checked]=\"value === true\" [ngClass]=\"{ 'cax-highlight': value != null, 'cax-disabled': disabled, 'cax-focus': focused }\">\r\n <ng-container *ngIf=\"value === true\">\r\n <span *ngIf=\"checkboxTrueIcon\" [ngClass]=\"checkboxTrueIcon\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'checkIcon'\"></span>\r\n <ng-container *ngIf=\"!checkboxTrueIcon\">\r\n <CheckIcon [styleClass]=\"'cax-checkbox-icon'\" *ngIf=\"!checkIconTemplate\" [attr.data-pc-section]=\"'checkIcon'\" />\r\n <span *ngIf=\"checkIconTemplate\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'checkIcon'\">\r\n <ng-template *ngTemplateOutlet=\"checkIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"value === false\">\r\n <span *ngIf=\"checkboxFalseIcon\" [ngClass]=\"checkboxFalseIcon\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'uncheckIcon'\"></span>\r\n <ng-container *ngIf=\"!checkboxFalseIcon\">\r\n <TimesIcon [styleClass]=\"'cax-checkbox-icon'\" *ngIf=\"!uncheckIconTemplate\" [attr.data-pc-section]=\"'uncheckIcon'\" />\r\n <span class=\"cax-checkbox-icon\" *ngIf=\"uncheckIconTemplate\" [attr.data-pc-section]=\"'uncheckIcon'\">\r\n <ng-template *ngTemplateOutlet=\"uncheckIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<label class=\"cax-checkbox-label\" (click)=\"onClick($event, input)\" [ngClass]=\"{ 'cax-checkbox-label-active': value != null, 'cax-disabled': disabled, 'cax-checkbox-label-focus': focused }\" *ngIf=\"label\" [attr.for]=\"inputId\">{{ label }}</label>\r\n","import { NgModule } from '@angular/core';\nimport { SharedModule } from 'cax-design-system/api';\nimport { TriStateCheckbox } from './tristatecheckbox';\n\n@NgModule({\n imports: [TriStateCheckbox, SharedModule],\n exports: [TriStateCheckbox, SharedModule]\n})\nexport class TriStateCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cax-design-system-tristatecheckbox.mjs","sources":["../../src/app/components/tristatecheckbox/tristatecheckbox.ts","../../src/app/components/tristatecheckbox/tristatecheckbox.html","../../src/app/components/tristatecheckbox/tristatecheckbox.module.ts","../../src/app/components/tristatecheckbox/cax-design-system-tristatecheckbox.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, Output, QueryList, TemplateRef, ViewEncapsulation, booleanAttribute, forwardRef, numberAttribute } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { caxConfig, CaxTemplate, SharedModule } from 'cax-design-system/api';\nimport { CheckIcon } from 'cax-design-system/icons/check';\nimport { TimesIcon } from 'cax-design-system/icons/times';\nimport { Nullable } from 'cax-design-system/ts-helpers';\nimport { AutoFocusModule } from 'cax-design-system/autofocus';\nimport { TriStateCheckboxChangeEvent } from './tristatecheckbox.interface';\n\nexport const TRISTATECHECKBOX_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TriStateCheckbox),\n multi: true\n};\n/**\n * TriStateCheckbox is used to select either 'true', 'false' or 'null' as the value.\n * @group Components\n */\n@Component({\n selector: 'cax-triStateCheckbox',\n templateUrl: './tristatecheckbox.html',\n providers: [TRISTATECHECKBOX_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [CommonModule, SharedModule, AutoFocusModule, CheckIcon, TimesIcon],\n host: {\n class: 'cax-element'\n }\n})\nexport class TriStateCheckbox implements ControlValueAccessor {\n constructor(\n private cd: ChangeDetectorRef,\n public config: caxConfig\n ) {}\n /**\n * When present, it specifies that the element should be disabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\n /**\n * Name of the component.\n * @group Props\n */\n @Input() name: string | undefined;\n /**\n * Defines a string that labels the input for accessibility.\n * @group Props\n */\n @Input() ariaLabel: string | undefined;\n /**\n * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\n * @group Props\n */\n @Input() ariaLabelledBy: string | undefined;\n /**\n * Specifies the input variant of the component.\n * @group Props\n */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n /**\n * Index of the element in tabbing order.\n * @group Props\n */\n @Input({ transform: numberAttribute }) tabindex: number | undefined;\n /**\n * Identifier of the focus input to match a label defined for the component.\n * @group Props\n */\n @Input() inputId: string | undefined;\n /**\n * Inline style of the component.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the component.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Label of the checkbox.\n * @group Props\n */\n @Input() label: string | undefined;\n /**\n * When present, it specifies that the component cannot be edited.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) readonly: boolean | undefined;\n /**\n * Specifies the icon for checkbox true value.\n * @group Props\n */\n @Input() checkboxTrueIcon: string | undefined;\n /**\n * Specifies the icon for checkbox false value.\n * @group Props\n */\n @Input() checkboxFalseIcon: string | undefined;\n /**\n * When present, it specifies that the component should automatically get focus on load.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autofocus: boolean | undefined;\n /**\n * Callback to invoke on value change.\n * @param {TriStateCheckboxChangeEvent} event - Custom change event.\n * @group Emits\n */\n @Output() onChange: EventEmitter<TriStateCheckboxChangeEvent> = new EventEmitter<TriStateCheckboxChangeEvent>();\n\n @ContentChildren(CaxTemplate) templates!: QueryList<CaxTemplate>;\n\n checkIconTemplate: Nullable<TemplateRef<any>>;\n\n uncheckIconTemplate: Nullable<TemplateRef<any>>;\n\n focused: Nullable<boolean>;\n\n value: Nullable<boolean>;\n\n onModelChange: Function = () => {};\n\n onModelTouched: Function = () => {};\n\n onClick(event: Event, input: HTMLInputElement) {\n if (!this.disabled && !this.readonly) {\n this.toggle(event);\n this.focused = true;\n input.focus();\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.toggle(event);\n event.preventDefault();\n }\n }\n\n toggle(event: Event) {\n if (this.value == null || this.value == undefined) this.value = true;\n else if (this.value == true) this.value = false;\n else if (this.value == false) this.value = null;\n\n this.onModelChange(this.value);\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'checkicon':\n this.checkIconTemplate = item.template;\n break;\n\n case 'uncheckicon':\n this.uncheckIconTemplate = item.template;\n break;\n }\n });\n }\n\n onFocus() {\n this.focused = true;\n }\n\n onBlur() {\n this.focused = false;\n this.onModelTouched();\n }\n\n registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cd.markForCheck();\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.cd.markForCheck();\n }\n}\n","<div\n [ngStyle]=\"style\"\n [ngClass]=\"{ 'cax-checkbox cax-component': true, 'cax-checkbox-disabled': disabled, 'cax-checkbox-focused': focused, 'cax-variant-filled': variant === 'filled' || config.inputStyle() === 'filled' }\"\n [class]=\"styleClass\"\n (click)=\"onClick($event, input)\"\n [attr.data-pc-name]=\"'tristatecheckbox'\"\n [attr.data-pc-section]=\"'root'\"\n>\n <div class=\"cax-hidden-accessible\">\n <input\n #input\n [attr.id]=\"inputId\"\n type=\"checkbox\"\n [name]=\"name\"\n [attr.tabindex]=\"tabindex\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n inputmode=\"none\"\n [attr.data-pc-section]=\"'hiddenInput'\"\n pAutoFocus\n [autofocus]=\"autofocus\"\n />\n </div>\n <div class=\"cax-checkbox-box\" role=\"checkbox\" [attr.aria-checked]=\"value === true\" [ngClass]=\"{ 'cax-highlight': value != null, 'cax-disabled': disabled, 'cax-focus': focused }\">\n <ng-container *ngIf=\"value === true\">\n <span *ngIf=\"checkboxTrueIcon\" [ngClass]=\"checkboxTrueIcon\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'checkIcon'\"></span>\n <ng-container *ngIf=\"!checkboxTrueIcon\">\n <CheckIcon [styleClass]=\"'cax-checkbox-icon'\" *ngIf=\"!checkIconTemplate\" [attr.data-pc-section]=\"'checkIcon'\" />\n <span *ngIf=\"checkIconTemplate\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'checkIcon'\">\n <ng-template *ngTemplateOutlet=\"checkIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"value === false\">\n <span *ngIf=\"checkboxFalseIcon\" [ngClass]=\"checkboxFalseIcon\" class=\"cax-checkbox-icon\" [attr.data-pc-section]=\"'uncheckIcon'\"></span>\n <ng-container *ngIf=\"!checkboxFalseIcon\">\n <TimesIcon [styleClass]=\"'cax-checkbox-icon'\" *ngIf=\"!uncheckIconTemplate\" [attr.data-pc-section]=\"'uncheckIcon'\" />\n <span class=\"cax-checkbox-icon\" *ngIf=\"uncheckIconTemplate\" [attr.data-pc-section]=\"'uncheckIcon'\">\n <ng-template *ngTemplateOutlet=\"uncheckIconTemplate\"></ng-template>\n </span>\n </ng-container>\n </ng-container>\n </div>\n</div>\n<label class=\"cax-checkbox-label\" (click)=\"onClick($event, input)\" [ngClass]=\"{ 'cax-checkbox-label-active': value != null, 'cax-disabled': disabled, 'cax-checkbox-label-focus': focused }\" *ngIf=\"label\" [attr.for]=\"inputId\">{{ label }}</label>\n","import { NgModule } from '@angular/core';\nimport { SharedModule } from 'cax-design-system/api';\nimport { TriStateCheckbox } from './tristatecheckbox';\n\n@NgModule({\n imports: [TriStateCheckbox, SharedModule],\n exports: [TriStateCheckbox, SharedModule]\n})\nexport class TriStateCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -316,13 +316,13 @@ class UploadComponent {
316
316
  return activeFilesCount > 0 ? Math.round((totalProgress / (activeFilesCount * 100)) * 100) : 0;
317
317
  }
318
318
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
319
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UploadComponent, selector: "cax-upload", inputs: { invalid: "invalid", style: "style", maxFileSize: "maxFileSize", inputFiles: "inputFiles", uploadString: "uploadString", errorText: "errorText", allowMultiple: "allowMultiple", componentId: "componentId", allowedFileTypes: "allowedFileTypes" }, outputs: { fileSelected: "fileSelected", filesQueued: "filesQueued", uploadStarted: "uploadStarted", uploadCompleted: "uploadCompleted", uploadCanceled: "uploadCanceled", uploadError: "uploadError", fileRemoved: "fileRemoved", allFilesRemoved: "allFilesRemoved", uploadStatusChange: "uploadStatusChange" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, classAttribute: "cax-element" }, ngImport: i0, template: "<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n <input\r\n type=\"file\"\r\n id=\"fileInput-{{uniqueId}}\"\r\n style=\"display:none\"\r\n [multiple]=\"allowMultiple\"\r\n [accept]=\"acceptFileTypes\"\r\n (change)=\"handleFileInput($event)\"\r\n />\r\n\r\n <!-- Default Upload State -->\r\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\r\n <div class=\"cax-upload-options\" >\r\n <p class=\"hint-text\">\r\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\r\n </p>\r\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <!-- Uploading State -->\r\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\r\n <div class=\"status-container\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'lg'\"\r\n [animationDuration]=\"'2s'\"\r\n ></cax-progressSpinner>\r\n <p >{{ uploadingProgressText }}</p>\r\n <cax-button\r\n [label]=\"'Cancel'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n <!-- Complete State -->\r\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\r\n <div class=\"status-container\">\r\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\r\n <p>{{uploadString}}</p>\r\n <cax-button\r\n [label]=\"'Remove'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\r\n</div>\r\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\r\n {{ errorText }}\r\n</div>\r\n\r\n<!-- stacked file -->\r\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\r\n <div\r\n *ngFor=\"let item of uploadedFiles; let i = index\"\r\n class=\"cax-file-preview\"\r\n [ngClass]=\"{\r\n 'queued': item.status === 'queued',\r\n 'uploading': item.status === 'uploading',\r\n 'complete': item.status === 'complete',\r\n 'canceled': item.status === 'canceled'\r\n }\"\r\n >\r\n <div class=\"file-info\">\r\n <p class=\"file-name\">{{ item.file.name }}</p>\r\n </div> \r\n\r\n <!-- Show spinner for queued or uploading files -->\r\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'sm'\"\r\n [animationDuration]=\"'2s'\">\r\n </cax-progressSpinner>\r\n </div>\r\n \r\n <!-- Show remove button only for complete or canceled files -->\r\n <button\r\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\r\n class=\"remove-button\"\r\n (click)=\"removeFile(i); $event.stopPropagation()\">\r\n <i class=\"cax cax-close\"></i> \r\n </button>\r\n </div>\r\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ProgressSpinner, selector: "cax-progressSpinner", inputs: ["styleClass", "strokeColor", "backgroundStrokeColor", "size", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3.Button, selector: "cax-button", inputs: ["type", "iconPos", "icon", "badge", "rightIcon", "leftIcon", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }] });
319
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: UploadComponent, selector: "cax-upload", inputs: { invalid: "invalid", style: "style", maxFileSize: "maxFileSize", inputFiles: "inputFiles", uploadString: "uploadString", errorText: "errorText", allowMultiple: "allowMultiple", componentId: "componentId", allowedFileTypes: "allowedFileTypes" }, outputs: { fileSelected: "fileSelected", filesQueued: "filesQueued", uploadStarted: "uploadStarted", uploadCompleted: "uploadCompleted", uploadCanceled: "uploadCanceled", uploadError: "uploadError", fileRemoved: "fileRemoved", allFilesRemoved: "allFilesRemoved", uploadStatusChange: "uploadStatusChange" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, classAttribute: "cax-element" }, ngImport: i0, template: "<p class=\"cax-files\">{{inputFiles}}</p>\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\n [class.dragging]=\"isDragging\" \n (click)=\"openFileSelector()\">\n <input\n type=\"file\"\n id=\"fileInput-{{uniqueId}}\"\n style=\"display:none\"\n [multiple]=\"allowMultiple\"\n [accept]=\"acceptFileTypes\"\n (change)=\"handleFileInput($event)\"\n />\n\n <!-- Default Upload State -->\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\n <div class=\"cax-upload-options\" >\n <p class=\"hint-text\">\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\n </p>\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\n </div>\n </ng-container>\n\n\n <!-- Uploading State -->\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\n <div class=\"status-container\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'lg'\"\n [animationDuration]=\"'2s'\"\n ></cax-progressSpinner>\n <p >{{ uploadingProgressText }}</p>\n <cax-button\n [label]=\"'Cancel'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\n />\n </div>\n</div>\n\n <!-- Complete State -->\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\n <div class=\"status-container\">\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\n <p>{{uploadString}}</p>\n <cax-button\n [label]=\"'Remove'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\n />\n </div>\n </div>\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\n</div>\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\n {{ errorText }}\n</div>\n\n<!-- stacked file -->\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\n <div\n *ngFor=\"let item of uploadedFiles; let i = index\"\n class=\"cax-file-preview\"\n [ngClass]=\"{\n 'queued': item.status === 'queued',\n 'uploading': item.status === 'uploading',\n 'complete': item.status === 'complete',\n 'canceled': item.status === 'canceled'\n }\"\n >\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n </div> \n\n <!-- Show spinner for queued or uploading files -->\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'sm'\"\n [animationDuration]=\"'2s'\">\n </cax-progressSpinner>\n </div>\n \n <!-- Show remove button only for complete or canceled files -->\n <button\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\n class=\"remove-button\"\n (click)=\"removeFile(i); $event.stopPropagation()\">\n <i class=\"cax cax-close\"></i> \n </button>\n </div>\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ProgressSpinner, selector: "cax-progressSpinner", inputs: ["styleClass", "strokeColor", "backgroundStrokeColor", "size", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i3.Button, selector: "cax-button", inputs: ["type", "iconPos", "icon", "badge", "rightIcon", "leftIcon", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }] });
320
320
  }
321
321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UploadComponent, decorators: [{
322
322
  type: Component,
323
323
  args: [{ selector: 'cax-upload', host: {
324
324
  class: 'cax-element'
325
- }, template: "<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n <input\r\n type=\"file\"\r\n id=\"fileInput-{{uniqueId}}\"\r\n style=\"display:none\"\r\n [multiple]=\"allowMultiple\"\r\n [accept]=\"acceptFileTypes\"\r\n (change)=\"handleFileInput($event)\"\r\n />\r\n\r\n <!-- Default Upload State -->\r\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\r\n <div class=\"cax-upload-options\" >\r\n <p class=\"hint-text\">\r\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\r\n </p>\r\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <!-- Uploading State -->\r\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\r\n <div class=\"status-container\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'lg'\"\r\n [animationDuration]=\"'2s'\"\r\n ></cax-progressSpinner>\r\n <p >{{ uploadingProgressText }}</p>\r\n <cax-button\r\n [label]=\"'Cancel'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n <!-- Complete State -->\r\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\r\n <div class=\"status-container\">\r\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\r\n <p>{{uploadString}}</p>\r\n <cax-button\r\n [label]=\"'Remove'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\r\n</div>\r\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\r\n {{ errorText }}\r\n</div>\r\n\r\n<!-- stacked file -->\r\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\r\n <div\r\n *ngFor=\"let item of uploadedFiles; let i = index\"\r\n class=\"cax-file-preview\"\r\n [ngClass]=\"{\r\n 'queued': item.status === 'queued',\r\n 'uploading': item.status === 'uploading',\r\n 'complete': item.status === 'complete',\r\n 'canceled': item.status === 'canceled'\r\n }\"\r\n >\r\n <div class=\"file-info\">\r\n <p class=\"file-name\">{{ item.file.name }}</p>\r\n </div> \r\n\r\n <!-- Show spinner for queued or uploading files -->\r\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'sm'\"\r\n [animationDuration]=\"'2s'\">\r\n </cax-progressSpinner>\r\n </div>\r\n \r\n <!-- Show remove button only for complete or canceled files -->\r\n <button\r\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\r\n class=\"remove-button\"\r\n (click)=\"removeFile(i); $event.stopPropagation()\">\r\n <i class=\"cax cax-close\"></i> \r\n </button>\r\n </div>\r\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"] }]
325
+ }, template: "<p class=\"cax-files\">{{inputFiles}}</p>\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\n [class.dragging]=\"isDragging\" \n (click)=\"openFileSelector()\">\n <input\n type=\"file\"\n id=\"fileInput-{{uniqueId}}\"\n style=\"display:none\"\n [multiple]=\"allowMultiple\"\n [accept]=\"acceptFileTypes\"\n (change)=\"handleFileInput($event)\"\n />\n\n <!-- Default Upload State -->\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\n <div class=\"cax-upload-options\" >\n <p class=\"hint-text\">\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\n </p>\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\n </div>\n </ng-container>\n\n\n <!-- Uploading State -->\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\n <div class=\"status-container\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'lg'\"\n [animationDuration]=\"'2s'\"\n ></cax-progressSpinner>\n <p >{{ uploadingProgressText }}</p>\n <cax-button\n [label]=\"'Cancel'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\n />\n </div>\n</div>\n\n <!-- Complete State -->\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\n <div class=\"status-container\">\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\n <p>{{uploadString}}</p>\n <cax-button\n [label]=\"'Remove'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\n />\n </div>\n </div>\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\n</div>\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\n {{ errorText }}\n</div>\n\n<!-- stacked file -->\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\n <div\n *ngFor=\"let item of uploadedFiles; let i = index\"\n class=\"cax-file-preview\"\n [ngClass]=\"{\n 'queued': item.status === 'queued',\n 'uploading': item.status === 'uploading',\n 'complete': item.status === 'complete',\n 'canceled': item.status === 'canceled'\n }\"\n >\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n </div> \n\n <!-- Show spinner for queued or uploading files -->\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'sm'\"\n [animationDuration]=\"'2s'\">\n </cax-progressSpinner>\n </div>\n \n <!-- Show remove button only for complete or canceled files -->\n <button\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\n class=\"remove-button\"\n (click)=\"removeFile(i); $event.stopPropagation()\">\n <i class=\"cax cax-close\"></i> \n </button>\n </div>\n</div>", styles: ["@layer cax{.cax-files{font-size:14px;font-weight:500;margin-bottom:10px}.cax-upload-menu{border-radius:12px;padding:24px 56px}.status-container{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;height:150px}.status-container p{margin:0;font-size:14px;font-weight:500}.status-container .success-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center}.status-container .success-icon i{font-size:1.5rem;font-weight:800}.cax-upload-options{text-align:center}.cax-upload-options .hint-text{font-size:14px;font-weight:500}.cax-upload-options .drop-files{font-weight:500;font-size:14px}.cax-upload-options .max-size{font-size:12px;margin-bottom:20px;font-weight:400}.cax-error-upload{font-size:14px;font-weight:400;padding-top:8px}.cax-options-container{display:flex;gap:24px;justify-content:center}.cax-upload-option{display:flex;flex-direction:column;align-items:center;cursor:pointer}.cax-upload-option .icon-container{width:48px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.cax-upload-option span{font-size:14px;font-weight:600;padding-top:10px}.cax-file-preview-wrapper{display:flex;flex-direction:column;gap:10px;margin-top:1rem}.cax-file-preview{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:8px}.cax-file-preview .file-info{display:flex;align-items:center;gap:10px}.cax-file-preview .file-info .file-icon img{width:32px;height:32px}.cax-file-preview .file-info .file-name{font-weight:500;font-size:14px}.cax-file-preview .spinner{margin-left:auto;font-size:20px!important}.cax-file-preview .remove-button{background:none;border:none;margin-left:auto;cursor:pointer}.cax-file-preview .remove-button i{font-size:20px}}\n"] }]
326
326
  }], propDecorators: { invalid: [{
327
327
  type: Input
328
328
  }], style: [{
@@ -1 +1 @@
1
- {"version":3,"file":"cax-design-system-upload.mjs","sources":["../../src/app/components/upload/upload.component.ts","../../src/app/components/upload/upload.component.html","../../src/app/components/upload/upload.component.module.ts","../../src/app/components/upload/cax-design-system-upload.ts"],"sourcesContent":["import { Component, EventEmitter, HostListener, Input, Output, OnInit } from '@angular/core';\n\nexport type UploadFileStatus = 'queued' | 'uploading' | 'complete' | 'canceled' | 'error';\n\nexport type UploadFile = {\n file: File;\n status: UploadFileStatus;\n progress?: number;\n errorMessage?: string;\n};\n\n@Component({\n selector: 'cax-upload',\n templateUrl: './upload.component.html',\n styleUrls: ['./upload.component.scss'],\n host: {\n class: 'cax-element'\n }\n})\nexport class UploadComponent implements OnInit {\n @Input() invalid: boolean = false;\n @Input() style: { [klass: string]: any } | null | undefined;\n @Input() maxFileSize: number = 30;\n @Input() inputFiles: string = 'Input Files';\n @Input() uploadString: string = 'uploading the file';\n @Input() errorText: string = 'Please upload a file';\n @Input() allowMultiple: boolean = true;\n @Input() componentId: string = '';\n @Input() allowedFileTypes: string[] = [];\n // Enhanced event emitters\n @Output() fileSelected = new EventEmitter<File>();\n @Output() filesQueued = new EventEmitter<File[]>();\n @Output() uploadStarted = new EventEmitter<File>();\n @Output() uploadCompleted = new EventEmitter<File>();\n @Output() uploadCanceled = new EventEmitter<File>();\n @Output() uploadError = new EventEmitter<{ file: File; error: string }>();\n @Output() fileRemoved = new EventEmitter<File>();\n @Output() allFilesRemoved = new EventEmitter<void>();\n @Output() uploadStatusChange = new EventEmitter<'idle' | 'uploading' | 'complete'>();\n\n isDragging: boolean = false;\n uploadedFiles: UploadFile[] = [];\n uploadStatus: 'idle' | 'uploading' | 'complete' = 'idle';\n isProcessingQueue: boolean = false;\n uniqueId: string = '';\n\n // Computed property for accept attribute in file input\n get acceptFileTypes(): string {\n if (!this.allowedFileTypes || this.allowedFileTypes.length === 0) return '';\n return this.allowedFileTypes.map((type) => `.${type}`).join(',');\n }\n\n // Track actual files to process (excludes canceled ones)\n private get activeFilesCount(): number {\n return this.uploadedFiles.filter((file) => file.status !== 'canceled').length;\n }\n\n ngOnInit() {\n // Generate unique ID if not provided through input\n this.uniqueId = this.componentId || `upload-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return;\n\n const fileArray = Array.from(files);\n const validFiles = fileArray.filter((file) => this.validateFile(file));\n\n // Queue all files for upload\n validFiles.forEach((file) => this.queueFile(file));\n\n // Emit the queued files event\n if (validFiles.length > 0) {\n this.filesQueued.emit(validFiles);\n }\n\n // Start processing the queue if not already processing\n if (!this.isProcessingQueue) {\n this.processQueue();\n }\n }\n\n handleFileInput(event: any): void {\n const files: FileList = event.target.files;\n if (!files) return;\n\n const fileArray = Array.from(files);\n const validFiles = fileArray.filter((file) => this.validateFile(file));\n\n // Queue all files for upload\n validFiles.forEach((file) => this.queueFile(file));\n\n // Emit the queued files event\n if (validFiles.length > 0) {\n this.filesQueued.emit(validFiles);\n }\n\n // Start processing the queue if not already processing\n if (!this.isProcessingQueue) {\n this.processQueue();\n }\n }\n\n // New method for file validation\n private validateFile(file: File): boolean {\n // Size validation\n if (file.size > this.maxFileSize * 1024 * 1024) {\n this.emitError(file, `File size should be less than ${this.maxFileSize}MB`);\n return false;\n }\n\n // File type validation\n if (this.allowedFileTypes.length > 0) {\n const fileExtension = this.getFileExtension(file.name).toLowerCase();\n if (!this.allowedFileTypes.includes(fileExtension)) {\n this.emitError(file, `Only ${this.allowedFileTypes.join(', ')} files are allowed`);\n return false;\n }\n }\n\n return true;\n }\n\n // Helper method to get file extension\n private getFileExtension(filename: string): string {\n return filename.split('.').pop() || '';\n }\n\n // Queue a file for upload\n private queueFile(file: File): void {\n const uploadEntry: UploadFile = {\n file,\n status: 'queued',\n progress: 0\n };\n\n this.uploadedFiles.push(uploadEntry);\n\n if (this.uploadStatus === 'idle') {\n this.updateUploadStatus('uploading');\n }\n }\n\n // Update upload status and emit event\n private updateUploadStatus(status: 'idle' | 'uploading' | 'complete'): void {\n if (this.uploadStatus !== status) {\n this.uploadStatus = status;\n this.uploadStatusChange.emit(status);\n }\n }\n\n // Process the queue of files sequentially\n private async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n\n this.isProcessingQueue = true;\n\n // Find the next file to upload\n let nextFileIndex = this.uploadedFiles.findIndex((file) => file.status === 'queued');\n\n while (nextFileIndex !== -1) {\n const currentFile = this.uploadedFiles[nextFileIndex];\n await this.processFile(currentFile, nextFileIndex);\n\n // Find the next file after processing\n nextFileIndex = this.uploadedFiles.findIndex((file) => file.status === 'queued');\n }\n\n this.isProcessingQueue = false;\n\n // Check if all uploads are complete and there are no more files to process\n if (this.uploadedFiles.length > 0 && this.uploadedFiles.some((file) => file.status === 'complete') && !this.hasQueuedOrUploading) {\n this.updateUploadStatus('complete');\n }\n }\n\n // Trigger file input click programmatically\n openFileSelector(): void {\n const fileInput = document.getElementById(`fileInput-${this.uniqueId}`) as HTMLInputElement;\n if (fileInput) {\n fileInput.click();\n }\n }\n\n // Emit error event\n private emitError(file: File, message: string): void {\n this.uploadError.emit({ file, error: message });\n }\n\n private async processFile(fileEntry: UploadFile, index: number): Promise<void> {\n // Update status to uploading\n fileEntry.status = 'uploading';\n fileEntry.progress = 0;\n\n this.fileSelected.emit(fileEntry.file);\n this.uploadStarted.emit(fileEntry.file);\n\n try {\n // Simulate upload with progress updates\n for (let progress = 0; progress <= 100; progress += 10) {\n // Check if upload was canceled during progress\n // Need to check current status since it might have changed\n if (fileEntry.status !== 'uploading') {\n // Either canceled or errored\n break;\n }\n\n fileEntry.progress = progress;\n\n // Simulate network delay\n await new Promise((resolve) => setTimeout(resolve, 200));\n }\n\n // Only set to complete if still uploading (not canceled or errored)\n if (fileEntry.status === 'uploading') {\n fileEntry.status = 'complete';\n fileEntry.progress = 100;\n this.uploadCompleted.emit(fileEntry.file);\n }\n } catch (error) {\n // Handle errors\n fileEntry.status = 'error';\n const errorMessage = error instanceof Error ? error.message : 'Unknown upload error';\n fileEntry.errorMessage = errorMessage;\n this.emitError(fileEntry.file, errorMessage);\n }\n }\n\n cancelUpload(index: number): void {\n // Cancel the specified file and all files below it\n for (let i = index; i < this.uploadedFiles.length; i++) {\n const fileToCancel = this.uploadedFiles[i];\n if (fileToCancel) {\n const previousStatus = fileToCancel.status;\n if (previousStatus === 'uploading' || previousStatus === 'queued') {\n fileToCancel.status = 'canceled';\n // Only emit if it was actively uploading (not just queued)\n if (previousStatus === 'uploading') {\n this.uploadCanceled.emit(fileToCancel.file);\n }\n }\n }\n }\n // If the file at the specified index was uploading, process the next file in queue\n // (which would now be a file before the index that might be queued)\n if (this.uploadedFiles[index]?.status === 'canceled') {\n setTimeout(() => this.processQueue(), 0);\n }\n }\n\n // Cancel the current upload\n cancelCurrentUpload(): void {\n // Find the file that's currently uploading\n const currentUploadIndex = this.uploadedFiles.findIndex((file) => file.status === 'uploading');\n if (currentUploadIndex >= 0) {\n this.cancelUpload(currentUploadIndex);\n }\n }\n\n // Cancel all uploads\n cancelAllUploads(): void {\n let hadActiveUploads = false;\n\n this.uploadedFiles.forEach((file) => {\n if (file.status === 'uploading' || file.status === 'queued') {\n hadActiveUploads = true;\n const previousStatus = file.status;\n file.status = 'canceled';\n\n if (previousStatus === 'uploading') {\n this.uploadCanceled.emit(file.file);\n }\n }\n });\n\n if (hadActiveUploads && !this.hasQueuedOrUploading) {\n this.updateUploadStatus('idle');\n }\n }\n\n // Remove a file from the list\n removeFile(index: number): void {\n const fileToRemove = this.uploadedFiles[index];\n\n // Cancel first if it's active\n if (fileToRemove.status === 'uploading' || fileToRemove.status === 'queued') {\n this.cancelUpload(index);\n }\n\n // Emit removal event\n this.fileRemoved.emit(fileToRemove.file);\n\n // Remove from array\n this.uploadedFiles.splice(index, 1);\n\n // Reset status if no files left\n if (this.uploadedFiles.length === 0) {\n this.updateUploadStatus('idle');\n } else if (!this.hasQueuedOrUploading && this.uploadStatus !== 'complete') {\n // If there are no more queued or uploading files but we have completed files\n this.updateUploadStatus('complete');\n }\n }\n\n // Remove all files\n removeAllFiles(): void {\n // Cancel any active uploads\n this.cancelAllUploads();\n\n // Only emit if there were files to remove\n if (this.uploadedFiles.length > 0) {\n this.allFilesRemoved.emit();\n }\n\n this.uploadedFiles = [];\n this.updateUploadStatus('idle');\n }\n\n get hasUploading(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'uploading');\n }\n\n get hasQueuedOrUploading(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'uploading' || file.status === 'queued');\n }\n\n get hasErrors(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'error');\n }\n\n get allUploadsComplete(): boolean {\n return this.uploadedFiles.length > 0 && this.uploadedFiles.some((file) => file.status === 'complete') && !this.hasQueuedOrUploading;\n }\n\n get uploadingProgressText(): string {\n // Count active files (excluding canceled ones)\n const totalActiveFiles = this.activeFilesCount;\n const completedCount = this.uploadedFiles.filter((file) => file.status === 'complete').length;\n const uploadingFile = this.uploadedFiles.find((file) => file.status === 'uploading');\n if (uploadingFile) {\n // We're currently uploading the (completedCount + 1)th active file\n return `Uploading ${completedCount}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n if (this.uploadedFiles.some((file) => file.status === 'queued')) {\n return `Uploading ${completedCount + 1}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n return `Uploading ${completedCount}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n\n // Calculate overall progress percentage across all files\n get overallProgress(): number {\n if (this.uploadedFiles.length === 0) return 0;\n\n const totalProgress = this.uploadedFiles.reduce((sum, file) => {\n if (file.status === 'complete') return sum + 100;\n if (file.status === 'canceled' || file.status === 'error') return sum;\n return sum + (file.progress || 0);\n }, 0);\n\n const activeFilesCount = this.uploadedFiles.filter((file) => file.status !== 'canceled' && file.status !== 'error').length;\n\n return activeFilesCount > 0 ? Math.round((totalProgress / (activeFilesCount * 100)) * 100) : 0;\n }\n}\n","<p class=\"cax-files\">{{inputFiles}}</p>\r\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\r\n [class.dragging]=\"isDragging\" \r\n (click)=\"openFileSelector()\">\r\n <input\r\n type=\"file\"\r\n id=\"fileInput-{{uniqueId}}\"\r\n style=\"display:none\"\r\n [multiple]=\"allowMultiple\"\r\n [accept]=\"acceptFileTypes\"\r\n (change)=\"handleFileInput($event)\"\r\n />\r\n\r\n <!-- Default Upload State -->\r\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\r\n <div class=\"cax-upload-options\" >\r\n <p class=\"hint-text\">\r\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\r\n </p>\r\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <!-- Uploading State -->\r\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\r\n <div class=\"status-container\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'lg'\"\r\n [animationDuration]=\"'2s'\"\r\n ></cax-progressSpinner>\r\n <p >{{ uploadingProgressText }}</p>\r\n <cax-button\r\n [label]=\"'Cancel'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n</div>\r\n\r\n <!-- Complete State -->\r\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\r\n <div class=\"status-container\">\r\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\r\n <p>{{uploadString}}</p>\r\n <cax-button\r\n [label]=\"'Remove'\"\r\n [rounded]=\"false\"\r\n [severity]=\"'danger'\"\r\n [size]=\"'large'\"\r\n [outlined]=\"'false'\"\r\n [link]=\"true\"\r\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\r\n</div>\r\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\r\n {{ errorText }}\r\n</div>\r\n\r\n<!-- stacked file -->\r\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\r\n <div\r\n *ngFor=\"let item of uploadedFiles; let i = index\"\r\n class=\"cax-file-preview\"\r\n [ngClass]=\"{\r\n 'queued': item.status === 'queued',\r\n 'uploading': item.status === 'uploading',\r\n 'complete': item.status === 'complete',\r\n 'canceled': item.status === 'canceled'\r\n }\"\r\n >\r\n <div class=\"file-info\">\r\n <p class=\"file-name\">{{ item.file.name }}</p>\r\n </div> \r\n\r\n <!-- Show spinner for queued or uploading files -->\r\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\r\n <cax-progressSpinner\r\n [strokeColor]=\"'primary'\"\r\n [size]=\"'sm'\"\r\n [animationDuration]=\"'2s'\">\r\n </cax-progressSpinner>\r\n </div>\r\n \r\n <!-- Show remove button only for complete or canceled files -->\r\n <button\r\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\r\n class=\"remove-button\"\r\n (click)=\"removeFile(i); $event.stopPropagation()\">\r\n <i class=\"cax cax-close\"></i> \r\n </button>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\nimport { UploadComponent } from './upload.component';\nimport { FormsModule } from '@angular/forms';\nimport { NgModule } from '@angular/core';\nimport { ProgressSpinnerModule } from 'cax-design-system/progressspinner';\nimport { Button } from 'cax-design-system/button';\n\n@NgModule({\n declarations: [UploadComponent],\n imports: [CommonModule, FormsModule, ProgressSpinnerModule, Button],\n exports: [UploadComponent]\n})\nexport class UploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cax-design-system-upload.mjs","sources":["../../src/app/components/upload/upload.component.ts","../../src/app/components/upload/upload.component.html","../../src/app/components/upload/upload.component.module.ts","../../src/app/components/upload/cax-design-system-upload.ts"],"sourcesContent":["import { Component, EventEmitter, HostListener, Input, Output, OnInit } from '@angular/core';\n\nexport type UploadFileStatus = 'queued' | 'uploading' | 'complete' | 'canceled' | 'error';\n\nexport type UploadFile = {\n file: File;\n status: UploadFileStatus;\n progress?: number;\n errorMessage?: string;\n};\n\n@Component({\n selector: 'cax-upload',\n templateUrl: './upload.component.html',\n styleUrls: ['./upload.component.scss'],\n host: {\n class: 'cax-element'\n }\n})\nexport class UploadComponent implements OnInit {\n @Input() invalid: boolean = false;\n @Input() style: { [klass: string]: any } | null | undefined;\n @Input() maxFileSize: number = 30;\n @Input() inputFiles: string = 'Input Files';\n @Input() uploadString: string = 'uploading the file';\n @Input() errorText: string = 'Please upload a file';\n @Input() allowMultiple: boolean = true;\n @Input() componentId: string = '';\n @Input() allowedFileTypes: string[] = [];\n // Enhanced event emitters\n @Output() fileSelected = new EventEmitter<File>();\n @Output() filesQueued = new EventEmitter<File[]>();\n @Output() uploadStarted = new EventEmitter<File>();\n @Output() uploadCompleted = new EventEmitter<File>();\n @Output() uploadCanceled = new EventEmitter<File>();\n @Output() uploadError = new EventEmitter<{ file: File; error: string }>();\n @Output() fileRemoved = new EventEmitter<File>();\n @Output() allFilesRemoved = new EventEmitter<void>();\n @Output() uploadStatusChange = new EventEmitter<'idle' | 'uploading' | 'complete'>();\n\n isDragging: boolean = false;\n uploadedFiles: UploadFile[] = [];\n uploadStatus: 'idle' | 'uploading' | 'complete' = 'idle';\n isProcessingQueue: boolean = false;\n uniqueId: string = '';\n\n // Computed property for accept attribute in file input\n get acceptFileTypes(): string {\n if (!this.allowedFileTypes || this.allowedFileTypes.length === 0) return '';\n return this.allowedFileTypes.map((type) => `.${type}`).join(',');\n }\n\n // Track actual files to process (excludes canceled ones)\n private get activeFilesCount(): number {\n return this.uploadedFiles.filter((file) => file.status !== 'canceled').length;\n }\n\n ngOnInit() {\n // Generate unique ID if not provided through input\n this.uniqueId = this.componentId || `upload-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return;\n\n const fileArray = Array.from(files);\n const validFiles = fileArray.filter((file) => this.validateFile(file));\n\n // Queue all files for upload\n validFiles.forEach((file) => this.queueFile(file));\n\n // Emit the queued files event\n if (validFiles.length > 0) {\n this.filesQueued.emit(validFiles);\n }\n\n // Start processing the queue if not already processing\n if (!this.isProcessingQueue) {\n this.processQueue();\n }\n }\n\n handleFileInput(event: any): void {\n const files: FileList = event.target.files;\n if (!files) return;\n\n const fileArray = Array.from(files);\n const validFiles = fileArray.filter((file) => this.validateFile(file));\n\n // Queue all files for upload\n validFiles.forEach((file) => this.queueFile(file));\n\n // Emit the queued files event\n if (validFiles.length > 0) {\n this.filesQueued.emit(validFiles);\n }\n\n // Start processing the queue if not already processing\n if (!this.isProcessingQueue) {\n this.processQueue();\n }\n }\n\n // New method for file validation\n private validateFile(file: File): boolean {\n // Size validation\n if (file.size > this.maxFileSize * 1024 * 1024) {\n this.emitError(file, `File size should be less than ${this.maxFileSize}MB`);\n return false;\n }\n\n // File type validation\n if (this.allowedFileTypes.length > 0) {\n const fileExtension = this.getFileExtension(file.name).toLowerCase();\n if (!this.allowedFileTypes.includes(fileExtension)) {\n this.emitError(file, `Only ${this.allowedFileTypes.join(', ')} files are allowed`);\n return false;\n }\n }\n\n return true;\n }\n\n // Helper method to get file extension\n private getFileExtension(filename: string): string {\n return filename.split('.').pop() || '';\n }\n\n // Queue a file for upload\n private queueFile(file: File): void {\n const uploadEntry: UploadFile = {\n file,\n status: 'queued',\n progress: 0\n };\n\n this.uploadedFiles.push(uploadEntry);\n\n if (this.uploadStatus === 'idle') {\n this.updateUploadStatus('uploading');\n }\n }\n\n // Update upload status and emit event\n private updateUploadStatus(status: 'idle' | 'uploading' | 'complete'): void {\n if (this.uploadStatus !== status) {\n this.uploadStatus = status;\n this.uploadStatusChange.emit(status);\n }\n }\n\n // Process the queue of files sequentially\n private async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n\n this.isProcessingQueue = true;\n\n // Find the next file to upload\n let nextFileIndex = this.uploadedFiles.findIndex((file) => file.status === 'queued');\n\n while (nextFileIndex !== -1) {\n const currentFile = this.uploadedFiles[nextFileIndex];\n await this.processFile(currentFile, nextFileIndex);\n\n // Find the next file after processing\n nextFileIndex = this.uploadedFiles.findIndex((file) => file.status === 'queued');\n }\n\n this.isProcessingQueue = false;\n\n // Check if all uploads are complete and there are no more files to process\n if (this.uploadedFiles.length > 0 && this.uploadedFiles.some((file) => file.status === 'complete') && !this.hasQueuedOrUploading) {\n this.updateUploadStatus('complete');\n }\n }\n\n // Trigger file input click programmatically\n openFileSelector(): void {\n const fileInput = document.getElementById(`fileInput-${this.uniqueId}`) as HTMLInputElement;\n if (fileInput) {\n fileInput.click();\n }\n }\n\n // Emit error event\n private emitError(file: File, message: string): void {\n this.uploadError.emit({ file, error: message });\n }\n\n private async processFile(fileEntry: UploadFile, index: number): Promise<void> {\n // Update status to uploading\n fileEntry.status = 'uploading';\n fileEntry.progress = 0;\n\n this.fileSelected.emit(fileEntry.file);\n this.uploadStarted.emit(fileEntry.file);\n\n try {\n // Simulate upload with progress updates\n for (let progress = 0; progress <= 100; progress += 10) {\n // Check if upload was canceled during progress\n // Need to check current status since it might have changed\n if (fileEntry.status !== 'uploading') {\n // Either canceled or errored\n break;\n }\n\n fileEntry.progress = progress;\n\n // Simulate network delay\n await new Promise((resolve) => setTimeout(resolve, 200));\n }\n\n // Only set to complete if still uploading (not canceled or errored)\n if (fileEntry.status === 'uploading') {\n fileEntry.status = 'complete';\n fileEntry.progress = 100;\n this.uploadCompleted.emit(fileEntry.file);\n }\n } catch (error) {\n // Handle errors\n fileEntry.status = 'error';\n const errorMessage = error instanceof Error ? error.message : 'Unknown upload error';\n fileEntry.errorMessage = errorMessage;\n this.emitError(fileEntry.file, errorMessage);\n }\n }\n\n cancelUpload(index: number): void {\n // Cancel the specified file and all files below it\n for (let i = index; i < this.uploadedFiles.length; i++) {\n const fileToCancel = this.uploadedFiles[i];\n if (fileToCancel) {\n const previousStatus = fileToCancel.status;\n if (previousStatus === 'uploading' || previousStatus === 'queued') {\n fileToCancel.status = 'canceled';\n // Only emit if it was actively uploading (not just queued)\n if (previousStatus === 'uploading') {\n this.uploadCanceled.emit(fileToCancel.file);\n }\n }\n }\n }\n // If the file at the specified index was uploading, process the next file in queue\n // (which would now be a file before the index that might be queued)\n if (this.uploadedFiles[index]?.status === 'canceled') {\n setTimeout(() => this.processQueue(), 0);\n }\n }\n\n // Cancel the current upload\n cancelCurrentUpload(): void {\n // Find the file that's currently uploading\n const currentUploadIndex = this.uploadedFiles.findIndex((file) => file.status === 'uploading');\n if (currentUploadIndex >= 0) {\n this.cancelUpload(currentUploadIndex);\n }\n }\n\n // Cancel all uploads\n cancelAllUploads(): void {\n let hadActiveUploads = false;\n\n this.uploadedFiles.forEach((file) => {\n if (file.status === 'uploading' || file.status === 'queued') {\n hadActiveUploads = true;\n const previousStatus = file.status;\n file.status = 'canceled';\n\n if (previousStatus === 'uploading') {\n this.uploadCanceled.emit(file.file);\n }\n }\n });\n\n if (hadActiveUploads && !this.hasQueuedOrUploading) {\n this.updateUploadStatus('idle');\n }\n }\n\n // Remove a file from the list\n removeFile(index: number): void {\n const fileToRemove = this.uploadedFiles[index];\n\n // Cancel first if it's active\n if (fileToRemove.status === 'uploading' || fileToRemove.status === 'queued') {\n this.cancelUpload(index);\n }\n\n // Emit removal event\n this.fileRemoved.emit(fileToRemove.file);\n\n // Remove from array\n this.uploadedFiles.splice(index, 1);\n\n // Reset status if no files left\n if (this.uploadedFiles.length === 0) {\n this.updateUploadStatus('idle');\n } else if (!this.hasQueuedOrUploading && this.uploadStatus !== 'complete') {\n // If there are no more queued or uploading files but we have completed files\n this.updateUploadStatus('complete');\n }\n }\n\n // Remove all files\n removeAllFiles(): void {\n // Cancel any active uploads\n this.cancelAllUploads();\n\n // Only emit if there were files to remove\n if (this.uploadedFiles.length > 0) {\n this.allFilesRemoved.emit();\n }\n\n this.uploadedFiles = [];\n this.updateUploadStatus('idle');\n }\n\n get hasUploading(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'uploading');\n }\n\n get hasQueuedOrUploading(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'uploading' || file.status === 'queued');\n }\n\n get hasErrors(): boolean {\n return this.uploadedFiles.some((file) => file.status === 'error');\n }\n\n get allUploadsComplete(): boolean {\n return this.uploadedFiles.length > 0 && this.uploadedFiles.some((file) => file.status === 'complete') && !this.hasQueuedOrUploading;\n }\n\n get uploadingProgressText(): string {\n // Count active files (excluding canceled ones)\n const totalActiveFiles = this.activeFilesCount;\n const completedCount = this.uploadedFiles.filter((file) => file.status === 'complete').length;\n const uploadingFile = this.uploadedFiles.find((file) => file.status === 'uploading');\n if (uploadingFile) {\n // We're currently uploading the (completedCount + 1)th active file\n return `Uploading ${completedCount}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n if (this.uploadedFiles.some((file) => file.status === 'queued')) {\n return `Uploading ${completedCount + 1}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n return `Uploading ${completedCount}/${totalActiveFiles} file${totalActiveFiles > 1 ? 's' : ''}...`;\n }\n\n // Calculate overall progress percentage across all files\n get overallProgress(): number {\n if (this.uploadedFiles.length === 0) return 0;\n\n const totalProgress = this.uploadedFiles.reduce((sum, file) => {\n if (file.status === 'complete') return sum + 100;\n if (file.status === 'canceled' || file.status === 'error') return sum;\n return sum + (file.progress || 0);\n }, 0);\n\n const activeFilesCount = this.uploadedFiles.filter((file) => file.status !== 'canceled' && file.status !== 'error').length;\n\n return activeFilesCount > 0 ? Math.round((totalProgress / (activeFilesCount * 100)) * 100) : 0;\n }\n}\n","<p class=\"cax-files\">{{inputFiles}}</p>\n<div class=\"cax-upload-menu\" [ngStyle]=\"style\"\n [class.dragging]=\"isDragging\" \n (click)=\"openFileSelector()\">\n <input\n type=\"file\"\n id=\"fileInput-{{uniqueId}}\"\n style=\"display:none\"\n [multiple]=\"allowMultiple\"\n [accept]=\"acceptFileTypes\"\n (change)=\"handleFileInput($event)\"\n />\n\n <!-- Default Upload State -->\n <ng-container *ngIf=\"uploadStatus === 'idle'\" >\n <div class=\"cax-upload-options\" >\n <p class=\"hint-text\">\n <span class=\"drop-files\">Drop files here</span> or browse files from your device\n </p>\n <p class=\"max-size\">Max. File Size: {{ maxFileSize }}MB</p>\n </div>\n </ng-container>\n\n\n <!-- Uploading State -->\n<div *ngIf=\"uploadStatus === 'uploading'\" class=\"cax-upload-status uploading\" >\n <div class=\"status-container\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'lg'\"\n [animationDuration]=\"'2s'\"\n ></cax-progressSpinner>\n <p >{{ uploadingProgressText }}</p>\n <cax-button\n [label]=\"'Cancel'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"cancelCurrentUpload(); $event.stopPropagation()\"\n />\n </div>\n</div>\n\n <!-- Complete State -->\n <div *ngIf=\"uploadStatus === 'complete'\" class=\"cax-upload-status complete\">\n <div class=\"status-container\">\n <div class=\"success-icon\"><i class=\"cax cax-check\"></i></div>\n <p>{{uploadString}}</p>\n <cax-button\n [label]=\"'Remove'\"\n [rounded]=\"false\"\n [severity]=\"'danger'\"\n [size]=\"'large'\"\n [outlined]=\"'false'\"\n [link]=\"true\"\n (click)=\"removeAllFiles(); $event.stopPropagation()\"\n />\n </div>\n </div>\n <div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\"></div>\n</div>\n<div *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error-upload\">\n {{ errorText }}\n</div>\n\n<!-- stacked file -->\n<div *ngIf=\"uploadedFiles.length > 0\" class=\"cax-file-preview-wrapper\" [ngStyle]=\"style\">\n <div\n *ngFor=\"let item of uploadedFiles; let i = index\"\n class=\"cax-file-preview\"\n [ngClass]=\"{\n 'queued': item.status === 'queued',\n 'uploading': item.status === 'uploading',\n 'complete': item.status === 'complete',\n 'canceled': item.status === 'canceled'\n }\"\n >\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n </div> \n\n <!-- Show spinner for queued or uploading files -->\n <div *ngIf=\"item.status === 'queued' || item.status === 'uploading'\" class=\"spinner\">\n <cax-progressSpinner\n [strokeColor]=\"'primary'\"\n [size]=\"'sm'\"\n [animationDuration]=\"'2s'\">\n </cax-progressSpinner>\n </div>\n \n <!-- Show remove button only for complete or canceled files -->\n <button\n *ngIf=\"item.status === 'complete' || item.status === 'canceled'\"\n class=\"remove-button\"\n (click)=\"removeFile(i); $event.stopPropagation()\">\n <i class=\"cax cax-close\"></i> \n </button>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { UploadComponent } from './upload.component';\nimport { FormsModule } from '@angular/forms';\nimport { NgModule } from '@angular/core';\nimport { ProgressSpinnerModule } from 'cax-design-system/progressspinner';\nimport { Button } from 'cax-design-system/button';\n\n@NgModule({\n declarations: [UploadComponent],\n imports: [CommonModule, FormsModule, ProgressSpinnerModule, Button],\n exports: [UploadComponent]\n})\nexport class UploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}