Skip to content

fix(ai-components): replace SpokenMessageText with a standalone useHeardText hook - #3344

Merged
oliverlaz merged 1 commit into
release-v14from
refactor/standalone-use-heard-text
Oct 22, 2026
Merged

oliverlaz merged 1 commit into
release-v14from
refactor/standalone-use-heard-text

Conversation

@oliverlaz

@oliverlaz oliverlaz commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

🎯 Goal

stream-chat-react/ai-components must work standalone, without the core SDK. SpokenMessageText (added in #3343) rendered through the core Message components (MessageText, the StreamedMessageText fallback, and the message and channel contexts), so it doesn't belong in the plugin. This keeps only the utility hook. The drop-in component becomes a recipe in the docs (GetStream/getstream.io#761).

This is the last commit of #3343 (57e84ca2e), which was pushed just before the PR was merged and didn't make it in.

⚠️ 14.14.0 already shipped SpokenMessageText, SpokenTextProvider, SpokenTextContext and useSpokenTextContext (with the message-based useHeardText) from stream-chat-react/ai-components. This PR removes those exports and changes useHeardText's signature, and ships as a fix (14.14.1): they were released minutes ago without docs, so it is treated as correcting a mistaken release rather than a major change.

🛠 Implementation details

  • Removed: SpokenMessageText, SpokenTextProvider, SpokenTextContext, useSpokenTextContext, their types and their tests.
  • useHeardText now lives in src/plugins/AIComponents/hooks/useHeardText.ts. Its only import is react; I checked this in the source, the built ESM and the CJS bundle.
    • useHeardText({ text, heard, subscribe?, generating?, live? }) => { heardText, isPaced, skip }.
    • heard(now) returns { chars, done } | undefined, where chars counts Unicode code points.
    • heard and subscribe are read through refs, so new function identities on each render don't restart pacing.
    • Types: HeardTextProgress, HeardTextFunction, HeardTextSubscribe, UseHeardTextParams, UseHeardTextResult.
  • Behaviour:
    • Reveals the first floor(chars) code points and never goes backwards; surrogate pairs are never split.
    • Ticks on requestAnimationFrame only while paced and not done.
    • The full text appears once done && !generating, when live is false, or after skip().
    • Falls back to the full text when unpaced.
  • README: documents the hook with a plain-element example and points to the docs for the drop-in. The VoiceWave/VoiceGlow docs from feat(ai-components): add VoiceWave and VoiceGlow voice-agent visualizations #3339 are untouched.
  • Checks: 21 renderHook tests. Full suite 3175/3175 passes, as do yarn types, yarn lint, yarn build and validate-cjs / validate-esm / validate-entry-isolation. In the built output, ai-components exports useHeardText and nothing Spoken*, and the main entry exports neither.
  • Verified end to end in a Next.js app against a local Stream Agents router, using the docs' SpokenMessageText recipe on this hook: each voice reply is revealed as its audio plays.

🎨 UI Changes

None.

…useHeardText hook

ai-components must work without the core SDK, and SpokenMessageText
rendered through the core Message components. Remove SpokenMessageText,
SpokenTextProvider, SpokenTextContext and useSpokenTextContext, and keep
only useHeardText, which now depends on React alone: it takes the text,
a heard(now) progress function (Unicode code points) and an optional
subscribe, generating and live, and returns the heard text, whether it
is paced, and skip(). A drop-in for the StreamedMessageText slot is a
recipe in the docs.
@coderabbitai

coderabbitai Bot commented Oct 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 377daf07-cf15-4a33-a96c-d2bdef9c3de3

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@oliverlaz oliverlaz changed the title refactor(ai-components): replace SpokenMessageText with a standalone useHeardText hook fix(ai-components): replace SpokenMessageText with a standalone useHeardText hook Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Size Change: -4.39 kB (-0.37%)

Total Size: 1.18 MB

📦 View Changed
Filename Size Change
dist/cjs/ai-components.js 27.4 kB -1.23 kB (-4.31%)
dist/cjs/channel-detail.js 23.2 kB +50 B (+0.22%)
dist/cjs/Chart.js 1.09 kB +7 B (+0.65%)
dist/cjs/emojis.js 2.69 kB +7 B (+0.26%)
dist/cjs/index.js 251 kB +3.56 kB (+1.44%)
dist/cjs/mentionsMarkdownPlugin.js 0 B -1.89 kB (removed) 🏆
dist/cjs/NotificationList.js 67 kB +3.37 kB (+5.29%) 🔍
dist/cjs/plusPlusToEmphasis.js 0 B -3.54 kB (removed) 🏆
dist/cjs/ReactPlayerWrapper.js 547 B +8 B (+1.48%)
dist/cjs/useChannelHeaderOnlineStatus.js 8.82 kB +2.34 kB (+36.22%) 🚨
dist/cjs/useInertWhenHidden.js 57.3 kB +1.69 kB (+3.04%)
dist/cjs/useReducedMotionPreference.js 1.2 kB -4.05 kB (-77.16%) 🏆
dist/cjs/useStableCallback.js 902 B +902 B (new file) 🆕
dist/cjs/useStableId.js 24.7 kB +24.7 kB (new file) 🆕
dist/cjs/utils.js 0 B -28.1 kB (removed) 🏆
dist/es/ai-components.mjs 298 B -48 B (-13.87%) 👏
dist/es/plugins/AIComponents/hooks/useHeardText.mjs 2.07 kB +2.07 kB (new file) 🆕
dist/es/plugins/AIComponents/SpokenMessageText/hooks/useHeardText.mjs 0 B -1.95 kB (removed) 🏆
dist/es/plugins/AIComponents/SpokenMessageText/SpokenMessageText.mjs 0 B -1.45 kB (removed) 🏆
dist/es/plugins/AIComponents/SpokenMessageText/SpokenTextContext.mjs 0 B -779 B (removed) 🏆
ℹ️ View Unchanged
Filename Size
dist/cjs/audioProcessing.js 1.74 kB
dist/cjs/chartTypes.js 584 B
dist/cjs/mp3-encoder.js 814 B
dist/css/ai-components.css 4.58 kB
dist/css/channel-detail.css 2.84 kB
dist/css/emoji-picker.css 178 B
dist/css/emoji-replacement.css 456 B
dist/css/index.css 42.1 kB
dist/es/_virtual/_rolldown/runtime.mjs 252 B
dist/es/a11y/a11yUtils.mjs 630 B
dist/es/a11y/accessibleLabel.mjs 721 B
dist/es/a11y/hooks/useAriaIdentifiers.mjs 540 B
dist/es/a11y/hooks/useListboxKeyboardNavigation.mjs 1.52 kB
dist/es/a11y/hooks/useResolvedModalAriaProps.mjs 497 B
dist/es/a11y/hooks/useVirtualizedListboxKeyboardNavigation.mjs 1.39 kB
dist/es/channel-detail.mjs 802 B
dist/es/components/Accessibility/AriaLiveAnnouncerProvider.mjs 1.65 kB
dist/es/components/Accessibility/AriaLiveOutlet.mjs 964 B
dist/es/components/Accessibility/AriaLiveOutletContext.mjs 194 B
dist/es/components/Accessibility/hooks/useAudioPlaybackChangeAnnouncements.mjs 425 B
dist/es/components/Accessibility/hooks/useFocusReturn.mjs 916 B
dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs 1.19 kB
dist/es/components/Accessibility/hooks/useInertWhenHidden.mjs 1.62 kB
dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs 3.02 kB
dist/es/components/Accessibility/NotificationAnnouncer.mjs 1.4 kB
dist/es/components/Accessibility/scheduling/useAnnouncementQueue.mjs 793 B
dist/es/components/Accessibility/scheduling/useDebouncedAnnounce.mjs 1.68 kB
dist/es/components/Accessibility/scheduling/useSettledAnnouncement.mjs 1.84 kB
dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs 300 B
dist/es/components/AIStateIndicator/AIStateIndicator.mjs 458 B
dist/es/components/AIStateIndicator/hooks/useAIState.mjs 616 B
dist/es/components/Attachment/attachment-sizing.mjs 1.05 kB
dist/es/components/Attachment/Attachment.mjs 971 B
dist/es/components/Attachment/AttachmentActions.mjs 1.59 kB
dist/es/components/Attachment/AttachmentContainer.mjs 2.47 kB
dist/es/components/Attachment/Audio.mjs 1.48 kB
dist/es/components/Attachment/audioSampling.mjs 1.29 kB
dist/es/components/Attachment/components/AttachmentUploadProgressIndicator.mjs 825 B
dist/es/components/Attachment/components/DownloadButton.mjs 669 B
dist/es/components/Attachment/components/FileSizeIndicator.mjs 436 B
dist/es/components/Attachment/FileAttachment.mjs 644 B
dist/es/components/Attachment/Geolocation.mjs 1.07 kB
dist/es/components/Attachment/Giphy.mjs 1.03 kB
dist/es/components/Attachment/giphyAccessibility.mjs 481 B
dist/es/components/Attachment/hooks/useAttachmentUploadState.mjs 2.31 kB
dist/es/components/Attachment/hooks/useLocalVideoDimensions.mjs 1.43 kB
dist/es/components/Attachment/icons.mjs 411 B
dist/es/components/Attachment/Image.mjs 346 B
dist/es/components/Attachment/LinkPreview/Card.mjs 1.03 kB
dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs 402 B
dist/es/components/Attachment/ModalGallery.mjs 1.87 kB
dist/es/components/Attachment/UnsupportedAttachment.mjs 403 B
dist/es/components/Attachment/utils.mjs 740 B
dist/es/components/Attachment/VideoAttachment.mjs 936 B
dist/es/components/Attachment/VisibilityDisclaimer.mjs 354 B
dist/es/components/Attachment/VoiceRecording.mjs 1.75 kB
dist/es/components/AudioPlayback/AudioPlayer.mjs 3.58 kB
dist/es/components/AudioPlayback/AudioPlayerPool.mjs 1.01 kB
dist/es/components/AudioPlayback/components/DurationDisplay.mjs 596 B
dist/es/components/AudioPlayback/components/formatTime.mjs 339 B
dist/es/components/AudioPlayback/components/keyboardSeek.mjs 524 B
dist/es/components/AudioPlayback/components/PlaybackRateButton.mjs 300 B
dist/es/components/AudioPlayback/components/ProgressBar.mjs 819 B
dist/es/components/AudioPlayback/components/progressBarA11y.mjs 460 B
dist/es/components/AudioPlayback/components/useInteractiveProgressBar.mjs 1.07 kB
dist/es/components/AudioPlayback/components/WaveProgressBar.mjs 1.72 kB
dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs 613 B
dist/es/components/AudioPlayback/WithAudioPlayback.mjs 1 kB
dist/es/components/Avatar/Avatar.mjs 1.02 kB
dist/es/components/Avatar/AvatarStack.mjs 669 B
dist/es/components/Avatar/ChannelAvatar.mjs 344 B
dist/es/components/Avatar/GroupAvatar.mjs 868 B
dist/es/components/Avatar/utils.mjs 183 B
dist/es/components/Badge/Badge.mjs 509 B
dist/es/components/Badge/MediaBadge.mjs 426 B
dist/es/components/BaseImage/BaseImage.mjs 682 B
dist/es/components/BaseImage/ImagePlaceholder.mjs 397 B
dist/es/components/BaseImage/toBaseImageDescriptors.mjs 547 B
dist/es/components/Button/Button.mjs 529 B
dist/es/components/Button/PlayButton.mjs 475 B
dist/es/components/Channel/Channel.mjs 7.14 kB
dist/es/components/Channel/channelState.mjs 978 B
dist/es/components/Channel/constants.mjs 156 B
dist/es/components/Channel/hooks/useChannelContainerClasses.mjs 391 B
dist/es/components/Channel/hooks/useCreateChannelStateContext.mjs 1.1 kB
dist/es/components/Channel/hooks/useCreateTypingContext.mjs 229 B
dist/es/components/Channel/hooks/useEditMessageHandler.mjs 297 B
dist/es/components/Channel/hooks/useIsMounted.mjs 235 B
dist/es/components/Channel/hooks/useMentionsHandlers.mjs 448 B
dist/es/components/Channel/utils.mjs 2.12 kB
dist/es/components/ChannelHeader/ChannelHeader.mjs 927 B
dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs 651 B
dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs 599 B
dist/es/components/ChannelList/ChannelList.mjs 2.29 kB
dist/es/components/ChannelList/ChannelListHeader.mjs 380 B
dist/es/components/ChannelList/ChannelListUI.mjs 607 B
dist/es/components/ChannelList/hooks/useChannelListKeyboardNavigation.mjs 1.25 kB
dist/es/components/ChannelList/hooks/useChannelListShape.mjs 2.14 kB
dist/es/components/ChannelList/hooks/useChannelMembershipState.mjs 262 B
dist/es/components/ChannelList/hooks/useChannelMembersState.mjs 300 B
dist/es/components/ChannelList/hooks/useConnectionRecoveredListener.mjs 306 B
dist/es/components/ChannelList/hooks/usePaginatedChannels.mjs 1.59 kB
dist/es/components/ChannelList/hooks/useSelectedChannelState.mjs 403 B
dist/es/components/ChannelList/utils.mjs 1.05 kB
dist/es/components/ChannelListItem/ChannelListItem.mjs 1.3 kB
dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs 2.46 kB
dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs 505 B
dist/es/components/ChannelListItem/ChannelListItemUI.mjs 1.51 kB
dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs 817 B
dist/es/components/ChannelListItem/hooks/useChannelPreviewInfo.mjs 624 B
dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs 671 B
dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs 269 B
dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs 830 B
dist/es/components/ChannelListItem/utils.a11y.mjs 2.37 kB
dist/es/components/ChannelListItem/utils.mjs 2.59 kB
dist/es/components/Chat/Chat.mjs 1.25 kB
dist/es/components/Chat/hooks/useChannelsQueryState.mjs 250 B
dist/es/components/Chat/hooks/useChat.mjs 1.05 kB
dist/es/components/Chat/hooks/useCreateChatClient.mjs 533 B
dist/es/components/Chat/hooks/useCreateChatContext.mjs 539 B
dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs 677 B
dist/es/components/Chat/hooks/useSplitActionSet.mjs 319 B
dist/es/components/ChatView/a11y.utility.mjs 291 B
dist/es/components/ChatView/mjs 2.24 kB
dist/es/components/DateSeparator/DateSeparator.mjs 575 B
dist/es/components/Dialog/components/Alert.mjs 647 B
dist/es/components/Dialog/components/Callout.mjs 819 B
dist/es/components/Dialog/components/ContextMenu.mjs 5.49 kB
dist/es/components/Dialog/components/Prompt.mjs 1.07 kB
dist/es/components/Dialog/components/Viewer.mjs 963 B
dist/es/components/Dialog/hooks/useDialog.mjs 688 B
dist/es/components/Dialog/hooks/usePopoverPosition.mjs 839 B
dist/es/components/Dialog/service/DialogAnchor.mjs 2.06 kB
dist/es/components/Dialog/service/DialogManager.mjs 1.29 kB
dist/es/components/Dialog/service/DialogPortal.mjs 1.02 kB
dist/es/components/DragAndDrop/DragAndDropContainer.mjs 1.16 kB
dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs 547 B
dist/es/components/EventComponent/EventComponent.mjs 462 B
dist/es/components/FileIcon/FileIconSet.mjs 6.71 kB
dist/es/components/FileIcon/iconMap.mjs 512 B
dist/es/components/FileIcon/mimeTypes.mjs 1.73 kB
dist/es/components/FileIcon/mjs 599 B
dist/es/components/Form/FieldError.mjs 261 B
dist/es/components/Form/hooks/useFormState.mjs 550 B
dist/es/components/Form/mjs 1.55 kB
dist/es/components/Form/NumericInput.mjs 1.33 kB
dist/es/components/Form/SwitchField.mjs 1.53 kB
dist/es/components/Form/TextInput.mjs 1.3 kB
dist/es/components/Form/TextInputFieldSet.mjs 376 B
dist/es/components/Gallery/Gallery.mjs 654 B
dist/es/components/Gallery/GalleryContext.mjs 422 B
dist/es/components/Gallery/GalleryHeader.mjs 939 B
dist/es/components/Gallery/GalleryUI.mjs 2.02 kB
dist/es/components/Icons/createIcon.mjs 429 B
dist/es/components/Icons/icons.mjs 19.3 kB
dist/es/components/Icons/mjs 378 B
dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs 591 B
dist/es/components/InfiniteScrollPaginator/InfiniteScroll.mjs 1.34 kB
dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs 1.03 kB
dist/es/components/ListItemLayout/ListItemLayout.mjs 707 B
dist/es/components/Loading/AttachmentUploadedSizeIndicator.mjs 634 B
dist/es/components/Loading/LoadingChannel.mjs 639 B
dist/es/components/Loading/LoadingChannels.mjs 377 B
dist/es/components/Loading/LoadingErrorIndicator.mjs 395 B
dist/es/components/Loading/LoadingIndicator.mjs 286 B
dist/es/components/Loading/progress-indicators.mjs 714 B
dist/es/components/Loading/UploadedSizeIndicator.mjs 413 B
dist/es/components/Loading/UploadProgressIndicator.mjs 366 B
dist/es/components/LoadMore/LoadMoreButton.mjs 492 B
dist/es/components/LoadMore/LoadMorePaginator.mjs 378 B
dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs 631 B
dist/es/components/Location/ShareLocationDialog.mjs 2.2 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs 621 B
dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs 1 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs 1.04 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs 989 B
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs 909 B
dist/es/components/MediaRecorder/AudioRecorder/hooks/useTimeElapsed.mjs 434 B
dist/es/components/MediaRecorder/AudioRecorder/recordingStateIdentity.mjs 227 B
dist/es/components/MediaRecorder/AudioRecorder/RecordingTimer.mjs 322 B
dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs 1.05 kB
dist/es/components/MediaRecorder/classes/BrowserPermission.mjs 749 B
dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs 2.53 kB
dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs 962 B
dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs 353 B
dist/es/components/MediaRecorder/observable/mjs 186 B
dist/es/components/MediaRecorder/observable/Observable.mjs 310 B
dist/es/components/MediaRecorder/observable/Subject.mjs 548 B
dist/es/components/MediaRecorder/observable/Subscription.mjs 206 B
dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs 481 B
dist/es/components/MediaRecorder/transcode/audioProcessing.mjs 758 B
dist/es/components/MediaRecorder/transcode/index.mjs 351 B
dist/es/components/MediaRecorder/transcode/wav.mjs 1.33 kB
dist/es/components/Message/emojiRegex.mjs 450 B
dist/es/components/Message/hooks/useActionHandler.mjs 596 B
dist/es/components/Message/hooks/useDeleteHandler.mjs 363 B
dist/es/components/Message/hooks/useFlagHandler.mjs 382 B
dist/es/components/Message/hooks/useMarkUnreadHandler.mjs 324 B
dist/es/components/Message/hooks/useMentionsHandler.mjs 455 B
dist/es/components/Message/hooks/useMessageReminder.mjs 300 B
dist/es/components/Message/hooks/useMessageTextStreaming.mjs 783 B
dist/es/components/Message/hooks/useMuteHandler.mjs 433 B
dist/es/components/Message/hooks/useOpenThreadHandler.mjs 333 B
dist/es/components/Message/hooks/usePinHandler.mjs 476 B
dist/es/components/Message/hooks/useReactionHandler.mjs 1.36 kB
dist/es/components/Message/hooks/useReactionsFetcher.mjs 492 B
dist/es/components/Message/hooks/useRetryHandler.mjs 266 B
dist/es/components/Message/hooks/useUserHandler.mjs 255 B
dist/es/components/Message/hooks/useUserRole.mjs 718 B
dist/es/components/Message/Message.mjs 1.81 kB
dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs 1.1 kB
dist/es/components/Message/MessageBlocked.mjs 444 B
dist/es/components/Message/MessageBubble.mjs 246 B
dist/es/components/Message/MessageDeletedBubble.mjs 399 B
dist/es/components/Message/MessageEditedIndicator.mjs 692 B
dist/es/components/Message/MessageRepliesCountButton.mjs 744 B
dist/es/components/Message/MessageStatus.mjs 1.25 kB
dist/es/components/Message/MessageText.mjs 1.62 kB
dist/es/components/Message/MessageTimestamp.mjs 361 B
dist/es/components/Message/MessageTranslationIndicator.mjs 866 B
dist/es/components/Message/MessageUI.mjs 2.77 kB
dist/es/components/Message/PinIndicator.mjs 610 B
dist/es/components/Message/QuotedMessage.mjs 424 B
dist/es/components/Message/ReminderNotification.mjs 947 B
dist/es/components/Message/renderText/componentRenderers/Anchor.mjs 406 B
dist/es/components/Message/renderText/componentRenderers/Emoji.mjs 246 B
dist/es/components/Message/renderText/componentRenderers/Mention.mjs 307 B
dist/es/components/Message/renderText/regex.mjs 440 B
dist/es/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.mjs 338 B
dist/es/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.mjs 1.47 kB
dist/es/components/Message/renderText/remarkPlugins/htmlToTextPlugin.mjs 243 B
dist/es/components/Message/renderText/remarkPlugins/imageToLink.mjs 591 B
dist/es/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.mjs 824 B
dist/es/components/Message/renderText/remarkPlugins/plusPlusToEmphasis.mjs 962 B
dist/es/components/Message/renderText/remarkPlugins/remarkIgnoreMarkdown.mjs 337 B
dist/es/components/Message/renderText/renderText.mjs 1.58 kB
dist/es/components/Message/StreamedMessageText.mjs 484 B
dist/es/components/Message/Timestamp.mjs 517 B
dist/es/components/Message/utils.mjs 2.65 kB
dist/es/components/MessageActions/DeleteMessageAlert.mjs 581 B
dist/es/components/MessageActions/DownloadSubmenu.mjs 812 B
dist/es/components/MessageActions/downloadUtils.mjs 980 B
dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs 1.23 kB
dist/es/components/MessageActions/MessageActions.mjs 3.9 kB
dist/es/components/MessageActions/QuickMessageActionButton.mjs 359 B
dist/es/components/MessageActions/RemindMeSubmenu.mjs 997 B
dist/es/components/MessageBounce/MessageBounceModal.mjs 348 B
dist/es/components/MessageBounce/MessageBouncePrompt.mjs 772 B
dist/es/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.mjs 1.19 kB
dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs 1.75 kB
dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs 1.05 kB
dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs 715 B
dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs 1.33 kB
dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs 529 B
dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs 884 B
dist/es/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.mjs 548 B
dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs 3.23 kB
dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs 1.29 kB
dist/es/components/MessageComposer/CommandChip.mjs 550 B
dist/es/components/MessageComposer/CooldownTimer.mjs 294 B
dist/es/components/MessageComposer/EditedMessagePreview.mjs 318 B
dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs 405 B
dist/es/components/MessageComposer/hooks/useAttachmentsForPreview.mjs 362 B
dist/es/components/MessageComposer/hooks/useCanCreatePoll.mjs 285 B
dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs 449 B
dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs 429 B
dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs 294 B
dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs 374 B
dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs 414 B
dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs 680 B
dist/es/components/MessageComposer/hooks/useMessageComposerHasSendableData.mjs 274 B
dist/es/components/MessageComposer/hooks/useMessageContentIsEmpty.mjs 274 B
dist/es/components/MessageComposer/hooks/usePasteHandler.mjs 577 B
dist/es/components/MessageComposer/hooks/useSubmitHandler.mjs 1.49 kB
dist/es/components/MessageComposer/hooks/useTextareaRef.mjs 269 B
dist/es/components/MessageComposer/hooks/utils.mjs 339 B
dist/es/components/MessageComposer/icons.mjs 1.26 kB
dist/es/components/MessageComposer/LinkPreviewList.mjs 1.07 kB
dist/es/components/MessageComposer/MessageComposer.mjs 1.01 kB
dist/es/components/MessageComposer/MessageComposerActions.mjs 1.31 kB
dist/es/components/MessageComposer/MessageComposerUI.mjs 1.41 kB
dist/es/components/MessageComposer/preEditSnapshot.mjs 627 B
dist/es/components/MessageComposer/QuotedMessageIndicator.mjs 263 B
dist/es/components/MessageComposer/QuotedMessagePreview.mjs 2.93 kB
dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs 586 B
dist/es/components/MessageComposer/SendButton.mjs 483 B
dist/es/components/MessageComposer/SendToChannelCheckbox.mjs 748 B
dist/es/components/MessageComposer/StopAIGenerationButton.mjs 354 B
dist/es/components/MessageComposer/WithDragAndDropUpload.mjs 1.59 kB
dist/es/components/MessageList/FloatingDateSeparator.mjs 687 B
dist/es/components/MessageList/GiphyPreviewMessage.mjs 278 B
dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs 648 B
dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs 933 B
dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs 571 B
dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs 1.68 kB
dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs 3.14 kB
dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs 1.12 kB
dist/es/components/MessageList/hooks/useLastDeliveredData.mjs 539 B
dist/es/components/MessageList/hooks/useLastOwnMessage.mjs 249 B
dist/es/components/MessageList/hooks/useLastReadData.mjs 397 B
dist/es/components/MessageList/hooks/useMarkRead.mjs 1.18 kB
dist/es/components/MessageList/hooks/useReducedMotionPreference.mjs 475 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs 955 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs 427 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.mjs 396 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs 533 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.mjs 647 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useScrollerViewport.mjs 1.12 kB
dist/es/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.mjs 499 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.mjs 422 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs 721 B
dist/es/components/MessageList/MessageList.mjs 3.87 kB
dist/es/components/MessageList/MessageListMainPanel.mjs 284 B
dist/es/components/MessageList/NewMessageNotification.mjs 519 B
dist/es/components/MessageList/renderMessages.mjs 1.13 kB
dist/es/components/MessageList/ScrollToLatestMessageButton.mjs 1.09 kB
dist/es/components/MessageList/UnreadMessagesNotification.mjs 616 B
dist/es/components/MessageList/UnreadMessagesSeparator.mjs 601 B
dist/es/components/MessageList/utils.mjs 2.19 kB
dist/es/components/MessageList/VirtualizedMessageList.mjs 4.35 kB
dist/es/components/MessageList/VirtualizedMessageListComponents.mjs 1.66 kB
dist/es/components/Modal/GlobalModal.mjs 1.81 kB
dist/es/components/Notifications/hooks/useNotificationApi.mjs 1.27 kB
dist/es/components/Notifications/hooks/useNotifications.mjs 569 B
dist/es/components/Notifications/hooks/useNotificationTarget.mjs 422 B
dist/es/components/Notifications/hooks/useSystemNotifications.mjs 458 B
dist/es/components/Notifications/Notification.mjs 1.22 kB
dist/es/components/Notifications/NotificationConfigurationContext.mjs 386 B
dist/es/components/Notifications/NotificationList.mjs 3.17 kB
dist/es/components/Notifications/notificationTarget.mjs 636 B
dist/es/components/Poll/hooks/useManagePollVotesRealtime.mjs 686 B
dist/es/components/Poll/hooks/usePollAnswerPagination.mjs 566 B
dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs 572 B
dist/es/components/Poll/mjs 872 B
dist/es/components/Poll/Poll.mjs 302 B
dist/es/components/Poll/PollActions/AddCommentPrompt.mjs 1.25 kB
dist/es/components/Poll/PollActions/EndPollAlert.mjs 764 B
dist/es/components/Poll/PollActions/PollAction.mjs 492 B
dist/es/components/Poll/PollActions/PollActions.mjs 1.26 kB
dist/es/components/Poll/PollActions/PollAnswerList.mjs 1.01 kB
dist/es/components/Poll/PollActions/PollOptionsFullList.mjs 561 B
dist/es/components/Poll/PollActions/PollQuestion.mjs 335 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs 815 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs 684 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs 615 B
dist/es/components/Poll/PollActions/PollResults/PollResults.mjs 1.03 kB
dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs 1.23 kB
dist/es/components/Poll/PollContent.mjs 488 B
dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs 1.24 kB
dist/es/components/Poll/PollCreationDialog/NameField.mjs 677 B
dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs 2.24 kB
dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs 1.02 kB
dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs 820 B
dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs 982 B
dist/es/components/Poll/PollHeader.mjs 635 B
dist/es/components/Poll/PollOptionList.mjs 814 B
dist/es/components/Poll/PollOptionSelector.mjs 1.47 kB
dist/es/components/Portal/Portal.mjs 300 B
dist/es/components/ReactFileUtilities/UploadButton.mjs 803 B
dist/es/components/ReactFileUtilities/utils.mjs 1.06 kB
dist/es/components/Reactions/hooks/useFetchReactions.mjs 701 B
dist/es/components/Reactions/hooks/useProcessReactions.mjs 1.23 kB
dist/es/components/Reactions/MessageReactions.mjs 2.07 kB
dist/es/components/Reactions/MessageReactionsDetail.mjs 1.89 kB
dist/es/components/Reactions/reactionOptions.mjs 1.11 kB
dist/es/components/Reactions/ReactionSelector.mjs 1.58 kB
dist/es/components/Reactions/ReactionSelectorWithButton.mjs 910 B
dist/es/components/Reactions/SpriteImage.mjs 727 B
dist/es/components/Reactions/utils/utils.mjs 284 B
dist/es/components/SafeAnchor/SafeAnchor.mjs 336 B
dist/es/components/Search/hooks/useAnnounceSearchResultCount.mjs 1.31 kB
dist/es/components/Search/hooks/useSearchFocusedMessage.mjs 296 B
dist/es/components/Search/hooks/useSearchQueriesInProgress.mjs 450 B
dist/es/components/Search/hooks/useSearchResultsKeyboardNavigation.mjs 721 B
dist/es/components/Search/Search.mjs 643 B
dist/es/components/Search/SearchBar/SearchBar.mjs 1.32 kB
dist/es/components/Search/SearchContext.mjs 306 B
dist/es/components/Search/SearchResults/SearchResultItem.mjs 1.27 kB
dist/es/components/Search/SearchResults/SearchResults.mjs 711 B
dist/es/components/Search/SearchResults/SearchResultsHeader.mjs 856 B
dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs 305 B
dist/es/components/Search/SearchResults/SearchSourceResultList.mjs 649 B
dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs 547 B
dist/es/components/Search/SearchResults/SearchSourceResults.mjs 562 B
dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs 308 B
dist/es/components/Search/SearchResults/SearchSourceResultsHeader.mjs 148 B
dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs 375 B
dist/es/components/Search/SearchSourceResultsContext.mjs 316 B
dist/es/components/SkipNavigation/SkipNavigation.mjs 1.01 kB
dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs 1.36 kB
dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs 821 B
dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs 600 B
dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs 481 B
dist/es/components/TextareaComposer/SuggestionList/EmoticonItem.mjs 508 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs 614 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/MentionItem.mjs 439 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/MentionSuggestionTitle.mjs 236 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/mjs 775 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/SpecialMentionItem.mjs 161 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.mjs 590 B
dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs 2.39 kB
dist/es/components/TextareaComposer/SuggestionList/SuggestionListItem.mjs 648 B
dist/es/components/TextareaComposer/SuggestionList/TokenizedSuggestionParts.mjs 608 B
dist/es/components/TextareaComposer/TextareaComposer.mjs 3.78 kB
dist/es/components/Thread/LegacyThreadContext.mjs 198 B
dist/es/components/Thread/Thread.mjs 1.39 kB
dist/es/components/Thread/ThreadHead.mjs 416 B
dist/es/components/Thread/ThreadHeader.mjs 1.34 kB
dist/es/components/Thread/ThreadStart.mjs 461 B
dist/es/components/Threads/ThreadContext.mjs 305 B
dist/es/components/Threads/ThreadList/ThreadList.mjs 1.52 kB
dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs 390 B
dist/es/components/Threads/ThreadList/ThreadListHeader.mjs 395 B
dist/es/components/Threads/ThreadList/ThreadListItem.mjs 351 B
dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs 1.72 kB
dist/es/components/Threads/ThreadList/ThreadListLoadingIndicator.mjs 441 B
dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs 625 B
dist/es/components/Threads/ThreadList/utils.a11y.mjs 1.74 kB
dist/es/components/Threads/UnreadCountBadge.mjs 332 B
dist/es/components/Tooltip/hooks/useEnterLeaveHandlers.mjs 296 B
dist/es/components/Tooltip/Tooltip.mjs 556 B
dist/es/components/TypingIndicator/hooks/useDebouncedTypingActive.mjs 974 B
dist/es/components/TypingIndicator/TypingIndicator.mjs 1.22 kB
dist/es/components/TypingIndicator/TypingIndicatorDots.mjs 411 B
dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs 838 B
dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs 384 B
dist/es/components/UtilityComponents/ErrorBoundary.mjs 313 B
dist/es/components/UtilityComponents/hooks/useMutationObserver.mjs 798 B
dist/es/components/UtilityComponents/NullComponent.mjs 138 B
dist/es/components/UtilityComponents/useStableId.mjs 455 B
dist/es/components/VideoPlayer/ReactPlayerWrapper.mjs 481 B
dist/es/components/VideoPlayer/VideoPlayer.mjs 466 B
dist/es/components/VideoPlayer/VideoThumbnail.mjs 550 B
dist/es/components/VisuallyHidden/VisuallyHidden.mjs 397 B
dist/es/components/Window/Window.mjs 406 B
dist/es/constants/messageTypes.mjs 173 B
dist/es/context/AttachmentSelectorContext.mjs 272 B
dist/es/context/ChannelActionContext.mjs 412 B
dist/es/context/ChannelListContext.mjs 334 B
dist/es/context/ChannelStateContext.mjs 453 B
dist/es/context/ChatContext.mjs 402 B
dist/es/context/ComponentContext.mjs 263 B
dist/es/context/DialogManagerContext.mjs 1.38 kB
dist/es/context/MessageBounceContext.mjs 739 B
dist/es/context/MessageComposerContext.mjs 306 B
dist/es/context/MessageContext.mjs 305 B
dist/es/context/MessageListContext.mjs 434 B
dist/es/context/MessageTranslationViewContext.mjs 1.55 kB
dist/es/context/ModalContext.mjs 385 B
dist/es/context/PollContext.mjs 278 B
dist/es/context/TranslationContext.mjs 544 B
dist/es/context/TypingContext.mjs 408 B
dist/es/context/useComponentContextIcons.mjs 564 B
dist/es/context/VirtualizedMessageListContext.mjs 310 B
dist/es/context/WithComponents.mjs 308 B
dist/es/emojis.mjs 126 B
dist/es/i18n/de.mjs 12.1 kB
dist/es/i18n/en.mjs 8.92 kB
dist/es/i18n/es.mjs 12.3 kB
dist/es/i18n/fr.mjs 12.5 kB
dist/es/i18n/hi.mjs 13.4 kB
dist/es/i18n/it.mjs 12.2 kB
dist/es/i18n/ja.mjs 12.7 kB
dist/es/i18n/ko.mjs 12.4 kB
dist/es/i18n/nl.mjs 11.8 kB
dist/es/i18n/pt.mjs 12.2 kB
dist/es/i18n/ru.mjs 14.5 kB
dist/es/i18n/Streami18n.mjs 5.08 kB
dist/es/i18n/tr.mjs 11.9 kB
dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs 588 B
dist/es/i18n/TranslationBuilder/notifications/translators.mjs 668 B
dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs 592 B
dist/es/i18n/TranslationBuilder/TranslationBuilder.mjs 741 B
dist/es/i18n/utils.mjs 2.04 kB
dist/es/index.mjs 8.57 kB
dist/es/mp3-encoder.mjs 778 B
dist/es/plugins/AIComponents/AIMarkdown/AIMarkdown.mjs 1.19 kB
dist/es/plugins/AIComponents/AIMarkdown/tools/charts/Chart.mjs 796 B
dist/es/plugins/AIComponents/AIMarkdown/tools/charts/chartJsSchema.mjs 425 B
dist/es/plugins/AIComponents/AIMarkdown/tools/charts/chartTypes.mjs 517 B
dist/es/plugins/AIComponents/AIMarkdown/tools/charts/JsonChart.mjs 424 B
dist/es/plugins/AIComponents/AIMarkdown/tools/charts/SuspendedChart.mjs 715 B
dist/es/plugins/AIComponents/AIMessageComposer/AIMessageComposer.mjs 2.7 kB
dist/es/plugins/AIComponents/AIMessageComposer/AttachmentPreview.mjs 973 B
dist/es/plugins/AIComponents/AIMessageComposer/hooks/useSpeechToText.mjs 1.12 kB
dist/es/plugins/AIComponents/AIStateIndicator/AIStateIndicator.mjs 656 B
dist/es/plugins/AIComponents/StreamingMessage/StreamingMessage.mjs 456 B
dist/es/plugins/AIComponents/VoiceVisualization/bounce.mjs 804 B
dist/es/plugins/AIComponents/VoiceVisualization/cssGlow.mjs 2.27 kB
dist/es/plugins/AIComponents/VoiceVisualization/driver.mjs 1.99 kB
dist/es/plugins/AIComponents/VoiceVisualization/hitArea.mjs 496 B
dist/es/plugins/AIComponents/VoiceVisualization/math.mjs 1.15 kB
dist/es/plugins/AIComponents/VoiceVisualization/palette.mjs 1.59 kB
dist/es/plugins/AIComponents/VoiceVisualization/renderers/glowWebGLRenderer.mjs 4.75 kB
dist/es/plugins/AIComponents/VoiceVisualization/renderers/types.mjs 216 B
dist/es/plugins/AIComponents/VoiceVisualization/renderers/waveRenderer.mjs 2.26 kB
dist/es/plugins/AIComponents/VoiceVisualization/simplex.mjs 1.26 kB
dist/es/plugins/AIComponents/VoiceVisualization/useAudioLevel.mjs 1.26 kB
dist/es/plugins/AIComponents/VoiceVisualization/useVoiceStateLabel.mjs 356 B
dist/es/plugins/AIComponents/VoiceVisualization/VoiceGlow.mjs 771 B
dist/es/plugins/AIComponents/VoiceVisualization/VoiceGlowCss.mjs 3.39 kB
dist/es/plugins/AIComponents/VoiceVisualization/VoiceVisualizationView.mjs 2.38 kB
dist/es/plugins/AIComponents/VoiceVisualization/VoiceWave.mjs 628 B
dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs 703 B
dist/es/plugins/ChannelDetail/ChannelDetail.mjs 944 B
dist/es/plugins/ChannelDetail/ChannelDetailContext.mjs 373 B
dist/es/plugins/ChannelDetail/ChannelDetailEmptyList.mjs 337 B
dist/es/plugins/ChannelDetail/ChannelDetailListLoadingIndicator.mjs 419 B
dist/es/plugins/ChannelDetail/ChannelDetailNavButton.mjs 505 B
dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs 567 B
dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigator.mjs 1.79 kB
dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs 832 B
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs 445 B
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs 1.48 kB
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs 1.1 kB
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/useChannelFilesSearch.mjs 726 B
dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.mjs 3.67 kB
dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs 3.54 kB
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs 454 B
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs 2.29 kB
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs 665 B
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/useChannelMediaSearch.mjs 723 B
dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.mjs 3.26 kB
dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs 1 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs 2.21 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs 1.56 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.mjs 1.61 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs 1.25 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs 361 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMemberCount.mjs 408 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMemberIds.mjs 430 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMembersSearch.mjs 744 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs 447 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs 1.66 kB
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs 447 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesSearch.mjs 881 B
dist/es/plugins/ChannelDetail/VirtualizedList/VirtualizedList.mjs 670 B
dist/es/plugins/Emojis/EmojiPicker.mjs 1.3 kB
dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs 1.37 kB
dist/es/plugins/Emojis/Picker.mjs 324 B
dist/es/store/hooks/useStateStore.mjs 516 B
dist/es/utils/findReverse.mjs 188 B
dist/es/utils/getChannel.mjs 690 B
dist/es/utils/getChannelConfig.mjs 266 B
dist/es/utils/getTextareaCaretRect.mjs 856 B
dist/es/utils/getWholeChar.mjs 368 B
dist/es/utils/isDmChannel.mjs 247 B
dist/es/utils/mergeDeep.mjs 197 B
dist/es/utils/useStableCallback.mjs 831 B

compressed-size-action

@oliverlaz
oliverlaz merged commit ad16506 into release-v14 Oct 22, 2026
10 checks passed
@oliverlaz
oliverlaz deleted the refactor/standalone-use-heard-text branch October 22, 2026 14:27
@codecov

codecov Bot commented Oct 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.64865% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 86.47%. Comparing base (8fa9b5f) to head (2d3de19).
⚠️ Report is 4 commits behind head on release-v14.

Files with missing lines Patch % Lines
src/plugins/AIComponents/hooks/useHeardText.ts 98.64% 1 Missing ⚠️
Additional details and impacted files
@@               Coverage Diff               @@
##           release-v14    #3344      +/-   ##
===============================================
- Coverage        86.84%   86.47%   -0.38%     
===============================================
  Files              526      541      +15     
  Lines            16699    17590     +891     
  Branches          5251     5421     +170     
===============================================
+ Hits             14503    15211     +708     
- Misses            2196     2379     +183     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

github-actions Bot pushed a commit that referenced this pull request Oct 22, 2026
## [14.14.1](v14.14.0...v14.14.1) (2026-10-22)

### Bug Fixes

* **ai-components:** replace SpokenMessageText with a standalone useHeardText hook ([#3344](#3344)) ([ad16506](ad16506)), closes [#3343](#3343) [GetStream/getstream.io#761](https://github.com/GetStream/getstream.io/issues/761) [#3343](#3343) [#3339](#3339)
@stream-ci-bot

Copy link
Copy Markdown

🎉 This PR is included in version 14.14.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

oliverlaz added a commit that referenced this pull request Oct 26, 2026
…inity as fully heard (#3349)

### Goal

Bring the `useHeardText` fixes from the v15 port
(#3348) to the v14
line, which shipped the hook in 14.14.1
(#3343,
#3344) and shares the
same issues. When the same mounted component rendered a new reply, the
hook kept the previous reply's reveal length, `skip()` and `live`, so
the new text could appear already revealed. `chars: Infinity` revealed
nothing, contrary to the type doc. The docs also suggested returning
`undefined` for text the voice source does not know yet, which shows the
full text before it is heard and defeats pacing.

### Implementation details

Cherry-pick of `835c3eb66` from `feat/ai-components-use-heard-text`. The
hook and its tests were byte-identical between the two lines before that
commit, and the README hunks applied without conflict.

- The reveal state now records the text it refers to. When `text` is
replaced by a different text, the reveal starts over: the length shown
and `skip()` are reset, and `live` is read again. Growing or truncating
the text keeps the reveal, capped at the new length. The reset happens
during render, so the new text never renders with the previous reveal.
- `chars: Infinity` reveals the whole text; NaN, negative and
non-numeric counts still reveal nothing.
- Docs (type doc and `README.md`): `undefined` is only for a text that
is not spoken at all, and a text that will be spoken but is not known
yet must return `{ chars: 0, done: false }`. `subscribe` is bound once
(remount with a `key` to switch sources) and is the only wake-up for a
settled hook. `heard` is called during render, so it must be free of
side effects.
- 6 new tests in `useHeardText.test.ts` cover the new-text reset,
truncation, `skip()` and `live` reset, and `Infinity`.

No public API change: the exported types and signature are unchanged.

### UI Changes

None. The hook's reveal behaviour changes only for a component that
renders a different text, and for `chars: Infinity`.
oliverlaz added a commit that referenced this pull request Oct 26, 2026
### Goal

Port #3343 and
#3344 from `release-v14` to v15. Together
they add `useHeardText` to `stream-chat-react/ai-components`: a
standalone hook (React only, no chat SDK imports) that reveals a text at
the pace a voice AI agent speaks it.

Neither PR was ported to `master`. #3344 removes the `SpokenMessageText`
/ `SpokenTextProvider` / `SpokenTextContext` exports that #3343 added,
so `master` never had them, and the port is the net result: the hook,
its tests, the export and the README section. A review of the port found
issues in the hook itself (shared with v14), which the second commit
fixes.

### Implementation details

**Commit 1, the port** (`feat(ai-components): add useHeardText for
voice-paced text`)

- `src/plugins/AIComponents/hooks/useHeardText.ts` and
`__tests__/useHeardText.test.ts` are byte-identical to `release-v14`.
- `src/plugins/AIComponents/index.ts` exports the hook and its types
(`HeardTextProgress`, `HeardTextFunction`, `HeardTextSubscribe`,
`UseHeardTextParams`, `UseHeardTextResult`).
- README: the `useHeardText` section matches v14; the intro sentence and
the export lists mention the hook. The VoiceWave / VoiceGlow /
`useAudioLevel` entries that sit next to it on v14 are left to the open
port of #3339 (#3347), which edits the same
README lines, so whichever lands second has a small conflict there.

**Commit 2, fixes from the review** (`fix(ai-components): restart
useHeardText for a new text and treat Infinity as fully heard`)

- A component that renders the next reply with the same hook instance
(for example the README's `SpokenReply` without a `key`) carried over
the length already shown, `skip()` and `live`, so the new reply appeared
partly or fully revealed before any audio. The reveal now starts over
when `text` is replaced by a different text. Growing or truncating the
text keeps the reveal, capped at the new length, so a regrowth after a
cut does not reuse the old length. The reset happens during render, so
the new text never renders with the previous reveal.
- `chars: Infinity` revealed nothing, contrary to the type doc ("a value
at or above the text's code point length reveals the whole text"). It
now reveals the whole text; `NaN`, negative and non-numeric counts still
mean nothing heard.
- Docs (JSDoc and README): `heard` should return `undefined` only for a
text that is not spoken. The old wording also suggested it for a text
"not known to the voice source yet", which shows the full text and then
never paces it, because the reveal does not move backwards. Also
documented: `subscribe` is bound once (remount to switch speech sources)
and is the only wake-up for a settled hook, and `heard` is called during
render, so it must be free of side effects.
- Left as is: re-subscribing on a new `subscribe` identity (it would
churn every frame with inline arrows, which the hook explicitly
supports), and polling unpaced texts (every non-spoken message would
tick forever). Rebuilding the code-point offsets per streamed chunk
costs about 20 ms over a whole 4k-character reply in 1k chunks, so it
was not optimized.

`release-v14` still has the issues fixed in commit 2; they should be
ported back.

Checks: `yarn test src/plugins/AIComponents` (101 tests, 27 for the
hook, 6 of them new), eslint `--max-warnings 0`, prettier, `tsc -p
tsconfig.lib.json --noEmit`, `yarn build`, `validate-cjs`,
`validate-esm` and `validate-entry-isolation`. The built `useHeardText`
module imports only `react`, and the main entry does not include it.

### UI Changes

None.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **New Features**
* Added a hook that reveals text in sync with speech progress, with
support for skipping the reveal and handling Unicode text. Text is shown
immediately when pacing is unavailable and fully revealed when speech or
generation is complete.
* **Documentation**
* Added usage guidance covering the hook’s inputs, results, pacing
behavior, and an example.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

This branch was successfully deployed

2 active deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants