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-commentbox.mjs","sources":["../../src/app/components/commentbox/commentbox.ts","../../src/app/components/commentbox/commentbox.html","../../src/app/components/commentbox/commentbox.module.ts","../../src/app/components/commentbox/cax-design-system-commentbox.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, HostListener, NgZone } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n// Add this interface at the top of the file\ninterface Comment {\n text: string;\n date: Date;\n files?: Array<{ name: string; size: string }>;\n isAdmin?: boolean;\n sender?: string;\n}\n\ninterface GroupedComments {\n date: Date;\n items: Comment[];\n}\n\n@Component({\n selector: 'cax-comments',\n templateUrl: './commentbox.html',\n styleUrls: ['./commentbox.scss']\n})\nexport class CommentboxComponent {\n private _comments: Comment[] = [];\n @Input() set comments(value: Comment[]) {\n this._comments = Array.isArray(value) ? value : [];\n this.recomputeGroupedComments();\n }\n get comments(): Comment[] {\n return this._comments;\n }\n @Input() mentionSuggestions: any[] = [];\n @Input() hashtagSuggestions: any[] = [];\n @Input() sidebarHeader: string;\n @Input() isAdmin: boolean = true;\n @Input() placeholder: string = 'Comment or mention others with @, ‘#’ for columns';\n @Output() commentAdded = new EventEmitter<any>();\n @Output() fileSelected = new EventEmitter<File>();\n @Output() fileDownload = new EventEmitter<{ name: string; size: string }>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onSidebarHide = new EventEmitter<void>();\n newComment: string = '';\n\n isMentioning: boolean = false;\n isHashtagging: boolean = false;\n suggestions: any[] = [];\n selectedSuggestion: any = null;\n selectedSuggestionIndex: number = -1;\n filteredSuggestions: any[] = [];\n currentTokenType: 'mention' | 'hashtag' | null = null;\n cursorPosition: number = 0;\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild('suggestionPanel') suggestionPanel!: ElementRef;\n @ViewChild('inputText') inputText!: ElementRef;\n @ViewChild('commentsList') private commentsList!: ElementRef;\n @ViewChild('countChip') countChip!: ElementRef;\n selectedFiles: Array<{ name: string; size: string }> = [];\n selectedFilesMap: Map<number, { name: string; size: string }> = new Map();\n\n today: Date = new Date();\n groupedCommentsCache: GroupedComments[] = [];\n\n overlayVisible: boolean = false;\n filesOverlayVisible: boolean = false;\n overlayPosition = { top: 0, left: 0 };\n\n private dateUpdateInterval: any;\n\n // Keep track of should auto scroll\n private shouldAutoScroll = true;\n private isUserScrolling = false;\n\n // Add new property for mutation observer\n private observer: MutationObserver;\n private scrollQueued: boolean = false;\n\n constructor(\n private sanitizer: DomSanitizer,\n private ngZone: NgZone\n ) {\n this.updateCurrentDate();\n // Run the interval outside Angular to avoid frequent change detection in docs/canvas\n this.ngZone.runOutsideAngular(() => {\n this.dateUpdateInterval = setInterval(() => {\n this.ngZone.run(() => this.updateCurrentDate());\n }, 60000);\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.forceScrollToBottom();\n }, 100);\n\n // Set up observer to auto-scroll when content changes (outside Angular)\n if (this.commentsList?.nativeElement) {\n this.ngZone.runOutsideAngular(() => {\n this.observer = new MutationObserver(() => {\n if (this.scrollQueued) return;\n this.scrollQueued = true;\n requestAnimationFrame(() => {\n this.forceScrollToBottom();\n this.scrollQueued = false;\n });\n });\n this.observer.observe(this.commentsList.nativeElement, {\n childList: true\n });\n });\n }\n }\n\n ngOnDestroy() {\n if (this.dateUpdateInterval) {\n clearInterval(this.dateUpdateInterval);\n }\n // Disconnect the observer\n if (this.observer) this.observer.disconnect();\n\n // Remove event listeners\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private updateCurrentDate(): void {\n this.today = new Date();\n }\n\n formatDate(date: Date): string {\n return date.toLocaleDateString(undefined, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n });\n }\n\n formatMessageWithTags(text: string): SafeHtml {\n if (!text) return '';\n const sanitizedText = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n const htmlContent = sanitizedText.replace(/(@\\w+|#\\w+)/g, (match) => {\n if (match.startsWith('@')) {\n return `<span class=\"mention\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n } else if (match.startsWith('#')) {\n return `<span class=\"hashtag\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n }\n return match;\n });\n\n return this.sanitizer.bypassSecurityTrustHtml(htmlContent);\n }\n\n addComment() {\n if (this.newComment.trim() || this.selectedFiles.length > 0) {\n const newComment: Comment = {\n text: this.newComment,\n date: new Date(),\n files: this.selectedFiles.length > 0 ? [...this.selectedFiles] : undefined,\n isAdmin: this.isAdmin,\n sender: this.isAdmin ? 'System Admin' : 'User'\n };\n\n this.comments = [...this.comments, newComment];\n this.commentAdded.emit(newComment);\n this.newComment = '';\n this.selectedFiles = [];\n this.selectedFilesMap.clear();\n this.filesOverlayVisible = false;\n\n if (this.suggestionPanel?.nativeElement) {\n this.suggestionPanel.nativeElement.style.display = 'none';\n }\n\n // Always scroll to bottom immediately\n this.scrollToBottom(true);\n this.recomputeGroupedComments();\n }\n }\n\n private forceScrollToBottom(): void {\n if (!this.commentsList?.nativeElement) return;\n const element = this.commentsList.nativeElement;\n try {\n element.scrollTop = element.scrollHeight;\n } catch {\n // no-op\n }\n }\n\n private scrollToBottom(force = false): void {\n if (force) {\n this.forceScrollToBottom();\n return;\n }\n if (!this.commentsList?.nativeElement) return;\n\n const element = this.commentsList.nativeElement;\n\n // Single RAF to avoid nested scheduling overhead in Storybook\n requestAnimationFrame(() => {\n try {\n element.scrollTop = element.scrollHeight;\n element.scrollTo({ top: element.scrollHeight });\n } catch {\n element.scrollTop = element.scrollHeight;\n }\n });\n }\n\n @Input() set visible(value: boolean) {\n if (this._visible !== value) {\n this._visible = value;\n if (this._visible) {\n this.shouldAutoScroll = true;\n setTimeout(() => this.scrollToBottom(true), 300);\n }\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n private _visible: boolean = false;\n\n toggleComments() {\n if (this._visible) {\n this.hideComments();\n } else {\n this.showComments();\n }\n }\n\n showComments() {\n if (!this._visible) {\n this._visible = true;\n this.visibleChange.emit(true);\n this.shouldAutoScroll = true;\n setTimeout(() => this.scrollToBottom(true), 300);\n }\n }\n\n hideComments() {\n if (this._visible) {\n this._visible = false;\n this.visibleChange.emit(false);\n this.onSidebarHide.emit();\n }\n }\n\n handleSidebarHide() {\n this.hideComments();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n const isInputClick = this.inputText?.nativeElement?.contains(target);\n const isPanelClick = this.suggestionPanel?.nativeElement?.contains(target);\n\n if (!isInputClick && !isPanelClick) {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n }\n }\n\n handleKeyUp(event: any): void {\n // Update cursor position on every key press\n const input = event.target;\n this.cursorPosition = input.selectionStart || 0;\n\n if (event.key === 'Escape') {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n return;\n }\n\n if (event.key === '@' || event.key === '#') {\n this.currentTokenType = event.key === '@' ? 'mention' : 'hashtag';\n this.filteredSuggestions = this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n this.selectedSuggestionIndex = 0;\n\n const rect = input.getBoundingClientRect();\n const cursorPosition = this.getCursorPosition(input);\n\n this.overlayVisible = true;\n setTimeout(() => {\n const panel = this.suggestionPanel?.nativeElement;\n if (panel) {\n panel.style.left = `${rect.left + cursorPosition.left}px`;\n panel.style.top = `${rect.top - 10}px`;\n }\n });\n }\n\n if (this.currentTokenType) {\n const token = this.getTokenAtCursor(input.value, this.cursorPosition);\n if (token) {\n const searchTerm = token.slice(1).toLowerCase();\n this.filteredSuggestions = (this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions).filter((item) => item.name.toLowerCase().includes(searchTerm) || item.id.toLowerCase().includes(searchTerm));\n\n if (this.filteredSuggestions.length > 0) {\n this.overlayVisible = true;\n // Only reset selection index if we have new suggestions\n if (this.selectedSuggestionIndex < 0 || this.selectedSuggestionIndex >= this.filteredSuggestions.length) {\n this.selectedSuggestionIndex = 0;\n }\n } else {\n this.overlayVisible = false;\n this.selectedSuggestionIndex = -1;\n }\n } else {\n this.overlayVisible = false;\n this.currentTokenType = null;\n }\n }\n }\n\n getTokenAtCursor(text: string, cursorPos: number): string | null {\n const beforeCursor = text.slice(0, cursorPos);\n const match = beforeCursor.match(/[@#][^\\s]*$/);\n return match ? match[0] : null;\n }\n\n getWordAtPosition(text: string, position: number): string {\n const left = text.slice(0, position).search(/[@#][^\\s]*$/);\n if (left === -1) return '';\n return text.slice(left, position);\n }\n\n selectSuggestion(suggestion: any) {\n const input = this.newComment;\n const wordStart = input.slice(0, this.cursorPosition).search(/[@#][^\\s]*$/);\n\n this.newComment = input.slice(0, wordStart) + suggestion.value + ' ' + input.slice(this.cursorPosition);\n\n this.isMentioning = false;\n this.isHashtagging = false;\n }\n\n onSuggestionSelect(item: any) {\n const input = this.newComment;\n const beforeCursor = input.slice(0, this.cursorPosition);\n const afterCursor = input.slice(this.cursorPosition);\n const lastTokenIndex = Math.max(beforeCursor.lastIndexOf('@'), beforeCursor.lastIndexOf('#'));\n\n if (lastTokenIndex >= 0) {\n // Insert the suggestion at the cursor position\n this.newComment = beforeCursor.slice(0, lastTokenIndex) + item.id + ' ' + afterCursor;\n }\n\n this.suggestionPanel.nativeElement.style.display = 'none';\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n\n setTimeout(() => {\n const inputEl = this.inputText.nativeElement.querySelector('input');\n if (inputEl) {\n inputEl.focus();\n }\n });\n }\n\n onSuggestionPanelHide() {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n }\n\n getCursorPosition(input: HTMLInputElement): { left: number; top: number } {\n const selectionStart = input.selectionStart || 0;\n const textBeforeCursor = input.value.substring(0, selectionStart);\n const span = document.createElement('span');\n span.textContent = textBeforeCursor;\n span.style.cssText = window.getComputedStyle(input, null).cssText;\n span.style.visibility = 'hidden';\n document.body.appendChild(span);\n const position = {\n left: span.offsetWidth,\n top: span.offsetHeight\n };\n document.body.removeChild(span);\n return position;\n }\n\n onFileIconClick(event: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n if (this.fileInput?.nativeElement) {\n this.fileInput.nativeElement.click();\n }\n }\n\n onFileSelect(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n Array.from(input.files).forEach((file) => {\n // Check if file already exists in selection\n const fileExists = this.selectedFiles.some((existingFile) => existingFile.name === file.name && existingFile.size === this.formatFileSize(file.size));\n\n if (!fileExists) {\n const fileInfo = {\n name: file.name,\n size: this.formatFileSize(file.size)\n };\n this.selectedFiles.push(fileInfo);\n this.selectedFilesMap.set(this.selectedFiles.length - 1, fileInfo);\n this.fileSelected.emit(file);\n }\n });\n\n input.value = '';\n const inputEl = document.querySelector('.chat-input input');\n if (inputEl instanceof HTMLElement) {\n inputEl.focus();\n }\n }\n }\n\n private updateFileState(index: number, fromChip: boolean = true) {\n const actualIndex = fromChip ? index : index + 4;\n this.selectedFiles = this.selectedFiles.filter((_, i) => i !== actualIndex);\n this.selectedFilesMap.clear();\n this.selectedFiles.forEach((file, i) => {\n this.selectedFilesMap.set(i, file);\n });\n }\n\n removeFile(index: number, fromChip: boolean = true) {\n this.updateFileState(index, fromChip);\n if (this.selectedFiles.length <= 4) {\n this.hideFilesOverlay();\n }\n }\n\n getOverflowCount(): number {\n // Return count of files beyond the first 4\n return Math.max(0, this.selectedFiles.length - 4);\n }\n\n showFilesOverlay(event: MouseEvent) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n // Position the overlay below the count chip\n this.overlayPosition = {\n top: rect.bottom + 5,\n left: rect.left - 250 + rect.width / 2 // Center the overlay horizontally\n };\n\n this.filesOverlayVisible = true;\n\n // Add a click outside listener to close the overlay\n setTimeout(() => {\n document.addEventListener('click', this.handleClickOutside);\n });\n }\n\n hideFilesOverlay() {\n this.filesOverlayVisible = false;\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const overlay = document.querySelector('.files-overlay');\n const countChip = document.querySelector('.count-chip');\n\n if (overlay && !overlay.contains(target) && countChip && !countChip.contains(target)) {\n this.hideFilesOverlay();\n }\n };\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n showSuggestions(_event: any, type: 'mention' | 'hashtag') {\n this.currentTokenType = type;\n this.filteredSuggestions = type === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n if (this.suggestionPanel) {\n this.suggestionPanel.nativeElement.style.display = 'block';\n }\n }\n onKeyDown(event: KeyboardEvent) {\n // If suggestions are visible, handle keyboard navigation\n if (this.overlayVisible && this.filteredSuggestions.length > 0) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n this.scrollSuggestionIntoView();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n this.scrollSuggestionIntoView();\n break;\n case 'Tab':\n event.preventDefault();\n if (event.shiftKey) {\n // Shift+Tab - move up\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n } else {\n // Tab - move down\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n }\n this.scrollSuggestionIntoView();\n break;\n case 'Enter':\n event.preventDefault();\n if (this.selectedSuggestionIndex >= 0) {\n this.onSuggestionSelect(this.filteredSuggestions[this.selectedSuggestionIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.onSuggestionPanelHide();\n break;\n }\n return;\n }\n\n // If no suggestions are visible, handle normal enter key press\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.addComment();\n }\n }\n\n // Helper method to scroll the selected suggestion into view\n private scrollSuggestionIntoView(): void {\n setTimeout(() => {\n const suggestionList = this.suggestionPanel?.nativeElement.querySelector('.suggestion-list');\n const selectedItem = suggestionList?.querySelector('.suggestion-item.selected');\n\n if (suggestionList && selectedItem) {\n const listRect = suggestionList.getBoundingClientRect();\n const itemRect = selectedItem.getBoundingClientRect();\n\n // Check if the selected item is outside the visible area\n if (itemRect.bottom > listRect.bottom) {\n // Item is below the visible area\n selectedItem.scrollIntoView({ block: 'end', behavior: 'smooth' });\n } else if (itemRect.top < listRect.top) {\n // Item is above the visible area\n selectedItem.scrollIntoView({ block: 'start', behavior: 'smooth' });\n }\n }\n });\n }\n\n onFileDownload(file: { name: string; size: string }) {\n this.fileDownload.emit(file);\n }\n\n private recomputeGroupedComments(): void {\n const groups = this._comments.reduce((acc: GroupedComments[], comment: Comment) => {\n const commentDate = new Date(comment.date);\n commentDate.setHours(0, 0, 0, 0);\n\n const existingGroup = acc.find((group) => {\n const groupDate = new Date(group.date);\n groupDate.setHours(0, 0, 0, 0);\n return groupDate.getTime() === commentDate.getTime();\n });\n\n if (existingGroup) {\n existingGroup.items.push(comment);\n } else {\n acc.push({ date: commentDate, items: [comment] });\n }\n return acc;\n }, []);\n\n this.groupedCommentsCache = groups.sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n getShortFileName(filename: string): string {\n if (filename.length <= 4) return filename;\n\n // Get file extension\n const lastDotIndex = filename.lastIndexOf('.');\n const extension = lastDotIndex !== -1 ? filename.substring(lastDotIndex) : '';\n\n // Truncate the name part and add the extension\n const namePart = filename.substring(0, lastDotIndex !== -1 ? lastDotIndex : filename.length);\n return namePart.substring(0, 4) + '..' + extension;\n }\n}\n","<div *ngIf=\"visible\" class=\"cax-comments-wrapper\">\r\n <!-- <ng-template caxTemplate=\"content\"> -->\r\n <div class=\"cax-comments-container\">\r\n <div class=\"cax-comments-list\" #commentsList>\r\n <ng-container *ngFor=\"let group of groupedCommentsCache\">\r\n <div class=\"cax-date-header\">{{ formatDate(group.date) }}</div>\r\n <div\r\n class=\"cax-comment-item\"\r\n *ngFor=\"let comment of group.items; let i = index\"\r\n [ngClass]=\"{\r\n 'cax-user-comment': !comment.isAdmin,\r\n 'cax-admin-comment': comment.isAdmin,\r\n 'consecutive-message': i > 0 && comment.isAdmin === group.items[i-1].isAdmin && comment.sender === group.items[i-1].sender,\r\n 'new-sender': i > 0 && comment.sender !== group.items[i-1].sender,\r\n 'new-date': i === 0 && group.items.length > 0\r\n }\"\r\n >\r\n <!-- User Message (Left Aligned) -->\r\n <ng-container *ngIf=\"!comment.isAdmin\">\r\n <div class=\"cax-commentbox-avatar-container\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">\r\n <cax-avatar [label]=\"comment.sender?.substring(0, 2).toUpperCase() || 'U'\" [avatarSize]=\"'xs'\" [shape]=\"'circle'\" styleclass=\"cax-commentbox-avatar\"> </cax-avatar>\r\n </div>\r\n <div class=\"cax-comment-content\" [class.no-avatar]=\"i > 0 && group.items[i-1].sender === comment.sender\">\r\n <div class=\"cax-comment-sender\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">{{comment.sender}}</div>\r\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\r\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\r\n <div class=\"file-details\">\r\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\r\n <span class=\"file-size\">{{file.size}}</span>\r\n </div>\r\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\r\n </div>\r\n </div>\r\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\r\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Admin Message (Right Aligned) -->\r\n <ng-container *ngIf=\"comment.isAdmin\">\r\n <div class=\"cax-comment-content admin\">\r\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\r\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\r\n <div class=\"file-details\">\r\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\r\n <span class=\"file-size\">{{file.size}}</span>\r\n </div>\r\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\r\n </div>\r\n </div>\r\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\r\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <!-- </ng-template> -->\r\n <cax-overlay #suggestionPanel [(visible)]=\"overlayVisible\" [appendTo]=\"inputText\" (onHide)=\"onSuggestionPanelHide()\" [styleClass]=\"'suggestion-panel'\">\r\n <div class=\"suggestion-list\">\r\n <div *ngFor=\"let item of filteredSuggestions; let i = index\" class=\"suggestion-item\" [ngClass]=\"{'selected': selectedSuggestionIndex === i}\" (click)=\"onSuggestionSelect(item)\" (mouseenter)=\"selectedSuggestionIndex = i\">\r\n <span class=\"suggestion-label\">{{item.name}}</span>\r\n <small class=\"suggestion-id\" *ngIf=\"currentTokenType === 'mention'\">{{item.id}}</small>\r\n </div>\r\n </div>\r\n </cax-overlay>\r\n <cax-overlay\r\n [(visible)]=\"filesOverlayVisible\"\r\n [appendTo]=\"countChip\"\r\n [showTransitionOptions]=\"'0.12s ease-out'\"\r\n [hideTransitionOptions]=\"'0.1s ease-in'\"\r\n [style]=\"{ width: '224px', right: '5%' }\"\r\n styleClass=\"files-list-overlay\"\r\n (onHide)=\"hideFilesOverlay()\"\r\n >\r\n <div class=\"files-overlay-content\">\r\n <div *ngFor=\"let file of selectedFiles.slice(4); let i = index\" class=\"file-item\">\r\n <span class=\"file-name\">{{getShortFileName(file.name)}}</span>\r\n <i class=\"cax cax-close-circle\" (click)=\"removeFile(i + 4)\"></i>\r\n </div>\r\n </div>\r\n </cax-overlay>\r\n\r\n <!-- <ng-template caxTemplate=\"footer\"> -->\r\n <div class=\"chat-footer\">\r\n <div class=\"selected-files\" *ngIf=\"selectedFiles.length > 0\">\r\n <cax-chip *ngFor=\"let file of selectedFiles.slice(0, 4); let i = index\" [label]=\"getShortFileName(file.name)\" [removable]=\"true\" [size]=\"'lg'\" (onRemove)=\"removeFile(i, true)\">\r\n <ng-template caxTemplate=\"content\">\r\n <i class=\"cax cax-paperclip\"></i>\r\n </ng-template>\r\n </cax-chip>\r\n <cax-chip #countChip *ngIf=\"selectedFiles.length > 4\" [label]=\"'+' + getOverflowCount()\" [size]=\"'lg'\" (mouseenter)=\"showFilesOverlay($event)\"> </cax-chip>\r\n </div>\r\n <div class=\"cax-chat-input-container\">\r\n <div class=\"input-wrapper\">\r\n <cax-inputtext\r\n [(ngModel)]=\"newComment\"\r\n [size]=\"'lg'\"\r\n [rightIcon]=\"true\"\r\n [clearIcon]=\"false\"\r\n [rightIconClass]=\"'cax cax-paperclip'\"\r\n [rightIconClickable]=\"true\"\r\n (rightIconClick)=\"onFileIconClick($event)\"\r\n [placeholder]=\"placeholder\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [ngClass]=\"{'chat-input': true, 'admin-input': isAdmin}\"\r\n [style]=\"{'border-radius': '8px', background: '#ffffff'}\"\r\n #inputText\r\n >\r\n </cax-inputtext>\r\n </div>\r\n\r\n <cax-button [icon]=\"'cax cax-plain'\" [severity]=\"'primary'\" [size]=\"'large'\" (click)=\"addComment()\" [disabled]=\"!newComment.trim() && selectedFiles.length === 0\" class=\"send-button\"> </cax-button>\r\n </div>\r\n\r\n <input #fileInput type=\"file\" (change)=\"onFileSelect($event)\" style=\"display: none\" accept=\"*/*\" multiple />\r\n </div>\r\n <!-- </ng-template> -->\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { CommentboxComponent } from './commentbox';\nimport { InputTextModule } from 'cax-design-system/inputtext';\nimport { ButtonModule } from 'cax-design-system/button';\nimport { ChipModule } from 'cax-design-system/chip';\nimport { OverlayModule } from 'cax-design-system/overlay';\nimport { AvatarModule } from 'cax-design-system/avatar';\nimport { SharedModule } from 'cax-design-system/api';\nimport { RippleModule } from 'cax-design-system/ripple';\nimport { Sidebar } from 'cax-design-system/sidebar';\n\n@NgModule({\n declarations: [CommentboxComponent],\n imports: [CommonModule, FormsModule, Sidebar, InputTextModule, ButtonModule, ChipModule, OverlayModule, AvatarModule, RippleModule, SharedModule],\n exports: [CommentboxComponent]\n})\nexport class CommentboxModule {}\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-commentbox.mjs","sources":["../../src/app/components/commentbox/commentbox.ts","../../src/app/components/commentbox/commentbox.html","../../src/app/components/commentbox/commentbox.module.ts","../../src/app/components/commentbox/cax-design-system-commentbox.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, HostListener, NgZone } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n// Add this interface at the top of the file\ninterface Comment {\n text: string;\n date: Date;\n files?: Array<{ name: string; size: string }>;\n isAdmin?: boolean;\n sender?: string;\n}\n\ninterface GroupedComments {\n date: Date;\n items: Comment[];\n}\n\n@Component({\n selector: 'cax-comments',\n templateUrl: './commentbox.html',\n styleUrls: ['./commentbox.scss']\n})\nexport class CommentboxComponent {\n private _comments: Comment[] = [];\n @Input() set comments(value: Comment[]) {\n this._comments = Array.isArray(value) ? value : [];\n this.recomputeGroupedComments();\n }\n get comments(): Comment[] {\n return this._comments;\n }\n @Input() mentionSuggestions: any[] = [];\n @Input() hashtagSuggestions: any[] = [];\n @Input() sidebarHeader: string;\n @Input() isAdmin: boolean = true;\n @Input() placeholder: string = 'Comment or mention others with @, ‘#’ for columns';\n @Output() commentAdded = new EventEmitter<any>();\n @Output() fileSelected = new EventEmitter<File>();\n @Output() fileDownload = new EventEmitter<{ name: string; size: string }>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onSidebarHide = new EventEmitter<void>();\n newComment: string = '';\n\n isMentioning: boolean = false;\n isHashtagging: boolean = false;\n suggestions: any[] = [];\n selectedSuggestion: any = null;\n selectedSuggestionIndex: number = -1;\n filteredSuggestions: any[] = [];\n currentTokenType: 'mention' | 'hashtag' | null = null;\n cursorPosition: number = 0;\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild('suggestionPanel') suggestionPanel!: ElementRef;\n @ViewChild('inputText') inputText!: ElementRef;\n @ViewChild('commentsList') private commentsList!: ElementRef;\n @ViewChild('countChip') countChip!: ElementRef;\n selectedFiles: Array<{ name: string; size: string }> = [];\n selectedFilesMap: Map<number, { name: string; size: string }> = new Map();\n\n today: Date = new Date();\n groupedCommentsCache: GroupedComments[] = [];\n\n overlayVisible: boolean = false;\n filesOverlayVisible: boolean = false;\n overlayPosition = { top: 0, left: 0 };\n\n private dateUpdateInterval: any;\n\n // Keep track of should auto scroll\n private shouldAutoScroll = true;\n private isUserScrolling = false;\n\n // Add new property for mutation observer\n private observer: MutationObserver;\n private scrollQueued: boolean = false;\n\n constructor(\n private sanitizer: DomSanitizer,\n private ngZone: NgZone\n ) {\n this.updateCurrentDate();\n // Run the interval outside Angular to avoid frequent change detection in docs/canvas\n this.ngZone.runOutsideAngular(() => {\n this.dateUpdateInterval = setInterval(() => {\n this.ngZone.run(() => this.updateCurrentDate());\n }, 60000);\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.forceScrollToBottom();\n }, 100);\n\n // Set up observer to auto-scroll when content changes (outside Angular)\n if (this.commentsList?.nativeElement) {\n this.ngZone.runOutsideAngular(() => {\n this.observer = new MutationObserver(() => {\n if (this.scrollQueued) return;\n this.scrollQueued = true;\n requestAnimationFrame(() => {\n this.forceScrollToBottom();\n this.scrollQueued = false;\n });\n });\n this.observer.observe(this.commentsList.nativeElement, {\n childList: true\n });\n });\n }\n }\n\n ngOnDestroy() {\n if (this.dateUpdateInterval) {\n clearInterval(this.dateUpdateInterval);\n }\n // Disconnect the observer\n if (this.observer) this.observer.disconnect();\n\n // Remove event listeners\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private updateCurrentDate(): void {\n this.today = new Date();\n }\n\n formatDate(date: Date): string {\n return date.toLocaleDateString(undefined, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n });\n }\n\n formatMessageWithTags(text: string): SafeHtml {\n if (!text) return '';\n const sanitizedText = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n const htmlContent = sanitizedText.replace(/(@\\w+|#\\w+)/g, (match) => {\n if (match.startsWith('@')) {\n return `<span class=\"mention\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n } else if (match.startsWith('#')) {\n return `<span class=\"hashtag\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n }\n return match;\n });\n\n return this.sanitizer.bypassSecurityTrustHtml(htmlContent);\n }\n\n addComment() {\n if (this.newComment.trim() || this.selectedFiles.length > 0) {\n const newComment: Comment = {\n text: this.newComment,\n date: new Date(),\n files: this.selectedFiles.length > 0 ? [...this.selectedFiles] : undefined,\n isAdmin: this.isAdmin,\n sender: this.isAdmin ? 'System Admin' : 'User'\n };\n\n this.comments = [...this.comments, newComment];\n this.commentAdded.emit(newComment);\n this.newComment = '';\n this.selectedFiles = [];\n this.selectedFilesMap.clear();\n this.filesOverlayVisible = false;\n\n if (this.suggestionPanel?.nativeElement) {\n this.suggestionPanel.nativeElement.style.display = 'none';\n }\n\n // Always scroll to bottom immediately\n this.scrollToBottom(true);\n this.recomputeGroupedComments();\n }\n }\n\n private forceScrollToBottom(): void {\n if (!this.commentsList?.nativeElement) return;\n const element = this.commentsList.nativeElement;\n try {\n element.scrollTop = element.scrollHeight;\n } catch {\n // no-op\n }\n }\n\n private scrollToBottom(force = false): void {\n if (force) {\n this.forceScrollToBottom();\n return;\n }\n if (!this.commentsList?.nativeElement) return;\n\n const element = this.commentsList.nativeElement;\n\n // Single RAF to avoid nested scheduling overhead in Storybook\n requestAnimationFrame(() => {\n try {\n element.scrollTop = element.scrollHeight;\n element.scrollTo({ top: element.scrollHeight });\n } catch {\n element.scrollTop = element.scrollHeight;\n }\n });\n }\n\n @Input() set visible(value: boolean) {\n if (this._visible !== value) {\n this._visible = value;\n if (this._visible) {\n this.shouldAutoScroll = true;\n setTimeout(() => this.scrollToBottom(true), 300);\n }\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n private _visible: boolean = false;\n\n toggleComments() {\n if (this._visible) {\n this.hideComments();\n } else {\n this.showComments();\n }\n }\n\n showComments() {\n if (!this._visible) {\n this._visible = true;\n this.visibleChange.emit(true);\n this.shouldAutoScroll = true;\n setTimeout(() => this.scrollToBottom(true), 300);\n }\n }\n\n hideComments() {\n if (this._visible) {\n this._visible = false;\n this.visibleChange.emit(false);\n this.onSidebarHide.emit();\n }\n }\n\n handleSidebarHide() {\n this.hideComments();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n const isInputClick = this.inputText?.nativeElement?.contains(target);\n const isPanelClick = this.suggestionPanel?.nativeElement?.contains(target);\n\n if (!isInputClick && !isPanelClick) {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n }\n }\n\n handleKeyUp(event: any): void {\n // Update cursor position on every key press\n const input = event.target;\n this.cursorPosition = input.selectionStart || 0;\n\n if (event.key === 'Escape') {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n return;\n }\n\n if (event.key === '@' || event.key === '#') {\n this.currentTokenType = event.key === '@' ? 'mention' : 'hashtag';\n this.filteredSuggestions = this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n this.selectedSuggestionIndex = 0;\n\n const rect = input.getBoundingClientRect();\n const cursorPosition = this.getCursorPosition(input);\n\n this.overlayVisible = true;\n setTimeout(() => {\n const panel = this.suggestionPanel?.nativeElement;\n if (panel) {\n panel.style.left = `${rect.left + cursorPosition.left}px`;\n panel.style.top = `${rect.top - 10}px`;\n }\n });\n }\n\n if (this.currentTokenType) {\n const token = this.getTokenAtCursor(input.value, this.cursorPosition);\n if (token) {\n const searchTerm = token.slice(1).toLowerCase();\n this.filteredSuggestions = (this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions).filter((item) => item.name.toLowerCase().includes(searchTerm) || item.id.toLowerCase().includes(searchTerm));\n\n if (this.filteredSuggestions.length > 0) {\n this.overlayVisible = true;\n // Only reset selection index if we have new suggestions\n if (this.selectedSuggestionIndex < 0 || this.selectedSuggestionIndex >= this.filteredSuggestions.length) {\n this.selectedSuggestionIndex = 0;\n }\n } else {\n this.overlayVisible = false;\n this.selectedSuggestionIndex = -1;\n }\n } else {\n this.overlayVisible = false;\n this.currentTokenType = null;\n }\n }\n }\n\n getTokenAtCursor(text: string, cursorPos: number): string | null {\n const beforeCursor = text.slice(0, cursorPos);\n const match = beforeCursor.match(/[@#][^\\s]*$/);\n return match ? match[0] : null;\n }\n\n getWordAtPosition(text: string, position: number): string {\n const left = text.slice(0, position).search(/[@#][^\\s]*$/);\n if (left === -1) return '';\n return text.slice(left, position);\n }\n\n selectSuggestion(suggestion: any) {\n const input = this.newComment;\n const wordStart = input.slice(0, this.cursorPosition).search(/[@#][^\\s]*$/);\n\n this.newComment = input.slice(0, wordStart) + suggestion.value + ' ' + input.slice(this.cursorPosition);\n\n this.isMentioning = false;\n this.isHashtagging = false;\n }\n\n onSuggestionSelect(item: any) {\n const input = this.newComment;\n const beforeCursor = input.slice(0, this.cursorPosition);\n const afterCursor = input.slice(this.cursorPosition);\n const lastTokenIndex = Math.max(beforeCursor.lastIndexOf('@'), beforeCursor.lastIndexOf('#'));\n\n if (lastTokenIndex >= 0) {\n // Insert the suggestion at the cursor position\n this.newComment = beforeCursor.slice(0, lastTokenIndex) + item.id + ' ' + afterCursor;\n }\n\n this.suggestionPanel.nativeElement.style.display = 'none';\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n\n setTimeout(() => {\n const inputEl = this.inputText.nativeElement.querySelector('input');\n if (inputEl) {\n inputEl.focus();\n }\n });\n }\n\n onSuggestionPanelHide() {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n }\n\n getCursorPosition(input: HTMLInputElement): { left: number; top: number } {\n const selectionStart = input.selectionStart || 0;\n const textBeforeCursor = input.value.substring(0, selectionStart);\n const span = document.createElement('span');\n span.textContent = textBeforeCursor;\n span.style.cssText = window.getComputedStyle(input, null).cssText;\n span.style.visibility = 'hidden';\n document.body.appendChild(span);\n const position = {\n left: span.offsetWidth,\n top: span.offsetHeight\n };\n document.body.removeChild(span);\n return position;\n }\n\n onFileIconClick(event: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n if (this.fileInput?.nativeElement) {\n this.fileInput.nativeElement.click();\n }\n }\n\n onFileSelect(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n Array.from(input.files).forEach((file) => {\n // Check if file already exists in selection\n const fileExists = this.selectedFiles.some((existingFile) => existingFile.name === file.name && existingFile.size === this.formatFileSize(file.size));\n\n if (!fileExists) {\n const fileInfo = {\n name: file.name,\n size: this.formatFileSize(file.size)\n };\n this.selectedFiles.push(fileInfo);\n this.selectedFilesMap.set(this.selectedFiles.length - 1, fileInfo);\n this.fileSelected.emit(file);\n }\n });\n\n input.value = '';\n const inputEl = document.querySelector('.chat-input input');\n if (inputEl instanceof HTMLElement) {\n inputEl.focus();\n }\n }\n }\n\n private updateFileState(index: number, fromChip: boolean = true) {\n const actualIndex = fromChip ? index : index + 4;\n this.selectedFiles = this.selectedFiles.filter((_, i) => i !== actualIndex);\n this.selectedFilesMap.clear();\n this.selectedFiles.forEach((file, i) => {\n this.selectedFilesMap.set(i, file);\n });\n }\n\n removeFile(index: number, fromChip: boolean = true) {\n this.updateFileState(index, fromChip);\n if (this.selectedFiles.length <= 4) {\n this.hideFilesOverlay();\n }\n }\n\n getOverflowCount(): number {\n // Return count of files beyond the first 4\n return Math.max(0, this.selectedFiles.length - 4);\n }\n\n showFilesOverlay(event: MouseEvent) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n // Position the overlay below the count chip\n this.overlayPosition = {\n top: rect.bottom + 5,\n left: rect.left - 250 + rect.width / 2 // Center the overlay horizontally\n };\n\n this.filesOverlayVisible = true;\n\n // Add a click outside listener to close the overlay\n setTimeout(() => {\n document.addEventListener('click', this.handleClickOutside);\n });\n }\n\n hideFilesOverlay() {\n this.filesOverlayVisible = false;\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const overlay = document.querySelector('.files-overlay');\n const countChip = document.querySelector('.count-chip');\n\n if (overlay && !overlay.contains(target) && countChip && !countChip.contains(target)) {\n this.hideFilesOverlay();\n }\n };\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n showSuggestions(_event: any, type: 'mention' | 'hashtag') {\n this.currentTokenType = type;\n this.filteredSuggestions = type === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n if (this.suggestionPanel) {\n this.suggestionPanel.nativeElement.style.display = 'block';\n }\n }\n onKeyDown(event: KeyboardEvent) {\n // If suggestions are visible, handle keyboard navigation\n if (this.overlayVisible && this.filteredSuggestions.length > 0) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n this.scrollSuggestionIntoView();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n this.scrollSuggestionIntoView();\n break;\n case 'Tab':\n event.preventDefault();\n if (event.shiftKey) {\n // Shift+Tab - move up\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n } else {\n // Tab - move down\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n }\n this.scrollSuggestionIntoView();\n break;\n case 'Enter':\n event.preventDefault();\n if (this.selectedSuggestionIndex >= 0) {\n this.onSuggestionSelect(this.filteredSuggestions[this.selectedSuggestionIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.onSuggestionPanelHide();\n break;\n }\n return;\n }\n\n // If no suggestions are visible, handle normal enter key press\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.addComment();\n }\n }\n\n // Helper method to scroll the selected suggestion into view\n private scrollSuggestionIntoView(): void {\n setTimeout(() => {\n const suggestionList = this.suggestionPanel?.nativeElement.querySelector('.suggestion-list');\n const selectedItem = suggestionList?.querySelector('.suggestion-item.selected');\n\n if (suggestionList && selectedItem) {\n const listRect = suggestionList.getBoundingClientRect();\n const itemRect = selectedItem.getBoundingClientRect();\n\n // Check if the selected item is outside the visible area\n if (itemRect.bottom > listRect.bottom) {\n // Item is below the visible area\n selectedItem.scrollIntoView({ block: 'end', behavior: 'smooth' });\n } else if (itemRect.top < listRect.top) {\n // Item is above the visible area\n selectedItem.scrollIntoView({ block: 'start', behavior: 'smooth' });\n }\n }\n });\n }\n\n onFileDownload(file: { name: string; size: string }) {\n this.fileDownload.emit(file);\n }\n\n private recomputeGroupedComments(): void {\n const groups = this._comments.reduce((acc: GroupedComments[], comment: Comment) => {\n const commentDate = new Date(comment.date);\n commentDate.setHours(0, 0, 0, 0);\n\n const existingGroup = acc.find((group) => {\n const groupDate = new Date(group.date);\n groupDate.setHours(0, 0, 0, 0);\n return groupDate.getTime() === commentDate.getTime();\n });\n\n if (existingGroup) {\n existingGroup.items.push(comment);\n } else {\n acc.push({ date: commentDate, items: [comment] });\n }\n return acc;\n }, []);\n\n this.groupedCommentsCache = groups.sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n getShortFileName(filename: string): string {\n if (filename.length <= 4) return filename;\n\n // Get file extension\n const lastDotIndex = filename.lastIndexOf('.');\n const extension = lastDotIndex !== -1 ? filename.substring(lastDotIndex) : '';\n\n // Truncate the name part and add the extension\n const namePart = filename.substring(0, lastDotIndex !== -1 ? lastDotIndex : filename.length);\n return namePart.substring(0, 4) + '..' + extension;\n }\n}\n","<div *ngIf=\"visible\" class=\"cax-comments-wrapper\">\n <!-- <ng-template caxTemplate=\"content\"> -->\n <div class=\"cax-comments-container\">\n <div class=\"cax-comments-list\" #commentsList>\n <ng-container *ngFor=\"let group of groupedCommentsCache\">\n <div class=\"cax-date-header\">{{ formatDate(group.date) }}</div>\n <div\n class=\"cax-comment-item\"\n *ngFor=\"let comment of group.items; let i = index\"\n [ngClass]=\"{\n 'cax-user-comment': !comment.isAdmin,\n 'cax-admin-comment': comment.isAdmin,\n 'consecutive-message': i > 0 && comment.isAdmin === group.items[i-1].isAdmin && comment.sender === group.items[i-1].sender,\n 'new-sender': i > 0 && comment.sender !== group.items[i-1].sender,\n 'new-date': i === 0 && group.items.length > 0\n }\"\n >\n <!-- User Message (Left Aligned) -->\n <ng-container *ngIf=\"!comment.isAdmin\">\n <div class=\"cax-commentbox-avatar-container\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">\n <cax-avatar [label]=\"comment.sender?.substring(0, 2).toUpperCase() || 'U'\" [avatarSize]=\"'xs'\" [shape]=\"'circle'\" styleclass=\"cax-commentbox-avatar\"> </cax-avatar>\n </div>\n <div class=\"cax-comment-content\" [class.no-avatar]=\"i > 0 && group.items[i-1].sender === comment.sender\">\n <div class=\"cax-comment-sender\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">{{comment.sender}}</div>\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\n <div class=\"file-details\">\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\n <span class=\"file-size\">{{file.size}}</span>\n </div>\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\n </div>\n </div>\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\n </div>\n </ng-container>\n\n <!-- Admin Message (Right Aligned) -->\n <ng-container *ngIf=\"comment.isAdmin\">\n <div class=\"cax-comment-content admin\">\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\n <div class=\"file-details\">\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\n <span class=\"file-size\">{{file.size}}</span>\n </div>\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\n </div>\n </div>\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n <!-- </ng-template> -->\n <cax-overlay #suggestionPanel [(visible)]=\"overlayVisible\" [appendTo]=\"inputText\" (onHide)=\"onSuggestionPanelHide()\" [styleClass]=\"'suggestion-panel'\">\n <div class=\"suggestion-list\">\n <div *ngFor=\"let item of filteredSuggestions; let i = index\" class=\"suggestion-item\" [ngClass]=\"{'selected': selectedSuggestionIndex === i}\" (click)=\"onSuggestionSelect(item)\" (mouseenter)=\"selectedSuggestionIndex = i\">\n <span class=\"suggestion-label\">{{item.name}}</span>\n <small class=\"suggestion-id\" *ngIf=\"currentTokenType === 'mention'\">{{item.id}}</small>\n </div>\n </div>\n </cax-overlay>\n <cax-overlay\n [(visible)]=\"filesOverlayVisible\"\n [appendTo]=\"countChip\"\n [showTransitionOptions]=\"'0.12s ease-out'\"\n [hideTransitionOptions]=\"'0.1s ease-in'\"\n [style]=\"{ width: '224px', right: '5%' }\"\n styleClass=\"files-list-overlay\"\n (onHide)=\"hideFilesOverlay()\"\n >\n <div class=\"files-overlay-content\">\n <div *ngFor=\"let file of selectedFiles.slice(4); let i = index\" class=\"file-item\">\n <span class=\"file-name\">{{getShortFileName(file.name)}}</span>\n <i class=\"cax cax-close-circle\" (click)=\"removeFile(i + 4)\"></i>\n </div>\n </div>\n </cax-overlay>\n\n <!-- <ng-template caxTemplate=\"footer\"> -->\n <div class=\"chat-footer\">\n <div class=\"selected-files\" *ngIf=\"selectedFiles.length > 0\">\n <cax-chip *ngFor=\"let file of selectedFiles.slice(0, 4); let i = index\" [label]=\"getShortFileName(file.name)\" [removable]=\"true\" [size]=\"'lg'\" (onRemove)=\"removeFile(i, true)\">\n <ng-template caxTemplate=\"content\">\n <i class=\"cax cax-paperclip\"></i>\n </ng-template>\n </cax-chip>\n <cax-chip #countChip *ngIf=\"selectedFiles.length > 4\" [label]=\"'+' + getOverflowCount()\" [size]=\"'lg'\" (mouseenter)=\"showFilesOverlay($event)\"> </cax-chip>\n </div>\n <div class=\"cax-chat-input-container\">\n <div class=\"input-wrapper\">\n <cax-inputtext\n [(ngModel)]=\"newComment\"\n [size]=\"'lg'\"\n [rightIcon]=\"true\"\n [clearIcon]=\"false\"\n [rightIconClass]=\"'cax cax-paperclip'\"\n [rightIconClickable]=\"true\"\n (rightIconClick)=\"onFileIconClick($event)\"\n [placeholder]=\"placeholder\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"onKeyDown($event)\"\n [ngClass]=\"{'chat-input': true, 'admin-input': isAdmin}\"\n [style]=\"{'border-radius': '8px', background: '#ffffff'}\"\n #inputText\n >\n </cax-inputtext>\n </div>\n\n <cax-button [icon]=\"'cax cax-plain'\" [severity]=\"'primary'\" [size]=\"'large'\" (click)=\"addComment()\" [disabled]=\"!newComment.trim() && selectedFiles.length === 0\" class=\"send-button\"> </cax-button>\n </div>\n\n <input #fileInput type=\"file\" (change)=\"onFileSelect($event)\" style=\"display: none\" accept=\"*/*\" multiple />\n </div>\n <!-- </ng-template> -->\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { CommentboxComponent } from './commentbox';\nimport { InputTextModule } from 'cax-design-system/inputtext';\nimport { ButtonModule } from 'cax-design-system/button';\nimport { ChipModule } from 'cax-design-system/chip';\nimport { OverlayModule } from 'cax-design-system/overlay';\nimport { AvatarModule } from 'cax-design-system/avatar';\nimport { SharedModule } from 'cax-design-system/api';\nimport { RippleModule } from 'cax-design-system/ripple';\nimport { Sidebar } from 'cax-design-system/sidebar';\n\n@NgModule({\n declarations: [CommentboxComponent],\n imports: [CommonModule, FormsModule, Sidebar, InputTextModule, ButtonModule, ChipModule, OverlayModule, AvatarModule, RippleModule, SharedModule],\n exports: [CommentboxComponent]\n})\nexport class CommentboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -616,13 +616,13 @@ class ConfirmDialog {
616
616
  return this.option('rejectLabel') || this.config.getTranslation(TranslationKeys.REJECT);
