('MessageInputFlat');
+ const { aiState } = useAIState(channel);
+
+ const stopGenerating = useCallback(() => channel?.stopAIResponse(), [channel]);
+
const [
showRecordingPermissionDeniedNotification,
setShowRecordingPermissionDeniedNotification,
@@ -133,6 +140,18 @@ export const MessageInputFlat = <
const recordingEnabled = !!(recordingController.recorder && navigator.mediaDevices); // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303
const isRecording = !!recordingController.recordingState;
+ /* This bit here is needed to make sure that we can get rid of the default behaviour
+ * if need be. Essentially this allows us to pass StopAIGenerationButton={null} and
+ * completely circumvent the default logic if it's not what we want. We need it as a
+ * prop because there is no other trivial way to override the SendMessage button otherwise.
+ */
+ const StopAIGenerationButton =
+ StopAIGenerationButtonOverride === undefined
+ ? DefaultStopAIGenerationButton
+ : StopAIGenerationButtonOverride;
+ const shouldDisplayStopAIGeneration =
+ [AIStates.Thinking, AIStates.Generating].includes(aiState) && !!StopAIGenerationButton;
+
return (
<>
@@ -174,41 +193,45 @@ export const MessageInputFlat = <
{EmojiPicker && }
- {!hideSendButton && (
- <>
- {cooldownRemaining ? (
-
- ) : (
- <>
-
+ ) : (
+ !hideSendButton && (
+ <>
+ {cooldownRemaining ? (
+
- {recordingEnabled && (
-
+ a.type === RecordingAttachmentType.VOICE_RECORDING,
- ))
+ !numberOfUploads &&
+ !text.length &&
+ attachments.length - failedUploadsCount === 0
}
- onClick={() => {
- recordingController.recorder?.start();
- setShowRecordingPermissionDeniedNotification(true);
- }}
+ sendMessage={handleSubmit}
/>
- )}
- >
- )}
- >
+ {recordingEnabled && (
+ a.type === RecordingAttachmentType.VOICE_RECORDING,
+ ))
+ }
+ onClick={() => {
+ recordingController.recorder?.start();
+ setShowRecordingPermissionDeniedNotification(true);
+ }}
+ />
+ )}
+ >
+ )}
+ >
+ )
)}
diff --git a/src/components/MessageInput/StopAIGenerationButton.tsx b/src/components/MessageInput/StopAIGenerationButton.tsx
new file mode 100644
index 000000000..ff566cba3
--- /dev/null
+++ b/src/components/MessageInput/StopAIGenerationButton.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { useTranslationContext } from '../../context';
+
+export type StopAIGenerationButtonProps = React.ComponentProps<'button'>;
+
+export const StopAIGenerationButton = ({ onClick, ...restProps }: StopAIGenerationButtonProps) => {
+ const { t } = useTranslationContext();
+ return (
+
+ );
+};
diff --git a/src/components/index.ts b/src/components/index.ts
index fa79feeaa..e34e16618 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -36,6 +36,7 @@ export * from './UserItem';
export * from './Window';
export * from './Threads';
export * from './ChatView';
+export * from './AIStateIndicator';
export { UploadButton } from './ReactFileUtilities';
export type { UploadButtonProps } from './ReactFileUtilities';
diff --git a/src/context/ComponentContext.tsx b/src/context/ComponentContext.tsx
index ed28c7124..43e35342c 100644
--- a/src/context/ComponentContext.tsx
+++ b/src/context/ComponentContext.tsx
@@ -37,6 +37,7 @@ import {
RecordingPermissionDeniedNotificationProps,
SendButtonProps,
StartRecordingAudioButtonProps,
+ StreamedMessageTextProps,
SuggestionItemProps,
SuggestionListProps,
ThreadHeaderProps,
@@ -54,6 +55,7 @@ import type {
PropsWithChildrenOnly,
UnknownType,
} from '../types/types';
+import type { StopAIGenerationButtonProps } from '../components/MessageInput/StopAIGenerationButton';
export type ComponentContextValue<
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
@@ -164,6 +166,8 @@ export type ComponentContextValue<
SendButton?: React.ComponentType>;
/** 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) */
StartRecordingAudioButton?: React.ComponentType;
+ StopAIGenerationButton?: React.ComponentType | null;
+ StreamedMessageText?: React.ComponentType;
/** Custom UI component that displays thread's parent or other message at the top of the `MessageList`, defaults to and accepts same props as [MessageSimple](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageSimple.tsx) */
ThreadHead?: React.ComponentType>;
/** Custom UI component to display the header of a `Thread`, defaults to and accepts same props as: [DefaultThreadHeader](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Thread/Thread.tsx) */
diff --git a/src/i18n/de.json b/src/i18n/de.json
index af101ab87..dd0477086 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -54,6 +54,7 @@
"File": "Datei",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Datei ist zu groß: {{ size }}, maximale Upload-Größe beträgt {{ limit }}",
"Flag": "Melden",
+ "Generating...": "Generieren...",
"Latest Messages": "Neueste Nachrichten",
"Load more": "Mehr laden",
"Mark as unread": "Als ungelesen markieren",
@@ -108,6 +109,7 @@
"Some of the files will not be accepted": "Einige der Dateien werden nicht akzeptiert",
"Submit": "Absenden",
"Suggest an option": "Eine Option vorschlagen",
+ "Thinking...": "Denken...",
"This message did not meet our content guidelines": "Diese Nachricht entsprach nicht unseren Inhaltsrichtlinien",
"This message was deleted...": "Diese Nachricht wurde gelöscht...",
"Thread": "Thread",
@@ -153,6 +155,7 @@
"aria/Remove attachment": "Anhang entfernen",
"aria/Retry upload": "Upload erneut versuchen",
"aria/Send": "Senden",
+ "aria/Stop AI Generation": "KI-Generierung stoppen",
"ban-command-args": "[@Benutzername] [Text]",
"ban-command-description": "Einen Benutzer verbannen",
"giphy-command-args": "[Text]",
diff --git a/src/i18n/en.json b/src/i18n/en.json
index d7e7523ee..50ae66ace 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -54,6 +54,7 @@
"File": "File",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "File is too large: {{ size }}, maximum upload size is {{ limit }}",
"Flag": "Flag",
+ "Generating...": "Generating...",
"Latest Messages": "Latest Messages",
"Load more": "Load more",
"Mark as unread": "Mark as unread",
@@ -108,6 +109,7 @@
"Some of the files will not be accepted": "Some of the files will not be accepted",
"Submit": "Submit",
"Suggest an option": "Suggest an option",
+ "Thinking...": "Thinking...",
"This message did not meet our content guidelines": "This message did not meet our content guidelines",
"This message was deleted...": "This message was deleted...",
"Thread": "Thread",
@@ -153,6 +155,7 @@
"aria/Remove attachment": "Remove attachment",
"aria/Retry upload": "Retry upload",
"aria/Send": "Send",
+ "aria/Stop AI Generation": "Stop AI Generation",
"live": "live",
"replyCount_one": "1 reply",
"replyCount_other": "{{ count }} replies",
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 24f9e2881..3dc1a1a5e 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -54,6 +54,7 @@
"File": "Archivo",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "El archivo es demasiado grande: {{ size }}, el tamaño máximo de carga es de {{ limit }}",
"Flag": "Marcar",
+ "Generating...": "Generando...",
"Latest Messages": "Últimos mensajes",
"Load more": "Cargar más",
"Mark as unread": "Marcar como no leído",
@@ -110,6 +111,7 @@
"Some of the files will not be accepted": "Algunos archivos no serán aceptados",
"Submit": "Enviar",
"Suggest an option": "Sugerir una opción",
+ "Thinking...": "Pensando...",
"This message did not meet our content guidelines": "Este mensaje no cumple con nuestras directrices de contenido",
"This message was deleted...": "Este mensaje fue eliminado...",
"Thread": "Hilo",
@@ -156,6 +158,7 @@
"aria/Remove attachment": "Eliminar adjunto",
"aria/Retry upload": "Reintentar carga",
"aria/Send": "Enviar",
+ "aria/Stop AI Generation": "Detener generación de IA",
"ban-command-args": "[@usuario] [texto]",
"ban-command-description": "Prohibir a un usuario",
"giphy-command-args": "[texto]",
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index 058873952..d95fad61f 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -54,6 +54,7 @@
"File": "Fichier",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Le fichier est trop volumineux : {{ size }}, la taille maximale de téléchargement est de {{ limit }}",
"Flag": "Signaler",
+ "Generating...": "Génération...",
"Latest Messages": "Derniers messages",
"Load more": "Charger plus",
"Mark as unread": "Marquer comme non lu",
@@ -110,6 +111,7 @@
"Some of the files will not be accepted": "Certains fichiers ne seront pas acceptés",
"Submit": "Envoyer",
"Suggest an option": "Suggérer une option",
+ "Thinking...": "Réflexion...",
"This message did not meet our content guidelines": "Ce message ne respecte pas nos directives de contenu",
"This message was deleted...": "Ce message a été supprimé...",
"Thread": "Fil de discussion",
@@ -156,6 +158,7 @@
"aria/Remove attachment": "Supprimer la pièce jointe",
"aria/Retry upload": "Réessayer le téléchargement",
"aria/Send": "Envoyer",
+ "aria/Stop AI Generation": "Arrêter la génération d'IA",
"ban-command-args": "[@nomdutilisateur] [texte]",
"ban-command-description": "Bannir un utilisateur",
"giphy-command-args": "[texte]",
diff --git a/src/i18n/hi.json b/src/i18n/hi.json
index 0dbe94f7a..9bf621872 100644
--- a/src/i18n/hi.json
+++ b/src/i18n/hi.json
@@ -55,6 +55,7 @@
"File": "फ़ाइल",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "फ़ाइल बहुत बड़ी है: {{ size }}, अधिकतम अपलोड साइज़ {{ limit }} है",
"Flag": "फ्लैग करे",
+ "Generating...": "बना रहा है...",
"Latest Messages": "नवीनतम संदेश",
"Load more": "और लोड करें",
"Mark as unread": "अपठित चिह्नित करें",
@@ -109,6 +110,7 @@
"Some of the files will not be accepted": "कुछ फ़ाइलें स्वीकार नहीं की जाएंगी",
"Submit": "जमा करें",
"Suggest an option": "एक विकल्प सुझाव दें",
+ "Thinking...": "सोच रहा है...",
"This message did not meet our content guidelines": "यह संदेश हमारे सामग्री दिशानिर्देशों के अनुरूप नहीं था",
"This message was deleted...": "मैसेज हटा दिया गया",
"Thread": "रिप्लाई थ्रेड",
@@ -154,6 +156,7 @@
"aria/Remove attachment": "संलग्नक हटाएं",
"aria/Retry upload": "अपलोड पुनः प्रयास करें",
"aria/Send": "भेजें",
+ "aria/Stop AI Generation": "एआई जनरेशन रोकें",
"ban-command-args": "[@उपयोगकर्तनाम] [पाठ]",
"ban-command-description": "एक उपयोगकर्ता को प्रतिषेधित करें",
"giphy-command-args": "[पाठ]",
diff --git a/src/i18n/it.json b/src/i18n/it.json
index aa2b16c40..d7a690e3f 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -54,6 +54,7 @@
"File": "File",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Il file è troppo grande: {{ size }}, la dimensione massima di caricamento è {{ limit }}",
"Flag": "Segnala",
+ "Generating...": "Generando...",
"Latest Messages": "Ultimi messaggi",
"Load more": "Carica di più",
"Mark as unread": "Contrassegna come non letto",
@@ -110,6 +111,7 @@
"Some of the files will not be accepted": "Alcuni dei file non saranno accettati",
"Submit": "Invia",
"Suggest an option": "Suggerisci un'opzione",
+ "Thinking...": "Pensando...",
"This message did not meet our content guidelines": "Questo messaggio non soddisfa le nostre linee guida sui contenuti",
"This message was deleted...": "Questo messaggio è stato cancellato...",
"Thread": "Discussione",
@@ -156,6 +158,7 @@
"aria/Remove attachment": "Rimuovi allegato",
"aria/Retry upload": "Riprova caricamento",
"aria/Send": "Invia",
+ "aria/Stop AI Generation": "Interrompi generazione IA",
"ban-command-args": "[@nomeutente] [testo]",
"ban-command-description": "Vietare un utente",
"giphy-command-args": "[testo]",
diff --git a/src/i18n/ja.json b/src/i18n/ja.json
index c2ca6ef48..6c8a1cdc4 100644
--- a/src/i18n/ja.json
+++ b/src/i18n/ja.json
@@ -54,6 +54,7 @@
"File": "ファイル",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "ファイルが大きすぎます:{{ size }}、最大アップロードサイズは{{ limit }}です",
"Flag": "フラグ",
+ "Generating...": "生成中...",
"Latest Messages": "最新のメッセージ",
"Load more": "もっと読み込む",
"Mark as unread": "未読としてマーク",
@@ -106,6 +107,7 @@
"Some of the files will not be accepted": "一部のファイルは受け付けられません",
"Submit": "送信",
"Suggest an option": "オプションを提案",
+ "Thinking...": "考え中...",
"This message did not meet our content guidelines": "このメッセージはコンテンツガイドラインに適合していません",
"This message was deleted...": "このメッセージは削除されました...",
"Thread": "スレッド",
@@ -150,6 +152,7 @@
"aria/Remove attachment": "添付ファイルを削除",
"aria/Retry upload": "アップロードを再試行",
"aria/Send": "送信",
+ "aria/Stop AI Generation": "AI生成を停止",
"ban-command-args": "[@ユーザ名] [テキスト]",
"ban-command-description": "ユーザーを禁止する",
"giphy-command-args": "[テキスト]",
diff --git a/src/i18n/ko.json b/src/i18n/ko.json
index 8d01cbc4c..d49781ffb 100644
--- a/src/i18n/ko.json
+++ b/src/i18n/ko.json
@@ -54,6 +54,7 @@
"File": "파일",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "파일이 너무 큽니다: {{ size }}, 최대 업로드 크기는 {{ limit }}입니다",
"Flag": "플래그",
+ "Generating...": "생성 중...",
"Latest Messages": "최신 메시지",
"Load more": "더 불러오기",
"Mark as unread": "읽지 않음으로 표시",
@@ -106,6 +107,7 @@
"Some of the files will not be accepted": "일부 파일은 허용되지 않을 수 있습니다",
"Submit": "제출",
"Suggest an option": "옵션 제안",
+ "Thinking...": "생각 중...",
"This message did not meet our content guidelines": "이 메시지는 콘텐츠 가이드라인을 충족하지 않습니다.",
"This message was deleted...": "이 메시지는 삭제되었습니다...",
"Thread": "스레드",
@@ -150,6 +152,7 @@
"aria/Remove attachment": "첨부 파일 제거",
"aria/Retry upload": "업로드 다시 시도",
"aria/Send": "보내기",
+ "aria/Stop AI Generation": "AI 생성 중지",
"ban-command-args": "[@사용자이름] [텍스트]",
"ban-command-description": "사용자를 차단",
"giphy-command-args": "[텍스트]",
diff --git a/src/i18n/nl.json b/src/i18n/nl.json
index 744073fb4..be8ad0c4b 100644
--- a/src/i18n/nl.json
+++ b/src/i18n/nl.json
@@ -54,6 +54,7 @@
"File": "Bestand",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Bestand is te groot: {{ size }}, maximale uploadgrootte is {{ limit }}",
"Flag": "Markeer",
+ "Generating...": "Genereren...",
"Latest Messages": "Laatste berichten",
"Load more": "Meer laden",
"Mark as unread": "Markeren als ongelezen",
@@ -108,6 +109,7 @@
"Some of the files will not be accepted": "Sommige bestanden zullen niet worden geaccepteerd",
"Submit": "Versturen",
"Suggest an option": "Stel een optie voor",
+ "Thinking...": "Denken...",
"This message did not meet our content guidelines": "Dit bericht voldeed niet aan onze inhoudsrichtlijnen",
"This message was deleted...": "Dit bericht was verwijderd",
"Thread": "Draadje",
@@ -153,6 +155,7 @@
"aria/Remove attachment": "Bijlage verwijderen",
"aria/Retry upload": "Upload opnieuw proberen",
"aria/Send": "Verzenden",
+ "aria/Stop AI Generation": "AI-generatie stoppen",
"ban-command-args": "[@gebruikersnaam] [tekst]",
"ban-command-description": "Een gebruiker verbannen",
"giphy-command-args": "[tekst]",
diff --git a/src/i18n/pt.json b/src/i18n/pt.json
index c3e564c72..92babbe86 100644
--- a/src/i18n/pt.json
+++ b/src/i18n/pt.json
@@ -54,6 +54,7 @@
"File": "Arquivo",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "O arquivo é muito grande: {{ size }}, o tamanho máximo de upload é {{ limit }}",
"Flag": "Reportar",
+ "Generating...": "Gerando...",
"Latest Messages": "Mensagens mais recentes",
"Load more": "Carregar mais",
"Mark as unread": "Marcar como não lida",
@@ -110,6 +111,7 @@
"Some of the files will not be accepted": "Alguns arquivos não serão aceitos",
"Submit": "Enviar",
"Suggest an option": "Sugerir uma opção",
+ "Thinking...": "Pensando...",
"This message did not meet our content guidelines": "Esta mensagem não corresponde às nossas diretrizes de conteúdo",
"This message was deleted...": "Esta mensagem foi excluída...",
"Thread": "Fio",
@@ -156,6 +158,7 @@
"aria/Remove attachment": "Remover anexo",
"aria/Retry upload": "Tentar upload novamente",
"aria/Send": "Enviar",
+ "aria/Stop AI Generation": "Parar geração de IA",
"ban-command-args": "[@nomedeusuário] [texto]",
"ban-command-description": "Banir um usuário",
"giphy-command-args": "[texto]",
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index 7aa917ff8..cc9c8b379 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -54,6 +54,7 @@
"File": "Файл",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Файл слишком большой: {{ size }}, максимальный размер загрузки составляет {{ limit }}",
"Flag": "Пожаловаться",
+ "Generating...": "Генерирую...",
"Latest Messages": "Последние сообщения",
"Load more": "Загрузить больше",
"Mark as unread": "Отметить как непрочитанное",
@@ -112,6 +113,7 @@
"Some of the files will not be accepted": "Некоторые файлы не будут приняты",
"Submit": "Отправить",
"Suggest an option": "Предложить вариант",
+ "Thinking...": "Думаю...",
"This message did not meet our content guidelines": "Сообщение не соответствует правилам",
"This message was deleted...": "Сообщение было удалено...",
"Thread": "Ветка",
@@ -159,6 +161,7 @@
"aria/Remove attachment": "Удалить вложение",
"aria/Retry upload": "Повторить загрузку",
"aria/Send": "Отправить",
+ "aria/Stop AI Generation": "Остановить генерацию ИИ",
"ban-command-args": "[@имяпользователя] [текст]",
"ban-command-description": "Заблокировать пользователя",
"giphy-command-args": "[текст]",
diff --git a/src/i18n/tr.json b/src/i18n/tr.json
index 717febc3d..05cc76a70 100644
--- a/src/i18n/tr.json
+++ b/src/i18n/tr.json
@@ -54,6 +54,7 @@
"File": "Dosya",
"File is too large: {{ size }}, maximum upload size is {{ limit }}": "Dosya çok büyük: {{ size }}, maksimum yükleme boyutu {{ limit }}",
"Flag": "Bayrak",
+ "Generating...": "Oluşturuluyor...",
"Latest Messages": "Son Mesajlar",
"Load more": "Daha fazla yükle",
"Mark as unread": "Okunmamış olarak işaretle",
@@ -108,6 +109,7 @@
"Some of the files will not be accepted": "Bazı dosyalar kabul edilmeyecek",
"Submit": "Gönder",
"Suggest an option": "Bir seçenek önerin",
+ "Thinking...": "Düşünüyor...",
"This message did not meet our content guidelines": "Bu mesaj içerik yönergelerimize uygun değil",
"This message was deleted...": "Bu mesaj silindi...",
"Thread": "Konu",
@@ -153,6 +155,7 @@
"aria/Remove attachment": "Eki kaldır",
"aria/Retry upload": "Yüklemeyi Tekrar Dene",
"aria/Send": "Gönder",
+ "aria/Stop AI Generation": "Yapay Zeka Üretimini Durdur",
"ban-command-args": "[@kullanıcıadı] [metin]",
"ban-command-description": "Bir kullanıcıyı yasakla",
"giphy-command-args": "[metin]",
diff --git a/yarn.lock b/yarn.lock
index fa9da7177..ef8e167ee 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2356,10 +2356,10 @@
crypto-browserify "^3.11.0"
process-es6 "^0.11.2"
-"@stream-io/stream-chat-css@^5.4.0":
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-5.4.0.tgz#c0da423bb62059cf5ff8820b057aaf8b073782dc"
- integrity sha512-uVjksyycM999L9kMLOuLfSyjcSPpztF4Y4ZMTWEuPL87qLHCr1lRxytGc9EWtgcdYuohj3UcLtOj5hUkpWU06Q==
+"@stream-io/stream-chat-css@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-5.5.0.tgz#224165d7db64891e6f45d46462f5e4dbe69a0ec1"
+ integrity sha512-6ZiJljhz8+AVOFUeKNk3UHtenQuvhLqaRPAf13C+e7/Jp8cMXrdg7OPf/ShcbvESNlTUWAyzW3nje507TWDnvw==
"@stream-io/transliterate@^1.5.5":
version "1.5.5"
@@ -12200,10 +12200,10 @@ statuses@2.0.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-stream-chat@^8.45.0:
- version "8.45.0"
- resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.45.0.tgz#bbb18ea897138dabb5ccd045a40958ec7242923c"
- integrity sha512-re6GPh4F50ksB5/5GG5FtNAji+ZFTmIcLBIUhkGlnCwNaM8Ub59jcoI21Rtf/51+Nwrcitld2MzzlY49RlkwOA==
+stream-chat@^8.46.0:
+ version "8.46.0"
+ resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.46.0.tgz#416b325e05b144d0937a3527d1e622463113d605"
+ integrity sha512-HQVCRVldrfQFAvsBOHiHR0TKYf+wpsg/cAzRojeZY+buy1vG6eoqk09h6Fl4k2eG3zFLoA0G9W6o7o45jyFE1g==
dependencies:
"@babel/runtime" "^7.16.3"
"@types/jsonwebtoken" "~9.0.0"