stream-chat-react 10.1.1 → 10.2.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 (104) hide show
  1. package/dist/browser.full-bundle.js +328 -202
  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/ChannelPreview/ChannelPreview.d.ts +0 -2
  16. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  17. package/dist/components/ChannelPreview/hooks/index.d.ts +2 -0
  18. package/dist/components/ChannelPreview/hooks/index.d.ts.map +1 -0
  19. package/dist/components/ChannelPreview/hooks/index.js +1 -0
  20. package/dist/components/ChannelPreview/index.d.ts +1 -0
  21. package/dist/components/ChannelPreview/index.d.ts.map +1 -1
  22. package/dist/components/ChannelPreview/index.js +1 -0
  23. package/dist/components/Gallery/Gallery.d.ts +7 -2
  24. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  25. package/dist/components/Gallery/Gallery.js +16 -5
  26. package/dist/components/Gallery/Image.d.ts +4 -0
  27. package/dist/components/Gallery/Image.d.ts.map +1 -1
  28. package/dist/components/Gallery/Image.js +3 -3
  29. package/dist/components/LoadMore/LoadMorePaginator.d.ts +4 -1
  30. package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
  31. package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
  32. package/dist/components/Message/hooks/usePinHandler.js +3 -5
  33. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  34. package/dist/components/MessageInput/hooks/useFileUploads.js +1 -0
  35. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +2 -0
  36. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  37. package/dist/components/MessageInput/hooks/useMessageInputState.js +2 -1
  38. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
  39. package/dist/components/MessageInput/hooks/useSubmitHandler.js +1 -0
  40. package/dist/components/MessageInput/index.d.ts +2 -1
  41. package/dist/components/MessageInput/index.d.ts.map +1 -1
  42. package/dist/components/MessageInput/index.js +2 -1
  43. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  44. package/dist/components/MessageList/MessageList.js +1 -2
  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/Thread/Thread.d.ts.map +1 -1
  54. package/dist/components/Thread/Thread.js +7 -2
  55. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  56. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  57. package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -1
  58. package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  59. package/dist/components/index.d.ts +2 -2
  60. package/dist/components/index.d.ts.map +1 -1
  61. package/dist/components/index.js +2 -2
  62. package/dist/context/ChannelStateContext.d.ts +5 -2
  63. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  64. package/dist/css/index.css +1 -1
  65. package/dist/css/index.css.map +1 -1
  66. package/dist/css/v2/index.css +1 -1
  67. package/dist/css/v2/index.css.map +1 -1
  68. package/dist/css/v2/index.layout.css +1 -1
  69. package/dist/css/v2/index.layout.css.map +1 -1
  70. package/dist/index.cjs.js +324 -202
  71. package/dist/index.cjs.js.map +1 -1
  72. package/dist/scss/Attachment.scss +49 -20
  73. package/dist/scss/Audio.scss +1 -0
  74. package/dist/scss/Message.scss +44 -41
  75. package/dist/scss/MessageCommerce.scss +1 -1
  76. package/dist/scss/Thread.scss +39 -2
  77. package/dist/scss/VirtualMessage.scss +2 -6
  78. package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +33 -19
  79. package/dist/scss/v2/Message/Message-layout.scss +12 -0
  80. package/dist/scss/v2/Message/Message-theme.scss +20 -0
  81. package/dist/scss/v2/MessageList/MessageList-layout.scss +1 -4
  82. package/dist/scss/v2/MessageList/VirtualizedMessageList-layout.scss +21 -0
  83. package/dist/scss/v2/MessageList/VirtualizedMessageList-theme.scss +9 -0
  84. package/dist/scss/v2/Notification/NotificationList-theme.scss +2 -2
  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/stories/edit-message.stories.d.ts.map +1 -1
  90. package/dist/stories/edit-message.stories.js +0 -4
  91. package/dist/stories/pin-message.stories.d.ts +2 -0
  92. package/dist/stories/pin-message.stories.d.ts.map +1 -0
  93. package/dist/stories/pin-message.stories.js +98 -0
  94. package/dist/stories/utils.d.ts +1 -1
  95. package/dist/stories/utils.d.ts.map +1 -1
  96. package/dist/stories/utils.js +30 -19
  97. package/dist/types/types.d.ts +9 -1
  98. package/dist/types/types.d.ts.map +1 -1
  99. package/dist/version.d.ts +1 -1
  100. package/dist/version.js +1 -1
  101. package/package.json +3 -3
  102. package/dist/components/MessageList/Center.d.ts +0 -3
  103. package/dist/components/MessageList/Center.d.ts.map +0 -1
  104. package/dist/components/MessageList/Center.js +0 -6
@@ -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,
@@ -43181,6 +43236,159 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
43181
43236
  intro: 'channel.intro',
43182
43237
  };
43183
43238
 
