@acorex/components 21.0.1-next.50 → 21.0.1-next.52

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 (330) hide show
  1. package/fesm2022/acorex-components-accordion.mjs +18 -23
  2. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  3. package/fesm2022/acorex-components-action-sheet.mjs +17 -17
  4. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  5. package/fesm2022/acorex-components-alert.mjs +14 -14
  6. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  7. package/fesm2022/acorex-components-aspect-ratio.mjs +4 -4
  8. package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -1
  9. package/fesm2022/acorex-components-audio-wave.mjs +12 -11
  10. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  11. package/fesm2022/acorex-components-autocomplete.mjs +9 -9
  12. package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
  13. package/fesm2022/acorex-components-avatar.mjs +13 -13
  14. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  15. package/fesm2022/acorex-components-badge.mjs +10 -10
  16. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  17. package/fesm2022/acorex-components-bottom-navigation.mjs +12 -12
  18. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  19. package/fesm2022/acorex-components-breadcrumbs.mjs +12 -12
  20. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/acorex-components-button-group.mjs +26 -22
  22. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  23. package/fesm2022/acorex-components-button.mjs +20 -20
  24. package/fesm2022/acorex-components-button.mjs.map +1 -1
  25. package/fesm2022/acorex-components-calendar.mjs +18 -18
  26. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  27. package/fesm2022/acorex-components-check-box.mjs +11 -11
  28. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  29. package/fesm2022/acorex-components-chips.mjs +12 -14
  30. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  31. package/fesm2022/acorex-components-circular-progress.mjs +13 -11
  32. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  33. package/fesm2022/acorex-components-code-editor.mjs +14 -14
  34. package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
  35. package/fesm2022/acorex-components-collapse.mjs +22 -19
  36. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  37. package/fesm2022/acorex-components-color-box.mjs +11 -11
  38. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  39. package/fesm2022/acorex-components-color-palette.mjs +31 -31
  40. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  41. package/fesm2022/acorex-components-command.mjs +11 -11
  42. package/fesm2022/acorex-components-command.mjs.map +1 -1
  43. package/fesm2022/acorex-components-comment.mjs +33 -33
  44. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  45. package/fesm2022/acorex-components-conversation.mjs +56 -56
  46. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  47. package/fesm2022/acorex-components-conversation2.mjs +229 -229
  48. package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
  49. package/fesm2022/acorex-components-cron-job.mjs +53 -53
  50. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  51. package/fesm2022/acorex-components-data-list.mjs +6 -6
  52. package/fesm2022/acorex-components-data-list.mjs.map +1 -1
  53. package/fesm2022/acorex-components-data-pager.mjs +33 -33
  54. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  55. package/fesm2022/acorex-components-data-table.mjs +65 -493
  56. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  57. package/fesm2022/acorex-components-datetime-box.mjs +10 -10
  58. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  59. package/fesm2022/acorex-components-datetime-input.mjs +10 -10
  60. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  61. package/fesm2022/acorex-components-datetime-picker.mjs +11 -11
  62. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  63. package/fesm2022/acorex-components-decorators.mjs +48 -41
  64. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  65. package/fesm2022/acorex-components-dialog.mjs +13 -13
  66. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  67. package/fesm2022/acorex-components-drawer-legacy.mjs +14 -14
  68. package/fesm2022/acorex-components-drawer-legacy.mjs.map +1 -1
  69. package/fesm2022/acorex-components-drawer.mjs +16 -17
  70. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  71. package/fesm2022/acorex-components-dropdown-button.mjs +9 -9
  72. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  73. package/fesm2022/acorex-components-dropdown.mjs +18 -18
  74. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  75. package/fesm2022/acorex-components-editor.mjs +12 -12
  76. package/fesm2022/acorex-components-editor.mjs.map +1 -1
  77. package/fesm2022/acorex-components-file-explorer.mjs +28 -28
  78. package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
  79. package/fesm2022/acorex-components-flow-chart.mjs +18 -18
  80. package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
  81. package/fesm2022/acorex-components-form.mjs +35 -27
  82. package/fesm2022/acorex-components-form.mjs.map +1 -1
  83. package/fesm2022/acorex-components-grid-layout-builder.mjs +12 -13
  84. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  85. package/fesm2022/acorex-components-image-editor.mjs +48 -48
  86. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  87. package/fesm2022/acorex-components-image.mjs +10 -10
  88. package/fesm2022/acorex-components-image.mjs.map +1 -1
  89. package/fesm2022/acorex-components-json-viewer.mjs +9 -9
  90. package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
  91. package/fesm2022/acorex-components-kanban.mjs +9 -7
  92. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  93. package/fesm2022/acorex-components-kbd.mjs +10 -10
  94. package/fesm2022/acorex-components-kbd.mjs.map +1 -1
  95. package/fesm2022/acorex-components-label.mjs +9 -9
  96. package/fesm2022/acorex-components-label.mjs.map +1 -1
  97. package/fesm2022/acorex-components-list.mjs +10 -10
  98. package/fesm2022/acorex-components-list.mjs.map +1 -1
  99. package/fesm2022/acorex-components-loading-dialog.mjs +12 -12
  100. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  101. package/fesm2022/acorex-components-loading.mjs +23 -23
  102. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  103. package/fesm2022/acorex-components-map.mjs +15 -15
  104. package/fesm2022/acorex-components-map.mjs.map +1 -1
  105. package/fesm2022/acorex-components-media-viewer.mjs +45 -45
  106. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  107. package/fesm2022/acorex-components-menu.mjs +29 -29
  108. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  109. package/fesm2022/{acorex-components-modal-acorex-components-modal-DwBY73dZ.mjs → acorex-components-modal-acorex-components-modal-B03hJbP8.mjs} +24 -24
  110. package/fesm2022/acorex-components-modal-acorex-components-modal-B03hJbP8.mjs.map +1 -0
  111. package/fesm2022/acorex-components-modal-modal-content.component-DrHm0mZ4.mjs +214 -0
  112. package/fesm2022/acorex-components-modal-modal-content.component-DrHm0mZ4.mjs.map +1 -0
  113. package/fesm2022/acorex-components-modal.mjs +1 -1
  114. package/fesm2022/acorex-components-navbar.mjs +9 -9
  115. package/fesm2022/acorex-components-navbar.mjs.map +1 -1
  116. package/fesm2022/acorex-components-notification.mjs +13 -13
  117. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  118. package/fesm2022/acorex-components-number-box-legacy.mjs +14 -32
  119. package/fesm2022/acorex-components-number-box-legacy.mjs.map +1 -1
  120. package/fesm2022/acorex-components-number-box.mjs +10 -10
  121. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  122. package/fesm2022/acorex-components-otp.mjs +10 -10
  123. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  124. package/fesm2022/acorex-components-page.mjs +10 -10
  125. package/fesm2022/acorex-components-page.mjs.map +1 -1
  126. package/fesm2022/acorex-components-paint.mjs +35 -40
  127. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  128. package/fesm2022/acorex-components-password-box.mjs +14 -14
  129. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  130. package/fesm2022/acorex-components-pdf-reader.mjs +9 -9
  131. package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
  132. package/fesm2022/acorex-components-phone-box.mjs +10 -10
  133. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  134. package/fesm2022/acorex-components-picker.mjs +20 -20
  135. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  136. package/fesm2022/acorex-components-popover.mjs +8 -8
  137. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  138. package/fesm2022/acorex-components-popup.mjs +17 -17
  139. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  140. package/fesm2022/acorex-components-progress-bar.mjs +11 -9
  141. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  142. package/fesm2022/acorex-components-qrcode.mjs +10 -10
  143. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  144. package/fesm2022/acorex-components-query-builder.mjs +9 -9
  145. package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
  146. package/fesm2022/acorex-components-radio.mjs +10 -9
  147. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  148. package/fesm2022/acorex-components-rail-navigation.mjs +40 -38
  149. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  150. package/fesm2022/acorex-components-range-slider.mjs +11 -11
  151. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  152. package/fesm2022/acorex-components-rate-picker.mjs +20 -35
  153. package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
  154. package/fesm2022/acorex-components-rest-api-generator.mjs +25 -25
  155. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  156. package/fesm2022/acorex-components-result.mjs +8 -8
  157. package/fesm2022/acorex-components-result.mjs.map +1 -1
  158. package/fesm2022/acorex-components-routing-progress.mjs +8 -8
  159. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  160. package/fesm2022/acorex-components-rrule.mjs +11 -11
  161. package/fesm2022/acorex-components-rrule.mjs.map +1 -1
  162. package/fesm2022/acorex-components-scheduler-picker.mjs +73 -73
  163. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  164. package/fesm2022/acorex-components-scheduler.mjs +99 -70
  165. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  166. package/fesm2022/acorex-components-scss.mjs +4 -4
  167. package/fesm2022/acorex-components-scss.mjs.map +1 -1
  168. package/fesm2022/acorex-components-search-box.mjs +17 -11
  169. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  170. package/fesm2022/acorex-components-select-box.mjs +14 -12
  171. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  172. package/fesm2022/acorex-components-selection-list-2.mjs +12 -12
  173. package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -1
  174. package/fesm2022/acorex-components-selection-list.mjs +10 -10
  175. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  176. package/fesm2022/acorex-components-side-menu.mjs +81 -24
  177. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  178. package/fesm2022/acorex-components-skeleton.mjs +8 -8
  179. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  180. package/fesm2022/acorex-components-slider.mjs +13 -13
  181. package/fesm2022/acorex-components-slider.mjs.map +1 -1
  182. package/fesm2022/acorex-components-sliding-item.mjs +19 -19
  183. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  184. package/fesm2022/acorex-components-step-wizard.mjs +16 -16
  185. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  186. package/fesm2022/acorex-components-switch.mjs +14 -14
  187. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  188. package/fesm2022/acorex-components-tabs.mjs +17 -17
  189. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  190. package/fesm2022/acorex-components-tag-box.mjs +10 -10
  191. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  192. package/fesm2022/acorex-components-tag.mjs +10 -10
  193. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  194. package/fesm2022/acorex-components-text-area.mjs +9 -9
  195. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  196. package/fesm2022/acorex-components-text-box.mjs +27 -12
  197. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  198. package/fesm2022/acorex-components-time-duration.mjs +8 -8
  199. package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
  200. package/fesm2022/acorex-components-time-line.mjs +14 -14
  201. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  202. package/fesm2022/acorex-components-toast.mjs +13 -13
  203. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  204. package/fesm2022/acorex-components-toolbar.mjs +10 -10
  205. package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
  206. package/fesm2022/acorex-components-tooltip.mjs +14 -14
  207. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  208. package/fesm2022/acorex-components-tree-view-legacy.mjs +15 -15
  209. package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -1
  210. package/fesm2022/acorex-components-tree-view.mjs +12 -12
  211. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  212. package/fesm2022/acorex-components-uploader.mjs +17 -17
  213. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  214. package/fesm2022/acorex-components-video-player.mjs +9 -9
  215. package/fesm2022/acorex-components-video-player.mjs.map +1 -1
  216. package/fesm2022/acorex-components-wysiwyg.mjs +45 -45
  217. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  218. package/fesm2022/acorex-components.mjs.map +1 -1
  219. package/package.json +127 -127
  220. package/{accordion/index.d.ts → types/acorex-components-accordion.d.ts} +0 -1
  221. package/{button-group/index.d.ts → types/acorex-components-button-group.d.ts} +10 -8
  222. package/{button/index.d.ts → types/acorex-components-button.d.ts} +3 -3
  223. package/{check-box/index.d.ts → types/acorex-components-check-box.d.ts} +1 -1
  224. package/{chips/index.d.ts → types/acorex-components-chips.d.ts} +3 -8
  225. package/{collapse/index.d.ts → types/acorex-components-collapse.d.ts} +4 -6
  226. package/{conversation2/index.d.ts → types/acorex-components-conversation2.d.ts} +827 -827
  227. package/{data-table/index.d.ts → types/acorex-components-data-table.d.ts} +13 -256
  228. package/{grid-layout-builder/index.d.ts → types/acorex-components-grid-layout-builder.d.ts} +0 -1
  229. package/{loading/index.d.ts → types/acorex-components-loading.d.ts} +1 -1
  230. package/{menu/index.d.ts → types/acorex-components-menu.d.ts} +6 -6
  231. package/{paint/index.d.ts → types/acorex-components-paint.d.ts} +1 -6
  232. package/{radio/index.d.ts → types/acorex-components-radio.d.ts} +1 -1
  233. package/{rate-picker/index.d.ts → types/acorex-components-rate-picker.d.ts} +5 -15
  234. package/{scheduler-picker/index.d.ts → types/acorex-components-scheduler-picker.d.ts} +82 -81
  235. package/{scheduler/index.d.ts → types/acorex-components-scheduler.d.ts} +19 -11
  236. package/{select-box/index.d.ts → types/acorex-components-select-box.d.ts} +1 -1
  237. package/{side-menu/index.d.ts → types/acorex-components-side-menu.d.ts} +9 -2
  238. package/{slider/index.d.ts → types/acorex-components-slider.d.ts} +2 -2
  239. package/{tabs/index.d.ts → types/acorex-components-tabs.d.ts} +1 -1
  240. package/{tag/index.d.ts → types/acorex-components-tag.d.ts} +3 -3
  241. package/{text-box/index.d.ts → types/acorex-components-text-box.d.ts} +2 -0
  242. package/fesm2022/acorex-components-modal-acorex-components-modal-DwBY73dZ.mjs.map +0 -1
  243. package/fesm2022/acorex-components-modal-modal-content.component-DPMt_zaI.mjs +0 -212
  244. package/fesm2022/acorex-components-modal-modal-content.component-DPMt_zaI.mjs.map +0 -1
  245. /package/{action-sheet/index.d.ts → types/acorex-components-action-sheet.d.ts} +0 -0
  246. /package/{alert/index.d.ts → types/acorex-components-alert.d.ts} +0 -0
  247. /package/{aspect-ratio/index.d.ts → types/acorex-components-aspect-ratio.d.ts} +0 -0
  248. /package/{audio-wave/index.d.ts → types/acorex-components-audio-wave.d.ts} +0 -0
  249. /package/{autocomplete/index.d.ts → types/acorex-components-autocomplete.d.ts} +0 -0
  250. /package/{avatar/index.d.ts → types/acorex-components-avatar.d.ts} +0 -0
  251. /package/{badge/index.d.ts → types/acorex-components-badge.d.ts} +0 -0
  252. /package/{bottom-navigation/index.d.ts → types/acorex-components-bottom-navigation.d.ts} +0 -0
  253. /package/{breadcrumbs/index.d.ts → types/acorex-components-breadcrumbs.d.ts} +0 -0
  254. /package/{calendar/index.d.ts → types/acorex-components-calendar.d.ts} +0 -0
  255. /package/{circular-progress/index.d.ts → types/acorex-components-circular-progress.d.ts} +0 -0
  256. /package/{code-editor/index.d.ts → types/acorex-components-code-editor.d.ts} +0 -0
  257. /package/{color-box/index.d.ts → types/acorex-components-color-box.d.ts} +0 -0
  258. /package/{color-palette/index.d.ts → types/acorex-components-color-palette.d.ts} +0 -0
  259. /package/{command/index.d.ts → types/acorex-components-command.d.ts} +0 -0
  260. /package/{comment/index.d.ts → types/acorex-components-comment.d.ts} +0 -0
  261. /package/{conversation/index.d.ts → types/acorex-components-conversation.d.ts} +0 -0
  262. /package/{cron-job/index.d.ts → types/acorex-components-cron-job.d.ts} +0 -0
  263. /package/{data-list/index.d.ts → types/acorex-components-data-list.d.ts} +0 -0
  264. /package/{data-pager/index.d.ts → types/acorex-components-data-pager.d.ts} +0 -0
  265. /package/{datetime-box/index.d.ts → types/acorex-components-datetime-box.d.ts} +0 -0
  266. /package/{datetime-input/index.d.ts → types/acorex-components-datetime-input.d.ts} +0 -0
  267. /package/{datetime-picker/index.d.ts → types/acorex-components-datetime-picker.d.ts} +0 -0
  268. /package/{decorators/index.d.ts → types/acorex-components-decorators.d.ts} +0 -0
  269. /package/{dialog/index.d.ts → types/acorex-components-dialog.d.ts} +0 -0
  270. /package/{drawer-legacy/index.d.ts → types/acorex-components-drawer-legacy.d.ts} +0 -0
  271. /package/{drawer/index.d.ts → types/acorex-components-drawer.d.ts} +0 -0
  272. /package/{dropdown-button/index.d.ts → types/acorex-components-dropdown-button.d.ts} +0 -0
  273. /package/{dropdown/index.d.ts → types/acorex-components-dropdown.d.ts} +0 -0
  274. /package/{editor/index.d.ts → types/acorex-components-editor.d.ts} +0 -0
  275. /package/{file-explorer/index.d.ts → types/acorex-components-file-explorer.d.ts} +0 -0
  276. /package/{flow-chart/index.d.ts → types/acorex-components-flow-chart.d.ts} +0 -0
  277. /package/{form/index.d.ts → types/acorex-components-form.d.ts} +0 -0
  278. /package/{image-editor/index.d.ts → types/acorex-components-image-editor.d.ts} +0 -0
  279. /package/{image/index.d.ts → types/acorex-components-image.d.ts} +0 -0
  280. /package/{json-viewer/index.d.ts → types/acorex-components-json-viewer.d.ts} +0 -0
  281. /package/{kanban/index.d.ts → types/acorex-components-kanban.d.ts} +0 -0
  282. /package/{kbd/index.d.ts → types/acorex-components-kbd.d.ts} +0 -0
  283. /package/{label/index.d.ts → types/acorex-components-label.d.ts} +0 -0
  284. /package/{list/index.d.ts → types/acorex-components-list.d.ts} +0 -0
  285. /package/{loading-dialog/index.d.ts → types/acorex-components-loading-dialog.d.ts} +0 -0
  286. /package/{map/index.d.ts → types/acorex-components-map.d.ts} +0 -0
  287. /package/{media-viewer/index.d.ts → types/acorex-components-media-viewer.d.ts} +0 -0
  288. /package/{modal/index.d.ts → types/acorex-components-modal.d.ts} +0 -0
  289. /package/{navbar/index.d.ts → types/acorex-components-navbar.d.ts} +0 -0
  290. /package/{notification/index.d.ts → types/acorex-components-notification.d.ts} +0 -0
  291. /package/{number-box-legacy/index.d.ts → types/acorex-components-number-box-legacy.d.ts} +0 -0
  292. /package/{number-box/index.d.ts → types/acorex-components-number-box.d.ts} +0 -0
  293. /package/{otp/index.d.ts → types/acorex-components-otp.d.ts} +0 -0
  294. /package/{page/index.d.ts → types/acorex-components-page.d.ts} +0 -0
  295. /package/{password-box/index.d.ts → types/acorex-components-password-box.d.ts} +0 -0
  296. /package/{pdf-reader/index.d.ts → types/acorex-components-pdf-reader.d.ts} +0 -0
  297. /package/{phone-box/index.d.ts → types/acorex-components-phone-box.d.ts} +0 -0
  298. /package/{picker/index.d.ts → types/acorex-components-picker.d.ts} +0 -0
  299. /package/{popover/index.d.ts → types/acorex-components-popover.d.ts} +0 -0
  300. /package/{popup/index.d.ts → types/acorex-components-popup.d.ts} +0 -0
  301. /package/{progress-bar/index.d.ts → types/acorex-components-progress-bar.d.ts} +0 -0
  302. /package/{qrcode/index.d.ts → types/acorex-components-qrcode.d.ts} +0 -0
  303. /package/{query-builder/index.d.ts → types/acorex-components-query-builder.d.ts} +0 -0
  304. /package/{rail-navigation/index.d.ts → types/acorex-components-rail-navigation.d.ts} +0 -0
  305. /package/{range-slider/index.d.ts → types/acorex-components-range-slider.d.ts} +0 -0
  306. /package/{rest-api-generator/index.d.ts → types/acorex-components-rest-api-generator.d.ts} +0 -0
  307. /package/{result/index.d.ts → types/acorex-components-result.d.ts} +0 -0
  308. /package/{routing-progress/index.d.ts → types/acorex-components-routing-progress.d.ts} +0 -0
  309. /package/{rrule/index.d.ts → types/acorex-components-rrule.d.ts} +0 -0
  310. /package/{scss/index.d.ts → types/acorex-components-scss.d.ts} +0 -0
  311. /package/{search-box/index.d.ts → types/acorex-components-search-box.d.ts} +0 -0
  312. /package/{selection-list-2/index.d.ts → types/acorex-components-selection-list-2.d.ts} +0 -0
  313. /package/{selection-list/index.d.ts → types/acorex-components-selection-list.d.ts} +0 -0
  314. /package/{skeleton/index.d.ts → types/acorex-components-skeleton.d.ts} +0 -0
  315. /package/{sliding-item/index.d.ts → types/acorex-components-sliding-item.d.ts} +0 -0
  316. /package/{step-wizard/index.d.ts → types/acorex-components-step-wizard.d.ts} +0 -0
  317. /package/{switch/index.d.ts → types/acorex-components-switch.d.ts} +0 -0
  318. /package/{tag-box/index.d.ts → types/acorex-components-tag-box.d.ts} +0 -0
  319. /package/{text-area/index.d.ts → types/acorex-components-text-area.d.ts} +0 -0
  320. /package/{time-duration/index.d.ts → types/acorex-components-time-duration.d.ts} +0 -0
  321. /package/{time-line/index.d.ts → types/acorex-components-time-line.d.ts} +0 -0
  322. /package/{toast/index.d.ts → types/acorex-components-toast.d.ts} +0 -0
  323. /package/{toolbar/index.d.ts → types/acorex-components-toolbar.d.ts} +0 -0
  324. /package/{tooltip/index.d.ts → types/acorex-components-tooltip.d.ts} +0 -0
  325. /package/{tree-view-legacy/index.d.ts → types/acorex-components-tree-view-legacy.d.ts} +0 -0
  326. /package/{tree-view/index.d.ts → types/acorex-components-tree-view.d.ts} +0 -0
  327. /package/{uploader/index.d.ts → types/acorex-components-uploader.d.ts} +0 -0
  328. /package/{video-player/index.d.ts → types/acorex-components-video-player.d.ts} +0 -0
  329. /package/{wysiwyg/index.d.ts → types/acorex-components-wysiwyg.d.ts} +0 -0
  330. /package/{index.d.ts → types/acorex-components.d.ts} +0 -0
