stream-chat-react 13.0.4 → 13.1.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 (103) hide show
  1. package/dist/components/Channel/Channel.d.ts +1 -1
  2. package/dist/components/Channel/Channel.js +7 -0
  3. package/dist/components/ChannelList/hooks/useChannelListShape.js +3 -3
  4. package/dist/components/Chat/hooks/useChat.js +7 -3
  5. package/dist/components/Dialog/ButtonWithSubmenu.d.ts +11 -0
  6. package/dist/components/Dialog/ButtonWithSubmenu.js +88 -0
  7. package/dist/components/Dialog/index.d.ts +1 -0
  8. package/dist/components/Dialog/index.js +1 -0
  9. package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
  10. package/dist/components/Message/Message.js +3 -2
  11. package/dist/components/Message/MessageSimple.js +11 -4
  12. package/dist/components/Message/MessageThreadReplyInChannelButtonIndicator.d.ts +2 -0
  13. package/dist/components/Message/MessageThreadReplyInChannelButtonIndicator.js +63 -0
  14. package/dist/components/Message/ReminderNotification.d.ts +6 -0
  15. package/dist/components/Message/ReminderNotification.js +30 -0
  16. package/dist/components/Message/hooks/index.d.ts +1 -0
  17. package/dist/components/Message/hooks/index.js +1 -0
  18. package/dist/components/Message/hooks/useMessageReminder.d.ts +1 -0
  19. package/dist/components/Message/hooks/useMessageReminder.js +11 -0
  20. package/dist/components/Message/index.d.ts +1 -0
  21. package/dist/components/Message/index.js +1 -0
  22. package/dist/components/Message/utils.d.ts +4 -2
  23. package/dist/components/Message/utils.js +11 -1
  24. package/dist/components/MessageActions/MessageActionsBox.js +12 -6
  25. package/dist/components/MessageActions/RemindMeSubmenu.d.ts +6 -0
  26. package/dist/components/MessageActions/RemindMeSubmenu.js +18 -0
  27. package/dist/components/MessageInput/MessageInputFlat.js +5 -3
  28. package/dist/components/MessageInput/SendToChannelCheckbox.d.ts +2 -0
  29. package/dist/components/MessageInput/SendToChannelCheckbox.js +20 -0
  30. package/dist/components/MessageList/MessageListNotifications.js +8 -3
  31. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -1
  32. package/dist/components/MessageList/VirtualizedMessageListComponents.js +4 -0
  33. package/dist/components/Notifications/hooks/index.d.ts +1 -0
  34. package/dist/components/Notifications/hooks/index.js +1 -0
  35. package/dist/components/Notifications/hooks/useNotifications.d.ts +2 -0
  36. package/dist/components/Notifications/hooks/useNotifications.js +10 -0
  37. package/dist/components/Notifications/index.d.ts +1 -0
  38. package/dist/components/Notifications/index.js +1 -0
  39. package/dist/components/TextareaComposer/TextareaComposer.js +4 -0
  40. package/dist/components/Thread/LegacyThreadContext.d.ts +8 -0
  41. package/dist/components/Thread/LegacyThreadContext.js +3 -0
  42. package/dist/components/Thread/Thread.d.ts +0 -4
  43. package/dist/components/Thread/Thread.js +2 -3
  44. package/dist/components/Thread/index.d.ts +1 -0
  45. package/dist/components/Thread/index.js +1 -0
  46. package/dist/components/index.d.ts +1 -0
  47. package/dist/components/index.js +1 -0
  48. package/dist/context/ComponentContext.d.ts +6 -1
  49. package/dist/css/v2/index.css +1 -1
  50. package/dist/css/v2/index.layout.css +1 -1
  51. package/dist/experimental/MessageActions/defaults.d.ts +1 -1
  52. package/dist/experimental/MessageActions/defaults.js +27 -4
  53. package/dist/experimental/index.browser.cjs +382 -169
  54. package/dist/experimental/index.browser.cjs.map +4 -4
  55. package/dist/experimental/index.node.cjs +382 -169
  56. package/dist/experimental/index.node.cjs.map +4 -4
  57. package/dist/i18n/Streami18n.d.ts +32 -3
  58. package/dist/i18n/Streami18n.js +34 -5
  59. package/dist/i18n/TranslationBuilder/TranslationBuilder.d.ts +31 -0
  60. package/dist/i18n/TranslationBuilder/TranslationBuilder.js +68 -0
  61. package/dist/i18n/TranslationBuilder/index.d.ts +2 -0
  62. package/dist/i18n/TranslationBuilder/index.js +2 -0
  63. package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts +11 -0
  64. package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.js +27 -0
  65. package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.d.ts +4 -0
  66. package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.js +32 -0
  67. package/dist/i18n/TranslationBuilder/notifications/index.d.ts +1 -0
  68. package/dist/i18n/TranslationBuilder/notifications/index.js +1 -0
  69. package/dist/i18n/TranslationBuilder/notifications/pollComposition.d.ts +3 -0
  70. package/dist/i18n/TranslationBuilder/notifications/pollComposition.js +9 -0
  71. package/dist/i18n/TranslationBuilder/notifications/types.d.ts +4 -0
  72. package/dist/i18n/TranslationBuilder/notifications/types.js +1 -0
  73. package/dist/i18n/de.json +23 -0
  74. package/dist/i18n/en.json +23 -0
  75. package/dist/i18n/es.json +23 -0
  76. package/dist/i18n/fr.json +23 -0
  77. package/dist/i18n/hi.json +23 -0
  78. package/dist/i18n/index.d.ts +1 -0
  79. package/dist/i18n/index.js +1 -0
  80. package/dist/i18n/it.json +23 -0
  81. package/dist/i18n/ja.json +23 -0
  82. package/dist/i18n/ko.json +23 -0
  83. package/dist/i18n/nl.json +23 -0
  84. package/dist/i18n/pt.json +23 -0
  85. package/dist/i18n/ru.json +23 -0
  86. package/dist/i18n/tr.json +23 -0
  87. package/dist/i18n/types.d.ts +54 -0
  88. package/dist/i18n/utils.d.ts +1 -1
  89. package/dist/i18n/utils.js +8 -2
  90. package/dist/index.browser.cjs +3589 -2162
  91. package/dist/index.browser.cjs.map +4 -4
  92. package/dist/index.node.cjs +3645 -2156
  93. package/dist/index.node.cjs.map +4 -4
  94. package/dist/plugins/Emojis/index.browser.cjs +1 -2
  95. package/dist/plugins/Emojis/index.browser.cjs.map +3 -3
  96. package/dist/plugins/Emojis/index.node.cjs +1 -2
  97. package/dist/plugins/Emojis/index.node.cjs.map +3 -3
  98. package/dist/scss/v2/Message/Message-layout.scss +13 -2
  99. package/dist/scss/v2/Message/Message-theme.scss +31 -1
  100. package/dist/scss/v2/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
  101. package/dist/scss/v2/MessageInput/MessageInput-layout.scss +19 -0
  102. package/dist/scss/v2/MessageInput/MessageInput-theme.scss +11 -0
  103. package/package.json +6 -8
