stream-chat-react 14.2.0 → 14.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +7 -9
  2. package/dist/cjs/ReactPlayerWrapper.16cd6fed.js +24 -0
  3. package/dist/cjs/ReactPlayerWrapper.16cd6fed.js.map +1 -0
  4. package/dist/cjs/audioProcessing.22303d69.js +148 -0
  5. package/dist/cjs/audioProcessing.22303d69.js.map +1 -0
  6. package/dist/cjs/emojis.js +211 -226
  7. package/dist/cjs/emojis.js.map +1 -1
  8. package/dist/cjs/index.js +26216 -30901
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/mp3-encoder.js +30 -58
  11. package/dist/cjs/mp3-encoder.js.map +1 -1
  12. package/dist/cjs/useNotificationApi.9ffe5761.js +5516 -0
  13. package/dist/cjs/useNotificationApi.9ffe5761.js.map +1 -0
  14. package/dist/css/index.css +13 -0
  15. package/dist/css/index.css.map +1 -1
  16. package/dist/es/ReactPlayerWrapper.d2ae5941.mjs +22 -0
  17. package/dist/es/ReactPlayerWrapper.d2ae5941.mjs.map +1 -0
  18. package/dist/es/audioProcessing.766ca76c.mjs +107 -0
  19. package/dist/es/audioProcessing.766ca76c.mjs.map +1 -0
  20. package/dist/es/emojis.mjs +207 -205
  21. package/dist/es/emojis.mjs.map +1 -1
  22. package/dist/es/index.mjs +25961 -31232
  23. package/dist/es/index.mjs.map +1 -1
  24. package/dist/es/mp3-encoder.mjs +31 -38
  25. package/dist/es/mp3-encoder.mjs.map +1 -1
  26. package/dist/es/useNotificationApi.6fdc3ce7.mjs +4195 -0
  27. package/dist/es/useNotificationApi.6fdc3ce7.mjs.map +1 -0
  28. package/dist/types/a11y/a11yUtils.d.ts.map +1 -1
  29. package/dist/types/a11y/hooks/useAriaIdentifiers.d.ts.map +1 -1
  30. package/dist/types/a11y/hooks/useResolvedModalAriaProps.d.ts.map +1 -1
  31. package/dist/types/components/AIStateIndicator/AIStateIndicator.d.ts.map +1 -1
  32. package/dist/types/components/AIStateIndicator/hooks/useAIState.d.ts.map +1 -1
  33. package/dist/types/components/Accessibility/AriaLiveRegion.d.ts.map +1 -1
  34. package/dist/types/components/Accessibility/NotificationAnnouncer.d.ts.map +1 -1
  35. package/dist/types/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts.map +1 -1
  36. package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts +0 -1
  37. package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts.map +1 -1
  38. package/dist/types/components/Attachment/Attachment.d.ts.map +1 -1
  39. package/dist/types/components/Attachment/AttachmentActions.d.ts +3 -1
  40. package/dist/types/components/Attachment/AttachmentActions.d.ts.map +1 -1
  41. package/dist/types/components/Attachment/AttachmentContainer.d.ts +1 -1
  42. package/dist/types/components/Attachment/AttachmentContainer.d.ts.map +1 -1
  43. package/dist/types/components/Attachment/Audio.d.ts.map +1 -1
  44. package/dist/types/components/Attachment/FileAttachment.d.ts.map +1 -1
  45. package/dist/types/components/Attachment/Geolocation.d.ts.map +1 -1
  46. package/dist/types/components/Attachment/Giphy.d.ts.map +1 -1
  47. package/dist/types/components/Attachment/Image.d.ts.map +1 -1
  48. package/dist/types/components/Attachment/LinkPreview/Card.d.ts +3 -1
  49. package/dist/types/components/Attachment/LinkPreview/Card.d.ts.map +1 -1
  50. package/dist/types/components/Attachment/LinkPreview/CardAudio.d.ts.map +1 -1
  51. package/dist/types/components/Attachment/LinkPreview/UnableToRenderCard.d.ts +1 -1
  52. package/dist/types/components/Attachment/LinkPreview/UnableToRenderCard.d.ts.map +1 -1
  53. package/dist/types/components/Attachment/ModalGallery.d.ts.map +1 -1
  54. package/dist/types/components/Attachment/VideoAttachment.d.ts.map +1 -1
  55. package/dist/types/components/Attachment/VoiceRecording.d.ts.map +1 -1
  56. package/dist/types/components/Attachment/attachment-sizing.d.ts.map +1 -1
  57. package/dist/types/components/Attachment/audioSampling.d.ts.map +1 -1
  58. package/dist/types/components/Attachment/components/DownloadButton.d.ts.map +1 -1
  59. package/dist/types/components/Attachment/components/FileSizeIndicator.d.ts.map +1 -1
  60. package/dist/types/components/Attachment/icons.d.ts.map +1 -1
  61. package/dist/types/components/Attachment/utils.d.ts.map +1 -1
  62. package/dist/types/components/AudioPlayback/AudioPlayer.d.ts +1 -2
  63. package/dist/types/components/AudioPlayback/AudioPlayer.d.ts.map +1 -1
  64. package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts +1 -1
  65. package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts.map +1 -1
  66. package/dist/types/components/AudioPlayback/WithAudioPlayback.d.ts.map +1 -1
  67. package/dist/types/components/AudioPlayback/components/PlaybackRateButton.d.ts.map +1 -1
  68. package/dist/types/components/AudioPlayback/components/ProgressBar.d.ts.map +1 -1
  69. package/dist/types/components/AudioPlayback/components/WaveProgressBar.d.ts.map +1 -1
  70. package/dist/types/components/AudioPlayback/components/formatTime.d.ts +1 -1
  71. package/dist/types/components/AudioPlayback/components/formatTime.d.ts.map +1 -1
  72. package/dist/types/components/AudioPlayback/components/keyboardSeek.d.ts.map +1 -1
  73. package/dist/types/components/AudioPlayback/components/progressBarA11y.d.ts.map +1 -1
  74. package/dist/types/components/AudioPlayback/components/useInteractiveProgressBar.d.ts.map +1 -1
  75. package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts.map +1 -1
  76. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  77. package/dist/types/components/Avatar/ChannelAvatar.d.ts.map +1 -1
  78. package/dist/types/components/Avatar/GroupAvatar.d.ts.map +1 -1
  79. package/dist/types/components/Badge/Badge.d.ts +1 -1
  80. package/dist/types/components/Badge/Badge.d.ts.map +1 -1
  81. package/dist/types/components/Badge/MediaBadge.d.ts.map +1 -1
  82. package/dist/types/components/BaseImage/ImagePlaceholder.d.ts.map +1 -1
  83. package/dist/types/components/BaseImage/toBaseImageDescriptors.d.ts.map +1 -1
  84. package/dist/types/components/Button/PlayButton.d.ts.map +1 -1
  85. package/dist/types/components/Channel/Channel.d.ts +3 -1
  86. package/dist/types/components/Channel/Channel.d.ts.map +1 -1
  87. package/dist/types/components/Channel/channelState.d.ts.map +1 -1
  88. package/dist/types/components/Channel/hooks/useChannelContainerClasses.d.ts +1 -1
  89. package/dist/types/components/Channel/hooks/useChannelContainerClasses.d.ts.map +1 -1
  90. package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts +1 -1
  91. package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  92. package/dist/types/components/Channel/hooks/useCreateTypingContext.d.ts.map +1 -1
  93. package/dist/types/components/Channel/hooks/useEditMessageHandler.d.ts.map +1 -1
  94. package/dist/types/components/Channel/hooks/useIsMounted.d.ts +0 -1
  95. package/dist/types/components/Channel/hooks/useIsMounted.d.ts.map +1 -1
  96. package/dist/types/components/Channel/hooks/useMentionsHandlers.d.ts.map +1 -1
  97. package/dist/types/components/Channel/utils.d.ts +2 -2
  98. package/dist/types/components/Channel/utils.d.ts.map +1 -1
  99. package/dist/types/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
  100. package/dist/types/components/ChannelList/ChannelList.d.ts +3 -1
  101. package/dist/types/components/ChannelList/ChannelList.d.ts.map +1 -1
  102. package/dist/types/components/ChannelList/ChannelListUI.d.ts.map +1 -1
  103. package/dist/types/components/ChannelList/hooks/useChannelListShape.d.ts.map +1 -1
  104. package/dist/types/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts.map +1 -1
  105. package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts +12 -2
  106. package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  107. package/dist/types/components/ChannelList/utils.d.ts +3 -3
  108. package/dist/types/components/ChannelList/utils.d.ts.map +1 -1
  109. package/dist/types/components/ChannelListItem/ChannelListItem.d.ts.map +1 -1
  110. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.defaults.d.ts.map +1 -1
  111. package/dist/types/components/ChannelListItem/ChannelListItemUI.d.ts +3 -1
  112. package/dist/types/components/ChannelListItem/ChannelListItemUI.d.ts.map +1 -1
  113. package/dist/types/components/ChannelListItem/hooks/useChannelDisplayName.d.ts.map +1 -1
  114. package/dist/types/components/ChannelListItem/hooks/useChannelPreviewInfo.d.ts.map +1 -1
  115. package/dist/types/components/ChannelListItem/hooks/useIsChannelMuted.d.ts.map +1 -1
  116. package/dist/types/components/ChannelListItem/hooks/useMessageDeliveryStatus.d.ts.map +1 -1
  117. package/dist/types/components/ChannelListItem/utils.d.ts +2 -2
  118. package/dist/types/components/ChannelListItem/utils.d.ts.map +1 -1
  119. package/dist/types/components/Chat/Chat.d.ts +3 -0
  120. package/dist/types/components/Chat/Chat.d.ts.map +1 -1
  121. package/dist/types/components/Chat/hooks/useChat.d.ts.map +1 -1
  122. package/dist/types/components/Chat/hooks/useCreateChatClient.d.ts.map +1 -1
  123. package/dist/types/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  124. package/dist/types/components/Chat/hooks/useSplitActionSet.d.ts +6 -6
  125. package/dist/types/components/Chat/hooks/useSplitActionSet.d.ts.map +1 -1
  126. package/dist/types/components/ChatView/ChatView.a11y.utility.d.ts.map +1 -1
  127. package/dist/types/components/ChatView/ChatView.d.ts.map +1 -1
  128. package/dist/types/components/DateSeparator/DateSeparator.d.ts +3 -1
  129. package/dist/types/components/DateSeparator/DateSeparator.d.ts.map +1 -1
  130. package/dist/types/components/Dialog/components/Callout.d.ts.map +1 -1
  131. package/dist/types/components/Dialog/components/ContextMenu.d.ts +3 -3
  132. package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
  133. package/dist/types/components/Dialog/components/Prompt.d.ts +1 -1
  134. package/dist/types/components/Dialog/components/Prompt.d.ts.map +1 -1
  135. package/dist/types/components/Dialog/components/Viewer.d.ts +1 -1
  136. package/dist/types/components/Dialog/components/Viewer.d.ts.map +1 -1
  137. package/dist/types/components/Dialog/hooks/useDialog.d.ts +8 -6
  138. package/dist/types/components/Dialog/hooks/useDialog.d.ts.map +1 -1
  139. package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts +5 -6
  140. package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts.map +1 -1
  141. package/dist/types/components/Dialog/service/DialogAnchor.d.ts.map +1 -1
  142. package/dist/types/components/Dialog/service/DialogManager.d.ts +1 -1
  143. package/dist/types/components/Dialog/service/DialogManager.d.ts.map +1 -1
  144. package/dist/types/components/Dialog/service/DialogPortal.d.ts.map +1 -1
  145. package/dist/types/components/DragAndDrop/DragAndDropContainer.d.ts.map +1 -1
  146. package/dist/types/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +3 -1
  147. package/dist/types/components/EmptyStateIndicator/EmptyStateIndicator.d.ts.map +1 -1
  148. package/dist/types/components/EventComponent/EventComponent.d.ts +6 -1
  149. package/dist/types/components/EventComponent/EventComponent.d.ts.map +1 -1
  150. package/dist/types/components/FileIcon/FileIcon.d.ts.map +1 -1
  151. package/dist/types/components/FileIcon/FileIconSet.d.ts.map +1 -1
  152. package/dist/types/components/Form/Dropdown.d.ts.map +1 -1
  153. package/dist/types/components/Form/FieldError.d.ts.map +1 -1
  154. package/dist/types/components/Form/SwitchField.d.ts.map +1 -1
  155. package/dist/types/components/Form/TextInputFieldSet.d.ts.map +1 -1
  156. package/dist/types/components/Gallery/Gallery.d.ts.map +1 -1
  157. package/dist/types/components/Gallery/GalleryContext.d.ts +2 -4
  158. package/dist/types/components/Gallery/GalleryContext.d.ts.map +1 -1
  159. package/dist/types/components/Gallery/GalleryHeader.d.ts.map +1 -1
  160. package/dist/types/components/Icons/BaseIcon.d.ts.map +1 -1
  161. package/dist/types/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  162. package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts.map +1 -1
  163. package/dist/types/components/InfiniteScrollPaginator/hooks/useCursorPaginator.d.ts.map +1 -1
  164. package/dist/types/components/LoadMore/LoadMoreButton.d.ts +3 -1
  165. package/dist/types/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  166. package/dist/types/components/LoadMore/LoadMorePaginator.d.ts +1 -1
  167. package/dist/types/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
  168. package/dist/types/components/Loading/LoadingErrorIndicator.d.ts +6 -1
  169. package/dist/types/components/Loading/LoadingErrorIndicator.d.ts.map +1 -1
  170. package/dist/types/components/Loading/LoadingIndicator.d.ts.map +1 -1
  171. package/dist/types/components/Loading/UploadProgressIndicator.d.ts.map +1 -1
  172. package/dist/types/components/Loading/UploadedSizeIndicator.d.ts.map +1 -1
  173. package/dist/types/components/Loading/progress-indicators.d.ts.map +1 -1
  174. package/dist/types/components/Location/ShareLocationDialog.d.ts.map +1 -1
  175. package/dist/types/components/Location/hooks/useLiveLocationSharingManager.d.ts +1 -1
  176. package/dist/types/components/Location/hooks/useLiveLocationSharingManager.d.ts.map +1 -1
  177. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.d.ts +1 -1
  178. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.d.ts.map +1 -1
  179. package/dist/types/components/MediaRecorder/AudioRecorder/RecordingTimer.d.ts.map +1 -1
  180. package/dist/types/components/MediaRecorder/AudioRecorder/hooks/useTimeElapsed.d.ts.map +1 -1
  181. package/dist/types/components/MediaRecorder/AudioRecorder/recordingStateIdentity.d.ts +3 -3
  182. package/dist/types/components/MediaRecorder/AudioRecorder/recordingStateIdentity.d.ts.map +1 -1
  183. package/dist/types/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts.map +1 -1
  184. package/dist/types/components/MediaRecorder/classes/MediaRecorderController.d.ts +1 -1
  185. package/dist/types/components/MediaRecorder/classes/MediaRecorderController.d.ts.map +1 -1
  186. package/dist/types/components/MediaRecorder/hooks/useMediaRecorder.d.ts.map +1 -1
  187. package/dist/types/components/MediaRecorder/transcode/audioProcessing.d.ts.map +1 -1
  188. package/dist/types/components/MediaRecorder/transcode/index.d.ts.map +1 -1
  189. package/dist/types/components/MediaRecorder/transcode/wav.d.ts.map +1 -1
  190. package/dist/types/components/Message/Message.d.ts.map +1 -1
  191. package/dist/types/components/Message/MessageBubble.d.ts +1 -1
  192. package/dist/types/components/Message/MessageBubble.d.ts.map +1 -1
  193. package/dist/types/components/Message/MessageEditedIndicator.d.ts +3 -1
  194. package/dist/types/components/Message/MessageEditedIndicator.d.ts.map +1 -1
  195. package/dist/types/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
  196. package/dist/types/components/Message/MessageStatus.d.ts +3 -1
  197. package/dist/types/components/Message/MessageStatus.d.ts.map +1 -1
  198. package/dist/types/components/Message/MessageText.d.ts +3 -1
  199. package/dist/types/components/Message/MessageText.d.ts.map +1 -1
  200. package/dist/types/components/Message/MessageTimestamp.d.ts +3 -1
  201. package/dist/types/components/Message/MessageTimestamp.d.ts.map +1 -1
  202. package/dist/types/components/Message/MessageTranslationIndicator.d.ts.map +1 -1
  203. package/dist/types/components/Message/MessageUI.d.ts.map +1 -1
  204. package/dist/types/components/Message/PinIndicator.d.ts.map +1 -1
  205. package/dist/types/components/Message/QuotedMessage.d.ts.map +1 -1
  206. package/dist/types/components/Message/ReminderNotification.d.ts.map +1 -1
  207. package/dist/types/components/Message/StreamedMessageText.d.ts.map +1 -1
  208. package/dist/types/components/Message/emojiRegex.d.ts +15 -0
  209. package/dist/types/components/Message/emojiRegex.d.ts.map +1 -0
  210. package/dist/types/components/Message/hooks/useDeleteHandler.d.ts +1 -1
  211. package/dist/types/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
  212. package/dist/types/components/Message/hooks/useFlagHandler.d.ts.map +1 -1
  213. package/dist/types/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -1
  214. package/dist/types/components/Message/hooks/useMentionsHandler.d.ts.map +1 -1
  215. package/dist/types/components/Message/hooks/useMessageReminder.d.ts.map +1 -1
  216. package/dist/types/components/Message/hooks/useMessageTextStreaming.d.ts.map +1 -1
  217. package/dist/types/components/Message/hooks/useMuteHandler.d.ts.map +1 -1
  218. package/dist/types/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
  219. package/dist/types/components/Message/hooks/usePinHandler.d.ts.map +1 -1
  220. package/dist/types/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  221. package/dist/types/components/Message/hooks/useRetryHandler.d.ts.map +1 -1
  222. package/dist/types/components/Message/hooks/useUserHandler.d.ts +0 -1
  223. package/dist/types/components/Message/hooks/useUserHandler.d.ts.map +1 -1
  224. package/dist/types/components/Message/hooks/useUserRole.d.ts.map +1 -1
  225. package/dist/types/components/Message/renderText/componentRenderers/Anchor.d.ts +1 -1
  226. package/dist/types/components/Message/renderText/componentRenderers/Anchor.d.ts.map +1 -1
  227. package/dist/types/components/Message/renderText/componentRenderers/Emoji.d.ts.map +1 -1
  228. package/dist/types/components/Message/renderText/componentRenderers/Mention.d.ts.map +1 -1
  229. package/dist/types/components/Message/renderText/regex.d.ts.map +1 -1
  230. package/dist/types/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.d.ts +1 -1
  231. package/dist/types/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.d.ts.map +1 -1
  232. package/dist/types/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.d.ts +1 -1
  233. package/dist/types/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.d.ts.map +1 -1
  234. package/dist/types/components/Message/renderText/remarkPlugins/htmlToTextPlugin.d.ts +3 -1
  235. package/dist/types/components/Message/renderText/remarkPlugins/htmlToTextPlugin.d.ts.map +1 -1
  236. package/dist/types/components/Message/renderText/remarkPlugins/imageToLink.d.ts.map +1 -1
  237. package/dist/types/components/Message/renderText/renderText.d.ts +1 -1
  238. package/dist/types/components/Message/renderText/renderText.d.ts.map +1 -1
  239. package/dist/types/components/Message/utils.d.ts +5 -5
  240. package/dist/types/components/Message/utils.d.ts.map +1 -1
  241. package/dist/types/components/MessageActions/DeleteMessageAlert.d.ts.map +1 -1
  242. package/dist/types/components/MessageActions/DownloadSubmenu.d.ts +3 -0
  243. package/dist/types/components/MessageActions/DownloadSubmenu.d.ts.map +1 -0
  244. package/dist/types/components/MessageActions/MessageActions.defaults.d.ts.map +1 -1
  245. package/dist/types/components/MessageActions/QuickMessageActionButton.d.ts +2 -1
  246. package/dist/types/components/MessageActions/QuickMessageActionButton.d.ts.map +1 -1
  247. package/dist/types/components/MessageActions/downloadUtils.d.ts.map +1 -1
  248. package/dist/types/components/MessageActions/hooks/useBaseMessageActionSetFilter.d.ts.map +1 -1
  249. package/dist/types/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.d.ts.map +1 -1
  250. package/dist/types/components/MessageComposer/AttachmentPreviewList/AttachmentUploadedSizeIndicator.d.ts.map +1 -1
  251. package/dist/types/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.d.ts.map +1 -1
  252. package/dist/types/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.d.ts.map +1 -1
  253. package/dist/types/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.d.ts.map +1 -1
  254. package/dist/types/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.d.ts.map +1 -1
  255. package/dist/types/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts.map +1 -1
  256. package/dist/types/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.d.ts.map +1 -1
  257. package/dist/types/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.d.ts.map +1 -1
  258. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts +6 -6
  259. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts.map +1 -1
  260. package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts +1 -1
  261. package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts.map +1 -1
  262. package/dist/types/components/MessageComposer/CommandChip.d.ts.map +1 -1
  263. package/dist/types/components/MessageComposer/EditedMessagePreview.d.ts.map +1 -1
  264. package/dist/types/components/MessageComposer/LinkPreviewList.d.ts.map +1 -1
  265. package/dist/types/components/MessageComposer/MessageComposer.d.ts +3 -1
  266. package/dist/types/components/MessageComposer/MessageComposer.d.ts.map +1 -1
  267. package/dist/types/components/MessageComposer/QuotedMessageIndicator.d.ts.map +1 -1
  268. package/dist/types/components/MessageComposer/QuotedMessagePreview.d.ts.map +1 -1
  269. package/dist/types/components/MessageComposer/RemoveAttachmentPreviewButton.d.ts +1 -1
  270. package/dist/types/components/MessageComposer/RemoveAttachmentPreviewButton.d.ts.map +1 -1
  271. package/dist/types/components/MessageComposer/SendButton.d.ts.map +1 -1
  272. package/dist/types/components/MessageComposer/StopAIGenerationButton.d.ts.map +1 -1
  273. package/dist/types/components/MessageComposer/WithDragAndDropUpload.d.ts.map +1 -1
  274. package/dist/types/components/MessageComposer/hooks/useAttachmentsForPreview.d.ts +7 -7
  275. package/dist/types/components/MessageComposer/hooks/useCreateMessageComposerContext.d.ts.map +1 -1
  276. package/dist/types/components/MessageComposer/hooks/useMessageComposerBindings.d.ts.map +1 -1
  277. package/dist/types/components/MessageComposer/hooks/usePasteHandler.d.ts.map +1 -1
  278. package/dist/types/components/MessageComposer/hooks/useSubmitHandler.d.ts.map +1 -1
  279. package/dist/types/components/MessageComposer/hooks/useTextareaRef.d.ts +0 -1
  280. package/dist/types/components/MessageComposer/hooks/useTextareaRef.d.ts.map +1 -1
  281. package/dist/types/components/MessageComposer/preEditSnapshot.d.ts.map +1 -1
  282. package/dist/types/components/MessageList/CustomNotification.d.ts +3 -1
  283. package/dist/types/components/MessageList/CustomNotification.d.ts.map +1 -1
  284. package/dist/types/components/MessageList/FloatingDateSeparator.d.ts.map +1 -1
  285. package/dist/types/components/MessageList/GiphyPreviewMessage.d.ts.map +1 -1
  286. package/dist/types/components/MessageList/MessageList.d.ts.map +1 -1
  287. package/dist/types/components/MessageList/MessageListMainPanel.d.ts.map +1 -1
  288. package/dist/types/components/MessageList/NewMessageNotification.d.ts +3 -1
  289. package/dist/types/components/MessageList/NewMessageNotification.d.ts.map +1 -1
  290. package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts +3 -1
  291. package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts.map +1 -1
  292. package/dist/types/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
  293. package/dist/types/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -1
  294. package/dist/types/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -2
  295. package/dist/types/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  296. package/dist/types/components/MessageList/hooks/MessageList/scrollInstrumentation.d.ts.map +1 -1
  297. package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +1 -1
  298. package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts.map +1 -1
  299. package/dist/types/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.d.ts.map +1 -1
  300. package/dist/types/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
  301. package/dist/types/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -1
  302. package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
  303. package/dist/types/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -1
  304. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.d.ts.map +1 -1
  305. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts +0 -1
  306. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts.map +1 -1
  307. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts.map +1 -1
  308. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +0 -1
  309. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts.map +1 -1
  310. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts.map +1 -1
  311. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -1
  312. package/dist/types/components/MessageList/hooks/useLastDeliveredData.d.ts.map +1 -1
  313. package/dist/types/components/MessageList/hooks/useLastOwnMessage.d.ts.map +1 -1
  314. package/dist/types/components/MessageList/hooks/useLastReadData.d.ts.map +1 -1
  315. package/dist/types/components/MessageList/hooks/useMarkRead.d.ts.map +1 -1
  316. package/dist/types/components/MessageList/utils.d.ts +0 -1
  317. package/dist/types/components/MessageList/utils.d.ts.map +1 -1
  318. package/dist/types/components/Modal/CloseButtonOnModalOverlay.d.ts +1 -1
  319. package/dist/types/components/Modal/CloseButtonOnModalOverlay.d.ts.map +1 -1
  320. package/dist/types/components/Modal/GlobalModal.d.ts +3 -1
  321. package/dist/types/components/Modal/GlobalModal.d.ts.map +1 -1
  322. package/dist/types/components/Notifications/NotificationConfigurationContext.d.ts +24 -0
  323. package/dist/types/components/Notifications/NotificationConfigurationContext.d.ts.map +1 -0
  324. package/dist/types/components/Notifications/NotificationList.d.ts +58 -1
  325. package/dist/types/components/Notifications/NotificationList.d.ts.map +1 -1
  326. package/dist/types/components/Notifications/hooks/useNotificationApi.d.ts.map +1 -1
  327. package/dist/types/components/Notifications/hooks/useNotifications.d.ts +5 -0
  328. package/dist/types/components/Notifications/hooks/useNotifications.d.ts.map +1 -1
  329. package/dist/types/components/Notifications/hooks/useSystemNotifications.d.ts.map +1 -1
  330. package/dist/types/components/Notifications/index.d.ts +1 -0
  331. package/dist/types/components/Notifications/index.d.ts.map +1 -1
  332. package/dist/types/components/Notifications/notificationTarget.d.ts +3 -3
  333. package/dist/types/components/Notifications/notificationTarget.d.ts.map +1 -1
  334. package/dist/types/components/Poll/Poll.d.ts.map +1 -1
  335. package/dist/types/components/Poll/PollActions/AddCommentPrompt.d.ts.map +1 -1
  336. package/dist/types/components/Poll/PollActions/PollAction.d.ts.map +1 -1
  337. package/dist/types/components/Poll/PollActions/PollActions.d.ts.map +1 -1
  338. package/dist/types/components/Poll/PollActions/PollAnswerList.d.ts.map +1 -1
  339. package/dist/types/components/Poll/PollActions/PollQuestion.d.ts.map +1 -1
  340. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts.map +1 -1
  341. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts.map +1 -1
  342. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesList.d.ts.map +1 -1
  343. package/dist/types/components/Poll/PollCreationDialog/PollCreationDialog.d.ts.map +1 -1
  344. package/dist/types/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts.map +1 -1
  345. package/dist/types/components/Poll/PollHeader.d.ts +1 -1
  346. package/dist/types/components/Poll/PollHeader.d.ts.map +1 -1
  347. package/dist/types/components/Poll/PollOptionList.d.ts.map +1 -1
  348. package/dist/types/components/Poll/PollOptionSelector.d.ts.map +1 -1
  349. package/dist/types/components/Poll/PollVote.d.ts.map +1 -1
  350. package/dist/types/components/Poll/constants.d.ts.map +1 -1
  351. package/dist/types/components/Poll/hooks/usePollAnswerPagination.d.ts.map +1 -1
  352. package/dist/types/components/Poll/hooks/usePollOptionVotesPagination.d.ts.map +1 -1
  353. package/dist/types/components/Portal/Portal.d.ts.map +1 -1
  354. package/dist/types/components/ReactFileUtilities/LoadingIndicator.d.ts.map +1 -1
  355. package/dist/types/components/ReactFileUtilities/utils.d.ts.map +1 -1
  356. package/dist/types/components/Reactions/MessageReactions.d.ts +3 -1
  357. package/dist/types/components/Reactions/MessageReactions.d.ts.map +1 -1
  358. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts.map +1 -1
  359. package/dist/types/components/Reactions/ReactionSelector.d.ts.map +1 -1
  360. package/dist/types/components/Reactions/ReactionSelectorWithButton.d.ts.map +1 -1
  361. package/dist/types/components/Reactions/SpriteImage.d.ts.map +1 -1
  362. package/dist/types/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  363. package/dist/types/components/Reactions/reactionOptions.d.ts +11 -1
  364. package/dist/types/components/Reactions/reactionOptions.d.ts.map +1 -1
  365. package/dist/types/components/Reactions/utils/utils.d.ts.map +1 -1
  366. package/dist/types/components/SafeAnchor/SafeAnchor.d.ts +3 -1
  367. package/dist/types/components/SafeAnchor/SafeAnchor.d.ts.map +1 -1
  368. package/dist/types/components/Search/Search.d.ts.map +1 -1
  369. package/dist/types/components/Search/SearchBar/SearchBar.d.ts.map +1 -1
  370. package/dist/types/components/Search/SearchContext.d.ts.map +1 -1
  371. package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts +1 -1
  372. package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts.map +1 -1
  373. package/dist/types/components/Search/SearchResults/SearchSourceResultList.d.ts.map +1 -1
  374. package/dist/types/components/Search/SearchResults/SearchSourceResults.d.ts.map +1 -1
  375. package/dist/types/components/Search/SearchSourceResultsContext.d.ts.map +1 -1
  376. package/dist/types/components/Search/hooks/useSearchQueriesInProgress.d.ts.map +1 -1
  377. package/dist/types/components/SkipNavigation/SkipNavigation.d.ts.map +1 -1
  378. package/dist/types/components/SummarizedMessagePreview/SummarizedMessagePreview.d.ts.map +1 -1
  379. package/dist/types/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.d.ts.map +1 -1
  380. package/dist/types/components/TextareaComposer/SuggestionList/CommandItem.d.ts.map +1 -1
  381. package/dist/types/components/TextareaComposer/SuggestionList/EmoticonItem.d.ts.map +1 -1
  382. package/dist/types/components/TextareaComposer/SuggestionList/SuggestionList.d.ts.map +1 -1
  383. package/dist/types/components/TextareaComposer/SuggestionList/SuggestionListItem.d.ts.map +1 -1
  384. package/dist/types/components/TextareaComposer/SuggestionList/UserItem.d.ts.map +1 -1
  385. package/dist/types/components/TextareaComposer/TextareaComposer.d.ts.map +1 -1
  386. package/dist/types/components/TextareaComposer/hooks/useTextareaPlaceholder.d.ts.map +1 -1
  387. package/dist/types/components/Thread/Thread.d.ts.map +1 -1
  388. package/dist/types/components/Thread/ThreadHead.d.ts.map +1 -1
  389. package/dist/types/components/Thread/ThreadHeader.d.ts.map +1 -1
  390. package/dist/types/components/Threads/ThreadContext.d.ts.map +1 -1
  391. package/dist/types/components/Threads/ThreadList/ThreadList.d.ts.map +1 -1
  392. package/dist/types/components/Threads/ThreadList/ThreadListItem.d.ts.map +1 -1
  393. package/dist/types/components/Threads/ThreadList/ThreadListItemUI.d.ts.map +1 -1
  394. package/dist/types/components/Threads/UnreadCountBadge.d.ts +1 -1
  395. package/dist/types/components/Threads/UnreadCountBadge.d.ts.map +1 -1
  396. package/dist/types/components/Threads/hooks/useThreadManagerState.d.ts.map +1 -1
  397. package/dist/types/components/Threads/hooks/useThreadState.d.ts.map +1 -1
  398. package/dist/types/components/Tooltip/Tooltip.d.ts +1 -1
  399. package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -1
  400. package/dist/types/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts +1 -1
  401. package/dist/types/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts.map +1 -1
  402. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +8 -1
  403. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  404. package/dist/types/components/TypingIndicator/TypingIndicatorHeader.d.ts.map +1 -1
  405. package/dist/types/components/TypingIndicator/utils/getTypingStatusMessage.d.ts.map +1 -1
  406. package/dist/types/components/UtilityComponents/useStableId.d.ts +7 -3
  407. package/dist/types/components/UtilityComponents/useStableId.d.ts.map +1 -1
  408. package/dist/types/components/VideoPlayer/ReactPlayerWrapper.d.ts +9 -0
  409. package/dist/types/components/VideoPlayer/ReactPlayerWrapper.d.ts.map +1 -0
  410. package/dist/types/components/VideoPlayer/VideoPlayer.d.ts.map +1 -1
  411. package/dist/types/components/VideoPlayer/VideoThumbnail.d.ts.map +1 -1
  412. package/dist/types/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  413. package/dist/types/components/Window/Window.d.ts +3 -1
  414. package/dist/types/components/Window/Window.d.ts.map +1 -1
  415. package/dist/types/context/AttachmentSelectorContext.d.ts.map +1 -1
  416. package/dist/types/context/ChannelActionContext.d.ts.map +1 -1
  417. package/dist/types/context/ChannelListContext.d.ts.map +1 -1
  418. package/dist/types/context/ChannelStateContext.d.ts.map +1 -1
  419. package/dist/types/context/ChatContext.d.ts.map +1 -1
  420. package/dist/types/context/ComponentContext.d.ts +5 -1
  421. package/dist/types/context/ComponentContext.d.ts.map +1 -1
  422. package/dist/types/context/DialogManagerContext.d.ts.map +1 -1
  423. package/dist/types/context/MessageComposerContext.d.ts.map +1 -1
  424. package/dist/types/context/MessageContext.d.ts.map +1 -1
  425. package/dist/types/context/MessageListContext.d.ts.map +1 -1
  426. package/dist/types/context/MessageTranslationViewContext.d.ts.map +1 -1
  427. package/dist/types/context/ModalContext.d.ts.map +1 -1
  428. package/dist/types/context/PollContext.d.ts.map +1 -1
  429. package/dist/types/context/TranslationContext.d.ts.map +1 -1
  430. package/dist/types/context/TypingContext.d.ts.map +1 -1
  431. package/dist/types/context/VirtualizedMessageListContext.d.ts.map +1 -1
  432. package/dist/types/i18n/Streami18n.d.ts +3 -3
  433. package/dist/types/i18n/Streami18n.d.ts.map +1 -1
  434. package/dist/types/i18n/TranslationBuilder/TranslationBuilder.d.ts.map +1 -1
  435. package/dist/types/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts.map +1 -1
  436. package/dist/types/i18n/utils.d.ts +2 -2
  437. package/dist/types/i18n/utils.d.ts.map +1 -1
  438. package/dist/types/plugins/Emojis/EmojiPicker.d.ts.map +1 -1
  439. package/dist/types/plugins/Emojis/middleware/textComposerEmojiMiddleware.d.ts.map +1 -1
  440. package/dist/types/utils/findReverse.d.ts.map +1 -1
  441. package/dist/types/utils/getChannel.d.ts.map +1 -1
  442. package/dist/types/utils/getTextareaCaretRect.d.ts.map +1 -1
  443. package/dist/types/utils/getWholeChar.d.ts.map +1 -1
  444. package/dist/types/utils/mergeDeep.d.ts.map +1 -1
  445. package/dist/types/utils/useStableCallback.d.ts.map +1 -1
  446. package/package.json +85 -67
  447. package/dist/cjs/audioProcessing.56e5db9d.js +0 -123
  448. package/dist/cjs/audioProcessing.56e5db9d.js.map +0 -1
  449. package/dist/cjs/useNotificationApi.f2c7704d.js +0 -4855
  450. package/dist/cjs/useNotificationApi.f2c7704d.js.map +0 -1
  451. package/dist/es/audioProcessing.21cb49e1.mjs +0 -124
  452. package/dist/es/audioProcessing.21cb49e1.mjs.map +0 -1
  453. package/dist/es/useNotificationApi.f91ae46b.mjs +0 -4839
  454. package/dist/es/useNotificationApi.f91ae46b.mjs.map +0 -1
