stream-chat-react 10.1.2 → 10.3.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 (96) hide show
  1. package/dist/browser.full-bundle.js +253 -72
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +5 -5
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/AttachmentContainer.d.ts.map +1 -1
  6. package/dist/components/Attachment/AttachmentContainer.js +67 -15
  7. package/dist/components/Attachment/attachment-sizing.d.ts +9 -0
  8. package/dist/components/Attachment/attachment-sizing.d.ts.map +1 -0
  9. package/dist/components/Attachment/attachment-sizing.js +72 -0
  10. package/dist/components/Channel/Channel.d.ts +7 -1
  11. package/dist/components/Channel/Channel.d.ts.map +1 -1
  12. package/dist/components/Channel/Channel.js +2 -1
  13. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  14. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +5 -1
  15. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  16. package/dist/components/ChannelList/ChannelList.js +2 -2
  17. package/dist/components/ChannelList/ChannelListMessenger.js +2 -2
  18. package/dist/components/Gallery/Gallery.d.ts +7 -2
  19. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  20. package/dist/components/Gallery/Gallery.js +16 -5
  21. package/dist/components/Gallery/Image.d.ts +4 -0
  22. package/dist/components/Gallery/Image.d.ts.map +1 -1
  23. package/dist/components/Gallery/Image.js +3 -3
  24. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +19 -4
  25. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  26. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +28 -6
  27. package/dist/components/LoadMore/LoadMoreButton.d.ts +7 -2
  28. package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  29. package/dist/components/LoadMore/LoadMoreButton.js +9 -4
  30. package/dist/components/LoadMore/LoadMorePaginator.d.ts +2 -7
  31. package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
  32. package/dist/components/LoadMore/LoadMorePaginator.js +8 -3
  33. package/dist/components/Message/hooks/useUserRole.d.ts +1 -1
  34. package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
  35. package/dist/components/Message/hooks/useUserRole.js +5 -5
  36. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  37. package/dist/components/MessageInput/hooks/useFileUploads.js +1 -0
  38. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +2 -0
  39. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  40. package/dist/components/MessageInput/hooks/useMessageInputState.js +2 -1
  41. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
  42. package/dist/components/MessageInput/hooks/useSubmitHandler.js +1 -0
  43. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  44. package/dist/components/MessageList/MessageList.js +2 -3
  45. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  46. package/dist/components/MessageList/VirtualizedMessageList.js +0 -1
  47. package/dist/components/MessageList/hooks/useMessageListElements.d.ts +0 -1
  48. package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
  49. package/dist/components/MessageList/hooks/useMessageListElements.js +2 -3
  50. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +0 -1
  51. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
  52. package/dist/components/MessageList/hooks/useScrollLocationLogic.js +0 -10
  53. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  54. package/dist/components/Reactions/SimpleReactionsList.js +26 -6
  55. package/dist/components/Thread/Thread.d.ts.map +1 -1
  56. package/dist/components/Thread/Thread.js +7 -2
  57. package/dist/context/ChannelStateContext.d.ts +5 -2
  58. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  59. package/dist/css/index.css +1 -1
  60. package/dist/css/index.css.map +1 -1
  61. package/dist/css/v2/index.css +1 -1
  62. package/dist/css/v2/index.css.map +1 -1
  63. package/dist/css/v2/index.layout.css +1 -1
  64. package/dist/css/v2/index.layout.css.map +1 -1
  65. package/dist/index.cjs.js +252 -71
  66. package/dist/index.cjs.js.map +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/scss/Attachment.scss +44 -17
  70. package/dist/scss/Audio.scss +1 -0
  71. package/dist/scss/ChannelList.scss +14 -0
  72. package/dist/scss/ChannelSearch.scss +8 -8
  73. package/dist/scss/Message.scss +28 -11
  74. package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +33 -19
  75. package/dist/scss/v2/ChannelList/ChannelList-layout.scss +14 -0
  76. package/dist/scss/v2/ChannelSearch/ChannelSearch-layout.scss +68 -51
  77. package/dist/scss/v2/ChannelSearch/ChannelSearch-theme.scss +48 -0
  78. package/dist/scss/v2/Message/Message-layout.scss +12 -0
  79. package/dist/scss/v2/Message/Message-theme.scss +20 -0
  80. package/dist/scss/v2/MessageList/MessageList-layout.scss +1 -4
  81. package/dist/scss/v2/MessageList/VirtualizedMessageList-layout.scss +21 -0
  82. package/dist/scss/v2/MessageList/VirtualizedMessageList-theme.scss +9 -0
  83. package/dist/scss/v2/Notification/NotificationList-theme.scss +2 -2
  84. package/dist/scss/v2/Tooltip/Tooltip-layout.scss +1 -1
  85. package/dist/scss/v2/_utils.scss +8 -0
  86. package/dist/stories/attachment-sizing.stories.d.ts +2 -0
  87. package/dist/stories/attachment-sizing.stories.d.ts.map +1 -0
  88. package/dist/stories/attachment-sizing.stories.js +179 -0
  89. package/dist/types/types.d.ts +19 -2
  90. package/dist/types/types.d.ts.map +1 -1
  91. package/dist/utils/deprecationWarning.d.ts +2 -0
  92. package/dist/utils/deprecationWarning.d.ts.map +1 -0
  93. package/dist/utils/deprecationWarning.js +12 -0
  94. package/dist/version.d.ts +1 -1
  95. package/dist/version.js +1 -1
  96. package/package.json +3 -3
@@ -10643,7 +10643,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
10643
10643
  };
10644
10644
 
10645
10645
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedGallery = function (props) {
10646
- var images = props.images;
10646
+ var images = props.images, innerRefs = props.innerRefs;
10647
10647
  var _a = React.useState(0), index = _a[0], setIndex = _a[1];
10648
10648
  var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
10649
10649
  var _c = useComponentContext('Gallery').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
@@ -10660,13 +10660,13 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
10660
10660
  }
10661
10661
  };