@@ -7,6 +7,7 @@ import { StopAIGenerationButton as DefaultStopAIGenerationButton } from './StopA
7
7
  import { AudioRecorder as DefaultAudioRecorder, RecordingPermissionDeniedNotification as DefaultRecordingPermissionDeniedNotification, StartRecordingAudioButton as DefaultStartRecordingAudioButton, RecordingPermission, } from '../MediaRecorder';
8
8
  import { QuotedMessagePreview as DefaultQuotedMessagePreview, QuotedMessagePreviewHeader, } from './QuotedMessagePreview';
9
9
  import { LinkPreviewList as DefaultLinkPreviewList } from './LinkPreviewList';
10
+ import { SendToChannelCheckbox as DefaultSendToChannelCheckbox } from './SendToChannelCheckbox';
10
11
  import { TextareaComposer as DefaultTextareaComposer } from '../TextareaComposer';
11
12
  import { AIStates, useAIState } from '../AIStateIndicator';
12
13
  import { RecordingAttachmentType } from '../MediaRecorder/classes';
@@ -19,7 +20,7 @@ import { WithDragAndDropUpload } from './WithDragAndDropUpload';
19
20
  export const MessageInputFlat = () => {
20
21
  const { message } = useMessageContext();
21
22
  const { asyncMessagesMultiSendEnabled, cooldownRemaining, handleSubmit, hideSendButton, recordingController, setCooldownRemaining, } = useMessageInputContext('MessageInputFlat');
22
- const { AttachmentPreviewList = DefaultAttachmentPreviewList, AttachmentSelector = message ? SimpleAttachmentSelector : DefaultAttachmentSelector, AudioRecorder = DefaultAudioRecorder, CooldownTimer = DefaultCooldownTimer, EmojiPicker, LinkPreviewList = DefaultLinkPreviewList, QuotedMessagePreview = DefaultQuotedMessagePreview, RecordingPermissionDeniedNotification = DefaultRecordingPermissionDeniedNotification, SendButton = DefaultSendButton, StartRecordingAudioButton = DefaultStartRecordingAudioButton, StopAIGenerationButton: StopAIGenerationButtonOverride, TextareaComposer = DefaultTextareaComposer, } = useComponentContext();
23
+ const { AttachmentPreviewList = DefaultAttachmentPreviewList, AttachmentSelector = message ? SimpleAttachmentSelector : DefaultAttachmentSelector, AudioRecorder = DefaultAudioRecorder, CooldownTimer = DefaultCooldownTimer, EmojiPicker, LinkPreviewList = DefaultLinkPreviewList, QuotedMessagePreview = DefaultQuotedMessagePreview, RecordingPermissionDeniedNotification = DefaultRecordingPermissionDeniedNotification, SendButton = DefaultSendButton, SendToChannelCheckbox = DefaultSendToChannelCheckbox, StartRecordingAudioButton = DefaultStartRecordingAudioButton, StopAIGenerationButton: StopAIGenerationButtonOverride, TextareaComposer = DefaultTextareaComposer, } = useComponentContext();
23
24
  const { channel } = useChatContext('MessageInputFlat');
24
25
  const { aiState } = useAIState(channel);
25
26
  const stopGenerating = useCallback(() => channel?.stopAIResponse(), [channel]);
@@ -34,7 +35,7 @@ export const MessageInputFlat = () => {
34
35
  const isRecording = !!recordingController.recordingState;
35
36
  /**
36
37
  * This bit here is needed to make sure that we can get rid of the default behaviour
37
- * if need be. Essentially this allows us to pass StopAIGenerationButton={null} and
38
+ * if need be. Essentially, this allows us to pass StopAIGenerationButton={null} and
38
39
  * completely circumvent the default logic if it's not what we want. We need it as a
39
40
  * prop because there is no other trivial way to override the SendMessage button otherwise.
40
41
  */
@@ -64,5 +65,6 @@ export const MessageInputFlat = () => {
64
65
  attachments.some((a) => a.type === RecordingAttachmentType.VOICE_RECORDING)), onClick: () => {
65
66
  recordingController.recorder?.start();
66
67
  setShowRecordingPermissionDeniedNotification(true);
67
- } }))))))))));
68
+ } })))))))),
69
+ React.createElement(SendToChannelCheckbox, null)));
68
70
  };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SendToChannelCheckbox: () => React.JSX.Element | null;
