stream-chat-react 14.8.0 → 14.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/channel-detail.js +30 -22
  2. package/dist/cjs/channel-detail.js.map +1 -1
  3. package/dist/cjs/index.js +73 -72
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/{useChannelHeaderOnlineStatus.72753090.js → useChannelHeaderOnlineStatus.6ace991c.js} +42 -26
  6. package/dist/cjs/useChannelHeaderOnlineStatus.6ace991c.js.map +1 -0
  7. package/dist/cjs/useNotificationApi.bf76a16b.js.map +1 -1
  8. package/dist/css/index.css +22 -19
  9. package/dist/css/index.css.map +1 -1
  10. package/dist/es/channel-detail.mjs +30 -22
  11. package/dist/es/channel-detail.mjs.map +1 -1
  12. package/dist/es/index.mjs +66 -73
  13. package/dist/es/index.mjs.map +1 -1
  14. package/dist/es/{useChannelHeaderOnlineStatus.c86db868.mjs → useChannelHeaderOnlineStatus.d6065c22.mjs} +37 -27
  15. package/dist/es/useChannelHeaderOnlineStatus.d6065c22.mjs.map +1 -0
  16. package/dist/es/useNotificationApi.ed6bff88.mjs.map +1 -1
  17. package/dist/types/components/Avatar/Avatar.d.ts +7 -2
  18. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  19. package/dist/types/components/Avatar/utils.d.ts +3 -0
  20. package/dist/types/components/Avatar/utils.d.ts.map +1 -0
  21. package/dist/types/components/ChannelListItem/utils.d.ts.map +1 -1
  22. package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
  23. package/dist/types/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
  24. package/dist/types/components/Message/MessageUI.d.ts.map +1 -1
  25. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts.map +1 -1
  26. package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts +2 -0
  27. package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts.map +1 -1
  28. package/dist/types/components/MessageComposer/index.d.ts +2 -1
  29. package/dist/types/components/MessageComposer/index.d.ts.map +1 -1
  30. package/dist/types/components/Poll/PollOptionSelector.d.ts.map +1 -1
  31. package/dist/types/components/Poll/PollVote.d.ts.map +1 -1
  32. package/dist/types/components/ReactFileUtilities/UploadButton.d.ts.map +1 -1
  33. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts.map +1 -1
  34. package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts.map +1 -1
  35. package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/UserItem.d.ts.map +1 -1
  36. package/dist/types/components/Threads/ThreadList/ThreadListItemUI.d.ts.map +1 -1
  37. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  38. package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts +2 -8
  39. package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts.map +1 -1
  40. package/dist/types/components/index.d.ts +1 -0
  41. package/dist/types/components/index.d.ts.map +1 -1
  42. package/dist/types/context/ComponentContext.d.ts +4 -0
  43. package/dist/types/context/ComponentContext.d.ts.map +1 -1
  44. package/dist/types/context/index.d.ts +1 -0
  45. package/dist/types/context/index.d.ts.map +1 -1
  46. package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.d.ts.map +1 -1
  47. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.d.ts.map +1 -1
  48. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.d.ts.map +1 -1
  49. package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.d.ts.map +1 -1
  50. package/package.json +3 -3
  51. package/dist/cjs/useChannelHeaderOnlineStatus.72753090.js.map +0 -1
  52. package/dist/es/useChannelHeaderOnlineStatus.c86db868.mjs.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_useNotificationApi = require("./useNotificationApi.bf76a16b.js");
3
- const require_useChannelHeaderOnlineStatus = require("./useChannelHeaderOnlineStatus.72753090.js");
3
+ const require_useChannelHeaderOnlineStatus = require("./useChannelHeaderOnlineStatus.6ace991c.js");
4
4
  const require_useMessageComposerController = require("./useMessageComposerController.f8f20e3d.js");
5
5
  const require_audioProcessing = require("./audioProcessing.22303d69.js");
6
6
  let react = require("react");
@@ -230,6 +230,17 @@ var usePollContext = () => {
230
230
  return (0, react.useContext)(PollContext);
231
231
  };
232
232
  //#endregion
233
+ //#region src/context/VirtualizedMessageListContext.tsx
234
+ var VirtualizedMessageListContext = (0, react.createContext)(void 0);
235
+ /**
236
+ * Context provider for components rendered within the `VirtualizedMessageList`
237
+ */
238
+ var VirtualizedMessageListContextProvider = ({ children, value }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VirtualizedMessageListContext.Provider, {
239
+ value,
240
+ children
241
+ });
242
+ var useVirtualizedMessageListContext = () => (0, react.useContext)(VirtualizedMessageListContext);
243
+ //#endregion
233
244
  //#region src/context/WithComponents.tsx