@@ -1,12 +1,12 @@
1
1
  import * as _acorex_components_conversation2 from '@acorex/components/conversation2';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnDestroy, ViewContainerRef, WritableSignal, Signal, Type, InjectionToken, TemplateRef, OnInit, EventEmitter, ElementRef, ModuleWithProviders, Provider } from '@angular/core';
3
+ import { OnDestroy, ViewContainerRef, WritableSignal, Signal, Type, TemplateRef, OnInit, EventEmitter, InjectionToken, ElementRef, ModuleWithProviders, Provider } from '@angular/core';
4
4
  import { AXComponentCloseEvent, AXHtmlEvent, AXClosableComponent } from '@acorex/cdk/common';
5
+ import { AXUploaderChangedEvent } from '@acorex/cdk/uploader';
5
6
  import * as rxjs from 'rxjs';
6
7
  import { Observable } from 'rxjs';
7
8
  import { AXDialogService } from '@acorex/components/dialog';
8
9
  import { AXPopupService } from '@acorex/components/popup';
9
- import { AXUploaderChangedEvent } from '@acorex/cdk/uploader';
10
10
  import { AXPopoverComponent } from '@acorex/components/popover';
11
11
  import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
12
12
  import { AXMapMarker } from '@acorex/components/map';
@@ -648,6 +648,140 @@ interface AXConversationSort {
648
648
  direction: 'asc' | 'desc';
649
649
  }
650
650
 