@@ -1,232 +1,217 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- // If the importer is in node compatibility mode or this is not an ESM
18
- // file that has been converted to a CommonJS file using a Babel-
19
- // compatible transform (i.e. "__esModule" has not been set), then set
20
- // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
- const jsxRuntime = require("react/jsx-runtime");
26
- const React = require("react");
27
- const Picker = require("@emoji-mart/react");
28
- const useNotificationApi = require("./useNotificationApi.f2c7704d.js");
29
- const mergeWith = require("lodash.mergewith");
30
- const streamChat = require("stream-chat");
31
- const isShadowRoot = (node) => !!node.host;
32
- const defaultButtonClassName = "str-chat__emoji-picker-button";
33
- const classNames = {
34
- pickerContainerClassName: "str-chat__message-textarea-emoji-picker-container",
35
- wrapperClassName: "str-chat__message-textarea-emoji-picker"
2
+ const require_useNotificationApi = require("./useNotificationApi.9ffe5761.js");
3
+ let react = require("react");
4
+ react = require_useNotificationApi.__toESM(react);
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ let stream_chat = require("stream-chat");
7
+ let lodash_mergewith = require("lodash.mergewith");
8
+ lodash_mergewith = require_useNotificationApi.__toESM(lodash_mergewith);
9
+ let _emoji_mart_react = require("@emoji-mart/react");
10
+ _emoji_mart_react = require_useNotificationApi.__toESM(_emoji_mart_react);
11
+ //#region src/plugins/Emojis/EmojiPicker.tsx
12
+ var Picker = _emoji_mart_react.default.default ?? _emoji_mart_react.default;
13
+ var isShadowRoot = (node) => !!node.host;
14
+ var defaultButtonClassName = "str-chat__emoji-picker-button";
15
+ var classNames = {
16
+ pickerContainerClassName: "str-chat__message-textarea-emoji-picker-container",
17
+ wrapperClassName: "str-chat__message-textarea-emoji-picker"
18
+ };
19
+ var EmojiPicker = (props) => {
20
+ const { t } = require_useNotificationApi.useTranslationContext("EmojiPicker");
21
+ const { textareaRef } = require_useNotificationApi.useMessageComposerContext("EmojiPicker");
22
+ const { textComposer } = require_useNotificationApi.useMessageComposerController();
23
+ const isCooldownActive = require_useNotificationApi.useIsCooldownActive();
24
+ const [displayPicker, setDisplayPicker] = (0, react.useState)(false);
25
+ const [referenceElement, setReferenceElement] = (0, react.useState)(null);
26
+ const [popperElement, setPopperElement] = (0, react.useState)(null);
27
+ const { refs, strategy, x, y } = require_useNotificationApi.usePopoverPosition({
28
+ offset: 8,
29
+ placement: props.placement ?? "top-end"
30
+ });
31
+ (0, react.useEffect)(() => {
32
+ refs.setReference(referenceElement);
33
+ }, [referenceElement, refs]);
34
+ (0, react.useEffect)(() => {
35
+ refs.setFloating(popperElement);
36
+ }, [popperElement, refs]);
37
+ const { pickerContainerClassName, wrapperClassName } = classNames;
38
+ const { ButtonIconComponent = require_useNotificationApi.IconEmoji } = props;
39
+ const pickerStyle = props.pickerProps?.style;
40
+ (0, react.useEffect)(() => {
41
+ if (!popperElement || !referenceElement) return;
42
+ const handlePointerDown = (e) => {
43
+ const target = e.target;
44
+ const rootNode = target.getRootNode();
45
+ if (popperElement.contains(isShadowRoot(rootNode) ? rootNode.host : target) || referenceElement.contains(target)) return;
46
+ setDisplayPicker(false);
47
+ };
48
+ window.addEventListener("pointerdown", handlePointerDown);
49
+ return () => window.removeEventListener("pointerdown", handlePointerDown);
50
+ }, [referenceElement, popperElement]);
51
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
52
+ className: props.wrapperClassName ?? wrapperClassName,
53
+ children: [displayPicker && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
54
+ className: props.pickerContainerClassName ?? pickerContainerClassName,
55
+ ref: setPopperElement,
56
+ style: {
57
+ left: x ?? 0,
58
+ position: strategy,
59
+ top: y ?? 0
60
+ },
61
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Picker, {
62
+ data: async () => (await import("@emoji-mart/data")).default,
63
+ onEmojiSelect: (e) => {
64
+ const textarea = textareaRef.current;
65
+ if (!textarea) return;
66
+ textComposer.insertText({ text: e.native });
67
+ textarea.focus();
68
+ if (props.closeOnEmojiSelect) setDisplayPicker(false);
69
+ },
70
+ ...props.pickerProps,
71
+ style: {
72
+ ...pickerStyle,
73
+ "--shadow": "none"
74
+ }
75
+ })
76
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_useNotificationApi.Button, {
77
+ appearance: "ghost",
78
+ "aria-expanded": displayPicker,
79
+ "aria-label": t("aria/Emoji picker"),
80
+ circular: true,
81
+ className: props.buttonClassName ?? defaultButtonClassName,
82
+ disabled: isCooldownActive,
83
+ onClick: () => setDisplayPicker((cv) => !cv),
84
+ ref: setReferenceElement,
85
+ size: "sm",
86
+ type: "button",
87
+ variant: "secondary",
88
+ children: ButtonIconComponent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonIconComponent, {})
89
+ })]
90
+ });
91
+ };
92
+ //#endregion
93
+ //#region src/plugins/Emojis/middleware/textComposerEmojiMiddleware.ts
94
+ var EmojiSearchSource = class extends stream_chat.BaseSearchSource {
95
+ constructor(emojiSearchIndex, options) {
96
+ super(options);
97
+ this.type = "emoji";
98
+ this.emojiSearchIndex = emojiSearchIndex;
99
+ }
100
+ async query(searchQuery) {
101
+ if (searchQuery.length === 0) return {
102
+ items: [],
103
+ next: null
104
+ };
105
+ return {
106
+ items: (await this.emojiSearchIndex.search(searchQuery) ?? []).filter(Boolean).slice(0, 7).map(({ emoticons = [], id, name, native, skins = [] }) => {
107
+ const [firstSkin] = skins;
108
+ return {
109
+ emoticons,
110
+ id,
111
+ name,
112
+ native: native ?? firstSkin.native
113
+ };
114
+ }),
115
+ next: null
116
+ };
117
+ }
118
+ filterQueryResults(items) {
119
+ return items.map((item) => ({
120
+ ...item,
121
+ ...(0, stream_chat.getTokenizedSuggestionDisplayName)({
122
+ displayName: item.id,
123
+ searchToken: this.searchQuery
124
+ })
125
+ }));
126
+ }
36
127
  };
