stream-chat-react 12.15.0 → 13.0.0-rc.2

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 (473) hide show
  1. package/dist/components/AIStateIndicator/AIStateIndicator.d.ts +4 -5
  2. package/dist/components/AIStateIndicator/hooks/useAIState.d.ts +2 -3
  3. package/dist/components/Attachment/Attachment.d.ts +8 -9
  4. package/dist/components/Attachment/Attachment.js +6 -5
  5. package/dist/components/Attachment/AttachmentActions.d.ts +2 -3
  6. package/dist/components/Attachment/AttachmentContainer.d.ts +15 -15
  7. package/dist/components/Attachment/AttachmentContainer.js +2 -2
  8. package/dist/components/Attachment/Audio.d.ts +3 -4
  9. package/dist/components/Attachment/Card.d.ts +1 -1
  10. package/dist/components/Attachment/FileAttachment.d.ts +3 -4
  11. package/dist/components/Attachment/FileAttachment.js +1 -1
  12. package/dist/components/Attachment/UnsupportedAttachment.d.ts +3 -4
  13. package/dist/components/Attachment/UnsupportedAttachment.js +1 -1
  14. package/dist/components/Attachment/VoiceRecording.d.ts +4 -5
  15. package/dist/components/Attachment/components/FileSizeIndicator.d.ts +1 -1
  16. package/dist/components/Attachment/components/FileSizeIndicator.js +4 -2
  17. package/dist/components/Attachment/utils.d.ts +8 -22
  18. package/dist/components/Attachment/utils.js +3 -18
  19. package/dist/components/Avatar/Avatar.d.ts +3 -4
  20. package/dist/components/Avatar/ChannelAvatar.d.ts +3 -4
  21. package/dist/components/Avatar/ChannelAvatar.js +1 -1
  22. package/dist/components/Avatar/GroupAvatar.d.ts +2 -2
  23. package/dist/components/Channel/Channel.d.ts +18 -43
  24. package/dist/components/Channel/Channel.js +25 -88
  25. package/dist/components/Channel/channelState.d.ts +17 -18
  26. package/dist/components/Channel/hooks/useChannelContainerClasses.d.ts +2 -3
  27. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +2 -3
  28. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +1 -15
  29. package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +1 -2
  30. package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +3 -4
  31. package/dist/components/Channel/hooks/useMentionsHandlers.d.ts +3 -4
  32. package/dist/components/Channel/utils.d.ts +8 -6
  33. package/dist/components/Channel/utils.js +1 -0
  34. package/dist/components/ChannelHeader/ChannelHeader.d.ts +2 -3
  35. package/dist/components/ChannelList/ChannelList.d.ts +31 -30
  36. package/dist/components/ChannelList/ChannelList.js +8 -10
  37. package/dist/components/ChannelList/ChannelListMessenger.d.ts +6 -6
  38. package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts +1 -2
  39. package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts +1 -2
  40. package/dist/components/ChannelList/hooks/useChannelListShape.d.ts +44 -44
  41. package/dist/components/ChannelList/hooks/useChannelListShape.js +0 -2
  42. package/dist/components/ChannelList/hooks/useChannelMembershipState.d.ts +3 -3
  43. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts +1 -2
  44. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts +1 -2
  45. package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts +1 -2
  46. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +1 -2
  47. package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts +1 -2
  48. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +1 -2
  49. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +1 -2
  50. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts +1 -2
  51. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +7 -8
  52. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +3 -3
  53. package/dist/components/ChannelList/hooks/useSelectedChannelState.d.ts +7 -7
  54. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts +1 -2
  55. package/dist/components/ChannelList/utils.d.ts +20 -21
  56. package/dist/components/ChannelList/utils.js +2 -2
  57. package/dist/components/ChannelPreview/ChannelPreview.d.ts +15 -16
  58. package/dist/components/ChannelPreview/ChannelPreview.js +1 -1
  59. package/dist/components/ChannelPreview/ChannelPreviewActionButtons.d.ts +4 -4
  60. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +1 -2
  61. package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts +3 -4
  62. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts +1 -2
  63. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +5 -7
  64. package/dist/components/ChannelPreview/icons.d.ts +1 -1
  65. package/dist/components/ChannelPreview/utils.d.ts +7 -7
  66. package/dist/components/ChannelSearch/ChannelSearch.d.ts +5 -6
  67. package/dist/components/ChannelSearch/ChannelSearch.js +2 -2
  68. package/dist/components/ChannelSearch/SearchBar.d.ts +1 -1
  69. package/dist/components/ChannelSearch/SearchBar.js +1 -1
  70. package/dist/components/ChannelSearch/SearchResults.d.ts +13 -14
  71. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  72. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +17 -18
  73. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +2 -6
  74. package/dist/components/ChannelSearch/utils.d.ts +2 -3
  75. package/dist/components/Chat/Chat.d.ts +9 -9
  76. package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +1 -1
  77. package/dist/components/Chat/hooks/useChat.d.ts +10 -10
  78. package/dist/components/Chat/hooks/useChat.js +3 -3
  79. package/dist/components/Chat/hooks/useCreateChatClient.d.ts +4 -4
  80. package/dist/components/Chat/hooks/useCreateChatContext.d.ts +1 -2
  81. package/dist/components/Dialog/DialogAnchor.d.ts +4 -3
  82. package/dist/components/Dialog/DialogAnchor.js +2 -2
  83. package/dist/components/Dialog/DialogMenu.d.ts +2 -1
  84. package/dist/components/Dialog/DialogPortal.d.ts +2 -1
  85. package/dist/components/Dialog/FormDialog.d.ts +2 -1
  86. package/dist/components/Dialog/FormDialog.js +1 -1
  87. package/dist/components/Dialog/PromptDialog.d.ts +2 -1
  88. package/dist/components/DragAndDrop/DragAndDropContainer.d.ts +2 -1
  89. package/dist/components/EventComponent/EventComponent.d.ts +7 -6
  90. package/dist/components/Form/FieldError.d.ts +2 -1
  91. package/dist/components/Form/SwitchField.d.ts +2 -1
  92. package/dist/components/Form/SwitchField.js +1 -1
  93. package/dist/components/Gallery/Gallery.d.ts +5 -5
  94. package/dist/components/Gallery/Image.d.ts +6 -5
  95. package/dist/components/Gallery/ModalGallery.d.ts +3 -4
  96. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +2 -1
  97. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +2 -1
  98. package/dist/components/LoadMore/LoadMoreButton.d.ts +2 -1
  99. package/dist/components/LoadMore/LoadMorePaginator.d.ts +3 -2
  100. package/dist/components/LoadMore/LoadMorePaginator.js +1 -1
  101. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +3 -2
  102. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +1 -1
  103. package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts +1 -1
  104. package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts +11 -23
  105. package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts +8 -8
  106. package/dist/components/MediaRecorder/hooks/useMediaRecorder.js +6 -4
  107. package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts +2 -2
  108. package/dist/components/MediaRecorder/observable/Observable.d.ts +1 -1
  109. package/dist/components/MediaRecorder/observable/Subject.d.ts +3 -2
  110. package/dist/components/Message/FixedHeightMessage.d.ts +4 -5
  111. package/dist/components/Message/Message.d.ts +1 -2
  112. package/dist/components/Message/MessageDeleted.d.ts +4 -5
  113. package/dist/components/Message/MessageEditedTimestamp.d.ts +2 -3
  114. package/dist/components/Message/MessageErrorText.d.ts +4 -5
  115. package/dist/components/Message/MessageErrorText.js +2 -2
  116. package/dist/components/Message/MessageOptions.d.ts +3 -3
  117. package/dist/components/Message/MessageRepliesCountButton.d.ts +2 -1
  118. package/dist/components/Message/MessageSimple.d.ts +1 -2
  119. package/dist/components/Message/MessageSimple.js +8 -10
  120. package/dist/components/Message/MessageStatus.d.ts +3 -4
  121. package/dist/components/Message/MessageText.d.ts +6 -6
  122. package/dist/components/Message/MessageTimestamp.d.ts +4 -5
  123. package/dist/components/Message/QuotedMessage.d.ts +2 -3
  124. package/dist/components/Message/QuotedMessage.js +1 -1
  125. package/dist/components/Message/StreamedMessageText.d.ts +3 -4
  126. package/dist/components/Message/hooks/useActionHandler.d.ts +2 -3
  127. package/dist/components/Message/hooks/useActionHandler.js +1 -1
  128. package/dist/components/Message/hooks/useDeleteHandler.d.ts +4 -5
  129. package/dist/components/Message/hooks/useFlagHandler.d.ts +5 -6
  130. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +5 -6
  131. package/dist/components/Message/hooks/useMentionsHandler.d.ts +6 -8
  132. package/dist/components/Message/hooks/useMessageTextStreaming.d.ts +2 -3
  133. package/dist/components/Message/hooks/useMuteHandler.d.ts +5 -7
  134. package/dist/components/Message/hooks/useMuteHandler.js +1 -1
  135. package/dist/components/Message/hooks/useOpenThreadHandler.d.ts +2 -3
  136. package/dist/components/Message/hooks/usePinHandler.d.ts +4 -5
  137. package/dist/components/Message/hooks/usePinHandler.js +1 -1
  138. package/dist/components/Message/hooks/useReactionHandler.d.ts +3 -4
  139. package/dist/components/Message/hooks/useReactionHandler.js +2 -4
  140. package/dist/components/Message/hooks/useReactionsFetcher.d.ts +5 -7
  141. package/dist/components/Message/hooks/useRetryHandler.d.ts +2 -3
  142. package/dist/components/Message/hooks/useRetryHandler.js +1 -1
  143. package/dist/components/Message/hooks/useUserHandler.d.ts +5 -6
  144. package/dist/components/Message/hooks/useUserRole.d.ts +2 -3
  145. package/dist/components/Message/hooks/useUserRole.js +1 -1
  146. package/dist/components/Message/icons.d.ts +2 -2
  147. package/dist/components/Message/icons.js +1 -1
  148. package/dist/components/Message/renderText/componentRenderers/Anchor.d.ts +2 -1
  149. package/dist/components/Message/renderText/componentRenderers/Emoji.d.ts +1 -1
  150. package/dist/components/Message/renderText/componentRenderers/Mention.d.ts +5 -5
  151. package/dist/components/Message/renderText/componentRenderers/Mention.js +1 -1
  152. package/dist/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.d.ts +1 -2
  153. package/dist/components/Message/renderText/renderText.d.ts +6 -6
  154. package/dist/components/Message/renderText/types.d.ts +1 -1
  155. package/dist/components/Message/types.d.ts +27 -28
  156. package/dist/components/Message/utils.d.ts +21 -22
  157. package/dist/components/Message/utils.js +5 -4
  158. package/dist/components/MessageActions/CustomMessageActionsList.d.ts +6 -7
  159. package/dist/components/MessageActions/MessageActions.d.ts +6 -5
  160. package/dist/components/MessageActions/MessageActions.js +1 -1
  161. package/dist/components/MessageActions/MessageActionsBox.d.ts +5 -5
  162. package/dist/components/MessageActions/MessageActionsBox.js +4 -3
  163. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +1 -1
  164. package/dist/components/MessageBounce/MessageBounceModal.d.ts +4 -3
  165. package/dist/components/MessageBounce/MessageBouncePrompt.d.ts +1 -2
  166. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.d.ts +11 -11
  167. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.js +17 -14
  168. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.d.ts +4 -12
  169. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.js +8 -5
  170. package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.d.ts +4 -5
  171. package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.js +2 -2
  172. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts +7 -5
  173. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.js +5 -2
  174. package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.d.ts +4 -5
  175. package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.js +5 -2
  176. package/dist/components/MessageInput/AttachmentPreviewList/index.d.ts +1 -1
  177. package/dist/components/MessageInput/AttachmentPreviewList/types.d.ts +3 -4
  178. package/dist/components/MessageInput/AttachmentSelector.d.ts +1 -2
  179. package/dist/components/MessageInput/AttachmentSelector.js +5 -3
  180. package/dist/components/MessageInput/EditMessageForm.d.ts +3 -2
  181. package/dist/components/MessageInput/EditMessageForm.js +30 -6
  182. package/dist/components/MessageInput/LinkPreviewList.d.ts +6 -4
  183. package/dist/components/MessageInput/LinkPreviewList.js +24 -10
  184. package/dist/components/MessageInput/MessageInput.d.ts +23 -45
  185. package/dist/components/MessageInput/MessageInput.js +24 -17
  186. package/dist/components/MessageInput/MessageInputFlat.d.ts +1 -2
  187. package/dist/components/MessageInput/MessageInputFlat.js +14 -39
  188. package/dist/components/MessageInput/QuotedMessagePreview.d.ts +4 -7
  189. package/dist/components/MessageInput/QuotedMessagePreview.js +22 -16
  190. package/dist/components/MessageInput/SendButton.d.ts +4 -5
  191. package/dist/components/MessageInput/SendButton.js +6 -2
  192. package/dist/components/MessageInput/WithDragAndDropUpload.d.ts +4 -3
  193. package/dist/components/MessageInput/WithDragAndDropUpload.js +20 -9
  194. package/dist/components/MessageInput/hooks/index.d.ts +5 -1
  195. package/dist/components/MessageInput/hooks/index.js +5 -1
  196. package/dist/components/MessageInput/hooks/useAttachmentManagerState.d.ts +10 -0
  197. package/dist/components/MessageInput/hooks/useAttachmentManagerState.js +19 -0
  198. package/dist/components/MessageInput/hooks/useCanCreatePoll.d.ts +1 -0
  199. package/dist/components/MessageInput/hooks/useCanCreatePoll.js +10 -0
  200. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +2 -3
  201. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +1 -2
  202. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +1 -55
  203. package/dist/components/MessageInput/hooks/useMessageComposer.d.ts +2 -0
  204. package/dist/components/MessageInput/hooks/useMessageComposer.js +80 -0
  205. package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.d.ts +1 -0
  206. package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.js +8 -0
  207. package/dist/components/MessageInput/hooks/useMessageInputControls.d.ts +12 -0
  208. package/dist/components/MessageInput/hooks/useMessageInputControls.js +23 -0
  209. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +1 -5
  210. package/dist/components/MessageInput/hooks/useMessageInputText.js +19 -53
  211. package/dist/components/MessageInput/hooks/usePasteHandler.d.ts +1 -3
  212. package/dist/components/MessageInput/hooks/usePasteHandler.js +6 -8
  213. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -6
  214. package/dist/components/MessageInput/hooks/useSubmitHandler.js +30 -98
  215. package/dist/components/MessageInput/hooks/utils.d.ts +0 -27
  216. package/dist/components/MessageInput/hooks/utils.js +0 -124
  217. package/dist/components/MessageInput/index.d.ts +0 -2
  218. package/dist/components/MessageInput/index.js +0 -2
  219. package/dist/components/MessageList/ConnectionStatus.d.ts +1 -2
  220. package/dist/components/MessageList/ConnectionStatus.js +1 -1
  221. package/dist/components/MessageList/CustomNotification.d.ts +2 -1
  222. package/dist/components/MessageList/GiphyPreviewMessage.d.ts +4 -5
  223. package/dist/components/MessageList/MessageList.d.ts +11 -12
  224. package/dist/components/MessageList/MessageList.js +4 -4
  225. package/dist/components/MessageList/MessageNotification.d.ts +2 -1
  226. package/dist/components/MessageList/VirtualizedMessageList.d.ts +22 -21
  227. package/dist/components/MessageList/VirtualizedMessageList.js +6 -6
  228. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +10 -10
  229. package/dist/components/MessageList/VirtualizedMessageListComponents.js +7 -7
  230. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +8 -10
  231. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.js +1 -1
  232. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +11 -12
  233. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +4 -5
  234. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +5 -6
  235. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts +4 -5
  236. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.js +3 -2
  237. package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts +4 -5
  238. package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.js +1 -1
  239. package/dist/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +2 -3
  240. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts +2 -3
  241. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +6 -2
  242. package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts +4 -5
  243. package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.d.ts +2 -3
  244. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +3 -4
  245. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +5 -6
  246. package/dist/components/MessageList/hooks/useLastReadData.d.ts +5 -6
  247. package/dist/components/MessageList/hooks/useLastReadData.js +5 -1
  248. package/dist/components/MessageList/hooks/useMarkRead.d.ts +1 -2
  249. package/dist/components/MessageList/renderMessages.d.ts +14 -14
  250. package/dist/components/MessageList/renderMessages.js +8 -7
  251. package/dist/components/MessageList/utils.d.ts +34 -28
  252. package/dist/components/MessageList/utils.js +26 -21
  253. package/dist/components/Modal/Modal.d.ts +2 -1
  254. package/dist/components/Poll/Poll.d.ts +2 -3
  255. package/dist/components/Poll/Poll.js +1 -1
  256. package/dist/components/Poll/PollActions/AddCommentForm.d.ts +1 -2
  257. package/dist/components/Poll/PollActions/AddCommentForm.js +4 -2
  258. package/dist/components/Poll/PollActions/EndPollDialog.d.ts +1 -2
  259. package/dist/components/Poll/PollActions/EndPollDialog.js +1 -1
  260. package/dist/components/Poll/PollActions/PollAction.d.ts +2 -1
  261. package/dist/components/Poll/PollActions/PollActions.d.ts +7 -8
  262. package/dist/components/Poll/PollActions/PollActions.js +5 -5
  263. package/dist/components/Poll/PollActions/PollAnswerList.d.ts +1 -2
  264. package/dist/components/Poll/PollActions/PollOptionsFullList.d.ts +1 -2
  265. package/dist/components/Poll/PollActions/PollOptionsFullList.js +4 -2
  266. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.d.ts +3 -4
  267. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.js +1 -1
  268. package/dist/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.d.ts +3 -4
  269. package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts +4 -5
  270. package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.js +1 -1
  271. package/dist/components/Poll/PollActions/PollResults/PollResults.d.ts +1 -2
  272. package/dist/components/Poll/PollActions/PollResults/PollResults.js +1 -1
  273. package/dist/components/Poll/PollActions/SuggestPollOptionForm.d.ts +1 -2
  274. package/dist/components/Poll/PollActions/SuggestPollOptionForm.js +3 -1
  275. package/dist/components/Poll/PollContent.d.ts +1 -2
  276. package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.d.ts +2 -0
  277. package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.js +35 -0
  278. package/dist/components/Poll/PollCreationDialog/NameField.d.ts +2 -0
  279. package/dist/components/Poll/PollCreationDialog/NameField.js +26 -0
  280. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.d.ts +1 -8
  281. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.js +33 -65
  282. package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +31 -85
  283. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts +1 -4
  284. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.js +15 -41
  285. package/dist/components/Poll/PollCreationDialog/types.d.ts +0 -14
  286. package/dist/components/Poll/PollHeader.d.ts +1 -2
  287. package/dist/components/Poll/PollOptionList.d.ts +1 -2
  288. package/dist/components/Poll/PollOptionList.js +4 -2
  289. package/dist/components/Poll/PollOptionSelector.d.ts +3 -4
  290. package/dist/components/Poll/PollVote.d.ts +6 -7
  291. package/dist/components/Poll/PollVote.js +3 -3
  292. package/dist/components/Poll/QuotedPoll.d.ts +1 -2
  293. package/dist/components/Poll/constants.d.ts +0 -1
  294. package/dist/components/Poll/constants.js +0 -1
  295. package/dist/components/Poll/hooks/useManagePollVotesRealtime.d.ts +2 -3
  296. package/dist/components/Poll/hooks/usePollAnswerPagination.d.ts +2 -3
  297. package/dist/components/Poll/hooks/usePollAnswerPagination.js +2 -2
  298. package/dist/components/Poll/hooks/usePollOptionVotesPagination.d.ts +2 -3
  299. package/dist/components/Poll/hooks/usePollOptionVotesPagination.js +1 -1
  300. package/dist/components/Portal/Portal.d.ts +1 -1
  301. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +1 -1
  302. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet.d.ts +2 -1
  303. package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts +1 -1
  304. package/dist/components/ReactFileUtilities/UploadButton.d.ts +3 -2
  305. package/dist/components/ReactFileUtilities/UploadButton.js +16 -6
  306. package/dist/components/ReactFileUtilities/index.d.ts +0 -1
  307. package/dist/components/ReactFileUtilities/index.js +0 -1
  308. package/dist/components/ReactFileUtilities/utils.d.ts +2 -2
  309. package/dist/components/Reactions/ReactionSelector.d.ts +4 -5
  310. package/dist/components/Reactions/ReactionSelectorWithButton.d.ts +1 -2
  311. package/dist/components/Reactions/ReactionsList.d.ts +6 -7
  312. package/dist/components/Reactions/ReactionsList.js +2 -2
  313. package/dist/components/Reactions/ReactionsListModal.d.ts +9 -10
  314. package/dist/components/Reactions/SimpleReactionsList.d.ts +5 -6
  315. package/dist/components/Reactions/StreamEmoji.d.ts +1 -1
  316. package/dist/components/Reactions/hooks/useFetchReactions.d.ts +9 -10
  317. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +1 -2
  318. package/dist/components/Reactions/types.d.ts +3 -4
  319. package/dist/components/Reactions/utils/utils.d.ts +1 -1
  320. package/dist/components/SafeAnchor/SafeAnchor.d.ts +2 -1
  321. package/dist/components/TextareaComposer/SuggestionList/CommandItem.d.ts +7 -0
  322. package/dist/components/{CommandItem → TextareaComposer/SuggestionList}/CommandItem.js +1 -2
  323. package/dist/components/{EmoticonItem → TextareaComposer/SuggestionList}/EmoticonItem.d.ts +7 -7
  324. package/dist/components/TextareaComposer/SuggestionList/EmoticonItem.js +12 -0
  325. package/dist/components/TextareaComposer/SuggestionList/SuggestionList.d.ts +14 -0
  326. package/dist/components/TextareaComposer/SuggestionList/SuggestionList.js +50 -0
  327. package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.d.ts +18 -0
  328. package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.js +24 -0
  329. package/dist/components/{UserItem → TextareaComposer/SuggestionList}/UserItem.d.ts +7 -4
  330. package/dist/components/TextareaComposer/SuggestionList/UserItem.js +24 -0
  331. package/dist/components/TextareaComposer/SuggestionList/index.d.ts +5 -0
  332. package/dist/components/TextareaComposer/SuggestionList/index.js +5 -0
  333. package/dist/components/TextareaComposer/TextareaComposer.d.ts +13 -0
  334. package/dist/components/TextareaComposer/TextareaComposer.js +155 -0
  335. package/dist/components/TextareaComposer/index.d.ts +2 -0
  336. package/dist/components/TextareaComposer/index.js +2 -0
  337. package/dist/components/Thread/Thread.d.ts +13 -10
  338. package/dist/components/Thread/Thread.js +23 -12
  339. package/dist/components/Thread/ThreadHead.d.ts +2 -3
  340. package/dist/components/Thread/ThreadHeader.d.ts +5 -6
  341. package/dist/components/Thread/ThreadHeader.js +1 -1
  342. package/dist/components/Threads/ThreadContext.d.ts +2 -2
  343. package/dist/components/Threads/ThreadContext.js +1 -4
  344. package/dist/components/Threads/ThreadList/ThreadList.d.ts +1 -1
  345. package/dist/components/Threads/ThreadList/ThreadListItem.d.ts +1 -1
  346. package/dist/components/Threads/hooks/useThreadManagerState.d.ts +1 -1
  347. package/dist/components/Threads/hooks/useThreadState.d.ts +1 -1
  348. package/dist/components/Threads/icons.d.ts +1 -1
  349. package/dist/components/Tooltip/Tooltip.d.ts +3 -2
  350. package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts +1 -1
  351. package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -2
  352. package/dist/components/Window/Window.d.ts +6 -6
  353. package/dist/components/index.d.ts +1 -5
  354. package/dist/components/index.js +1 -5
  355. package/dist/context/AttachmentSelectorContext.d.ts +2 -1
  356. package/dist/context/ChannelActionContext.d.ts +26 -35
  357. package/dist/context/ChannelListContext.d.ts +9 -9
  358. package/dist/context/ChannelListContext.js +1 -1
  359. package/dist/context/ChannelStateContext.d.ts +24 -34
  360. package/dist/context/ChatContext.d.ts +18 -17
  361. package/dist/context/ComponentContext.d.ts +39 -37
  362. package/dist/context/DialogManagerContext.d.ts +2 -1
  363. package/dist/context/MessageBounceContext.d.ts +8 -7
  364. package/dist/context/MessageBounceContext.js +1 -1
  365. package/dist/context/MessageContext.d.ts +23 -23
  366. package/dist/context/MessageInputContext.d.ts +8 -26
  367. package/dist/context/MessageListContext.d.ts +2 -1
  368. package/dist/context/PollContext.d.ts +8 -8
  369. package/dist/context/TranslationContext.d.ts +2 -1
  370. package/dist/context/TypingContext.d.ts +11 -10
  371. package/dist/context/VirtualizedMessageListContext.d.ts +2 -1
  372. package/dist/context/WithComponents.d.ts +3 -2
  373. package/dist/css/v2/index.css +1 -1
  374. package/dist/css/v2/index.layout.css +1 -1
  375. package/dist/experimental/MessageActions/MessageActions.d.ts +1 -1
  376. package/dist/experimental/MessageActions/MessageActions.js +1 -1
  377. package/dist/experimental/MessageActions/defaults.js +4 -3
  378. package/dist/experimental/Search/Search.d.ts +1 -2
  379. package/dist/experimental/Search/SearchContext.d.ts +8 -8
  380. package/dist/experimental/Search/SearchResults/SearchResultItem.d.ts +11 -11
  381. package/dist/experimental/Search/SearchResults/SearchResultItem.js +3 -3
  382. package/dist/experimental/Search/SearchResults/SearchResults.d.ts +1 -2
  383. package/dist/experimental/Search/SearchResults/SearchResultsHeader.d.ts +1 -2
  384. package/dist/experimental/Search/SearchResults/SearchResultsHeader.js +1 -1
  385. package/dist/experimental/Search/SearchResults/SearchSourceResultList.d.ts +2 -3
  386. package/dist/experimental/Search/SearchResults/SearchSourceResultListFooter.d.ts +1 -2
  387. package/dist/experimental/Search/SearchResults/SearchSourceResults.d.ts +1 -2
  388. package/dist/experimental/Search/SearchResults/SearchSourceResults.js +1 -1
  389. package/dist/experimental/Search/SearchSourceResultsContext.d.ts +2 -1
  390. package/dist/experimental/Search/hooks/useSearchFocusedMessage.d.ts +1 -2
  391. package/dist/experimental/Search/hooks/useSearchFocusedMessage.js +3 -1
  392. package/dist/experimental/Search/hooks/useSearchQueriesInProgress.d.ts +3 -4
  393. package/dist/experimental/index.browser.cjs +1139 -1075
  394. package/dist/experimental/index.browser.cjs.map +4 -4
  395. package/dist/experimental/index.node.cjs +1139 -1075
  396. package/dist/experimental/index.node.cjs.map +4 -4
  397. package/dist/i18n/Streami18n.d.ts +1 -1
  398. package/dist/i18n/types.d.ts +2 -2
  399. package/dist/i18n/utils.d.ts +1 -1
  400. package/dist/i18n/utils.js +3 -1
  401. package/dist/index.browser.cjs +28513 -30641
  402. package/dist/index.browser.cjs.map +4 -4
  403. package/dist/index.node.cjs +30740 -32877
  404. package/dist/index.node.cjs.map +4 -4
  405. package/dist/plugins/Emojis/index.browser.cjs +133 -2
  406. package/dist/plugins/Emojis/index.browser.cjs.map +4 -4
  407. package/dist/plugins/Emojis/index.d.ts +1 -0
  408. package/dist/plugins/Emojis/index.js +1 -0
  409. package/dist/plugins/Emojis/index.node.cjs +135 -3
  410. package/dist/plugins/Emojis/index.node.cjs.map +4 -4
  411. package/dist/plugins/Emojis/middleware/index.d.ts +1 -0
  412. package/dist/plugins/Emojis/middleware/index.js +1 -0
  413. package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.d.ts +66 -0
  414. package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.js +143 -0
  415. package/dist/plugins/encoders/mp3.browser.cjs.map +2 -2
  416. package/dist/plugins/encoders/mp3.node.cjs.map +2 -2
  417. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +14 -0
  418. package/dist/scss/v2/Autocomplete/Autocomplete-theme.scss +11 -0
  419. package/dist/scss/v2/LinkPreview/LinkPreview-layout.scss +18 -0
  420. package/dist/scss/v2/LinkPreview/LinkPreview-theme.scss +15 -0
  421. package/dist/types/defaultDataInterfaces.d.ts +25 -0
  422. package/dist/types/index.d.ts +2 -1
  423. package/dist/types/types.d.ts +2 -62
  424. package/dist/utils/getChannel.d.ts +5 -6
  425. package/dist/utils/mergeDeep.d.ts +2 -3
  426. package/package.json +5 -5
  427. package/dist/components/AutoCompleteTextarea/Item.d.ts +0 -2
  428. package/dist/components/AutoCompleteTextarea/Item.js +0 -10
  429. package/dist/components/AutoCompleteTextarea/List.d.ts +0 -17
  430. package/dist/components/AutoCompleteTextarea/List.js +0 -89
  431. package/dist/components/AutoCompleteTextarea/Textarea.d.ts +0 -114
  432. package/dist/components/AutoCompleteTextarea/Textarea.js +0 -593
  433. package/dist/components/AutoCompleteTextarea/index.d.ts +0 -4
  434. package/dist/components/AutoCompleteTextarea/index.js +0 -4
  435. package/dist/components/AutoCompleteTextarea/types.d.ts +0 -15
  436. package/dist/components/AutoCompleteTextarea/utils.d.ts +0 -6
  437. package/dist/components/AutoCompleteTextarea/utils.js +0 -40
  438. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +0 -78
  439. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +0 -33
  440. package/dist/components/ChatAutoComplete/index.d.ts +0 -1
  441. package/dist/components/ChatAutoComplete/index.js +0 -1
  442. package/dist/components/CommandItem/CommandItem.d.ts +0 -12
  443. package/dist/components/CommandItem/index.d.ts +0 -1
  444. package/dist/components/CommandItem/index.js +0 -1
  445. package/dist/components/EmoticonItem/EmoticonItem.js +0 -16
  446. package/dist/components/EmoticonItem/index.d.ts +0 -1
  447. package/dist/components/EmoticonItem/index.js +0 -1
  448. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +0 -35
  449. package/dist/components/MessageInput/DefaultTriggerProvider.js +0 -24
  450. package/dist/components/MessageInput/DropzoneProvider.d.ts +0 -4
  451. package/dist/components/MessageInput/DropzoneProvider.js +0 -23
  452. package/dist/components/MessageInput/hooks/useAttachments.d.ts +0 -14
  453. package/dist/components/MessageInput/hooks/useAttachments.js +0 -209
  454. package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts +0 -3
  455. package/dist/components/MessageInput/hooks/useCommandTrigger.js +0 -62
  456. package/dist/components/MessageInput/hooks/useEmojiTrigger.d.ts +0 -3
  457. package/dist/components/MessageInput/hooks/useEmojiTrigger.js +0 -29
  458. package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts +0 -30
  459. package/dist/components/MessageInput/hooks/useLinkPreviews.js +0 -109
  460. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +0 -71
  461. package/dist/components/MessageInput/hooks/useMessageInputState.js +0 -200
  462. package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +0 -12
  463. package/dist/components/MessageInput/hooks/useUserTrigger.js +0 -130
  464. package/dist/components/MessageInput/types.d.ts +0 -87
  465. package/dist/components/MessageInput/types.js +0 -19
  466. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +0 -16
  467. package/dist/components/ReactFileUtilities/ImageDropzone.js +0 -42
  468. package/dist/components/UserItem/UserItem.js +0 -26
  469. package/dist/components/UserItem/index.d.ts +0 -1
  470. package/dist/components/UserItem/index.js +0 -1
  471. /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.d.ts +0 -0
  472. /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.js +0 -0
  473. /package/dist/{components/AutoCompleteTextarea/types.js → types/defaultDataInterfaces.js} +0 -0
