stream-chat-react 14.0.0-beta.1 → 14.0.0-beta.3

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 (110) hide show
  1. package/dist/{WithAudioPlayback-TERIQpZ6.js → cjs/WithAudioPlayback.4a84360f.js} +100 -12
  2. package/dist/cjs/WithAudioPlayback.4a84360f.js.map +1 -0
  3. package/dist/{audioProcessing-BbOs2wMd.js → cjs/audioProcessing.56e5db9d.js} +1 -1
  4. package/dist/cjs/audioProcessing.56e5db9d.js.map +1 -0
  5. package/dist/cjs/emojis.js +1 -1
  6. package/dist/cjs/index.js +1366 -1037
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/mp3-encoder.js +1 -1
  9. package/dist/css/index.css +232 -62
  10. package/dist/css/index.css.map +1 -1
  11. package/dist/{WithAudioPlayback-BcKZ5Lbh.mjs → es/WithAudioPlayback.a3d5a2fc.mjs} +348 -260
  12. package/dist/es/WithAudioPlayback.a3d5a2fc.mjs.map +1 -0
  13. package/dist/{audioProcessing-ByEVSjGG.mjs → es/audioProcessing.21cb49e1.mjs} +1 -1
  14. package/dist/es/audioProcessing.21cb49e1.mjs.map +1 -0
  15. package/dist/es/emojis.mjs +1 -1
  16. package/dist/es/index.mjs +1500 -1171
  17. package/dist/es/index.mjs.map +1 -1
  18. package/dist/es/mp3-encoder.mjs +1 -1
  19. package/dist/types/components/Attachment/Giphy.d.ts.map +1 -1
  20. package/dist/types/components/Attachment/VoiceRecording.d.ts.map +1 -1
  21. package/dist/types/components/AudioPlayback/AudioPlayer.d.ts.map +1 -1
  22. package/dist/types/components/Badge/Badge.d.ts +1 -0
  23. package/dist/types/components/Badge/Badge.d.ts.map +1 -1
  24. package/dist/types/components/BaseImage/toBaseImageDescriptors.d.ts +1 -1
  25. package/dist/types/components/BaseImage/toBaseImageDescriptors.d.ts.map +1 -1
  26. package/dist/types/components/Channel/Channel.d.ts.map +1 -1
  27. package/dist/types/components/Channel/utils.d.ts +7 -1
  28. package/dist/types/components/Channel/utils.d.ts.map +1 -1
  29. package/dist/types/components/ChannelList/hooks/useMobileNavigation.d.ts.map +1 -1
  30. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.d.ts +3 -1
  31. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.d.ts.map +1 -1
  32. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.defaults.d.ts +6 -3
  33. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.defaults.d.ts.map +1 -1
  34. package/dist/types/components/Chat/hooks/useSplitActionSet.d.ts +5 -0
  35. package/dist/types/components/Chat/hooks/useSplitActionSet.d.ts.map +1 -1
  36. package/dist/types/components/ChatView/ChatView.d.ts.map +1 -1
  37. package/dist/types/components/Dialog/components/ContextMenu.d.ts +119 -3
  38. package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
  39. package/dist/types/components/Dialog/hooks/useDialog.d.ts +1 -1
  40. package/dist/types/components/Dialog/hooks/useDialog.d.ts.map +1 -1
  41. package/dist/types/components/Dialog/service/DialogAnchor.d.ts +14 -1
  42. package/dist/types/components/Dialog/service/DialogAnchor.d.ts.map +1 -1
  43. package/dist/types/components/Dialog/service/DialogManager.d.ts +14 -3
  44. package/dist/types/components/Dialog/service/DialogManager.d.ts.map +1 -1
  45. package/dist/types/components/Dialog/service/DialogPortal.d.ts.map +1 -1
  46. package/dist/types/components/Gallery/Gallery.d.ts.map +1 -1
  47. package/dist/types/components/Gallery/GalleryContext.d.ts +1 -1
  48. package/dist/types/components/Gallery/GalleryContext.d.ts.map +1 -1
  49. package/dist/types/components/Icons/icons.d.ts +4 -0
  50. package/dist/types/components/Icons/icons.d.ts.map +1 -1
  51. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.d.ts.map +1 -1
  52. package/dist/types/components/Message/MessageErrorText.d.ts +0 -5
  53. package/dist/types/components/Message/MessageErrorText.d.ts.map +1 -1
  54. package/dist/types/components/Message/MessageText.d.ts.map +1 -1
  55. package/dist/types/components/Message/MessageUI.d.ts.map +1 -1
  56. package/dist/types/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
  57. package/dist/types/components/Message/index.d.ts +0 -1
  58. package/dist/types/components/Message/index.d.ts.map +1 -1
  59. package/dist/types/components/Message/utils.d.ts +1 -0
  60. package/dist/types/components/Message/utils.d.ts.map +1 -1
  61. package/dist/types/components/MessageActions/MessageActions.d.ts +14 -3
  62. package/dist/types/components/MessageActions/MessageActions.d.ts.map +1 -1
  63. package/dist/types/components/MessageActions/MessageActions.defaults.d.ts +1 -1
  64. package/dist/types/components/MessageActions/MessageActions.defaults.d.ts.map +1 -1
  65. package/dist/types/components/MessageActions/QuickMessageActionButton.d.ts.map +1 -1
  66. package/dist/types/components/MessageActions/hooks/useBaseMessageActionSetFilter.d.ts.map +1 -1
  67. package/dist/types/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.d.ts.map +1 -1
  68. package/dist/types/components/MessageComposer/AttachmentPreviewList/ImageAttachmentPreview.d.ts +3 -1
  69. package/dist/types/components/MessageComposer/AttachmentPreviewList/ImageAttachmentPreview.d.ts.map +1 -1
  70. package/dist/types/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.d.ts +4 -2
  71. package/dist/types/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.d.ts.map +1 -1
  72. package/dist/types/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.d.ts +6 -1
  73. package/dist/types/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.d.ts.map +1 -1
  74. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts +9 -2
  75. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts.map +1 -1
  76. package/dist/types/components/MessageComposer/CommandChip.d.ts +5 -1
  77. package/dist/types/components/MessageComposer/CommandChip.d.ts.map +1 -1
  78. package/dist/types/components/MessageComposer/MessageComposerUI.d.ts.map +1 -1
  79. package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +18 -0
  80. package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
  81. package/dist/types/components/Notifications/Notification.d.ts.map +1 -1
  82. package/dist/types/components/Notifications/hooks/useNotificationTarget.d.ts +1 -1
  83. package/dist/types/components/Notifications/hooks/useNotificationTarget.d.ts.map +1 -1
  84. package/dist/types/components/Notifications/notificationTarget.d.ts +1 -1
  85. package/dist/types/components/Notifications/notificationTarget.d.ts.map +1 -1
  86. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts.map +1 -1
  87. package/dist/types/components/Poll/PollOptionSelector.d.ts.map +1 -1
  88. package/dist/types/components/Reactions/MessageReactions.d.ts.map +1 -1
  89. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts +1 -0
  90. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts.map +1 -1
  91. package/dist/types/components/Reactions/ReactionSelector.d.ts +1 -1
  92. package/dist/types/components/Reactions/ReactionSelector.d.ts.map +1 -1
  93. package/dist/types/components/TextareaComposer/SuggestionList/SuggestionList.d.ts.map +1 -1
  94. package/dist/types/components/TextareaComposer/TextareaComposer.d.ts +1 -2
  95. package/dist/types/components/TextareaComposer/TextareaComposer.d.ts.map +1 -1
  96. package/dist/types/context/ChannelListContext.d.ts +1 -1
  97. package/dist/types/context/ChannelListContext.d.ts.map +1 -1
  98. package/dist/types/context/ComponentContext.d.ts +10 -3
  99. package/dist/types/context/ComponentContext.d.ts.map +1 -1
  100. package/dist/types/context/DialogManagerContext.d.ts +11 -7
  101. package/dist/types/context/DialogManagerContext.d.ts.map +1 -1
  102. package/dist/types/i18n/Streami18n.d.ts +11 -6
  103. package/dist/types/i18n/Streami18n.d.ts.map +1 -1
  104. package/package.json +13 -41
  105. package/dist/WithAudioPlayback-BcKZ5Lbh.mjs.map +0 -1
  106. package/dist/WithAudioPlayback-TERIQpZ6.js.map +0 -1
  107. package/dist/audioProcessing-BbOs2wMd.js.map +0 -1
  108. package/dist/audioProcessing-ByEVSjGG.mjs.map +0 -1
  109. package/dist/types/components/Message/icons.d.ts +0 -7
  110. package/dist/types/components/Message/icons.d.ts.map +0 -1