10662
10662
  var renderImages = images.slice(0, countImagesDisplayedInPreview).map(function (image, i) {
10663
- return i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (React__default["default"].createElement("button", { className: 'str-chat__gallery-placeholder', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); }, style: {
10664
- backgroundImage: "url(".concat(images[lastImageIndexInPreview].image_url, ")"),
10665
- } },
10663
+ return i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (React__default["default"].createElement("button", __assign$8({ className: 'str-chat__gallery-placeholder', "data-testid": 'gallery-image-last', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); }, style: __assign$8({ backgroundImage: "url(".concat(images[lastImageIndexInPreview].previewUrl ||
10664
+ images[lastImageIndexInPreview].image_url ||
10665
+ images[lastImageIndexInPreview].thumb_url, ")") }, image.style) }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })),
10666
10666
  React__default["default"].createElement("p", null, t('{{ imageCount }} more', {
10667
10667
  imageCount: images.length - countImagesDisplayedInPreview,
10668
10668
  })))) : (React__default["default"].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); } },
10669
- React__default["default"].createElement("img", { alt: 'User uploaded content', src: image.image_url || image.thumb_url })));
10669
+ React__default["default"].createElement("img", __assign$8({ alt: 'User uploaded content', src: image.previewUrl || image.image_url || image.thumb_url, style: image.style }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })))));
10670
10670
  });
10671
10671
  var className = clsx('str-chat__gallery', {
10672
10672
  'str-chat__gallery--square': images.length > lastImageIndexInPreview,
@@ -10686,13 +10686,13 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
10686
10686
  * A simple component that displays an image.
10687
10687
  */
10688
10688
  var ImageComponent = function (props) {
10689
- var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url;
10689
+ var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url, innerRef = props.innerRef, previewUrl = props.previewUrl, style = props.style;
10690
10690
  var _b = React.useState(false), modalIsOpen = _b[0], setModalIsOpen = _b[1];
10691
10691
  var _c = useComponentContext('ImageComponent').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
10692
- var imageSrc = dist_1(image_url || thumb_url);
10692
+ var imageSrc = dist_1(previewUrl || image_url || thumb_url);
10693
10693
  var toggleModal = function () { return setModalIsOpen(function (modalIsOpen) { return !modalIsOpen; }); };
10694
10694
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
10695
- React__default["default"].createElement("img", __assign$8({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, tabIndex: 0 }, dimensions)),
10695
+ React__default["default"].createElement("img", __assign$8({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, style: style, tabIndex: 0 }, dimensions, (innerRef && { ref: innerRef }))),
10696
10696
  React__default["default"].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
10697
10697
  React__default["default"].createElement(ModalGallery$1, { images: [props], index: 0 }))));
10698
10698
  };
@@ -13516,7 +13516,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
13516
13516
  ? 'actions'
13517
13517
  : '';
13518
13518
  }
13519
- var classNames = clsx('str-chat__message-attachment', (_b = {},
13519
+ var classNames = clsx('str-chat__message-attachment str-chat__message-attachment-dynamic-size', (_b = {},
13520
13520
  _b["str-chat__message-attachment--".concat(componentType)] = componentType,
13521
13521
  _b["str-chat__message-attachment--".concat(attachment === null || attachment === void 0 ? void 0 : attachment.type)] = attachment === null || attachment === void 0 ? void 0 : attachment.type,
13522
13522
  _b["str-chat__message-attachment--".concat(componentType, "--").concat(extra)] = componentType && extra,
@@ -13532,22 +13532,68 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
13532
13532
  return null;
13533
13533
  return (React__default["default"].createElement(AttachmentActions$1, __assign$8({}, attachment, { actionHandler: actionHandler, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
13534
13534
  };
13535
+ function getCssDimensionsVariables(url) {
13536
+ var _a;
13537
+ var cssVars = (_a = {},
13538
+ _a['--original-height'] = 1000000,
13539
+ _a['--original-width'] = 1000000,
13540
+ _a);
13541
+ if (url) {
13542
+ var urlParams = new URL(url).searchParams;
13543
+ var oh = Number(urlParams.get('oh'));
13544
+ var ow = Number(urlParams.get('ow'));
13545
+ var originalHeight = oh > 1 ? oh : 1000000;
13546
+ var originalWidth = ow > 1 ? ow : 1000000;
13547
+ cssVars['--original-width'] = originalWidth;
13548
+ cssVars['--original-height'] = originalHeight;
13549
+ }
13550
+ return cssVars;
13551
+ }
13535
13552
  var GalleryContainer = function (_a) {
13536
13553
  var attachment = _a.attachment, _b = _a.Gallery, Gallery$1 = _b === void 0 ? Gallery : _b;
13554
+ var imageElements = React.useRef([]);
13555
+ var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
13556
+ var _c = React.useState([]), attachmentConfigurations = _c[0], setAttachmentConfigurations = _c[1];
13557
+ React.useLayoutEffect(function () {
13558
+ if (imageElements.current &&
13559
+ imageElements.current.every(function (element) { return !!element; }) &&
13560
+ imageAttachmentSizeHandler) {
13561
+ var newConfigurations_1 = [];
13562
+ imageElements.current.forEach(function (element, i) {
13563
+ var config = imageAttachmentSizeHandler(attachment.images[i], element);
13564
+ newConfigurations_1.push(config);
13565
+ });
13566
+ setAttachmentConfigurations(newConfigurations_1);
13567
+ }
13568
+ }, [imageElements, imageAttachmentSizeHandler, attachment]);
13569
+ var images = attachment.images.map(function (image, i) {
13570
+ var _a, _b, _c;
13571
+ return (__assign$8(__assign$8({}, image), { previewUrl: ((_a = attachmentConfigurations[i]) === null || _a === void 0 ? void 0 : _a.url) || 'about:blank', style: getCssDimensionsVariables(((_b = attachment.images[i]) === null || _b === void 0 ? void 0 : _b.image_url) || ((_c = attachment.images[i]) === null || _c === void 0 ? void 0 : _c.thumb_url) || '') }));
13572
+ });
13537
13573
  return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: 'gallery' },
13538
- React__default["default"].createElement(Gallery$1, { images: attachment.images || [], key: 'gallery' })));
13574
+ React__default["default"].createElement(Gallery$1, { images: images || [], innerRefs: imageElements, key: 'gallery' })));
13539
13575
  };
13540
13576
  var ImageContainer = function (props) {
13541
13577
  var attachment = props.attachment, _a = props.Image, Image = _a === void 0 ? ImageComponent : _a;
13542
13578
  var componentType = 'image';
13579
+ var imageElement = React.useRef(null);
13580
+ var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
13581
+ var _b = React.useState(undefined), attachmentConfiguration = _b[0], setAttachmentConfiguration = _b[1];
13582
+ React.useLayoutEffect(function () {
13583
+ if (imageElement.current && imageAttachmentSizeHandler) {
13584
+ var config = imageAttachmentSizeHandler(attachment, imageElement.current);
13585
+ setAttachmentConfiguration(config);
13586
+ }
13587
+ }, [imageElement, imageAttachmentSizeHandler, attachment]);
13588
+ var imageConfig = __assign$8(__assign$8({}, attachment), { previewUrl: (attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.url) || 'about:blank', style: getCssDimensionsVariables(attachment.image_url || attachment.thumb_url || '') });
13543
13589
  if (attachment.actions && attachment.actions.length) {
13544
13590
  return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
13545
13591
  React__default["default"].createElement("div", { className: 'str-chat__attachment' },
13546
- React__default["default"].createElement(Image, __assign$8({}, attachment)),
13592
+ React__default["default"].createElement(Image, __assign$8({}, imageConfig, { innerRef: imageElement })),
13547
13593
  React__default["default"].createElement(AttachmentActionsContainer, __assign$8({}, props)))));
13548
13594
  }
13549
13595
  return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
13550
- React__default["default"].createElement(Image, __assign$8({}, attachment))));
13596
+ React__default["default"].createElement(Image, __assign$8({}, imageConfig, { innerRef: imageElement }))));
13551
13597
  };
