stream-chat-react 11.0.0-rc.2 → 11.0.0-rc.4

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 (76) hide show
  1. package/dist/browser.full-bundle.js +474 -419
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +5 -5
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
  6. package/dist/components/Attachment/AttachmentActions.js +3 -1
  7. package/dist/components/AutoCompleteTextarea/Item.js +1 -1
  8. package/dist/components/AutoCompleteTextarea/List.js +14 -14
  9. package/dist/components/Channel/Channel.d.ts +3 -0
  10. package/dist/components/Channel/Channel.d.ts.map +1 -1
  11. package/dist/components/Channel/Channel.js +26 -2
  12. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  13. package/dist/components/ChannelList/ChannelList.js +2 -1
  14. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  15. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +2 -2
  16. package/dist/components/Chat/Chat.d.ts +4 -1
  17. package/dist/components/Chat/Chat.d.ts.map +1 -1
  18. package/dist/components/Chat/Chat.js +3 -1
  19. package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +3 -3
  20. package/dist/components/Chat/hooks/useChannelsQueryState.d.ts.map +1 -1
  21. package/dist/components/Chat/hooks/useChannelsQueryState.js +1 -1
  22. package/dist/components/Chat/hooks/useChat.d.ts +2 -0
  23. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  24. package/dist/components/Chat/hooks/useChat.js +7 -4
  25. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  26. package/dist/components/Chat/hooks/useCreateChatContext.js +5 -1
  27. package/dist/components/Emojis/EmojiPicker.d.ts +1 -2
  28. package/dist/components/Emojis/EmojiPicker.d.ts.map +1 -1
  29. package/dist/components/Emojis/EmojiPicker.js +7 -3
  30. package/dist/components/Emojis/index.cjs.js +25 -4
  31. package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  32. package/dist/components/LoadMore/LoadMoreButton.js +5 -2
  33. package/dist/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
  34. package/dist/components/Message/hooks/useDeleteHandler.js +5 -5
  35. package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
  36. package/dist/components/MessageInput/hooks/useCommandTrigger.js +19 -2
  37. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts.map +1 -1
  38. package/dist/components/ReactFileUtilities/ImageDropzone.js +3 -1
  39. package/dist/context/ChannelActionContext.d.ts +2 -1
  40. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  41. package/dist/context/ChannelStateContext.d.ts +1 -1
  42. package/dist/context/ChatContext.d.ts +29 -2
  43. package/dist/context/ChatContext.d.ts.map +1 -1
  44. package/dist/css/index.css +1 -1
  45. package/dist/css/v2/emoji-mart.css +1 -0
  46. package/dist/css/v2/emoji-replacement.css +1 -0
  47. package/dist/css/v2/index.css +1 -1
  48. package/dist/css/v2/index.layout.css +1 -1
  49. package/dist/i18n/Streami18n.d.ts +7 -3
  50. package/dist/i18n/Streami18n.d.ts.map +1 -1
  51. package/dist/i18n/Streami18n.js +3 -4
  52. package/dist/i18n/de.json +15 -2
  53. package/dist/i18n/en.json +3 -0
  54. package/dist/i18n/es.json +15 -2
  55. package/dist/i18n/fr.json +15 -2
  56. package/dist/i18n/hi.json +15 -2
  57. package/dist/i18n/it.json +15 -2
  58. package/dist/i18n/ja.json +15 -2
  59. package/dist/i18n/ko.json +15 -2
  60. package/dist/i18n/nl.json +15 -2
  61. package/dist/i18n/pt.json +15 -2
  62. package/dist/i18n/ru.json +15 -2
  63. package/dist/i18n/tr.json +15 -2
  64. package/dist/{icons-0801b1e9.js → icons-5ee8c22b.js} +46 -47
  65. package/dist/index.cjs.js +94 -42
  66. package/dist/scss/MessageInput.scss +6 -0
  67. package/dist/scss/_base.scss +0 -41
  68. package/dist/scss/index.scss +0 -1
  69. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +6 -0
  70. package/dist/scss/v2/MessageInput/MessageInput-layout.scss +1 -1
  71. package/dist/scss/v2/_emoji-replacement.scss +1 -0
  72. package/dist/scss/v2/index.layout.scss +0 -1
  73. package/dist/scss/v2/index.scss +0 -1
  74. package/dist/version.d.ts +1 -1
  75. package/dist/version.js +1 -1
  76. package/package.json +15 -3
package/dist/index.cjs.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var icons = require('./icons-0801b1e9.js');
5
+ var icons = require('./icons-5ee8c22b.js');
6
6
  var React = require('react');
7
7
  var ReactPlayer = require('react-player');
