stream-chat-react 9.4.1 → 9.5.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 (31) hide show
  1. package/dist/browser.full-bundle.js +65 -93
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +1 -1
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/AutoCompleteTextarea/Textarea.d.ts +7 -0
  6. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  7. package/dist/components/AutoCompleteTextarea/Textarea.js +10 -1
  8. package/dist/components/Channel/Channel.d.ts.map +1 -1
  9. package/dist/components/Channel/Channel.js +26 -24
  10. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  11. package/dist/components/MessageInput/hooks/useAttachments.js +8 -1
  12. package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
  13. package/dist/components/MessageInput/hooks/useImageUploads.js +17 -36
  14. package/dist/context/ChannelActionContext.d.ts +1 -1
  15. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  16. package/dist/context/DefaultEmoji.d.ts +3 -0
  17. package/dist/context/DefaultEmoji.d.ts.map +1 -0
  18. package/dist/context/DefaultEmoji.js +3 -0
  19. package/dist/context/DefaultEmojiPicker.d.ts +3 -0
  20. package/dist/context/DefaultEmojiPicker.d.ts.map +1 -0
  21. package/dist/context/DefaultEmojiPicker.js +3 -0
  22. package/dist/context/EmojiContext.d.ts.map +1 -1
  23. package/dist/context/EmojiContext.js +2 -58
  24. package/dist/css/index.css +1 -1
  25. package/dist/index.cjs.js +74 -86
  26. package/dist/index.cjs.js.map +1 -1
  27. package/dist/scss/Gallery.scss +6 -0
  28. package/dist/scss/Message.scss +67 -34
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/package.json +3 -3
package/dist/index.cjs.js CHANGED
@@ -54,6 +54,8 @@ var deepequal = require('react-fast-compare');
54
54
  var DefaultEmojiIndex = require('emoji-mart/dist/utils/emoji-index/nimble-emoji-index.js');
55
55
  var resizeObserver = require('@juggle/resize-observer');
56
56
  var reactVirtuoso = require('react-virtuoso');
57
+ var nimbleEmoji = require('emoji-mart/dist/components/emoji/nimble-emoji');
58
+ var nimblePicker = require('emoji-mart/dist/components/picker/nimble-picker');
57
59
 
58
60
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
59
61
 
@@ -110,6 +112,8 @@ var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
110
112
  var throttle__default = /*#__PURE__*/_interopDefaultLegacy(throttle);
111
113
  var deepequal__default = /*#__PURE__*/_interopDefaultLegacy(deepequal);
112
114
  var DefaultEmojiIndex__default = /*#__PURE__*/_interopDefaultLegacy(DefaultEmojiIndex);
115
+ var nimbleEmoji__default = /*#__PURE__*/_interopDefaultLegacy(nimbleEmoji);
116
+ var nimblePicker__default = /*#__PURE__*/_interopDefaultLegacy(nimblePicker);
113
117
 
114
118
  /*! *****************************************************************************
115
119
  Copyright (c) Microsoft Corporation.
@@ -2592,7 +2596,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
2592
2596
  });
2593
2597
 
2594
2598
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_defaultShouldSubmit", function (event) {
2595
- return event.key === 'Enter' && !event.shiftKey;
2599
+ return event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing;
2596
2600
  });
2597
2601
 
2598
2602
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_handleKeyDown", function (event) {
@@ -4846,32 +4850,12 @@ var UnMemoizedMessageTextComponent = function (props) {
4846
4850
  };
4847
4851
  var MessageText = React__default['default'].memo(UnMemoizedMessageTextComponent);
4848
4852
 
4849
- var DefaultEmoji = React__default['default'].lazy(function () { return __awaiter(void 0, void 0, void 0, function () {
4850
- var emoji;
4851
- return __generator(this, function (_a) {
4852
- switch (_a.label) {
4853
- case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('emoji-mart/dist/components/emoji/nimble-emoji.js')); })];
4854
- case 1:
4855
- emoji = _a.sent();
4856
- return [2 /*return*/, { default: emoji.default }];
4857
- }
4858
- });
4859
- }); });
4860
- var DefaultEmojiPicker = React__default['default'].lazy(function () { return __awaiter(void 0, void 0, void 0, function () {
4861
- var emojiPicker;
4862
- return __generator(this, function (_a) {
4863
- switch (_a.label) {
4864
- case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('emoji-mart/dist/components/picker/nimble-picker.js')); })];
4865
- case 1:
4866
- emojiPicker = _a.sent();
4867
- return [2 /*return*/, { default: emojiPicker.default }];
4868
- }
4869
- });
4870
- }); });
4853
+ var DefaultEmoji$1 = React__default['default'].lazy(function () { return Promise.resolve().then(function () { return DefaultEmoji; }); });
4854
+ var DefaultEmojiPicker$1 = React__default['default'].lazy(function () { return Promise.resolve().then(function () { return DefaultEmojiPicker; }); });
4871
4855
  var EmojiContext = React__default['default'].createContext(undefined);