13552
13598
  var CardContainer = function (props) {
13553
13599
  var attachment = props.attachment, _a = props.Card, Card = _a === void 0 ? Card$1 : _a;
@@ -13578,16 +13624,21 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
13578
13624
  var _a;
13579
13625
  var attachment = props.attachment, _b = props.Media, Media = _b === void 0 ? ReactPlayer : _b;
13580
13626
  var componentType = 'media';
13581
- if ((_a = attachment.actions) === null || _a === void 0 ? void 0 : _a.length) {
13582
- return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
13583
- React__default["default"].createElement("div", { className: 'str-chat__attachment str-chat__attachment-media' },
13584
- React__default["default"].createElement("div", { className: 'str-chat__player-wrapper' },
13585
- React__default["default"].createElement(Media, { className: 'react-player', controls: true, height: '100%', url: attachment.asset_url, width: '100%' })),
13586
- React__default["default"].createElement(AttachmentActionsContainer, __assign$8({}, props)))));
13587
- }
13588
- return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
13589
- React__default["default"].createElement("div", { className: 'str-chat__player-wrapper' },
13590
- React__default["default"].createElement(Media, { className: 'react-player', controls: true, height: '100%', url: attachment.asset_url, width: '100%' }))));
13627
+ var _c = useChannelStateContext(), shouldGenerateVideoThumbnail = _c.shouldGenerateVideoThumbnail, videoAttachmentSizeHandler = _c.videoAttachmentSizeHandler;
13628
+ var videoElement = React.useRef(null);
13629
+ var _d = React.useState(), attachmentConfiguration = _d[0], setAttachmentConfiguration = _d[1];
13630
+ React.useLayoutEffect(function () {
13631
+ if (videoElement.current && videoAttachmentSizeHandler) {
13632
+ var config = videoAttachmentSizeHandler(attachment, videoElement.current, shouldGenerateVideoThumbnail);
13633
+ setAttachmentConfiguration(config);
13634
+ }
13635
+ }, [videoElement, videoAttachmentSizeHandler, attachment]);
13636
+ var content = (React__default["default"].createElement("div", { className: 'str-chat__player-wrapper', "data-testid": 'video-wrapper', ref: videoElement, style: getCssDimensionsVariables(attachment.thumb_url || '') },
13637
+ React__default["default"].createElement(Media, { className: 'react-player', config: { file: { attributes: { poster: attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.thumbUrl } } }, controls: true, height: '100%', url: attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.url, width: '100%' })));
13638
+ return ((_a = attachment.actions) === null || _a === void 0 ? void 0 : _a.length) ? (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
13639
+ React__default["default"].createElement("div", { className: 'str-chat__attachment str-chat__attachment-media' },
13640
+ content,
13641
+ React__default["default"].createElement(AttachmentActionsContainer, __assign$8({}, props))))) : (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType }, content));
13591
13642
  };
13592
13643
 