617
617
  }
618
618
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ConfirmDialog, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ConfirmationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.caxConfig }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
619
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ConfirmDialog, selector: "cax-confirmDialog", inputs: { header: "header", icon: "icon", message: "message", style: "style", styleClass: "styleClass", maskStyleClass: "maskStyleClass", acceptIcon: "acceptIcon", acceptLabel: "acceptLabel", closeAriaLabel: "closeAriaLabel", acceptAriaLabel: "acceptAriaLabel", acceptVisible: ["acceptVisible", "acceptVisible", booleanAttribute], rejectIcon: "rejectIcon", rejectLabel: "rejectLabel", rejectAriaLabel: "rejectAriaLabel", rejectVisible: ["rejectVisible", "rejectVisible", booleanAttribute], acceptButtonStyleClass: "acceptButtonStyleClass", rejectButtonStyleClass: "rejectButtonStyleClass", closeOnEscape: ["closeOnEscape", "closeOnEscape", booleanAttribute], dismissableMask: ["dismissableMask", "dismissableMask", booleanAttribute], blockScroll: ["blockScroll", "blockScroll", booleanAttribute], rtl: ["rtl", "rtl", booleanAttribute], closable: ["closable", "closable", booleanAttribute], appendTo: "appendTo", key: "key", autoZIndex: ["autoZIndex", "autoZIndex", booleanAttribute], baseZIndex: ["baseZIndex", "baseZIndex", numberAttribute], transitionOptions: "transitionOptions", focusTrap: ["focusTrap", "focusTrap", booleanAttribute], defaultFocus: "defaultFocus", breakpoints: "breakpoints", headerIcon: "headerIcon", headerIconStyle: "headerIconStyle", showCheckbox: "showCheckbox", checkboxLabel: "checkboxLabel", showCancelButton: "showCancelButton", showAcceptButton: "showAcceptButton", visible: "visible", position: "position" }, outputs: { onHide: "onHide" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "footer", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div [class]=\"maskStyleClass\" [ngClass]=\"getMaskClass()\" *ngIf=\"maskVisible\">\r\n <div\r\n [ngClass]=\"{ 'cax-dialog cax-confirm-dialog cax-component': true, 'cax-dialog-rtl': rtl }\"\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n [@animation]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\r\n (@animation.start)=\"onAnimationStart($event)\"\r\n (@animation.done)=\"onAnimationEnd($event)\"\r\n role=\"alertdialog\"\r\n *ngIf=\"visible\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-modal]=\"true\"\r\n >\r\n <ng-container *ngIf=\"headlessTemplate; else notHeadless\">\r\n <ng-container *ngTemplateOutlet=\"headlessTemplate; context: { $implicit: confirmation }\"></ng-container>\r\n </ng-container>\r\n <ng-template #notHeadless>\r\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"headerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n </div>\r\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"!headerTemplate\">\r\n <div class=\"cax-header-allign\">\r\n <span *ngIf=\"isHeaderIcon\"><i [class]=\"computedHeaderIcon\" [ngStyle]=\"computedHeaderIconStyle\" style=\"display: flex\" class=\"cax-dialog-header-icon\"></i></span>\r\n <span class=\"cax-dialog-title\" [id]=\"ariaLabelledBy\" *ngIf=\"option('header')\">{{ option('header') }}</span>\r\n </div>\r\n <div class=\"cax-dialog-header-icons\">\r\n <button *ngIf=\"isClosable\" type=\"button\" role=\"button\" [attr.aria-label]=\"closeAriaLabel\" [ngClass]=\"{ 'cax-dialog-header-icon cax-dialog-header-close cax-link': true }\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\">\r\n <TimesIcon />\r\n </button>\r\n </div>\r\n </div>\r\n <div #content class=\"cax-dialog-content cax-confirm-dialog-content\">\r\n <i [ngClass]=\"'cax-confirm-dialog-icon'\" [class]=\"option('icon')\" *ngIf=\"!iconTemplate && option('icon')\"></i>\r\n <ng-container *ngIf=\"iconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"iconTemplate\"></ng-template>\r\n </ng-container>\r\n <span class=\"cax-confirm-dialog-message\" *ngIf=\"!messageTemplate\" [innerHTML]=\"option('message')\"></span>\r\n <ng-container *ngIf=\"messageTemplate\">\r\n <ng-template *ngTemplateOutlet=\"messageTemplate; context: { $implicit: confirmation }\"></ng-template>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"isShowCheckbox\" class=\"cax-dialog-checkbox\">\r\n <cax-checkbox [disabled]=\"false\" [model]=\"model\" [label]=\"checkboxLabel\" binary=\"true\" (onChange)=\"onChange($event)\"></cax-checkbox>\r\n </div>\r\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"footer || footerTemplate\">\r\n <ng-content select=\"cax-footer\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n </div>\r\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"!footer && !footerTemplate\">\r\n <span *ngIf=\"showCancelButton\" class=\"cax-button-container\">\r\n <button\r\n type=\"button\"\r\n caxRipple\r\n caxButton\r\n [label]=\"rejectButtonLabel\"\r\n [icon]=\"rejectIcon\"\r\n (click)=\"reject()\"\r\n [ngClass]=\"'cax-confirm-dialog-reject'\"\r\n [class]=\"option('rejectButtonStyleClass')\"\r\n *ngIf=\"option('rejectVisible')\"\r\n [attr.aria-label]=\"rejectAriaLabel\"\r\n >\r\n <!-- <ng-container *ngIf=\"!rejectIconTemplate\">\r\n <i *ngIf=\"option('rejectIcon')\" [class]=\"option('rejectIcon')\"></i>\r\n <TimesIcon *ngIf=\"!option('rejectIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\r\n </ng-container> -->\r\n <span *ngIf=\"rejectIconTemplate\" class=\"cax-button-icon-left\">\r\n <ng-template *ngTemplateOutlet=\"rejectIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n </span>\r\n <span *ngIf=\"showAcceptButton\" class=\"cax-button-container\">\r\n <button\r\n type=\"button\"\r\n caxRipple\r\n caxButton\r\n [label]=\"acceptButtonLabel\"\r\n [icon]=\"acceptIcon\"\r\n (click)=\"accept()\"\r\n [ngClass]=\"'cax-confirm-dialog-accept'\"\r\n [class]=\"option('acceptButtonStyleClass')\"\r\n *ngIf=\"option('acceptVisible')\"\r\n [attr.aria-label]=\"acceptAriaLabel\"\r\n >\r\n <!-- <ng-container *ngIf=\"!acceptIconTemplate\">\r\n <i *ngIf=\"option('acceptIcon')\" [class]=\"option('acceptIcon')\"></i>\r\n <CheckIcon *ngIf=\"!option('acceptIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\r\n </ng-container> -->\r\n <span *ngIf=\"acceptIconTemplate\" class=\"cax-button-icon-left\">\r\n <ng-template *ngTemplateOutlet=\"acceptIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cax-dialog-mask.cax-component-overlay{pointer-events:auto}.cax-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.cax-dialog-content{overflow-y:auto;flex-grow:1}.cax-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;flex-shrink:0}.cax-dialog-draggable .cax-dialog-header{cursor:move}.cax-dialog-footer{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.cax-button-container{display:inline-flex;align-items:center}.cax-dialog .cax-dialog-header-icons{display:flex;align-items:center}.cax-dialog .cax-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-fluid .cax-dialog-footer .cax-button{width:auto}.cax-dialog-top .cax-dialog,.cax-dialog-bottom .cax-dialog,.cax-dialog-left .cax-dialog,.cax-dialog-right .cax-dialog,.cax-dialog-top-left .cax-dialog,.cax-dialog-top-right .cax-dialog,.cax-dialog-bottom-left .cax-dialog,.cax-dialog-bottom-right .cax-dialog{margin:.75rem;transform:translateZ(0)}.cax-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cax-dialog-maximized .cax-dialog-content{flex-grow:1}.cax-dialog-left{justify-content:flex-start}.cax-dialog-right{justify-content:flex-end}.cax-dialog-top{align-items:flex-start}.cax-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cax-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cax-dialog-bottom{align-items:flex-end}.cax-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cax-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cax-dialog .cax-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.cax-header-allign{display:flex;align-items:center}.cax-dialog-header-icon{font-size:1.25rem}.cax-confirm-dialog .cax-dialog-content{display:flex;align-items:center}.cax-dialog-content .cax-dialog-checkbox{display:block;margin-top:1rem}.cax-dialog-checkbox input[type=checkbox]{margin-right:.5rem}.cax-header-align{display:flex;align-items:center}.cax-dialog-title{margin-left:10px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[caxButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "link"] }, { kind: "directive", type: i4.Ripple, selector: "[caxRipple]" }, { kind: "component", type: i5.TimesIcon, selector: "TimesIcon" }, { kind: "component", type: i6.Checkbox, selector: "cax-checkbox", inputs: ["size", "value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant", "indeterminate", "model"], outputs: ["indeterminateChange", "onChange", "onFocus", "onBlur"] }], animations: [trigger('animation', [transition('void => visible', [useAnimation(showAnimation)]), transition('visible => void', [useAnimation(hideAnimation)])])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
619
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ConfirmDialog, selector: "cax-confirmDialog", inputs: { header: "header", icon: "icon", message: "message", style: "style", styleClass: "styleClass", maskStyleClass: "maskStyleClass", acceptIcon: "acceptIcon", acceptLabel: "acceptLabel", closeAriaLabel: "closeAriaLabel", acceptAriaLabel: "acceptAriaLabel", acceptVisible: ["acceptVisible", "acceptVisible", booleanAttribute], rejectIcon: "rejectIcon", rejectLabel: "rejectLabel", rejectAriaLabel: "rejectAriaLabel", rejectVisible: ["rejectVisible", "rejectVisible", booleanAttribute], acceptButtonStyleClass: "acceptButtonStyleClass", rejectButtonStyleClass: "rejectButtonStyleClass", closeOnEscape: ["closeOnEscape", "closeOnEscape", booleanAttribute], dismissableMask: ["dismissableMask", "dismissableMask", booleanAttribute], blockScroll: ["blockScroll", "blockScroll", booleanAttribute], rtl: ["rtl", "rtl", booleanAttribute], closable: ["closable", "closable", booleanAttribute], appendTo: "appendTo", key: "key", autoZIndex: ["autoZIndex", "autoZIndex", booleanAttribute], baseZIndex: ["baseZIndex", "baseZIndex", numberAttribute], transitionOptions: "transitionOptions", focusTrap: ["focusTrap", "focusTrap", booleanAttribute], defaultFocus: "defaultFocus", breakpoints: "breakpoints", headerIcon: "headerIcon", headerIconStyle: "headerIconStyle", showCheckbox: "showCheckbox", checkboxLabel: "checkboxLabel", showCancelButton: "showCancelButton", showAcceptButton: "showAcceptButton", visible: "visible", position: "position" }, outputs: { onHide: "onHide" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "footer", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div [class]=\"maskStyleClass\" [ngClass]=\"getMaskClass()\" *ngIf=\"maskVisible\">\n <div\n [ngClass]=\"{ 'cax-dialog cax-confirm-dialog cax-component': true, 'cax-dialog-rtl': rtl }\"\n [ngStyle]=\"style\"\n [class]=\"styleClass\"\n [@animation]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"alertdialog\"\n *ngIf=\"visible\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-modal]=\"true\"\n >\n <ng-container *ngIf=\"headlessTemplate; else notHeadless\">\n <ng-container *ngTemplateOutlet=\"headlessTemplate; context: { $implicit: confirmation }\"></ng-container>\n </ng-container>\n <ng-template #notHeadless>\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </div>\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"!headerTemplate\">\n <div class=\"cax-header-allign\">\n <span *ngIf=\"isHeaderIcon\"><i [class]=\"computedHeaderIcon\" [ngStyle]=\"computedHeaderIconStyle\" style=\"display: flex\" class=\"cax-dialog-header-icon\"></i></span>\n <span class=\"cax-dialog-title\" [id]=\"ariaLabelledBy\" *ngIf=\"option('header')\">{{ option('header') }}</span>\n </div>\n <div class=\"cax-dialog-header-icons\">\n <button *ngIf=\"isClosable\" type=\"button\" role=\"button\" [attr.aria-label]=\"closeAriaLabel\" [ngClass]=\"{ 'cax-dialog-header-icon cax-dialog-header-close cax-link': true }\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\">\n <TimesIcon />\n </button>\n </div>\n </div>\n <div #content class=\"cax-dialog-content cax-confirm-dialog-content\">\n <i [ngClass]=\"'cax-confirm-dialog-icon'\" [class]=\"option('icon')\" *ngIf=\"!iconTemplate && option('icon')\"></i>\n <ng-container *ngIf=\"iconTemplate\">\n <ng-template *ngTemplateOutlet=\"iconTemplate\"></ng-template>\n </ng-container>\n <span class=\"cax-confirm-dialog-message\" *ngIf=\"!messageTemplate\" [innerHTML]=\"option('message')\"></span>\n <ng-container *ngIf=\"messageTemplate\">\n <ng-template *ngTemplateOutlet=\"messageTemplate; context: { $implicit: confirmation }\"></ng-template>\n </ng-container>\n </div>\n <div *ngIf=\"isShowCheckbox\" class=\"cax-dialog-checkbox\">\n <cax-checkbox [disabled]=\"false\" [model]=\"model\" [label]=\"checkboxLabel\" binary=\"true\" (onChange)=\"onChange($event)\"></cax-checkbox>\n </div>\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"footer || footerTemplate\">\n <ng-content select=\"cax-footer\"></ng-content>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"!footer && !footerTemplate\">\n <span *ngIf=\"showCancelButton\" class=\"cax-button-container\">\n <button\n type=\"button\"\n caxRipple\n caxButton\n [label]=\"rejectButtonLabel\"\n [icon]=\"rejectIcon\"\n (click)=\"reject()\"\n [ngClass]=\"'cax-confirm-dialog-reject'\"\n [class]=\"option('rejectButtonStyleClass')\"\n *ngIf=\"option('rejectVisible')\"\n [attr.aria-label]=\"rejectAriaLabel\"\n >\n <!-- <ng-container *ngIf=\"!rejectIconTemplate\">\n <i *ngIf=\"option('rejectIcon')\" [class]=\"option('rejectIcon')\"></i>\n <TimesIcon *ngIf=\"!option('rejectIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\n </ng-container> -->\n <span *ngIf=\"rejectIconTemplate\" class=\"cax-button-icon-left\">\n <ng-template *ngTemplateOutlet=\"rejectIconTemplate\"></ng-template>\n </span>\n </button>\n </span>\n <span *ngIf=\"showAcceptButton\" class=\"cax-button-container\">\n <button\n type=\"button\"\n caxRipple\n caxButton\n [label]=\"acceptButtonLabel\"\n [icon]=\"acceptIcon\"\n (click)=\"accept()\"\n [ngClass]=\"'cax-confirm-dialog-accept'\"\n [class]=\"option('acceptButtonStyleClass')\"\n *ngIf=\"option('acceptVisible')\"\n [attr.aria-label]=\"acceptAriaLabel\"\n >\n <!-- <ng-container *ngIf=\"!acceptIconTemplate\">\n <i *ngIf=\"option('acceptIcon')\" [class]=\"option('acceptIcon')\"></i>\n <CheckIcon *ngIf=\"!option('acceptIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\n </ng-container> -->\n <span *ngIf=\"acceptIconTemplate\" class=\"cax-button-icon-left\">\n <ng-template *ngTemplateOutlet=\"acceptIconTemplate\"></ng-template>\n </span>\n </button>\n </span>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: ["@layer cax{.cax-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cax-dialog-mask.cax-component-overlay{pointer-events:auto}.cax-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.cax-dialog-content{overflow-y:auto;flex-grow:1}.cax-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;flex-shrink:0}.cax-dialog-draggable .cax-dialog-header{cursor:move}.cax-dialog-footer{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.cax-button-container{display:inline-flex;align-items:center}.cax-dialog .cax-dialog-header-icons{display:flex;align-items:center}.cax-dialog .cax-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-fluid .cax-dialog-footer .cax-button{width:auto}.cax-dialog-top .cax-dialog,.cax-dialog-bottom .cax-dialog,.cax-dialog-left .cax-dialog,.cax-dialog-right .cax-dialog,.cax-dialog-top-left .cax-dialog,.cax-dialog-top-right .cax-dialog,.cax-dialog-bottom-left .cax-dialog,.cax-dialog-bottom-right .cax-dialog{margin:.75rem;transform:translateZ(0)}.cax-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cax-dialog-maximized .cax-dialog-content{flex-grow:1}.cax-dialog-left{justify-content:flex-start}.cax-dialog-right{justify-content:flex-end}.cax-dialog-top{align-items:flex-start}.cax-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cax-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cax-dialog-bottom{align-items:flex-end}.cax-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cax-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cax-dialog .cax-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.cax-header-allign{display:flex;align-items:center}.cax-dialog-header-icon{font-size:1.25rem}.cax-confirm-dialog .cax-dialog-content{display:flex;align-items:center}.cax-dialog-content .cax-dialog-checkbox{display:block;margin-top:1rem}.cax-dialog-checkbox input[type=checkbox]{margin-right:.5rem}.cax-header-align{display:flex;align-items:center}.cax-dialog-title{margin-left:10px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[caxButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "link"] }, { kind: "directive", type: i4.Ripple, selector: "[caxRipple]" }, { kind: "component", type: i5.TimesIcon, selector: "TimesIcon" }, { kind: "component", type: i6.Checkbox, selector: "cax-checkbox", inputs: ["size", "value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant", "indeterminate", "model"], outputs: ["indeterminateChange", "onChange", "onFocus", "onBlur"] }], animations: [trigger('animation', [transition('void => visible', [useAnimation(showAnimation)]), transition('visible => void', [useAnimation(hideAnimation)])])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
620
620
  }
621
621
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ConfirmDialog, decorators: [{
622
622
  type: Component,
623
623
  args: [{ selector: 'cax-confirmDialog', animations: [trigger('animation', [transition('void => visible', [useAnimation(showAnimation)]), transition('visible => void', [useAnimation(hideAnimation)])])], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
624
624
  class: 'cax-element'
625
- }, template: "<div [class]=\"maskStyleClass\" [ngClass]=\"getMaskClass()\" *ngIf=\"maskVisible\">\r\n <div\r\n [ngClass]=\"{ 'cax-dialog cax-confirm-dialog cax-component': true, 'cax-dialog-rtl': rtl }\"\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n [@animation]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\r\n (@animation.start)=\"onAnimationStart($event)\"\r\n (@animation.done)=\"onAnimationEnd($event)\"\r\n role=\"alertdialog\"\r\n *ngIf=\"visible\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-modal]=\"true\"\r\n >\r\n <ng-container *ngIf=\"headlessTemplate; else notHeadless\">\r\n <ng-container *ngTemplateOutlet=\"headlessTemplate; context: { $implicit: confirmation }\"></ng-container>\r\n </ng-container>\r\n <ng-template #notHeadless>\r\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"headerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n </div>\r\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"!headerTemplate\">\r\n <div class=\"cax-header-allign\">\r\n <span *ngIf=\"isHeaderIcon\"><i [class]=\"computedHeaderIcon\" [ngStyle]=\"computedHeaderIconStyle\" style=\"display: flex\" class=\"cax-dialog-header-icon\"></i></span>\r\n <span class=\"cax-dialog-title\" [id]=\"ariaLabelledBy\" *ngIf=\"option('header')\">{{ option('header') }}</span>\r\n </div>\r\n <div class=\"cax-dialog-header-icons\">\r\n <button *ngIf=\"isClosable\" type=\"button\" role=\"button\" [attr.aria-label]=\"closeAriaLabel\" [ngClass]=\"{ 'cax-dialog-header-icon cax-dialog-header-close cax-link': true }\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\">\r\n <TimesIcon />\r\n </button>\r\n </div>\r\n </div>\r\n <div #content class=\"cax-dialog-content cax-confirm-dialog-content\">\r\n <i [ngClass]=\"'cax-confirm-dialog-icon'\" [class]=\"option('icon')\" *ngIf=\"!iconTemplate && option('icon')\"></i>\r\n <ng-container *ngIf=\"iconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"iconTemplate\"></ng-template>\r\n </ng-container>\r\n <span class=\"cax-confirm-dialog-message\" *ngIf=\"!messageTemplate\" [innerHTML]=\"option('message')\"></span>\r\n <ng-container *ngIf=\"messageTemplate\">\r\n <ng-template *ngTemplateOutlet=\"messageTemplate; context: { $implicit: confirmation }\"></ng-template>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"isShowCheckbox\" class=\"cax-dialog-checkbox\">\r\n <cax-checkbox [disabled]=\"false\" [model]=\"model\" [label]=\"checkboxLabel\" binary=\"true\" (onChange)=\"onChange($event)\"></cax-checkbox>\r\n </div>\r\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"footer || footerTemplate\">\r\n <ng-content select=\"cax-footer\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n </div>\r\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"!footer && !footerTemplate\">\r\n <span *ngIf=\"showCancelButton\" class=\"cax-button-container\">\r\n <button\r\n type=\"button\"\r\n caxRipple\r\n caxButton\r\n [label]=\"rejectButtonLabel\"\r\n [icon]=\"rejectIcon\"\r\n (click)=\"reject()\"\r\n [ngClass]=\"'cax-confirm-dialog-reject'\"\r\n [class]=\"option('rejectButtonStyleClass')\"\r\n *ngIf=\"option('rejectVisible')\"\r\n [attr.aria-label]=\"rejectAriaLabel\"\r\n >\r\n <!-- <ng-container *ngIf=\"!rejectIconTemplate\">\r\n <i *ngIf=\"option('rejectIcon')\" [class]=\"option('rejectIcon')\"></i>\r\n <TimesIcon *ngIf=\"!option('rejectIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\r\n </ng-container> -->\r\n <span *ngIf=\"rejectIconTemplate\" class=\"cax-button-icon-left\">\r\n <ng-template *ngTemplateOutlet=\"rejectIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n </span>\r\n <span *ngIf=\"showAcceptButton\" class=\"cax-button-container\">\r\n <button\r\n type=\"button\"\r\n caxRipple\r\n caxButton\r\n [label]=\"acceptButtonLabel\"\r\n [icon]=\"acceptIcon\"\r\n (click)=\"accept()\"\r\n [ngClass]=\"'cax-confirm-dialog-accept'\"\r\n [class]=\"option('acceptButtonStyleClass')\"\r\n *ngIf=\"option('acceptVisible')\"\r\n [attr.aria-label]=\"acceptAriaLabel\"\r\n >\r\n <!-- <ng-container *ngIf=\"!acceptIconTemplate\">\r\n <i *ngIf=\"option('acceptIcon')\" [class]=\"option('acceptIcon')\"></i>\r\n <CheckIcon *ngIf=\"!option('acceptIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\r\n </ng-container> -->\r\n <span *ngIf=\"acceptIconTemplate\" class=\"cax-button-icon-left\">\r\n <ng-template *ngTemplateOutlet=\"acceptIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cax-dialog-mask.cax-component-overlay{pointer-events:auto}.cax-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.cax-dialog-content{overflow-y:auto;flex-grow:1}.cax-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;flex-shrink:0}.cax-dialog-draggable .cax-dialog-header{cursor:move}.cax-dialog-footer{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.cax-button-container{display:inline-flex;align-items:center}.cax-dialog .cax-dialog-header-icons{display:flex;align-items:center}.cax-dialog .cax-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-fluid .cax-dialog-footer .cax-button{width:auto}.cax-dialog-top .cax-dialog,.cax-dialog-bottom .cax-dialog,.cax-dialog-left .cax-dialog,.cax-dialog-right .cax-dialog,.cax-dialog-top-left .cax-dialog,.cax-dialog-top-right .cax-dialog,.cax-dialog-bottom-left .cax-dialog,.cax-dialog-bottom-right .cax-dialog{margin:.75rem;transform:translateZ(0)}.cax-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cax-dialog-maximized .cax-dialog-content{flex-grow:1}.cax-dialog-left{justify-content:flex-start}.cax-dialog-right{justify-content:flex-end}.cax-dialog-top{align-items:flex-start}.cax-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cax-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cax-dialog-bottom{align-items:flex-end}.cax-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cax-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cax-dialog .cax-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.cax-header-allign{display:flex;align-items:center}.cax-dialog-header-icon{font-size:1.25rem}.cax-confirm-dialog .cax-dialog-content{display:flex;align-items:center}.cax-dialog-content .cax-dialog-checkbox{display:block;margin-top:1rem}.cax-dialog-checkbox input[type=checkbox]{margin-right:.5rem}.cax-header-align{display:flex;align-items:center}.cax-dialog-title{margin-left:10px}}\n"] }]
625
+ }, template: "<div [class]=\"maskStyleClass\" [ngClass]=\"getMaskClass()\" *ngIf=\"maskVisible\">\n <div\n [ngClass]=\"{ 'cax-dialog cax-confirm-dialog cax-component': true, 'cax-dialog-rtl': rtl }\"\n [ngStyle]=\"style\"\n [class]=\"styleClass\"\n [@animation]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"alertdialog\"\n *ngIf=\"visible\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-modal]=\"true\"\n >\n <ng-container *ngIf=\"headlessTemplate; else notHeadless\">\n <ng-container *ngTemplateOutlet=\"headlessTemplate; context: { $implicit: confirmation }\"></ng-container>\n </ng-container>\n <ng-template #notHeadless>\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </div>\n <div class=\"cax-dialog-header cax-confirm-dialog-header\" *ngIf=\"!headerTemplate\">\n <div class=\"cax-header-allign\">\n <span *ngIf=\"isHeaderIcon\"><i [class]=\"computedHeaderIcon\" [ngStyle]=\"computedHeaderIconStyle\" style=\"display: flex\" class=\"cax-dialog-header-icon\"></i></span>\n <span class=\"cax-dialog-title\" [id]=\"ariaLabelledBy\" *ngIf=\"option('header')\">{{ option('header') }}</span>\n </div>\n <div class=\"cax-dialog-header-icons\">\n <button *ngIf=\"isClosable\" type=\"button\" role=\"button\" [attr.aria-label]=\"closeAriaLabel\" [ngClass]=\"{ 'cax-dialog-header-icon cax-dialog-header-close cax-link': true }\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\">\n <TimesIcon />\n </button>\n </div>\n </div>\n <div #content class=\"cax-dialog-content cax-confirm-dialog-content\">\n <i [ngClass]=\"'cax-confirm-dialog-icon'\" [class]=\"option('icon')\" *ngIf=\"!iconTemplate && option('icon')\"></i>\n <ng-container *ngIf=\"iconTemplate\">\n <ng-template *ngTemplateOutlet=\"iconTemplate\"></ng-template>\n </ng-container>\n <span class=\"cax-confirm-dialog-message\" *ngIf=\"!messageTemplate\" [innerHTML]=\"option('message')\"></span>\n <ng-container *ngIf=\"messageTemplate\">\n <ng-template *ngTemplateOutlet=\"messageTemplate; context: { $implicit: confirmation }\"></ng-template>\n </ng-container>\n </div>\n <div *ngIf=\"isShowCheckbox\" class=\"cax-dialog-checkbox\">\n <cax-checkbox [disabled]=\"false\" [model]=\"model\" [label]=\"checkboxLabel\" binary=\"true\" (onChange)=\"onChange($event)\"></cax-checkbox>\n </div>\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"footer || footerTemplate\">\n <ng-content select=\"cax-footer\"></ng-content>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n <div class=\"cax-dialog-footer cax-confirm-dialog-footer\" *ngIf=\"!footer && !footerTemplate\">\n <span *ngIf=\"showCancelButton\" class=\"cax-button-container\">\n <button\n type=\"button\"\n caxRipple\n caxButton\n [label]=\"rejectButtonLabel\"\n [icon]=\"rejectIcon\"\n (click)=\"reject()\"\n [ngClass]=\"'cax-confirm-dialog-reject'\"\n [class]=\"option('rejectButtonStyleClass')\"\n *ngIf=\"option('rejectVisible')\"\n [attr.aria-label]=\"rejectAriaLabel\"\n >\n <!-- <ng-container *ngIf=\"!rejectIconTemplate\">\n <i *ngIf=\"option('rejectIcon')\" [class]=\"option('rejectIcon')\"></i>\n <TimesIcon *ngIf=\"!option('rejectIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\n </ng-container> -->\n <span *ngIf=\"rejectIconTemplate\" class=\"cax-button-icon-left\">\n <ng-template *ngTemplateOutlet=\"rejectIconTemplate\"></ng-template>\n </span>\n </button>\n </span>\n <span *ngIf=\"showAcceptButton\" class=\"cax-button-container\">\n <button\n type=\"button\"\n caxRipple\n caxButton\n [label]=\"acceptButtonLabel\"\n [icon]=\"acceptIcon\"\n (click)=\"accept()\"\n [ngClass]=\"'cax-confirm-dialog-accept'\"\n [class]=\"option('acceptButtonStyleClass')\"\n *ngIf=\"option('acceptVisible')\"\n [attr.aria-label]=\"acceptAriaLabel\"\n >\n <!-- <ng-container *ngIf=\"!acceptIconTemplate\">\n <i *ngIf=\"option('acceptIcon')\" [class]=\"option('acceptIcon')\"></i>\n <CheckIcon *ngIf=\"!option('acceptIcon')\" [styleClass]=\"'cax-button-icon-left'\" />\n </ng-container> -->\n <span *ngIf=\"acceptIconTemplate\" class=\"cax-button-icon-left\">\n <ng-template *ngTemplateOutlet=\"acceptIconTemplate\"></ng-template>\n </span>\n </button>\n </span>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: ["@layer cax{.cax-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cax-dialog-mask.cax-component-overlay{pointer-events:auto}.cax-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.cax-dialog-content{overflow-y:auto;flex-grow:1}.cax-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;flex-shrink:0}.cax-dialog-draggable .cax-dialog-header{cursor:move}.cax-dialog-footer{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.cax-button-container{display:inline-flex;align-items:center}.cax-dialog .cax-dialog-header-icons{display:flex;align-items:center}.cax-dialog .cax-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-fluid .cax-dialog-footer .cax-button{width:auto}.cax-dialog-top .cax-dialog,.cax-dialog-bottom .cax-dialog,.cax-dialog-left .cax-dialog,.cax-dialog-right .cax-dialog,.cax-dialog-top-left .cax-dialog,.cax-dialog-top-right .cax-dialog,.cax-dialog-bottom-left .cax-dialog,.cax-dialog-bottom-right .cax-dialog{margin:.75rem;transform:translateZ(0)}.cax-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cax-dialog-maximized .cax-dialog-content{flex-grow:1}.cax-dialog-left{justify-content:flex-start}.cax-dialog-right{justify-content:flex-end}.cax-dialog-top{align-items:flex-start}.cax-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cax-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cax-dialog-bottom{align-items:flex-end}.cax-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cax-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cax-dialog .cax-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.cax-header-allign{display:flex;align-items:center}.cax-dialog-header-icon{font-size:1.25rem}.cax-confirm-dialog .cax-dialog-content{display:flex;align-items:center}.cax-dialog-content .cax-dialog-checkbox{display:block;margin-top:1rem}.cax-dialog-checkbox input[type=checkbox]{margin-right:.5rem}.cax-header-align{display:flex;align-items:center}.cax-dialog-title{margin-left:10px}}\n"] }]
626
626
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ConfirmationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.caxConfig }, { type: Document, decorators: [{
627
627
  type: Inject,
628
628
  args: [DOCUMENT]