@droppii-org/chat-sdk 0.6.56 → 0.7.1

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 (435) hide show
  1. package/dist/components/canned-response/CannedResponseBody.d.ts.map +1 -1
  2. package/dist/components/canned-response/CannedResponseBody.js +4 -3
  3. package/dist/components/canned-response/CannedResponsePanel.d.ts +9 -0
  4. package/dist/components/canned-response/CannedResponsePanel.d.ts.map +1 -0
  5. package/dist/components/canned-response/CannedResponsePanel.js +72 -0
  6. package/dist/components/canned-response/CannedResponseRow.d.ts +10 -0
  7. package/dist/components/canned-response/CannedResponseRow.d.ts.map +1 -0
  8. package/dist/components/canned-response/CannedResponseRow.js +6 -0
  9. package/dist/components/canned-response/CannedScopeChips.d.ts +10 -0
  10. package/dist/components/canned-response/CannedScopeChips.d.ts.map +1 -0
  11. package/dist/components/canned-response/CannedScopeChips.js +34 -0
  12. package/dist/components/canned-response/cannedScopes.d.ts +16 -0
  13. package/dist/components/canned-response/cannedScopes.d.ts.map +1 -0
  14. package/dist/components/canned-response/cannedScopes.js +39 -0
  15. package/dist/components/canned-response/index.d.ts.map +1 -1
  16. package/dist/components/canned-response/index.js +11 -10
  17. package/dist/components/canned-response/insertCannedContent.d.ts +7 -0
  18. package/dist/components/canned-response/insertCannedContent.d.ts.map +1 -0
  19. package/dist/components/canned-response/insertCannedContent.js +39 -0
  20. package/dist/components/canned-response/team/TeamItem.d.ts.map +1 -1
  21. package/dist/components/canned-response/team/TeamItem.js +5 -4
  22. package/dist/components/common/ConfirmModal.d.ts +13 -1
  23. package/dist/components/common/ConfirmModal.d.ts.map +1 -1
  24. package/dist/components/common/ConfirmModal.js +24 -6
  25. package/dist/components/common/DeskPanelDrawer.d.ts +17 -0
  26. package/dist/components/common/DeskPanelDrawer.d.ts.map +1 -0
  27. package/dist/components/common/DeskPanelDrawer.js +21 -0
  28. package/dist/components/common/DeskSidePanel.d.ts +17 -0
  29. package/dist/components/common/DeskSidePanel.d.ts.map +1 -0
  30. package/dist/components/common/DeskSidePanel.js +23 -0
  31. package/dist/components/common/TintedAvatar.d.ts +11 -0
  32. package/dist/components/common/TintedAvatar.d.ts.map +1 -0
  33. package/dist/components/common/TintedAvatar.js +17 -0
  34. package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
  35. package/dist/components/compose/ComposeNewMessageModal.js +11 -1
  36. package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
  37. package/dist/components/conversation/ConversationByGroupItem.js +10 -6
  38. package/dist/components/conversation/ConversationBySessionItem.d.ts +4 -1
  39. package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
  40. package/dist/components/conversation/ConversationBySessionItem.js +36 -10
  41. package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
  42. package/dist/components/conversation/DeskConversationList.js +44 -29
  43. package/dist/components/conversation/DeskConversationRow.d.ts +19 -0
  44. package/dist/components/conversation/DeskConversationRow.d.ts.map +1 -0
  45. package/dist/components/conversation/DeskConversationRow.js +18 -0
  46. package/dist/components/conversation/DeskListEmptyState.d.ts +6 -0
  47. package/dist/components/conversation/DeskListEmptyState.d.ts.map +1 -0
  48. package/dist/components/conversation/DeskListEmptyState.js +11 -0
  49. package/dist/components/conversation/DeskListHeader.d.ts +14 -0
  50. package/dist/components/conversation/DeskListHeader.d.ts.map +1 -0
  51. package/dist/components/conversation/DeskListHeader.js +39 -0
  52. package/dist/components/conversation/DeskListSkeleton.d.ts +6 -0
  53. package/dist/components/conversation/DeskListSkeleton.d.ts.map +1 -0
  54. package/dist/components/conversation/DeskListSkeleton.js +9 -0
  55. package/dist/components/conversation/DeskRowAvatar.d.ts +8 -0
  56. package/dist/components/conversation/DeskRowAvatar.d.ts.map +1 -0
  57. package/dist/components/conversation/DeskRowAvatar.js +6 -0
  58. package/dist/components/conversation/RowChip.d.ts +14 -0
  59. package/dist/components/conversation/RowChip.d.ts.map +1 -0
  60. package/dist/components/conversation/RowChip.js +11 -0
  61. package/dist/components/conversation/avatarTint.d.ts +6 -0
  62. package/dist/components/conversation/avatarTint.d.ts.map +1 -0
  63. package/dist/components/conversation/avatarTint.js +27 -0
  64. package/dist/components/conversation/folderEmptyState.d.ts +2 -0
  65. package/dist/components/conversation/folderEmptyState.d.ts.map +1 -0
  66. package/dist/components/conversation/folderEmptyState.js +14 -0
  67. package/dist/components/conversation/internalNotePreview.d.ts +6 -0
  68. package/dist/components/conversation/internalNotePreview.d.ts.map +1 -0
  69. package/dist/components/conversation/internalNotePreview.js +11 -0
  70. package/dist/components/conversation/listHeading.d.ts +19 -0
  71. package/dist/components/conversation/listHeading.d.ts.map +1 -0
  72. package/dist/components/conversation/listHeading.js +24 -0
  73. package/dist/components/conversation/rowDisplayName.d.ts +7 -0
  74. package/dist/components/conversation/rowDisplayName.d.ts.map +1 -0
  75. package/dist/components/conversation/rowDisplayName.js +8 -0
  76. package/dist/components/conversation/rowTime.d.ts +4 -0
  77. package/dist/components/conversation/rowTime.d.ts.map +1 -0
  78. package/dist/components/conversation/rowTime.js +10 -0
  79. package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
  80. package/dist/components/conversation-detail/PinLimitModal.js +3 -1
  81. package/dist/components/group/AddMemberModal.d.ts.map +1 -1
  82. package/dist/components/group/AddMemberModal.js +15 -4
  83. package/dist/components/group/AdminPermissionModal.d.ts +1 -0
  84. package/dist/components/group/AdminPermissionModal.d.ts.map +1 -1
  85. package/dist/components/group/AdminPermissionModal.js +38 -3
  86. package/dist/components/group/CreateGroupForm.d.ts +3 -1
  87. package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
  88. package/dist/components/group/CreateGroupForm.js +7 -1
  89. package/dist/components/group/CreateGroupFormCrmView.d.ts +23 -0
  90. package/dist/components/group/CreateGroupFormCrmView.d.ts.map +1 -0
  91. package/dist/components/group/CreateGroupFormCrmView.js +25 -0
  92. package/dist/components/group/DisableSendPermissionConfirm.d.ts +11 -0
  93. package/dist/components/group/DisableSendPermissionConfirm.d.ts.map +1 -0
  94. package/dist/components/group/DisableSendPermissionConfirm.js +10 -0
  95. package/dist/components/group/GroupCompositeAvatar.d.ts.map +1 -1
  96. package/dist/components/group/GroupCompositeAvatar.js +39 -4
  97. package/dist/components/group/GroupMemberPicker.d.ts +5 -2
  98. package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
  99. package/dist/components/group/GroupMemberPicker.js +8 -42
  100. package/dist/components/group/GroupMemberPickerCrm.d.ts +4 -0
  101. package/dist/components/group/GroupMemberPickerCrm.d.ts.map +1 -0
  102. package/dist/components/group/GroupMemberPickerCrm.js +48 -0
  103. package/dist/components/group/GroupMemberPickerLegacy.d.ts +8 -0
  104. package/dist/components/group/GroupMemberPickerLegacy.d.ts.map +1 -0
  105. package/dist/components/group/GroupMemberPickerLegacy.js +46 -0
  106. package/dist/components/group/GroupPanelHeader.d.ts +10 -0
  107. package/dist/components/group/GroupPanelHeader.d.ts.map +1 -0
  108. package/dist/components/group/GroupPanelHeader.js +11 -0
  109. package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -1
  110. package/dist/components/group/MemberPermissionPanel.js +31 -2
  111. package/dist/components/group/PermissionPanelCrm.d.ts +24 -0
  112. package/dist/components/group/PermissionPanelCrm.d.ts.map +1 -0
  113. package/dist/components/group/PermissionPanelCrm.js +16 -0
  114. package/dist/components/group/PersonAvatar.d.ts +11 -0
  115. package/dist/components/group/PersonAvatar.d.ts.map +1 -0
  116. package/dist/components/group/PersonAvatar.js +21 -0
  117. package/dist/components/group/crmIcon.d.ts +9 -0
  118. package/dist/components/group/crmIcon.d.ts.map +1 -0
  119. package/dist/components/group/crmIcon.js +38 -0
  120. package/dist/components/icon/AdaptiveIcon.d.ts +15 -0
  121. package/dist/components/icon/AdaptiveIcon.d.ts.map +1 -0
  122. package/dist/components/icon/AdaptiveIcon.js +10 -0
  123. package/dist/components/icon/StrokeIcon.d.ts +14 -0
  124. package/dist/components/icon/StrokeIcon.d.ts.map +1 -0
  125. package/dist/components/icon/StrokeIcon.js +5 -0
  126. package/dist/components/icon/strokeIconNodes.d.ts +431 -0
  127. package/dist/components/icon/strokeIconNodes.d.ts.map +1 -0
  128. package/dist/components/icon/strokeIconNodes.js +269 -0
  129. package/dist/components/media-collection/index.d.ts.map +1 -1
  130. package/dist/components/media-collection/index.js +21 -5
  131. package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
  132. package/dist/components/message/GroupMembersDrawer.js +60 -13
  133. package/dist/components/message/GroupMembersPanelCrm.d.ts +23 -0
  134. package/dist/components/message/GroupMembersPanelCrm.d.ts.map +1 -0
  135. package/dist/components/message/GroupMembersPanelCrm.js +55 -0
  136. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  137. package/dist/components/message/MessageHeader.js +76 -27
  138. package/dist/components/message/MessageInfiniteScroll.d.ts +4 -2
  139. package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
  140. package/dist/components/message/MessageInfiniteScroll.js +1 -1
  141. package/dist/components/message/MessageList.d.ts +2 -1
  142. package/dist/components/message/MessageList.d.ts.map +1 -1
  143. package/dist/components/message/MessageList.js +12 -1
  144. package/dist/components/message/SelectSession.d.ts +4 -1
  145. package/dist/components/message/SelectSession.d.ts.map +1 -1
  146. package/dist/components/message/SelectSession.js +13 -4
  147. package/dist/components/message/UnassignedSessionFooter.js +2 -2
  148. package/dist/components/message/footer/ActionBar.d.ts +5 -1
  149. package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
  150. package/dist/components/message/footer/ActionBar.js +14 -1
  151. package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
  152. package/dist/components/message/footer/CannedResponsePlugin.js +18 -3
  153. package/dist/components/message/footer/ClosedSessionBanner.d.ts +9 -0
  154. package/dist/components/message/footer/ClosedSessionBanner.d.ts.map +1 -0
  155. package/dist/components/message/footer/ClosedSessionBanner.js +13 -0
  156. package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -1
  157. package/dist/components/message/footer/ComposerEditor.js +9 -4
  158. package/dist/components/message/footer/ComposerTabs.d.ts +1 -2
  159. package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
  160. package/dist/components/message/footer/ComposerTabs.js +14 -35
  161. package/dist/components/message/footer/CrmComposerCard.d.ts +11 -0
  162. package/dist/components/message/footer/CrmComposerCard.d.ts.map +1 -0
  163. package/dist/components/message/footer/CrmComposerCard.js +30 -0
  164. package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
  165. package/dist/components/message/footer/EnterHandler.js +3 -0
  166. package/dist/components/message/footer/FilePreview.js +2 -2
  167. package/dist/components/message/footer/LinkInputPreview.js +2 -2
  168. package/dist/components/message/footer/MediaActions.d.ts +2 -1
  169. package/dist/components/message/footer/MediaActions.d.ts.map +1 -1
  170. package/dist/components/message/footer/MediaActions.js +21 -4
  171. package/dist/components/message/footer/SessionClosedModal.d.ts +3 -1
  172. package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
  173. package/dist/components/message/footer/SessionClosedModal.js +6 -2
  174. package/dist/components/message/footer/ToolbarPlugin.d.ts +3 -1
  175. package/dist/components/message/footer/ToolbarPlugin.d.ts.map +1 -1
  176. package/dist/components/message/footer/ToolbarPlugin.js +2 -2
  177. package/dist/components/message/footer/clearComposerHistory.d.ts +3 -0
  178. package/dist/components/message/footer/clearComposerHistory.d.ts.map +1 -0
  179. package/dist/components/message/footer/clearComposerHistory.js +11 -0
  180. package/dist/components/message/footer/index.d.ts +2 -2
  181. package/dist/components/message/footer/index.d.ts.map +1 -1
  182. package/dist/components/message/footer/index.js +15 -5
  183. package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -1
  184. package/dist/components/message/footer/mention/MentionMenu.js +4 -1
  185. package/dist/components/message/footer/useComposerFocusRequest.d.ts +10 -0
  186. package/dist/components/message/footer/useComposerFocusRequest.d.ts.map +1 -0
  187. package/dist/components/message/footer/useComposerFocusRequest.js +28 -0
  188. package/dist/components/message/groupMemberMenuCrm.d.ts +32 -0
  189. package/dist/components/message/groupMemberMenuCrm.d.ts.map +1 -0
  190. package/dist/components/message/groupMemberMenuCrm.js +83 -0
  191. package/dist/components/message/groupMemberTypes.d.ts +13 -0
  192. package/dist/components/message/groupMemberTypes.d.ts.map +1 -0
  193. package/dist/components/message/groupMemberTypes.js +1 -0
  194. package/dist/components/message/headerIconButton.d.ts +10 -0
  195. package/dist/components/message/headerIconButton.d.ts.map +1 -0
  196. package/dist/components/message/headerIconButton.js +9 -0
  197. package/dist/components/message/item/CrmSystemLine.d.ts +10 -0
  198. package/dist/components/message/item/CrmSystemLine.d.ts.map +1 -0
  199. package/dist/components/message/item/CrmSystemLine.js +6 -0
  200. package/dist/components/message/item/DateDivider.d.ts +5 -0
  201. package/dist/components/message/item/DateDivider.d.ts.map +1 -0
  202. package/dist/components/message/item/DateDivider.js +5 -0
  203. package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
  204. package/dist/components/message/item/GroupNotificationMessage.js +9 -0
  205. package/dist/components/message/item/MemberEventSummary.d.ts +8 -0
  206. package/dist/components/message/item/MemberEventSummary.d.ts.map +1 -0
  207. package/dist/components/message/item/MemberEventSummary.js +18 -0
  208. package/dist/components/message/item/MessageBubble.d.ts +3 -1
  209. package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
  210. package/dist/components/message/item/MessageBubble.js +27 -13
  211. package/dist/components/message/item/MessageMoreButton.d.ts +13 -0
  212. package/dist/components/message/item/MessageMoreButton.d.ts.map +1 -0
  213. package/dist/components/message/item/MessageMoreButton.js +42 -0
  214. package/dist/components/message/item/RevokeMessage.js +1 -1
  215. package/dist/components/message/item/SessionEventMessage.d.ts.map +1 -1
  216. package/dist/components/message/item/SessionEventMessage.js +13 -1
  217. package/dist/components/message/item/SystemLogMessage.d.ts.map +1 -1
  218. package/dist/components/message/item/SystemLogMessage.js +7 -0
  219. package/dist/components/message/item/index.d.ts.map +1 -1
  220. package/dist/components/message/item/index.js +64 -15
  221. package/dist/components/message/item/otherSenders.d.ts +7 -0
  222. package/dist/components/message/item/otherSenders.d.ts.map +1 -0
  223. package/dist/components/message/item/otherSenders.js +29 -0
  224. package/dist/components/message/item/textStyle.d.ts +1 -1
  225. package/dist/components/message/item/textStyle.d.ts.map +1 -1
  226. package/dist/components/message/item/textStyle.js +2 -2
  227. package/dist/components/message/messageKeyboardNav.d.ts +8 -0
  228. package/dist/components/message/messageKeyboardNav.d.ts.map +1 -0
  229. package/dist/components/message/messageKeyboardNav.js +24 -0
  230. package/dist/components/message/reply/ReplyPreviewBar.js +2 -2
  231. package/dist/components/message/toolbox/MessageToolboxMenu.d.ts.map +1 -1
  232. package/dist/components/message/toolbox/MessageToolboxMenu.js +16 -1
  233. package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
  234. package/dist/components/search-conversation/SearchAll.js +12 -1
  235. package/dist/components/search-conversation/SearchDrawer.d.ts.map +1 -1
  236. package/dist/components/search-conversation/SearchDrawer.js +31 -15
  237. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
  238. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +5 -2
  239. package/dist/components/search-conversation/index.d.ts.map +1 -1
  240. package/dist/components/search-conversation/index.js +3 -1
  241. package/dist/components/search-conversation/item/SearchItemAsGroup.d.ts.map +1 -1
  242. package/dist/components/search-conversation/item/SearchItemAsGroup.js +14 -4
  243. package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
  244. package/dist/components/search-conversation/item/SearchItemAsMessage.js +18 -7
  245. package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
  246. package/dist/components/search-conversation/item/SearchItemAsUser.js +23 -5
  247. package/dist/components/search-conversation/item/searchRowClass.d.ts +3 -0
  248. package/dist/components/search-conversation/item/searchRowClass.d.ts.map +1 -0
  249. package/dist/components/search-conversation/item/searchRowClass.js +5 -0
  250. package/dist/components/session/DeskAssignedSession.d.ts +5 -1
  251. package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
  252. package/dist/components/session/DeskAssignedSession.js +40 -12
  253. package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
  254. package/dist/components/session/DeskTeamInbox.js +15 -22
  255. package/dist/components/session/FolderRow.d.ts +21 -0
  256. package/dist/components/session/FolderRow.d.ts.map +1 -0
  257. package/dist/components/session/FolderRow.js +16 -0
  258. package/dist/components/session/SessionFolderList.d.ts +23 -0
  259. package/dist/components/session/SessionFolderList.d.ts.map +1 -0
  260. package/dist/components/session/SessionFolderList.js +27 -0
  261. package/dist/components/session/sessionFilters.d.ts +24 -0
  262. package/dist/components/session/sessionFilters.d.ts.map +1 -0
  263. package/dist/components/session/sessionFilters.js +80 -0
  264. package/dist/components/shortcut-help/ShortcutHelpModal.d.ts +8 -0
  265. package/dist/components/shortcut-help/ShortcutHelpModal.d.ts.map +1 -0
  266. package/dist/components/shortcut-help/ShortcutHelpModal.js +23 -0
  267. package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
  268. package/dist/components/thread/AssignConfirmModal.js +4 -3
  269. package/dist/components/thread/EndSessionConfirm.d.ts +11 -0
  270. package/dist/components/thread/EndSessionConfirm.d.ts.map +1 -0
  271. package/dist/components/thread/EndSessionConfirm.js +31 -0
  272. package/dist/components/thread/EndSessionToast.d.ts +6 -0
  273. package/dist/components/thread/EndSessionToast.d.ts.map +1 -0
  274. package/dist/components/thread/EndSessionToast.js +18 -0
  275. package/dist/components/thread/GroupInfoBodyCrm.d.ts +46 -0
  276. package/dist/components/thread/GroupInfoBodyCrm.d.ts.map +1 -0
  277. package/dist/components/thread/GroupInfoBodyCrm.js +41 -0
  278. package/dist/components/thread/GroupInfoRows.d.ts +33 -0
  279. package/dist/components/thread/GroupInfoRows.d.ts.map +1 -0
  280. package/dist/components/thread/GroupInfoRows.js +18 -0
  281. package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
  282. package/dist/components/thread/GroupThreadInfo.js +23 -6
  283. package/dist/components/thread/ManualAssignPopover.d.ts +3 -1
  284. package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
  285. package/dist/components/thread/ManualAssignPopover.js +21 -9
  286. package/dist/components/thread/SessionDetailCard.d.ts +6 -0
  287. package/dist/components/thread/SessionDetailCard.d.ts.map +1 -0
  288. package/dist/components/thread/SessionDetailCard.js +103 -0
  289. package/dist/components/thread/SessionSection.d.ts +2 -4
  290. package/dist/components/thread/SessionSection.d.ts.map +1 -1
  291. package/dist/components/thread/SessionSection.js +19 -122
  292. package/dist/components/thread/SessionTagPicker.d.ts +11 -0
  293. package/dist/components/thread/SessionTagPicker.d.ts.map +1 -0
  294. package/dist/components/thread/SessionTagPicker.js +27 -0
  295. package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
  296. package/dist/components/thread/SingleThreadInfo.js +16 -6
  297. package/dist/components/thread/SupportSessionPanel.d.ts +18 -0
  298. package/dist/components/thread/SupportSessionPanel.d.ts.map +1 -0
  299. package/dist/components/thread/SupportSessionPanel.js +46 -0
  300. package/dist/components/thread/ThreadInfo.d.ts +8 -1
  301. package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
  302. package/dist/components/thread/ThreadInfo.js +27 -29
  303. package/dist/components/thread/ThreadInfoHeader.d.ts +13 -0
  304. package/dist/components/thread/ThreadInfoHeader.d.ts.map +1 -0
  305. package/dist/components/thread/ThreadInfoHeader.js +11 -0
  306. package/dist/components/thread/UserSection.d.ts.map +1 -1
  307. package/dist/components/thread/UserSection.js +35 -22
  308. package/dist/components/thread/sessionDateFormat.d.ts +3 -0
  309. package/dist/components/thread/sessionDateFormat.d.ts.map +1 -0
  310. package/dist/components/thread/sessionDateFormat.js +13 -0
  311. package/dist/components/thread/sessionDuration.d.ts +5 -0
  312. package/dist/components/thread/sessionDuration.d.ts.map +1 -0
  313. package/dist/components/thread/sessionDuration.js +24 -0
  314. package/dist/constants/index.d.ts +1 -0
  315. package/dist/constants/index.d.ts.map +1 -1
  316. package/dist/constants/index.js +2 -0
  317. package/dist/constants/layout.d.ts +24 -0
  318. package/dist/constants/layout.d.ts.map +1 -0
  319. package/dist/constants/layout.js +23 -0
  320. package/dist/context/ChatContext.d.ts.map +1 -1
  321. package/dist/context/ChatContext.js +27 -1
  322. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts +7 -0
  323. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts.map +1 -0
  324. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.js +46 -0
  325. package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts +3 -0
  326. package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts.map +1 -0
  327. package/dist/hooks/common/useCloseOnSidePanelOpen.js +15 -0
  328. package/dist/hooks/common/useDeskShortcuts.d.ts +11 -0
  329. package/dist/hooks/common/useDeskShortcuts.d.ts.map +1 -0
  330. package/dist/hooks/common/useDeskShortcuts.js +94 -0
  331. package/dist/hooks/common/useEscapeLayer.d.ts +3 -0
  332. package/dist/hooks/common/useEscapeLayer.d.ts.map +1 -0
  333. package/dist/hooks/common/useEscapeLayer.js +18 -0
  334. package/dist/hooks/common/useMediaQuery.d.ts +3 -0
  335. package/dist/hooks/common/useMediaQuery.d.ts.map +1 -0
  336. package/dist/hooks/common/useMediaQuery.js +12 -0
  337. package/dist/hooks/common/useSidePanel.d.ts +12 -0
  338. package/dist/hooks/common/useSidePanel.d.ts.map +1 -0
  339. package/dist/hooks/common/useSidePanel.js +32 -0
  340. package/dist/hooks/group/useConversationGroups.d.ts.map +1 -1
  341. package/dist/hooks/group/useConversationGroups.js +3 -0
  342. package/dist/hooks/message/useNewMessageAnnouncement.d.ts +3 -0
  343. package/dist/hooks/message/useNewMessageAnnouncement.d.ts.map +1 -0
  344. package/dist/hooks/message/useNewMessageAnnouncement.js +30 -0
  345. package/dist/hooks/search/useSearchGroups.js +2 -1
  346. package/dist/hooks/search/useSearchMessage.d.ts +3 -1
  347. package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
  348. package/dist/hooks/search/useSearchMessage.js +2 -2
  349. package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts +12 -0
  350. package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts.map +1 -0
  351. package/dist/hooks/session/useBotSessionOwnerIdentity.js +22 -0
  352. package/dist/hooks/session/useCloseSession.d.ts +1 -0
  353. package/dist/hooks/session/useCloseSession.d.ts.map +1 -1
  354. package/dist/hooks/session/useCloseSession.js +9 -8
  355. package/dist/hooks/session/useEndSession.d.ts +11 -0
  356. package/dist/hooks/session/useEndSession.d.ts.map +1 -0
  357. package/dist/hooks/session/useEndSession.js +45 -0
  358. package/dist/hooks/session/useGetSession.d.ts.map +1 -1
  359. package/dist/hooks/session/useGetSession.js +27 -6
  360. package/dist/hooks/session/usePendingSessionClose.d.ts +5 -0
  361. package/dist/hooks/session/usePendingSessionClose.d.ts.map +1 -0
  362. package/dist/hooks/session/usePendingSessionClose.js +12 -0
  363. package/dist/hooks/session/useSessionCustomerName.d.ts +3 -0
  364. package/dist/hooks/session/useSessionCustomerName.d.ts.map +1 -0
  365. package/dist/hooks/session/useSessionCustomerName.js +19 -0
  366. package/dist/hooks/session/useSessionFieldAutosave.d.ts +19 -0
  367. package/dist/hooks/session/useSessionFieldAutosave.d.ts.map +1 -0
  368. package/dist/hooks/session/useSessionFieldAutosave.js +52 -0
  369. package/dist/index.d.ts +8 -2
  370. package/dist/index.d.ts.map +1 -1
  371. package/dist/index.js +5 -1
  372. package/dist/locales/vi/common.json +201 -21
  373. package/dist/locales/vi/conversation-inbox.json +21 -2
  374. package/dist/screens/desk-message/DeskWorkspace.d.ts +12 -0
  375. package/dist/screens/desk-message/DeskWorkspace.d.ts.map +1 -0
  376. package/dist/screens/desk-message/DeskWorkspace.js +57 -0
  377. package/dist/screens/desk-message/FolderOverlay.d.ts +4 -0
  378. package/dist/screens/desk-message/FolderOverlay.d.ts.map +1 -0
  379. package/dist/screens/desk-message/FolderOverlay.js +32 -0
  380. package/dist/screens/desk-message/SkipLinks.d.ts +4 -0
  381. package/dist/screens/desk-message/SkipLinks.d.ts.map +1 -0
  382. package/dist/screens/desk-message/SkipLinks.js +19 -0
  383. package/dist/screens/desk-message/ViewportNotice.d.ts +4 -0
  384. package/dist/screens/desk-message/ViewportNotice.d.ts.map +1 -0
  385. package/dist/screens/desk-message/ViewportNotice.js +9 -0
  386. package/dist/screens/desk-message/index.d.ts +3 -2
  387. package/dist/screens/desk-message/index.d.ts.map +1 -1
  388. package/dist/screens/desk-message/index.js +4 -12
  389. package/dist/store/deskPanelHost.d.ts +13 -0
  390. package/dist/store/deskPanelHost.d.ts.map +1 -0
  391. package/dist/store/deskPanelHost.js +9 -0
  392. package/dist/store/escapeLayers.d.ts +15 -0
  393. package/dist/store/escapeLayers.d.ts.map +1 -0
  394. package/dist/store/escapeLayers.js +15 -0
  395. package/dist/store/pendingSessionClose.d.ts +19 -0
  396. package/dist/store/pendingSessionClose.d.ts.map +1 -0
  397. package/dist/store/pendingSessionClose.js +74 -0
  398. package/dist/store/session.d.ts +2 -1
  399. package/dist/store/session.d.ts.map +1 -1
  400. package/dist/store/session.js +4 -1
  401. package/dist/store/sessionFolder.d.ts +15 -0
  402. package/dist/store/sessionFolder.d.ts.map +1 -0
  403. package/dist/store/sessionFolder.js +18 -0
  404. package/dist/store/shortcutPrefs.d.ts +9 -0
  405. package/dist/store/shortcutPrefs.d.ts.map +1 -0
  406. package/dist/store/shortcutPrefs.js +23 -0
  407. package/dist/store/sidePanel.d.ts +12 -0
  408. package/dist/store/sidePanel.d.ts.map +1 -0
  409. package/dist/store/sidePanel.js +9 -0
  410. package/dist/store/workspaceLayout.d.ts +12 -0
  411. package/dist/store/workspaceLayout.d.ts.map +1 -0
  412. package/dist/store/workspaceLayout.js +9 -0
  413. package/dist/styles/global.css +1 -1
  414. package/dist/types/chat.d.ts +18 -0
  415. package/dist/types/chat.d.ts.map +1 -1
  416. package/dist/types/dto.d.ts +2 -1
  417. package/dist/types/dto.d.ts.map +1 -1
  418. package/dist/utils/a11yClickable.d.ts +10 -0
  419. package/dist/utils/a11yClickable.d.ts.map +1 -0
  420. package/dist/utils/a11yClickable.js +15 -0
  421. package/dist/utils/events.d.ts +4 -0
  422. package/dist/utils/events.d.ts.map +1 -1
  423. package/dist/utils/headerMemberCount.d.ts +10 -0
  424. package/dist/utils/headerMemberCount.d.ts.map +1 -0
  425. package/dist/utils/headerMemberCount.js +3 -0
  426. package/dist/utils/memberEventRun.d.ts +16 -0
  427. package/dist/utils/memberEventRun.d.ts.map +1 -0
  428. package/dist/utils/memberEventRun.js +40 -0
  429. package/package.json +2 -2
  430. package/dist/components/session/SessionFilterMenu.d.ts +0 -15
  431. package/dist/components/session/SessionFilterMenu.d.ts.map +0 -1
  432. package/dist/components/session/SessionFilterMenu.js +0 -30
  433. package/dist/components/session/sessionMenuItems.d.ts +0 -28
  434. package/dist/components/session/sessionMenuItems.d.ts.map +0 -1
  435. package/dist/components/session/sessionMenuItems.js +0 -119