13593
13644
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var CONTAINER_MAP = {
@@ -40285,7 +40336,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40285
40336
 
40286
40337
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useCreateChannelStateContext = function (value) {
40287
40338
  var _a;
40288
- var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, giphyVersion = value.giphyVersion, error = value.error, hasMore = value.hasMore, hasMoreNewer = value.hasMoreNewer, suppressAutoscroll = value.suppressAutoscroll, highlightedMessageId = value.highlightedMessageId, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
40339
+ var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, giphyVersion = value.giphyVersion, error = value.error, hasMore = value.hasMore, hasMoreNewer = value.hasMoreNewer, imageAttachmentSizeHandler = value.imageAttachmentSizeHandler, suppressAutoscroll = value.suppressAutoscroll, highlightedMessageId = value.highlightedMessageId, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, shouldGenerateVideoThumbnail = value.shouldGenerateVideoThumbnail, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, videoAttachmentSizeHandler = value.videoAttachmentSizeHandler, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
40289
40340
  var channelId = channel.cid;
40290
40341
  var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
40291
40342
  var membersLength = Object.keys(members || []).length;
@@ -40336,6 +40387,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40336
40387
  hasMore: hasMore,
40337
40388
  hasMoreNewer: hasMoreNewer,
40338
40389
  highlightedMessageId: highlightedMessageId,
40390
+ imageAttachmentSizeHandler: imageAttachmentSizeHandler,
40339
40391
  loading: loading,
40340
40392
  loadingMore: loadingMore,
40341
40393
  maxNumberOfFiles: maxNumberOfFiles,
@@ -40347,11 +40399,13 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40347
40399
  pinnedMessages: pinnedMessages,
40348
40400
  quotedMessage: quotedMessage,
40349
40401
  read: read,
40402
+ shouldGenerateVideoThumbnail: shouldGenerateVideoThumbnail,
40350
40403
  suppressAutoscroll: suppressAutoscroll,
40351
40404
  thread: thread,
40352
40405
  threadHasMore: threadHasMore,
40353
40406
  threadLoadingMore: threadLoadingMore,
40354
40407
  threadMessages: threadMessages,
40408
+ videoAttachmentSizeHandler: videoAttachmentSizeHandler,
40355
40409
  watcher_count: watcher_count,
40356
40410
  watcherCount: watcherCount,
40357
40411
  watchers: watchers,
@@ -40371,6 +40425,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40371
40425
  quotedMessage,
40372
40426
  readUsersLength,
40373
40427
  readUsersLastReads,
40428
+ shouldGenerateVideoThumbnail,
40374
40429
  skipMessageDataMemoization,
40375
40430
  suppressAutoscroll,
40376
40431
  thread,
@@ -40552,7 +40607,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40552
40607
 
40553
40608
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
40554
40609
  var _a, _b, _c;
40555
- var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e, channelConfig = _d.channelConfig;
40610
+ var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e;
40556
40611
  var client = useChatContext('useUserRole').client;
40557
40612
  /**
40558
40613
  * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
@@ -40578,11 +40633,11 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
40578
40633
  (isMyMessage && channelCapabilities['update-own-message']);
40579
40634
  var canDelete = channelCapabilities['delete-any-message'] ||
40580
40635
  (isMyMessage && channelCapabilities['delete-own-message']);
40581
- var canFlag = !isMyMessage;
40582
- var canMute = !isMyMessage && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.mutes);
40636
+ var canFlag = !isMyMessage && channelCapabilities['flag-message'];
40637
+ var canMute = !isMyMessage && channelCapabilities['mute-channel'];
40583
40638
  var canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];
40584
- var canReact = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
40585
- var canReply = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) !== false && channelCapabilities['send-reply'];
40639
+ var canReact = channelCapabilities['send-reaction'];
40640
+ var canReply = channelCapabilities['send-reply'];
40586
40641
  return {
40587
40642
  canDelete: canDelete,
40588
40643
  canEdit: canEdit,
@@ -45865,6 +45920,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
45865
45920
  dispatch({
45866
45921
  id: id,
45867
45922
  state: 'finished',
45923
+ thumb_url: response.thumb_url,
45868
45924
  type: 'setFileUpload',
45869
45925
  url: response.file,
45870
45926
  });
@@ -46129,6 +46185,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46129
46185
  asset_url: upload.url,
46130
46186
  file_size: upload.file.size,
46131
46187
  mime_type: upload.file.type,
46188
+ thumb_url: upload.thumb_url,
46132
46189
  title: upload.file.name,
46133
46190
  type: getAttachmentTypeFromMime(upload.file.type || ''),
46134
46191
  }); });
@@ -46315,7 +46372,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46315
46372
  var type = _a.type;
46316
46373
  return type === 'file';
46317
46374
  }).reduce(function (acc, _a) {
46318
- var asset_url = _a.asset_url, file_size = _a.file_size, mime_type = _a.mime_type, _b = _a.title, title = _b === void 0 ? '' : _b;
46375
+ var asset_url = _a.asset_url, file_size = _a.file_size, mime_type = _a.mime_type, thumb_url = _a.thumb_url, _b = _a.title, title = _b === void 0 ? '' : _b;
46319
46376
  var id = nanoid();
46320
46377
  acc[id] = {
46321
46378
  file: {
@@ -46325,6 +46382,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46325
46382
  },
46326
46383
  id: id,
46327
46384
  state: 'finished',
46385
+ thumb_url: thumb_url,
46328
46386
  url: asset_url,
46329
46387
  };
46330
46388
  return acc;
@@ -46857,12 +46915,27 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46857
46915
  */
46858
46916
  var ReactionsList = React__default["default"].memo(UnMemoizedReactionsList);
46859
46917
 
46860
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedSimpleReactionsList = function (props) {
46918
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};// todo: merge with ReactionsList/ButtonWithTooltip
46919
+ // avoiding breaking change of replacing <span> with <button>
46920
+ var WithTooltip = function (_a) {
46921
+ var children = _a.children, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, title = _a.title;
46922
+ var _b = React.useState(null), referenceElement = _b[0], setReferenceElement = _b[1];
46923
+ var _c = useEnterLeaveHandlers({
46924
+ onMouseEnter: onMouseEnter,
46925
+ onMouseLeave: onMouseLeave,
46926
+ }), handleEnter = _c.handleEnter, handleLeave = _c.handleLeave, tooltipVisible = _c.tooltipVisible;
46927
+ var themeVersion = useChatContext('WithTooltip').themeVersion;
46928
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
46929
+ themeVersion === '2' && (React__default["default"].createElement(PopperTooltip, { referenceElement: referenceElement, visible: tooltipVisible }, title)),
46930
+ React__default["default"].createElement("span", { onMouseEnter: handleEnter, onMouseLeave: handleLeave, ref: setReferenceElement }, children)));
46931
+ };
46932
+ var UnMemoizedSimpleReactionsList = function (props) {
46861
46933
  var propHandleReaction = props.handleReaction, rest = __rest$4(props, ["handleReaction"]);
46862
46934
  var _a = useEmojiContext('SimpleReactionsList'), Emoji = _a.Emoji, emojiConfig = _a.emojiConfig;
46863
46935
  var contextHandleReaction = useMessageContext('SimpleReactionsList').handleReaction;
46864
46936
  var _b = useProcessReactions(__assign$8({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _b.additionalEmojiProps, emojiData = _b.emojiData, getEmojiByReactionType = _b.getEmojiByReactionType, iHaveReactedWithReaction = _b.iHaveReactedWithReaction, latestReactions = _b.latestReactions, latestReactionTypes = _b.latestReactionTypes, supportedReactionsArePresent = _b.supportedReactionsArePresent, totalReactionCount = _b.totalReactionCount;
46865
46937
  var _c = React.useState(undefined), tooltipReactionType = _c[0], setTooltipReactionType = _c[1];
46938
+ var themeVersion = useChatContext('SimpleReactionsList').themeVersion;
46866
46939
  var handleReaction = propHandleReaction || contextHandleReaction;
46867
46940
  if (!latestReactions.length)
46868
46941
  return null;
@@ -46872,7 +46945,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46872
46945
  return latestReactions
46873
46946
  .map(function (reaction) {
46874
46947
  var _a, _b;
46875
- if (reaction.type === type) {
46948
+ if (type && reaction.type === type) {
46876
46949
  return ((_a = reaction.user) === null || _a === void 0 ? void 0 : _a.name) || ((_b = reaction.user) === null || _b === void 0 ? void 0 : _b.id);
46877
46950
  }
46878
46951
  return null;
@@ -46885,16 +46958,18 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
46885
46958
  var _a;
46886
46959
  var emojiObject = getEmojiByReactionType(reactionType);
46887
46960
  var isOwnReaction = iHaveReactedWithReaction(reactionType);
46961
+ var tooltipVisible = emojiObject && tooltipReactionType === (emojiObject === null || emojiObject === void 0 ? void 0 : emojiObject.id);
46962
+ var tooltipContent = (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 : _a.join(', ');
46888
46963
  return emojiObject ? (React__default["default"].createElement("li", { className: clsx('str-chat__simple-reactions-list-item', {
46889
46964
  'str-chat__message-reaction-own': isOwnReaction,
46890
46965
  }), key: "".concat(emojiObject.id, "-").concat(i), onClick: function (event) { return handleReaction(reactionType, event); }, onKeyUp: function (event) { return handleReaction(reactionType, event); } },
46891
- React__default["default"].createElement("span", { onMouseEnter: function () { return setTooltipReactionType(reactionType); } },
46966
+ React__default["default"].createElement(WithTooltip, { onMouseEnter: function () { return setTooltipReactionType(reactionType); }, onMouseLeave: function () { return setTooltipReactionType(undefined); }, title: tooltipContent },
46892
46967
  React__default["default"].createElement(React.Suspense, { fallback: null },
46893
46968
  React__default["default"].createElement(Emoji, __assign$8({ data: emojiData, emoji: emojiObject, size: 13 }, additionalEmojiProps))),
46894
- "\u00A0"),
46895
- tooltipReactionType === emojiObject.id && (React__default["default"].createElement("div", { className: 'str-chat__simple-reactions-list-tooltip str-chat__tooltip' },
46896
- React__default["default"].createElement("div", { className: 'arrow' }), (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 :
46897
- _a.join(', '))))) : null;
46969
+ "\u00A0",
46970
+ tooltipVisible && themeVersion === '1' && (React__default["default"].createElement("div", { className: 'str-chat__simple-reactions-list-tooltip' },
46971
+ React__default["default"].createElement("div", { className: 'arrow' }),
46972
+ tooltipContent))))) : null;
46898
46973
  }),
46899
46974
  React__default["default"].createElement("li", { className: 'str-chat__simple-reactions-list-item--last-number' }, totalReactionCount))));
46900
46975
  };
@@ -47237,6 +47312,79 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
47237
47312
  };
