stream-chat-react 6.7.2 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.full-bundle.js +2711 -259
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +10 -3
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Channel/Channel.d.ts +2 -0
  7. package/dist/components/Channel/Channel.d.ts.map +1 -1
  8. package/dist/components/Channel/Channel.js +8 -3
  9. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  10. package/dist/components/ChannelPreview/ChannelPreview.js +10 -0
  11. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
  12. package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -0
  13. package/dist/components/MessageInput/MessageInput.d.ts +2 -0
  14. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  15. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +1 -0
  16. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  17. package/dist/components/MessageInput/hooks/useMessageInputState.js +6 -1
  18. package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +1 -0
  19. package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
  20. package/dist/components/MessageInput/hooks/useUserTrigger.js +9 -11
  21. package/dist/components/MessageInput/hooks/utils.d.ts +15 -0
  22. package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -0
  23. package/dist/components/MessageInput/hooks/utils.js +114 -0
  24. package/dist/css/index.css +1 -7329
  25. package/dist/index.cjs.js +113 -16
  26. package/dist/index.cjs.js.map +1 -1
  27. package/dist/scss/ActionsBox.scss +2 -0
  28. package/dist/scss/Attachment.scss +4 -0
  29. package/dist/scss/AttachmentActions.scss +1 -0
  30. package/dist/scss/Audio.scss +2 -0
  31. package/dist/scss/Avatar.scss +2 -0
  32. package/dist/scss/Card.scss +6 -2
  33. package/dist/scss/ChannelHeader.scss +22 -3
  34. package/dist/scss/ChannelList.scss +5 -6
  35. package/dist/scss/ChannelSearch.scss +2 -4
  36. package/dist/scss/ChatDown.scss +1 -0
  37. package/dist/scss/DateSeparator.scss +3 -0
  38. package/dist/scss/EditMessageForm.scss +4 -0
  39. package/dist/scss/EventComponent.scss +4 -0
  40. package/dist/scss/Gallery.scss +7 -1
  41. package/dist/scss/LoadMoreButton.scss +1 -0
  42. package/dist/scss/Message.scss +78 -2
  43. package/dist/scss/MessageInput.scss +3 -0
  44. package/dist/scss/MessageInputFlat.scss +8 -1
  45. package/dist/scss/MessageList.scss +10 -0
  46. package/dist/scss/MessageRepliesCountButton.scss +1 -0
  47. package/dist/scss/MessageTeam.scss +3 -7
  48. package/dist/scss/Modal.scss +3 -0
  49. package/dist/scss/ReactionList.scss +18 -18
  50. package/dist/scss/ReactionSelector.scss +4 -0
  51. package/dist/scss/SimpleReactionsList.scss +2 -1
  52. package/dist/scss/Thread.scss +19 -0
  53. package/dist/scss/TypingIndicator.scss +7 -0
  54. package/dist/scss/VirtualMessage.scss +8 -7
  55. package/dist/scss/_base.scss +17 -2
  56. package/dist/version.d.ts +1 -1
  57. package/dist/version.js +1 -1
  58. package/package.json +9 -28
  59. package/dist/css/index.js +0 -1
  60. package/dist/css/index.min.css +0 -1
package/dist/index.cjs.js CHANGED
@@ -3512,6 +3512,85 @@ var useEmojiTrigger = function (emojiIndex) { return ({
3512
3512
  }); },
3513
3513
  }); };
3514
3514
 