@@ -1,2 +1,6 @@
1
+ export * from './useAttachmentManagerState';
2
+ export * from './useCanCreatePoll';
1
3
  export * from './useCooldownTimer';
2
- export * from './useMessageInputState';
4
+ export * from './useMessageInputControls';
5
+ export * from './useMessageComposer';
6
+ export * from './useMessageComposerHasSendableData';
@@ -0,0 +1,10 @@
1
+ export declare const useAttachmentManagerState: () => {
2
+ attachments: import("stream-chat").LocalAttachment[];
3
+ availableUploadSlots: number;
4
+ blockedUploadsCount: number;
5
+ failedUploadsCount: number;
6
+ isUploadEnabled: boolean;
7
+ pendingUploadsCount: number;
8
+ successfulUploadsCount: number;
9
+ uploadsInProgressCount: number;
10
+ };
@@ -0,0 +1,19 @@
1
+ import { useMessageComposer } from './useMessageComposer';
2
+ import { useStateStore } from '../../../store';
3
+ const stateSelector = (state) => ({
4
+ attachments: state.attachments,
5
+ });
6
+ export const useAttachmentManagerState = () => {
7
+ const { attachmentManager } = useMessageComposer();
8
+ const { attachments } = useStateStore(attachmentManager.state, stateSelector);
9
+ return {
10
+ attachments,
11
+ availableUploadSlots: attachmentManager.availableUploadSlots,
12
+ blockedUploadsCount: attachmentManager.blockedUploadsCount,
13
+ failedUploadsCount: attachmentManager.failedUploadsCount,
14
+ isUploadEnabled: attachmentManager.isUploadEnabled,
15
+ pendingUploadsCount: attachmentManager.pendingUploadsCount,
16
+ successfulUploadsCount: attachmentManager.successfulUploadsCount,
17
+ uploadsInProgressCount: attachmentManager.uploadsInProgressCount,
18
+ };
19
+ };
@@ -0,0 +1 @@
1
+ export declare const useCanCreatePoll: () => boolean;
@@ -0,0 +1,10 @@
1
+ import { useMessageComposer } from './useMessageComposer';
2
+ import { useEffect, useState } from 'react';
3
+ export const useCanCreatePoll = () => {
4
+ const { pollComposer } = useMessageComposer();
5
+ const [canCreatePoll, setCanCreatePoll] = useState(pollComposer.canCreatePoll);
6
+ useEffect(() => pollComposer.state.subscribe(() => {
7
+ setCanCreatePoll(pollComposer.canCreatePoll);
8
+ }), [pollComposer]);
9
+ return canCreatePoll;
10
+ };
@@ -1,8 +1,7 @@
1
- import React from 'react';
2
- import type { DefaultStreamChatGenerics } from '../../../types/types';
1
+ import type React from 'react';
3
2
  export type CooldownTimerState = {
4
3
  cooldownInterval: number;
5
4
  setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;
6
5
  cooldownRemaining?: number;
7
6
  };