47238
47313
  };
47239
47314
 
47315
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var getImageAttachmentConfiguration = function (attachment, element) {
47316
+ var url = new URL((attachment.image_url || attachment.thumb_url || ''));
47317
+ var resizeDimensions = getSizingRestrictions(url, element);
47318
+ if (resizeDimensions) {
47319
+ // Apply 2x for retina displays
47320
+ resizeDimensions.height *= 2;
47321
+ resizeDimensions.width *= 2;
47322
+ addResizingParamsToUrl(resizeDimensions, url);
47323
+ }
47324
+ return {
47325
+ url: url.href,
47326
+ };
47327
+ };
47328
+ var getVideoAttachmentConfiguration = function (attachment, element, shouldGenerateVideoThumbnail) {
47329
+ var thumbUrl = undefined;
47330
+ if (attachment.thumb_url && shouldGenerateVideoThumbnail) {
47331
+ var url = new URL(attachment.thumb_url);
47332
+ var resizeDimensions = getSizingRestrictions(url, element);
47333
+ if (resizeDimensions) {
47334
+ // Apply 2x for retina displays
47335
+ resizeDimensions.height *= 2;
47336
+ resizeDimensions.width *= 2;
47337
+ addResizingParamsToUrl(resizeDimensions, url);
47338
+ }
47339
+ thumbUrl = url.href;
47340
+ }
47341
+ return {
47342
+ thumbUrl: thumbUrl,
47343
+ url: attachment.asset_url || '',
47344
+ };
47345
+ };
47346
+ var getSizingRestrictions = function (url, htmlElement) {
47347
+ var urlParams = url.searchParams;
47348
+ var originalHeight = Number(urlParams.get('oh')) || 1;
47349
+ var originalWidth = Number(urlParams.get('ow')) || 1;
47350
+ var cssSizeRestriction = getCSSSizeRestrictions(htmlElement);
47351
+ var resizeDimensions;
47352
+ if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) && cssSizeRestriction.maxWidth) {
47353
+ resizeDimensions = getResizeDimensions(originalHeight, originalWidth,
47354
+ /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
47355
+ cssSizeRestriction.maxHeight || cssSizeRestriction.height, cssSizeRestriction.maxWidth);
47356
+ }
47357
+ else {
47358
+ resizeDimensions = undefined;
47359
+ }
47360
+ return resizeDimensions;
47361
+ };
47362
+ var getResizeDimensions = function (originalHeight, originalWidth, maxHeight, maxWidth) { return ({
47363
+ height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
47364
+ width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
47365
+ }); };
47366
+ var getCSSSizeRestrictions = function (htmlElement) {
47367
+ var computedStylesheet = getComputedStyle(htmlElement);
47368
+ var height = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
47369
+ var maxHeight = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
47370
+ var maxWidth = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
47371
+ if (!((height || maxHeight) && maxWidth)) {
47372
+ console.warn("Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/react/message-components/attachment/#image-and-video-sizing");
47373
+ }
47374
+ return { height: height, maxHeight: maxHeight, maxWidth: maxWidth };
47375
+ };
47376
+ var getValueRepresentationOfCSSProperty = function (property) {
47377
+ if (!property.endsWith('px')) {
47378
+ return undefined;
47379
+ }
47380
+ var number = parseFloat(property);
47381
+ return isNaN(number) ? undefined : number;
47382
+ };
47383
+ var addResizingParamsToUrl = function (resizeDimensions, url) {
47384
+ url.searchParams.set('h', resizeDimensions.height.toString());
47385
+ url.searchParams.set('w', resizeDimensions.width.toString());
47386
+ };
47387
+
47240
47388
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=streamChat.logChatPromiseExecution;window.StreamChat.Channel=Channel$1;window.ICAL=window.ICAL||{};var UnMemoizedChannel = function (props) {
47241
47389
  var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a, LoadingErrorIndicator = props.LoadingErrorIndicator, _b = props.LoadingIndicator, LoadingIndicator = _b === void 0 ? LoadingChannel : _b;
47242
47390
  var _c = useChatContext('Channel'), contextChannel = _c.channel, channelsQueryState = _c.channelsQueryState, customClasses = _c.customClasses, theme = _c.theme;
@@ -47723,7 +47871,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
47723
47871
  var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
47724
47872
  var editMessage = useEditMessageHandler(doUpdateMessageRequest);
47725
47873
  var typing = state.typing, restState = __rest$4(state, ["typing"]);
47726
- var channelStateContextValue = useCreateChannelStateContext(__assign$8(__assign$8({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, giphyVersion: props.giphyVersion || 'fixed_height', maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
47874
+ var channelStateContextValue = useCreateChannelStateContext(__assign$8(__assign$8({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, giphyVersion: props.giphyVersion || 'fixed_height', imageAttachmentSizeHandler: props.imageAttachmentSizeHandler || getImageAttachmentConfiguration, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, shouldGenerateVideoThumbnail: props.shouldGenerateVideoThumbnail || true, videoAttachmentSizeHandler: props.videoAttachmentSizeHandler || getVideoAttachmentConfiguration, watcher_count: state.watcherCount }));
47727
47875
  var channelActionContextValue = React.useMemo(function () { return ({
47728
47876
  addNotification: addNotification,
47729
47877
  closeThread: closeThread,
@@ -47982,8 +48130,8 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
47982
48130
  if (loading) {
47983
48131
  return React__default["default"].createElement(LoadingIndicator, null);
47984
48132
  }
47985
- return (React__default["default"].createElement("div", { className: 'str-chat__channel-list-messenger' },
47986
- React__default["default"].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main', role: 'listbox' }, children)));
48133
+ return (React__default["default"].createElement("div", { className: 'str-chat__channel-list-messenger str-chat__channel-list-messenger-react' },
48134
+ React__default["default"].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main str-chat__channel-list-messenger-react__main', role: 'listbox' }, children)));
47987
48135
  };
47988
48136
 
47989
48137
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChannelDeletedListener = function (setChannels, customHandler) {
@@ -48836,18 +48984,39 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48836
48984
 
48837
48985
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
48838
48986
 
48839
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedLoadMoreButton = function (props) {
48840
- var _a = props.children, children = _a === void 0 ? 'Load more' : _a, onClick = props.onClick, refreshing = props.refreshing;
48987
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var deprecationAndReplacementWarning = function (pairs, component) {
48988
+ pairs.forEach(function (data) {
48989
+ var _a = [
48990
+ Object.entries(data[0])[0],
48991
+ Object.entries(data[1])[0],
48992
+ ], _b = _a[0], oldName = _b[0], oldValue = _b[1], _c = _a[1], newName = _c[0], newValue = _c[1];
48993
+ if ((typeof oldValue !== 'undefined' && typeof newValue === 'undefined') ||
48994
+ (typeof oldValue !== 'undefined' && typeof newValue !== 'undefined')) {
48995
+ console.warn("[Deprecation notice (".concat(component, ")]: prefer using prop ").concat(newName, " instead of ").concat(oldName));
48996
+ }
48997
+ });
48998
+ };
48999
+
49000
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedLoadMoreButton = function (_a) {
49001
+ var _b = _a.children, children = _b === void 0 ? 'Load more' : _b, isLoading = _a.isLoading, onClick = _a.onClick, refreshing = _a.refreshing;
49002
+ var loading = typeof isLoading !== 'undefined' ? isLoading : refreshing;
49003
+ React.useEffect(function () {
49004
+ deprecationAndReplacementWarning([[{ refreshing: refreshing }, { isLoading: isLoading }]], 'LoadMoreButton');
49005
+ }, []);
48841
49006
  return (React__default["default"].createElement("div", { className: 'str-chat__load-more-button' },
48842
- React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: refreshing, onClick: onClick }, refreshing ? React__default["default"].createElement(LoadingIndicator, null) : children)));
49007
+ React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : children)));
48843
49008
  };
48844
49009
  var LoadMoreButton = React__default["default"].memo(UnMemoizedLoadMoreButton);
48845
49010
 
48846
49011
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedLoadMorePaginator = function (props) {
48847
- var children = props.children, hasNextPage = props.hasNextPage, _a = props.LoadMoreButton, LoadMoreButton$1 = _a === void 0 ? LoadMoreButton : _a, loadNextPage = props.loadNextPage, refreshing = props.refreshing, reverse = props.reverse;
49012
+ var children = props.children, hasNextPage = props.hasNextPage, isLoading = props.isLoading, _a = props.LoadMoreButton, LoadMoreButton$1 = _a === void 0 ? LoadMoreButton : _a, loadNextPage = props.loadNextPage, refreshing = props.refreshing, reverse = props.reverse;
49013
+ var loadingState = typeof isLoading !== 'undefined' ? isLoading : refreshing;
49014
+ React.useEffect(function () {
49015
+ deprecationAndReplacementWarning([[{ refreshing: refreshing }, { isLoading: isLoading }]], 'LoadMorePaginator');
49016
+ }, []);
48848
49017
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
48849
49018
  !reverse && children,
48850
- hasNextPage && React__default["default"].createElement(LoadMoreButton$1, { onClick: loadNextPage, refreshing: refreshing }),
49019
+ hasNextPage && React__default["default"].createElement(LoadMoreButton$1, { isLoading: loadingState, onClick: loadNextPage }),
48851
49020
  reverse && children));
48852
49021
  };
48853
49022
  var LoadMorePaginator = React__default["default"].memo(UnMemoizedLoadMorePaginator);
@@ -48962,7 +49131,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48962
49131
  };
48963
49132
  return React__default["default"].createElement(ChannelPreview, __assign$8({}, previewProps));
48964
49133
  };
48965
- var className = clsx((_a = customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) !== null && _a !== void 0 ? _a : 'str-chat', theme, (_b = customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) !== null && _b !== void 0 ? _b : 'str-chat-channel-list str-chat__channel-list', {
49134
+ var className = clsx((_a = customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) !== null && _a !== void 0 ? _a : 'str-chat', theme, (_b = customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) !== null && _b !== void 0 ? _b : 'str-chat-channel-list str-chat__channel-list str-chat__channel-list-react', {
48966
49135
  'str-chat--windows-flags': useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/),
48967
49136
  'str-chat-channel-list--open': navOpen,
48968
49137
  });
@@ -48970,7 +49139,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48970
49139
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
48971
49140
  React__default["default"].createElement("div", { className: className, ref: channelListRef },
48972
49141
  showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, __assign$8({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
48973
- showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: channelsQueryState.queryInProgress === 'load-more' }, renderChannels
49142
+ showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, isLoading: channelsQueryState.queryInProgress === 'load-more', loadNextPage: loadNextPage }, renderChannels
48974
49143
  ? renderChannels(loadedChannels, renderChannel)
48975
49144
  : loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
48976
49145
  };
@@ -48985,7 +49154,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48985
49154
 
48986
49155
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
48987
49156
 
48988
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version = '10.1.2';
49157
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version = '10.3.0';
48989
49158
 
48990
49159
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChat = function (_a) {
48991
49160
  var _b, _c;
@@ -49274,7 +49443,11 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49274
49443
  }
49275
49444
  };
49276
49445
  var InfiniteScroll = function (props) {
49277
- var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a, _b = props.hasMore, hasMore = _b === void 0 ? false : _b, _c = props.hasMoreNewer, hasMoreNewer = _c === void 0 ? false : _c, head = props.head, _d = props.initialLoad, initialLoad = _d === void 0 ? true : _d, _e = props.isLoading, isLoading = _e === void 0 ? false : _e, listenToScroll = props.listenToScroll, loader = props.loader, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, _f = props.threshold, threshold = _f === void 0 ? 250 : _f, _g = props.useCapture, useCapture = _g === void 0 ? false : _g, elementProps = __rest$4(props, ["children", "element", "hasMore", "hasMoreNewer", "head", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "threshold", "useCapture"]);
49446
+ var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a, hasMore = props.hasMore, hasMoreNewer = props.hasMoreNewer, hasNextPage = props.hasNextPage, hasPreviousPage = props.hasPreviousPage, head = props.head, _b = props.initialLoad, initialLoad = _b === void 0 ? true : _b, isLoading = props.isLoading, listenToScroll = props.listenToScroll, loader = props.loader, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, loadNextPage = props.loadNextPage, loadPreviousPage = props.loadPreviousPage, _c = props.threshold, threshold = _c === void 0 ? 250 : _c, _d = props.useCapture, useCapture = _d === void 0 ? false : _d, elementProps = __rest$4(props, ["children", "element", "hasMore", "hasMoreNewer", "hasNextPage", "hasPreviousPage", "head", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "loadNextPage", "loadPreviousPage", "threshold", "useCapture"]);
49447
+ var loadNextPageFn = loadNextPage || loadMoreNewer;
49448
+ var loadPreviousPageFn = loadPreviousPage || loadMore;
49449
+ var hasNextPageFlag = hasNextPage || hasMoreNewer;
49450
+ var hasPreviousPageFlag = hasPreviousPage || hasMore;
49278
49451
  var scrollComponent = React.useRef();
49279
49452
  var scrollListener = React.useCallback(function () {
49280
49453
  var element = scrollComponent.current;
@@ -49288,13 +49461,30 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49288
49461
  if (listenToScroll) {
49289
49462
  listenToScroll(offset, reverseOffset, threshold);
49290
49463
  }
49291
- if (reverseOffset < Number(threshold) && typeof loadMore === 'function' && hasMore) {
49292
- loadMore();
49464
+ if (reverseOffset < Number(threshold) &&
49465
+ typeof loadPreviousPageFn === 'function' &&
49466
+ hasPreviousPageFlag) {
49467
+ loadPreviousPageFn();
49293
49468
  }
49294
- if (offset < Number(threshold) && typeof loadMoreNewer === 'function' && hasMoreNewer) {
49295
- loadMoreNewer();
49469
+ if (offset < Number(threshold) && typeof loadNextPageFn === 'function' && hasNextPageFlag) {
49470
+ loadNextPageFn();
49296
49471
  }
49297
- }, [hasMore, hasMoreNewer, threshold, listenToScroll, loadMore, loadMoreNewer]);
49472
+ }, [
49473
+ hasPreviousPageFlag,
49474
+ hasNextPageFlag,
49475
+ threshold,
49476
+ listenToScroll,
49477
+ loadPreviousPageFn,
49478
+ loadNextPageFn,
49479
+ ]);
49480
+ React.useEffect(function () {
49481
+ deprecationAndReplacementWarning([
49482
+ [{ hasMoreNewer: hasMoreNewer }, { hasNextPage: hasNextPage }],
49483
+ [{ loadMoreNewer: loadMoreNewer }, { loadNextPage: loadNextPage }],
49484
+ [{ hasMore: hasMore }, { hasPreviousPage: hasPreviousPage }],
49485
+ [{ loadMore: loadMore }, { loadPreviousPage: loadPreviousPage }],
49486
+ ], 'InfiniteScroll');
49487
+ }, []);
49298
49488
  React.useEffect(function () {
49299
49489
  var _a;
49300
49490
  var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
@@ -50062,7 +50252,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50062
50252
  };
50063
50253
 
50064
50254
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useMessageListElements = function (props) {
50065
- var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, onMessageLoadCaptured = props.onMessageLoadCaptured, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
50255
+ var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
50066
50256
  var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
50067
50257
  var _b = useComponentContext('useMessageListElements'), _c = _b.DateSeparator, DateSeparator$1 = _c === void 0 ? DateSeparator : _c, HeaderComponent = _b.HeaderComponent, _d = _b.MessageSystem, MessageSystem = _d === void 0 ? EventComponent : _d;
50068
50258
  // get the readData, but only for messages submitted by the user themselves
@@ -50094,7 +50284,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50094
50284
  }
50095
50285
  var groupStyles = messageGroupStyles[message.id] || '';
50096
50286
  var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--".concat(groupStyles);
50097
- return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
50287
+ return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at },
50098
50288
  React__default["default"].createElement(Message, __assign$8({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
50099
50289
  });
50100
50290
  }, [
@@ -50102,7 +50292,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50102
50292
  internalMessageProps,
50103
50293
  lastReceivedId,
50104
50294
  messageGroupStyles,
50105
- onMessageLoadCaptured,
50106
50295
  readData,
50107
50296
  threadList,
50108
50297
  ]);
@@ -50221,19 +50410,9 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50221
50410
  setIsMessageListScrolledToBottom(true);
50222
50411
  }
50223
50412
  }, [updateScrollTop, closeToTop, closeToBottom, scrolledUpThreshold]);
50224
- var onMessageLoadCaptured = React.useCallback(function () {
50225
- /**
50226
- * A load event (emitted by e.g. an <img>) was captured on a message.
50227
- * In some cases, the loaded asset is larger than the placeholder, which means we have to scroll down.
50228
- */
50229
- if (closeToBottom.current) {
50230
- scrollToBottom();
50231
- }
50232
- }, [closeToTop, closeToBottom, scrollToBottom]);
50233
50413
  return {
50234
50414
  hasNewMessages: hasNewMessages,
50235
50415
  isMessageListScrolledToBottom: isMessageListScrolledToBottom,
50236
- onMessageLoadCaptured: onMessageLoadCaptured,
50237
50416
  onScroll: onScroll,
50238
50417
  scrollToBottom: scrollToBottom,
50239
50418
  wrapperRect: wrapperRect,
@@ -50363,7 +50542,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50363
50542
  messages: messages,
50364
50543
  scrolledUpThreshold: props.scrolledUpThreshold,
50365
50544
  suppressAutoscroll: suppressAutoscroll,
50366
- }), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onMessageLoadCaptured = _x.onMessageLoadCaptured, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
50545
+ }), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
50367
50546
  var _y = useEnrichedMessages({
50368
50547
  channel: channel,
50369
50548
  disableDateSeparator: disableDateSeparator,
@@ -50403,7 +50582,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50403
50582
  unsafeHTML: unsafeHTML,
50404
50583
  },
50405
50584
  messageGroupStyles: messageGroupStyles,
50406
- onMessageLoadCaptured: onMessageLoadCaptured,
50407
50585
  read: read,
50408
50586
  returnAllReadData: returnAllReadData,
50409
50587
  threadList: threadList,
@@ -50447,7 +50625,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50447
50625
  var showEmptyStateIndicator = elements.length === 0 && !threadList;
50448
50626
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
50449
50627
  React__default["default"].createElement(MessageListMainPanel, null,
50450
- React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator$1, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, __assign$8({ className: 'str-chat__reverse-infinite-scroll str-chat__message-list-scroll', "data-testid": 'reverse-infinite-scroll', hasMore: props.hasMore, hasMoreNewer: props.hasMoreNewer, head: props.head, isLoading: props.loadingMore, loader: React__default["default"].createElement("div", { className: 'str-chat__list__loading', key: 'loading-indicator' }, props.loadingMore && React__default["default"].createElement(LoadingIndicator$1, { size: 20 })), loadMore: loadMore, loadMoreNewer: loadMoreNewer }, props.internalInfiniteScrollProps),
50628
+ React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator$1, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, __assign$8({ className: 'str-chat__reverse-infinite-scroll str-chat__message-list-scroll', "data-testid": 'reverse-infinite-scroll', hasNextPage: props.hasMoreNewer, hasPreviousPage: props.hasMore, head: props.head, isLoading: props.loadingMore, loader: React__default["default"].createElement("div", { className: 'str-chat__list__loading', key: 'loading-indicator' }, props.loadingMore && React__default["default"].createElement(LoadingIndicator$1, { size: 20 })), loadNextPage: loadMoreNewer, loadPreviousPage: loadMore }, props.internalInfiniteScrollProps),
50451
50629
  React__default["default"].createElement("ul", { className: 'str-chat__ul', ref: setUlElement }, elements),
50452
50630
  React__default["default"].createElement(TypingIndicator$1, { threadList: threadList }),
50453
50631
  React__default["default"].createElement("div", { key: 'bottom' }))))),
