stream-chat-react 12.13.1 → 13.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/README.md +27 -30
  2. package/dist/components/AIStateIndicator/AIStateIndicator.d.ts +4 -5
  3. package/dist/components/AIStateIndicator/hooks/useAIState.d.ts +2 -3
  4. package/dist/components/Attachment/Attachment.d.ts +8 -9
  5. package/dist/components/Attachment/Attachment.js +6 -5
  6. package/dist/components/Attachment/AttachmentActions.d.ts +2 -3
  7. package/dist/components/Attachment/AttachmentContainer.d.ts +15 -15
  8. package/dist/components/Attachment/AttachmentContainer.js +2 -2
  9. package/dist/components/Attachment/Audio.d.ts +3 -4
  10. package/dist/components/Attachment/Card.d.ts +1 -1
  11. package/dist/components/Attachment/FileAttachment.d.ts +3 -4
  12. package/dist/components/Attachment/FileAttachment.js +1 -1
  13. package/dist/components/Attachment/UnsupportedAttachment.d.ts +3 -4
  14. package/dist/components/Attachment/UnsupportedAttachment.js +1 -1
  15. package/dist/components/Attachment/VoiceRecording.d.ts +4 -5
  16. package/dist/components/Attachment/components/FileSizeIndicator.d.ts +1 -1
  17. package/dist/components/Attachment/components/FileSizeIndicator.js +4 -2
  18. package/dist/components/Attachment/utils.d.ts +8 -22
  19. package/dist/components/Attachment/utils.js +3 -18
  20. package/dist/components/Avatar/Avatar.d.ts +3 -4
  21. package/dist/components/Avatar/ChannelAvatar.d.ts +3 -4
  22. package/dist/components/Avatar/ChannelAvatar.js +1 -1
  23. package/dist/components/Avatar/GroupAvatar.d.ts +2 -2
  24. package/dist/components/Channel/Channel.d.ts +18 -37
  25. package/dist/components/Channel/Channel.js +31 -92
  26. package/dist/components/Channel/channelState.d.ts +17 -18
  27. package/dist/components/Channel/hooks/useChannelContainerClasses.d.ts +2 -3
  28. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +2 -3
  29. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +1 -15
  30. package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +1 -2
  31. package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +3 -4
  32. package/dist/components/Channel/hooks/useMentionsHandlers.d.ts +3 -4
  33. package/dist/components/Channel/utils.d.ts +8 -6
  34. package/dist/components/Channel/utils.js +1 -0
  35. package/dist/components/ChannelHeader/ChannelHeader.d.ts +2 -3
  36. package/dist/components/ChannelList/ChannelList.d.ts +31 -30
  37. package/dist/components/ChannelList/ChannelList.js +8 -10
  38. package/dist/components/ChannelList/ChannelListMessenger.d.ts +6 -6
  39. package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts +1 -2
  40. package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts +1 -2
  41. package/dist/components/ChannelList/hooks/useChannelListShape.d.ts +44 -44
  42. package/dist/components/ChannelList/hooks/useChannelListShape.js +0 -2
  43. package/dist/components/ChannelList/hooks/useChannelMembershipState.d.ts +3 -3
  44. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts +1 -2
  45. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts +1 -2
  46. package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts +1 -2
  47. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +1 -2
  48. package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts +1 -2
  49. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +1 -2
  50. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +1 -2
  51. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts +1 -2
  52. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +7 -8
  53. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +3 -3
  54. package/dist/components/ChannelList/hooks/useSelectedChannelState.d.ts +7 -7
  55. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts +1 -2
  56. package/dist/components/ChannelList/utils.d.ts +20 -21
  57. package/dist/components/ChannelList/utils.js +2 -2
  58. package/dist/components/ChannelPreview/ChannelPreview.d.ts +15 -16
  59. package/dist/components/ChannelPreview/ChannelPreview.js +1 -1
  60. package/dist/components/ChannelPreview/ChannelPreviewActionButtons.d.ts +4 -4
  61. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +1 -2
  62. package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts +3 -4
  63. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts +1 -2
  64. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +5 -7
  65. package/dist/components/ChannelPreview/icons.d.ts +1 -1
  66. package/dist/components/ChannelPreview/utils.d.ts +7 -7
  67. package/dist/components/ChannelSearch/ChannelSearch.d.ts +5 -6
  68. package/dist/components/ChannelSearch/ChannelSearch.js +2 -2
  69. package/dist/components/ChannelSearch/SearchBar.d.ts +1 -1
  70. package/dist/components/ChannelSearch/SearchBar.js +1 -1
  71. package/dist/components/ChannelSearch/SearchResults.d.ts +13 -14
  72. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  73. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +17 -18
  74. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +2 -6
  75. package/dist/components/ChannelSearch/utils.d.ts +2 -3
  76. package/dist/components/Chat/Chat.d.ts +9 -9
  77. package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +1 -1
  78. package/dist/components/Chat/hooks/useChat.d.ts +10 -10
  79. package/dist/components/Chat/hooks/useChat.js +4 -3
  80. package/dist/components/Chat/hooks/useCreateChatClient.d.ts +4 -4
  81. package/dist/components/Chat/hooks/useCreateChatContext.d.ts +1 -2
  82. package/dist/components/Dialog/DialogAnchor.d.ts +4 -3
  83. package/dist/components/Dialog/DialogAnchor.js +2 -2
  84. package/dist/components/Dialog/DialogMenu.d.ts +2 -1
  85. package/dist/components/Dialog/DialogPortal.d.ts +2 -1
  86. package/dist/components/Dialog/FormDialog.d.ts +2 -1
  87. package/dist/components/Dialog/FormDialog.js +1 -1
  88. package/dist/components/Dialog/PromptDialog.d.ts +2 -1
  89. package/dist/components/DragAndDrop/DragAndDropContainer.d.ts +2 -1
  90. package/dist/components/EventComponent/EventComponent.d.ts +7 -6
  91. package/dist/components/Form/FieldError.d.ts +2 -1
  92. package/dist/components/Form/SwitchField.d.ts +2 -1
  93. package/dist/components/Form/SwitchField.js +1 -1
  94. package/dist/components/Gallery/Gallery.d.ts +5 -5
  95. package/dist/components/Gallery/Image.d.ts +6 -5
  96. package/dist/components/Gallery/ModalGallery.d.ts +3 -4
  97. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +2 -1
  98. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +2 -1
  99. package/dist/components/LoadMore/LoadMoreButton.d.ts +2 -1
  100. package/dist/components/LoadMore/LoadMorePaginator.d.ts +3 -2
  101. package/dist/components/LoadMore/LoadMorePaginator.js +1 -1
  102. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +3 -2
  103. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +1 -1
  104. package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts +1 -1
  105. package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts +11 -23
  106. package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts +8 -8
  107. package/dist/components/MediaRecorder/hooks/useMediaRecorder.js +6 -4
  108. package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts +2 -2
  109. package/dist/components/MediaRecorder/observable/Observable.d.ts +1 -1
  110. package/dist/components/MediaRecorder/observable/Subject.d.ts +3 -2
  111. package/dist/components/Message/FixedHeightMessage.d.ts +4 -5
  112. package/dist/components/Message/Message.d.ts +1 -2
  113. package/dist/components/Message/MessageBlocked.d.ts +2 -0
  114. package/dist/components/Message/MessageBlocked.js +16 -0
  115. package/dist/components/Message/MessageDeleted.d.ts +4 -5
  116. package/dist/components/Message/MessageEditedTimestamp.d.ts +2 -3
  117. package/dist/components/Message/MessageErrorText.d.ts +4 -5
  118. package/dist/components/Message/MessageErrorText.js +2 -2
  119. package/dist/components/Message/MessageOptions.d.ts +3 -3
  120. package/dist/components/Message/MessageRepliesCountButton.d.ts +2 -1
  121. package/dist/components/Message/MessageSimple.d.ts +1 -2
  122. package/dist/components/Message/MessageSimple.js +14 -12
  123. package/dist/components/Message/MessageStatus.d.ts +3 -4
  124. package/dist/components/Message/MessageText.d.ts +6 -6
  125. package/dist/components/Message/MessageTimestamp.d.ts +4 -5
  126. package/dist/components/Message/QuotedMessage.d.ts +2 -3
  127. package/dist/components/Message/QuotedMessage.js +1 -1
  128. package/dist/components/Message/StreamedMessageText.d.ts +3 -4
  129. package/dist/components/Message/hooks/useActionHandler.d.ts +2 -3
  130. package/dist/components/Message/hooks/useActionHandler.js +1 -1
  131. package/dist/components/Message/hooks/useDeleteHandler.d.ts +4 -5
  132. package/dist/components/Message/hooks/useFlagHandler.d.ts +5 -6
  133. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +5 -6
  134. package/dist/components/Message/hooks/useMentionsHandler.d.ts +6 -8
  135. package/dist/components/Message/hooks/useMessageTextStreaming.d.ts +2 -3
  136. package/dist/components/Message/hooks/useMuteHandler.d.ts +5 -7
  137. package/dist/components/Message/hooks/useMuteHandler.js +1 -1
  138. package/dist/components/Message/hooks/useOpenThreadHandler.d.ts +2 -3
  139. package/dist/components/Message/hooks/usePinHandler.d.ts +4 -5
  140. package/dist/components/Message/hooks/usePinHandler.js +1 -1
  141. package/dist/components/Message/hooks/useReactionHandler.d.ts +3 -4
  142. package/dist/components/Message/hooks/useReactionHandler.js +2 -4
  143. package/dist/components/Message/hooks/useReactionsFetcher.d.ts +5 -7
  144. package/dist/components/Message/hooks/useRetryHandler.d.ts +2 -3
  145. package/dist/components/Message/hooks/useRetryHandler.js +1 -1
  146. package/dist/components/Message/hooks/useUserHandler.d.ts +5 -6
  147. package/dist/components/Message/hooks/useUserRole.d.ts +2 -3
  148. package/dist/components/Message/hooks/useUserRole.js +1 -1
  149. package/dist/components/Message/icons.d.ts +2 -2
  150. package/dist/components/Message/icons.js +1 -1
  151. package/dist/components/Message/renderText/componentRenderers/Anchor.d.ts +2 -1
  152. package/dist/components/Message/renderText/componentRenderers/Emoji.d.ts +1 -1
  153. package/dist/components/Message/renderText/componentRenderers/Mention.d.ts +5 -5
  154. package/dist/components/Message/renderText/componentRenderers/Mention.js +1 -1
  155. package/dist/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.d.ts +1 -2
  156. package/dist/components/Message/renderText/renderText.d.ts +6 -6
  157. package/dist/components/Message/renderText/types.d.ts +1 -1
  158. package/dist/components/Message/types.d.ts +27 -28
  159. package/dist/components/Message/utils.d.ts +21 -21
  160. package/dist/components/Message/utils.js +8 -4
  161. package/dist/components/MessageActions/CustomMessageActionsList.d.ts +6 -7
  162. package/dist/components/MessageActions/MessageActions.d.ts +6 -5
  163. package/dist/components/MessageActions/MessageActions.js +1 -1
  164. package/dist/components/MessageActions/MessageActionsBox.d.ts +5 -5
  165. package/dist/components/MessageActions/MessageActionsBox.js +4 -3
  166. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +1 -1
  167. package/dist/components/MessageBounce/MessageBounceModal.d.ts +4 -3
  168. package/dist/components/MessageBounce/MessageBouncePrompt.d.ts +1 -2
  169. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.d.ts +11 -11
  170. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.js +17 -14
  171. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.d.ts +4 -12
  172. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.js +8 -5
  173. package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.d.ts +4 -5
  174. package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.js +2 -2
  175. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts +7 -5
  176. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.js +5 -2
  177. package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.d.ts +4 -5
  178. package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.js +5 -2
  179. package/dist/components/MessageInput/AttachmentPreviewList/index.d.ts +1 -1
  180. package/dist/components/MessageInput/AttachmentPreviewList/types.d.ts +3 -4
  181. package/dist/components/MessageInput/AttachmentSelector.d.ts +1 -2
  182. package/dist/components/MessageInput/AttachmentSelector.js +5 -3
  183. package/dist/components/MessageInput/EditMessageForm.d.ts +3 -2
  184. package/dist/components/MessageInput/EditMessageForm.js +30 -6
  185. package/dist/components/MessageInput/LinkPreviewList.d.ts +6 -4
  186. package/dist/components/MessageInput/LinkPreviewList.js +24 -10
  187. package/dist/components/MessageInput/MessageInput.d.ts +23 -45
  188. package/dist/components/MessageInput/MessageInput.js +25 -15
  189. package/dist/components/MessageInput/MessageInputFlat.d.ts +1 -2
  190. package/dist/components/MessageInput/MessageInputFlat.js +31 -76
  191. package/dist/components/MessageInput/QuotedMessagePreview.d.ts +4 -7
  192. package/dist/components/MessageInput/QuotedMessagePreview.js +22 -16
  193. package/dist/components/MessageInput/SendButton.d.ts +4 -5
  194. package/dist/components/MessageInput/SendButton.js +6 -2
  195. package/dist/components/MessageInput/WithDragAndDropUpload.d.ts +38 -0
  196. package/dist/components/MessageInput/WithDragAndDropUpload.js +96 -0
  197. package/dist/components/MessageInput/hooks/index.d.ts +5 -1
  198. package/dist/components/MessageInput/hooks/index.js +5 -1
  199. package/dist/components/MessageInput/hooks/useAttachmentManagerState.d.ts +10 -0
  200. package/dist/components/MessageInput/hooks/useAttachmentManagerState.js +19 -0
  201. package/dist/components/MessageInput/hooks/useCanCreatePoll.d.ts +1 -0
  202. package/dist/components/MessageInput/hooks/useCanCreatePoll.js +10 -0
  203. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +2 -3
  204. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +1 -2
  205. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +1 -55
  206. package/dist/components/MessageInput/hooks/useMessageComposer.d.ts +2 -0
  207. package/dist/components/MessageInput/hooks/useMessageComposer.js +80 -0
  208. package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.d.ts +1 -0
  209. package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.js +8 -0
  210. package/dist/components/MessageInput/hooks/useMessageInputControls.d.ts +12 -0
  211. package/dist/components/MessageInput/hooks/useMessageInputControls.js +23 -0
  212. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +1 -5
  213. package/dist/components/MessageInput/hooks/useMessageInputText.js +19 -53
  214. package/dist/components/MessageInput/hooks/usePasteHandler.d.ts +1 -3
  215. package/dist/components/MessageInput/hooks/usePasteHandler.js +6 -8
  216. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -6
  217. package/dist/components/MessageInput/hooks/useSubmitHandler.js +30 -98
  218. package/dist/components/MessageInput/hooks/utils.d.ts +0 -27
  219. package/dist/components/MessageInput/hooks/utils.js +0 -124
  220. package/dist/components/MessageInput/index.d.ts +1 -2
  221. package/dist/components/MessageInput/index.js +1 -2
  222. package/dist/components/MessageList/ConnectionStatus.d.ts +1 -2
  223. package/dist/components/MessageList/ConnectionStatus.js +1 -1
  224. package/dist/components/MessageList/CustomNotification.d.ts +2 -1
  225. package/dist/components/MessageList/GiphyPreviewMessage.d.ts +4 -5
  226. package/dist/components/MessageList/MessageList.d.ts +11 -12
  227. package/dist/components/MessageList/MessageList.js +4 -4
  228. package/dist/components/MessageList/MessageNotification.d.ts +2 -1
  229. package/dist/components/MessageList/VirtualizedMessageList.d.ts +22 -21
  230. package/dist/components/MessageList/VirtualizedMessageList.js +6 -6
  231. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +10 -10
  232. package/dist/components/MessageList/VirtualizedMessageListComponents.js +7 -7
  233. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +8 -10
  234. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.js +1 -1
  235. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +11 -12
  236. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +4 -5
  237. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +5 -6
  238. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts +4 -5
  239. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.js +3 -2
  240. package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts +4 -5
  241. package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.js +1 -1
  242. package/dist/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +2 -3
  243. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts +2 -3
  244. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +6 -2
  245. package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts +4 -5
  246. package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.d.ts +2 -3
  247. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +3 -4
  248. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +5 -6
  249. package/dist/components/MessageList/hooks/useLastReadData.d.ts +5 -6
  250. package/dist/components/MessageList/hooks/useLastReadData.js +5 -1
  251. package/dist/components/MessageList/hooks/useMarkRead.d.ts +1 -2
  252. package/dist/components/MessageList/renderMessages.d.ts +14 -14
  253. package/dist/components/MessageList/renderMessages.js +8 -7
  254. package/dist/components/MessageList/utils.d.ts +34 -28
  255. package/dist/components/MessageList/utils.js +26 -21
  256. package/dist/components/Modal/Modal.d.ts +2 -1
  257. package/dist/components/Poll/Poll.d.ts +2 -3
  258. package/dist/components/Poll/Poll.js +1 -1
  259. package/dist/components/Poll/PollActions/AddCommentForm.d.ts +1 -2
  260. package/dist/components/Poll/PollActions/AddCommentForm.js +4 -2
  261. package/dist/components/Poll/PollActions/EndPollDialog.d.ts +1 -2
  262. package/dist/components/Poll/PollActions/EndPollDialog.js +1 -1
  263. package/dist/components/Poll/PollActions/PollAction.d.ts +2 -1
  264. package/dist/components/Poll/PollActions/PollActions.d.ts +7 -8
  265. package/dist/components/Poll/PollActions/PollActions.js +5 -5
  266. package/dist/components/Poll/PollActions/PollAnswerList.d.ts +1 -2
  267. package/dist/components/Poll/PollActions/PollOptionsFullList.d.ts +1 -2
  268. package/dist/components/Poll/PollActions/PollOptionsFullList.js +4 -2
  269. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.d.ts +3 -4
  270. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.js +1 -1
  271. package/dist/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.d.ts +3 -4
  272. package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts +4 -5
  273. package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.js +1 -1
  274. package/dist/components/Poll/PollActions/PollResults/PollResults.d.ts +1 -2
  275. package/dist/components/Poll/PollActions/PollResults/PollResults.js +1 -1
  276. package/dist/components/Poll/PollActions/SuggestPollOptionForm.d.ts +1 -2
  277. package/dist/components/Poll/PollActions/SuggestPollOptionForm.js +3 -1
  278. package/dist/components/Poll/PollContent.d.ts +1 -2
  279. package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.d.ts +2 -0
  280. package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.js +35 -0
  281. package/dist/components/Poll/PollCreationDialog/NameField.d.ts +2 -0
  282. package/dist/components/Poll/PollCreationDialog/NameField.js +26 -0
  283. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.d.ts +1 -8
  284. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.js +33 -65
  285. package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +31 -85
  286. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts +1 -4
  287. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.js +15 -41
  288. package/dist/components/Poll/PollCreationDialog/types.d.ts +0 -14
  289. package/dist/components/Poll/PollHeader.d.ts +1 -2
  290. package/dist/components/Poll/PollOptionList.d.ts +1 -2
  291. package/dist/components/Poll/PollOptionList.js +4 -2
  292. package/dist/components/Poll/PollOptionSelector.d.ts +3 -4
  293. package/dist/components/Poll/PollVote.d.ts +6 -7
  294. package/dist/components/Poll/PollVote.js +3 -3
  295. package/dist/components/Poll/QuotedPoll.d.ts +1 -2
  296. package/dist/components/Poll/constants.d.ts +0 -1
  297. package/dist/components/Poll/constants.js +0 -1
  298. package/dist/components/Poll/hooks/useManagePollVotesRealtime.d.ts +2 -3
  299. package/dist/components/Poll/hooks/usePollAnswerPagination.d.ts +2 -3
  300. package/dist/components/Poll/hooks/usePollAnswerPagination.js +2 -2
  301. package/dist/components/Poll/hooks/usePollOptionVotesPagination.d.ts +2 -3
  302. package/dist/components/Poll/hooks/usePollOptionVotesPagination.js +1 -1
  303. package/dist/components/Portal/Portal.d.ts +1 -1
  304. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +1 -1
  305. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet.d.ts +2 -1
  306. package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts +1 -1
  307. package/dist/components/ReactFileUtilities/UploadButton.d.ts +3 -2
  308. package/dist/components/ReactFileUtilities/UploadButton.js +16 -6
  309. package/dist/components/ReactFileUtilities/index.d.ts +0 -1
  310. package/dist/components/ReactFileUtilities/index.js +0 -1
  311. package/dist/components/ReactFileUtilities/utils.d.ts +2 -2
  312. package/dist/components/Reactions/ReactionSelector.d.ts +4 -5
  313. package/dist/components/Reactions/ReactionSelectorWithButton.d.ts +1 -2
  314. package/dist/components/Reactions/ReactionsList.d.ts +6 -7
  315. package/dist/components/Reactions/ReactionsList.js +2 -2
  316. package/dist/components/Reactions/ReactionsListModal.d.ts +9 -10
  317. package/dist/components/Reactions/SimpleReactionsList.d.ts +5 -6
  318. package/dist/components/Reactions/StreamEmoji.d.ts +1 -1
  319. package/dist/components/Reactions/hooks/useFetchReactions.d.ts +9 -10
  320. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +1 -2
  321. package/dist/components/Reactions/types.d.ts +3 -4
  322. package/dist/components/Reactions/utils/utils.d.ts +1 -1
  323. package/dist/components/SafeAnchor/SafeAnchor.d.ts +2 -1
  324. package/dist/components/{CommandItem → TextareaComposer/SuggestionList}/CommandItem.d.ts +2 -1
  325. package/dist/components/{CommandItem → TextareaComposer/SuggestionList}/CommandItem.js +1 -2
  326. package/dist/components/{EmoticonItem → TextareaComposer/SuggestionList}/EmoticonItem.d.ts +7 -7
  327. package/dist/components/TextareaComposer/SuggestionList/EmoticonItem.js +12 -0
  328. package/dist/components/TextareaComposer/SuggestionList/SuggestionList.d.ts +16 -0
  329. package/dist/components/TextareaComposer/SuggestionList/SuggestionList.js +49 -0
  330. package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.d.ts +18 -0
  331. package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.js +25 -0
  332. package/dist/components/{UserItem → TextareaComposer/SuggestionList}/UserItem.d.ts +7 -4
  333. package/dist/components/TextareaComposer/SuggestionList/UserItem.js +24 -0
  334. package/dist/components/TextareaComposer/SuggestionList/index.d.ts +5 -0
  335. package/dist/components/TextareaComposer/SuggestionList/index.js +5 -0
  336. package/dist/components/TextareaComposer/TextareaComposer.d.ts +13 -0
  337. package/dist/components/TextareaComposer/TextareaComposer.js +155 -0
  338. package/dist/components/TextareaComposer/index.d.ts +2 -0
  339. package/dist/components/TextareaComposer/index.js +2 -0
  340. package/dist/components/Thread/Thread.d.ts +13 -10
  341. package/dist/components/Thread/Thread.js +23 -12
  342. package/dist/components/Thread/ThreadHead.d.ts +2 -3
  343. package/dist/components/Thread/ThreadHeader.d.ts +5 -6
  344. package/dist/components/Thread/ThreadHeader.js +1 -1
  345. package/dist/components/Threads/ThreadContext.d.ts +2 -2
  346. package/dist/components/Threads/ThreadContext.js +1 -4
  347. package/dist/components/Threads/ThreadList/ThreadList.d.ts +1 -1
  348. package/dist/components/Threads/ThreadList/ThreadListItem.d.ts +1 -1
  349. package/dist/components/Threads/hooks/useThreadManagerState.d.ts +1 -1
  350. package/dist/components/Threads/hooks/useThreadState.d.ts +1 -1
  351. package/dist/components/Threads/icons.d.ts +1 -1
  352. package/dist/components/Tooltip/Tooltip.d.ts +3 -2
  353. package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts +1 -1
  354. package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -2
  355. package/dist/components/Window/Window.d.ts +6 -6
  356. package/dist/components/index.d.ts +1 -5
  357. package/dist/components/index.js +1 -5
  358. package/dist/context/AttachmentSelectorContext.d.ts +2 -1
  359. package/dist/context/ChannelActionContext.d.ts +26 -35
  360. package/dist/context/ChannelListContext.d.ts +9 -9
  361. package/dist/context/ChannelListContext.js +1 -1
  362. package/dist/context/ChannelStateContext.d.ts +24 -34
  363. package/dist/context/ChatContext.d.ts +18 -17
  364. package/dist/context/ComponentContext.d.ts +41 -37
  365. package/dist/context/DialogManagerContext.d.ts +2 -1
  366. package/dist/context/MessageBounceContext.d.ts +8 -7
  367. package/dist/context/MessageBounceContext.js +1 -1
  368. package/dist/context/MessageContext.d.ts +23 -23
  369. package/dist/context/MessageInputContext.d.ts +8 -26
  370. package/dist/context/MessageInputContext.js +3 -2
  371. package/dist/context/MessageListContext.d.ts +2 -1
  372. package/dist/context/PollContext.d.ts +8 -8
  373. package/dist/context/TranslationContext.d.ts +2 -1
  374. package/dist/context/TypingContext.d.ts +11 -10
  375. package/dist/context/VirtualizedMessageListContext.d.ts +2 -1
  376. package/dist/context/WithComponents.d.ts +3 -2
  377. package/dist/css/v2/index.css +1 -1
  378. package/dist/css/v2/index.layout.css +1 -1
  379. package/dist/experimental/MessageActions/MessageActions.d.ts +1 -1
  380. package/dist/experimental/MessageActions/MessageActions.js +1 -1
  381. package/dist/experimental/MessageActions/defaults.js +4 -3
  382. package/dist/experimental/Search/Search.d.ts +1 -2
  383. package/dist/experimental/Search/SearchContext.d.ts +8 -8
  384. package/dist/experimental/Search/SearchResults/SearchResultItem.d.ts +11 -11
  385. package/dist/experimental/Search/SearchResults/SearchResultItem.js +3 -3
  386. package/dist/experimental/Search/SearchResults/SearchResults.d.ts +1 -2
  387. package/dist/experimental/Search/SearchResults/SearchResultsHeader.d.ts +1 -2
  388. package/dist/experimental/Search/SearchResults/SearchResultsHeader.js +1 -1
  389. package/dist/experimental/Search/SearchResults/SearchSourceResultList.d.ts +2 -3
  390. package/dist/experimental/Search/SearchResults/SearchSourceResultListFooter.d.ts +1 -2
  391. package/dist/experimental/Search/SearchResults/SearchSourceResults.d.ts +1 -2
  392. package/dist/experimental/Search/SearchResults/SearchSourceResults.js +1 -1
  393. package/dist/experimental/Search/SearchSourceResultsContext.d.ts +2 -1
  394. package/dist/experimental/Search/hooks/useSearchFocusedMessage.d.ts +1 -2
  395. package/dist/experimental/Search/hooks/useSearchFocusedMessage.js +3 -1
  396. package/dist/experimental/Search/hooks/useSearchQueriesInProgress.d.ts +3 -4
  397. package/dist/experimental/index.browser.cjs +1139 -1075
  398. package/dist/experimental/index.browser.cjs.map +4 -4
  399. package/dist/experimental/index.node.cjs +1139 -1075
  400. package/dist/experimental/index.node.cjs.map +4 -4
  401. package/dist/i18n/Streami18n.d.ts +2 -1
  402. package/dist/i18n/de.json +1 -0
  403. package/dist/i18n/en.json +1 -0
  404. package/dist/i18n/es.json +1 -0
  405. package/dist/i18n/fr.json +1 -0
  406. package/dist/i18n/hi.json +1 -0
  407. package/dist/i18n/it.json +1 -0
  408. package/dist/i18n/ja.json +1 -0
  409. package/dist/i18n/ko.json +1 -0
  410. package/dist/i18n/nl.json +1 -0
  411. package/dist/i18n/pt.json +1 -0
  412. package/dist/i18n/ru.json +1 -0
  413. package/dist/i18n/tr.json +1 -0
  414. package/dist/i18n/types.d.ts +2 -2
  415. package/dist/i18n/utils.d.ts +1 -1
  416. package/dist/i18n/utils.js +3 -1
  417. package/dist/index.browser.cjs +28774 -30813
  418. package/dist/index.browser.cjs.map +4 -4
  419. package/dist/index.node.cjs +30798 -32844
  420. package/dist/index.node.cjs.map +4 -4
  421. package/dist/plugins/Emojis/index.browser.cjs +133 -5
  422. package/dist/plugins/Emojis/index.browser.cjs.map +4 -4
  423. package/dist/plugins/Emojis/index.d.ts +1 -0
  424. package/dist/plugins/Emojis/index.js +1 -0
  425. package/dist/plugins/Emojis/index.node.cjs +135 -6
  426. package/dist/plugins/Emojis/index.node.cjs.map +4 -4
  427. package/dist/plugins/Emojis/middleware/index.d.ts +1 -0
  428. package/dist/plugins/Emojis/middleware/index.js +1 -0
  429. package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.d.ts +66 -0
  430. package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.js +143 -0
  431. package/dist/plugins/encoders/mp3.browser.cjs.map +2 -2
  432. package/dist/plugins/encoders/mp3.node.cjs.map +2 -2
  433. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +14 -0
  434. package/dist/scss/v2/Autocomplete/Autocomplete-theme.scss +11 -0
  435. package/dist/scss/v2/DropzoneContainer/DropzoneContainer-layout.scss +14 -0
  436. package/dist/scss/v2/DropzoneContainer/DropzoneContainer-theme.scss +17 -0
  437. package/dist/scss/v2/LinkPreview/LinkPreview-layout.scss +18 -0
  438. package/dist/scss/v2/LinkPreview/LinkPreview-theme.scss +15 -0
  439. package/dist/scss/v2/Message/Message-layout.scss +8 -0
  440. package/dist/scss/v2/Message/Message-theme.scss +29 -0
  441. package/dist/scss/v2/MessageInput/MessageInput-layout.scss +0 -13
  442. package/dist/scss/v2/MessageInput/MessageInput-theme.scss +8 -19
  443. package/dist/scss/v2/index.layout.scss +2 -1
  444. package/dist/scss/v2/index.scss +1 -0
  445. package/dist/types/defaultDataInterfaces.d.ts +25 -0
  446. package/dist/types/index.d.ts +2 -1
  447. package/dist/types/types.d.ts +2 -62
  448. package/dist/utils/getChannel.d.ts +5 -6
  449. package/dist/utils/mergeDeep.d.ts +2 -3
  450. package/package.json +8 -11
  451. package/dist/components/AutoCompleteTextarea/Item.d.ts +0 -2
  452. package/dist/components/AutoCompleteTextarea/Item.js +0 -10
  453. package/dist/components/AutoCompleteTextarea/List.d.ts +0 -17
  454. package/dist/components/AutoCompleteTextarea/List.js +0 -89
  455. package/dist/components/AutoCompleteTextarea/Textarea.d.ts +0 -114
  456. package/dist/components/AutoCompleteTextarea/Textarea.js +0 -593
  457. package/dist/components/AutoCompleteTextarea/index.d.ts +0 -4
  458. package/dist/components/AutoCompleteTextarea/index.js +0 -4
  459. package/dist/components/AutoCompleteTextarea/types.d.ts +0 -15
  460. package/dist/components/AutoCompleteTextarea/utils.d.ts +0 -6
  461. package/dist/components/AutoCompleteTextarea/utils.js +0 -40
  462. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +0 -78
  463. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +0 -33
  464. package/dist/components/ChatAutoComplete/index.d.ts +0 -1
  465. package/dist/components/ChatAutoComplete/index.js +0 -1
  466. package/dist/components/CommandItem/index.d.ts +0 -1
  467. package/dist/components/CommandItem/index.js +0 -1
  468. package/dist/components/EmoticonItem/EmoticonItem.js +0 -16
  469. package/dist/components/EmoticonItem/index.d.ts +0 -1
  470. package/dist/components/EmoticonItem/index.js +0 -1
  471. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +0 -35
  472. package/dist/components/MessageInput/DefaultTriggerProvider.js +0 -24
  473. package/dist/components/MessageInput/DropzoneProvider.d.ts +0 -4
  474. package/dist/components/MessageInput/DropzoneProvider.js +0 -23
  475. package/dist/components/MessageInput/hooks/useAttachments.d.ts +0 -14
  476. package/dist/components/MessageInput/hooks/useAttachments.js +0 -209
  477. package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts +0 -3
  478. package/dist/components/MessageInput/hooks/useCommandTrigger.js +0 -62
  479. package/dist/components/MessageInput/hooks/useEmojiTrigger.d.ts +0 -3
  480. package/dist/components/MessageInput/hooks/useEmojiTrigger.js +0 -29
  481. package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts +0 -30
  482. package/dist/components/MessageInput/hooks/useLinkPreviews.js +0 -109
  483. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +0 -71
  484. package/dist/components/MessageInput/hooks/useMessageInputState.js +0 -200
  485. package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +0 -12
  486. package/dist/components/MessageInput/hooks/useUserTrigger.js +0 -130
  487. package/dist/components/MessageInput/types.d.ts +0 -87
  488. package/dist/components/MessageInput/types.js +0 -19
  489. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +0 -16
  490. package/dist/components/ReactFileUtilities/ImageDropzone.js +0 -42
  491. package/dist/components/UserItem/UserItem.js +0 -26
  492. package/dist/components/UserItem/index.d.ts +0 -1
  493. package/dist/components/UserItem/index.js +0 -1
  494. /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.d.ts +0 -0
  495. /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.js +0 -0
  496. /package/dist/scss/v2/DragAndDropContainer/{DragAmdDropContainer-layout.scss → DragAndDropContainer-layout.scss} +0 -0
  497. /package/dist/{components/AutoCompleteTextarea/types.js → types/defaultDataInterfaces.js} +0 -0