@@ -44,6 +44,20 @@ const useChannelActionContext = (componentName) => {
44
44
  }
45
45
  return contextValue;
46
46
  };
47
+ const ChannelListContext = React.createContext(
48
+ void 0
49
+ );
50
+ const ChannelListContextProvider = ({
51
+ children,
52
+ value
53
+ }) => /* @__PURE__ */ jsxRuntime.jsx(ChannelListContext.Provider, { value, children });
54
+ const useChannelListContext = () => {
55
+ const contextValue = React.useContext(ChannelListContext);
56
+ if (!contextValue) {
57
+ return {};
58
+ }
59
+ return contextValue;
60
+ };
47
61
  const ChannelStateContext = React.createContext(void 0);
48
62
  const ChannelStateProvider = ({
49
63
  children,
@@ -605,6 +619,7 @@ class AudioPlayer {
605
619
  };
606
620
  this.stop = () => {
607
621
  this.pause();
622
+ this.state.partialNext({ isPlaying: false });
608
623
  this.setSecondsElapsed(0);
609
624
  if (this.elementRef) this.elementRef.currentTime = 0;
610
625
  };
@@ -681,10 +696,7 @@ class AudioPlayer {
681
696
  if (audioElement) {
682
697
  this.updateDurationFromElement(audioElement);
683
698
  }
684
- this.state.partialNext({
685
- isPlaying: false,
686
- secondsElapsed: audioElement?.duration ?? this.durationSeconds ?? 0
687
- });
699
+ this.stop();
688
700
  };
689
701
  const handleError = (e) => {
690
702
  const audio = e.currentTarget;
@@ -1002,7 +1014,10 @@ const getNotificationTargetPanel = (notification) => {
1002
1014
  return isNotificationTargetPanel(panel) ? panel : void 0;
1003
1015
  };
1004
1016
  const getNotificationTargetTag = (panel) => `target:${panel}`;
1005
- const addNotificationTargetTag = (panel, tags) => Array.from(/* @__PURE__ */ new Set([getNotificationTargetTag(panel), ...tags ?? []]));
1017
+ const addNotificationTargetTag = (panel, tags) => {
1018
+ if (!panel) return tags ?? [];
1019
+ return Array.from(/* @__PURE__ */ new Set([getNotificationTargetTag(panel), ...tags ?? []]));
1020
+ };
1006
1021
  const isNotificationForPanel = (notification, panel, options) => {
1007
1022
  const fallbackPanel = options?.fallbackPanel ?? "channel";
1008
1023
  const resolvedPanel = getNotificationTargetPanel(notification) ?? fallbackPanel;
@@ -1580,6 +1595,13 @@ const IconEmojiSmile = createIcon(
1580
1595
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.8333 6.59998C10.8333 7.33638 10.3856 7.83331 9.83334 7.83331C9.28108 7.83331 8.83334 7.33638 8.83334 6.59998C8.83334 5.8636 9.28108 5.33331 9.83334 5.33331C10.3856 5.33331 10.8333 5.8636 10.8333 6.59998Z" })
1581
1596
  ] })
1582
1597
  );
1598
+ const IconExclamation = createIcon(
1599
+ "IconExclamation",
1600
+ /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(6.2222 0) scale(1.7778)", children: [
1601
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 7.5C0 6.9477 0.4477 6.5 1 6.5C1.5523 6.5 2 6.9477 2 7.5C1.99989 8.05211 1.55223 8.5 1 8.5C0.447768 8.5 0.000110293 8.05211 0 7.5Z" }),
1602
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0.25 0.75C0.25 0.33578 0.5858 0 1 0C1.4142 0 1.75 0.33578 1.75 0.75V4.75C1.74989 5.16411 1.41413 5.5 1 5.5C0.585868 5.5 0.25011 5.16411 0.25 4.75V0.75Z" })
1603
+ ] }) })
1604
+ );
1583
1605
  const IconExclamationCircle1 = createIcon(
1584
1606
  "IconExclamationCircle1",
1585
1607
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -2835,6 +2857,7 @@ const messageTextHasEmojisOnly = (message) => {
2835
2857
  return !noSpace;
2836
2858
  };
2837
2859
  const isMessageErrorRetryable = (message) => message.status === "failed" && message.error?.status !== 403;
2860
+ const isNetworkSendFailure = (message) => message.status === "failed" && message.error?.status === 0;
2838
2861
  const isMessageBounced = (message) => message.type === "error" && (message.moderation_details?.action === "MESSAGE_RESPONSE_ACTION_BOUNCE" || message.moderation?.action === "bounce");
2839
2862
  const isMessageBlocked = (message) => message.type === "error" && (message.moderation_details?.action === "MESSAGE_RESPONSE_ACTION_REMOVE" || message.moderation?.action === "remove");
2840
2863
  const isMessageEdited = (message) => !!message.message_text_updated_at;
@@ -3167,6 +3190,64 @@ const findInMsgSetByDate = (targetDate, msgSet, exact = false) => {
3167
3190
  }
3168
3191
  return { index: -1 };
3169
3192
  };