@@ -52056,7 +52234,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
52056
52234
  return Item;
52057
52235
  }, [
52058
52236
  customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage,
52059
- messageGroupStyles,
52060
52237
  numItemsPrepended,
52061
52238
  // processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
52062
52239
  processedMessages.length,
@@ -52198,9 +52375,13 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
52198
52375
  }, []);
52199
52376
  if (!thread)
52200
52377
  return null;
52201
- var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) || 'str-chat__thread-container str-chat__thread';
52378
+ var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
52379
+ clsx('str-chat__thread-container str-chat__thread', {
52380
+ 'str-chat__thread--full': fullWidth,
52381
+ 'str-chat__thread--virtualized': virtualized,
52382
+ });
52202
52383
  var head = (React__default["default"].createElement(ThreadHead$1, __assign$8({ key: thread.id, message: thread, Message: MessageUIComponent }, additionalParentMessageProps)));
52203
- return (React__default["default"].createElement("div", { className: "".concat(threadClass, " ").concat(fullWidth ? 'str-chat__thread--full' : '') },
52384
+ return (React__default["default"].createElement("div", { className: threadClass },
52204
52385
  React__default["default"].createElement(ThreadHeader$1, { closeThread: closeThread, thread: thread }),
52205
52386
  React__default["default"].createElement(ThreadMessageList, __assign$8({ disableDateSeparator: !enableDateSeparator, hasMore: threadHasMore, head: head, loadingMore: threadLoadingMore, loadMore: loadMoreThread, Message: MessageUIComponent, messageActions: messageActions, messages: threadMessages || [], suppressAutoscroll: threadSuppressAutoscroll, threadList: true }, (virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps))),
52206
52387
  React__default["default"].createElement(MessageInput, __assign$8({ focus: autoFocus, Input: ThreadInput, parent: thread, publishTypingEvent: false }, additionalMessageInputProps))));