43239
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useFileState = function (file) {
43240
+ return React.useMemo(function () { return ({
43241
+ failed: file.state === 'failed',
43242
+ finished: file.state === 'finished',
43243
+ uploading: file.state === 'uploading',
43244
+ }); }, [file.state]);
43245
+ };
43246
+
43247
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var EmojiIconLarge = function () {
43248
+ var t = useTranslationContext('EmojiIconLarge').t;
43249
+ return (React__default["default"].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
43250
+ React__default["default"].createElement("title", null, t('Open emoji picker')),
43251
+ React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43252
+ React__default["default"].createElement("path", { d: 'M14 4.4C8.6 4.4 4.4 8.6 4.4 14c0 5.4 4.2 9.6 9.6 9.6c5.4 0 9.6-4.2 9.6-9.6c0-5.4-4.2-9.6-9.6-9.6zM2 14c0-6.6 5.4-12 12-12s12 5.4 12 12s-5.4 12-12 12s-12-5.4-12-12zM12.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM18.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM8.6 15.4c.6-.4 1.2-.2 1.6.2c.6.8 1.6 1.8 3 2c1.2.4 2.8.2 4.8-2c.4-.4 1.2-.6 1.6 0c.4.4.6 1.2 0 1.6c-2.2 2.6-4.8 3.4-7 3c-2-.4-3.6-1.8-4.4-3c-.4-.6-.2-1.2.4-1.8z' }))));
43253
+ };
43254
+ var EmojiIconSmall = function () {
43255
+ var t = useTranslationContext('EmojiIconSmall').t;
43256
+ return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43257
+ React__default["default"].createElement("title", null, t('Open emoji picker')),
43258
+ React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43259
+ React__default["default"].createElement("path", { d: 'M6.7 1.42C3.73 1.42 1.42 3.73 1.42 6.7c0 2.97 2.31 5.28 5.28 5.28c2.97 0 5.28-2.31 5.28-5.28c0-2.97-2.31-5.28-5.28-5.28zM.1 6.7c0-3.63 2.97-6.6 6.6-6.6s6.6 2.97 6.6 6.6s-2.97 6.6-6.6 6.6s-6.6-2.97-6.6-6.6zM6.04 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM9.34 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM3.73 7.47c.33-.22.66-.11.88.11c.33.44.88.99 1.65 1.1c.66.22 1.54.11 2.64-1.1c.22-.22.66-.33.88 0c.22.22.33.66 0 .88c-1.21 1.43-2.64 1.87-3.85 1.65c-1.1-.22-1.98-.99-2.42-1.65c-.22-.33-.11-.66.22-.99z' }))));
43260
+ };
43261
+ // ThemingV2 icon
43262
+ var EmojiPickerIcon = function () { return (React__default["default"].createElement("svg", { preserveAspectRatio: 'xMinYMin', viewBox: '0 0 28 28', width: '100%', xmlns: 'http://www.w3.org/2000/svg' },
43263
+ React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43264
+ React__default["default"].createElement("path", { d: 'M14 4.4C8.6 4.4 4.4 8.6 4.4 14c0 5.4 4.2 9.6 9.6 9.6c5.4 0 9.6-4.2 9.6-9.6c0-5.4-4.2-9.6-9.6-9.6zM2 14c0-6.6 5.4-12 12-12s12 5.4 12 12s-5.4 12-12 12s-12-5.4-12-12zM12.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM18.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM8.6 15.4c.6-.4 1.2-.2 1.6.2c.6.8 1.6 1.8 3 2c1.2.4 2.8.2 4.8-2c.4-.4 1.2-.6 1.6 0c.4.4.6 1.2 0 1.6c-2.2 2.6-4.8 3.4-7 3c-2-.4-3.6-1.8-4.4-3c-.4-.6-.2-1.2.4-1.8z' })))); };
43265
+ var FileUploadIcon = function () {
43266
+ var t = useTranslationContext('FileUploadIcon').t;
43267
+ return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43268
+ React__default["default"].createElement("title", null, t('Attach files')),
43269
+ React__default["default"].createElement("path", { d: 'M7 .5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5S.5 10.59.5 7 3.41.5 7 .5zm0 12c3.031 0 5.5-2.469 5.5-5.5S10.031 1.5 7 1.5A5.506 5.506 0 0 0 1.5 7c0 3.034 2.469 5.5 5.5 5.5zM7.506 3v3.494H11v1.05H7.506V11h-1.05V7.544H3v-1.05h3.456V3h1.05z', fillRule: 'nonzero' })));
43270
+ };
43271
+ var FileUploadIconFlat = function () {
43272
+ var t = useTranslationContext('FileUploadIconFlat').t;
43273
+ return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43274
+ React__default["default"].createElement("title", null, t('Attach files')),
43275
+ React__default["default"].createElement("path", { d: 'M1.667.333h10.666c.737 0 1.334.597 1.334 1.334v10.666c0 .737-.597 1.334-1.334 1.334H1.667a1.333 1.333 0 0 1-1.334-1.334V1.667C.333.93.93.333 1.667.333zm2 1.334a1.667 1.667 0 1 0 0 3.333 1.667 1.667 0 0 0 0-3.333zm-2 9.333v1.333h10.666v-4l-2-2-4 4-2-2L1.667 11z', fillRule: 'nonzero' })));
43276
+ };
43277
+ var LoadingIndicatorIcon = function (_a) {
43278
+ var _b = _a.size, size = _b === void 0 ? 20 : _b;
43279
+ var id = React.useMemo(function () { return nanoid(); }, []);
43280
+ return (React__default["default"].createElement("div", { className: 'str-chat__loading-indicator' },
43281
+ React__default["default"].createElement("svg", { "data-testid": 'loading-indicator', height: size, viewBox: '0 0 30 30', width: size, xmlns: 'http://www.w3.org/2000/svg' },
43282
+ React__default["default"].createElement("defs", null,
43283
+ React__default["default"].createElement("linearGradient", { id: "".concat(id, "-linear-gradient"), x1: '50%', x2: '50%', y1: '0%', y2: '100%' },
43284
+ React__default["default"].createElement("stop", { offset: '0%', stopColor: '#FFF', stopOpacity: '0' }),
43285
+ React__default["default"].createElement("stop", { "data-testid": 'stop-color', offset: '100%', stopOpacity: '1' }))),
43286
+ React__default["default"].createElement("path", { d: 'M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z', fill: "url(#".concat(id, "-linear-gradient)"), fillRule: 'evenodd' }))));
43287
+ };
43288
+ // ThemingV2 icon
43289
+ var UploadIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'attach', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43290
+ React__default["default"].createElement("g", { clipPath: 'url(#clip0_10878_5)' },
43291
+ React__default["default"].createElement("path", { d: 'M12.9997 6.99993L10.9997 6.99993L10.9997 10.9999L6.99972 10.9999L6.99972 12.9999L10.9997 12.9999L10.9997 16.9999L12.9997 16.9999L12.9997 12.9999L16.9997 12.9999L16.9997 10.9999L12.9997 10.9999L12.9997 6.99993ZM11.9997 1.99992C6.47972 1.99992 1.99972 6.47993 1.99972 11.9999C1.99972 17.5199 6.47972 21.9999 11.9997 21.9999C17.5197 21.9999 21.9997 17.5199 21.9997 11.9999C21.9997 6.47993 17.5197 1.99992 11.9997 1.99992ZM11.9997 19.9999C7.58972 19.9999 3.99972 16.4099 3.99972 11.9999C3.99972 7.58993 7.58972 3.99993 11.9997 3.99993C16.4097 3.99993 19.9997 7.58993 19.9997 11.9999C19.9997 16.4099 16.4097 19.9999 11.9997 19.9999Z', fill: 'black' })),
43292
+ React__default["default"].createElement("defs", null,
43293
+ React__default["default"].createElement("clipPath", { id: 'clip0_10878_5' },
43294
+ React__default["default"].createElement("rect", { fill: 'white', height: '24', width: '24' }))))); };
43295
+ var CloseIcon$1 = function () { return (React__default["default"].createElement("svg", { "data-testid": 'close-no-outline', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43296
+ React__default["default"].createElement("path", { d: 'M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z', fill: 'black' }))); };
43297
+ var RetryIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'retry', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43298
+ React__default["default"].createElement("path", { d: 'M17.6449 6.35C16.1949 4.9 14.2049 4 11.9949 4C7.57488 4 4.00488 7.58 4.00488 12C4.00488 16.42 7.57488 20 11.9949 20C15.7249 20 18.8349 17.45 19.7249 14H17.6449C16.8249 16.33 14.6049 18 11.9949 18C8.68488 18 5.99488 15.31 5.99488 12C5.99488 8.69 8.68488 6 11.9949 6C13.6549 6 15.1349 6.69 16.2149 7.78L12.9949 11H19.9949V4L17.6449 6.35Z', fill: 'black' }))); };
43299
+ var DownloadIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'download', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43300
+ React__default["default"].createElement("path", { d: 'M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z', fill: 'black' }))); };
43301
+ var SendIconV1 = function () {
43302
+ var t = useTranslationContext('SendButton').t;
43303
+ return (React__default["default"].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
43304
+ React__default["default"].createElement("title", null, t('Send')),
43305
+ React__default["default"].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' })));
43306
+ };
43307
+ var SendIconV2 = function () {
43308
+ var t = useTranslationContext('SendButton').t;
43309
+ return (React__default["default"].createElement("svg", { "data-testid": 'send', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43310
+ React__default["default"].createElement("title", null, t('Send')),
43311
+ React__default["default"].createElement("path", { d: 'M4.00952 22L24 12L4.00952 2L4 9.77778L18.2857 12L4 14.2222L4.00952 22Z', fill: 'black' })));
43312
+ };
43313
+ var SendButton = function (_a) {
43314
+ var sendMessage = _a.sendMessage, rest = __rest$4(_a, ["sendMessage"]);
43315
+ var themeVersion = useChatContext('SendButton').themeVersion;
43316
+ return (React__default["default"].createElement("button", __assign$8({ "aria-label": 'Send', className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React__default["default"].createElement(SendIconV2, null) : React__default["default"].createElement(SendIconV1, null)));
43317
+ };
43318
+
43319
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var AttachmentPreviewList = function () {
43320
+ var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
43321
+ return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-list' },
43322
+ React__default["default"].createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
43323
+ imageOrder.map(function (id) { return (React__default["default"].createElement(ImagePreviewItem, { id: id, key: id })); }),
43324
+ fileOrder.map(function (id) { return (React__default["default"].createElement(FilePreviewItem, { id: id, key: id })); }))));
43325
+ };
43326
+ var ImagePreviewItem = function (_a) {
43327
+ var _b;
43328
+ var id = _a.id;
43329
+ var _c = useMessageInputContext('ImagePreviewItem'), imageUploads = _c.imageUploads, removeImage = _c.removeImage, uploadImage = _c.uploadImage;
43330
+ var handleRemove = React.useCallback(function (e) {
43331
+ e.stopPropagation();
43332
+ removeImage(id);
43333
+ }, [removeImage, id]);
43334
+ var handleRetry = React.useCallback(function () { return uploadImage(id); }, [uploadImage, id]);
43335
+ var image = imageUploads[id];
43336
+ var state = useFileState(image);
43337
+ // do not display scraped attachments
43338
+ if (!image || image.og_scrape_url)
43339
+ return null;
43340
+ return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image', "data-testid": 'attachment-preview-image' },
43341
+ React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'image-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
43342
+ React__default["default"].createElement(CloseIcon$1, null)),
43343
+ state.failed && (React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-image', "data-testid": 'image-preview-item-retry-button', onClick: handleRetry },
43344
+ React__default["default"].createElement(RetryIcon, null))),
43345
+ state.uploading && (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image-loading' },
43346
+ React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))),
43347
+ (image.previewUri || image.url) && (React__default["default"].createElement("img", { alt: image.file.name, className: 'str-chat__attachment-preview-thumbnail', src: (_b = image.previewUri) !== null && _b !== void 0 ? _b : image.url }))));
43348
+ };
43349
+ var FilePreviewItem = function (_a) {
43350
+ var id = _a.id;
43351
+ var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
43352
+ var handleRemove = React.useCallback(function (e) {
43353
+ e.stopPropagation();
43354
+ removeFile(id);
43355
+ }, [removeFile, id]);
43356
+ var handleRetry = React.useCallback(function () { return uploadFile(id); }, [uploadFile, id]);
43357
+ var file = fileUploads[id];
43358
+ var state = useFileState(file);
43359
+ if (!file)
43360
+ return null;
43361
+ return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
43362
+ React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
43363
+ React__default["default"].createElement(FileIcon, { filename: file.file.name, mimeType: file.file.type, version: '2' })),
43364
+ React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
43365
+ React__default["default"].createElement(CloseIcon$1, null)),
43366
+ state.failed && (React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: handleRetry },
43367
+ React__default["default"].createElement(RetryIcon, null))),
43368
+ React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-end' },
43369
+ React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-name' }, file.file.name),
43370
+ state.finished && (React__default["default"].createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: file.url, rel: 'noreferrer', target: '_blank' },
43371
+ React__default["default"].createElement(DownloadIcon, null))),
43372
+ state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
43373
+ };
43374
+
43375
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var CooldownTimer = function (_a) {
43376
+ var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
43377
+ var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
43378
+ React.useEffect(function () {
43379
+ var countdownInterval = setInterval(function () {
43380
+ if (seconds > 0) {
43381
+ setSeconds(seconds - 1);
43382
+ }
43383
+ else {
43384
+ setCooldownRemaining(0);
43385
+ }
43386
+ }, 1000);
43387
+ return function () { return clearInterval(countdownInterval); };
43388
+ });
43389
+ return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
43390
+ };
43391
+
43184
43392
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useCommandTrigger = function () {
43185
43393
  var themeVersion = useChatContext('useCommandTrigger').themeVersion;
43186
43394
  var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
@@ -43585,78 +43793,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
43585
43793
  React__default["default"].createElement(EmojiPickerComponent, { color: '#006CFF', data: emojiData, emoji: 'point_up', emojisToShowFilter: filterEmoji, native: true, onSelect: onSelectEmoji, set: 'facebook', showPreview: false, showSkinTones: false, title: t('Pick your emoji'), useButton: true }))));