37
- const EmojiPicker = (props) => {
38
- const { t } = useNotificationApi.useTranslationContext("EmojiPicker");
39
- const { textareaRef } = useNotificationApi.useMessageComposerContext();
40
- const { textComposer } = useNotificationApi.useMessageComposerController();
41
- const isCooldownActive = useNotificationApi.useIsCooldownActive();
42
- const [displayPicker, setDisplayPicker] = React.useState(false);
43
- const [referenceElement, setReferenceElement] = React.useState(
44
- null
45
- );
46
- const [popperElement, setPopperElement] = React.useState(null);
47
- const { refs, strategy, x, y } = useNotificationApi.usePopoverPosition({
48
- offset: 8,
49
- placement: props.placement ?? "top-end"
50
- });
51
- React.useEffect(() => {
52
- refs.setReference(referenceElement);
53
- }, [referenceElement, refs]);
54
- React.useEffect(() => {
55
- refs.setFloating(popperElement);
56
- }, [popperElement, refs]);
57
- const { pickerContainerClassName, wrapperClassName } = classNames;
58
- const { ButtonIconComponent = useNotificationApi.IconEmoji } = props;
59
- const pickerStyle = props.pickerProps?.style;
60
- React.useEffect(() => {
61
- if (!popperElement || !referenceElement) return;
62
- const handlePointerDown = (e) => {
63
- const target = e.target;
64
- const rootNode = target.getRootNode();
65
- if (popperElement.contains(isShadowRoot(rootNode) ? rootNode.host : target) || referenceElement.contains(target)) {
66
- return;
67
- }
68
- setDisplayPicker(false);
69
- };
70
- window.addEventListener("pointerdown", handlePointerDown);
71
- return () => window.removeEventListener("pointerdown", handlePointerDown);
72
- }, [referenceElement, popperElement]);
73
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: props.wrapperClassName ?? wrapperClassName, children: [
74
- displayPicker && /* @__PURE__ */ jsxRuntime.jsx(
75
- "div",
76
- {
77
- className: props.pickerContainerClassName ?? pickerContainerClassName,
78
- ref: setPopperElement,
79
- style: { left: x ?? 0, position: strategy, top: y ?? 0 },
80
- children: /* @__PURE__ */ jsxRuntime.jsx(
81
- Picker,
82
- {
83
- data: async () => (await import("@emoji-mart/data")).default,
84
- onEmojiSelect: (e) => {
85
- const textarea = textareaRef.current;
86
- if (!textarea) return;
87
- textComposer.insertText({ text: e.native });
88
- textarea.focus();
89
- if (props.closeOnEmojiSelect) {
90
- setDisplayPicker(false);
91
- }
92
- },
93
- ...props.pickerProps,
94
- style: { ...pickerStyle, "--shadow": "none" }
95
- }
96
- )
97
- }
98
- ),
99
- /* @__PURE__ */ jsxRuntime.jsx(
100
- useNotificationApi.Button,
101
- {
102
- appearance: "ghost",
103
- "aria-expanded": displayPicker,
104
- "aria-label": t("aria/Emoji picker"),
105
- circular: true,
106
- className: props.buttonClassName ?? defaultButtonClassName,
107
- disabled: isCooldownActive,
108
- onClick: () => setDisplayPicker((cv) => !cv),
109
- ref: setReferenceElement,
110
- size: "sm",
111
- type: "button",
112
- variant: "secondary",
113
- children: ButtonIconComponent && /* @__PURE__ */ jsxRuntime.jsx(ButtonIconComponent, {})
114
- }
115
- )
116
- ] });
128
+ var DEFAULT_OPTIONS = {
129
+ minChars: 1,
130
+ trigger: ":"
117
131
  };