@@ -7,21 +7,30 @@ import { Button, Upload, message as antdMessage } from "antd";
7
7
  import clsx from "clsx";
8
8
  import { useTranslation } from "react-i18next";
9
9
  import EmojiPicker from "./EmojiPicker";
10
+ import { useEscapeLayer } from "../../../hooks/common/useEscapeLayer";
11
+ import { useCloseOnSidePanelOpen } from "../../../hooks/common/useCloseOnSidePanelOpen";
10
12
  import { Icon } from "../../../components/icon";
11
13
  import { createUploadFile, validateFile, } from "../../../utils/fileValidation";
12
14
  import { DOCUMENT_TYPES } from "./editorConfig";
13
15
  import CannedResponseIcon from "../../../assets/svg/canned-response";
14
16
  import { useMessageFooterContext } from ".";
15
17
  import useAuthStore from "../../../store/auth";
18
+ import { StrokeIcon } from "../../../components/icon/StrokeIcon";
16
19
  const EmojiIcon = (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M7.59997 12.4C7.59997 12.4 8.49997 13.2 9.99997 13.2C11.5 13.2 12.4 12.4 12.4 12.4M14 8.39997C14 8.8418 13.6418 9.19997 13.2 9.19997C12.7581 9.19997 12.4 8.8418 12.4 8.39997C12.4 7.95814 12.7581 7.59997 13.2 7.59997C13.6418 7.59997 14 7.95814 14 8.39997ZM18 9.99997C18 14.4182 14.4182 18 9.99997 18C5.58169 18 1.99997 14.4182 1.99997 9.99997C1.99997 5.58169 5.58169 1.99997 9.99997 1.99997C14.4182 1.99997 18 5.58169 18 9.99997ZM7.59997 8.39997C7.59997 8.8418 7.2418 9.19997 6.79997 9.19997C6.35814 9.19997 5.99997 8.8418 5.99997 8.39997C5.99997 7.95814 6.35814 7.59997 6.79997 7.59997C7.2418 7.59997 7.59997 7.95814 7.59997 8.39997Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
17
20
  const AttachIcon = (_jsx("svg", { width: "22", height: "22", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M15.6 10.0001V11.2001C15.6 14.5137 12.9137 17.2001 9.59998 17.2001C6.28626 17.2001 3.59998 14.5137 3.59998 11.2001V6.79999C3.59998 4.59085 5.39084 2.79999 7.59998 2.79999C9.8091 2.79999 11.6 4.59085 11.6 6.79999V11.2C11.6 12.3045 10.7045 13.2 9.59998 13.2C8.49542 13.2 7.59998 12.3045 7.59998 11.2V7.99999", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
18
- export default function MediaActions({ listUploadFiles, onFilesChange, buttonClassName, showMediaUpload = true, }) {
21
+ export default function MediaActions({ listUploadFiles, onFilesChange, buttonClassName, showMediaUpload = true, crmComposer = false, }) {
19
22
  const [editor] = useLexicalComposerContext();
20
23
  const { t } = useTranslation();
21
24
  const [showEmojiPicker, setShowEmojiPicker] = useState(false);
22
25
  const containerRef = useRef(null);
23
26
  const { isOpenCanned, setIsOpenCanned } = useMessageFooterContext();
24
27
  const isCrm = useAuthStore((state) => state.isCrm);
28
+ useEscapeLayer(showEmojiPicker, () => setShowEmojiPicker(false));
29
+ useEscapeLayer(isOpenCanned, () => setIsOpenCanned(false));
30
+ useCloseOnSidePanelOpen(() => {
31
+ setShowEmojiPicker(false);
32
+ setIsOpenCanned(false);
33
+ });
25
34
  const handleEmojiSelect = useCallback((emoji) => {
26
35
  editor.update(() => {
27
36
  const selection = $getSelection();
@@ -86,7 +95,15 @@ export default function MediaActions({ listUploadFiles, onFilesChange, buttonCla
86
95
  document.addEventListener("mousedown", handleClickOutside);
87
96
  return () => document.removeEventListener("mousedown", handleClickOutside);
88
97
  }, []);
89
- const btnClass = buttonClassName !== null && buttonClassName !== void 0 ? buttonClassName : "w-8 h-8 p-0 text-gray-500 hover:text-gray-700 hover:bg-gray-100";
90
- return (_jsxs("div", { "data-cp-name": "MediaActions", className: "flex items-center gap-1 relative", ref: containerRef, children: [isCrm && (_jsx(Button, { type: "text", shape: "default", className: clsx(btnClass, isOpenCanned && "bg-blue-100 text-blue-600"), onClick: onPressCanned, children: _jsx(CannedResponseIcon, { className: clsx("hover:text-gray-700", isOpenCanned && "text-blue-600") }) })), _jsx(Button, { type: "text", shape: "default", className: clsx(btnClass, showEmojiPicker &&
91
- "bg-[var(--dc-color-primary-light)] text-[var(--dc-color-primary)]"), onClick: () => setShowEmojiPicker(!showEmojiPicker), children: EmojiIcon }), showMediaUpload && (_jsxs(_Fragment, { children: [_jsx(Upload, { accept: "image/jpeg, image/png, image/jpg, video/*", beforeUpload: beforeUploadImagesAndVideo, multiple: true, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, { type: "text", shape: "default", className: btnClass, children: _jsx(Icon, { icon: "image-02-o", size: 22 }) }) }), _jsx(Upload, { accept: ".doc,.docx,.pdf", beforeUpload: beforeUploadFile, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, { type: "text", shape: "default", className: btnClass, children: AttachIcon }) })] })), showEmojiPicker && (_jsx(EmojiPicker, { onEmojiSelect: handleEmojiSelect, onClose: () => setShowEmojiPicker(false) }))] }));
98
+ const btnClass = crmComposer
99
+ ? "!flex !h-8 !w-8 items-center justify-center rounded-lg p-0 text-gray-600 hover:!bg-gray-5 hover:!text-gray-900"
100
+ : buttonClassName !== null && buttonClassName !== void 0 ? buttonClassName : "w-8 h-8 p-0 text-gray-500 hover:text-gray-700 hover:bg-gray-100";
101
+ const activeCls = crmComposer
102
+ ? "!bg-primary-25 !text-primary-500"
103
+ : "bg-blue-100 text-blue-600";
104
+ const crmLabel = (key) => crmComposer ? { "aria-label": t(key), title: t(key) } : {};
105
+ return (_jsxs("div", { "data-cp-name": "MediaActions", className: clsx("flex items-center relative", crmComposer ? "gap-0.5" : "gap-1"), ref: containerRef, children: [isCrm && (_jsx(Button, Object.assign({ type: "text", shape: "default", className: clsx(btnClass, isOpenCanned && activeCls), onClick: onPressCanned }, crmLabel("composer_quick_reply"), { children: crmComposer ? (_jsx(StrokeIcon, { name: "hash", size: 18 })) : (_jsx(CannedResponseIcon, { className: clsx("hover:text-gray-700", isOpenCanned && "text-blue-600") })) }))), _jsx(Button, Object.assign({ type: "text", shape: "default", className: clsx(btnClass, showEmojiPicker &&
106
+ (crmComposer
107
+ ? activeCls
108
+ : "bg-[var(--dc-color-primary-light)] text-[var(--dc-color-primary)]")), onClick: () => setShowEmojiPicker(!showEmojiPicker) }, crmLabel("composer_emoji"), { children: crmComposer ? _jsx(StrokeIcon, { name: "smile", size: 18 }) : EmojiIcon })), showMediaUpload && (_jsxs(_Fragment, { children: [_jsx(Upload, { accept: "image/jpeg, image/png, image/jpg, video/*", beforeUpload: beforeUploadImagesAndVideo, multiple: true, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, Object.assign({ type: "text", shape: "default", className: btnClass }, crmLabel("composer_attach_image"), { children: crmComposer ? (_jsx(StrokeIcon, { name: "image", size: 18 })) : (_jsx(Icon, { icon: "image-02-o", size: 22 })) })) }), _jsx(Upload, { accept: ".doc,.docx,.pdf", beforeUpload: beforeUploadFile, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, Object.assign({ type: "text", shape: "default", className: btnClass }, crmLabel("composer_attach_file"), { children: crmComposer ? _jsx(StrokeIcon, { name: "paperclip", size: 18 }) : AttachIcon })) })] })), showEmojiPicker && (_jsx(EmojiPicker, { onEmojiSelect: handleEmojiSelect, onClose: () => setShowEmojiPicker(false) }))] }));
92
109
  }
@@ -1,10 +1,12 @@
1
1
  interface SessionClosedModalProps {
2
2
  open: boolean;
3
3
  loading: boolean;
4
+ /** Order of the closed session, shown in the reopen hint (CRM). */
5
+ sessionOrder?: number;
4
6
  onReopen: () => void;
5
7
  onCreateNew: () => void;
6
8
  onClose: () => void;
7
9
  }
8
- declare const SessionClosedModal: ({ open, loading, onReopen, onCreateNew, onClose, }: SessionClosedModalProps) => import("react/jsx-runtime").JSX.Element;
10
+ declare const SessionClosedModal: ({ open, loading, sessionOrder, onReopen, onCreateNew, onClose, }: SessionClosedModalProps) => import("react/jsx-runtime").JSX.Element;
9
11
  export default SessionClosedModal;
10
12
  //# sourceMappingURL=SessionClosedModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionClosedModal.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/SessionClosedModal.tsx"],"names":[],"mappings":"AAKA,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,kBAAkB,GAAI,oDAMzB,uBAAuB,4CAoDzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"SessionClosedModal.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/SessionClosedModal.tsx"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,kBAAkB,GAAI,kEAOzB,uBAAuB,4CA8FzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -2,8 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Modal, Button } from "antd";
4
4
  import { useTranslation } from "react-i18next";
5
- const SessionClosedModal = ({ open, loading, onReopen, onCreateNew, onClose, }) => {
5
+ import useAuthStore from "../../../store/auth";
6
+ const SessionClosedModal = ({ open, loading, sessionOrder, onReopen, onCreateNew, onClose, }) => {
6
7
  const { t } = useTranslation();
7
- return (_jsx(Modal, { "data-cp-name": "SessionClosedModal", open: open, onCancel: onClose, footer: null, closable: !loading, centered: true, width: 400, maskClosable: !loading, keyboard: !loading, forceRender: true, children: _jsxs("div", { className: "flex flex-col gap-4 pt-2", role: "alertdialog", "aria-label": t("session_closed_modal_title"), children: [_jsx("p", { className: "text-base font-semibold", children: t("session_closed_modal_title") }), _jsx("p", { className: "text-sm text-gray-600", children: t("session_closed_modal_description") }), _jsxs("div", { className: "flex gap-3 w-full", children: [_jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onReopen, loading: loading, disabled: loading, children: t("session_closed_modal_reopen") }), _jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onCreateNew, loading: loading, disabled: loading, children: t("session_closed_modal_create_new") })] })] }) }));
8
+ const isCrm = useAuthStore((state) => state.isCrm);
9
+ return (_jsx(Modal, { "data-cp-name": "SessionClosedModal", open: open, onCancel: onClose, footer: null, closable: !loading, centered: true, width: 400, maskClosable: !loading, keyboard: !loading, forceRender: !isCrm, destroyOnHidden: isCrm, children: isCrm ? (_jsxs("div", { className: "flex flex-col gap-4 pt-2", role: "alertdialog", "aria-label": t("session_closed_crm_title"), children: [_jsx("p", { className: "text-lg font-bold text-gray-900", children: t("session_closed_crm_title") }), _jsx("p", { className: "text-sm text-gray-600", children: t("session_closed_crm_description") }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Button, { type: "primary", onClick: onReopen, loading: loading, disabled: loading, children: t("session_closed_crm_reopen") }), _jsx("span", { className: "text-xs text-gray-600", children: sessionOrder
10
+ ? t("session_closed_crm_reopen_hint", { order: sessionOrder })
11
+ : t("session_closed_crm_reopen_hint_no_order") })] }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Button, { onClick: onCreateNew, disabled: loading, children: t("session_closed_crm_create") }), _jsx("span", { className: "text-xs text-gray-600", children: t("session_closed_crm_create_hint") })] })] })] })) : (_jsxs("div", { className: "flex flex-col gap-4 pt-2", role: "alertdialog", "aria-label": t("session_closed_modal_title"), children: [_jsx("p", { className: "text-base font-semibold", children: t("session_closed_modal_title") }), _jsx("p", { className: "text-sm text-gray-600", children: t("session_closed_modal_description") }), _jsxs("div", { className: "flex gap-3 w-full", children: [_jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onReopen, loading: loading, disabled: loading, children: t("session_closed_modal_reopen") }), _jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onCreateNew, loading: loading, disabled: loading, children: t("session_closed_modal_create_new") })] })] })) }));
8
12
  };