@@ -0,0 +1,96 @@
1
+ import React, { useCallback, useContext, useEffect, useMemo, useRef } from 'react';
2
+ import { useDropzone } from 'react-dropzone';
3
+ import clsx from 'clsx';
4
+ import { useMessageInputContext, useTranslationContext } from '../../context';
5
+ import { useAttachmentManagerState, useMessageComposer } from './hooks';
6
+ import { useStateStore } from '../../store';
7
+ const DragAndDropUploadContext = React.createContext({
8
+ subscribeToDrop: null,
9
+ });
10
+ export const useDragAndDropUploadContext = () => useContext(DragAndDropUploadContext);
11
+ /**
12
+ * @private This hook should be used only once directly in the `MessageInputProvider` to
13
+ * register `uploadNewFiles` functions of the rendered `MessageInputs`. Each `MessageInput`
14
+ * will then be notified when the drop event occurs from within the `WithDragAndDropUpload`
15
+ * component.
16
+ */
17
+ export const useRegisterDropHandlers = () => {
18
+ const { subscribeToDrop } = useDragAndDropUploadContext();
19
+ const messageComposer = useMessageComposer();
20
+ useEffect(() => {
21
+ const unsubscribe = subscribeToDrop?.(messageComposer.attachmentManager.uploadFiles);
22
+ return unsubscribe;
23
+ }, [subscribeToDrop, messageComposer]);
24
+ };
25
+ const attachmentManagerConfigStateSelector = (state) => ({
26
+ acceptedFiles: state.attachments.acceptedFiles,
27
+ multipleUploads: state.attachments.maxNumberOfFilesPerMessage > 1,
28
+ });
29
+ /**
30
+ * Wrapper to replace now deprecated `Channel.dragAndDropWindow` option.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * <Channel>
35
+ * <WithDragAndDropUpload component="section" className="message-list-dnd-wrapper">
36
+ * <Window>
37
+ * <MessageList />
38
+ * <MessageInput />
39
+ * </Window>
40
+ * </WithDragAndDropUpload>
41
+ * <Thread />
42
+ * <Channel>
43
+ * ```
44
+ */
45
+ export const WithDragAndDropUpload = ({ children, className, component: Component = 'div', style, }) => {
46
+ const dropHandlersRef = useRef(new Set());
47
+ const { t } = useTranslationContext();
48
+ const messageInputContext = useMessageInputContext();
49
+ const dragAndDropUploadContext = useDragAndDropUploadContext();
50
+ const messageComposer = useMessageComposer();
51
+ const { isUploadEnabled } = useAttachmentManagerState();
52
+ const { acceptedFiles, multipleUploads } = useStateStore(messageComposer.configState, attachmentManagerConfigStateSelector);
53
+ // if message input context is available, there's no need to use the queue
54
+ const isWithinMessageInputContext = Object.keys(messageInputContext).length > 0;
55
+ const accept = useMemo(() => acceptedFiles.reduce((mediaTypeMap, mediaType) => {
56
+ mediaTypeMap[mediaType] ?? (mediaTypeMap[mediaType] = []);
57
+ return mediaTypeMap;
58
+ }, {}), [acceptedFiles]);
59
+ const subscribeToDrop = useCallback((fn) => {
60
+ dropHandlersRef.current.add(fn);
61
+ return () => {
62
+ dropHandlersRef.current.delete(fn);
63
+ };
64
+ }, []);
65
+ const handleDrop = useCallback((files) => {
66
+ dropHandlersRef.current.forEach((fn) => fn(files));
67
+ }, []);
68
+ const { getRootProps, isDragActive, isDragReject } = useDropzone({
69
+ accept,
70
+ // apply `disabled` rules if available, otherwise allow anything and
71
+ // let the `uploadNewFiles` handle the limitations internally
72
+ disabled: isWithinMessageInputContext
73
+ ? !isUploadEnabled || (messageInputContext.cooldownRemaining ?? 0) > 0
74
+ : false,
75
+ multiple: multipleUploads,
76
+ noClick: true,
77
+ onDrop: isWithinMessageInputContext
78
+ ? messageComposer.attachmentManager.uploadFiles
79
+ : handleDrop,
80
+ });
81
+ // nested WithDragAndDropUpload components render wrappers without functionality
82
+ // (MessageInputFlat has a default WithDragAndDropUpload)
83
+ if (dragAndDropUploadContext.subscribeToDrop !== null) {
84
+ return React.createElement(Component, { className: className }, children);
85
+ }
86
+ return (React.createElement(DragAndDropUploadContext.Provider, { value: {
87
+ subscribeToDrop,
88
+ } },
89
+ React.createElement(Component, { ...getRootProps({ className, style }) },
90
+ isDragActive && (React.createElement("div", { className: clsx('str-chat__dropzone-container', {
91
+ 'str-chat__dropzone-container--not-accepted': isDragReject,
92
+ }) },
93
+ !isDragReject && React.createElement("p", null, t('Drag your files here')),
94
+ isDragReject && React.createElement("p", null, t('Some of the files will not be accepted')))),
95
+ children)));
96
+ };
@@ -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';
@@ -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
  };