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