@@ -0,0 +1,20 @@
1
+ import { useMessageComposer } from './hooks';
2
+ import React from 'react';
3
+ import { useStateStore } from '../../store';
4
+ import { useTranslationContext } from '../../context';
5
+ const stateSelector = (state) => ({
6
+ showReplyInChannel: state.showReplyInChannel,
7
+ });
8
+ export const SendToChannelCheckbox = () => {
9
+ const { t } = useTranslationContext();
10
+ const messageComposer = useMessageComposer();
11
+ const { showReplyInChannel } = useStateStore(messageComposer.state, stateSelector);
12
+ if (messageComposer.editedMessage || !messageComposer.threadId)
13
+ return null;
14
+ return (React.createElement("div", { className: 'str-chat__send-to-channel-checkbox__container' },
15
+ React.createElement("div", { className: 'str-chat__send-to-channel-checkbox__field' },
16
+ React.createElement("input", { id: 'send-to-channel-checkbox', onClick: messageComposer.toggleShowReplyInChannel, type: 'checkbox', value: showReplyInChannel.toString() }),
17
+ React.createElement("label", { htmlFor: 'send-to-channel-checkbox' }, Object.keys(messageComposer.channel.state.members).length === 2
18
+ ? t('Also send as a direct message')
19
+ : t('Also send in channel')))));
20
+ };
@@ -2,13 +2,18 @@ import React from 'react';
2
2
  import { ConnectionStatus } from './ConnectionStatus';
3
3
  import { CustomNotification } from './CustomNotification';
4
4
  import { useTranslationContext } from '../../context/TranslationContext';