9
13
  export default SessionClosedModal;
@@ -1,2 +1,4 @@
1
- export declare const ToolbarPlugin: () => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ToolbarPlugin: ({ compact }: {
2
+ compact?: boolean;
3
+ }) => import("react/jsx-runtime").JSX.Element;
2
4
  //# sourceMappingURL=ToolbarPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarPlugin.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/ToolbarPlugin.tsx"],"names":[],"mappings":"AA4DA,eAAO,MAAM,aAAa,+CAwNzB,CAAC"}
1
+ {"version":3,"file":"ToolbarPlugin.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/ToolbarPlugin.tsx"],"names":[],"mappings":"AA4DA,eAAO,MAAM,aAAa,GAAI,aAAqB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,4CA2NvE,CAAC"}
@@ -9,7 +9,7 @@ import { useCallback, useEffect, useMemo, useState } from "react";
9
9
  import { BoldOutlined, ItalicOutlined, StrikethroughOutlined, OrderedListOutlined, UnorderedListOutlined, } from "@ant-design/icons";
10
10
  import { Button } from "antd";
11
11
  const quoteIcon = (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M5.24615 10.5714C4.5616 10.5714 3.99078 10.5715 3.53762 10.5105C3.0593 10.4462 2.62745 10.3047 2.28042 9.95769C1.9334 9.61072 1.79194 9.17887 1.72763 8.70055C1.6667 8.24737 1.66673 7.67654 1.66675 6.99199V6.91274C1.66673 6.22819 1.6667 5.65734 1.72763 5.20419C1.79194 4.72586 1.9334 4.29401 2.28043 3.94699C2.62746 3.59997 3.0593 3.4585 3.53762 3.3942C3.99078 3.33327 4.56161 3.33329 5.24615 3.33331H5.32541C6.00995 3.33329 6.5808 3.33327 7.03397 3.3942C7.51228 3.4585 7.94413 3.59997 8.29116 3.94699C8.63817 4.29401 8.77966 4.72586 8.84396 5.20419C8.90491 5.65734 8.90484 6.22817 8.90484 6.91272V6.99198C8.90484 7.67652 8.90491 8.24737 8.84396 8.70055C8.77966 9.17887 8.63817 9.61072 8.29116 9.95769C7.94413 10.3047 7.51228 10.4462 7.03397 10.5105C6.5808 10.5715 6.00998 10.5714 5.32544 10.5714H5.24615Z", fill: "currentColor" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M2.84403 16.1313C2.71884 15.7295 2.94301 15.3023 3.34474 15.1772C5.71249 14.4393 7.38095 12.3426 7.38095 9.914V6.76172C7.38095 6.34094 7.72207 5.99982 8.14286 5.99982C8.56366 5.99982 8.90476 6.34094 8.90476 6.76172V9.914C8.90476 13.0731 6.73976 15.7152 3.79812 16.6319C3.39638 16.7572 2.96923 16.533 2.84403 16.1313Z", fill: "currentColor" }), _jsx("path", { d: "M14.389 10.5714C13.7044 10.5714 13.1336 10.5715 12.6804 10.5105C12.2021 10.4462 11.7703 10.3047 11.4233 9.95769C11.0762 9.61072 10.9348 9.17887 10.8704 8.70055C10.8095 8.24737 10.8096 7.67654 10.8096 6.99199V6.91274C10.8096 6.22819 10.8095 5.65734 10.8704 5.20419C10.9348 4.72586 11.0762 4.29401 11.4233 3.94699C11.7703 3.59997 12.2021 3.4585 12.6804 3.3942C13.1336 3.33327 13.7044 3.33329 14.389 3.33331H14.4682C15.1528 3.33329 15.7236 3.33327 16.1768 3.3942C16.6551 3.4585 17.087 3.59997 17.4339 3.94699C17.781 4.29401 17.9225 4.72586 17.9868 5.20419C18.0477 5.65734 18.0477 6.22817 18.0477 6.91272V6.99198C18.0477 7.67652 18.0477 8.24737 17.9868 8.70055C17.9225 9.17887 17.781 9.61072 17.4339 9.95769C17.087 10.3047 16.6551 10.4462 16.1768 10.5105C15.7236 10.5715 15.1528 10.5714 14.4682 10.5714H14.389Z", fill: "currentColor" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.9869 16.1313C11.8617 15.7295 12.0858 15.3023 12.4876 15.1772C14.8553 14.4393 16.5238 12.3426 16.5238 9.914V6.76172C16.5238 6.34094 16.8649 5.99982 17.2857 5.99982C17.7065 5.99982 18.0476 6.34094 18.0476 6.76172V9.914C18.0476 13.0731 15.8825 15.7152 12.9409 16.6319C12.5392 16.7572 12.112 16.533 11.9869 16.1313Z", fill: "currentColor" })] }));
12
- export const ToolbarPlugin = () => {
12
+ export const ToolbarPlugin = ({ compact = false }) => {
13
13
  const [editor] = useLexicalComposerContext();
14
14
  const [activeMarks, setActiveMarks] = useState([]);
15
15
  const formatTextButtons = useMemo(() => {
@@ -153,7 +153,7 @@ export const ToolbarPlugin = () => {
153
153
  removeSelectionListener();
154
154
  };
155
155
  }, [editor]);
156
- return (_jsxs("div", { "data-cp-name": "ToolbarPlugin", className: "flex items-center gap-2 px-4 pt-1", children: [formatTextButtons.map((button) => {
156
+ return (_jsxs("div", { "data-cp-name": "ToolbarPlugin", className: compact ? "flex items-center gap-1" : "flex items-center gap-2 px-4 pt-1", children: [formatTextButtons.map((button) => {
157
157
  const { icon, onPress, key, isActive } = button;
158
158
  return (_jsx(Button, { type: "text", shape: "default", className: getButtonClasses(isActive), onClick: onPress, children: icon }, key));
159
159
  }), insertListButtons.map((button) => {
@@ -0,0 +1,3 @@
1
+ import { type LexicalEditor } from "lexical";
2
+ export declare const clearComposerHistoryAfterUpdate: (editor: LexicalEditor) => void;
3
+ //# sourceMappingURL=clearComposerHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearComposerHistory.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/clearComposerHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAKpE,eAAO,MAAM,+BAA+B,GAAI,QAAQ,aAAa,SAKpE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CLEAR_HISTORY_COMMAND } from "lexical";
2
+ import useAuthStore from "../../../store/auth";
3
+ // Call in the same tick as a post-send clear, so Cmd+Z cannot bring a sent message back.
4
+ // Only the CRM composer mounts the history plugin; other hosts are left untouched.
5
+ export const clearComposerHistoryAfterUpdate = (editor) => {
6
+ if (!useAuthStore.getState().isCrm)
7
+ return;
8
+ editor.update(() => { }, {
9
+ onUpdate: () => editor.dispatchCommand(CLEAR_HISTORY_COMMAND, undefined),
10
+ });
11
+ };
@@ -1,8 +1,8 @@
1
- import { MessageFooterContextType } from "../../../types/chat";
1
+ import { CannedCreateRequest, MessageFooterContextType } from "../../../types/chat";
2
2
  import { ISessionResponse } from "../../../types/dto";
3
3
  interface MessageFooterProps {
4
4
  currentSession?: ISessionResponse;
5
- openCreateCannedModal?: () => void;
5
+ openCreateCannedModal?: (request?: CannedCreateRequest) => void;
6
6
  }
7
7
  export declare const MessageFooterContext: import("react").Context<MessageFooterContextType>;
8
8
  export declare const useMessageFooterContext: () => MessageFooterContextType;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGL,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqB/C,UAAU,kBAAkB;IAC1B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AASD,eAAO,MAAM,oBAAoB,mDAc/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,gCAAyC,CAAC;AAE9E,QAAA,MAAM,qBAAqB,GAAI,4CAG5B,kBAAkB,4CAuYpB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAEL,mBAAmB,EAEnB,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwB/C,UAAU,kBAAkB;IAC1B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACjE;AASD,eAAO,MAAM,oBAAoB,mDAc/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,gCAAyC,CAAC;AAE9E,QAAA,MAAM,qBAAqB,GAAI,4CAG5B,kBAAkB,4CA+apB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -7,6 +7,7 @@ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
7
7
  import { editorTheme, editorNodes, editorOnError } from "./editorConfig";
8
8
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
9
9
  import EnterHandler from "./EnterHandler";
10
+ import { useComposerFocusRequest } from "./useComposerFocusRequest";
10
11
  import ActionBar from "./ActionBar";
11
12
  import { AccountType, } from "../../../types/chat";
12
13
  import { useSendMessage } from "../../../hooks/message/useSendMessage";
@@ -21,15 +22,18 @@ import { useTranslation } from "react-i18next";
21
22
  import PasteAndDropPlugin from "./PasteAndDropPlugin";
22
23
  import { ReplyPreviewBar } from "../../../components/message/reply/ReplyPreviewBar";
23
24
  import CannedResponse from "../../../components/canned-response";
25
+ import CannedResponsePanel from "../../../components/canned-response/CannedResponsePanel";
26
+ import CrmComposerCard from "./CrmComposerCard";
24
27
  import { CannedResponseTriggerPlugin } from "./CannedResponsePlugin";
25
28
  import { useBoolean } from "ahooks";
26
29
  import useAuthStore from "../../../store/auth";
27
30
  import useConversationStore from "../../../store/conversation";
28
31
  import { useCurrentUserAccountType } from "../../../hooks/user/useCurrentUserAccountType";
29
- import ComposerTabs from "./ComposerTabs";
30
32
  import ComposerEditor from "./ComposerEditor";
31
33
  import MentionMenu, { COMPOSER_AREA_CP_NAME } from "./mention/MentionMenu";
32
34
  import SessionClosedModal from "./SessionClosedModal";
35
+ import ClosedSessionBanner from "./ClosedSessionBanner";
36
+ import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
33
37
  import { useCreateSession, useReopenSession, } from "../../../hooks/session/useReopenOrCreateSession";
34
38
  import { emit } from "../../../utils/events";
35
39
  import { isGroupConversation } from "../../../utils/imCommon";
@@ -113,6 +117,12 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
113
117
  accountType === AccountType.Staff &&
114
118
  !isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined);
115
119
  const lockToInternal = Boolean((quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) && (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.isInternal));
120
+ useComposerFocusRequest({
121
+ enabled: isCrm,
122
+ canUseInternal,
123
+ lockToInternal,
124
+ setIsInternal,
125
+ });
116
126
  const previewUrl = useMemo(() => {
117
127
  const urls = extractLinkUrls(composerText);
118
128
  return urls.length === 1 ? urls[0] : null;
@@ -234,9 +244,9 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
234
244
  return;
235
245
  closeSessionClosedModal();
236
246
  };
237
- const onOpenCreateCannedModal = () => {
247
+ const onOpenCreateCannedModal = (request) => {
238
248
  closeCanned();
239
- openCreateCannedModal === null || openCreateCannedModal === void 0 ? void 0 : openCreateCannedModal();
249
+ openCreateCannedModal === null || openCreateCannedModal === void 0 ? void 0 : openCreateCannedModal(request);
240
250
  };
241
251
  const onOpenCanned = (query) => {
242
252
  setCannedQuery(query);
@@ -266,8 +276,8 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
266
276
  setMaxActiveCannedIndex,
267
277
  isMentionMenuOpen,
268
278
  setIsMentionMenuOpen,
269
- }, children: [_jsxs(LexicalComposer, { initialConfig: initialConfig, children: [_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: onOpenCreateCannedModal, cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
279
+ }, children: [_jsxs(LexicalComposer, { initialConfig: initialConfig, children: [isCrm ? (_jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "relative flex flex-col gap-2 bg-white px-4 pb-4 pt-2", children: [isOpenCanned && (_jsx(CannedResponsePanel, { query: cannedQuery, viewedTeamId: currentSession === null || currentSession === void 0 ? void 0 : currentSession.teamId, onCreate: onOpenCreateCannedModal })), (currentSession === null || currentSession === void 0 ? void 0 : currentSession.isClosed) && (_jsx(ClosedSessionBanner, { closedDate: currentSession.closedDate, loading: isSessionActionLoading, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession })), _jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(CrmComposerCard, { canUseInternal: canUseInternal, isInternal: isInternal, lockToInternal: lockToInternal, setIsInternal: setIsInternal, replyLocked: Boolean(currentSession === null || currentSession === void 0 ? void 0 : currentSession.isClosed) && !isInternal })] })) : (_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: () => onOpenCreateCannedModal(), cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
270
280
  body: "mx-1 !p-0",
271
- }, destroyOnHidden: true, children: _jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(ToolbarPlugin, {}), _jsxs("div", { children: [_jsx(ComposerTabs, { canUseInternal: canUseInternal, hintText: t("canned_response_hint"), isInternal: isInternal, lockToInternal: lockToInternal, setIsInternal: setIsInternal }), _jsx(ComposerEditor, { isInternal: isInternal, placeholderText: placeholderText })] }), _jsx(ActionBar, {})] }) }), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), _jsx(ComposerTextSyncPlugin, { onChange: setComposerText }), _jsx(EnterHandler, {}), _jsx(PasteAndDropPlugin, {}), isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined) && (_jsx(MentionMenu, { groupID: conversationData === null || conversationData === void 0 ? void 0 : conversationData.groupID, isBotThread: conversationData ? isBotPeer(conversationData) : false })), isCrm && (_jsx(CannedResponseTriggerPlugin, { onClose: closeCanned, onOpen: onOpenCanned }))] }), _jsx(SessionClosedModal, { open: isSessionClosedModalOpen, loading: isSessionActionLoading, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession, onClose: handleCloseSessionModal })] }));
281
+ }, destroyOnHidden: true, children: _jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(ToolbarPlugin, {}), _jsx("div", { children: _jsx(ComposerEditor, { isInternal: isInternal, placeholderText: placeholderText }) }), _jsx(ActionBar, {})] }) })), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), isCrm && _jsx(HistoryPlugin, {}), _jsx(ComposerTextSyncPlugin, { onChange: setComposerText }), _jsx(EnterHandler, {}), _jsx(PasteAndDropPlugin, {}), isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined) && (_jsx(MentionMenu, { groupID: conversationData === null || conversationData === void 0 ? void 0 : conversationData.groupID, isBotThread: conversationData ? isBotPeer(conversationData) : false })), isCrm && (_jsx(CannedResponseTriggerPlugin, { onClose: closeCanned, onOpen: onOpenCanned }))] }), _jsx(SessionClosedModal, { open: isSessionClosedModalOpen, loading: isSessionActionLoading, sessionOrder: currentSession === null || currentSession === void 0 ? void 0 : currentSession.order, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession, onClose: handleCloseSessionModal })] }));
272
282
  };