118
- class EmojiSearchSource extends streamChat.BaseSearchSource {
119
- constructor(emojiSearchIndex, options) {
120
- super(options);
121
- this.type = "emoji";
122
- this.emojiSearchIndex = emojiSearchIndex;
123
- }
124
- async query(searchQuery) {
125
- if (searchQuery.length === 0) {
126
- return { items: [], next: null };
127
- }
128
- const emojis = await this.emojiSearchIndex.search(searchQuery) ?? [];
129
- return {
130
- items: emojis.filter(Boolean).slice(0, 7).map(({ emoticons = [], id, name, native, skins = [] }) => {
131
- const [firstSkin] = skins;
132
- return {
133
- emoticons,
134
- id,
135
- name,
136
- native: native ?? firstSkin.native
137
- };
138
- }),
139
- next: null
140
- // todo: generate cursor
141
- };
142
- }
143
- filterQueryResults(items) {
144
- return items.map((item) => ({
145
- ...item,
146
- ...streamChat.getTokenizedSuggestionDisplayName({
147
- displayName: item.id,
148
- searchToken: this.searchQuery
149
- })
150
- }));
151
- }
152
- }
153
- const DEFAULT_OPTIONS = { minChars: 1, trigger: ":" };
154
- const createTextComposerEmojiMiddleware = (emojiSearchIndex, options) => {
155
- const finalOptions = mergeWith(DEFAULT_OPTIONS, options ?? {});
156
- const emojiSearchSource = new EmojiSearchSource(emojiSearchIndex);
157
- emojiSearchSource.activate();
158
- return {
159
- id: "stream-io/emoji-middleware",
160
- // eslint-disable-next-line sort-keys
161
- handlers: {
162
- onChange: async ({ complete, forward, next, state }) => {
163
- if (!state.selection) return forward();
164
- const triggerWithToken = streamChat.getTriggerCharWithToken({
165
- acceptTrailingSpaces: false,
166
- text: state.text.slice(0, state.selection.end),
167
- trigger: finalOptions.trigger
168
- });
169
- const triggerWasRemoved = !triggerWithToken || triggerWithToken.length < finalOptions.minChars;
170
- if (triggerWasRemoved) {
171
- const hasSuggestionsForTrigger = state.suggestions?.trigger === finalOptions.trigger;
172
- const newState = { ...state };
173
- if (hasSuggestionsForTrigger && newState.suggestions) {
174
- delete newState.suggestions;
175
- }
176
- return next(newState);
177
- }
178
- const newSearchTriggerred = triggerWithToken && triggerWithToken === finalOptions.trigger;
179
- if (newSearchTriggerred) {
180
- emojiSearchSource.resetStateAndActivate();
181
- }
182
- const textWithReplacedWord = await streamChat.replaceWordWithEntity({
183
- caretPosition: state.selection.end,
184
- getEntityString: async (word) => {
185
- const { items } = await emojiSearchSource.query(word);
186
- const emoji = items.filter(Boolean).slice(0, 10).find(({ emoticons }) => !!emoticons?.includes(word));
187
- if (!emoji) return null;
188
- const [firstSkin] = emoji.skins ?? [];
189
- return emoji.native ?? firstSkin.native;
190
- },
191
- text: state.text
192
- });
193
- if (textWithReplacedWord !== state.text) {
194
- return complete({
195
- ...state,
196
- suggestions: void 0,
197
- // to prevent the TextComposerMiddlewareExecutor to run the first page query
198
- text: textWithReplacedWord
199
- });
200
- }
201
- return complete({
202
- ...state,
203
- suggestions: {
204
- query: triggerWithToken.slice(1),
205
- searchSource: emojiSearchSource,
206
- trigger: finalOptions.trigger
207
- }
208
- });
209
- },
210
- onSuggestionItemSelect: ({ complete, forward, state }) => {
211
- const { selectedSuggestion } = state.change ?? {};
212
- if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger)
213
- return forward();
214
- emojiSearchSource.resetStateAndActivate();
215
- return complete({
216
- ...state,
217
- ...streamChat.insertItemWithTrigger({
218
- insertText: `${"native" in selectedSuggestion ? selectedSuggestion.native : ""} `,
219
- selection: state.selection,
220
- text: state.text,
221
- trigger: finalOptions.trigger
222
- }),
223
- suggestions: void 0
224
- // Clear suggestions after selection
225
- });
226
- }
227
- }
228
- };
132
+ /**
133
+ * TextComposer middleware for mentions
134
+ * Usage:
135
+ *
136
+ * const textComposer = new TextComposer(options);
137
+ *
138
+ * textComposer.use(new createTextComposerEmojiMiddleware(emojiSearchIndex, {
139
+ * minChars: 2
140
+ * }));
141
+ *
142
+ * @param emojiSearchIndex
143
+ * @param {{
144
+ * minChars: number;
145
+ * trigger: string;
146
+ * }} options
147
+ * @returns
148
+ */
149
+ var createTextComposerEmojiMiddleware = (emojiSearchIndex, options) => {
150
+ const finalOptions = (0, lodash_mergewith.default)(DEFAULT_OPTIONS, options ?? {});
151
+ const emojiSearchSource = new EmojiSearchSource(emojiSearchIndex);
152
+ emojiSearchSource.activate();
153
+ return {
154
+ id: "stream-io/emoji-middleware",
155
+ handlers: {
156
+ onChange: async ({ complete, forward, next, state }) => {
157
+ if (!state.selection) return forward();
158
+ const triggerWithToken = (0, stream_chat.getTriggerCharWithToken)({
159
+ acceptTrailingSpaces: false,
160
+ text: state.text.slice(0, state.selection.end),
161
+ trigger: finalOptions.trigger
162
+ });
163
+ if (!triggerWithToken || triggerWithToken.length < finalOptions.minChars) {
164
+ const hasSuggestionsForTrigger = state.suggestions?.trigger === finalOptions.trigger;
165
+ const newState = { ...state };
166
+ if (hasSuggestionsForTrigger && newState.suggestions) delete newState.suggestions;
167
+ return next(newState);
168
+ }
169
+ if (triggerWithToken && triggerWithToken === finalOptions.trigger) emojiSearchSource.resetStateAndActivate();
170
+ const textWithReplacedWord = await (0, stream_chat.replaceWordWithEntity)({
171
+ caretPosition: state.selection.end,
172
+ getEntityString: async (word) => {
173
+ const { items } = await emojiSearchSource.query(word);
174
+ const emoji = items.filter(Boolean).slice(0, 10).find(({ emoticons }) => !!emoticons?.includes(word));
175
+ if (!emoji) return null;
176
+ const [firstSkin] = emoji.skins ?? [];
177
+ return emoji.native ?? firstSkin.native;
178
+ },
179
+ text: state.text
180
+ });
181
+ if (textWithReplacedWord !== state.text) return complete({
182
+ ...state,
183
+ suggestions: void 0,
184
+ text: textWithReplacedWord
185
+ });
186
+ return complete({
187
+ ...state,
188
+ suggestions: {
189
+ query: triggerWithToken.slice(1),
190
+ searchSource: emojiSearchSource,
191
+ trigger: finalOptions.trigger
192
+ }
193
+ });
194
+ },
195
+ onSuggestionItemSelect: ({ complete, forward, state }) => {
196
+ const { selectedSuggestion } = state.change ?? {};
197
+ if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger) return forward();
198
+ emojiSearchSource.resetStateAndActivate();
199
+ return complete({
200
+ ...state,
201
+ ...(0, stream_chat.insertItemWithTrigger)({
202
+ insertText: `${"native" in selectedSuggestion ? selectedSuggestion.native : ""} `,
203
+ selection: state.selection,
204
+ text: state.text,
205
+ trigger: finalOptions.trigger
206
+ }),
207
+ suggestions: void 0
208
+ });
209
+ }
210
+ }
211
+ };
229
212
  };