3193
+ const adaptMessageSendErrorToErrorFromResponse = (error) => {
3194
+ if (error instanceof streamChat.ErrorFromResponse) {
3195
+ return error;
3196
+ }
3197
+ const fallbackMessage = error instanceof Error ? error.message : "Message send failed";
3198
+ let message = fallbackMessage;
3199
+ let status = 0;
3200
+ let code = null;
3201
+ if (typeof error === "object" && error !== null) {
3202
+ const maybeAxiosError = error;
3203
+ if (maybeAxiosError.name === "AxiosError" && maybeAxiosError.code === "ERR_NETWORK") {
3204
+ message = typeof maybeAxiosError.message === "string" ? maybeAxiosError.message : "Network Error";
3205
+ status = maybeAxiosError.response?.status ?? 0;
3206
+ return new streamChat.ErrorFromResponse(message, {
3207
+ code: null,
3208
+ response: maybeAxiosError.response ?? {
3209
+ // Compatibility shim: this is an intentionally incomplete AxiosResponse-like object.
3210
+ data: {
3211
+ duration: "",
3212
+ message,
3213
+ more_info: "",
3214
+ StatusCode: status
3215
+ },
3216
+ status
3217
+ },
3218
+ status
3219
+ });
3220
+ }
3221
+ try {
3222
+ const stringError = JSON.stringify(error);
3223
+ const parsedError = stringError ? JSON.parse(stringError) : {};
3224
+ if (typeof parsedError.message === "string") {
3225
+ message = parsedError.message;
3226
+ }
3227
+ if (typeof parsedError.status === "number") {
3228
+ status = parsedError.status;
3229
+ }
3230
+ if (typeof parsedError.code === "number") {
3231
+ code = parsedError.code;
3232
+ }
3233
+ } catch {
3234
+ }
3235
+ }
3236
+ return new streamChat.ErrorFromResponse(message, {
3237
+ code,
3238
+ response: {
3239
+ // Compatibility shim: this is an intentionally incomplete AxiosResponse-like object.
3240
+ data: {
3241
+ duration: "",
3242
+ message,
3243
+ more_info: "",
3244
+ StatusCode: status
3245
+ },
3246
+ status
3247
+ },
3248
+ status
3249
+ });
3250
+ };
3170
3251
  const WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL = {};