273
283
  export default MessageFooterProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"MentionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/message/footer/mention/MentionMenu.tsx"],"names":[],"mappings":"AA8BA,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAWjE,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,QAAA,MAAM,WAAW,GAAI,0BAA0B,gBAAgB,mDA4I9D,CAAC;AA+CF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MentionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/message/footer/mention/MentionMenu.tsx"],"names":[],"mappings":"AAgCA,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAWjE,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,QAAA,MAAM,WAAW,GAAI,0BAA0B,gBAAgB,mDAmJ9D,CAAC;AA+CF,eAAe,WAAW,CAAC"}
@@ -20,6 +20,8 @@ import { $createTextNode, $getRoot } from "lexical";
20
20
  import { $createMentionNode, $getMentionedUserIDs } from "./MentionNode";
21
21
  import { useMentionOptions } from "./useMentionOptions";
22
22
  import { Avatar } from "antd";
23
+ import useAuthStore from "../../../../store/auth";
24
+ import TintedAvatar from "../../../../components/common/TintedAvatar";
23
25
  import { useMessageFooterContext } from "..";
24
26
  const MAX_MENTIONED_USERS = 10;
25
27
  // Marks the composer's outer boundary (footer/index.tsx) so
@@ -35,6 +37,7 @@ class MentionTypeaheadOption extends MenuOption {
35
37
  }