5
+ import { useNotifications } from '../Notifications/hooks/useNotifications';
6
+ const ClientNotifications = () => {
7
+ const clientNotifications = useNotifications();
8
+ const { t } = useTranslationContext();
9
+ return (React.createElement(React.Fragment, null, clientNotifications.map((notification) => (React.createElement(CustomNotification, { active: true, key: notification.id, type: notification.severity }, t('translationBuilderTopic/notification', { notification }))))));
10
+ };
5
11
  export const MessageListNotifications = (props) => {
6
12
  const { hasNewMessages, isMessageListScrolledToBottom, isNotAtLatestMessageSet, MessageNotification, notifications, scrollToBottom, threadList, unreadCount, } = props;
7
13
  const { t } = useTranslationContext('MessageListNotifications');
8
14
  return (React.createElement("div", { className: 'str-chat__list-notifications' },
9
15
  notifications.map((notification) => (React.createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text))),
16
+ React.createElement(ClientNotifications, null),
10
17
  React.createElement(ConnectionStatus, null),
11
- React.createElement(MessageNotification, { isMessageListScrolledToBottom: isMessageListScrolledToBottom, onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet, threadList: threadList, unreadCount: unreadCount }, isNotAtLatestMessageSet
12
- ? t('Latest Messages')
13
- : t('New Messages!'))));
18
+ React.createElement(MessageNotification, { isMessageListScrolledToBottom: isMessageListScrolledToBottom, onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet, threadList: threadList, unreadCount: unreadCount }, isNotAtLatestMessageSet ? t('Latest Messages') : t('New Messages!'))));
14
19
  };
@@ -12,6 +12,6 @@ type CommonVirtuosoComponentProps = {
12
12
  };
13
13
  export declare const Item: ({ context, ...props }: ItemProps & CommonVirtuosoComponentProps) => React.JSX.Element;
14
14
  export declare const Header: ({ context }: CommonVirtuosoComponentProps) => React.JSX.Element;
15
- export declare const EmptyPlaceholder: ({ context }: CommonVirtuosoComponentProps) => React.JSX.Element;
15
+ export declare const EmptyPlaceholder: ({ context }: CommonVirtuosoComponentProps) => React.JSX.Element | null;
16
16
  export declare const messageRenderer: (virtuosoIndex: number, _data: UnknownType, virtuosoContext: VirtuosoContext) => React.JSX.Element | null;
17
17
  export {};
@@ -44,6 +44,10 @@ export const Header = ({ context }) => {
44
44
  };
45
45
  export const EmptyPlaceholder = ({ context }) => {
46
46
  const { EmptyStateIndicator = DefaultEmptyStateIndicator } = useComponentContext('VirtualizedMessageList');
47
+ // prevent showing that there are no messages if there actually are messages (for some reason virtuoso decides to render empty placeholder first, even though it has the totalCount prop > 0)
48
+ if (typeof context?.processedMessages !== 'undefined' &&
49
+ context.processedMessages.length > 0)
50
+ return null;
47
51
  return (React.createElement(React.Fragment, null, EmptyStateIndicator && (React.createElement(EmptyStateIndicator, { listType: context?.threadList ? 'thread' : 'message' }))));
48
52
  };
49
53
  export const messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
@@ -0,0 +1 @@
1
+ export * from './useNotifications';
@@ -0,0 +1 @@
1
+ export * from './useNotifications';
@@ -0,0 +1,2 @@
1
+ import type { Notification } from 'stream-chat';
2
+ export declare const useNotifications: () => Notification[];
@@ -0,0 +1,10 @@
1
+ import { useChatContext } from '../../../context';
2
+ import { useStateStore } from '../../../store';
3
+ const selector = (state) => ({
4
+ notifications: state.notifications,
5
+ });
6
+ export const useNotifications = () => {
7
+ const { client } = useChatContext();
8
+ const result = useStateStore(client.notifications.store, selector);
9
+ return result.notifications;
10
+ };
@@ -0,0 +1 @@
1
+ export * from './hooks';
@@ -0,0 +1 @@
1
+ export * from './hooks';
@@ -105,6 +105,10 @@ export const TextareaComposer = ({ className, closeSuggestionsOnClickOutside, co
105
105
  }
106
106
  }
107
107
  else if (shouldSubmit(event) && textareaRef.current) {
108
+ if (event.key === 'Enter') {
109
+ // prevent adding newline when submitting a message with
110
+ event.preventDefault();
111
+ }
108
112
  handleSubmit();
109
113
  textareaRef.current.selectionEnd = 0;
110
114
  }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { LocalMessage } from 'stream-chat';