4872
4856
  var EmojiProvider = function (_a) {
4873
4857
  var children = _a.children, value = _a.value;
4874
- var _b = value.Emoji, Emoji = _b === void 0 ? DefaultEmoji : _b, emojiConfig = value.emojiConfig, _c = value.EmojiIndex, EmojiIndex = _c === void 0 ? DefaultEmojiIndex__default['default'] : _c, _d = value.EmojiPicker, EmojiPicker = _d === void 0 ? DefaultEmojiPicker : _d;
4858
+ var _b = value.Emoji, Emoji = _b === void 0 ? DefaultEmoji$1 : _b, emojiConfig = value.emojiConfig, _c = value.EmojiIndex, EmojiIndex = _c === void 0 ? DefaultEmojiIndex__default['default'] : _c, _d = value.EmojiPicker, EmojiPicker = _d === void 0 ? DefaultEmojiPicker$1 : _d;
4875
4859
  var emojiContextValue = {
4876
4860
  Emoji: Emoji,
4877
4861
  emojiConfig: emojiConfig,
@@ -5584,8 +5568,9 @@ var useImageUploads = function (props, state, dispatch) {
5584
5568
  }, []);
5585
5569
  var uploadImage = React.useCallback(function (id) { return __awaiter(void 0, void 0, void 0, function () {
5586
5570
  var img, file, canUpload, response, error_1, errorMessage, alreadyRemoved;
5587
- return __generator(this, function (_a) {
5588
- switch (_a.label) {
5571
+ var _a;
5572
+ return __generator(this, function (_b) {
5573
+ switch (_b.label) {
5589
5574
  case 0:
5590
5575
  img = imageUploads[id];
5591
5576
  if (!img)
@@ -5602,24 +5587,24 @@ var useImageUploads = function (props, state, dispatch) {
5602
5587
  uploadType: 'image',
5603
5588
  })];
5604
5589
  case 1:
5605
- canUpload = _a.sent();
5590
+ canUpload = _b.sent();
5606
5591
  if (!canUpload)
5607
5592
  return [2 /*return*/, removeImage(id)];
5608
- _a.label = 2;
5593
+ _b.label = 2;
5609
5594
  case 2:
5610
- _a.trys.push([2, 7, , 8]);
5595
+ _b.trys.push([2, 7, , 8]);
5611
5596
  if (!doImageUploadRequest) return [3 /*break*/, 4];
5612
5597
  return [4 /*yield*/, doImageUploadRequest(file, channel)];
5613
5598
  case 3:
5614
- response = _a.sent();
5599
+ response = _b.sent();
5615
5600
  return [3 /*break*/, 6];
5616
5601
  case 4: return [4 /*yield*/, channel.sendImage(file)];
5617
5602
  case 5:
5618
- response = _a.sent();
5619
- _a.label = 6;
5603
+ response = _b.sent();
5604
+ _b.label = 6;
5620
5605
  case 6: return [3 /*break*/, 8];
5621
5606
  case 7:
5622
- error_1 = _a.sent();
5607
+ error_1 = _b.sent();
5623
5608
  errorMessage = typeof error_1.message === 'string'
5624
5609
  ? error_1.message
5625
5610
  : t('Error uploading image');
@@ -5643,8 +5628,11 @@ var useImageUploads = function (props, state, dispatch) {
5643
5628
  removeImage(id);
5644
5629
  return [2 /*return*/];
5645
5630
  }
5631
+ if (img.previewUri)
5632
+ (_a = URL.revokeObjectURL) === null || _a === void 0 ? void 0 : _a.call(URL, img.previewUri);
5646
5633
  dispatch({
5647
5634
  id: id,
5635
+ previewUri: undefined,
5648
5636
  state: 'finished',
5649
5637
  type: 'setImageUpload',
5650
5638
  url: response.file,
@@ -5654,33 +5642,10 @@ var useImageUploads = function (props, state, dispatch) {
5654
5642
  });
5655
5643
  }); }, [imageUploads, channel, doImageUploadRequest, errorHandler, removeImage]);
5656
5644
  React.useEffect(function () {
5657
- if (FileReader) {
5658
- var upload = Object.values(imageUploads).find(function (imageUpload) {
5659
- return imageUpload.state === 'uploading' && !!imageUpload.file && !imageUpload.previewUri;
5660
- });
5661
- if (upload) {
5662
- var file = upload.file, id_1 = upload.id;
5663
- // TODO: Possibly use URL.createObjectURL instead. However, then we need
5664
- // to release the previews when not used anymore though.
5665
- var reader_1 = new FileReader();
5666
- reader_1.onload = function (event) {
5667
- var _a;
5668
- if (typeof ((_a = event.target) === null || _a === void 0 ? void 0 : _a.result) !== 'string')
5669
- return;
5670
- dispatch({
5671
- id: id_1,
5672
- previewUri: event.target.result,
5673
- type: 'setImageUpload',
5674
- });
5675
- };
5676
- reader_1.readAsDataURL(file);
5677
- uploadImage(id_1);
5678
- return function () {
5679
- reader_1.onload = null;
5680
- };
5681
- }
5682
- }
5683
- return;
5645
+ var upload = Object.values(imageUploads).find(function (imageUpload) { return imageUpload.state === 'uploading' && imageUpload.file; });
5646
+ if (!upload)
5647
+ return;
5648
+ uploadImage(upload.id);
5684
5649
  }, [imageUploads, uploadImage]);
5685
5650
  return {
5686
5651
  removeImage: removeImage,
@@ -5804,11 +5769,18 @@ var useAttachments = function (props, state, dispatch, textareaRef) {
5804
5769
  Array.from(files)
5805
5770
  .slice(0, maxFilesLeft)
5806
5771
  .forEach(function (file) {
5772
+ var _a;
5807
5773
  var id = nanoid.nanoid();
5808
5774
  if (file.type.startsWith('image/') &&
5809
5775
  !file.type.endsWith('.photoshop') // photoshop files begin with 'image/'
5810
5776
  ) {
5811
- dispatch({ file: file, id: id, state: 'uploading', type: 'setImageUpload' });
5777
+ dispatch({
5778
+ file: file,
5779
+ id: id,
5780
+ previewUri: (_a = URL.createObjectURL) === null || _a === void 0 ? void 0 : _a.call(URL, file),
5781
+ state: 'uploading',
5782
+ type: 'setImageUpload',
5783
+ });
5812
5784
  }
5813
5785
  else if (file instanceof File && !noFiles) {
5814
5786
  dispatch({ file: file, id: id, state: 'uploading', type: 'setFileUpload' });
@@ -6910,7 +6882,6 @@ var makeAddNotifications = function (setNotifications, notificationTimeouts) { r
6910
6882
  notificationTimeouts.push(timeout);
6911
6883
  }; };
6912
6884
 
6913
- var JUMP_MESSAGE_PAGE_SIZE = 25;
6914
6885
  var UnMemoizedChannel = function (props) {
6915
6886
  var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a, LoadingErrorIndicator = props.LoadingErrorIndicator, LoadingIndicator = props.LoadingIndicator;
6916
6887
  var _b = useChatContext('Channel'), contextChannel = _b.channel, channelsQueryState = _b.channelsQueryState;
@@ -7180,30 +7151,33 @@ var ChannelInner = function (props) {
7180
7151
  });
7181
7152
  });
7182
7153
  };
7183
- var jumpToMessage = function (messageId) { return __awaiter(void 0, void 0, void 0, function () {
7184
- var indexOfMessage, hasMoreMessages;
7185
- return __generator(this, function (_a) {
7186
- switch (_a.label) {
7187
- case 0:
7188
- dispatch({ loadingMore: true, type: 'setLoadingMore' });
7189
- return [4 /*yield*/, channel.state.loadMessageIntoState(messageId)];
7190
- case 1:
7191
- _a.sent();
7192
- indexOfMessage = channel.state.messages.findIndex(function (message) { return message.id === messageId; });
7193
- hasMoreMessages = indexOfMessage >= Math.floor(JUMP_MESSAGE_PAGE_SIZE / 2);
7194
- loadMoreFinished(hasMoreMessages, channel.state.messages);
7195
- dispatch({
7196
- hasMoreNewer: channel.state.messages !== channel.state.latestMessages,
7197
- highlightedMessageId: messageId,
7198
- type: 'jumpToMessageFinished',
7199
- });
7200
- setTimeout(function () {
7201
- dispatch({ type: 'clearHighlightedMessage' });
7202
- }, 500);
7203
- return [2 /*return*/];
7204
- }
7154
+ var jumpToMessage = function (messageId, messageLimit) {
7155
+ if (messageLimit === void 0) { messageLimit = 100; }
7156
+ return __awaiter(void 0, void 0, void 0, function () {
7157
+ var indexOfMessage, hasMoreMessages;
7158
+ return __generator(this, function (_a) {
7159
+ switch (_a.label) {
7160
+ case 0:
7161
+ dispatch({ loadingMore: true, type: 'setLoadingMore' });
7162
+ return [4 /*yield*/, channel.state.loadMessageIntoState(messageId, undefined, messageLimit)];
7163
+ case 1:
7164
+ _a.sent();
7165
+ indexOfMessage = channel.state.messages.findIndex(function (message) { return message.id === messageId; });
7166
+ hasMoreMessages = indexOfMessage >= Math.floor(messageLimit / 2);
7167
+ loadMoreFinished(hasMoreMessages, channel.state.messages);
7168
+ dispatch({
7169
+ hasMoreNewer: channel.state.messages !== channel.state.latestMessages,
7170
+ highlightedMessageId: messageId,
7171
+ type: 'jumpToMessageFinished',
7172
+ });
7173
+ setTimeout(function () {
7174
+ dispatch({ type: 'clearHighlightedMessage' });
7175
+ }, 500);
7176
+ return [2 /*return*/];
7177
+ }
7178
+ });
7205
7179
  });
7206
- }); };
7180
+ };
7207
7181
  var jumpToLatestMessage = function () { return __awaiter(void 0, void 0, void 0, function () {
7208
7182
  var hasMoreOlder;
7209
7183
  return __generator(this, function (_a) {
@@ -8417,7 +8391,7 @@ var UnMemoizedChannelList = function (props) {
8417
8391
  */
8418
8392
  var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
8419
8393
 
8420
- var version = '9.4.1';
8394
+ var version = '9.5.0';
8421
8395
 
8422
8396
  var useChat = function (_a) {
8423
8397
  var _b, _c;
@@ -10216,6 +10190,20 @@ var UnMemoizedWindow = function (props) {
10216
10190
  */
10217
10191
  var Window = React__default['default'].memo(UnMemoizedWindow);
10218
10192
 
10193
+ // @ts-expect-error
10194
+
10195
+ var DefaultEmoji = /*#__PURE__*/Object.freeze({
10196
+ __proto__: null,
10197
+ 'default': nimbleEmoji__default['default']
10198
+ });
10199
+
10200
+ // @ts-expect-error
10201
+
10202
+ var DefaultEmojiPicker = /*#__PURE__*/Object.freeze({
10203
+ __proto__: null,
10204
+ 'default': nimblePicker__default['default']
10205
+ });
10206
+
10219
10207
  exports.ActionsIcon = ActionsIcon;
10220
10208
  exports.Attachment = Attachment;
10221
10209
  exports.AttachmentActions = AttachmentActions;