3515
+ var accentsMap = {
3516
+ a: 'á|à|ã|â|À|Á|Ã|Â',
3517
+ c: 'ç|Ç',
3518
+ e: 'é|è|ê|É|È|Ê',
3519
+ i: 'í|ì|î|Í|Ì|Î',
3520
+ n: 'ñ|Ñ',
3521
+ o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
3522
+ u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
3523
+ };
3524
+ var removeDiacritics = function (text) {
3525
+ if (!text)
3526
+ return '';
3527
+ return Object.keys(accentsMap).reduce(function (acc, current) { return acc.replace(new RegExp(accentsMap[current], 'g'), current); }, text);
3528
+ };
3529
+ var calculateLevenshtein = function (query, name) {
3530
+ if (query.length === 0)
3531
+ return name.length;
3532
+ if (name.length === 0)
3533
+ return query.length;
3534
+ var matrix = [];
3535
+ var i;
3536
+ for (i = 0; i <= name.length; i++) {
3537
+ matrix[i] = [i];
3538
+ }
3539
+ var j;
3540
+ for (j = 0; j <= query.length; j++) {
3541
+ matrix[0][j] = j;
3542
+ }
3543
+ for (i = 1; i <= name.length; i++) {
3544
+ for (j = 1; j <= query.length; j++) {
3545
+ if (name.charAt(i - 1) === query.charAt(j - 1)) {
3546
+ matrix[i][j] = matrix[i - 1][j - 1];
3547
+ }
3548
+ else {
3549
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
3550
+ Math.min(matrix[i][j - 1] + 1, // insertion
3551
+ matrix[i - 1][j] + 1)); // deletion
3552
+ }
3553
+ }
3554
+ }
3555
+ return matrix[name.length][query.length];
3556
+ };
3557
+ var searchLocalUsers = function (params) {
3558
+ var ownUserId = params.ownUserId, query = params.query, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
3559
+ var matchingUsers = users.filter(function (user) {
3560
+ if (user.id === ownUserId)
3561
+ return false;
3562
+ if (!query)
3563
+ return true;
3564
+ var updatedId = removeDiacritics(user.id).toLowerCase();
3565
+ var updatedName = removeDiacritics(user.name).toLowerCase();
3566
+ var updatedQuery = removeDiacritics(query).toLowerCase();
3567
+ if (useMentionsTransliteration) {
3568
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
3569
+ var transliterate;
3570
+ return __generator(this, function (_a) {
3571
+ switch (_a.label) {
3572
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@sindresorhus/transliterate')); })];
3573
+ case 1:
3574
+ transliterate = (_a.sent()).default;
3575
+ updatedName = transliterate(user.name || '').toLowerCase();
3576
+ updatedQuery = transliterate(query).toLowerCase();
3577
+ updatedId = transliterate(user.id).toLowerCase();
3578
+ return [2 /*return*/];
3579
+ }
3580
+ });
3581
+ }); })();
3582
+ }
3583
+ if (updatedName) {
3584
+ var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
3585
+ if (updatedName.includes(updatedQuery) || levenshtein_1 <= 3)
3586
+ return true;
3587
+ }
3588
+ var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
3589
+ return updatedId.includes(updatedQuery) || levenshtein <= 3;
3590
+ });
3591
+ return matchingUsers;
3592
+ };
3593
+
3515
3594
  /**
3516
3595
  * UI component for mentions rendered in suggestion list
3517
3596
  */
@@ -3534,7 +3613,7 @@ var UnMemoizedUserItem = function (props) {
3534
3613
  var UserItem = React__default['default'].memo(UnMemoizedUserItem);
3535
3614
 
3536
3615
  var useUserTrigger = function (params) {
3537
- var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser;
3616
+ var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
3538
3617
  var _b = React.useState(false), searching = _b[0], setSearching = _b[1];
3539
3618
  var _c = useChatContext(), client = _c.client, mutes = _c.mutes;
3540
3619
  var channel = useChannelStateContext().channel;
@@ -3649,16 +3728,13 @@ var useUserTrigger = function (params) {
3649
3728
  */
3650
3729
  if (!query || Object.values(members || {}).length < 100) {
3651
3730
  var users = getMembersAndWatchers();
3652
- var matchingUsers = users.filter(function (user) {
3653
- if (user.id === client.userID)
3654
- return false;
3655
- if (!query)
3656
- return true;
3657
- if (user.name !== undefined && user.name.toLowerCase().includes(query.toLowerCase())) {
3658
- return true;
3659
- }
3660
- return user.id.toLowerCase().includes(query.toLowerCase());
3661
- });
3731
+ var params_1 = {
3732
+ ownUserId: client.userID,
3733
+ query: query,
3734
+ useMentionsTransliteration: useMentionsTransliteration,
3735
+ users: users,
3736
+ };
3737
+ var matchingUsers = searchLocalUsers(params_1);
3662
3738
  var usersToShow = ((_a = mentionQueryParams.options) === null || _a === void 0 ? void 0 : _a.limit) || 10;
3663
3739
  var data = matchingUsers.slice(0, usersToShow);
3664
3740
  if (onReady)
@@ -3705,6 +3781,7 @@ var DefaultTriggerProvider = function (_a) {
3705
3781
  mentionAllAppUsers: currentValue.mentionAllAppUsers,
3706
3782
  mentionQueryParams: currentValue.mentionQueryParams,
3707
3783
  onSelectUser: currentValue.onSelectUser,
3784
+ useMentionsTransliteration: currentValue.useMentionsTransliteration,
3708
3785
  }),
3709
3786
  };
3710
3787
  var newValue = __assign(__assign({}, currentValue), { autocompleteTriggers: defaultAutocompleteTriggers });
@@ -4521,6 +4598,7 @@ var initState = function (message) {
4521
4598
  imageOrder: [],
4522
4599
  imageUploads: __assign({}, emptyImageUploads),
4523
4600
  mentioned_users: [],
4601
+ setText: function () { return null; },
4524
4602
  text: '',
4525
4603
  };
4526
4604
  }
@@ -4572,6 +4650,7 @@ var initState = function (message) {
4572
4650
  imageOrder: imageOrder,
4573
4651
  imageUploads: imageUploads,
4574
4652
  mentioned_users: mentioned_users,
4653
+ setText: function () { return null; },
4575
4654
  text: message.text || '',
4576
4655
  };
4577
4656
  };