8
- export declare const useCooldownTimer: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>() => CooldownTimerState;
7
+ export declare const useCooldownTimer: () => CooldownTimerState;
@@ -1,3 +1,2 @@
1
1
  import type { MessageInputContextValue } from '../../../context/MessageInputContext';
2
- import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
3
- export declare const useCreateMessageInputContext: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(value: MessageInputContextValue<StreamChatGenerics, V>) => MessageInputContextValue<StreamChatGenerics, V>;
2
+ export declare const useCreateMessageInputContext: (value: MessageInputContextValue) => MessageInputContextValue;
@@ -1,97 +1,43 @@
1
1
  import { useMemo } from 'react';
2
2
  export const useCreateMessageInputContext = (value) => {
3
- const { additionalTextareaProps, asyncMessagesMultiSendEnabled, attachments, audioRecordingEnabled, autocompleteTriggers, cancelURLEnrichment, clearEditingState, closeCommandsList, closeMentionsList, cooldownInterval, cooldownRemaining, disabled, disableMentions, dismissLinkPreview, doFileUploadRequest, doImageUploadRequest, emojiSearchIndex, errorHandler, findAndEnqueueURLsToEnrich, focus, grow, handleChange, handleSubmit, hideSendButton, insertText, isThreadInput, isUploadEnabled, linkPreviews, maxFilesLeft, maxRows, mentionAllAppUsers, mentioned_users, mentionQueryParams, message, minRows, noFiles, numberOfUploads, onPaste, onSelectUser, openCommandsList, openMentionsList, overrideSubmitHandler, parent, publishTypingEvent, recordingController, removeAttachments, setCooldownRemaining, setText, shouldSubmit, showCommandsList, showMentionsList, text, textareaRef, uploadAttachment, uploadNewFiles, upsertAttachments, useMentionsTransliteration, } = value;
4
- const editing = message?.editing;
5
- const linkPreviewsValue = Array.from(linkPreviews.values()).join();
6
- const mentionedUsersLength = mentioned_users.length;
3
+ const { additionalTextareaProps, asyncMessagesMultiSendEnabled, audioRecordingEnabled, clearEditingState, cooldownInterval, cooldownRemaining, emojiSearchIndex, focus, grow, handleSubmit, hideSendButton, insertText, isThreadInput, maxRows, minRows, onPaste, parent, recordingController, setCooldownRemaining, shouldSubmit, textareaRef, } = value;
7
4
  const parentId = parent?.id;
8
5
  const messageInputContext = useMemo(() => ({
9
6
  additionalTextareaProps,
10
7
  asyncMessagesMultiSendEnabled,
11
- attachments,
12
8
  audioRecordingEnabled,
13
- autocompleteTriggers,
14
- cancelURLEnrichment,
15
9
  clearEditingState,
16
- closeCommandsList,
17
- closeMentionsList,
18
10
  cooldownInterval,
19
11
  cooldownRemaining,
20
- disabled,
21
- disableMentions,
22
- dismissLinkPreview,
23
- doFileUploadRequest,
24
- doImageUploadRequest,
25
12
  emojiSearchIndex,
26
- errorHandler,
27
- findAndEnqueueURLsToEnrich,
28
13
  focus,
29
14
  grow,
30
- handleChange,
31
15
  handleSubmit,
32
16
  hideSendButton,
33
17
  insertText,
34
18
  isThreadInput,
35
- isUploadEnabled,
36
- linkPreviews,
37
- maxFilesLeft,
38
19
  maxRows,
39
- mentionAllAppUsers,
40
- mentioned_users,
41
- mentionQueryParams,
42
- message,
43
20
  minRows,
44
- noFiles,
45
- numberOfUploads,
46
21
  onPaste,
47
- onSelectUser,
48
- openCommandsList,
49
- openMentionsList,
50
- overrideSubmitHandler,
51
22
  parent,
52
- publishTypingEvent,
53
23
  recordingController,
54
- removeAttachments,
55
24
  setCooldownRemaining,
56
- setText,
57
25
  shouldSubmit,
58
- showCommandsList,
59
- showMentionsList,
60
- text,
61
26
  textareaRef,
62
- uploadAttachment,
63
- uploadNewFiles,
64
- upsertAttachments,
65
- useMentionsTransliteration,
66
27
  }),
67
28
  // eslint-disable-next-line react-hooks/exhaustive-deps
68
29
  [
69
30
  asyncMessagesMultiSendEnabled,
70
- attachments,
71
31
  audioRecordingEnabled,
72
- cancelURLEnrichment,
73
32
  cooldownInterval,
74
33
  cooldownRemaining,
75
- dismissLinkPreview,
76
- editing,
77
34
  emojiSearchIndex,
78
- findAndEnqueueURLsToEnrich,
79
35
  handleSubmit,
80
36
  hideSendButton,
81
- isUploadEnabled,
82
37
  isThreadInput,
83
- linkPreviewsValue,
84
- mentionedUsersLength,
85
38
  minRows,
86
39
  parentId,
87
- publishTypingEvent,
88
40
  recordingController,
89
- removeAttachments,
90
- showCommandsList,
91
- showMentionsList,
92
- text,
93
- uploadAttachment,
94
- upsertAttachments,
95
41
  ]);
96
42
  return messageInputContext;
97
43
  };