3
+ export declare const LegacyThreadContext: React.Context<{
4
+ legacyThread: LocalMessage | undefined;
5
+ }>;
6
+ export declare const useLegacyThreadContext: () => {
7
+ legacyThread: LocalMessage | undefined;
8
+ };
@@ -0,0 +1,3 @@
1
+ import React, { useContext } from 'react';
2
+ export const LegacyThreadContext = React.createContext({ legacyThread: undefined });
3
+ export const useLegacyThreadContext = () => useContext(LegacyThreadContext);
@@ -3,7 +3,6 @@ import type { MessageInputProps } from '../MessageInput';
3
3
  import type { MessageListProps, VirtualizedMessageListProps } from '../MessageList';
4
4
  import type { MessageProps, MessageUIComponentProps } from '../Message/types';
5
5
  import type { MessageActionsArray } from '../Message/utils';
6
- import type { LocalMessage } from 'stream-chat';
7
6
  export type ThreadProps = {
8
7
  /** Additional props for `MessageInput` component: [available props](https://getstream.io/chat/docs/sdk/react/message-input-components/message_input/#props) */
9
8
  additionalMessageInputProps?: MessageInputProps;
@@ -26,9 +25,6 @@ export type ThreadProps = {
26
25
  /** If true, render the `VirtualizedMessageList` instead of the standard `MessageList` component */
27
26
  virtualized?: boolean;
28
27
  };
29
- export declare const useLegacyThreadContext: () => {
30
- legacyThread: LocalMessage | undefined;
31
- };
32
28
  /**
33
29
  * The Thread component renders a parent Message with a list of replies
34
30
  */
@@ -1,5 +1,6 @@
1
- import React, { useContext, useEffect } from 'react';
1
+ import React, { useEffect } from 'react';
2
2
  import clsx from 'clsx';
3
+ import { LegacyThreadContext } from './LegacyThreadContext';
3
4
  import { MESSAGE_ACTIONS } from '../Message';
4
5
  import { MessageInput, MessageInputFlat } from '../MessageInput';
5
6
  import { MessageList, VirtualizedMessageList } from '../MessageList';
@@ -8,8 +9,6 @@ import { ThreadHead as DefaultThreadHead } from '../Thread/ThreadHead';
8
9
  import { useChannelActionContext, useChannelStateContext, useChatContext, useComponentContext, } from '../../context';
9
10
  import { useThreadContext } from '../Threads';
10
11
  import { useStateStore } from '../../store';
11
- const LegacyThreadContext = React.createContext({ legacyThread: undefined });
12
- export const useLegacyThreadContext = () => useContext(LegacyThreadContext);
13
12
  /**
14
13
  * The Thread component renders a parent Message with a list of replies
15
14
  */
@@ -1,3 +1,4 @@
1
1
  export * from './Thread';
2
2
  export * from './ThreadHeader';
3
3
  export { ThreadStart } from './ThreadStart';
4
+ export { useLegacyThreadContext } from './LegacyThreadContext';
@@ -1,3 +1,4 @@
1
1
  export * from './Thread';
2
2
  export * from './ThreadHeader';
3
3
  export { ThreadStart } from './ThreadStart';
4
+ export { useLegacyThreadContext } from './LegacyThreadContext';
@@ -22,6 +22,7 @@ export * from './MessageInput';
22
22
  export * from './MessageList';
23
23
  export * from './MML';
24
24
  export * from './Modal';
25
+ export * from './Notifications';
25
26
  export * from './Poll';
26
27
  export * from './Reactions';
27
28
  export * from './SafeAnchor';
@@ -21,6 +21,7 @@ export * from './MessageInput';
21
21
  export * from './MessageList';
22
22
  export * from './MML';
23
23
  export * from './Modal';
24
+ export * from './Notifications';
24
25
  export * from './Poll';
25
26
  export * from './Reactions';
26
27
  export * from './SafeAnchor';
@@ -1,6 +1,6 @@
1
1
  import type { PropsWithChildren } from 'react';
2
2
  import React from 'react';
3
- import type { AttachmentPreviewListProps, AttachmentProps, AvatarProps, BaseImageProps, ChannelPreviewActionButtonsProps, CooldownTimerProps, CustomMessageActionsListProps, DateSeparatorProps, EmojiSearchIndex, EmptyStateIndicatorProps, EventComponentProps, FixedHeightMessageProps, GiphyPreviewMessageProps, 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, TextareaComposerProps, ThreadHeaderProps, ThreadListItemProps, ThreadListItemUIProps, TimestampProps, TypingIndicatorProps, UnreadMessagesNotificationProps, UnreadMessagesSeparatorProps } from '../components';
3
+ import type { AttachmentPreviewListProps, AttachmentProps, AvatarProps, BaseImageProps, ChannelPreviewActionButtonsProps, CooldownTimerProps, CustomMessageActionsListProps, DateSeparatorProps, EmojiSearchIndex, EmptyStateIndicatorProps, EventComponentProps, FixedHeightMessageProps, GiphyPreviewMessageProps, LoadingIndicatorProps, MessageBouncePromptProps, MessageDeletedProps, MessageInputProps, MessageListNotificationsProps, MessageNotificationProps, MessageOptionsProps, MessageProps, MessageRepliesCountButtonProps, MessageStatusProps, MessageTimestampProps, MessageUIComponentProps, ModalGalleryProps, PinIndicatorProps, PollCreationDialogProps, PollOptionSelectorProps, QuotedMessagePreviewProps, ReactionOptions, ReactionSelectorProps, ReactionsListModalProps, ReactionsListProps, RecordingPermissionDeniedNotificationProps, ReminderNotificationProps, SendButtonProps, StartRecordingAudioButtonProps, StreamedMessageTextProps, TextareaComposerProps, ThreadHeaderProps, ThreadListItemProps, ThreadListItemUIProps, TimestampProps, TypingIndicatorProps, UnreadMessagesNotificationProps, UnreadMessagesSeparatorProps } from '../components';
4
4
  import type { SuggestionItemProps, SuggestionListProps } from '../components/TextareaComposer';
5
5
  import type { SearchProps, SearchResultsPresearchProps, SearchSourceResultListProps } from '../experimental';
6
6
  import type { PropsWithChildrenOnly, UnknownType } from '../types/types';
@@ -65,6 +65,8 @@ export type ComponentContextValue = {
65
65
  MessageBlocked?: React.ComponentType;
66
66
  /** Custom UI component for a deleted message, defaults to and accepts same props as: [MessageDeleted](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageDeleted.tsx) */
67
67
  MessageDeleted?: React.ComponentType<MessageDeletedProps>;
68
+ /** Custom UI component for an indicator that a message is a thread reply sent to channel list: [MessageThreadReplyInChannelButtonIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageIsThreadReplyInChannelButtonIndicator.tsx) */
69
+ MessageIsThreadReplyInChannelButtonIndicator?: React.ComponentType;
68
70
  MessageListMainPanel?: React.ComponentType<PropsWithChildrenOnly>;
69
71
  /** Custom UI component that displays message and connection status notifications in the `MessageList`, defaults to and accepts same props as [DefaultMessageListNotifications](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/MessageListNotifications.tsx) */
70
72
  MessageListNotifications?: React.ComponentType<MessageListNotificationsProps>;
@@ -113,6 +115,7 @@ export type ComponentContextValue = {
113
115
  /** 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) */
114
116
  ReactionsListModal?: React.ComponentType<ReactionsListModalProps>;
115
117
  RecordingPermissionDeniedNotification?: React.ComponentType<RecordingPermissionDeniedNotificationProps>;
118
+ ReminderNotification?: React.ComponentType<ReminderNotificationProps>;
116
119
  /** Custom component to display the search UI, defaults to and accepts same props as: [Search](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/Search.tsx) */
117
120
  Search?: React.ComponentType<SearchProps>;
118
121
  /** Custom component to display the UI where the searched string is entered, defaults to and accepts same props as: [SearchBar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchBar/SearchBar.tsx) */
@@ -137,6 +140,8 @@ export type ComponentContextValue = {
137
140
  SearchSourceResultsLoadingIndicator?: React.ComponentType;
138
141
  /** 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) */
139
142
  SendButton?: React.ComponentType<SendButtonProps>;
143
+ /** Custom UI component checkbox that indicates message to be sent to main channel, defaults to and accepts same props as: [SendToChannelCheckbox](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/SendToChannelCheckbox.tsx) */
144
+ SendToChannelCheckbox?: React.ComponentType;
140
145
  /** Custom UI component button for initiating audio recording, defaults to and accepts same props as: [StartRecordingAudioButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.tsx) */
141
146
  StartRecordingAudioButton?: React.ComponentType<StartRecordingAudioButtonProps>;
142
147
  StopAIGenerationButton?: React.ComponentType<StopAIGenerationButtonProps> | null;