43586
43794
  };
43587
43795
 
43588
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var EmojiIconLarge = function () {
43589
- var t = useTranslationContext('EmojiIconLarge').t;
43590
- return (React__default["default"].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
43591
- React__default["default"].createElement("title", null, t('Open emoji picker')),
43592
- React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43593
- React__default["default"].createElement("path", { d: 'M14 4.4C8.6 4.4 4.4 8.6 4.4 14c0 5.4 4.2 9.6 9.6 9.6c5.4 0 9.6-4.2 9.6-9.6c0-5.4-4.2-9.6-9.6-9.6zM2 14c0-6.6 5.4-12 12-12s12 5.4 12 12s-5.4 12-12 12s-12-5.4-12-12zM12.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM18.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM8.6 15.4c.6-.4 1.2-.2 1.6.2c.6.8 1.6 1.8 3 2c1.2.4 2.8.2 4.8-2c.4-.4 1.2-.6 1.6 0c.4.4.6 1.2 0 1.6c-2.2 2.6-4.8 3.4-7 3c-2-.4-3.6-1.8-4.4-3c-.4-.6-.2-1.2.4-1.8z' }))));
43594
- };
43595
- var EmojiIconSmall = function () {
43596
- var t = useTranslationContext('EmojiIconSmall').t;
43597
- return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43598
- React__default["default"].createElement("title", null, t('Open emoji picker')),
43599
- React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43600
- React__default["default"].createElement("path", { d: 'M6.7 1.42C3.73 1.42 1.42 3.73 1.42 6.7c0 2.97 2.31 5.28 5.28 5.28c2.97 0 5.28-2.31 5.28-5.28c0-2.97-2.31-5.28-5.28-5.28zM.1 6.7c0-3.63 2.97-6.6 6.6-6.6s6.6 2.97 6.6 6.6s-2.97 6.6-6.6 6.6s-6.6-2.97-6.6-6.6zM6.04 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM9.34 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM3.73 7.47c.33-.22.66-.11.88.11c.33.44.88.99 1.65 1.1c.66.22 1.54.11 2.64-1.1c.22-.22.66-.33.88 0c.22.22.33.66 0 .88c-1.21 1.43-2.64 1.87-3.85 1.65c-1.1-.22-1.98-.99-2.42-1.65c-.22-.33-.11-.66.22-.99z' }))));
43601
- };
43602
- // ThemingV2 icon
43603
- var EmojiPickerIcon = function () { return (React__default["default"].createElement("svg", { preserveAspectRatio: 'xMinYMin', viewBox: '0 0 28 28', width: '100%', xmlns: 'http://www.w3.org/2000/svg' },
43604
- React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
43605
- React__default["default"].createElement("path", { d: 'M14 4.4C8.6 4.4 4.4 8.6 4.4 14c0 5.4 4.2 9.6 9.6 9.6c5.4 0 9.6-4.2 9.6-9.6c0-5.4-4.2-9.6-9.6-9.6zM2 14c0-6.6 5.4-12 12-12s12 5.4 12 12s-5.4 12-12 12s-12-5.4-12-12zM12.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM18.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM8.6 15.4c.6-.4 1.2-.2 1.6.2c.6.8 1.6 1.8 3 2c1.2.4 2.8.2 4.8-2c.4-.4 1.2-.6 1.6 0c.4.4.6 1.2 0 1.6c-2.2 2.6-4.8 3.4-7 3c-2-.4-3.6-1.8-4.4-3c-.4-.6-.2-1.2.4-1.8z' })))); };
43606
- var FileUploadIcon = function () {
43607
- var t = useTranslationContext('FileUploadIcon').t;
43608
- return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43609
- React__default["default"].createElement("title", null, t('Attach files')),
43610
- React__default["default"].createElement("path", { d: 'M7 .5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5S.5 10.59.5 7 3.41.5 7 .5zm0 12c3.031 0 5.5-2.469 5.5-5.5S10.031 1.5 7 1.5A5.506 5.506 0 0 0 1.5 7c0 3.034 2.469 5.5 5.5 5.5zM7.506 3v3.494H11v1.05H7.506V11h-1.05V7.544H3v-1.05h3.456V3h1.05z', fillRule: 'nonzero' })));
43611
- };
43612
- var FileUploadIconFlat = function () {
43613
- var t = useTranslationContext('FileUploadIconFlat').t;
43614
- return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
43615
- React__default["default"].createElement("title", null, t('Attach files')),
43616
- React__default["default"].createElement("path", { d: 'M1.667.333h10.666c.737 0 1.334.597 1.334 1.334v10.666c0 .737-.597 1.334-1.334 1.334H1.667a1.333 1.333 0 0 1-1.334-1.334V1.667C.333.93.93.333 1.667.333zm2 1.334a1.667 1.667 0 1 0 0 3.333 1.667 1.667 0 0 0 0-3.333zm-2 9.333v1.333h10.666v-4l-2-2-4 4-2-2L1.667 11z', fillRule: 'nonzero' })));
43617
- };
43618
- var LoadingIndicatorIcon = function (_a) {
43619
- var _b = _a.size, size = _b === void 0 ? 20 : _b;
43620
- var id = React.useMemo(function () { return nanoid(); }, []);
43621
- return (React__default["default"].createElement("div", { className: 'str-chat__loading-indicator' },
43622
- React__default["default"].createElement("svg", { "data-testid": 'loading-indicator', height: size, viewBox: '0 0 30 30', width: size, xmlns: 'http://www.w3.org/2000/svg' },
43623
- React__default["default"].createElement("defs", null,
43624
- React__default["default"].createElement("linearGradient", { id: "".concat(id, "-linear-gradient"), x1: '50%', x2: '50%', y1: '0%', y2: '100%' },
43625
- React__default["default"].createElement("stop", { offset: '0%', stopColor: '#FFF', stopOpacity: '0' }),
43626
- React__default["default"].createElement("stop", { "data-testid": 'stop-color', offset: '100%', stopOpacity: '1' }))),
43627
- React__default["default"].createElement("path", { d: 'M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z', fill: "url(#".concat(id, "-linear-gradient)"), fillRule: 'evenodd' }))));
43628
- };
43629
- // ThemingV2 icon
43630
- var UploadIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'attach', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43631
- React__default["default"].createElement("g", { clipPath: 'url(#clip0_10878_5)' },
43632
- React__default["default"].createElement("path", { d: 'M12.9997 6.99993L10.9997 6.99993L10.9997 10.9999L6.99972 10.9999L6.99972 12.9999L10.9997 12.9999L10.9997 16.9999L12.9997 16.9999L12.9997 12.9999L16.9997 12.9999L16.9997 10.9999L12.9997 10.9999L12.9997 6.99993ZM11.9997 1.99992C6.47972 1.99992 1.99972 6.47993 1.99972 11.9999C1.99972 17.5199 6.47972 21.9999 11.9997 21.9999C17.5197 21.9999 21.9997 17.5199 21.9997 11.9999C21.9997 6.47993 17.5197 1.99992 11.9997 1.99992ZM11.9997 19.9999C7.58972 19.9999 3.99972 16.4099 3.99972 11.9999C3.99972 7.58993 7.58972 3.99993 11.9997 3.99993C16.4097 3.99993 19.9997 7.58993 19.9997 11.9999C19.9997 16.4099 16.4097 19.9999 11.9997 19.9999Z', fill: 'black' })),
43633
- React__default["default"].createElement("defs", null,
43634
- React__default["default"].createElement("clipPath", { id: 'clip0_10878_5' },
43635
- React__default["default"].createElement("rect", { fill: 'white', height: '24', width: '24' }))))); };
43636
- var CloseIcon$1 = function () { return (React__default["default"].createElement("svg", { "data-testid": 'close-no-outline', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43637
- React__default["default"].createElement("path", { d: 'M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z', fill: 'black' }))); };
43638
- var RetryIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'retry', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43639
- React__default["default"].createElement("path", { d: 'M17.6449 6.35C16.1949 4.9 14.2049 4 11.9949 4C7.57488 4 4.00488 7.58 4.00488 12C4.00488 16.42 7.57488 20 11.9949 20C15.7249 20 18.8349 17.45 19.7249 14H17.6449C16.8249 16.33 14.6049 18 11.9949 18C8.68488 18 5.99488 15.31 5.99488 12C5.99488 8.69 8.68488 6 11.9949 6C13.6549 6 15.1349 6.69 16.2149 7.78L12.9949 11H19.9949V4L17.6449 6.35Z', fill: 'black' }))); };
43640
- var DownloadIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'download', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43641
- React__default["default"].createElement("path", { d: 'M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z', fill: 'black' }))); };
43642
- var SendIconV1 = function () {
43643
- var t = useTranslationContext('SendButton').t;
43644
- return (React__default["default"].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
43645
- React__default["default"].createElement("title", null, t('Send')),
43646
- React__default["default"].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' })));
43647
- };
43648
- var SendIconV2 = function () {
43649
- var t = useTranslationContext('SendButton').t;
43650
- return (React__default["default"].createElement("svg", { "data-testid": 'send', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
43651
- React__default["default"].createElement("title", null, t('Send')),
43652
- React__default["default"].createElement("path", { d: 'M4.00952 22L24 12L4.00952 2L4 9.77778L18.2857 12L4 14.2222L4.00952 22Z', fill: 'black' })));
43653
- };
43654
- var SendButton = function (_a) {
43655
- var sendMessage = _a.sendMessage, rest = __rest$4(_a, ["sendMessage"]);
43656
- var themeVersion = useChatContext('SendButton').themeVersion;
43657
- return (React__default["default"].createElement("button", __assign$8({ "aria-label": 'Send', className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React__default["default"].createElement(SendIconV2, null) : React__default["default"].createElement(SendIconV1, null)));
43658
- };
43659
-
43660
43796
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};/**
43661
43797
  * @deprecated This component has been deprecated in favor of `AttachmentPreviewList` as this component
43662
43798
  * utilises outdated components from the package [`react-file-utils`](https://github.com/GetStream/react-file-utils)
@@ -45422,87 +45558,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
45422
45558
  themeVersion === '1' && React__default["default"].createElement(React__default["default"].Fragment, null, quotedMessageText))))));
45423
45559
  };
45424
45560
 
45425
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useFileState = function (file) {
45426
- return React.useMemo(function () { return ({
45427
- failed: file.state === 'failed',
45428
- finished: file.state === 'finished',
45429
- uploading: file.state === 'uploading',
45430
- }); }, [file.state]);
45431
- };
45432
-
45433
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var AttachmentPreviewList = function () {
45434
- var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
45435
- return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-list' },
45436
- React__default["default"].createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
45437
- imageOrder.map(function (id) { return (React__default["default"].createElement(ImagePreviewItem, { id: id, key: id })); }),
45438
- fileOrder.map(function (id) { return (React__default["default"].createElement(FilePreviewItem, { id: id, key: id })); }))));
45439
- };
45440
- var ImagePreviewItem = function (_a) {
45441
- var _b;
45442
- var id = _a.id;
45443
- var _c = useMessageInputContext('ImagePreviewItem'), imageUploads = _c.imageUploads, removeImage = _c.removeImage, uploadImage = _c.uploadImage;
45444
- var handleRemove = React.useCallback(function (e) {
45445
- e.stopPropagation();
45446
- removeImage(id);
45447
- }, [removeImage, id]);
45448
- var handleRetry = React.useCallback(function () { return uploadImage(id); }, [uploadImage, id]);
45449
- var image = imageUploads[id];
45450
- var state = useFileState(image);
45451
- // do not display scraped attachments
45452
- if (!image || image.og_scrape_url)
45453
- return null;
45454
- return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image', "data-testid": 'attachment-preview-image' },
45455
- React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'image-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
45456
- React__default["default"].createElement(CloseIcon$1, null)),
45457
- state.failed && (React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-image', "data-testid": 'image-preview-item-retry-button', onClick: handleRetry },
45458
- React__default["default"].createElement(RetryIcon, null))),
45459
- state.uploading && (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image-loading' },
45460
- React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))),
45461
- (image.previewUri || image.url) && (React__default["default"].createElement("img", { alt: image.file.name, className: 'str-chat__attachment-preview-thumbnail', src: (_b = image.previewUri) !== null && _b !== void 0 ? _b : image.url }))));
45462
- };
45463
- var FilePreviewItem = function (_a) {
45464
- var id = _a.id;
45465
- var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
45466
- var handleRemove = React.useCallback(function (e) {
45467
- e.stopPropagation();
45468
- removeFile(id);
45469
- }, [removeFile, id]);
45470
- var handleRetry = React.useCallback(function () { return uploadFile(id); }, [uploadFile, id]);
45471
- var file = fileUploads[id];
45472
- var state = useFileState(file);
45473
- if (!file)
45474
- return null;
45475
- return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
45476
- React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
45477
- React__default["default"].createElement(FileIcon, { filename: file.file.name, mimeType: file.file.type, version: '2' })),
45478
- React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
45479
- React__default["default"].createElement(CloseIcon$1, null)),
45480
- state.failed && (React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: handleRetry },
45481
- React__default["default"].createElement(RetryIcon, null))),
45482
- React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-end' },
45483
- React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-name' }, file.file.name),
45484
- state.finished && (React__default["default"].createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: file.url, rel: 'noreferrer', target: '_blank' },
45485
- React__default["default"].createElement(DownloadIcon, null))),
45486
- state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
45487
- };
45488
-
45489
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var CooldownTimer = function (_a) {
45490
- var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
45491
- var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
45492
- React.useEffect(function () {
45493
- var countdownInterval = setInterval(function () {
45494
- if (seconds > 0) {
45495
- setSeconds(seconds - 1);
45496
- }
45497
- else {
45498
- setCooldownRemaining(0);
45499
- }
45500
- }, 1000);
45501
- return function () { return clearInterval(countdownInterval); };
45502
- });
45503
- return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
45504
- };
45505
-
45506
45561
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var MessageInputFlat = function () {
45507
45562
  var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
45508
45563
  var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
@@ -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;
@@ -47237,6 +47295,79 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
47237
47295
  };
47238
47296
  };
47239
47297
 
47298
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var getImageAttachmentConfiguration = function (attachment, element) {
47299
+ var url = new URL((attachment.image_url || attachment.thumb_url || ''));
47300
+ var resizeDimensions = getSizingRestrictions(url, element);
47301
+ if (resizeDimensions) {
47302
+ // Apply 2x for retina displays
47303
+ resizeDimensions.height *= 2;
47304
+ resizeDimensions.width *= 2;
47305
+ addResizingParamsToUrl(resizeDimensions, url);
47306
+ }
47307
+ return {
47308
+ url: url.href,
47309
+ };
47310
+ };
47311
+ var getVideoAttachmentConfiguration = function (attachment, element, shouldGenerateVideoThumbnail) {
47312
+ var thumbUrl = undefined;
47313
+ if (attachment.thumb_url && shouldGenerateVideoThumbnail) {
47314
+ var url = new URL(attachment.thumb_url);
47315
+ var resizeDimensions = getSizingRestrictions(url, element);
47316
+ if (resizeDimensions) {
47317
+ // Apply 2x for retina displays
47318
+ resizeDimensions.height *= 2;
47319
+ resizeDimensions.width *= 2;
47320
+ addResizingParamsToUrl(resizeDimensions, url);
47321
+ }
47322
+ thumbUrl = url.href;
47323
+ }
47324
+ return {
47325
+ thumbUrl: thumbUrl,
47326
+ url: attachment.asset_url || '',
47327
+ };
47328
+ };
47329
+ var getSizingRestrictions = function (url, htmlElement) {
47330
+ var urlParams = url.searchParams;
47331
+ var originalHeight = Number(urlParams.get('oh')) || 1;
47332
+ var originalWidth = Number(urlParams.get('ow')) || 1;
47333
+ var cssSizeRestriction = getCSSSizeRestrictions(htmlElement);
47334
+ var resizeDimensions;
47335
+ if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) && cssSizeRestriction.maxWidth) {
47336
+ resizeDimensions = getResizeDimensions(originalHeight, originalWidth,
47337
+ /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
47338
+ cssSizeRestriction.maxHeight || cssSizeRestriction.height, cssSizeRestriction.maxWidth);
47339
+ }
47340
+ else {
47341
+ resizeDimensions = undefined;
47342
+ }
47343
+ return resizeDimensions;
47344
+ };
47345
+ var getResizeDimensions = function (originalHeight, originalWidth, maxHeight, maxWidth) { return ({
47346
+ height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
47347
+ width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
47348
+ }); };
47349
+ var getCSSSizeRestrictions = function (htmlElement) {
47350
+ var computedStylesheet = getComputedStyle(htmlElement);
47351
+ var height = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
47352
+ var maxHeight = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
47353
+ var maxWidth = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
47354
+ if (!((height || maxHeight) && maxWidth)) {
47355
+ 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");
47356
+ }
47357
+ return { height: height, maxHeight: maxHeight, maxWidth: maxWidth };
47358
+ };
47359
+ var getValueRepresentationOfCSSProperty = function (property) {
47360
+ if (!property.endsWith('px')) {
47361
+ return undefined;
47362
+ }
47363
+ var number = parseFloat(property);
47364
+ return isNaN(number) ? undefined : number;
47365
+ };
47366
+ var addResizingParamsToUrl = function (resizeDimensions, url) {
47367
+ url.searchParams.set('h', resizeDimensions.height.toString());
47368
+ url.searchParams.set('w', resizeDimensions.width.toString());
47369
+ };
47370
+
47240
47371
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=streamChat.logChatPromiseExecution;window.StreamChat.Channel=Channel$1;window.ICAL=window.ICAL||{};var UnMemoizedChannel = function (props) {
47241
47372
  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
47373
  var _c = useChatContext('Channel'), contextChannel = _c.channel, channelsQueryState = _c.channelsQueryState, customClasses = _c.customClasses, theme = _c.theme;
@@ -47723,7 +47854,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
47723
47854
  var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
47724
47855
  var editMessage = useEditMessageHandler(doUpdateMessageRequest);
47725
47856
  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 }));
47857
+ 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
47858
  var channelActionContextValue = React.useMemo(function () { return ({
47728
47859
  addNotification: addNotification,
47729
47860
  closeThread: closeThread,
@@ -48708,6 +48839,8 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48708
48839
 
48709
48840
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
48710
48841
 
48842
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
48843
+
48711
48844
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var DefaultSearchEmpty = function () {
48712
48845
  var t = useTranslationContext('SearchResults').t;
48713
48846
  return (React__default["default"].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' },
@@ -48983,7 +49116,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
48983
49116
 
48984
49117
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
48985
49118
 
48986
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version = '10.1.1';
49119
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version = '10.2.0';
48987
49120
 
48988
49121
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChat = function (_a) {
48989
49122
  var _b, _c;
@@ -49201,6 +49334,8 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49201
49334
 
49202
49335
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
49203
49336
 
49337
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
49338
+
49204
49339
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedDateSeparator = function (props) {
49205
49340
  var messageCreatedAt = props.date, formatDate = props.formatDate, _a = props.position, position = _a === void 0 ? 'right' : _a, unread = props.unread;
49206
49341
  var _b = useTranslationContext('DateSeparator'), t = _b.t, tDateTimeParser = _b.tDateTimeParser;
@@ -49575,7 +49710,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49575
49710
  var t = useTranslationContext('usePinHandler').t;
49576
49711
  var canPin = !!channelCapabilities['pin-message'];
49577
49712
  var handlePin = function (event) { return __awaiter$3(void 0, void 0, void 0, function () {
49578
- var optimisticMessage, messageResponse, errorMessage, optimisticMessage, messageResponse, errorMessage;
49713
+ var optimisticMessage, errorMessage, optimisticMessage, errorMessage;
49579
49714
  return __generator$3(this, function (_a) {
49580
49715
  switch (_a.label) {
49581
49716
  case 0:
@@ -49590,8 +49725,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49590
49725
  updateMessage(optimisticMessage);
49591
49726
  return [4 /*yield*/, client.pinMessage(message)];
49592
49727
  case 2:
49593
- messageResponse = _a.sent();
49594
- updateMessage(messageResponse.message);
49728
+ _a.sent();
49595
49729
  return [3 /*break*/, 4];
49596
49730
  case 3:
49597
49731
  _a.sent();
@@ -49607,8 +49741,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
49607
49741
  updateMessage(optimisticMessage);
49608
49742
  return [4 /*yield*/, client.unpinMessage(message)];
49609
49743
  case 6:
49610
- messageResponse = _a.sent();
49611
- updateMessage(messageResponse.message);
49744
+ _a.sent();
49612
49745
  return [3 /*break*/, 8];
49613
49746
  case 7:
49614
49747
  _a.sent();
@@ -50060,7 +50193,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50060
50193
  };
50061
50194
 
50062
50195
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useMessageListElements = function (props) {
50063
- var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, onMessageLoadCaptured = props.onMessageLoadCaptured, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
50196
+ var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
50064
50197
  var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
50065
50198
  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;
50066
50199
  // get the readData, but only for messages submitted by the user themselves
@@ -50092,7 +50225,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50092
50225
  }
50093
50226
  var groupStyles = messageGroupStyles[message.id] || '';
50094
50227
  var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--".concat(groupStyles);
50095
- return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
50228
+ return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at },
50096
50229
  React__default["default"].createElement(Message, __assign$8({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
50097
50230
  });
50098
50231
  }, [
@@ -50100,7 +50233,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50100
50233
  internalMessageProps,
50101
50234
  lastReceivedId,
50102
50235
  messageGroupStyles,
50103
- onMessageLoadCaptured,
50104
50236
  readData,
50105
50237
  threadList,
50106
50238
  ]);