651
+ declare class AXComposerComponent implements OnDestroy {
652
+ #private;
653
+ private readonly conversationService;
654
+ private readonly messageApi;
655
+ private readonly composerService;
656
+ private readonly messageListService;
657
+ private readonly popupService;
658
+ private readonly config;
659
+ /** Access registry through conversation service */
660
+ private get registry();
661
+ /** Input element reference */
662
+ private readonly inputElementRef;
663
+ /** Draft text - use service */
664
+ readonly draftText: _angular_core.WritableSignal<string>;
665
+ /** Attachments - use service */
666
+ readonly attachments: _angular_core.WritableSignal<File[]>;
667
+ /** Editing message */
668
+ readonly editingMessage: _angular_core.WritableSignal<any>;
669
+ /** Replying to message */
670
+ readonly replyingToMessage: _angular_core.WritableSignal<AXMessage>;
671
+ /** Show typing indicator - use service */
672
+ readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
673
+ /** Message sent event */
674
+ readonly messageSent: _angular_core.OutputEmitterRef<AXSendMessageCommand>;
675
+ /** Emoji clicked event */
676
+ readonly emojiClick: _angular_core.OutputEmitterRef<void>;
677
+ /** Attach clicked event */
678
+ readonly attachClick: _angular_core.OutputEmitterRef<void>;
679
+ /** Voice clicked event */
680
+ readonly voiceClick: _angular_core.OutputEmitterRef<void>;
681
+ /** Active conversation */
682
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
683
+ readonly activeMessages: _angular_core.Signal<AXMessage[]>;
684
+ /** Active component from service */
685
+ readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXComposerActiveComponent>;
686
+ /** Emoji popover state */
687
+ private readonly emojiPopoverRef;
688
+ readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
689
+ readonly composerPopupComponent: typeof AXComposerPopupComponent;
690
+ /** Input placeholder - use service */
691
+ readonly placeholder: _angular_core.Signal<"Select a conversation" | "Type a message...">;
692
+ /** Sending message state */
693
+ readonly sendingMessage: _angular_core.WritableSignal<boolean>;
694
+ /** Typing indicator subject for rate limiting */
695
+ private readonly typingSubject;
696
+ constructor();
697
+ private draftSaveTimeout?;
698
+ /** Number of input rows - use service */
699
+ readonly inputRows: _angular_core.Signal<number>;
700
+ /** Can send message - use service */
701
+ readonly canSend: _angular_core.Signal<boolean>;
702
+ /** Left actions from registry - use service */
703
+ readonly leftActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
704
+ /** Right actions from registry - use service */
705
+ readonly rightActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
706
+ /** Left inline actions (location = 'inline' or undefined) */
707
+ readonly leftInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
708
+ /** Left menu actions (location = 'menu') */
709
+ readonly leftMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
710
+ /** Right inline actions (location = 'inline' or undefined) */
711
+ readonly rightInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
712
+ /** Right menu actions (location = 'menu') */
713
+ readonly rightMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
714
+ /** Handle key down */
715
+ onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
716
+ /** Handle input */
717
+ onInput(): void;
718
+ /** Send typing indicator (throttled via RxJS) */
719
+ private sendTypingIndicator;
720
+ /** Cleanup on destroy */
721
+ ngOnDestroy(): void;
722
+ /** Handle send click */
723
+ onSendClick(): Promise<void>;
724
+ /** Handle emoji click */
725
+ onEmojiClick(event?: MouseEvent): Promise<void>;
726
+ /** Handle emoji popover closed */
727
+ onEmojiPopoverClosed(): void;
728
+ /** Handle emoji/sticker selection from popup */
729
+ onEmojiItemSelected(item: string | AXStickerPayload): void;
730
+ /** Send sticker message */
731
+ private sendSticker;
732
+ /** Get inputs for emoji popup component */
733
+ getEmojiPopupInputs(): Record<string, any>;
734
+ /** Handle attach click */
735
+ onAttachClick(): void;
736
+ /** Handle voice click */
737
+ onVoiceClick(): void;
738
+ /** Remove attachment */
739
+ removeAttachment(index: number): void;
740
+ /** Files selected via uploader */
741
+ onFilesSelected(e: AXUploaderChangedEvent): Promise<void>;
742
+ /**
743
+ * Validate file before upload
744
+ * @param file - File to validate
745
+ * @throws {Error} If file is invalid
746
+ */
747
+ private validateFile;
748
+ /** Cancel edit/reply mode */
749
+ cancelEditReply(): void;
750
+ /** Reset all composer states (used when switching conversations) */
751
+ private resetComposerState;
752
+ /** Start editing a message */
753
+ startEdit(message: any): void;
754
+ /** Start replying to a message */
755
+ startReply(message: AXMessage): void;
756
+ /** Handle action click */
757
+ onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
758
+ /** Check if action is enabled */
759
+ isActionEnabled(action: any): boolean;
760
+ /** Get replying sender name */
761
+ getReplyingSenderName(): string;
762
+ /** Get replying message text */
763
+ getReplyingMessageText(): string;
764
+ /** Preview object for replying banner (type, icon, value) */
765
+ getReplyingPreview(): {
766
+ value: string;
767
+ type: string;
768
+ icon: string;
769
+ } | null;
770
+ /** Preview object for editing banner (type, icon, value) */
771
+ getEditingPreview(): {
772
+ value: string;
773
+ type: string;
774
+ icon: string;
775
+ } | null;
776
+ /** Handle reply preview click - scroll to original message */
777
+ onReplyPreviewClick(): void;
778
+ /** Get inputs for dynamic component */
779
+ getComponentInputs(): Record<string, any>;
780
+ onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
781
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
782
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
783
+ }
784
+
651
785
  /**
652
786
  * Abstract Base Registry
653
787
  * Base class for all registries with common functionality
@@ -2015,126 +2149,6 @@ declare abstract class AXRealtimeApi {
2015
2149
  }>;
2016
2150
  }
2017
2151
 
2018
- /**
2019
- * Error severity levels
2020
- */
2021
- type AXErrorSeverity = 'info' | 'warning' | 'error' | 'critical';
2022
- /**
2023
- * Conversation error event
2024
- */
2025
- interface AXConversationError {
2026
- /** Error code */
2027
- code: string;
2028
- /** Error message */
2029
- message: string;
2030
- /** Severity level */
2031
- severity: AXErrorSeverity;
2032
- /** Source operation */
2033
- operation: string;
2034
- /** Original error */
2035
- originalError?: unknown;
2036
- /** HTTP status code (if applicable) */
2037
- statusCode?: number;
2038
- /** Additional context */
2039
- context?: Record<string, unknown>;
2040
- /** Timestamp */
2041
- timestamp: Date;
2042
- /** Whether error was handled */
2043
- handled: boolean;
2044
- /** Recovery suggestions */
2045
- recoverySuggestions?: string[];
2046
- }
2047
- /**
2048
- * Error Handler Configuration
2049
- */
2050
- interface AXErrorHandlerConfig {
2051
- /** Log errors to console */
2052
- logToConsole?: boolean;
2053
- /** Show user-friendly error messages */
2054
- showUserMessages?: boolean;
2055
- /** Retry failed operations automatically */
2056
- autoRetry?: boolean;
2057
- /** Number of retry attempts */
2058
- maxRetries?: number;
2059
- /** Custom error handler */
2060
- customHandler?: (error: AXConversationError) => void;
2061
- }
2062
- /**
2063
- * Error Handler Service
2064
- */
2065
- declare class AXErrorHandlerService {
2066
- private readonly injectedConfig;
2067
- private readonly _errors$;
2068
- private readonly _config;
2069
- /** Error stream */
2070
- readonly errors$: rxjs.Observable<AXConversationError>;
2071
- constructor();
2072
- /**
2073
- * Configure error handler
2074
- */
2075
- configure(config: Partial<AXErrorHandlerConfig>): void;
2076
- /**
2077
- * Handle an error
2078
- */
2079
- handle(error: unknown, operation: string, context?: Record<string, unknown>): AXConversationError;
2080
- /**
2081
- * Handle API error
2082
- */
2083
- handleApiError(apiError: AXApiError, operation: string, context?: Record<string, unknown>): AXConversationError;
2084
- /**
2085
- * Normalize any error to conversation error format
2086
- */
2087
- private normalizeError;
2088
- /**
2089
- * Check if error is API error
2090
- */
2091
- private isApiError;
2092
- /**
2093
- * Determine severity based on status code
2094
- */
2095
- private determineSeverity;
2096
- /**
2097
- * Get recovery suggestions based on error
2098
- */
2099
- private getRecoverySuggestions;
2100
- /**
2101
- * Get default recovery suggestions
2102
- */
2103
- private getDefaultRecoverySuggestions;
2104
- /**
2105
- * Log error to console
2106
- */
2107
- private logError;
2108
- /**
2109
- * Get user-friendly error message
2110
- */
2111
- getUserFriendlyMessage(error: AXConversationError): string;
2112
- /**
2113
- * Check if error is retryable
2114
- */
2115
- isRetryable(error: AXConversationError): boolean;
2116
- /**
2117
- * Execute an operation with automatic retry logic
2118
- * @param operation - The async operation to execute
2119
- * @param operationName - Name of the operation for error tracking
2120
- * @param context - Additional context for error handling
2121
- * @returns Promise resolving to the operation result
2122
- * @throws {AXConversationError} If all retries fail
2123
- */
2124
- executeWithRetry<T>(operation: () => Promise<T>, operationName: string, context?: Record<string, unknown>): Promise<T>;
2125
- /**
2126
- * Delay helper for retry backoff
2127
- * @param ms - Milliseconds to delay
2128
- */
2129
- private delay;
2130
- /**
2131
- * Clear error history
2132
- */
2133
- clear(): void;
2134
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXErrorHandlerService, never>;
2135
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXErrorHandlerService>;
2136
- }
2137
-
2138
2152
  /**
2139
2153
  * Composer tab registration
2140
2154
  */