@@ -4660,12 +4739,15 @@ var useMessageInputState = function (props) {
4660
4739
  var onSelectUser = React.useCallback(function (item) {
4661
4740
  dispatch({ type: 'addMentionedUser', user: item });
4662
4741
  }, []);
4742
+ var setText = React.useCallback(function (text) {
4743
+ dispatch({ getNewText: function () { return text; }, type: 'setText' });
4744
+ }, []);
4663
4745
  return __assign(__assign({}, state), { closeCommandsList: closeCommandsList,
4664
4746
  /**
4665
4747
  * TODO: fix the below at some point because this type casting is wrong
4666
4748
  * and just forced to not have warnings currently with the unknown casting
4667
4749
  */
4668
- closeEmojiPicker: closeEmojiPicker, emojiIndex: useEmojiIndex(), emojiPickerRef: emojiPickerRef, handleChange: handleChange, handleEmojiKeyDown: handleEmojiKeyDown, handleSubmit: handleSubmit, insertText: insertText, isUploadEnabled: isUploadEnabled, maxFilesLeft: maxFilesLeft, numberOfUploads: numberOfUploads, onPaste: onPaste, onSelectEmoji: onSelectEmoji, onSelectUser: onSelectUser, openCommandsList: openCommandsList, openEmojiPicker: openEmojiPicker, removeFile: removeFile, removeImage: removeImage, showCommandsList: showCommandsList, textareaRef: textareaRef, uploadFile: uploadFile, uploadImage: uploadImage, uploadNewFiles: uploadNewFiles });
4750
+ closeEmojiPicker: closeEmojiPicker, emojiIndex: useEmojiIndex(), emojiPickerRef: emojiPickerRef, handleChange: handleChange, handleEmojiKeyDown: handleEmojiKeyDown, handleSubmit: handleSubmit, insertText: insertText, isUploadEnabled: isUploadEnabled, maxFilesLeft: maxFilesLeft, numberOfUploads: numberOfUploads, onPaste: onPaste, onSelectEmoji: onSelectEmoji, onSelectUser: onSelectUser, openCommandsList: openCommandsList, openEmojiPicker: openEmojiPicker, removeFile: removeFile, removeImage: removeImage, setText: setText, showCommandsList: showCommandsList, textareaRef: textareaRef, uploadFile: uploadFile, uploadImage: uploadImage, uploadNewFiles: uploadNewFiles });
4669
4751
  };
4670
4752
 
4671
4753
  var QuotedMessagePreviewHeader = function () {
@@ -5125,7 +5207,7 @@ var UnMemoizedChannel = function (props) {
5125
5207
  return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
5126
5208
  };
5127
5209
  var ChannelInner = function (props) {
5128
- var acceptedFiles = props.acceptedFiles, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _b === void 0 ? LoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator$1 = _c === void 0 ? LoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover;
5210
+ var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _b === void 0 ? LoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator$1 = _c === void 0 ? LoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover;
5129
5211
  var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
5130
5212
  var t = useTranslationContext().t;
5131
5213
  var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
@@ -5195,7 +5277,12 @@ var ChannelInner = function (props) {
5195
5277
  }
5196
5278
  else if (((_e = channel.getConfig()) === null || _e === void 0 ? void 0 : _e.read_events) && !channel.muteStatus().muted) {
5197
5279
  var unread = channel.countUnread(lastRead.current);
5198
- document.title = "(" + unread + ") " + originalTitle.current;
5280
+ if (activeUnreadHandler) {
5281
+ activeUnreadHandler(unread, originalTitle.current);
5282
+ }
5283
+ else {
5284
+ document.title = "(" + unread + ") " + originalTitle.current;
5285
+ }
5199
5286
  }
5200
5287
  }
5201
5288
  }
@@ -5582,7 +5669,7 @@ var ChannelInner = function (props) {
5582
5669
  var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
5583
5670
  var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
5584
5671
  var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
5585
- ? ' str-chat--windows-flags'
5672
+ ? 'str-chat--windows-flags'
5586
5673
  : '';
5587
5674
  if (state.error) {
5588
5675
  return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
@@ -6164,6 +6251,16 @@ var ChannelPreview = function (props) {
6164
6251
  var _e = React.useState(0), unread = _e[0], setUnread = _e[1];
6165
6252
  var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
6166
6253
  var muted = useIsChannelMuted(channel).muted;
6254
+ React.useEffect(function () {
6255
+ var handleEvent = function (event) {
6256
+ if (!event.cid)
6257
+ return setUnread(0);
6258
+ if (channel.cid === event.cid)
6259
+ setUnread(0);
6260
+ };
6261
+ client.on('notification.mark_read', handleEvent);
6262
+ return function () { return client.off('notification.mark_read', handleEvent); };
6263
+ }, []);
6167
6264
  React.useEffect(function () {
6168
6265
  if (isActive || muted) {
6169
6266
  setUnread(0);
@@ -7155,7 +7252,7 @@ var Streami18n = /** @class */ (function () {
7155
7252
  return Streami18n;
7156
7253
  }());
7157
7254
 
7158
- var version = '6.7.2';
7255
+ var version = '6.8.0';
7159
7256
 
7160
7257
  var useChat = function (_a) {
7161
7258
  var _b;