@@ -50219,19 +50351,9 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50219
50351
  setIsMessageListScrolledToBottom(true);
50220
50352
  }
50221
50353
  }, [updateScrollTop, closeToTop, closeToBottom, scrolledUpThreshold]);
50222
- var onMessageLoadCaptured = React.useCallback(function () {
50223
- /**
50224
- * A load event (emitted by e.g. an <img>) was captured on a message.
50225
- * In some cases, the loaded asset is larger than the placeholder, which means we have to scroll down.
50226
- */
50227
- if (closeToBottom.current) {
50228
- scrollToBottom();
50229
- }
50230
- }, [closeToTop, closeToBottom, scrollToBottom]);
50231
50354
  return {
50232
50355
  hasNewMessages: hasNewMessages,
50233
50356
  isMessageListScrolledToBottom: isMessageListScrolledToBottom,
50234
- onMessageLoadCaptured: onMessageLoadCaptured,
50235
50357
  onScroll: onScroll,
50236
50358
  scrollToBottom: scrollToBottom,
50237
50359
  wrapperRect: wrapperRect,
@@ -50361,7 +50483,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50361
50483
  messages: messages,
50362
50484
  scrolledUpThreshold: props.scrolledUpThreshold,
50363
50485
  suppressAutoscroll: suppressAutoscroll,
50364
- }), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onMessageLoadCaptured = _x.onMessageLoadCaptured, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
50486
+ }), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
50365
50487
  var _y = useEnrichedMessages({
50366
50488
  channel: channel,
50367
50489
  disableDateSeparator: disableDateSeparator,
@@ -50401,7 +50523,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
50401
50523
  unsafeHTML: unsafeHTML,
50402
50524
  },
50403
50525
  messageGroupStyles: messageGroupStyles,
50404
- onMessageLoadCaptured: onMessageLoadCaptured,
50405
50526
  read: read,
50406
50527
  returnAllReadData: returnAllReadData,
50407
50528
  threadList: threadList,
@@ -52054,7 +52175,6 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
52054
52175
  return Item;
52055
52176
  }, [
52056
52177
  customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage,
52057
- messageGroupStyles,
52058
52178
  numItemsPrepended,
52059
52179
  // processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
52060
52180
  processedMessages.length,
@@ -52196,9 +52316,13 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
52196
52316
  }, []);
