stream-chat-react 6.12.0 → 7.0.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/README.md +1 -1
- package/dist/browser.full-bundle.js +2147 -19244
- 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/Audio.js +2 -2
- package/dist/components/Attachment/Card.d.ts.map +1 -1
- package/dist/components/Attachment/Card.js +1 -3
- package/dist/components/AutoCompleteTextarea/Item.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Item.js +1 -1
- package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/List.js +0 -1
- package/dist/components/AutoCompleteTextarea/Textarea.d.ts +7 -6
- package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.js +9 -22
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +10 -2
- package/dist/components/ChannelHeader/ChannelHeader.js +1 -1
- package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelListMessenger.js +1 -1
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +13 -1
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +1 -1
- package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchResults.js +6 -6
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +3 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.js +16 -14
- package/dist/components/ChatDown/ChatDown.d.ts.map +1 -1
- package/dist/components/ChatDown/ChatDown.js +2 -2
- package/dist/components/EmptyStateIndicator/EmptyStateIndicator.js +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +5 -3
- package/dist/components/Gallery/Image.d.ts.map +1 -1
- package/dist/components/Gallery/Image.js +4 -2
- package/dist/components/Gallery/ModalWrapper.d.ts +3 -6
- package/dist/components/Gallery/ModalWrapper.d.ts.map +1 -1
- package/dist/components/Gallery/ModalWrapper.js +4 -7
- package/dist/components/Gallery/index.d.ts +0 -1
- package/dist/components/Gallery/index.d.ts.map +1 -1
- package/dist/components/Gallery/index.js +0 -1
- package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
- package/dist/components/LoadMore/LoadMoreButton.js +1 -1
- package/dist/components/Message/MessageOptions.d.ts.map +1 -1
- package/dist/components/Message/MessageOptions.js +4 -4
- package/dist/components/Message/MessageSimple.d.ts.map +1 -1
- package/dist/components/Message/MessageSimple.js +2 -0
- package/dist/components/Message/hooks/useUserRole.js +1 -1
- package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActions.js +2 -1
- package/dist/components/MessageActions/MessageActionsBox.d.ts +1 -1
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActionsBox.js +12 -19
- package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
- package/dist/components/MessageInput/EditMessageForm.js +2 -2
- package/dist/components/MessageInput/MessageInput.d.ts +3 -1
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.js +4 -4
- package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputSmall.js +7 -5
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
- package/dist/components/MessageInput/QuotedMessagePreview.js +4 -3
- package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
- package/dist/components/MessageInput/UploadsPreview.js +2 -1
- package/dist/components/MessageInput/hooks/useAttachments.d.ts +1 -1
- package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useAttachments.js +3 -1
- package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts +3 -3
- package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useEmojiPicker.js +14 -4
- package/dist/components/MessageInput/hooks/useMessageInputState.js +4 -4
- package/dist/components/MessageInput/hooks/utils.js +1 -1
- package/dist/components/MessageInput/icons.js +1 -1
- package/dist/components/MessageInput/index.d.ts +1 -0
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +1 -0
- package/dist/components/MessageList/CustomNotification.d.ts.map +1 -1
- package/dist/components/MessageList/CustomNotification.js +1 -1
- package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
- package/dist/components/MessageList/MessageNotification.js +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +2 -6
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +8 -4
- package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionSelector.js +7 -6
- package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.js +5 -4
- package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SimpleReactionsList.js +1 -1
- package/dist/components/SafeAnchor/SafeAnchor.d.ts.map +1 -1
- package/dist/components/SafeAnchor/SafeAnchor.js +1 -1
- package/dist/components/Thread/Thread.js +1 -1
- package/dist/components/Window/Window.d.ts +1 -1
- package/dist/components/Window/Window.d.ts.map +1 -1
- package/dist/components/Window/Window.js +1 -4
- package/dist/css/index.css +1 -1
- package/dist/i18n/Streami18n.js +5 -5
- package/dist/index.cjs.js +230 -217
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/Card.scss +10 -0
- package/dist/scss/ChannelListMessenger.scss +4 -0
- package/dist/scss/ChannelSearch.scss +4 -1
- package/dist/scss/EditMessageForm.scss +4 -0
- package/dist/scss/Gallery.scss +6 -0
- package/dist/scss/LoadMoreButton.scss +6 -0
- package/dist/scss/Message.scss +24 -0
- package/dist/scss/MessageActions.scss +21 -0
- package/dist/scss/MessageInput.scss +26 -0
- package/dist/scss/MessageInputFlat.scss +23 -1
- package/dist/scss/MessageTeam.scss +8 -0
- package/dist/scss/Modal.scss +11 -2
- package/dist/scss/ReactionList.scss +7 -0
- package/dist/scss/ReactionSelector.scss +7 -0
- package/dist/scss/SendButton.scss +5 -0
- package/dist/scss/SmallMessageInput.scss +12 -0
- package/dist/scss/Thread.scss +24 -0
- package/dist/scss/_base.scss +4 -2
- package/dist/scss/_variables.scss +6 -1
- package/dist/scss/index.scss +1 -1
- package/dist/scss/vendor/react-file-utils.scss +2 -0
- package/dist/scss/vendor/react-image-gallery.scss +224 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +24 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +13 -11
- package/dist/components/Gallery/ModalImage.d.ts +0 -9
- package/dist/components/Gallery/ModalImage.d.ts.map +0 -1
- package/dist/components/Gallery/ModalImage.js +0 -6
- package/dist/scss/ModalImage.scss +0 -11
package/dist/index.cjs.js
CHANGED
|
@@ -10,7 +10,7 @@ var calendar = require('dayjs/plugin/calendar');
|
|
|
10
10
|
var localizedFormat = require('dayjs/plugin/localizedFormat');
|
|
11
11
|
var prettybytes = require('pretty-bytes');
|
|
12
12
|
var reactFileUtils = require('react-file-utils');
|
|
13
|
-
var
|
|
13
|
+
var ImageGallery = require('react-image-gallery');
|
|
14
14
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
15
15
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
16
16
|
var emojiRegex = require('emoji-regex');
|
|
@@ -84,7 +84,7 @@ var Dayjs__default = /*#__PURE__*/_interopDefaultLegacy(Dayjs);
|
|
|
84
84
|
var calendar__default = /*#__PURE__*/_interopDefaultLegacy(calendar);
|
|
85
85
|
var localizedFormat__default = /*#__PURE__*/_interopDefaultLegacy(localizedFormat);
|
|
86
86
|
var prettybytes__default = /*#__PURE__*/_interopDefaultLegacy(prettybytes);
|
|
87
|
-
var
|
|
87
|
+
var ImageGallery__default = /*#__PURE__*/_interopDefaultLegacy(ImageGallery);
|
|
88
88
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
89
89
|
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
90
90
|
var emojiRegex__default = /*#__PURE__*/_interopDefaultLegacy(emojiRegex);
|
|
@@ -251,9 +251,9 @@ var UnMemoizedAudio = function (props) {
|
|
|
251
251
|
React__default['default'].createElement("audio", { ref: audioRef },
|
|
252
252
|
React__default['default'].createElement("source", { "data-testid": 'audio-source', src: asset_url, type: 'audio/mp3' })),
|
|
253
253
|
React__default['default'].createElement("div", { className: 'str-chat__audio__image' },
|
|
254
|
-
React__default['default'].createElement("div", { className: 'str-chat__audio__image--overlay' }, !isPlaying ? (React__default['default'].createElement("
|
|
254
|
+
React__default['default'].createElement("div", { className: 'str-chat__audio__image--overlay' }, !isPlaying ? (React__default['default'].createElement("button", { className: 'str-chat__audio__image--button', "data-testid": 'play-audio', onClick: function () { return setIsPlaying(true); } },
|
|
255
255
|
React__default['default'].createElement("svg", { height: '40', viewBox: '0 0 64 64', width: '40', xmlns: 'http://www.w3.org/2000/svg' },
|
|
256
|
-
React__default['default'].createElement("path", { d: 'M32 58c14.36 0 26-11.64 26-26S46.36 6 32 6 6 17.64 6 32s11.64 26 26 26zm0 6C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm13.237-28.412L26.135 45.625a3.27 3.27 0 0 1-4.426-1.4 3.319 3.319 0 0 1-.372-1.47L21 23.36c-.032-1.823 1.41-3.327 3.222-3.358a3.263 3.263 0 0 1 1.473.322l19.438 9.36a3.311 3.311 0 0 1 .103 5.905z', fillRule: 'nonzero' })))) : (React__default['default'].createElement("
|
|
256
|
+
React__default['default'].createElement("path", { d: 'M32 58c14.36 0 26-11.64 26-26S46.36 6 32 6 6 17.64 6 32s11.64 26 26 26zm0 6C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm13.237-28.412L26.135 45.625a3.27 3.27 0 0 1-4.426-1.4 3.319 3.319 0 0 1-.372-1.47L21 23.36c-.032-1.823 1.41-3.327 3.222-3.358a3.263 3.263 0 0 1 1.473.322l19.438 9.36a3.311 3.311 0 0 1 .103 5.905z', fillRule: 'nonzero' })))) : (React__default['default'].createElement("button", { className: 'str-chat__audio__image--button', "data-testid": 'pause-audio', onClick: function () { return setIsPlaying(false); } },
|
|
257
257
|
React__default['default'].createElement("svg", { height: '40', viewBox: '0 0 64 64', width: '40', xmlns: 'http://www.w3.org/2000/svg' },
|
|
258
258
|
React__default['default'].createElement("path", { d: 'M32 58.215c14.478 0 26.215-11.737 26.215-26.215S46.478 5.785 32 5.785 5.785 17.522 5.785 32 17.522 58.215 32 58.215zM32 64C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm-7.412-45.56h2.892a2.17 2.17 0 0 1 2.17 2.17v23.865a2.17 2.17 0 0 1-2.17 2.17h-2.892a2.17 2.17 0 0 1-2.17-2.17V20.61a2.17 2.17 0 0 1 2.17-2.17zm12.293 0h2.893a2.17 2.17 0 0 1 2.17 2.17v23.865a2.17 2.17 0 0 1-2.17 2.17h-2.893a2.17 2.17 0 0 1-2.17-2.17V20.61a2.17 2.17 0 0 1 2.17-2.17z', fillRule: 'nonzero' }))))),
|
|
259
259
|
image_url && React__default['default'].createElement("img", { alt: "" + description, src: image_url })),
|
|
@@ -274,12 +274,10 @@ var UnMemoizedSafeAnchor = function (props) {
|
|
|
274
274
|
if (!href)
|
|
275
275
|
return null;
|
|
276
276
|
var sanitized = sanitizeUrl.sanitizeUrl(href);
|
|
277
|
-
return (React__default['default'].createElement("a", { className: className, download: download, href: sanitized, rel: rel, target: target }, children));
|
|
277
|
+
return (React__default['default'].createElement("a", { "aria-label": 'Attachment', className: className, download: download, href: sanitized, rel: rel, target: target }, children));
|
|
278
278
|
};
|
|
279
279
|
var SafeAnchor = React__default['default'].memo(UnMemoizedSafeAnchor);
|
|
280
280
|
|
|
281
|
-
var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAkCAYAAAB/up84AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABVhJREFUeNrsW6GS20AMdToGBgEGAQYBBgEBBQYFgQcP5hMO9jP6CYWFBwsPBgYUGBQEFAQUGAQYBBgYGHjmutt5O6NupbXXcZJrx5rJXGyv11o96Ukr52avr6/BJG9HZmMBMpvNYnxt1JzNZNoRAYFxM2Z8rT6FuueMcaH6s1KfhBn3U42r1Jg1rrfq+Bt5xgf1Z64+uQFQndNzLc1Ydfwg6F2p6wd1PVXfU+b6Gc9vHGuh8+jrsXVN61Sq64XggNw95tlH9XmP6y3W2OI+qvN3db6mN7/zBFAb8L2aNMJxRsDQC6jIuEyN039LnAvV8QJKRRijZUHmT8iiLpEFDHKJaB1TGN732WuAokEIDQCwhwGjsMEIMNgp6qY9JlsTgyXquCFG1d54IsbOsKAVPLDBcQJjUxB0RJwAltGntNQ46GhzqPnb0y0954RG/1iLQ7SRCkR+guiPtW6GFRg5gAlCrFvbJEZ0ngDAUn0/Y77fDCJFXuiB/AmGDC3PLg0YWLRW5CcJWWPglNxDKS6C59AcZBs/sYxbOQBqHHkuZYCsGCds4SQJDDx3RK3RjUb9EfMUcLQ57BHS64MAIYtYkvEt+d4wCzqr++ipkoTtkihOI2chREfA5KiC0GOAaMig05zoWJPjgMk39jxcPphDR0mSDrtq438g51iq8omQlEnYJfHoiAFxYQGko6bCPSmZ5wS+TRx0Zc5R4CtmHbEVJT+0p1uOYdNE1SMfOKNO0zXWEmItptApsfYa1LV0UZUPIHSCmlRYJhfokNWhX5IcsmIWbEAMCQWerWirhZK57MghNQyzgke3QuQWPUv4EAac9wCuJjmkNmvUNEwiobX+DgdEWoQGgNDPGtTWWhRRWONX5JlnePCZhP1JUCOzPN1O0C2MohP7xuiko8Qy9INUDBg2YPJMlzP8pRv0qYeUdu+Cy+RAKIYmtVqojM5kkS0DwkXlLuY0ICzgAEOlAd8fPe+rYJdppz61TiZ5G4AgcScWz05RcUtAkOwyJMtI4FzNt3suCWKfwLUhdqRC0yA/enB1CZ4vBZ2fhIptJ4x/5PYVavyzQ39N0V8ddnsQ+m3sfX02hjo3bIVJ7d5PhqojZxYdC3NEdv9oQMQWFFjHHqpLEsc9BZyF23c9cG0ZOJjUIN15V1mY8OOAhW0E77yWaP2eoO9VBFG/d6yX6/xuHT2z3AsQ5ImnjrZBF6XcUiKAEl0RlJzZ7ZtnbxmqSgRqfxmyD9k6wNDGzuExecB3Z1/ukBOjQH73MZbspChFp9nQ/EYY9+LaaIYOqlo7JjwISX+LcBwbjAOz2ZKS7BpOcq0o0R2HvZAbHpHPJGc+dm00paQuedmOA4O0WD5fyQ4V08Ip4ATxhYl8CCh76/0QLVyehlBVFyCpYJTcKmPjHoY8XNE2VQ8dbIkdr4Z95npBwcNVahKzNEMBSYSyz46iLm8sLunreG5O+xYTsaMUHYu6bMn79sRCT2+8l6SMV2cCT5e3UspBXbbd9n3nDIN/Q1KP3JDfWLcd8kZwCVX12hjeOlmOIMe+L6FGjJLC4QS5rz6hg/tThjZiU0Pr/g7D65/uCUafKgaUJu0lHjvox/XsjXA+GAOQUogIXV8/v7GoKOGJfYuHxvHjt7t3rEMHD2+E5PoR+5GCLCS+8g6Z2xgGt6anuwGC99MSKAl6RrfUs/ofje+b1PcjlJBlMMk4gKBUe77AqKVP/T1Jj30IQPmCTdkm6NeKb5BkJzCGdCA8XuFGZIOWCBEh/mwGiZ/rFZXk3xHEdkjHb6MknVOhypJe+Sac03XlL4fe3r81mH518q9GyCS3kV8CDADlsrVaJhTLAgAAAABJRU5ErkJggg==";
|
|
282
|
-
|
|
283
281
|
var getDisplayName = function (Component) {
|
|
284
282
|
return Component.displayName || Component.name || 'Component';
|
|
285
283
|
};
|
|
@@ -351,8 +349,7 @@ var UnMemoizedCard = function (props) {
|
|
|
351
349
|
React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--flex' },
|
|
352
350
|
title && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--title' }, title),
|
|
353
351
|
text && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--text' }, text),
|
|
354
|
-
(title_link || og_scrape_url) && (React__default['default'].createElement(SafeAnchor, { className: 'str-chat__message-attachment-card--url', href: title_link || og_scrape_url, rel: 'noopener noreferrer', target: '_blank' }, trimUrl(title_link || og_scrape_url))))
|
|
355
|
-
type === 'giphy' && (React__default['default'].createElement("img", { alt: 'giphy logo', className: 'str-chat__message-attachment-card__giphy-logo', "data-testid": 'card-giphy', src: img$1 })))));
|
|
352
|
+
(title_link || og_scrape_url) && (React__default['default'].createElement(SafeAnchor, { className: 'str-chat__message-attachment-card--url', href: title_link || og_scrape_url, rel: 'noopener noreferrer', target: '_blank' }, trimUrl(title_link || og_scrape_url)))))));
|
|
356
353
|
};
|
|
357
354
|
/**
|
|
358
355
|
* Simple Card Layout for displaying links
|
|
@@ -369,19 +366,46 @@ var UnMemoizedFileAttachment = function (props) {
|
|
|
369
366
|
};
|
|
370
367
|
var FileAttachment = React__default['default'].memo(UnMemoizedFileAttachment);
|
|
371
368
|
|
|
372
|
-
var
|
|
373
|
-
var
|
|
374
|
-
|
|
375
|
-
|
|
369
|
+
var Modal = function (props) {
|
|
370
|
+
var children = props.children, onClose = props.onClose, open = props.open;
|
|
371
|
+
var t = useTranslationContext('Modal').t;
|
|
372
|
+
var innerRef = React.useRef(null);
|
|
373
|
+
var closeRef = React.useRef(null);
|
|
374
|
+
var handleClick = function (event) {
|
|
375
|
+
var _a, _b;
|
|
376
|
+
if ((event.target instanceof HTMLDivElement &&
|
|
377
|
+
!((_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
|
|
378
|
+
onClose) ||
|
|
379
|
+
(event.target instanceof HTMLButtonElement &&
|
|
380
|
+
((_b = closeRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target)) &&
|
|
381
|
+
onClose)) {
|
|
382
|
+
onClose();
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
React.useEffect(function () {
|
|
386
|
+
if (!open)
|
|
387
|
+
return function () { return null; };
|
|
388
|
+
var handleEscKey = function (event) {
|
|
389
|
+
if (event instanceof KeyboardEvent && event.key === 'Escape' && onClose) {
|
|
390
|
+
onClose();
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
document.addEventListener('keypress', handleEscKey);
|
|
394
|
+
return function () { return document.removeEventListener('keypress', handleEscKey); };
|
|
395
|
+
}, [onClose, open]);
|
|
396
|
+
var openClasses = open ? 'str-chat__modal--open' : 'str-chat__modal--closed';
|
|
397
|
+
return (React__default['default'].createElement("div", { className: "str-chat__modal " + openClasses, onClick: handleClick },
|
|
398
|
+
React__default['default'].createElement("button", { className: 'str-chat__modal__close-button', ref: closeRef, title: 'Close' },
|
|
399
|
+
t('Close'),
|
|
400
|
+
React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
|
|
401
|
+
React__default['default'].createElement("path", { d: 'M9.916 1.027L8.973.084 5 4.058 1.027.084l-.943.943L4.058 5 .084 8.973l.943.943L5 5.942l3.973 3.974.943-.943L5.942 5z', fillRule: 'evenodd' }))),
|
|
402
|
+
React__default['default'].createElement("div", { className: 'str-chat__modal__inner', ref: innerRef }, children)));
|
|
376
403
|
};
|
|
377
404
|
|
|
378
405
|
var ModalComponent = function (props) {
|
|
379
406
|
var images = props.images, index = props.index, modalIsOpen = props.modalIsOpen, toggleModal = props.toggleModal;
|
|
380
|
-
return (React__default['default'].createElement(
|
|
381
|
-
React__default['default'].createElement(
|
|
382
|
-
// @ts-expect-error
|
|
383
|
-
View: ModalImage,
|
|
384
|
-
}, currentIndex: index, views: images }))) : null));
|
|
407
|
+
return (React__default['default'].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
|
|
408
|
+
React__default['default'].createElement(ImageGallery__default['default'], { items: images, showIndex: true, showPlayButton: false, showThumbnails: false, startIndex: index })));
|
|
385
409
|
};
|
|
386
410
|
|
|
387
411
|
var UnMemoizedGallery = function (props) {
|
|
@@ -400,14 +424,16 @@ var UnMemoizedGallery = function (props) {
|
|
|
400
424
|
};
|
|
401
425
|
var formattedArray = React.useMemo(function () {
|
|
402
426
|
return images.map(function (image) { return ({
|
|
427
|
+
original: image.image_url || image.thumb_url || '',
|
|
428
|
+
originalAlt: 'User uploaded content',
|
|
403
429
|
source: image.image_url || image.thumb_url || '',
|
|
404
430
|
}); });
|
|
405
431
|
}, [images]);
|
|
406
|
-
var renderImages = images.slice(0, 3).map(function (image, i) { return (React__default['default'].createElement("
|
|
407
|
-
React__default['default'].createElement("img", { src: image.image_url || image.thumb_url }))); });
|
|
432
|
+
var renderImages = images.slice(0, 3).map(function (image, i) { return (React__default['default'].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-" + i, onClick: function () { return toggleModal(i); } },
|
|
433
|
+
React__default['default'].createElement("img", { alt: 'User uploaded content', src: image.image_url || image.thumb_url }))); });
|
|
408
434
|
return (React__default['default'].createElement("div", { className: "str-chat__gallery " + (images.length > 3 ? 'str-chat__gallery--square' : '') },
|
|
409
435
|
renderImages,
|
|
410
|
-
images.length > 3 && (React__default['default'].createElement("
|
|
436
|
+
images.length > 3 && (React__default['default'].createElement("button", { className: 'str-chat__gallery-placeholder', onClick: function () { return toggleModal(3); }, style: {
|
|
411
437
|
backgroundImage: "url(" + images[3].image_url + ")",
|
|
412
438
|
} },
|
|
413
439
|
React__default['default'].createElement("p", null, t('{{ imageCount }} more', {
|
|
@@ -427,10 +453,12 @@ var ImageComponent = function (props) {
|
|
|
427
453
|
var _a = React.useState(false), modalIsOpen = _a[0], setModalIsOpen = _a[1];
|
|
428
454
|
var fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url;
|
|
429
455
|
var imageSrc = sanitizeUrl.sanitizeUrl(image_url || thumb_url);
|
|
430
|
-
var formattedArray = [
|
|
456
|
+
var formattedArray = [
|
|
457
|
+
{ original: imageSrc, originalAlt: 'User uploaded content', source: imageSrc },
|
|
458
|
+
];
|
|
431
459
|
var toggleModal = function () { return setModalIsOpen(!modalIsOpen); };
|
|
432
460
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
433
|
-
React__default['default'].createElement("img", { alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc }),
|
|
461
|
+
React__default['default'].createElement("img", { alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, onKeyPress: toggleModal, src: imageSrc, tabIndex: 0 }),
|
|
434
462
|
React__default['default'].createElement(ModalComponent, { images: formattedArray, index: 0, modalIsOpen: modalIsOpen, toggleModal: toggleModal })));
|
|
435
463
|
};
|
|
436
464
|
|
|
@@ -603,14 +631,12 @@ var Item = /*#__PURE__*/React__default['default'].forwardRef(function Item(props
|
|
|
603
631
|
return /*#__PURE__*/React__default['default'].createElement("li", {
|
|
604
632
|
className: "rta__item ".concat(className || ''),
|
|
605
633
|
style: style
|
|
606
|
-
}, /*#__PURE__*/React__default['default'].createElement("
|
|
634
|
+
}, /*#__PURE__*/React__default['default'].createElement("button", {
|
|
607
635
|
className: "rta__entity ".concat(selected ? 'rta__entity--selected' : ''),
|
|
608
636
|
onClick: onClickHandler,
|
|
609
637
|
onFocus: selectItem,
|
|
610
638
|
onMouseEnter: selectItem,
|
|
611
|
-
ref: innerRef
|
|
612
|
-
role: "button",
|
|
613
|
-
tabIndex: 0
|
|
639
|
+
ref: innerRef
|
|
614
640
|
}, /*#__PURE__*/React__default['default'].createElement(Component, {
|
|
615
641
|
entity: item,
|
|
616
642
|
selected: selected
|
|
@@ -687,6 +713,23 @@ var messageCodeBlocks = function (message) {
|
|
|
687
713
|
var matches = message.match(codeRegex);
|
|
688
714
|
return matches || [];
|
|
689
715
|
};
|
|
716
|
+
var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
717
|
+
function formatUrlForDisplay(url) {
|
|
718
|
+
try {
|
|
719
|
+
return decodeURIComponent(url).replace(detectHttp, '');
|
|
720
|
+
}
|
|
721
|
+
catch (e) {
|
|
722
|
+
return url;
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
function encodeDecode(url) {
|
|
726
|
+
try {
|
|
727
|
+
return encodeURI(decodeURIComponent(url));
|
|
728
|
+
}
|
|
729
|
+
catch (error) {
|
|
730
|
+
return url;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
690
733
|
var markDownRenderers = {
|
|
691
734
|
// eslint-disable-next-line react/display-name
|
|
692
735
|
link: function (props) {
|
|
@@ -751,7 +794,6 @@ var renderText = function (text, mentioned_users, options) {
|
|
|
751
794
|
var newText = text;
|
|
752
795
|
var markdownLinks = matchMarkdownLinks(newText);
|
|
753
796
|
var codeBlocks = messageCodeBlocks(newText);
|
|
754
|
-
var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
755
797
|
// extract all valid links/emails within text and replace it with proper markup
|
|
756
798
|
uniqBy__default['default'](linkify__namespace.find(newText), 'value').forEach(function (_a) {
|
|
757
799
|
var href = _a.href, type = _a.type, value = _a.value;
|
|
@@ -767,8 +809,12 @@ var renderText = function (text, mentioned_users, options) {
|
|
|
767
809
|
});
|
|
768
810
|
if (noParsingNeeded.length > 0 || linkIsInBlock)
|
|
769
811
|
return;
|
|
770
|
-
|
|
771
|
-
|
|
812
|
+
try {
|
|
813
|
+
var displayLink = type === 'email' ? value : formatUrlForDisplay(href);
|
|
814
|
+
newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeDecode(href) + ")");
|
|
815
|
+
}
|
|
816
|
+
catch (e) {
|
|
817
|
+
}
|
|
772
818
|
});
|
|
773
819
|
var plugins = [emojiMarkdownPlugin];
|
|
774
820
|
if (mentioned_users === null || mentioned_users === void 0 ? void 0 : mentioned_users.length) {
|
|
@@ -1028,7 +1074,6 @@ var List = function List(props) {
|
|
|
1028
1074
|
|
|
1029
1075
|
if ((event.which === KEY_CODES.ENTER || event.which === KEY_CODES.TAB) && selectedItem !== undefined) {
|
|
1030
1076
|
handleClick(event);
|
|
1031
|
-
return setSelectedItem(undefined);
|
|
1032
1077
|
}
|
|
1033
1078
|
|
|
1034
1079
|
return null;
|
|
@@ -1537,13 +1582,6 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1537
1582
|
return data;
|
|
1538
1583
|
});
|
|
1539
1584
|
|
|
1540
|
-
_defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_createRegExp", function () {
|
|
1541
|
-
var trigger = _this.props.trigger; // negative lookahead to match only the trigger + the actual token = "bladhwd:adawd:word test" => ":word"
|
|
1542
|
-
// https://stackoverflow.com/a/8057827/2719917
|
|
1543
|
-
|
|
1544
|
-
_this.tokenRegExp = new RegExp("([".concat(Object.keys(trigger).join(''), "])(?:(?!\\1)[^\\s])*$"));
|
|
1545
|
-
});
|
|
1546
|
-
|
|
1547
1585
|
_defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_closeAutocomplete", function () {
|
|
1548
1586
|
_this.setState({
|
|
1549
1587
|
currentTrigger: null,
|
|
@@ -1762,8 +1800,6 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1762
1800
|
_value = _this$props6.value; // TODO: it would be better to have the parent control state...
|
|
1763
1801
|
// if (value) this.state.value = value;
|
|
1764
1802
|
|
|
1765
|
-
_this._createRegExp();
|
|
1766
|
-
|
|
1767
1803
|
if (!loadingComponent) {
|
|
1768
1804
|
throw new Error('RTA: loadingComponent is not defined');
|
|
1769
1805
|
}
|
|
@@ -1818,40 +1854,12 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1818
1854
|
});
|
|
1819
1855
|
Listeners.startListen();
|
|
1820
1856
|
}
|
|
1821
|
-
}, {
|
|
1822
|
-
key: "UNSAFE_componentWillReceiveProps",
|
|
1823
|
-
value: function UNSAFE_componentWillReceiveProps(nextProps) {
|
|
1824
|
-
this._update(nextProps);
|
|
1825
|
-
}
|
|
1826
1857
|
}, {
|
|
1827
1858
|
key: "componentWillUnmount",
|
|
1828
1859
|
value: function componentWillUnmount() {
|
|
1829
1860
|
Listeners.stopListen();
|
|
1830
1861
|
Listeners.remove(this.state.listenerIndex);
|
|
1831
1862
|
}
|
|
1832
|
-
}, {
|
|
1833
|
-
key: "_update",
|
|
1834
|
-
value: // TODO: This is an anti pattern in react, should come up with a better way
|
|
1835
|
-
function _update(_ref) {
|
|
1836
|
-
var trigger = _ref.trigger,
|
|
1837
|
-
value = _ref.value;
|
|
1838
|
-
var oldValue = this.state.value;
|
|
1839
|
-
var oldTrigger = this.props.trigger;
|
|
1840
|
-
if (value !== oldValue || !oldValue) this.setState({
|
|
1841
|
-
value: value
|
|
1842
|
-
});
|
|
1843
|
-
/**
|
|
1844
|
-
* check if trigger chars are changed, if so, change the regexp accordingly
|
|
1845
|
-
*/
|
|
1846
|
-
|
|
1847
|
-
if (Object.keys(trigger).join('') !== Object.keys(oldTrigger).join('')) {
|
|
1848
|
-
this._createRegExp();
|
|
1849
|
-
}
|
|
1850
|
-
}
|
|
1851
|
-
/**
|
|
1852
|
-
* Close autocomplete, also clean up trigger (to avoid slow promises)
|
|
1853
|
-
*/
|
|
1854
|
-
|
|
1855
1863
|
}, {
|
|
1856
1864
|
key: "renderSuggestionListContainer",
|
|
1857
1865
|
value: function renderSuggestionListContainer() {
|
|
@@ -1872,8 +1880,8 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1872
1880
|
if (triggerProps.values && triggerProps.currentTrigger && !(disableMentions && triggerProps.currentTrigger === '@')) {
|
|
1873
1881
|
return /*#__PURE__*/React__default['default'].createElement("div", {
|
|
1874
1882
|
className: "rta__autocomplete ".concat(dropdownClassName || ''),
|
|
1875
|
-
ref: function ref(
|
|
1876
|
-
_this3.dropdownRef =
|
|
1883
|
+
ref: function ref(_ref) {
|
|
1884
|
+
_this3.dropdownRef = _ref;
|
|
1877
1885
|
},
|
|
1878
1886
|
style: dropdownStyle
|
|
1879
1887
|
}, /*#__PURE__*/React__default['default'].createElement(SuggestionList, _extends__default['default']({
|
|
@@ -1915,14 +1923,34 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1915
1923
|
onFocus: this.props.onFocus,
|
|
1916
1924
|
onScroll: this._onScrollHandler,
|
|
1917
1925
|
onSelect: this._selectHandler,
|
|
1918
|
-
ref: function ref(
|
|
1919
|
-
if (_this4.props.innerRef) _this4.props.innerRef(
|
|
1920
|
-
_this4.textareaRef =
|
|
1926
|
+
ref: function ref(_ref2) {
|
|
1927
|
+
if (_this4.props.innerRef) _this4.props.innerRef(_ref2);
|
|
1928
|
+
_this4.textareaRef = _ref2;
|
|
1921
1929
|
},
|
|
1922
1930
|
style: style,
|
|
1923
1931
|
value: value
|
|
1924
1932
|
}, this.props.additionalTextareaProps)));
|
|
1925
1933
|
}
|
|
1934
|
+
}], [{
|
|
1935
|
+
key: "getDerivedStateFromProps",
|
|
1936
|
+
value:
|
|
1937
|
+
/**
|
|
1938
|
+
* setup to emulate the UNSAFE_componentWillReceiveProps
|
|
1939
|
+
*/
|
|
1940
|
+
function getDerivedStateFromProps(props, state) {
|
|
1941
|
+
if (props.value !== state.propsValue || !state.value) {
|
|
1942
|
+
return {
|
|
1943
|
+
propsValue: props.value,
|
|
1944
|
+
value: props.value
|
|
1945
|
+
};
|
|
1946
|
+
} else {
|
|
1947
|
+
return null;
|
|
1948
|
+
}
|
|
1949
|
+
}
|
|
1950
|
+
/**
|
|
1951
|
+
* Close autocomplete, also clean up trigger (to avoid slow promises)
|
|
1952
|
+
*/
|
|
1953
|
+
|
|
1926
1954
|
}]);
|
|
1927
1955
|
|
|
1928
1956
|
return ReactTextareaAutocomplete;
|
|
@@ -2325,7 +2353,7 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
|
|
|
2325
2353
|
(isMyMessage && channelCapabilities['delete-own-message']);
|
|
2326
2354
|
var canFlag = !isMyMessage;
|
|
2327
2355
|
var canMute = !isMyMessage && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.mutes);
|
|
2328
|
-
var canQuote = !disableQuotedMessages;
|
|
2356
|
+
var canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];
|
|
2329
2357
|
var canReact = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
|
|
2330
2358
|
var canReply = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) !== false && channelCapabilities['send-reply'];
|
|
2331
2359
|
return {
|
|
@@ -2721,8 +2749,7 @@ var CustomMessageActionsList = function (props) {
|
|
|
2721
2749
|
var customActionsArray = Object.keys(customMessageActions);
|
|
2722
2750
|
return (React__default['default'].createElement(React__default['default'].Fragment, null, customActionsArray.map(function (customAction) {
|
|
2723
2751
|
var customHandler = customMessageActions[customAction];
|
|
2724
|
-
return (React__default['default'].createElement("button", { key: customAction, onClick: function (event) { return customHandler(message, event); } },
|
|
2725
|
-
React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, customAction)));
|
|
2752
|
+
return (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
|
|
2726
2753
|
})));
|
|
2727
2754
|
};
|
|
2728
2755
|
var UnMemoizedMessageActionsBox = function (props) {
|
|
@@ -2749,32 +2776,26 @@ var UnMemoizedMessageActionsBox = function (props) {
|
|
|
2749
2776
|
}, [messageListRect, mine, open]);
|
|
2750
2777
|
var handleQuote = function () {
|
|
2751
2778
|
setQuotedMessage(message);
|
|
2752
|
-
var elements =
|
|
2779
|
+
var elements = message.parent_id
|
|
2780
|
+
? document.querySelectorAll('.str-chat__thread .str-chat__textarea__textarea')
|
|
2781
|
+
: document.getElementsByClassName('str-chat__textarea__textarea');
|
|
2753
2782
|
var textarea = elements.item(0);
|
|
2754
2783
|
if (textarea instanceof HTMLTextAreaElement) {
|
|
2755
2784
|
textarea.focus();
|
|
2756
2785
|
}
|
|
2757
2786
|
};
|
|
2758
2787
|
return (React__default['default'].createElement("div", { className: "str-chat__message-actions-box\n " + (open ? 'str-chat__message-actions-box--open' : '') + "\n " + (mine ? 'str-chat__message-actions-box--mine' : '') + "\n " + (reverse ? 'str-chat__message-actions-box--reverse' : '') + "\n ", "data-testid": 'message-actions-box', ref: checkIfReverse },
|
|
2759
|
-
React__default['default'].createElement("
|
|
2788
|
+
React__default['default'].createElement("div", { "aria-label": 'Message Options', className: 'str-chat__message-actions-list', role: 'listbox' },
|
|
2760
2789
|
customMessageActions && (React__default['default'].createElement(CustomMessageActionsList, { customMessageActions: customMessageActions, message: message })),
|
|
2761
|
-
messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 &&
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
messageActions.indexOf(MESSAGE_ACTIONS.
|
|
2766
|
-
|
|
2767
|
-
messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (React__default['default'].createElement("button", { onClick: handleFlag },
|
|
2768
|
-
React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Flag')))),
|
|
2769
|
-
messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (React__default['default'].createElement("button", { onClick: handleMute },
|
|
2770
|
-
React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, isUserMuted() ? t('Unmute') : t('Mute')))),
|
|
2771
|
-
messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1 && (React__default['default'].createElement("button", { onClick: handleEdit },
|
|
2772
|
-
React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Edit Message')))),
|
|
2773
|
-
messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1 && (React__default['default'].createElement("button", { onClick: handleDelete },
|
|
2774
|
-
React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Delete')))))));
|
|
2790
|
+
messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && !message.quoted_message && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleQuote, role: 'option' }, t('Reply'))),
|
|
2791
|
+
messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handlePin, role: 'option' }, !message.pinned ? t('Pin') : t('Unpin'))),
|
|
2792
|
+
messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleFlag, role: 'option' }, t('Flag'))),
|
|
2793
|
+
messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleMute, role: 'option' }, isUserMuted() ? t('Unmute') : t('Mute'))),
|
|
2794
|
+
messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleEdit, role: 'option' }, t('Edit Message'))),
|
|
2795
|
+
messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleDelete, role: 'option' }, t('Delete'))))));
|
|
2775
2796
|
};
|
|
2776
2797
|
/**
|
|
2777
|
-
* A popup box that displays the available actions on a message, such edit, delete, pin, etc.
|
|
2798
|
+
* A popup box that displays the available actions on a message, such as edit, delete, pin, etc.
|
|
2778
2799
|
*/
|
|
2779
2800
|
var MessageActionsBox = React__default['default'].memo(UnMemoizedMessageActionsBox);
|
|
2780
2801
|
|
|
@@ -2816,7 +2837,8 @@ var MessageActions = function (props) {
|
|
|
2816
2837
|
return null;
|
|
2817
2838
|
return (React__default['default'].createElement(MessageActionsWrapper, { customWrapperClass: customWrapperClass, inline: inline, setActionsBoxOpen: setActionsBoxOpen },
|
|
2818
2839
|
React__default['default'].createElement(MessageActionsBox, { getMessageActions: getMessageActions, handleDelete: handleDelete, handleEdit: setEditingState, handleFlag: handleFlag, handleMute: handleMute, handlePin: handlePin, isUserMuted: isMuted, mine: mine ? mine() : isMyMessage(), open: actionsBoxOpen }),
|
|
2819
|
-
React__default['default'].createElement(
|
|
2840
|
+
React__default['default'].createElement("button", { "aria-expanded": actionsBoxOpen, "aria-haspopup": 'true', "aria-label": 'Open Message Actions Menu' },
|
|
2841
|
+
React__default['default'].createElement(ActionsIcon$1, null))));
|
|
2820
2842
|
};
|
|
2821
2843
|
var MessageActionsWrapper = function (props) {
|
|
2822
2844
|
var children = props.children, customWrapperClass = props.customWrapperClass, inline = props.inline, setActionsBoxOpen = props.setActionsBoxOpen;
|
|
@@ -2856,15 +2878,15 @@ var UnMemoizedMessageOptions = function (props) {
|
|
|
2856
2878
|
if (isMyMessage() && displayLeft) {
|
|
2857
2879
|
return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options-left' },
|
|
2858
2880
|
showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef })),
|
|
2859
|
-
shouldShowReplies && (React__default['default'].createElement("
|
|
2881
|
+
shouldShowReplies && (React__default['default'].createElement("button", { "aria-label": 'Open Thread', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
|
|
2860
2882
|
React__default['default'].createElement(ThreadIcon$1, null))),
|
|
2861
|
-
shouldShowReactions && (React__default['default'].createElement("
|
|
2883
|
+
shouldShowReactions && (React__default['default'].createElement("button", { "aria-label": 'Open Reaction Selector', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
|
|
2862
2884
|
React__default['default'].createElement(ReactionIcon$1, null)))));
|
|
2863
2885
|
}
|
|
2864
2886
|
return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options' },
|
|
2865
|
-
shouldShowReactions && (React__default['default'].createElement("
|
|
2887
|
+
shouldShowReactions && (React__default['default'].createElement("button", { "aria-label": 'Open Reaction Selector', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
|
|
2866
2888
|
React__default['default'].createElement(ReactionIcon$1, null))),
|
|
2867
|
-
shouldShowReplies && (React__default['default'].createElement("
|
|
2889
|
+
shouldShowReplies && (React__default['default'].createElement("button", { "aria-label": 'Open Thread', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
|
|
2868
2890
|
React__default['default'].createElement(ThreadIcon$1, null))),
|
|
2869
2891
|
showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef }))));
|
|
2870
2892
|
};
|
|
@@ -3743,7 +3765,7 @@ var searchLocalUsers = function (params) {
|
|
|
3743
3765
|
var transliterate;
|
|
3744
3766
|
return __generator(this, function (_a) {
|
|
3745
3767
|
switch (_a.label) {
|
|
3746
|
-
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@
|
|
3768
|
+
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@stream-io/transliterate')); })];
|
|
3747
3769
|
case 1:
|
|
3748
3770
|
transliterate = (_a.sent()).default;
|
|
3749
3771
|
updatedName = transliterate(user.name || '').toLowerCase();
|
|
@@ -4106,7 +4128,7 @@ var FileUploadIconFlat = function () {
|
|
|
4106
4128
|
var SendButton = function (_a) {
|
|
4107
4129
|
var sendMessage = _a.sendMessage;
|
|
4108
4130
|
var t = useTranslationContext('SendButton').t;
|
|
4109
|
-
return (React__default['default'].createElement("button", { className: 'str-chat__send-button', onClick: sendMessage },
|
|
4131
|
+
return (React__default['default'].createElement("button", { "aria-label": 'Send', className: 'str-chat__send-button', onClick: sendMessage },
|
|
4110
4132
|
React__default['default'].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
4111
4133
|
React__default['default'].createElement("title", null, t('Send')),
|
|
4112
4134
|
React__default['default'].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' }))));
|
|
@@ -4132,7 +4154,8 @@ var UploadsPreview = function () {
|
|
|
4132
4154
|
}
|
|
4133
4155
|
}, [device, numberOfUploads, text]);
|
|
4134
4156
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
4135
|
-
imageOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.ImagePreviewer, { disabled:
|
|
4157
|
+
imageOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.ImagePreviewer, { disabled: !multipleUploads ||
|
|
4158
|
+
(maxNumberOfFiles !== undefined && numberOfUploads >= maxNumberOfFiles), handleFiles: uploadNewFiles, handleRemove: removeImage, handleRetry: uploadImage, imageUploads: imagesToPreview, multiple: multipleUploads })),
|
|
4136
4159
|
fileOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.FilePreviewer, { handleFiles: uploadNewFiles, handleRemove: removeFile, handleRetry: uploadFile, uploads: filesToPreview }))));
|
|
4137
4160
|
};
|
|
4138
4161
|
|
|
@@ -4142,32 +4165,34 @@ var UnMemoizedChatAutoComplete = function (props) {
|
|
|
4142
4165
|
var messageInput = useMessageInputContext('ChatAutoComplete');
|
|
4143
4166
|
var cooldownRemaining = messageInput.cooldownRemaining, disabled = messageInput.disabled, emojiIndex = messageInput.emojiIndex, innerRef = messageInput.textareaRef;
|
|
4144
4167
|
var placeholder = props.placeholder || t('Type your message');
|
|
4145
|
-
var emojiReplace =
|
|
4146
|
-
var
|
|
4147
|
-
|
|
4148
|
-
.
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4168
|
+
var emojiReplace = props.wordReplace
|
|
4169
|
+
? function (word) { var _a; return (_a = props.wordReplace) === null || _a === void 0 ? void 0 : _a.call(props, word, emojiIndex); }
|
|
4170
|
+
: function (word) {
|
|
4171
|
+
var found = (emojiIndex === null || emojiIndex === void 0 ? void 0 : emojiIndex.search(word)) || [];
|
|
4172
|
+
var emoji = found
|
|
4173
|
+
.filter(Boolean)
|
|
4174
|
+
.slice(0, 10)
|
|
4175
|
+
.find(function (_a) {
|
|
4176
|
+
var emoticons = _a.emoticons;
|
|
4177
|
+
return !!(emoticons === null || emoticons === void 0 ? void 0 : emoticons.includes(word));
|
|
4178
|
+
});
|
|
4179
|
+
if (!emoji || !('native' in emoji))
|
|
4180
|
+
return null;
|
|
4181
|
+
return emoji.native;
|
|
4182
|
+
};
|
|
4158
4183
|
var updateInnerRef = React.useCallback(function (ref) {
|
|
4159
4184
|
if (innerRef) {
|
|
4160
4185
|
innerRef.current = ref;
|
|
4161
4186
|
}
|
|
4162
4187
|
}, [innerRef]);
|
|
4163
|
-
return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, className: 'str-chat__textarea__textarea', closeCommandsList: messageInput.closeCommandsList, closeMentionsList: messageInput.closeMentionsList, containerClassName: 'str-chat__textarea', disabled: disabled || !!cooldownRemaining, disableMentions: messageInput.disableMentions, dropdownClassName: 'str-chat__emojisearch', grow: messageInput.grow, handleSubmit: props.handleSubmit || messageInput.handleSubmit, innerRef: updateInnerRef, itemClassName: 'str-chat__emojisearch__item', keycodeSubmitKeys: messageInput.keycodeSubmitKeys, listClassName: 'str-chat__emojisearch__list', loadingComponent: LoadingIndicator, maxRows: messageInput.maxRows, minChar: 0, onChange: props.onChange || messageInput.handleChange, onFocus: props.onFocus, onPaste: props.onPaste || messageInput.onPaste, placeholder: cooldownRemaining ? t('Slow Mode ON') : placeholder, replaceWord: emojiReplace, rows: props.rows || 1, showCommandsList: messageInput.showCommandsList, showMentionsList: messageInput.showMentionsList, SuggestionItem: SuggestionItem, SuggestionList: SuggestionList, trigger: messageInput.autocompleteTriggers || {}, value: props.value || messageInput.text }));
|
|
4188
|
+
return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, "aria-label": cooldownRemaining ? t('Slow Mode ON') : placeholder, className: 'str-chat__textarea__textarea', closeCommandsList: messageInput.closeCommandsList, closeMentionsList: messageInput.closeMentionsList, containerClassName: 'str-chat__textarea', disabled: disabled || !!cooldownRemaining, disableMentions: messageInput.disableMentions, dropdownClassName: 'str-chat__emojisearch', grow: messageInput.grow, handleSubmit: props.handleSubmit || messageInput.handleSubmit, innerRef: updateInnerRef, itemClassName: 'str-chat__emojisearch__item', keycodeSubmitKeys: messageInput.keycodeSubmitKeys, listClassName: 'str-chat__emojisearch__list', loadingComponent: LoadingIndicator, maxRows: messageInput.maxRows, minChar: 0, onChange: props.onChange || messageInput.handleChange, onFocus: props.onFocus, onPaste: props.onPaste || messageInput.onPaste, placeholder: cooldownRemaining ? t('Slow Mode ON') : placeholder, replaceWord: emojiReplace, rows: props.rows || 1, showCommandsList: messageInput.showCommandsList, showMentionsList: messageInput.showMentionsList, SuggestionItem: SuggestionItem, SuggestionList: SuggestionList, trigger: messageInput.autocompleteTriggers || {}, value: props.value || messageInput.text }));
|
|
4164
4189
|
};
|
|
4165
4190
|
var ChatAutoComplete = React__default['default'].memo(UnMemoizedChatAutoComplete);
|
|
4166
4191
|
|
|
4167
4192
|
var EditMessageForm = function () {
|
|
4168
4193
|
var _a = useChannelStateContext('EditMessageForm'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
|
|
4169
4194
|
var t = useTranslationContext('EditMessageForm').t;
|
|
4170
|
-
var _b = useMessageInputContext('EditMessageForm'), clearEditingState = _b.clearEditingState, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
|
|
4195
|
+
var _b = useMessageInputContext('EditMessageForm'), clearEditingState = _b.clearEditingState, closeEmojiPicker = _b.closeEmojiPicker, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
|
|
4171
4196
|
var _c = useComponentContext('EditMessageForm'), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
|
|
4172
4197
|
React.useEffect(function () {
|
|
4173
4198
|
var onKeyDown = function (event) {
|
|
@@ -4185,7 +4210,7 @@ var EditMessageForm = function () {
|
|
|
4185
4210
|
React__default['default'].createElement(ChatAutoComplete, null),
|
|
4186
4211
|
React__default['default'].createElement("div", { className: 'str-chat__message-team-form-footer' },
|
|
4187
4212
|
React__default['default'].createElement("div", { className: 'str-chat__edit-message-form-options' },
|
|
4188
|
-
React__default['default'].createElement("
|
|
4213
|
+
React__default['default'].createElement("button", { "aria-label": 'Open Emoji Picker', className: 'str-chat__input-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker },
|
|
4189
4214
|
React__default['default'].createElement(EmojiIcon, null)),
|
|
4190
4215
|
isUploadEnabled && (React__default['default'].createElement("div", { className: 'str-chat__fileupload-wrapper', "data-testid": 'fileinput' },
|
|
4191
4216
|
React__default['default'].createElement(Tooltip, null, maxFilesLeft
|
|
@@ -4472,7 +4497,7 @@ var useFileUploads = function (props, state, dispatch) {
|
|
|
4472
4497
|
};
|
|
4473
4498
|
|
|
4474
4499
|
var apiMaxNumberOfFiles = 10;
|
|
4475
|
-
var useAttachments = function (props, state, dispatch) {
|
|
4500
|
+
var useAttachments = function (props, state, dispatch, textareaRef) {
|
|
4476
4501
|
var noFiles = props.noFiles;
|
|
4477
4502
|
var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
|
|
4478
4503
|
var _a = useChannelStateContext('useAttachments'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
|
|
@@ -4493,6 +4518,7 @@ var useAttachments = function (props, state, dispatch) {
|
|
|
4493
4518
|
var numberOfUploads = numberOfImages + numberOfFiles;
|
|
4494
4519
|
var maxFilesLeft = maxFilesAllowed - numberOfUploads;
|
|
4495
4520
|
var uploadNewFiles = React.useCallback(function (files) {
|
|
4521
|
+
var _a;
|
|
4496
4522
|
Array.from(files)
|
|
4497
4523
|
.slice(0, maxFilesLeft)
|
|
4498
4524
|
.forEach(function (file) {
|
|
@@ -4506,6 +4532,7 @@ var useAttachments = function (props, state, dispatch) {
|
|
|
4506
4532
|
dispatch({ file: file, id: id, state: 'uploading', type: 'setFileUpload' });
|
|
4507
4533
|
}
|
|
4508
4534
|
});
|
|
4535
|
+
(_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4509
4536
|
}, [maxFilesLeft, noFiles]);
|
|
4510
4537
|
return {
|
|
4511
4538
|
maxFilesLeft: maxFilesLeft,
|
|
@@ -4588,9 +4615,10 @@ var useMessageInputText = function (props, state, dispatch) {
|
|
|
4588
4615
|
};
|
|
4589
4616
|
};
|
|
4590
4617
|
|
|
4591
|
-
var useEmojiPicker = function (state, dispatch, insertText) {
|
|
4618
|
+
var useEmojiPicker = function (state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick) {
|
|
4592
4619
|
var emojiPickerRef = React.useRef(null);
|
|
4593
4620
|
var closeEmojiPicker = React.useCallback(function (event) {
|
|
4621
|
+
event.preventDefault();
|
|
4594
4622
|
if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
|
|
4595
4623
|
dispatch({
|
|
4596
4624
|
type: 'setEmojiPickerIsOpen',
|
|
@@ -4599,6 +4627,7 @@ var useEmojiPicker = function (state, dispatch, insertText) {
|
|
|
4599
4627
|
}
|
|
4600
4628
|
}, [emojiPickerRef]);
|
|
4601
4629
|
var openEmojiPicker = React.useCallback(function (event) {
|
|
4630
|
+
event.preventDefault();
|
|
4602
4631
|
dispatch({
|
|
4603
4632
|
type: 'setEmojiPickerIsOpen',
|
|
4604
4633
|
value: true,
|
|
@@ -4634,9 +4663,17 @@ var useEmojiPicker = function (state, dispatch, insertText) {
|
|
|
4634
4663
|
document.removeEventListener('keydown', handleEmojiEscape);
|
|
4635
4664
|
};
|
|
4636
4665
|
}, [closeEmojiPicker, state.emojiPickerIsOpen]);
|
|
4637
|
-
var onSelectEmoji = React.useCallback(function (emoji) {
|
|
4638
|
-
|
|
4639
|
-
|
|
4666
|
+
var onSelectEmoji = React.useCallback(function (emoji) {
|
|
4667
|
+
var _a;
|
|
4668
|
+
insertText(emoji.native);
|
|
4669
|
+
if (closeEmojiPickerOnClick) {
|
|
4670
|
+
dispatch({
|
|
4671
|
+
type: 'setEmojiPickerIsOpen',
|
|
4672
|
+
value: false,
|
|
4673
|
+
});
|
|
4674
|
+
}
|
|
4675
|
+
(_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4676
|
+
}, [insertText]);
|
|
4640
4677
|
return {
|
|
4641
4678
|
closeEmojiPicker: closeEmojiPicker,
|
|
4642
4679
|
emojiPickerRef: emojiPickerRef,
|
|
@@ -4958,7 +4995,7 @@ var messageInputReducer = function (state, action) {
|
|
|
4958
4995
|
* hook for MessageInput state
|
|
4959
4996
|
*/
|
|
4960
4997
|
var useMessageInputState = function (props) {
|
|
4961
|
-
var message = props.message;
|
|
4998
|
+
var closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, message = props.message;
|
|
4962
4999
|
var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
|
|
4963
5000
|
var _c = React.useReducer(messageInputReducer, message, initState), state = _c[0], dispatch = _c[1];
|
|
4964
5001
|
var _d = useMessageInputText(props, state, dispatch), handleChange = _d.handleChange, insertText = _d.insertText, textareaRef = _d.textareaRef;
|
|
@@ -4974,14 +5011,14 @@ var useMessageInputState = function (props) {
|
|
|
4974
5011
|
var closeCommandsList = function () { return setShowCommandsList(false); };
|
|
4975
5012
|
var openMentionsList = function () {
|
|
4976
5013
|
dispatch({
|
|
4977
|
-
getNewText: function () { return '@'; },
|
|
5014
|
+
getNewText: function (currentText) { return currentText + '@'; },
|
|
4978
5015
|
type: 'setText',
|
|
4979
5016
|
});
|
|
4980
5017
|
setShowMentionsList(true);
|
|
4981
5018
|
};
|
|
4982
5019
|
var closeMentionsList = function () { return setShowMentionsList(false); };
|
|
4983
|
-
var _g = useEmojiPicker(state, dispatch, insertText), closeEmojiPicker = _g.closeEmojiPicker, emojiPickerRef = _g.emojiPickerRef, handleEmojiKeyDown = _g.handleEmojiKeyDown, onSelectEmoji = _g.onSelectEmoji, openEmojiPicker = _g.openEmojiPicker;
|
|
4984
|
-
var _h = useAttachments(props, state, dispatch), maxFilesLeft = _h.maxFilesLeft, numberOfUploads = _h.numberOfUploads, removeFile = _h.removeFile, removeImage = _h.removeImage, uploadFile = _h.uploadFile, uploadImage = _h.uploadImage, uploadNewFiles = _h.uploadNewFiles;
|
|
5020
|
+
var _g = useEmojiPicker(state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick), closeEmojiPicker = _g.closeEmojiPicker, emojiPickerRef = _g.emojiPickerRef, handleEmojiKeyDown = _g.handleEmojiKeyDown, onSelectEmoji = _g.onSelectEmoji, openEmojiPicker = _g.openEmojiPicker;
|
|
5021
|
+
var _h = useAttachments(props, state, dispatch, textareaRef), maxFilesLeft = _h.maxFilesLeft, numberOfUploads = _h.numberOfUploads, removeFile = _h.removeFile, removeImage = _h.removeImage, uploadFile = _h.uploadFile, uploadImage = _h.uploadImage, uploadNewFiles = _h.uploadNewFiles;
|
|
4985
5022
|
var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads).handleSubmit;
|
|
4986
5023
|
var onPaste = usePasteHandler(uploadNewFiles, insertText).onPaste;
|
|
4987
5024
|
var isUploadEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.uploads) !== false && channelCapabilities['upload-file'] !== false;
|
|
@@ -5004,15 +5041,16 @@ var QuotedMessagePreviewHeader = function () {
|
|
|
5004
5041
|
var t = useTranslationContext('QuotedMessagePreview').t;
|
|
5005
5042
|
return (React__default['default'].createElement("div", { className: 'quoted-message-preview-header' },
|
|
5006
5043
|
React__default['default'].createElement("div", null, t('Reply to Message')),
|
|
5007
|
-
React__default['default'].createElement("button", { className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
|
|
5044
|
+
React__default['default'].createElement("button", { "aria-label": 'Cancel Reply', className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
|
|
5008
5045
|
React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
|
|
5009
5046
|
React__default['default'].createElement("path", { d: 'M9.916 1.027L8.973.084 5 4.058 1.027.084l-.943.943L4.058 5 .084 8.973l.943.943L5 5.942l3.973 3.974.943-.943L5.942 5z', fillRule: 'evenodd' })))));
|
|
5010
5047
|
};
|
|
5011
5048
|
var QuotedMessagePreview = function (props) {
|
|
5012
5049
|
var _a;
|
|
5013
5050
|
var quotedMessage = props.quotedMessage;
|
|
5014
|
-
var
|
|
5051
|
+
var _b = useComponentContext('QuotedMessagePreview'), Attachment = _b.Attachment, ContextAvatar = _b.Avatar;
|
|
5015
5052
|
var userLanguage = useTranslationContext('QuotedMessagePreview').userLanguage;
|
|
5053
|
+
var Avatar$1 = ContextAvatar || Avatar;
|
|
5016
5054
|
var quotedMessageText = ((_a = quotedMessage.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) ||
|
|
5017
5055
|
quotedMessage.text;
|
|
5018
5056
|
// @ts-expect-error
|
|
@@ -5025,7 +5063,7 @@ var QuotedMessagePreview = function (props) {
|
|
|
5025
5063
|
return (React__default['default'].createElement("div", { className: 'quoted-message-preview' },
|
|
5026
5064
|
React__default['default'].createElement(QuotedMessagePreviewHeader, null),
|
|
5027
5065
|
React__default['default'].createElement("div", { className: 'quoted-message-preview-content' },
|
|
5028
|
-
quotedMessage.user && (React__default['default'].createElement(Avatar, { image: quotedMessage.user.image, name: quotedMessage.user.name || quotedMessage.user.id, size: 20, user: quotedMessage.user })),
|
|
5066
|
+
quotedMessage.user && (React__default['default'].createElement(Avatar$1, { image: quotedMessage.user.image, name: quotedMessage.user.name || quotedMessage.user.id, size: 20, user: quotedMessage.user })),
|
|
5029
5067
|
React__default['default'].createElement("div", { className: 'quoted-message-preview-content-inner' },
|
|
5030
5068
|
quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
|
|
5031
5069
|
React__default['default'].createElement("div", null, quotedMessageText)))));
|
|
@@ -5034,17 +5072,17 @@ var QuotedMessagePreview = function (props) {
|
|
|
5034
5072
|
var MessageInputFlat = function () {
|
|
5035
5073
|
var _a = useChannelStateContext('MessageInputFlat'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
|
|
5036
5074
|
var t = useTranslationContext('MessageInputFlat').t;
|
|
5037
|
-
var _b = useMessageInputContext('MessageInputFlat'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen,
|
|
5075
|
+
var _b = useMessageInputContext('MessageInputFlat'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
|
|
5038
5076
|
var _c = useComponentContext('MessageInputFlat'), _d = _c.CooldownTimer, CooldownTimer$1 = _d === void 0 ? CooldownTimer : _d, _e = _c.EmojiIcon, EmojiIcon = _e === void 0 ? EmojiIconLarge : _e, _f = _c.FileUploadIcon, FileUploadIcon = _f === void 0 ? FileUploadIconFlat : _f, _g = _c.QuotedMessagePreview, QuotedMessagePreview$1 = _g === void 0 ? QuotedMessagePreview : _g, _h = _c.SendButton, SendButton$1 = _h === void 0 ? SendButton : _h;
|
|
5039
|
-
return (React__default['default'].createElement("div", { className: "str-chat__input-flat " + (SendButton$1 ? 'str-chat__input-flat--send-button-active' : null) + " " + (quotedMessage ? 'str-chat__input-flat-quoted' : null) },
|
|
5077
|
+
return (React__default['default'].createElement("div", { className: "str-chat__input-flat " + (SendButton$1 ? 'str-chat__input-flat--send-button-active' : null) + " " + (quotedMessage && !quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : null) },
|
|
5040
5078
|
React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
|
|
5041
|
-
quotedMessage && React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage }),
|
|
5079
|
+
quotedMessage && !quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
|
|
5042
5080
|
React__default['default'].createElement("div", { className: 'str-chat__input-flat-wrapper' },
|
|
5043
5081
|
React__default['default'].createElement("div", { className: 'str-chat__input-flat--textarea-wrapper' },
|
|
5044
5082
|
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5045
5083
|
React__default['default'].createElement("div", { className: 'str-chat__emojiselect-wrapper' },
|
|
5046
5084
|
React__default['default'].createElement(Tooltip, null, emojiPickerIsOpen ? t('Close emoji picker') : t('Open emoji picker')),
|
|
5047
|
-
React__default['default'].createElement("
|
|
5085
|
+
React__default['default'].createElement("button", { "aria-label": 'Emoji picker', className: 'str-chat__input-flat-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker }, cooldownRemaining ? (React__default['default'].createElement("div", { className: 'str-chat__input-flat-cooldown' },
|
|
5048
5086
|
React__default['default'].createElement(CooldownTimer$1, { cooldownInterval: cooldownInterval, setCooldownRemaining: setCooldownRemaining }))) : (React__default['default'].createElement(EmojiIcon, null)))),
|
|
5049
5087
|
React__default['default'].createElement(EmojiPicker, null),
|
|
5050
5088
|
React__default['default'].createElement(ChatAutoComplete, null),
|
|
@@ -5180,13 +5218,14 @@ var UnMemoizedMessageInput = function (props) {
|
|
|
5180
5218
|
var MessageInput = React__default['default'].memo(UnMemoizedMessageInput);
|
|
5181
5219
|
|
|
5182
5220
|
var MessageInputSmall = function () {
|
|
5183
|
-
var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
|
|
5221
|
+
var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
|
|
5184
5222
|
var t = useTranslationContext('MessageInputSmall').t;
|
|
5185
|
-
var _b = useMessageInputContext('MessageInputSmall'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen,
|
|
5186
|
-
var _c = useComponentContext('MessageInputSmall'), _d = _c.CooldownTimer, CooldownTimer$1 = _d === void 0 ? CooldownTimer : _d, _e = _c.EmojiIcon, EmojiIcon = _e === void 0 ? EmojiIconSmall : _e, _f = _c.FileUploadIcon, FileUploadIcon = _f === void 0 ? FileUploadIconFlat : _f, _g = _c.SendButton, SendButton$1 = _g === void 0 ? SendButton : _g;
|
|
5223
|
+
var _b = useMessageInputContext('MessageInputSmall'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
|
|
5224
|
+
var _c = useComponentContext('MessageInputSmall'), _d = _c.CooldownTimer, CooldownTimer$1 = _d === void 0 ? CooldownTimer : _d, _e = _c.EmojiIcon, EmojiIcon = _e === void 0 ? EmojiIconSmall : _e, _f = _c.FileUploadIcon, FileUploadIcon = _f === void 0 ? FileUploadIconFlat : _f, _g = _c.SendButton, SendButton$1 = _g === void 0 ? SendButton : _g, _h = _c.QuotedMessagePreview, QuotedMessagePreview$1 = _h === void 0 ? QuotedMessagePreview : _h;
|
|
5187
5225
|
return (React__default['default'].createElement("div", { className: 'str-chat__small-message-input__wrapper' },
|
|
5188
5226
|
React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
|
|
5189
|
-
React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) },
|
|
5227
|
+
React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) + " " + (quotedMessage && quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : null) },
|
|
5228
|
+
quotedMessage && quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
|
|
5190
5229
|
React__default['default'].createElement("div", { className: 'str-chat__small-message-input--textarea-wrapper' },
|
|
5191
5230
|
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5192
5231
|
React__default['default'].createElement(ChatAutoComplete, null),
|
|
@@ -5201,7 +5240,7 @@ var MessageInputSmall = function () {
|
|
|
5201
5240
|
React__default['default'].createElement(FileUploadIcon, null))))),
|
|
5202
5241
|
React__default['default'].createElement("div", { className: 'str-chat__emojiselect-wrapper' },
|
|
5203
5242
|
React__default['default'].createElement(Tooltip, null, emojiPickerIsOpen ? t('Close emoji picker') : t('Open emoji picker')),
|
|
5204
|
-
React__default['default'].createElement("
|
|
5243
|
+
React__default['default'].createElement("button", { "aria-label": 'Emoji picker', className: 'str-chat__small-message-input-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker },
|
|
5205
5244
|
React__default['default'].createElement(EmojiIcon, null))))),
|
|
5206
5245
|
React__default['default'].createElement(EmojiPicker, { small: true })),
|
|
5207
5246
|
!cooldownRemaining && React__default['default'].createElement(SendButton$1, { sendMessage: handleSubmit })))));
|
|
@@ -5228,38 +5267,6 @@ var MML = function (props) {
|
|
|
5228
5267
|
React__default['default'].createElement(MMLReact, { className: "mml-align-" + align, Loading: null, onSubmit: actionHandler, source: source, Success: null, theme: (theme || '').replace(' ', '-') })));
|
|
5229
5268
|
};
|
|
5230
5269
|
|
|
5231
|
-
var Modal = function (props) {
|
|
5232
|
-
var children = props.children, onClose = props.onClose, open = props.open;
|
|
5233
|
-
var t = useTranslationContext('Modal').t;
|
|
5234
|
-
var innerRef = React.useRef(null);
|
|
5235
|
-
var handleClick = function (event) {
|
|
5236
|
-
var _a;
|
|
5237
|
-
if (event.target instanceof HTMLDivElement &&
|
|
5238
|
-
!((_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
|
|
5239
|
-
onClose) {
|
|
5240
|
-
onClose();
|
|
5241
|
-
}
|
|
5242
|
-
};
|
|
5243
|
-
React.useEffect(function () {
|
|
5244
|
-
if (!open)
|
|
5245
|
-
return function () { return null; };
|
|
5246
|
-
var handleEscKey = function (event) {
|
|
5247
|
-
if (event instanceof KeyboardEvent && event.key === 'Escape' && onClose) {
|
|
5248
|
-
onClose();
|
|
5249
|
-
}
|
|
5250
|
-
};
|
|
5251
|
-
document.addEventListener('keypress', handleEscKey);
|
|
5252
|
-
return function () { return document.removeEventListener('keypress', handleEscKey); };
|
|
5253
|
-
}, [onClose, open]);
|
|
5254
|
-
var openClasses = open ? 'str-chat__modal--open' : 'str-chat__modal--closed';
|
|
5255
|
-
return (React__default['default'].createElement("div", { className: "str-chat__modal " + openClasses, onClick: handleClick },
|
|
5256
|
-
React__default['default'].createElement("div", { className: 'str-chat__modal__close-button' },
|
|
5257
|
-
t('Close'),
|
|
5258
|
-
React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
|
|
5259
|
-
React__default['default'].createElement("path", { d: 'M9.916 1.027L8.973.084 5 4.058 1.027.084l-.943.943L4.058 5 .084 8.973l.943.943L5 5.942l3.973 3.974.943-.943L5.942 5z', fillRule: 'evenodd' }))),
|
|
5260
|
-
React__default['default'].createElement("div", { className: 'str-chat__modal__inner', ref: innerRef }, children)));
|
|
5261
|
-
};
|
|
5262
|
-
|
|
5263
5270
|
var isMutableRef = function (ref) {
|
|
5264
5271
|
if (ref) {
|
|
5265
5272
|
return ref.current !== undefined;
|
|
@@ -5337,12 +5344,13 @@ var UnMemoizedReactionSelector = React__default['default'].forwardRef(function (
|
|
|
5337
5344
|
React__default['default'].createElement("ul", { className: 'str-chat__message-reactions-list' }, reactionOptions.map(function (reactionOption) {
|
|
5338
5345
|
var latestUser = getLatestUserForReactionType(reactionOption.id);
|
|
5339
5346
|
var count = reactionCounts && reactionCounts[reactionOption.id];
|
|
5340
|
-
return (React__default['default'].createElement("li", {
|
|
5341
|
-
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
React__default['default'].createElement(
|
|
5345
|
-
|
|
5347
|
+
return (React__default['default'].createElement("li", { key: "item-" + reactionOption.id },
|
|
5348
|
+
React__default['default'].createElement("button", { "aria-label": "Select Reaction: " + reactionOption.name, className: 'str-chat__message-reactions-list-item', "data-text": reactionOption.id, onClick: function (event) { return handleReaction(reactionOption.id, event); } },
|
|
5349
|
+
!!count && detailedView && (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
5350
|
+
React__default['default'].createElement("div", { className: 'latest-user', onClick: hideTooltip, onMouseEnter: function (e) { return showTooltip(e, reactionOption.id); }, onMouseLeave: hideTooltip }, latestUser ? (React__default['default'].createElement(Avatar$1, { image: latestUser.image, name: latestUser.name, size: 20, user: latestUser })) : (React__default['default'].createElement("div", { className: 'latest-user-not-found' }))))),
|
|
5351
|
+
React__default['default'].createElement(React.Suspense, { fallback: null },
|
|
5352
|
+
React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: reactionOption, size: 20 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
|
|
5353
|
+
Boolean(count) && detailedView && (React__default['default'].createElement("span", { className: 'str-chat__message-reactions-list-item__count' }, count || '')))));
|
|
5346
5354
|
}))));
|
|
5347
5355
|
});
|
|
5348
5356
|
/**
|
|
@@ -5392,14 +5400,15 @@ var UnMemoizedReactionsList = function (props) {
|
|
|
5392
5400
|
var supportedReactionsArePresent = messageReactionTypes.some(function (type) { return supportedReactionMap[type]; });
|
|
5393
5401
|
if (!supportedReactionsArePresent)
|
|
5394
5402
|
return null;
|
|
5395
|
-
return (React__default['default'].createElement("div", { className: "str-chat__reaction-list " + (reverse ? 'str-chat__reaction-list--reverse' : ''), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick },
|
|
5403
|
+
return (React__default['default'].createElement("div", { "aria-label": 'Reaction list', className: "str-chat__reaction-list " + (reverse ? 'str-chat__reaction-list--reverse' : ''), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick, onKeyPress: onClick || onReactionListClick, role: 'figure' },
|
|
5396
5404
|
React__default['default'].createElement("ul", null,
|
|
5397
5405
|
messageReactionTypes.map(function (reactionType) {
|
|
5398
5406
|
var emojiObject = getEmojiByReactionType(reactionType);
|
|
5399
5407
|
return emojiObject ? (React__default['default'].createElement("li", { key: emojiObject.id },
|
|
5400
|
-
React__default['default'].createElement(
|
|
5401
|
-
React__default['default'].createElement(
|
|
5402
|
-
|
|
5408
|
+
React__default['default'].createElement("button", { "aria-label": "Reactions: " + reactionType },
|
|
5409
|
+
React__default['default'].createElement(React.Suspense, { fallback: null },
|
|
5410
|
+
React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 16 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
|
|
5411
|
+
"\u00A0"))) : null;
|
|
5403
5412
|
}),
|
|
5404
5413
|
React__default['default'].createElement("li", null,
|
|
5405
5414
|
React__default['default'].createElement("span", { className: 'str-chat__reaction-list--counter' }, getTotalReactionCount())))));
|
|
@@ -5468,7 +5477,7 @@ var UnMemoizedSimpleReactionsList = function (props) {
|
|
|
5468
5477
|
messageReactionTypes.map(function (reactionType, i) {
|
|
5469
5478
|
var _a;
|
|
5470
5479
|
var emojiObject = getEmojiByReactionType(reactionType);
|
|
5471
|
-
return emojiObject ? (React__default['default'].createElement("li", { className: 'str-chat__simple-reactions-list-item', key: emojiObject.id + "-" + i, onClick: function (event) { return handleReaction(reactionType, event); } },
|
|
5480
|
+
return emojiObject ? (React__default['default'].createElement("li", { className: 'str-chat__simple-reactions-list-item', key: emojiObject.id + "-" + i, onClick: function (event) { return handleReaction(reactionType, event); }, onKeyPress: function (event) { return handleReaction(reactionType, event); } },
|
|
5472
5481
|
React__default['default'].createElement("span", { onMouseEnter: function () { return setTooltipReactionType(reactionType); } },
|
|
5473
5482
|
React__default['default'].createElement(React.Suspense, { fallback: null },
|
|
5474
5483
|
React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 13 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
|
|
@@ -5504,6 +5513,8 @@ var MessageSimpleWithContext = function (props) {
|
|
|
5504
5513
|
React__default['default'].createElement(MessageStatus$1, null),
|
|
5505
5514
|
message.user && (React__default['default'].createElement(Avatar$1, { image: message.user.image, name: message.user.name || message.user.id, onClick: onUserClick, onMouseOver: onUserHover, user: message.user })),
|
|
5506
5515
|
React__default['default'].createElement("div", { className: 'str-chat__message-inner', "data-testid": 'message-inner', onClick: message.status === 'failed' && message.errorStatusCode !== 403
|
|
5516
|
+
? function () { return handleRetry(message); }
|
|
5517
|
+
: undefined, onKeyPress: message.status === 'failed' && message.errorStatusCode !== 403
|
|
5507
5518
|
? function () { return handleRetry(message); }
|
|
5508
5519
|
: undefined },
|
|
5509
5520
|
React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
@@ -5823,7 +5834,7 @@ var ChannelInner = function (props) {
|
|
|
5823
5834
|
return id;
|
|
5824
5835
|
})
|
|
5825
5836
|
: mentioned_users;
|
|
5826
|
-
messageData = __assign({ attachments: attachments, id: id, mentioned_users: mentions, parent_id: parent_id, quoted_message_id: quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.id, text: text }, customMessageData);
|
|
5837
|
+
messageData = __assign({ attachments: attachments, id: id, mentioned_users: mentions, parent_id: parent_id, quoted_message_id: parent_id === (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.parent_id) ? quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.id : undefined, text: text }, customMessageData);
|
|
5827
5838
|
_b.label = 1;
|
|
5828
5839
|
case 1:
|
|
5829
5840
|
_b.trys.push([1, 6, , 7]);
|
|
@@ -5842,7 +5853,7 @@ var ChannelInner = function (props) {
|
|
|
5842
5853
|
if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
|
|
5843
5854
|
updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
|
|
5844
5855
|
}
|
|
5845
|
-
if (quotedMessage)
|
|
5856
|
+
if (quotedMessage && parent_id === (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.parent_id))
|
|
5846
5857
|
setQuotedMessage(undefined);
|
|
5847
5858
|
return [3 /*break*/, 7];
|
|
5848
5859
|
case 6:
|
|
@@ -5900,6 +5911,14 @@ var ChannelInner = function (props) {
|
|
|
5900
5911
|
/** THREAD */
|
|
5901
5912
|
var openThread = function (message, event) {
|
|
5902
5913
|
event.preventDefault();
|
|
5914
|
+
setQuotedMessage(function (current) {
|
|
5915
|
+
if ((current === null || current === void 0 ? void 0 : current.parent_id) !== (message === null || message === void 0 ? void 0 : message.parent_id)) {
|
|
5916
|
+
return undefined;
|
|
5917
|
+
}
|
|
5918
|
+
else {
|
|
5919
|
+
return current;
|
|
5920
|
+
}
|
|
5921
|
+
});
|
|
5903
5922
|
dispatch({ channel: channel, message: message, type: 'openThread' });
|
|
5904
5923
|
};
|
|
5905
5924
|
var closeThread = function (event) {
|
|
@@ -6069,7 +6088,7 @@ var UnMemoizedChannelHeader = function (props) {
|
|
|
6069
6088
|
var _c = (channel === null || channel === void 0 ? void 0 : channel.data) || {}, channelImage = _c.image, member_count = _c.member_count, name = _c.name, subtitle = _c.subtitle;
|
|
6070
6089
|
var image = propImage || channelImage;
|
|
6071
6090
|
return (React__default['default'].createElement("div", { className: 'str-chat__header-livestream' },
|
|
6072
|
-
React__default['default'].createElement("
|
|
6091
|
+
React__default['default'].createElement("button", { "aria-label": 'Menu', className: 'str-chat__header-hamburger', onClick: openMobileNav },
|
|
6073
6092
|
React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' }),
|
|
6074
6093
|
React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' }),
|
|
6075
6094
|
React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' })),
|
|
@@ -6102,9 +6121,9 @@ var UnMemoizedChatDown = function (props) {
|
|
|
6102
6121
|
return (React__default['default'].createElement("div", { className: 'str-chat__down' },
|
|
6103
6122
|
React__default['default'].createElement(LoadingChannels, null),
|
|
6104
6123
|
React__default['default'].createElement("div", { className: 'str-chat__down-main' },
|
|
6105
|
-
React__default['default'].createElement("img", { "data-testid": 'chatdown-img', src: image || img }),
|
|
6124
|
+
React__default['default'].createElement("img", { alt: 'Connection error', "data-testid": 'chatdown-img', src: image || img }),
|
|
6106
6125
|
React__default['default'].createElement("h1", null, type),
|
|
6107
|
-
React__default['default'].createElement("h3",
|
|
6126
|
+
React__default['default'].createElement("h3", { "aria-live": 'assertive' }, text || t('Error connecting to chat, refresh the page to try again.')))));
|
|
6108
6127
|
};
|
|
6109
6128
|
/**
|
|
6110
6129
|
* A simple indicator that chat functionality isn't available, triggered when the Chat API is unavailable or your network isn't working.
|
|
@@ -6123,7 +6142,7 @@ var ChannelListMessenger = function (props) {
|
|
|
6123
6142
|
return React__default['default'].createElement(LoadingIndicator, null);
|
|
6124
6143
|
}
|
|
6125
6144
|
return (React__default['default'].createElement("div", { className: 'str-chat__channel-list-messenger' },
|
|
6126
|
-
React__default['default'].createElement("div", { className: 'str-chat__channel-list-messenger__main' }, children)));
|
|
6145
|
+
React__default['default'].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main', role: 'listbox' }, children)));
|
|
6127
6146
|
};
|
|
6128
6147
|
|
|
6129
6148
|
var useChannelDeletedListener = function (setChannels, customHandler) {
|
|
@@ -6200,10 +6219,11 @@ var useChannelUpdatedListener = function (setChannels, customHandler, forceUpdat
|
|
|
6200
6219
|
React.useEffect(function () {
|
|
6201
6220
|
var handleEvent = function (event) {
|
|
6202
6221
|
setChannels(function (channels) {
|
|
6222
|
+
var _a, _b, _c, _d, _e, _f;
|
|
6203
6223
|
var channelIndex = channels.findIndex(function (channel) { var _a; return channel.cid === ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.cid); });
|
|
6204
6224
|
if (channelIndex > -1 && event.channel) {
|
|
6205
6225
|
var newChannels = channels;
|
|
6206
|
-
newChannels[channelIndex].data = event.channel;
|
|
6226
|
+
newChannels[channelIndex].data = __assign(__assign({}, event.channel), { hidden: (_b = (_a = event.channel) === null || _a === void 0 ? void 0 : _a.hidden) !== null && _b !== void 0 ? _b : (_c = newChannels[channelIndex].data) === null || _c === void 0 ? void 0 : _c.hidden, own_capabilities: (_e = (_d = event.channel) === null || _d === void 0 ? void 0 : _d.own_capabilities) !== null && _e !== void 0 ? _e : (_f = newChannels[channelIndex].data) === null || _f === void 0 ? void 0 : _f.own_capabilities });
|
|
6207
6227
|
return __spreadArray([], newChannels);
|
|
6208
6228
|
}
|
|
6209
6229
|
return channels;
|
|
@@ -6518,7 +6538,7 @@ var UnMemoizedChannelPreviewMessenger = function (props) {
|
|
|
6518
6538
|
channelPreviewButton.current.blur();
|
|
6519
6539
|
}
|
|
6520
6540
|
};
|
|
6521
|
-
return (React__default['default'].createElement("button", { className: "str-chat__channel-preview-messenger " + unreadClass + " " + activeClass, "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton },
|
|
6541
|
+
return (React__default['default'].createElement("button", { "aria-label": "Select Channel: " + (displayTitle || ''), "aria-selected": active, className: "str-chat__channel-preview-messenger " + unreadClass + " " + activeClass, "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton, role: 'option' },
|
|
6522
6542
|
React__default['default'].createElement("div", { className: 'str-chat__channel-preview-messenger--left' },
|
|
6523
6543
|
React__default['default'].createElement(Avatar$1, { image: displayImage, name: avatarName, size: 40 })),
|
|
6524
6544
|
React__default['default'].createElement("div", { className: 'str-chat__channel-preview-messenger--right' },
|
|
@@ -6661,20 +6681,20 @@ var isChannel = function (output) {
|
|
|
6661
6681
|
|
|
6662
6682
|
var DefaultDropdownContainer = function (props) {
|
|
6663
6683
|
var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
|
|
6664
|
-
return (React__default['default'].createElement(
|
|
6684
|
+
return (React__default['default'].createElement(React__default['default'].Fragment, null, results.map(function (result, index) { return (React__default['default'].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
|
|
6665
6685
|
};
|
|
6666
6686
|
var DefaultSearchResultItem = function (props) {
|
|
6667
|
-
var _a;
|
|
6687
|
+
var _a, _b;
|
|
6668
6688
|
var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
|
|
6669
6689
|
var focused = focusedUser === index;
|
|
6670
6690
|
if (isChannel(result)) {
|
|
6671
6691
|
var channel_1 = result;
|
|
6672
|
-
return (React__default['default'].createElement("
|
|
6692
|
+
return (React__default['default'].createElement("button", { "aria-label": "Select Channel: " + (((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(channel_1); } },
|
|
6673
6693
|
React__default['default'].createElement("div", { className: 'result-hashtag' }, "#"),
|
|
6674
|
-
React__default['default'].createElement("p", { className: 'channel-search__result-text' }, (
|
|
6694
|
+
React__default['default'].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
|
|
6675
6695
|
}
|
|
6676
6696
|
else {
|
|
6677
|
-
return (React__default['default'].createElement("
|
|
6697
|
+
return (React__default['default'].createElement("button", { "aria-label": "Select User Channel: " + (result.name || ''), className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(result); } },
|
|
6678
6698
|
React__default['default'].createElement(Avatar, { image: result.image, user: result }),
|
|
6679
6699
|
result.name || result.id));
|
|
6680
6700
|
}
|
|
@@ -6720,7 +6740,7 @@ var SearchResults = function (props) {
|
|
|
6720
6740
|
return (React__default['default'].createElement(ResultsContainer, null, SearchLoading ? (React__default['default'].createElement(SearchLoading, null)) : (React__default['default'].createElement("div", { className: 'str-chat__channel-search-container-searching' }, t('Searching...')))));
|
|
6721
6741
|
}
|
|
6722
6742
|
if (!results.length) {
|
|
6723
|
-
return (React__default['default'].createElement(ResultsContainer, null, SearchEmpty ? (React__default['default'].createElement(SearchEmpty, null)) : (React__default['default'].createElement("div", { className: 'str-chat__channel-search-container-empty' }, t('No results found')))));
|
|
6743
|
+
return (React__default['default'].createElement(ResultsContainer, null, SearchEmpty ? (React__default['default'].createElement(SearchEmpty, null)) : (React__default['default'].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' }, t('No results found')))));
|
|
6724
6744
|
}
|
|
6725
6745
|
return (React__default['default'].createElement(ResultsContainer, null,
|
|
6726
6746
|
SearchResultsHeader && React__default['default'].createElement(SearchResultsHeader, null),
|
|
@@ -6845,7 +6865,7 @@ var UnMemoizedEmptyStateIndicator = function (props) {
|
|
|
6845
6865
|
var listType = props.listType;
|
|
6846
6866
|
var t = useTranslationContext('EmptyStateIndicator').t;
|
|
6847
6867
|
if (listType === 'channel')
|
|
6848
|
-
return React__default['default'].createElement("p",
|
|
6868
|
+
return React__default['default'].createElement("p", { role: 'listitem' }, t('You have no channels currently'));
|
|
6849
6869
|
if (listType === 'message')
|
|
6850
6870
|
return null;
|
|
6851
6871
|
return React__default['default'].createElement("p", null, "No items exist");
|
|
@@ -6855,7 +6875,7 @@ var EmptyStateIndicator = React__default['default'].memo(UnMemoizedEmptyStateInd
|
|
|
6855
6875
|
var UnMemoizedLoadMoreButton = function (props) {
|
|
6856
6876
|
var _a = props.children, children = _a === void 0 ? 'Load more' : _a, onClick = props.onClick, refreshing = props.refreshing;
|
|
6857
6877
|
return (React__default['default'].createElement("div", { className: 'str-chat__load-more-button' },
|
|
6858
|
-
React__default['default'].createElement("button", { className: 'str-chat__load-more-button__button', "data-testid": 'load-more-button', disabled: refreshing, onClick: onClick }, refreshing ? React__default['default'].createElement(reactFileUtils.LoadingIndicator, null) : children)));
|
|
6878
|
+
React__default['default'].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button', "data-testid": 'load-more-button', disabled: refreshing, onClick: onClick }, refreshing ? React__default['default'].createElement(reactFileUtils.LoadingIndicator, null) : children)));
|
|
6859
6879
|
};
|
|
6860
6880
|
var LoadMoreButton = React__default['default'].memo(UnMemoizedLoadMoreButton);
|
|
6861
6881
|
|
|
@@ -7094,19 +7114,19 @@ Dayjs__default['default'].updateLocale('it', {
|
|
|
7094
7114
|
Dayjs__default['default'].updateLocale('ja', {
|
|
7095
7115
|
calendar: {
|
|
7096
7116
|
lastDay: '[昨日] LT',
|
|
7097
|
-
lastWeek: '
|
|
7117
|
+
lastWeek: 'dddd LT',
|
|
7098
7118
|
nextDay: '[明日] LT',
|
|
7099
|
-
nextWeek: '
|
|
7100
|
-
sameDay: '[
|
|
7119
|
+
nextWeek: '[次の] dddd LT',
|
|
7120
|
+
sameDay: '[今日] LT',
|
|
7101
7121
|
sameElse: 'L',
|
|
7102
7122
|
},
|
|
7103
7123
|
});
|
|
7104
7124
|
Dayjs__default['default'].updateLocale('ko', {
|
|
7105
7125
|
calendar: {
|
|
7106
7126
|
lastDay: '[어제] LT',
|
|
7107
|
-
lastWeek: '[
|
|
7127
|
+
lastWeek: '[지난] dddd LT',
|
|
7108
7128
|
nextDay: '[내일] LT',
|
|
7109
|
-
nextWeek: 'dddd
|
|
7129
|
+
nextWeek: 'dddd LT',
|
|
7110
7130
|
sameDay: '[오늘] LT',
|
|
7111
7131
|
sameElse: 'L',
|
|
7112
7132
|
},
|
|
@@ -7599,7 +7619,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
7599
7619
|
return Streami18n;
|
|
7600
7620
|
}());
|
|
7601
7621
|
|
|
7602
|
-
var version = '
|
|
7622
|
+
var version = '7.0.0';
|
|
7603
7623
|
|
|
7604
7624
|
var useChat = function (_a) {
|
|
7605
7625
|
var _b;
|
|
@@ -8334,7 +8354,7 @@ var UnMemoizedCustomNotification = function (props) {
|
|
|
8334
8354
|
var active = props.active, children = props.children, type = props.type;
|
|
8335
8355
|
if (!active)
|
|
8336
8356
|
return null;
|
|
8337
|
-
return (React__default['default'].createElement("div", { className: "str-chat__custom-notification notification-" + type, "data-testid": 'custom-notification' }, children));
|
|
8357
|
+
return (React__default['default'].createElement("div", { "aria-live": 'polite', className: "str-chat__custom-notification notification-" + type, "data-testid": 'custom-notification' }, children));
|
|
8338
8358
|
};
|
|
8339
8359
|
var CustomNotification = React__default['default'].memo(UnMemoizedCustomNotification);
|
|
8340
8360
|
|
|
@@ -8786,7 +8806,7 @@ var UnMemoizedMessageNotification = function (props) {
|
|
|
8786
8806
|
var children = props.children, onClick = props.onClick, _a = props.showNotification, showNotification = _a === void 0 ? true : _a;
|
|
8787
8807
|
if (!showNotification)
|
|
8788
8808
|
return null;
|
|
8789
|
-
return (React__default['default'].createElement("button", { className: 'str-chat__message-notification', "data-testid": 'message-notification', onClick: onClick }, children));
|
|
8809
|
+
return (React__default['default'].createElement("button", { "aria-live": 'polite', className: 'str-chat__message-notification', "data-testid": 'message-notification', onClick: onClick }, children));
|
|
8790
8810
|
};
|
|
8791
8811
|
var MessageNotification = React__default['default'].memo(UnMemoizedMessageNotification);
|
|
8792
8812
|
|
|
@@ -9119,12 +9139,8 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9119
9139
|
var groupedByUser = shouldGroupByUser &&
|
|
9120
9140
|
streamMessageIndex > 0 &&
|
|
9121
9141
|
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
9122
|
-
var firstOfGroup = shouldGroupByUser &&
|
|
9123
|
-
|
|
9124
|
-
((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
9125
|
-
var endOfGroup = shouldGroupByUser &&
|
|
9126
|
-
streamMessageIndex > 0 &&
|
|
9127
|
-
((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
9142
|
+
var firstOfGroup = shouldGroupByUser && ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
9143
|
+
var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
9128
9144
|
return (React__default['default'].createElement(Message, { closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: props.customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, message: message, Message: MessageUIComponent, messageActions: props.messageActions }));
|
|
9129
9145
|
}, [customMessageRenderer, shouldGroupByUser, numItemsPrepended]);
|
|
9130
9146
|
var virtuosoComponents = React.useMemo(function () {
|
|
@@ -9205,7 +9221,7 @@ var DefaultThreadHeader = function (props) {
|
|
|
9205
9221
|
React__default['default'].createElement("div", { className: 'str-chat__thread-header-details' },
|
|
9206
9222
|
React__default['default'].createElement("strong", null, t('Thread')),
|
|
9207
9223
|
React__default['default'].createElement("small", null, getReplyCount())),
|
|
9208
|
-
React__default['default'].createElement("button", { className: 'str-chat__square-button', "data-testid": 'close-button', onClick: function (event) { return closeThread(event); } },
|
|
9224
|
+
React__default['default'].createElement("button", { "aria-label": 'Close thread', className: 'str-chat__square-button', "data-testid": 'close-button', onClick: function (event) { return closeThread(event); } },
|
|
9209
9225
|
React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
|
|
9210
9226
|
React__default['default'].createElement("path", { d: 'M9.916 1.027L8.973.084 5 4.058 1.027.084l-.943.943L4.058 5 .084 8.973l.943.943L5 5.942l3.973 3.974.943-.943L5.942 5z', fillRule: 'evenodd' })))));
|
|
9211
9227
|
};
|
|
@@ -9253,10 +9269,7 @@ var ThreadInner = function (props) {
|
|
|
9253
9269
|
var UnMemoizedWindow = function (props) {
|
|
9254
9270
|
var children = props.children, _a = props.hideOnThread, hideOnThread = _a === void 0 ? false : _a;
|
|
9255
9271
|
var thread = useChannelStateContext('Window').thread;
|
|
9256
|
-
|
|
9257
|
-
if (thread && hideOnThread)
|
|
9258
|
-
return null;
|
|
9259
|
-
return React__default['default'].createElement("div", { className: "str-chat__main-panel" }, children);
|
|
9272
|
+
return (React__default['default'].createElement("div", { className: "str-chat__main-panel " + (hideOnThread && thread ? 'str-chat__main-panel--hideOnThread' : '') }, children));
|
|
9260
9273
|
};
|
|
9261
9274
|
/**
|
|
9262
9275
|
* A UI component for conditionally displaying a Thread or Channel
|
|
@@ -9349,9 +9362,9 @@ exports.MessageText = MessageText;
|
|
|
9349
9362
|
exports.MessageTimestamp = MessageTimestamp;
|
|
9350
9363
|
exports.Modal = Modal;
|
|
9351
9364
|
exports.ModalComponent = ModalComponent;
|
|
9352
|
-
exports.ModalImage = ModalImage;
|
|
9353
9365
|
exports.PinIcon = PinIcon;
|
|
9354
9366
|
exports.PinIndicator = PinIndicator;
|
|
9367
|
+
exports.QuotedMessagePreview = QuotedMessagePreview;
|
|
9355
9368
|
exports.ReactionIcon = ReactionIcon;
|
|
9356
9369
|
exports.ReactionSelector = ReactionSelector;
|
|
9357
9370
|
exports.ReactionsList = ReactionsList;
|