@@ -2684,9 +2698,9 @@ declare class AXConversationService {
2684
2698
  /** Error state */
2685
2699
  readonly error: _angular_core.Signal<Error>;
2686
2700
  /** Connection status */
2687
- readonly connectionStatus$: rxjs.Observable<AXConnectionStatus>;
2701
+ readonly connectionStatus$: rxjs.Observable<_acorex_components_conversation2.AXConnectionStatus>;
2688
2702
  /** Error stream */
2689
- readonly errors$: rxjs.Observable<AXConversationError>;
2703
+ readonly errors$: rxjs.Observable<_acorex_components_conversation2.AXConversationError>;
2690
2704
  readonly onMessageReceived: rxjs.Observable<AXMessage>;
2691
2705
  readonly onMessageUpdated: rxjs.Observable<AXMessage>;
2692
2706
  readonly onMessageDeleted: rxjs.Observable<string>;
@@ -2698,7 +2712,7 @@ declare class AXConversationService {
2698
2712
  type: "reply" | "forward";
2699
2713
  }>;
2700
2714
  private _currentUser;
2701
- readonly currentUser: _angular_core.Signal<AXParticipant>;
2715
+ readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
2702
2716
  constructor();
2703
2717
  /**
2704
2718
  * Initialize the service
@@ -3169,7 +3183,7 @@ declare class AXComposerService {
3169
3183
  private readonly _editMessage;
3170
3184
  readonly replyMessage: _angular_core.Signal<AXMessage>;
3171
3185
  readonly editMessage: _angular_core.Signal<AXMessage>;
3172
- readonly activeConversation: _angular_core.Signal<AXConversation>;
3186
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3173
3187
  readonly activeMessages: _angular_core.Signal<AXMessage[]>;
3174
3188
  /** Active component being shown in composer (full-width mode) */
3175
3189
  private readonly _activeComponent;
@@ -3241,341 +3255,108 @@ declare class AXComposerService {
3241
3255
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXComposerService>;
3242
3256
  }
3243
3257
 
3244
- declare class AXComposerComponent implements OnDestroy {
3245
- #private;
3258
+ declare class AXConversationContainerComponent {
3246
3259
  private readonly conversationService;
3247
- private readonly messageApi;
3248
- private readonly composerService;
3249
- private readonly messageListService;
3250
- private readonly popupService;
3251
- private readonly config;
3252
- /** Access registry through conversation service */
3253
- private get registry();
3254
- /** Input element reference */
3255
- private readonly inputElementRef;
3256
- /** Draft text - use service */
3257
- readonly draftText: _angular_core.WritableSignal<string>;
3258
- /** Attachments - use service */
3259
- readonly attachments: _angular_core.WritableSignal<File[]>;
3260
- /** Editing message */
3261
- readonly editingMessage: _angular_core.WritableSignal<any>;
3262
- /** Replying to message */
3263
- readonly replyingToMessage: _angular_core.WritableSignal<AXMessage>;
3264
- /** Show typing indicator - use service */
3265
- readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
3266
- /** Message sent event */
3267
- readonly messageSent: _angular_core.OutputEmitterRef<AXSendMessageCommand>;
3268
- /** Emoji clicked event */
3269
- readonly emojiClick: _angular_core.OutputEmitterRef<void>;
3270
- /** Attach clicked event */
3271
- readonly attachClick: _angular_core.OutputEmitterRef<void>;
3272
- /** Voice clicked event */
3273
- readonly voiceClick: _angular_core.OutputEmitterRef<void>;
3260
+ protected readonly config: _acorex_components_conversation2.AXConversationConfig;
3261
+ /** Custom CSS class */
3262
+ readonly customClass: _angular_core.InputSignal<string>;
3263
+ /** Loading state */
3264
+ readonly loading: _angular_core.Signal<boolean>;
3265
+ /** Error state */
3266
+ readonly error: _angular_core.Signal<Error>;
3267
+ /** Active conversation */
3268
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3269
+ /** Container CSS classes */
3270
+ readonly containerClasses: _angular_core.Signal<string>;
3271
+ closeActiveConversation(): void;
3272
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
3273
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationContainerComponent, "ax-conversation-container", never, { "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, ["ax-conversation-sidebar, [ax-conversation-sidebar]", "ax-conversation-info-bar, [ax-conversation-info-bar]", "ax-conversation-message-list, [ax-conversation-message-list]", "ax-conversation-composer, [ax-conversation-composer]", "ax-conversation-empty"], true, never>;
3274
+ }
3275
+
3276
+ declare class AXConversationContainerDirective {
3277
+ private readonly conversationService;
3278
+ /** Active conversation */
3279
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3280
+ /** Loading state */
3281
+ readonly loading: _angular_core.Signal<boolean>;
3282
+ /** Error state */
3283
+ readonly error: _angular_core.Signal<Error>;
3284
+ closeActiveConversation(): void;
3285
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerDirective, never>;
3286
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationContainerDirective, "[axConversationContainer]", never, {}, {}, never, never, true, never>;
3287
+ }
3288
+
3289
+ interface DropdownMenuItem {
3290
+ id: string;
3291
+ label: string;
3292
+ icon?: string;
3293
+ disabled?: boolean;
3294
+ divider?: boolean;
3295
+ destructive?: boolean;
3296
+ shortcut?: string;
3297
+ }
3298
+ declare class AXInfoBarComponent {
3299
+ private readonly conversationService;
3300
+ private readonly infoBar;
3301
+ protected get registry(): _acorex_components_conversation2.AXRegistryService;
3274
3302
  /** Active conversation */
3275
3303
  readonly activeConversation: _angular_core.Signal<AXConversation>;
3276
- readonly activeMessages: _angular_core.Signal<AXMessage[]>;
3277
3304
  /** Active component from service */
3278
- readonly activeComponent: _angular_core.Signal<AXComposerActiveComponent>;
3279
- /** Emoji popover state */
3280
- private readonly emojiPopoverRef;
3281
- readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
3282
- readonly composerPopupComponent: typeof AXComposerPopupComponent;
3283
- /** Input placeholder - use service */
3284
- readonly placeholder: _angular_core.Signal<"Select a conversation" | "Type a message...">;
3285
- /** Sending message state */
3286
- readonly sendingMessage: _angular_core.WritableSignal<boolean>;
3287
- /** Typing indicator subject for rate limiting */
3288
- private readonly typingSubject;
3289
- constructor();
3290
- private draftSaveTimeout?;
3291
- /** Number of input rows - use service */
3292
- readonly inputRows: _angular_core.Signal<number>;
3293
- /** Can send message - use service */
3294
- readonly canSend: _angular_core.Signal<boolean>;
3295
- /** Left actions from registry - use service */
3296
- readonly leftActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3297
- /** Right actions from registry - use service */
3298
- readonly rightActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3299
- /** Left inline actions (location = 'inline' or undefined) */
3300
- readonly leftInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3301
- /** Left menu actions (location = 'menu') */
3302
- readonly leftMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3303
- /** Right inline actions (location = 'inline' or undefined) */
3304
- readonly rightInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3305
- /** Right menu actions (location = 'menu') */
3306
- readonly rightMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
3307
- /** Handle key down */
3308
- onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
3309
- /** Handle input */
3310
- onInput(): void;
3311
- /** Send typing indicator (throttled via RxJS) */
3312
- private sendTypingIndicator;
3313
- /** Cleanup on destroy */
3314
- ngOnDestroy(): void;
3315
- /** Handle send click */
3316
- onSendClick(): Promise<void>;
3317
- /** Handle emoji click */
3318
- onEmojiClick(event?: MouseEvent): Promise<void>;
3319
- /** Handle emoji popover closed */
3320
- onEmojiPopoverClosed(): void;
3321
- /** Handle emoji/sticker selection from popup */
3322
- onEmojiItemSelected(item: string | AXStickerPayload): void;
3323
- /** Send sticker message */
3324
- private sendSticker;
3325
- /** Get inputs for emoji popup component */
3326
- getEmojiPopupInputs(): Record<string, any>;
3327
- /** Handle attach click */
3328
- onAttachClick(): void;
3329
- /** Handle voice click */
3330
- onVoiceClick(): void;
3331
- /** Remove attachment */
3332
- removeAttachment(index: number): void;
3333
- /** Files selected via uploader */
3334
- onFilesSelected(e: AXUploaderChangedEvent): Promise<void>;
3335
- /**
3336
- * Validate file before upload
3337
- * @param file - File to validate
3338
- * @throws {Error} If file is invalid
3339
- */
3340
- private validateFile;
3341
- /** Cancel edit/reply mode */
3342
- cancelEditReply(): void;
3343
- /** Reset all composer states (used when switching conversations) */
3344
- private resetComposerState;
3345
- /** Start editing a message */
3346
- startEdit(message: any): void;
3347
- /** Start replying to a message */
3348
- startReply(message: AXMessage): void;
3349
- /** Handle action click */
3350
- onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
3351
- /** Check if action is enabled */
3352
- isActionEnabled(action: any): boolean;
3353
- /** Get replying sender name */
3354
- getReplyingSenderName(): string;
3355
- /** Get replying message text */
3356
- getReplyingMessageText(): string;
3357
- /** Preview object for replying banner (type, icon, value) */
3358
- getReplyingPreview(): {
3359
- value: string;
3360
- type: string;
3361
- icon: string;
3362
- } | null;
3363
- /** Preview object for editing banner (type, icon, value) */
3364
- getEditingPreview(): {
3365
- value: string;
3366
- type: string;
3367
- icon: string;
3368
- } | null;
3369
- /** Handle reply preview click - scroll to original message */
3370
- onReplyPreviewClick(): void;
3305
+ readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarActiveComponent>;
3306
+ /** Members popover reference */
3307
+ readonly membersPopoverRef: _angular_core.Signal<AXPopoverComponent>;
3308
+ /** Members popover target element */
3309
+ readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
3310
+ /** Loading state for async actions */
3311
+ readonly actionLoading: _angular_core.WritableSignal<boolean>;
3312
+ /** Avatar clicked event */
3313
+ readonly avatarClick: _angular_core.OutputEmitterRef<void>;
3314
+ /** Search clicked event */
3315
+ readonly searchClick: _angular_core.OutputEmitterRef<void>;
3316
+ /** Search query changed event */
3317
+ readonly searchQuery: _angular_core.OutputEmitterRef<string>;
3318
+ /** Menu item clicked event */
3319
+ readonly menuItemAction: _angular_core.OutputEmitterRef<string>;
3320
+ /** Inline action buttons from registry */
3321
+ readonly inlineActions: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarAction[]>;
3322
+ /** Dropdown menu items from registry */
3323
+ readonly menuItems: _angular_core.Signal<DropdownMenuItem[]>;
3324
+ /** Get conversation status - delegate to utils */
3325
+ getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
3326
+ /** Get subtitle text - delegate to utils */
3327
+ getSubtitle(conversation: AXConversation): string;
3328
+ /** Get initials from name - delegate to utils */
3329
+ getInitials(name: string): string;
3330
+ /** Handle avatar click */
3331
+ onAvatarClick(): void;
3332
+ /** Handle members click - open popover */
3333
+ onMembersClick(event: MouseEvent): void;
3334
+ /** Handle inline action click */
3335
+ onInlineActionClick(actionId: string): Promise<void>;
3371
3336
  /** Get inputs for dynamic component */
3372
3337
  getComponentInputs(): Record<string, any>;
3373
- onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
3374
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
3375
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
3338
+ /** Handle close component */
3339
+ onCloseComponent(): void;
3340
+ /** Handle menu item click */
3341
+ onMenuItemClick(item: DropdownMenuItem): Promise<void>;
3342
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarComponent, never>;
3343
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarComponent, "ax-conversation-info-bar", never, {}, { "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
3376
3344
  }
3377
3345
 
3378
3346
  /**
3379
- * Conversation Configuration Interface
3380
- * Centralized configuration values to avoid magic numbers
3347
+ * Active component state in info-bar
3381
3348
  */
3349
+ interface AXInfoBarActiveComponent {
3350
+ /** Action that triggered this component */
3351
+ action: AXInfoBarAction;
3352
+ /** Component to render */
3353
+ component: Type<unknown>;
3354
+ /** Component inputs */
3355
+ inputs?: Record<string, unknown>;
3356
+ }
3382
3357
  /**
3383
- * Main configuration interface for the conversation component
3384
- */
3385
- interface AXConversationConfig {
3386
- /** Number of messages to load per page */
3387
- messagePageSize?: number;
3388
- /** Number of conversations to load per page */
3389
- conversationPageSize?: number;
3390
- /** Scroll threshold for detecting scroll events */
3391
- scrollThreshold?: number;
3392
- /** Infinite scroll threshold */
3393
- infiniteScrollThreshold?: number;
3394
- /** Typing indicator timeout in milliseconds */
3395
- typingIndicatorTimeout?: number;
3396
- /** Typing indicator throttle in milliseconds (for rate limiting) */
3397
- typingIndicatorThrottle?: number;
3398
- /** Message highlight duration in milliseconds */
3399
- messageHighlightDuration?: number;
3400
- /** Search debounce delay in milliseconds */
3401
- debounceSearch?: number;
3402
- /** Date separator inactivity fade delay in milliseconds */
3403
- /** Maximum messages per conversation */
3404
- maxMessagesPerConversation?: number;
3405
- /** Maximum total messages in store */
3406
- maxTotalMessages?: number;
3407
- /** Maximum cached conversations */
3408
- maxCachedConversations?: number;
3409
- /** Minimum sidebar width in pixels */
3410
- minSidebarWidth?: number;
3411
- /** Maximum sidebar width in pixels */
3412
- maxSidebarWidth?: number;
3413
- /** Default sidebar width in pixels */
3414
- defaultSidebarWidth?: number;
3415
- /** Virtual scroll item size in pixels */
3416
- virtualScrollItemSize?: number;
3417
- /** Virtual scroll minimum buffer in pixels */
3418
- virtualScrollMinBuffer?: number;
3419
- /** Virtual scroll maximum buffer in pixels */
3420
- virtualScrollMaxBuffer?: number;
3421
- /** Filter cache size */
3422
- filterCacheSize?: number;
3423
- /** Maximum file size in bytes */
3424
- maxFileSize?: number;
3425
- /** Allowed file types (glob patterns like 'image/*') */
3426
- allowedFileTypes?: string[];
3427
- /** Maximum message length in characters */
3428
- maxMessageLength?: number;
3429
- /** Minimum message length in characters */
3430
- minMessageLength?: number;
3431
- /** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
3432
- messageReadThreshold?: number;
3433
- }
3434
-
3435
- /**
3436
- * Default Configuration Values
3437
- * Centralized defaults to avoid magic numbers throughout the codebase
3438
- */
3439
-
3440
- /**
3441
- * Default conversation configuration
3442
- * All values are explicitly defined here for easy maintenance and documentation
3443
- */
3444
- declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
3445
- /**
3446
- * Helper function to merge user config with defaults
3447
- * Properly handles array merging to avoid reference issues
3448
- * @param userConfig - User-provided configuration
3449
- * @returns Merged configuration with all required fields
3450
- */
3451
- declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
3452
-
3453
- /**
3454
- * Dependency Injection Tokens
3455
- * InjectionTokens for configuration and dependencies
3456
- */
3457
-
3458
- /**
3459
- * Configuration token for conversation component
3460
- * Uses centralized defaults from AX_DEFAULT_CONVERSATION_CONFIG
3461
- */
3462
- declare const CONVERSATION_CONFIG: InjectionToken<AXConversationConfig>;
3463
- /**
3464
- * Token for configuring AXErrorHandlerService
3465
- */
3466
- declare const ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXErrorHandlerConfig>>;
3467
-
3468
- /**
3469
- * Registry Configuration Tokens
3470
- * Injection tokens for configuring default registry values
3471
- */
3472
-
3473
- /**
3474
- * Additional message renderers configuration
3475
- * Provide this token to add custom message renderers in addition to built-in ones
3476
- * Note: Built-in renderers (text, image, video, audio, voice, file, location, sticker, contact, system, fallback) are automatically registered
3477
- */
3478
- declare const DEFAULT_MESSAGE_RENDERERS: InjectionToken<AXMessageRenderer[]>;
3479
- /**
3480
- * Default message actions configuration
3481
- * Provide this token to override default message actions
3482
- */
3483
- declare const DEFAULT_MESSAGE_ACTIONS: InjectionToken<AXMessageAction[]>;
3484
- /**
3485
- * Default composer tabs configuration
3486
- * Provide this token to override default composer tabs (emoji, stickers, etc.)
3487
- */
3488
- declare const DEFAULT_COMPOSER_TABS: InjectionToken<AXComposerTab[]>;
3489
- /**
3490
- * Default composer actions configuration
3491
- * Provide this token to override default composer actions (attach, voice, etc.)
3492
- */
3493
- declare const DEFAULT_COMPOSER_ACTIONS: InjectionToken<AXComposerAction[]>;
3494
- /**
3495
- * Default conversation tabs configuration
3496
- * Provide this token to override default conversation tabs (all, private, groups, etc.)
3497
- */
3498
- declare const DEFAULT_CONVERSATION_TABS: InjectionToken<AXConversationTab[]>;
3499
- /**
3500
- * Default info bar actions configuration
3501
- * Provide this token to override default info bar actions (mute, archive, block, etc.)
3502
- */
3503
- declare const DEFAULT_INFO_BAR_ACTIONS: InjectionToken<AXInfoBarAction[]>;
3504
- /**
3505
- * Default conversation item actions configuration
3506
- * Provide this token to override default conversation item actions (mute, delete, archive, etc.)
3507
- */
3508
- declare const DEFAULT_CONVERSATION_ITEM_ACTIONS: InjectionToken<AXConversationItemAction[]>;
3509
- /**
3510
- * Registry configuration interface
3511
- */
3512
- interface AXRegistryConfiguration {
3513
- /** Additional message renderers to register (built-in renderers are automatic) */
3514
- messageRenderers?: AXMessageRenderer[];
3515
- /** Message actions to register by default */
3516
- messageActions?: AXMessageAction[];
3517
- /** Composer tabs to register by default */
3518
- composerTabs?: AXComposerTab[];
3519
- /** Composer actions to register by default */
3520
- composerActions?: AXComposerAction[];
3521
- /** Conversation tabs to register by default */
3522
- conversationTabs?: AXConversationTab[];
3523
- /** Info bar actions to register by default */
3524
- infoBarActions?: AXInfoBarAction[];
3525
- /** Conversation item actions to register by default */
3526
- conversationItemActions?: AXConversationItemAction[];
3527
- }
3528
- /**
3529
- * Complete registry configuration token
3530
- * Provide this for comprehensive registry configuration
3531
- */
3532
- declare const REGISTRY_CONFIG: InjectionToken<AXRegistryConfiguration>;
3533
-
3534
- declare class AXConversationContainerComponent {
3535
- private readonly conversationService;
3536
- protected readonly config: AXConversationConfig;
3537
- /** Custom CSS class */
3538
- readonly customClass: _angular_core.InputSignal<string>;
3539
- /** Loading state */
3540
- readonly loading: _angular_core.Signal<boolean>;
3541
- /** Error state */
3542
- readonly error: _angular_core.Signal<Error>;
3543
- /** Active conversation */
3544
- readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3545
- /** Container CSS classes */
3546
- readonly containerClasses: _angular_core.Signal<string>;
3547
- closeActiveConversation(): void;
3548
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
3549
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationContainerComponent, "ax-conversation-container", never, { "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, ["ax-conversation-sidebar, [ax-conversation-sidebar]", "ax-conversation-info-bar, [ax-conversation-info-bar]", "ax-conversation-message-list, [ax-conversation-message-list]", "ax-conversation-composer, [ax-conversation-composer]", "ax-conversation-empty"], true, never>;
3550
- }
3551
-
3552
- declare class AXConversationContainerDirective {
3553
- private readonly conversationService;
3554
- /** Active conversation */
3555
- readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3556
- /** Loading state */
3557
- readonly loading: _angular_core.Signal<boolean>;
3558
- /** Error state */
3559
- readonly error: _angular_core.Signal<Error>;
3560
- closeActiveConversation(): void;
3561
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerDirective, never>;
3562
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationContainerDirective, "[axConversationContainer]", never, {}, {}, never, never, true, never>;
3563
- }
3564
-
3565
- /**
3566
- * Active component state in info-bar
3567
- */
3568
- interface AXInfoBarActiveComponent {
3569
- /** Action that triggered this component */
3570
- action: AXInfoBarAction;
3571
- /** Component to render */
3572
- component: Type<unknown>;
3573
- /** Component inputs */
3574
- inputs?: Record<string, unknown>;
3575
- }
3576
- /**
3577
- * Info Bar Service
3578
- * Manages info bar state and actions
3358
+ * Info Bar Service
3359
+ * Manages info bar state and actions
3579
3360
  */
3580
3361
  declare class AXInfoBarService {
3581
3362
  private readonly conversationService;
@@ -3645,67 +3426,289 @@ declare class AXInfoBarService {
3645
3426
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXInfoBarService>;
3646
3427
  }
3647
3428
 
3648
- /**
3649
- * Conversation Store Service
3650
- * Unified signal-based store for conversations and messages
3651
- */
3652
- declare class AXConversationStoreService {
3653
- private readonly config;
3654
- private readonly errorHandler;
3655
- /** All conversations (keyed by ID) */
3656
- private readonly _conversations;
3657
- /** All messages (keyed by message ID) */
3658
- private readonly _messages;
3659
- /** Message IDs grouped by conversation */
3660
- private readonly _conversationMessages;
3661
- /** All conversations as array (unsorted - sorting is handled by consumers) */
3662
- readonly conversations: _angular_core.Signal<AXConversation[]>;
3663
- /** All messages as array */
3429
+ declare class AXMessageListComponent implements OnDestroy {
3430
+ private readonly conversationService;
3431
+ private readonly messageListService;
3432
+ protected readonly config: _acorex_components_conversation2.AXConversationConfig;
3433
+ /** Custom avatar template for message list items */
3434
+ readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
3435
+ private readonly timeouts;
3436
+ private readonly replyCounts;
3437
+ private readonly forwardCounts;
3438
+ readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
3439
+ readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
3440
+ readonly reactionPopover: _angular_core.Signal<any>;
3441
+ readonly availableReactions: _angular_core.WritableSignal<string[]>;
3442
+ private get registry();
3443
+ /** Message list element reference */
3444
+ private readonly messageListRef;
3445
+ /** Messages container element reference */
3446
+ private readonly messagesContainerRef;
3447
+ /** Loading state - use service */
3448
+ readonly loading: _angular_core.WritableSignal<boolean>;
3449
+ /** Loading more messages state - use service */
3450
+ readonly loadingMore: _angular_core.WritableSignal<boolean>;
3451
+ /** Show scroll to bottom button - use service */
3452
+ readonly showScrollButton: _angular_core.WritableSignal<boolean>;
3453
+ /** Active conversation */
3454
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3455
+ /** Messages */
3664
3456
  readonly messages: _angular_core.Signal<AXMessage[]>;
3457
+ /** Message action event */
3458
+ readonly messageAction: _angular_core.OutputEmitterRef<{
3459
+ message: AXMessage;
3460
+ action: string;
3461
+ }>;
3462
+ /** Current user from service */
3463
+ readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
3464
+ /** Message grouped by date - use service */
3465
+ readonly messageGroups: _angular_core.Signal<{
3466
+ date: string;
3467
+ dateLabel: string;
3468
+ messages: AXMessage[];
3469
+ }[]>;
3470
+ constructor();
3471
+ private intersectionObserver?;
3665
3472
  /**
3666
- * Initialize the store
3667
- */
3668
- initialize(): Promise<void>;
3669
- /**
3670
- * Set all conversations (replaces existing)
3671
- * @param conversations - Array of conversations
3672
- */
3673
- setConversations(conversations: AXConversation[]): void;
3674
- /**
3675
- * Add multiple conversations (append to existing)
3676
- * Used for pagination - appends new conversations without replacing existing ones
3677
- * @param conversations - Array of conversations to add
3678
- */
3679
- addConversations(conversations: AXConversation[]): void;
3680
- /**
3681
- * Add or update a single conversation
3682
- * @param conversation - Conversation to add/update
3683
- */
3684
- setConversation(conversation: AXConversation): void;
3685
- /**
3686
- * Get a conversation by ID
3687
- * @param conversationId - Conversation ID
3688
- * @returns Conversation or undefined
3689
- */
3690
- getConversation(conversationId: string): AXConversation | undefined;
3691
- /**
3692
- * Update a conversation with partial data
3693
- * @param conversationId - Conversation ID
3694
- * @param updates - Partial conversation updates
3695
- */
3696
- updateConversation(conversationId: string, updates: Partial<AXConversation>): void;
3697
- /**
3698
- * Delete a conversation
3699
- * @param conversationId - Conversation ID
3473
+ * Setup intersection observer to mark messages as read when visible
3700
3474
  */
3701
- deleteConversation(conversationId: string): void;
3475
+ private setupIntersectionObserver;
3702
3476
  /**
3703
- * Update conversation's last message
3704
- * @param message - The message to set as last message
3477
+ * Mark message as read
3705
3478
  */
3706
- updateLastMessage(message: AXMessage): void;
3707
- /**
3708
- * Increment unread count
3479
+ private markMessageAsRead;
3480
+ /** Get message CSS classes */
3481
+ getMessageClasses(message: AXMessage): string;
3482
+ /** Get bubble CSS classes */
3483
+ getBubbleClasses(message: AXMessage): string;
3484
+ /** Check if message is from current user */
3485
+ isOwnMessage(message: AXMessage): boolean;
3486
+ /** Should show avatar */
3487
+ shouldShowAvatar(message: AXMessage): boolean;
3488
+ /** Should show sender name */
3489
+ shouldShowSenderName(message: AXMessage): boolean;
3490
+ /** Get sender name */
3491
+ getSenderName(message: AXMessage): string;
3492
+ /** Get sender avatar */
3493
+ getSenderAvatar(message: AXMessage): string | undefined;
3494
+ /** Get original sender name for forwarded messages */
3495
+ getOriginalSenderName(message: AXMessage): string;
3496
+ /** Get forwarded text with sender and conversation info */
3497
+ getForwardedText(message: AXMessage): string;
3498
+ /** Resolve renderer component for message */
3499
+ getRendererComponent(message: AXMessage): _angular_core.Type<any>;
3500
+ /** Provide inputs for the dynamic renderer */
3501
+ getRendererInputs(message: AXMessage): {
3502
+ message: AXMessage;
3503
+ };
3504
+ /** Get status icon */
3505
+ getStatusIcon(message: AXMessage): string;
3506
+ /** Get status icon CSS classes */
3507
+ getStatusIconClasses(message: AXMessage): string;
3508
+ /** Get status tooltip text */
3509
+ getStatusTooltip(message: AXMessage): string;
3510
+ /** Get first unread message ID */
3511
+ readonly firstUnreadMessageId: _angular_core.Signal<string>;
3512
+ /** Get grouped reactions */
3513
+ getGroupedReactions(message: AXMessage): Array<{
3514
+ emoji: string;
3515
+ count: number;
3516
+ userIds: string[];
3517
+ hasReacted: boolean;
3518
+ }>;
3519
+ /** Get reaction tooltip text */
3520
+ getReactionTooltip(reaction: {
3521
+ emoji: string;
3522
+ count: number;
3523
+ userIds: string[];
3524
+ hasReacted: boolean;
3525
+ }): string;
3526
+ /** Toggle reaction picker */
3527
+ toggleReactionPicker(messageId: string, event: MouseEvent): void;
3528
+ /** Close reaction picker */
3529
+ closeReactionPicker(): void;
3530
+ /** Check if current user has reacted with specific emoji */
3531
+ hasUserReacted(message: AXMessage, emoji: string): boolean;
3532
+ /** Check if current user has reacted with specific emoji by message ID */
3533
+ hasUserReactedById(messageId: string, emoji: string): boolean;
3534
+ /** Handle reaction click by message ID */
3535
+ onReactionClickById(messageId: string, emoji: string): void;
3536
+ /** Get message by ID */
3537
+ getMessageById(messageId: string): AXMessage | undefined;
3538
+ /** Load available reactions from API */
3539
+ private loadAvailableReactions;
3540
+ /** Get message actions from registry */
3541
+ getMessageActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
3542
+ /** Get initials from name */
3543
+ getInitials(name: string): string;
3544
+ /** Handle reaction click */
3545
+ onReactionClick(message: AXMessage, emoji: string): void;
3546
+ /** Handle message action */
3547
+ onMessageAction(message: AXMessage, action: any): Promise<void>;
3548
+ /** Handle scroll events */
3549
+ onScroll(event: Event): void;
3550
+ /** Handle infinite scroll threshold */
3551
+ onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
3552
+ /** Load older messages - delegate to service */
3553
+ private loadOlderMessages;
3554
+ /** Check if user is near bottom of scroll */
3555
+ private isUserNearBottom;
3556
+ /** Scroll to bottom */
3557
+ scrollToBottom(smooth?: boolean): void;
3558
+ /** Scroll to specific message */
3559
+ scrollToMessage(messageId: string): void;
3560
+ /** Cleanup timeouts and observers on destroy */
3561
+ ngOnDestroy(): void;
3562
+ /** Get message preview text for reply */
3563
+ getMessagePreviewText(message: AXMessage): {
3564
+ value: string;
3565
+ type: string;
3566
+ icon: string;
3567
+ };
3568
+ /** Get ARIA label for message */
3569
+ getMessageAriaLabel(message: AXMessage): string;
3570
+ /** Get reply count for a message (fetches from API across all conversations) */
3571
+ getReplyCount(message: AXMessage): number;
3572
+ /** Get forward count for a message (fetches from API across all conversations) */
3573
+ getForwardCount(message: AXMessage): number;
3574
+ /**
3575
+ * Refresh count for a specific message from API
3576
+ * This is called when a new reply or forward is detected globally
3577
+ */
3578
+ private refreshCount;
3579
+ /** Show thread view for a message */
3580
+ showThread(message: AXMessage): void;
3581
+ /** Handle context menu opening for messages */
3582
+ handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
3583
+ /** Handle context menu item click for messages */
3584
+ handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXMessage): void;
3585
+ /**
3586
+ * TrackBy function for message groups
3587
+ * Tracks by date only to prevent re-rendering when messages are added
3588
+ */
3589
+ trackMessageGroup(index: number, group: {
3590
+ date: string;
3591
+ messages: AXMessage[];
3592
+ }): string;
3593
+ /**
3594
+ * TrackBy function for messages
3595
+ * Tracks by ID only to prevent unnecessary re-renders
3596
+ */
3597
+ trackMessage(index: number, message: AXMessage): string;
3598
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListComponent, never>;
3599
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, { "avatarTemplate": { "alias": "avatarTemplate"; "required": false; "isSignal": true; }; }, { "messageAction": "messageAction"; }, never, never, true, never>;
3600
+ }
3601
+ interface AXMessageAvatarTemplateContext {
3602
+ $implicit: AXMessage;
3603
+ size: number;
3604
+ senderName: string;
3605
+ senderAvatar?: string;
3606
+ }
3607
+
3608
+ declare class AXMessageListService {
3609
+ private readonly conversationService;
3610
+ private readonly composerService;
3611
+ private readonly config;
3612
+ private get registry();
3613
+ readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
3614
+ readonly activeMessages: _angular_core.Signal<AXMessage[]>;
3615
+ readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
3616
+ /** Loading state */
3617
+ readonly loading: _angular_core.WritableSignal<boolean>;
3618
+ /** Loading more messages state */
3619
+ readonly loadingMore: _angular_core.WritableSignal<boolean>;
3620
+ /** Show scroll to bottom button */
3621
+ readonly showScrollButton: _angular_core.WritableSignal<boolean>;
3622
+ /** Scroll requests counter */
3623
+ readonly scrollRequests: _angular_core.WritableSignal<number>;
3624
+ /** Current page for pagination */
3625
+ private readonly currentPage;
3626
+ /** Has more messages to load */
3627
+ private readonly hasMoreMessages;
3628
+ /** Message grouped by date */
3629
+ readonly messageGroups: _angular_core.Signal<{
3630
+ date: string;
3631
+ dateLabel: string;
3632
+ messages: AXMessage[];
3633
+ }[]>;
3634
+ /**
3635
+ * Load more messages (pagination)
3636
+ */
3637
+ loadMoreMessages(): Promise<void>;
3638
+ /**
3639
+ * Reset pagination (call when conversation changes)
3640
+ */
3641
+ resetPagination(): void;
3642
+ getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
3643
+ executeAction(message: AXMessage, actionId: string): Promise<void>;
3644
+ reactToMessage(messageId: string, emoji: string): Promise<void>;
3645
+ /** Request message list to scroll to bottom */
3646
+ requestScrollToBottom(): void;
3647
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListService, never>;
3648
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
3649
+ }
3650
+
3651
+ /**
3652
+ * Conversation Store Service
3653
+ * Unified signal-based store for conversations and messages
3654
+ */
3655
+ declare class AXConversationStoreService {
3656
+ private readonly config;
3657
+ private readonly errorHandler;
3658
+ /** All conversations (keyed by ID) */
3659
+ private readonly _conversations;
3660
+ /** All messages (keyed by message ID) */
3661
+ private readonly _messages;
3662
+ /** Message IDs grouped by conversation */
3663
+ private readonly _conversationMessages;
3664
+ /** All conversations as array (unsorted - sorting is handled by consumers) */
3665
+ readonly conversations: _angular_core.Signal<AXConversation[]>;
3666
+ /** All messages as array */
3667
+ readonly messages: _angular_core.Signal<AXMessage[]>;
3668
+ /**
3669
+ * Initialize the store
3670
+ */
3671
+ initialize(): Promise<void>;
3672
+ /**
3673
+ * Set all conversations (replaces existing)
3674
+ * @param conversations - Array of conversations
3675
+ */
3676
+ setConversations(conversations: AXConversation[]): void;
3677
+ /**
3678
+ * Add multiple conversations (append to existing)
3679
+ * Used for pagination - appends new conversations without replacing existing ones
3680
+ * @param conversations - Array of conversations to add
3681
+ */
3682
+ addConversations(conversations: AXConversation[]): void;
3683
+ /**
3684
+ * Add or update a single conversation
3685
+ * @param conversation - Conversation to add/update
3686
+ */
3687
+ setConversation(conversation: AXConversation): void;
3688
+ /**
3689
+ * Get a conversation by ID
3690
+ * @param conversationId - Conversation ID
3691
+ * @returns Conversation or undefined
3692
+ */
3693
+ getConversation(conversationId: string): AXConversation | undefined;
3694
+ /**
3695
+ * Update a conversation with partial data
3696
+ * @param conversationId - Conversation ID
3697
+ * @param updates - Partial conversation updates
3698
+ */
3699
+ updateConversation(conversationId: string, updates: Partial<AXConversation>): void;
3700
+ /**
3701
+ * Delete a conversation
3702
+ * @param conversationId - Conversation ID
3703
+ */
3704
+ deleteConversation(conversationId: string): void;
3705
+ /**
3706
+ * Update conversation's last message
3707
+ * @param message - The message to set as last message
3708
+ */
3709
+ updateLastMessage(message: AXMessage): void;
3710
+ /**
3711
+ * Increment unread count
3709
3712
  * @param conversationId - Conversation ID
3710
3713
  */
3711
3714
  incrementUnreadCount(conversationId: string): void;
@@ -3816,367 +3819,208 @@ declare class AXConversationStoreService {
3816
3819
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationStoreService>;
3817
3820
  }
3818
3821
 
3819
- interface FileUploadProgress {
3820
- file: File;
3821
- progress: number;
3822
- status: 'pending' | 'uploading' | 'completed' | 'error';
3823
- error?: string;
3824
- }
3825
- interface FilePreview {
3826
- file: File;
3827
- preview?: string;
3828
- type: 'image' | 'video' | 'audio' | 'file';
3829
- }
3830
- declare class AXFileUploadService {
3831
- private readonly config;
3832
- private uploadProgress$;
3833
- /**
3834
- * Get upload progress observable
3835
- */
3836
- getUploadProgress(): Observable<FileUploadProgress>;
3837
- /**
3838
- * Read file as data URL for preview
3839
- */
3840
- readFileAsDataURL(file: File): Promise<string>;
3841
- /**
3842
- * Get file type category
3822
+ /**
3823
+ * Error severity levels
3824
+ */
3825
+ type AXErrorSeverity = 'info' | 'warning' | 'error' | 'critical';
3826
+ /**
3827
+ * Conversation error event
3828
+ */
3829
+ interface AXConversationError {
3830
+ /** Error code */
3831
+ code: string;
3832
+ /** Error message */
3833
+ message: string;
3834
+ /** Severity level */
3835
+ severity: AXErrorSeverity;
3836
+ /** Source operation */
3837
+ operation: string;
3838
+ /** Original error */
3839
+ originalError?: unknown;
3840
+ /** HTTP status code (if applicable) */
3841
+ statusCode?: number;
3842
+ /** Additional context */
3843
+ context?: Record<string, unknown>;
3844
+ /** Timestamp */
3845
+ timestamp: Date;
3846
+ /** Whether error was handled */
3847
+ handled: boolean;
3848
+ /** Recovery suggestions */
3849
+ recoverySuggestions?: string[];
3850
+ }
3851
+ /**
3852
+ * Error Handler Configuration
3853
+ */
3854
+ interface AXErrorHandlerConfig {
3855
+ /** Log errors to console */
3856
+ logToConsole?: boolean;
3857
+ /** Show user-friendly error messages */
3858
+ showUserMessages?: boolean;
3859
+ /** Retry failed operations automatically */
3860
+ autoRetry?: boolean;
3861
+ /** Number of retry attempts */
3862
+ maxRetries?: number;
3863
+ /** Custom error handler */
3864
+ customHandler?: (error: AXConversationError) => void;
3865
+ }
3866
+ /**
3867
+ * Error Handler Service
3868
+ */
3869
+ declare class AXErrorHandlerService {
3870
+ private readonly injectedConfig;
3871
+ private readonly _errors$;
3872
+ private readonly _config;
3873
+ /** Error stream */
3874
+ readonly errors$: rxjs.Observable<AXConversationError>;
3875
+ constructor();
3876
+ /**
3877
+ * Configure error handler
3843
3878
  */
3844
- getFileType(file: File): 'image' | 'video' | 'audio' | 'file';
3879
+ configure(config: Partial<AXErrorHandlerConfig>): void;
3845
3880
  /**
3846
- * Generate file preview
3881
+ * Handle an error
3847
3882
  */
3848
- generatePreview(file: File): Promise<FilePreview>;
3883
+ handle(error: unknown, operation: string, context?: Record<string, unknown>): AXConversationError;
3849
3884
  /**
3850
- * Generate previews for multiple files
3885
+ * Handle API error
3851
3886
  */
3852
- generatePreviews(files: File[]): Promise<FilePreview[]>;
3887
+ handleApiError(apiError: AXApiError, operation: string, context?: Record<string, unknown>): AXConversationError;
3853
3888
  /**
3854
- * Get video duration
3889
+ * Normalize any error to conversation error format
3855
3890
  */
3856
- getVideoDuration(file: File): Promise<number>;
3891
+ private normalizeError;
3857
3892
  /**
3858
- * Get audio duration
3893
+ * Check if error is API error
3859
3894
  */
3860
- getAudioDuration(file: File): Promise<number>;
3895
+ private isApiError;
3861
3896
  /**
3862
- * Format file size
3897
+ * Determine severity based on status code
3863
3898
  */
3864
- formatFileSize(bytes: number): string;
3899
+ private determineSeverity;
3865
3900
  /**
3866
- * Format duration (seconds to mm:ss)
3901
+ * Get recovery suggestions based on error
3867
3902
  */
3868
- formatDuration(seconds: number): string;
3903
+ private getRecoverySuggestions;
3869
3904
  /**
3870
- * Validate file type
3905
+ * Get default recovery suggestions
3871
3906
  */
3872
- validateFileType(file: File, allowedTypes: string[]): boolean;
3907
+ private getDefaultRecoverySuggestions;
3873
3908
  /**
3874
- * Validate file size
3909
+ * Log error to console
3875
3910
  */
3876
- validateFileSize(file: File, maxSizeInMB: number): boolean;
3911
+ private logError;
3877
3912
  /**
3878
- * Filter files by type
3913
+ * Get user-friendly error message
3879
3914
  */
3880
- filterFilesByType(files: File[], allowedTypes: string[]): File[];
3915
+ getUserFriendlyMessage(error: AXConversationError): string;
3881
3916
  /**
3882
- * Validate file type against conversation config
3917
+ * Check if error is retryable
3883
3918
  */
3884
- isFileTypeAllowed(file: File): boolean;
3919
+ isRetryable(error: AXConversationError): boolean;
3885
3920
  /**
3886
- * Validate file size against conversation config
3921
+ * Execute an operation with automatic retry logic
3922
+ * @param operation - The async operation to execute
3923
+ * @param operationName - Name of the operation for error tracking
3924
+ * @param context - Additional context for error handling
3925
+ * @returns Promise resolving to the operation result
3926
+ * @throws {AXConversationError} If all retries fail
3887
3927
  */
3888
- isFileSizeAllowed(file: File): boolean;
3928
+ executeWithRetry<T>(operation: () => Promise<T>, operationName: string, context?: Record<string, unknown>): Promise<T>;
3889
3929
  /**
3890
- * Validate a set of files using conversation config
3930
+ * Delay helper for retry backoff
3931
+ * @param ms - Milliseconds to delay
3891
3932
  */
3892
- validateFilesWithConfig(files: File[]): {
3893
- accepted: File[];
3894
- rejected: {
3895
- file: File;
3896
- reason: string;
3897
- }[];
3898
- };
3899
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
3900
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
3933
+ private delay;
3934
+ /**
3935
+ * Clear error history
3936
+ */
3937
+ clear(): void;
3938
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXErrorHandlerService, never>;
3939
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXErrorHandlerService>;
3901
3940
  }
3902
3941
 
3903
- interface DropdownMenuItem {
3904
- id: string;
3905
- label: string;
3906
- icon?: string;
3907
- disabled?: boolean;
3908
- divider?: boolean;
3909
- destructive?: boolean;
3910
- shortcut?: string;
3942
+ interface FileUploadProgress {
3943
+ file: File;
3944
+ progress: number;
3945
+ status: 'pending' | 'uploading' | 'completed' | 'error';
3946
+ error?: string;
3911
3947
  }
3912
- declare class AXInfoBarComponent {
3913
- private readonly conversationService;
3914
- private readonly infoBar;
3915
- protected get registry(): AXRegistryService;
3916
- /** Active conversation */
3917
- readonly activeConversation: _angular_core.Signal<AXConversation>;
3918
- /** Active component from service */
3919
- readonly activeComponent: _angular_core.Signal<AXInfoBarActiveComponent>;
3920
- /** Members popover reference */
3921
- readonly membersPopoverRef: _angular_core.Signal<AXPopoverComponent>;
3922
- /** Members popover target element */
3923
- readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
3924
- /** Loading state for async actions */
3925
- readonly actionLoading: _angular_core.WritableSignal<boolean>;
3926
- /** Avatar clicked event */
3927
- readonly avatarClick: _angular_core.OutputEmitterRef<void>;
3928
- /** Search clicked event */
3929
- readonly searchClick: _angular_core.OutputEmitterRef<void>;
3930
- /** Search query changed event */
3931
- readonly searchQuery: _angular_core.OutputEmitterRef<string>;
3932
- /** Menu item clicked event */
3933
- readonly menuItemAction: _angular_core.OutputEmitterRef<string>;
3934
- /** Inline action buttons from registry */
3935
- readonly inlineActions: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarAction[]>;
3936
- /** Dropdown menu items from registry */
3937
- readonly menuItems: _angular_core.Signal<DropdownMenuItem[]>;
3938
- /** Get conversation status - delegate to utils */
3939
- getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
3940
- /** Get subtitle text - delegate to utils */
3941
- getSubtitle(conversation: AXConversation): string;
3942
- /** Get initials from name - delegate to utils */
3943
- getInitials(name: string): string;
3944
- /** Handle avatar click */
3945
- onAvatarClick(): void;
3946
- /** Handle members click - open popover */
3947
- onMembersClick(event: MouseEvent): void;
3948
- /** Handle inline action click */
3949
- onInlineActionClick(actionId: string): Promise<void>;
3950
- /** Get inputs for dynamic component */
3951
- getComponentInputs(): Record<string, any>;
3952
- /** Handle close component */
3953
- onCloseComponent(): void;
3954
- /** Handle menu item click */
3955
- onMenuItemClick(item: DropdownMenuItem): Promise<void>;
3956
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarComponent, never>;
3957
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarComponent, "ax-conversation-info-bar", never, {}, { "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
3948
+ interface FilePreview {
3949
+ file: File;
3950
+ preview?: string;
3951
+ type: 'image' | 'video' | 'audio' | 'file';
3958
3952
  }
3959
-
3960
- declare class AXMessageListComponent implements OnDestroy {
3961
- private readonly conversationService;
3962
- private readonly messageListService;
3963
- protected readonly config: AXConversationConfig;
3964
- /** Custom avatar template for message list items */
3965
- readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
3966
- private readonly timeouts;
3967
- private readonly replyCounts;
3968
- private readonly forwardCounts;
3969
- readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
3970
- readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
3971
- readonly reactionPopover: _angular_core.Signal<any>;
3972
- readonly availableReactions: _angular_core.WritableSignal<string[]>;
3973
- private get registry();
3974
- /** Message list element reference */
3975
- private readonly messageListRef;
3976
- /** Messages container element reference */
3977
- private readonly messagesContainerRef;
3978
- /** Loading state - use service */
3979
- readonly loading: _angular_core.WritableSignal<boolean>;
3980
- /** Loading more messages state - use service */
3981
- readonly loadingMore: _angular_core.WritableSignal<boolean>;
3982
- /** Show scroll to bottom button - use service */
3983
- readonly showScrollButton: _angular_core.WritableSignal<boolean>;
3984
- /** Active conversation */
3985
- readonly activeConversation: _angular_core.Signal<AXConversation>;
3986
- /** Messages */
3987
- readonly messages: _angular_core.Signal<AXMessage[]>;
3988
- /** Message action event */
3989
- readonly messageAction: _angular_core.OutputEmitterRef<{
3990
- message: AXMessage;
3991
- action: string;
3992
- }>;
3993
- /** Current user from service */
3994
- readonly currentUser: _angular_core.Signal<AXParticipant>;
3995
- /** Message grouped by date - use service */
3996
- readonly messageGroups: _angular_core.Signal<{
3997
- date: string;
3998
- dateLabel: string;
3999
- messages: AXMessage[];
4000
- }[]>;
4001
- constructor();
4002
- private intersectionObserver?;
3953
+ declare class AXFileUploadService {
3954
+ private readonly config;
3955
+ private uploadProgress$;
4003
3956
  /**
4004
- * Setup intersection observer to mark messages as read when visible
3957
+ * Get upload progress observable
4005
3958
  */
4006
- private setupIntersectionObserver;
3959
+ getUploadProgress(): Observable<FileUploadProgress>;
4007
3960
  /**
4008
- * Mark message as read
3961
+ * Read file as data URL for preview
4009
3962
  */
4010
- private markMessageAsRead;
4011
- /** Get message CSS classes */
4012
- getMessageClasses(message: AXMessage): string;
4013
- /** Get bubble CSS classes */
4014
- getBubbleClasses(message: AXMessage): string;
4015
- /** Check if message is from current user */
4016
- isOwnMessage(message: AXMessage): boolean;
4017
- /** Should show avatar */
4018
- shouldShowAvatar(message: AXMessage): boolean;
4019
- /** Should show sender name */
4020
- shouldShowSenderName(message: AXMessage): boolean;
4021
- /** Get sender name */
4022
- getSenderName(message: AXMessage): string;
4023
- /** Get sender avatar */
4024
- getSenderAvatar(message: AXMessage): string | undefined;
4025
- /** Get original sender name for forwarded messages */
4026
- getOriginalSenderName(message: AXMessage): string;
4027
- /** Get forwarded text with sender and conversation info */
4028
- getForwardedText(message: AXMessage): string;
4029
- /** Resolve renderer component for message */
4030
- getRendererComponent(message: AXMessage): _angular_core.Type<any>;
4031
- /** Provide inputs for the dynamic renderer */
4032
- getRendererInputs(message: AXMessage): {
4033
- message: AXMessage;
4034
- };
4035
- /** Get status icon */
4036
- getStatusIcon(message: AXMessage): string;
4037
- /** Get status icon CSS classes */
4038
- getStatusIconClasses(message: AXMessage): string;
4039
- /** Get status tooltip text */
4040
- getStatusTooltip(message: AXMessage): string;
4041
- /** Get first unread message ID */
4042
- readonly firstUnreadMessageId: _angular_core.Signal<string>;
4043
- /** Get grouped reactions */
4044
- getGroupedReactions(message: AXMessage): Array<{
4045
- emoji: string;
4046
- count: number;
4047
- userIds: string[];
4048
- hasReacted: boolean;
4049
- }>;
4050
- /** Get reaction tooltip text */
4051
- getReactionTooltip(reaction: {
4052
- emoji: string;
4053
- count: number;
4054
- userIds: string[];
4055
- hasReacted: boolean;
4056
- }): string;
4057
- /** Toggle reaction picker */
4058
- toggleReactionPicker(messageId: string, event: MouseEvent): void;
4059
- /** Close reaction picker */
4060
- closeReactionPicker(): void;
4061
- /** Check if current user has reacted with specific emoji */
4062
- hasUserReacted(message: AXMessage, emoji: string): boolean;
4063
- /** Check if current user has reacted with specific emoji by message ID */
4064
- hasUserReactedById(messageId: string, emoji: string): boolean;
4065
- /** Handle reaction click by message ID */
4066
- onReactionClickById(messageId: string, emoji: string): void;
4067
- /** Get message by ID */
4068
- getMessageById(messageId: string): AXMessage | undefined;
4069
- /** Load available reactions from API */
4070
- private loadAvailableReactions;
4071
- /** Get message actions from registry */
4072
- getMessageActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
4073
- /** Get initials from name */
4074
- getInitials(name: string): string;
4075
- /** Handle reaction click */
4076
- onReactionClick(message: AXMessage, emoji: string): void;
4077
- /** Handle message action */
4078
- onMessageAction(message: AXMessage, action: any): Promise<void>;
4079
- /** Handle scroll events */
4080
- onScroll(event: Event): void;
4081
- /** Handle infinite scroll threshold */
4082
- onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
4083
- /** Load older messages - delegate to service */
4084
- private loadOlderMessages;
4085
- /** Check if user is near bottom of scroll */
4086
- private isUserNearBottom;
4087
- /** Scroll to bottom */
4088
- scrollToBottom(smooth?: boolean): void;
4089
- /** Scroll to specific message */
4090
- scrollToMessage(messageId: string): void;
4091
- /** Cleanup timeouts and observers on destroy */
4092
- ngOnDestroy(): void;
4093
- /** Get message preview text for reply */
4094
- getMessagePreviewText(message: AXMessage): {
4095
- value: string;
4096
- type: string;
4097
- icon: string;
4098
- };
4099
- /** Get ARIA label for message */
4100
- getMessageAriaLabel(message: AXMessage): string;
4101
- /** Get reply count for a message (fetches from API across all conversations) */
4102
- getReplyCount(message: AXMessage): number;
4103
- /** Get forward count for a message (fetches from API across all conversations) */
4104
- getForwardCount(message: AXMessage): number;
3963
+ readFileAsDataURL(file: File): Promise<string>;
3964
+ /**
3965
+ * Get file type category
3966
+ */
3967
+ getFileType(file: File): 'image' | 'video' | 'audio' | 'file';
3968
+ /**
3969
+ * Generate file preview
3970
+ */
3971
+ generatePreview(file: File): Promise<FilePreview>;
3972
+ /**
3973
+ * Generate previews for multiple files
3974
+ */
3975
+ generatePreviews(files: File[]): Promise<FilePreview[]>;
3976
+ /**
3977
+ * Get video duration
3978
+ */
3979
+ getVideoDuration(file: File): Promise<number>;
4105
3980
  /**
4106
- * Refresh count for a specific message from API
4107
- * This is called when a new reply or forward is detected globally
3981
+ * Get audio duration
4108
3982
  */
4109
- private refreshCount;
4110
- /** Show thread view for a message */
4111
- showThread(message: AXMessage): void;
4112
- /** Handle context menu opening for messages */
4113
- handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
4114
- /** Handle context menu item click for messages */
4115
- handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXMessage): void;
3983
+ getAudioDuration(file: File): Promise<number>;
4116
3984
  /**
4117
- * TrackBy function for message groups
4118
- * Tracks by date only to prevent re-rendering when messages are added
3985
+ * Format file size
4119
3986
  */
4120
- trackMessageGroup(index: number, group: {
4121
- date: string;
4122
- messages: AXMessage[];
4123
- }): string;
3987
+ formatFileSize(bytes: number): string;
4124
3988
  /**
4125
- * TrackBy function for messages
4126
- * Tracks by ID only to prevent unnecessary re-renders
3989
+ * Format duration (seconds to mm:ss)
4127
3990
  */
4128
- trackMessage(index: number, message: AXMessage): string;
4129
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListComponent, never>;
4130
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, { "avatarTemplate": { "alias": "avatarTemplate"; "required": false; "isSignal": true; }; }, { "messageAction": "messageAction"; }, never, never, true, never>;
4131
- }
4132
- interface AXMessageAvatarTemplateContext {
4133
- $implicit: AXMessage;
4134
- size: number;
4135
- senderName: string;
4136
- senderAvatar?: string;
4137
- }
4138
-
4139
- declare class AXMessageListService {
4140
- private readonly conversationService;
4141
- private readonly composerService;
4142
- private readonly config;
4143
- private get registry();
4144
- readonly activeConversation: _angular_core.Signal<AXConversation>;
4145
- readonly activeMessages: _angular_core.Signal<AXMessage[]>;
4146
- readonly currentUser: _angular_core.Signal<AXParticipant>;
4147
- /** Loading state */
4148
- readonly loading: _angular_core.WritableSignal<boolean>;
4149
- /** Loading more messages state */
4150
- readonly loadingMore: _angular_core.WritableSignal<boolean>;
4151
- /** Show scroll to bottom button */
4152
- readonly showScrollButton: _angular_core.WritableSignal<boolean>;
4153
- /** Scroll requests counter */
4154
- readonly scrollRequests: _angular_core.WritableSignal<number>;
4155
- /** Current page for pagination */
4156
- private readonly currentPage;
4157
- /** Has more messages to load */
4158
- private readonly hasMoreMessages;
4159
- /** Message grouped by date */
4160
- readonly messageGroups: _angular_core.Signal<{
4161
- date: string;
4162
- dateLabel: string;
4163
- messages: AXMessage[];
4164
- }[]>;
3991
+ formatDuration(seconds: number): string;
4165
3992
  /**
4166
- * Load more messages (pagination)
3993
+ * Validate file type
4167
3994
  */
4168
- loadMoreMessages(): Promise<void>;
3995
+ validateFileType(file: File, allowedTypes: string[]): boolean;
4169
3996
  /**
4170
- * Reset pagination (call when conversation changes)
3997
+ * Validate file size
4171
3998
  */
4172
- resetPagination(): void;
4173
- getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
4174
- executeAction(message: AXMessage, actionId: string): Promise<void>;
4175
- reactToMessage(messageId: string, emoji: string): Promise<void>;
4176
- /** Request message list to scroll to bottom */
4177
- requestScrollToBottom(): void;
4178
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListService, never>;
4179
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
3999
+ validateFileSize(file: File, maxSizeInMB: number): boolean;
4000
+ /**
4001
+ * Filter files by type
4002
+ */
4003
+ filterFilesByType(files: File[], allowedTypes: string[]): File[];
4004
+ /**
4005
+ * Validate file type against conversation config
4006
+ */
4007
+ isFileTypeAllowed(file: File): boolean;
4008
+ /**
4009
+ * Validate file size against conversation config
4010
+ */
4011
+ isFileSizeAllowed(file: File): boolean;
4012
+ /**
4013
+ * Validate a set of files using conversation config
4014
+ */
4015
+ validateFilesWithConfig(files: File[]): {
4016
+ accepted: File[];
4017
+ rejected: {
4018
+ file: File;
4019
+ reason: string;
4020
+ }[];
4021
+ };
4022
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
4023
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
4180
4024
  }
4181
4025
 
4182
4026
  declare class AXForwardMessageDialogComponent implements OnInit {
@@ -4273,7 +4117,7 @@ declare class AXSidebarService {
4273
4117
 
4274
4118
  declare class AXSidebarComponent implements OnDestroy {
4275
4119
  readonly sidebar: AXSidebarService;
4276
- protected readonly config: AXConversationConfig;
4120
+ protected readonly config: _acorex_components_conversation2.AXConversationConfig;
4277
4121
  /** Conversation selected event */
4278
4122
  readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
4279
4123
  /** Search debouncing */
@@ -4324,6 +4168,162 @@ declare class AXInfiniteScrollDirective {
4324
4168
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInfiniteScrollDirective, "[axInfiniteScroll]", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "edge": { "alias": "edge"; "required": false; "isSignal": true; }; }, { "scrollThreshold": "scrollThreshold"; }, never, never, true, never>;
4325
4169
  }
4326
4170
 
4171
+ /**
4172
+ * Conversation Configuration Interface
4173
+ * Centralized configuration values to avoid magic numbers
4174
+ */
4175
+ /**
4176
+ * Main configuration interface for the conversation component
4177
+ */
4178
+ interface AXConversationConfig {
4179
+ /** Number of messages to load per page */
4180
+ messagePageSize?: number;
4181
+ /** Number of conversations to load per page */
4182
+ conversationPageSize?: number;
4183
+ /** Scroll threshold for detecting scroll events */
4184
+ scrollThreshold?: number;
4185
+ /** Infinite scroll threshold */
4186
+ infiniteScrollThreshold?: number;
4187
+ /** Typing indicator timeout in milliseconds */
4188
+ typingIndicatorTimeout?: number;
4189
+ /** Typing indicator throttle in milliseconds (for rate limiting) */
4190
+ typingIndicatorThrottle?: number;
4191
+ /** Message highlight duration in milliseconds */
4192
+ messageHighlightDuration?: number;
4193
+ /** Search debounce delay in milliseconds */
4194
+ debounceSearch?: number;
4195
+ /** Date separator inactivity fade delay in milliseconds */
4196
+ /** Maximum messages per conversation */
4197
+ maxMessagesPerConversation?: number;
4198
+ /** Maximum total messages in store */
4199
+ maxTotalMessages?: number;
4200
+ /** Maximum cached conversations */
4201
+ maxCachedConversations?: number;
4202
+ /** Minimum sidebar width in pixels */
4203
+ minSidebarWidth?: number;
4204
+ /** Maximum sidebar width in pixels */
4205
+ maxSidebarWidth?: number;
4206
+ /** Default sidebar width in pixels */
4207
+ defaultSidebarWidth?: number;
4208
+ /** Virtual scroll item size in pixels */
4209
+ virtualScrollItemSize?: number;
4210
+ /** Virtual scroll minimum buffer in pixels */
4211
+ virtualScrollMinBuffer?: number;
4212
+ /** Virtual scroll maximum buffer in pixels */
4213
+ virtualScrollMaxBuffer?: number;
4214
+ /** Filter cache size */
4215
+ filterCacheSize?: number;
4216
+ /** Maximum file size in bytes */
4217
+ maxFileSize?: number;
4218
+ /** Allowed file types (glob patterns like 'image/*') */
4219
+ allowedFileTypes?: string[];
4220
+ /** Maximum message length in characters */
4221
+ maxMessageLength?: number;
4222
+ /** Minimum message length in characters */
4223
+ minMessageLength?: number;
4224
+ /** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
4225
+ messageReadThreshold?: number;
4226
+ }
4227
+
4228
+ /**
4229
+ * Default Configuration Values
4230
+ * Centralized defaults to avoid magic numbers throughout the codebase
4231
+ */
4232
+
4233
+ /**
4234
+ * Default conversation configuration
4235
+ * All values are explicitly defined here for easy maintenance and documentation
4236
+ */
4237
+ declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
4238
+ /**
4239
+ * Helper function to merge user config with defaults
4240
+ * Properly handles array merging to avoid reference issues
4241
+ * @param userConfig - User-provided configuration
4242
+ * @returns Merged configuration with all required fields
4243
+ */
4244
+ declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
4245
+
4246
+ /**
4247
+ * Dependency Injection Tokens
4248
+ * InjectionTokens for configuration and dependencies
4249
+ */
4250
+
4251
+ /**
4252
+ * Configuration token for conversation component
4253
+ * Uses centralized defaults from AX_DEFAULT_CONVERSATION_CONFIG
4254
+ */
4255
+ declare const CONVERSATION_CONFIG: InjectionToken<AXConversationConfig>;
4256
+ /**
4257
+ * Token for configuring AXErrorHandlerService
4258
+ */
4259
+ declare const ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXErrorHandlerConfig>>;
4260
+
4261
+ /**
4262
+ * Registry Configuration Tokens
4263
+ * Injection tokens for configuring default registry values
4264
+ */
4265
+
4266
+ /**
4267
+ * Additional message renderers configuration
4268
+ * Provide this token to add custom message renderers in addition to built-in ones
4269
+ * Note: Built-in renderers (text, image, video, audio, voice, file, location, sticker, contact, system, fallback) are automatically registered
4270
+ */
4271
+ declare const DEFAULT_MESSAGE_RENDERERS: InjectionToken<AXMessageRenderer[]>;
4272
+ /**
4273
+ * Default message actions configuration
4274
+ * Provide this token to override default message actions
4275
+ */
4276
+ declare const DEFAULT_MESSAGE_ACTIONS: InjectionToken<AXMessageAction[]>;
4277
+ /**
4278
+ * Default composer tabs configuration
4279
+ * Provide this token to override default composer tabs (emoji, stickers, etc.)
4280
+ */
4281
+ declare const DEFAULT_COMPOSER_TABS: InjectionToken<AXComposerTab[]>;
4282
+ /**
4283
+ * Default composer actions configuration
4284
+ * Provide this token to override default composer actions (attach, voice, etc.)
4285
+ */
4286
+ declare const DEFAULT_COMPOSER_ACTIONS: InjectionToken<AXComposerAction[]>;
4287
+ /**
4288
+ * Default conversation tabs configuration
4289
+ * Provide this token to override default conversation tabs (all, private, groups, etc.)
4290
+ */
4291
+ declare const DEFAULT_CONVERSATION_TABS: InjectionToken<AXConversationTab[]>;
4292
+ /**
4293
+ * Default info bar actions configuration
4294
+ * Provide this token to override default info bar actions (mute, archive, block, etc.)
4295
+ */
4296
+ declare const DEFAULT_INFO_BAR_ACTIONS: InjectionToken<AXInfoBarAction[]>;
4297
+ /**
4298
+ * Default conversation item actions configuration
4299
+ * Provide this token to override default conversation item actions (mute, delete, archive, etc.)
4300
+ */
4301
+ declare const DEFAULT_CONVERSATION_ITEM_ACTIONS: InjectionToken<AXConversationItemAction[]>;
4302
+ /**
4303
+ * Registry configuration interface
4304
+ */
4305
+ interface AXRegistryConfiguration {
4306
+ /** Additional message renderers to register (built-in renderers are automatic) */
4307
+ messageRenderers?: AXMessageRenderer[];
4308
+ /** Message actions to register by default */
4309
+ messageActions?: AXMessageAction[];
4310
+ /** Composer tabs to register by default */
4311
+ composerTabs?: AXComposerTab[];
4312
+ /** Composer actions to register by default */
4313
+ composerActions?: AXComposerAction[];
4314
+ /** Conversation tabs to register by default */
4315
+ conversationTabs?: AXConversationTab[];
4316
+ /** Info bar actions to register by default */
4317
+ infoBarActions?: AXInfoBarAction[];
4318
+ /** Conversation item actions to register by default */
4319
+ conversationItemActions?: AXConversationItemAction[];
4320
+ }
4321
+ /**
4322
+ * Complete registry configuration token
4323
+ * Provide this for comprehensive registry configuration
4324
+ */
4325
+ declare const REGISTRY_CONFIG: InjectionToken<AXRegistryConfiguration>;
4326
+
4327
4327
  declare class AXIndexedDBUserApi extends AXUserApi {
4328
4328
  getCurrentUser(): Promise<AXParticipant>;
4329
4329
  updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
@@ -4959,7 +4959,7 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
4959
4959
  editTitle: string;
4960
4960
  editAvatar: string;
4961
4961
  /** Get filtered members based on search */
4962
- get filteredMembers(): AXParticipant[];
4962
+ get filteredMembers(): _acorex_components_conversation2.AXParticipant[];
4963
4963
  /** Handle tab change */
4964
4964
  onTabChange(event: any): void;
4965
4965
  ngOnInit(): void;
@@ -5008,7 +5008,7 @@ declare class AXInfoBarSearchComponent {
5008
5008
  /** Current index from service */
5009
5009
  readonly currentIndex: _angular_core.Signal<number>;
5010
5010
  /** Messages from conversation */
5011
- readonly messages: _angular_core.Signal<AXMessage[]>;
5011
+ readonly messages: _angular_core.Signal<_acorex_components_conversation2.AXMessage[]>;
5012
5012
  constructor();
5013
5013
  /** Handle search input change */
5014
5014
  onSearchChange(value: string): void;