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.
- package/dist/browser.full-bundle.js +328 -202
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/AttachmentContainer.d.ts.map +1 -1
- package/dist/components/Attachment/AttachmentContainer.js +67 -15
- package/dist/components/Attachment/attachment-sizing.d.ts +9 -0
- package/dist/components/Attachment/attachment-sizing.d.ts.map +1 -0
- package/dist/components/Attachment/attachment-sizing.js +72 -0
- package/dist/components/Channel/Channel.d.ts +7 -1
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +2 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +5 -1
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +0 -2
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/hooks/index.d.ts +2 -0
- package/dist/components/ChannelPreview/hooks/index.d.ts.map +1 -0
- package/dist/components/ChannelPreview/hooks/index.js +1 -0
- package/dist/components/ChannelPreview/index.d.ts +1 -0
- package/dist/components/ChannelPreview/index.d.ts.map +1 -1
- package/dist/components/ChannelPreview/index.js +1 -0
- package/dist/components/Gallery/Gallery.d.ts +7 -2
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +16 -5
- package/dist/components/Gallery/Image.d.ts +4 -0
- package/dist/components/Gallery/Image.d.ts.map +1 -1
- package/dist/components/Gallery/Image.js +3 -3
- package/dist/components/LoadMore/LoadMorePaginator.d.ts +4 -1
- package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
- package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/usePinHandler.js +3 -5
- package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useFileUploads.js +1 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +2 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +2 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +1 -0
- package/dist/components/MessageInput/index.d.ts +2 -1
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +2 -1
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +1 -2
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +0 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts +0 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.js +2 -3
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +0 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.js +0 -10
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/Thread.js +7 -2
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -2
- package/dist/context/ChannelStateContext.d.ts +5 -2
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/css/index.css +1 -1
- package/dist/css/index.css.map +1 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.css.map +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/css/v2/index.layout.css.map +1 -1
- package/dist/index.cjs.js +324 -202
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/Attachment.scss +49 -20
- package/dist/scss/Audio.scss +1 -0
- package/dist/scss/Message.scss +44 -41
- package/dist/scss/MessageCommerce.scss +1 -1
- package/dist/scss/Thread.scss +39 -2
- package/dist/scss/VirtualMessage.scss +2 -6
- package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +33 -19
- package/dist/scss/v2/Message/Message-layout.scss +12 -0
- package/dist/scss/v2/Message/Message-theme.scss +20 -0
- package/dist/scss/v2/MessageList/MessageList-layout.scss +1 -4
- package/dist/scss/v2/MessageList/VirtualizedMessageList-layout.scss +21 -0
- package/dist/scss/v2/MessageList/VirtualizedMessageList-theme.scss +9 -0
- package/dist/scss/v2/Notification/NotificationList-theme.scss +2 -2
- package/dist/scss/v2/_utils.scss +8 -0
- package/dist/stories/attachment-sizing.stories.d.ts +2 -0
- package/dist/stories/attachment-sizing.stories.d.ts.map +1 -0
- package/dist/stories/attachment-sizing.stories.js +179 -0
- package/dist/stories/edit-message.stories.d.ts.map +1 -1
- package/dist/stories/edit-message.stories.js +0 -4
- package/dist/stories/pin-message.stories.d.ts +2 -0
- package/dist/stories/pin-message.stories.d.ts.map +1 -0
- package/dist/stories/pin-message.stories.js +98 -0
- package/dist/stories/utils.d.ts +1 -1
- package/dist/stories/utils.d.ts.map +1 -1
- package/dist/stories/utils.js +30 -19
- package/dist/types/types.d.ts +9 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/dist/components/MessageList/Center.d.ts +0 -3
- package/dist/components/MessageList/Center.d.ts.map +0 -1
- package/dist/components/MessageList/Center.js +0 -6
package/dist/index.cjs.js
CHANGED
|
@@ -1345,7 +1345,7 @@ var ModalGallery = function (props) {
|
|
|
1345
1345
|
};
|
|
1346
1346
|
|
|
1347
1347
|
var UnMemoizedGallery = function (props) {
|
|
1348
|
-
var images = props.images;
|
|
1348
|
+
var images = props.images, innerRefs = props.innerRefs;
|
|
1349
1349
|
var _a = React.useState(0), index = _a[0], setIndex = _a[1];
|
|
1350
1350
|
var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
|
|
1351
1351
|
var _c = useComponentContext('Gallery').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
|
|
@@ -1362,13 +1362,13 @@ var UnMemoizedGallery = function (props) {
|
|
|
1362
1362
|
}
|
|
1363
1363
|
};
|
|
1364
1364
|
var renderImages = images.slice(0, countImagesDisplayedInPreview).map(function (image, i) {
|
|
1365
|
-
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: {
|
|
1366
|
-
|
|
1367
|
-
|
|
1365
|
+
return i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (React__default["default"].createElement("button", __assign({ className: 'str-chat__gallery-placeholder', "data-testid": 'gallery-image-last', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); }, style: __assign({ backgroundImage: "url(".concat(images[lastImageIndexInPreview].previewUrl ||
|
|
1366
|
+
images[lastImageIndexInPreview].image_url ||
|
|
1367
|
+
images[lastImageIndexInPreview].thumb_url, ")") }, image.style) }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })),
|
|
1368
1368
|
React__default["default"].createElement("p", null, t('{{ imageCount }} more', {
|
|
1369
1369
|
imageCount: images.length - countImagesDisplayedInPreview,
|
|
1370
1370
|
})))) : (React__default["default"].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); } },
|
|
1371
|
-
React__default["default"].createElement("img", { alt: 'User uploaded content', src: image.image_url || image.thumb_url })));
|
|
1371
|
+
React__default["default"].createElement("img", __assign({ 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); } })))));
|
|
1372
1372
|
});
|
|
1373
1373
|
var className = clsx('str-chat__gallery', {
|
|
1374
1374
|
'str-chat__gallery--square': images.length > lastImageIndexInPreview,
|
|
@@ -1388,13 +1388,13 @@ var Gallery = React__default["default"].memo(UnMemoizedGallery);
|
|
|
1388
1388
|
* A simple component that displays an image.
|
|
1389
1389
|
*/
|
|
1390
1390
|
var ImageComponent = function (props) {
|
|
1391
|
-
var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url;
|
|
1391
|
+
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;
|
|
1392
1392
|
var _b = React.useState(false), modalIsOpen = _b[0], setModalIsOpen = _b[1];
|
|
1393
1393
|
var _c = useComponentContext('ImageComponent').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
|
|
1394
|
-
var imageSrc = sanitizeUrl.sanitizeUrl(image_url || thumb_url);
|
|
1394
|
+
var imageSrc = sanitizeUrl.sanitizeUrl(previewUrl || image_url || thumb_url);
|
|
1395
1395
|
var toggleModal = function () { return setModalIsOpen(function (modalIsOpen) { return !modalIsOpen; }); };
|
|
1396
1396
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
1397
|
-
React__default["default"].createElement("img", __assign({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, tabIndex: 0 }, dimensions)),
|
|
1397
|
+
React__default["default"].createElement("img", __assign({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, style: style, tabIndex: 0 }, dimensions, (innerRef && { ref: innerRef }))),
|
|
1398
1398
|
React__default["default"].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
|
|
1399
1399
|
React__default["default"].createElement(ModalGallery$1, { images: [props], index: 0 }))));
|
|
1400
1400
|
};
|
|
@@ -1713,7 +1713,7 @@ var AttachmentWithinContainer = function (_a) {
|
|
|
1713
1713
|
? 'actions'
|
|
1714
1714
|
: '';
|
|
1715
1715
|
}
|
|
1716
|
-
var classNames = clsx('str-chat__message-attachment', (_b = {},
|
|
1716
|
+
var classNames = clsx('str-chat__message-attachment str-chat__message-attachment-dynamic-size', (_b = {},
|
|
1717
1717
|
_b["str-chat__message-attachment--".concat(componentType)] = componentType,
|
|
1718
1718
|
_b["str-chat__message-attachment--".concat(attachment === null || attachment === void 0 ? void 0 : attachment.type)] = attachment === null || attachment === void 0 ? void 0 : attachment.type,
|
|
1719
1719
|
_b["str-chat__message-attachment--".concat(componentType, "--").concat(extra)] = componentType && extra,
|
|
@@ -1729,22 +1729,68 @@ var AttachmentActionsContainer = function (_a) {
|
|
|
1729
1729
|
return null;
|
|
1730
1730
|
return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler: actionHandler, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
|
|
1731
1731
|
};
|
|
1732
|
+
function getCssDimensionsVariables(url) {
|
|
1733
|
+
var _a;
|
|
1734
|
+
var cssVars = (_a = {},
|
|
1735
|
+
_a['--original-height'] = 1000000,
|
|
1736
|
+
_a['--original-width'] = 1000000,
|
|
1737
|
+
_a);
|
|
1738
|
+
if (url) {
|
|
1739
|
+
var urlParams = new URL(url).searchParams;
|
|
1740
|
+
var oh = Number(urlParams.get('oh'));
|
|
1741
|
+
var ow = Number(urlParams.get('ow'));
|
|
1742
|
+
var originalHeight = oh > 1 ? oh : 1000000;
|
|
1743
|
+
var originalWidth = ow > 1 ? ow : 1000000;
|
|
1744
|
+
cssVars['--original-width'] = originalWidth;
|
|
1745
|
+
cssVars['--original-height'] = originalHeight;
|
|
1746
|
+
}
|
|
1747
|
+
return cssVars;
|
|
1748
|
+
}
|
|
1732
1749
|
var GalleryContainer = function (_a) {
|
|
1733
1750
|
var attachment = _a.attachment, _b = _a.Gallery, Gallery$1 = _b === void 0 ? Gallery : _b;
|
|
1751
|
+
var imageElements = React.useRef([]);
|
|
1752
|
+
var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
|
|
1753
|
+
var _c = React.useState([]), attachmentConfigurations = _c[0], setAttachmentConfigurations = _c[1];
|
|
1754
|
+
React.useLayoutEffect(function () {
|
|
1755
|
+
if (imageElements.current &&
|
|
1756
|
+
imageElements.current.every(function (element) { return !!element; }) &&
|
|
1757
|
+
imageAttachmentSizeHandler) {
|
|
1758
|
+
var newConfigurations_1 = [];
|
|
1759
|
+
imageElements.current.forEach(function (element, i) {
|
|
1760
|
+
var config = imageAttachmentSizeHandler(attachment.images[i], element);
|
|
1761
|
+
newConfigurations_1.push(config);
|
|
1762
|
+
});
|
|
1763
|
+
setAttachmentConfigurations(newConfigurations_1);
|
|
1764
|
+
}
|
|
1765
|
+
}, [imageElements, imageAttachmentSizeHandler, attachment]);
|
|
1766
|
+
var images = attachment.images.map(function (image, i) {
|
|
1767
|
+
var _a, _b, _c;
|
|
1768
|
+
return (__assign(__assign({}, 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) || '') }));
|
|
1769
|
+
});
|
|
1734
1770
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: 'gallery' },
|
|
1735
|
-
React__default["default"].createElement(Gallery$1, { images:
|
|
1771
|
+
React__default["default"].createElement(Gallery$1, { images: images || [], innerRefs: imageElements, key: 'gallery' })));
|
|
1736
1772
|
};
|
|
1737
1773
|
var ImageContainer = function (props) {
|
|
1738
1774
|
var attachment = props.attachment, _a = props.Image, Image = _a === void 0 ? ImageComponent : _a;
|
|
1739
1775
|
var componentType = 'image';
|
|
1776
|
+
var imageElement = React.useRef(null);
|
|
1777
|
+
var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
|
|
1778
|
+
var _b = React.useState(undefined), attachmentConfiguration = _b[0], setAttachmentConfiguration = _b[1];
|
|
1779
|
+
React.useLayoutEffect(function () {
|
|
1780
|
+
if (imageElement.current && imageAttachmentSizeHandler) {
|
|
1781
|
+
var config = imageAttachmentSizeHandler(attachment, imageElement.current);
|
|
1782
|
+
setAttachmentConfiguration(config);
|
|
1783
|
+
}
|
|
1784
|
+
}, [imageElement, imageAttachmentSizeHandler, attachment]);
|
|
1785
|
+
var imageConfig = __assign(__assign({}, attachment), { previewUrl: (attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.url) || 'about:blank', style: getCssDimensionsVariables(attachment.image_url || attachment.thumb_url || '') });
|
|
1740
1786
|
if (attachment.actions && attachment.actions.length) {
|
|
1741
1787
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1742
1788
|
React__default["default"].createElement("div", { className: 'str-chat__attachment' },
|
|
1743
|
-
React__default["default"].createElement(Image, __assign({},
|
|
1789
|
+
React__default["default"].createElement(Image, __assign({}, imageConfig, { innerRef: imageElement })),
|
|
1744
1790
|
React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props)))));
|
|
1745
1791
|
}
|
|
1746
1792
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1747
|
-
React__default["default"].createElement(Image, __assign({},
|
|
1793
|
+
React__default["default"].createElement(Image, __assign({}, imageConfig, { innerRef: imageElement }))));
|
|
1748
1794
|
};
|
|
1749
1795
|
var CardContainer = function (props) {
|
|
1750
1796
|
var attachment = props.attachment, _a = props.Card, Card$1 = _a === void 0 ? Card : _a;
|
|
@@ -1775,16 +1821,21 @@ var MediaContainer = function (props) {
|
|
|
1775
1821
|
var _a;
|
|
1776
1822
|
var attachment = props.attachment, _b = props.Media, Media = _b === void 0 ? ReactPlayer__default["default"] : _b;
|
|
1777
1823
|
var componentType = 'media';
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1824
|
+
var _c = useChannelStateContext(), shouldGenerateVideoThumbnail = _c.shouldGenerateVideoThumbnail, videoAttachmentSizeHandler = _c.videoAttachmentSizeHandler;
|
|
1825
|
+
var videoElement = React.useRef(null);
|
|
1826
|
+
var _d = React.useState(), attachmentConfiguration = _d[0], setAttachmentConfiguration = _d[1];
|
|
1827
|
+
React.useLayoutEffect(function () {
|
|
1828
|
+
if (videoElement.current && videoAttachmentSizeHandler) {
|
|
1829
|
+
var config = videoAttachmentSizeHandler(attachment, videoElement.current, shouldGenerateVideoThumbnail);
|
|
1830
|
+
setAttachmentConfiguration(config);
|
|
1831
|
+
}
|
|
1832
|
+
}, [videoElement, videoAttachmentSizeHandler, attachment]);
|
|
1833
|
+
var content = (React__default["default"].createElement("div", { className: 'str-chat__player-wrapper', "data-testid": 'video-wrapper', ref: videoElement, style: getCssDimensionsVariables(attachment.thumb_url || '') },
|
|
1834
|
+
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%' })));
|
|
1835
|
+
return ((_a = attachment.actions) === null || _a === void 0 ? void 0 : _a.length) ? (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1836
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment str-chat__attachment-media' },
|
|
1837
|
+
content,
|
|
1838
|
+
React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props))))) : (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType }, content));
|
|
1788
1839
|
};
|
|
1789
1840
|
|
|
1790
1841
|
var CONTAINER_MAP = {
|
|
@@ -3961,7 +4012,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
|
|
|
3961
4012
|
|
|
3962
4013
|
var useCreateChannelStateContext = function (value) {
|
|
3963
4014
|
var _a;
|
|
3964
|
-
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;
|
|
4015
|
+
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;
|
|
3965
4016
|
var channelId = channel.cid;
|
|
3966
4017
|
var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
|
|
3967
4018
|
var membersLength = Object.keys(members || []).length;
|
|
@@ -4012,6 +4063,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4012
4063
|
hasMore: hasMore,
|
|
4013
4064
|
hasMoreNewer: hasMoreNewer,
|
|
4014
4065
|
highlightedMessageId: highlightedMessageId,
|
|
4066
|
+
imageAttachmentSizeHandler: imageAttachmentSizeHandler,
|
|
4015
4067
|
loading: loading,
|
|
4016
4068
|
loadingMore: loadingMore,
|
|
4017
4069
|
maxNumberOfFiles: maxNumberOfFiles,
|
|
@@ -4023,11 +4075,13 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4023
4075
|
pinnedMessages: pinnedMessages,
|
|
4024
4076
|
quotedMessage: quotedMessage,
|
|
4025
4077
|
read: read,
|
|
4078
|
+
shouldGenerateVideoThumbnail: shouldGenerateVideoThumbnail,
|
|
4026
4079
|
suppressAutoscroll: suppressAutoscroll,
|
|
4027
4080
|
thread: thread,
|
|
4028
4081
|
threadHasMore: threadHasMore,
|
|
4029
4082
|
threadLoadingMore: threadLoadingMore,
|
|
4030
4083
|
threadMessages: threadMessages,
|
|
4084
|
+
videoAttachmentSizeHandler: videoAttachmentSizeHandler,
|
|
4031
4085
|
watcher_count: watcher_count,
|
|
4032
4086
|
watcherCount: watcherCount,
|
|
4033
4087
|
watchers: watchers,
|
|
@@ -4047,6 +4101,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4047
4101
|
quotedMessage,
|
|
4048
4102
|
readUsersLength,
|
|
4049
4103
|
readUsersLastReads,
|
|
4104
|
+
shouldGenerateVideoThumbnail,
|
|
4050
4105
|
skipMessageDataMemoization,
|
|
4051
4106
|
suppressAutoscroll,
|
|
4052
4107
|
thread,
|
|
@@ -6832,6 +6887,159 @@ var CUSTOM_MESSAGE_TYPE = {
|
|
|
6832
6887
|
intro: 'channel.intro',
|
|
6833
6888
|
};
|
|
6834
6889
|
|
|
6890
|
+
var useFileState = function (file) {
|
|
6891
|
+
return React.useMemo(function () { return ({
|
|
6892
|
+
failed: file.state === 'failed',
|
|
6893
|
+
finished: file.state === 'finished',
|
|
6894
|
+
uploading: file.state === 'uploading',
|
|
6895
|
+
}); }, [file.state]);
|
|
6896
|
+
};
|
|
6897
|
+
|
|
6898
|
+
var EmojiIconLarge = function () {
|
|
6899
|
+
var t = useTranslationContext('EmojiIconLarge').t;
|
|
6900
|
+
return (React__default["default"].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6901
|
+
React__default["default"].createElement("title", null, t('Open emoji picker')),
|
|
6902
|
+
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
6903
|
+
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' }))));
|
|
6904
|
+
};
|
|
6905
|
+
var EmojiIconSmall = function () {
|
|
6906
|
+
var t = useTranslationContext('EmojiIconSmall').t;
|
|
6907
|
+
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6908
|
+
React__default["default"].createElement("title", null, t('Open emoji picker')),
|
|
6909
|
+
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
6910
|
+
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' }))));
|
|
6911
|
+
};
|
|
6912
|
+
// ThemingV2 icon
|
|
6913
|
+
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' },
|
|
6914
|
+
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
6915
|
+
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' })))); };
|
|
6916
|
+
var FileUploadIcon = function () {
|
|
6917
|
+
var t = useTranslationContext('FileUploadIcon').t;
|
|
6918
|
+
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6919
|
+
React__default["default"].createElement("title", null, t('Attach files')),
|
|
6920
|
+
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' })));
|
|
6921
|
+
};
|
|
6922
|
+
var FileUploadIconFlat = function () {
|
|
6923
|
+
var t = useTranslationContext('FileUploadIconFlat').t;
|
|
6924
|
+
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6925
|
+
React__default["default"].createElement("title", null, t('Attach files')),
|
|
6926
|
+
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' })));
|
|
6927
|
+
};
|
|
6928
|
+
var LoadingIndicatorIcon = function (_a) {
|
|
6929
|
+
var _b = _a.size, size = _b === void 0 ? 20 : _b;
|
|
6930
|
+
var id = React.useMemo(function () { return nanoid.nanoid(); }, []);
|
|
6931
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__loading-indicator' },
|
|
6932
|
+
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' },
|
|
6933
|
+
React__default["default"].createElement("defs", null,
|
|
6934
|
+
React__default["default"].createElement("linearGradient", { id: "".concat(id, "-linear-gradient"), x1: '50%', x2: '50%', y1: '0%', y2: '100%' },
|
|
6935
|
+
React__default["default"].createElement("stop", { offset: '0%', stopColor: '#FFF', stopOpacity: '0' }),
|
|
6936
|
+
React__default["default"].createElement("stop", { "data-testid": 'stop-color', offset: '100%', stopOpacity: '1' }))),
|
|
6937
|
+
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' }))));
|
|
6938
|
+
};
|
|
6939
|
+
// ThemingV2 icon
|
|
6940
|
+
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' },
|
|
6941
|
+
React__default["default"].createElement("g", { clipPath: 'url(#clip0_10878_5)' },
|
|
6942
|
+
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' })),
|
|
6943
|
+
React__default["default"].createElement("defs", null,
|
|
6944
|
+
React__default["default"].createElement("clipPath", { id: 'clip0_10878_5' },
|
|
6945
|
+
React__default["default"].createElement("rect", { fill: 'white', height: '24', width: '24' }))))); };
|
|
6946
|
+
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' },
|
|
6947
|
+
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' }))); };
|
|
6948
|
+
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' },
|
|
6949
|
+
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' }))); };
|
|
6950
|
+
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' },
|
|
6951
|
+
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' }))); };
|
|
6952
|
+
var SendIconV1 = function () {
|
|
6953
|
+
var t = useTranslationContext('SendButton').t;
|
|
6954
|
+
return (React__default["default"].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6955
|
+
React__default["default"].createElement("title", null, t('Send')),
|
|
6956
|
+
React__default["default"].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' })));
|
|
6957
|
+
};
|
|
6958
|
+
var SendIconV2 = function () {
|
|
6959
|
+
var t = useTranslationContext('SendButton').t;
|
|
6960
|
+
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' },
|
|
6961
|
+
React__default["default"].createElement("title", null, t('Send')),
|
|
6962
|
+
React__default["default"].createElement("path", { d: 'M4.00952 22L24 12L4.00952 2L4 9.77778L18.2857 12L4 14.2222L4.00952 22Z', fill: 'black' })));
|
|
6963
|
+
};
|
|
6964
|
+
var SendButton = function (_a) {
|
|
6965
|
+
var sendMessage = _a.sendMessage, rest = __rest(_a, ["sendMessage"]);
|
|
6966
|
+
var themeVersion = useChatContext('SendButton').themeVersion;
|
|
6967
|
+
return (React__default["default"].createElement("button", __assign({ "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)));
|
|
6968
|
+
};
|
|
6969
|
+
|
|
6970
|
+
var AttachmentPreviewList = function () {
|
|
6971
|
+
var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
|
|
6972
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-list' },
|
|
6973
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
|
|
6974
|
+
imageOrder.map(function (id) { return (React__default["default"].createElement(ImagePreviewItem, { id: id, key: id })); }),
|
|
6975
|
+
fileOrder.map(function (id) { return (React__default["default"].createElement(FilePreviewItem, { id: id, key: id })); }))));
|
|
6976
|
+
};
|
|
6977
|
+
var ImagePreviewItem = function (_a) {
|
|
6978
|
+
var _b;
|
|
6979
|
+
var id = _a.id;
|
|
6980
|
+
var _c = useMessageInputContext('ImagePreviewItem'), imageUploads = _c.imageUploads, removeImage = _c.removeImage, uploadImage = _c.uploadImage;
|
|
6981
|
+
var handleRemove = React.useCallback(function (e) {
|
|
6982
|
+
e.stopPropagation();
|
|
6983
|
+
removeImage(id);
|
|
6984
|
+
}, [removeImage, id]);
|
|
6985
|
+
var handleRetry = React.useCallback(function () { return uploadImage(id); }, [uploadImage, id]);
|
|
6986
|
+
var image = imageUploads[id];
|
|
6987
|
+
var state = useFileState(image);
|
|
6988
|
+
// do not display scraped attachments
|
|
6989
|
+
if (!image || image.og_scrape_url)
|
|
6990
|
+
return null;
|
|
6991
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image', "data-testid": 'attachment-preview-image' },
|
|
6992
|
+
React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'image-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
|
|
6993
|
+
React__default["default"].createElement(CloseIcon$1, null)),
|
|
6994
|
+
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 },
|
|
6995
|
+
React__default["default"].createElement(RetryIcon, null))),
|
|
6996
|
+
state.uploading && (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image-loading' },
|
|
6997
|
+
React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))),
|
|
6998
|
+
(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 }))));
|
|
6999
|
+
};
|
|
7000
|
+
var FilePreviewItem = function (_a) {
|
|
7001
|
+
var id = _a.id;
|
|
7002
|
+
var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
|
|
7003
|
+
var handleRemove = React.useCallback(function (e) {
|
|
7004
|
+
e.stopPropagation();
|
|
7005
|
+
removeFile(id);
|
|
7006
|
+
}, [removeFile, id]);
|
|
7007
|
+
var handleRetry = React.useCallback(function () { return uploadFile(id); }, [uploadFile, id]);
|
|
7008
|
+
var file = fileUploads[id];
|
|
7009
|
+
var state = useFileState(file);
|
|
7010
|
+
if (!file)
|
|
7011
|
+
return null;
|
|
7012
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
|
|
7013
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
|
|
7014
|
+
React__default["default"].createElement(reactFileUtils.FileIcon, { filename: file.file.name, mimeType: file.file.type, version: '2' })),
|
|
7015
|
+
React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
|
|
7016
|
+
React__default["default"].createElement(CloseIcon$1, null)),
|
|
7017
|
+
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 },
|
|
7018
|
+
React__default["default"].createElement(RetryIcon, null))),
|
|
7019
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-end' },
|
|
7020
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-name' }, file.file.name),
|
|
7021
|
+
state.finished && (React__default["default"].createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: file.url, rel: 'noreferrer', target: '_blank' },
|
|
7022
|
+
React__default["default"].createElement(DownloadIcon, null))),
|
|
7023
|
+
state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
|
|
7024
|
+
};
|
|
7025
|
+
|
|
7026
|
+
var CooldownTimer = function (_a) {
|
|
7027
|
+
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
7028
|
+
var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
7029
|
+
React.useEffect(function () {
|
|
7030
|
+
var countdownInterval = setInterval(function () {
|
|
7031
|
+
if (seconds > 0) {
|
|
7032
|
+
setSeconds(seconds - 1);
|
|
7033
|
+
}
|
|
7034
|
+
else {
|
|
7035
|
+
setCooldownRemaining(0);
|
|
7036
|
+
}
|
|
7037
|
+
}, 1000);
|
|
7038
|
+
return function () { return clearInterval(countdownInterval); };
|
|
7039
|
+
});
|
|
7040
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
7041
|
+
};
|
|
7042
|
+
|
|
6835
7043
|
var useCommandTrigger = function () {
|
|
6836
7044
|
var themeVersion = useChatContext('useCommandTrigger').themeVersion;
|
|
6837
7045
|
var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
|
|
@@ -7236,78 +7444,6 @@ var EmojiPicker = function (_a) {
|
|
|
7236
7444
|
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 }))));
|
|
7237
7445
|
};
|
|
7238
7446
|
|
|
7239
|
-
var EmojiIconLarge = function () {
|
|
7240
|
-
var t = useTranslationContext('EmojiIconLarge').t;
|
|
7241
|
-
return (React__default["default"].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
|
|
7242
|
-
React__default["default"].createElement("title", null, t('Open emoji picker')),
|
|
7243
|
-
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
7244
|
-
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' }))));
|
|
7245
|
-
};
|
|
7246
|
-
var EmojiIconSmall = function () {
|
|
7247
|
-
var t = useTranslationContext('EmojiIconSmall').t;
|
|
7248
|
-
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
7249
|
-
React__default["default"].createElement("title", null, t('Open emoji picker')),
|
|
7250
|
-
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
7251
|
-
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' }))));
|
|
7252
|
-
};
|
|
7253
|
-
// ThemingV2 icon
|
|
7254
|
-
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' },
|
|
7255
|
-
React__default["default"].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
|
|
7256
|
-
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' })))); };
|
|
7257
|
-
var FileUploadIcon = function () {
|
|
7258
|
-
var t = useTranslationContext('FileUploadIcon').t;
|
|
7259
|
-
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
7260
|
-
React__default["default"].createElement("title", null, t('Attach files')),
|
|
7261
|
-
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' })));
|
|
7262
|
-
};
|
|
7263
|
-
var FileUploadIconFlat = function () {
|
|
7264
|
-
var t = useTranslationContext('FileUploadIconFlat').t;
|
|
7265
|
-
return (React__default["default"].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
7266
|
-
React__default["default"].createElement("title", null, t('Attach files')),
|
|
7267
|
-
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' })));
|
|
7268
|
-
};
|
|
7269
|
-
var LoadingIndicatorIcon = function (_a) {
|
|
7270
|
-
var _b = _a.size, size = _b === void 0 ? 20 : _b;
|
|
7271
|
-
var id = React.useMemo(function () { return nanoid.nanoid(); }, []);
|
|
7272
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__loading-indicator' },
|
|
7273
|
-
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' },
|
|
7274
|
-
React__default["default"].createElement("defs", null,
|
|
7275
|
-
React__default["default"].createElement("linearGradient", { id: "".concat(id, "-linear-gradient"), x1: '50%', x2: '50%', y1: '0%', y2: '100%' },
|
|
7276
|
-
React__default["default"].createElement("stop", { offset: '0%', stopColor: '#FFF', stopOpacity: '0' }),
|
|
7277
|
-
React__default["default"].createElement("stop", { "data-testid": 'stop-color', offset: '100%', stopOpacity: '1' }))),
|
|
7278
|
-
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' }))));
|
|
7279
|
-
};
|
|
7280
|
-
// ThemingV2 icon
|
|
7281
|
-
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' },
|
|
7282
|
-
React__default["default"].createElement("g", { clipPath: 'url(#clip0_10878_5)' },
|
|
7283
|
-
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' })),
|
|
7284
|
-
React__default["default"].createElement("defs", null,
|
|
7285
|
-
React__default["default"].createElement("clipPath", { id: 'clip0_10878_5' },
|
|
7286
|
-
React__default["default"].createElement("rect", { fill: 'white', height: '24', width: '24' }))))); };
|
|
7287
|
-
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' },
|
|
7288
|
-
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' }))); };
|
|
7289
|
-
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' },
|
|
7290
|
-
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' }))); };
|
|
7291
|
-
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' },
|
|
7292
|
-
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' }))); };
|
|
7293
|
-
var SendIconV1 = function () {
|
|
7294
|
-
var t = useTranslationContext('SendButton').t;
|
|
7295
|
-
return (React__default["default"].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
7296
|
-
React__default["default"].createElement("title", null, t('Send')),
|
|
7297
|
-
React__default["default"].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' })));
|
|
7298
|
-
};
|
|
7299
|
-
var SendIconV2 = function () {
|
|
7300
|
-
var t = useTranslationContext('SendButton').t;
|
|
7301
|
-
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' },
|
|
7302
|
-
React__default["default"].createElement("title", null, t('Send')),
|
|
7303
|
-
React__default["default"].createElement("path", { d: 'M4.00952 22L24 12L4.00952 2L4 9.77778L18.2857 12L4 14.2222L4.00952 22Z', fill: 'black' })));
|
|
7304
|
-
};
|
|
7305
|
-
var SendButton = function (_a) {
|
|
7306
|
-
var sendMessage = _a.sendMessage, rest = __rest(_a, ["sendMessage"]);
|
|
7307
|
-
var themeVersion = useChatContext('SendButton').themeVersion;
|
|
7308
|
-
return (React__default["default"].createElement("button", __assign({ "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)));
|
|
7309
|
-
};
|
|
7310
|
-
|
|
7311
7447
|
/**
|
|
7312
7448
|
* @deprecated This component has been deprecated in favor of `AttachmentPreviewList` as this component
|
|
7313
7449
|
* utilises outdated components from the package [`react-file-utils`](https://github.com/GetStream/react-file-utils)
|
|
@@ -9109,87 +9245,6 @@ var QuotedMessagePreview = function (_a) {
|
|
|
9109
9245
|
themeVersion === '1' && React__default["default"].createElement(React__default["default"].Fragment, null, quotedMessageText))))));
|
|
9110
9246
|
};
|
|
9111
9247
|
|
|
9112
|
-
var useFileState = function (file) {
|
|
9113
|
-
return React.useMemo(function () { return ({
|
|
9114
|
-
failed: file.state === 'failed',
|
|
9115
|
-
finished: file.state === 'finished',
|
|
9116
|
-
uploading: file.state === 'uploading',
|
|
9117
|
-
}); }, [file.state]);
|
|
9118
|
-
};
|
|
9119
|
-
|
|
9120
|
-
var AttachmentPreviewList = function () {
|
|
9121
|
-
var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
|
|
9122
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-list' },
|
|
9123
|
-
React__default["default"].createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
|
|
9124
|
-
imageOrder.map(function (id) { return (React__default["default"].createElement(ImagePreviewItem, { id: id, key: id })); }),
|
|
9125
|
-
fileOrder.map(function (id) { return (React__default["default"].createElement(FilePreviewItem, { id: id, key: id })); }))));
|
|
9126
|
-
};
|
|
9127
|
-
var ImagePreviewItem = function (_a) {
|
|
9128
|
-
var _b;
|
|
9129
|
-
var id = _a.id;
|
|
9130
|
-
var _c = useMessageInputContext('ImagePreviewItem'), imageUploads = _c.imageUploads, removeImage = _c.removeImage, uploadImage = _c.uploadImage;
|
|
9131
|
-
var handleRemove = React.useCallback(function (e) {
|
|
9132
|
-
e.stopPropagation();
|
|
9133
|
-
removeImage(id);
|
|
9134
|
-
}, [removeImage, id]);
|
|
9135
|
-
var handleRetry = React.useCallback(function () { return uploadImage(id); }, [uploadImage, id]);
|
|
9136
|
-
var image = imageUploads[id];
|
|
9137
|
-
var state = useFileState(image);
|
|
9138
|
-
// do not display scraped attachments
|
|
9139
|
-
if (!image || image.og_scrape_url)
|
|
9140
|
-
return null;
|
|
9141
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image', "data-testid": 'attachment-preview-image' },
|
|
9142
|
-
React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'image-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
|
|
9143
|
-
React__default["default"].createElement(CloseIcon$1, null)),
|
|
9144
|
-
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 },
|
|
9145
|
-
React__default["default"].createElement(RetryIcon, null))),
|
|
9146
|
-
state.uploading && (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image-loading' },
|
|
9147
|
-
React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))),
|
|
9148
|
-
(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 }))));
|
|
9149
|
-
};
|
|
9150
|
-
var FilePreviewItem = function (_a) {
|
|
9151
|
-
var id = _a.id;
|
|
9152
|
-
var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
|
|
9153
|
-
var handleRemove = React.useCallback(function (e) {
|
|
9154
|
-
e.stopPropagation();
|
|
9155
|
-
removeFile(id);
|
|
9156
|
-
}, [removeFile, id]);
|
|
9157
|
-
var handleRetry = React.useCallback(function () { return uploadFile(id); }, [uploadFile, id]);
|
|
9158
|
-
var file = fileUploads[id];
|
|
9159
|
-
var state = useFileState(file);
|
|
9160
|
-
if (!file)
|
|
9161
|
-
return null;
|
|
9162
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
|
|
9163
|
-
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
|
|
9164
|
-
React__default["default"].createElement(reactFileUtils.FileIcon, { filename: file.file.name, mimeType: file.file.type, version: '2' })),
|
|
9165
|
-
React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
|
|
9166
|
-
React__default["default"].createElement(CloseIcon$1, null)),
|
|
9167
|
-
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 },
|
|
9168
|
-
React__default["default"].createElement(RetryIcon, null))),
|
|
9169
|
-
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-end' },
|
|
9170
|
-
React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-file-name' }, file.file.name),
|
|
9171
|
-
state.finished && (React__default["default"].createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: file.url, rel: 'noreferrer', target: '_blank' },
|
|
9172
|
-
React__default["default"].createElement(DownloadIcon, null))),
|
|
9173
|
-
state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
|
|
9174
|
-
};
|
|
9175
|
-
|
|
9176
|
-
var CooldownTimer = function (_a) {
|
|
9177
|
-
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
9178
|
-
var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
9179
|
-
React.useEffect(function () {
|
|
9180
|
-
var countdownInterval = setInterval(function () {
|
|
9181
|
-
if (seconds > 0) {
|
|
9182
|
-
setSeconds(seconds - 1);
|
|
9183
|
-
}
|
|
9184
|
-
else {
|
|
9185
|
-
setCooldownRemaining(0);
|
|
9186
|
-
}
|
|
9187
|
-
}, 1000);
|
|
9188
|
-
return function () { return clearInterval(countdownInterval); };
|
|
9189
|
-
});
|
|
9190
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
9191
|
-
};
|
|
9192
|
-
|
|
9193
9248
|
var MessageInputFlat = function () {
|
|
9194
9249
|
var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
|
|
9195
9250
|
var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
|
|
@@ -9552,6 +9607,7 @@ var useFileUploads = function (props, state, dispatch) {
|
|
|
9552
9607
|
dispatch({
|
|
9553
9608
|
id: id,
|
|
9554
9609
|
state: 'finished',
|
|
9610
|
+
thumb_url: response.thumb_url,
|
|
9555
9611
|
type: 'setFileUpload',
|
|
9556
9612
|
url: response.file,
|
|
9557
9613
|
});
|
|
@@ -9816,6 +9872,7 @@ var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
|
|
|
9816
9872
|
asset_url: upload.url,
|
|
9817
9873
|
file_size: upload.file.size,
|
|
9818
9874
|
mime_type: upload.file.type,
|
|
9875
|
+
thumb_url: upload.thumb_url,
|
|
9819
9876
|
title: upload.file.name,
|
|
9820
9877
|
type: getAttachmentTypeFromMime(upload.file.type || ''),
|
|
9821
9878
|
}); });
|
|
@@ -10002,7 +10059,7 @@ var initState = function (message) {
|
|
|
10002
10059
|
var type = _a.type;
|
|
10003
10060
|
return type === 'file';
|
|
10004
10061
|
}).reduce(function (acc, _a) {
|
|
10005
|
-
var asset_url = _a.asset_url, file_size = _a.file_size, mime_type = _a.mime_type, _b = _a.title, title = _b === void 0 ? '' : _b;
|
|
10062
|
+
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;
|
|
10006
10063
|
var id = nanoid.nanoid();
|
|
10007
10064
|
acc[id] = {
|
|
10008
10065
|
file: {
|
|
@@ -10012,6 +10069,7 @@ var initState = function (message) {
|
|
|
10012
10069
|
},
|
|
10013
10070
|
id: id,
|
|
10014
10071
|
state: 'finished',
|
|
10072
|
+
thumb_url: thumb_url,
|
|
10015
10073
|
url: asset_url,
|
|
10016
10074
|
};
|
|
10017
10075
|
return acc;
|
|
@@ -10916,6 +10974,79 @@ var useChannelContainerClasses = function (_a) {
|
|
|
10916
10974
|
};
|
|
10917
10975
|
};
|
|
10918
10976
|
|
|
10977
|
+
var getImageAttachmentConfiguration = function (attachment, element) {
|
|
10978
|
+
var url = new URL((attachment.image_url || attachment.thumb_url || ''));
|
|
10979
|
+
var resizeDimensions = getSizingRestrictions(url, element);
|
|
10980
|
+
if (resizeDimensions) {
|
|
10981
|
+
// Apply 2x for retina displays
|
|
10982
|
+
resizeDimensions.height *= 2;
|
|
10983
|
+
resizeDimensions.width *= 2;
|
|
10984
|
+
addResizingParamsToUrl(resizeDimensions, url);
|
|
10985
|
+
}
|
|
10986
|
+
return {
|
|
10987
|
+
url: url.href,
|
|
10988
|
+
};
|
|
10989
|
+
};
|
|
10990
|
+
var getVideoAttachmentConfiguration = function (attachment, element, shouldGenerateVideoThumbnail) {
|
|
10991
|
+
var thumbUrl = undefined;
|
|
10992
|
+
if (attachment.thumb_url && shouldGenerateVideoThumbnail) {
|
|
10993
|
+
var url = new URL(attachment.thumb_url);
|
|
10994
|
+
var resizeDimensions = getSizingRestrictions(url, element);
|
|
10995
|
+
if (resizeDimensions) {
|
|
10996
|
+
// Apply 2x for retina displays
|
|
10997
|
+
resizeDimensions.height *= 2;
|
|
10998
|
+
resizeDimensions.width *= 2;
|
|
10999
|
+
addResizingParamsToUrl(resizeDimensions, url);
|
|
11000
|
+
}
|
|
11001
|
+
thumbUrl = url.href;
|
|
11002
|
+
}
|
|
11003
|
+
return {
|
|
11004
|
+
thumbUrl: thumbUrl,
|
|
11005
|
+
url: attachment.asset_url || '',
|
|
11006
|
+
};
|
|
11007
|
+
};
|
|
11008
|
+
var getSizingRestrictions = function (url, htmlElement) {
|
|
11009
|
+
var urlParams = url.searchParams;
|
|
11010
|
+
var originalHeight = Number(urlParams.get('oh')) || 1;
|
|
11011
|
+
var originalWidth = Number(urlParams.get('ow')) || 1;
|
|
11012
|
+
var cssSizeRestriction = getCSSSizeRestrictions(htmlElement);
|
|
11013
|
+
var resizeDimensions;
|
|
11014
|
+
if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) && cssSizeRestriction.maxWidth) {
|
|
11015
|
+
resizeDimensions = getResizeDimensions(originalHeight, originalWidth,
|
|
11016
|
+
/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
|
|
11017
|
+
cssSizeRestriction.maxHeight || cssSizeRestriction.height, cssSizeRestriction.maxWidth);
|
|
11018
|
+
}
|
|
11019
|
+
else {
|
|
11020
|
+
resizeDimensions = undefined;
|
|
11021
|
+
}
|
|
11022
|
+
return resizeDimensions;
|
|
11023
|
+
};
|
|
11024
|
+
var getResizeDimensions = function (originalHeight, originalWidth, maxHeight, maxWidth) { return ({
|
|
11025
|
+
height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
|
|
11026
|
+
width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
|
|
11027
|
+
}); };
|
|
11028
|
+
var getCSSSizeRestrictions = function (htmlElement) {
|
|
11029
|
+
var computedStylesheet = getComputedStyle(htmlElement);
|
|
11030
|
+
var height = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
|
|
11031
|
+
var maxHeight = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
|
|
11032
|
+
var maxWidth = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
|
|
11033
|
+
if (!((height || maxHeight) && maxWidth)) {
|
|
11034
|
+
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");
|
|
11035
|
+
}
|
|
11036
|
+
return { height: height, maxHeight: maxHeight, maxWidth: maxWidth };
|
|
11037
|
+
};
|
|
11038
|
+
var getValueRepresentationOfCSSProperty = function (property) {
|
|
11039
|
+
if (!property.endsWith('px')) {
|
|
11040
|
+
return undefined;
|
|
11041
|
+
}
|
|
11042
|
+
var number = parseFloat(property);
|
|
11043
|
+
return isNaN(number) ? undefined : number;
|
|
11044
|
+
};
|
|
11045
|
+
var addResizingParamsToUrl = function (resizeDimensions, url) {
|
|
11046
|
+
url.searchParams.set('h', resizeDimensions.height.toString());
|
|
11047
|
+
url.searchParams.set('w', resizeDimensions.width.toString());
|
|
11048
|
+
};
|
|
11049
|
+
|
|
10919
11050
|
var UnMemoizedChannel = function (props) {
|
|
10920
11051
|
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;
|
|
10921
11052
|
var _c = useChatContext('Channel'), contextChannel = _c.channel, channelsQueryState = _c.channelsQueryState, customClasses = _c.customClasses, theme = _c.theme;
|
|
@@ -11402,7 +11533,7 @@ var ChannelInner = function (props) {
|
|
|
11402
11533
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
11403
11534
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
11404
11535
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
11405
|
-
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, 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 }));
|
|
11536
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, 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 }));
|
|
11406
11537
|
var channelActionContextValue = React.useMemo(function () { return ({
|
|
11407
11538
|
addNotification: addNotification,
|
|
11408
11539
|
closeThread: closeThread,
|
|
@@ -12648,7 +12779,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12648
12779
|
*/
|
|
12649
12780
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
12650
12781
|
|
|
12651
|
-
var version = '10.
|
|
12782
|
+
var version = '10.2.0';
|
|
12652
12783
|
|
|
12653
12784
|
var useChat = function (_a) {
|
|
12654
12785
|
var _b, _c;
|
|
@@ -13224,7 +13355,7 @@ notifications) {
|
|
|
13224
13355
|
var t = useTranslationContext('usePinHandler').t;
|
|
13225
13356
|
var canPin = !!channelCapabilities['pin-message'];
|
|
13226
13357
|
var handlePin = function (event) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
13227
|
-
var optimisticMessage,
|
|
13358
|
+
var optimisticMessage, errorMessage, optimisticMessage, errorMessage;
|
|
13228
13359
|
return __generator$1(this, function (_a) {
|
|
13229
13360
|
switch (_a.label) {
|
|
13230
13361
|
case 0:
|
|
@@ -13239,8 +13370,7 @@ notifications) {
|
|
|
13239
13370
|
updateMessage(optimisticMessage);
|
|
13240
13371
|
return [4 /*yield*/, client.pinMessage(message)];
|
|
13241
13372
|
case 2:
|
|
13242
|
-
|
|
13243
|
-
updateMessage(messageResponse.message);
|
|
13373
|
+
_a.sent();
|
|
13244
13374
|
return [3 /*break*/, 4];
|
|
13245
13375
|
case 3:
|
|
13246
13376
|
_a.sent();
|
|
@@ -13256,8 +13386,7 @@ notifications) {
|
|
|
13256
13386
|
updateMessage(optimisticMessage);
|
|
13257
13387
|
return [4 /*yield*/, client.unpinMessage(message)];
|
|
13258
13388
|
case 6:
|
|
13259
|
-
|
|
13260
|
-
updateMessage(messageResponse.message);
|
|
13389
|
+
_a.sent();
|
|
13261
13390
|
return [3 /*break*/, 8];
|
|
13262
13391
|
case 7:
|
|
13263
13392
|
_a.sent();
|
|
@@ -13703,7 +13832,7 @@ var useLastReadData = function (props) {
|
|
|
13703
13832
|
};
|
|
13704
13833
|
|
|
13705
13834
|
var useMessageListElements = function (props) {
|
|
13706
|
-
var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles,
|
|
13835
|
+
var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
|
|
13707
13836
|
var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
|
|
13708
13837
|
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;
|
|
13709
13838
|
// get the readData, but only for messages submitted by the user themselves
|
|
@@ -13735,7 +13864,7 @@ var useMessageListElements = function (props) {
|
|
|
13735
13864
|
}
|
|
13736
13865
|
var groupStyles = messageGroupStyles[message.id] || '';
|
|
13737
13866
|
var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--".concat(groupStyles);
|
|
13738
|
-
return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at
|
|
13867
|
+
return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at },
|
|
13739
13868
|
React__default["default"].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
|
|
13740
13869
|
});
|
|
13741
13870
|
}, [
|
|
@@ -13743,7 +13872,6 @@ var useMessageListElements = function (props) {
|
|
|
13743
13872
|
internalMessageProps,
|
|
13744
13873
|
lastReceivedId,
|
|
13745
13874
|
messageGroupStyles,
|
|
13746
|
-
onMessageLoadCaptured,
|
|
13747
13875
|
readData,
|
|
13748
13876
|
threadList,
|
|
13749
13877
|
]);
|
|
@@ -13862,19 +13990,9 @@ var useScrollLocationLogic = function (params) {
|
|
|
13862
13990
|
setIsMessageListScrolledToBottom(true);
|
|
13863
13991
|
}
|
|
13864
13992
|
}, [updateScrollTop, closeToTop, closeToBottom, scrolledUpThreshold]);
|
|
13865
|
-
var onMessageLoadCaptured = React.useCallback(function () {
|
|
13866
|
-
/**
|
|
13867
|
-
* A load event (emitted by e.g. an <img>) was captured on a message.
|
|
13868
|
-
* In some cases, the loaded asset is larger than the placeholder, which means we have to scroll down.
|
|
13869
|
-
*/
|
|
13870
|
-
if (closeToBottom.current) {
|
|
13871
|
-
scrollToBottom();
|
|
13872
|
-
}
|
|
13873
|
-
}, [closeToTop, closeToBottom, scrollToBottom]);
|
|
13874
13993
|
return {
|
|
13875
13994
|
hasNewMessages: hasNewMessages,
|
|
13876
13995
|
isMessageListScrolledToBottom: isMessageListScrolledToBottom,
|
|
13877
|
-
onMessageLoadCaptured: onMessageLoadCaptured,
|
|
13878
13996
|
onScroll: onScroll,
|
|
13879
13997
|
scrollToBottom: scrollToBottom,
|
|
13880
13998
|
wrapperRect: wrapperRect,
|
|
@@ -14002,7 +14120,7 @@ var MessageListWithContext = function (props) {
|
|
|
14002
14120
|
messages: messages,
|
|
14003
14121
|
scrolledUpThreshold: props.scrolledUpThreshold,
|
|
14004
14122
|
suppressAutoscroll: suppressAutoscroll,
|
|
14005
|
-
}), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom,
|
|
14123
|
+
}), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
|
|
14006
14124
|
var _y = useEnrichedMessages({
|
|
14007
14125
|
channel: channel,
|
|
14008
14126
|
disableDateSeparator: disableDateSeparator,
|
|
@@ -14042,7 +14160,6 @@ var MessageListWithContext = function (props) {
|
|
|
14042
14160
|
unsafeHTML: unsafeHTML,
|
|
14043
14161
|
},
|
|
14044
14162
|
messageGroupStyles: messageGroupStyles,
|
|
14045
|
-
onMessageLoadCaptured: onMessageLoadCaptured,
|
|
14046
14163
|
read: read,
|
|
14047
14164
|
returnAllReadData: returnAllReadData,
|
|
14048
14165
|
threadList: threadList,
|
|
@@ -14486,7 +14603,6 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
14486
14603
|
return Item;
|
|
14487
14604
|
}, [
|
|
14488
14605
|
customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage,
|
|
14489
|
-
messageGroupStyles,
|
|
14490
14606
|
numItemsPrepended,
|
|
14491
14607
|
// processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
|
|
14492
14608
|
processedMessages.length,
|
|
@@ -14624,9 +14740,13 @@ var ThreadInner = function (props) {
|
|
|
14624
14740
|
}, []);
|
|
14625
14741
|
if (!thread)
|
|
14626
14742
|
return null;
|
|
14627
|
-
var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
|
|
14743
|
+
var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
|
|
14744
|
+
clsx('str-chat__thread-container str-chat__thread', {
|
|
14745
|
+
'str-chat__thread--full': fullWidth,
|
|
14746
|
+
'str-chat__thread--virtualized': virtualized,
|
|
14747
|
+
});
|
|
14628
14748
|
var head = (React__default["default"].createElement(ThreadHead$1, __assign({ key: thread.id, message: thread, Message: MessageUIComponent }, additionalParentMessageProps)));
|
|
14629
|
-
return (React__default["default"].createElement("div", { className:
|
|
14749
|
+
return (React__default["default"].createElement("div", { className: threadClass },
|
|
14630
14750
|
React__default["default"].createElement(ThreadHeader$1, { closeThread: closeThread, thread: thread }),
|
|
14631
14751
|
React__default["default"].createElement(ThreadMessageList, __assign({ disableDateSeparator: !enableDateSeparator, hasMore: threadHasMore, head: head, loadingMore: threadLoadingMore, loadMore: loadMoreThread, Message: MessageUIComponent, messageActions: messageActions, messages: threadMessages || [], suppressAutoscroll: threadSuppressAutoscroll, threadList: true }, (virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps))),
|
|
14632
14752
|
React__default["default"].createElement(MessageInput, __assign({ focus: autoFocus, Input: ThreadInput, parent: thread, publishTypingEvent: false }, additionalMessageInputProps))));
|
|
@@ -14661,6 +14781,7 @@ exports.ActionsIcon = ActionsIcon;
|
|
|
14661
14781
|
exports.Attachment = Attachment;
|
|
14662
14782
|
exports.AttachmentActions = AttachmentActions;
|
|
14663
14783
|
exports.AttachmentActionsContainer = AttachmentActionsContainer;
|
|
14784
|
+
exports.AttachmentPreviewList = AttachmentPreviewList;
|
|
14664
14785
|
exports.AttachmentWithinContainer = AttachmentWithinContainer;
|
|
14665
14786
|
exports.Audio = Audio;
|
|
14666
14787
|
exports.AudioContainer = AudioContainer;
|
|
@@ -14875,6 +14996,7 @@ exports.useChannelDeletedListener = useChannelDeletedListener;
|
|
|
14875
14996
|
exports.useChannelEditMessageHandler = useEditMessageHandler;
|
|
14876
14997
|
exports.useChannelHiddenListener = useChannelHiddenListener;
|
|
14877
14998
|
exports.useChannelMentionsHandler = useMentionsHandlers;
|
|
14999
|
+
exports.useChannelPreviewInfo = useChannelPreviewInfo;
|
|
14878
15000
|
exports.useChannelStateContext = useChannelStateContext;
|
|
14879
15001
|
exports.useChannelTruncatedListener = useChannelTruncatedListener;
|
|
14880
15002
|
exports.useChannelUpdatedListener = useChannelUpdatedListener;
|