stream-chat-react 12.9.0 → 12.11.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 (207) hide show
  1. package/dist/components/Attachment/Attachment.js +2 -1
  2. package/dist/components/Attachment/AttachmentContainer.d.ts +1 -1
  3. package/dist/components/Attachment/AttachmentContainer.js +2 -2
  4. package/dist/components/Attachment/Card.js +3 -3
  5. package/dist/components/Attachment/VoiceRecording.d.ts +1 -1
  6. package/dist/components/Attachment/VoiceRecording.js +2 -2
  7. package/dist/components/Attachment/attachment-sizing.js +2 -1
  8. package/dist/components/Attachment/components/FileSizeIndicator.d.ts +1 -1
  9. package/dist/components/Attachment/components/FileSizeIndicator.js +1 -1
  10. package/dist/components/Attachment/components/WaveProgressBar.js +1 -1
  11. package/dist/components/Attachment/hooks/useAudioController.d.ts +1 -1
  12. package/dist/components/Attachment/hooks/useAudioController.js +4 -2
  13. package/dist/components/Attachment/utils.d.ts +1 -1
  14. package/dist/components/Attachment/utils.js +12 -3
  15. package/dist/components/AutoCompleteTextarea/List.js +3 -2
  16. package/dist/components/AutoCompleteTextarea/Textarea.js +3 -7
  17. package/dist/components/AutoCompleteTextarea/utils.js +3 -7
  18. package/dist/components/Avatar/ChannelAvatar.js +1 -1
  19. package/dist/components/Channel/Channel.d.ts +1 -1
  20. package/dist/components/Channel/Channel.js +30 -14
  21. package/dist/components/Channel/channelState.d.ts +1 -3
  22. package/dist/components/Channel/channelState.js +10 -4
  23. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +5 -3
  24. package/dist/components/Channel/hooks/useIsMounted.d.ts +1 -1
  25. package/dist/components/Channel/hooks/useMentionsHandlers.js +5 -2
  26. package/dist/components/Channel/utils.js +2 -1
  27. package/dist/components/ChannelHeader/ChannelHeader.js +1 -1
  28. package/dist/components/ChannelList/ChannelList.js +13 -8
  29. package/dist/components/ChannelList/hooks/useChannelListShape.d.ts +2 -2
  30. package/dist/components/ChannelList/hooks/useChannelListShape.js +46 -19
  31. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +2 -1
  32. package/dist/components/ChannelList/hooks/useMessageNewListener.js +3 -1
  33. package/dist/components/ChannelList/hooks/useMobileNavigation.d.ts +1 -1
  34. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +5 -3
  35. package/dist/components/ChannelList/hooks/useSelectedChannelState.js +1 -1
  36. package/dist/components/ChannelPreview/ChannelPreview.js +2 -2
  37. package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +1 -1
  38. package/dist/components/ChannelPreview/icons.js +0 -1
  39. package/dist/components/ChannelPreview/utils.js +3 -3
  40. package/dist/components/ChannelSearch/ChannelSearch.js +5 -3
  41. package/dist/components/ChannelSearch/SearchBar.d.ts +1 -1
  42. package/dist/components/ChannelSearch/SearchInput.d.ts +1 -1
  43. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  44. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +4 -2
  45. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +61 -36
  46. package/dist/components/ChannelSearch/index.d.ts +1 -1
  47. package/dist/components/Chat/hooks/useChat.js +4 -2
  48. package/dist/components/Chat/hooks/useCreateChatClient.js +3 -1
  49. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +1 -1
  50. package/dist/components/ChatView/ChatView.js +0 -1
  51. package/dist/components/Dialog/PromptDialog.d.ts +1 -1
  52. package/dist/components/Dialog/PromptDialog.js +1 -1
  53. package/dist/components/EventComponent/EventComponent.js +1 -1
  54. package/dist/components/Gallery/BaseImage.d.ts +1 -3
  55. package/dist/components/Gallery/Gallery.js +10 -2
  56. package/dist/components/Gallery/Image.js +1 -1
  57. package/dist/components/Gallery/ModalGallery.js +4 -4
  58. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +9 -6
  59. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.js +1 -1
  60. package/dist/components/LoadMore/LoadMorePaginator.js +1 -1
  61. package/dist/components/MML/MML.js +1 -0
  62. package/dist/components/MediaRecorder/transcode/wav.js +6 -3
  63. package/dist/components/Message/FixedHeightMessage.js +6 -8
  64. package/dist/components/Message/Message.js +2 -1
  65. package/dist/components/Message/MessageEditedTimestamp.js +1 -1
  66. package/dist/components/Message/MessageSimple.js +2 -5
  67. package/dist/components/Message/MessageStatus.js +1 -1
  68. package/dist/components/Message/MessageText.js +7 -7
  69. package/dist/components/Message/QuotedMessage.js +2 -2
  70. package/dist/components/Message/Timestamp.js +9 -1
  71. package/dist/components/Message/hooks/useActionHandler.js +1 -1
  72. package/dist/components/Message/hooks/useFlagHandler.js +2 -1
  73. package/dist/components/Message/hooks/useMarkUnreadHandler.js +2 -1
  74. package/dist/components/Message/hooks/useMessageTextStreaming.d.ts +1 -1
  75. package/dist/components/Message/hooks/useMessageTextStreaming.js +1 -1
  76. package/dist/components/Message/hooks/useMuteHandler.js +7 -4
  77. package/dist/components/Message/hooks/usePinHandler.js +1 -1
  78. package/dist/components/Message/hooks/useReactionHandler.js +10 -5
  79. package/dist/components/Message/hooks/useRetryHandler.js +1 -1
  80. package/dist/components/Message/hooks/useUserRole.js +1 -1
  81. package/dist/components/Message/renderText/renderText.js +2 -2
  82. package/dist/components/Message/utils.js +3 -3
  83. package/dist/components/MessageActions/MessageActionsBox.js +7 -3
  84. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +1 -1
  85. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.js +1 -1
  86. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.js +4 -2
  87. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.js +4 -2
  88. package/dist/components/MessageInput/AttachmentSelector.js +1 -1
  89. package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -1
  90. package/dist/components/MessageInput/DropzoneProvider.js +1 -1
  91. package/dist/components/MessageInput/MessageInput.js +1 -1
  92. package/dist/components/MessageInput/MessageInputFlat.js +4 -3
  93. package/dist/components/MessageInput/QuotedMessagePreview.js +1 -1
  94. package/dist/components/MessageInput/hooks/useAttachments.js +12 -4
  95. package/dist/components/MessageInput/hooks/useLinkPreviews.js +3 -1
  96. package/dist/components/MessageInput/hooks/useMessageInputState.js +4 -3
  97. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +1 -1
  98. package/dist/components/MessageInput/hooks/useMessageInputText.js +5 -3
  99. package/dist/components/MessageInput/hooks/useSubmitHandler.js +5 -3
  100. package/dist/components/MessageInput/hooks/useTimeElapsed.js +1 -1
  101. package/dist/components/MessageInput/hooks/useUserTrigger.js +2 -2
  102. package/dist/components/MessageInput/hooks/utils.js +6 -2
  103. package/dist/components/MessageList/ConnectionStatus.js +1 -1
  104. package/dist/components/MessageList/MessageList.js +5 -6
  105. package/dist/components/MessageList/MessageListNotifications.js +3 -1
  106. package/dist/components/MessageList/VirtualizedMessageList.d.ts +1 -1
  107. package/dist/components/MessageList/VirtualizedMessageList.js +19 -12
  108. package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
  109. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +1 -3
  110. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.js +3 -2
  111. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.js +3 -2
  112. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +6 -2
  113. package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.js +1 -1
  114. package/dist/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +1 -1
  115. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +4 -3
  116. package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.js +1 -1
  117. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +7 -3
  118. package/dist/components/MessageList/hooks/useMarkRead.d.ts +2 -4
  119. package/dist/components/MessageList/hooks/useMarkRead.js +14 -16
  120. package/dist/components/MessageList/utils.js +28 -11
  121. package/dist/components/Modal/Modal.d.ts +1 -1
  122. package/dist/components/Modal/Modal.js +1 -1
  123. package/dist/components/Modal/ModalHeader.js +1 -1
  124. package/dist/components/Poll/Poll.js +1 -1
  125. package/dist/components/Poll/PollActions/PollActions.js +6 -4
  126. package/dist/components/Poll/PollActions/PollAnswerList.js +1 -1
  127. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.js +1 -1
  128. package/dist/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.js +4 -2
  129. package/dist/components/Poll/PollActions/PollResults/PollResults.js +2 -1
  130. package/dist/components/Poll/PollContent.js +1 -1
  131. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.d.ts +1 -1
  132. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.js +11 -4
  133. package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +13 -4
  134. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.js +6 -3
  135. package/dist/components/Poll/PollOptionList.js +1 -1
  136. package/dist/components/Poll/PollOptionSelector.js +12 -5
  137. package/dist/components/Poll/hooks/useManagePollVotesRealtime.js +9 -4
  138. package/dist/components/Poll/hooks/usePollAnswerPagination.js +8 -2
  139. package/dist/components/Poll/hooks/usePollOptionVotesPagination.js +8 -2
  140. package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts +1 -1
  141. package/dist/components/ReactFileUtilities/ImageDropzone.js +3 -1
  142. package/dist/components/ReactFileUtilities/UploadButton.js +1 -1
  143. package/dist/components/ReactFileUtilities/utils.js +3 -1
  144. package/dist/components/Reactions/ReactionSelector.js +3 -1
  145. package/dist/components/Reactions/ReactionSelectorWithButton.js +1 -1
  146. package/dist/components/Reactions/ReactionsList.d.ts +2 -2
  147. package/dist/components/Reactions/ReactionsList.js +7 -4
  148. package/dist/components/Reactions/ReactionsListModal.d.ts +1 -2
  149. package/dist/components/Reactions/ReactionsListModal.js +1 -1
  150. package/dist/components/Reactions/SpriteImage.js +6 -2
  151. package/dist/components/Reactions/hooks/useFetchReactions.js +1 -1
  152. package/dist/components/Reactions/hooks/useProcessReactions.js +1 -1
  153. package/dist/components/Reactions/index.d.ts +1 -0
  154. package/dist/components/Reactions/index.js +1 -0
  155. package/dist/components/Reactions/reactionOptions.js +20 -5
  156. package/dist/components/Thread/Thread.js +4 -3
  157. package/dist/components/Threads/ThreadContext.d.ts +1 -1
  158. package/dist/components/Threads/ThreadContext.js +1 -1
  159. package/dist/components/Threads/ThreadList/ThreadList.js +1 -1
  160. package/dist/components/Threads/ThreadList/ThreadListItem.d.ts +1 -1
  161. package/dist/components/Threads/ThreadList/ThreadListItem.js +1 -1
  162. package/dist/components/Threads/ThreadList/ThreadListItemUI.js +5 -3
  163. package/dist/components/Threads/icons.js +0 -1
  164. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  165. package/dist/components/Tooltip/Tooltip.js +1 -1
  166. package/dist/context/ComponentContext.d.ts +3 -1
  167. package/dist/context/ComponentContext.js +1 -1
  168. package/dist/context/DialogManagerContext.d.ts +1 -1
  169. package/dist/context/DialogManagerContext.js +1 -1
  170. package/dist/context/MessageBounceContext.js +2 -2
  171. package/dist/context/MessageContext.js +1 -1
  172. package/dist/context/VirtualizedMessageListContext.d.ts +13 -0
  173. package/dist/context/VirtualizedMessageListContext.js +7 -0
  174. package/dist/context/WithComponents.js +1 -1
  175. package/dist/css/v2/index.css +2 -2
  176. package/dist/css/v2/index.layout.css +2 -2
  177. package/dist/experimental/MessageActions/MessageActions.js +0 -1
  178. package/dist/experimental/MessageActions/defaults.js +31 -7
  179. package/dist/experimental/index.browser.cjs +103 -37
  180. package/dist/experimental/index.browser.cjs.map +2 -2
  181. package/dist/experimental/index.node.cjs +103 -37
  182. package/dist/experimental/index.node.cjs.map +2 -2
  183. package/dist/i18n/Streami18n.js +11 -2
  184. package/dist/i18n/utils.js +14 -1
  185. package/dist/index.browser.cjs +2329 -1145
  186. package/dist/index.browser.cjs.map +4 -4
  187. package/dist/index.node.cjs +2594 -1164
  188. package/dist/index.node.cjs.map +4 -4
  189. package/dist/plugins/Emojis/EmojiPicker.js +0 -1
  190. package/dist/plugins/Emojis/index.browser.cjs +3 -1
  191. package/dist/plugins/Emojis/index.browser.cjs.map +2 -2
  192. package/dist/plugins/Emojis/index.node.cjs +3 -1
  193. package/dist/plugins/Emojis/index.node.cjs.map +2 -2
  194. package/dist/plugins/encoders/mp3.browser.cjs +7 -4
  195. package/dist/plugins/encoders/mp3.browser.cjs.map +2 -2
  196. package/dist/plugins/encoders/mp3.node.cjs +7 -4
  197. package/dist/plugins/encoders/mp3.node.cjs.map +2 -2
  198. package/dist/scss/v2/ChannelSearch/ChannelSearch-layout.scss +1 -0
  199. package/dist/scss/v2/Message/Message-layout.scss +12 -5
  200. package/dist/scss/v2/Poll/Poll-layout.scss +1 -1
  201. package/dist/scss/v2/Search/Search-layout.scss +148 -0
  202. package/dist/scss/v2/Search/Search-theme.scss +222 -0
  203. package/dist/scss/v2/_icons.scss +2 -0
  204. package/dist/scss/v2/index.layout.scss +1 -0
  205. package/dist/scss/v2/index.scss +1 -0
  206. package/dist/store/hooks/useStateStore.js +35 -11
  207. package/package.json +32 -47