@@ -0,0 +1,2 @@
1
+ import { MessageComposer } from 'stream-chat';
2
+ export declare const useMessageComposer: () => MessageComposer;
@@ -0,0 +1,80 @@
1
+ import { useEffect, useMemo } from 'react';
2
+ import { FixedSizeQueueCache, MessageComposer } from 'stream-chat';
3
+ import { useThreadContext } from '../../Threads';
4
+ import { useChannelStateContext, useChatContext, useMessageContext, } from '../../../context';
5
+ import { useLegacyThreadContext } from '../../Thread';
6
+ const queueCache = new FixedSizeQueueCache(64);
7
+ export const useMessageComposer = () => {
8
+ const { client } = useChatContext();
9
+ const { channel } = useChannelStateContext();
10
+ const { editing, message: editedMessage } = useMessageContext();
11
+ // legacy thread will receive new composer
12
+ const { legacyThread: parentMessage } = useLegacyThreadContext();
13
+ const threadInstance = useThreadContext();
14
+ const cachedEditedMessage = useMemo(() => {
15
+ if (!editedMessage)
16
+ return undefined;
17
+ return editedMessage;
18
+ // eslint-disable-next-line react-hooks/exhaustive-deps
19
+ }, [editedMessage?.id]);
20
+ const cachedParentMessage = useMemo(() => {
21
+ if (!parentMessage)
22
+ return undefined;
23
+ return parentMessage;
24
+ // eslint-disable-next-line react-hooks/exhaustive-deps
25
+ }, [parentMessage?.id]);
26
+ // composer hierarchy
27
+ // edited message (always new) -> thread instance (own) -> thread message (always new) -> channel (own)
28
+ // editedMessage ?? thread ?? parentMessage ?? channel;
29
+ const messageComposer = useMemo(() => {
30
+ if (editing && cachedEditedMessage) {
31
+ const tag = MessageComposer.constructTag(cachedEditedMessage);
32
+ const cachedComposer = queueCache.get(tag);
33
+ if (cachedComposer)
34
+ return cachedComposer;
35
+ return new MessageComposer({
36
+ client,
37
+ composition: cachedEditedMessage,
38
+ compositionContext: cachedEditedMessage,
39
+ });
40
+ }
41
+ else if (threadInstance) {
42
+ return threadInstance.messageComposer;
43
+ }
44
+ else if (cachedParentMessage) {
45
+ const compositionContext = {
46
+ ...cachedParentMessage,
47
+ legacyThreadId: cachedParentMessage.id,
48
+ };
49
+ const tag = MessageComposer.constructTag(compositionContext);
50
+ const cachedComposer = queueCache.get(tag);
51
+ if (cachedComposer)
52
+ return cachedComposer;
53
+ return new MessageComposer({
54
+ client,
55
+ compositionContext,
56
+ });
57
+ }
58
+ else {
59
+ return channel.messageComposer;
60
+ }
61
+ }, [
62
+ cachedEditedMessage,
63
+ cachedParentMessage,
64
+ channel,
65
+ client,
66
+ editing,
67
+ threadInstance,
68
+ ]);
69
+ if (['legacy_thread', 'message'].includes(messageComposer.contextType) &&
70
+ !queueCache.peek(messageComposer.tag)) {
71
+ queueCache.add(messageComposer.tag, messageComposer);
72
+ }
73
+ useEffect(() => {
74
+ const unsubscribe = messageComposer.registerSubscriptions();
75
+ return () => {
76
+ unsubscribe();
77
+ };
78
+ }, [messageComposer]);
79
+ return messageComposer;
80
+ };
@@ -0,0 +1 @@
1
+ export declare const useMessageComposerHasSendableData: () => boolean;
@@ -0,0 +1,8 @@
1
+ import { useMessageComposer } from './useMessageComposer';
2
+ import { useStateStore } from '../../../store';
3
+ const editingAuditStateStateSelector = (state) => state;
4
+ export const useMessageComposerHasSendableData = () => {
5
+ const messageComposer = useMessageComposer();
6
+ useStateStore(messageComposer.editingAuditState, editingAuditStateStateSelector);
7
+ return messageComposer.hasSendableData;
8
+ };
@@ -0,0 +1,12 @@
1
+ import type React from 'react';
2
+ import type { RecordingController } from '../../MediaRecorder/hooks/useMediaRecorder';
3
+ import type { UpdatedMessage } from 'stream-chat';
4
+ import type { MessageInputProps } from '../MessageInput';
5
+ export type MessageInputHookProps = {
6
+ handleSubmit: (event?: React.BaseSyntheticEvent, customMessageData?: Omit<UpdatedMessage, 'mentioned_users'>) => void;
7
+ insertText: (textToInsert: string) => void;
8
+ onPaste: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;
9
+ recordingController: RecordingController;
10
+ textareaRef: React.MutableRefObject<HTMLTextAreaElement | null | undefined>;
11
+ };
12
+ export declare const useMessageInputControls: (props: MessageInputProps) => MessageInputHookProps;
@@ -0,0 +1,23 @@
1
+ import { useMessageInputText } from './useMessageInputText';
2
+ import { useSubmitHandler } from './useSubmitHandler';
3
+ import { usePasteHandler } from './usePasteHandler';
4
+ import { useMediaRecorder } from '../../MediaRecorder/hooks/useMediaRecorder';
5
+ export const useMessageInputControls = (props) => {
6
+ const { asyncMessagesMultiSendEnabled, audioRecordingConfig, audioRecordingEnabled } = props;
7
+ const { insertText, textareaRef } = useMessageInputText(props);
8
+ const { handleSubmit } = useSubmitHandler(props);
9
+ const recordingController = useMediaRecorder({
10
+ asyncMessagesMultiSendEnabled,
11
+ enabled: !!audioRecordingEnabled,
12
+ handleSubmit,
13
+ recordingConfig: audioRecordingConfig,
14
+ });
15
+ const { onPaste } = usePasteHandler(insertText);
16
+ return {
17
+ handleSubmit,
18
+ insertText,
19
+ onPaste,
20
+ recordingController,
21
+ textareaRef,
22
+ };
23
+ };
@@ -1,10 +1,6 @@
1
1
  /// <reference types="react" />