8
8
  var prettybytes = require('pretty-bytes');
@@ -111,11 +111,12 @@ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else i
111
111
 
112
112
  var UnMemoizedAttachmentActions = function (props) {
113
113
  var actionHandler = props.actionHandler, actions = props.actions, id = props.id, text = props.text;
114
+ var t = icons.useTranslationContext('UnMemoizedAttachmentActions').t;
114
115
  var handleActionClick = function (event, name, value) { return actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler(name, value, event); };
115
116
  return (React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions' },
116
117
  React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions-form' },
117
118
  React__default["default"].createElement("span", null, text),
118
- actions.map(function (action) { return (React__default["default"].createElement("button", { className: "str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--".concat(action.style), "data-testid": "".concat(action.name), "data-value": action.value, key: "".concat(id, "-").concat(action.value), onClick: function (event) { return handleActionClick(event, action.name, action.value); } }, action.text)); }))));
119
+ actions.map(function (action) { return (React__default["default"].createElement("button", { className: "str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--".concat(action.style), "data-testid": "".concat(action.name), "data-value": action.value, key: "".concat(id, "-").concat(action.value), onClick: function (event) { return handleActionClick(event, action.name, action.value); } }, action.text ? t(action.text) : null)); }))));
119
120
  };
120
121
  /**
121
122
  * A component for rendering the actions you can take on an attachment.
@@ -2796,6 +2797,7 @@ function noop() {}
2796
2797
 
2797
2798
  var ImageDropzone = function (_a) {
2798
2799
  var _b = _a.accept, acceptedFiles = _b === void 0 ? [] : _b, children = _a.children, disabled = _a.disabled, handleFiles = _a.handleFiles, maxNumberOfFiles = _a.maxNumberOfFiles, multiple = _a.multiple;
2800
+ var t = icons.useTranslationContext('ImageDropzone').t;
2799
2801
  var handleDrop = React.useCallback(function (accepted) {
2800
2802
  if (!handleFiles) {
2801
2803
  return;
@@ -2830,7 +2832,7 @@ var ImageDropzone = function (_a) {
2830
2832
  React__default["default"].createElement("div", { className: 'rfu-dropzone__inner' },
2831
2833
  React__default["default"].createElement("svg", { height: '41', viewBox: '0 0 41 41', width: '41', xmlns: 'http://www.w3.org/2000/svg' },
2832
2834
  React__default["default"].createElement("path", { d: 'M40.517 28.002V3.997c0-2.197-1.808-3.992-4.005-3.992H12.507a4.004 4.004 0 0 0-3.992 3.993v24.004a4.004 4.004 0 0 0 3.992 3.993h24.005c2.197 0 4.005-1.795 4.005-3.993zm-22.002-7.997l4.062 5.42 5.937-7.423 7.998 10H12.507l6.008-7.997zM.517 8.003V36c0 2.198 1.795 4.005 3.993 4.005h27.997V36H4.51V8.002H.517z', fill: '#000', fillRule: 'nonzero' })),
2833
- React__default["default"].createElement("p", null, "Drag your files here to add to your post"))),
2835
+ React__default["default"].createElement("p", null, t('Drag your files here to add to your post')))),
2834
2836
  children));
2835
2837
  };
2836
2838
 
@@ -3334,7 +3336,7 @@ var Item$1 = /*#__PURE__*/React__default["default"].forwardRef(function Item(pro
3334
3336
  style: style
3335
3337
  }, /*#__PURE__*/React__default["default"].createElement("a", {
3336
3338
  href: "",
3337
- onClick: onClickHandler,
3339
+ onClick: handleClick,
3338
3340
  onFocus: handleSelect,
3339
3341
  onMouseEnter: handleSelect,
3340
3342
  ref: innerRef
@@ -25319,11 +25321,11 @@ var List = function List(_ref) {
25319
25321
  var SuggestionHeader = PropHeader || AutocompleteSuggestionHeader || DefaultSuggestionListHeader;
25320
25322
  var _useState = React.useState(undefined),
25321
25323
  _useState2 = _slicedToArray__default["default"](_useState, 2),
25322
- selectedItem = _useState2[0],
25323
- setSelectedItem = _useState2[1];
25324
+ selectedItemIndex = _useState2[0],
25325
+ setSelectedItemIndex = _useState2[1];
25324
25326
  var itemsRef = [];
25325
25327
  var isSelected = function isSelected(item) {
25326
- return selectedItem === values.findIndex(function (value) {
25328
+ return selectedItemIndex === values.findIndex(function (value) {
25327
25329
  return getId(value) === getId(item);
25328
25330
  });
25329
25331
  };
@@ -25354,32 +25356,30 @@ var List = function List(_ref) {
25354
25356
  }, [modifyText, findItemIndex]);
25355
25357
  var selectItem = React.useCallback(function (item) {
25356
25358
  var index = findItemIndex(item);
25357
- setSelectedItem(index);
25359
+ setSelectedItemIndex(index);
25358
25360
  }, [findItemIndex]);
25359
25361
  var handleKeyDown = React.useCallback(function (event) {
25360
25362
  if (event.key === 'ArrowUp') {
25361
- setSelectedItem(function (prevSelected) {
25363
+ setSelectedItemIndex(function (prevSelected) {
25362
25364
  if (prevSelected === undefined) return 0;
25363
- var newID = prevSelected === 0 ? values.length - 1 : prevSelected - 1;
25364
- dropdownScroll(itemsRef[newID]);
25365
- return newID;
25365
+ var newIndex = prevSelected === 0 ? values.length - 1 : prevSelected - 1;
25366
+ dropdownScroll(itemsRef[newIndex]);
25367
+ return newIndex;
25366
25368
  });
25367
25369
  }
25368
25370
  if (event.key === 'ArrowDown') {
25369
- setSelectedItem(function (prevSelected) {
25371
+ setSelectedItemIndex(function (prevSelected) {
25370
25372
  if (prevSelected === undefined) return 0;
25371
- var newID = prevSelected === values.length - 1 ? 0 : prevSelected + 1;
25372
- dropdownScroll(itemsRef[newID]);
25373
- return newID;
25373
+ var newIndex = prevSelected === values.length - 1 ? 0 : prevSelected + 1;
25374
+ dropdownScroll(itemsRef[newIndex]);
25375
+ return newIndex;
25374
25376
  });
25375
25377
  }
25376
- if ((event.key === 'Enter' || event.key === 'Tab') && selectedItem !== undefined) {
25377
- handleClick(event);
25378
+ if ((event.key === 'Enter' || event.key === 'Tab') && selectedItemIndex !== undefined) {
25379
+ handleClick(event, values[selectedItemIndex]);
25378
25380
  }
25379
25381
  return null;
25380
- }, [selectedItem, values] // eslint-disable-line
25381
- );
25382
-
25382
+ }, [selectedItemIndex, values]);
25383
25383
  React.useEffect(function () {
25384
25384
  document.addEventListener('keydown', handleKeyDown, false);
25385
25385
  return function () {
@@ -27403,6 +27403,7 @@ var CooldownTimer = function (_a) {
27403
27403
  var useCommandTrigger = function () {
27404
27404
  var themeVersion = icons.useChatContext('useCommandTrigger').themeVersion;
27405
27405
  var channelConfig = icons.useChannelStateContext('useCommandTrigger').channelConfig;
27406
+ var t = icons.useTranslationContext('useCommandTrigger').t;
27406
27407
  var commands = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.commands;
27407
27408
  return {
27408
27409
  component: CommandItem,
@@ -27411,7 +27412,7 @@ var useCommandTrigger = function () {
27411
27412
  return [];
27412
27413
  }
27413
27414
  var selectedCommands = commands.filter(function (command) { var _a; return ((_a = command.name) === null || _a === void 0 ? void 0 : _a.indexOf(query)) !== -1; });
27414
- // sort alphabetically unless the you're matching the first char
27415
+ // sort alphabetically unless you're matching the first char
27415
27416
  selectedCommands.sort(function (a, b) {
27416
27417
  var _a, _b;
27417
27418
  var nameA = (_a = a.name) === null || _a === void 0 ? void 0 : _a.toLowerCase();
@@ -27435,8 +27436,23 @@ var useCommandTrigger = function () {
27435
27436
  });
27436
27437
  var result = selectedCommands.slice(0, themeVersion === '2' ? 5 : 10);
27437
27438
  if (onReady)
27438
- onReady(result.filter(function (result) {
27439
+ onReady(result
27440
+ .filter(function (result) {
27439
27441
  return result.name !== undefined;
27442
+ })
27443
+ .map(function (commandData) {
27444
+ var translatedCommandData = {
27445
+ name: commandData.name,
27446
+ };
27447
+ if (commandData.args)
27448
+ translatedCommandData.args = t("".concat(commandData.name, "-command-args"), {
27449
+ defaultValue: commandData.args,
27450
+ });
27451
+ if (commandData.description)
27452
+ translatedCommandData.description = t("".concat(commandData.name, "-command-description"), {
27453
+ defaultValue: commandData.description,
27454
+ });
27455
+ return translatedCommandData;
27440
27456
  }), query);
27441
27457
  return result;
27442
27458
  },
@@ -29993,7 +30009,7 @@ var UnMemoizedChannel = function (props) {
29993
30009
  };
29994
30010
  var ChannelInner = function (props) {
29995
30011
  var _a;
29996
- var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannel : _e, maxNumberOfFiles = props.maxNumberOfFiles, _f = props.multipleUploads, multipleUploads = _f === void 0 ? true : _f, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _g = props.optionalMessageInputProps, optionalMessageInputProps = _g === void 0 ? {} : _g, skipMessageDataMemoization = props.skipMessageDataMemoization;
30012
+ var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannel : _e, maxNumberOfFiles = props.maxNumberOfFiles, _f = props.multipleUploads, multipleUploads = _f === void 0 ? true : _f, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _g = props.optionalMessageInputProps, optionalMessageInputProps = _g === void 0 ? {} : _g, skipMessageDataMemoization = props.skipMessageDataMemoization;
29997
30013
  var _h = icons.useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, latestMessageDatesByChannels = _h.latestMessageDatesByChannels, mutes = _h.mutes, theme = _h.theme;
29998
30014
  var t = icons.useTranslationContext('Channel').t;
29999
30015
  var _j = useChannelContainerClasses({ customClasses: customClasses }), channelClass = _j.channelClass, chatClass = _j.chatClass, chatContainerClass = _j.chatContainerClass, windowsEmojiClass = _j.windowsEmojiClass;
@@ -30330,6 +30346,28 @@ var ChannelInner = function (props) {
30330
30346
  }
30331
30347
  });
30332
30348
  }); };
30349
+ var deleteMessage = React.useCallback(function (message) { return icons.__awaiter(void 0, void 0, void 0, function () {
30350
+ var deletedMessage, result;
30351
+ return icons.__generator(this, function (_a) {
30352
+ switch (_a.label) {
30353
+ case 0:
30354
+ if (!(message === null || message === void 0 ? void 0 : message.id)) {
30355
+ throw new Error('Cannot delete a message - missing message ID.');
30356
+ }
30357
+ if (!doDeleteMessageRequest) return [3 /*break*/, 2];
30358
+ return [4 /*yield*/, doDeleteMessageRequest(message)];
30359
+ case 1:
30360
+ deletedMessage = _a.sent();
30361
+ return [3 /*break*/, 4];
30362
+ case 2: return [4 /*yield*/, client.deleteMessage(message.id)];
30363
+ case 3:
30364
+ result = _a.sent();
30365
+ deletedMessage = result.message;
30366
+ _a.label = 4;
30367
+ case 4: return [2 /*return*/, deletedMessage];
30368
+ }
30369
+ });
30370
+ }); }, [client, doDeleteMessageRequest]);
30333
30371
  var updateMessage = function (updatedMessage) {
30334
30372
  // add the message to the local channel state
30335
30373
  channel.state.addMessageSorted(updatedMessage, true);
@@ -30513,6 +30551,7 @@ var ChannelInner = function (props) {
30513
30551
  var channelActionContextValue = React.useMemo(function () { return ({
30514
30552
  addNotification: addNotification,
30515
30553
  closeThread: closeThread,
30554
+ deleteMessage: deleteMessage,
30516
30555
  dispatch: dispatch,
30517
30556
  editMessage: editMessage,
30518
30557
  jumpToLatestMessage: jumpToLatestMessage,
@@ -30531,6 +30570,7 @@ var ChannelInner = function (props) {
30531
30570
  updateMessage: updateMessage,
30532
30571
  }); }, [
30533
30572
  channel.cid,
30573
+ deleteMessage,
30534
30574
  enrichURLForPreviewConfig === null || enrichURLForPreviewConfig === void 0 ? void 0 : enrichURLForPreviewConfig.findURLFn,
30535
30575
  enrichURLForPreviewConfig === null || enrichURLForPreviewConfig === void 0 ? void 0 : enrichURLForPreviewConfig.onLinkPreviewDismissed,
30536
30576
  loadMore,
@@ -31074,8 +31114,7 @@ var RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000;
31074
31114
  var MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000;
31075
31115
  var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs) {
31076
31116
  if (recoveryThrottleIntervalMs === void 0) { recoveryThrottleIntervalMs = RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS; }
31077
- var _a = icons.useChatContext('usePaginatedChannels').channelsQueryState, error = _a.error, setError = _a.setError, setQueryInProgress = _a.setQueryInProgress;
31078
- var _b = React.useState([]), channels = _b[0], setChannels = _b[1];
31117
+ var _a = icons.useChatContext('usePaginatedChannels'), channels = _a.channels, _b = _a.channelsQueryState, error = _b.error, setError = _b.setError, setQueryInProgress = _b.setQueryInProgress, setChannels = _a.setChannels;
31079
31118
  var _c = React.useState(true), hasNextPage = _c[0], setHasNextPage = _c[1];
31080
31119
  var lastRecoveryTimestamp = React.useRef();
31081
31120
  var recoveryThrottleInterval = recoveryThrottleIntervalMs < MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS
@@ -31155,6 +31194,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
31155
31194
  React.useEffect(function () {
31156
31195
  queryChannels('reload');
31157
31196
  }, [filterString, sortString]);
31197
+ // FIXME: state refactor (breaking change) is needed - do not forward `channels` and `setChannel`
31158
31198
  return {
31159
31199
  channels: channels,
31160
31200
  hasNextPage: hasNextPage,
@@ -31756,13 +31796,15 @@ var deprecationAndReplacementWarning = function (pairs, component) {
31756
31796
  };
31757
31797
 
31758
31798
  var UnMemoizedLoadMoreButton = function (_a) {
31759
- var _b = _a.children, children = _b === void 0 ? 'Load more' : _b, isLoading = _a.isLoading, onClick = _a.onClick, refreshing = _a.refreshing;
31799
+ var children = _a.children, isLoading = _a.isLoading, onClick = _a.onClick, refreshing = _a.refreshing;
31800
+ var t = icons.useTranslationContext('UnMemoizedLoadMoreButton').t;
31801
+ var childrenOrDefaultString = children !== null && children !== void 0 ? children : t('Load more');
31760
31802
  var loading = typeof isLoading !== 'undefined' ? isLoading : refreshing;
31761
31803
  React.useEffect(function () {
31762
31804
  deprecationAndReplacementWarning([[{ refreshing: refreshing }, { isLoading: isLoading }]], 'LoadMoreButton');
31763
31805
  }, []);
31764
31806
  return (React__default["default"].createElement("div", { className: 'str-chat__load-more-button' },
31765
- React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : children)));
31807
+ React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : childrenOrDefaultString)));
31766
31808
  };
31767
31809
  var LoadMoreButton = React__default["default"].memo(UnMemoizedLoadMoreButton);
31768
31810
 
@@ -31897,7 +31939,8 @@ var UnMemoizedChannelList = function (props) {
31897
31939
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
31898
31940
  React__default["default"].createElement("div", { className: className, ref: channelListRef },
31899
31941
  showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, icons.__assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
31900
- showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, isLoading: channelsQueryState.queryInProgress === 'load-more', loadNextPage: loadNextPage }, renderChannels
31942
+ showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: !!channelsQueryState.queryInProgress &&
31943
+ ['reload', 'uninitialized'].includes(channelsQueryState.queryInProgress), LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, isLoading: channelsQueryState.queryInProgress === 'load-more', loadNextPage: loadNextPage }, renderChannels
31901
31944
  ? renderChannels(loadedChannels, renderChannel)
31902
31945
  : loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
31903
31946
  };
@@ -31906,7 +31949,7 @@ var UnMemoizedChannelList = function (props) {
31906
31949
  */
31907
31950
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
31908
31951
 
31909
- var version = '11.0.0-rc.2';
31952
+ var version = '11.0.0-rc.4';
31910
31953
 
31911
31954
  var useChat = function (_a) {
31912
31955
  var _b, _c;
@@ -31916,10 +31959,11 @@ var useChat = function (_a) {
31916
31959
  tDateTimeParser: icons.defaultDateTimeParser,
31917
31960
  userLanguage: 'en',
31918
31961
  }), translators = _e[0], setTranslators = _e[1];
31919
- var _f = React.useState(), channel = _f[0], setChannel = _f[1];
31920
- var _g = React.useState([]), mutes = _g[0], setMutes = _g[1];
31921
- var _h = React.useState(initialNavOpen), navOpen = _h[0], setNavOpen = _h[1];
31922
- var _j = React.useState({}), latestMessageDatesByChannels = _j[0], setLatestMessageDatesByChannels = _j[1];
31962
+ var _f = React.useState([]), channels = _f[0], setChannels = _f[1];
31963
+ var _g = React.useState(), channel = _g[0], setChannel = _g[1];
31964
+ var _h = React.useState([]), mutes = _h[0], setMutes = _h[1];
31965
+ var _j = React.useState(initialNavOpen), navOpen = _j[0], setNavOpen = _j[1];
31966
+ var _k = React.useState({}), latestMessageDatesByChannels = _k[0], setLatestMessageDatesByChannels = _k[1];
31923
31967
  var clientMutes = ((_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes) || [];
31924
31968
  var closeMobileNav = function () { return setNavOpen(false); };
31925
31969
  var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
@@ -31990,6 +32034,7 @@ var useChat = function (_a) {
31990
32034
  }, [(_c = client.user) === null || _c === void 0 ? void 0 : _c.id]);
31991
32035
  return {
31992
32036
  channel: channel,
32037
+ channels: channels,
31993
32038
  closeMobileNav: closeMobileNav,
31994
32039
  getAppSettings: getAppSettings,
31995
32040
  latestMessageDatesByChannels: latestMessageDatesByChannels,
@@ -31997,13 +32042,14 @@ var useChat = function (_a) {
31997
32042
  navOpen: navOpen,
31998
32043
  openMobileNav: openMobileNav,
31999
32044
  setActiveChannel: setActiveChannel,
32045
+ setChannels: setChannels,
32000
32046
  translators: translators,
32001
32047
  };
32002
32048
  };
32003
32049
 
32004
32050
  var useCreateChatContext = function (value) {
32005
32051
  var _a;
32006
- var channel = value.channel, channelsQueryState = value.channelsQueryState, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, getAppSettings = value.getAppSettings, latestMessageDatesByChannels = value.latestMessageDatesByChannels, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, themeVersion = value.themeVersion, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
32052
+ var channel = value.channel, channels = value.channels, channelsQueryState = value.channelsQueryState, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, getAppSettings = value.getAppSettings, latestMessageDatesByChannels = value.latestMessageDatesByChannels, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, setChannels = value.setChannels, theme = value.theme, themeVersion = value.themeVersion, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
32007
32053
  var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
32008
32054
  var channelsQueryError = channelsQueryState.error;
32009
32055
  var channelsQueryInProgress = channelsQueryState.queryInProgress;
@@ -32011,6 +32057,7 @@ var useCreateChatContext = function (value) {
32011
32057
  var mutedUsersLength = mutes.length;
32012
32058
  var chatContext = React.useMemo(function () { return ({
32013
32059
  channel: channel,
32060
+ channels: channels,
32014
32061
  channelsQueryState: channelsQueryState,
32015
32062
  client: client,
32016
32063
  closeMobileNav: closeMobileNav,
@@ -32021,6 +32068,7 @@ var useCreateChatContext = function (value) {
32021
32068
  navOpen: navOpen,
32022
32069
  openMobileNav: openMobileNav,
32023
32070
  setActiveChannel: setActiveChannel,
32071
+ setChannels: setChannels,
32024
32072
  theme: theme,
32025
32073
  themeVersion: themeVersion,
32026
32074
  useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
@@ -32028,17 +32076,19 @@ var useCreateChatContext = function (value) {
32028
32076
  channelCid,
32029
32077
  channelsQueryError,
32030
32078
  channelsQueryInProgress,
32079
+ channels,
32031
32080
  clientValues,
32032
32081
  getAppSettings,
32033
32082
  mutedUsersLength,
32034
32083
  navOpen,
32084
+ setChannels,
32035
32085
  ]);
32036
32086
  return chatContext;
32037
32087
  };
32038
32088
 
32039
32089
  var useChannelsQueryState = function () {
32040
32090
  var _a = React.useState(null), error = _a[0], setError = _a[1];
32041
- var _b = React.useState(null), queryInProgress = _b[0], setQueryInProgress = _b[1];
32091
+ var _b = React.useState('uninitialized'), queryInProgress = _b[0], setQueryInProgress = _b[1];
32042
32092
  return {
32043
32093
  error: error,
32044
32094
  queryInProgress: queryInProgress,
@@ -32090,7 +32140,7 @@ var useCustomStyles = function (customStyles) {
32090
32140
  */
32091
32141
  var Chat = function (props) {
32092
32142
  var children = props.children, client = props.client, customClasses = props.customClasses, customStyles = props.customStyles, _a = props.darkMode, darkMode = _a === void 0 ? false : _a, defaultLanguage = props.defaultLanguage, i18nInstance = props.i18nInstance, _b = props.initialNavOpen, initialNavOpen = _b === void 0 ? true : _b, _c = props.theme, theme = _c === void 0 ? 'messaging light' : _c, _d = props.useImageFlagEmojisOnWindows, useImageFlagEmojisOnWindows = _d === void 0 ? false : _d;
32093
- var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, latestMessageDatesByChannels = _e.latestMessageDatesByChannels, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
32143
+ var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, channels = _e.channels, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, latestMessageDatesByChannels = _e.latestMessageDatesByChannels, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, setChannels = _e.setChannels, translators = _e.translators;
32094
32144
  var channelsQueryState = useChannelsQueryState();
32095
32145
  var themeVersion = typeof window !== 'undefined'
32096
32146
  ? (window
@@ -32101,6 +32151,7 @@ var Chat = function (props) {
32101
32151
  useCustomStyles(darkMode ? darkModeTheme : customStyles);
32102
32152
  var chatContextValue = useCreateChatContext({
32103
32153
  channel: channel,
32154
+ channels: channels,
32104
32155
  channelsQueryState: channelsQueryState,
32105
32156
  client: client,
32106
32157
  closeMobileNav: closeMobileNav,
@@ -32111,6 +32162,7 @@ var Chat = function (props) {
32111
32162
  navOpen: navOpen,
32112
32163
  openMobileNav: openMobileNav,
32113
32164
  setActiveChannel: setActiveChannel,
32165
+ setChannels: setChannels,
32114
32166
  theme: theme,
32115
32167
  themeVersion: themeVersion,
32116
32168
  useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
@@ -32308,11 +32360,11 @@ function useActionHandler(message) {
32308
32360
  var useDeleteHandler = function (message, notifications) {
32309
32361
  if (notifications === void 0) { notifications = {}; }
32310
32362
  var getErrorNotification = notifications.getErrorNotification, notify = notifications.notify;
32311
- var updateMessage = icons.useChannelActionContext('useDeleteHandler').updateMessage;
32363
+ var _a = icons.useChannelActionContext('useDeleteHandler'), deleteMessage = _a.deleteMessage, updateMessage = _a.updateMessage;
32312
32364
  var client = icons.useChatContext('useDeleteHandler').client;
32313
32365
  var t = icons.useTranslationContext('useDeleteHandler').t;
32314
32366
  return function (event) { return icons.__awaiter(void 0, void 0, void 0, function () {
32315
- var data, errorMessage;
32367
+ var deletedMessage, errorMessage;
32316
32368
  return icons.__generator(this, function (_a) {
32317
32369
  switch (_a.label) {
32318
32370
  case 0:
@@ -32323,10 +32375,10 @@ var useDeleteHandler = function (message, notifications) {
32323
32375
  _a.label = 1;
32324
32376
  case 1:
32325
32377
  _a.trys.push([1, 3, , 4]);
32326
- return [4 /*yield*/, client.deleteMessage(message.id)];
32378
+ return [4 /*yield*/, deleteMessage(message)];
32327
32379
  case 2:
32328
- data = _a.sent();
32329
- updateMessage(data.message);
32380
+ deletedMessage = _a.sent();
32381
+ updateMessage(deletedMessage);
32330
32382
  return [3 /*break*/, 4];
32331
32383
  case 3:
32332
32384
  _a.sent();
@@ -390,3 +390,9 @@
390
390
  top: 6px;
391
391
  }
392
392
  }
393
+
394
+ .str-chat__message-textarea-angular-host--autocomplete-hidden {
395
+ mention-list {
396
+ display: none;
397
+ }
398
+ }
@@ -105,47 +105,6 @@
105
105
  }
106
106
  }
107
107
 
108
- /* declare a font faces for our Emoji Replacement font, based on the default font used by Stream Chat React */
109
-
110
- $emoji-flag-unicode-range: U+1F1E6-1F1FF;
111
-
112
- /* png based woff for most browsers */
113
- @font-face {
114
- font-family: ReplaceFlagEmojiPNG;
115
- src: url('#{$assetsPath}/NotoColorEmoji-flags.woff2') format('woff2');
116
- /* using the unicode-range attribute to limit the reach of the Flag Emoji web font to only flags */
117
- unicode-range: $emoji-flag-unicode-range;
118
- }
119
-
120
- /* svg based for firefox */
121
- @font-face {
122
- font-family: ReplaceFlagEmojiSVG;
123
- src: url('#{$assetsPath}/EmojiOneColor.woff2') format('woff2');
124
- unicode-range: $emoji-flag-unicode-range;
125
- }
126
-
127
- .str-chat--windows-flags {
128
- .str-chat__textarea__textarea,
129
- .str-chat__message-text-inner *,
130
- .str-chat__emoji-item--entity,
131
- .emoji-mart-emoji-native * {
132
- font-family: ReplaceFlagEmojiPNG, var(--second-font), sans-serif;
133
- font-display: swap;
134
- }
135
- }
136
-
137
- @-moz-document url-prefix('') {
138
- .str-chat--windows-flags {
139
- .str-chat__textarea__textarea,
140
- .str-chat__message-text-inner *,
141
- .str-chat__emoji-item--entity,
142
- .emoji-mart-emoji-native * {
143
- font-family: ReplaceFlagEmojiSVG, var(--second-font), sans-serif;
144
- font-display: swap;
145
- }
146
- }
147
- }
148
-
149
108
  .str-chat-channel-list {
150
109
  float: left;
151
110
  }
@@ -3,7 +3,6 @@
3
3
  @import './base.scss';
4
4
 
5
5
  // External dependencies (copied from libraries to rectify built file path discrepancies)
6
- @import '../vendor/emoji-mart.scss'; // copy from '../../node_modules/emoji-mart/css/emoji-mart.css'
7
6
  @import '../vendor/mml-react.scss'; // copy from '../../node_modules/mml-react/dist/styles/index.css'
8
7
  @import '../vendor/react-file-utils.scss'; // copy from '../../node_modules/react-file-utils/dist/index.css'
9
8
  @import '../vendor/react-image-gallery.scss'; // copy from '../../node_modules/react-image-gallery/styles/css/image-gallery.css'
@@ -63,3 +63,9 @@
63
63
  width: 100%;
64
64
  }
65
65
  }
66
+
67
+ .str-chat__message-textarea-angular-host--autocomplete-hidden {
68
+ mention-list {
69
+ display: none;
70
+ }
71
+ }
@@ -42,7 +42,7 @@
42
42
  flex-grow: 1;
43
43
  width: 100%;
44
44
  display: flex;
45
- align-items: flex-end;
45
+ align-items: center;
46
46
  justify-content: center;
47
47
 
48
48
  .str-chat__file-input-container {
@@ -18,6 +18,7 @@ $emoji-flag-unicode-range: U+1F1E6-1F1FF;
18
18
  }
19
19
 
20
20
  .str-chat--windows-flags {
21
+ // TODO: consider adding the rule for reactions (list & selector) if we ever decide to make them use native emojis
21
22
  .str-chat__textarea__textarea,
22
23
  .str-chat__message-text-inner *,
23
24
  .str-chat__emoji-item--entity,
@@ -1,5 +1,4 @@
1
1
  @use 'base';
2
- @use 'emoji-replacement';
3
2
  @use 'global-layout-variables';
4
3
 
5
4
  @use 'Avatar/Avatar-layout';
@@ -2,7 +2,6 @@
2
2
  @use 'palette-variables';
3
3
  @use 'global-theme-variables';
4
4
 
5
- @use 'vendor/emoji-mart.scss';
6
5
  @use 'vendor/react-image-gallery';
7
6
 
8
7
  @use 'common/CTAButton/CTAButton-theme';
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "11.0.0-rc.2";
1
+ export declare const version = "11.0.0-rc.4";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export var version = '11.0.0-rc.2';
1
+ export var version = '11.0.0-rc.4';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stream-chat-react",
3
- "version": "11.0.0-rc.2",
3
+ "version": "11.0.0-rc.4",
4
4
  "description": "React components to create chat conversations or livestream style chat",
5
5
  "author": "GetStream",
6
6
  "homepage": "https://getstream.io/chat/",
@@ -24,9 +24,20 @@
24
24
  "require": "./dist/components/Emojis/index.cjs.js",
25
25
  "import": "./dist/components/Emojis/index.js",
26
26
  "default": "./dist/components/Emojis/index.js"
27
+ },
28
+ "./dist/css/*": {
29
+ "default": "./dist/css/*"
30
+ },
31
+ "./dist/scss/*": {
32
+ "default": "./dist/scss/*"
33
+ },
34
+ "./css/*": {
35
+ "default": "./dist/css/*"
36
+ },
37
+ "./scss/*": {
38
+ "default": "./dist/scss/*"
27
39
  }
28
40
  },
29
- "style": "dist/css/v2/index.css",
30
41
  "sideEffects": [
31
42
  "*.css"
32
43
  ],
@@ -42,7 +53,7 @@
42
53
  "dependencies": {
43
54
  "@braintree/sanitize-url": "^6.0.4",
44
55
  "@popperjs/core": "^2.11.5",
45
- "@stream-io/stream-chat-css": "^3.13.0",
56
+ "@stream-io/stream-chat-css": "^4.0.0-rc.5",
46
57
  "clsx": "^2.0.0",
47
58
  "dayjs": "^1.10.4",
48
59
  "emoji-regex": "^9.2.0",
@@ -151,6 +162,7 @@
151
162
  "babel-plugin-module-resolver": "^4.1.0",
152
163
  "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
153
164
  "codecov": "^3.8.1",
165
+ "conventional-changelog-conventionalcommits": "^7.0.2",
154
166
  "core-js": "^3.6.5",
155
167
  "css-loader": "^5.0.1",
156
168
  "emoji-mart": "^5.5.2",