36
38
  const MentionMenu = ({ groupID, isBotThread }) => {
37
39
  const { t } = useTranslation();
40
+ const isCrm = useAuthStore((state) => state.isCrm);
38
41
  const [editor] = useLexicalComposerContext();
39
42
  const [query, setQuery] = useState(null);
40
43
  const { setIsMentionMenuOpen } = useMessageFooterContext();
@@ -94,7 +97,7 @@ const MentionMenu = ({ groupID, isBotThread }) => {
94
97
  // actual top edge, so the menu clears the input entirely.
95
98
  _jsxs(MentionMenuOffset, { "data-cp-name": "MentionMenu", className: "absolute left-0 z-50 max-h-[220px] w-[260px] overflow-y-auto rounded-md border border-gray-200 bg-white py-1 shadow-lg", children: [_jsx("div", { className: "px-3 py-1 text-xs font-medium text-gray-400", children: t("mention.menu_title") }), typeaheadOptions.length === 0 ? (_jsx("div", { className: "px-3 py-2 text-sm text-gray-500", children: limitReached
96
99
  ? t("mention.limit_reached", { max: MAX_MENTIONED_USERS })
97
- : t("mention.no_result") })) : (typeaheadOptions.map((option, index) => (_jsxs("button", { type: "button", className: `flex w-full items-center gap-2 px-3 py-2 text-left text-sm ${index === selectedIndex ? "bg-blue-50" : "hover:bg-gray-50"}`, onMouseEnter: () => setHighlightedIndex(index), onClick: () => selectOptionAndCleanUp(option), children: [option.option.isAtAll ? (_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-500", children: "@" })) : (_jsx(Avatar, { size: 24, src: option.option.faceURL, children: option.option.displayName.charAt(0) })), _jsx("span", { className: "min-w-0 flex-1 truncate", children: option.option.displayName })] }, option.key))))] }), anchorElementRef.current);
100
+ : t("mention.no_result") })) : (typeaheadOptions.map((option, index) => (_jsxs("button", { type: "button", className: `flex w-full items-center gap-2 px-3 py-2 text-left text-sm ${index === selectedIndex ? "bg-blue-50" : "hover:bg-gray-50"}`, onMouseEnter: () => setHighlightedIndex(index), onClick: () => selectOptionAndCleanUp(option), children: [option.option.isAtAll ? (_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-500", children: "@" })) : isCrm ? (_jsx(TintedAvatar, { name: option.option.displayName, src: option.option.faceURL, size: 24 })) : (_jsx(Avatar, { size: 24, src: option.option.faceURL, children: option.option.displayName.charAt(0) })), _jsx("span", { className: "min-w-0 flex-1 truncate", children: option.option.displayName })] }, option.key))))] }), anchorElementRef.current);
98
101
  } }));
99
102
  };
100
103
  // Renders inside Lexical's own typeahead container, which it portals
@@ -0,0 +1,10 @@
1
+ interface Options {
2
+ enabled: boolean;
3
+ canUseInternal: boolean;
4
+ lockToInternal: boolean;
5
+ setIsInternal: (isInternal: boolean) => void;
6
+ }
7
+ /** Desk shortcuts R / N: switch the composer mode, then put the cursor in the editor. */
8
+ export declare const useComposerFocusRequest: ({ enabled, canUseInternal, lockToInternal, setIsInternal, }: Options) => void;
9
+ export {};
10
+ //# sourceMappingURL=useComposerFocusRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComposerFocusRequest.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/useComposerFocusRequest.ts"],"names":[],"mappings":"AAIA,UAAU,OAAO;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,GAAI,6DAKrC,OAAO,SAwBT,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ import emitter from "../../../utils/events";
4
+ /** Desk shortcuts R / N: switch the composer mode, then put the cursor in the editor. */
5
+ export const useComposerFocusRequest = ({ enabled, canUseInternal, lockToInternal, setIsInternal, }) => {
6
+ useEffect(() => {
7
+ if (!enabled)
8
+ return;
9
+ const onRequest = ({ mode }) => {
10
+ if (mode === "internal") {
11
+ if (!canUseInternal)
12
+ return;
13
+ setIsInternal(true);
14
+ }
15
+ else if (!lockToInternal) {
16
+ setIsInternal(false);
17
+ }
18
+ // Defer so a mode switch has re-rendered before focusing.
19
+ window.setTimeout(() => {
20
+ var _a;
21
+ return (_a = document
22
+ .querySelector('[data-cp-name="ComposerEditor"] [contenteditable="true"]')) === null || _a === void 0 ? void 0 : _a.focus();
23
+ }, 0);
24
+ };
25
+ emitter.on("COMPOSER_FOCUS_REQUEST", onRequest);
26
+ return () => emitter.off("COMPOSER_FOCUS_REQUEST", onRequest);
27
+ }, [enabled, canUseInternal, lockToInternal, setIsInternal]);
28
+ };
@@ -0,0 +1,32 @@
1
+ import type { MenuProps } from "antd";
2
+ import type { GroupPermissions } from "../../hooks/group/useGroupPermission";
3
+ import type { MemberDisplayItem } from "./groupMemberTypes";
4
+ type Translate = (key: string, options?: Record<string, unknown>) => string;
5
+ export interface CrmMemberMenuHandlers {
6
+ onToggleMute: (member: MemberDisplayItem) => void;
7
+ onAskMute: (member: MemberDisplayItem) => void;
8
+ onAskTransfer: (member: MemberDisplayItem) => void;
9
+ onConfigureAdmin: (member: MemberDisplayItem) => void;
10
+ onRemoveAdmin: (member: MemberDisplayItem) => void;
11
+ onAskAssignAdmin: (member: MemberDisplayItem) => void;
12
+ onAskRemove: (member: MemberDisplayItem) => void;
13
+ onLeave: () => void;
14
+ }
15
+ interface BuildCrmMemberMenuParams {
16
+ member: MemberDisplayItem;
17
+ isRealGroup: boolean;
18
+ permissions: GroupPermissions;
19
+ actingIsOwner: boolean;
20
+ /** Set when leaving is not allowed; shown under the item instead of failing on click. */
21
+ leaveBlockedReason?: string;
22
+ handlers: CrmMemberMenuHandlers;
23
+ t: Translate;
24
+ }
25
+ type MenuItems = NonNullable<MenuProps["items"]>;
26
+ /**
27
+ * CRM member menu: no always-disabled entries, a short reason under every
28
+ * entry that is disabled for lack of rights, owner transfer and removal set apart.
29
+ */
30
+ export declare const buildCrmMemberMenu: ({ member, isRealGroup, permissions, actingIsOwner, leaveBlockedReason, handlers, t, }: BuildCrmMemberMenuParams) => MenuItems;
31
+ export {};
32
+ //# sourceMappingURL=groupMemberMenuCrm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupMemberMenuCrm.d.ts","sourceRoot":"","sources":["../../../src/components/message/groupMemberMenuCrm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,CAAC,EAAE,SAAS,CAAC;CACd;AAED,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAWjD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,uFAQhC,wBAAwB,KAAG,SAsF7B,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CrmIcon as Icon } from "../../components/group/crmIcon";
3
+ const label = (title, hint, tone) => (_jsxs("span", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: tone, children: title }), hint && _jsx("span", { className: "text-xs font-normal text-gray-600", children: hint })] }));
4
+ const DIVIDER = { type: "divider" };
5
+ /**
6
+ * CRM member menu: no always-disabled entries, a short reason under every
7
+ * entry that is disabled for lack of rights, owner transfer and removal set apart.
8
+ */
9
+ export const buildCrmMemberMenu = ({ member, isRealGroup, permissions, actingIsOwner, leaveBlockedReason, handlers, t, }) => {
10
+ const ownerOnly = actingIsOwner ? undefined : t("group_owner_only");
11
+ if (member.isCurrentUser) {
12
+ return [
13
+ {
14
+ key: "leave-group",
15
+ label: label(t("leave_group"), leaveBlockedReason),
16
+ icon: _jsx(Icon, { icon: "logout-o", size: 16 }),
17
+ danger: true,
18
+ disabled: Boolean(leaveBlockedReason),
19
+ onClick: handlers.onLeave,
20
+ },
21
+ ];
22
+ }
23
+ const removeReason = !permissions.removeMember
24
+ ? t("need_remove_member_permission")
25
+ : member.isOwner
26
+ ? t("cannot_remove_group_owner")
27
+ : member.isAdmin && !actingIsOwner
28
+ ? t("group_owner_only")
29
+ : undefined;
30
+ const adminItems = member.isAdmin
31
+ ? [
32
+ {
33
+ key: "configure-admin-permission",
34
+ label: label(t("admin_permission_settings"), permissions.transferOwnership ? undefined : ownerOnly),
35
+ icon: _jsx(Icon, { icon: "shield-o", size: 16 }),
36
+ disabled: !permissions.transferOwnership,
37
+ onClick: () => handlers.onConfigureAdmin(member),
38
+ },
39
+ {
40
+ key: "remove-admin",
41
+ label: label(t("remove_from_admin"), permissions.addAdmin ? undefined : ownerOnly),
42
+ icon: _jsx(Icon, { icon: "shield-fail-o", size: 16 }),
43
+ disabled: !permissions.addAdmin,
44
+ onClick: () => handlers.onRemoveAdmin(member),
45
+ },
46
+ ]
47
+ : [
48
+ {
49
+ key: "assign-admin",
50
+ label: label(t("assign_as_admin"), permissions.addAdmin ? undefined : ownerOnly),
51
+ icon: _jsx(Icon, { icon: "shield-o", size: 16 }),
52
+ disabled: !permissions.addAdmin,
53
+ onClick: () => handlers.onAskAssignAdmin(member),
54
+ },
55
+ ];
56
+ return [
57
+ {
58
+ key: "mute",
59
+ label: label(member.isSendMessageDisabled ? t("unmute_member") : t("mute_member"), permissions.removeMember ? undefined : t("need_remove_member_permission")),
60
+ icon: _jsx(Icon, { icon: "bell-off-o", size: 16 }),
61
+ disabled: !permissions.removeMember,
62
+ onClick: () => member.isSendMessageDisabled ? handlers.onToggleMute(member) : handlers.onAskMute(member),
63
+ },
64
+ ...adminItems,
65
+ DIVIDER,
66
+ {
67
+ key: "transfer-owner",
68
+ label: label(t("transfer_owner"), permissions.transferOwnership ? t("transfer_owner_hint") : ownerOnly, permissions.transferOwnership ? "text-warning-800" : undefined),
69
+ icon: _jsx(Icon, { icon: "key-o", size: 16, className: permissions.transferOwnership ? "text-warning-800" : undefined }),
70
+ disabled: !permissions.transferOwnership,
71
+ onClick: () => handlers.onAskTransfer(member),
72
+ },
73
+ DIVIDER,
74
+ {
75
+ key: "remove-member",
76
+ label: label(t("remove_from_group"), removeReason),
77
+ icon: _jsx(Icon, { icon: "user-x", size: 16 }),
78
+ danger: true,
79
+ disabled: Boolean(removeReason),
80
+ onClick: () => handlers.onAskRemove(member),
81
+ },
82
+ ];
83
+ };
@@ -0,0 +1,13 @@
1
+ export interface MemberDisplayItem {
2
+ userID: string;
3
+ nickname: string;
4
+ faceURL?: string;
5
+ isCustomer: boolean;
6
+ isCurrentUser: boolean;
7
+ isOwner: boolean;
8
+ isAdmin: boolean;
9
+ permissions: string[];
10
+ isSendMessageDisabled: boolean;
11
+ roleLabel: string;
12
+ }
13
+ //# sourceMappingURL=groupMemberTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupMemberTypes.d.ts","sourceRoot":"","sources":["../../../src/components/message/groupMemberTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { StrokeIconName } from "../../components/icon/strokeIconNodes";
2
+ /** Classes of a header icon button; an open panel gets the Primary-25 tile in CRM. */
3
+ export declare const headerIconButtonClass: (isCrm: boolean, isOpen: boolean) => string;
4
+ /** Mockup line icon in CRM, the icon-font glyph elsewhere. */
5
+ export declare const HeaderIcon: ({ isCrm, stroke, font, }: {
6
+ isCrm: boolean;
7
+ stroke: StrokeIconName;
8
+ font: string;
9
+ }) => import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=headerIconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headerIconButton.d.ts","sourceRoot":"","sources":["../../../src/components/message/headerIconButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,EAAE,QAAQ,OAAO,WAKjE,CAAC;AAEL,8DAA8D;AAC9D,eAAO,MAAM,UAAU,GAAI,0BAIxB;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,4CACgF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Icon } from "../../components/icon";
3
+ import { StrokeIcon } from "../../components/icon/StrokeIcon";
4
+ /** Classes of a header icon button; an open panel gets the Primary-25 tile in CRM. */
5
+ export const headerIconButtonClass = (isCrm, isOpen) => `${isCrm ? "w-9 h-9 [@container(max-width:699px)]:!w-8 [@container(max-width:699px)]:!h-8" : "w-8 h-8"} p-0 ${isCrm && isOpen
6
+ ? "bg-primary-25 text-primary-500"
7
+ : "text-[var(--dc-color-header-icon)]"}`;
8
+ /** Mockup line icon in CRM, the icon-font glyph elsewhere. */
9
+ export const HeaderIcon = ({ isCrm, stroke, font, }) => isCrm ? _jsx(StrokeIcon, { name: stroke, size: 20 }) : _jsx(Icon, { icon: font, size: 22 });
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import type { StrokeIconName } from "../../../components/icon/strokeIconNodes";
3
+ /** CRM timeline system line: a 14px line icon and quiet 12px text on a Gray-50 pill, centred. */
4
+ declare const CrmSystemLine: ({ icon, children, className, }: {
5
+ icon: StrokeIconName;
6
+ children: ReactNode;
7
+ className?: string;
8
+ }) => import("react/jsx-runtime").JSX.Element;
9
+ export default CrmSystemLine;
10
+ //# sourceMappingURL=CrmSystemLine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrmSystemLine.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/CrmSystemLine.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,iGAAiG;AACjG,QAAA,MAAM,aAAa,GAAI,gCAIpB;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,4CAUA,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { StrokeIcon } from "../../../components/icon/StrokeIcon";
4
+ /** CRM timeline system line: a 14px line icon and quiet 12px text on a Gray-50 pill, centred. */
5
+ const CrmSystemLine = ({ icon, children, className, }) => (_jsx("div", { className: "flex justify-center", children: _jsxs("span", { "data-testid": "crm-system-line", className: `inline-flex items-center gap-1.5 rounded-xl bg-gray-50 px-3 py-1 text-center text-xs text-gray-600 ${className !== null && className !== void 0 ? className : ""}`, children: [_jsx(StrokeIcon, { name: icon, size: 14 }), children] }) }));
6
+ export default CrmSystemLine;
@@ -0,0 +1,5 @@
1
+ declare const DateDivider: ({ label }: {
2
+ label: string;
3
+ }) => import("react/jsx-runtime").JSX.Element;
4
+ export default DateDivider;
5
+ //# sourceMappingURL=DateDivider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateDivider.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/DateDivider.tsx"],"names":[],"mappings":"AAGA,QAAA,MAAM,WAAW,GAAI,WAAW;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,4CAShD,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // CRM day/time divider: label between two hairlines, no pill background.
4
+ const DateDivider = ({ label }) => (_jsxs("div", { className: "flex items-center gap-3 text-xs font-medium text-gray-600", "data-testid": "message-date-divider", children: [_jsx("span", { "aria-hidden": true, className: "h-px flex-1 bg-gray-25" }), label, _jsx("span", { "aria-hidden": true, className: "h-px flex-1 bg-gray-25" })] }));
5
+ export default DateDivider;
@@ -1 +1 @@
1
- {"version":3,"file":"GroupNotificationMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/GroupNotificationMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,UAAU,iCAAiC;IACzC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,4BAA4B,GAAI,aAAa,iCAAiC,mDAkBnF,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"GroupNotificationMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/GroupNotificationMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAO3D,UAAU,iCAAiC;IACzC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,4BAA4B,GAAI,aAAa,iCAAiC,mDA4BnF,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1,13 +1,22 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useTranslation } from "react-i18next";
4
+ import useAuthStore from "../../../store/auth";
5
+ import { MessageType } from "@droppii-org/wasm-client-sdk";
4
6
  import { getGroupNotificationText } from "../../../utils/messageLog";
7
+ import CrmSystemLine from "./CrmSystemLine";
5
8
  const GroupNotificationMessageItem = ({ message }) => {
6
9
  var _a;
10
+ const isCrm = useAuthStore((state) => state.isCrm);
7
11
  const { t } = useTranslation();
8
12
  const text = getGroupNotificationText(message.contentType, (_a = message.notificationElem) === null || _a === void 0 ? void 0 : _a.detail, t, message.senderNickname);
9
13
  if (!text)
10
14
  return null;
15
+ if (isCrm) {
16
+ const joined = message.contentType === MessageType.MemberEnter ||
17
+ message.contentType === MessageType.MemberInvited;
18
+ return _jsx(CrmSystemLine, { icon: joined ? "user-plus" : "users", children: text });
19
+ }
11
20
  return (_jsx("div", { className: "flex justify-center", "data-cp-name": "GroupNotificationMessageItem", children: _jsx("span", { className: "rounded-full bg-gray-200 px-3 py-1.5 text-center text-[13px] font-normal text-gray-900", children: text }) }));
12
21
  };
13
22
  export default GroupNotificationMessageItem;
@@ -0,0 +1,8 @@
1
+ import type { MessageItem } from "@droppii-org/wasm-client-sdk";
2
+ interface MemberEventSummaryProps {
3
+ /** Consecutive member events, oldest first. */
4
+ messages: MessageItem[];
5
+ }
6
+ declare const MemberEventSummary: ({ messages }: MemberEventSummaryProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default MemberEventSummary;
8
+ //# sourceMappingURL=MemberEventSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberEventSummary.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/MemberEventSummary.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,UAAU,uBAAuB;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAMD,QAAA,MAAM,kBAAkB,GAAI,cAAc,uBAAuB,4CAmChE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}