213
+ //#endregion
230
214
  exports.EmojiPicker = EmojiPicker;
231
215
  exports.createTextComposerEmojiMiddleware = createTextComposerEmojiMiddleware;
232
- //# sourceMappingURL=emojis.js.map
216
+
217
+ //# sourceMappingURL=emojis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emojis.js","sources":["../../src/plugins/Emojis/EmojiPicker.tsx","../../src/plugins/Emojis/middleware/textComposerEmojiMiddleware.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport Picker from '@emoji-mart/react';\n\nimport { useMessageComposerContext, useTranslationContext } from '../../context';\nimport {\n Button,\n IconEmoji,\n type PopperLikePlacement,\n useMessageComposerController,\n} from '../../components';\nimport { usePopoverPosition } from '../../components/Dialog/hooks/usePopoverPosition';\nimport { useIsCooldownActive } from '../../components/MessageComposer/hooks/useIsCooldownActive';\n\nconst isShadowRoot = (node: Node): node is ShadowRoot => !!(node as ShadowRoot).host;\n\nexport type EmojiPickerProps = {\n ButtonIconComponent?: React.ComponentType;\n buttonClassName?: string;\n pickerContainerClassName?: string;\n wrapperClassName?: string;\n closeOnEmojiSelect?: boolean;\n /**\n * Untyped [properties](https://github.com/missive/emoji-mart/tree/v5.5.2#options--props) to be\n * passed down to the [emoji-mart `Picker`](https://github.com/missive/emoji-mart/tree/v5.5.2#-picker) component\n */\n pickerProps?: Partial<{ theme: 'auto' | 'light' | 'dark' } & Record<string, unknown>>;\n /**\n * Floating UI placement (default: 'top-end') for the picker popover\n */\n placement?: PopperLikePlacement;\n};\n\nconst defaultButtonClassName = 'str-chat__emoji-picker-button';\n\nconst classNames: Pick<\n EmojiPickerProps,\n 'pickerContainerClassName' | 'wrapperClassName'\n> = {\n pickerContainerClassName: 'str-chat__message-textarea-emoji-picker-container',\n wrapperClassName: 'str-chat__message-textarea-emoji-picker',\n};\n\nexport const EmojiPicker = (props: EmojiPickerProps) => {\n const { t } = useTranslationContext('EmojiPicker');\n const { textareaRef } = useMessageComposerContext('EmojiPicker');\n const { textComposer } = useMessageComposerController();\n const isCooldownActive = useIsCooldownActive();\n const [displayPicker, setDisplayPicker] = useState(false);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(\n null,\n );\n const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\n const { refs, strategy, x, y } = usePopoverPosition({\n offset: 8,\n placement: props.placement ?? 'top-end',\n });\n\n useEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n useEffect(() => {\n refs.setFloating(popperElement);\n }, [popperElement, refs]);\n\n const { pickerContainerClassName, wrapperClassName } = classNames;\n\n const { ButtonIconComponent = IconEmoji } = props;\n const pickerStyle = props.pickerProps?.style as React.CSSProperties | undefined;\n\n useEffect(() => {\n if (!popperElement || !referenceElement) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n const target = e.target as HTMLElement;\n\n const rootNode = target.getRootNode();\n\n if (\n popperElement.contains(isShadowRoot(rootNode) ? rootNode.host : target) ||\n referenceElement.contains(target)\n ) {\n return;\n }\n\n setDisplayPicker(false);\n };\n\n window.addEventListener('pointerdown', handlePointerDown);\n return () => window.removeEventListener('pointerdown', handlePointerDown);\n }, [referenceElement, popperElement]);\n\n return (\n <div className={props.wrapperClassName ?? wrapperClassName}>\n {displayPicker && (\n <div\n className={props.pickerContainerClassName ?? pickerContainerClassName}\n ref={setPopperElement}\n style={{ left: x ?? 0, position: strategy, top: y ?? 0 }}\n >\n <Picker\n data={async () => (await import('@emoji-mart/data')).default}\n onEmojiSelect={(e: { native: string }) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n textComposer.insertText({ text: e.native });\n textarea.focus();\n if (props.closeOnEmojiSelect) {\n setDisplayPicker(false);\n }\n }}\n {...props.pickerProps}\n style={{ ...pickerStyle, '--shadow': 'none' }}\n />\n </div>\n )}\n <Button\n appearance='ghost'\n aria-expanded={displayPicker}\n aria-label={t('aria/Emoji picker')}\n circular\n className={props.buttonClassName ?? defaultButtonClassName}\n disabled={isCooldownActive}\n onClick={() => setDisplayPicker((cv) => !cv)}\n ref={setReferenceElement}\n size='sm'\n type='button'\n variant='secondary'\n >\n {ButtonIconComponent && <ButtonIconComponent />}\n </Button>\n </div>\n );\n};\n","import mergeWith from 'lodash.mergewith';\nimport type {\n Middleware,\n SearchSourceOptions,\n SearchSourceType,\n TextComposerMiddlewareExecutorState,\n TextComposerMiddlewareOptions,\n TextComposerSuggestion,\n} from 'stream-chat';\nimport {\n BaseSearchSource,\n getTokenizedSuggestionDisplayName,\n getTriggerCharWithToken,\n insertItemWithTrigger,\n replaceWordWithEntity,\n} from 'stream-chat';\nimport type {\n EmojiSearchIndex,\n EmojiSearchIndexResult,\n} from '../../../components/MessageComposer';\n\nexport type EmojiSuggestion<T extends EmojiSearchIndexResult = EmojiSearchIndexResult> =\n TextComposerSuggestion<T>;\n\nclass EmojiSearchSource<\n T extends TextComposerSuggestion<EmojiSearchIndexResult>,\n> extends BaseSearchSource<T> {\n readonly type: SearchSourceType = 'emoji';\n private emojiSearchIndex: EmojiSearchIndex;\n\n constructor(emojiSearchIndex: EmojiSearchIndex, options?: SearchSourceOptions) {\n super(options);\n this.emojiSearchIndex = emojiSearchIndex;\n }\n\n async query(searchQuery: string) {\n if (searchQuery.length === 0) {\n return { items: [] as T[], next: null };\n }\n const emojis = (await this.emojiSearchIndex.search(searchQuery)) ?? [];\n\n // emojiIndex.search sometimes returns undefined values, so filter those out first\n return {\n items: emojis\n .filter(Boolean)\n .slice(0, 7)\n .map(({ emoticons = [], id, name, native, skins = [] }) => {\n const [firstSkin] = skins;\n\n return {\n emoticons,\n id,\n name,\n native: native ?? firstSkin.native,\n };\n }) as T[],\n next: null, // todo: generate cursor\n };\n }\n\n protected filterQueryResults(items: T[]): T[] | Promise<T[]> {\n return items.map((item) => ({\n ...item,\n ...getTokenizedSuggestionDisplayName({\n displayName: item.id,\n searchToken: this.searchQuery,\n }),\n }));\n }\n}\n\nconst DEFAULT_OPTIONS: TextComposerMiddlewareOptions = { minChars: 1, trigger: ':' };\n\nexport type EmojiMiddleware<T extends EmojiSearchIndexResult = EmojiSearchIndexResult> =\n Middleware<\n TextComposerMiddlewareExecutorState<EmojiSuggestion<T>>,\n 'onChange' | 'onSuggestionItemSelect'\n >;\n\n/**\n * TextComposer middleware for mentions\n * Usage:\n *\n * const textComposer = new TextComposer(options);\n *\n * textComposer.use(new createTextComposerEmojiMiddleware(emojiSearchIndex, {\n * minChars: 2\n * }));\n *\n * @param emojiSearchIndex\n * @param {{\n * minChars: number;\n * trigger: string;\n * }} options\n * @returns\n */\nexport const createTextComposerEmojiMiddleware = (\n emojiSearchIndex: EmojiSearchIndex,\n options?: Partial<TextComposerMiddlewareOptions>,\n): EmojiMiddleware => {\n const finalOptions = mergeWith(DEFAULT_OPTIONS, options ?? {});\n const emojiSearchSource = new EmojiSearchSource(emojiSearchIndex);\n emojiSearchSource.activate();\n\n return {\n id: 'stream-io/emoji-middleware',\n // eslint-disable-next-line sort-keys\n handlers: {\n onChange: async ({ complete, forward, next, state }) => {\n if (!state.selection) return forward();\n\n const triggerWithToken = getTriggerCharWithToken({\n acceptTrailingSpaces: false,\n text: state.text.slice(0, state.selection.end),\n trigger: finalOptions.trigger,\n });\n\n const triggerWasRemoved =\n !triggerWithToken || triggerWithToken.length < finalOptions.minChars;\n\n if (triggerWasRemoved) {\n const hasSuggestionsForTrigger =\n state.suggestions?.trigger === finalOptions.trigger;\n const newState = { ...state };\n if (hasSuggestionsForTrigger && newState.suggestions) {\n delete newState.suggestions;\n }\n return next(newState);\n }\n\n const newSearchTriggerred =\n triggerWithToken && triggerWithToken === finalOptions.trigger;\n\n if (newSearchTriggerred) {\n emojiSearchSource.resetStateAndActivate();\n }\n\n const textWithReplacedWord = await replaceWordWithEntity({\n caretPosition: state.selection.end,\n getEntityString: async (word: string) => {\n const { items } = await emojiSearchSource.query(word);\n\n const emoji = items\n .filter(Boolean)\n .slice(0, 10)\n .find(({ emoticons }) => !!emoticons?.includes(word));\n\n if (!emoji) return null;\n\n const [firstSkin] = emoji.skins ?? [];\n\n return emoji.native ?? firstSkin.native;\n },\n text: state.text,\n });\n\n if (textWithReplacedWord !== state.text) {\n return complete({\n ...state,\n suggestions: undefined, // to prevent the TextComposerMiddlewareExecutor to run the first page query\n text: textWithReplacedWord,\n });\n }\n\n return complete({\n ...state,\n suggestions: {\n query: triggerWithToken.slice(1),\n searchSource: emojiSearchSource,\n trigger: finalOptions.trigger,\n },\n });\n },\n onSuggestionItemSelect: ({ complete, forward, state }) => {\n const { selectedSuggestion } = state.change ?? {};\n if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger)\n return forward();\n\n emojiSearchSource.resetStateAndActivate();\n return complete({\n ...state,\n ...insertItemWithTrigger({\n insertText: `${'native' in selectedSuggestion ? selectedSuggestion.native : ''} `,\n selection: state.selection,\n text: state.text,\n trigger: finalOptions.trigger,\n }),\n suggestions: undefined, // Clear suggestions after selection\n });\n },\n },\n };\n};\n"],"names":["useTranslationContext","useMessageComposerContext","useMessageComposerController","useIsCooldownActive","useState","usePopoverPosition","useEffect","IconEmoji","jsxs","jsx","Button","BaseSearchSource","getTokenizedSuggestionDisplayName","getTriggerCharWithToken","replaceWordWithEntity","insertItemWithTrigger"],"mappings":"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"}
1
+ {"version":3,"file":"emojis.js","names":[],"sources":["../../src/plugins/Emojis/EmojiPicker.tsx","../../src/plugins/Emojis/middleware/textComposerEmojiMiddleware.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport PickerImport from '@emoji-mart/react';\n\nimport { useMessageComposerContext, useTranslationContext } from '../../context';\nimport {\n Button,\n IconEmoji,\n type PopperLikePlacement,\n useMessageComposerController,\n} from '../../components';\nimport { usePopoverPosition } from '../../components/Dialog/hooks/usePopoverPosition';\nimport { useIsCooldownActive } from '../../components/MessageComposer/hooks/useIsCooldownActive';\n\n// @emoji-mart/react ships as CJS with the component on `exports.default`. Under\n// spec-strict ESM interop (e.g. Vite 8 / Rolldown, native Node ESM) a default\n// import yields the module namespace `{ default }` instead of the component,\n// which makes React throw \"Element type is invalid ... got: object\". Unwrap the\n// default defensively so it works regardless of interop.\nconst Picker =\n (PickerImport as unknown as { default?: typeof PickerImport }).default ?? PickerImport;\n\nconst isShadowRoot = (node: Node): node is ShadowRoot => !!(node as ShadowRoot).host;\n\nexport type EmojiPickerProps = {\n ButtonIconComponent?: React.ComponentType;\n buttonClassName?: string;\n pickerContainerClassName?: string;\n wrapperClassName?: string;\n closeOnEmojiSelect?: boolean;\n /**\n * Untyped [properties](https://github.com/missive/emoji-mart/tree/v5.5.2#options--props) to be\n * passed down to the [emoji-mart `Picker`](https://github.com/missive/emoji-mart/tree/v5.5.2#-picker) component\n */\n pickerProps?: Partial<{ theme: 'auto' | 'light' | 'dark' } & Record<string, unknown>>;\n /**\n * Floating UI placement (default: 'top-end') for the picker popover\n */\n placement?: PopperLikePlacement;\n};\n\nconst defaultButtonClassName = 'str-chat__emoji-picker-button';\n\nconst classNames: Pick<\n EmojiPickerProps,\n 'pickerContainerClassName' | 'wrapperClassName'\n> = {\n pickerContainerClassName: 'str-chat__message-textarea-emoji-picker-container',\n wrapperClassName: 'str-chat__message-textarea-emoji-picker',\n};\n\nexport const EmojiPicker = (props: EmojiPickerProps) => {\n const { t } = useTranslationContext('EmojiPicker');\n const { textareaRef } = useMessageComposerContext('EmojiPicker');\n const { textComposer } = useMessageComposerController();\n const isCooldownActive = useIsCooldownActive();\n const [displayPicker, setDisplayPicker] = useState(false);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(\n null,\n );\n const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\n const { refs, strategy, x, y } = usePopoverPosition({\n offset: 8,\n placement: props.placement ?? 'top-end',\n });\n\n useEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n useEffect(() => {\n refs.setFloating(popperElement);\n }, [popperElement, refs]);\n\n const { pickerContainerClassName, wrapperClassName } = classNames;\n\n const { ButtonIconComponent = IconEmoji } = props;\n const pickerStyle = props.pickerProps?.style as React.CSSProperties | undefined;\n\n useEffect(() => {\n if (!popperElement || !referenceElement) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n const target = e.target as HTMLElement;\n\n const rootNode = target.getRootNode();\n\n if (\n popperElement.contains(isShadowRoot(rootNode) ? rootNode.host : target) ||\n referenceElement.contains(target)\n ) {\n return;\n }\n\n setDisplayPicker(false);\n };\n\n window.addEventListener('pointerdown', handlePointerDown);\n return () => window.removeEventListener('pointerdown', handlePointerDown);\n }, [referenceElement, popperElement]);\n\n return (\n <div className={props.wrapperClassName ?? wrapperClassName}>\n {displayPicker && (\n <div\n className={props.pickerContainerClassName ?? pickerContainerClassName}\n ref={setPopperElement}\n style={{ left: x ?? 0, position: strategy, top: y ?? 0 }}\n >\n <Picker\n data={async () => (await import('@emoji-mart/data')).default}\n onEmojiSelect={(e: { native: string }) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n textComposer.insertText({ text: e.native });\n textarea.focus();\n if (props.closeOnEmojiSelect) {\n setDisplayPicker(false);\n }\n }}\n {...props.pickerProps}\n style={{ ...pickerStyle, '--shadow': 'none' }}\n />\n </div>\n )}\n <Button\n appearance='ghost'\n aria-expanded={displayPicker}\n aria-label={t('aria/Emoji picker')}\n circular\n className={props.buttonClassName ?? defaultButtonClassName}\n disabled={isCooldownActive}\n onClick={() => setDisplayPicker((cv) => !cv)}\n ref={setReferenceElement}\n size='sm'\n type='button'\n variant='secondary'\n >\n {ButtonIconComponent && <ButtonIconComponent />}\n </Button>\n </div>\n );\n};\n","import mergeWith from 'lodash.mergewith';\nimport type {\n Middleware,\n SearchSourceOptions,\n SearchSourceType,\n TextComposerMiddlewareExecutorState,\n TextComposerMiddlewareOptions,\n TextComposerSuggestion,\n} from 'stream-chat';\nimport {\n BaseSearchSource,\n getTokenizedSuggestionDisplayName,\n getTriggerCharWithToken,\n insertItemWithTrigger,\n replaceWordWithEntity,\n} from 'stream-chat';\nimport type {\n EmojiSearchIndex,\n EmojiSearchIndexResult,\n} from '../../../components/MessageComposer';\n\nexport type EmojiSuggestion<T extends EmojiSearchIndexResult = EmojiSearchIndexResult> =\n TextComposerSuggestion<T>;\n\nclass EmojiSearchSource<\n T extends TextComposerSuggestion<EmojiSearchIndexResult>,\n> extends BaseSearchSource<T> {\n readonly type: SearchSourceType = 'emoji';\n private emojiSearchIndex: EmojiSearchIndex;\n\n constructor(emojiSearchIndex: EmojiSearchIndex, options?: SearchSourceOptions) {\n super(options);\n this.emojiSearchIndex = emojiSearchIndex;\n }\n\n async query(searchQuery: string) {\n if (searchQuery.length === 0) {\n return { items: [] as T[], next: null };\n }\n const emojis = (await this.emojiSearchIndex.search(searchQuery)) ?? [];\n\n // emojiIndex.search sometimes returns undefined values, so filter those out first\n return {\n items: emojis\n .filter(Boolean)\n .slice(0, 7)\n .map(({ emoticons = [], id, name, native, skins = [] }) => {\n const [firstSkin] = skins;\n\n return {\n emoticons,\n id,\n name,\n native: native ?? firstSkin.native,\n };\n }) as T[],\n next: null, // todo: generate cursor\n };\n }\n\n protected filterQueryResults(items: T[]): T[] | Promise<T[]> {\n return items.map((item) => ({\n ...item,\n ...getTokenizedSuggestionDisplayName({\n displayName: item.id,\n searchToken: this.searchQuery,\n }),\n }));\n }\n}\n\nconst DEFAULT_OPTIONS: TextComposerMiddlewareOptions = { minChars: 1, trigger: ':' };\n\nexport type EmojiMiddleware<T extends EmojiSearchIndexResult = EmojiSearchIndexResult> =\n Middleware<\n TextComposerMiddlewareExecutorState<EmojiSuggestion<T>>,\n 'onChange' | 'onSuggestionItemSelect'\n >;\n\n/**\n * TextComposer middleware for mentions\n * Usage:\n *\n * const textComposer = new TextComposer(options);\n *\n * textComposer.use(new createTextComposerEmojiMiddleware(emojiSearchIndex, {\n * minChars: 2\n * }));\n *\n * @param emojiSearchIndex\n * @param {{\n * minChars: number;\n * trigger: string;\n * }} options\n * @returns\n */\nexport const createTextComposerEmojiMiddleware = (\n emojiSearchIndex: EmojiSearchIndex,\n options?: Partial<TextComposerMiddlewareOptions>,\n): EmojiMiddleware => {\n const finalOptions = mergeWith(DEFAULT_OPTIONS, options ?? {});\n const emojiSearchSource = new EmojiSearchSource(emojiSearchIndex);\n emojiSearchSource.activate();\n\n return {\n id: 'stream-io/emoji-middleware',\n // eslint-disable-next-line sort-keys\n handlers: {\n onChange: async ({ complete, forward, next, state }) => {\n if (!state.selection) return forward();\n\n const triggerWithToken = getTriggerCharWithToken({\n acceptTrailingSpaces: false,\n text: state.text.slice(0, state.selection.end),\n trigger: finalOptions.trigger,\n });\n\n const triggerWasRemoved =\n !triggerWithToken || triggerWithToken.length < finalOptions.minChars;\n\n if (triggerWasRemoved) {\n const hasSuggestionsForTrigger =\n state.suggestions?.trigger === finalOptions.trigger;\n const newState = { ...state };\n if (hasSuggestionsForTrigger && newState.suggestions) {\n delete newState.suggestions;\n }\n return next(newState);\n }\n\n const newSearchTriggerred =\n triggerWithToken && triggerWithToken === finalOptions.trigger;\n\n if (newSearchTriggerred) {\n emojiSearchSource.resetStateAndActivate();\n }\n\n const textWithReplacedWord = await replaceWordWithEntity({\n caretPosition: state.selection.end,\n getEntityString: async (word: string) => {\n const { items } = await emojiSearchSource.query(word);\n\n const emoji = items\n .filter(Boolean)\n .slice(0, 10)\n .find(({ emoticons }) => !!emoticons?.includes(word));\n\n if (!emoji) return null;\n\n const [firstSkin] = emoji.skins ?? [];\n\n return emoji.native ?? firstSkin.native;\n },\n text: state.text,\n });\n\n if (textWithReplacedWord !== state.text) {\n return complete({\n ...state,\n suggestions: undefined, // to prevent the TextComposerMiddlewareExecutor to run the first page query\n text: textWithReplacedWord,\n });\n }\n\n return complete({\n ...state,\n suggestions: {\n query: triggerWithToken.slice(1),\n searchSource: emojiSearchSource,\n trigger: finalOptions.trigger,\n },\n });\n },\n onSuggestionItemSelect: ({ complete, forward, state }) => {\n const { selectedSuggestion } = state.change ?? {};\n if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger)\n return forward();\n\n emojiSearchSource.resetStateAndActivate();\n return complete({\n ...state,\n ...insertItemWithTrigger({\n insertText: `${'native' in selectedSuggestion ? selectedSuggestion.native : ''} `,\n selection: state.selection,\n text: state.text,\n trigger: finalOptions.trigger,\n }),\n suggestions: undefined, // Clear suggestions after selection\n });\n },\n },\n };\n};\n"],"mappings":"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"}