@@ -14,7 +14,7 @@ export const FileInput = UploadButton;
14
14
  export const UploadFileInput = forwardRef(function UploadFileInput({ className, onFileChange: onFileChangeCustom, ...props }, ref) {
15
15
  const { t } = useTranslationContext('UploadFileInput');
16
16
  const { acceptedFiles = [], multipleUploads } = useChannelStateContext('UploadFileInput');
17
- const { isUploadEnabled, maxFilesLeft, uploadNewFiles, } = useMessageInputContext('UploadFileInput');
17
+ const { isUploadEnabled, maxFilesLeft, uploadNewFiles } = useMessageInputContext('UploadFileInput');
18
18
  const id = useMemo(() => nanoid(), []);
19
19
  const onFileChange = useCallback((files) => {
20
20
  uploadNewFiles(files);
@@ -74,7 +74,9 @@ async function getImageSource(fileLikes, src) {
74
74
  fileLikes.push(blob);
75
75
  }
76
76
  const extractImageSources = (s) => {
77
- const imageTags = new DOMParser().parseFromString(s, 'text/html').getElementsByTagName('img');
77
+ const imageTags = new DOMParser()
78
+ .parseFromString(s, 'text/html')
79
+ .getElementsByTagName('img');
78
80
  return Array.from(imageTags, (tag) => tag.src).filter((tag) => tag);
79
81
  };
80
82
  export const isBlobButNotFile = (obj) => obj instanceof Blob && !(obj instanceof File);
@@ -36,7 +36,9 @@ const UnMemoizedReactionSelector = (props) => {
36
36
  return;
37
37
  const tooltip = tooltipRef.current?.getBoundingClientRect();
38
38
  const target = targetRef.current?.getBoundingClientRect();
39
- const container = isMutableRef(rootRef) ? rootRef.current?.getBoundingClientRect() : null;
39
+ const container = isMutableRef(rootRef)
40
+ ? rootRef.current?.getBoundingClientRect()
41
+ : null;
40
42
  if (!tooltip || !target || !container)
41
43
  return;
42
44
  const tooltipPosition = tooltip.width === container.width || tooltip.x < container.x
@@ -1,7 +1,7 @@
1
1
  import React, { useRef } from 'react';
2
2
  import { ReactionSelector as DefaultReactionSelector } from './ReactionSelector';
3
3
  import { DialogAnchor, useDialog, useDialogIsOpen } from '../Dialog';
4
- import { useComponentContext, useMessageContext, useTranslationContext } from '../../context';
4
+ import { useComponentContext, useMessageContext, useTranslationContext, } from '../../context';
5
5
  /**
6
6
  * Internal convenience component - not to be exported. It just groups the button and the dialog anchor and thus prevents
7
7
  * cluttering the parent component.
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
+ import { MessageContextValue } from '../../context';
2
3
  import type { ReactionGroupResponse, ReactionResponse } from 'stream-chat';
3
4
  import type { DefaultStreamChatGenerics } from '../../types/types';
4
5
  import type { ReactionOptions } from './reactionOptions';
5
6
  import type { ReactionDetailsComparator, ReactionsComparator } from './types';
6
- import { MessageContextValue } from '../../context';
7
7
  export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions' | 'reactionDetailsSort'>> & {
8
8
  /** An array of the own reaction objects to distinguish own reactions visually */
9
9
  own_reactions?: ReactionResponse<StreamChatGenerics>[];
@@ -26,7 +26,7 @@ export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGener
26
26
  /** Comparator function to sort the list of reacted users
27
27
  * @deprecated use `reactionDetailsSort` instead
28
28
  */
29
- sortReactionDetails?: ReactionDetailsComparator;
29
+ sortReactionDetails?: ReactionDetailsComparator<StreamChatGenerics>;
30
30
  /** Comparator function to sort reactions, defaults to chronological order */
31
31
  sortReactions?: ReactionsComparator;
32
32
  };
@@ -1,14 +1,17 @@
1
1
  import React, { useState } from 'react';
2
2
  import clsx from 'clsx';
3
+ import { ReactionsListModal as DefaultReactionsListModal, } from './ReactionsListModal';
3
4
  import { useProcessReactions } from './hooks/useProcessReactions';
4
- import { ReactionsListModal } from './ReactionsListModal';
5
- import { useTranslationContext } from '../../context';
5
+ import { useComponentContext, useTranslationContext, } from '../../context';
6
6
  import { MAX_MESSAGE_REACTIONS_TO_FETCH } from '../Message/hooks';
7
7
  const UnMemoizedReactionsList = (props) => {
8
- const { handleFetchReactions, reactionDetailsSort, reverse = false, sortReactionDetails, ...rest } = props;
8
+ const { handleFetchReactions,
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ reactionDetailsSort, reverse = false, sortReactionDetails, ...rest } = props;
9
11
  const { existingReactions, hasReactions, totalReactionCount } = useProcessReactions(rest);
10
- const [selectedReactionType, setSelectedReactionType,] = useState(null);
12
+ const [selectedReactionType, setSelectedReactionType] = useState(null);
11
13
  const { t } = useTranslationContext('ReactionsList');
14
+ const { ReactionsListModal = DefaultReactionsListModal } = useComponentContext();
12
15
  const handleReactionButtonClick = (reactionType) => {
13
16
  if (totalReactionCount > MAX_MESSAGE_REACTIONS_TO_FETCH) {
14
17
  return;
@@ -4,7 +4,7 @@ import { ModalProps } from '../Modal';
4
4
  import { MessageContextValue } from '../../context';
5
5
  import { DefaultStreamChatGenerics } from '../../types/types';
6
6
  import { ReactionSort } from 'stream-chat';
7
- type ReactionsListModalProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = ModalProps & Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions' | 'reactionDetailsSort'>> & {
7
+ export type ReactionsListModalProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = ModalProps & Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions' | 'reactionDetailsSort'>> & {
8
8
  reactions: ReactionSummary[];
9
9
  selectedReactionType: ReactionType<StreamChatGenerics>;
10
10
  onSelectedReactionTypeChange?: (reactionType: ReactionType<StreamChatGenerics>) => void;
@@ -13,4 +13,3 @@ type ReactionsListModalProps<StreamChatGenerics extends DefaultStreamChatGeneric
13
13
  sortReactionDetails?: ReactionDetailsComparator<StreamChatGenerics>;
14
14
  };
15
15
  export declare function ReactionsListModal<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ handleFetchReactions, onSelectedReactionTypeChange, reactionDetailsSort: propReactionDetailsSort, reactions, selectedReactionType, sortReactionDetails: propSortReactionDetails, ...modalProps }: ReactionsListModalProps<StreamChatGenerics>): React.JSX.Element;
16
- export {};
@@ -12,7 +12,7 @@ export function ReactionsListModal({ handleFetchReactions, onSelectedReactionTyp
12
12
  const { reactionDetailsSort: contextReactionDetailsSort, sortReactionDetails: contextSortReactionDetails, } = useMessageContext('ReactionsListModal');
13
13
  const legacySortReactionDetails = propSortReactionDetails ?? contextSortReactionDetails;
14
14
  const reactionDetailsSort = propReactionDetailsSort ?? contextReactionDetailsSort ?? defaultReactionDetailsSort;
15
- const { isLoading: areReactionsLoading, reactions: reactionDetails, } = useFetchReactions({
15
+ const { isLoading: areReactionsLoading, reactions: reactionDetails } = useFetchReactions({
16
16
  handleFetchReactions,
17
17
  reactionType: selectedReactionType,
18
18
  shouldFetch: modalProps.open,
@@ -15,8 +15,12 @@ export const SpriteImage = ({ columns, fallback, height, position, rows, spriteU
15
15
  '--str-chat__sprite-image-resize-ratio-y': 'calc(var(--str-chat__sprite-image-height) / var(--str-chat__sprite-item-height))',
16
16
  '--str-chat__sprite-item-height': `${spriteHeight / rows}`,
17
17
  '--str-chat__sprite-item-width': `${spriteWidth / columns}`,
18
- ...(Number.isFinite(height) ? { '--str-chat__sprite-image-height': `${height}px` } : {}),
19
- ...(Number.isFinite(width) ? { '--str-chat__sprite-image-width': `${width}px` } : {}),
18
+ ...(Number.isFinite(height)
19
+ ? { '--str-chat__sprite-image-height': `${height}px` }
20
+ : {}),
21
+ ...(Number.isFinite(width)
22
+ ? { '--str-chat__sprite-image-width': `${width}px` }
23
+ : {}),
20
24
  backgroundImage: `url('${spriteUrl}')`,
21
25
  backgroundPosition: `${x * (100 / (columns - 1))}% ${y * (100 / (rows - 1))}%`,
22
26
  backgroundSize: `${columns * 100}% ${rows * 100}%`,
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { useMessageContext } from '../../../context';
3
3
  export function useFetchReactions(options) {
4
- const { handleFetchReactions: contextHandleFetchReactions, } = useMessageContext('useFetchReactions');
4
+ const { handleFetchReactions: contextHandleFetchReactions } = useMessageContext('useFetchReactions');
5
5
  const [reactions, setReactions] = useState([]);
6
6
  const { handleFetchReactions: propHandleFetchReactions, reactionType, shouldFetch, sort, } = options;
7
7
  const [isLoading, setIsLoading] = useState(shouldFetch);
@@ -10,7 +10,7 @@ export const defaultReactionsSort = (a, b) => {
10
10
  export const useProcessReactions = (params) => {
11
11
  const { own_reactions: propOwnReactions, reaction_groups: propReactionGroups, reactionOptions: propReactionOptions, reactions: propReactions, sortReactions: propSortReactions, } = params;
12
12
  const { message, sortReactions: contextSortReactions } = useMessageContext('useProcessReactions');
13
- const { reactionOptions: contextReactionOptions = defaultReactionOptions, } = useComponentContext('useProcessReactions');
13
+ const { reactionOptions: contextReactionOptions = defaultReactionOptions } = useComponentContext('useProcessReactions');
14
14
  const reactionOptions = propReactionOptions ?? contextReactionOptions;
15
15
  const sortReactions = propSortReactions ?? contextSortReactions ?? defaultReactionsSort;
16
16
  const latestReactions = propReactions || message.latest_reactions;
@@ -1,5 +1,6 @@
1
1
  export * from './ReactionSelector';
2
2
  export * from './ReactionsList';
3
+ export * from './ReactionsListModal';
3
4
  export * from './SimpleReactionsList';
4
5
  export * from './SpriteImage';
5
6
  export * from './StreamEmoji';
@@ -1,5 +1,6 @@
1
1
  export * from './ReactionSelector';
2
2
  export * from './ReactionsList';
3
+ export * from './ReactionsListModal';
3
4
  export * from './SimpleReactionsList';
4
5
  export * from './SpriteImage';
5
6
  export * from './StreamEmoji';
@@ -1,11 +1,26 @@
1
1
  /* eslint-disable sort-keys */
2
- /* eslint-disable react/display-name */
3
2
  import React from 'react';
4
3
  import { StreamEmoji } from './StreamEmoji';
5
4
  export const defaultReactionOptions = [
6
- { type: 'haha', Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDE02', type: 'haha' }), name: 'Joy' },
7
- { type: 'like', Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDC4D', type: 'like' }), name: 'Thumbs up' },
8
- { type: 'love', Component: () => React.createElement(StreamEmoji, { fallback: '\u2764\uFE0F', type: 'love' }), name: 'Heart' },
5
+ {
6
+ type: 'haha',
7
+ Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDE02', type: 'haha' }),
8
+ name: 'Joy',
9
+ },
10
+ {
11
+ type: 'like',
12
+ Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDC4D', type: 'like' }),
13
+ name: 'Thumbs up',
14
+ },
15
+ {
16
+ type: 'love',
17
+ Component: () => React.createElement(StreamEmoji, { fallback: '\u2764\uFE0F', type: 'love' }),
18
+ name: 'Heart',
19
+ },
9
20
  { type: 'sad', Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDE14', type: 'sad' }), name: 'Sad' },
10
- { type: 'wow', Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDE32', type: 'wow' }), name: 'Astonished' },
21
+ {
22
+ type: 'wow',
23
+ Component: () => React.createElement(StreamEmoji, { fallback: '\uD83D\uDE32', type: 'wow' }),
24
+ name: 'Astonished',
25
+ },
11
26
  ];
@@ -34,7 +34,7 @@ const ThreadInner = (props) => {
34
34
  const { thread, threadHasMore, threadLoadingMore, threadMessages = [], threadSuppressAutoscroll, } = useChannelStateContext('Thread');
35
35
  const { closeThread, loadMoreThread } = useChannelActionContext('Thread');
36
36
  const { customClasses } = useChatContext('Thread');
37
- const { ThreadInput: ContextInput, Message: ContextMessage, ThreadHead = DefaultThreadHead, ThreadHeader = DefaultThreadHeader, VirtualMessage, } = useComponentContext('Thread');
37
+ const { Message: ContextMessage, ThreadHead = DefaultThreadHead, ThreadHeader = DefaultThreadHeader, ThreadInput: ContextInput, VirtualMessage, } = useComponentContext('Thread');
38
38
  const ThreadInput = PropInput ?? additionalMessageInputProps?.Input ?? ContextInput ?? MessageInputFlat;
39
39
  const ThreadMessage = PropMessage || additionalMessageListProps?.Message;
40
40
  const FallbackMessage = virtualized && VirtualMessage ? VirtualMessage : ContextMessage;
@@ -45,7 +45,6 @@ const ThreadInner = (props) => {
45
45
  // FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options
46
46
  loadMoreThread();
47
47
  }
48
- // eslint-disable-next-line react-hooks/exhaustive-deps
49
48
  }, [thread, loadMoreThread]);
50
49
  const threadProps = threadInstance
51
50
  ? {
@@ -71,6 +70,8 @@ const ThreadInner = (props) => {
71
70
  const head = (React.createElement(ThreadHead, { key: messageAsThread.id, message: messageAsThread, Message: MessageUIComponent, ...additionalParentMessageProps }));
72
71
  return (React.createElement("div", { className: threadClass },
73
72
  React.createElement(ThreadHeader, { closeThread: closeThread, thread: messageAsThread }),
74
- React.createElement(ThreadMessageList, { disableDateSeparator: !enableDateSeparator, head: head, Message: MessageUIComponent, messageActions: messageActions, suppressAutoscroll: threadSuppressAutoscroll, threadList: true, ...threadProps, ...(virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps) }),
73
+ React.createElement(ThreadMessageList, { disableDateSeparator: !enableDateSeparator, head: head, Message: MessageUIComponent, messageActions: messageActions, suppressAutoscroll: threadSuppressAutoscroll, threadList: true, ...threadProps, ...(virtualized
74
+ ? additionalVirtualizedMessageListProps
75
+ : additionalMessageListProps) }),
75
76
  React.createElement(MessageInput, { focus: autoFocus, Input: ThreadInput, isThreadInput: true, parent: thread ?? parentMessage, publishTypingEvent: false, ...additionalMessageInputProps })));
76
77
  };
@@ -4,6 +4,6 @@ import { Thread } from 'stream-chat';
4
4
  export type ThreadContextValue = Thread | undefined;
5
5
  export declare const ThreadContext: React.Context<ThreadContextValue>;
6
6
  export declare const useThreadContext: () => Thread<import("stream-chat").DefaultGenerics> | undefined;
7
- export declare const ThreadProvider: ({ children, thread }: PropsWithChildren<{
7
+ export declare const ThreadProvider: ({ children, thread, }: PropsWithChildren<{
8
8
  thread?: Thread;
9
9
  }>) => React.JSX.Element;
@@ -5,5 +5,5 @@ export const useThreadContext = () => {
5
5
  const thread = useContext(ThreadContext);
6
6
  return thread ?? undefined;
7
7
  };
8
- export const ThreadProvider = ({ children, thread }) => (React.createElement(ThreadContext.Provider, { value: thread },
8
+ export const ThreadProvider = ({ children, thread, }) => (React.createElement(ThreadContext.Provider, { value: thread },
9
9
  React.createElement(Channel, { channel: thread?.channel }, children)));
@@ -29,7 +29,7 @@ export const useThreadList = () => {
29
29
  };
30
30
  export const ThreadList = ({ virtuosoProps }) => {
31
31
  const { client } = useChatContext();
32
- const { ThreadListItem = DefaultThreadListItem, ThreadListEmptyPlaceholder = DefaultThreadListEmptyPlaceholder, ThreadListLoadingIndicator = DefaultThreadListLoadingIndicator, ThreadListUnseenThreadsBanner = DefaultThreadListUnseenThreadsBanner, } = useComponentContext();
32
+ const { ThreadListEmptyPlaceholder = DefaultThreadListEmptyPlaceholder, ThreadListItem = DefaultThreadListItem, ThreadListLoadingIndicator = DefaultThreadListLoadingIndicator, ThreadListUnseenThreadsBanner = DefaultThreadListUnseenThreadsBanner, } = useComponentContext();
33
33
  const { threads } = useStateStore(client.threads.state, selector);
34
34
  useThreadList();
35
35
  return (React.createElement("div", { className: 'str-chat__thread-list-container' },
@@ -6,4 +6,4 @@ export type ThreadListItemProps = {
6
6
  threadListItemUIProps?: ThreadListItemUIProps;
7
7
  };
8
8
  export declare const useThreadListItemContext: () => Thread<import("stream-chat").DefaultGenerics> | undefined;
9
- export declare const ThreadListItem: ({ thread, threadListItemUIProps }: ThreadListItemProps) => React.JSX.Element;
9
+ export declare const ThreadListItem: ({ thread, threadListItemUIProps, }: ThreadListItemProps) => React.JSX.Element;
@@ -3,7 +3,7 @@ import { useComponentContext } from '../../../context';
3
3
  import { ThreadListItemUI as DefaultThreadListItemUI } from './ThreadListItemUI';
4
4
  const ThreadListItemContext = createContext(undefined);
5
5
  export const useThreadListItemContext = () => useContext(ThreadListItemContext);
6
- export const ThreadListItem = ({ thread, threadListItemUIProps }) => {
6
+ export const ThreadListItem = ({ thread, threadListItemUIProps, }) => {
7
7
  const { ThreadListItemUI = DefaultThreadListItemUI } = useComponentContext();
8
8
  return (React.createElement(ThreadListItemContext.Provider, { value: thread },
9
9
  React.createElement(ThreadListItemUI, { ...threadListItemUIProps })));
@@ -26,8 +26,7 @@ const getTitleFromMessage = ({ currentUserId, message, }) => {
26
26
  let attachmentIcon = '';
27
27
  if (attachment) {
28
28
  attachmentIcon +=
29
- attachmentTypeIconMap[attachment.type ?? 'file'] ??
30
- attachmentTypeIconMap.file;
29
+ attachmentTypeIconMap[attachment.type ?? 'file'] ?? attachmentTypeIconMap.file;
31
30
  }
32
31
  const messageBelongsToCurrentUser = message?.user?.id === currentUserId;
33
32
  if (message?.deleted_at && message.parent_id)
@@ -69,7 +68,10 @@ export const ThreadListItemUI = (props) => {
69
68
  React.createElement("div", { className: 'str-chat__thread-list-item__latest-reply-text-and-timestamp' },
70
69
  React.createElement("div", { className: 'str-chat__thread-list-item__latest-reply-text' }, deletedAt
71
70
  ? 'This thread was deleted'
72
- : getTitleFromMessage({ currentUserId: client.user?.id, message: latestReply })),
71
+ : getTitleFromMessage({
72
+ currentUserId: client.user?.id,
73
+ message: latestReply,
74
+ })),
73
75
  React.createElement("div", { className: 'str-chat__thread-list-item__latest-reply-timestamp' },
74
76
  React.createElement(Timestamp, { timestamp: deletedAt ?? latestReply?.created_at })))))));
75
77
  };
@@ -1,4 +1,3 @@
1
- /* eslint-disable react/display-name */
2
1
  import React from 'react';
3
2
  // TODO: unify icons across SDK
4
3
  export const Icon = {
@@ -11,4 +11,4 @@ export type PopperTooltipProps<T extends HTMLElement> = React.PropsWithChildren<
11
11
  /** Tells component whether to render its contents */
12
12
  visible?: boolean;
13
13
  }>;
14
- export declare const PopperTooltip: <T extends HTMLElement>({ children, offset, referenceElement, placement, visible, }: PopperTooltipProps<T>) => React.JSX.Element | null;
14
+ export declare const PopperTooltip: <T extends HTMLElement>({ children, offset, placement, referenceElement, visible, }: PopperTooltipProps<T>) => React.JSX.Element | null;
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react';
2
2
  import { usePopper } from 'react-popper';
3
3
  export const Tooltip = ({ children, ...rest }) => (React.createElement("div", { className: 'str-chat__tooltip', ...rest }, children));
4
- export const PopperTooltip = ({ children, offset = [0, 10], referenceElement, placement = 'top', visible = false, }) => {
4
+ export const PopperTooltip = ({ children, offset = [0, 10], placement = 'top', referenceElement, visible = false, }) => {
5
5
  const [popperElement, setPopperElement] = useState(null);
6
6
  const { attributes, styles } = usePopper(referenceElement, popperElement, {
7
7
  modifiers: [
@@ -1,5 +1,5 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { AttachmentPreviewListProps, AttachmentProps, AvatarProps, BaseImageProps, ChannelPreviewActionButtonsProps, CooldownTimerProps, CustomMessageActionsListProps, DateSeparatorProps, EmojiSearchIndex, EmptyStateIndicatorProps, EventComponentProps, FixedHeightMessageProps, GiphyPreviewMessageProps, LinkPreviewListProps, LoadingIndicatorProps, MessageBouncePromptProps, MessageDeletedProps, MessageInputProps, MessageListNotificationsProps, MessageNotificationProps, MessageOptionsProps, MessageProps, MessageRepliesCountButtonProps, MessageStatusProps, MessageTimestampProps, MessageUIComponentProps, ModalGalleryProps, PinIndicatorProps, PollCreationDialogProps, PollOptionSelectorProps, QuotedMessagePreviewProps, ReactionOptions, ReactionSelectorProps, ReactionsListProps, RecordingPermissionDeniedNotificationProps, SendButtonProps, StartRecordingAudioButtonProps, StreamedMessageTextProps, SuggestionItemProps, SuggestionListProps, ThreadHeaderProps, ThreadListItemProps, ThreadListItemUIProps, TimestampProps, TypingIndicatorProps, UnreadMessagesNotificationProps, UnreadMessagesSeparatorProps } from '../components';
2
+ import { AttachmentPreviewListProps, AttachmentProps, AvatarProps, BaseImageProps, ChannelPreviewActionButtonsProps, CooldownTimerProps, CustomMessageActionsListProps, DateSeparatorProps, EmojiSearchIndex, EmptyStateIndicatorProps, EventComponentProps, FixedHeightMessageProps, GiphyPreviewMessageProps, LinkPreviewListProps, LoadingIndicatorProps, MessageBouncePromptProps, MessageDeletedProps, MessageInputProps, MessageListNotificationsProps, MessageNotificationProps, MessageOptionsProps, MessageProps, MessageRepliesCountButtonProps, MessageStatusProps, MessageTimestampProps, MessageUIComponentProps, ModalGalleryProps, PinIndicatorProps, PollCreationDialogProps, PollOptionSelectorProps, QuotedMessagePreviewProps, ReactionOptions, ReactionSelectorProps, ReactionsListModalProps, ReactionsListProps, RecordingPermissionDeniedNotificationProps, SendButtonProps, StartRecordingAudioButtonProps, StreamedMessageTextProps, SuggestionItemProps, SuggestionListProps, ThreadHeaderProps, ThreadListItemProps, ThreadListItemUIProps, TimestampProps, TypingIndicatorProps, UnreadMessagesNotificationProps, UnreadMessagesSeparatorProps } from '../components';
3
3
  import type { CustomTrigger, DefaultStreamChatGenerics, PropsWithChildrenOnly, UnknownType } from '../types/types';
4
4
  import type { StopAIGenerationButtonProps } from '../components/MessageInput/StopAIGenerationButton';
5
5
  export type ComponentContextValue<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger> = {
@@ -105,6 +105,8 @@ export type ComponentContextValue<StreamChatGenerics extends DefaultStreamChatGe
105
105
  ReactionSelector?: React.ForwardRefExoticComponent<ReactionSelectorProps<StreamChatGenerics>>;
106
106
  /** Custom UI component to display the list of reactions on a message, defaults to and accepts same props as: [ReactionsList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Reactions/ReactionsList.tsx) */
107
107
  ReactionsList?: React.ComponentType<ReactionsListProps<StreamChatGenerics>>;
108
+ /** Custom UI component to display the reactions modal, defaults to and accepts same props as: [ReactionsListModal](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Reactions/ReactionsListModal.tsx) */
109
+ ReactionsListModal?: React.ComponentType<ReactionsListModalProps<StreamChatGenerics>>;
108
110
  RecordingPermissionDeniedNotification?: React.ComponentType<RecordingPermissionDeniedNotificationProps>;
109
111
  /** Custom UI component for send button, defaults to and accepts same props as: [SendButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/icons.tsx) */
110
112
  SendButton?: React.ComponentType<SendButtonProps<StreamChatGenerics>>;
@@ -5,7 +5,7 @@ export const useComponentContext = (
5
5
  /**
6
6
  * @deprecated
7
7
  */
8
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
8
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
9
9
  _componentName) => useContext(ComponentContext);
10
10
  /**
11
11
  * Typescript currently does not support partial inference, so if ComponentContext
@@ -3,7 +3,7 @@ import { DialogManager } from '../components/Dialog/DialogManager';
3
3
  type DialogManagerProviderContextValue = {
4
4
  dialogManager: DialogManager;
5
5
  };
6
- export declare const DialogManagerProvider: ({ children, id }: PropsWithChildren<{
6
+ export declare const DialogManagerProvider: ({ children, id, }: PropsWithChildren<{
7
7
  id?: string;
8
8
  }>) => React.JSX.Element;
9
9
  export declare const useDialogManager: () => DialogManagerProviderContextValue;
@@ -2,7 +2,7 @@ import React, { useContext, useState } from 'react';
2
2
  import { DialogManager } from '../components/Dialog/DialogManager';
3
3
  import { DialogPortalDestination } from '../components/Dialog/DialogPortal';
4
4
  const DialogManagerProviderContext = React.createContext(undefined);
5
- export const DialogManagerProvider = ({ children, id }) => {
5
+ export const DialogManagerProvider = ({ children, id, }) => {
6
6
  const [dialogManager] = useState(() => new DialogManager({ id }));
7
7
  return (React.createElement(DialogManagerProviderContext.Provider, { value: { dialogManager } },
8
8
  children,
@@ -1,4 +1,4 @@
1
- import React, { createContext, useCallback, useContext, useMemo } from 'react';
1
+ import React, { createContext, useCallback, useContext, useMemo, } from 'react';
2
2
  import { useMessageContext } from './MessageContext';
3
3
  import { useChannelActionContext } from './ChannelActionContext';
4
4
  import { isMessageBounced } from '../components';
@@ -32,5 +32,5 @@ export function MessageBounceProvider({ children }) {
32
32
  handleRetry,
33
33
  message,
34
34
  }), [handleDelete, handleEdit, handleRetry, message]);
35
- return React.createElement(MessageBounceContext.Provider, { value: value }, children);
35
+ return (React.createElement(MessageBounceContext.Provider, { value: value }, children));
36
36
  }
@@ -2,7 +2,7 @@ import React, { useContext } from 'react';
2
2
  export const MessageContext = React.createContext(undefined);
3
3
  export const MessageProvider = ({ children, value, }) => (React.createElement(MessageContext.Provider, { value: value }, children));
4
4
  export const useMessageContext = (
5
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
5
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
6
  _componentName) => {
7
7
  const contextValue = useContext(MessageContext);
8
8
  if (!contextValue) {
@@ -0,0 +1,13 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ export type VirtualizedMessageListContextValue = {
3
+ /** Function that scrolls the list to the bottom. */
4
+ scrollToBottom: () => void;
5
+ };
6
+ export declare const VirtualizedMessageListContext: React.Context<VirtualizedMessageListContextValue | undefined>;
7
+ /**
8
+ * Context provider for components rendered within the `VirtualizedMessageList`
9
+ */
10
+ export declare const VirtualizedMessageListContextProvider: ({ children, value, }: PropsWithChildren<{
11
+ value: VirtualizedMessageListContextValue;
12
+ }>) => React.JSX.Element;
13
+ export declare const useVirtualizedMessageListContext: () => VirtualizedMessageListContextValue;
@@ -0,0 +1,7 @@
1
+ import React, { createContext, useContext } from 'react';
2
+ export const VirtualizedMessageListContext = createContext(undefined);
3
+ /**
4
+ * Context provider for components rendered within the `VirtualizedMessageList`
5
+ */
6
+ export const VirtualizedMessageListContextProvider = ({ children, value, }) => (React.createElement(VirtualizedMessageListContext.Provider, { value: value }, children));
7
+ export const useVirtualizedMessageListContext = () => useContext(VirtualizedMessageListContext);
@@ -3,5 +3,5 @@ import { ComponentContext } from './ComponentContext';
3
3
  export function WithComponents({ children, overrides, }) {
4
4
  const parentOverrides = useContext(ComponentContext);
5
5
  const actualOverrides = { ...parentOverrides, ...overrides };
6
- return React.createElement(ComponentContext.Provider, { value: actualOverrides }, children);
6
+ return (React.createElement(ComponentContext.Provider, { value: actualOverrides }, children));
7
7
  }