@droppii-org/chat-sdk 0.6.56 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +1 -1
  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
@@ -0,0 +1,23 @@
1
+ import type { IFilterSummary } from "../../store/type";
2
+ import type { ISessionSummaryResponse } from "../../types/dto";
3
+ interface SessionFolderListProps {
4
+ summary: ISessionSummaryResponse;
5
+ /** Set for a team's folders; undefined for "my messages". */
6
+ teamId?: string;
7
+ /** Id of the single active folder (see `getActiveFolderId`). */
8
+ activeFolderId: string;
9
+ onFilterSelect: (filter: IFilterSummary) => void;
10
+ /** Present only in "my messages", where the "all" row lives. */
11
+ allGroups?: {
12
+ active: boolean;
13
+ onSelect: () => void;
14
+ };
15
+ }
16
+ /**
17
+ * Folders of one scope. The "open" parent has two click targets: the label
18
+ * only reveals its children, the chevron collapses them. The API cannot list
19
+ * all open sessions at once, so the label never changes the filter.
20
+ */
21
+ declare const SessionFolderList: ({ summary, teamId, activeFolderId, onFilterSelect, allGroups, }: SessionFolderListProps) => import("react/jsx-runtime").JSX.Element;
22
+ export default SessionFolderList;
23
+ //# sourceMappingURL=SessionFolderList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFolderList.d.ts","sourceRoot":"","sources":["../../../src/components/session/SessionFolderList.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAQ3D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,gEAAgE;IAChE,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CACvD;AAED;;;;GAIG;AACH,QAAA,MAAM,iBAAiB,GAAI,iEAMxB,sBAAsB,4CAyFxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { Tooltip } from "antd";
6
+ import { StrokeIcon } from "../../components/icon/StrokeIcon";
7
+ import { buildFolderId } from "../../store/sessionFolder";
8
+ import FolderRow, { FolderCount } from "./FolderRow";
9
+ import { getCompletedFilterConfig, getFilterCount, getOpenFilterConfigs, } from "./sessionFilters";
10
+ /**
11
+ * Folders of one scope. The "open" parent has two click targets: the label
12
+ * only reveals its children, the chevron collapses them. The API cannot list
13
+ * all open sessions at once, so the label never changes the filter.
14
+ */
15
+ const SessionFolderList = ({ summary, teamId, activeFolderId, onFilterSelect, allGroups, }) => {
16
+ const { t } = useTranslation();
17
+ const [isOpenGroupExpanded, setIsOpenGroupExpanded] = useState(true);
18
+ const isTeam = !!teamId;
19
+ const completed = getCompletedFilterConfig();
20
+ const isActive = (filterKey) => activeFolderId ===
21
+ buildFolderId({ scope: isTeam ? "team" : "mine", teamId, filterKey });
22
+ const groupLabel = t("active_sessions");
23
+ const toggleLabel = t(isOpenGroupExpanded ? "folder_group_collapse" : "folder_group_expand", { name: groupLabel });
24
+ return (_jsxs("div", { className: "flex flex-col gap-0.5", "data-cp-name": "SessionFolderList", children: [_jsxs("div", { className: "flex items-center gap-0.5", children: [_jsxs("button", { type: "button", onClick: () => setIsOpenGroupExpanded(true), className: `flex h-9 min-w-0 flex-1 items-center gap-2.5 rounded-lg pr-2 text-left text-sm text-gray-900 hover:bg-gray-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 ${isTeam ? "pl-5" : "pl-2"}`, children: [_jsx(StrokeIcon, { name: "message-circle", size: 18, className: "text-gray-600" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: groupLabel }), _jsx(FolderCount, { count: summary.activeSessionCount })] }), !isTeam && (_jsx(Tooltip, { title: toggleLabel, children: _jsx("button", { type: "button", "aria-label": toggleLabel, "aria-expanded": isOpenGroupExpanded, onClick: () => setIsOpenGroupExpanded((expanded) => !expanded), className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400", children: _jsx(StrokeIcon, { name: isOpenGroupExpanded ? "chevron-down" : "chevron-right", size: 16 }) }) }))] }), (isTeam || isOpenGroupExpanded) &&
25
+ getOpenFilterConfigs(isTeam).map((config) => (_jsx("div", { className: "flex", children: _jsx(FolderRow, { label: t(config.labelKey), iconName: config.iconName, iconClassName: config.iconClassName, count: getFilterCount(config, summary), highlighted: config.highlighted, active: isActive(config.key), indentClassName: isTeam ? "pl-8" : "pl-7", onClick: () => onFilterSelect(Object.assign(Object.assign({}, config.filter), (teamId && { teamId }))) }) }, config.key))), completed && (_jsx("div", { className: "flex", children: _jsx(FolderRow, { label: t(completed.labelKey), iconName: completed.iconName, iconClassName: completed.iconClassName, count: getFilterCount(completed, summary), active: isActive(completed.key), indentClassName: isTeam ? "pl-5" : "pl-2", onClick: () => onFilterSelect(Object.assign(Object.assign({}, completed.filter), (teamId && { teamId }))) }) })), allGroups && (_jsx("div", { className: "flex", children: _jsx(FolderRow, { label: t("all_groups"), iconName: "inbox", iconClassName: "text-gray-600", active: allGroups.active, onClick: allGroups.onSelect }) }))] }));
26
+ };
27
+ export default SessionFolderList;
@@ -0,0 +1,24 @@
1
+ import type { IFilterSummary } from "../../store/type";
2
+ import type { ISessionSummaryResponse } from "../../types/dto";
3
+ import type { StrokeIconName } from "../../components/icon/strokeIconNodes";
4
+ export interface SessionFilterConfig {
5
+ key: string;
6
+ labelKey: string;
7
+ iconName: StrokeIconName;
8
+ iconClassName?: string;
9
+ filter: IFilterSummary;
10
+ countSource: "status" | "tag";
11
+ /** Only shown in team folders (unassigned sessions have no owner yet). */
12
+ teamOnly?: boolean;
13
+ /** Needs attention: the count is a red badge instead of plain text. */
14
+ highlighted?: boolean;
15
+ }
16
+ export declare const SESSION_FILTER_CONFIGS: SessionFilterConfig[];
17
+ export declare const ALL_GROUPS_KEY = "ALL_GROUPS";
18
+ export declare const getFilterConfig: (key: string) => SessionFilterConfig | undefined;
19
+ /** Open-folder rows, without the completed one (it sits beside the "open" group). */
20
+ export declare const getOpenFilterConfigs: (includeUnassigned: boolean) => SessionFilterConfig[];
21
+ export declare const getCompletedFilterConfig: () => SessionFilterConfig | undefined;
22
+ /** Count shown next to a folder, from the summary; 0 when the summary has no entry. */
23
+ export declare const getFilterCount: (config: SessionFilterConfig, summary: ISessionSummaryResponse | undefined) => number;
24
+ //# sourceMappingURL=sessionFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionFilters.d.ts","sourceRoot":"","sources":["../../../src/components/session/sessionFilters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,EA8DvD,CAAC;AAEF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,oCACkB,CAAC;AAE9D,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,GAAI,mBAAmB,OAAO,0BAK5D,CAAC;AAEJ,eAAO,MAAM,wBAAwB,uCAC4C,CAAC;AAElF,uFAAuF;AACvF,eAAO,MAAM,cAAc,GACzB,QAAQ,mBAAmB,EAC3B,SAAS,uBAAuB,GAAG,SAAS,KAC3C,MAMF,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { SessionStatus, SessionTag } from "../../types/chat";
2
+ export const SESSION_FILTER_CONFIGS = [
3
+ {
4
+ key: SessionStatus.UNASSIGNED,
5
+ labelKey: "unassigned",
6
+ iconName: "user-plus",
7
+ iconClassName: "text-warning-400",
8
+ filter: { status: SessionStatus.UNASSIGNED, tag: undefined },
9
+ countSource: "status",
10
+ teamOnly: true,
11
+ highlighted: true,
12
+ },
13
+ {
14
+ key: SessionTag.SLOW_PROCESSING,
15
+ labelKey: "slow_processing",
16
+ iconName: "alert-circle",
17
+ iconClassName: "text-danger-600",
18
+ filter: { status: undefined, tag: SessionTag.SLOW_PROCESSING },
19
+ countSource: "tag",
20
+ highlighted: true,
21
+ },
22
+ {
23
+ key: SessionStatus.WAITING_PROCESS,
24
+ labelKey: "waiting_process",
25
+ iconName: "clock",
26
+ iconClassName: "text-warning-400",
27
+ filter: { status: SessionStatus.WAITING_PROCESS, tag: undefined },
28
+ countSource: "status",
29
+ highlighted: true,
30
+ },
31
+ {
32
+ key: SessionTag.AWAITING_REPLY,
33
+ labelKey: "awaiting_reply",
34
+ iconName: "reply",
35
+ iconClassName: "text-secondary-400",
36
+ filter: { status: undefined, tag: SessionTag.AWAITING_REPLY },
37
+ countSource: "tag",
38
+ highlighted: true,
39
+ },
40
+ {
41
+ key: SessionStatus.IN_PROCESS,
42
+ labelKey: "in_process",
43
+ iconName: "play-circle",
44
+ iconClassName: "text-primary-400",
45
+ filter: { status: SessionStatus.IN_PROCESS, tag: undefined },
46
+ countSource: "status",
47
+ },
48
+ {
49
+ key: SessionTag.TEMPORARILY_PAUSED,
50
+ labelKey: "temporarily_paused",
51
+ iconName: "pause-circle",
52
+ iconClassName: "text-gray-600",
53
+ filter: { status: undefined, tag: SessionTag.TEMPORARILY_PAUSED },
54
+ countSource: "tag",
55
+ },
56
+ {
57
+ key: SessionStatus.COMPLETED,
58
+ labelKey: "closed_sessions",
59
+ iconName: "check-circle",
60
+ iconClassName: "text-gray-600",
61
+ filter: { status: SessionStatus.COMPLETED, tag: undefined },
62
+ countSource: "status",
63
+ },
64
+ ];
65
+ export const ALL_GROUPS_KEY = "ALL_GROUPS";
66
+ export const getFilterConfig = (key) => SESSION_FILTER_CONFIGS.find((config) => config.key === key);
67
+ /** Open-folder rows, without the completed one (it sits beside the "open" group). */
68
+ export const getOpenFilterConfigs = (includeUnassigned) => SESSION_FILTER_CONFIGS.filter((config) => config.key !== SessionStatus.COMPLETED &&
69
+ (!config.teamOnly || includeUnassigned));
70
+ export const getCompletedFilterConfig = () => SESSION_FILTER_CONFIGS.find((config) => config.key === SessionStatus.COMPLETED);
71
+ /** Count shown next to a folder, from the summary; 0 when the summary has no entry. */
72
+ export const getFilterCount = (config, summary) => {
73
+ var _a, _b, _c;
74
+ if (!summary)
75
+ return 0;
76
+ if (config.key === SessionStatus.COMPLETED)
77
+ return (_a = summary.completedSessionCount) !== null && _a !== void 0 ? _a : 0;
78
+ const source = config.countSource === "status" ? summary.sessionStatuses : summary.tagCounts;
79
+ return (_c = (_b = source === null || source === void 0 ? void 0 : source.find((item) => item.type === config.key)) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
80
+ };
@@ -0,0 +1,8 @@
1
+ interface ShortcutHelpModalProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ }
5
+ /** Lists the desk shortcuts and lets the agent turn single-key ones off. */
6
+ declare const ShortcutHelpModal: ({ open, onClose }: ShortcutHelpModalProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default ShortcutHelpModal;
8
+ //# sourceMappingURL=ShortcutHelpModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutHelpModal.d.ts","sourceRoot":"","sources":["../../../src/components/shortcut-help/ShortcutHelpModal.tsx"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAiBD,4EAA4E;AAC5E,QAAA,MAAM,iBAAiB,GAAI,mBAAmB,sBAAsB,4CA6DnE,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Modal, Switch } from "antd";
4
+ import { StrokeIcon } from "../../components/icon/StrokeIcon";
5
+ import { useTranslation } from "react-i18next";
6
+ import useShortcutPrefsStore from "../../store/shortcutPrefs";
7
+ const SHORTCUTS = [
8
+ { labelKey: "shortcut_next_prev", keys: ["J", "K"] },
9
+ { labelKey: "shortcut_reply", keys: ["R"] },
10
+ { labelKey: "shortcut_internal", keys: ["N"] },
11
+ { labelKey: "shortcut_search", keys: ["/"] },
12
+ { labelKey: "shortcut_escape", keys: ["Esc"] },
13
+ { labelKey: "shortcut_help", keys: ["?"] },
14
+ ];
15
+ const Kbd = ({ children }) => (_jsx("kbd", { className: "inline-flex h-6 min-w-[24px] items-center justify-center rounded border border-b-2 border-gray-50 bg-white px-1.5 font-sans text-xs font-semibold text-gray-900", children: children }));
16
+ /** Lists the desk shortcuts and lets the agent turn single-key ones off. */
17
+ const ShortcutHelpModal = ({ open, onClose }) => {
18
+ const { t } = useTranslation();
19
+ const enabled = useShortcutPrefsStore((s) => s.singleKeyEnabled);
20
+ const setEnabled = useShortcutPrefsStore((s) => s.setSingleKeyEnabled);
21
+ return (_jsx(Modal, { open: open, onCancel: onClose, width: 480, destroyOnHidden: true, closable: { "aria-label": t("close_with_esc") }, "data-cp-name": "ShortcutHelpModal", title: _jsxs("span", { className: "flex items-center gap-3", children: [_jsx("span", { "aria-hidden": "true", className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary-25 text-primary-500", children: _jsx(StrokeIcon, { name: "keyboard", size: 20 }) }), t("shortcut_help_title")] }), footer: _jsxs("div", { className: "flex items-center gap-2 text-left", children: [_jsxs("span", { className: "flex flex-1 flex-col gap-0.5", children: [_jsx("span", { id: "shortcut-switch-label", className: "text-sm font-medium text-gray-900", children: t("shortcut_switch_label") }), _jsx("span", { className: "text-xs text-gray-600", children: t("shortcut_switch_hint") })] }), _jsx(Switch, { checked: enabled, onChange: setEnabled, "aria-labelledby": "shortcut-switch-label" })] }), children: _jsx("ul", { className: "m-0 list-none p-0", children: SHORTCUTS.map(({ labelKey, keys }, index) => (_jsxs("li", { className: `flex items-center justify-between py-2.5 text-sm text-gray-900 ${index > 0 ? "border-t border-gray-25" : ""}`, children: [_jsx("span", { children: t(labelKey) }), _jsx("span", { className: "flex gap-1", children: keys.map((key) => (_jsx(Kbd, { children: key }, key))) })] }, labelKey))) }) }));
22
+ };
23
+ export default ShortcutHelpModal;
@@ -1 +1 @@
1
- {"version":3,"file":"AssignConfirmModal.d.ts","sourceRoot":"","sources":["../../../src/components/thread/AssignConfirmModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,kBAAkB,GAAI,4DAOzB,uBAAuB,4CAyDzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"AssignConfirmModal.d.ts","sourceRoot":"","sources":["../../../src/components/thread/AssignConfirmModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIjD,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,kBAAkB,GAAI,4DAOzB,uBAAuB,4CAuDzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Modal, Button, Avatar } from "antd";
2
+ import { Modal, Button } from "antd";
3
3
  import { useTranslation, Trans } from "react-i18next";
4
+ import TintedAvatar from "../../components/common/TintedAvatar";
4
5
  const AssignConfirmModal = ({ open, agent, loading, onCancel, onConfirm, afterClose, }) => {
5
6
  var _a;
6
7
  const { t } = useTranslation();
7
- return (_jsx(Modal, { open: open, onCancel: onCancel, footer: null, closable: !loading, centered: true, forceRender: true, width: 400, maskClosable: !loading, keyboard: !loading, afterClose: afterClose, "data-cp-name": "AssignConfirmModal", children: _jsxs("div", { className: "flex flex-col items-center gap-4 pt-2", role: "alertdialog", "aria-label": t("manual_assign_confirm_question", {
8
+ return (_jsx(Modal, { open: open, onCancel: onCancel, footer: null, closable: !loading, centered: true, destroyOnHidden: true, width: 400, maskClosable: !loading, keyboard: !loading, afterClose: afterClose, "data-cp-name": "AssignConfirmModal", children: _jsxs("div", { className: "flex flex-col items-center gap-4 pt-2", role: "alertdialog", "aria-label": t("manual_assign_confirm_question", {
8
9
  name: agent === null || agent === void 0 ? void 0 : agent.displayName,
9
- }), children: [_jsx(Avatar, { src: agent === null || agent === void 0 ? void 0 : agent.avatar, size: 48, children: ((_a = agent === null || agent === void 0 ? void 0 : agent.displayName) === null || _a === void 0 ? void 0 : _a.charAt(0)) || "A" }), _jsx("p", { className: "text-base text-center", children: _jsx(Trans, { i18nKey: "manual_assign_confirm_question", values: { name: agent === null || agent === void 0 ? void 0 : agent.displayName }, components: { bold: _jsx("strong", {}) } }) }), _jsxs("div", { className: "flex gap-3 w-full", children: [_jsx(Button, { className: "flex-1", size: "large", onClick: onCancel, disabled: loading, children: t("cancel") }), _jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onConfirm, loading: loading, disabled: !agent, children: t("manual_assign_button_reassign") })] })] }) }));
10
+ }), children: [_jsx(TintedAvatar, { name: (_a = agent === null || agent === void 0 ? void 0 : agent.displayName) !== null && _a !== void 0 ? _a : "", src: agent === null || agent === void 0 ? void 0 : agent.avatar, size: 48 }), _jsx("p", { className: "text-base text-center", children: _jsx(Trans, { i18nKey: "manual_assign_confirm_question", values: { name: agent === null || agent === void 0 ? void 0 : agent.displayName }, components: { bold: _jsx("strong", {}) } }) }), _jsxs("div", { className: "flex gap-3 w-full", children: [_jsx(Button, { className: "flex-1", size: "large", onClick: onCancel, disabled: loading, children: t("cancel") }), _jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onConfirm, loading: loading, disabled: !agent, children: t("manual_assign_button_reassign") })] })] }) }));
10
11
  };
11
12
  export default AssignConfirmModal;
@@ -0,0 +1,11 @@
1
+ import { ISessionResponse } from "../../types/dto";
2
+ interface EndSessionConfirmProps {
3
+ open: boolean;
4
+ session: ISessionResponse;
5
+ customerName: string;
6
+ onConfirm: () => void;
7
+ onCancel: () => void;
8
+ }
9
+ declare const EndSessionConfirm: ({ open, session, customerName, onConfirm, onCancel, }: EndSessionConfirmProps) => import("react/jsx-runtime").JSX.Element;
10
+ export default EndSessionConfirm;
11
+ //# sourceMappingURL=EndSessionConfirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndSessionConfirm.d.ts","sourceRoot":"","sources":["../../../src/components/thread/EndSessionConfirm.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK/C,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,gBAAgB,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAGD,QAAA,MAAM,iBAAiB,GAAI,uDAMxB,sBAAsB,4CAyCxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useTranslation } from "react-i18next";
4
+ import ConfirmModal from "../../components/common/ConfirmModal";
5
+ import { END_SESSION_UNDO_MS } from "../../store/pendingSessionClose";
6
+ import { splitDisplayName } from "../../components/conversation/rowDisplayName";
7
+ import { formatSessionTime } from "./sessionDateFormat";
8
+ // Shared by the session card and the header status menu so both ask the same question.
9
+ const EndSessionConfirm = ({ open, session, customerName, onConfirm, onCancel, }) => {
10
+ var _a, _b;
11
+ const { t } = useTranslation();
12
+ const tagNames = (_a = session.labels) === null || _a === void 0 ? void 0 : _a.map((label) => label.name).join(", ");
13
+ const rows = [
14
+ {
15
+ label: t("end_session_row_session"),
16
+ value: t("end_session_session_value", {
17
+ order: session.order,
18
+ time: formatSessionTime(session.createdDate),
19
+ }),
20
+ },
21
+ { label: t("end_session_row_tags"), value: tagNames || t("end_session_no_tags") },
22
+ {
23
+ label: t("end_session_row_owner"),
24
+ value: ((_b = session.supporter) === null || _b === void 0 ? void 0 : _b.fullName) || t("end_session_no_owner"),
25
+ },
26
+ ];
27
+ return (_jsx(ConfirmModal, { open: open, title: t("end_session_title", { name: splitDisplayName(customerName).name }), okText: t("end_session_button"), cancelText: t("action_cancel"), onOk: onConfirm, onCancel: onCancel, getContainer: () => document.body, footerNote: t("end_session_undo_hint", {
28
+ count: Math.round(END_SESSION_UNDO_MS / 1000),
29
+ }), children: _jsx("dl", { className: "m-0 grid grid-cols-[96px_minmax(0,1fr)] gap-y-2 text-sm", children: rows.map((row) => (_jsxs("div", { className: "contents", children: [_jsx("dt", { className: "text-gray-600", children: row.label }), _jsx("dd", { className: "m-0 break-words", children: row.value })] }, row.label))) }) }));
30
+ };
31
+ export default EndSessionConfirm;
@@ -0,0 +1,6 @@
1
+ interface EndSessionToastProps {
2
+ onUndo: () => void;
3
+ }
4
+ declare const EndSessionToast: ({ onUndo }: EndSessionToastProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default EndSessionToast;
6
+ //# sourceMappingURL=EndSessionToast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndSessionToast.d.ts","sourceRoot":"","sources":["../../../src/components/thread/EndSessionToast.tsx"],"names":[],"mappings":"AAUA,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,eAAe,GAAI,YAAY,oBAAoB,4CA4BxD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { Button } from "antd";
6
+ import { StrokeIcon } from "../../components/icon/StrokeIcon";
7
+ import { END_SESSION_UNDO_MS } from "../../store/pendingSessionClose";
8
+ const TOTAL_SECONDS = Math.ceil(END_SESSION_UNDO_MS / 1000);
9
+ const EndSessionToast = ({ onUndo }) => {
10
+ const { t } = useTranslation();
11
+ const [secondsLeft, setSecondsLeft] = useState(TOTAL_SECONDS);
12
+ useEffect(() => {
13
+ const interval = setInterval(() => setSecondsLeft((value) => Math.max(value - 1, 0)), 1000);
14
+ return () => clearInterval(interval);
15
+ }, []);
16
+ return (_jsxs("span", { className: "inline-flex items-center gap-3", "data-cp-name": "EndSessionToast", children: [_jsx("span", { className: "font-medium", children: t("end_session_done") }), _jsx(Button, { type: "link", icon: _jsx(StrokeIcon, { name: "undo", size: 18 }), onClick: onUndo, className: "!h-8 !px-2 !font-medium", children: t("undo") }), _jsx("span", { className: "text-xs text-gray-600", children: t("end_session_seconds_left", { count: secondsLeft }) })] }));
17
+ };
18
+ export default EndSessionToast;
@@ -0,0 +1,46 @@
1
+ import type { ChangeEvent } from "react";
2
+ export type GroupInfoRow = "member-permission" | "admin-permission" | "invite-link";
3
+ export type GroupInfoConfirm = "leave" | "disband" | "delete";
4
+ export interface GroupInfoBodyCrmProps {
5
+ groupID: string;
6
+ groupName?: string;
7
+ faceURL?: string;
8
+ ownerUserID?: string;
9
+ introduction?: string;
10
+ memberCount?: number;
11
+ isPublic: boolean;
12
+ canEditAvatar: boolean;
13
+ canEditName: boolean;
14
+ canEditDescription: boolean;
15
+ canConfigPermissions: boolean;
16
+ showInviteLink: boolean;
17
+ showAllowSend: boolean;
18
+ isOwner: boolean;
19
+ isAdminOrOwner: boolean;
20
+ isViewOnlyMember: boolean;
21
+ notifyEnabled: boolean;
22
+ isTogglingNotification: boolean;
23
+ allowSendMessage: boolean;
24
+ isTogglingSendMessage: boolean;
25
+ isAvatarUploading: boolean;
26
+ isSaving: boolean;
27
+ editingField: "name" | "description" | null;
28
+ nameValue: string;
29
+ descriptionValue: string;
30
+ avatarInputRef: React.RefObject<HTMLInputElement>;
31
+ onNameChange: (value: string) => void;
32
+ onDescriptionChange: (value: string) => void;
33
+ onStartEdit: (field: "name" | "description") => void;
34
+ onCancelEdit: (field: "name" | "description") => void;
35
+ onSaveEdit: (field: "name" | "description") => void;
36
+ onAvatarClick: () => void;
37
+ onAvatarSelect: (event: ChangeEvent<HTMLInputElement>) => void;
38
+ onToggleNotification: (checked: boolean) => void;
39
+ onToggleSendMessage: (checked: boolean) => void;
40
+ onOpenRow: (row: GroupInfoRow) => void;
41
+ onConfirm: (action: GroupInfoConfirm) => void;
42
+ }
43
+ /** CRM body of the group info panel: identity, description, settings, admin rows, danger zone. */
44
+ declare const GroupInfoBodyCrm: (props: GroupInfoBodyCrmProps) => import("react/jsx-runtime").JSX.Element;
45
+ export default GroupInfoBodyCrm;
46
+ //# sourceMappingURL=GroupInfoBodyCrm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupInfoBodyCrm.d.ts","sourceRoot":"","sources":["../../../src/components/thread/GroupInfoBodyCrm.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAUzC,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,aAAa,CAAC;AACpF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,EAAE,OAAO,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,KAAK,IAAI,CAAC;IACrD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,KAAK,IAAI,CAAC;IACtD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,KAAK,IAAI,CAAC;IACpD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AA6BD,kGAAkG;AAClG,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,4CA8JrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from "react";
4
+ import { Input } from "antd";
5
+ import { useTranslation } from "react-i18next";
6
+ import { CrmIcon as Icon } from "../../components/group/crmIcon";
7
+ import GroupCompositeAvatar from "../../components/group/GroupCompositeAvatar";
8
+ import { ACCEPTED_IMAGE_TYPES } from "../../utils/fileValidation";
9
+ import { FOCUS_RING_CLASS } from "../../utils/a11yClickable";
10
+ import { DangerRow, InfoCard, NavRow, SectionLabel, SwitchRow } from "./GroupInfoRows";
11
+ const ICON_BUTTON = `flex shrink-0 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-5 ${FOCUS_RING_CLASS}`;
12
+ const Chip = ({ icon, tone, children }) => (_jsxs("span", { className: `inline-flex h-[22px] items-center gap-1 whitespace-nowrap rounded-full px-2 text-xs font-medium ${tone === "primary" ? "bg-primary-25 text-primary-500" : "bg-gray-25 text-gray-900"}`, children: [_jsx(Icon, { icon: icon, size: 12 }), children] }));
13
+ const EditActions = ({ disabled, canSave, onCancel, onSave }) => {
14
+ const { t } = useTranslation();
15
+ return (_jsxs("div", { className: "flex justify-end gap-2", children: [_jsx("button", { type: "button", disabled: disabled, onClick: onCancel, className: `h-8 rounded-lg border border-gray-50 bg-white px-3 text-sm font-medium text-gray-900 disabled:text-gray-300 ${FOCUS_RING_CLASS}`, children: t("action_cancel") }), _jsx("button", { type: "button", disabled: !canSave, onClick: onSave, className: `h-8 rounded-lg bg-primary-400 px-3 text-sm font-medium text-white disabled:bg-gray-75 disabled:text-gray-300 ${FOCUS_RING_CLASS}`, children: t("save") })] }));
16
+ };
17
+ /** CRM body of the group info panel: identity, description, settings, admin rows, danger zone. */
18
+ const GroupInfoBodyCrm = (props) => {
19
+ var _a, _b;
20
+ const { t } = useTranslation();
21
+ const descriptionRef = useRef(null);
22
+ const { editingField } = props;
23
+ useEffect(() => {
24
+ var _a;
25
+ if (editingField === "description")
26
+ (_a = descriptionRef.current) === null || _a === void 0 ? void 0 : _a.focus({ cursor: "end" });
27
+ }, [editingField]);
28
+ const hasDescription = Boolean(props.introduction);
29
+ const nameChanged = props.nameValue.trim() !== "" && props.nameValue.trim() !== ((_a = props.groupName) !== null && _a !== void 0 ? _a : "");
30
+ const descChanged = props.descriptionValue.trim() !== ((_b = props.introduction) !== null && _b !== void 0 ? _b : "");
31
+ const hasAdminRows = props.canConfigPermissions || props.showInviteLink;
32
+ return (_jsxs("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("span", { className: "relative block h-[60px] w-[60px] shrink-0", children: [_jsx(GroupCompositeAvatar, { groupID: props.groupID, faceURL: props.faceURL, ownerUserID: props.ownerUserID, groupName: props.groupName, size: 56 }), props.isAvatarUploading && (_jsx("span", { className: "absolute left-0 top-0 flex h-14 w-14 items-center justify-center rounded-full bg-gray-900/30", children: _jsx("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }) })), props.canEditAvatar && (_jsxs(_Fragment, { children: [_jsx("input", { ref: props.avatarInputRef, type: "file", accept: ACCEPTED_IMAGE_TYPES.join(", "), className: "hidden", onChange: props.onAvatarSelect }), _jsx("button", { type: "button", disabled: props.isAvatarUploading, onClick: props.onAvatarClick, "aria-label": t("group_info_edit_avatar"), title: t("group_info_edit_avatar"), className: `absolute bottom-0 right-0 flex h-6 w-6 items-center justify-center rounded-full border-2 border-white bg-gray-900 text-white ${FOCUS_RING_CLASS}`, children: _jsx(Icon, { icon: "camera-o", size: 12 }) })] }))] }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [editingField === "name" ? (_jsx(Input, { autoFocus: true, value: props.nameValue, onChange: (event) => props.onNameChange(event.target.value), maxLength: 255, disabled: props.isSaving, "aria-label": t("group_info_edit_name"), onPressEnter: () => nameChanged && props.onSaveEdit("name") })) : (_jsxs("span", { className: "flex items-center gap-0.5", children: [_jsx("span", { className: "truncate text-base font-semibold text-gray-900", title: props.groupName, children: props.groupName }), props.canEditName && (_jsx("button", { type: "button", className: `h-7 w-7 ${ICON_BUTTON}`, onClick: () => props.onStartEdit("name"), "aria-label": t("group_info_edit_name"), title: t("group_info_edit_name"), children: _jsx(Icon, { icon: "edit-o", size: 16 }) }))] })), _jsxs("span", { className: "flex flex-wrap gap-1.5", children: [_jsx(Chip, { icon: props.isPublic ? "globe-o" : "lock-o", tone: "primary", children: t(props.isPublic ? "group_visibility_public" : "group_visibility_private") }), typeof props.memberCount === "number" && (_jsx(Chip, { icon: "user-two-o", tone: "neutral", children: t("member_count", { count: props.memberCount }) }))] })] })] }), editingField === "name" && (_jsx(EditActions, { disabled: props.isSaving, canSave: !props.isSaving && nameChanged, onCancel: () => props.onCancelEdit("name"), onSave: () => props.onSaveEdit("name") })), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-xs font-medium text-gray-600", children: t("description") }), editingField === "description" ? (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Input.TextArea, { ref: descriptionRef, value: props.descriptionValue, onChange: (event) => props.onDescriptionChange(event.target.value), placeholder: t("enter_group_description"), "aria-label": t("description"), autoSize: { minRows: 2, maxRows: 5 }, maxLength: 500, showCount: true, disabled: props.isSaving }), _jsx(EditActions, { disabled: props.isSaving, canSave: !props.isSaving && descChanged, onCancel: () => props.onCancelEdit("description"), onSave: () => props.onSaveEdit("description") })] })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "m-0 whitespace-pre-wrap break-words text-sm text-gray-600", children: hasDescription ? props.introduction : t("group_info_no_description") }), props.canEditDescription && (_jsxs("button", { type: "button", onClick: () => props.onStartEdit("description"), className: `flex h-6 items-center gap-1.5 self-start rounded-lg text-[13px] font-medium text-primary-500 hover:text-primary-600 ${FOCUS_RING_CLASS}`, children: [_jsx(Icon, { icon: hasDescription ? "edit-o" : "plus-o", size: 14 }), t(hasDescription ? "group_info_edit_description" : "group_info_add_description")] }))] }))] }), _jsx(SectionLabel, { children: t("group_settings_section") }), _jsx(InfoCard, { children: [
33
+ _jsx(SwitchRow, { icon: "bell-o", label: t("notification"), checked: props.notifyEnabled, loading: props.isTogglingNotification, onChange: props.onToggleNotification }, "notify"),
34
+ props.showAllowSend && (_jsx(SwitchRow, { icon: "chat-square-o", label: t("members_can_send_message"), hint: t("allow_send_message_hint"), checked: props.allowSendMessage, loading: props.isTogglingSendMessage, onChange: props.onToggleSendMessage }, "send")),
35
+ ] }), hasAdminRows && (_jsxs(_Fragment, { children: [_jsx(SectionLabel, { children: t("group_admin_section") }), _jsx(InfoCard, { children: [
36
+ props.canConfigPermissions && _jsx(NavRow, { icon: "shield-o", label: t("member_permission_row"), onClick: () => props.onOpenRow("member-permission") }, "member"),
37
+ props.canConfigPermissions && _jsx(NavRow, { icon: "shield-o", label: t("admin_permission_row"), onClick: () => props.onOpenRow("admin-permission") }, "admin"),
38
+ props.showInviteLink && _jsx(NavRow, { icon: "link-alt-o", label: t("invite_via_link_short"), onClick: () => props.onOpenRow("invite-link") }, "invite"),
39
+ ] })] })), _jsxs("div", { className: "flex flex-col gap-0.5 border-t border-gray-25 pt-2", children: [props.isAdminOrOwner && _jsx(DangerRow, { icon: "trash-o", label: t("group_delete_conversation"), onClick: () => props.onConfirm("delete") }), !props.isViewOnlyMember && _jsx(DangerRow, { icon: "logout-o", label: t("leave_group"), onClick: () => props.onConfirm("leave") }), !props.isViewOnlyMember && (_jsx(DangerRow, { icon: "user-del-o", label: t("disband_group"), onClick: () => props.onConfirm("disband"), disabledNote: props.isOwner ? undefined : t("group_owner_only") }))] })] }));
40
+ };
41
+ export default GroupInfoBodyCrm;
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const SectionLabel: ({ children }: {
3
+ children: ReactNode;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ /** Bordered card that stacks rows separated by hairlines inset past the icon. */
6
+ export declare const InfoCard: ({ children }: {
7
+ children: ReactNode[];
8
+ }) => import("react/jsx-runtime").JSX.Element;
9
+ interface SwitchRowProps {
10
+ icon: string;
11
+ label: string;
12
+ hint?: string;
13
+ checked: boolean;
14
+ loading?: boolean;
15
+ onChange: (checked: boolean) => void;
16
+ }
17
+ export declare const SwitchRow: ({ icon, label, hint, checked, loading, onChange, }: SwitchRowProps) => import("react/jsx-runtime").JSX.Element;
18
+ interface NavRowProps {
19
+ icon: string;
20
+ label: string;
21
+ onClick: () => void;
22
+ }
23
+ export declare const NavRow: ({ icon, label, onClick }: NavRowProps) => import("react/jsx-runtime").JSX.Element;
24
+ interface DangerRowProps {
25
+ icon: string;
26
+ label: string;
27
+ onClick: () => void;
28
+ /** When set the row is disabled and the note explains why. */
29
+ disabledNote?: string;
30
+ }
31
+ export declare const DangerRow: ({ icon, label, onClick, disabledNote }: DangerRowProps) => import("react/jsx-runtime").JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=GroupInfoRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupInfoRows.d.ts","sourceRoot":"","sources":["../../../src/components/thread/GroupInfoRows.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,eAAO,MAAM,YAAY,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CAEjE,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,QAAQ,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;CAAE,4CAY/D,CAAC;AAEF,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,SAAS,GAAI,oDAOvB,cAAc,4CAmBhB,CAAC;AAEF,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,GAAI,0BAA0B,WAAW,4CAa3D,CAAC;AAEF,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,SAAS,GAAI,wCAAwC,cAAc,4CAiB/E,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Switch } from "antd";
4
+ import clsx from "clsx";
5
+ import { CrmIcon as Icon } from "../../components/group/crmIcon";
6
+ import { FOCUS_RING_CLASS } from "../../utils/a11yClickable";
7
+ export const SectionLabel = ({ children }) => (_jsx("span", { className: "-mb-2 text-xs font-medium text-gray-600", children: children }));
8
+ /** Bordered card that stacks rows separated by hairlines inset past the icon. */
9
+ export const InfoCard = ({ children }) => {
10
+ const rows = children.filter(Boolean);
11
+ return (_jsx("div", { className: "flex flex-col overflow-hidden rounded-xl border border-gray-25", children: rows.map((row, index) => (_jsxs("div", { children: [index > 0 && _jsx("div", { "aria-hidden": "true", className: "ml-11 h-px bg-gray-25" }), row] }, index))) }));
12
+ };
13
+ export const SwitchRow = ({ icon, label, hint, checked, loading, onChange, }) => {
14
+ const id = `group-switch-${icon}`;
15
+ return (_jsxs("div", { className: "flex min-h-12 items-center gap-3 px-3 py-2", children: [_jsx(Icon, { icon: icon, size: 20, className: "shrink-0 text-gray-600" }), _jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("span", { id: id, className: "text-sm text-gray-900", children: label }), hint && _jsx("span", { className: "text-xs leading-snug text-gray-600", children: hint })] }), _jsx(Switch, { checked: checked, loading: loading, onChange: onChange, "aria-labelledby": id })] }));
16
+ };
17
+ export const NavRow = ({ icon, label, onClick }) => (_jsxs("button", { type: "button", onClick: onClick, className: clsx("flex h-12 w-full items-center gap-3 px-3 text-left text-sm text-gray-900 hover:bg-gray-10", FOCUS_RING_CLASS), children: [_jsx(Icon, { icon: icon, size: 20, className: "shrink-0 text-gray-600" }), _jsx("span", { className: "flex-1", children: label }), _jsx(Icon, { icon: "angle-right-o", size: 16, className: "shrink-0 text-gray-600" })] }));
18
+ export const DangerRow = ({ icon, label, onClick, disabledNote }) => (_jsxs("button", { type: "button", onClick: onClick, disabled: Boolean(disabledNote), className: clsx("flex h-11 w-full items-center gap-3 rounded-lg px-3 text-left text-sm font-medium text-danger-600", disabledNote ? "cursor-not-allowed" : "hover:bg-danger-10", FOCUS_RING_CLASS), children: [_jsx(Icon, { icon: icon, size: 20, className: clsx("shrink-0", disabledNote && "opacity-50") }), _jsx("span", { className: clsx("flex-1", disabledNote && "opacity-50"), children: label }), disabledNote && (_jsx("span", { className: "text-xs font-normal text-gray-600", children: disabledNote }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"GroupThreadInfo.d.ts","sourceRoot":"","sources":["../../../src/components/thread/GroupThreadInfo.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AASD,QAAA,MAAM,eAAe,GAAI,qBAAqB,oBAAoB,mDA8mBjE,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"GroupThreadInfo.d.ts","sourceRoot":"","sources":["../../../src/components/thread/GroupThreadInfo.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AASD,QAAA,MAAM,eAAe,GAAI,qBAAqB,oBAAoB,mDAqrBjE,CAAC;AAEF,eAAe,eAAe,CAAC"}