2
- import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
3
2
  import type { MessageInputProps } from '../MessageInput';
4
- import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
5
- import type { EnrichURLsController } from './useLinkPreviews';
6
- export declare const useMessageInputText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
7
- handleChange: import("react").ChangeEventHandler<HTMLTextAreaElement>;
3
+ export declare const useMessageInputText: (props: MessageInputProps) => {
8
4
  insertText: (textToInsert: string) => void;
9
5
  textareaRef: import("react").RefObject<HTMLTextAreaElement | undefined>;
10
6
  };
@@ -1,11 +1,14 @@
1
1
  import { useCallback, useEffect, useRef } from 'react';
2
- import { logChatPromiseExecution } from 'stream-chat';
3
- import { useChannelStateContext } from '../../../context/ChannelStateContext';
4
- export const useMessageInputText = (props, state, dispatch, findAndEnqueueURLsToEnrich) => {
5
- const { channel } = useChannelStateContext('useMessageInputText');
6
- const { additionalTextareaProps, focus, parent, publishTypingEvent = true } = props;
7
- const { text } = state;
2
+ import { useMessageComposer } from './useMessageComposer';
3
+ import { useStateStore } from '../../../store';
4
+ const messageComposerStateSelector = (state) => ({
5
+ text: state.text,
6
+ });
7
+ export const useMessageInputText = (props) => {
8
+ const { focus } = props;
9
+ const messageComposer = useMessageComposer();
8
10
  const textareaRef = useRef(undefined);
11
+ const { text } = useStateStore(messageComposer.textComposer.state, messageComposerStateSelector);
9
12
  // Focus
10
13
  useEffect(() => {
11
14
  if (focus && textareaRef.current) {
@@ -15,36 +18,17 @@ export const useMessageInputText = (props, state, dispatch, findAndEnqueueURLsTo
15
18
  // Text + cursor position
16
19
  const newCursorPosition = useRef(undefined);
17
20
  const insertText = useCallback((textToInsert) => {
18
- const { maxLength } = additionalTextareaProps || {};
19
- if (!textareaRef.current) {
20
- return dispatch({
21
- getNewText: (text) => {
22
- const updatedText = text + textToInsert;
23
- if (maxLength && updatedText.length > maxLength) {
24
- return updatedText.slice(0, maxLength);
25
- }
26
- return updatedText;
27
- },
28
- type: 'setText',
29
- });
30
- }
31
- const { selectionEnd, selectionStart } = textareaRef.current;
32
- newCursorPosition.current = selectionStart + textToInsert.length;
33
- dispatch({
34
- getNewText: (prevText) => {
35
- const updatedText = prevText.slice(0, selectionStart) +
36
- textToInsert +
37
- prevText.slice(selectionEnd);
38
- if (maxLength && updatedText.length > maxLength) {
39
- return updatedText.slice(0, maxLength);
40
- }
41
- return updatedText;
42
- },
43
- type: 'setText',
21
+ const selection = textareaRef?.current && {
22
+ end: textareaRef.current.selectionEnd,
23
+ start: textareaRef.current.selectionStart,
24
+ };
25
+ messageComposer.textComposer.insertText({
26
+ selection,
27
+ text: textToInsert,
44
28
  });
45
- },
46
- // eslint-disable-next-line react-hooks/exhaustive-deps
47
- [additionalTextareaProps, newCursorPosition, textareaRef]);
29
+ if (selection)
30
+ newCursorPosition.current = selection.start + textToInsert.length;
31
+ }, [messageComposer, newCursorPosition, textareaRef]);
48
32
  useEffect(() => {
49
33
  const textareaElement = textareaRef.current;
50
34
  if (textareaElement && newCursorPosition.current !== undefined) {
@@ -53,25 +37,7 @@ export const useMessageInputText = (props, state, dispatch, findAndEnqueueURLsTo
53
37
  newCursorPosition.current = undefined;
54
38
  }
55
39
  }, [text, newCursorPosition]);
56
- const handleChange = useCallback((event) => {
57
- event.preventDefault();
58
- if (!event || !event.target) {
59
- return;
60
- }
61
- const newText = event.target.value;
62
- dispatch({
63
- getNewText: () => newText,
64
- type: 'setText',
65
- });
66
- findAndEnqueueURLsToEnrich?.(newText);
67
- if (publishTypingEvent && newText && channel) {
68
- logChatPromiseExecution(channel.keystroke(parent?.id), 'start typing event');
69
- }
70
- },
71
- // eslint-disable-next-line react-hooks/exhaustive-deps
72
- [channel, findAndEnqueueURLsToEnrich, parent, publishTypingEvent]);
73
40
  return {
74
- handleChange,
75
41
  insertText,
76
42
  textareaRef,
77
43
  };
@@ -1,5 +1,3 @@
1
- import { FileLike } from '../../ReactFileUtilities';
2
- import type { EnrichURLsController } from './useLinkPreviews';
3
- export declare const usePasteHandler: (uploadNewFiles: (files: FileList | FileLike[] | File[]) => void, insertText: (textToInsert: string) => void, isUploadEnabled: boolean, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
1
+ export declare const usePasteHandler: (insertText: (textToInsert: string) => void) => {
4
2
  onPaste: (clipboardEvent: React.ClipboardEvent<HTMLTextAreaElement>) => void;
5
3
  };
@@ -1,7 +1,8 @@
1
1
  import { useCallback } from 'react';
2
+ import { useMessageComposer } from './useMessageComposer';
2
3
  import { dataTransferItemsToFiles } from '../../ReactFileUtilities';
3
- import { SetLinkPreviewMode } from '../types';
4
- export const usePasteHandler = (uploadNewFiles, insertText, isUploadEnabled, findAndEnqueueURLsToEnrich) => {
4
+ export const usePasteHandler = (insertText) => {
5
+ const { attachmentManager } = useMessageComposer();
5
6
  const onPaste = useCallback((clipboardEvent) => {
6
7
  (async (event) => {
7
8
  const { items } = event.clipboardData;
@@ -25,14 +26,11 @@ export const usePasteHandler = (uploadNewFiles, insertText, isUploadEnabled, fin
25
26
  if (plainTextPromise) {
26
27
  const pastedText = await plainTextPromise;
27
28
  insertText(pastedText);
28
- findAndEnqueueURLsToEnrich?.(pastedText, SetLinkPreviewMode.UPSERT);
29
- findAndEnqueueURLsToEnrich?.flush();
30
29
  }
31
- else if (fileLikes.length && isUploadEnabled) {
32
- uploadNewFiles(fileLikes);
33
- return;
30
+ else {
31
+ attachmentManager.uploadFiles(fileLikes);
34
32
  }
35
33
  })(clipboardEvent);
36
- }, [findAndEnqueueURLsToEnrich, insertText, isUploadEnabled, uploadNewFiles]);
34
+ }, [attachmentManager, insertText]);
37
35
  return { onPaste };
38
36
  };
@@ -1,8 +1,4 @@
1
- import type { Message } from 'stream-chat';
2
- import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
3
1
  import type { MessageInputProps } from '../MessageInput';
4
- import type { CustomTrigger, DefaultStreamChatGenerics, SendMessageOptions } from '../../../types/types';
5
- import type { EnrichURLsController } from './useLinkPreviews';
6
- export declare const useSubmitHandler: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>, numberOfUploads: number, enrichURLsController: EnrichURLsController) => {
7
- handleSubmit: (event?: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>, options?: SendMessageOptions) => Promise<void>;
2
+ export declare const useSubmitHandler: (props: MessageInputProps) => {
3
+ handleSubmit: (event?: React.BaseSyntheticEvent) => Promise<void>;
8
4
  };
@@ -1,91 +1,22 @@
1
- import { useEffect, useRef } from 'react';
1
+ import { useCallback } from 'react';
2
+ import { useMessageComposer } from './useMessageComposer';
2
3
  import { useChannelActionContext } from '../../../context/ChannelActionContext';
3
- import { useChannelStateContext } from '../../../context/ChannelStateContext';
4
4
  import { useTranslationContext } from '../../../context/TranslationContext';
5
- import { LinkPreviewState } from '../types';
6
- export const useSubmitHandler = (props, state, dispatch, numberOfUploads, enrichURLsController) => {
7
- const { clearEditingState, message, overrideSubmitHandler, parent, publishTypingEvent, } = props;
8
- const { attachments, linkPreviews, mentioned_users, text } = state;
9
- const { cancelURLEnrichment, findAndEnqueueURLsToEnrich } = enrichURLsController;
10
- const { channel } = useChannelStateContext('useSubmitHandler');
5
+ export const useSubmitHandler = (props) => {
6
+ const { clearEditingState, overrideSubmitHandler } = props;
11
7
  const { addNotification, editMessage, sendMessage } = useChannelActionContext('useSubmitHandler');
12
8
  const { t } = useTranslationContext('useSubmitHandler');
13
- const textReference = useRef({ hasChanged: false, initialText: text });
14
- useEffect(() => {
15
- if (!textReference.current.initialText.length) {
16
- textReference.current.initialText = text;
17
- return;
18
- }
19
- textReference.current.hasChanged = text !== textReference.current.initialText;
20
- }, [text]);
21
- const handleSubmit = async (event, customMessageData, options) => {
9
+ const messageComposer = useMessageComposer();
10
+ const handleSubmit = useCallback(async (event) => {
22
11
  event?.preventDefault();
23
- const trimmedMessage = text.trim();
24
- const isEmptyMessage = trimmedMessage === '' ||
25
- trimmedMessage === '>' ||
26
- trimmedMessage === '``````' ||
27
- trimmedMessage === '``' ||
28
- trimmedMessage === '**' ||
29
- trimmedMessage === '____' ||
30
- trimmedMessage === '__' ||
31
- trimmedMessage === '****';
32
- if (isEmptyMessage &&
33
- numberOfUploads === 0 &&
34
- attachments.length === 0 &&
35
- !customMessageData?.poll_id)
12
+ const composition = await messageComposer.compose();
13
+ if (!composition || !composition.message)
36
14
  return;
37
- const someAttachmentsUploading = attachments.some((att) => att.localMetadata?.uploadState === 'uploading');
38
- if (someAttachmentsUploading) {
39
- return addNotification(t('Wait until all attachments have uploaded'), 'error');
40
- }
41
- const attachmentsFromUploads = attachments
42
- .filter((att) => att.localMetadata?.uploadState !== 'failed' ||
43
- (findAndEnqueueURLsToEnrich && !att.og_scrape_url))
44
- .map((localAttachment) => {
45
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
- const { localMetadata: _, ...attachment } = localAttachment;
47
- return attachment;
48
- });
49
- const sendOptions = { ...options };
50
- let attachmentsFromLinkPreviews = [];
51
- if (findAndEnqueueURLsToEnrich) {
52
- // prevent showing link preview in MessageInput after the message has been sent
53
- cancelURLEnrichment();
54
- const someLinkPreviewsLoading = Array.from(linkPreviews.values()).some((linkPreview) => [LinkPreviewState.QUEUED, LinkPreviewState.LOADING].includes(linkPreview.state));
55
- const someLinkPreviewsDismissed = Array.from(linkPreviews.values()).some((linkPreview) => linkPreview.state === LinkPreviewState.DISMISSED);
56
- attachmentsFromLinkPreviews = someLinkPreviewsLoading
57
- ? []
58
- : Array.from(linkPreviews.values())
59
- .filter((linkPreview) => linkPreview.state === LinkPreviewState.LOADED &&
60
- !attachmentsFromUploads.find((attFromUpload) => attFromUpload.og_scrape_url === linkPreview.og_scrape_url))
61
- .map(
62
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
63
- ({ state: linkPreviewState, ...ogAttachment }) => ogAttachment);
64
- // scraped attachments are added only if all enrich queries has completed. Otherwise, the scraping has to be done server-side.
65
- sendOptions.skip_enrich_url =
66
- (!someLinkPreviewsLoading && attachmentsFromLinkPreviews.length > 0) ||
67
- someLinkPreviewsDismissed;
68
- }
69
- const newAttachments = [...attachmentsFromUploads, ...attachmentsFromLinkPreviews];
70
- // Instead of checking if a user is still mentioned every time the text changes,
71
- // just filter out non-mentioned users before submit, which is cheaper
72
- // and allows users to easily undo any accidental deletion
73
- const actualMentionedUsers = Array.from(new Set(mentioned_users.filter(({ id, name }) => text.includes(`@${id}`) || text.includes(`@${name}`))));
74
- const updatedMessage = {
75
- attachments: newAttachments,
76
- mentioned_users: actualMentionedUsers,
77
- text,
78
- };
79
- if (message && message.type !== 'error') {
80
- delete message.i18n;
15
+ const { localMessage, message, sendOptions } = composition;
16
+ if (messageComposer.editedMessage && localMessage.type !== 'error') {
81
17
  try {
82
- await editMessage({
83
- ...message,
84
- ...updatedMessage,
85
- ...customMessageData,
86
- }, sendOptions);
18
+ await editMessage(localMessage, sendOptions);
87
19
  clearEditingState?.();
88
- dispatch({ type: 'clear' });
89
20
  }
90
21
  catch (err) {
91
22
  addNotification(t('Edit message request failed'), 'error');
@@ -93,33 +24,34 @@ export const useSubmitHandler = (props, state, dispatch, numberOfUploads, enrich
93
24
  }
94
25
  else {
95
26
  try {
96
- dispatch({ type: 'clear' });
27
+ // todo: get rid of overrideSubmitHandler once MessageComposer supports submission flow
97
28
  if (overrideSubmitHandler) {
98
29
  await overrideSubmitHandler({
99
- ...updatedMessage,
100
- parent,
101
- }, channel.cid, customMessageData, sendOptions);
30
+ cid: messageComposer.channel.cid,
31
+ localMessage,
32
+ message,
33
+ sendOptions,
34
+ });
102
35
  }
103
36
  else {
104
- await sendMessage({
105
- ...updatedMessage,
106
- parent,
107
- }, customMessageData, sendOptions);
37
+ await sendMessage({ localMessage, message, options: sendOptions });
108
38
  }
109
- if (publishTypingEvent)
110
- await channel.stopTyping();
39
+ messageComposer.clear();
40
+ if (messageComposer.config.text.publishTypingEvents)
41
+ await messageComposer.channel.stopTyping();
111
42
  }
112
43
  catch (err) {
113
- dispatch({
114
- getNewText: () => text,
115
- type: 'setText',
116
- });
117
- actualMentionedUsers?.forEach((user) => {
118
- dispatch({ type: 'addMentionedUser', user });
119
- });
120
44
  addNotification(t('Send message request failed'), 'error');
121
45
  }
122
46
  }
123
- };
47
+ }, [
48
+ addNotification,
49
+ clearEditingState,
50
+ editMessage,
51
+ messageComposer,
52
+ overrideSubmitHandler,
53
+ sendMessage,
54
+ t,
55
+ ]);
124
56
  return { handleSubmit };
125
57
  };