234
245
  function WithComponents({ children, overrides }) {
235
246
  const actualOverrides = {
@@ -10342,14 +10353,14 @@ var DefaultCalloutDialog = ({ children, className, onClose }) => {
10342
10353
  //#endregion
10343
10354
  //#region src/components/Avatar/AvatarStack.tsx
10344
10355
  function AvatarStack({ badgeSize, capLimit = 3, component: Component = "div", displayInfo = [], size }) {
10345
- const { Avatar: Avatar$3 = require_useChannelHeaderOnlineStatus.Avatar } = require_useNotificationApi.useComponentContext(AvatarStack.name);
10356
+ const { Avatar: Avatar$6 = require_useChannelHeaderOnlineStatus.Avatar } = require_useNotificationApi.useComponentContext(AvatarStack.name);
10346
10357
  const displayInfoToRender = (0, react.useMemo)(() => displayInfo.length > capLimit ? displayInfo.slice(0, capLimit) : displayInfo, [displayInfo, capLimit]);
10347
10358
  const overflowCount = displayInfo.length - displayInfoToRender.length;
10348
10359
  if (!displayInfo.length) return null;
10349
10360
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Component, {
10350
10361
  className: (0, clsx.default)("str-chat__avatar-stack", { [`str-chat__avatar-stack--size-${size}`]: typeof size === "string" }),
10351
10362
  "data-testid": "avatar-stack",
10352
- children: [displayInfoToRender.map((info, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$3, {
10363
+ children: [displayInfoToRender.map((info, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$6, {
10353
10364
  imageUrl: info.imageUrl,
10354
10365
  size,
10355
10366
  userName: info.userName
@@ -10675,14 +10686,11 @@ var MessageAlsoSentInChannelIndicator = () => {
10675
10686
  //#endregion
10676
10687
  //#region src/components/Message/MessageRepliesCountButton.tsx
10677
10688
  function UnMemoizedMessageRepliesCountButton(props) {
10678
- const { AvatarStack: AvatarStack$2 = AvatarStack } = require_useNotificationApi.useComponentContext(MessageRepliesCountButton.name);
10689
+ const { AvatarStack: AvatarStack$4 = AvatarStack, extractDisplayInfo: extractDisplayInfo$9 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext(MessageRepliesCountButton.name);
10679
10690
  const { labelPlural, labelSingle, onClick, reply_count: replyCount = 0, thread_participants: threadParticipants = [] } = props;
10680
10691
  const { channelCapabilities } = require_useNotificationApi.useChannelStateContext();
10681
10692
  const { t } = require_useNotificationApi.useTranslationContext("MessageRepliesCountButton");
10682
- const avatarStackDisplayInfo = (0, react.useMemo)(() => threadParticipants.slice(0, 3).map((participant) => ({
10683
- imageUrl: participant.image,
10684
- userName: participant.name || participant.id
10685
- })), [threadParticipants]);
10693
+ const avatarStackDisplayInfo = (0, react.useMemo)(() => threadParticipants.slice(0, 3).map((user) => extractDisplayInfo$9({ user })), [extractDisplayInfo$9, threadParticipants]);
10686
10694
  if (!replyCount) return null;
10687
10695
  let replyCountText = t("replyCount", { count: replyCount });
10688
10696
  if (labelPlural && replyCount > 1) replyCountText = `${replyCount} ${labelPlural}`;
@@ -10694,7 +10702,7 @@ function UnMemoizedMessageRepliesCountButton(props) {
10694
10702
  "data-testid": "replies-count-button",
10695
10703
  disabled: !channelCapabilities["send-reply"],
10696
10704
  onClick,
10697
- children: [replyCountText, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$2, {
10705
+ children: [replyCountText, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$4, {
10698
10706
  displayInfo: avatarStackDisplayInfo,
10699
10707
  size: "xs"
10700
10708
  })]
@@ -12883,6 +12891,8 @@ var useAttachmentManagerState = () => {
12883
12891
  availableUploadSlots: attachmentManager.availableUploadSlots,
12884
12892
  blockedUploadsCount: attachmentManager.blockedUploadsCount,
12885
12893
  failedUploadsCount: attachmentManager.failedUploadsCount,
12894
+ hasAvailableUploadSlots: attachmentManager.hasAvailableUploadSlots,
12895
+ hasCustomDoUploadRequest: attachmentManager.hasCustomDoUploadRequest,
12886
12896
  isUploadEnabled: attachmentManager.isUploadEnabled,
12887
12897
  pendingUploadsCount: attachmentManager.pendingUploadsCount,
12888
12898
  successfulUploadsCount: attachmentManager.successfulUploadsCount,
@@ -13045,9 +13055,7 @@ var UploadFileInput = (0, react.forwardRef)(function UploadFileInput({ className
13045
13055
  const { textareaRef } = require_useMessageComposerController.useMessageComposerContext();
13046
13056
  const messageComposer = require_useMessageComposerController.useMessageComposerController();
13047
13057
  const { attachmentManager } = messageComposer;
13048
- const { isUploadEnabled } = useAttachmentManagerState();
13049
13058
  const { acceptedFiles, maxNumberOfFilesPerMessage } = require_useNotificationApi.useStateStore(messageComposer.configState, attachmentManagerConfigStateSelector$1);
13050
- const isCooldownActive = require_useMessageComposerController.useIsCooldownActive();
13051
13059
  const id = (0, react.useMemo)(() => (0, nanoid.nanoid)(), []);
13052
13060
  const onFileChange = (0, react.useCallback)((files) => {
13053
13061
  attachmentManager.uploadFiles(files);
@@ -13062,7 +13070,6 @@ var UploadFileInput = (0, react.forwardRef)(function UploadFileInput({ className
13062
13070
  accept: acceptedFiles?.join(","),
13063
13071
  "aria-label": t("aria/File upload"),
13064
13072
  "data-testid": "file-input",
13065
- disabled: !isUploadEnabled || isCooldownActive,
13066
13073
  id,
13067
13074
  multiple: maxNumberOfFilesPerMessage > 1,
13068
13075
  ...props,
@@ -15023,15 +15030,16 @@ var PollVoteTimestamp = ({ timestamp }) => {
15023
15030
  var PollVoteAuthor = ({ vote }) => {
15024
15031
  const { t } = require_useNotificationApi.useTranslationContext();
15025
15032
  const { client } = require_useNotificationApi.useChatContext();
15033
+ const { Avatar: Avatar$5 = require_useChannelHeaderOnlineStatus.Avatar, extractDisplayInfo: extractDisplayInfo$8 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
15026
15034
  const displayName = client.user?.id && client.user.id === vote.user?.id ? t("You") : vote.user?.name || vote.user?.id || t("Anonymous");
15027
15035
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15028
15036
  className: "str-chat__poll-vote__author",
15029
- children: [vote.user && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_useChannelHeaderOnlineStatus.Avatar, {
15037
+ children: [vote.user && /* @__PURE__ */ (0, react.createElement)(Avatar$5, {
15038
+ ...extractDisplayInfo$8({ user: vote.user }),
15030
15039
  className: "str-chat__avatar--poll-vote-author",
15031
- imageUrl: vote.user.image,
15032
- size: "md",
15033
- userName: vote.user.name
15034
- }, `poll-vote-${vote.id}-avatar-${vote.user.id}`), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15040
+ key: `poll-vote-${vote.id}-avatar-${vote.user.id}`,
15041
+ size: "md"
15042
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15035
15043
  className: "str-chat__poll-vote__author__name",
15036
15044
  children: displayName
15037
15045
  })]
@@ -15577,7 +15585,7 @@ var PollOptionSelector = ({ displayAvatarCount, option, voteCountVerbose }) => {
15577
15585
  const { t } = require_useNotificationApi.useTranslationContext();
15578
15586
  const { channelCapabilities = {} } = require_useNotificationApi.useChannelStateContext("PollOptionsShortlist");
15579
15587
  const { message } = require_useChannelHeaderOnlineStatus.useMessageContext();
15580
- const { AvatarStack: AvatarStack$1 = AvatarStack } = require_useNotificationApi.useComponentContext();
15588
+ const { AvatarStack: AvatarStack$3 = AvatarStack, extractDisplayInfo: extractDisplayInfo$7 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
15581
15589
  const { poll } = usePollContext();
15582
15590
  const { is_closed, latest_votes_by_option, maxVotedOptionIds, ownVotesByOptionId, vote_counts_by_option, voting_visibility } = require_useNotificationApi.useStateStore(poll.state, pollStateSelector$2);
15583
15591
  const canCastVote = channelCapabilities["cast-poll-vote"] && !is_closed;
@@ -15594,12 +15602,9 @@ var PollOptionSelector = ({ displayAvatarCount, option, voteCountVerbose }) => {
15594
15602
  ownVotesByOptionId,
15595
15603
  poll
15596
15604
  ]);
15597
- const avatarDisplayInfo = (0, react.useMemo)(() => latest_votes_by_option?.[option.id] && latest_votes_by_option[option.id].filter((vote) => !!vote.user && !(0, stream_chat.isVoteAnswer)(vote)).slice(0, displayAvatarCount).map(({ user }) => ({
15598
- id: user.id,
15599
- imageUrl: user.image,
15600
- userName: user.name
15601
- })), [
15605
+ const avatarDisplayInfo = (0, react.useMemo)(() => latest_votes_by_option?.[option.id] && latest_votes_by_option[option.id].filter((vote) => !!vote.user && !(0, stream_chat.isVoteAnswer)(vote)).slice(0, displayAvatarCount).map(extractDisplayInfo$7), [
15602
15606
  displayAvatarCount,
15607
+ extractDisplayInfo$7,
15603
15608
  latest_votes_by_option,
15604
15609
  option.id
15605
15610
  ]);
@@ -15625,7 +15630,7 @@ var PollOptionSelector = ({ displayAvatarCount, option, voteCountVerbose }) => {
15625
15630
  className: "str-chat__poll-option-votes",
15626
15631
  children: [displayAvatarCount && voting_visibility === "public" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
15627
15632
  className: "str-chat__poll-option-voters",
15628
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$1, {
15633
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$3, {
15629
15634
  displayInfo: avatarDisplayInfo,
15630
15635
  size: "xs"
15631
15636
  })
@@ -16437,7 +16442,6 @@ var useAttachmentSelectorActionsFiltered = (original) => {
16437
16442
  var AttachmentSelector = ({ attachmentSelectorActionSet = defaultAttachmentSelectorActionSet, buttonProps, getModalPortalDestination }) => {
16438
16443
  const { t } = require_useNotificationApi.useTranslationContext();
16439
16444
  const { ContextMenu: ContextMenuComponent = require_useChannelHeaderOnlineStatus.ContextMenu, Modal = require_useChannelHeaderOnlineStatus.GlobalModal } = require_useNotificationApi.useComponentContext();
16440
- const { channelCapabilities } = require_useNotificationApi.useChannelStateContext();
16441
16445
  const messageComposer = require_useMessageComposerController.useMessageComposerController();
16442
16446
  const isCooldownActive = require_useMessageComposerController.useIsCooldownActive();
16443
16447
  const { command } = require_useNotificationApi.useStateStore(messageComposer.textComposer.state, textComposerStateSelector$4);
@@ -16486,7 +16490,7 @@ var AttachmentSelector = ({ attachmentSelectorActionSet = defaultAttachmentSelec
16486
16490
  className: "str-chat__attachment-selector",
16487
16491
  ...inertProps,
16488
16492
  children: [
16489
- channelCapabilities["upload-file"] && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UploadFileInput, { ref: setFileInput }),
16493
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UploadFileInput, { ref: setFileInput }),
16490
16494
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AttachmentSelectorButton, {
16491
16495
  ...buttonProps,
16492
16496
  "aria-expanded": menuDialogIsOpen,
@@ -17633,16 +17637,23 @@ var UserGroupItem = ({ entity, focused, ...buttonProps }) => {
17633
17637
  * UI component for mentions rendered in suggestion list
17634
17638
  */
17635
17639
  var UserItem = ({ entity, focused, ...buttonProps }) => {
17640
+ const { Avatar: Avatar$4 = require_useChannelHeaderOnlineStatus.Avatar, extractDisplayInfo: extractDisplayInfo$6 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
17636
17641
  const hasEntity = !!Object.keys(entity).length;
17637
17642
  const titleAttribute = entity.name || entity.id || "";
17638
- const LeadingSlot = (0, react.useMemo)(() => function UserItemAvatar() {
17639
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_useChannelHeaderOnlineStatus.Avatar, {
17640
- "aria-hidden": true,
17641
- imageUrl: entity.image,
17642
- size: "md",
17643
- userName: titleAttribute
17644
- });
17645
- }, [entity.image, titleAttribute]);
17643
+ const LeadingSlot = (0, react.useMemo)(() => {
17644
+ const displayInfo = extractDisplayInfo$6({ user: entity });
17645
+ return function UserItemAvatar() {
17646
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$4, {
17647
+ ...displayInfo,
17648
+ "aria-hidden": true,
17649
+ size: "md"
17650
+ });
17651
+ };
17652
+ }, [
17653
+ Avatar$4,
17654
+ entity,
17655
+ extractDisplayInfo$6
17656
+ ]);
17646
17657
  if (!hasEntity) return null;
17647
17658
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_useChannelHeaderOnlineStatus.ListItemLayout, {
17648
17659
  contentClassName: "str-chat__context-menu__button__label",
@@ -19125,7 +19136,7 @@ var MessageReactionsDetailLoadingIndicator = () => {
19125
19136
  var MessageReactionsDetail = ({ handleFetchReactions, handleReaction, onSelectedReactionTypeChange, own_reactions, reactionDetailsSort: propReactionDetailsSort, reactionGroups, reactions, selectedReactionType, totalReactionCount }) => {
19126
19137
  const [extendedReactionListOpen, setExtendedReactionListOpen] = (0, react.useState)(false);
19127
19138
  const { client } = require_useNotificationApi.useChatContext();
19128
- const { Avatar: Avatar$2 = require_useChannelHeaderOnlineStatus.Avatar, LoadingIndicator = MessageReactionsDetailLoadingIndicator, reactionOptions = defaultReactionOptions, ReactionSelectorExtendedList = ReactionSelector.ExtendedList } = require_useNotificationApi.useComponentContext(MessageReactionsDetail.name);
19139
+ const { Avatar: Avatar$3 = require_useChannelHeaderOnlineStatus.Avatar, extractDisplayInfo: extractDisplayInfo$5 = require_useChannelHeaderOnlineStatus.extractDisplayInfo, LoadingIndicator = MessageReactionsDetailLoadingIndicator, reactionOptions = defaultReactionOptions, ReactionSelectorExtendedList = ReactionSelector.ExtendedList } = require_useNotificationApi.useComponentContext(MessageReactionsDetail.name);
19129
19140
  const { t } = require_useNotificationApi.useTranslationContext();
19130
19141
  const { handleReaction: contextHandleReaction, message, reactionDetailsSort: contextReactionDetailsSort } = require_useChannelHeaderOnlineStatus.useMessageContext(MessageReactionsDetail.name);
19131
19142
  const reactionDetailsSort = propReactionDetailsSort ?? contextReactionDetailsSort ?? defaultReactionDetailsSort;
@@ -19207,12 +19218,11 @@ var MessageReactionsDetail = ({ handleFetchReactions, handleReaction, onSelected
19207
19218
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19208
19219
  className: "str-chat__message-reactions-detail__user-list-item",
19209
19220
  children: [
19210
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$2, {
19221
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$3, {
19222
+ ...extractDisplayInfo$5({ user: user ?? void 0 }),
19211
19223
  className: "str-chat__avatar--with-border",
19212
19224
  "data-testid": "avatar",
19213
- imageUrl: user?.image,
19214
- size: "md",
19215
- userName: user?.name || user?.id
19225
+ size: "md"
19216
19226
  }),
19217
19227
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19218
19228
  className: "str-chat__message-reactions-detail__user-list-item-info",
@@ -20409,7 +20419,7 @@ var MessageUIWithContext = ({ endOfGroup, firstOfGroup, groupedByUser, handleAct
20409
20419
  const { t } = require_useNotificationApi.useTranslationContext("MessageUI");
20410
20420
  const [isBounceDialogOpen, setIsBounceDialogOpen] = (0, react.useState)(false);
20411
20421
  const reminder = useMessageReminder(message.id);
20412
- const { Attachment: Attachment$13 = Attachment, Avatar: Avatar$1 = require_useChannelHeaderOnlineStatus.Avatar, MessageActions: MessageActions$1 = MessageActions, MessageAlsoSentInChannelIndicator: MessageAlsoSentInChannelIndicator$1 = MessageAlsoSentInChannelIndicator, MessageBlocked: MessageBlocked$1 = MessageBlocked, MessageBouncePrompt: MessageBouncePrompt$1 = MessageBouncePrompt, MessageDeleted, MessageDeletedBubble: MessageDeletedBubble$1 = MessageDeletedBubble, MessageEditedIndicator: MessageEditedIndicator$1 = MessageEditedIndicator, MessageReactions: MessageReactions$1 = MessageReactions, MessageRepliesCountButton: MessageRepliesCountButton$1 = MessageRepliesCountButton, MessageStatus: MessageStatus$1 = MessageStatus, MessageTimestamp: MessageTimestamp$1 = require_useChannelHeaderOnlineStatus.MessageTimestamp, MessageTranslationIndicator: MessageTranslationIndicator$1 = MessageTranslationIndicator, PinIndicator: PinIndicator$1 = PinIndicator, QuotedMessage: QuotedMessage$1 = QuotedMessage, ReminderNotification: ReminderNotification$1 = ReminderNotification, StreamedMessageText: StreamedMessageText$1 = StreamedMessageText } = require_useNotificationApi.useComponentContext("MessageUI");
20422
+ const { Attachment: Attachment$13 = Attachment, Avatar: Avatar$2 = require_useChannelHeaderOnlineStatus.Avatar, extractDisplayInfo: extractDisplayInfo$4 = require_useChannelHeaderOnlineStatus.extractDisplayInfo, MessageActions: MessageActions$1 = MessageActions, MessageAlsoSentInChannelIndicator: MessageAlsoSentInChannelIndicator$1 = MessageAlsoSentInChannelIndicator, MessageBlocked: MessageBlocked$1 = MessageBlocked, MessageBouncePrompt: MessageBouncePrompt$1 = MessageBouncePrompt, MessageDeleted, MessageDeletedBubble: MessageDeletedBubble$1 = MessageDeletedBubble, MessageEditedIndicator: MessageEditedIndicator$1 = MessageEditedIndicator, MessageReactions: MessageReactions$1 = MessageReactions, MessageRepliesCountButton: MessageRepliesCountButton$1 = MessageRepliesCountButton, MessageStatus: MessageStatus$1 = MessageStatus, MessageTimestamp: MessageTimestamp$1 = require_useChannelHeaderOnlineStatus.MessageTimestamp, MessageTranslationIndicator: MessageTranslationIndicator$1 = MessageTranslationIndicator, PinIndicator: PinIndicator$1 = PinIndicator, QuotedMessage: QuotedMessage$1 = QuotedMessage, ReminderNotification: ReminderNotification$1 = ReminderNotification, StreamedMessageText: StreamedMessageText$1 = StreamedMessageText } = require_useNotificationApi.useComponentContext("MessageUI");
20413
20423
  const isAIGenerated = (0, react.useMemo)(() => isMessageAIGenerated?.(message), [isMessageAIGenerated, message]);
20414
20424
  const isDeleted = require_useNotificationApi.isMessageDeleted(message);
20415
20425
  const finalAttachments = (0, react.useMemo)(() => !message.shared_location && !message.attachments ? [] : !message.shared_location ? message.attachments : [message.shared_location, ...message.attachments ?? []], [message]);
@@ -20475,13 +20485,12 @@ var MessageUIWithContext = ({ endOfGroup, firstOfGroup, groupedByUser, handleAct
20475
20485
  message.show_in_channel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MessageAlsoSentInChannelIndicator$1, {}),
20476
20486
  !!reminder && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReminderNotification$1, { reminder }),
20477
20487
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MessageTranslationIndicator$1, { message }),
20478
- message.user && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$1, {
20488
+ message.user && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$2, {
20489
+ ...extractDisplayInfo$4({ user: message.user ?? void 0 }),
20479
20490
  className: "str-chat__avatar--with-border",
20480
- imageUrl: message.user.image,
20481
20491
  onClick: onUserClick,
20482
20492
  onMouseOver: onUserHover,
20483
- size: "md",
20484
- userName: message.user.name || message.user.id
20493
+ size: "md"
20485
20494
  }),
20486
20495
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
20487
20496
  "aria-label": messageInnerAriaLabel,
@@ -21613,6 +21622,7 @@ var InfiniteScroll = (props) => {
21613
21622
  */
21614
21623
  var UnMemoizedTypingIndicator = (props) => {
21615
21624
  const { isMessageListScrolledToBottom = true, scrollToBottom, threadList } = props;
21625
+ const { AvatarStack: AvatarStack$2 = AvatarStack, extractDisplayInfo: extractDisplayInfo$3 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
21616
21626
  const { channelConfig, thread } = require_useNotificationApi.useChannelStateContext("TypingIndicator");
21617
21627
  const parentId = require_useNotificationApi.useThreadContext()?.id ?? thread?.id;
21618
21628
  const { client } = require_useNotificationApi.useChatContext("TypingIndicator");
@@ -21623,11 +21633,7 @@ var UnMemoizedTypingIndicator = (props) => {
21623
21633
  const { displayUsers } = useDebouncedTypingActive(threadList ? typingInThread : typingInChannel);
21624
21634
  const showIndicator = displayUsers.length > 0;
21625
21635
  const typingAnnouncement = (0, react.useMemo)(() => getTypingStatusMessage(displayUsers, t), [displayUsers, t]);
21626
- const displayInfo = (0, react.useMemo)(() => displayUsers.map(({ user }) => ({
21627
- id: user?.id,
21628
- imageUrl: user?.image,
21629
- userName: user?.name
21630
- })), [displayUsers]);
21636
+ const displayInfo = (0, react.useMemo)(() => displayUsers.map(extractDisplayInfo$3), [displayUsers, extractDisplayInfo$3]);
21631
21637
  (0, react.useEffect)(() => {
21632
21638
  if (showIndicator && isMessageListScrolledToBottom) scrollToBottom();
21633
21639
  }, [
@@ -21643,7 +21649,7 @@ var UnMemoizedTypingIndicator = (props) => {
21643
21649
  children: [
21644
21650
  displayInfo.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21645
21651
  "aria-hidden": "true",
21646
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack, {
21652
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$2, {
21647
21653
  badgeSize: "md",
21648
21654
  displayInfo,
21649
21655
  size: "md"
@@ -22523,16 +22529,6 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
22523
22529
  })] });
22524
22530
  };
22525
22531
  //#endregion
22526
- //#region src/context/VirtualizedMessageListContext.tsx
22527
- var VirtualizedMessageListContext = (0, react.createContext)(void 0);
22528
- /**
22529
- * Context provider for components rendered within the `VirtualizedMessageList`
22530
- */
22531
- var VirtualizedMessageListContextProvider = ({ children, value }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VirtualizedMessageListContext.Provider, {
22532
- value,
22533
- children
22534
- });
22535
- //#endregion
22536
22532
  //#region src/components/MessageList/VirtualizedMessageList.tsx
22537
22533
  function captureResizeObserverExceededError(e) {
22538
22534
  if (e.message === "ResizeObserver loop completed with undelivered notifications." || e.message === "ResizeObserver loop limit exceeded") e.stopImmediatePropagation();
@@ -23897,6 +23893,7 @@ var UserSearchResultItem = ({ item }) => {
23897
23893
  const { setChannels } = require_useNotificationApi.useChannelListContext();
23898
23894
  const { directMessagingChannelType } = useSearchContext();
23899
23895
  const { t } = require_useNotificationApi.useTranslationContext();
23896
+ const { Avatar: Avatar$1 = require_useChannelHeaderOnlineStatus.Avatar, extractDisplayInfo: extractDisplayInfo$2 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
23900
23897
  const onClick = (0, react.useCallback)(() => {
23901
23898
  const newChannel = client.channel(directMessagingChannelType, { members: [client.userID, item.id] });
23902
23899
  newChannel.watch();
@@ -23917,11 +23914,10 @@ var UserSearchResultItem = ({ item }) => {
23917
23914
  "data-testid": "search-result-user",
23918
23915
  onClick,
23919
23916
  role: "option",
23920
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_useChannelHeaderOnlineStatus.Avatar, {
23921
- imageUrl: item.image,
23917
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Avatar$1, {
23918
+ ...extractDisplayInfo$2({ user: item }),
23922
23919
  isOnline: item.online,
23923
- size: "xl",
23924
- userName: item.name || item.id
23920
+ size: "xl"
23925
23921
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
23926
23922
  className: "str-chat__search-result-data",
23927
23923
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -25445,6 +25441,7 @@ var composeThreadListItemAccessibleLabel = (data, config = {}) => composeAccessi
25445
25441
  var ThreadListItemUI = ({ accessibleLabelConfig, resetHighlighting, ...props }) => {
25446
25442
  const { client, isMessageAIGenerated } = require_useNotificationApi.useChatContext();
25447
25443
  const thread = useThreadListItemContext();
25444
+ const { AvatarStack: AvatarStack$1 = AvatarStack, extractDisplayInfo: extractDisplayInfo$1 = require_useChannelHeaderOnlineStatus.extractDisplayInfo } = require_useNotificationApi.useComponentContext();
25448
25445
  const selector = (0, react.useCallback)((nextValue) => ({
25449
25446
  channel: nextValue.channel,
25450
25447
  deletedAt: nextValue.deletedAt,
@@ -25515,12 +25512,8 @@ var ThreadListItemUI = ({ accessibleLabelConfig, resetHighlighting, ...props })
25515
25512
  };
25516
25513
  const displayInfo = (0, react.useMemo)(() => {
25517
25514
  if (!participants) return [];
25518
- return participants.slice(0, 3).map((participant) => ({
25519
- id: participant.user?.id ?? void 0,
25520
- imageUrl: participant.user?.image,
25521
- userName: participant.user?.name || participant.user.id
25522
- }));
25523
- }, [participants]);
25515
+ return participants.slice(0, 3).map(extractDisplayInfo$1);
25516
+ }, [extractDisplayInfo$1, participants]);
25524
25517
  (0, react.useEffect)(() => {
25525
25518
  if (!resetHighlighting) return;
25526
25519
  const reset = resetHighlighting;
@@ -25559,7 +25552,7 @@ var ThreadListItemUI = ({ accessibleLabelConfig, resetHighlighting, ...props })
25559
25552
  className: "str-chat__thread-list-item__content-trailing",
25560
25553
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
25561
25554
  className: "str-chat__thread-list-item__reply-information",
25562
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack, {
25555
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarStack$1, {
25563
25556
  displayInfo,
25564
25557
  size: "sm"
25565
25558
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -26170,7 +26163,7 @@ var useChat = ({ client, defaultLanguage = "en", i18nInstance }) => {
26170
26163
  };
26171
26164
  (0, react.useEffect)(() => {
26172
26165
  if (!client) return;
26173
- const version = "14.8.0";
26166
+ const version = "14.10.0";
26174
26167
  const userAgent = client.getUserAgent();
26175
26168
  if (!userAgent.includes("stream-chat-react")) client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);
26176
26169
  client.threads.registerSubscriptions();
@@ -26439,6 +26432,7 @@ exports.AIStateIndicator = AIStateIndicator;
26439
26432
  exports.AIStates = AIStates;
26440
26433
  exports.ATTACHMENT_GROUPS_ORDER = ATTACHMENT_GROUPS_ORDER;
26441
26434
  exports.AddCommentPrompt = AddCommentPrompt;
26435
+ exports.AdditionalMessageComposerActions = AdditionalMessageComposerActions;
26442
26436
  exports.Alert = require_useChannelHeaderOnlineStatus.Alert;
26443
26437
  exports.AmountBar = AmountBar;
26444
26438
  exports.AriaLiveAnnouncerContext = require_useNotificationApi.AriaLiveAnnouncerContext;
@@ -26663,6 +26657,7 @@ exports.MessageBounceModal = MessageBounceModal;
26663
26657
  exports.MessageBouncePrompt = MessageBouncePrompt;
26664
26658
  exports.MessageBounceProvider = MessageBounceProvider;
26665
26659
  exports.MessageComposer = MessageComposer;
26660
+ exports.MessageComposerActions = MessageComposerActions;
26666
26661
  exports.MessageComposerContext = require_useMessageComposerController.MessageComposerContext;
26667
26662
  exports.MessageComposerContextProvider = require_useMessageComposerController.MessageComposerContextProvider;
26668
26663
  exports.MessageComposerUI = MessageComposerUI;
@@ -26763,6 +26758,7 @@ exports.Streami18n = Streami18n;
26763
26758
  exports.SuggestPollOptionPrompt = SuggestPollOptionPrompt;
26764
26759
  exports.SuggestionList = SuggestionList;
26765
26760
  exports.SuggestionListItem = SuggestionListItem;
26761
+ exports.SummarizedMessagePreview = SummarizedMessagePreview;
26766
26762
  exports.Switch = require_useChannelHeaderOnlineStatus.Switch;
26767
26763
  exports.SwitchField = require_useChannelHeaderOnlineStatus.SwitchField;
26768
26764
  exports.SwitchFieldDescription = require_useChannelHeaderOnlineStatus.SwitchFieldDescription;
@@ -26805,10 +26801,13 @@ exports.UserSearchResultItem = UserSearchResultItem;
26805
26801
  exports.VideoContainer = VideoContainer;
26806
26802
  exports.Viewer = Viewer;
26807
26803
  exports.VirtualizedMessageList = VirtualizedMessageList;
26804
+ exports.VirtualizedMessageListContext = VirtualizedMessageListContext;
26805
+ exports.VirtualizedMessageListContextProvider = VirtualizedMessageListContextProvider;
26808
26806
  exports.VisuallyHidden = require_useChannelHeaderOnlineStatus.VisuallyHidden;
26809
26807
  exports.VoiceRecording = VoiceRecording;
26810
26808
  exports.VoiceRecordingContainer = VoiceRecordingContainer;
26811
26809
  exports.VoiceRecordingPlayer = VoiceRecordingPlayer;
26810
+ exports.VoiceRecordingPreviewSlot = VoiceRecordingPreviewSlot;
26812
26811
  exports.WaveProgressBar = WaveProgressBar;
26813
26812
  exports.Window = Window;
26814
26813
  exports.WithAudioPlayback = require_useNotificationApi.WithAudioPlayback;
@@ -26999,6 +26998,7 @@ exports.useInertWhenHidden = useInertWhenHidden;
26999
26998
  exports.useInteractionAnnouncements = require_useNotificationApi.useInteractionAnnouncements;
27000
26999
  exports.useIsUserMuted = require_useChannelHeaderOnlineStatus.useIsUserMuted;
27001
27000
  exports.useLastReadData = useLastReadData;
27001
+ exports.useLatestMessagePreview = useLatestMessagePreview;
27002
27002
  exports.useLegacyThreadContext = require_useNotificationApi.useLegacyThreadContext;
27003
27003
  exports.useLiveLocationSharingManager = useLiveLocationSharingManager;
27004
27004
  exports.useMarkUnreadHandler = useMarkUnreadHandler;
@@ -27057,6 +27057,7 @@ exports.useTranslationContext = require_useNotificationApi.useTranslationContext
27057
27057
  exports.useTypingContext = require_useNotificationApi.useTypingContext;
27058
27058
  exports.useUserHandler = useUserHandler;
27059
27059
  exports.useUserRole = useUserRole;
27060
+ exports.useVirtualizedMessageListContext = useVirtualizedMessageListContext;
27060
27061
  exports.validateAndGetMessage = require_useNotificationApi.validateAndGetMessage;
27061
27062
 
27062
27063
  //# sourceMappingURL=index.js.map