3171
3252
  const getChannel = async ({
3172
3253
  channel,
@@ -3896,8 +3977,7 @@ const ChannelInner = (props) => {
3896
3977
  });
3897
3978
  }
3898
3979
  } catch (error) {
3899
- const stringError = JSON.stringify(error);
3900
- const parsedError = stringError ? JSON.parse(stringError) : {};
3980
+ const parsedError = adaptMessageSendErrorToErrorFromResponse(error);
3901
3981
  if (parsedError.code === 4 && error instanceof Error && error.message.includes("already exists")) {
3902
3982
  updateMessage({
3903
3983
  ...localMessage,
@@ -4093,9 +4173,10 @@ const ChatViewContext = React.createContext(void 0);
4093
4173
  const useChatViewContext = () => {
4094
4174
  const value = React.useContext(ChatViewContext);
4095
4175
  if (!value) {
4096
- throw new Error(
4176
+ console.warn(
4097
4177
  "The useChatViewContext hook was called outside of the ChatView provider."
4098
4178
  );
4179
+ return {};
4099
4180
  }
4100
4181
  return value;
4101
4182
  };
@@ -4296,14 +4377,16 @@ ChatView.Threads = ThreadsView;
4296
4377
  ChatView.ThreadAdapter = ThreadAdapter;
4297
4378
  ChatView.Selector = ChatViewSelector;
4298
4379
  const useNotificationTarget = () => {
4299
- const { activeChatView } = useChatViewContext();
4380
+ const chatViewContext = React.useContext(ChatViewContext);
4381
+ const { channels } = useChannelListContext();
4300
4382
  const { channel } = useChannelStateContext();
4301
4383
  const threadInstance = useThreadContext();
4302
4384
  const { legacyThread } = useLegacyThreadContext();
4303
4385
  if (threadInstance || legacyThread) return "thread";
4304
4386
  if (channel) return "channel";
4305
- if (activeChatView === "threads") return "thread-list";
4306
- return "channel-list";
4387
+ if (chatViewContext?.activeChatView === "threads") return "thread-list";
4388
+ if (channels) return "channel-list";
4389
+ return void 0;
4307
4390
  };
4308
4391
  const AudioPlayerContext = React.createContext({
4309
4392
  audioPlayers: null
@@ -4378,6 +4461,8 @@ exports.CHANNEL_CONTAINER_ID = CHANNEL_CONTAINER_ID;
4378
4461
  exports.Channel = Channel;
4379
4462
  exports.ChannelActionContext = ChannelActionContext;
4380
4463
  exports.ChannelActionProvider = ChannelActionProvider;
4464
+ exports.ChannelListContext = ChannelListContext;
4465
+ exports.ChannelListContextProvider = ChannelListContextProvider;
4381
4466
  exports.ChannelStateContext = ChannelStateContext;
4382
4467
  exports.ChannelStateProvider = ChannelStateProvider;
4383
4468
  exports.ChatContext = ChatContext;
@@ -4466,6 +4551,7 @@ exports.IconEditBigSolid = IconEditBigSolid;
4466
4551
  exports.IconEmojiAddReaction = IconEmojiAddReaction;
4467
4552
  exports.IconEmojiSad = IconEmojiSad;
4468
4553
  exports.IconEmojiSmile = IconEmojiSmile;
4554
+ exports.IconExclamation = IconExclamation;
4469
4555
  exports.IconExclamationCircle = IconExclamationCircle;
4470
4556
  exports.IconExclamationCircle1 = IconExclamationCircle1;
4471
4557
  exports.IconExclamationTriangle = IconExclamationTriangle;
@@ -4600,6 +4686,7 @@ exports.isMessageBlocked = isMessageBlocked;
4600
4686
  exports.isMessageBounced = isMessageBounced;
4601
4687
  exports.isMessageEdited = isMessageEdited;
4602
4688
  exports.isMessageErrorRetryable = isMessageErrorRetryable;
4689
+ exports.isNetworkSendFailure = isNetworkSendFailure;
4603
4690
  exports.isNotificationForPanel = isNotificationForPanel;
4604
4691
  exports.isNotificationTargetPanel = isNotificationTargetPanel;
4605
4692
  exports.isNumberOrString = isNumberOrString;
@@ -4618,6 +4705,7 @@ exports.useActiveAudioPlayer = useActiveAudioPlayer;
4618
4705
  exports.useActiveThread = useActiveThread;
4619
4706
  exports.useAudioPlayer = useAudioPlayer;
4620
4707
  exports.useChannelActionContext = useChannelActionContext;
4708
+ exports.useChannelListContext = useChannelListContext;
4621
4709
  exports.useChannelStateContext = useChannelStateContext;
4622
4710
  exports.useChatContext = useChatContext;
4623
4711
  exports.useChatViewContext = useChatViewContext;
@@ -4636,4 +4724,4 @@ exports.useThreadsViewContext = useThreadsViewContext;
4636
4724
  exports.useTranslationContext = useTranslationContext;
4637
4725
  exports.useTypingContext = useTypingContext;
4638
4726
  exports.validateAndGetMessage = validateAndGetMessage;
4639
- //# sourceMappingURL=WithAudioPlayback-TERIQpZ6.js.map
4727
+ //# sourceMappingURL=WithAudioPlayback.4a84360f.js.map