stream-chat-react 14.12.0 → 15.0.0-rc.1
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.
- package/dist/cjs/ListItemLayout.60c3b287.js +2181 -0
- package/dist/cjs/ListItemLayout.60c3b287.js.map +1 -0
- package/dist/cjs/{ReactPlayerWrapper.7cc7b0d8.js → ReactPlayerWrapper.f04b1d06.js} +3 -3
- package/dist/cjs/{ReactPlayerWrapper.7cc7b0d8.js.map → ReactPlayerWrapper.f04b1d06.js.map} +1 -1
- package/dist/cjs/SlotLayout.de45be2d.js +1672 -0
- package/dist/cjs/SlotLayout.de45be2d.js.map +1 -0
- package/dist/cjs/Thread.373af587.js +7479 -0
- package/dist/cjs/Thread.373af587.js.map +1 -0
- package/dist/cjs/channel-detail.js +409 -389
- package/dist/cjs/channel-detail.js.map +1 -1
- package/dist/cjs/emojis.js +18 -16
- package/dist/cjs/emojis.js.map +1 -1
- package/dist/cjs/index.js +14467 -20208
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/slot-geometry.js +145 -0
- package/dist/cjs/slot-geometry.js.map +1 -0
- package/dist/cjs/slot-layout.js +37 -0
- package/dist/cjs/useChannel.1004ed4c.js +18 -0
- package/dist/cjs/useChannel.1004ed4c.js.map +1 -0
- package/dist/cjs/useComponentContextIcons.d16834d9.js +1729 -0
- package/dist/cjs/useComponentContextIcons.d16834d9.js.map +1 -0
- package/dist/cjs/useIsCooldownActive.1f778bc1.js +110 -0
- package/dist/cjs/useIsCooldownActive.1f778bc1.js.map +1 -0
- package/dist/css/channel-detail.css.map +1 -1
- package/dist/css/index.css +208 -103
- package/dist/css/index.css.map +1 -1
- package/dist/es/a11y/accessibleLabel.mjs +6 -2
- package/dist/es/a11y/accessibleLabel.mjs.map +1 -1
- package/dist/es/components/AIStateIndicator/AIStateIndicator.mjs +6 -5
- package/dist/es/components/AIStateIndicator/AIStateIndicator.mjs.map +1 -1
- package/dist/es/components/AIStateIndicator/hooks/useAIState.mjs +9 -33
- package/dist/es/components/AIStateIndicator/hooks/useAIState.mjs.map +1 -1
- package/dist/es/components/Accessibility/NotificationAnnouncer.mjs +2 -3
- package/dist/es/components/Accessibility/NotificationAnnouncer.mjs.map +1 -1
- package/dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs +10 -5
- package/dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs.map +1 -1
- package/dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs +38 -28
- package/dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs.map +1 -1
- package/dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs +5 -8
- package/dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs.map +1 -1
- package/dist/es/components/Attachment/Attachment.mjs +21 -6
- package/dist/es/components/Attachment/Attachment.mjs.map +1 -1
- package/dist/es/components/Attachment/AttachmentActions.mjs +10 -9
- package/dist/es/components/Attachment/AttachmentActions.mjs.map +1 -1
- package/dist/es/components/Attachment/AttachmentContainer.mjs +21 -17
- package/dist/es/components/Attachment/AttachmentContainer.mjs.map +1 -1
- package/dist/es/components/Attachment/Audio.mjs +15 -10
- package/dist/es/components/Attachment/Audio.mjs.map +1 -1
- package/dist/es/components/Attachment/FileAttachment.mjs +4 -5
- package/dist/es/components/Attachment/FileAttachment.mjs.map +1 -1
- package/dist/es/components/Attachment/Geolocation.mjs +29 -17
- package/dist/es/components/Attachment/Geolocation.mjs.map +1 -1
- package/dist/es/components/Attachment/Giphy.mjs +4 -4
- package/dist/es/components/Attachment/Giphy.mjs.map +1 -1
- package/dist/es/components/Attachment/LinkPreview/Card.mjs +4 -4
- package/dist/es/components/Attachment/LinkPreview/Card.mjs.map +1 -1
- package/dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs +2 -2
- package/dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs.map +1 -1
- package/dist/es/components/Attachment/ModalGallery.mjs +20 -8
- package/dist/es/components/Attachment/ModalGallery.mjs.map +1 -1
- package/dist/es/components/Attachment/UnsupportedAttachment.mjs +3 -3
- package/dist/es/components/Attachment/UnsupportedAttachment.mjs.map +1 -1
- package/dist/es/components/Attachment/VideoAttachment.mjs +10 -10
- package/dist/es/components/Attachment/VideoAttachment.mjs.map +1 -1
- package/dist/es/components/Attachment/VisibilityDisclaimer.mjs +2 -2
- package/dist/es/components/Attachment/VisibilityDisclaimer.mjs.map +1 -1
- package/dist/es/components/Attachment/VoiceRecording.mjs +17 -12
- package/dist/es/components/Attachment/VoiceRecording.mjs.map +1 -1
- package/dist/es/components/Attachment/components/AttachmentUploadProgressIndicator.mjs +1 -1
- package/dist/es/components/Attachment/components/DownloadButton.mjs +3 -3
- package/dist/es/components/Attachment/components/DownloadButton.mjs.map +1 -1
- package/dist/es/components/Attachment/hooks/useAttachmentUploadState.mjs +4 -30
- package/dist/es/components/Attachment/hooks/useAttachmentUploadState.mjs.map +1 -1
- package/dist/es/components/Attachment/utils.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/AudioPlaybackArbiter.mjs +57 -0
- package/dist/es/components/AudioPlayback/AudioPlaybackArbiter.mjs.map +1 -0
- package/dist/es/components/AudioPlayback/AudioPlayer.mjs +329 -314
- package/dist/es/components/AudioPlayback/AudioPlayer.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/AudioPlayerPool.mjs +54 -90
- package/dist/es/components/AudioPlayback/AudioPlayerPool.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/WithAudioPlayback.mjs +20 -6
- package/dist/es/components/AudioPlayback/WithAudioPlayback.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/components/ProgressBar.mjs +2 -2
- package/dist/es/components/AudioPlayback/components/ProgressBar.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/components/WaveProgressBar.mjs +2 -2
- package/dist/es/components/AudioPlayback/components/WaveProgressBar.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/components/progressBarA11y.mjs +2 -2
- package/dist/es/components/AudioPlayback/components/progressBarA11y.mjs.map +1 -1
- package/dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs +4 -4
- package/dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs.map +1 -1
- package/dist/es/components/Avatar/Avatar.mjs.map +1 -1
- package/dist/es/components/Avatar/AvatarStack.mjs +1 -1
- package/dist/es/components/Avatar/AvatarStack.mjs.map +1 -1
- package/dist/es/components/Badge/Badge.mjs.map +1 -1
- package/dist/es/components/Badge/MediaBadge.mjs +2 -1
- package/dist/es/components/Badge/MediaBadge.mjs.map +1 -1
- package/dist/es/components/BaseImage/ImagePlaceholder.mjs +3 -3
- package/dist/es/components/BaseImage/ImagePlaceholder.mjs.map +1 -1
- package/dist/es/components/Button/PlayButton.mjs +3 -3
- package/dist/es/components/Button/PlayButton.mjs.map +1 -1
- package/dist/es/components/Button/WorkspaceNavigationButtons.mjs +94 -0
- package/dist/es/components/Button/WorkspaceNavigationButtons.mjs.map +1 -0
- package/dist/es/components/Channel/Channel.mjs +34 -720
- package/dist/es/components/Channel/Channel.mjs.map +1 -1
- package/dist/es/components/Channel/hooks/useChannelCapabilities.mjs +21 -0
- package/dist/es/components/Channel/hooks/useChannelCapabilities.mjs.map +1 -0
- package/dist/es/components/Channel/hooks/useChannelContainerClasses.mjs +1 -1
- package/dist/es/components/Channel/hooks/useChannelContainerClasses.mjs.map +1 -1
- package/dist/es/components/ChannelHeader/ChannelHeader.mjs +17 -16
- package/dist/es/components/ChannelHeader/ChannelHeader.mjs.map +1 -1
- package/dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs +16 -41
- package/dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs.map +1 -1
- package/dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs +19 -21
- package/dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs.map +1 -1
- package/dist/es/components/ChannelList/ChannelList.mjs +60 -131
- package/dist/es/components/ChannelList/ChannelList.mjs.map +1 -1
- package/dist/es/components/ChannelList/ChannelListHeader.mjs +4 -4
- package/dist/es/components/ChannelList/ChannelListHeader.mjs.map +1 -1
- package/dist/es/components/ChannelList/ChannelLists.mjs +31 -0
- package/dist/es/components/ChannelList/ChannelLists.mjs.map +1 -0
- package/dist/es/components/ChannelList/ChannelNavigation.mjs +36 -0
- package/dist/es/components/ChannelList/ChannelNavigation.mjs.map +1 -0
- package/dist/es/components/ChannelList/hooks/useChannelMembersState.mjs.map +1 -1
- package/dist/es/components/ChannelList/hooks/useChannelMembershipState.mjs.map +1 -1
- package/dist/es/components/ChannelList/hooks/useChannelPaginatorState.mjs +21 -0
- package/dist/es/components/ChannelList/hooks/useChannelPaginatorState.mjs.map +1 -0
- package/dist/es/components/ChannelList/hooks/useSelectedChannelState.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/ChannelListItem.mjs +23 -74
- package/dist/es/components/ChannelListItem/ChannelListItem.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.defaults.mjs +34 -34
- package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.defaults.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs +2 -2
- package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs +7 -6
- package/dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/ChannelListItemUI.mjs +15 -13
- package/dist/es/components/ChannelListItem/ChannelListItemUI.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs +7 -7
- package/dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs +8 -26
- package/dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs +1 -1
- package/dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs +18 -50
- package/dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/utils.a11y.mjs +35 -21
- package/dist/es/components/ChannelListItem/utils.a11y.mjs.map +1 -1
- package/dist/es/components/ChannelListItem/utils.mjs +31 -30
- package/dist/es/components/ChannelListItem/utils.mjs.map +1 -1
- package/dist/es/components/Chat/Chat.mjs +17 -16
- package/dist/es/components/Chat/Chat.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useChat.mjs +7 -49
- package/dist/es/components/Chat/hooks/useChat.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useCreateChatClient.mjs +1 -1
- package/dist/es/components/Chat/hooks/useCreateChatClient.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useCreateChatContext.mjs +3 -11
- package/dist/es/components/Chat/hooks/useCreateChatContext.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useNetworkConnectionState.mjs +46 -0
- package/dist/es/components/Chat/hooks/useNetworkConnectionState.mjs.map +1 -0
- package/dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs +112 -24
- package/dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useSplitActionSet.mjs +1 -1
- package/dist/es/components/Chat/hooks/useSplitActionSet.mjs.map +1 -1
- package/dist/es/components/Chat/hooks/useWSConnectionState.mjs +31 -0
- package/dist/es/components/Chat/hooks/useWSConnectionState.mjs.map +1 -0
- package/dist/es/components/DateSeparator/DateSeparator.mjs +2 -2
- package/dist/es/components/DateSeparator/DateSeparator.mjs.map +1 -1
- package/dist/es/components/Dialog/components/Alert.mjs +1 -1
- package/dist/es/components/Dialog/components/Callout.mjs +2 -2
- package/dist/es/components/Dialog/components/Callout.mjs.map +1 -1
- package/dist/es/components/Dialog/components/ContextMenu.mjs +9 -8
- package/dist/es/components/Dialog/components/ContextMenu.mjs.map +1 -1
- package/dist/es/components/Dialog/components/Prompt.mjs +5 -5
- package/dist/es/components/Dialog/components/Prompt.mjs.map +1 -1
- package/dist/es/components/Dialog/components/Viewer.mjs +5 -5
- package/dist/es/components/Dialog/components/Viewer.mjs.map +1 -1
- package/dist/es/components/Dialog/hooks/usePopoverPosition.mjs +9 -1
- package/dist/es/components/Dialog/hooks/usePopoverPosition.mjs.map +1 -1
- package/dist/es/components/Dialog/service/DialogManager.mjs +22 -19
- package/dist/es/components/Dialog/service/DialogManager.mjs.map +1 -1
- package/dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs +6 -5
- package/dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs.map +1 -1
- package/dist/es/components/Form/Dropdown.mjs +6 -3
- package/dist/es/components/Form/Dropdown.mjs.map +1 -1
- package/dist/es/components/Form/NumericInput.mjs +6 -5
- package/dist/es/components/Form/NumericInput.mjs.map +1 -1
- package/dist/es/components/Form/SwitchField.mjs +2 -2
- package/dist/es/components/Form/SwitchField.mjs.map +1 -1
- package/dist/es/components/Form/TextInput.mjs +1 -1
- package/dist/es/components/Gallery/GalleryContext.mjs +2 -8
- package/dist/es/components/Gallery/GalleryContext.mjs.map +1 -1
- package/dist/es/components/Gallery/GalleryHeader.mjs +39 -12
- package/dist/es/components/Gallery/GalleryHeader.mjs.map +1 -1
- package/dist/es/components/Gallery/GalleryUI.mjs +4 -4
- package/dist/es/components/Gallery/GalleryUI.mjs.map +1 -1
- package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs +16 -14
- package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs.map +1 -1
- package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.mjs +43 -0
- package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.mjs.map +1 -0
- package/dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs +1 -1
- package/dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs.map +1 -1
- package/dist/es/components/LoadMore/LoadMoreButton.mjs +3 -3
- package/dist/es/components/LoadMore/LoadMoreButton.mjs.map +1 -1
- package/dist/es/components/Loading/AttachmentUploadedSizeIndicator.mjs +2 -11
- package/dist/es/components/Loading/AttachmentUploadedSizeIndicator.mjs.map +1 -1
- package/dist/es/components/Loading/LoadingErrorIndicator.mjs +2 -2
- package/dist/es/components/Loading/LoadingErrorIndicator.mjs.map +1 -1
- package/dist/es/components/Loading/LoadingIndicator.mjs.map +1 -1
- package/dist/es/components/Loading/UploadProgressIndicator.mjs.map +1 -1
- package/dist/es/components/Loading/progress-indicators.mjs +2 -2
- package/dist/es/components/Loading/progress-indicators.mjs.map +1 -1
- package/dist/es/components/Location/ShareLocationDialog.mjs +13 -13
- package/dist/es/components/Location/ShareLocationDialog.mjs.map +1 -1
- package/dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs +1 -0
- package/dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs +4 -4
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs +7 -7
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs +4 -4
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs +2 -2
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs +1 -1
- package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs +4 -4
- package/dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs +32 -26
- package/dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/classes/BrowserPermission.mjs +5 -4
- package/dist/es/components/MediaRecorder/classes/BrowserPermission.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs +195 -181
- package/dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs +7 -11
- package/dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs +1 -0
- package/dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/observable/Observable.mjs +2 -1
- package/dist/es/components/MediaRecorder/observable/Observable.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/observable/Subject.mjs +3 -2
- package/dist/es/components/MediaRecorder/observable/Subject.mjs.map +1 -1
- package/dist/es/components/MediaRecorder/observable/Subscription.mjs +2 -1
- package/dist/es/components/MediaRecorder/observable/Subscription.mjs.map +1 -1
- package/dist/es/components/Message/Message.mjs +13 -54
- package/dist/es/components/Message/Message.mjs.map +1 -1
- package/dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs +10 -54
- package/dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs.map +1 -1
- package/dist/es/components/Message/MessageBlocked.mjs +2 -2
- package/dist/es/components/Message/MessageBlocked.mjs.map +1 -1
- package/dist/es/components/Message/MessageDeletedBubble.mjs +2 -2
- package/dist/es/components/Message/MessageDeletedBubble.mjs.map +1 -1
- package/dist/es/components/Message/MessageEditedIndicator.mjs +8 -7
- package/dist/es/components/Message/MessageEditedIndicator.mjs.map +1 -1
- package/dist/es/components/Message/MessageRepliesCountButton.mjs +43 -9
- package/dist/es/components/Message/MessageRepliesCountButton.mjs.map +1 -1
- package/dist/es/components/Message/MessageStatus.mjs +13 -11
- package/dist/es/components/Message/MessageStatus.mjs.map +1 -1
- package/dist/es/components/Message/MessageText.mjs +4 -4
- package/dist/es/components/Message/MessageText.mjs.map +1 -1
- package/dist/es/components/Message/MessageTimestamp.mjs +4 -3
- package/dist/es/components/Message/MessageTimestamp.mjs.map +1 -1
- package/dist/es/components/Message/MessageTranslationIndicator.mjs +7 -7
- package/dist/es/components/Message/MessageTranslationIndicator.mjs.map +1 -1
- package/dist/es/components/Message/MessageUI.mjs +22 -21
- package/dist/es/components/Message/MessageUI.mjs.map +1 -1
- package/dist/es/components/Message/PinIndicator.mjs +3 -3
- package/dist/es/components/Message/PinIndicator.mjs.map +1 -1
- package/dist/es/components/Message/QuotedMessage.mjs +4 -4
- package/dist/es/components/Message/QuotedMessage.mjs.map +1 -1
- package/dist/es/components/Message/ReminderNotification.mjs +13 -12
- package/dist/es/components/Message/ReminderNotification.mjs.map +1 -1
- package/dist/es/components/Message/StreamedMessageText.mjs +5 -4
- package/dist/es/components/Message/StreamedMessageText.mjs.map +1 -1
- package/dist/es/components/Message/Timestamp.mjs +5 -5
- package/dist/es/components/Message/Timestamp.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useActionHandler.mjs +8 -7
- package/dist/es/components/Message/hooks/useActionHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useDeleteHandler.mjs +30 -11
- package/dist/es/components/Message/hooks/useDeleteHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useFlagHandler.mjs +3 -3
- package/dist/es/components/Message/hooks/useFlagHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useMarkUnreadHandler.mjs +8 -3
- package/dist/es/components/Message/hooks/useMarkUnreadHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useMentionsHandler.mjs +2 -4
- package/dist/es/components/Message/hooks/useMentionsHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useMessageAlsoSentInChannelNavigation.mjs +72 -0
- package/dist/es/components/Message/hooks/useMessageAlsoSentInChannelNavigation.mjs.map +1 -0
- package/dist/es/components/Message/hooks/useMessageReminder.mjs +1 -1
- package/dist/es/components/Message/hooks/useMuteHandler.mjs +26 -9
- package/dist/es/components/Message/hooks/useMuteHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useOpenThreadHandler.mjs +13 -5
- package/dist/es/components/Message/hooks/useOpenThreadHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/usePinHandler.mjs +26 -21
- package/dist/es/components/Message/hooks/usePinHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useReactionHandler.mjs +25 -17
- package/dist/es/components/Message/hooks/useReactionHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useReactionsFetcher.mjs +6 -3
- package/dist/es/components/Message/hooks/useReactionsFetcher.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useRetryHandler.mjs +9 -7
- package/dist/es/components/Message/hooks/useRetryHandler.mjs.map +1 -1
- package/dist/es/components/Message/hooks/useUserRole.mjs +16 -12
- package/dist/es/components/Message/hooks/useUserRole.mjs.map +1 -1
- package/dist/es/components/Message/renderText/renderText.mjs +1 -1
- package/dist/es/components/Message/utils.mjs +19 -56
- package/dist/es/components/Message/utils.mjs.map +1 -1
- package/dist/es/components/MessageActions/DeleteMessageAlert.mjs +5 -5
- package/dist/es/components/MessageActions/DeleteMessageAlert.mjs.map +1 -1
- package/dist/es/components/MessageActions/DownloadSubmenu.mjs +4 -4
- package/dist/es/components/MessageActions/DownloadSubmenu.mjs.map +1 -1
- package/dist/es/components/MessageActions/MessageActions.defaults.mjs +72 -73
- package/dist/es/components/MessageActions/MessageActions.defaults.mjs.map +1 -1
- package/dist/es/components/MessageActions/MessageActions.mjs +3 -3
- package/dist/es/components/MessageActions/MessageActions.mjs.map +1 -1
- package/dist/es/components/MessageActions/RemindMeSubmenu.mjs +7 -7
- package/dist/es/components/MessageActions/RemindMeSubmenu.mjs.map +1 -1
- package/dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs +7 -4
- package/dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs.map +1 -1
- package/dist/es/components/MessageBounce/MessageBounceModal.mjs +1 -1
- package/dist/es/components/MessageBounce/MessageBouncePrompt.mjs +8 -8
- package/dist/es/components/MessageBounce/MessageBouncePrompt.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.mjs +2 -2
- package/dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs +14 -14
- package/dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs +9 -9
- package/dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs +6 -6
- package/dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs +3 -4
- package/dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs +2 -2
- package/dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.mjs +2 -2
- package/dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs +2 -2
- package/dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs +33 -30
- package/dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs.map +1 -1
- package/dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs +26 -31
- package/dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs.map +1 -1
- package/dist/es/components/MessageComposer/CommandChip.mjs +3 -3
- package/dist/es/components/MessageComposer/CommandChip.mjs.map +1 -1
- package/dist/es/components/MessageComposer/EditedMessagePreview.mjs +1 -1
- package/dist/es/components/MessageComposer/EditedMessagePreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/LinkPreviewList.mjs +3 -3
- package/dist/es/components/MessageComposer/MessageComposer.mjs +12 -17
- package/dist/es/components/MessageComposer/MessageComposer.mjs.map +1 -1
- package/dist/es/components/MessageComposer/MessageComposerActions.mjs +17 -13
- package/dist/es/components/MessageComposer/MessageComposerActions.mjs.map +1 -1
- package/dist/es/components/MessageComposer/MessageComposerUI.mjs +8 -8
- package/dist/es/components/MessageComposer/MessageComposerUI.mjs.map +1 -1
- package/dist/es/components/MessageComposer/QuotedMessagePreview.mjs +40 -40
- package/dist/es/components/MessageComposer/QuotedMessagePreview.mjs.map +1 -1
- package/dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs +2 -2
- package/dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs.map +1 -1
- package/dist/es/components/MessageComposer/SendButton.mjs +2 -2
- package/dist/es/components/MessageComposer/SendButton.mjs.map +1 -1
- package/dist/es/components/MessageComposer/SendToChannelCheckbox.mjs +2 -2
- package/dist/es/components/MessageComposer/SendToChannelCheckbox.mjs.map +1 -1
- package/dist/es/components/MessageComposer/StopAIGenerationButton.mjs +1 -1
- package/dist/es/components/MessageComposer/StopAIGenerationButton.mjs.map +1 -1
- package/dist/es/components/MessageComposer/WithDragAndDropUpload.mjs +9 -13
- package/dist/es/components/MessageComposer/WithDragAndDropUpload.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs +15 -2
- package/dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs +2 -3
- package/dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs +1 -3
- package/dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs +2 -3
- package/dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs +0 -4
- package/dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs +4 -4
- package/dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs +8 -34
- package/dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useMessageComposerHasSendableData.mjs.map +1 -1
- package/dist/es/components/MessageComposer/hooks/useMessageComposerSubmitFn.mjs +16 -0
- package/dist/es/components/MessageComposer/hooks/useMessageComposerSubmitFn.mjs.map +1 -0
- package/dist/es/components/MessageComposer/hooks/usePasteHandler.mjs +1 -1
- package/dist/es/components/MessageComposer/hooks/utils.mjs.map +1 -1
- package/dist/es/components/MessageComposer/icons.mjs +2 -2
- package/dist/es/components/MessageComposer/icons.mjs.map +1 -1
- package/dist/es/components/MessageComposer/preEditSnapshot.mjs +1 -7
- package/dist/es/components/MessageComposer/preEditSnapshot.mjs.map +1 -1
- package/dist/es/components/MessageList/FloatingDateSeparator.mjs +7 -7
- package/dist/es/components/MessageList/FloatingDateSeparator.mjs.map +1 -1
- package/dist/es/components/MessageList/MessageList.mjs +168 -213
- package/dist/es/components/MessageList/MessageList.mjs.map +1 -1
- package/dist/es/components/MessageList/NewMessageNotification.mjs +5 -1
- package/dist/es/components/MessageList/NewMessageNotification.mjs.map +1 -1
- package/dist/es/components/MessageList/ScrollToLatestMessageButton.mjs +27 -22
- package/dist/es/components/MessageList/ScrollToLatestMessageButton.mjs.map +1 -1
- package/dist/es/components/MessageList/UnreadMessagesNotification.mjs +25 -9
- package/dist/es/components/MessageList/UnreadMessagesNotification.mjs.map +1 -1
- package/dist/es/components/MessageList/UnreadMessagesSeparator.mjs +18 -7
- package/dist/es/components/MessageList/UnreadMessagesSeparator.mjs.map +1 -1
- package/dist/es/components/MessageList/VirtualizedMessageList.mjs +186 -167
- package/dist/es/components/MessageList/VirtualizedMessageList.mjs.map +1 -1
- package/dist/es/components/MessageList/VirtualizedMessageListComponents.mjs +12 -12
- package/dist/es/components/MessageList/VirtualizedMessageListComponents.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs +6 -7
- package/dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs +6 -10
- package/dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs +18 -10
- package/dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs +6 -4
- package/dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs +27 -202
- package/dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs +10 -5
- package/dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs +6 -5
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs +4 -4
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs +5 -1
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs +14 -9
- package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/useCanPaginateReplies.mjs +47 -0
- package/dist/es/components/MessageList/hooks/useCanPaginateReplies.mjs.map +1 -0
- package/dist/es/components/MessageList/hooks/useLastDeliveredData.mjs +6 -38
- package/dist/es/components/MessageList/hooks/useLastDeliveredData.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/useLastReadData.mjs +6 -23
- package/dist/es/components/MessageList/hooks/useLastReadData.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/useMarkRead.mjs +78 -48
- package/dist/es/components/MessageList/hooks/useMarkRead.mjs.map +1 -1
- package/dist/es/components/MessageList/hooks/useReceiptsByMessageId.mjs +71 -0
- package/dist/es/components/MessageList/hooks/useReceiptsByMessageId.mjs.map +1 -0
- package/dist/es/components/MessageList/hooks/useThreadHead.mjs +26 -0
- package/dist/es/components/MessageList/hooks/useThreadHead.mjs.map +1 -0
- package/dist/es/components/MessageList/messageSourceKey.mjs +37 -0
- package/dist/es/components/MessageList/messageSourceKey.mjs.map +1 -0
- package/dist/es/components/MessageList/renderMessages.mjs +11 -11
- package/dist/es/components/MessageList/renderMessages.mjs.map +1 -1
- package/dist/es/components/MessageList/utils.mjs +40 -33
- package/dist/es/components/MessageList/utils.mjs.map +1 -1
- package/dist/es/components/Modal/GlobalModal.mjs +2 -2
- package/dist/es/components/Notifications/Notification.mjs +10 -9
- package/dist/es/components/Notifications/Notification.mjs.map +1 -1
- package/dist/es/components/Notifications/NotificationList.mjs +5 -19
- package/dist/es/components/Notifications/NotificationList.mjs.map +1 -1
- package/dist/es/components/Notifications/hooks/useNotificationApi.mjs +69 -62
- package/dist/es/components/Notifications/hooks/useNotificationApi.mjs.map +1 -1
- package/dist/es/components/Notifications/hooks/useNotificationTarget.mjs +8 -12
- package/dist/es/components/Notifications/hooks/useNotificationTarget.mjs.map +1 -1
- package/dist/es/components/Notifications/hooks/useNotifications.mjs +1 -1
- package/dist/es/components/Notifications/hooks/useSystemNotifications.mjs +1 -1
- package/dist/es/components/Notifications/notificationTarget.mjs +17 -2
- package/dist/es/components/Notifications/notificationTarget.mjs.map +1 -1
- package/dist/es/components/Poll/Poll.mjs +1 -1
- package/dist/es/components/Poll/PollActions/AddCommentPrompt.mjs +8 -8
- package/dist/es/components/Poll/PollActions/AddCommentPrompt.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/EndPollAlert.mjs +9 -9
- package/dist/es/components/Poll/PollActions/EndPollAlert.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollActions.mjs +20 -14
- package/dist/es/components/Poll/PollActions/PollActions.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollAnswerList.mjs +8 -8
- package/dist/es/components/Poll/PollActions/PollAnswerList.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollOptionsFullList.mjs +4 -4
- package/dist/es/components/Poll/PollActions/PollOptionsFullList.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollQuestion.mjs +1 -1
- package/dist/es/components/Poll/PollActions/PollQuestion.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs +7 -5
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs +8 -4
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs +1 -1
- package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/PollResults/PollResults.mjs +11 -7
- package/dist/es/components/Poll/PollActions/PollResults/PollResults.mjs.map +1 -1
- package/dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs +15 -12
- package/dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs.map +1 -1
- package/dist/es/components/Poll/PollContent.mjs +2 -2
- package/dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs +13 -11
- package/dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs.map +1 -1
- package/dist/es/components/Poll/PollCreationDialog/NameField.mjs +6 -5
- package/dist/es/components/Poll/PollCreationDialog/NameField.mjs.map +1 -1
- package/dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs +14 -13
- package/dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs.map +1 -1
- package/dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs +11 -12
- package/dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs.map +1 -1
- package/dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs +11 -20
- package/dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs.map +1 -1
- package/dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs +5 -5
- package/dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs.map +1 -1
- package/dist/es/components/Poll/PollHeader.mjs +10 -6
- package/dist/es/components/Poll/PollHeader.mjs.map +1 -1
- package/dist/es/components/Poll/PollOptionList.mjs +8 -4
- package/dist/es/components/Poll/PollOptionList.mjs.map +1 -1
- package/dist/es/components/Poll/PollOptionSelector.mjs +13 -7
- package/dist/es/components/Poll/PollOptionSelector.mjs.map +1 -1
- package/dist/es/components/Poll/PollVote.mjs +6 -5
- package/dist/es/components/Poll/PollVote.mjs.map +1 -1
- package/dist/es/components/Poll/hooks/useManagePollVotesRealtime.mjs.map +1 -1
- package/dist/es/components/Poll/hooks/usePollAnswerPagination.mjs +5 -5
- package/dist/es/components/Poll/hooks/usePollAnswerPagination.mjs.map +1 -1
- package/dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs +6 -5
- package/dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs.map +1 -1
- package/dist/es/components/ReactFileUtilities/UploadButton.mjs +5 -5
- package/dist/es/components/ReactFileUtilities/UploadButton.mjs.map +1 -1
- package/dist/es/components/Reactions/MessageReactions.mjs +7 -7
- package/dist/es/components/Reactions/MessageReactions.mjs.map +1 -1
- package/dist/es/components/Reactions/MessageReactionsDetail.mjs +19 -12
- package/dist/es/components/Reactions/MessageReactionsDetail.mjs.map +1 -1
- package/dist/es/components/Reactions/ReactionSelector.mjs +15 -21
- package/dist/es/components/Reactions/ReactionSelector.mjs.map +1 -1
- package/dist/es/components/Reactions/ReactionSelectorWithButton.mjs +4 -4
- package/dist/es/components/Reactions/ReactionSelectorWithButton.mjs.map +1 -1
- package/dist/es/components/Reactions/hooks/useFetchReactions.mjs +3 -3
- package/dist/es/components/Reactions/hooks/useFetchReactions.mjs.map +1 -1
- package/dist/es/components/Reactions/hooks/useProcessReactions.mjs +5 -4
- package/dist/es/components/Reactions/hooks/useProcessReactions.mjs.map +1 -1
- package/dist/es/components/Search/Search.mjs +1 -1
- package/dist/es/components/Search/SearchBar/SearchBar.mjs +8 -7
- package/dist/es/components/Search/SearchBar/SearchBar.mjs.map +1 -1
- package/dist/es/components/Search/SearchContext.mjs +2 -3
- package/dist/es/components/Search/SearchContext.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchResultItem.mjs +56 -39
- package/dist/es/components/Search/SearchResults/SearchResultItem.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchResults.mjs +4 -4
- package/dist/es/components/Search/SearchResults/SearchResults.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchResultsHeader.mjs +6 -5
- package/dist/es/components/Search/SearchResults/SearchResultsHeader.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs +1 -1
- package/dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultList.mjs +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs +2 -2
- package/dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResults.mjs +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs.map +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs +1 -1
- package/dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs.map +1 -1
- package/dist/es/components/Search/SearchSourceResultsContext.mjs +2 -3
- package/dist/es/components/Search/SearchSourceResultsContext.mjs.map +1 -1
- package/dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs +1 -1
- package/dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs.map +1 -1
- package/dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs +44 -19
- package/dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs +2 -2
- package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.mjs +2 -2
- package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs +11 -11
- package/dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/SuggestionList/SuggestionListItem.mjs +1 -1
- package/dist/es/components/TextareaComposer/TextareaComposer.mjs +13 -11
- package/dist/es/components/TextareaComposer/TextareaComposer.mjs.map +1 -1
- package/dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs +12 -11
- package/dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs.map +1 -1
- package/dist/es/components/Thread/Thread.mjs +89 -92
- package/dist/es/components/Thread/Thread.mjs.map +1 -1
- package/dist/es/components/Thread/ThreadHead.mjs +5 -4
- package/dist/es/components/Thread/ThreadHead.mjs.map +1 -1
- package/dist/es/components/Thread/ThreadHeader.mjs +31 -41
- package/dist/es/components/Thread/ThreadHeader.mjs.map +1 -1
- package/dist/es/components/Thread/ThreadStart.mjs +11 -10
- package/dist/es/components/Thread/ThreadStart.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadContext.mjs +1 -5
- package/dist/es/components/Threads/ThreadContext.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadList.mjs +19 -27
- package/dist/es/components/Threads/ThreadList/ThreadList.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs +3 -3
- package/dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadListHeader.mjs +4 -4
- package/dist/es/components/Threads/ThreadList/ThreadListHeader.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs +30 -30
- package/dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadListLoadingIndicator.mjs +1 -1
- package/dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs +7 -3
- package/dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs.map +1 -1
- package/dist/es/components/Threads/ThreadList/useThreadHighlighting.mjs +47 -0
- package/dist/es/components/Threads/ThreadList/useThreadHighlighting.mjs.map +1 -0
- package/dist/es/components/Threads/ThreadList/utils.a11y.mjs +13 -8
- package/dist/es/components/Threads/ThreadList/utils.a11y.mjs.map +1 -1
- package/dist/es/components/Threads/hooks/useCloseThread.mjs +30 -0
- package/dist/es/components/Threads/hooks/useCloseThread.mjs.map +1 -0
- package/dist/es/components/TypingIndicator/TypingIndicator.mjs +23 -17
- package/dist/es/components/TypingIndicator/TypingIndicator.mjs.map +1 -1
- package/dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs +15 -11
- package/dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs.map +1 -1
- package/dist/es/components/TypingIndicator/hooks/useDebouncedTypingActive.mjs.map +1 -1
- package/dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs +7 -3
- package/dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs.map +1 -1
- package/dist/es/components/VideoPlayer/VideoThumbnail.mjs +2 -2
- package/dist/es/components/VideoPlayer/VideoThumbnail.mjs.map +1 -1
- package/dist/es/context/AttachmentContext.mjs +16 -0
- package/dist/es/context/AttachmentContext.mjs.map +1 -0
- package/dist/es/context/ChannelInstanceContext.mjs +17 -0
- package/dist/es/context/ChannelInstanceContext.mjs.map +1 -0
- package/dist/es/context/ChannelListContext.mjs +3 -6
- package/dist/es/context/ChannelListContext.mjs.map +1 -1
- package/dist/es/context/ChatContext.mjs +2 -8
- package/dist/es/context/ChatContext.mjs.map +1 -1
- package/dist/es/context/ComponentContext.mjs +1 -1
- package/dist/es/context/ComponentContext.mjs.map +1 -1
- package/dist/es/context/DialogManagerContext.mjs +2 -2
- package/dist/es/context/DialogManagerContext.mjs.map +1 -1
- package/dist/es/context/MessageBounceContext.mjs +12 -14
- package/dist/es/context/MessageBounceContext.mjs.map +1 -1
- package/dist/es/context/MessageComposerContext.mjs +8 -6
- package/dist/es/context/MessageComposerContext.mjs.map +1 -1
- package/dist/es/context/MessageComposerControllerContext.mjs +19 -0
- package/dist/es/context/MessageComposerControllerContext.mjs.map +1 -0
- package/dist/es/context/MessageContext.mjs +2 -5
- package/dist/es/context/MessageContext.mjs.map +1 -1
- package/dist/es/context/MessageListContext.mjs +2 -8
- package/dist/es/context/MessageListContext.mjs.map +1 -1
- package/dist/es/context/MessageTranslationViewContext.mjs +3 -6
- package/dist/es/context/MessageTranslationViewContext.mjs.map +1 -1
- package/dist/es/context/ModalContext.mjs +6 -8
- package/dist/es/context/ModalContext.mjs.map +1 -1
- package/dist/es/context/PollContext.mjs +2 -3
- package/dist/es/context/PollContext.mjs.map +1 -1
- package/dist/es/context/TranslationContext.mjs +8 -21
- package/dist/es/context/TranslationContext.mjs.map +1 -1
- package/dist/es/context/VirtualizedMessageListContext.mjs +2 -1
- package/dist/es/context/VirtualizedMessageListContext.mjs.map +1 -1
- package/dist/es/context/WithComponents.mjs +3 -3
- package/dist/es/context/WithComponents.mjs.map +1 -1
- package/dist/es/context/WorkspaceNavigationContext.mjs +45 -0
- package/dist/es/context/WorkspaceNavigationContext.mjs.map +1 -0
- package/dist/es/context/requireContext.mjs +17 -0
- package/dist/es/context/requireContext.mjs.map +1 -0
- package/dist/es/context/useChannel.mjs +14 -0
- package/dist/es/context/useChannel.mjs.map +1 -0
- package/dist/es/context/useComponentContextIcons.mjs +8 -13
- package/dist/es/context/useComponentContextIcons.mjs.map +1 -1
- package/dist/es/hooks/useIsDmChannel.mjs +30 -0
- package/dist/es/hooks/useIsDmChannel.mjs.map +1 -0
- package/dist/es/hooks/useMessagePaginator.mjs +14 -0
- package/dist/es/hooks/useMessagePaginator.mjs.map +1 -0
- package/dist/es/i18n/Streami18n.mjs +38 -521
- package/dist/es/i18n/Streami18n.mjs.map +1 -1
- package/dist/es/i18n/TranslationBuilder/index.mjs +3 -0
- package/dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs +22 -24
- package/dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs.map +1 -1
- package/dist/es/i18n/TranslationBuilder/notifications/translators.mjs +20 -31
- package/dist/es/i18n/TranslationBuilder/notifications/translators.mjs.map +1 -1
- package/dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs +42 -15
- package/dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs.map +1 -1
- package/dist/es/i18n/runtimeDefaults.mjs +41 -0
- package/dist/es/i18n/runtimeDefaults.mjs.map +1 -0
- package/dist/es/i18n/useStreami18n.mjs +41 -0
- package/dist/es/i18n/useStreami18n.mjs.map +1 -0
- package/dist/es/i18n/utils.mjs +7 -125
- package/dist/es/i18n/utils.mjs.map +1 -1
- package/dist/es/index.mjs +175 -180
- package/dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs +4 -4
- package/dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/ChannelDetail.mjs +1 -1
- package/dist/es/plugins/ChannelDetail/ChannelDetail.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/ChannelDetailEmptyList.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs +3 -3
- package/dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs +4 -5
- package/dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs +4 -4
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs +9 -8
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs +7 -6
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/useChannelFilesSearch.mjs +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.mjs +44 -44
- package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs +25 -25
- package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs +4 -4
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs +13 -13
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs +8 -3
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/useChannelMediaSearch.mjs +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.mjs +44 -41
- package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs +6 -5
- package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs +19 -11
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs +12 -11
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.mjs +8 -8
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs +8 -4
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs +1 -1
- package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs +3 -3
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs +24 -21
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs +9 -17
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs.map +1 -1
- package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesSearch.mjs +1 -1
- package/dist/es/plugins/Emojis/EmojiPicker.mjs +9 -8
- package/dist/es/plugins/Emojis/EmojiPicker.mjs.map +1 -1
- package/dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs +2 -1
- package/dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs.map +1 -1
- package/dist/es/plugins/SlotGeometry/SlotGeometry.mjs +141 -0
- package/dist/es/plugins/SlotGeometry/SlotGeometry.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/ChannelSlot.mjs +30 -0
- package/dist/es/plugins/SlotLayout/ChannelSlot.mjs.map +1 -0
- package/dist/es/{components/ChatView → plugins/SlotLayout}/ChatView.a11y.utility.mjs +1 -1
- package/dist/es/plugins/SlotLayout/ChatView.a11y.utility.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/ChatView.mjs +277 -0
- package/dist/es/plugins/SlotLayout/ChatView.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/ChatViewNavigationContext.mjs +239 -0
- package/dist/es/plugins/SlotLayout/ChatViewNavigationContext.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/ThreadListSlot.mjs +42 -0
- package/dist/es/plugins/SlotLayout/ThreadListSlot.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/ThreadSlot.mjs +34 -0
- package/dist/es/plugins/SlotLayout/ThreadSlot.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/hooks/useLayoutViewState.mjs +26 -0
- package/dist/es/plugins/SlotLayout/hooks/useLayoutViewState.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/hooks/useSlotEntity.mjs +167 -0
- package/dist/es/plugins/SlotLayout/hooks/useSlotEntity.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/layout/Slot.mjs +46 -0
- package/dist/es/plugins/SlotLayout/layout/Slot.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/layout/WorkspaceLayout.mjs +23 -0
- package/dist/es/plugins/SlotLayout/layout/WorkspaceLayout.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/layoutController/LayoutController.mjs +376 -0
- package/dist/es/plugins/SlotLayout/layoutController/LayoutController.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/layoutController/serialization.mjs +80 -0
- package/dist/es/plugins/SlotLayout/layoutController/serialization.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/slotBinding.mjs +15 -0
- package/dist/es/plugins/SlotLayout/slotBinding.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/slotRegistry.mjs +64 -0
- package/dist/es/plugins/SlotLayout/slotRegistry.mjs.map +1 -0
- package/dist/es/plugins/SlotLayout/workspaceNavigationAdapter.mjs +130 -0
- package/dist/es/plugins/SlotLayout/workspaceNavigationAdapter.mjs.map +1 -0
- package/dist/es/slot-geometry.mjs +2 -0
- package/dist/es/slot-layout.mjs +14 -0
- package/dist/es/store/hooks/useStateStore.mjs.map +1 -1
- package/dist/es/utils/getChannel.mjs +5 -2
- package/dist/es/utils/getChannel.mjs.map +1 -1
- package/dist/es/utils/useStableCallback.mjs +1 -1
- package/dist/es/utils/useStableCallback.mjs.map +1 -1
- package/dist/types/a11y/accessibleLabel.d.ts.map +1 -1
- package/dist/types/components/AIStateIndicator/AIStateIndicator.d.ts.map +1 -1
- package/dist/types/components/AIStateIndicator/hooks/useAIState.d.ts +3 -8
- package/dist/types/components/AIStateIndicator/hooks/useAIState.d.ts.map +1 -1
- package/dist/types/components/Accessibility/NotificationAnnouncer.d.ts +1 -2
- package/dist/types/components/Accessibility/NotificationAnnouncer.d.ts.map +1 -1
- package/dist/types/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts.map +1 -1
- package/dist/types/components/Accessibility/hooks/useInteractionAnnouncements.d.ts.map +1 -1
- package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts +4 -0
- package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts.map +1 -1
- package/dist/types/components/Attachment/Attachment.d.ts +13 -2
- package/dist/types/components/Attachment/Attachment.d.ts.map +1 -1
- package/dist/types/components/Attachment/AttachmentActions.d.ts.map +1 -1
- package/dist/types/components/Attachment/AttachmentContainer.d.ts +2 -2
- package/dist/types/components/Attachment/AttachmentContainer.d.ts.map +1 -1
- package/dist/types/components/Attachment/Audio.d.ts.map +1 -1
- package/dist/types/components/Attachment/FileAttachment.d.ts.map +1 -1
- package/dist/types/components/Attachment/Geolocation.d.ts +3 -3
- package/dist/types/components/Attachment/Geolocation.d.ts.map +1 -1
- package/dist/types/components/Attachment/Giphy.d.ts.map +1 -1
- package/dist/types/components/Attachment/LinkPreview/Card.d.ts.map +1 -1
- package/dist/types/components/Attachment/LinkPreview/CardAudio.d.ts +1 -1
- package/dist/types/components/Attachment/LinkPreview/CardAudio.d.ts.map +1 -1
- package/dist/types/components/Attachment/ModalGallery.d.ts.map +1 -1
- package/dist/types/components/Attachment/UnsupportedAttachment.d.ts.map +1 -1
- package/dist/types/components/Attachment/VideoAttachment.d.ts.map +1 -1
- package/dist/types/components/Attachment/VisibilityDisclaimer.d.ts.map +1 -1
- package/dist/types/components/Attachment/VoiceRecording.d.ts.map +1 -1
- package/dist/types/components/Attachment/components/DownloadButton.d.ts.map +1 -1
- package/dist/types/components/Attachment/components/index.d.ts +1 -1
- package/dist/types/components/Attachment/components/index.d.ts.map +1 -1
- package/dist/types/components/Attachment/hooks/useAttachmentUploadState.d.ts +0 -28
- package/dist/types/components/Attachment/hooks/useAttachmentUploadState.d.ts.map +1 -1
- package/dist/types/components/Attachment/index.d.ts +1 -1
- package/dist/types/components/Attachment/index.d.ts.map +1 -1
- package/dist/types/components/Attachment/utils.d.ts +2 -2
- package/dist/types/components/Attachment/utils.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/AudioPlaybackArbiter.d.ts +37 -0
- package/dist/types/components/AudioPlayback/AudioPlaybackArbiter.d.ts.map +1 -0
- package/dist/types/components/AudioPlayback/AudioPlayer.d.ts +1 -1
- package/dist/types/components/AudioPlayback/AudioPlayer.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts +19 -31
- package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/WithAudioPlayback.d.ts +17 -2
- package/dist/types/components/AudioPlayback/WithAudioPlayback.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/components/ProgressBar.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/components/WaveProgressBar.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/components/progressBarA11y.d.ts +2 -2
- package/dist/types/components/AudioPlayback/components/progressBarA11y.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/index.d.ts.map +1 -1
- package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts +2 -2
- package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts.map +1 -1
- package/dist/types/components/Avatar/Avatar.d.ts +1 -5
- package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/types/components/Badge/Badge.d.ts.map +1 -1
- package/dist/types/components/Badge/MediaBadge.d.ts.map +1 -1
- package/dist/types/components/BaseImage/ImagePlaceholder.d.ts.map +1 -1
- package/dist/types/components/Button/PlayButton.d.ts.map +1 -1
- package/dist/types/components/Button/WorkspaceNavigationButtons.d.ts +11 -0
- package/dist/types/components/Button/WorkspaceNavigationButtons.d.ts.map +1 -0
- package/dist/types/components/Button/index.d.ts +1 -0
- package/dist/types/components/Button/index.d.ts.map +1 -1
- package/dist/types/components/Channel/Channel.d.ts +9 -57
- package/dist/types/components/Channel/Channel.d.ts.map +1 -1
- package/dist/types/components/Channel/hooks/useChannelCapabilities.d.ts +4 -0
- package/dist/types/components/Channel/hooks/useChannelCapabilities.d.ts.map +1 -0
- package/dist/types/components/Channel/index.d.ts +1 -2
- package/dist/types/components/Channel/index.d.ts.map +1 -1
- package/dist/types/components/ChannelHeader/ChannelHeader.d.ts +12 -0
- package/dist/types/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
- package/dist/types/components/ChannelHeader/hooks/useChannelHasMembersOnline.d.ts +8 -0
- package/dist/types/components/ChannelHeader/hooks/useChannelHasMembersOnline.d.ts.map +1 -1
- package/dist/types/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.d.ts +7 -8
- package/dist/types/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.d.ts.map +1 -1
- package/dist/types/components/ChannelList/ChannelList.d.ts +11 -78
- package/dist/types/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/types/components/ChannelList/ChannelListHeader.d.ts.map +1 -1
- package/dist/types/components/ChannelList/ChannelLists.d.ts +10 -0
- package/dist/types/components/ChannelList/ChannelLists.d.ts.map +1 -0
- package/dist/types/components/ChannelList/ChannelNavigation.d.ts +9 -0
- package/dist/types/components/ChannelList/ChannelNavigation.d.ts.map +1 -0
- package/dist/types/components/ChannelList/hooks/index.d.ts +1 -2
- package/dist/types/components/ChannelList/hooks/index.d.ts.map +1 -1
- package/dist/types/components/ChannelList/hooks/useChannelMembersState.d.ts.map +1 -1
- package/dist/types/components/ChannelList/hooks/useChannelMembershipState.d.ts.map +1 -1
- package/dist/types/components/ChannelList/hooks/useChannelPaginatorState.d.ts +18 -0
- package/dist/types/components/ChannelList/hooks/useChannelPaginatorState.d.ts.map +1 -0
- package/dist/types/components/ChannelList/hooks/useSelectedChannelState.d.ts +3 -3
- package/dist/types/components/ChannelList/hooks/useSelectedChannelState.d.ts.map +1 -1
- package/dist/types/components/ChannelList/index.d.ts +3 -2
- package/dist/types/components/ChannelList/index.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/ChannelListItem.d.ts +9 -18
- package/dist/types/components/ChannelListItem/ChannelListItem.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.defaults.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/ChannelListItemTimestamp.d.ts +3 -3
- package/dist/types/components/ChannelListItem/ChannelListItemTimestamp.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/ChannelListItemUI.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/hooks/useChannelDisplayName.d.ts +1 -1
- package/dist/types/components/ChannelListItem/hooks/useChannelDisplayName.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/hooks/useIsChannelMuted.d.ts +8 -5
- package/dist/types/components/ChannelListItem/hooks/useIsChannelMuted.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/hooks/useMessageDeliveryStatus.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/utils.a11y.d.ts +14 -5
- package/dist/types/components/ChannelListItem/utils.a11y.d.ts.map +1 -1
- package/dist/types/components/ChannelListItem/utils.d.ts +1 -1
- package/dist/types/components/ChannelListItem/utils.d.ts.map +1 -1
- package/dist/types/components/Chat/Chat.d.ts +1 -4
- package/dist/types/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/components/Chat/hooks/useChat.d.ts +4 -16
- package/dist/types/components/Chat/hooks/useChat.d.ts.map +1 -1
- package/dist/types/components/Chat/hooks/useCreateChatClient.d.ts +2 -2
- package/dist/types/components/Chat/hooks/useCreateChatClient.d.ts.map +1 -1
- package/dist/types/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
- package/dist/types/components/Chat/hooks/useNetworkConnectionState.d.ts +34 -0
- package/dist/types/components/Chat/hooks/useNetworkConnectionState.d.ts.map +1 -0
- package/dist/types/components/Chat/hooks/useReportLostConnectionSystemNotification.d.ts +26 -2
- package/dist/types/components/Chat/hooks/useReportLostConnectionSystemNotification.d.ts.map +1 -1
- package/dist/types/components/Chat/hooks/useWSConnectionState.d.ts +22 -0
- package/dist/types/components/Chat/hooks/useWSConnectionState.d.ts.map +1 -0
- package/dist/types/components/Chat/index.d.ts +2 -0
- package/dist/types/components/Chat/index.d.ts.map +1 -1
- package/dist/types/components/Dialog/components/ContextMenu.d.ts +0 -4
- package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
- package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts +2 -2
- package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts.map +1 -1
- package/dist/types/components/Dialog/service/DialogManager.d.ts +1 -1
- package/dist/types/components/Dialog/service/DialogManager.d.ts.map +1 -1
- package/dist/types/components/EmptyStateIndicator/EmptyStateIndicator.d.ts.map +1 -1
- package/dist/types/components/Form/Dropdown.d.ts +4 -1
- package/dist/types/components/Form/Dropdown.d.ts.map +1 -1
- package/dist/types/components/Form/NumericInput.d.ts.map +1 -1
- package/dist/types/components/Gallery/GalleryContext.d.ts +5 -0
- package/dist/types/components/Gallery/GalleryContext.d.ts.map +1 -1
- package/dist/types/components/Gallery/GalleryHeader.d.ts.map +1 -1
- package/dist/types/components/Gallery/GalleryUI.d.ts.map +1 -1
- package/dist/types/components/Icons/index.d.ts +1 -1
- package/dist/types/components/Icons/index.d.ts.map +1 -1
- package/dist/types/components/Icons/slots.d.ts +18 -7
- package/dist/types/components/Icons/slots.d.ts.map +1 -1
- package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +8 -2
- package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts.map +1 -1
- package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.d.ts +43 -0
- package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.d.ts.map +1 -0
- package/dist/types/components/InfiniteScrollPaginator/hooks/useCursorPaginator.d.ts +1 -1
- package/dist/types/components/InfiniteScrollPaginator/hooks/useCursorPaginator.d.ts.map +1 -1
- package/dist/types/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
- package/dist/types/components/Loading/AttachmentUploadedSizeIndicator.d.ts +3 -0
- package/dist/types/components/Loading/AttachmentUploadedSizeIndicator.d.ts.map +1 -1
- package/dist/types/components/Loading/LoadingErrorIndicator.d.ts.map +1 -1
- package/dist/types/components/Loading/LoadingIndicator.d.ts +2 -3
- package/dist/types/components/Loading/LoadingIndicator.d.ts.map +1 -1
- package/dist/types/components/Loading/UploadProgressIndicator.d.ts +2 -2
- package/dist/types/components/Loading/index.d.ts +1 -1
- package/dist/types/components/Loading/index.d.ts.map +1 -1
- package/dist/types/components/Loading/progress-indicators.d.ts.map +1 -1
- package/dist/types/components/Location/ShareLocationDialog.d.ts.map +1 -1
- package/dist/types/components/Location/hooks/useLiveLocationSharingManager.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/classes/MediaRecorderController.d.ts.map +1 -1
- package/dist/types/components/MediaRecorder/hooks/useMediaRecorder.d.ts +2 -2
- package/dist/types/components/MediaRecorder/hooks/useMediaRecorder.d.ts.map +1 -1
- package/dist/types/components/Message/Message.d.ts.map +1 -1
- package/dist/types/components/Message/MessageAlsoSentInChannelIndicator.d.ts +11 -1
- package/dist/types/components/Message/MessageAlsoSentInChannelIndicator.d.ts.map +1 -1
- package/dist/types/components/Message/MessageDeletedBubble.d.ts.map +1 -1
- package/dist/types/components/Message/MessageEditedIndicator.d.ts.map +1 -1
- package/dist/types/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
- package/dist/types/components/Message/MessageStatus.d.ts.map +1 -1
- package/dist/types/components/Message/MessageText.d.ts.map +1 -1
- package/dist/types/components/Message/MessageTimestamp.d.ts.map +1 -1
- package/dist/types/components/Message/MessageTranslationIndicator.d.ts.map +1 -1
- package/dist/types/components/Message/MessageUI.d.ts.map +1 -1
- package/dist/types/components/Message/ReminderNotification.d.ts.map +1 -1
- package/dist/types/components/Message/StreamedMessageText.d.ts.map +1 -1
- package/dist/types/components/Message/Timestamp.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/index.d.ts +1 -0
- package/dist/types/components/Message/hooks/index.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useActionHandler.d.ts +1 -1
- package/dist/types/components/Message/hooks/useActionHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useDeleteHandler.d.ts +6 -2
- package/dist/types/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useMarkUnreadHandler.d.ts +6 -1
- package/dist/types/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useMentionsHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useMessageAlsoSentInChannelNavigation.d.ts +22 -0
- package/dist/types/components/Message/hooks/useMessageAlsoSentInChannelNavigation.d.ts.map +1 -0
- package/dist/types/components/Message/hooks/useMuteHandler.d.ts +7 -2
- package/dist/types/components/Message/hooks/useMuteHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useOpenThreadHandler.d.ts +1 -0
- package/dist/types/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/usePinHandler.d.ts +23 -2
- package/dist/types/components/Message/hooks/usePinHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useReactionHandler.d.ts +1 -1
- package/dist/types/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useReactionsFetcher.d.ts +2 -2
- package/dist/types/components/Message/hooks/useReactionsFetcher.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useRetryHandler.d.ts +3 -2
- package/dist/types/components/Message/hooks/useRetryHandler.d.ts.map +1 -1
- package/dist/types/components/Message/hooks/useUserRole.d.ts +1 -0
- package/dist/types/components/Message/hooks/useUserRole.d.ts.map +1 -1
- package/dist/types/components/Message/types.d.ts +11 -20
- package/dist/types/components/Message/types.d.ts.map +1 -1
- package/dist/types/components/Message/utils.d.ts +7 -38
- package/dist/types/components/Message/utils.d.ts.map +1 -1
- package/dist/types/components/MessageActions/DeleteMessageAlert.d.ts.map +1 -1
- package/dist/types/components/MessageActions/DownloadSubmenu.d.ts.map +1 -1
- package/dist/types/components/MessageActions/MessageActions.d.ts +6 -2
- package/dist/types/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/types/components/MessageActions/MessageActions.defaults.d.ts.map +1 -1
- package/dist/types/components/MessageActions/RemindMeSubmenu.d.ts.map +1 -1
- package/dist/types/components/MessageActions/hooks/useBaseMessageActionSetFilter.d.ts.map +1 -1
- package/dist/types/components/MessageBounce/MessageBouncePrompt.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/index.d.ts +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/index.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts +5 -5
- package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/CommandChip.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/EditMessageForm.d.ts +1 -0
- package/dist/types/components/MessageComposer/EditMessageForm.d.ts.map +1 -0
- package/dist/types/components/MessageComposer/MessageComposer.d.ts +1 -17
- package/dist/types/components/MessageComposer/MessageComposer.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/MessageComposerActions.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/MessageComposerUI.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/QuotedMessagePreview.d.ts +3 -3
- package/dist/types/components/MessageComposer/QuotedMessagePreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/RemoveAttachmentPreviewButton.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/SendButton.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/SendToChannelCheckbox.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/StopAIGenerationButton.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/WithDragAndDropUpload.d.ts +2 -5
- package/dist/types/components/MessageComposer/WithDragAndDropUpload.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/index.d.ts +1 -0
- package/dist/types/components/MessageComposer/hooks/index.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts +5 -1
- package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useAttachmentsForPreview.d.ts +1 -2
- package/dist/types/components/MessageComposer/hooks/useAttachmentsForPreview.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useCreateMessageComposerContext.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerBindings.d.ts +0 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerBindings.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerCommands.d.ts +2 -2
- package/dist/types/components/MessageComposer/hooks/useMessageComposerCommands.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerController.d.ts +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerController.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerHasSendableData.d.ts.map +1 -1
- package/dist/types/components/MessageComposer/hooks/useMessageComposerSubmitFn.d.ts +7 -0
- package/dist/types/components/MessageComposer/hooks/useMessageComposerSubmitFn.d.ts.map +1 -0
- package/dist/types/components/MessageComposer/index.d.ts +2 -1
- package/dist/types/components/MessageComposer/index.d.ts.map +1 -1
- package/dist/types/components/MessageList/FloatingDateSeparator.d.ts +1 -1
- package/dist/types/components/MessageList/FloatingDateSeparator.d.ts.map +1 -1
- package/dist/types/components/MessageList/MessageList.d.ts +24 -25
- package/dist/types/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/types/components/MessageList/NewMessageNotification.d.ts.map +1 -1
- package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts +0 -1
- package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts.map +1 -1
- package/dist/types/components/MessageList/UnreadMessagesNotification.d.ts +1 -4
- package/dist/types/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
- package/dist/types/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -1
- package/dist/types/components/MessageList/VirtualizedMessageList.d.ts +23 -42
- package/dist/types/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/types/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +3 -3
- package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.d.ts +2 -2
- package/dist/types/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +1 -3
- package/dist/types/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +1 -0
- package/dist/types/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +6 -25
- package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +1 -1
- package/dist/types/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.d.ts +2 -2
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +1 -1
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +1 -5
- package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/useCanPaginateReplies.d.ts +32 -0
- package/dist/types/components/MessageList/hooks/useCanPaginateReplies.d.ts.map +1 -0
- package/dist/types/components/MessageList/hooks/useLastDeliveredData.d.ts +1 -0
- package/dist/types/components/MessageList/hooks/useLastDeliveredData.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/useLastReadData.d.ts +1 -0
- package/dist/types/components/MessageList/hooks/useLastReadData.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/useMarkRead.d.ts +5 -9
- package/dist/types/components/MessageList/hooks/useMarkRead.d.ts.map +1 -1
- package/dist/types/components/MessageList/hooks/useReceiptsByMessageId.d.ts +12 -0
- package/dist/types/components/MessageList/hooks/useReceiptsByMessageId.d.ts.map +1 -0
- package/dist/types/components/MessageList/hooks/useThreadHead.d.ts +9 -0
- package/dist/types/components/MessageList/hooks/useThreadHead.d.ts.map +1 -0
- package/dist/types/components/MessageList/messageSourceKey.d.ts +14 -0
- package/dist/types/components/MessageList/messageSourceKey.d.ts.map +1 -0
- package/dist/types/components/MessageList/renderMessages.d.ts +11 -9
- package/dist/types/components/MessageList/renderMessages.d.ts.map +1 -1
- package/dist/types/components/MessageList/utils.d.ts +22 -13
- package/dist/types/components/MessageList/utils.d.ts.map +1 -1
- package/dist/types/components/Modal/CloseButtonOnModalOverlay.d.ts.map +1 -1
- package/dist/types/components/Notifications/Notification.d.ts.map +1 -1
- package/dist/types/components/Notifications/NotificationList.d.ts.map +1 -1
- package/dist/types/components/Notifications/hooks/useNotificationApi.d.ts +3 -0
- package/dist/types/components/Notifications/hooks/useNotificationApi.d.ts.map +1 -1
- package/dist/types/components/Notifications/hooks/useNotificationTarget.d.ts.map +1 -1
- package/dist/types/components/Notifications/notificationTarget.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/AddCommentPrompt.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/EndPollAlert.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollActions.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollAnswerList.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollOptionsFullList.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollQuestion.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts +2 -2
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts +2 -2
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesList.d.ts +2 -2
- package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesList.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/PollResults/PollResults.d.ts.map +1 -1
- package/dist/types/components/Poll/PollActions/SuggestPollOptionPrompt.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/MultipleAnswersField.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/NameField.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/OptionFieldSet.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/PollCreationDialog.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts.map +1 -1
- package/dist/types/components/Poll/PollCreationDialog/PollOptionReorderHandle.d.ts.map +1 -1
- package/dist/types/components/Poll/PollHeader.d.ts.map +1 -1
- package/dist/types/components/Poll/PollOptionList.d.ts.map +1 -1
- package/dist/types/components/Poll/PollOptionSelector.d.ts +2 -2
- package/dist/types/components/Poll/PollOptionSelector.d.ts.map +1 -1
- package/dist/types/components/Poll/PollVote.d.ts +1 -1
- package/dist/types/components/Poll/PollVote.d.ts.map +1 -1
- package/dist/types/components/Poll/hooks/useManagePollVotesRealtime.d.ts +2 -2
- package/dist/types/components/Poll/hooks/useManagePollVotesRealtime.d.ts.map +1 -1
- package/dist/types/components/Poll/hooks/usePollAnswerPagination.d.ts +2 -2
- package/dist/types/components/Poll/hooks/usePollAnswerPagination.d.ts.map +1 -1
- package/dist/types/components/Poll/hooks/usePollOptionVotesPagination.d.ts +2 -2
- package/dist/types/components/Poll/hooks/usePollOptionVotesPagination.d.ts.map +1 -1
- package/dist/types/components/Reactions/MessageReactions.d.ts.map +1 -1
- package/dist/types/components/Reactions/MessageReactionsDetail.d.ts +2 -2
- package/dist/types/components/Reactions/MessageReactionsDetail.d.ts.map +1 -1
- package/dist/types/components/Reactions/ReactionSelector.d.ts.map +1 -1
- package/dist/types/components/Reactions/ReactionSelectorWithButton.d.ts +0 -5
- package/dist/types/components/Reactions/ReactionSelectorWithButton.d.ts.map +1 -1
- package/dist/types/components/Reactions/hooks/useFetchReactions.d.ts +2 -2
- package/dist/types/components/Reactions/hooks/useFetchReactions.d.ts.map +1 -1
- package/dist/types/components/Reactions/hooks/useProcessReactions.d.ts +1 -3
- package/dist/types/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
- package/dist/types/components/Search/SearchBar/SearchBar.d.ts.map +1 -1
- package/dist/types/components/Search/SearchContext.d.ts.map +1 -1
- package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts +20 -6
- package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts.map +1 -1
- package/dist/types/components/Search/SearchResults/SearchResultsHeader.d.ts.map +1 -1
- package/dist/types/components/Search/SearchResults/SearchSourceResultsEmpty.d.ts.map +1 -1
- package/dist/types/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.d.ts.map +1 -1
- package/dist/types/components/Search/SearchSourceResultsContext.d.ts.map +1 -1
- package/dist/types/components/Search/hooks/index.d.ts +0 -1
- package/dist/types/components/Search/hooks/index.d.ts.map +1 -1
- package/dist/types/components/SummarizedMessagePreview/SummarizedMessagePreview.d.ts +6 -0
- package/dist/types/components/SummarizedMessagePreview/SummarizedMessagePreview.d.ts.map +1 -1
- package/dist/types/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/SuggestionList/CommandItem.d.ts +2 -2
- package/dist/types/components/TextareaComposer/SuggestionList/CommandItem.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/SuggestionList/SuggestionList.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/TextareaComposer.d.ts.map +1 -1
- package/dist/types/components/TextareaComposer/hooks/useTextareaPlaceholder.d.ts.map +1 -1
- package/dist/types/components/Thread/Thread.d.ts +31 -27
- package/dist/types/components/Thread/Thread.d.ts.map +1 -1
- package/dist/types/components/Thread/ThreadHead.d.ts.map +1 -1
- package/dist/types/components/Thread/ThreadHeader.d.ts +13 -6
- package/dist/types/components/Thread/ThreadHeader.d.ts.map +1 -1
- package/dist/types/components/Thread/ThreadStart.d.ts.map +1 -1
- package/dist/types/components/Thread/index.d.ts +0 -1
- package/dist/types/components/Thread/index.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadContext.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/ThreadList.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/ThreadListEmptyPlaceholder.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/ThreadListHeader.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/ThreadListItemUI.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.d.ts.map +1 -1
- package/dist/types/components/Threads/ThreadList/useThreadHighlighting.d.ts +15 -0
- package/dist/types/components/Threads/ThreadList/useThreadHighlighting.d.ts.map +1 -0
- package/dist/types/components/Threads/ThreadList/utils.a11y.d.ts.map +1 -1
- package/dist/types/components/Threads/hooks/useCloseThread.d.ts +9 -0
- package/dist/types/components/Threads/hooks/useCloseThread.d.ts.map +1 -0
- package/dist/types/components/Threads/index.d.ts +1 -0
- package/dist/types/components/Threads/index.d.ts.map +1 -1
- package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +4 -5
- package/dist/types/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
- package/dist/types/components/TypingIndicator/TypingIndicatorHeader.d.ts +1 -1
- package/dist/types/components/TypingIndicator/TypingIndicatorHeader.d.ts.map +1 -1
- package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts +2 -2
- package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts.map +1 -1
- package/dist/types/components/TypingIndicator/utils/getTypingStatusMessage.d.ts +2 -3
- package/dist/types/components/TypingIndicator/utils/getTypingStatusMessage.d.ts.map +1 -1
- package/dist/types/components/VideoPlayer/VideoThumbnail.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +0 -2
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/context/AttachmentContext.d.ts +19 -0
- package/dist/types/context/AttachmentContext.d.ts.map +1 -0
- package/dist/types/context/ChannelInstanceContext.d.ts +16 -0
- package/dist/types/context/ChannelInstanceContext.d.ts.map +1 -0
- package/dist/types/context/ChannelListContext.d.ts +9 -18
- package/dist/types/context/ChannelListContext.d.ts.map +1 -1
- package/dist/types/context/ChatContext.d.ts +10 -23
- package/dist/types/context/ChatContext.d.ts.map +1 -1
- package/dist/types/context/ComponentContext.d.ts +30 -23
- package/dist/types/context/ComponentContext.d.ts.map +1 -1
- package/dist/types/context/DialogManagerContext.d.ts.map +1 -1
- package/dist/types/context/MessageBounceContext.d.ts +1 -1
- package/dist/types/context/MessageBounceContext.d.ts.map +1 -1
- package/dist/types/context/MessageComposerContext.d.ts +7 -2
- package/dist/types/context/MessageComposerContext.d.ts.map +1 -1
- package/dist/types/context/MessageComposerControllerContext.d.ts +13 -0
- package/dist/types/context/MessageComposerControllerContext.d.ts.map +1 -0
- package/dist/types/context/MessageContext.d.ts +8 -21
- package/dist/types/context/MessageContext.d.ts.map +1 -1
- package/dist/types/context/MessageListContext.d.ts +2 -2
- package/dist/types/context/MessageListContext.d.ts.map +1 -1
- package/dist/types/context/MessageTranslationViewContext.d.ts.map +1 -1
- package/dist/types/context/ModalContext.d.ts +4 -0
- package/dist/types/context/ModalContext.d.ts.map +1 -1
- package/dist/types/context/PollContext.d.ts.map +1 -1
- package/dist/types/context/TranslationContext.d.ts +21 -11
- package/dist/types/context/TranslationContext.d.ts.map +1 -1
- package/dist/types/context/VirtualizedMessageListContext.d.ts.map +1 -1
- package/dist/types/context/WithComponents.d.ts.map +1 -1
- package/dist/types/context/WorkspaceNavigationContext.d.ts +128 -0
- package/dist/types/context/WorkspaceNavigationContext.d.ts.map +1 -0
- package/dist/types/context/index.d.ts +6 -4
- package/dist/types/context/index.d.ts.map +1 -1
- package/dist/types/context/requireContext.d.ts +10 -0
- package/dist/types/context/requireContext.d.ts.map +1 -0
- package/dist/types/context/useChannel.d.ts +3 -0
- package/dist/types/context/useChannel.d.ts.map +1 -0
- package/dist/types/context/useComponentContextIcons.d.ts +4 -6
- package/dist/types/context/useComponentContextIcons.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +3 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/useIsDmChannel.d.ts +13 -0
- package/dist/types/hooks/useIsDmChannel.d.ts.map +1 -0
- package/dist/types/hooks/useMessagePaginator.d.ts +6 -0
- package/dist/types/hooks/useMessagePaginator.d.ts.map +1 -0
- package/dist/types/i18n/Streami18n.d.ts +48 -848
- package/dist/types/i18n/Streami18n.d.ts.map +1 -1
- package/dist/types/i18n/TranslationBuilder/index.d.ts +6 -1
- package/dist/types/i18n/TranslationBuilder/index.d.ts.map +1 -1
- package/dist/types/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts.map +1 -1
- package/dist/types/i18n/TranslationBuilder/notifications/translators.d.ts.map +1 -1
- package/dist/types/i18n/TranslationBuilder/notifications/translatorsByNotificationType.d.ts +3 -1
- package/dist/types/i18n/TranslationBuilder/notifications/translatorsByNotificationType.d.ts.map +1 -1
- package/dist/types/i18n/index.d.ts +2 -2
- package/dist/types/i18n/index.d.ts.map +1 -1
- package/dist/types/i18n/keys.d.ts +583 -0
- package/dist/types/i18n/keys.d.ts.map +1 -0
- package/dist/types/i18n/runtimeDefaults.d.ts +37 -0
- package/dist/types/i18n/runtimeDefaults.d.ts.map +1 -0
- package/dist/types/i18n/types.d.ts +34 -104
- package/dist/types/i18n/types.d.ts.map +1 -1
- package/dist/types/i18n/useStreami18n.d.ts +19 -0
- package/dist/types/i18n/useStreami18n.d.ts.map +1 -0
- package/dist/types/i18n/utils.d.ts +18 -14
- package/dist/types/i18n/utils.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/AvatarWithChannelDetail.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/ChannelDetail.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/ChannelDetailEmptyList.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/ChannelDetailSearchInput.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.d.ts.map +1 -1
- package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.d.ts +5 -1
- package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.d.ts.map +1 -1
- package/dist/types/plugins/Emojis/EmojiPicker.d.ts +0 -4
- package/dist/types/plugins/Emojis/EmojiPicker.d.ts.map +1 -1
- package/dist/types/plugins/SlotGeometry/SlotGeometry.d.ts +72 -0
- package/dist/types/plugins/SlotGeometry/SlotGeometry.d.ts.map +1 -0
- package/dist/types/plugins/SlotGeometry/index.d.ts +3 -0
- package/dist/types/plugins/SlotGeometry/index.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ChannelSlot.d.ts +24 -0
- package/dist/types/plugins/SlotLayout/ChannelSlot.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ChatView.a11y.utility.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ChatView.d.ts +113 -0
- package/dist/types/plugins/SlotLayout/ChatView.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ChatViewNavigationContext.d.ts +111 -0
- package/dist/types/plugins/SlotLayout/ChatViewNavigationContext.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ThreadListSlot.d.ts +8 -0
- package/dist/types/plugins/SlotLayout/ThreadListSlot.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/ThreadSlot.d.ts +10 -0
- package/dist/types/plugins/SlotLayout/ThreadSlot.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/hooks/index.d.ts +3 -0
- package/dist/types/plugins/SlotLayout/hooks/index.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/hooks/useLayoutViewState.d.ts +5 -0
- package/dist/types/plugins/SlotLayout/hooks/useLayoutViewState.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/hooks/useSlotEntity.d.ts +162 -0
- package/dist/types/plugins/SlotLayout/hooks/useSlotEntity.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/index.d.ts +12 -0
- package/dist/types/plugins/SlotLayout/index.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/layout/Slot.d.ts +8 -0
- package/dist/types/plugins/SlotLayout/layout/Slot.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/layout/WorkspaceLayout.d.ts +11 -0
- package/dist/types/plugins/SlotLayout/layout/WorkspaceLayout.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/layoutController/LayoutController.d.ts +25 -0
- package/dist/types/plugins/SlotLayout/layoutController/LayoutController.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/layoutController/layoutControllerTypes.d.ts +121 -0
- package/dist/types/plugins/SlotLayout/layoutController/layoutControllerTypes.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/layoutController/serialization.d.ts +6 -0
- package/dist/types/plugins/SlotLayout/layoutController/serialization.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/slotBinding.d.ts +85 -0
- package/dist/types/plugins/SlotLayout/slotBinding.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/slotRegistry.d.ts +60 -0
- package/dist/types/plugins/SlotLayout/slotRegistry.d.ts.map +1 -0
- package/dist/types/plugins/SlotLayout/workspaceNavigationAdapter.d.ts +26 -0
- package/dist/types/plugins/SlotLayout/workspaceNavigationAdapter.d.ts.map +1 -0
- package/dist/types/store/hooks/useStateStore.d.ts +1 -1
- package/dist/types/store/hooks/useStateStore.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +0 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/types.d.ts +0 -10
- package/dist/types/types/types.d.ts.map +1 -1
- package/dist/types/utils/getChannel.d.ts +2 -2
- package/dist/types/utils/getChannel.d.ts.map +1 -1
- package/dist/types/utils/useStableCallback.d.ts +1 -1
- package/package.json +34 -16
- package/dist/cjs/NotificationList.4ce251ea.js +0 -9552
- package/dist/cjs/NotificationList.4ce251ea.js.map +0 -1
- package/dist/cjs/useChannelHeaderOnlineStatus.64c443f5.js +0 -961
- package/dist/cjs/useChannelHeaderOnlineStatus.64c443f5.js.map +0 -1
- package/dist/cjs/useInertWhenHidden.1a2a6a2b.js +0 -6573
- package/dist/cjs/useInertWhenHidden.1a2a6a2b.js.map +0 -1
- package/dist/es/components/Channel/channelState.mjs +0 -195
- package/dist/es/components/Channel/channelState.mjs.map +0 -1
- package/dist/es/components/Channel/hooks/useCreateChannelStateContext.mjs +0 -86
- package/dist/es/components/Channel/hooks/useCreateChannelStateContext.mjs.map +0 -1
- package/dist/es/components/Channel/hooks/useCreateTypingContext.mjs +0 -10
- package/dist/es/components/Channel/hooks/useCreateTypingContext.mjs.map +0 -1
- package/dist/es/components/Channel/hooks/useEditMessageHandler.mjs +0 -13
- package/dist/es/components/Channel/hooks/useEditMessageHandler.mjs.map +0 -1
- package/dist/es/components/Channel/hooks/useIsMounted.mjs +0 -16
- package/dist/es/components/Channel/hooks/useIsMounted.mjs.map +0 -1
- package/dist/es/components/Channel/hooks/useMentionsHandlers.mjs +0 -18
- package/dist/es/components/Channel/hooks/useMentionsHandlers.mjs.map +0 -1
- package/dist/es/components/Channel/utils.mjs +0 -156
- package/dist/es/components/Channel/utils.mjs.map +0 -1
- package/dist/es/components/ChannelList/ChannelListUI.mjs +0 -35
- package/dist/es/components/ChannelList/ChannelListUI.mjs.map +0 -1
- package/dist/es/components/ChannelList/hooks/useChannelListShape.mjs +0 -310
- package/dist/es/components/ChannelList/hooks/useChannelListShape.mjs.map +0 -1
- package/dist/es/components/ChannelList/hooks/useConnectionRecoveredListener.mjs +0 -19
- package/dist/es/components/ChannelList/hooks/useConnectionRecoveredListener.mjs.map +0 -1
- package/dist/es/components/ChannelList/hooks/usePaginatedChannels.mjs +0 -110
- package/dist/es/components/ChannelList/hooks/usePaginatedChannels.mjs.map +0 -1
- package/dist/es/components/ChannelList/utils.mjs +0 -86
- package/dist/es/components/ChannelList/utils.mjs.map +0 -1
- package/dist/es/components/Chat/hooks/useChannelsQueryState.mjs +0 -16
- package/dist/es/components/Chat/hooks/useChannelsQueryState.mjs.map +0 -1
- package/dist/es/components/ChatView/ChatView.a11y.utility.mjs.map +0 -1
- package/dist/es/components/ChatView/ChatView.mjs +0 -224
- package/dist/es/components/ChatView/ChatView.mjs.map +0 -1
- package/dist/es/components/MessageComposer/hooks/useSubmitHandler.mjs +0 -98
- package/dist/es/components/MessageComposer/hooks/useSubmitHandler.mjs.map +0 -1
- package/dist/es/components/MessageList/hooks/useReducedMotionPreference.mjs +0 -23
- package/dist/es/components/MessageList/hooks/useReducedMotionPreference.mjs.map +0 -1
- package/dist/es/components/Search/hooks/useSearchFocusedMessage.mjs +0 -13
- package/dist/es/components/Search/hooks/useSearchFocusedMessage.mjs.map +0 -1
- package/dist/es/components/Thread/LegacyThreadContext.mjs +0 -8
- package/dist/es/components/Thread/LegacyThreadContext.mjs.map +0 -1
- package/dist/es/components/UtilityComponents/NullComponent.mjs +0 -6
- package/dist/es/components/UtilityComponents/NullComponent.mjs.map +0 -1
- package/dist/es/components/Window/Window.mjs +0 -21
- package/dist/es/components/Window/Window.mjs.map +0 -1
- package/dist/es/context/ChannelActionContext.mjs +0 -20
- package/dist/es/context/ChannelActionContext.mjs.map +0 -1
- package/dist/es/context/ChannelStateContext.mjs +0 -24
- package/dist/es/context/ChannelStateContext.mjs.map +0 -1
- package/dist/es/context/TypingContext.mjs +0 -20
- package/dist/es/context/TypingContext.mjs.map +0 -1
- package/dist/es/i18n/TranslationBuilder/TranslationBuilder.mjs +0 -86
- package/dist/es/i18n/TranslationBuilder/TranslationBuilder.mjs.map +0 -1
- package/dist/es/i18n/de.mjs +0 -782
- package/dist/es/i18n/de.mjs.map +0 -1
- package/dist/es/i18n/en.mjs +0 -779
- package/dist/es/i18n/en.mjs.map +0 -1
- package/dist/es/i18n/es.mjs +0 -821
- package/dist/es/i18n/es.mjs.map +0 -1
- package/dist/es/i18n/fr.mjs +0 -822
- package/dist/es/i18n/fr.mjs.map +0 -1
- package/dist/es/i18n/hi.mjs +0 -786
- package/dist/es/i18n/hi.mjs.map +0 -1
- package/dist/es/i18n/it.mjs +0 -821
- package/dist/es/i18n/it.mjs.map +0 -1
- package/dist/es/i18n/ja.mjs +0 -760
- package/dist/es/i18n/ja.mjs.map +0 -1
- package/dist/es/i18n/ko.mjs +0 -760
- package/dist/es/i18n/ko.mjs.map +0 -1
- package/dist/es/i18n/nl.mjs +0 -786
- package/dist/es/i18n/nl.mjs.map +0 -1
- package/dist/es/i18n/pt.mjs +0 -819
- package/dist/es/i18n/pt.mjs.map +0 -1
- package/dist/es/i18n/ru.mjs +0 -868
- package/dist/es/i18n/ru.mjs.map +0 -1
- package/dist/es/i18n/tr.mjs +0 -781
- package/dist/es/i18n/tr.mjs.map +0 -1
- package/dist/es/utils/getChannelConfig.mjs +0 -11
- package/dist/es/utils/getChannelConfig.mjs.map +0 -1
- package/dist/types/components/Channel/channelState.d.ts +0 -90
- package/dist/types/components/Channel/channelState.d.ts.map +0 -1
- package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts +0 -6
- package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +0 -1
- package/dist/types/components/Channel/hooks/useCreateTypingContext.d.ts +0 -3
- package/dist/types/components/Channel/hooks/useCreateTypingContext.d.ts.map +0 -1
- package/dist/types/components/Channel/hooks/useEditMessageHandler.d.ts +0 -5
- package/dist/types/components/Channel/hooks/useEditMessageHandler.d.ts.map +0 -1
- package/dist/types/components/Channel/hooks/useMentionsHandlers.d.ts +0 -10
- package/dist/types/components/Channel/hooks/useMentionsHandlers.d.ts.map +0 -1
- package/dist/types/components/Channel/utils.d.ts +0 -55
- package/dist/types/components/Channel/utils.d.ts.map +0 -1
- package/dist/types/components/ChannelList/ChannelListUI.d.ts +0 -18
- package/dist/types/components/ChannelList/ChannelListUI.d.ts.map +0 -1
- package/dist/types/components/ChannelList/hooks/useChannelListShape.d.ts +0 -61
- package/dist/types/components/ChannelList/hooks/useChannelListShape.d.ts.map +0 -1
- package/dist/types/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +0 -2
- package/dist/types/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts.map +0 -1
- package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts +0 -29
- package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +0 -1
- package/dist/types/components/ChannelList/utils.d.ts +0 -46
- package/dist/types/components/ChannelList/utils.d.ts.map +0 -1
- package/dist/types/components/Chat/hooks/useChannelsQueryState.d.ts +0 -12
- package/dist/types/components/Chat/hooks/useChannelsQueryState.d.ts.map +0 -1
- package/dist/types/components/ChatView/ChatView.a11y.utility.d.ts.map +0 -1
- package/dist/types/components/ChatView/ChatView.d.ts +0 -59
- package/dist/types/components/ChatView/ChatView.d.ts.map +0 -1
- package/dist/types/components/ChatView/index.d.ts +0 -2
- package/dist/types/components/ChatView/index.d.ts.map +0 -1
- package/dist/types/components/MessageComposer/hooks/useSubmitHandler.d.ts +0 -5
- package/dist/types/components/MessageComposer/hooks/useSubmitHandler.d.ts.map +0 -1
- package/dist/types/components/Search/hooks/useSearchFocusedMessage.d.ts +0 -2
- package/dist/types/components/Search/hooks/useSearchFocusedMessage.d.ts.map +0 -1
- package/dist/types/components/Thread/LegacyThreadContext.d.ts +0 -9
- package/dist/types/components/Thread/LegacyThreadContext.d.ts.map +0 -1
- package/dist/types/components/Window/Window.d.ts +0 -13
- package/dist/types/components/Window/Window.d.ts.map +0 -1
- package/dist/types/components/Window/index.d.ts +0 -2
- package/dist/types/components/Window/index.d.ts.map +0 -1
- package/dist/types/context/ChannelActionContext.d.ts +0 -46
- package/dist/types/context/ChannelActionContext.d.ts.map +0 -1
- package/dist/types/context/ChannelStateContext.d.ts +0 -51
- package/dist/types/context/ChannelStateContext.d.ts.map +0 -1
- package/dist/types/context/TypingContext.d.ts +0 -12
- package/dist/types/context/TypingContext.d.ts.map +0 -1
- package/dist/types/i18n/TranslationBuilder/TranslationBuilder.d.ts +0 -36
- package/dist/types/i18n/TranslationBuilder/TranslationBuilder.d.ts.map +0 -1
- package/dist/types/i18n/translations.d.ts +0 -14
- package/dist/types/i18n/translations.d.ts.map +0 -1
- package/dist/types/utils/getChannelConfig.d.ts +0 -8
- package/dist/types/utils/getChannelConfig.d.ts.map +0 -1
- /package/dist/types/{components/ChatView → plugins/SlotLayout}/ChatView.a11y.utility.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useComponentContext } from "../../context/ComponentContext.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { MessageContext } from "../../context/MessageContext.mjs";
|
|
3
3
|
import { useTranslationContext } from "../../context/TranslationContext.mjs";
|
|
4
4
|
import { LoadingIndicator } from "../Loading/LoadingIndicator.mjs";
|
|
5
5
|
import { GlobalModal } from "../Modal/GlobalModal.mjs";
|
|
@@ -7,7 +7,9 @@ import { BaseImage } from "../BaseImage/BaseImage.mjs";
|
|
|
7
7
|
import { VideoThumbnail } from "../VideoPlayer/VideoThumbnail.mjs";
|
|
8
8
|
import { GalleryUI } from "../Gallery/GalleryUI.mjs";
|
|
9
9
|
import { Gallery } from "../Gallery/Gallery.mjs";
|
|
10
|
-
import {
|
|
10
|
+
import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
|
|
11
|
+
import { useCallback, useContext, useMemo, useState } from "react";
|
|
12
|
+
import { convertTimestampToDate } from "stream-chat";
|
|
11
13
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
12
14
|
import clsx from "clsx";
|
|
13
15
|
//#region src/components/Attachment/ModalGallery.tsx
|
|
@@ -33,8 +35,18 @@ var BASE_IMAGE_PROP_KEYS = [
|
|
|
33
35
|
];
|
|
34
36
|
var ModalGallery = ({ className, closeOnBackgroundClick = true, items, modalClassName }) => {
|
|
35
37
|
const { BaseImage: BaseImage$1 = BaseImage, Gallery: Gallery$1 = Gallery, Modal = GlobalModal } = useComponentContext();
|
|
38
|
+
const { message } = useContext(MessageContext) ?? {};
|
|
36
39
|
const [modalOpen, setModalOpen] = useState(false);
|
|
37
40
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
41
|
+
const itemsWithSender = useMemo(() => items.map((item) => ({
|
|
42
|
+
...item,
|
|
43
|
+
createdAt: item.createdAt ?? convertTimestampToDate(message?.created_at),
|
|
44
|
+
user: item.user ?? message?.user ?? void 0
|
|
45
|
+
})), [
|
|
46
|
+
items,
|
|
47
|
+
message?.created_at,
|
|
48
|
+
message?.user
|
|
49
|
+
]);
|
|
38
50
|
const usesDefaultBaseImage = BaseImage$1 === BaseImage;
|
|
39
51
|
const closeModal = useCallback(() => {
|
|
40
52
|
setModalOpen(false);
|
|
@@ -73,14 +85,14 @@ var ModalGallery = ({ className, closeOnBackgroundClick = true, items, modalClas
|
|
|
73
85
|
closeOnBackgroundClick,
|
|
74
86
|
GalleryUI,
|
|
75
87
|
initialIndex: selectedIndex,
|
|
76
|
-
items,
|
|
88
|
+
items: itemsWithSender,
|
|
77
89
|
onRequestClose: closeModal
|
|
78
90
|
})
|
|
79
91
|
})] });
|
|
80
92
|
};
|
|
81
93
|
var ThumbnailButton = ({ BaseImage, baseImageUsesDefaultBehavior, index, item, itemCount, onClick, overflowCount, showOverlay }) => {
|
|
82
|
-
const { t } = useTranslationContext();
|
|
83
94
|
const { IconRetry } = useComponentContextIcons();
|
|
95
|
+
const { t } = useTranslationContext();
|
|
84
96
|
const imageUrl = item.imageUrl;
|
|
85
97
|
const [isLoadFailed, setIsLoadFailed] = useState(false);
|
|
86
98
|
const [isImageLoading, setIsImageLoading] = useState(Boolean(imageUrl));
|
|
@@ -98,7 +110,7 @@ var ThumbnailButton = ({ BaseImage, baseImageUsesDefaultBehavior, index, item, i
|
|
|
98
110
|
onClick();
|
|
99
111
|
};
|
|
100
112
|
return /* @__PURE__ */ jsxs("button", {
|
|
101
|
-
"aria-label": showRetryIndicator ? t("
|
|
113
|
+
"aria-label": showRetryIndicator ? t("common.retryUpload.ariaLabel", "Retry upload") : itemCountAwareLabel({
|
|
102
114
|
imageIndex: index + 1,
|
|
103
115
|
itemCount,
|
|
104
116
|
t
|
|
@@ -111,11 +123,11 @@ var ThumbnailButton = ({ BaseImage, baseImageUsesDefaultBehavior, index, item, i
|
|
|
111
123
|
type: "button",
|
|
112
124
|
children: [
|
|
113
125
|
item.videoThumbnailUrl ? /* @__PURE__ */ jsx(VideoThumbnail, {
|
|
114
|
-
alt: t("User uploaded content"),
|
|
126
|
+
alt: t("common.userUploadedContent.label", "User uploaded content"),
|
|
115
127
|
src: item.videoThumbnailUrl
|
|
116
128
|
}) : /* @__PURE__ */ jsx(BaseImage, {
|
|
117
129
|
...baseImageProps,
|
|
118
|
-
alt: item.alt ?? t("User uploaded content"),
|
|
130
|
+
alt: item.alt ?? t("common.userUploadedContent.label", "User uploaded content"),
|
|
119
131
|
onError: (event) => {
|
|
120
132
|
setIsImageLoading(false);
|
|
121
133
|
setIsLoadFailed(true);
|
|
@@ -151,7 +163,7 @@ var ThumbnailButton = ({ BaseImage, baseImageUsesDefaultBehavior, index, item, i
|
|
|
151
163
|
]
|
|
152
164
|
});
|
|
153
165
|
};
|
|
154
|
-
var itemCountAwareLabel = ({ imageIndex, itemCount, t }) => itemCount === 1 ? t("Open image in gallery") : t("Open gallery at image {{ index }}", { index: imageIndex });
|
|
166
|
+
var itemCountAwareLabel = ({ imageIndex, itemCount, t }) => itemCount === 1 ? t("attachment.modalGallery.openImageGallery.label", "Open image in gallery") : t("attachment.modalGallery.openGalleryImage.label", "Open gallery at image {{ index }}", { index: imageIndex });
|
|
155
167
|
var getBaseImageProps = (item) => {
|
|
156
168
|
const baseImageProps = {};
|
|
157
169
|
for (const key of BASE_IMAGE_PROP_KEYS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalGallery.mjs","names":[],"sources":["../../../../src/components/Attachment/ModalGallery.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport clsx from 'clsx';\n\nimport type { BaseImageProps } from '../BaseImage';\nimport type { GalleryItem } from '../Gallery/GalleryContext';\nimport { BaseImage as DefaultBaseImage } from '../BaseImage';\nimport { Gallery as DefaultGallery, GalleryUI } from '../Gallery';\nimport { LoadingIndicator } from '../Loading';\nimport { GlobalModal, type ModalCloseSource } from '../Modal';\nimport {\n useComponentContext,\n useComponentContextIcons,\n useTranslationContext,\n} from '../../context';\nimport { VideoThumbnail } from '../VideoPlayer/VideoThumbnail';\n\nconst MAX_VISIBLE_THUMBNAILS = 4;\nconst BASE_IMAGE_PROP_KEYS = [\n 'className',\n 'crossOrigin',\n 'decoding',\n 'draggable',\n 'fetchPriority',\n 'height',\n 'loading',\n 'onError',\n 'onLoad',\n 'ref',\n 'showDownloadButtonOnError',\n 'sizes',\n 'srcSet',\n 'style',\n 'title',\n 'useMap',\n 'width',\n] as const satisfies ReadonlyArray<keyof Omit<BaseImageProps, 'src'>>;\ntype BaseImagePropsWithoutSrc = Omit<BaseImageProps, 'src'>;\ntype PartialBaseImagePropMap = Partial<\n Record<(typeof BASE_IMAGE_PROP_KEYS)[number], unknown>\n>;\n\nexport type ModalGalleryProps = {\n /** Array of media attachments to display */\n items: GalleryItem[];\n className?: string;\n /** Whether clicking the empty gallery background should close the modal (default: true) */\n closeOnBackgroundClick?: boolean;\n modalClassName?: string;\n};\n\nexport const ModalGallery = ({\n className,\n closeOnBackgroundClick = true,\n items,\n modalClassName,\n}: ModalGalleryProps) => {\n const {\n BaseImage = DefaultBaseImage,\n Gallery = DefaultGallery,\n Modal = GlobalModal,\n } = useComponentContext();\n const [modalOpen, setModalOpen] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const usesDefaultBaseImage = BaseImage === DefaultBaseImage;\n\n const closeModal = useCallback(() => {\n setModalOpen(false);\n }, []);\n const preventOverlayClose = useCallback(\n (source: ModalCloseSource) => source !== 'overlay',\n [],\n );\n\n const handleThumbnailClick = useCallback((index: number) => {\n setSelectedIndex(index);\n setModalOpen(true);\n }, []);\n\n const itemCount = items.length;\n const visibleItems = items.slice(0, MAX_VISIBLE_THUMBNAILS);\n const overflowCount = itemCount - MAX_VISIBLE_THUMBNAILS;\n\n return (\n <>\n <div\n className={clsx('str-chat__modal-gallery', className, {\n 'str-chat__modal-gallery--three-images': itemCount === 3,\n 'str-chat__modal-gallery--two-images': itemCount === 2,\n })}\n >\n {visibleItems.map((item, index) => {\n const isLastVisible = index === MAX_VISIBLE_THUMBNAILS - 1;\n const showOverlay = isLastVisible && overflowCount > 0;\n\n return (\n <ThumbnailButton\n BaseImage={BaseImage}\n baseImageUsesDefaultBehavior={usesDefaultBaseImage}\n index={index}\n item={item}\n itemCount={itemCount}\n key={index}\n onClick={() => handleThumbnailClick(index)}\n overflowCount={overflowCount}\n showOverlay={showOverlay}\n />\n );\n })}\n </div>\n <Modal\n className={clsx('str-chat__gallery-modal', modalClassName)}\n onClose={closeModal}\n onCloseAttempt={preventOverlayClose}\n open={modalOpen}\n >\n <Gallery\n closeOnBackgroundClick={closeOnBackgroundClick}\n GalleryUI={GalleryUI}\n initialIndex={selectedIndex}\n items={items}\n onRequestClose={closeModal}\n />\n </Modal>\n </>\n );\n};\n\ntype ThumbnailButtonProps = {\n BaseImage: React.ComponentType<BaseImageProps>;\n baseImageUsesDefaultBehavior: boolean;\n index: number;\n item: GalleryItem;\n itemCount: number;\n onClick: () => void;\n overflowCount: number;\n showOverlay: boolean;\n};\n\nconst ThumbnailButton = ({\n BaseImage,\n baseImageUsesDefaultBehavior,\n index,\n item,\n itemCount,\n onClick,\n overflowCount,\n showOverlay,\n}: ThumbnailButtonProps) => {\n const { t } = useTranslationContext();\n const { IconRetry } = useComponentContextIcons();\n const imageUrl = item.imageUrl;\n const [isLoadFailed, setIsLoadFailed] = useState(false);\n const [isImageLoading, setIsImageLoading] = useState(Boolean(imageUrl));\n // Cache-busting suffix appended to image src on retry. Using a suffix instead of\n // a React key remount keeps the component (and its placeholder) mounted, preventing\n // layout shifts and height collapse during the reload attempt.\n const [retrySuffix, setRetrySuffix] = useState('');\n\n const {\n onError: itemOnError,\n onLoad: itemOnLoad,\n ...baseImageProps\n } = getBaseImageProps(item);\n const showRetryIndicator = isLoadFailed && !showOverlay;\n const showLoadingIndicator = isImageLoading && !showRetryIndicator && !showOverlay;\n\n const handleButtonClick = () => {\n if (showRetryIndicator) {\n setIsLoadFailed(false);\n setIsImageLoading(true);\n setRetrySuffix(`&retry=${Date.now()}`);\n return;\n }\n\n onClick();\n };\n\n const buttonLabel = showRetryIndicator\n ? t('aria/Retry upload')\n : itemCountAwareLabel({ imageIndex: index + 1, itemCount, t });\n\n return (\n <button\n aria-label={buttonLabel}\n className={clsx('str-chat__modal-gallery__image', {\n 'str-chat__modal-gallery__image--load-failed': showRetryIndicator,\n 'str-chat__modal-gallery__image--loading': showLoadingIndicator,\n })}\n onClick={handleButtonClick}\n type='button'\n >\n {item.videoThumbnailUrl ? (\n <VideoThumbnail alt={t('User uploaded content')} src={item.videoThumbnailUrl} />\n ) : (\n <BaseImage\n {...baseImageProps}\n alt={item.alt ?? t('User uploaded content')}\n onError={(event) => {\n setIsImageLoading(false);\n setIsLoadFailed(true);\n itemOnError?.(event);\n }}\n onLoad={(event) => {\n setIsImageLoading(false);\n setIsLoadFailed(false);\n itemOnLoad?.(event);\n }}\n src={imageUrl ? `${imageUrl}${retrySuffix}` : imageUrl}\n {...(baseImageUsesDefaultBehavior ? { showDownloadButtonOnError: false } : {})}\n />\n )}\n {showLoadingIndicator && (\n <div\n aria-hidden='true'\n className='str-chat__modal-gallery__image-loading-overlay'\n data-testid='str-chat__modal-gallery__image-loading-overlay'\n >\n <LoadingIndicator />\n </div>\n )}\n {showRetryIndicator && (\n <div\n aria-hidden='true'\n className='str-chat__modal-gallery__image-load-failed-overlay'\n data-testid='str-chat__modal-gallery__image-load-failed-overlay'\n >\n <div className='str-chat__modal-gallery__image-retry-indicator'>\n <IconRetry />\n </div>\n </div>\n )}\n {showOverlay && (\n <div className='str-chat__modal-gallery__placeholder'>+{overflowCount}</div>\n )}\n </button>\n );\n};\n\nconst itemCountAwareLabel = ({\n imageIndex,\n itemCount,\n t,\n}: {\n imageIndex: number;\n itemCount: number;\n t: ReturnType<typeof useTranslationContext>['t'];\n}) =>\n itemCount === 1\n ? t('Open image in gallery')\n : t('Open gallery at image {{ index }}', {\n index: imageIndex,\n });\n\nconst getBaseImageProps = (item: GalleryItem): BaseImagePropsWithoutSrc => {\n const baseImageProps: PartialBaseImagePropMap = {};\n for (const key of BASE_IMAGE_PROP_KEYS) {\n const value = item[key];\n if (value !== undefined) {\n baseImageProps[key] = value;\n }\n }\n\n return baseImageProps as BaseImagePropsWithoutSrc;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ModalGallery.mjs","names":[],"sources":["../../../../src/components/Attachment/ModalGallery.tsx"],"sourcesContent":["import { convertTimestampToDate } from 'stream-chat';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\nimport clsx from 'clsx';\n\nimport type { BaseImageProps } from '../BaseImage';\nimport type { GalleryItem } from '../Gallery/GalleryContext';\nimport { BaseImage as DefaultBaseImage } from '../BaseImage';\nimport { Gallery as DefaultGallery, GalleryUI } from '../Gallery';\nimport { LoadingIndicator } from '../Loading';\nimport { GlobalModal, type ModalCloseSource } from '../Modal';\nimport {\n MessageContext,\n useComponentContext,\n useComponentContextIcons,\n useTranslationContext,\n} from '../../context';\nimport { VideoThumbnail } from '../VideoPlayer/VideoThumbnail';\n\nconst MAX_VISIBLE_THUMBNAILS = 4;\nconst BASE_IMAGE_PROP_KEYS = [\n 'className',\n 'crossOrigin',\n 'decoding',\n 'draggable',\n 'fetchPriority',\n 'height',\n 'loading',\n 'onError',\n 'onLoad',\n 'ref',\n 'showDownloadButtonOnError',\n 'sizes',\n 'srcSet',\n 'style',\n 'title',\n 'useMap',\n 'width',\n] as const satisfies ReadonlyArray<keyof Omit<BaseImageProps, 'src'>>;\ntype BaseImagePropsWithoutSrc = Omit<BaseImageProps, 'src'>;\ntype PartialBaseImagePropMap = Partial<\n Record<(typeof BASE_IMAGE_PROP_KEYS)[number], unknown>\n>;\n\nexport type ModalGalleryProps = {\n /** Array of media attachments to display */\n items: GalleryItem[];\n className?: string;\n /** Whether clicking the empty gallery background should close the modal (default: true) */\n closeOnBackgroundClick?: boolean;\n modalClassName?: string;\n};\n\nexport const ModalGallery = ({\n className,\n closeOnBackgroundClick = true,\n items,\n modalClassName,\n}: ModalGalleryProps) => {\n const {\n BaseImage = DefaultBaseImage,\n Gallery = DefaultGallery,\n Modal = GlobalModal,\n } = useComponentContext();\n // ModalGallery is also usable standalone, outside a message\n const { message } = useContext(MessageContext) ?? {};\n const [modalOpen, setModalOpen] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(0);\n // the gallery header renders outside this provider, so sender and timestamp travel on the items\n const itemsWithSender = useMemo(\n () =>\n items.map((item) => ({\n ...item,\n createdAt: item.createdAt ?? convertTimestampToDate(message?.created_at),\n user: item.user ?? message?.user ?? undefined,\n })),\n [items, message?.created_at, message?.user],\n );\n const usesDefaultBaseImage = BaseImage === DefaultBaseImage;\n\n const closeModal = useCallback(() => {\n setModalOpen(false);\n }, []);\n const preventOverlayClose = useCallback(\n (source: ModalCloseSource) => source !== 'overlay',\n [],\n );\n\n const handleThumbnailClick = useCallback((index: number) => {\n setSelectedIndex(index);\n setModalOpen(true);\n }, []);\n\n const itemCount = items.length;\n const visibleItems = items.slice(0, MAX_VISIBLE_THUMBNAILS);\n const overflowCount = itemCount - MAX_VISIBLE_THUMBNAILS;\n\n return (\n <>\n <div\n className={clsx('str-chat__modal-gallery', className, {\n 'str-chat__modal-gallery--three-images': itemCount === 3,\n 'str-chat__modal-gallery--two-images': itemCount === 2,\n })}\n >\n {visibleItems.map((item, index) => {\n const isLastVisible = index === MAX_VISIBLE_THUMBNAILS - 1;\n const showOverlay = isLastVisible && overflowCount > 0;\n\n return (\n <ThumbnailButton\n BaseImage={BaseImage}\n baseImageUsesDefaultBehavior={usesDefaultBaseImage}\n index={index}\n item={item}\n itemCount={itemCount}\n key={index}\n onClick={() => handleThumbnailClick(index)}\n overflowCount={overflowCount}\n showOverlay={showOverlay}\n />\n );\n })}\n </div>\n <Modal\n className={clsx('str-chat__gallery-modal', modalClassName)}\n onClose={closeModal}\n onCloseAttempt={preventOverlayClose}\n open={modalOpen}\n >\n <Gallery\n closeOnBackgroundClick={closeOnBackgroundClick}\n GalleryUI={GalleryUI}\n initialIndex={selectedIndex}\n items={itemsWithSender}\n onRequestClose={closeModal}\n />\n </Modal>\n </>\n );\n};\n\ntype ThumbnailButtonProps = {\n BaseImage: React.ComponentType<BaseImageProps>;\n baseImageUsesDefaultBehavior: boolean;\n index: number;\n item: GalleryItem;\n itemCount: number;\n onClick: () => void;\n overflowCount: number;\n showOverlay: boolean;\n};\n\nconst ThumbnailButton = ({\n BaseImage,\n baseImageUsesDefaultBehavior,\n index,\n item,\n itemCount,\n onClick,\n overflowCount,\n showOverlay,\n}: ThumbnailButtonProps) => {\n const { IconRetry } = useComponentContextIcons();\n const { t } = useTranslationContext();\n const imageUrl = item.imageUrl;\n const [isLoadFailed, setIsLoadFailed] = useState(false);\n const [isImageLoading, setIsImageLoading] = useState(Boolean(imageUrl));\n // Cache-busting suffix appended to image src on retry. Using a suffix instead of\n // a React key remount keeps the component (and its placeholder) mounted, preventing\n // layout shifts and height collapse during the reload attempt.\n const [retrySuffix, setRetrySuffix] = useState('');\n\n const {\n onError: itemOnError,\n onLoad: itemOnLoad,\n ...baseImageProps\n } = getBaseImageProps(item);\n const showRetryIndicator = isLoadFailed && !showOverlay;\n const showLoadingIndicator = isImageLoading && !showRetryIndicator && !showOverlay;\n\n const handleButtonClick = () => {\n if (showRetryIndicator) {\n setIsLoadFailed(false);\n setIsImageLoading(true);\n setRetrySuffix(`&retry=${Date.now()}`);\n return;\n }\n\n onClick();\n };\n\n const buttonLabel = showRetryIndicator\n ? t('common.retryUpload.ariaLabel', 'Retry upload')\n : itemCountAwareLabel({ imageIndex: index + 1, itemCount, t });\n\n return (\n <button\n aria-label={buttonLabel}\n className={clsx('str-chat__modal-gallery__image', {\n 'str-chat__modal-gallery__image--load-failed': showRetryIndicator,\n 'str-chat__modal-gallery__image--loading': showLoadingIndicator,\n })}\n onClick={handleButtonClick}\n type='button'\n >\n {item.videoThumbnailUrl ? (\n <VideoThumbnail\n alt={t('common.userUploadedContent.label', 'User uploaded content')}\n src={item.videoThumbnailUrl}\n />\n ) : (\n <BaseImage\n {...baseImageProps}\n alt={item.alt ?? t('common.userUploadedContent.label', 'User uploaded content')}\n onError={(event) => {\n setIsImageLoading(false);\n setIsLoadFailed(true);\n itemOnError?.(event);\n }}\n onLoad={(event) => {\n setIsImageLoading(false);\n setIsLoadFailed(false);\n itemOnLoad?.(event);\n }}\n src={imageUrl ? `${imageUrl}${retrySuffix}` : imageUrl}\n {...(baseImageUsesDefaultBehavior ? { showDownloadButtonOnError: false } : {})}\n />\n )}\n {showLoadingIndicator && (\n <div\n aria-hidden='true'\n className='str-chat__modal-gallery__image-loading-overlay'\n data-testid='str-chat__modal-gallery__image-loading-overlay'\n >\n <LoadingIndicator />\n </div>\n )}\n {showRetryIndicator && (\n <div\n aria-hidden='true'\n className='str-chat__modal-gallery__image-load-failed-overlay'\n data-testid='str-chat__modal-gallery__image-load-failed-overlay'\n >\n <div className='str-chat__modal-gallery__image-retry-indicator'>\n <IconRetry />\n </div>\n </div>\n )}\n {showOverlay && (\n <div className='str-chat__modal-gallery__placeholder'>+{overflowCount}</div>\n )}\n </button>\n );\n};\n\nconst itemCountAwareLabel = ({\n imageIndex,\n itemCount,\n t,\n}: {\n imageIndex: number;\n itemCount: number;\n t: ReturnType<typeof useTranslationContext>['t'];\n}) =>\n itemCount === 1\n ? t('attachment.modalGallery.openImageGallery.label', 'Open image in gallery')\n : t(\n 'attachment.modalGallery.openGalleryImage.label',\n 'Open gallery at image {{ index }}',\n {\n index: imageIndex,\n },\n );\n\nconst getBaseImageProps = (item: GalleryItem): BaseImagePropsWithoutSrc => {\n const baseImageProps: PartialBaseImagePropMap = {};\n for (const key of BASE_IMAGE_PROP_KEYS) {\n const value = item[key];\n if (value !== undefined) {\n baseImageProps[key] = value;\n }\n }\n\n return baseImageProps as BaseImagePropsWithoutSrc;\n};\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
|
|
2
1
|
import { useTranslationContext } from "../../context/TranslationContext.mjs";
|
|
2
|
+
import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
|
|
3
3
|
import "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/Attachment/UnsupportedAttachment.tsx
|
|
6
6
|
var UnsupportedAttachment = () => {
|
|
7
7
|
const { IconUnsupportedAttachment } = useComponentContextIcons();
|
|
8
|
-
const { t } = useTranslationContext(
|
|
8
|
+
const { t } = useTranslationContext();
|
|
9
9
|
return /* @__PURE__ */ jsxs("div", {
|
|
10
10
|
className: "str-chat__message-attachment-unsupported",
|
|
11
11
|
"data-testid": "attachment-unsupported",
|
|
@@ -14,7 +14,7 @@ var UnsupportedAttachment = () => {
|
|
|
14
14
|
children: /* @__PURE__ */ jsx("div", {
|
|
15
15
|
className: "str-chat__message-attachment-unsupported__title",
|
|
16
16
|
"data-testid": "unsupported-attachment-title",
|
|
17
|
-
children: t("Unsupported attachment")
|
|
17
|
+
children: t("common.unsupportedAttachment.text", "Unsupported attachment")
|
|
18
18
|
})
|
|
19
19
|
})]
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnsupportedAttachment.mjs","names":[],"sources":["../../../../src/components/Attachment/UnsupportedAttachment.tsx"],"sourcesContent":["import React from 'react';\nimport type { Attachment } from 'stream-chat';\nimport { useComponentContextIcons, useTranslationContext } from '../../context';\n\nexport type UnsupportedAttachmentProps = {\n attachment: Attachment;\n};\n\nexport const UnsupportedAttachment = () => {\n const { IconUnsupportedAttachment } = useComponentContextIcons();\n
|
|
1
|
+
{"version":3,"file":"UnsupportedAttachment.mjs","names":[],"sources":["../../../../src/components/Attachment/UnsupportedAttachment.tsx"],"sourcesContent":["import React from 'react';\nimport type { Attachment } from 'stream-chat';\nimport { useComponentContextIcons, useTranslationContext } from '../../context';\n\nexport type UnsupportedAttachmentProps = {\n attachment: Attachment;\n};\n\nexport const UnsupportedAttachment = () => {\n const { IconUnsupportedAttachment } = useComponentContextIcons();\n const { t } = useTranslationContext();\n return (\n <div\n className='str-chat__message-attachment-unsupported'\n data-testid='attachment-unsupported'\n >\n <IconUnsupportedAttachment />\n <div className='str-chat__message-attachment-unsupported__metadata'>\n <div\n className='str-chat__message-attachment-unsupported__title'\n data-testid='unsupported-attachment-title'\n >\n {t('common.unsupportedAttachment.text', 'Unsupported attachment')}\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;AAQA,IAAa,8BAA8B;CACzC,MAAM,EAAE,8BAA8B,yBAAyB;CAC/D,MAAM,EAAE,MAAM,sBAAsB;CACpC,OACE,qBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAFd,CAIE,oBAAC,2BAAD,CAA4B,CAAA,GAC5B,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,OAAD;IACE,WAAU;IACV,eAAY;cAEX,EAAE,qCAAqC,wBAAwB;GAC7D,CAAA;EACF,CAAA,CACF;;AAET"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getAttachmentPreviewUrl, hasPendingUploadState } from "./hooks/useAttachmentUploadState.mjs";
|
|
1
|
+
import { useAttachmentContext } from "../../context/AttachmentContext.mjs";
|
|
3
2
|
import { getCssDimensionsVariables } from "./utils.mjs";
|
|
4
3
|
import { VideoPlayer } from "../VideoPlayer/VideoPlayer.mjs";
|
|
5
4
|
import { VideoThumbnail } from "../VideoPlayer/VideoThumbnail.mjs";
|
|
6
5
|
import { useLocalVideoDimensions } from "./hooks/useLocalVideoDimensions.mjs";
|
|
7
6
|
import React, { useLayoutEffect, useRef, useState } from "react";
|
|
7
|
+
import { getAttachmentPreviewUrl, isPendingUpload } from "stream-chat";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
import clsx from "clsx";
|
|
10
10
|
//#region src/components/Attachment/VideoAttachment.tsx
|
|
11
11
|
var VideoAttachment = ({ attachment, VideoPlayer: VideoPlayer$1 = VideoPlayer }) => {
|
|
12
|
-
const { shouldGenerateVideoThumbnail, videoAttachmentSizeHandler } =
|
|
12
|
+
const { shouldGenerateVideoThumbnail, videoAttachmentSizeHandler } = useAttachmentContext();
|
|
13
13
|
const videoElement = useRef(null);
|
|
14
14
|
const [attachmentConfiguration, setAttachmentConfiguration] = useState();
|
|
15
|
-
const [showVideo, setShowVideo] = React.useState(() => !shouldGenerateVideoThumbnail ||
|
|
15
|
+
const [showVideo, setShowVideo] = React.useState(() => !shouldGenerateVideoThumbnail || isPendingUpload(attachment));
|
|
16
16
|
const [playbackRequested, setPlaybackRequested] = React.useState(false);
|
|
17
|
-
const isUploading =
|
|
17
|
+
const isUploading = isPendingUpload(attachment);
|
|
18
|
+
const localDimensions = useLocalVideoDimensions(isUploading ? getAttachmentPreviewUrl(attachment) : void 0);
|
|
19
|
+
const dimensionVariables = localDimensions ? {
|
|
20
|
+
"--original-height": localDimensions.height,
|
|
21
|
+
"--original-width": localDimensions.width
|
|
22
|
+
} : getCssDimensionsVariables(attachment.thumb_url || "");
|
|
18
23
|
useLayoutEffect(() => {
|
|
19
24
|
if (videoElement.current && videoAttachmentSizeHandler) setAttachmentConfiguration(videoAttachmentSizeHandler(attachment, videoElement.current, shouldGenerateVideoThumbnail));
|
|
20
25
|
}, [
|
|
@@ -24,11 +29,6 @@ var VideoAttachment = ({ attachment, VideoPlayer: VideoPlayer$1 = VideoPlayer })
|
|
|
24
29
|
shouldGenerateVideoThumbnail
|
|
25
30
|
]);
|
|
26
31
|
const renderThumbnailFirst = Boolean(attachment.thumb_url && shouldGenerateVideoThumbnail);
|
|
27
|
-
const localDimensions = useLocalVideoDimensions(isUploading ? getAttachmentPreviewUrl(attachment) : void 0);
|
|
28
|
-
const dimensionVariables = localDimensions ? {
|
|
29
|
-
"--original-height": localDimensions.height,
|
|
30
|
-
"--original-width": localDimensions.width
|
|
31
|
-
} : getCssDimensionsVariables(attachment.thumb_url || "");
|
|
32
32
|
return /* @__PURE__ */ jsx("div", {
|
|
33
33
|
className: clsx("str-chat__player-wrapper", { "str-chat__player-wrapper--uploading": isUploading && !localDimensions }),
|
|
34
34
|
"data-testid": "video-wrapper",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoAttachment.mjs","names":[],"sources":["../../../../src/components/Attachment/VideoAttachment.tsx"],"sourcesContent":["import type { VideoAttachment as VideoAttachmentType } from 'stream-chat';\nimport
|
|
1
|
+
{"version":3,"file":"VideoAttachment.mjs","names":[],"sources":["../../../../src/components/Attachment/VideoAttachment.tsx"],"sourcesContent":["import type { VideoAttachment as VideoAttachmentType } from 'stream-chat';\nimport React, { type ComponentType, useLayoutEffect, useRef, useState } from 'react';\nimport { getCssDimensionsVariables } from './utils';\nimport type { VideoPlayerProps } from '../VideoPlayer';\nimport { VideoPlayer as DefaultVideoPlayer } from '../VideoPlayer';\nimport { VideoThumbnail } from '../VideoPlayer/VideoThumbnail';\nimport clsx from 'clsx';\nimport { useLocalVideoDimensions } from './hooks/useLocalVideoDimensions';\nimport { getAttachmentPreviewUrl, isPendingUpload } from 'stream-chat';\nimport {\n useAttachmentContext,\n type VideoAttachmentConfiguration,\n} from '../../context/AttachmentContext';\n\nexport type VideoAttachmentProps = {\n attachment: VideoAttachmentType;\n VideoPlayer?: ComponentType<VideoPlayerProps>;\n};\n\nexport const VideoAttachment = ({\n attachment,\n VideoPlayer = DefaultVideoPlayer,\n}: VideoAttachmentProps) => {\n const { shouldGenerateVideoThumbnail, videoAttachmentSizeHandler } =\n useAttachmentContext();\n const videoElement = useRef<HTMLDivElement>(null);\n const [attachmentConfiguration, setAttachmentConfiguration] =\n useState<VideoAttachmentConfiguration>();\n // A video that mounted while uploading has been showing its player all along, so it stays on\n // the player once the upload lands. Falling back to the thumbnail would swap the rendered\n // element twice — once when `thumb_url` arrives, once when the user clicks play — and each swap\n // resizes the bubble, because the bubble is `fit-content` and the three renderings (local\n // `<video>`, CDN thumbnail `<img>`, CDN `<video>`) contribute different intrinsic widths.\n const [showVideo, setShowVideo] = React.useState(\n () => !shouldGenerateVideoThumbnail || isPendingUpload(attachment),\n );\n // Only a click on the thumbnail's play button asks for playback. Kept separate from\n // `showVideo`, which is also true for a video that never had a thumbnail to click.\n const [playbackRequested, setPlaybackRequested] = React.useState(false);\n // Structural: the bytes are not on the CDN, so there is nothing to play — independent of\n // whether a request happens to be running this instant.\n const isUploading = isPendingUpload(attachment);\n // While the upload is in flight there is no CDN `thumb_url` to read `oh`/`ow` from, so the box\n // would lay out from the 1000000x1000000 fallback and then resize once the real dimensions\n // arrive. The local file knows them already.\n const localDimensions = useLocalVideoDimensions(\n isUploading ? getAttachmentPreviewUrl(attachment) : undefined,\n );\n const dimensionVariables = localDimensions\n ? {\n '--original-height': localDimensions.height,\n '--original-width': localDimensions.width,\n }\n : getCssDimensionsVariables(attachment.thumb_url || '');\n\n useLayoutEffect(() => {\n if (videoElement.current && videoAttachmentSizeHandler) {\n const config = videoAttachmentSizeHandler(\n attachment,\n videoElement.current,\n shouldGenerateVideoThumbnail,\n );\n setAttachmentConfiguration(config);\n }\n }, [\n videoElement,\n videoAttachmentSizeHandler,\n attachment,\n shouldGenerateVideoThumbnail,\n ]);\n\n const renderThumbnailFirst = Boolean(\n attachment.thumb_url && shouldGenerateVideoThumbnail,\n );\n\n // todo: handle failed thumbnail loading\n return (\n <div\n className={clsx('str-chat__player-wrapper', {\n // Only until the dimensions are known — the class lets the element lay out at its own\n // aspect ratio instead of the square the fallback would produce.\n 'str-chat__player-wrapper--uploading': isUploading && !localDimensions,\n })}\n data-testid='video-wrapper'\n ref={videoElement}\n style={dimensionVariables}\n >\n {renderThumbnailFirst && !showVideo ? (\n <VideoThumbnail\n alt={attachment.title}\n data-testid='image-test'\n onPlay={() => {\n setPlaybackRequested(true);\n setShowVideo(true);\n }}\n src={attachment.thumb_url}\n title={attachment.title}\n />\n ) : (\n <VideoPlayer\n // Playback stays available while the upload runs: the local blob plays, and every\n // message-list widget behaves this way (audio too), as does stream-chat-react-native.\n // The progress overlay is positioned clear of the transport controls.\n //\n // Autoplay only when the user asked for it by clicking the thumbnail. This used to be\n // `renderThumbnailFirst`, which stands for \"a thumbnail exists\" — so a video watched\n // from its local blob started playing again by itself the moment the upload finished\n // and `thumb_url` arrived.\n isPlaying={playbackRequested}\n thumbnailUrl={attachmentConfiguration?.thumbUrl}\n // Falls back to the local blob preview while the upload is still in flight.\n videoUrl={getAttachmentPreviewUrl(attachment, attachmentConfiguration?.url)}\n />\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;AAmBA,IAAa,mBAAmB,EAC9B,YACA,aAAA,gBAAc,kBACY;CAC1B,MAAM,EAAE,8BAA8B,+BACpC,qBAAqB;CACvB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,CAAC,yBAAyB,8BAC9B,SAAuC;CAMzC,MAAM,CAAC,WAAW,gBAAgB,MAAM,eAChC,CAAC,gCAAgC,gBAAgB,UAAU,CACnE;CAGA,MAAM,CAAC,mBAAmB,wBAAwB,MAAM,SAAS,KAAK;CAGtE,MAAM,cAAc,gBAAgB,UAAU;CAI9C,MAAM,kBAAkB,wBACtB,cAAc,wBAAwB,UAAU,IAAI,KAAA,CACtD;CACA,MAAM,qBAAqB,kBACvB;EACE,qBAAqB,gBAAgB;EACrC,oBAAoB,gBAAgB;CACtC,IACA,0BAA0B,WAAW,aAAa,EAAE;CAExD,sBAAsB;EACpB,IAAI,aAAa,WAAW,4BAM1B,2BALe,2BACb,YACA,aAAa,SACb,4BAEyB,CAAM;CAErC,GAAG;EACD;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,uBAAuB,QAC3B,WAAW,aAAa,4BAC1B;CAGA,OACE,oBAAC,OAAD;EACE,WAAW,KAAK,4BAA4B,EAG1C,uCAAuC,eAAe,CAAC,gBACzD,CAAC;EACD,eAAY;EACZ,KAAK;EACL,OAAO;YAEN,wBAAwB,CAAC,YACxB,oBAAC,gBAAD;GACE,KAAK,WAAW;GAChB,eAAY;GACZ,cAAc;IACZ,qBAAqB,IAAI;IACzB,aAAa,IAAI;GACnB;GACA,KAAK,WAAW;GAChB,OAAO,WAAW;EACnB,CAAA,IAED,oBAAC,eAAD;GASE,WAAW;GACX,cAAc,yBAAyB;GAEvC,UAAU,wBAAwB,YAAY,yBAAyB,GAAG;EAC3E,CAAA;CAEA,CAAA;AAET"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
|
|
2
1
|
import { useTranslationContext } from "../../context/TranslationContext.mjs";
|
|
2
|
+
import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
|
|
3
3
|
import "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/Attachment/VisibilityDisclaimer.tsx
|
|
@@ -8,7 +8,7 @@ var VisibilityDisclaimer = () => {
|
|
|
8
8
|
const { t } = useTranslationContext();
|
|
9
9
|
return /* @__PURE__ */ jsxs("div", {
|
|
10
10
|
className: "str-chat__visibility-disclaimer",
|
|
11
|
-
children: [/* @__PURE__ */ jsx(IconEyeFill, {}), t("Only visible to you")]
|
|
11
|
+
children: [/* @__PURE__ */ jsx(IconEyeFill, {}), t("attachment.visibilityDisclaimer.onlyVisible.text", "Only visible to you")]
|
|
12
12
|
});
|
|
13
13
|
};
|
|
14
14
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityDisclaimer.mjs","names":[],"sources":["../../../../src/components/Attachment/VisibilityDisclaimer.tsx"],"sourcesContent":["import React from 'react';\nimport { useComponentContextIcons, useTranslationContext } from '../../context';\n\nexport const VisibilityDisclaimer = () => {\n const { IconEyeFill } = useComponentContextIcons();\n
|
|
1
|
+
{"version":3,"file":"VisibilityDisclaimer.mjs","names":[],"sources":["../../../../src/components/Attachment/VisibilityDisclaimer.tsx"],"sourcesContent":["import React from 'react';\nimport { useComponentContextIcons, useTranslationContext } from '../../context';\n\nexport const VisibilityDisclaimer = () => {\n const { IconEyeFill } = useComponentContextIcons();\n const { t } = useTranslationContext();\n return (\n <div className='str-chat__visibility-disclaimer'>\n <IconEyeFill />\n {t('attachment.visibilityDisclaimer.onlyVisible.text', 'Only visible to you')}\n </div>\n );\n};\n"],"mappings":";;;;;AAGA,IAAa,6BAA6B;CACxC,MAAM,EAAE,gBAAgB,yBAAyB;CACjD,MAAM,EAAE,MAAM,sBAAsB;CACpC,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,aAAD,CAAc,CAAA,GACb,EAAE,oDAAoD,qBAAqB,CACzE;;AAET"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { useComponentContext } from "../../context/ComponentContext.mjs";
|
|
2
1
|
import { useStateStore } from "../../store/hooks/useStateStore.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { useComponentContext } from "../../context/ComponentContext.mjs";
|
|
3
|
+
import { MessageContext } from "../../context/MessageContext.mjs";
|
|
4
|
+
import { useThreadContext } from "../Threads/ThreadContext.mjs";
|
|
4
5
|
import { useTranslationContext } from "../../context/TranslationContext.mjs";
|
|
5
6
|
import { PlayButton } from "../Button/PlayButton.mjs";
|
|
6
7
|
import { FileSizeIndicator } from "./components/FileSizeIndicator.mjs";
|
|
7
|
-
import {
|
|
8
|
+
import { useAttachmentUploadState } from "./hooks/useAttachmentUploadState.mjs";
|
|
8
9
|
import { AttachmentUploadProgressIndicator } from "./components/AttachmentUploadProgressIndicator.mjs";
|
|
9
10
|
import { useAudioPlayer } from "../AudioPlayback/WithAudioPlayback.mjs";
|
|
10
11
|
import { FileIcon } from "../FileIcon/FileIcon.mjs";
|
|
11
12
|
import { DurationDisplay } from "../AudioPlayback/components/DurationDisplay.mjs";
|
|
12
13
|
import { PlaybackRateButton } from "../AudioPlayback/components/PlaybackRateButton.mjs";
|
|
13
14
|
import { WaveProgressBar } from "../AudioPlayback/components/WaveProgressBar.mjs";
|
|
14
|
-
import "react";
|
|
15
|
+
import { useContext } from "react";
|
|
16
|
+
import { getAttachmentPreviewUrl } from "stream-chat";
|
|
15
17
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
18
|
//#region src/components/Attachment/VoiceRecording.tsx
|
|
17
19
|
var rootClassName = "str-chat__message-attachment__voice-recording-widget";
|
|
@@ -66,7 +68,7 @@ var VoiceRecordingPlayerUI = ({ attachment, audioPlayer }) => {
|
|
|
66
68
|
/* @__PURE__ */ jsx("div", {
|
|
67
69
|
className: "str-chat__message-attachment__voice-recording-widget__right-section",
|
|
68
70
|
children: /* @__PURE__ */ jsxs(PlaybackRateButton, {
|
|
69
|
-
"aria-label": t("Playback speed {{ rate }}x", { rate: playbackRate?.toString() ?? "1" }),
|
|
71
|
+
"aria-label": t("common.playbackSpeedX.label", "Playback speed {{ rate }}x", { rate: playbackRate?.toString() ?? "1" }),
|
|
70
72
|
disabled: !canPlayRecord,
|
|
71
73
|
onClick: audioPlayer.increasePlaybackRate,
|
|
72
74
|
children: ["x", playbackRate?.toString()]
|
|
@@ -77,7 +79,8 @@ var VoiceRecordingPlayerUI = ({ attachment, audioPlayer }) => {
|
|
|
77
79
|
};
|
|
78
80
|
var VoiceRecordingPlayer = ({ attachment, playbackRates }) => {
|
|
79
81
|
const { t } = useTranslationContext();
|
|
80
|
-
const { asset_url,
|
|
82
|
+
const { asset_url, title = t("common.voiceMessage.label", "Voice message") } = attachment;
|
|
83
|
+
const { duration = 0, file_size, mime_type, waveform_data } = attachment.custom ?? {};
|
|
81
84
|
/**
|
|
82
85
|
* Introducing message context. This could be breaking change, therefore the fallback to {} is provided.
|
|
83
86
|
* If this component is used outside the message context, then there will be no audio player namespacing
|
|
@@ -87,13 +90,14 @@ var VoiceRecordingPlayer = ({ attachment, playbackRates }) => {
|
|
|
87
90
|
* with the default SDK components, but can be done with custom API calls.In this case all the Audio
|
|
88
91
|
* widgets will share the state.
|
|
89
92
|
*/
|
|
90
|
-
const { message
|
|
93
|
+
const { message } = useContext(MessageContext) ?? {};
|
|
94
|
+
const threadInstance = useThreadContext();
|
|
91
95
|
const audioPlayer = useAudioPlayer({
|
|
92
96
|
durationSeconds: duration ?? 0,
|
|
93
97
|
fileSize: file_size,
|
|
94
98
|
mimeType: mime_type,
|
|
95
99
|
playbackRates,
|
|
96
|
-
requester: message?.id && `${
|
|
100
|
+
requester: message?.id && `${threadInstance ? message.parent_id ?? message.id : ""}${message.id}`,
|
|
97
101
|
src: getAttachmentPreviewUrl(attachment, asset_url),
|
|
98
102
|
title,
|
|
99
103
|
waveformData: waveform_data
|
|
@@ -105,6 +109,7 @@ var VoiceRecordingPlayer = ({ attachment, playbackRates }) => {
|
|
|
105
109
|
};
|
|
106
110
|
var QuotedVoiceRecording = ({ attachment }) => {
|
|
107
111
|
const { FileSizeIndicator: FileSizeIndicator$2 = FileSizeIndicator } = useComponentContext();
|
|
112
|
+
const { duration, file_size, mime_type } = attachment.custom ?? {};
|
|
108
113
|
return /* @__PURE__ */ jsxs("div", {
|
|
109
114
|
className: rootClassName,
|
|
110
115
|
"data-testid": "quoted-voice-recording-widget",
|
|
@@ -114,17 +119,17 @@ var QuotedVoiceRecording = ({ attachment }) => {
|
|
|
114
119
|
className: "str-chat__message-attachment__voice-recording-widget__audio-state",
|
|
115
120
|
children: /* @__PURE__ */ jsx("div", {
|
|
116
121
|
className: "str-chat__message-attachment__voice-recording-widget__timer",
|
|
117
|
-
children:
|
|
118
|
-
duration
|
|
122
|
+
children: duration ? /* @__PURE__ */ jsx(DurationDisplay, {
|
|
123
|
+
duration,
|
|
119
124
|
isPlaying: false,
|
|
120
125
|
secondsElapsed: void 0
|
|
121
126
|
}) : /* @__PURE__ */ jsx(FileSizeIndicator$2, {
|
|
122
|
-
fileSize:
|
|
127
|
+
fileSize: file_size,
|
|
123
128
|
maximumFractionDigits: 0
|
|
124
129
|
})
|
|
125
130
|
})
|
|
126
131
|
})
|
|
127
|
-
}), /* @__PURE__ */ jsx(FileIcon, { mimeType:
|
|
132
|
+
}), /* @__PURE__ */ jsx(FileIcon, { mimeType: mime_type })]
|
|
128
133
|
});
|
|
129
134
|
};
|
|
130
135
|
var VoiceRecording = ({ attachment, isQuoted }) => isQuoted ? /* @__PURE__ */ jsx(QuotedVoiceRecording, { attachment }) : /* @__PURE__ */ jsx(VoiceRecordingPlayer, { attachment });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceRecording.mjs","names":[],"sources":["../../../../src/components/Attachment/VoiceRecording.tsx"],"sourcesContent":["import React from 'react';\nimport type { Attachment } from 'stream-chat';\n\nimport {\n AttachmentUploadProgressIndicator as DefaultAttachmentUploadProgressIndicator,\n FileSizeIndicator as DefaultFileSizeIndicator,\n} from './components';\nimport {\n getAttachmentPreviewUrl,\n useAttachmentUploadState,\n} from './hooks/useAttachmentUploadState';\nimport { FileIcon } from '../FileIcon';\nimport {\n useComponentContext,\n useMessageContext,\n useTranslationContext,\n} from '../../context';\nimport {\n type AudioPlayer,\n type AudioPlayerState,\n DurationDisplay,\n PlaybackRateButton,\n WaveProgressBar,\n} from '../AudioPlayback';\nimport { useAudioPlayer } from '../AudioPlayback/WithAudioPlayback';\nimport { useStateStore } from '../../store';\nimport { PlayButton } from '../Button';\n\nconst rootClassName = 'str-chat__message-attachment__voice-recording-widget';\n\nconst audioPlayerStateSelector = (state: AudioPlayerState) => ({\n canPlayRecord: state.canPlayRecord,\n durationSeconds: state.durationSeconds,\n isPlaying: state.isPlaying,\n playbackRate: state.currentPlaybackRate,\n progress: state.progressPercent,\n secondsElapsed: state.secondsElapsed,\n});\n\ntype VoiceRecordingPlayerUIProps = {\n audioPlayer: AudioPlayer;\n attachment?: Attachment;\n};\n\n// todo: finish creating a BaseAudioPlayer derived from VoiceRecordingPlayerUI and AudioAttachmentUI\nconst VoiceRecordingPlayerUI = ({\n attachment,\n audioPlayer,\n}: VoiceRecordingPlayerUIProps) => {\n const {\n AttachmentUploadProgressIndicator = DefaultAttachmentUploadProgressIndicator,\n FileSizeIndicator = DefaultFileSizeIndicator,\n } = useComponentContext();\n const { isUploading } = useAttachmentUploadState(attachment);\n const { t } = useTranslationContext();\n const {\n canPlayRecord,\n durationSeconds,\n isPlaying,\n playbackRate,\n progress,\n secondsElapsed,\n } = useStateStore(audioPlayer?.state, audioPlayerStateSelector) ?? {};\n\n return (\n <div className={rootClassName} data-testid='voice-recording-widget'>\n <div className='str-chat__message-attachment__voice-recording-widget__play-button-container'>\n <PlayButton isPlaying={!!isPlaying} onClick={audioPlayer.togglePlay} />\n </div>\n <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n {/*\n While uploading, the upload progress takes this slot. It has to outrank the\n duration: `MediaRecorderController` stamps `duration` on every recording before it\n is ever uploaded, so checking the duration first meant an uploading voice message\n showed no upload indication at all.\n */}\n {isUploading ? (\n <AttachmentUploadProgressIndicator attachment={attachment} />\n ) : durationSeconds ? (\n <DurationDisplay\n duration={durationSeconds}\n isPlaying={!!isPlaying}\n secondsElapsed={secondsElapsed}\n showRemaining\n />\n ) : (\n <FileSizeIndicator\n fileSize={audioPlayer.fileSize}\n maximumFractionDigits={0}\n />\n )}\n </div>\n <WaveProgressBar\n durationSeconds={durationSeconds}\n progress={progress}\n secondsElapsed={secondsElapsed}\n seek={audioPlayer.seek}\n waveformData={audioPlayer.waveformData || []}\n />\n </div>\n </div>\n <div className='str-chat__message-attachment__voice-recording-widget__right-section'>\n <PlaybackRateButton\n aria-label={t('Playback speed {{ rate }}x', {\n rate: playbackRate?.toString() ?? '1',\n })}\n disabled={!canPlayRecord}\n onClick={audioPlayer.increasePlaybackRate}\n >\n x{playbackRate?.toString()}\n </PlaybackRateButton>\n </div>\n </div>\n );\n};\n\nexport type VoiceRecordingPlayerProps = Pick<VoiceRecordingProps, 'attachment'> & {\n /** An array of fractional numeric values of playback speed to override the defaults (1.0, 1.5, 2.0) */\n playbackRates?: number[];\n};\n\nexport const VoiceRecordingPlayer = ({\n attachment,\n playbackRates,\n}: VoiceRecordingPlayerProps) => {\n const { t } = useTranslationContext();\n const {\n asset_url,\n duration = 0,\n file_size,\n mime_type,\n title = t('Voice message'),\n waveform_data,\n } = attachment;\n\n /**\n * Introducing message context. This could be breaking change, therefore the fallback to {} is provided.\n * If this component is used outside the message context, then there will be no audio player namespacing\n * => scrolling away from the message in virtualized ML would create a new AudioPlayer instance.\n *\n * Edge case: the requester (message) has multiple attachments with the same assetURL - does not happen\n * with the default SDK components, but can be done with custom API calls.In this case all the Audio\n * widgets will share the state.\n */\n const { message, threadList } = useMessageContext() ?? {};\n\n const audioPlayer = useAudioPlayer({\n durationSeconds: duration ?? 0,\n fileSize: file_size,\n mimeType: mime_type,\n playbackRates,\n requester:\n message?.id &&\n `${threadList ? (message.parent_id ?? message.id) : ''}${message.id}`,\n // Falls back to the local blob preview while the upload is still in flight.\n src: getAttachmentPreviewUrl(attachment, asset_url),\n title,\n waveformData: waveform_data,\n });\n\n return audioPlayer ? (\n <VoiceRecordingPlayerUI attachment={attachment} audioPlayer={audioPlayer} />\n ) : null;\n};\n\nexport type QuotedVoiceRecordingProps = Pick<VoiceRecordingProps, 'attachment'>;\n\nexport const QuotedVoiceRecording = ({ attachment }: QuotedVoiceRecordingProps) => {\n const { FileSizeIndicator = DefaultFileSizeIndicator } = useComponentContext();\n return (\n <div className={rootClassName} data-testid='quoted-voice-recording-widget'>\n <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n {attachment.duration ? (\n <DurationDisplay\n duration={attachment.duration}\n isPlaying={false}\n secondsElapsed={undefined}\n />\n ) : (\n <FileSizeIndicator\n fileSize={attachment.file_size}\n maximumFractionDigits={0}\n />\n )}\n </div>\n </div>\n </div>\n <FileIcon mimeType={attachment.mime_type} />\n </div>\n );\n};\n\nexport type VoiceRecordingProps = {\n /** The attachment object from the message's attachment list. */\n attachment: Attachment;\n /** A boolean flag to signal whether the attachment will be rendered inside the quoted reply. */\n isQuoted?: boolean;\n};\n\nexport const VoiceRecording = ({ attachment, isQuoted }: VoiceRecordingProps) =>\n isQuoted ? (\n <QuotedVoiceRecording attachment={attachment} />\n ) : (\n <VoiceRecordingPlayer attachment={attachment} />\n );\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VoiceRecording.mjs","names":[],"sources":["../../../../src/components/Attachment/VoiceRecording.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport type { Attachment, VoiceRecordingAttachment } from 'stream-chat';\n\nimport {\n AttachmentUploadProgressIndicator as DefaultAttachmentUploadProgressIndicator,\n FileSizeIndicator as DefaultFileSizeIndicator,\n} from './components';\nimport { FileIcon } from '../FileIcon';\nimport {\n MessageContext,\n useComponentContext,\n useTranslationContext,\n} from '../../context';\nimport {\n type AudioPlayer,\n type AudioPlayerState,\n DurationDisplay,\n PlaybackRateButton,\n WaveProgressBar,\n} from '../AudioPlayback';\nimport { useAudioPlayer } from '../AudioPlayback/WithAudioPlayback';\nimport { useStateStore } from '../../store';\nimport { PlayButton } from '../Button';\nimport { useThreadContext } from '../Threads';\nimport { getAttachmentPreviewUrl } from 'stream-chat';\nimport { useAttachmentUploadState } from './hooks/useAttachmentUploadState';\n\nconst rootClassName = 'str-chat__message-attachment__voice-recording-widget';\n\nconst audioPlayerStateSelector = (state: AudioPlayerState) => ({\n canPlayRecord: state.canPlayRecord,\n durationSeconds: state.durationSeconds,\n isPlaying: state.isPlaying,\n playbackRate: state.currentPlaybackRate,\n progress: state.progressPercent,\n secondsElapsed: state.secondsElapsed,\n});\n\ntype VoiceRecordingPlayerUIProps = {\n attachment?: Attachment;\n audioPlayer: AudioPlayer;\n};\n\n// todo: finish creating a BaseAudioPlayer derived from VoiceRecordingPlayerUI and AudioAttachmentUI\nconst VoiceRecordingPlayerUI = ({\n attachment,\n audioPlayer,\n}: VoiceRecordingPlayerUIProps) => {\n const {\n AttachmentUploadProgressIndicator = DefaultAttachmentUploadProgressIndicator,\n FileSizeIndicator = DefaultFileSizeIndicator,\n } = useComponentContext();\n const { isUploading } = useAttachmentUploadState(attachment);\n const { t } = useTranslationContext();\n const {\n canPlayRecord,\n durationSeconds,\n isPlaying,\n playbackRate,\n progress,\n secondsElapsed,\n } = useStateStore(audioPlayer?.state, audioPlayerStateSelector) ?? {};\n\n return (\n <div className={rootClassName} data-testid='voice-recording-widget'>\n <div className='str-chat__message-attachment__voice-recording-widget__play-button-container'>\n <PlayButton isPlaying={!!isPlaying} onClick={audioPlayer.togglePlay} />\n </div>\n <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n {/*\n While uploading, the upload progress takes this slot. It has to outrank the\n duration: `MediaRecorderController` stamps `duration` on every recording before it\n is ever uploaded, so checking the duration first meant an uploading voice message\n showed no upload indication at all.\n */}\n {isUploading ? (\n <AttachmentUploadProgressIndicator attachment={attachment} />\n ) : durationSeconds ? (\n <DurationDisplay\n duration={durationSeconds}\n isPlaying={!!isPlaying}\n secondsElapsed={secondsElapsed}\n showRemaining\n />\n ) : (\n <FileSizeIndicator\n fileSize={audioPlayer.fileSize}\n maximumFractionDigits={0}\n />\n )}\n </div>\n <WaveProgressBar\n durationSeconds={durationSeconds}\n progress={progress}\n secondsElapsed={secondsElapsed}\n seek={audioPlayer.seek}\n waveformData={audioPlayer.waveformData || []}\n />\n </div>\n </div>\n <div className='str-chat__message-attachment__voice-recording-widget__right-section'>\n <PlaybackRateButton\n aria-label={t('common.playbackSpeedX.label', 'Playback speed {{ rate }}x', {\n rate: playbackRate?.toString() ?? '1',\n })}\n disabled={!canPlayRecord}\n onClick={audioPlayer.increasePlaybackRate}\n >\n x{playbackRate?.toString()}\n </PlaybackRateButton>\n </div>\n </div>\n );\n};\n\nexport type VoiceRecordingPlayerProps = Pick<VoiceRecordingProps, 'attachment'> & {\n /** An array of fractional numeric values of playback speed to override the defaults (1.0, 1.5, 2.0) */\n playbackRates?: number[];\n};\n\nexport const VoiceRecordingPlayer = ({\n attachment,\n playbackRates,\n}: VoiceRecordingPlayerProps) => {\n const { t } = useTranslationContext();\n const { asset_url, title = t('common.voiceMessage.label', 'Voice message') } =\n attachment;\n const {\n duration = 0,\n file_size,\n mime_type,\n waveform_data,\n } = (attachment as VoiceRecordingAttachment).custom ?? {};\n\n /**\n * Introducing message context. This could be breaking change, therefore the fallback to {} is provided.\n * If this component is used outside the message context, then there will be no audio player namespacing\n * => scrolling away from the message in virtualized ML would create a new AudioPlayer instance.\n *\n * Edge case: the requester (message) has multiple attachments with the same assetURL - does not happen\n * with the default SDK components, but can be done with custom API calls.In this case all the Audio\n * widgets will share the state.\n */\n // also rendered from composer previews, where there is no message\n const { message } = useContext(MessageContext) ?? {};\n const threadInstance = useThreadContext();\n\n const audioPlayer = useAudioPlayer({\n durationSeconds: duration ?? 0,\n fileSize: file_size,\n mimeType: mime_type,\n playbackRates,\n requester:\n message?.id &&\n `${threadInstance ? (message.parent_id ?? message.id) : ''}${message.id}`,\n // Falls back to the local blob preview while the upload is still in flight.\n src: getAttachmentPreviewUrl(attachment, asset_url),\n title,\n waveformData: waveform_data,\n });\n\n return audioPlayer ? (\n <VoiceRecordingPlayerUI attachment={attachment} audioPlayer={audioPlayer} />\n ) : null;\n};\n\nexport type QuotedVoiceRecordingProps = Pick<VoiceRecordingProps, 'attachment'>;\n\nexport const QuotedVoiceRecording = ({ attachment }: QuotedVoiceRecordingProps) => {\n const { FileSizeIndicator = DefaultFileSizeIndicator } = useComponentContext();\n const { duration, file_size, mime_type } =\n (attachment as VoiceRecordingAttachment).custom ?? {};\n return (\n <div className={rootClassName} data-testid='quoted-voice-recording-widget'>\n <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n {duration ? (\n <DurationDisplay\n duration={duration}\n isPlaying={false}\n secondsElapsed={undefined}\n />\n ) : (\n <FileSizeIndicator fileSize={file_size} maximumFractionDigits={0} />\n )}\n </div>\n </div>\n </div>\n <FileIcon mimeType={mime_type} />\n </div>\n );\n};\n\nexport type VoiceRecordingProps = {\n /** The attachment object from the message's attachment list. */\n attachment: Attachment;\n /** A boolean flag to signal whether the attachment will be rendered inside the quoted reply. */\n isQuoted?: boolean;\n};\n\nexport const VoiceRecording = ({ attachment, isQuoted }: VoiceRecordingProps) =>\n isQuoted ? (\n <QuotedVoiceRecording attachment={attachment} />\n ) : (\n <VoiceRecordingPlayer attachment={attachment} />\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;AA2BA,IAAM,gBAAgB;AAEtB,IAAM,4BAA4B,WAA6B;CAC7D,eAAe,MAAM;CACrB,iBAAiB,MAAM;CACvB,WAAW,MAAM;CACjB,cAAc,MAAM;CACpB,UAAU,MAAM;CAChB,gBAAgB,MAAM;AACxB;AAQA,IAAM,0BAA0B,EAC9B,YACA,kBACiC;CACjC,MAAM,EACJ,mCAAA,sCAAoC,mCACpC,mBAAA,sBAAoB,sBAClB,oBAAoB;CACxB,MAAM,EAAE,gBAAgB,yBAAyB,UAAU;CAC3D,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EACJ,eACA,iBACA,WACA,cACA,UACA,mBACE,cAAc,aAAa,OAAO,wBAAwB,KAAK,CAAC;CAEpE,OACE,qBAAC,OAAD;EAAK,WAAW;EAAe,eAAY;YAA3C;GACE,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,YAAD;KAAY,WAAW,CAAC,CAAC;KAAW,SAAS,YAAY;IAAa,CAAA;GACnE,CAAA;GACL,oBAAC,OAAD;IAAK,WAAU;cACb,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAK,WAAU;gBAOZ,cACC,oBAAC,qCAAD,EAA+C,WAAa,CAAA,IAC1D,kBACF,oBAAC,iBAAD;OACE,UAAU;OACV,WAAW,CAAC,CAAC;OACG;OAChB,eAAA;MACD,CAAA,IAED,oBAAC,qBAAD;OACE,UAAU,YAAY;OACtB,uBAAuB;MACxB,CAAA;KAEA,CAAA,GACL,oBAAC,iBAAD;MACmB;MACP;MACM;MAChB,MAAM,YAAY;MAClB,cAAc,YAAY,gBAAgB,CAAC;KAC5C,CAAA,CACE;;GACF,CAAA;GACL,oBAAC,OAAD;IAAK,WAAU;cACb,qBAAC,oBAAD;KACE,cAAY,EAAE,+BAA+B,8BAA8B,EACzE,MAAM,cAAc,SAAS,KAAK,IACpC,CAAC;KACD,UAAU,CAAC;KACX,SAAS,YAAY;eALvB,CAMC,KACG,cAAc,SAAS,CACP;;GACjB,CAAA;EACF;;AAET;AAOA,IAAa,wBAAwB,EACnC,YACA,oBAC+B;CAC/B,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EAAE,WAAW,QAAQ,EAAE,6BAA6B,eAAe,MACvE;CACF,MAAM,EACJ,WAAW,GACX,WACA,WACA,kBACG,WAAwC,UAAU,CAAC;;;;;;;;;;CAYxD,MAAM,EAAE,YAAY,WAAW,cAAc,KAAK,CAAC;CACnD,MAAM,iBAAiB,iBAAiB;CAExC,MAAM,cAAc,eAAe;EACjC,iBAAiB,YAAY;EAC7B,UAAU;EACV,UAAU;EACV;EACA,WACE,SAAS,MACT,GAAG,iBAAkB,QAAQ,aAAa,QAAQ,KAAM,KAAK,QAAQ;EAEvE,KAAK,wBAAwB,YAAY,SAAS;EAClD;EACA,cAAc;CAChB,CAAC;CAED,OAAO,cACL,oBAAC,wBAAD;EAAoC;EAAyB;CAAc,CAAA,IACzE;AACN;AAIA,IAAa,wBAAwB,EAAE,iBAA4C;CACjF,MAAM,EAAE,mBAAA,sBAAoB,sBAA6B,oBAAoB;CAC7E,MAAM,EAAE,UAAU,WAAW,cAC1B,WAAwC,UAAU,CAAC;CACtD,OACE,qBAAC,OAAD;EAAK,WAAW;EAAe,eAAY;YAA3C,CACE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,OAAD;KAAK,WAAU;eACZ,WACC,oBAAC,iBAAD;MACY;MACV,WAAW;MACX,gBAAgB,KAAA;KACjB,CAAA,IAED,oBAAC,qBAAD;MAAmB,UAAU;MAAW,uBAAuB;KAAI,CAAA;IAElE,CAAA;GACF,CAAA;EACF,CAAA,GACL,oBAAC,UAAD,EAAU,UAAU,UAAY,CAAA,CAC7B;;AAET;AASA,IAAa,kBAAkB,EAAE,YAAY,eAC3C,WACE,oBAAC,sBAAD,EAAkC,WAAa,CAAA,IAE/C,oBAAC,sBAAD,EAAkC,WAAa,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AttachmentUploadedSizeIndicator } from "../../Loading/AttachmentUploadedSizeIndicator.mjs";
|
|
2
1
|
import { UploadProgressIndicator } from "../../Loading/UploadProgressIndicator.mjs";
|
|
2
|
+
import { AttachmentUploadedSizeIndicator } from "../../Loading/AttachmentUploadedSizeIndicator.mjs";
|
|
3
3
|
import { useAttachmentsUploadState } from "../hooks/useAttachmentUploadState.mjs";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
|
|
2
1
|
import { useTranslationContext } from "../../../context/TranslationContext.mjs";
|
|
2
|
+
import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
|
|
3
3
|
import "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
import clsx from "clsx";
|
|
@@ -16,13 +16,13 @@ var DownloadButton = ({ assetUrl, className, suggestedFileName, tooltipTitle })
|
|
|
16
16
|
const href = sanitizeUrl(assetUrl);
|
|
17
17
|
if (!href) return null;
|
|
18
18
|
return /* @__PURE__ */ jsx("a", {
|
|
19
|
-
"aria-label": t("
|
|
19
|
+
"aria-label": t("common.downloadAttachment.ariaLabel", "Download attachment"),
|
|
20
20
|
className: clsx("str-chat__button", "str-chat__button--secondary", "str-chat__button--outline", "str-chat__button--circular", "str-chat__button--size-sm", "str-chat__audio-attachment-download-button", className),
|
|
21
21
|
download: suggestedFileName ?? "",
|
|
22
22
|
href,
|
|
23
23
|
rel: "noopener noreferrer",
|
|
24
24
|
target: "_blank",
|
|
25
|
-
title: tooltipTitle ?? t("Download Attachment"),
|
|
25
|
+
title: tooltipTitle ?? t("common.downloadAttachment.title", "Download Attachment"),
|
|
26
26
|
children: /* @__PURE__ */ jsx("div", {
|
|
27
27
|
className: "str-chat__button__content",
|
|
28
28
|
children: /* @__PURE__ */ jsx(IconDownload, { className: "str-chat__icon str-chat__audio-attachment-download-button__icon" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadButton.mjs","names":[],"sources":["../../../../../src/components/Attachment/components/DownloadButton.tsx"],"sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nimport { useComponentContextIcons, useTranslationContext } from '../../../context';\n\nexport type DownloadButtonProps = {\n /** Attachment asset URL (e.g. `asset_url`). */\n assetUrl?: string;\n className?: string;\n /** Suggested filename for the `download` attribute (not the HTML `title` tooltip). */\n suggestedFileName?: string;\n /** Native browser tooltip; defaults to translated “Download Attachment”. */\n tooltipTitle?: string;\n};\n\n/**\n * Icon download control for {@link Audio} and {@link FileAttachment} rows.\n * (BaseImage defines its own small download link when `showDownloadButtonOnError` is used.)\n */\nexport const DownloadButton = ({\n assetUrl,\n className,\n suggestedFileName,\n tooltipTitle,\n}: DownloadButtonProps) => {\n const { IconDownload } = useComponentContextIcons();\n
|
|
1
|
+
{"version":3,"file":"DownloadButton.mjs","names":[],"sources":["../../../../../src/components/Attachment/components/DownloadButton.tsx"],"sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nimport { useComponentContextIcons, useTranslationContext } from '../../../context';\n\nexport type DownloadButtonProps = {\n /** Attachment asset URL (e.g. `asset_url`). */\n assetUrl?: string;\n className?: string;\n /** Suggested filename for the `download` attribute (not the HTML `title` tooltip). */\n suggestedFileName?: string;\n /** Native browser tooltip; defaults to translated “Download Attachment”. */\n tooltipTitle?: string;\n};\n\n/**\n * Icon download control for {@link Audio} and {@link FileAttachment} rows.\n * (BaseImage defines its own small download link when `showDownloadButtonOnError` is used.)\n */\nexport const DownloadButton = ({\n assetUrl,\n className,\n suggestedFileName,\n tooltipTitle,\n}: DownloadButtonProps) => {\n const { IconDownload } = useComponentContextIcons();\n const { t } = useTranslationContext();\n if (!assetUrl) return null;\n const href = sanitizeUrl(assetUrl);\n if (!href) return null;\n\n return (\n <a\n aria-label={t('common.downloadAttachment.ariaLabel', 'Download attachment')}\n className={clsx(\n 'str-chat__button',\n 'str-chat__button--secondary',\n 'str-chat__button--outline',\n 'str-chat__button--circular',\n 'str-chat__button--size-sm',\n 'str-chat__audio-attachment-download-button',\n className,\n )}\n download={suggestedFileName ?? ''}\n href={href}\n rel='noopener noreferrer'\n target='_blank'\n title={tooltipTitle ?? t('common.downloadAttachment.title', 'Download Attachment')}\n >\n <div className='str-chat__button__content'>\n <IconDownload className='str-chat__icon str-chat__audio-attachment-download-button__icon' />\n </div>\n </a>\n );\n};\n"],"mappings":";;;;;;;;;;;AAoBA,IAAa,kBAAkB,EAC7B,UACA,WACA,mBACA,mBACyB;CACzB,MAAM,EAAE,iBAAiB,yBAAyB;CAClD,MAAM,EAAE,MAAM,sBAAsB;CACpC,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,OAAO,YAAY,QAAQ;CACjC,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,KAAD;EACE,cAAY,EAAE,uCAAuC,qBAAqB;EAC1E,WAAW,KACT,oBACA,+BACA,6BACA,8BACA,6BACA,8CACA,SACF;EACA,UAAU,qBAAqB;EACzB;EACN,KAAI;EACJ,QAAO;EACP,OAAO,gBAAgB,EAAE,mCAAmC,qBAAqB;YAEjF,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,cAAD,EAAc,WAAU,kEAAmE,CAAA;EACxF,CAAA;CACJ,CAAA;AAEP"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useChatContext } from "../../../context/ChatContext.mjs";
|
|
2
1
|
import { useStateStore } from "../../../store/hooks/useStateStore.mjs";
|
|
2
|
+
import { useChatContext } from "../../../context/ChatContext.mjs";
|
|
3
3
|
import { useCallback, useMemo } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { isPendingUpload } from "stream-chat";
|
|
5
5
|
//#region src/components/Attachment/hooks/useAttachmentUploadState.ts
|
|
6
6
|
/** Sentinel for "no live record for this id" inside the joined selector key. */
|
|
7
7
|
var NO_RECORD = "-";
|
|
@@ -10,17 +10,6 @@ var emptyUploadState = {
|
|
|
10
10
|
uploadConfirmationPending: false
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
|
-
* Whether an attachment *claims* to be mid-upload, judged purely from the message payload.
|
|
14
|
-
*
|
|
15
|
-
* This is the **structural** question — may this attachment render from its local preview at
|
|
16
|
-
* all — and it is deliberately not reactive: it stays true across the microtask in which
|
|
17
|
-
* `UploadManager` drops its record but the resolved URL has not been written back yet, so an
|
|
18
|
-
* attachment never blinks out of the DOM between those two events.
|
|
19
|
-
*
|
|
20
|
-
* For "is a request actually running right now", use {@link useAttachmentsUploadState}.
|
|
21
|
-
*/
|
|
22
|
-
var hasPendingUploadState = (attachment) => isPendingUpload(attachment);
|
|
23
|
-
/**
|
|
24
13
|
* Reports whether a request for any of these attachments is in flight *right now*, and how far
|
|
25
14
|
* along it is.
|
|
26
15
|
*
|
|
@@ -43,7 +32,7 @@ var hasPendingUploadState = (attachment) => isPendingUpload(attachment);
|
|
|
43
32
|
*/
|
|
44
33
|
var useAttachmentsUploadState = (attachments) => {
|
|
45
34
|
const { client } = useChatContext();
|
|
46
|
-
const pending = useMemo(() => attachments.filter(
|
|
35
|
+
const pending = useMemo(() => attachments.filter(isPendingUpload).map((a) => a.localMetadata), [attachments]);
|
|
47
36
|
const pendingIdsKey = pending.map(({ id }) => id).join(",");
|
|
48
37
|
const selector = useCallback((state) => ({ recordsKey: pendingIdsKey.split(",").map((id) => {
|
|
49
38
|
const record = state.uploads[id];
|
|
@@ -85,22 +74,7 @@ var useAttachmentUploadState = (attachment) => useAttachmentsUploadState(useMemo
|
|
|
85
74
|
* Falls back to inferring the window from a 100% reading when `uploadConfirmationPending` is absent,
|
|
86
75
|
* i.e. against a resolved `stream-chat` older than v9.51.
|
|
87
76
|
*/
|
|
88
|
-
var isUploadConfirmationPending = (localMetadata) => {
|
|
89
|
-
if (!localMetadata || localMetadata.uploadState !== "uploading") return false;
|
|
90
|
-
if (localMetadata.uploadConfirmationPending !== void 0) return localMetadata.uploadConfirmationPending;
|
|
91
|
-
return localMetadata.uploadProgress !== void 0 && localMetadata.uploadProgress >= 100;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* The URL an attachment should be rendered from. Falls back to the local blob preview while
|
|
95
|
-
* the upload is still in flight, so a pending attachment shows the user's own file rather than
|
|
96
|
-
* nothing. Returns `undefined` when there is nothing to render yet.
|
|
97
|
-
*/
|
|
98
|
-
var getAttachmentPreviewUrl = (attachment, ...urls) => {
|
|
99
|
-
const resolved = urls.find(Boolean);
|
|
100
|
-
if (resolved) return resolved;
|
|
101
|
-
return isLocalUploadAttachment(attachment) ? attachment.localMetadata.previewUri : void 0;
|
|
102
|
-
};
|
|
103
77
|
//#endregion
|
|
104
|
-
export {
|
|
78
|
+
export { useAttachmentUploadState, useAttachmentsUploadState };
|
|
105
79
|
|
|
106
80
|
//# sourceMappingURL=useAttachmentUploadState.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAttachmentUploadState.mjs","names":[],"sources":["../../../../../src/components/Attachment/hooks/useAttachmentUploadState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { isLocalUploadAttachment, isPendingUpload } from 'stream-chat';\nimport type {\n Attachment,\n LocalAttachment,\n SharedLocationResponse,\n UploadManagerState,\n} from 'stream-chat';\n\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useStateStore } from '../../../store';\n\nexport type AttachmentUploadState = {\n /**\n * `true` once every byte has been handed to the socket but the server has not answered yet.\n *\n * Browser upload progress measures bytes *written to the connection*, not bytes the server\n * acknowledged, so it reaches 100% the instant the request body is flushed — then the\n * connection sits idle while the CDN ingests the file and the response travels back. On a\n * large file over a slow link that dead zone is long, and a bar parked at 100% claims the\n * upload is done when nothing is confirmed. Nothing measurable is happening during it, so the\n * honest rendering is indeterminate.\n */\n uploadConfirmationPending: boolean;\n /**\n * `true` only while `client.uploadManager` holds a live record for at least one of the\n * attachments — i.e. a request really is in flight right now.\n */\n isUploading: boolean;\n /**\n * 0–100 while uploading and the transfer length is known; `undefined` otherwise. For several\n * attachments this is their mean, so a gallery shows one combined bar.\n */\n progress?: number;\n};\n\n/** Sentinel for \"no live record for this id\" inside the joined selector key. */\nconst NO_RECORD = '-';\n\n/**\n * `UploadRecord.uploadConfirmationPending` was added in stream-chat v9.51 — see the field's docs there.\n * Widened locally so this SDK still compiles against an older resolved `stream-chat`, in which\n * case the flag is absent and {@link useAttachmentsUploadState} infers it instead.\n */\ntype UploadRecordWithConfirmationPending = {\n uploadConfirmationPending?: boolean;\n uploadProgress?: number;\n};\n\nconst emptyUploadState: AttachmentUploadState = {\n isUploading: false,\n uploadConfirmationPending: false,\n};\n\ntype PendingUpload = Extract<LocalAttachment, { localMetadata: { uploadState: string } }>;\n\n/**\n * Whether an attachment *claims* to be mid-upload, judged purely from the message payload.\n *\n * This is the **structural** question — may this attachment render from its local preview at\n * all — and it is deliberately not reactive: it stays true across the microtask in which\n * `UploadManager` drops its record but the resolved URL has not been written back yet, so an\n * attachment never blinks out of the DOM between those two events.\n *\n * For \"is a request actually running right now\", use {@link useAttachmentsUploadState}.\n */\nexport const hasPendingUploadState = (\n attachment?: Attachment | LocalAttachment | SharedLocationResponse,\n): attachment is PendingUpload => isPendingUpload(attachment);\n\n/**\n * Reports whether a request for any of these attachments is in flight *right now*, and how far\n * along it is.\n *\n * The source of truth is `client.uploadManager`, which holds a record only for the lifetime of\n * the request. That has two consequences worth knowing:\n *\n * 1. **The UI is opt-in by construction.** An integration that never hands still-uploading\n * attachments to a message never has a message referencing a live record, so none of the\n * upload-progress UI ever renders — no config flag needed. Attachments returned by the API\n * carry no `localMetadata` at all and can never match.\n *\n * 2. **No phantom progress.** A message can outlive its request — the upload was aborted,\n * `disconnectUser` called `uploadManager.reset()`, or the message was rehydrated from an\n * offline store with a stale `localMetadata.uploadState`. Keying off the frozen state would\n * leave such an attachment showing an indeterminate spinner forever; keying off the live\n * record makes it self-healing.\n *\n * `localMetadata.uploadProgress` is only a fallback for the progress *number*, never for\n * deciding whether an upload is running.\n */\nexport const useAttachmentsUploadState = (\n attachments: (Attachment | LocalAttachment | SharedLocationResponse | undefined)[],\n): AttachmentUploadState => {\n const { client } = useChatContext();\n\n const pending = useMemo(\n () => attachments.filter(hasPendingUploadState).map((a) => a.localMetadata),\n [attachments],\n );\n // Stable primitive so the selector identity does not change on every render.\n const pendingIdsKey = pending.map(({ id }) => id).join(',');\n\n const selector = useCallback(\n (state: UploadManagerState) => ({\n // One joined string rather than an array: useStateStore shallow-compares the selected\n // keys, and a fresh array would compare unequal on every store update.\n // Per id: `-` when there is no live record, else `<progress>:<uploadConfirmationPending>`.\n recordsKey: pendingIdsKey\n .split(',')\n .map((id) => {\n const record = state.uploads[id] as\n | UploadRecordWithConfirmationPending\n | undefined;\n if (!record) return NO_RECORD;\n\n const awaiting =\n record.uploadConfirmationPending === undefined\n ? ''\n : record.uploadConfirmationPending\n ? '1'\n : '0';\n\n return `${record.uploadProgress ?? ''}:${awaiting}`;\n })\n .join(','),\n }),\n [pendingIdsKey],\n );\n\n // `client` is absent when rendered outside <Chat>; useStateStore tolerates an undefined store.\n const { recordsKey } = useStateStore(client?.uploadManager?.state, selector) ?? {};\n\n if (!pending.length) return emptyUploadState;\n\n // A record exists only while the request runs — that, not the message payload, is what\n // \"uploading\" means here.\n const entries = (recordsKey?.split(',') ?? []).map((entry, index) => {\n if (entry === NO_RECORD) return undefined;\n\n const [reportedProgress, reportedAwaiting] = entry.split(':');\n const progress =\n reportedProgress === '' ? pending[index].uploadProgress : Number(reportedProgress);\n\n return {\n progress,\n // Prefer the explicit signal from `UploadRecord.uploadConfirmationPending`. It is absent\n // when the resolved `stream-chat` predates it, so fall back to inferring the same thing:\n // the record is still live, therefore 100% can only mean \"all bytes sent, confirmation\n // still pending\".\n uploadConfirmationPending:\n reportedAwaiting === ''\n ? progress !== undefined && progress >= 100\n : reportedAwaiting === '1',\n };\n });\n\n const liveEntries = entries.filter((entry) => !!entry);\n if (!liveEntries.length) return emptyUploadState;\n\n const values = liveEntries.map(({ progress }) => progress);\n const known = values.filter((value): value is number => typeof value === 'number');\n\n return {\n isUploading: true,\n // Only report a number once every pending upload has one, so the bar does not jump between\n // determinate and indeterminate mid-flight.\n progress:\n known.length === values.length && known.length\n ? Math.round(known.reduce((sum, value) => sum + value, 0) / known.length)\n : undefined,\n uploadConfirmationPending: liveEntries.some(\n ({ uploadConfirmationPending }) => uploadConfirmationPending,\n ),\n };\n};\n\n/** Single-attachment convenience wrapper around {@link useAttachmentsUploadState}. */\nexport const useAttachmentUploadState = (\n attachment?: Attachment | LocalAttachment | SharedLocationResponse,\n): AttachmentUploadState =>\n useAttachmentsUploadState(useMemo(() => [attachment], [attachment]));\n\n/**\n * Whether an attachment is in the window where every byte has been sent but the server has not\n * confirmed — read straight off `localMetadata`.\n *\n * This is the composer-side counterpart to {@link useAttachmentsUploadState}: for an attachment\n * still held by the composer, `AttachmentManager` mirrors the live `UploadRecord` into\n * `localMetadata`, so no store subscription is needed. On a *message* the mirrored value is a\n * frozen snapshot, which is why the message side reads the record instead.\n *\n * Falls back to inferring the window from a 100% reading when `uploadConfirmationPending` is absent,\n * i.e. against a resolved `stream-chat` older than v9.51.\n */\nexport const isUploadConfirmationPending = (localMetadata?: {\n uploadConfirmationPending?: boolean;\n uploadProgress?: number;\n uploadState?: string;\n}) => {\n if (!localMetadata || localMetadata.uploadState !== 'uploading') return false;\n if (localMetadata.uploadConfirmationPending !== undefined)\n return localMetadata.uploadConfirmationPending;\n\n return (\n localMetadata.uploadProgress !== undefined && localMetadata.uploadProgress >= 100\n );\n};\n\n/**\n * The URL an attachment should be rendered from. Falls back to the local blob preview while\n * the upload is still in flight, so a pending attachment shows the user's own file rather than\n * nothing. Returns `undefined` when there is nothing to render yet.\n */\nexport const getAttachmentPreviewUrl = (\n attachment?: Attachment | LocalAttachment,\n ...urls: (string | undefined)[]\n): string | undefined => {\n const resolved = urls.find(Boolean);\n if (resolved) return resolved;\n\n return isLocalUploadAttachment(attachment)\n ? attachment.localMetadata.previewUri\n : undefined;\n};\n"],"mappings":";;;;;;AAqCA,IAAM,YAAY;AAYlB,IAAM,mBAA0C;CAC9C,aAAa;CACb,2BAA2B;AAC7B;;;;;;;;;;;AAcA,IAAa,yBACX,eACgC,gBAAgB,UAAU;;;;;;;;;;;;;;;;;;;;;;AAuB5D,IAAa,6BACX,gBAC0B;CAC1B,MAAM,EAAE,WAAW,eAAe;CAElC,MAAM,UAAU,cACR,YAAY,OAAO,qBAAqB,CAAC,CAAC,KAAK,MAAM,EAAE,aAAa,GAC1E,CAAC,WAAW,CACd;CAEA,MAAM,gBAAgB,QAAQ,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG;CAE1D,MAAM,WAAW,aACd,WAA+B,EAI9B,YAAY,cACT,MAAM,GAAG,CAAC,CACV,KAAK,OAAO;EACX,MAAM,SAAS,MAAM,QAAQ;EAG7B,IAAI,CAAC,QAAQ,OAAO;EAEpB,MAAM,WACJ,OAAO,8BAA8B,KAAA,IACjC,KACA,OAAO,4BACL,MACA;EAER,OAAO,GAAG,OAAO,kBAAkB,GAAG,GAAG;CAC3C,CAAC,CAAC,CACD,KAAK,GAAG,EACb,IACA,CAAC,aAAa,CAChB;CAGA,MAAM,EAAE,eAAe,cAAc,QAAQ,eAAe,OAAO,QAAQ,KAAK,CAAC;CAEjF,IAAI,CAAC,QAAQ,QAAQ,OAAO;CAwB5B,MAAM,eApBW,YAAY,MAAM,GAAG,KAAK,CAAC,EAAA,CAAG,KAAK,OAAO,UAAU;EACnE,IAAI,UAAU,WAAW,OAAO,KAAA;EAEhC,MAAM,CAAC,kBAAkB,oBAAoB,MAAM,MAAM,GAAG;EAC5D,MAAM,WACJ,qBAAqB,KAAK,QAAQ,MAAM,CAAC,iBAAiB,OAAO,gBAAgB;EAEnF,OAAO;GACL;GAKA,2BACE,qBAAqB,KACjB,aAAa,KAAA,KAAa,YAAY,MACtC,qBAAqB;EAC7B;CACF,CAEoB,CAAA,CAAQ,QAAQ,UAAU,CAAC,CAAC,KAAK;CACrD,IAAI,CAAC,YAAY,QAAQ,OAAO;CAEhC,MAAM,SAAS,YAAY,KAAK,EAAE,eAAe,QAAQ;CACzD,MAAM,QAAQ,OAAO,QAAQ,UAA2B,OAAO,UAAU,QAAQ;CAEjF,OAAO;EACL,aAAa;EAGb,UACE,MAAM,WAAW,OAAO,UAAU,MAAM,SACpC,KAAK,MAAM,MAAM,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,IACtE,KAAA;EACN,2BAA2B,YAAY,MACpC,EAAE,gCAAgC,yBACrC;CACF;AACF;;AAGA,IAAa,4BACX,eAEA,0BAA0B,cAAc,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;;;;;;;;;;;;;AAcrE,IAAa,+BAA+B,kBAItC;CACJ,IAAI,CAAC,iBAAiB,cAAc,gBAAgB,aAAa,OAAO;CACxE,IAAI,cAAc,8BAA8B,KAAA,GAC9C,OAAO,cAAc;CAEvB,OACE,cAAc,mBAAmB,KAAA,KAAa,cAAc,kBAAkB;AAElF;;;;;;AAOA,IAAa,2BACX,YACA,GAAG,SACoB;CACvB,MAAM,WAAW,KAAK,KAAK,OAAO;CAClC,IAAI,UAAU,OAAO;CAErB,OAAO,wBAAwB,UAAU,IACrC,WAAW,cAAc,aACzB,KAAA;AACN"}
|
|
1
|
+
{"version":3,"file":"useAttachmentUploadState.mjs","names":[],"sources":["../../../../../src/components/Attachment/hooks/useAttachmentUploadState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { isPendingUpload } from 'stream-chat';\nimport type {\n Attachment,\n LocalAttachment,\n SharedLocationResponse,\n UploadManagerState,\n} from 'stream-chat';\n\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useStateStore } from '../../../store';\n\nexport type AttachmentUploadState = {\n /**\n * `true` once every byte has been handed to the socket but the server has not answered yet.\n *\n * Browser upload progress measures bytes *written to the connection*, not bytes the server\n * acknowledged, so it reaches 100% the instant the request body is flushed — then the\n * connection sits idle while the CDN ingests the file and the response travels back. On a\n * large file over a slow link that dead zone is long, and a bar parked at 100% claims the\n * upload is done when nothing is confirmed. Nothing measurable is happening during it, so the\n * honest rendering is indeterminate.\n */\n uploadConfirmationPending: boolean;\n /**\n * `true` only while `client.uploadManager` holds a live record for at least one of the\n * attachments — i.e. a request really is in flight right now.\n */\n isUploading: boolean;\n /**\n * 0–100 while uploading and the transfer length is known; `undefined` otherwise. For several\n * attachments this is their mean, so a gallery shows one combined bar.\n */\n progress?: number;\n};\n\n/** Sentinel for \"no live record for this id\" inside the joined selector key. */\nconst NO_RECORD = '-';\n\n/**\n * `UploadRecord.uploadConfirmationPending` was added in stream-chat v9.51 — see the field's docs there.\n * Widened locally so this SDK still compiles against an older resolved `stream-chat`, in which\n * case the flag is absent and {@link useAttachmentsUploadState} infers it instead.\n */\ntype UploadRecordWithConfirmationPending = {\n uploadConfirmationPending?: boolean;\n uploadProgress?: number;\n};\n\nconst emptyUploadState: AttachmentUploadState = {\n isUploading: false,\n uploadConfirmationPending: false,\n};\n\n/**\n * Reports whether a request for any of these attachments is in flight *right now*, and how far\n * along it is.\n *\n * The source of truth is `client.uploadManager`, which holds a record only for the lifetime of\n * the request. That has two consequences worth knowing:\n *\n * 1. **The UI is opt-in by construction.** An integration that never hands still-uploading\n * attachments to a message never has a message referencing a live record, so none of the\n * upload-progress UI ever renders — no config flag needed. Attachments returned by the API\n * carry no `localMetadata` at all and can never match.\n *\n * 2. **No phantom progress.** A message can outlive its request — the upload was aborted,\n * `disconnectUser` called `uploadManager.reset()`, or the message was rehydrated from an\n * offline store with a stale `localMetadata.uploadState`. Keying off the frozen state would\n * leave such an attachment showing an indeterminate spinner forever; keying off the live\n * record makes it self-healing.\n *\n * `localMetadata.uploadProgress` is only a fallback for the progress *number*, never for\n * deciding whether an upload is running.\n */\nexport const useAttachmentsUploadState = (\n attachments: (Attachment | LocalAttachment | SharedLocationResponse | undefined)[],\n): AttachmentUploadState => {\n const { client } = useChatContext();\n\n const pending = useMemo(\n () => attachments.filter(isPendingUpload).map((a) => a.localMetadata),\n [attachments],\n );\n // Stable primitive so the selector identity does not change on every render.\n const pendingIdsKey = pending.map(({ id }) => id).join(',');\n\n const selector = useCallback(\n (state: UploadManagerState) => ({\n // One joined string rather than an array: useStateStore shallow-compares the selected\n // keys, and a fresh array would compare unequal on every store update.\n // Per id: `-` when there is no live record, else `<progress>:<uploadConfirmationPending>`.\n recordsKey: pendingIdsKey\n .split(',')\n .map((id) => {\n const record = state.uploads[id] as\n | UploadRecordWithConfirmationPending\n | undefined;\n if (!record) return NO_RECORD;\n\n const awaiting =\n record.uploadConfirmationPending === undefined\n ? ''\n : record.uploadConfirmationPending\n ? '1'\n : '0';\n\n return `${record.uploadProgress ?? ''}:${awaiting}`;\n })\n .join(','),\n }),\n [pendingIdsKey],\n );\n\n // `client` is absent when rendered outside <Chat>; useStateStore tolerates an undefined store.\n const { recordsKey } = useStateStore(client?.uploadManager?.state, selector) ?? {};\n\n if (!pending.length) return emptyUploadState;\n\n // A record exists only while the request runs — that, not the message payload, is what\n // \"uploading\" means here.\n const entries = (recordsKey?.split(',') ?? []).map((entry, index) => {\n if (entry === NO_RECORD) return undefined;\n\n const [reportedProgress, reportedAwaiting] = entry.split(':');\n const progress =\n reportedProgress === '' ? pending[index].uploadProgress : Number(reportedProgress);\n\n return {\n progress,\n // Prefer the explicit signal from `UploadRecord.uploadConfirmationPending`. It is absent\n // when the resolved `stream-chat` predates it, so fall back to inferring the same thing:\n // the record is still live, therefore 100% can only mean \"all bytes sent, confirmation\n // still pending\".\n uploadConfirmationPending:\n reportedAwaiting === ''\n ? progress !== undefined && progress >= 100\n : reportedAwaiting === '1',\n };\n });\n\n const liveEntries = entries.filter((entry) => !!entry);\n if (!liveEntries.length) return emptyUploadState;\n\n const values = liveEntries.map(({ progress }) => progress);\n const known = values.filter((value): value is number => typeof value === 'number');\n\n return {\n isUploading: true,\n // Only report a number once every pending upload has one, so the bar does not jump between\n // determinate and indeterminate mid-flight.\n progress:\n known.length === values.length && known.length\n ? Math.round(known.reduce((sum, value) => sum + value, 0) / known.length)\n : undefined,\n uploadConfirmationPending: liveEntries.some(\n ({ uploadConfirmationPending }) => uploadConfirmationPending,\n ),\n };\n};\n\n/** Single-attachment convenience wrapper around {@link useAttachmentsUploadState}. */\nexport const useAttachmentUploadState = (\n attachment?: Attachment | LocalAttachment | SharedLocationResponse,\n): AttachmentUploadState =>\n useAttachmentsUploadState(useMemo(() => [attachment], [attachment]));\n\n/**\n * Whether an attachment is in the window where every byte has been sent but the server has not\n * confirmed — read straight off `localMetadata`.\n *\n * This is the composer-side counterpart to {@link useAttachmentsUploadState}: for an attachment\n * still held by the composer, `AttachmentManager` mirrors the live `UploadRecord` into\n * `localMetadata`, so no store subscription is needed. On a *message* the mirrored value is a\n * frozen snapshot, which is why the message side reads the record instead.\n *\n * Falls back to inferring the window from a 100% reading when `uploadConfirmationPending` is absent,\n * i.e. against a resolved `stream-chat` older than v9.51.\n */\n"],"mappings":";;;;;;AAqCA,IAAM,YAAY;AAYlB,IAAM,mBAA0C;CAC9C,aAAa;CACb,2BAA2B;AAC7B;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAa,6BACX,gBAC0B;CAC1B,MAAM,EAAE,WAAW,eAAe;CAElC,MAAM,UAAU,cACR,YAAY,OAAO,eAAe,CAAC,CAAC,KAAK,MAAM,EAAE,aAAa,GACpE,CAAC,WAAW,CACd;CAEA,MAAM,gBAAgB,QAAQ,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG;CAE1D,MAAM,WAAW,aACd,WAA+B,EAI9B,YAAY,cACT,MAAM,GAAG,CAAC,CACV,KAAK,OAAO;EACX,MAAM,SAAS,MAAM,QAAQ;EAG7B,IAAI,CAAC,QAAQ,OAAO;EAEpB,MAAM,WACJ,OAAO,8BAA8B,KAAA,IACjC,KACA,OAAO,4BACL,MACA;EAER,OAAO,GAAG,OAAO,kBAAkB,GAAG,GAAG;CAC3C,CAAC,CAAC,CACD,KAAK,GAAG,EACb,IACA,CAAC,aAAa,CAChB;CAGA,MAAM,EAAE,eAAe,cAAc,QAAQ,eAAe,OAAO,QAAQ,KAAK,CAAC;CAEjF,IAAI,CAAC,QAAQ,QAAQ,OAAO;CAwB5B,MAAM,eApBW,YAAY,MAAM,GAAG,KAAK,CAAC,EAAA,CAAG,KAAK,OAAO,UAAU;EACnE,IAAI,UAAU,WAAW,OAAO,KAAA;EAEhC,MAAM,CAAC,kBAAkB,oBAAoB,MAAM,MAAM,GAAG;EAC5D,MAAM,WACJ,qBAAqB,KAAK,QAAQ,MAAM,CAAC,iBAAiB,OAAO,gBAAgB;EAEnF,OAAO;GACL;GAKA,2BACE,qBAAqB,KACjB,aAAa,KAAA,KAAa,YAAY,MACtC,qBAAqB;EAC7B;CACF,CAEoB,CAAA,CAAQ,QAAQ,UAAU,CAAC,CAAC,KAAK;CACrD,IAAI,CAAC,YAAY,QAAQ,OAAO;CAEhC,MAAM,SAAS,YAAY,KAAK,EAAE,eAAe,QAAQ;CACzD,MAAM,QAAQ,OAAO,QAAQ,UAA2B,OAAO,UAAU,QAAQ;CAEjF,OAAO;EACL,aAAa;EAGb,UACE,MAAM,WAAW,OAAO,UAAU,MAAM,SACpC,KAAK,MAAM,MAAM,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,IACtE,KAAA;EACN,2BAA2B,YAAY,MACpC,EAAE,gCAAgC,yBACrC;CACF;AACF;;AAGA,IAAa,4BACX,eAEA,0BAA0B,cAAc,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC"}
|