52197
52317
  if (!thread)
52198
52318
  return null;
52199
- var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) || 'str-chat__thread-container str-chat__thread';
52319
+ var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
52320
+ clsx('str-chat__thread-container str-chat__thread', {
52321
+ 'str-chat__thread--full': fullWidth,
52322
+ 'str-chat__thread--virtualized': virtualized,
52323
+ });
52200
52324
  var head = (React__default["default"].createElement(ThreadHead$1, __assign$8({ key: thread.id, message: thread, Message: MessageUIComponent }, additionalParentMessageProps)));
52201
- return (React__default["default"].createElement("div", { className: "".concat(threadClass, " ").concat(fullWidth ? 'str-chat__thread--full' : '') },
52325
+ return (React__default["default"].createElement("div", { className: threadClass },
52202
52326
  React__default["default"].createElement(ThreadHeader$1, { closeThread: closeThread, thread: thread }),
52203
52327
  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))),
52204
52328
  React__default["default"].createElement(MessageInput, __assign$8({ focus: autoFocus, Input: ThreadInput, parent: thread, publishTypingEvent: false }, additionalMessageInputProps))));
@@ -68727,6 +68851,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
68727
68851
  exports.Attachment = Attachment;
68728
68852
  exports.AttachmentActions = AttachmentActions;
68729
68853
  exports.AttachmentActionsContainer = AttachmentActionsContainer;
68854
+ exports.AttachmentPreviewList = AttachmentPreviewList;
68730
68855
  exports.AttachmentWithinContainer = AttachmentWithinContainer;
68731
68856
  exports.Audio = Audio;
68732
68857
  exports.AudioContainer = AudioContainer;
@@ -68941,6 +69066,7 @@ var StreamChatReact = (function (exports, React, streamChat, ReactDOM) {
68941
69066
  exports.useChannelEditMessageHandler = useEditMessageHandler;
68942
69067
  exports.useChannelHiddenListener = useChannelHiddenListener;
68943
69068
  exports.useChannelMentionsHandler = useMentionsHandlers;
69069
+ exports.useChannelPreviewInfo = useChannelPreviewInfo;
68944
69070
  exports.useChannelStateContext = useChannelStateContext;
68945
69071
  exports.useChannelTruncatedListener = useChannelTruncatedListener;
68946
69072
  exports.useChannelUpdatedListener = useChannelUpdatedListener;