stream-chat-react 6.9.0 → 6.12.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 (238) hide show
  1. package/dist/browser.full-bundle.js +2624 -2045
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +3 -3
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/Card.js +1 -1
  6. package/dist/components/AutoCompleteTextarea/Header.d.ts +2 -0
  7. package/dist/components/AutoCompleteTextarea/Header.d.ts.map +1 -1
  8. package/dist/components/AutoCompleteTextarea/Header.js +10 -9
  9. package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
  10. package/dist/components/AutoCompleteTextarea/List.js +2 -2
  11. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  12. package/dist/components/AutoCompleteTextarea/Textarea.js +23 -13
  13. package/dist/components/Channel/Channel.d.ts +8 -3
  14. package/dist/components/Channel/Channel.d.ts.map +1 -1
  15. package/dist/components/Channel/Channel.js +29 -12
  16. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +2 -10
  17. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  18. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +11 -5
  19. package/dist/components/Channel/hooks/useEditMessageHandler.js +1 -1
  20. package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
  21. package/dist/components/ChannelHeader/ChannelHeader.js +3 -3
  22. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  23. package/dist/components/ChannelList/ChannelList.js +5 -8
  24. package/dist/components/ChannelList/ChannelListMessenger.d.ts +2 -0
  25. package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
  26. package/dist/components/ChannelList/hooks/useChannelDeletedListener.js +1 -1
  27. package/dist/components/ChannelList/hooks/useChannelHiddenListener.js +1 -1
  28. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.js +1 -1
  29. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +1 -1
  30. package/dist/components/ChannelList/hooks/useChannelVisibleListener.js +1 -1
  31. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.js +1 -1
  32. package/dist/components/ChannelList/hooks/useMessageNewListener.js +1 -1
  33. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
  34. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +1 -1
  35. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
  36. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.js +1 -1
  37. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
  38. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.js +1 -1
  39. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  40. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +1 -0
  41. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.js +1 -1
  42. package/dist/components/ChannelPreview/ChannelPreview.js +2 -2
  43. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.js +1 -1
  44. package/dist/components/ChannelSearch/ChannelSearch.js +1 -1
  45. package/dist/components/ChannelSearch/SearchInput.js +1 -1
  46. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  47. package/dist/components/Chat/Chat.d.ts +1 -1
  48. package/dist/components/Chat/Chat.d.ts.map +1 -1
  49. package/dist/components/Chat/Chat.js +2 -1
  50. package/dist/components/Chat/hooks/useChat.d.ts +2 -1
  51. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  52. package/dist/components/Chat/hooks/useChat.js +13 -6
  53. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  54. package/dist/components/Chat/hooks/useCreateChatContext.js +3 -2
  55. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +1 -0
  56. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
  57. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +4 -4
  58. package/dist/components/ChatDown/ChatDown.js +1 -1
  59. package/dist/components/DateSeparator/DateSeparator.js +1 -1
  60. package/dist/components/EmptyStateIndicator/EmptyStateIndicator.js +1 -1
  61. package/dist/components/EventComponent/EventComponent.js +1 -1
  62. package/dist/components/Gallery/Gallery.js +1 -1
  63. package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
  64. package/dist/components/MML/MML.js +1 -1
  65. package/dist/components/Message/FixedHeightMessage.js +4 -4
  66. package/dist/components/Message/Message.d.ts.map +1 -1
  67. package/dist/components/Message/Message.js +3 -6
  68. package/dist/components/Message/MessageCommerce.js +2 -2
  69. package/dist/components/Message/MessageDeleted.js +1 -1
  70. package/dist/components/Message/MessageLivestream.d.ts.map +1 -1
  71. package/dist/components/Message/MessageLivestream.js +5 -6
  72. package/dist/components/Message/MessageOptions.js +1 -1
  73. package/dist/components/Message/MessageRepliesCountButton.js +1 -1
  74. package/dist/components/Message/MessageSimple.js +2 -2
  75. package/dist/components/Message/MessageStatus.d.ts.map +1 -1
  76. package/dist/components/Message/MessageStatus.js +4 -4
  77. package/dist/components/Message/MessageTeam.js +3 -3
  78. package/dist/components/Message/MessageText.d.ts.map +1 -1
  79. package/dist/components/Message/MessageText.js +3 -3
  80. package/dist/components/Message/MessageTimestamp.d.ts.map +1 -1
  81. package/dist/components/Message/MessageTimestamp.js +2 -2
  82. package/dist/components/Message/QuotedMessage.d.ts.map +1 -1
  83. package/dist/components/Message/QuotedMessage.js +5 -4
  84. package/dist/components/Message/hooks/useActionHandler.d.ts.map +1 -1
  85. package/dist/components/Message/hooks/useActionHandler.js +2 -2
  86. package/dist/components/Message/hooks/useDeleteHandler.js +3 -3
  87. package/dist/components/Message/hooks/useFlagHandler.js +2 -2
  88. package/dist/components/Message/hooks/useMentionsHandler.js +1 -1
  89. package/dist/components/Message/hooks/useMuteHandler.js +3 -3
  90. package/dist/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
  91. package/dist/components/Message/hooks/useOpenThreadHandler.js +1 -1
  92. package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
  93. package/dist/components/Message/hooks/usePinHandler.js +10 -17
  94. package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  95. package/dist/components/Message/hooks/useReactionHandler.js +18 -16
  96. package/dist/components/Message/hooks/useRetryHandler.js +1 -1
  97. package/dist/components/Message/hooks/useUserRole.d.ts +2 -2
  98. package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
  99. package/dist/components/Message/hooks/useUserRole.js +8 -6
  100. package/dist/components/Message/types.d.ts +1 -1
  101. package/dist/components/Message/types.d.ts.map +1 -1
  102. package/dist/components/Message/utils.d.ts.map +1 -1
  103. package/dist/components/Message/utils.js +9 -4
  104. package/dist/components/MessageActions/MessageActions.js +2 -2
  105. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  106. package/dist/components/MessageActions/MessageActionsBox.js +3 -3
  107. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
  108. package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -1
  109. package/dist/components/MessageInput/DropzoneProvider.d.ts +5 -0
  110. package/dist/components/MessageInput/DropzoneProvider.d.ts.map +1 -0
  111. package/dist/components/MessageInput/DropzoneProvider.js +31 -0
  112. package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
  113. package/dist/components/MessageInput/EditMessageForm.js +4 -4
  114. package/dist/components/MessageInput/EmojiPicker.js +3 -3
  115. package/dist/components/MessageInput/MessageInput.d.ts +2 -2
  116. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  117. package/dist/components/MessageInput/MessageInput.js +17 -7
  118. package/dist/components/MessageInput/MessageInputFlat.js +4 -4
  119. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  120. package/dist/components/MessageInput/MessageInputSmall.js +4 -4
  121. package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
  122. package/dist/components/MessageInput/QuotedMessagePreview.js +4 -4
  123. package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
  124. package/dist/components/MessageInput/UploadsPreview.js +2 -2
  125. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  126. package/dist/components/MessageInput/hooks/useAttachments.js +1 -1
  127. package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
  128. package/dist/components/MessageInput/hooks/useCommandTrigger.js +2 -3
  129. package/dist/components/MessageInput/hooks/useCooldownTimer.js +2 -2
  130. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  131. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +9 -1
  132. package/dist/components/MessageInput/hooks/useEmojiIndex.js +1 -1
  133. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  134. package/dist/components/MessageInput/hooks/useFileUploads.js +32 -16
  135. package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
  136. package/dist/components/MessageInput/hooks/useImageUploads.js +32 -16
  137. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +14 -3
  138. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  139. package/dist/components/MessageInput/hooks/useMessageInputState.js +15 -7
  140. package/dist/components/MessageInput/hooks/useMessageInputText.js +1 -1
  141. package/dist/components/MessageInput/hooks/useSubmitHandler.js +3 -3
  142. package/dist/components/MessageInput/hooks/useUserTrigger.js +3 -2
  143. package/dist/components/MessageInput/hooks/utils.d.ts +15 -1
  144. package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
  145. package/dist/components/MessageInput/hooks/utils.js +60 -4
  146. package/dist/components/MessageInput/icons.js +5 -5
  147. package/dist/components/MessageList/ConnectionStatus.js +2 -2
  148. package/dist/components/MessageList/MessageList.d.ts +4 -9
  149. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  150. package/dist/components/MessageList/MessageList.js +11 -18
  151. package/dist/components/MessageList/MessageListNotifications.d.ts +11 -0
  152. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -0
  153. package/dist/components/MessageList/MessageListNotifications.js +12 -0
  154. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  155. package/dist/components/MessageList/VirtualizedMessageList.js +13 -14
  156. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts +1 -0
  157. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
  158. package/dist/components/MessageList/hooks/useEnrichedMessages.js +5 -4
  159. package/dist/components/MessageList/hooks/useGiphyPreview.js +1 -1
  160. package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
  161. package/dist/components/MessageList/hooks/useMessageListElements.js +3 -3
  162. package/dist/components/MessageList/hooks/useMessageListScrollManager.js +1 -1
  163. package/dist/components/MessageList/index.d.ts +1 -0
  164. package/dist/components/MessageList/index.d.ts.map +1 -1
  165. package/dist/components/MessageList/index.js +1 -0
  166. package/dist/components/Modal/Modal.js +1 -1
  167. package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
  168. package/dist/components/Reactions/ReactionSelector.js +3 -3
  169. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  170. package/dist/components/Reactions/ReactionsList.js +2 -2
  171. package/dist/components/Reactions/SimpleReactionsList.js +2 -2
  172. package/dist/components/Thread/Thread.d.ts.map +1 -1
  173. package/dist/components/Thread/Thread.js +8 -9
  174. package/dist/components/TypingIndicator/TypingIndicator.d.ts +3 -3
  175. package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  176. package/dist/components/TypingIndicator/TypingIndicator.js +7 -4
  177. package/dist/components/Window/Window.js +1 -1
  178. package/dist/context/ChannelActionContext.d.ts +2 -2
  179. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  180. package/dist/context/ChannelActionContext.js +8 -3
  181. package/dist/context/ChannelStateContext.d.ts +5 -3
  182. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  183. package/dist/context/ChannelStateContext.js +8 -3
  184. package/dist/context/ChatContext.d.ts +6 -4
  185. package/dist/context/ChatContext.d.ts.map +1 -1
  186. package/dist/context/ChatContext.js +9 -2
  187. package/dist/context/ComponentContext.d.ts +4 -4
  188. package/dist/context/ComponentContext.d.ts.map +1 -1
  189. package/dist/context/ComponentContext.js +8 -3
  190. package/dist/context/EmojiContext.d.ts +2 -2
  191. package/dist/context/EmojiContext.d.ts.map +1 -1
  192. package/dist/context/EmojiContext.js +8 -3
  193. package/dist/context/MessageContext.d.ts +3 -3
  194. package/dist/context/MessageContext.d.ts.map +1 -1
  195. package/dist/context/MessageContext.js +9 -2
  196. package/dist/context/MessageInputContext.d.ts +3 -6
  197. package/dist/context/MessageInputContext.d.ts.map +1 -1
  198. package/dist/context/MessageInputContext.js +4 -6
  199. package/dist/context/TranslationContext.d.ts +1 -1
  200. package/dist/context/TranslationContext.d.ts.map +1 -1
  201. package/dist/context/TranslationContext.js +8 -1
  202. package/dist/context/TypingContext.d.ts +2 -2
  203. package/dist/context/TypingContext.d.ts.map +1 -1
  204. package/dist/context/TypingContext.js +9 -2
  205. package/dist/css/index.css +1 -1
  206. package/dist/i18n/Streami18n.d.ts +1 -0
  207. package/dist/i18n/Streami18n.d.ts.map +1 -1
  208. package/dist/i18n/Streami18n.js +2 -2
  209. package/dist/i18n/de.json +5 -4
  210. package/dist/i18n/en.json +1 -0
  211. package/dist/i18n/es.json +1 -0
  212. package/dist/i18n/fr.json +1 -0
  213. package/dist/i18n/hi.json +1 -0
  214. package/dist/i18n/it.json +1 -0
  215. package/dist/i18n/ja.json +1 -0
  216. package/dist/i18n/ko.json +1 -0
  217. package/dist/i18n/nl.json +1 -0
  218. package/dist/i18n/pt.json +1 -0
  219. package/dist/i18n/ru.json +1 -0
  220. package/dist/i18n/tr.json +1 -0
  221. package/dist/index.cjs.js +645 -428
  222. package/dist/index.cjs.js.map +1 -1
  223. package/dist/scss/Avatar.scss +19 -2
  224. package/dist/scss/Message.scss +7 -6
  225. package/dist/scss/MessageInputFlat.scss +4 -0
  226. package/dist/scss/MessageList.scss +10 -2
  227. package/dist/scss/MessageNotification.scss +36 -0
  228. package/dist/scss/_base.scss +8 -3
  229. package/dist/scss/_variables.scss +1 -1
  230. package/dist/types/types.d.ts +1 -0
  231. package/dist/types/types.d.ts.map +1 -1
  232. package/dist/utils.d.ts +7 -0
  233. package/dist/utils.d.ts.map +1 -1
  234. package/dist/utils.js +6 -6
  235. package/dist/version.d.ts +1 -1
  236. package/dist/version.d.ts.map +1 -1
  237. package/dist/version.js +1 -1
  238. package/package.json +13 -9
package/dist/index.cjs.js CHANGED
@@ -308,7 +308,14 @@ var TranslationProvider = function (_a) {
308
308
  var children = _a.children, value = _a.value;
309
309
  return (React__default['default'].createElement(TranslationContext.Provider, { value: value }, children));
310
310
  };
311
- var useTranslationContext = function () { return React.useContext(TranslationContext); };
311
+ var useTranslationContext = function (componentName) {
312
+ var contextValue = React.useContext(TranslationContext);
313
+ if (!contextValue) {
314
+ console.warn("The useTranslationContext hook was called outside of the TranslationContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the " + componentName + " component.");
315
+ return {};
316
+ }
317
+ return contextValue;
318
+ };
312
319
  var withTranslationContext = function (Component) {
313
320
  var WithTranslationContextComponent = function (props) {
314
321
  var translationContext = useTranslationContext();
@@ -320,7 +327,7 @@ var withTranslationContext = function (Component) {
320
327
 
321
328
  var UnMemoizedCard = function (props) {
322
329
  var image_url = props.image_url, og_scrape_url = props.og_scrape_url, text = props.text, thumb_url = props.thumb_url, title = props.title, title_link = props.title_link, type = props.type;
323
- var t = useTranslationContext().t;
330
+ var t = useTranslationContext('Card').t;
324
331
  var image = thumb_url || image_url;
325
332
  var trimUrl = function (url) {
326
333
  if (url !== undefined && url !== null) {
@@ -381,7 +388,7 @@ var UnMemoizedGallery = function (props) {
381
388
  var images = props.images;
382
389
  var _a = React.useState(0), index = _a[0], setIndex = _a[1];
383
390
  var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
384
- var t = useTranslationContext().t;
391
+ var t = useTranslationContext('Gallery').t;
385
392
  var toggleModal = function (selectedIndex) {
386
393
  if (modalOpen) {
387
394
  setModalOpen(false);
@@ -610,13 +617,18 @@ var Item = /*#__PURE__*/React__default['default'].forwardRef(function Item(props
610
617
  })));
611
618
  });
612
619
 
613
- var ComponentContext = React__default['default'].createContext({});
620
+ var ComponentContext = React__default['default'].createContext(undefined);
614
621
  var ComponentProvider = function (_a) {
615
622
  var children = _a.children, value = _a.value;
616
623
  return (React__default['default'].createElement(ComponentContext.Provider, { value: value }, children));
617
624
  };
618
- var useComponentContext = function () {
619
- return React.useContext(ComponentContext);
625
+ var useComponentContext = function (componentName) {
626
+ var contextValue = React.useContext(ComponentContext);
627
+ if (!contextValue) {
628
+ console.warn("The useComponentContext hook was called outside of the ComponentContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
629
+ return {};
630
+ }
631
+ return contextValue;
620
632
  };
621
633
  /**
622
634
  * Typescript currently does not support partial inference, so if ComponentContext
@@ -756,7 +768,7 @@ var renderText = function (text, mentioned_users, options) {
756
768
  if (noParsingNeeded.length > 0 || linkIsInBlock)
757
769
  return;
758
770
  var displayLink = type === 'email' ? value : value.replace(detectHttp, '');
759
- newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeURI(href) + ")");
771
+ newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeURI(decodeURI(href)) + ")");
760
772
  });
761
773
  var plugins = [emojiMarkdownPlugin];
762
774
  if (mentioned_users === null || mentioned_users === void 0 ? void 0 : mentioned_users.length) {
@@ -805,26 +817,27 @@ var getWholeChar = function (str, i) {
805
817
  return '';
806
818
  };
807
819
 
808
- var DefaultSuggestionListHeader = function (_a) {
809
- var value = _a.value;
810
- var t = useTranslationContext().t;
811
- if (value[0] === '/') {
820
+ var DefaultSuggestionListHeader = function (props) {
821
+ var currentTrigger = props.currentTrigger, value = props.value;
822
+ var t = useTranslationContext('DefaultSuggestionListHeader').t;
823
+ var triggerIndex = value.lastIndexOf(currentTrigger);
824
+ if (currentTrigger === '/') {
812
825
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
813
826
  t('Commands matching'),
814
827
  " ",
815
- React__default['default'].createElement("strong", null, value.replace('/', ''))));
828
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
816
829
  }
817
- if (value[0] === ':') {
830
+ if (currentTrigger === ':') {
818
831
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
819
832
  t('Emoji matching'),
820
833
  " ",
821
- React__default['default'].createElement("strong", null, value.replace(':', ''))));
834
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
822
835
  }
823
- if (value[0] === '@') {
836
+ if (currentTrigger === '@') {
824
837
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
825
838
  t('People matching'),
826
839
  " ",
827
- React__default['default'].createElement("strong", null, value.replace('@', ''))));
840
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
828
841
  }
829
842
  return null;
830
843
  };
@@ -1052,6 +1065,7 @@ var List = function List(props) {
1052
1065
  }, /*#__PURE__*/React__default['default'].createElement("li", {
1053
1066
  className: "rta__list-header"
1054
1067
  }, /*#__PURE__*/React__default['default'].createElement(SuggestionHeader, {
1068
+ currentTrigger: currentTrigger,
1055
1069
  value: propValue
1056
1070
  })), values.map(function (item, i) {
1057
1071
  return /*#__PURE__*/React__default['default'].createElement(SuggestionItem, {
@@ -1065,7 +1079,8 @@ var List = function List(props) {
1065
1079
  itemsRef[i] = _ref;
1066
1080
  },
1067
1081
  selected: isSelected(item),
1068
- style: itemStyle
1082
+ style: itemStyle,
1083
+ value: propValue
1069
1084
  });
1070
1085
  }));
1071
1086
  };
@@ -1141,6 +1156,54 @@ var UnMemoizedCommandItem = function (props) {
1141
1156
  };
1142
1157
  var CommandItem = React__default['default'].memo(UnMemoizedCommandItem);
1143
1158
 
1159
+ /**
1160
+ * A round avatar image with fallback to username's first letter
1161
+ */
1162
+ var Avatar = function (props) {
1163
+ var image = props.image, name = props.name, _a = props.onClick, onClick = _a === void 0 ? function () { return undefined; } : _a, _b = props.onMouseOver, onMouseOver = _b === void 0 ? function () { return undefined; } : _b, _c = props.shape, shape = _c === void 0 ? 'circle' : _c, _d = props.size, size = _d === void 0 ? 32 : _d;
1164
+ var _e = React.useState(false), error = _e[0], setError = _e[1];
1165
+ var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1166
+ React.useEffect(function () {
1167
+ setError(false);
1168
+ setLoaded(false);
1169
+ }, [image]);
1170
+ var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1171
+ var initials = getWholeChar(nameStr, 0);
1172
+ return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1173
+ flexBasis: size + "px",
1174
+ fontSize: size / 2 + "px",
1175
+ height: size + "px",
1176
+ lineHeight: size + "px",
1177
+ width: size + "px",
1178
+ }, title: name }, image && !error ? (React__default['default'].createElement("img", { alt: initials, className: "str-chat__avatar-image" + (loaded ? ' str-chat__avatar-image--loaded' : ''), "data-testid": 'avatar-img', onError: function () { return setError(true); }, onLoad: function () { return setLoaded(true); }, src: image, style: {
1179
+ flexBasis: size + "px",
1180
+ height: size + "px",
1181
+ objectFit: 'cover',
1182
+ width: size + "px",
1183
+ } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1184
+ };
1185
+
1186
+ /**
1187
+ * UI component for mentions rendered in suggestion list
1188
+ */
1189
+ var UnMemoizedUserItem = function (props) {
1190
+ var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
1191
+ var hasEntity = Object.keys(entity).length;
1192
+ var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
1193
+ var renderName = function () {
1194
+ if (!hasEntity)
1195
+ return null;
1196
+ return (hasEntity &&
1197
+ itemParts.parts.map(function (part, i) {
1198
+ return part.toLowerCase() === itemParts.match.toLowerCase() ? (React__default['default'].createElement("span", { className: 'str-chat__emoji-item--highlight', key: "part-" + i }, part)) : (React__default['default'].createElement("span", { className: 'str-chat__emoji-item--part', key: "part-" + i }, part));
1199
+ }));
1200
+ };
1201
+ return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
1202
+ React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
1203
+ React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
1204
+ };
1205
+ var UserItem = React__default['default'].memo(UnMemoizedUserItem);
1206
+
1144
1207
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1145
1208
 
1146
1209
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -1277,13 +1340,15 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1277
1340
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_onSelect", function (newToken) {
1278
1341
  var _this$props = _this.props,
1279
1342
  closeCommandsList = _this$props.closeCommandsList,
1343
+ closeMentionsList = _this$props.closeMentionsList,
1280
1344
  onChange = _this$props.onChange,
1281
- showCommandsList = _this$props.showCommandsList;
1345
+ showCommandsList = _this$props.showCommandsList,
1346
+ showMentionsList = _this$props.showMentionsList;
1282
1347
  var _this$state = _this.state,
1283
1348
  stateTrigger = _this$state.currentTrigger,
1284
1349
  selectionEnd = _this$state.selectionEnd,
1285
1350
  textareaValue = _this$state.value;
1286
- var currentTrigger = showCommandsList ? '/' : stateTrigger;
1351
+ var currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;
1287
1352
  if (!currentTrigger) return;
1288
1353
 
1289
1354
  var computeCaretPosition = function computeCaretPosition(position, token, startToken) {
@@ -1304,7 +1369,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1304
1369
  }
1305
1370
  };
1306
1371
 
1307
- var textToModify = showCommandsList ? '/' : textareaValue.slice(0, selectionEnd);
1372
+ var textToModify = showCommandsList ? '/' : showMentionsList ? '@' : textareaValue.slice(0, selectionEnd);
1308
1373
  var startOfTokenPosition = textToModify.lastIndexOf(currentTrigger); // we add space after emoji is selected if a caret position is next
1309
1374
 
1310
1375
  var newTokenString = newToken.caretPosition === 'next' ? "".concat(newToken.text, " ") : newToken.text;
@@ -1330,7 +1395,8 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1330
1395
 
1331
1396
  _this._closeAutocomplete();
1332
1397
 
1333
- closeCommandsList();
1398
+ if (showCommandsList) closeCommandsList();
1399
+ if (showMentionsList) closeMentionsList();
1334
1400
  });
1335
1401
 
1336
1402
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_getItemOnSelect", function (paramTrigger) {
@@ -1491,7 +1557,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1491
1557
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_cleanUpProps", function () {
1492
1558
  var props = _objectSpread({}, _this.props);
1493
1559
 
1494
- var notSafe = ['additionalTextareaProps', 'className', 'closeCommandsList', 'closeOnClickOutside', 'containerClassName', 'containerStyle', 'disableMentions', 'dropdownClassName', 'dropdownStyle', 'grow', 'handleSubmit', 'innerRef', 'itemClassName', 'itemStyle', 'keycodeSubmitKeys', 'listClassName', 'listStyle', 'loaderClassName', 'loaderStyle', 'loadingComponent', 'minChar', 'movePopupAsYouType', 'onCaretPositionChange', 'onChange', 'ref', 'replaceWord', 'scrollToItem', 'showCommandsList', 'SuggestionItem', 'SuggestionList', 'trigger', 'value']; // eslint-disable-next-line
1560
+ var notSafe = ['additionalTextareaProps', 'className', 'closeCommandsList', 'closeMentionsList', 'closeOnClickOutside', 'containerClassName', 'containerStyle', 'disableMentions', 'dropdownClassName', 'dropdownStyle', 'grow', 'handleSubmit', 'innerRef', 'itemClassName', 'itemStyle', 'keycodeSubmitKeys', 'listClassName', 'listStyle', 'loaderClassName', 'loaderStyle', 'loadingComponent', 'minChar', 'movePopupAsYouType', 'onCaretPositionChange', 'onChange', 'ref', 'replaceWord', 'scrollToItem', 'showCommandsList', 'showMentionsList', 'SuggestionItem', 'SuggestionList', 'trigger', 'value']; // eslint-disable-next-line
1495
1561
 
1496
1562
  for (var prop in props) {
1497
1563
  if (notSafe.includes(prop)) delete props[prop];
@@ -1648,6 +1714,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1648
1714
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getTriggerProps", function () {
1649
1715
  var _this$props5 = _this.props,
1650
1716
  showCommandsList = _this$props5.showCommandsList,
1717
+ showMentionsList = _this$props5.showMentionsList,
1651
1718
  trigger = _this$props5.trigger;
1652
1719
  var _this$state6 = _this.state,
1653
1720
  component = _this$state6.component,
@@ -1671,18 +1738,18 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1671
1738
  values: suggestionData
1672
1739
  };
1673
1740
 
1674
- if (showCommandsList && trigger['/']) {
1741
+ if (showCommandsList && trigger['/'] || showMentionsList && trigger['@']) {
1675
1742
  var currentCommands;
1676
- var getCommands = trigger['/'].dataProvider;
1677
- getCommands === null || getCommands === void 0 ? void 0 : getCommands('', '/', function (data) {
1743
+ var getCommands = trigger[showCommandsList ? '/' : '@'].dataProvider;
1744
+ getCommands === null || getCommands === void 0 ? void 0 : getCommands('', showCommandsList ? '/' : '@', function (data) {
1678
1745
  currentCommands = data;
1679
1746
  });
1680
- triggerProps.component = CommandItem;
1681
- triggerProps.currentTrigger = '/';
1682
- triggerProps.getTextToReplace = _this._getTextToReplace('/');
1683
- triggerProps.getSelectedItem = _this._getItemOnSelect('/');
1747
+ triggerProps.component = showCommandsList ? CommandItem : UserItem;
1748
+ triggerProps.currentTrigger = showCommandsList ? '/' : '@';
1749
+ triggerProps.getTextToReplace = _this._getTextToReplace(showCommandsList ? '/' : '@');
1750
+ triggerProps.getSelectedItem = _this._getItemOnSelect(showCommandsList ? '/' : '@');
1684
1751
  triggerProps.selectionEnd = 1;
1685
- triggerProps.value = '/';
1752
+ triggerProps.value = showCommandsList ? '/' : '@';
1686
1753
  triggerProps.values = currentCommands;
1687
1754
  }
1688
1755
 
@@ -1897,33 +1964,6 @@ ReactTextareaAutocomplete.propTypes = {
1897
1964
  value: PropTypes__default['default'].string
1898
1965
  };
1899
1966
 
1900
- /**
1901
- * A round avatar image with fallback to username's first letter
1902
- */
1903
- var Avatar = function (props) {
1904
- var image = props.image, name = props.name, _a = props.onClick, onClick = _a === void 0 ? function () { return undefined; } : _a, _b = props.onMouseOver, onMouseOver = _b === void 0 ? function () { return undefined; } : _b, _c = props.shape, shape = _c === void 0 ? 'circle' : _c, _d = props.size, size = _d === void 0 ? 32 : _d;
1905
- var _e = React.useState(false), error = _e[0], setError = _e[1];
1906
- var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1907
- React.useEffect(function () {
1908
- setError(false);
1909
- setLoaded(false);
1910
- }, [image]);
1911
- var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1912
- var initials = getWholeChar(nameStr, 0);
1913
- return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1914
- flexBasis: size + "px",
1915
- fontSize: size / 2 + "px",
1916
- height: size + "px",
1917
- lineHeight: size + "px",
1918
- width: size + "px",
1919
- }, title: name }, image && !error ? (React__default['default'].createElement("img", { alt: initials, className: "str-chat__avatar-image" + (loaded ? ' str-chat__avatar-image--loaded' : ''), "data-testid": 'avatar-img', onError: function () { return setError(true); }, onLoad: function () { return setLoaded(true); }, src: image, style: {
1920
- flexBasis: size + "px",
1921
- height: size + "px",
1922
- objectFit: 'cover',
1923
- width: size + "px",
1924
- } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1925
- };
1926
-
1927
1967
  var channelReducer = function (state, action) {
1928
1968
  var _a;
1929
1969
  switch (action.type) {
@@ -2028,7 +2068,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
2028
2068
 
2029
2069
  var useCreateChannelStateContext = function (value) {
2030
2070
  var _a;
2031
- var acceptedFiles = value.acceptedFiles, channel = value.channel, channelConfig = value.channelConfig, error = value.error, hasMore = value.hasMore, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _b = value.messages, messages = _b === void 0 ? [] : _b, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _c = value.read, read = _c === void 0 ? {} : _c, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _d = value.threadMessages, threadMessages = _d === void 0 ? [] : _d, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
2071
+ var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, error = value.error, hasMore = value.hasMore, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
2032
2072
  var channelId = channel.cid;
2033
2073
  var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
2034
2074
  var membersLength = Object.keys(members || []).length;
@@ -2040,34 +2080,40 @@ var useCreateChannelStateContext = function (value) {
2040
2080
  return last_read.toISOString();
2041
2081
  }).join();
2042
2082
  var threadMessagesLength = threadMessages === null || threadMessages === void 0 ? void 0 : threadMessages.length;
2083
+ var channelCapabilities = {};
2084
+ channelCapabilitiesArray.forEach(function (capability) {
2085
+ channelCapabilities[capability] = true;
2086
+ });
2043
2087
  var memoizedMessageData = skipMessageDataMemoization
2044
2088
  ? messages
2045
2089
  : messages
2046
2090
  .map(function (_a) {
2047
- var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, reply_count = _a.reply_count, status = _a.status, updated_at = _a.updated_at;
2091
+ var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, reply_count = _a.reply_count, status = _a.status, updated_at = _a.updated_at, user = _a.user;
2048
2092
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2049
2093
  var type = _a.type;
2050
2094
  return type;
2051
2095
  }).join() : '') + pinned + reply_count + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2052
2096
  ? updated_at.toISOString()
2053
- : updated_at || '');
2097
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2054
2098
  })
2055
2099
  .join();
2056
2100
  var memoizedThreadMessageData = threadMessages
2057
2101
  .map(function (_a) {
2058
- var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at;
2102
+ var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at, user = _a.user;
2059
2103
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2060
2104
  var type = _a.type;
2061
2105
  return type;
2062
2106
  }).join() : '') + pinned + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2063
2107
  ? updated_at.toISOString()
2064
- : updated_at || '');
2108
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2065
2109
  })
2066
2110
  .join();
2067
2111
  var channelStateContext = React.useMemo(function () { return ({
2068
2112
  acceptedFiles: acceptedFiles,
2069
2113
  channel: channel,
2114
+ channelCapabilities: channelCapabilities,
2070
2115
  channelConfig: channelConfig,
2116
+ dragAndDropWindow: dragAndDropWindow,
2071
2117
  error: error,
2072
2118
  hasMore: hasMore,
2073
2119
  loading: loading,
@@ -2121,12 +2167,19 @@ var useCreateTypingContext = function (value) {
2121
2167
  return typingContext;
2122
2168
  };
2123
2169
 
2124
- var ChatContext = React__default['default'].createContext({});
2170
+ var ChatContext = React__default['default'].createContext(undefined);
2125
2171
  var ChatProvider = function (_a) {
2126
2172
  var children = _a.children, value = _a.value;
2127
2173
  return (React__default['default'].createElement(ChatContext.Provider, { value: value }, children));
2128
2174
  };
2129
- var useChatContext = function () { return React.useContext(ChatContext); };
2175
+ var useChatContext = function (componentName) {
2176
+ var contextValue = React.useContext(ChatContext);
2177
+ if (!contextValue) {
2178
+ console.warn("The useChatContext hook was called outside of the ChatContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the " + componentName + " component.");
2179
+ return {};
2180
+ }
2181
+ return contextValue;
2182
+ };
2130
2183
  /**
2131
2184
  * Typescript currently does not support partial inference so if ChatContext
2132
2185
  * typing is desired while using the HOC withChatContext the Props for the
@@ -2142,7 +2195,7 @@ var withChatContext = function (Component) {
2142
2195
  };
2143
2196
 
2144
2197
  var useEditMessageHandler = function (doUpdateMessageRequest) {
2145
- var _a = useChatContext(), channel = _a.channel, client = _a.client;
2198
+ var _a = useChatContext('useEditMessageHandler'), channel = _a.channel, client = _a.client;
2146
2199
  return function (updatedMessage) {
2147
2200
  if (doUpdateMessageRequest && channel) {
2148
2201
  return Promise.resolve(doUpdateMessageRequest(channel.cid, updatedMessage));
@@ -2203,7 +2256,7 @@ var LoadingChannels = React__default['default'].memo(UnMemoizedLoadingChannels);
2203
2256
  */
2204
2257
  var UnMemoizedLoadingErrorIndicator = function (_a) {
2205
2258
  var error = _a.error;
2206
- var t = useTranslationContext().t;
2259
+ var t = useTranslationContext('LoadingErrorIndicator').t;
2207
2260
  if (!error)
2208
2261
  return null;
2209
2262
  return React__default['default'].createElement("div", null, t('Error: {{ errorMessage }}', { errorMessage: error.message }));
@@ -2227,13 +2280,18 @@ var LoadingIndicator = React__default['default'].memo(UnMemoizedLoadingIndicator
2227
2280
  return prevProps.color === nextProps.color && prevProps.size === nextProps.size;
2228
2281
  });
2229
2282
 
2230
- var ChannelStateContext = React__default['default'].createContext({});
2283
+ var ChannelStateContext = React__default['default'].createContext(undefined);
2231
2284
  var ChannelStateProvider = function (_a) {
2232
2285
  var children = _a.children, value = _a.value;
2233
2286
  return (React__default['default'].createElement(ChannelStateContext.Provider, { value: value }, children));
2234
2287
  };
2235
- var useChannelStateContext = function () {
2236
- return React.useContext(ChannelStateContext);
2288
+ var useChannelStateContext = function (componentName) {
2289
+ var contextValue = React.useContext(ChannelStateContext);
2290
+ if (!contextValue) {
2291
+ console.warn("The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
2292
+ return {};
2293
+ }
2294
+ return contextValue;
2237
2295
  };
2238
2296
  /**
2239
2297
  * Typescript currently does not support partial inference, so if ChannelStateContext
@@ -2253,21 +2311,23 @@ var withChannelStateContext = function (Component) {
2253
2311
 
2254
2312
  var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2255
2313
  var _a, _b, _c;
2256
- var _d = useChannelStateContext(), channel = _d.channel, channelConfig = _d.channelConfig;
2257
- var client = useChatContext().client;
2314
+ var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e, channelConfig = _d.channelConfig;
2315
+ var client = useChatContext('useUserRole').client;
2258
2316
  var isAdmin = ((_a = client.user) === null || _a === void 0 ? void 0 : _a.role) === 'admin' || channel.state.membership.role === 'admin';
2259
2317
  var isMyMessage = client.userID === ((_b = message.user) === null || _b === void 0 ? void 0 : _b.id);
2260
2318
  var isOwner = channel.state.membership.role === 'owner';
2261
2319
  var isModerator = ((_c = client.user) === null || _c === void 0 ? void 0 : _c.role) === 'channel_moderator' ||
2262
2320
  channel.state.membership.role === 'channel_moderator' ||
2263
2321
  channel.state.membership.role === 'moderator';
2264
- var canEdit = isMyMessage || (!onlySenderCanEdit && (isModerator || isAdmin));
2265
- var canDelete = isMyMessage || isModerator || isAdmin;
2322
+ var canEdit = (!onlySenderCanEdit && channelCapabilities['update-any-message']) ||
2323
+ (isMyMessage && channelCapabilities['update-own-message']);
2324
+ var canDelete = channelCapabilities['delete-any-message'] ||
2325
+ (isMyMessage && channelCapabilities['delete-own-message']);
2266
2326
  var canFlag = !isMyMessage;
2267
2327
  var canMute = !isMyMessage && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.mutes);
2268
2328
  var canQuote = !disableQuotedMessages;
2269
- var canReact = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions;
2270
- var canReply = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies;
2329
+ var canReact = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
2330
+ var canReply = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) !== false && channelCapabilities['send-reply'];
2271
2331
  return {
2272
2332
  canDelete: canDelete,
2273
2333
  canEdit: canEdit,
@@ -2285,7 +2345,7 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2285
2345
 
2286
2346
  var MessageDeleted = function (props) {
2287
2347
  var message = props.message;
2288
- var t = useTranslationContext().t;
2348
+ var t = useTranslationContext('MessageDeleted').t;
2289
2349
  var isMyMessage = useUserRole(message).isMyMessage;
2290
2350
  var messageClasses = isMyMessage
2291
2351
  ? 'str-chat__message str-chat__message--me str-chat__message-simple str-chat__message-simple--me'
@@ -2364,6 +2424,7 @@ var MESSAGE_ACTIONS = {
2364
2424
  react: 'react',
2365
2425
  reply: 'reply',
2366
2426
  };
2427
+ // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
2367
2428
  var defaultPinPermissions = {
2368
2429
  commerce: {
2369
2430
  admin: true,
@@ -2474,7 +2535,7 @@ var showMessageActionsBox = function (actions) {
2474
2535
  return true;
2475
2536
  };
2476
2537
  var areMessagePropsEqual = function (prevProps, nextProps) {
2477
- var _a, _b, _c, _d;
2538
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2478
2539
  var prevMessage = prevProps.message, prevMessageUI = prevProps.Message;
2479
2540
  var nextMessage = nextProps.message, nextMessageUI = nextProps.Message;
2480
2541
  if (prevMessageUI !== nextMessageUI)
@@ -2492,7 +2553,9 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2492
2553
  prevMessage.status === nextMessage.status &&
2493
2554
  prevMessage.text === nextMessage.text &&
2494
2555
  prevMessage.type === nextMessage.type &&
2495
- prevMessage.updated_at === nextMessage.updated_at;
2556
+ prevMessage.updated_at === nextMessage.updated_at &&
2557
+ ((_e = prevMessage.user) === null || _e === void 0 ? void 0 : _e.image) === ((_f = nextMessage.user) === null || _f === void 0 ? void 0 : _f.image) &&
2558
+ ((_g = prevMessage.user) === null || _g === void 0 ? void 0 : _g.name) === ((_h = nextMessage.user) === null || _h === void 0 ? void 0 : _h.name);
2496
2559
  if (!messagesAreEqual)
2497
2560
  return false;
2498
2561
  var deepEqualProps = deepequal__default['default'](nextProps.readBy, prevProps.readBy) &&
@@ -2505,7 +2568,7 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2505
2568
  );
2506
2569
  };
2507
2570
  var areMessageUIPropsEqual = function (prevProps, nextProps) {
2508
- var _a, _b, _c, _d, _e, _f, _g, _h;
2571
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
2509
2572
  var prevLastReceivedId = prevProps.lastReceivedId, prevMessage = prevProps.message;
2510
2573
  var nextLastReceivedId = nextProps.lastReceivedId, nextMessage = nextProps.message;
2511
2574
  if (prevProps.editing !== nextProps.editing)
@@ -2531,7 +2594,9 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
2531
2594
  prevMessage.status === nextMessage.status &&
2532
2595
  prevMessage.text === nextMessage.text &&
2533
2596
  prevMessage.type === nextMessage.type &&
2534
- prevMessage.updated_at === nextMessage.updated_at;
2597
+ prevMessage.updated_at === nextMessage.updated_at &&
2598
+ ((_j = prevMessage.user) === null || _j === void 0 ? void 0 : _j.image) === ((_k = nextMessage.user) === null || _k === void 0 ? void 0 : _k.image) &&
2599
+ ((_l = prevMessage.user) === null || _l === void 0 ? void 0 : _l.name) === ((_m = nextMessage.user) === null || _m === void 0 ? void 0 : _m.name);
2535
2600
  if (!messagesAreEqual)
2536
2601
  return false;
2537
2602
  return true;
@@ -2593,13 +2658,18 @@ var getReadByTooltipText = function (users, t, client) {
2593
2658
  return outStr;
2594
2659
  };
2595
2660
 
2596
- var ChannelActionContext = React__default['default'].createContext({});
2661
+ var ChannelActionContext = React__default['default'].createContext(undefined);
2597
2662
  var ChannelActionProvider = function (_a) {
2598
2663
  var children = _a.children, value = _a.value;
2599
2664
  return (React__default['default'].createElement(ChannelActionContext.Provider, { value: value }, children));
2600
2665
  };
2601
- var useChannelActionContext = function () {
2602
- return React.useContext(ChannelActionContext);
2666
+ var useChannelActionContext = function (componentName) {
2667
+ var contextValue = React.useContext(ChannelActionContext);
2668
+ if (!contextValue) {
2669
+ console.warn("The useChannelActionContext hook was called outside of the ChannelActionContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
2670
+ return {};
2671
+ }
2672
+ return contextValue;
2603
2673
  };
2604
2674
  /**
2605
2675
  * Typescript currently does not support partial inference, so if ChannelActionContext
@@ -2617,12 +2687,19 @@ var withChannelActionContext = function (Component) {
2617
2687
  return WithChannelActionContextComponent;
2618
2688
  };
2619
2689
 
2620
- var MessageContext = React__default['default'].createContext({});
2690
+ var MessageContext = React__default['default'].createContext(undefined);
2621
2691
  var MessageProvider = function (_a) {
2622
2692
  var children = _a.children, value = _a.value;
2623
2693
  return (React__default['default'].createElement(MessageContext.Provider, { value: value }, children));
2624
2694
  };
2625
- var useMessageContext = function () { return React.useContext(MessageContext); };
2695
+ var useMessageContext = function (componentName) {
2696
+ var contextValue = React.useContext(MessageContext);
2697
+ if (!contextValue) {
2698
+ console.warn("The useMessageContext hook was called outside of the MessageContext provider. Make sure this hook is called within the Message's UI component. The errored call is located in the " + componentName + " component.");
2699
+ return {};
2700
+ }
2701
+ return contextValue;
2702
+ };
2626
2703
  /**
2627
2704
  * Typescript currently does not support partial inference, so if MessageContext
2628
2705
  * typing is desired while using the HOC withMessageContext, the Props for the
@@ -2650,9 +2727,9 @@ var CustomMessageActionsList = function (props) {
2650
2727
  };
2651
2728
  var UnMemoizedMessageActionsBox = function (props) {
2652
2729
  var getMessageActions = props.getMessageActions, handleDelete = props.handleDelete, handleEdit = props.handleEdit, handleFlag = props.handleFlag, handleMute = props.handleMute, handlePin = props.handlePin, isUserMuted = props.isUserMuted, mine = props.mine, _a = props.open, open = _a === void 0 ? false : _a;
2653
- var setQuotedMessage = useChannelActionContext().setQuotedMessage;
2654
- var _b = useMessageContext(), customMessageActions = _b.customMessageActions, message = _b.message, messageListRect = _b.messageListRect;
2655
- var t = useTranslationContext().t;
2730
+ var setQuotedMessage = useChannelActionContext('MessageActionsBox').setQuotedMessage;
2731
+ var _b = useMessageContext('MessageActionsBox'), customMessageActions = _b.customMessageActions, message = _b.message, messageListRect = _b.messageListRect;
2732
+ var t = useTranslationContext('MessageActionsBox').t;
2656
2733
  var _c = React.useState(false), reverse = _c[0], setReverse = _c[1];
2657
2734
  var messageActions = getMessageActions();
2658
2735
  var checkIfReverse = React.useCallback(function (containerElement) {
@@ -2703,8 +2780,8 @@ var MessageActionsBox = React__default['default'].memo(UnMemoizedMessageActionsB
2703
2780
 
2704
2781
  var MessageActions = function (props) {
2705
2782
  var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.customWrapperClass, customWrapperClass = _b === void 0 ? '' : _b, propGetMessageActions = props.getMessageActions, propHandleDelete = props.handleDelete, propHandleFlag = props.handleFlag, propHandleMute = props.handleMute, propHandlePin = props.handlePin, inline = props.inline, propMessage = props.message, messageWrapperRef = props.messageWrapperRef, mine = props.mine;
2706
- var mutes = useChatContext().mutes;
2707
- var _c = useMessageContext(), customMessageActions = _c.customMessageActions, contextGetMessageActions = _c.getMessageActions, contextHandleDelete = _c.handleDelete, contextHandleFlag = _c.handleFlag, contextHandleMute = _c.handleMute, contextHandlePin = _c.handlePin, isMyMessage = _c.isMyMessage, contextMessage = _c.message, setEditingState = _c.setEditingState;
2783
+ var mutes = useChatContext('MessageActions').mutes;
2784
+ var _c = useMessageContext('MessageActions'), customMessageActions = _c.customMessageActions, contextGetMessageActions = _c.getMessageActions, contextHandleDelete = _c.handleDelete, contextHandleFlag = _c.handleFlag, contextHandleMute = _c.handleMute, contextHandlePin = _c.handlePin, isMyMessage = _c.isMyMessage, contextMessage = _c.message, setEditingState = _c.setEditingState;
2708
2785
  var getMessageActions = propGetMessageActions || contextGetMessageActions;
2709
2786
  var handleDelete = propHandleDelete || contextHandleDelete;
2710
2787
  var handleFlag = propHandleFlag || contextHandleFlag;
@@ -2761,7 +2838,7 @@ var MessageActionsWrapper = function (props) {
2761
2838
 
2762
2839
  var UnMemoizedMessageOptions = function (props) {
2763
2840
  var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.displayLeft, displayLeft = _b === void 0 ? true : _b, _c = props.displayReplies, displayReplies = _c === void 0 ? true : _c, propHandleOpenThread = props.handleOpenThread, messageWrapperRef = props.messageWrapperRef, _d = props.ReactionIcon, ReactionIcon$1 = _d === void 0 ? ReactionIcon : _d, _e = props.theme, theme = _e === void 0 ? 'simple' : _e, _f = props.ThreadIcon, ThreadIcon$1 = _f === void 0 ? ThreadIcon : _f;
2764
- var _g = useMessageContext(), customMessageActions = _g.customMessageActions, getMessageActions = _g.getMessageActions, contextHandleOpenThread = _g.handleOpenThread, initialMessage = _g.initialMessage, isMyMessage = _g.isMyMessage, message = _g.message, onReactionListClick = _g.onReactionListClick, threadList = _g.threadList;
2841
+ var _g = useMessageContext('MessageOptions'), customMessageActions = _g.customMessageActions, getMessageActions = _g.getMessageActions, contextHandleOpenThread = _g.handleOpenThread, initialMessage = _g.initialMessage, isMyMessage = _g.isMyMessage, message = _g.message, onReactionListClick = _g.onReactionListClick, threadList = _g.threadList;
2765
2842
  var handleOpenThread = propHandleOpenThread || contextHandleOpenThread;
2766
2843
  var messageActions = getMessageActions();
2767
2844
  var showActionsBox = showMessageActionsBox(messageActions) || !!customMessageActions;
@@ -2795,7 +2872,7 @@ var MessageOptions = React__default['default'].memo(UnMemoizedMessageOptions);
2795
2872
 
2796
2873
  var UnMemoizedMessageRepliesCountButton = function (props) {
2797
2874
  var labelPlural = props.labelPlural, labelSingle = props.labelSingle, onClick = props.onClick, _a = props.reply_count, reply_count = _a === void 0 ? 0 : _a;
2798
- var t = useTranslationContext().t;
2875
+ var t = useTranslationContext('MessageRepliesCountButton').t;
2799
2876
  var singleReplyText;
2800
2877
  var pluralReplyText;
2801
2878
  if (reply_count === 1) {
@@ -2833,10 +2910,10 @@ var Tooltip = function (props) {
2833
2910
  var UnMemoizedMessageStatus = function (props) {
2834
2911
  var _a;
2835
2912
  var propAvatar = props.Avatar, _b = props.messageType, messageType = _b === void 0 ? 'simple' : _b;
2836
- var client = useChatContext().client;
2837
- var contextAvatar = useComponentContext().Avatar;
2838
- var _c = useMessageContext(), isMyMessage = _c.isMyMessage, lastReceivedId = _c.lastReceivedId, message = _c.message, readBy = _c.readBy, threadList = _c.threadList;
2839
- var t = useTranslationContext().t;
2913
+ var client = useChatContext('MessageStatus').client;
2914
+ var contextAvatar = useComponentContext('MessageStatus').Avatar;
2915
+ var _c = useMessageContext('MessageStatus'), isMyMessage = _c.isMyMessage, lastReceivedId = _c.lastReceivedId, message = _c.message, readBy = _c.readBy, threadList = _c.threadList;
2916
+ var t = useTranslationContext('MessageStatus').t;
2840
2917
  var Avatar$1 = propAvatar || contextAvatar || Avatar;
2841
2918
  if (!isMyMessage() || message.type === 'error') {
2842
2919
  return null;
@@ -2866,8 +2943,8 @@ var MessageStatus = React__default['default'].memo(UnMemoizedMessageStatus);
2866
2943
  var handleActionWarning = "Action handler was called, but it is missing one of its required arguments. \nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.";
2867
2944
  function useActionHandler(message) {
2868
2945
  var _this = this;
2869
- var _a = useChannelActionContext(), removeMessage = _a.removeMessage, updateMessage = _a.updateMessage;
2870
- var channel = useChannelStateContext().channel;
2946
+ var _a = useChannelActionContext('useActionHandler'), removeMessage = _a.removeMessage, updateMessage = _a.updateMessage;
2947
+ var channel = useChannelStateContext('useActionHandler').channel;
2871
2948
  return function (dataOrName, value, event) { return __awaiter(_this, void 0, void 0, function () {
2872
2949
  var messageID, formData, data;
2873
2950
  return __generator(this, function (_a) {
@@ -2925,9 +3002,9 @@ var useBreakpoint = function () {
2925
3002
  var useDeleteHandler = function (message, notifications) {
2926
3003
  if (notifications === void 0) { notifications = {}; }
2927
3004
  var getErrorNotification = notifications.getErrorNotification, notify = notifications.notify;
2928
- var updateMessage = useChannelActionContext().updateMessage;
2929
- var client = useChatContext().client;
2930
- var t = useTranslationContext().t;
3005
+ var updateMessage = useChannelActionContext('useDeleteHandler').updateMessage;
3006
+ var client = useChatContext('useDeleteHandler').client;
3007
+ var t = useTranslationContext('useDeleteHandler').t;
2931
3008
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
2932
3009
  var data, errorMessage;
2933
3010
  return __generator(this, function (_a) {
@@ -2980,8 +3057,8 @@ var useEditHandler = function (customInitialState, customSetEditing, customClear
2980
3057
  var missingUseFlagHandlerParameterWarning = 'useFlagHandler was called but it is missing one or more necessary parameters.';
2981
3058
  var useFlagHandler = function (message, notifications) {
2982
3059
  if (notifications === void 0) { notifications = {}; }
2983
- var client = useChatContext().client;
2984
- var t = useTranslationContext().t;
3060
+ var client = useChatContext('useFlagHandler').client;
3061
+ var t = useTranslationContext('useFlagHandler').t;
2985
3062
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
2986
3063
  var getErrorNotification, getSuccessNotification, notify, successMessage, errorMessage;
2987
3064
  var _a;
@@ -3027,7 +3104,7 @@ function createEventHandler(fn, message) {
3027
3104
  };
3028
3105
  }
3029
3106
  var useMentionsHandler = function (message, customMentionHandler) {
3030
- var _a = useChannelActionContext(), contextOnMentionsClick = _a.onMentionsClick, contextOnMentionsHover = _a.onMentionsHover;
3107
+ var _a = useChannelActionContext('useMentionsHandler'), contextOnMentionsClick = _a.onMentionsClick, contextOnMentionsHover = _a.onMentionsHover;
3031
3108
  var onMentionsClick = (customMentionHandler === null || customMentionHandler === void 0 ? void 0 : customMentionHandler.onMentionsClick) || contextOnMentionsClick || (function () { return null; });
3032
3109
  var onMentionsHover = (customMentionHandler === null || customMentionHandler === void 0 ? void 0 : customMentionHandler.onMentionsHover) || contextOnMentionsHover || (function () { return null; });
3033
3110
  return {
@@ -3071,9 +3148,9 @@ var useMobilePress = function () {
3071
3148
  var missingUseMuteHandlerParamsWarning = 'useMuteHandler was called but it is missing one or more necessary parameter.';
3072
3149
  var useMuteHandler = function (message, notifications) {
3073
3150
  if (notifications === void 0) { notifications = {}; }
3074
- var mutes = useChannelStateContext().mutes;
3075
- var client = useChatContext().client;
3076
- var t = useTranslationContext().t;
3151
+ var mutes = useChannelStateContext('useMuteHandler').mutes;
3152
+ var client = useChatContext('useMuteHandler').client;
3153
+ var t = useTranslationContext('useMuteHandler').t;
3077
3154
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
3078
3155
  var getErrorNotification, getSuccessNotification, notify, successMessage, errorMessage, fallbackMessage, successMessage, errorMessage;
3079
3156
  return __generator(this, function (_a) {
@@ -3134,7 +3211,7 @@ var useMuteHandler = function (message, notifications) {
3134
3211
  };
3135
3212
 
3136
3213
  var useOpenThreadHandler = function (message, customOpenThread) {
3137
- var channelOpenThread = useChannelActionContext().openThread;
3214
+ var channelOpenThread = useChannelActionContext('useOpenThreadHandler').openThread;
3138
3215
  var openThread = customOpenThread || channelOpenThread;
3139
3216
  return function (event) {
3140
3217
  if (!openThread || !message) {
@@ -3145,25 +3222,17 @@ var useOpenThreadHandler = function (message, customOpenThread) {
3145
3222
  };
3146
3223
  };
3147
3224
 
3148
- var usePinHandler = function (message, permissions, notifications) {
3149
- if (permissions === void 0) { permissions = defaultPinPermissions; }
3225
+ var usePinHandler = function (message,
3226
+ // @ts-expect-error @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
3227
+ permissions, // eslint-disable-line
3228
+ notifications) {
3150
3229
  if (notifications === void 0) { notifications = {}; }
3151
3230
  var getErrorNotification = notifications.getErrorNotification, notify = notifications.notify;
3152
- var updateMessage = useChannelActionContext().updateMessage;
3153
- var channel = useChannelStateContext().channel;
3154
- var client = useChatContext().client;
3155
- var t = useTranslationContext().t;
3156
- var canPin = function () {
3157
- if (!channel || !permissions || !permissions[channel.type]) {
3158
- return false;
3159
- }
3160
- var currentChannelPermissions = permissions[channel.type];
3161
- var currentRole = channel.state.membership.role;
3162
- if (currentChannelPermissions && currentRole && currentChannelPermissions[currentRole]) {
3163
- return true;
3164
- }
3165
- return false;
3166
- };
3231
+ var updateMessage = useChannelActionContext('usePinHandler').updateMessage;
3232
+ var _a = useChannelStateContext('usePinHandler').channelCapabilities, channelCapabilities = _a === void 0 ? {} : _a;
3233
+ var client = useChatContext('usePinHandler').client;
3234
+ var t = useTranslationContext('usePinHandler').t;
3235
+ var canPin = !!channelCapabilities['pin-message'];
3167
3236
  var handlePin = function (event) { return __awaiter(void 0, void 0, void 0, function () {
3168
3237
  var optimisticMessage, messageResponse, errorMessage, optimisticMessage, messageResponse, errorMessage;
3169
3238
  return __generator(this, function (_a) {
@@ -3211,14 +3280,14 @@ var usePinHandler = function (message, permissions, notifications) {
3211
3280
  }
3212
3281
  });
3213
3282
  }); };
3214
- return { canPin: canPin(), handlePin: handlePin };
3283
+ return { canPin: canPin, handlePin: handlePin };
3215
3284
  };
3216
3285
 
3217
3286
  var reactionHandlerWarning = "Reaction handler was called, but it is missing one of its required arguments.\nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.";
3218
3287
  var useReactionHandler = function (message) {
3219
- var updateMessage = useChannelActionContext().updateMessage;
3220
- var channel = useChannelStateContext().channel;
3221
- var client = useChatContext().client;
3288
+ var updateMessage = useChannelActionContext('useReactionHandler').updateMessage;
3289
+ var channel = useChannelStateContext('useReactionHandler').channel;
3290
+ var client = useChatContext('useReactionHandler').client;
3222
3291
  var createMessagePreview = React.useCallback(function (add, reaction, message) {
3223
3292
  var _a, _b;
3224
3293
  var newReactionCounts = (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
@@ -3253,32 +3322,33 @@ var useReactionHandler = function (message) {
3253
3322
  };
3254
3323
  var toggleReaction = throttle__default['default'](function (id, type, add) { return __awaiter(void 0, void 0, void 0, function () {
3255
3324
  var newReaction, tempMessage, messageResponse, _a;
3256
- return __generator(this, function (_b) {
3257
- switch (_b.label) {
3325
+ var _b;
3326
+ return __generator(this, function (_c) {
3327
+ switch (_c.label) {
3258
3328
  case 0:
3259
- if (!message)
3329
+ if (!message || ((_b = channel.data) === null || _b === void 0 ? void 0 : _b.frozen))
3260
3330
  return [2 /*return*/];
3261
3331
  newReaction = creatReactionPreview(type);
3262
3332
  tempMessage = createMessagePreview(add, newReaction, message);
3263
- _b.label = 1;
3333
+ _c.label = 1;
3264
3334
  case 1:
3265
- _b.trys.push([1, 6, , 7]);
3335
+ _c.trys.push([1, 6, , 7]);
3266
3336
  updateMessage(tempMessage);
3267
3337
  if (!add) return [3 /*break*/, 3];
3268
3338
  return [4 /*yield*/, channel.sendReaction(id, { type: type })];
3269
3339
  case 2:
3270
- _a = _b.sent();
3340
+ _a = _c.sent();
3271
3341
  return [3 /*break*/, 5];
3272
3342
  case 3: return [4 /*yield*/, channel.deleteReaction(id, type)];
3273
3343
  case 4:
3274
- _a = _b.sent();
3275
- _b.label = 5;
3344
+ _a = _c.sent();
3345
+ _c.label = 5;
3276
3346
  case 5:
3277
3347
  messageResponse = _a;
3278
3348
  updateMessage(messageResponse.message);
3279
3349
  return [3 /*break*/, 7];
3280
3350
  case 6:
3281
- _b.sent();
3351
+ _c.sent();
3282
3352
  // revert to the original message if the API call fails
3283
3353
  updateMessage(message);
3284
3354
  return [3 /*break*/, 7];
@@ -3333,11 +3403,12 @@ var useReactionHandler = function (message) {
3333
3403
  }); };
3334
3404
  };
3335
3405
  var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef, closeReactionSelectorOnClick) {
3336
- var _a, _b;
3337
- var channel = useChannelStateContext().channel;
3338
- var _c = React.useState(false), showDetailedReactions = _c[0], setShowDetailedReactions = _c[1];
3406
+ var _a;
3407
+ var _b = useChannelStateContext('useReactionClick'), channel = _b.channel, _c = _b.channelCapabilities, channelCapabilities = _c === void 0 ? {} : _c, channelConfig = _b.channelConfig;
3408
+ var _d = React.useState(false), showDetailedReactions = _d[0], setShowDetailedReactions = _d[1];
3339
3409
  var hasListener = React.useRef(false);
3340
- var isReactionEnabled = ((_b = (_a = channel === null || channel === void 0 ? void 0 : channel.getConfig) === null || _a === void 0 ? void 0 : _a.call(channel)) === null || _b === void 0 ? void 0 : _b.reactions) !== false;
3410
+ var isFrozen = !!((_a = channel.data) === null || _a === void 0 ? void 0 : _a.frozen);
3411
+ var isReactionEnabled = ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction']) || isFrozen;
3341
3412
  var messageDeleted = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
3342
3413
  var closeDetailedReactions = React.useCallback(function (event) {
3343
3414
  var _a;
@@ -3398,7 +3469,7 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
3398
3469
  };
3399
3470
 
3400
3471
  var useRetryHandler = function (customRetrySendMessage) {
3401
- var contextRetrySendMessage = useChannelActionContext().retrySendMessage;
3472
+ var contextRetrySendMessage = useChannelActionContext('useRetryHandler').retrySendMessage;
3402
3473
  var retrySendMessage = customRetrySendMessage || contextRetrySendMessage;
3403
3474
  return function (message) { return __awaiter(void 0, void 0, void 0, function () {
3404
3475
  return __generator(this, function (_a) {
@@ -3432,9 +3503,10 @@ var useUserHandler = function (message, eventHandlers) { return ({
3432
3503
 
3433
3504
  var QuotedMessage = function () {
3434
3505
  var _a, _b;
3435
- var Attachment = useComponentContext().Attachment;
3436
- var _c = useMessageContext(), isMyMessage = _c.isMyMessage, message = _c.message;
3437
- var userLanguage = useTranslationContext().userLanguage;
3506
+ var _c = useComponentContext('QuotedMessage'), Attachment = _c.Attachment, ContextAvatar = _c.Avatar;
3507
+ var _d = useMessageContext('QuotedMessage'), isMyMessage = _d.isMyMessage, message = _d.message;
3508
+ var userLanguage = useTranslationContext('QuotedMessage').userLanguage;
3509
+ var Avatar$1 = ContextAvatar || Avatar;
3438
3510
  var quoted_message = message.quoted_message;
3439
3511
  if (!quoted_message)
3440
3512
  return null;
@@ -3449,7 +3521,7 @@ var QuotedMessage = function () {
3449
3521
  return null;
3450
3522
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
3451
3523
  React__default['default'].createElement("div", { className: "" + (isMyMessage() ? 'quoted-message mine' : 'quoted-message') },
3452
- quoted_message.user && (React__default['default'].createElement(Avatar, { image: quoted_message.user.image, name: quoted_message.user.name || quoted_message.user.id, size: 20, user: quoted_message.user })),
3524
+ quoted_message.user && (React__default['default'].createElement(Avatar$1, { image: quoted_message.user.image, name: quoted_message.user.name || quoted_message.user.id, size: 20, user: quoted_message.user })),
3453
3525
  React__default['default'].createElement("div", { className: 'quoted-message-inner' },
3454
3526
  quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
3455
3527
  React__default['default'].createElement("div", null, quotedMessageText))),
@@ -3459,9 +3531,9 @@ var QuotedMessage = function () {
3459
3531
  var UnMemoizedMessageTextComponent = function (props) {
3460
3532
  var _a;
3461
3533
  var customInnerClass = props.customInnerClass, _b = props.customWrapperClass, customWrapperClass = _b === void 0 ? '' : _b, propMessage = props.message, _c = props.theme, theme = _c === void 0 ? 'simple' : _c;
3462
- var _d = useComponentContext().QuotedMessage, QuotedMessage$1 = _d === void 0 ? QuotedMessage : _d;
3463
- var _e = useMessageContext(), contextMessage = _e.message, onMentionsClickMessage = _e.onMentionsClickMessage, onMentionsHoverMessage = _e.onMentionsHoverMessage, _f = _e.renderText, renderText$1 = _f === void 0 ? renderText : _f, unsafeHTML = _e.unsafeHTML;
3464
- var _g = useTranslationContext(), t = _g.t, userLanguage = _g.userLanguage;
3534
+ var _d = useComponentContext('MessageText').QuotedMessage, QuotedMessage$1 = _d === void 0 ? QuotedMessage : _d;
3535
+ var _e = useMessageContext('MessageText'), contextMessage = _e.message, onMentionsClickMessage = _e.onMentionsClickMessage, onMentionsHoverMessage = _e.onMentionsHoverMessage, _f = _e.renderText, renderText$1 = _f === void 0 ? renderText : _f, unsafeHTML = _e.unsafeHTML;
3536
+ var _g = useTranslationContext('MessageText'), t = _g.t, userLanguage = _g.userLanguage;
3465
3537
  var handleMobilePress = useMobilePress().handleMobilePress;
3466
3538
  var message = propMessage || contextMessage;
3467
3539
  var hasAttachment = messageHasAttachments(message);
@@ -3520,8 +3592,8 @@ function getDateString(messageCreatedAt, formatDate, calendar, tDateTimeParser,
3520
3592
  }
3521
3593
  var UnMemoizedMessageTimestamp = function (props) {
3522
3594
  var _a = props.calendar, calendar = _a === void 0 ? false : _a, _b = props.customClass, customClass = _b === void 0 ? '' : _b, _c = props.format, format = _c === void 0 ? defaultTimestampFormat : _c, propMessage = props.message;
3523
- var _d = useMessageContext(), formatDate = _d.formatDate, contextMessage = _d.message;
3524
- var tDateTimeParser = useTranslationContext().tDateTimeParser;
3595
+ var _d = useMessageContext('MessageTimestamp'), formatDate = _d.formatDate, contextMessage = _d.message;
3596
+ var tDateTimeParser = useTranslationContext('MessageTimestamp').tDateTimeParser;
3525
3597
  var message = propMessage || contextMessage;
3526
3598
  var createdAt = message.created_at;
3527
3599
  var when = React.useMemo(function () { return getDateString(createdAt, formatDate, calendar, tDateTimeParser, format); }, [formatDate, calendar, tDateTimeParser, format, createdAt]);
@@ -3532,9 +3604,8 @@ var UnMemoizedMessageTimestamp = function (props) {
3532
3604
  var MessageTimestamp = React__default['default'].memo(UnMemoizedMessageTimestamp);
3533
3605
 
3534
3606
  var useCommandTrigger = function () {
3535
- var _a, _b;
3536
- var channel = useChannelStateContext().channel;
3537
- var commands = (_b = (_a = channel === null || channel === void 0 ? void 0 : channel.getConfig) === null || _a === void 0 ? void 0 : _a.call(channel)) === null || _b === void 0 ? void 0 : _b.commands;
3607
+ var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
3608
+ var commands = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.commands;
3538
3609
  return {
3539
3610
  component: CommandItem,
3540
3611
  dataProvider: function (query, text, onReady) {
@@ -3621,7 +3692,7 @@ var accentsMap = {
3621
3692
  e: 'é|è|ê|É|È|Ê',
3622
3693
  i: 'í|ì|î|Í|Ì|Î',
3623
3694
  n: 'ñ|Ñ',
3624
- o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
3695
+ o: 'ó|ò|ô|ő|õ|Ó|Ò|Ô|Õ',
3625
3696
  u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
3626
3697
  };
3627
3698
  var removeDiacritics = function (text) {
@@ -3658,7 +3729,7 @@ var calculateLevenshtein = function (query, name) {
3658
3729
  return matrix[name.length][query.length];
3659
3730
  };
3660
3731
  var searchLocalUsers = function (params) {
3661
- var ownUserId = params.ownUserId, query = params.query, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
3732
+ var ownUserId = params.ownUserId, query = params.query, text = params.text, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
3662
3733
  var matchingUsers = users.filter(function (user) {
3663
3734
  if (user.id === ownUserId)
3664
3735
  return false;
@@ -3683,43 +3754,78 @@ var searchLocalUsers = function (params) {
3683
3754
  });
3684
3755
  }); })();
3685
3756
  }
3757
+ var maxDistance = 3;
3758
+ var lastDigits = text.slice(-(maxDistance + 1)).includes('@');
3686
3759
  if (updatedName) {
3687
3760
  var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
3688
- if (updatedName.includes(updatedQuery) || levenshtein_1 <= 3)
3761
+ if (updatedName.includes(updatedQuery) || (levenshtein_1 <= maxDistance && lastDigits)) {
3689
3762
  return true;
3763
+ }
3690
3764
  }
3691
3765
  var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
3692
- return updatedId.includes(updatedQuery) || levenshtein <= 3;
3766
+ return updatedId.includes(updatedQuery) || (levenshtein <= maxDistance && lastDigits);
3693
3767
  });
3694
3768
  return matchingUsers;
3695
3769
  };
3696
-
3697
- /**
3698
- * UI component for mentions rendered in suggestion list
3699
- */
3700
- var UnMemoizedUserItem = function (props) {
3701
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
3702
- var hasEntity = Object.keys(entity).length;
3703
- var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
3704
- var renderName = function () {
3705
- if (!hasEntity)
3706
- return null;
3707
- return (hasEntity &&
3708
- itemParts.parts.map(function (part, i) {
3709
- return part.toLowerCase() === itemParts.match.toLowerCase() ? (React__default['default'].createElement("span", { className: 'str-chat__emoji-item--highlight', key: "part-" + i }, part)) : (React__default['default'].createElement("span", { className: 'str-chat__emoji-item--part', key: "part-" + i }, part));
3710
- }));
3711
- };
3712
- return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
3713
- React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
3714
- React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
3715
- };
3716
- var UserItem = React__default['default'].memo(UnMemoizedUserItem);
3770
+ var checkUploadPermissions = function (params) { return __awaiter(void 0, void 0, void 0, function () {
3771
+ var addNotification, file, getAppSettings, t, uploadType, appSettings, _a, allowed_file_extensions, allowed_mime_types, blocked_file_extensions, blocked_mime_types, sendErrorNotification, allowed, blocked, allowed, blocked;
3772
+ var _b, _c;
3773
+ return __generator(this, function (_d) {
3774
+ switch (_d.label) {
3775
+ case 0:
3776
+ addNotification = params.addNotification, file = params.file, getAppSettings = params.getAppSettings, t = params.t, uploadType = params.uploadType;
3777
+ appSettings = null;
3778
+ return [4 /*yield*/, getAppSettings()];
3779
+ case 1:
3780
+ appSettings = _d.sent();
3781
+ _a = (uploadType === 'image'
3782
+ ? (_b = appSettings === null || appSettings === void 0 ? void 0 : appSettings.app) === null || _b === void 0 ? void 0 : _b.image_upload_config
3783
+ : (_c = appSettings === null || appSettings === void 0 ? void 0 : appSettings.app) === null || _c === void 0 ? void 0 : _c.file_upload_config) || {}, allowed_file_extensions = _a.allowed_file_extensions, allowed_mime_types = _a.allowed_mime_types, blocked_file_extensions = _a.blocked_file_extensions, blocked_mime_types = _a.blocked_mime_types;
3784
+ sendErrorNotification = function () {
3785
+ return addNotification(t("Upload type: \"{{ type }}\" is not allowed", { type: file.type || 'unknown type' }), 'error');
3786
+ };
3787
+ if (allowed_file_extensions === null || allowed_file_extensions === void 0 ? void 0 : allowed_file_extensions.length) {
3788
+ allowed = allowed_file_extensions.some(function (ext) {
3789
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3790
+ });
3791
+ if (!allowed) {
3792
+ sendErrorNotification();
3793
+ return [2 /*return*/, false];
3794
+ }
3795
+ }
3796
+ if (blocked_file_extensions === null || blocked_file_extensions === void 0 ? void 0 : blocked_file_extensions.length) {
3797
+ blocked = blocked_file_extensions.some(function (ext) {
3798
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3799
+ });
3800
+ if (blocked) {
3801
+ sendErrorNotification();
3802
+ return [2 /*return*/, false];
3803
+ }
3804
+ }
3805
+ if (allowed_mime_types === null || allowed_mime_types === void 0 ? void 0 : allowed_mime_types.length) {
3806
+ allowed = allowed_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3807
+ if (!allowed) {
3808
+ sendErrorNotification();
3809
+ return [2 /*return*/, false];
3810
+ }
3811
+ }
3812
+ if (blocked_mime_types === null || blocked_mime_types === void 0 ? void 0 : blocked_mime_types.length) {
3813
+ blocked = blocked_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3814
+ if (blocked) {
3815
+ sendErrorNotification();
3816
+ return [2 /*return*/, false];
3817
+ }
3818
+ }
3819
+ return [2 /*return*/, true];
3820
+ }
3821
+ });
3822
+ }); };
3717
3823
 
3718
3824
  var useUserTrigger = function (params) {
3719
3825
  var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
3720
3826
  var _b = React.useState(false), searching = _b[0], setSearching = _b[1];
3721
- var _c = useChatContext(), client = _c.client, mutes = _c.mutes;
3722
- var channel = useChannelStateContext().channel;
3827
+ var _c = useChatContext('useUserTrigger'), client = _c.client, mutes = _c.mutes;
3828
+ var channel = useChannelStateContext('useUserTrigger').channel;
3723
3829
  var members = channel.state.members;
3724
3830
  var watchers = channel.state.watchers;
3725
3831
  var getMembersAndWatchers = React.useCallback(function () {
@@ -3834,6 +3940,7 @@ var useUserTrigger = function (params) {
3834
3940
  var params_1 = {
3835
3941
  ownUserId: client.userID,
3836
3942
  query: query,
3943
+ text: text,
3837
3944
  useMentionsTransliteration: useMentionsTransliteration,
3838
3945
  users: users,
3839
3946
  };
@@ -3862,20 +3969,18 @@ var MessageInputContextProvider = function (_a) {
3862
3969
  var children = _a.children, value = _a.value;
3863
3970
  return (React__default['default'].createElement(MessageInputContext.Provider, { value: value }, children));
3864
3971
  };
3865
- /**
3866
- * hook for MessageInput context
3867
- */
3868
- var useMessageInputContext = function () {
3972
+ var useMessageInputContext = function (componentName) {
3869
3973
  var contextValue = React.useContext(MessageInputContext);
3870
- if (contextValue === undefined) {
3871
- console.warn('Empty MessageInputContext consumed. Make sure you wrap every component that uses MessageInputContext with a MessageInputContextProvider');
3974
+ if (!contextValue) {
3975
+ console.warn("The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure this hook is called within the MessageInput's UI component. The errored call is located in the " + componentName + " component.");
3976
+ return {};
3872
3977
  }
3873
3978
  return contextValue;
3874
3979
  };
3875
3980
 
3876
3981
  var DefaultTriggerProvider = function (_a) {
3877
3982
  var children = _a.children;
3878
- var currentValue = useMessageInputContext();
3983
+ var currentValue = useMessageInputContext('DefaultTriggerProvider');
3879
3984
  var defaultAutocompleteTriggers = {
3880
3985
  '/': useCommandTrigger(),
3881
3986
  ':': useEmojiTrigger(currentValue.emojiIndex),
@@ -3913,7 +4018,7 @@ var DefaultEmojiPicker = React__default['default'].lazy(function () { return __a
3913
4018
  }
3914
4019
  });
3915
4020
  }); });
3916
- var EmojiContext = React__default['default'].createContext({});
4021
+ var EmojiContext = React__default['default'].createContext(undefined);
3917
4022
  var EmojiProvider = function (_a) {
3918
4023
  var children = _a.children, value = _a.value;
3919
4024
  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;
@@ -3925,8 +4030,13 @@ var EmojiProvider = function (_a) {
3925
4030
  };
3926
4031
  return React__default['default'].createElement(EmojiContext.Provider, { value: emojiContextValue }, children);
3927
4032
  };
3928
- var useEmojiContext = function () {
3929
- return React.useContext(EmojiContext);
4033
+ var useEmojiContext = function (componentName) {
4034
+ var contextValue = React.useContext(EmojiContext);
4035
+ if (!contextValue) {
4036
+ console.warn("The useEmojiContext hook was called outside of the EmojiContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
4037
+ return {};
4038
+ }
4039
+ return contextValue;
3930
4040
  };
3931
4041
  /**
3932
4042
  * Typescript currently does not support partial inference, so if EmojiContext
@@ -3952,9 +4062,9 @@ var filterEmoji = function (emoji) {
3952
4062
  };
3953
4063
  var EmojiPicker = function (props) {
3954
4064
  var small = props.small;
3955
- var _a = useEmojiContext(), emojiConfig = _a.emojiConfig, EmojiPickerComponent = _a.EmojiPicker;
3956
- var t = useTranslationContext().t;
3957
- var messageInput = useMessageInputContext();
4065
+ var _a = useEmojiContext('EmojiPicker'), emojiConfig = _a.emojiConfig, EmojiPickerComponent = _a.EmojiPicker;
4066
+ var t = useTranslationContext('EmojiPicker').t;
4067
+ var messageInput = useMessageInputContext('EmojiPicker');
3958
4068
  var emojiData = (emojiConfig || {}).emojiData;
3959
4069
  if (messageInput.emojiPickerIsOpen && emojiData) {
3960
4070
  var className = small
@@ -3968,34 +4078,34 @@ var EmojiPicker = function (props) {
3968
4078
  };
3969
4079
 
3970
4080
  var EmojiIconLarge = function () {
3971
- var t = useTranslationContext().t;
4081
+ var t = useTranslationContext('EmojiIconLarge').t;
3972
4082
  return (React__default['default'].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
3973
4083
  React__default['default'].createElement("title", null, t('Open emoji picker')),
3974
4084
  React__default['default'].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
3975
4085
  React__default['default'].createElement("path", { d: 'M14 4.4C8.6 4.4 4.4 8.6 4.4 14c0 5.4 4.2 9.6 9.6 9.6c5.4 0 9.6-4.2 9.6-9.6c0-5.4-4.2-9.6-9.6-9.6zM2 14c0-6.6 5.4-12 12-12s12 5.4 12 12s-5.4 12-12 12s-12-5.4-12-12zM12.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM18.8 11c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8s1.8.8 1.8 1.8zM8.6 15.4c.6-.4 1.2-.2 1.6.2c.6.8 1.6 1.8 3 2c1.2.4 2.8.2 4.8-2c.4-.4 1.2-.6 1.6 0c.4.4.6 1.2 0 1.6c-2.2 2.6-4.8 3.4-7 3c-2-.4-3.6-1.8-4.4-3c-.4-.6-.2-1.2.4-1.8z' }))));
3976
4086
  };
3977
4087
  var EmojiIconSmall = function () {
3978
- var t = useTranslationContext().t;
4088
+ var t = useTranslationContext('EmojiIconSmall').t;
3979
4089
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
3980
4090
  React__default['default'].createElement("title", null, t('Open emoji picker')),
3981
4091
  React__default['default'].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
3982
4092
  React__default['default'].createElement("path", { d: 'M6.7 1.42C3.73 1.42 1.42 3.73 1.42 6.7c0 2.97 2.31 5.28 5.28 5.28c2.97 0 5.28-2.31 5.28-5.28c0-2.97-2.31-5.28-5.28-5.28zM.1 6.7c0-3.63 2.97-6.6 6.6-6.6s6.6 2.97 6.6 6.6s-2.97 6.6-6.6 6.6s-6.6-2.97-6.6-6.6zM6.04 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM9.34 5.05c0 .55-.44.99-.99.99s-.99-.44-.99-.99s.44-.99.99-.99s.99.44.99.99zM3.73 7.47c.33-.22.66-.11.88.11c.33.44.88.99 1.65 1.1c.66.22 1.54.11 2.64-1.1c.22-.22.66-.33.88 0c.22.22.33.66 0 .88c-1.21 1.43-2.64 1.87-3.85 1.65c-1.1-.22-1.98-.99-2.42-1.65c-.22-.33-.11-.66.22-.99z' }))));
3983
4093
  };
3984
4094
  var FileUploadIcon = function () {
3985
- var t = useTranslationContext().t;
4095
+ var t = useTranslationContext('FileUploadIcon').t;
3986
4096
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
3987
4097
  React__default['default'].createElement("title", null, t('Attach files')),
3988
4098
  React__default['default'].createElement("path", { d: 'M7 .5c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5S.5 10.59.5 7 3.41.5 7 .5zm0 12c3.031 0 5.5-2.469 5.5-5.5S10.031 1.5 7 1.5A5.506 5.506 0 0 0 1.5 7c0 3.034 2.469 5.5 5.5 5.5zM7.506 3v3.494H11v1.05H7.506V11h-1.05V7.544H3v-1.05h3.456V3h1.05z', fillRule: 'nonzero' })));
3989
4099
  };
3990
4100
  var FileUploadIconFlat = function () {
3991
- var t = useTranslationContext().t;
4101
+ var t = useTranslationContext('FileUploadIconFlat').t;
3992
4102
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
3993
4103
  React__default['default'].createElement("title", null, t('Attach files')),
3994
4104
  React__default['default'].createElement("path", { d: 'M1.667.333h10.666c.737 0 1.334.597 1.334 1.334v10.666c0 .737-.597 1.334-1.334 1.334H1.667a1.333 1.333 0 0 1-1.334-1.334V1.667C.333.93.93.333 1.667.333zm2 1.334a1.667 1.667 0 1 0 0 3.333 1.667 1.667 0 0 0 0-3.333zm-2 9.333v1.333h10.666v-4l-2-2-4 4-2-2L1.667 11z', fillRule: 'nonzero' })));
3995
4105
  };
3996
4106
  var SendButton = function (_a) {
3997
4107
  var sendMessage = _a.sendMessage;
3998
- var t = useTranslationContext().t;
4108
+ var t = useTranslationContext('SendButton').t;
3999
4109
  return (React__default['default'].createElement("button", { className: 'str-chat__send-button', onClick: sendMessage },
4000
4110
  React__default['default'].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
4001
4111
  React__default['default'].createElement("title", null, t('Send')),
@@ -4003,8 +4113,8 @@ var SendButton = function (_a) {
4003
4113
  };
4004
4114
 
4005
4115
  var UploadsPreview = function () {
4006
- var _a = useChannelStateContext(), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4007
- var messageInput = useMessageInputContext();
4116
+ var _a = useChannelStateContext('UploadsPreview'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4117
+ var messageInput = useMessageInputContext('UploadsPreview');
4008
4118
  var fileOrder = messageInput.fileOrder, fileUploads = messageInput.fileUploads, imageOrder = messageInput.imageOrder, imageUploads = messageInput.imageUploads, numberOfUploads = messageInput.numberOfUploads, removeFile = messageInput.removeFile, removeImage = messageInput.removeImage, text = messageInput.text, uploadFile = messageInput.uploadFile, uploadImage = messageInput.uploadImage, uploadNewFiles = messageInput.uploadNewFiles;
4009
4119
  var imagesToPreview = imageOrder.map(function (id) { return imageUploads[id]; });
4010
4120
  var filesToPreview = fileOrder.map(function (id) { return fileUploads[id]; });
@@ -4027,9 +4137,9 @@ var UploadsPreview = function () {
4027
4137
  };
4028
4138
 
4029
4139
  var UnMemoizedChatAutoComplete = function (props) {
4030
- var _a = useComponentContext(), SuggestionItem = _a.AutocompleteSuggestionItem, SuggestionList = _a.AutocompleteSuggestionList;
4031
- var t = useTranslationContext().t;
4032
- var messageInput = useMessageInputContext();
4140
+ var _a = useComponentContext('ChatAutoComplete'), SuggestionItem = _a.AutocompleteSuggestionItem, SuggestionList = _a.AutocompleteSuggestionList;
4141
+ var t = useTranslationContext('ChatAutoComplete').t;
4142
+ var messageInput = useMessageInputContext('ChatAutoComplete');
4033
4143
  var cooldownRemaining = messageInput.cooldownRemaining, disabled = messageInput.disabled, emojiIndex = messageInput.emojiIndex, innerRef = messageInput.textareaRef;
4034
4144
  var placeholder = props.placeholder || t('Type your message');
4035
4145
  var emojiReplace = function (word) {
@@ -4050,15 +4160,15 @@ var UnMemoizedChatAutoComplete = function (props) {
4050
4160
  innerRef.current = ref;
4051
4161
  }
4052
4162
  }, [innerRef]);
4053
- return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, className: 'str-chat__textarea__textarea', closeCommandsList: messageInput.closeCommandsList, 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, SuggestionItem: SuggestionItem, SuggestionList: SuggestionList, trigger: messageInput.autocompleteTriggers || {}, value: props.value || messageInput.text }));
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 }));
4054
4164
  };
4055
4165
  var ChatAutoComplete = React__default['default'].memo(UnMemoizedChatAutoComplete);
4056
4166
 
4057
4167
  var EditMessageForm = function () {
4058
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
4059
- var t = useTranslationContext().t;
4060
- var _b = useMessageInputContext(), clearEditingState = _b.clearEditingState, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
4061
- var _c = useComponentContext(), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
4168
+ var _a = useChannelStateContext('EditMessageForm'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
4169
+ 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;
4171
+ var _c = useComponentContext('EditMessageForm'), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
4062
4172
  React.useEffect(function () {
4063
4173
  var onKeyDown = function (event) {
4064
4174
  if (event.keyCode === KEY_CODES.ESC && clearEditingState)
@@ -4121,8 +4231,8 @@ var checkUserRoles = function (globalRole, channelRole) {
4121
4231
  };
4122
4232
  var useCooldownTimer = function () {
4123
4233
  var _a, _b;
4124
- var client = useChatContext().client;
4125
- var channel = useChannelStateContext().channel;
4234
+ var client = useChatContext('useCooldownTimer').client;
4235
+ var channel = useChannelStateContext('useCooldownTimer').channel;
4126
4236
  var cooldownInterval = (channel.data || {}).cooldown;
4127
4237
  var _c = React.useState(), cooldownRemaining = _c[0], setCooldownRemaining = _c[1];
4128
4238
  var globalRole = ((_a = client.user) === null || _a === void 0 ? void 0 : _a.role) || '';
@@ -4143,7 +4253,7 @@ var useCooldownTimer = function () {
4143
4253
  };
4144
4254
 
4145
4255
  var useEmojiIndex = function () {
4146
- var _a = useEmojiContext(), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
4256
+ var _a = useEmojiContext('useEmojiIndex'), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
4147
4257
  var emojiData = (emojiConfig || {}).emojiData;
4148
4258
  var emojiIndex = React.useMemo(function () {
4149
4259
  if (EmojiIndex) {
@@ -4157,15 +4267,16 @@ var useEmojiIndex = function () {
4157
4267
  var useImageUploads = function (props, state, dispatch) {
4158
4268
  var doImageUploadRequest = props.doImageUploadRequest, errorHandler = props.errorHandler;
4159
4269
  var imageUploads = state.imageUploads;
4160
- var channel = useChannelStateContext().channel;
4161
- var addNotification = useChannelActionContext().addNotification;
4162
- var t = useTranslationContext().t;
4270
+ var channel = useChannelStateContext('useImageUploads').channel;
4271
+ var getAppSettings = useChatContext('useImageUploads').getAppSettings;
4272
+ var addNotification = useChannelActionContext('useImageUploads').addNotification;
4273
+ var t = useTranslationContext('useImageUploads').t;
4163
4274
  var removeImage = React.useCallback(function (id) {
4164
4275
  dispatch({ id: id, type: 'removeImageUpload' });
4165
4276
  // TODO: cancel upload if still uploading
4166
4277
  }, []);
4167
4278
  var uploadImage = React.useCallback(function (id) { return __awaiter(void 0, void 0, void 0, function () {
4168
- var img, file, response, error_1, errorMessage, alreadyRemoved;
4279
+ var img, file, canUpload, response, error_1, errorMessage, alreadyRemoved;
4169
4280
  return __generator(this, function (_a) {
4170
4281
  switch (_a.label) {
4171
4282
  case 0:
@@ -4176,22 +4287,35 @@ var useImageUploads = function (props, state, dispatch) {
4176
4287
  if (img.state !== 'uploading') {
4177
4288
  dispatch({ id: id, state: 'uploading', type: 'setImageUpload' });
4178
4289
  }
4179
- _a.label = 1;
4290
+ return [4 /*yield*/, checkUploadPermissions({
4291
+ addNotification: addNotification,
4292
+ file: file,
4293
+ getAppSettings: getAppSettings,
4294
+ t: t,
4295
+ uploadType: 'image',
4296
+ })];
4180
4297
  case 1:
4181
- _a.trys.push([1, 6, , 7]);
4182
- if (!doImageUploadRequest) return [3 /*break*/, 3];
4183
- return [4 /*yield*/, doImageUploadRequest(file, channel)];
4298
+ canUpload = _a.sent();
4299
+ if (!canUpload)
4300
+ return [2 /*return*/, removeImage(id)];
4301
+ _a.label = 2;
4184
4302
  case 2:
4303
+ _a.trys.push([2, 7, , 8]);
4304
+ if (!doImageUploadRequest) return [3 /*break*/, 4];
4305
+ return [4 /*yield*/, doImageUploadRequest(file, channel)];
4306
+ case 3:
4185
4307
  response = _a.sent();
4186
- return [3 /*break*/, 5];
4187
- case 3: return [4 /*yield*/, channel.sendImage(file)];
4188
- case 4:
4308
+ return [3 /*break*/, 6];
4309
+ case 4: return [4 /*yield*/, channel.sendImage(file)];
4310
+ case 5:
4189
4311
  response = _a.sent();
4190
- _a.label = 5;
4191
- case 5: return [3 /*break*/, 7];
4192
- case 6:
4312
+ _a.label = 6;
4313
+ case 6: return [3 /*break*/, 8];
4314
+ case 7:
4193
4315
  error_1 = _a.sent();
4194
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading image');
4316
+ errorMessage = typeof error_1.message === 'string'
4317
+ ? error_1.message
4318
+ : t('Error uploading image');
4195
4319
  addNotification(errorMessage, 'error');
4196
4320
  alreadyRemoved = false;
4197
4321
  if (!imageUploads[id]) {
@@ -4205,7 +4329,7 @@ var useImageUploads = function (props, state, dispatch) {
4205
4329
  errorHandler(error_1, 'upload-image', __assign(__assign({}, file), { id: id }));
4206
4330
  }
4207
4331
  return [2 /*return*/];
4208
- case 7:
4332
+ case 8:
4209
4333
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4210
4334
  // This is for the case if someone wants to handle failure on app level.
4211
4335
  if (!response) {
@@ -4260,9 +4384,10 @@ var useImageUploads = function (props, state, dispatch) {
4260
4384
  var useFileUploads = function (props, state, dispatch) {
4261
4385
  var doFileUploadRequest = props.doFileUploadRequest, errorHandler = props.errorHandler;
4262
4386
  var fileUploads = state.fileUploads;
4263
- var channel = useChannelStateContext().channel;
4264
- var addNotification = useChannelActionContext().addNotification;
4265
- var t = useTranslationContext().t;
4387
+ var channel = useChannelStateContext('useFileUploads').channel;
4388
+ var addNotification = useChannelActionContext('useFileUploads').addNotification;
4389
+ var getAppSettings = useChatContext('useFileUploads').getAppSettings;
4390
+ var t = useTranslationContext('useFileUploads').t;
4266
4391
  var uploadFile = React.useCallback(function (id) {
4267
4392
  dispatch({ id: id, state: 'uploading', type: 'setFileUpload' });
4268
4393
  }, []);
@@ -4272,7 +4397,7 @@ var useFileUploads = function (props, state, dispatch) {
4272
4397
  }, []);
4273
4398
  React.useEffect(function () {
4274
4399
  (function () { return __awaiter(void 0, void 0, void 0, function () {
4275
- var upload, file, id, response, error_1, errorMessage, alreadyRemoved;
4400
+ var upload, file, id, canUpload, response, error_1, errorMessage, alreadyRemoved;
4276
4401
  return __generator(this, function (_a) {
4277
4402
  switch (_a.label) {
4278
4403
  case 0:
@@ -4280,22 +4405,35 @@ var useFileUploads = function (props, state, dispatch) {
4280
4405
  if (!upload)
4281
4406
  return [2 /*return*/];
4282
4407
  file = upload.file, id = upload.id;
4283
- _a.label = 1;
4408
+ return [4 /*yield*/, checkUploadPermissions({
4409
+ addNotification: addNotification,
4410
+ file: file,
4411
+ getAppSettings: getAppSettings,
4412
+ t: t,
4413
+ uploadType: 'file',
4414
+ })];
4284
4415
  case 1:
4285
- _a.trys.push([1, 6, , 7]);
4286
- if (!doFileUploadRequest) return [3 /*break*/, 3];
4287
- return [4 /*yield*/, doFileUploadRequest(file, channel)];
4416
+ canUpload = _a.sent();
4417
+ if (!canUpload)
4418
+ return [2 /*return*/, removeFile(id)];
4419
+ _a.label = 2;
4288
4420
  case 2:
4421
+ _a.trys.push([2, 7, , 8]);
4422
+ if (!doFileUploadRequest) return [3 /*break*/, 4];
4423
+ return [4 /*yield*/, doFileUploadRequest(file, channel)];
4424
+ case 3:
4289
4425
  response = _a.sent();
4290
- return [3 /*break*/, 5];
4291
- case 3: return [4 /*yield*/, channel.sendFile(file)];
4292
- case 4:
4426
+ return [3 /*break*/, 6];
4427
+ case 4: return [4 /*yield*/, channel.sendFile(file)];
4428
+ case 5:
4293
4429
  response = _a.sent();
4294
- _a.label = 5;
4295
- case 5: return [3 /*break*/, 7];
4296
- case 6:
4430
+ _a.label = 6;
4431
+ case 6: return [3 /*break*/, 8];
4432
+ case 7:
4297
4433
  error_1 = _a.sent();
4298
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading file');
4434
+ errorMessage = typeof error_1.message === 'string'
4435
+ ? error_1.message
4436
+ : t('Error uploading file');
4299
4437
  addNotification(errorMessage, 'error');
4300
4438
  alreadyRemoved = false;
4301
4439
  if (!fileUploads[id]) {
@@ -4309,7 +4447,7 @@ var useFileUploads = function (props, state, dispatch) {
4309
4447
  errorHandler(error_1, 'upload-file', file);
4310
4448
  }
4311
4449
  return [2 /*return*/];
4312
- case 7:
4450
+ case 8:
4313
4451
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4314
4452
  // This is for the case if someone wants to handle failure on app level.
4315
4453
  if (!response) {
@@ -4337,7 +4475,7 @@ var apiMaxNumberOfFiles = 10;
4337
4475
  var useAttachments = function (props, state, dispatch) {
4338
4476
  var noFiles = props.noFiles;
4339
4477
  var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
4340
- var _a = useChannelStateContext(), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4478
+ var _a = useChannelStateContext('useAttachments'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4341
4479
  var _b = useFileUploads(props, state, dispatch), removeFile = _b.removeFile, uploadFile = _b.uploadFile;
4342
4480
  var _c = useImageUploads(props, state, dispatch), removeImage = _c.removeImage, uploadImage = _c.uploadImage;
4343
4481
  // Number of files that the user can still add. Should never be more than the amount allowed by the API.
@@ -4381,7 +4519,7 @@ var useAttachments = function (props, state, dispatch) {
4381
4519
  };
4382
4520
 
4383
4521
  var useMessageInputText = function (props, state, dispatch) {
4384
- var channel = useChannelStateContext().channel;
4522
+ var channel = useChannelStateContext('useMessageInputText').channel;
4385
4523
  var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent, _a = props.publishTypingEvent, publishTypingEvent = _a === void 0 ? true : _a;
4386
4524
  var text = state.text;
4387
4525
  var textareaRef = React.useRef();
@@ -4518,9 +4656,9 @@ var getAttachmentTypeFromMime = function (mime) {
4518
4656
  var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
4519
4657
  var clearEditingState = props.clearEditingState, message = props.message, overrideSubmitHandler = props.overrideSubmitHandler, parent = props.parent, publishTypingEvent = props.publishTypingEvent;
4520
4658
  var attachments = state.attachments, fileOrder = state.fileOrder, fileUploads = state.fileUploads, imageOrder = state.imageOrder, imageUploads = state.imageUploads, mentioned_users = state.mentioned_users, text = state.text;
4521
- var channel = useChannelStateContext().channel;
4522
- var _a = useChannelActionContext(), addNotification = _a.addNotification, editMessage = _a.editMessage, sendMessage = _a.sendMessage;
4523
- var t = useTranslationContext().t;
4659
+ var channel = useChannelStateContext('useSubmitHandler').channel;
4660
+ var _a = useChannelActionContext('useSubmitHandler'), addNotification = _a.addNotification, editMessage = _a.editMessage, sendMessage = _a.sendMessage;
4661
+ var t = useTranslationContext('useSubmitHandler').t;
4524
4662
  var getAttachmentsFromUploads = function () {
4525
4663
  var imageAttachments = imageOrder
4526
4664
  .map(function (id) { return imageUploads[id]; })
@@ -4713,7 +4851,7 @@ var initState = function (message) {
4713
4851
  var id = generateRandomId();
4714
4852
  acc[id] = {
4715
4853
  file: {
4716
- name: attachment.fallback,
4854
+ name: attachment.fallback || '',
4717
4855
  },
4718
4856
  id: id,
4719
4857
  state: 'finished',
@@ -4820,12 +4958,12 @@ var messageInputReducer = function (state, action) {
4820
4958
  * hook for MessageInput state
4821
4959
  */
4822
4960
  var useMessageInputState = function (props) {
4823
- var _a, _b;
4824
4961
  var message = props.message;
4825
- var channel = useChannelStateContext().channel;
4962
+ var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
4826
4963
  var _c = React.useReducer(messageInputReducer, message, initState), state = _c[0], dispatch = _c[1];
4827
4964
  var _d = useMessageInputText(props, state, dispatch), handleChange = _d.handleChange, insertText = _d.insertText, textareaRef = _d.textareaRef;
4828
4965
  var _e = React.useState(false), showCommandsList = _e[0], setShowCommandsList = _e[1];
4966
+ var _f = React.useState(false), showMentionsList = _f[0], setShowMentionsList = _f[1];
4829
4967
  var openCommandsList = function () {
4830
4968
  dispatch({
4831
4969
  getNewText: function () { return '/'; },
@@ -4834,11 +4972,19 @@ var useMessageInputState = function (props) {
4834
4972
  setShowCommandsList(true);
4835
4973
  };
4836
4974
  var closeCommandsList = function () { return setShowCommandsList(false); };
4837
- var _f = useEmojiPicker(state, dispatch, insertText), closeEmojiPicker = _f.closeEmojiPicker, emojiPickerRef = _f.emojiPickerRef, handleEmojiKeyDown = _f.handleEmojiKeyDown, onSelectEmoji = _f.onSelectEmoji, openEmojiPicker = _f.openEmojiPicker;
4838
- var _g = useAttachments(props, state, dispatch), maxFilesLeft = _g.maxFilesLeft, numberOfUploads = _g.numberOfUploads, removeFile = _g.removeFile, removeImage = _g.removeImage, uploadFile = _g.uploadFile, uploadImage = _g.uploadImage, uploadNewFiles = _g.uploadNewFiles;
4975
+ var openMentionsList = function () {
4976
+ dispatch({
4977
+ getNewText: function () { return '@'; },
4978
+ type: 'setText',
4979
+ });
4980
+ setShowMentionsList(true);
4981
+ };
4982
+ 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;
4839
4985
  var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads).handleSubmit;
4840
4986
  var onPaste = usePasteHandler(uploadNewFiles, insertText).onPaste;
4841
- var isUploadEnabled = ((_b = (_a = channel === null || channel === void 0 ? void 0 : channel.getConfig) === null || _a === void 0 ? void 0 : _a.call(channel)) === null || _b === void 0 ? void 0 : _b.uploads) !== false;
4987
+ var isUploadEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.uploads) !== false && channelCapabilities['upload-file'] !== false;
4842
4988
  var onSelectUser = React.useCallback(function (item) {
4843
4989
  dispatch({ type: 'addMentionedUser', user: item });
4844
4990
  }, []);
@@ -4850,12 +4996,12 @@ var useMessageInputState = function (props) {
4850
4996
  * TODO: fix the below at some point because this type casting is wrong
4851
4997
  * and just forced to not have warnings currently with the unknown casting
4852
4998
  */
4853
- 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 });
4999
+ closeEmojiPicker: closeEmojiPicker, closeMentionsList: closeMentionsList, 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, openMentionsList: openMentionsList, removeFile: removeFile, removeImage: removeImage, setText: setText, showCommandsList: showCommandsList, showMentionsList: showMentionsList, textareaRef: textareaRef, uploadFile: uploadFile, uploadImage: uploadImage, uploadNewFiles: uploadNewFiles });
4854
5000
  };
4855
5001
 
4856
5002
  var QuotedMessagePreviewHeader = function () {
4857
- var setQuotedMessage = useChannelActionContext().setQuotedMessage;
4858
- var t = useTranslationContext().t;
5003
+ var setQuotedMessage = useChannelActionContext('QuotedMessagePreview').setQuotedMessage;
5004
+ var t = useTranslationContext('QuotedMessagePreview').t;
4859
5005
  return (React__default['default'].createElement("div", { className: 'quoted-message-preview-header' },
4860
5006
  React__default['default'].createElement("div", null, t('Reply to Message')),
4861
5007
  React__default['default'].createElement("button", { className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
@@ -4865,8 +5011,8 @@ var QuotedMessagePreviewHeader = function () {
4865
5011
  var QuotedMessagePreview = function (props) {
4866
5012
  var _a;
4867
5013
  var quotedMessage = props.quotedMessage;
4868
- var Attachment = useComponentContext().Attachment;
4869
- var userLanguage = useTranslationContext().userLanguage;
5014
+ var Attachment = useComponentContext('QuotedMessagePreview').Attachment;
5015
+ var userLanguage = useTranslationContext('QuotedMessagePreview').userLanguage;
4870
5016
  var quotedMessageText = ((_a = quotedMessage.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) ||
4871
5017
  quotedMessage.text;
4872
5018
  // @ts-expect-error
@@ -4886,10 +5032,10 @@ var QuotedMessagePreview = function (props) {
4886
5032
  };
4887
5033
 
4888
5034
  var MessageInputFlat = function () {
4889
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
4890
- var t = useTranslationContext().t;
4891
- var _b = useMessageInputContext(), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleEmojiKeyDown = _b.handleEmojiKeyDown, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
4892
- var _c = useComponentContext(), _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;
5035
+ var _a = useChannelStateContext('MessageInputFlat'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
5036
+ var t = useTranslationContext('MessageInputFlat').t;
5037
+ var _b = useMessageInputContext('MessageInputFlat'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleEmojiKeyDown = _b.handleEmojiKeyDown, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
5038
+ 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;
4893
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) },
4894
5040
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
4895
5041
  quotedMessage && React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage }),
@@ -4913,7 +5059,7 @@ var MessageInputFlat = function () {
4913
5059
  };
4914
5060
 
4915
5061
  var useCreateMessageInputContext = function (value) {
4916
- var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, cooldownInterval = value.cooldownInterval, disabled = value.disabled, disableMentions = value.disableMentions, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiIndex = value.emojiIndex, emojiPickerIsOpen = value.emojiPickerIsOpen, emojiPickerRef = value.emojiPickerRef, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleEmojiKeyDown = value.handleEmojiKeyDown, handleSubmit = value.handleSubmit, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, keycodeSubmitKeys = value.keycodeSubmitKeys, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectEmoji = value.onSelectEmoji, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openEmojiPicker = value.openEmojiPicker, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, showCommandsList = value.showCommandsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
5062
+ var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiIndex = value.emojiIndex, emojiPickerIsOpen = value.emojiPickerIsOpen, emojiPickerRef = value.emojiPickerRef, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleEmojiKeyDown = value.handleEmojiKeyDown, handleSubmit = value.handleSubmit, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, keycodeSubmitKeys = value.keycodeSubmitKeys, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectEmoji = value.onSelectEmoji, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openEmojiPicker = value.openEmojiPicker, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, showCommandsList = value.showCommandsList, showMentionsList = value.showMentionsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
4917
5063
  var editing = message === null || message === void 0 ? void 0 : message.editing;
4918
5064
  var fileUploadsValue = Object.entries(fileUploads)
4919
5065
  // eslint-disable-next-line
@@ -4938,7 +5084,9 @@ var useCreateMessageInputContext = function (value) {
4938
5084
  clearEditingState: clearEditingState,
4939
5085
  closeCommandsList: closeCommandsList,
4940
5086
  closeEmojiPicker: closeEmojiPicker,
5087
+ closeMentionsList: closeMentionsList,
4941
5088
  cooldownInterval: cooldownInterval,
5089
+ cooldownRemaining: cooldownRemaining,
4942
5090
  disabled: disabled,
4943
5091
  disableMentions: disableMentions,
4944
5092
  doFileUploadRequest: doFileUploadRequest,
@@ -4972,6 +5120,7 @@ var useCreateMessageInputContext = function (value) {
4972
5120
  onSelectUser: onSelectUser,
4973
5121
  openCommandsList: openCommandsList,
4974
5122
  openEmojiPicker: openEmojiPicker,
5123
+ openMentionsList: openMentionsList,
4975
5124
  overrideSubmitHandler: overrideSubmitHandler,
4976
5125
  parent: parent,
4977
5126
  publishTypingEvent: publishTypingEvent,
@@ -4980,6 +5129,7 @@ var useCreateMessageInputContext = function (value) {
4980
5129
  setCooldownRemaining: setCooldownRemaining,
4981
5130
  setText: setText,
4982
5131
  showCommandsList: showCommandsList,
5132
+ showMentionsList: showMentionsList,
4983
5133
  text: text,
4984
5134
  textareaRef: textareaRef,
4985
5135
  uploadFile: uploadFile,
@@ -4987,6 +5137,8 @@ var useCreateMessageInputContext = function (value) {
4987
5137
  uploadNewFiles: uploadNewFiles,
4988
5138
  useMentionsTransliteration: useMentionsTransliteration,
4989
5139
  }); }, [
5140
+ cooldownInterval,
5141
+ cooldownRemaining,
4990
5142
  editing,
4991
5143
  emojiPickerIsOpen,
4992
5144
  fileUploadsValue,
@@ -4995,19 +5147,30 @@ var useCreateMessageInputContext = function (value) {
4995
5147
  mentionedUsersLength,
4996
5148
  parentId,
4997
5149
  publishTypingEvent,
5150
+ showCommandsList,
5151
+ showMentionsList,
4998
5152
  text,
4999
5153
  ]);
5000
5154
  return messageInputContext;
5001
5155
  };
5002
5156
 
5157
+ var MessageInputProvider = function (props) {
5158
+ var cooldownTimerState = useCooldownTimer();
5159
+ var messageInputState = useMessageInputState(props);
5160
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5161
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue }, props.children));
5162
+ };
5003
5163
  var UnMemoizedMessageInput = function (props) {
5004
5164
  var PropInput = props.Input;
5005
- var _a = useComponentContext(), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
5165
+ var dragAndDropWindow = useChannelStateContext().dragAndDropWindow;
5166
+ var _a = useComponentContext('MessageInput'), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
5006
5167
  var Input = PropInput || ContextInput || MessageInputFlat;
5007
- var messageInputState = useMessageInputState(props);
5008
- var cooldownTimerState = useCooldownTimer();
5009
- var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5010
- return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5168
+ var NullProvider = function (_a) {
5169
+ var children = _a.children;
5170
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
5171
+ };
5172
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? NullProvider : MessageInputProvider); }, [dragAndDropWindow]);
5173
+ return (React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, props),
5011
5174
  React__default['default'].createElement(TriggerProvider, null,
5012
5175
  React__default['default'].createElement(Input, null))));
5013
5176
  };
@@ -5017,10 +5180,10 @@ var UnMemoizedMessageInput = function (props) {
5017
5180
  var MessageInput = React__default['default'].memo(UnMemoizedMessageInput);
5018
5181
 
5019
5182
  var MessageInputSmall = function () {
5020
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
5021
- var t = useTranslationContext().t;
5022
- var _b = useMessageInputContext(), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleEmojiKeyDown = _b.handleEmojiKeyDown, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
5023
- var _c = useComponentContext(), _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;
5183
+ var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
5184
+ var t = useTranslationContext('MessageInputSmall').t;
5185
+ var _b = useMessageInputContext('MessageInputSmall'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleEmojiKeyDown = _b.handleEmojiKeyDown, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
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;
5024
5187
  return (React__default['default'].createElement("div", { className: 'str-chat__small-message-input__wrapper' },
5025
5188
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
5026
5189
  React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) },
@@ -5060,14 +5223,14 @@ var MMLReact = React__default['default'].lazy(function () { return __awaiter(voi
5060
5223
  */
5061
5224
  var MML = function (props) {
5062
5225
  var actionHandler = props.actionHandler, _a = props.align, align = _a === void 0 ? 'right' : _a, source = props.source;
5063
- var theme = useChatContext().theme;
5226
+ var theme = useChatContext('MML').theme;
5064
5227
  return (React__default['default'].createElement(React.Suspense, { fallback: null },
5065
5228
  React__default['default'].createElement(MMLReact, { className: "mml-align-" + align, Loading: null, onSubmit: actionHandler, source: source, Success: null, theme: (theme || '').replace(' ', '-') })));
5066
5229
  };
5067
5230
 
5068
5231
  var Modal = function (props) {
5069
5232
  var children = props.children, onClose = props.onClose, open = props.open;
5070
- var t = useTranslationContext().t;
5233
+ var t = useTranslationContext('Modal').t;
5071
5234
  var innerRef = React.useRef(null);
5072
5235
  var handleClick = function (event) {
5073
5236
  var _a;
@@ -5107,9 +5270,9 @@ var isMutableRef = function (ref) {
5107
5270
  var UnMemoizedReactionSelector = React__default['default'].forwardRef(function (props, ref) {
5108
5271
  var _a;
5109
5272
  var _b = props.additionalEmojiProps, additionalEmojiProps = _b === void 0 ? {} : _b, propAvatar = props.Avatar, _c = props.detailedView, detailedView = _c === void 0 ? true : _c, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, _d = props.reverse, reverse = _d === void 0 ? false : _d;
5110
- var contextAvatar = useComponentContext().Avatar;
5111
- var _e = useEmojiContext(), Emoji = _e.Emoji, emojiConfig = _e.emojiConfig;
5112
- var _f = useMessageContext(), contextHandleReaction = _f.handleReaction, message = _f.message;
5273
+ var contextAvatar = useComponentContext('ReactionSelector').Avatar;
5274
+ var _e = useEmojiContext('ReactionSelector'), Emoji = _e.Emoji, emojiConfig = _e.emojiConfig;
5275
+ var _f = useMessageContext('ReactionSelector'), contextHandleReaction = _f.handleReaction, message = _f.message;
5113
5276
  var _g = emojiConfig || {}, defaultMinimalEmojis = _g.defaultMinimalEmojis, fullEmojiData = _g.emojiData, emojiSetDef = _g.emojiSetDef;
5114
5277
  var Avatar$1 = propAvatar || contextAvatar || Avatar;
5115
5278
  var handleReaction = propHandleReaction || contextHandleReaction;
@@ -5189,8 +5352,8 @@ var ReactionSelector = React__default['default'].memo(UnMemoizedReactionSelector
5189
5352
 
5190
5353
  var UnMemoizedReactionsList = function (props) {
5191
5354
  var additionalEmojiProps = props.additionalEmojiProps, onClick = props.onClick, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, propReactions = props.reactions, _a = props.reverse, reverse = _a === void 0 ? false : _a;
5192
- var _b = useEmojiContext(), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5193
- var _c = useMessageContext(), message = _c.message, onReactionListClick = _c.onReactionListClick;
5355
+ var _b = useEmojiContext('ReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5356
+ var _c = useMessageContext('ReactionsList'), message = _c.message, onReactionListClick = _c.onReactionListClick;
5194
5357
  var _d = emojiConfig || {}, defaultMinimalEmojis = _d.defaultMinimalEmojis, fullEmojiData = _d.emojiData, emojiSetDef = _d.emojiSetDef;
5195
5358
  var reactions = propReactions || message.latest_reactions || [];
5196
5359
  var reactionCounts = propReactionCounts || message.reaction_counts || {};
@@ -5248,8 +5411,8 @@ var ReactionsList = React__default['default'].memo(UnMemoizedReactionsList);
5248
5411
 
5249
5412
  var UnMemoizedSimpleReactionsList = function (props) {
5250
5413
  var _a = props.additionalEmojiProps, additionalEmojiProps = _a === void 0 ? {} : _a, propHandleReaction = props.handleReaction, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, propReactions = props.reactions;
5251
- var _b = useEmojiContext(), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5252
- var _c = useMessageContext(), contextHandleReaction = _c.handleReaction, message = _c.message;
5414
+ var _b = useEmojiContext('SimpleReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5415
+ var _c = useMessageContext('SimpleReactionsList'), contextHandleReaction = _c.handleReaction, message = _c.message;
5253
5416
  var _d = emojiConfig || {}, defaultMinimalEmojis = _d.defaultMinimalEmojis, fullEmojiData = _d.emojiData, emojiSetDef = _d.emojiSetDef;
5254
5417
  var _e = React.useState(undefined), tooltipReactionType = _e[0], setTooltipReactionType = _e[1];
5255
5418
  var handleReaction = propHandleReaction || contextHandleReaction;
@@ -5321,7 +5484,7 @@ var SimpleReactionsList = React__default['default'].memo(UnMemoizedSimpleReactio
5321
5484
  var MessageSimpleWithContext = function (props) {
5322
5485
  var _a;
5323
5486
  var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
5324
- var _b = useComponentContext(), Attachment = _b.Attachment, _c = _b.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, _d = _b.EditMessageInput, EditMessageInput = _d === void 0 ? EditMessageForm : _d, _e = _b.MessageDeleted, MessageDeleted$1 = _e === void 0 ? MessageDeleted : _e, _f = _b.MessageOptions, MessageOptions$1 = _f === void 0 ? MessageOptions : _f, _g = _b.MessageRepliesCountButton, MessageRepliesCountButton$1 = _g === void 0 ? MessageRepliesCountButton : _g, _h = _b.MessageStatus, MessageStatus$1 = _h === void 0 ? MessageStatus : _h, _j = _b.MessageTimestamp, MessageTimestamp$1 = _j === void 0 ? MessageTimestamp : _j, _k = _b.ReactionSelector, ReactionSelector$1 = _k === void 0 ? ReactionSelector : _k, _l = _b.ReactionsList, ReactionsList$1 = _l === void 0 ? ReactionsList : _l;
5487
+ var _b = useComponentContext('MessageSimple'), Attachment = _b.Attachment, _c = _b.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, _d = _b.EditMessageInput, EditMessageInput = _d === void 0 ? EditMessageForm : _d, _e = _b.MessageDeleted, MessageDeleted$1 = _e === void 0 ? MessageDeleted : _e, _f = _b.MessageOptions, MessageOptions$1 = _f === void 0 ? MessageOptions : _f, _g = _b.MessageRepliesCountButton, MessageRepliesCountButton$1 = _g === void 0 ? MessageRepliesCountButton : _g, _h = _b.MessageStatus, MessageStatus$1 = _h === void 0 ? MessageStatus : _h, _j = _b.MessageTimestamp, MessageTimestamp$1 = _j === void 0 ? MessageTimestamp : _j, _k = _b.ReactionSelector, ReactionSelector$1 = _k === void 0 ? ReactionSelector : _k, _l = _b.ReactionsList, ReactionsList$1 = _l === void 0 ? ReactionsList : _l;
5325
5488
  var messageWrapperRef = React.useRef(null);
5326
5489
  var hasAttachment = messageHasAttachments(message);
5327
5490
  var hasReactions = messageHasReactions(message);
@@ -5361,16 +5524,37 @@ var MemoizedMessageSimple = React__default['default'].memo(MessageSimpleWithCont
5361
5524
  * The default UI component that renders a message and receives functionality and logic from the MessageContext.
5362
5525
  */
5363
5526
  var MessageSimple = function (props) {
5364
- var messageContext = useMessageContext();
5527
+ var messageContext = useMessageContext('MessageSimple');
5365
5528
  return React__default['default'].createElement(MemoizedMessageSimple, __assign({}, messageContext, props));
5366
5529
  };
5367
5530
 
5368
- var TypingContext = React__default['default'].createContext({});
5531
+ var DropzoneInner = function (_a) {
5532
+ var children = _a.children;
5533
+ var _b = useChannelStateContext('DropzoneProvider'), acceptedFiles = _b.acceptedFiles, multipleUploads = _b.multipleUploads;
5534
+ var _c = useMessageInputContext('DropzoneProvider'), cooldownRemaining = _c.cooldownRemaining, isUploadEnabled = _c.isUploadEnabled, maxFilesLeft = _c.maxFilesLeft, uploadNewFiles = _c.uploadNewFiles;
5535
+ return (React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads }, children));
5536
+ };
5537
+ var DropzoneProvider = function (props) {
5538
+ var cooldownTimerState = useCooldownTimer();
5539
+ var messageInputState = useMessageInputState(props);
5540
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5541
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5542
+ React__default['default'].createElement(DropzoneInner, null, props.children)));
5543
+ };
5544
+
5545
+ var TypingContext = React__default['default'].createContext(undefined);
5369
5546
  var TypingProvider = function (_a) {
5370
5547
  var children = _a.children, value = _a.value;
5371
5548
  return (React__default['default'].createElement(TypingContext.Provider, { value: value }, children));
5372
5549
  };
5373
- var useTypingContext = function () { return React.useContext(TypingContext); };
5550
+ var useTypingContext = function (componentName) {
5551
+ var contextValue = React.useContext(TypingContext);
5552
+ if (!contextValue) {
5553
+ console.warn("The useTypingContext hook was called outside of the TypingContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
5554
+ return {};
5555
+ }
5556
+ return contextValue;
5557
+ };
5374
5558
  /**
5375
5559
  * Typescript currently does not support partial inference, so if TypingContext
5376
5560
  * typing is desired while using the HOC withTypingContext, the Props for the
@@ -5391,25 +5575,27 @@ var compressed=true;var categories=[{id:"people",name:"Smileys & People",emojis:
5391
5575
 
5392
5576
  var UnMemoizedChannel = function (props) {
5393
5577
  var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a;
5394
- var contextChannel = useChatContext().channel;
5578
+ var contextChannel = useChatContext('Channel').channel;
5395
5579
  var channel = propsChannel || contextChannel;
5396
5580
  if (!(channel === null || channel === void 0 ? void 0 : channel.cid))
5397
5581
  return EmptyPlaceholder;
5398
5582
  return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
5399
5583
  };
5400
5584
  var ChannelInner = function (props) {
5401
- 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, skipMessageDataMemoization = props.skipMessageDataMemoization;
5402
- var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
5403
- var t = useTranslationContext().t;
5404
- var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
5405
- var _g = React.useState(), quotedMessage = _g[0], setQuotedMessage = _g[1];
5585
+ var _a;
5586
+ 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, _c = props.emojiData, emojiData = _c === void 0 ? defaultEmojiData : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator$1 = _e === void 0 ? LoadingIndicator : _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;
5587
+ var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, mutes = _h.mutes, theme = _h.theme, useImageFlagEmojisOnWindows = _h.useImageFlagEmojisOnWindows;
5588
+ var t = useTranslationContext('Channel').t;
5589
+ var _j = React.useState(channel.getConfig()), channelConfig = _j[0], setChannelConfig = _j[1];
5590
+ var _k = React.useState([]), notifications = _k[0], setNotifications = _k[1];
5591
+ var _l = React.useState(), quotedMessage = _l[0], setQuotedMessage = _l[1];
5406
5592
  var notificationTimeouts = [];
5407
- var _h = React.useReducer(channelReducer, initialState), state = _h[0], dispatch = _h[1];
5593
+ var _m = React.useReducer(channelReducer, initialState), state = _m[0], dispatch = _m[1];
5408
5594
  var isMounted = useIsMounted();
5409
5595
  var originalTitle = React.useRef('');
5410
5596
  var lastRead = React.useRef(new Date());
5411
5597
  var online = React.useRef(true);
5412
- var channelConfig = channel.getConfig();
5598
+ var channelCapabilitiesArray = (_a = channel.data) === null || _a === void 0 ? void 0 : _a.own_capabilities;
5413
5599
  var emojiConfig = {
5414
5600
  commonEmoji: commonEmoji,
5415
5601
  defaultMinimalEmojis: defaultMinimalEmojis,
@@ -5431,7 +5617,10 @@ var ChannelInner = function (props) {
5431
5617
  else {
5432
5618
  streamChat.logChatPromiseExecution(channel.markRead(), 'mark read');
5433
5619
  }
5434
- if (originalTitle.current) {
5620
+ if (activeUnreadHandler) {
5621
+ activeUnreadHandler(0, originalTitle.current);
5622
+ }
5623
+ else if (originalTitle.current) {
5435
5624
  document.title = originalTitle.current;
5436
5625
  }
5437
5626
  };
@@ -5445,6 +5634,8 @@ var ChannelInner = function (props) {
5445
5634
  type: 'updateThreadOnEvent',
5446
5635
  });
5447
5636
  }
5637
+ if (event.type === 'user.watching.start' || event.type === 'user.watching.stop')
5638
+ return;
5448
5639
  if (event.type === 'typing.start' || event.type === 'typing.stop') {
5449
5640
  return dispatch({ channel: channel, type: 'setTyping' });
5450
5641
  }
@@ -5482,7 +5673,7 @@ var ChannelInner = function (props) {
5482
5673
  markRead();
5483
5674
  };
5484
5675
  (function () { return __awaiter(void 0, void 0, void 0, function () {
5485
- var e_1;
5676
+ var config, e_1;
5486
5677
  return __generator(this, function (_a) {
5487
5678
  switch (_a.label) {
5488
5679
  case 0:
@@ -5493,6 +5684,8 @@ var ChannelInner = function (props) {
5493
5684
  return [4 /*yield*/, channel.watch()];
5494
5685
  case 2:
5495
5686
  _a.sent();
5687
+ config = channel.getConfig();
5688
+ setChannelConfig(config);
5496
5689
  return [3 /*break*/, 4];
5497
5690
  case 3:
5498
5691
  e_1 = _a.sent();
@@ -5761,7 +5954,7 @@ var ChannelInner = function (props) {
5761
5954
  var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
5762
5955
  var editMessage = useEditMessageHandler(doUpdateMessageRequest);
5763
5956
  var typing = state.typing, restState = __rest(state, ["typing"]);
5764
- var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
5957
+ var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
5765
5958
  var channelActionContextValue = React.useMemo(function () { return ({
5766
5959
  addNotification: addNotification,
5767
5960
  closeThread: closeThread,
@@ -5826,10 +6019,16 @@ var ChannelInner = function (props) {
5826
6019
  typing: typing,
5827
6020
  });
5828
6021
  var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
6022
+ var chatContainerClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chatContainer) || 'str-chat__container';
5829
6023
  var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
5830
6024
  var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
5831
6025
  ? 'str-chat--windows-flags'
5832
6026
  : '';
6027
+ var NullProvider = function (_a) {
6028
+ var children = _a.children;
6029
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
6030
+ };
6031
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? DropzoneProvider : NullProvider); }, [dragAndDropWindow]);
5833
6032
  if (state.error) {
5834
6033
  return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
5835
6034
  React__default['default'].createElement(LoadingErrorIndicator$1, { error: state.error })));
@@ -5848,7 +6047,8 @@ var ChannelInner = function (props) {
5848
6047
  React__default['default'].createElement(ComponentProvider, { value: componentContextValue },
5849
6048
  React__default['default'].createElement(EmojiProvider, { value: emojiContextValue },
5850
6049
  React__default['default'].createElement(TypingProvider, { value: typingContextValue },
5851
- React__default['default'].createElement("div", { className: 'str-chat__container' }, children))))))));
6050
+ React__default['default'].createElement("div", { className: "" + chatContainerClass },
6051
+ React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, optionalMessageInputProps), children)))))))));
5852
6052
  };
5853
6053
  /**
5854
6054
  * A wrapper component that provides channel data and renders children.
@@ -5863,9 +6063,9 @@ var Channel = React__default['default'].memo(UnMemoizedChannel);
5863
6063
 
5864
6064
  var UnMemoizedChannelHeader = function (props) {
5865
6065
  var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, propImage = props.image, live = props.live, title = props.title;
5866
- var _b = useChannelStateContext(), channel = _b.channel, watcher_count = _b.watcher_count;
5867
- var openMobileNav = useChatContext().openMobileNav;
5868
- var t = useTranslationContext().t;
6066
+ var _b = useChannelStateContext('ChannelHeader'), channel = _b.channel, watcher_count = _b.watcher_count;
6067
+ var openMobileNav = useChatContext('ChannelHeader').openMobileNav;
6068
+ var t = useTranslationContext('ChannelHeader').t;
5869
6069
  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;
5870
6070
  var image = propImage || channelImage;
5871
6071
  return (React__default['default'].createElement("div", { className: 'str-chat__header-livestream' },
@@ -5898,7 +6098,7 @@ var img = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3cs
5898
6098
 
5899
6099
  var UnMemoizedChatDown = function (props) {
5900
6100
  var image = props.image, text = props.text, _a = props.type, type = _a === void 0 ? 'Error' : _a;
5901
- var t = useTranslationContext().t;
6101
+ var t = useTranslationContext('ChatDown').t;
5902
6102
  return (React__default['default'].createElement("div", { className: 'str-chat__down' },
5903
6103
  React__default['default'].createElement(LoadingChannels, null),
5904
6104
  React__default['default'].createElement("div", { className: 'str-chat__down-main' },
@@ -5927,7 +6127,7 @@ var ChannelListMessenger = function (props) {
5927
6127
  };
5928
6128
 
5929
6129
  var useChannelDeletedListener = function (setChannels, customHandler) {
5930
- var client = useChatContext().client;
6130
+ var client = useChatContext('useChannelDeletedListener').client;
5931
6131
  React.useEffect(function () {
5932
6132
  var handleEvent = function (event) {
5933
6133
  if (customHandler && typeof customHandler === 'function') {
@@ -5952,7 +6152,7 @@ var useChannelDeletedListener = function (setChannels, customHandler) {
5952
6152
  };
5953
6153
 
5954
6154
  var useChannelHiddenListener = function (setChannels, customHandler) {
5955
- var client = useChatContext().client;
6155
+ var client = useChatContext('useChannelHiddenListener').client;
5956
6156
  React.useEffect(function () {
5957
6157
  var handleEvent = function (event) {
5958
6158
  if (customHandler && typeof customHandler === 'function') {
@@ -5977,7 +6177,7 @@ var useChannelHiddenListener = function (setChannels, customHandler) {
5977
6177
  };
5978
6178
 
5979
6179
  var useChannelTruncatedListener = function (setChannels, customHandler, forceUpdate) {
5980
- var client = useChatContext().client;
6180
+ var client = useChatContext('useChannelTruncatedListener').client;
5981
6181
  React.useEffect(function () {
5982
6182
  var handleEvent = function (event) {
5983
6183
  setChannels(function (channels) { return __spreadArray([], channels); });
@@ -5996,7 +6196,7 @@ var useChannelTruncatedListener = function (setChannels, customHandler, forceUpd
5996
6196
  };
5997
6197
 
5998
6198
  var useChannelUpdatedListener = function (setChannels, customHandler, forceUpdate) {
5999
- var client = useChatContext().client;
6199
+ var client = useChatContext('useChannelUpdatedListener').client;
6000
6200
  React.useEffect(function () {
6001
6201
  var handleEvent = function (event) {
6002
6202
  setChannels(function (channels) {
@@ -6048,7 +6248,7 @@ var moveChannelUp = function (_a) {
6048
6248
  };
6049
6249
 
6050
6250
  var useChannelVisibleListener = function (setChannels, customHandler) {
6051
- var client = useChatContext().client;
6251
+ var client = useChatContext('useChannelVisibleListener').client;
6052
6252
  React.useEffect(function () {
6053
6253
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6054
6254
  var channel_1;
@@ -6077,7 +6277,7 @@ var useChannelVisibleListener = function (setChannels, customHandler) {
6077
6277
  };
6078
6278
 
6079
6279
  var useConnectionRecoveredListener = function (forceUpdate) {
6080
- var client = useChatContext().client;
6280
+ var client = useChatContext('useConnectionRecoveredListener').client;
6081
6281
  React.useEffect(function () {
6082
6282
  var handleEvent = function () {
6083
6283
  if (forceUpdate) {
@@ -6094,7 +6294,7 @@ var useConnectionRecoveredListener = function (forceUpdate) {
6094
6294
  var useMessageNewListener = function (setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels) {
6095
6295
  if (lockChannelOrder === void 0) { lockChannelOrder = false; }
6096
6296
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6097
- var client = useChatContext().client;
6297
+ var client = useChatContext('useMessageNewListener').client;
6098
6298
  React.useEffect(function () {
6099
6299
  var handleEvent = function (event) {
6100
6300
  setChannels(function (channels) {
@@ -6134,7 +6334,7 @@ var useMobileNavigation = function (channelListRef, navOpen, closeMobileNav) {
6134
6334
 
6135
6335
  var useNotificationAddedToChannelListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
6136
6336
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6137
- var client = useChatContext().client;
6337
+ var client = useChatContext('useNotificationAddedToChannelListener').client;
6138
6338
  React.useEffect(function () {
6139
6339
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6140
6340
  var channel_1;
@@ -6165,7 +6365,7 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
6165
6365
 
6166
6366
  var useNotificationMessageNewListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
6167
6367
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6168
- var client = useChatContext().client;
6368
+ var client = useChatContext('useNotificationMessageNewListener').client;
6169
6369
  React.useEffect(function () {
6170
6370
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6171
6371
  var channel_1;
@@ -6195,7 +6395,7 @@ var useNotificationMessageNewListener = function (setChannels, customHandler, al
6195
6395
  };
6196
6396
 
6197
6397
  var useNotificationRemovedFromChannelListener = function (setChannels, customHandler) {
6198
- var client = useChatContext().client;
6398
+ var client = useChatContext('useNotificationRemovedFromChannelListener').client;
6199
6399
  React.useEffect(function () {
6200
6400
  var handleEvent = function (event) {
6201
6401
  if (customHandler && typeof customHandler === 'function') {
@@ -6226,6 +6426,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
6226
6426
  return __generator(this, function (_b) {
6227
6427
  switch (_b.label) {
6228
6428
  case 0:
6429
+ setError(false);
6229
6430
  if (queryType === 'reload') {
6230
6431
  setChannels([]);
6231
6432
  setLoadingChannels(true);
@@ -6279,7 +6480,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
6279
6480
  };
6280
6481
 
6281
6482
  var useUserPresenceChangedListener = function (setChannels) {
6282
- var client = useChatContext().client;
6483
+ var client = useChatContext('useUserPresenceChangedListener').client;
6283
6484
  React.useEffect(function () {
6284
6485
  var handleEvent = function (event) {
6285
6486
  setChannels(function (channels) {
@@ -6332,7 +6533,7 @@ var UnMemoizedChannelPreviewMessenger = function (props) {
6332
6533
  var ChannelPreviewMessenger = React__default['default'].memo(UnMemoizedChannelPreviewMessenger);
6333
6534
 
6334
6535
  var useIsChannelMuted = function (channel) {
6335
- var client = useChatContext().client;
6536
+ var client = useChatContext('useIsChannelMuted').client;
6336
6537
  var _a = React.useState(channel.muteStatus()), muted = _a[0], setMuted = _a[1];
6337
6538
  React.useEffect(function () {
6338
6539
  var handleEvent = function () { return setMuted(channel.muteStatus()); };
@@ -6394,8 +6595,8 @@ var getDisplayImage = function (channel, currentUser) {
6394
6595
 
6395
6596
  var ChannelPreview = function (props) {
6396
6597
  var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a;
6397
- var _b = useChatContext(), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
6398
- var _c = useTranslationContext(), t = _c.t, userLanguage = _c.userLanguage;
6598
+ var _b = useChatContext('ChannelPreview'), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
6599
+ var _c = useTranslationContext('ChannelPreview'), t = _c.t, userLanguage = _c.userLanguage;
6399
6600
  var _d = React.useState(channel.state.messages[channel.state.messages.length - 1]), lastMessage = _d[0], setLastMessage = _d[1];
6400
6601
  var _e = React.useState(0), unread = _e[0], setUnread = _e[1];
6401
6602
  var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
@@ -6448,7 +6649,7 @@ var ChannelPreview = function (props) {
6448
6649
 
6449
6650
  var SearchInput = function (props) {
6450
6651
  var channelSearchParams = props.channelSearchParams, inputRef = props.inputRef, onSearch = props.onSearch, query = props.query, searchFunction = props.searchFunction;
6451
- var t = useTranslationContext().t;
6652
+ var t = useTranslationContext('SearchInput').t;
6452
6653
  return (React__default['default'].createElement("input", { className: 'str-chat__channel-search-input', onChange: function (event) {
6453
6654
  return searchFunction ? searchFunction(channelSearchParams, event) : onSearch(event);
6454
6655
  }, placeholder: t('Search'), ref: inputRef, type: 'text', value: query }));
@@ -6480,7 +6681,7 @@ var DefaultSearchResultItem = function (props) {
6480
6681
  };
6481
6682
  var SearchResults = function (props) {
6482
6683
  var _a = props.DropdownContainer, DropdownContainer = _a === void 0 ? DefaultDropdownContainer : _a, popupResults = props.popupResults, results = props.results, searching = props.searching, SearchEmpty = props.SearchEmpty, SearchResultsHeader = props.SearchResultsHeader, SearchLoading = props.SearchLoading, _b = props.SearchResultItem, SearchResultItem = _b === void 0 ? DefaultSearchResultItem : _b, selectResult = props.selectResult;
6483
- var t = useTranslationContext().t;
6684
+ var t = useTranslationContext('SearchResults').t;
6484
6685
  var _c = React.useState(), focusedUser = _c[0], setFocusedUser = _c[1];
6485
6686
  var device = useBreakpoint().device;
6486
6687
  var containerStyle = popupResults && device === 'full' ? 'popup' : 'inline';
@@ -6528,7 +6729,7 @@ var SearchResults = function (props) {
6528
6729
 
6529
6730
  var UnMemoizedChannelSearch = function (props) {
6530
6731
  var _a = props.channelType, channelType = _a === void 0 ? 'messaging' : _a, DropdownContainer = props.DropdownContainer, onSelectResult = props.onSelectResult, _b = props.popupResults, popupResults = _b === void 0 ? false : _b, SearchEmpty = props.SearchEmpty, _c = props.searchForChannels, searchForChannels = _c === void 0 ? false : _c, searchFunction = props.searchFunction, _d = props.SearchInput, SearchInput$1 = _d === void 0 ? SearchInput : _d, SearchLoading = props.SearchLoading, searchQueryParams = props.searchQueryParams, SearchResultItem = props.SearchResultItem, SearchResultsHeader = props.SearchResultsHeader;
6531
- var _e = useChatContext(), client = _e.client, setActiveChannel = _e.setActiveChannel;
6732
+ var _e = useChatContext('ChannelSearch'), client = _e.client, setActiveChannel = _e.setActiveChannel;
6532
6733
  var _f = React.useState(''), query = _f[0], setQuery = _f[1];
6533
6734
  var _g = React.useState([]), results = _g[0], setResults = _g[1];
6534
6735
  var _h = React.useState(false), resultsOpen = _h[0], setResultsOpen = _h[1];
@@ -6642,7 +6843,7 @@ var ChannelSearch = React__default['default'].memo(UnMemoizedChannelSearch);
6642
6843
 
6643
6844
  var UnMemoizedEmptyStateIndicator = function (props) {
6644
6845
  var listType = props.listType;
6645
- var t = useTranslationContext().t;
6846
+ var t = useTranslationContext('EmptyStateIndicator').t;
6646
6847
  if (listType === 'channel')
6647
6848
  return React__default['default'].createElement("p", null, t('You have no channels currently'));
6648
6849
  if (listType === 'message')
@@ -6672,7 +6873,7 @@ var DEFAULT_OPTIONS = {};
6672
6873
  var DEFAULT_SORT = {};
6673
6874
  var UnMemoizedChannelList = function (props) {
6674
6875
  var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, _h = props.sendChannelsToList, sendChannelsToList = _h === void 0 ? false : _h, _j = props.setActiveChannelOnMount, setActiveChannelOnMount = _j === void 0 ? true : _j, _k = props.showChannelSearch, showChannelSearch = _k === void 0 ? false : _k, _l = props.sort, sort = _l === void 0 ? DEFAULT_SORT : _l, _m = props.watchers, watchers = _m === void 0 ? {} : _m;
6675
- var _o = useChatContext(), channel = _o.channel, client = _o.client, closeMobileNav = _o.closeMobileNav, customClasses = _o.customClasses, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
6876
+ var _o = useChatContext('ChannelList'), channel = _o.channel, client = _o.client, closeMobileNav = _o.closeMobileNav, customClasses = _o.customClasses, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
6676
6877
  var channelListRef = React.useRef(null);
6677
6878
  var _q = React.useState(0), channelUpdateCount = _q[0], setChannelUpdateCount = _q[1];
6678
6879
  /**
@@ -6684,7 +6885,7 @@ var UnMemoizedChannelList = function (props) {
6684
6885
  return __generator(this, function (_a) {
6685
6886
  switch (_a.label) {
6686
6887
  case 0:
6687
- if (channels.length === 0 || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6888
+ if (!channels.length || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6688
6889
  return [2 /*return*/];
6689
6890
  }
6690
6891
  if (!customActiveChannel) return [3 /*break*/, 3];
@@ -6735,7 +6936,7 @@ var UnMemoizedChannelList = function (props) {
6735
6936
  useUserPresenceChangedListener(setChannels);
6736
6937
  React.useEffect(function () {
6737
6938
  var handleEvent = function (event) {
6738
- if (setActiveChannel && (event === null || event === void 0 ? void 0 : event.cid) === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6939
+ if (event.cid === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6739
6940
  setActiveChannel();
6740
6941
  }
6741
6942
  };
@@ -6745,10 +6946,8 @@ var UnMemoizedChannelList = function (props) {
6745
6946
  client.off('channel.deleted', handleEvent);
6746
6947
  client.off('channel.hidden', handleEvent);
6747
6948
  };
6748
- }, [channel]);
6949
+ }, [channel === null || channel === void 0 ? void 0 : channel.cid]);
6749
6950
  var renderChannel = function (item) {
6750
- if (!item)
6751
- return null;
6752
6951
  var previewProps = {
6753
6952
  activeChannel: channel,
6754
6953
  Avatar: Avatar$1,
@@ -6761,7 +6960,6 @@ var UnMemoizedChannelList = function (props) {
6761
6960
  };
6762
6961
  return React__default['default'].createElement(ChannelPreview, __assign({}, previewProps));
6763
6962
  };
6764
- var renderList = function () { return (React__default['default'].createElement(List, { error: status.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: status.loadingChannels, LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator }, !loadedChannels || loadedChannels.length === 0 ? (React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default['default'].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: status.refreshing }, loadedChannels.map(renderChannel))))); };
6765
6963
  var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
6766
6964
  var channelListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) || 'str-chat-channel-list';
6767
6965
  var navigationClass = navOpen ? 'str-chat-channel-list--open' : '';
@@ -6771,36 +6969,36 @@ var UnMemoizedChannelList = function (props) {
6771
6969
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6772
6970
  React__default['default'].createElement("div", { className: chatClass + " " + channelListClass + " " + theme + " " + navigationClass + " " + windowsEmojiClass, ref: channelListRef },
6773
6971
  showChannelSearch && React__default['default'].createElement(ChannelSearch$1, __assign({}, additionalChannelSearchProps)),
6774
- renderList())));
6972
+ React__default['default'].createElement(List, { error: status.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: status.loadingChannels, 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, loadNextPage: loadNextPage, refreshing: status.refreshing }, loadedChannels.map(renderChannel)))))));
6775
6973
  };
6776
6974
  /**
6777
6975
  * Renders a preview list of Channels, allowing you to select the Channel you want to open
6778
6976
  */
6779
6977
  var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
6780
6978
 
6781
- var Cancel$b="Stornieren";var Close$b="Schließen";var Delete$b="Löschen";var Delivered$b="Geliefert";var Flag$b="Flagge";var Mute$b="Stumm";var New$b="Neu";var Pin$b="Stift";var Reply$b="Antworten";var Search$b="Suche";var Send$b="Senden";var Thread$c="Faden";var Unmute$b="Stummschaltung aufheben";var Unpin$b="Lösen Sie den Stift";var live$b="wohnen";var deTranslations = {"1 reply":"1 Antwort","Attach files":"Dateien anhängen",Cancel:Cancel$b,"Channel Missing":"Kanal fehlt",Close:Close$b,"Close emoji picker":"Emoji-Picker schließen","Commands matching":"Übereinstimmende Befehle","Connection failure, reconnecting now...":"Verbindungsfehler, jetzt wieder verbinden...",Delete:Delete$b,Delivered:Delivered$b,"Edit Message":"Nachricht bearbeiten","Edit message request failed":"Anfrage zum Bearbeiten der Nachricht fehlgeschlagen","Emoji matching":"Emoji passend","Empty message...":"Leere Nachricht...","Error adding flag":"Fehler beim Hinzufügen des Flags","Error connecting to chat, refresh the page to try again.":"Fehler beim Herstellen einer Verbindung zum Chat. Aktualisieren Sie die Seite, um es erneut zu versuchen.","Error deleting message":"Fehler beim Löschen der Nachricht","Error muting a user ...":"Fehler beim Stummschalten eines Benutzers...","Error pinning message":"Fehler beim Fixieren der Nachricht","Error removing message pin":"Fehler beim Entfernen des Nachrichten-Pins","Error unmuting a user ...":"Fehler beim Stummschalten eines Benutzers...","Error uploading file":"Fehler beim Hochladen der Datei","Error uploading image":"Fehler beim hochladen des Bildes","Error · Unsent":"Fehler nicht gesendet","Error: {{ errorMessage }}":"Fehler: {{ errorMessage }}",Flag:Flag$b,"Message Failed · Click to try again":"Nachricht fehlgeschlagen · Klicken Sie hier, um es erneut zu versuchen","Message Failed · Unauthorized":"Nachricht fehlgeschlagen · Nicht autorisiert","Message deleted":"Nachricht gelöscht","Message has been successfully flagged":"Nachricht wurde erfolgreich markiert","Message pinned":"Nachricht angeheftet",Mute:Mute$b,New:New$b,"New Messages!":"Neue Nachrichten!","No results found":"keine Ergebnisse gefunden","Nothing yet...":"Noch nichts...","Only visible to you":"Nur für Sie sichtbar","Open emoji picker":"Öffnen Sie den Emoji-Picker","People matching":"Passende Personen","Pick your emoji":"Wähle dein Emoji",Pin:Pin$b,"Pinned by":"Gepinnt von",Reply:Reply$b,"Reply to Message":"Auf Nachricht antworten",Search:Search$b,"Searching...":"Suchen...",Send:Send$b,"Send message request failed":"Nachrichtenanfrage senden fehlgeschlagen","Sending...":"Senden...","Slow Mode ON":"Langsamer Modus EIN","Start of a new thread":"Start eines neuen Faden","This message was deleted...":"Diese Nachricht wurde gelöscht...",Thread:Thread$c,"Type your message":"Geben Sie Ihre Nachricht ein",Unmute:Unmute$b,Unpin:Unpin$b,"Wait until all attachments have uploaded":"Warten Sie, bis alle Anhänge hochgeladen wurden","You have no channels currently":"Sie haben derzeit keine Kanäle","You've reached the maximum number of files":"Sie haben die maximale Anzahl von Dateien erreicht",live:live$b,"this content could not be displayed":"Dieser Inhalt konnte nicht angezeigt werden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} und {{moreCount}} Mehr","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} und {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} und {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} Mehr","{{ memberCount }} members":"{{ memberCount }} Mitglieder","{{ replyCount }} replies":"{{ replyCount }} antwortet","{{ user }} has been muted":"{{ user }} wurde stummgeschaltet","{{ user }} has been unmuted":"{{ user }} wurde nicht stummgeschaltet","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anhang..."};
6979
+ var Cancel$b="Stornieren";var Close$b="Schließen";var Delete$b="Löschen";var Delivered$b="Geliefert";var Flag$b="Flagge";var Mute$b="Stumm";var New$b="Neu";var Pin$b="Stift";var Reply$b="Antworten";var Search$b="Suche";var Send$b="Senden";var Thread$c="Thread";var Unmute$b="Stummschaltung aufheben";var Unpin$b="Lösen Sie den Stift";var live$b="live";var deTranslations = {"1 reply":"1 Antwort","Attach files":"Dateien anhängen",Cancel:Cancel$b,"Channel Missing":"Kanal fehlt",Close:Close$b,"Close emoji picker":"Emoji-Picker schließen","Commands matching":"Übereinstimmende Befehle","Connection failure, reconnecting now...":"Verbindungsfehler, jetzt wieder verbinden...",Delete:Delete$b,Delivered:Delivered$b,"Edit Message":"Nachricht bearbeiten","Edit message request failed":"Anfrage zum Bearbeiten der Nachricht fehlgeschlagen","Emoji matching":"Emoji passend","Empty message...":"Leere Nachricht...","Error adding flag":"Fehler beim Hinzufügen des Flags","Error connecting to chat, refresh the page to try again.":"Fehler beim Herstellen einer Verbindung zum Chat. Aktualisieren Sie die Seite, um es erneut zu versuchen.","Error deleting message":"Fehler beim Löschen der Nachricht","Error muting a user ...":"Fehler beim Stummschalten eines Benutzers...","Error pinning message":"Fehler beim Fixieren der Nachricht","Error removing message pin":"Fehler beim Entfernen des Nachrichten-Pins","Error unmuting a user ...":"Fehler beim Stummschalten eines Benutzers...","Error uploading file":"Fehler beim Hochladen der Datei","Error uploading image":"Fehler beim hochladen des Bildes","Error · Unsent":"Fehler nicht gesendet","Error: {{ errorMessage }}":"Fehler: {{ errorMessage }}",Flag:Flag$b,"Message Failed · Click to try again":"Nachricht fehlgeschlagen · Klicken Sie hier, um es erneut zu versuchen","Message Failed · Unauthorized":"Nachricht fehlgeschlagen · Nicht autorisiert","Message deleted":"Nachricht gelöscht","Message has been successfully flagged":"Nachricht wurde erfolgreich markiert","Message pinned":"Nachricht angeheftet",Mute:Mute$b,New:New$b,"New Messages!":"Neue Nachrichten!","No results found":"keine Ergebnisse gefunden","Nothing yet...":"Noch nichts...","Only visible to you":"Nur für Sie sichtbar","Open emoji picker":"Öffnen Sie den Emoji-Picker","People matching":"Passende Personen","Pick your emoji":"Wähle dein Emoji",Pin:Pin$b,"Pinned by":"Gepinnt von",Reply:Reply$b,"Reply to Message":"Auf Nachricht antworten",Search:Search$b,"Searching...":"Suchen...",Send:Send$b,"Send message request failed":"Nachrichtenanfrage senden fehlgeschlagen","Sending...":"Senden...","Slow Mode ON":"Langsamer Modus EIN","Start of a new thread":"Start eines neuen Threads","This message was deleted...":"Diese Nachricht wurde gelöscht...",Thread:Thread$c,"Type your message":"Geben Sie Ihre Nachricht ein",Unmute:Unmute$b,Unpin:Unpin$b,"Upload type: \"{{ type }}\" is not allowed":"Upload-Typ: \"{{ type }}\" ist nicht erlaubt","Wait until all attachments have uploaded":"Warten Sie, bis alle Anhänge hochgeladen wurden","You have no channels currently":"Sie haben derzeit keine Kanäle","You've reached the maximum number of files":"Sie haben die maximale Anzahl von Dateien erreicht",live:live$b,"this content could not be displayed":"Dieser Inhalt konnte nicht angezeigt werden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} und {{moreCount}} Mehr","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} und {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} und {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} Mehr","{{ memberCount }} members":"{{ memberCount }} Mitglieder","{{ replyCount }} replies":"{{ replyCount }} antworten","{{ user }} has been muted":"{{ user }} wurde stummgeschaltet","{{ user }} has been unmuted":"{{ user }} wurde nicht stummgeschaltet","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anhang..."};
6782
6980
 
6783
- var Cancel$a="Cancel";var Close$a="Close";var Delete$a="Delete";var Delivered$a="Delivered";var Flag$a="Flag";var Mute$a="Mute";var New$a="New";var Pin$a="Pin";var Reply$a="Reply";var Search$a="Search";var Send$a="Send";var Thread$b="Thread";var Unmute$a="Unmute";var Unpin$a="Unpin";var live$a="live";var enTranslations = {"1 reply":"1 reply","Attach files":"Attach files",Cancel:Cancel$a,"Channel Missing":"Channel Missing",Close:Close$a,"Close emoji picker":"Close emoji picker","Commands matching":"Commands matching","Connection failure, reconnecting now...":"Connection failure, reconnecting now...",Delete:Delete$a,Delivered:Delivered$a,"Edit Message":"Edit Message","Edit message request failed":"Edit message request failed","Emoji matching":"Emoji matching","Empty message...":"Empty message...","Error adding flag":"Error adding flag","Error connecting to chat, refresh the page to try again.":"Error connecting to chat, refresh the page to try again.","Error deleting message":"Error deleting message","Error muting a user ...":"Error muting a user ...","Error pinning message":"Error pinning message","Error removing message pin":"Error removing message pin","Error unmuting a user ...":"Error unmuting a user ...","Error uploading file":"Error uploading file","Error uploading image":"Error uploading image","Error · Unsent":"Error · Unsent","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$a,"Message Failed · Click to try again":"Message Failed · Click to try again","Message Failed · Unauthorized":"Message Failed · Unauthorized","Message deleted":"Message deleted","Message has been successfully flagged":"Message has been successfully flagged","Message pinned":"Message pinned",Mute:Mute$a,New:New$a,"New Messages!":"New Messages!","No results found":"No results found","Nothing yet...":"Nothing yet...","Only visible to you":"Only visible to you","Open emoji picker":"Open emoji picker","People matching":"People matching","Pick your emoji":"Pick your emoji",Pin:Pin$a,"Pinned by":"Pinned by",Reply:Reply$a,"Reply to Message":"Reply to Message",Search:Search$a,"Searching...":"Searching...",Send:Send$a,"Send message request failed":"Send message request failed","Sending...":"Sending...","Slow Mode ON":"Slow Mode ON","Start of a new thread":"Start of a new thread","This message was deleted...":"This message was deleted...",Thread:Thread$b,"Type your message":"Type your message",Unmute:Unmute$a,Unpin:Unpin$a,"Wait until all attachments have uploaded":"Wait until all attachments have uploaded","You have no channels currently":"You have no channels currently","You've reached the maximum number of files":"You've reached the maximum number of files",live:live$a,"this content could not be displayed":"this content could not be displayed","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} and {{ moreCount }} more","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, and {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} and {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} more","{{ memberCount }} members":"{{ memberCount }} members","{{ replyCount }} replies":"{{ replyCount }} replies","{{ user }} has been muted":"{{ user }} has been muted","{{ user }} has been unmuted":"{{ user }} has been unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Attachment..."};
6981
+ var Cancel$a="Cancel";var Close$a="Close";var Delete$a="Delete";var Delivered$a="Delivered";var Flag$a="Flag";var Mute$a="Mute";var New$a="New";var Pin$a="Pin";var Reply$a="Reply";var Search$a="Search";var Send$a="Send";var Thread$b="Thread";var Unmute$a="Unmute";var Unpin$a="Unpin";var live$a="live";var enTranslations = {"1 reply":"1 reply","Attach files":"Attach files",Cancel:Cancel$a,"Channel Missing":"Channel Missing",Close:Close$a,"Close emoji picker":"Close emoji picker","Commands matching":"Commands matching","Connection failure, reconnecting now...":"Connection failure, reconnecting now...",Delete:Delete$a,Delivered:Delivered$a,"Edit Message":"Edit Message","Edit message request failed":"Edit message request failed","Emoji matching":"Emoji matching","Empty message...":"Empty message...","Error adding flag":"Error adding flag","Error connecting to chat, refresh the page to try again.":"Error connecting to chat, refresh the page to try again.","Error deleting message":"Error deleting message","Error muting a user ...":"Error muting a user ...","Error pinning message":"Error pinning message","Error removing message pin":"Error removing message pin","Error unmuting a user ...":"Error unmuting a user ...","Error uploading file":"Error uploading file","Error uploading image":"Error uploading image","Error · Unsent":"Error · Unsent","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$a,"Message Failed · Click to try again":"Message Failed · Click to try again","Message Failed · Unauthorized":"Message Failed · Unauthorized","Message deleted":"Message deleted","Message has been successfully flagged":"Message has been successfully flagged","Message pinned":"Message pinned",Mute:Mute$a,New:New$a,"New Messages!":"New Messages!","No results found":"No results found","Nothing yet...":"Nothing yet...","Only visible to you":"Only visible to you","Open emoji picker":"Open emoji picker","People matching":"People matching","Pick your emoji":"Pick your emoji",Pin:Pin$a,"Pinned by":"Pinned by",Reply:Reply$a,"Reply to Message":"Reply to Message",Search:Search$a,"Searching...":"Searching...",Send:Send$a,"Send message request failed":"Send message request failed","Sending...":"Sending...","Slow Mode ON":"Slow Mode ON","Start of a new thread":"Start of a new thread","This message was deleted...":"This message was deleted...",Thread:Thread$b,"Type your message":"Type your message",Unmute:Unmute$a,Unpin:Unpin$a,"Upload type: \"{{ type }}\" is not allowed":"Upload type: \"{{ type }}\" is not allowed","Wait until all attachments have uploaded":"Wait until all attachments have uploaded","You have no channels currently":"You have no channels currently","You've reached the maximum number of files":"You've reached the maximum number of files",live:live$a,"this content could not be displayed":"this content could not be displayed","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} and {{ moreCount }} more","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, and {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} and {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} more","{{ memberCount }} members":"{{ memberCount }} members","{{ replyCount }} replies":"{{ replyCount }} replies","{{ user }} has been muted":"{{ user }} has been muted","{{ user }} has been unmuted":"{{ user }} has been unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Attachment..."};
6784
6982
 
6785
- var Cancel$9="Cancelar";var Close$9="Cerca";var Delete$9="Borrar";var Delivered$9="Entregado";var Flag$9="Bandera";var Mute$9="Mudo";var New$9="Nuevo";var Pin$9="Alfiler";var Reply$9="Respuesta";var Search$9="Buscar";var Send$9="Enviar";var Thread$a="Hilo";var Unmute$9="Activar sonido";var Unpin$9="Desprender";var live$9="En Vivo";var esTranslations = {"1 reply":"1 respuesta","Attach files":"Adjuntar archivos",Cancel:Cancel$9,"Channel Missing":"Falta canal",Close:Close$9,"Close emoji picker":"Cerrar el selector de emojis","Commands matching":"Coincidencia de comandos","Connection failure, reconnecting now...":"Fallo de conexión, reconectando ahora ...",Delete:Delete$9,Delivered:Delivered$9,"Edit Message":"Editar mensaje","Edit message request failed":"Error al editar la solicitud de mensaje","Emoji matching":"Coincidencia de emoji","Empty message...":"Mensaje vacío ...","Error adding flag":"Error al agregar la bandera","Error connecting to chat, refresh the page to try again.":"Error al conectarse al chat, actualice la página para volver a intentarlo.","Error deleting message":"Error al eliminar el mensaje","Error muting a user ...":"Error al silenciar a un usuario ...","Error pinning message":"Mensaje de error al fijar","Error removing message pin":"Error al quitar el pin del mensaje","Error unmuting a user ...":"Error al activar el silencio de un usuario ...","Error uploading file":"Error al cargar el archivo","Error uploading image":"Error subiendo imagen","Error · Unsent":"Error · No enviado","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$9,"Message Failed · Click to try again":"Mensaje fallido · Haga clic para volver a intentarlo","Message Failed · Unauthorized":"Mensaje fallido · No autorizado","Message deleted":"Mensaje borrado","Message has been successfully flagged":"El mensaje se marcó correctamente","Message pinned":"Mensaje fijado",Mute:Mute$9,New:New$9,"New Messages!":"¡Nuevos mensajes!","No results found":"No se han encontrado resultados","Nothing yet...":"Nada aún...","Only visible to you":"Solo visible para ti","Open emoji picker":"Selector de emoji abierto","People matching":"Personas que coinciden","Pick your emoji":"Elige tu emoji",Pin:Pin$9,"Pinned by":"Fijado por",Reply:Reply$9,"Reply to Message":"Responder al mensaje",Search:Search$9,"Searching...":"Buscando...",Send:Send$9,"Send message request failed":"Error al enviar la solicitud de mensaje","Sending...":"Enviando...","Slow Mode ON":"Modo lento activado","Start of a new thread":"Inicio de un nuevo hilo","This message was deleted...":"Este mensaje fue eliminado ...",Thread:Thread$a,"Type your message":"Escribe tu mensaje",Unmute:Unmute$9,Unpin:Unpin$9,"Wait until all attachments have uploaded":"Espere hasta que se hayan cargado todos los archivos adjuntos","You have no channels currently":"Actualmente no tienes canales","You've reached the maximum number of files":"Has alcanzado el número máximo de archivos",live:live$9,"this content could not be displayed":"este contenido no se pudo mostrar","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} y {{ moreCount }} más","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} y {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} y {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} más","{{ memberCount }} members":"{{ memberCount }} miembros","{{ replyCount }} replies":"{{ replyCount }} respuestas","{{ user }} has been muted":"{{ user }} ha sido silenciado","{{ user }} has been unmuted":"{{ user }} se ha desactivado","{{ watcherCount }} online":"{{ watcherCount }} en línea","🏙 Attachment...":"🏙 Adjunto..."};
6983
+ var Cancel$9="Cancelar";var Close$9="Cerca";var Delete$9="Borrar";var Delivered$9="Entregado";var Flag$9="Bandera";var Mute$9="Mudo";var New$9="Nuevo";var Pin$9="Alfiler";var Reply$9="Respuesta";var Search$9="Buscar";var Send$9="Enviar";var Thread$a="Hilo";var Unmute$9="Activar sonido";var Unpin$9="Desprender";var live$9="En Vivo";var esTranslations = {"1 reply":"1 respuesta","Attach files":"Adjuntar archivos",Cancel:Cancel$9,"Channel Missing":"Falta canal",Close:Close$9,"Close emoji picker":"Cerrar el selector de emojis","Commands matching":"Coincidencia de comandos","Connection failure, reconnecting now...":"Fallo de conexión, reconectando ahora ...",Delete:Delete$9,Delivered:Delivered$9,"Edit Message":"Editar mensaje","Edit message request failed":"Error al editar la solicitud de mensaje","Emoji matching":"Coincidencia de emoji","Empty message...":"Mensaje vacío ...","Error adding flag":"Error al agregar la bandera","Error connecting to chat, refresh the page to try again.":"Error al conectarse al chat, actualice la página para volver a intentarlo.","Error deleting message":"Error al eliminar el mensaje","Error muting a user ...":"Error al silenciar a un usuario ...","Error pinning message":"Mensaje de error al fijar","Error removing message pin":"Error al quitar el pin del mensaje","Error unmuting a user ...":"Error al activar el silencio de un usuario ...","Error uploading file":"Error al cargar el archivo","Error uploading image":"Error subiendo imagen","Error · Unsent":"Error · No enviado","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$9,"Message Failed · Click to try again":"Mensaje fallido · Haga clic para volver a intentarlo","Message Failed · Unauthorized":"Mensaje fallido · No autorizado","Message deleted":"Mensaje borrado","Message has been successfully flagged":"El mensaje se marcó correctamente","Message pinned":"Mensaje fijado",Mute:Mute$9,New:New$9,"New Messages!":"¡Nuevos mensajes!","No results found":"No se han encontrado resultados","Nothing yet...":"Nada aún...","Only visible to you":"Solo visible para ti","Open emoji picker":"Selector de emoji abierto","People matching":"Personas que coinciden","Pick your emoji":"Elige tu emoji",Pin:Pin$9,"Pinned by":"Fijado por",Reply:Reply$9,"Reply to Message":"Responder al mensaje",Search:Search$9,"Searching...":"Buscando...",Send:Send$9,"Send message request failed":"Error al enviar la solicitud de mensaje","Sending...":"Enviando...","Slow Mode ON":"Modo lento activado","Start of a new thread":"Inicio de un nuevo hilo","This message was deleted...":"Este mensaje fue eliminado ...",Thread:Thread$a,"Type your message":"Escribe tu mensaje",Unmute:Unmute$9,Unpin:Unpin$9,"Upload type: \"{{ type }}\" is not allowed":"Tipo de carga: \"{{ type }}\" no está permitido","Wait until all attachments have uploaded":"Espere hasta que se hayan cargado todos los archivos adjuntos","You have no channels currently":"Actualmente no tienes canales","You've reached the maximum number of files":"Has alcanzado el número máximo de archivos",live:live$9,"this content could not be displayed":"este contenido no se pudo mostrar","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} y {{ moreCount }} más","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} y {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} y {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} más","{{ memberCount }} members":"{{ memberCount }} miembros","{{ replyCount }} replies":"{{ replyCount }} respuestas","{{ user }} has been muted":"{{ user }} ha sido silenciado","{{ user }} has been unmuted":"{{ user }} se ha desactivado","{{ watcherCount }} online":"{{ watcherCount }} en línea","🏙 Attachment...":"🏙 Adjunto..."};
6786
6984
 
6787
- var Cancel$8="Annuler";var Close$8="Fermer";var Delete$8="Supprimer";var Delivered$8="Publié";var Flag$8="Signaler";var Mute$8="Muet";var New$8="Nouveaux";var Pin$8="Épingle";var Reply$8="Réponse";var Search$8="Rechercher";var Send$8="Envoyer";var Thread$9="Fil de discussion";var Unmute$8="Désactiver muet";var Unpin$8="Détacher";var live$8="en direct";var frTranslations = {"1 reply":"1 réponse","Attach files":"Pièces jointes",Cancel:Cancel$8,"Channel Missing":"Canal Manquant",Close:Close$8,"Close emoji picker":"Fermer le sélecteur d'emojis","Commands matching":"Correspondance des commandes","Connection failure, reconnecting now...":"Échec de la connexion, reconnexion en cours...",Delete:Delete$8,Delivered:Delivered$8,"Edit Message":"Éditer un message","Edit message request failed":"Échec de la demande de modification du message","Emoji matching":"Correspondance emoji","Empty message...":"Message vide...","Error adding flag":"Erreur lors de l'ajout du drapeau","Error connecting to chat, refresh the page to try again.":"Erreur de connexion au chat, rafraîchissez la page pour réessayer.","Error deleting message":"Erreur lors de la suppression du message","Error muting a user ...":"Erreur de mise en sourdine d'un utilisateur ...","Error pinning message":"Erreur d'épinglage du message","Error removing message pin":"Erreur lors de la suppression du code PIN du message","Error unmuting a user ...":"Erreur de désactivation de la fonction sourdine pour un utilisateur ...","Error uploading file":"Erreur lors du téléchargement du fichier","Error uploading image":"Erreur lors de l'envoi de l'image","Error · Unsent":"Erreur - Non envoyé","Error: {{ errorMessage }}":"Erreur : {{ errorMessage }}",Flag:Flag$8,"Message Failed · Click to try again":"Échec de l'envoi du message - Cliquez pour réessayer","Message Failed · Unauthorized":"Échec de l'envoi du message - Non autorisé","Message deleted":"Message supprimé","Message has been successfully flagged":"Le message a été signalé avec succès","Message pinned":"Message épinglé",Mute:Mute$8,New:New$8,"New Messages!":"Nouveaux Messages!","No results found":"Aucun résultat trouvé","Nothing yet...":"Aucun message...","Only visible to you":"Visible uniquement pour vous","Open emoji picker":"Ouvrez le sélecteur d'emoji","People matching":"Correspondance de personnes","Pick your emoji":"Choisissez votre emoji",Pin:Pin$8,"Pinned by":"Épinglé par",Reply:Reply$8,"Reply to Message":"Répondre au message",Search:Search$8,"Searching...":"Recherche...",Send:Send$8,"Send message request failed":"Échec de la demande d'envoi de message","Sending...":"Envoi en cours...","Slow Mode ON":"Mode lent activé","Start of a new thread":"Début d'un nouveau fil de discussion","This message was deleted...":"Ce message a été supprimé...",Thread:Thread$9,"Type your message":"Saisissez votre message",Unmute:Unmute$8,Unpin:Unpin$8,"Wait until all attachments have uploaded":"Attendez que toutes les pièces jointes soient téléchargées","You have no channels currently":"Vous n'avez actuellement aucun canal","You've reached the maximum number of files":"Vous avez atteint le nombre maximum de fichiers",live:live$8,"this content could not be displayed":"ce contenu n'a pu être affiché","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} et {{ moreCount }} autres","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} et {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} et {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} supplémentaires","{{ memberCount }} members":"{{ memberCount }} membres","{{ replyCount }} replies":"{{ replyCount }} réponses","{{ user }} has been muted":"{{ user }} a été mis en sourdine","{{ user }} has been unmuted":"{{ user }} n'est plus en sourdine","{{ watcherCount }} online":"{{ watcherCount }} en ligne","🏙 Attachment...":"🏙 Pièce jointe..."};
6985
+ var Cancel$8="Annuler";var Close$8="Fermer";var Delete$8="Supprimer";var Delivered$8="Publié";var Flag$8="Signaler";var Mute$8="Muet";var New$8="Nouveaux";var Pin$8="Épingle";var Reply$8="Réponse";var Search$8="Rechercher";var Send$8="Envoyer";var Thread$9="Fil de discussion";var Unmute$8="Désactiver muet";var Unpin$8="Détacher";var live$8="en direct";var frTranslations = {"1 reply":"1 réponse","Attach files":"Pièces jointes",Cancel:Cancel$8,"Channel Missing":"Canal Manquant",Close:Close$8,"Close emoji picker":"Fermer le sélecteur d'emojis","Commands matching":"Correspondance des commandes","Connection failure, reconnecting now...":"Échec de la connexion, reconnexion en cours...",Delete:Delete$8,Delivered:Delivered$8,"Edit Message":"Éditer un message","Edit message request failed":"Échec de la demande de modification du message","Emoji matching":"Correspondance emoji","Empty message...":"Message vide...","Error adding flag":"Erreur lors de l'ajout du drapeau","Error connecting to chat, refresh the page to try again.":"Erreur de connexion au chat, rafraîchissez la page pour réessayer.","Error deleting message":"Erreur lors de la suppression du message","Error muting a user ...":"Erreur de mise en sourdine d'un utilisateur ...","Error pinning message":"Erreur d'épinglage du message","Error removing message pin":"Erreur lors de la suppression du code PIN du message","Error unmuting a user ...":"Erreur de désactivation de la fonction sourdine pour un utilisateur ...","Error uploading file":"Erreur lors du téléchargement du fichier","Error uploading image":"Erreur lors de l'envoi de l'image","Error · Unsent":"Erreur - Non envoyé","Error: {{ errorMessage }}":"Erreur : {{ errorMessage }}",Flag:Flag$8,"Message Failed · Click to try again":"Échec de l'envoi du message - Cliquez pour réessayer","Message Failed · Unauthorized":"Échec de l'envoi du message - Non autorisé","Message deleted":"Message supprimé","Message has been successfully flagged":"Le message a été signalé avec succès","Message pinned":"Message épinglé",Mute:Mute$8,New:New$8,"New Messages!":"Nouveaux Messages!","No results found":"Aucun résultat trouvé","Nothing yet...":"Aucun message...","Only visible to you":"Visible uniquement pour vous","Open emoji picker":"Ouvrez le sélecteur d'emoji","People matching":"Correspondance de personnes","Pick your emoji":"Choisissez votre emoji",Pin:Pin$8,"Pinned by":"Épinglé par",Reply:Reply$8,"Reply to Message":"Répondre au message",Search:Search$8,"Searching...":"Recherche...",Send:Send$8,"Send message request failed":"Échec de la demande d'envoi de message","Sending...":"Envoi en cours...","Slow Mode ON":"Mode lent activé","Start of a new thread":"Début d'un nouveau fil de discussion","This message was deleted...":"Ce message a été supprimé...",Thread:Thread$9,"Type your message":"Saisissez votre message",Unmute:Unmute$8,Unpin:Unpin$8,"Upload type: \"{{ type }}\" is not allowed":"Le type de téléchargement: \"{{ type }}\" n'est pas autorisé","Wait until all attachments have uploaded":"Attendez que toutes les pièces jointes soient téléchargées","You have no channels currently":"Vous n'avez actuellement aucun canal","You've reached the maximum number of files":"Vous avez atteint le nombre maximum de fichiers",live:live$8,"this content could not be displayed":"ce contenu n'a pu être affiché","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} et {{ moreCount }} autres","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} et {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} et {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} supplémentaires","{{ memberCount }} members":"{{ memberCount }} membres","{{ replyCount }} replies":"{{ replyCount }} réponses","{{ user }} has been muted":"{{ user }} a été mis en sourdine","{{ user }} has been unmuted":"{{ user }} n'est plus en sourdine","{{ watcherCount }} online":"{{ watcherCount }} en ligne","🏙 Attachment...":"🏙 Pièce jointe..."};
6788
6986
 
6789
- var Cancel$7="रद्द करें";var Close$7="बंद करे";var Delete$7="डिलीट";var Delivered$7="पहुंच गया";var Flag$7="फ्लैग करे";var Mute$7="म्यूट करे";var New$7="नए";var Pin$7="पिन";var Reply$7="जवाब दे दो";var Search$7="खोज";var Send$7="भेजे";var Thread$8="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var hiTranslations = {"1 reply":"1 रिप्लाई","Attach files":"फाइल्स अटैच करे",Cancel:Cancel$7,"Channel Missing":"चैनल उपलब्ध नहीं है",Close:Close$7,"Close emoji picker":"इमोजी पिकर बंद करें","Commands matching":"मेल खाती है","Connection failure, reconnecting now...":"कनेक्शन विफल रहा, अब पुनः कनेक्ट हो रहा है ...",Delete:Delete$7,Delivered:Delivered$7,"Edit Message":"मैसेज में बदलाव करे","Edit message request failed":"संदेश संपादित करने का अनुरोध विफल रहा","Emoji matching":"इमोजी मिलान","Empty message...":"खाली संदेश ...","Error adding flag":"ध्वज जोड़ने में त्रुटि","Error connecting to chat, refresh the page to try again.":"चैट से कनेक्ट करने में त्रुटि, पेज को रिफ्रेश करें","Error deleting message":"संदेश हटाने में त्रुटि","Error muting a user ...":"यूजर को म्यूट करने का प्रयास फेल हुआ","Error pinning message":"संदेश को पिन करने में त्रुटि","Error removing message pin":"संदेश पिन निकालने में त्रुटि","Error unmuting a user ...":"यूजर को अनम्यूट करने का प्रयास फेल हुआ","Error uploading file":"फ़ाइल अपलोड करने में त्रुटि","Error uploading image":"छवि अपलोड करने में त्रुटि","Error · Unsent":"फेल","Error: {{ errorMessage }}":"फेल: {{ errorMessage }}",Flag:Flag$7,"Message Failed · Click to try again":"मैसेज फ़ैल - पुनः कोशिश करें","Message Failed · Unauthorized":"मैसेज फ़ैल - अनधिकृत","Message deleted":"मैसेज हटा दिया गया","Message has been successfully flagged":"मैसेज को फ्लैग कर दिया गया है","Message pinned":"संदेश पिन किया गया",Mute:Mute$7,New:New$7,"New Messages!":"नए मैसेज!","No results found":"कोई परिणाम नहीं मिला","Nothing yet...":"कोई मैसेज नहीं है","Only visible to you":"सिर्फ आपको दिखाई दे रहा है","Open emoji picker":"इमोजी पिकर खोलिये","People matching":"मेल खाते लोग","Pick your emoji":"इमोजी चूस करे",Pin:Pin$7,"Pinned by":"द्वारा पिन किया गया",Reply:Reply$7,"Reply to Message":"संदेश का जवाब दें",Search:Search$7,"Searching...":"खोज कर...",Send:Send$7,"Send message request failed":"संदेश भेजने का अनुरोध विफल रहा","Sending...":"भेजा जा रहा है","Slow Mode ON":"स्लो मोड ऑन","Start of a new thread":"एक नए थ्रेड की शुरुआत","This message was deleted...":"मैसेज हटा दिया गया",Thread:Thread$8,"Type your message":"अपना मैसेज लिखे",Unmute:Unmute$7,Unpin:Unpin$7,"Wait until all attachments have uploaded":"सभी अटैचमेंट अपलोड होने तक प्रतीक्षा करें","You have no channels currently":"आपके पास कोई चैनल नहीं है","You've reached the maximum number of files":"आप अधिकतम फ़ाइलों तक पहुँच गए हैं",live:live$7,"this content could not be displayed":"यह कॉन्टेंट लोड नहीं हो पाया","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} और {{ moreCount }} और","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} और {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} और {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} और","{{ memberCount }} members":"{{ memberCount }} मेंबर्स","{{ replyCount }} replies":"{{ replyCount }} रिप्लाई","{{ user }} has been muted":"{{ user }} को म्यूट कर दिया गया है","{{ user }} has been unmuted":"{{ user }} को अनम्यूट कर दिया गया है","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 अटैचमेंट"};
6987
+ var Cancel$7="रद्द करें";var Close$7="बंद करे";var Delete$7="डिलीट";var Delivered$7="पहुंच गया";var Flag$7="फ्लैग करे";var Mute$7="म्यूट करे";var New$7="नए";var Pin$7="पिन";var Reply$7="जवाब दे दो";var Search$7="खोज";var Send$7="भेजे";var Thread$8="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var hiTranslations = {"1 reply":"1 रिप्लाई","Attach files":"फाइल्स अटैच करे",Cancel:Cancel$7,"Channel Missing":"चैनल उपलब्ध नहीं है",Close:Close$7,"Close emoji picker":"इमोजी पिकर बंद करें","Commands matching":"मेल खाती है","Connection failure, reconnecting now...":"कनेक्शन विफल रहा, अब पुनः कनेक्ट हो रहा है ...",Delete:Delete$7,Delivered:Delivered$7,"Edit Message":"मैसेज में बदलाव करे","Edit message request failed":"संदेश संपादित करने का अनुरोध विफल रहा","Emoji matching":"इमोजी मिलान","Empty message...":"खाली संदेश ...","Error adding flag":"ध्वज जोड़ने में त्रुटि","Error connecting to chat, refresh the page to try again.":"चैट से कनेक्ट करने में त्रुटि, पेज को रिफ्रेश करें","Error deleting message":"संदेश हटाने में त्रुटि","Error muting a user ...":"यूजर को म्यूट करने का प्रयास फेल हुआ","Error pinning message":"संदेश को पिन करने में त्रुटि","Error removing message pin":"संदेश पिन निकालने में त्रुटि","Error unmuting a user ...":"यूजर को अनम्यूट करने का प्रयास फेल हुआ","Error uploading file":"फ़ाइल अपलोड करने में त्रुटि","Error uploading image":"छवि अपलोड करने में त्रुटि","Error · Unsent":"फेल","Error: {{ errorMessage }}":"फेल: {{ errorMessage }}",Flag:Flag$7,"Message Failed · Click to try again":"मैसेज फ़ैल - पुनः कोशिश करें","Message Failed · Unauthorized":"मैसेज फ़ैल - अनधिकृत","Message deleted":"मैसेज हटा दिया गया","Message has been successfully flagged":"मैसेज को फ्लैग कर दिया गया है","Message pinned":"संदेश पिन किया गया",Mute:Mute$7,New:New$7,"New Messages!":"नए मैसेज!","No results found":"कोई परिणाम नहीं मिला","Nothing yet...":"कोई मैसेज नहीं है","Only visible to you":"सिर्फ आपको दिखाई दे रहा है","Open emoji picker":"इमोजी पिकर खोलिये","People matching":"मेल खाते लोग","Pick your emoji":"इमोजी चूस करे",Pin:Pin$7,"Pinned by":"द्वारा पिन किया गया",Reply:Reply$7,"Reply to Message":"संदेश का जवाब दें",Search:Search$7,"Searching...":"खोज कर...",Send:Send$7,"Send message request failed":"संदेश भेजने का अनुरोध विफल रहा","Sending...":"भेजा जा रहा है","Slow Mode ON":"स्लो मोड ऑन","Start of a new thread":"एक नए थ्रेड की शुरुआत","This message was deleted...":"मैसेज हटा दिया गया",Thread:Thread$8,"Type your message":"अपना मैसेज लिखे",Unmute:Unmute$7,Unpin:Unpin$7,"Upload type: \"{{ type }}\" is not allowed":"अपलोड प्रकार: \"{{ type }}\" की अनुमति नहीं है","Wait until all attachments have uploaded":"सभी अटैचमेंट अपलोड होने तक प्रतीक्षा करें","You have no channels currently":"आपके पास कोई चैनल नहीं है","You've reached the maximum number of files":"आप अधिकतम फ़ाइलों तक पहुँच गए हैं",live:live$7,"this content could not be displayed":"यह कॉन्टेंट लोड नहीं हो पाया","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} और {{ moreCount }} और","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} और {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} और {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} और","{{ memberCount }} members":"{{ memberCount }} मेंबर्स","{{ replyCount }} replies":"{{ replyCount }} रिप्लाई","{{ user }} has been muted":"{{ user }} को म्यूट कर दिया गया है","{{ user }} has been unmuted":"{{ user }} को अनम्यूट कर दिया गया है","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 अटैचमेंट"};
6790
6988
 
6791
- var Cancel$6="Annulla";var Close$6="Chiudi";var Delete$6="Cancella";var Delivered$6="Consegnato";var Flag$6="Segnala";var Mute$6="Silenzia";var New$6="Nuovo";var Pin$6="Pin";var Reply$6="Rispondere";var Search$6="Ricerca";var Send$6="Invia";var Thread$7="Thread";var Unmute$6="Riattiva le notifiche";var Unpin$6="Sblocca";var live$6="live";var itTranslations = {"1 reply":"Una risposta","Attach files":"Allega file",Cancel:Cancel$6,"Channel Missing":"Il canale non esiste",Close:Close$6,"Close emoji picker":"Chiudi il selettore di emoji","Commands matching":"Comandi corrispondenti","Connection failure, reconnecting now...":"Connessione fallitta, riconnessione in corso...",Delete:Delete$6,Delivered:Delivered$6,"Edit Message":"Modifica messaggio","Edit message request failed":"Richiesta di modifica del messaggio non riuscita","Emoji matching":"Abbinamento emoji","Empty message...":"Message vuoto...","Error adding flag":"Errore durante l'aggiunta del flag","Error connecting to chat, refresh the page to try again.":"Errore di connessione alla chat, aggiorna la pagina per riprovare","Error deleting message":"Errore durante l'eliminazione del messaggio","Error muting a user ...":"Errore silenziando un utente ...","Error pinning message":"Errore durante il blocco del messaggio","Error removing message pin":"Errore durante la rimozione del PIN del messaggio","Error unmuting a user ...":"Errore riattivando le notifiche per l'utente ...","Error uploading file":"Errore durante il caricamento del file","Error uploading image":"Errore durante il caricamento dell'immagine","Error · Unsent":"Errore · Non inviato","Error: {{ errorMessage }}":"Errore: {{ errorMessage }}",Flag:Flag$6,"Message Failed · Click to try again":"Invio messaggio fallito · Clicca per riprovare","Message Failed · Unauthorized":"Invio messaggio fallito · Non autorizzato","Message deleted":"Messaggio cancellato","Message has been successfully flagged":"Il messaggio é stato segnalato con successo","Message pinned":"Messaggio bloccato",Mute:Mute$6,New:New$6,"New Messages!":"Nuovo messaggio!","No results found":"Nessun risultato trovato","Nothing yet...":"Ancora niente...","Only visible to you":"Visibile soltanto da te","Open emoji picker":"Apri il selettore dellle emoji","People matching":"Persone che corrispondono","Pick your emoji":"Scegli la tua emoji",Pin:Pin$6,"Pinned by":"Appuntato da",Reply:Reply$6,"Reply to Message":"Rispondi al messaggio",Search:Search$6,"Searching...":"Ricerca in corso ...",Send:Send$6,"Send message request failed":"Invia messaggio di richiesta non riuscito","Sending...":"Invio in corso...","Slow Mode ON":"Modalità lenta attivata","Start of a new thread":"Inizia un nuovo thread","This message was deleted...":"Questo messaggio é stato cancellato",Thread:Thread$7,"Type your message":"Scrivi il tuo messaggio",Unmute:Unmute$6,Unpin:Unpin$6,"Wait until all attachments have uploaded":"Attendi il caricamento di tutti gli allegati","You have no channels currently":"Al momento non sono presenti canali","You've reached the maximum number of files":"Hai raggiunto il numero massimo di file",live:live$6,"this content could not be displayed":"questo contenuto non puó essere mostrato","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e altri {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"+ {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} membri","{{ replyCount }} replies":"{{ replyCount }} risposte","{{ user }} has been muted":"{{ user }} é stato silenziato","{{ user }} has been unmuted":"Notifiche riattivate per {{ user }}","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Allegato..."};
6989
+ var Cancel$6="Annulla";var Close$6="Chiudi";var Delete$6="Cancella";var Delivered$6="Consegnato";var Flag$6="Segnala";var Mute$6="Silenzia";var New$6="Nuovo";var Pin$6="Pin";var Reply$6="Rispondere";var Search$6="Ricerca";var Send$6="Invia";var Thread$7="Thread";var Unmute$6="Riattiva le notifiche";var Unpin$6="Sblocca";var live$6="live";var itTranslations = {"1 reply":"Una risposta","Attach files":"Allega file",Cancel:Cancel$6,"Channel Missing":"Il canale non esiste",Close:Close$6,"Close emoji picker":"Chiudi il selettore di emoji","Commands matching":"Comandi corrispondenti","Connection failure, reconnecting now...":"Connessione fallitta, riconnessione in corso...",Delete:Delete$6,Delivered:Delivered$6,"Edit Message":"Modifica messaggio","Edit message request failed":"Richiesta di modifica del messaggio non riuscita","Emoji matching":"Abbinamento emoji","Empty message...":"Message vuoto...","Error adding flag":"Errore durante l'aggiunta del flag","Error connecting to chat, refresh the page to try again.":"Errore di connessione alla chat, aggiorna la pagina per riprovare","Error deleting message":"Errore durante l'eliminazione del messaggio","Error muting a user ...":"Errore silenziando un utente ...","Error pinning message":"Errore durante il blocco del messaggio","Error removing message pin":"Errore durante la rimozione del PIN del messaggio","Error unmuting a user ...":"Errore riattivando le notifiche per l'utente ...","Error uploading file":"Errore durante il caricamento del file","Error uploading image":"Errore durante il caricamento dell'immagine","Error · Unsent":"Errore · Non inviato","Error: {{ errorMessage }}":"Errore: {{ errorMessage }}",Flag:Flag$6,"Message Failed · Click to try again":"Invio messaggio fallito · Clicca per riprovare","Message Failed · Unauthorized":"Invio messaggio fallito · Non autorizzato","Message deleted":"Messaggio cancellato","Message has been successfully flagged":"Il messaggio é stato segnalato con successo","Message pinned":"Messaggio bloccato",Mute:Mute$6,New:New$6,"New Messages!":"Nuovo messaggio!","No results found":"Nessun risultato trovato","Nothing yet...":"Ancora niente...","Only visible to you":"Visibile soltanto da te","Open emoji picker":"Apri il selettore dellle emoji","People matching":"Persone che corrispondono","Pick your emoji":"Scegli la tua emoji",Pin:Pin$6,"Pinned by":"Appuntato da",Reply:Reply$6,"Reply to Message":"Rispondi al messaggio",Search:Search$6,"Searching...":"Ricerca in corso ...",Send:Send$6,"Send message request failed":"Invia messaggio di richiesta non riuscito","Sending...":"Invio in corso...","Slow Mode ON":"Modalità lenta attivata","Start of a new thread":"Inizia un nuovo thread","This message was deleted...":"Questo messaggio é stato cancellato",Thread:Thread$7,"Type your message":"Scrivi il tuo messaggio",Unmute:Unmute$6,Unpin:Unpin$6,"Upload type: \"{{ type }}\" is not allowed":"Tipo di caricamento: \"{{ type }}\" non è consentito","Wait until all attachments have uploaded":"Attendi il caricamento di tutti gli allegati","You have no channels currently":"Al momento non sono presenti canali","You've reached the maximum number of files":"Hai raggiunto il numero massimo di file",live:live$6,"this content could not be displayed":"questo contenuto non puó essere mostrato","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e altri {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"+ {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} membri","{{ replyCount }} replies":"{{ replyCount }} risposte","{{ user }} has been muted":"{{ user }} é stato silenziato","{{ user }} has been unmuted":"Notifiche riattivate per {{ user }}","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Allegato..."};
6792
6990
 
6793
- var Cancel$5="キャンセル";var Close$5="閉める";var Delete$5="消去";var Delivered$5="配信しました";var Flag$5="フラグ";var Mute$5="無音";var New$5="新しい";var Pin$5="ピン";var Reply$5="返事";var Search$5="探す";var Send$5="送信";var Thread$6="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var jaTranslations = {"1 reply":"1件の返信","Attach files":"ファイルを添付する",Cancel:Cancel$5,"Channel Missing":"チャネルがありません",Close:Close$5,"Close emoji picker":"絵文字ピッカーを閉める","Commands matching":"一致するコマンド","Connection failure, reconnecting now...":"接続が失敗しました。再接続中...",Delete:Delete$5,Delivered:Delivered$5,"Edit Message":"メッセージを編集","Edit message request failed":"メッセージの編集要求が失敗しました","Emoji matching":"絵文字マッチング","Empty message...":"空のメッセージ...","Error adding flag":"フラグを追加のエラーが発生しました","Error connecting to chat, refresh the page to try again.":"チャットへの接続ができませんでした。ページを更新してください。","Error deleting message":"メッセージを削除するエラーが発生しました","Error muting a user ...":"ユーザーを無音するエラーが発生しました...","Error pinning message":"メッセージをピンのエラーが発生しました","Error removing message pin":"メッセージのピンを削除のエラーが発生しました","Error unmuting a user ...":"ユーザーの無音解除のエラーが発生しました...","Error uploading file":"ファイルをアップロードのエラーが発生しました","Error uploading image":"画像をアップロードのエラーが発生しました","Error · Unsent":"エラー・未送信","Error: {{ errorMessage }}":"エラー: {{ errorMessage }}",Flag:Flag$5,"Message Failed · Click to try again":"メッセージが失敗しました · クリックして再試行してください","Message Failed · Unauthorized":"メッセージが失敗しました · 許可されていません","Message deleted":"メッセージが削除されました","Message has been successfully flagged":"メッセージに正常にフラグが付けられました","Message pinned":"メッセージにピンが付けられました",Mute:Mute$5,New:New$5,"New Messages!":"新しいメッセージ!","No results found":"結果が見つかりません","Nothing yet...":"まだ何もありません...","Only visible to you":"あなただけに見える","Open emoji picker":"絵文字ピッカーを開く","People matching":"一致する人","Pick your emoji":"絵文字を選んでください",Pin:Pin$5,"Pinned by":"ピンした方",Reply:Reply$5,"Reply to Message":"メッセージに返信",Search:Search$5,"Searching...":"検索中...",Send:Send$5,"Send message request failed":"メッセージ送信リクエストが失敗しました","Sending...":"送信中...","Slow Mode ON":"スローモードオン","Start of a new thread":"新しいスレッドの開始","This message was deleted...":"このメッセージは削除されました...",Thread:Thread$6,"Type your message":"メッセージを入力してください",Unmute:Unmute$5,Unpin:Unpin$5,"Wait until all attachments have uploaded":"すべての添付ファイルがアップロードされるまでお待ちください","You have no channels currently":"現在チャンネルはありません","You've reached the maximum number of files":"ファイルの最大数に達しました",live:live$5,"this content could not be displayed":"このコンテンツは表示できませんでした","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} と {{ moreCount }} 他人","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} と {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} と {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} イメージ","{{ memberCount }} members":"{{ memberCount }} メンバー","{{ replyCount }} replies":"{{ replyCount }} 返信","{{ user }} has been muted":"{{ user }} 無音されています","{{ user }} has been unmuted":"{{ user }} 無音されていません","{{ watcherCount }} online":"{{ watcherCount }} オンライン","🏙 Attachment...":"🏙 アタッチメント..."};
6991
+ var Cancel$5="キャンセル";var Close$5="閉める";var Delete$5="消去";var Delivered$5="配信しました";var Flag$5="フラグ";var Mute$5="無音";var New$5="新しい";var Pin$5="ピン";var Reply$5="返事";var Search$5="探す";var Send$5="送信";var Thread$6="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var jaTranslations = {"1 reply":"1件の返信","Attach files":"ファイルを添付する",Cancel:Cancel$5,"Channel Missing":"チャネルがありません",Close:Close$5,"Close emoji picker":"絵文字ピッカーを閉める","Commands matching":"一致するコマンド","Connection failure, reconnecting now...":"接続が失敗しました。再接続中...",Delete:Delete$5,Delivered:Delivered$5,"Edit Message":"メッセージを編集","Edit message request failed":"メッセージの編集要求が失敗しました","Emoji matching":"絵文字マッチング","Empty message...":"空のメッセージ...","Error adding flag":"フラグを追加のエラーが発生しました","Error connecting to chat, refresh the page to try again.":"チャットへの接続ができませんでした。ページを更新してください。","Error deleting message":"メッセージを削除するエラーが発生しました","Error muting a user ...":"ユーザーを無音するエラーが発生しました...","Error pinning message":"メッセージをピンのエラーが発生しました","Error removing message pin":"メッセージのピンを削除のエラーが発生しました","Error unmuting a user ...":"ユーザーの無音解除のエラーが発生しました...","Error uploading file":"ファイルをアップロードのエラーが発生しました","Error uploading image":"画像をアップロードのエラーが発生しました","Error · Unsent":"エラー・未送信","Error: {{ errorMessage }}":"エラー: {{ errorMessage }}",Flag:Flag$5,"Message Failed · Click to try again":"メッセージが失敗しました · クリックして再試行してください","Message Failed · Unauthorized":"メッセージが失敗しました · 許可されていません","Message deleted":"メッセージが削除されました","Message has been successfully flagged":"メッセージに正常にフラグが付けられました","Message pinned":"メッセージにピンが付けられました",Mute:Mute$5,New:New$5,"New Messages!":"新しいメッセージ!","No results found":"結果が見つかりません","Nothing yet...":"まだ何もありません...","Only visible to you":"あなただけに見える","Open emoji picker":"絵文字ピッカーを開く","People matching":"一致する人","Pick your emoji":"絵文字を選んでください",Pin:Pin$5,"Pinned by":"ピンした方",Reply:Reply$5,"Reply to Message":"メッセージに返信",Search:Search$5,"Searching...":"検索中...",Send:Send$5,"Send message request failed":"メッセージ送信リクエストが失敗しました","Sending...":"送信中...","Slow Mode ON":"スローモードオン","Start of a new thread":"新しいスレッドの開始","This message was deleted...":"このメッセージは削除されました...",Thread:Thread$6,"Type your message":"メッセージを入力してください",Unmute:Unmute$5,Unpin:Unpin$5,"Upload type: \"{{ type }}\" is not allowed":"アップロードタイプ:\"{{ type }}\"は許可されていません","Wait until all attachments have uploaded":"すべての添付ファイルがアップロードされるまでお待ちください","You have no channels currently":"現在チャンネルはありません","You've reached the maximum number of files":"ファイルの最大数に達しました",live:live$5,"this content could not be displayed":"このコンテンツは表示できませんでした","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} と {{ moreCount }} 他人","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} と {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} と {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} イメージ","{{ memberCount }} members":"{{ memberCount }} メンバー","{{ replyCount }} replies":"{{ replyCount }} 返信","{{ user }} has been muted":"{{ user }} 無音されています","{{ user }} has been unmuted":"{{ user }} 無音されていません","{{ watcherCount }} online":"{{ watcherCount }} オンライン","🏙 Attachment...":"🏙 アタッチメント..."};
6794
6992
 
6795
- var Cancel$4="취소";var Close$4="닫기";var Delete$4="삭제";var Delivered$4="배달됨";var Flag$4="플래그";var Mute$4="무음";var New$4="새로운";var Pin$4="핀";var Reply$4="답장";var Search$4="찾다";var Send$4="보내다";var Thread$5="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var koTranslations = {"1 reply":"답장 1개","Attach files":"파일 첨부",Cancel:Cancel$4,"Channel Missing":"채널 누락",Close:Close$4,"Close emoji picker":"이모티콘 선택기 닫기","Commands matching":"일치하는 명령","Connection failure, reconnecting now...":"연결 실패, 지금 다시 연결 중...",Delete:Delete$4,Delivered:Delivered$4,"Edit Message":"메시지 수정","Edit message request failed":"메시지 수정 요청 실패","Emoji matching":"이모티콘 매칭","Empty message...":"빈 메시지...","Error adding flag":"플래그를 추가하는 동안 오류가 발생했습니다.","Error connecting to chat, refresh the page to try again.":"채팅에 연결하는 동안 오류가 발생했습니다. 페이지를 새로고침하여 다시 시도하세요.","Error deleting message":"메시지를 삭제하는 중에 오류가 발생했습니다.","Error muting a user ...":"사용자를 음소거하는 중에 오류가 발생했습니다...","Error pinning message":"메시지를 핀하는 중에 오류가 발생했습니다.","Error removing message pin":"메시지 핀을 제거하는 중에 오류가 발생했습니다.","Error unmuting a user ...":"사용자 음소거 해제 중 오류 발생...","Error uploading file":"파일 업로드 오류","Error uploading image":"이미지를 업로드하는 동안 오류가 발생했습니다.","Error · Unsent":"오류 · 전송되지 않음","Error: {{ errorMessage }}":"오류: {{ errorMessage }}",Flag:Flag$4,"Message Failed · Click to try again":"메시지 실패 · 다시 시도하려면 클릭하세요.","Message Failed · Unauthorized":"메시지 실패 · 승인되지 않음","Message deleted":"메시지가 삭제되었습니다.","Message has been successfully flagged":"메시지에 플래그가 지정되었습니다.","Message pinned":"메시지 핀했습니다",Mute:Mute$4,New:New$4,"New Messages!":"새 메시지!","No results found":"검색 결과가 없습니다","Nothing yet...":"아직 아무것도...","Only visible to you":"당신만 볼 수 있습니다","Open emoji picker":"이모티콘 선택기 열기","People matching":"일치하는 사람","Pick your emoji":"이모티콘 선택",Pin:Pin$4,"Pinned by":"핀했던 분:",Reply:Reply$4,"Reply to Message":"메시지에 답장",Search:Search$4,"Searching...":"수색...",Send:Send$4,"Send message request failed":"메시지 보내기 요청 실패","Sending...":"배상중...","Slow Mode ON":"슬로우 모드 켜짐","Start of a new thread":"새 스레드의 시작","This message was deleted...":"이 메시지는 삭제되었습니다...",Thread:Thread$5,"Type your message":"메시지 입력",Unmute:Unmute$4,Unpin:Unpin$4,"Wait until all attachments have uploaded":"모든 첨부 파일이 업로드될 때까지 기다립니다.","You have no channels currently":"현재 채널이 없습니다.","You've reached the maximum number of files":"최대 파일 수에 도달했습니다.",live:live$4,"this content could not be displayed":"이 콘텐츠를 표시할 수 없습니다","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} 그리고 {{ moreCount }}명 더","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} 그리고 {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} 그리고 {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }}개 더","{{ memberCount }} members":"{{ memberCount }}명","{{ replyCount }} replies":"{{ replyCount }} 답장","{{ user }} has been muted":"{{ user }} 음소거되었습니다","{{ user }} has been unmuted":"{{ user }} 음소거가 해제되었습니다","{{ watcherCount }} online":"{{ watcherCount }} 온라인","🏙 Attachment...":"🏙 부착..."};
6993
+ var Cancel$4="취소";var Close$4="닫기";var Delete$4="삭제";var Delivered$4="배달됨";var Flag$4="플래그";var Mute$4="무음";var New$4="새로운";var Pin$4="핀";var Reply$4="답장";var Search$4="찾다";var Send$4="보내다";var Thread$5="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var koTranslations = {"1 reply":"답장 1개","Attach files":"파일 첨부",Cancel:Cancel$4,"Channel Missing":"채널 누락",Close:Close$4,"Close emoji picker":"이모티콘 선택기 닫기","Commands matching":"일치하는 명령","Connection failure, reconnecting now...":"연결 실패, 지금 다시 연결 중...",Delete:Delete$4,Delivered:Delivered$4,"Edit Message":"메시지 수정","Edit message request failed":"메시지 수정 요청 실패","Emoji matching":"이모티콘 매칭","Empty message...":"빈 메시지...","Error adding flag":"플래그를 추가하는 동안 오류가 발생했습니다.","Error connecting to chat, refresh the page to try again.":"채팅에 연결하는 동안 오류가 발생했습니다. 페이지를 새로고침하여 다시 시도하세요.","Error deleting message":"메시지를 삭제하는 중에 오류가 발생했습니다.","Error muting a user ...":"사용자를 음소거하는 중에 오류가 발생했습니다...","Error pinning message":"메시지를 핀하는 중에 오류가 발생했습니다.","Error removing message pin":"메시지 핀을 제거하는 중에 오류가 발생했습니다.","Error unmuting a user ...":"사용자 음소거 해제 중 오류 발생...","Error uploading file":"파일 업로드 오류","Error uploading image":"이미지를 업로드하는 동안 오류가 발생했습니다.","Error · Unsent":"오류 · 전송되지 않음","Error: {{ errorMessage }}":"오류: {{ errorMessage }}",Flag:Flag$4,"Message Failed · Click to try again":"메시지 실패 · 다시 시도하려면 클릭하세요.","Message Failed · Unauthorized":"메시지 실패 · 승인되지 않음","Message deleted":"메시지가 삭제되었습니다.","Message has been successfully flagged":"메시지에 플래그가 지정되었습니다.","Message pinned":"메시지 핀했습니다",Mute:Mute$4,New:New$4,"New Messages!":"새 메시지!","No results found":"검색 결과가 없습니다","Nothing yet...":"아직 아무것도...","Only visible to you":"당신만 볼 수 있습니다","Open emoji picker":"이모티콘 선택기 열기","People matching":"일치하는 사람","Pick your emoji":"이모티콘 선택",Pin:Pin$4,"Pinned by":"핀했던 분:",Reply:Reply$4,"Reply to Message":"메시지에 답장",Search:Search$4,"Searching...":"수색...",Send:Send$4,"Send message request failed":"메시지 보내기 요청 실패","Sending...":"배상중...","Slow Mode ON":"슬로우 모드 켜짐","Start of a new thread":"새 스레드의 시작","This message was deleted...":"이 메시지는 삭제되었습니다...",Thread:Thread$5,"Type your message":"메시지 입력",Unmute:Unmute$4,Unpin:Unpin$4,"Upload type: \"{{ type }}\" is not allowed":"업로드 유형: \"{{ type }}\"은(는) 허용되지 않습니다.","Wait until all attachments have uploaded":"모든 첨부 파일이 업로드될 때까지 기다립니다.","You have no channels currently":"현재 채널이 없습니다.","You've reached the maximum number of files":"최대 파일 수에 도달했습니다.",live:live$4,"this content could not be displayed":"이 콘텐츠를 표시할 수 없습니다","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} 그리고 {{ moreCount }}명 더","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} 그리고 {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} 그리고 {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }}개 더","{{ memberCount }} members":"{{ memberCount }}명","{{ replyCount }} replies":"{{ replyCount }} 답장","{{ user }} has been muted":"{{ user }} 음소거되었습니다","{{ user }} has been unmuted":"{{ user }} 음소거가 해제되었습니다","{{ watcherCount }} online":"{{ watcherCount }} 온라인","🏙 Attachment...":"🏙 부착..."};
6796
6994
 
6797
- var Cancel$3="Annuleer";var Close$3="Sluit";var Delete$3="Verwijder";var Delivered$3="Afgeleverd";var Flag$3="Markeer";var Mute$3="Mute";var New$3="Nieuwe";var Pin$3="Pin";var Reply$3="Antwoord";var Search$3="Zoeken";var Send$3="Verstuur";var Thread$4="Draadje";var Unmute$3="Unmute";var Unpin$3="Losmaken";var live$3="live";var nlTranslations = {"1 reply":"1 antwoord","Attach files":"Bijlage toevoegen",Cancel:Cancel$3,"Channel Missing":"Kanaal niet gevonden",Close:Close$3,"Close emoji picker":"Sluit de emoji-kiezer","Commands matching":"Bijpassende opdrachten","Connection failure, reconnecting now...":"Probleem met de verbinding, opnieuw verbinding maken...",Delete:Delete$3,Delivered:Delivered$3,"Edit Message":"Pas bericht aan","Edit message request failed":"Verzoek om bericht bewerken mislukt","Emoji matching":"Emoji-overeenkomsten","Empty message...":"Leeg bericht...","Error adding flag":"Fout bij toevoegen van vlag","Error connecting to chat, refresh the page to try again.":"Fout bij het verbinden, ververs de pagina om nogmaals te proberen","Error deleting message":"Fout bij verwijderen van bericht","Error muting a user ...":"Fout bij het muten van de gebruiker","Error pinning message":"Fout bij vastzetten van bericht","Error removing message pin":"Fout bij verwijderen van berichtpin","Error unmuting a user ...":"Fout bij het unmuten van de gebruiker","Error uploading file":"Fout bij uploaden bestand","Error uploading image":"Fout bij uploaden afbeelding","Error · Unsent":"Error: · niet verzonden","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$3,"Message Failed · Click to try again":"Bericht mislukt, klik om het nogmaals te proberen","Message Failed · Unauthorized":"Bericht mislukt, ongeautoriseerd","Message deleted":"Bericht verwijderd","Message has been successfully flagged":"Bericht is succesvol gemarkeerd","Message pinned":"Bericht vastgezet",Mute:Mute$3,New:New$3,"New Messages!":"Nieuwe Berichten!","No results found":"Geen resultaten gevonden","Nothing yet...":"Nog niets ...","Only visible to you":"Alleen zichtbaar voor jou","Open emoji picker":"Open emojipicker","People matching":"Mensen die matchen","Pick your emoji":"Kies je emoji",Pin:Pin$3,"Pinned by":"Vastgemaakt door",Reply:Reply$3,"Reply to Message":"Antwoord op bericht",Search:Search$3,"Searching...":"Zoeken...",Send:Send$3,"Send message request failed":"Verzoek om bericht te verzenden mislukt","Sending...":"Aan het verzenden...","Slow Mode ON":"Langzame modus aan","Start of a new thread":"Begin van een nieuwe draadje","This message was deleted...":"Dit bericht was verwijderd",Thread:Thread$4,"Type your message":"Type je bericht",Unmute:Unmute$3,Unpin:Unpin$3,"Wait until all attachments have uploaded":"Wacht tot alle bijlagen zijn geüpload","You have no channels currently":"Er zijn geen chats beschikbaar","You've reached the maximum number of files":"Je hebt het maximale aantal bestanden bereikt",live:live$3,"this content could not be displayed":"Deze inhoud kan niet weergegeven worden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} en {{ moreCount }} meer","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} en {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} en {{ secondUser }}","{{ imageCount }} more":"+{{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} deelnemers","{{ replyCount }} replies":"{{ replyCount }} antwoorden","{{ user }} has been muted":"{{ user }} is muted","{{ user }} has been unmuted":"{{ user }} is unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Bijlage..."};
6995
+ var Cancel$3="Annuleer";var Close$3="Sluit";var Delete$3="Verwijder";var Delivered$3="Afgeleverd";var Flag$3="Markeer";var Mute$3="Mute";var New$3="Nieuwe";var Pin$3="Pin";var Reply$3="Antwoord";var Search$3="Zoeken";var Send$3="Verstuur";var Thread$4="Draadje";var Unmute$3="Unmute";var Unpin$3="Losmaken";var live$3="live";var nlTranslations = {"1 reply":"1 antwoord","Attach files":"Bijlage toevoegen",Cancel:Cancel$3,"Channel Missing":"Kanaal niet gevonden",Close:Close$3,"Close emoji picker":"Sluit de emoji-kiezer","Commands matching":"Bijpassende opdrachten","Connection failure, reconnecting now...":"Probleem met de verbinding, opnieuw verbinding maken...",Delete:Delete$3,Delivered:Delivered$3,"Edit Message":"Pas bericht aan","Edit message request failed":"Verzoek om bericht bewerken mislukt","Emoji matching":"Emoji-overeenkomsten","Empty message...":"Leeg bericht...","Error adding flag":"Fout bij toevoegen van vlag","Error connecting to chat, refresh the page to try again.":"Fout bij het verbinden, ververs de pagina om nogmaals te proberen","Error deleting message":"Fout bij verwijderen van bericht","Error muting a user ...":"Fout bij het muten van de gebruiker","Error pinning message":"Fout bij vastzetten van bericht","Error removing message pin":"Fout bij verwijderen van berichtpin","Error unmuting a user ...":"Fout bij het unmuten van de gebruiker","Error uploading file":"Fout bij uploaden bestand","Error uploading image":"Fout bij uploaden afbeelding","Error · Unsent":"Error: · niet verzonden","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$3,"Message Failed · Click to try again":"Bericht mislukt, klik om het nogmaals te proberen","Message Failed · Unauthorized":"Bericht mislukt, ongeautoriseerd","Message deleted":"Bericht verwijderd","Message has been successfully flagged":"Bericht is succesvol gemarkeerd","Message pinned":"Bericht vastgezet",Mute:Mute$3,New:New$3,"New Messages!":"Nieuwe Berichten!","No results found":"Geen resultaten gevonden","Nothing yet...":"Nog niets ...","Only visible to you":"Alleen zichtbaar voor jou","Open emoji picker":"Open emojipicker","People matching":"Mensen die matchen","Pick your emoji":"Kies je emoji",Pin:Pin$3,"Pinned by":"Vastgemaakt door",Reply:Reply$3,"Reply to Message":"Antwoord op bericht",Search:Search$3,"Searching...":"Zoeken...",Send:Send$3,"Send message request failed":"Verzoek om bericht te verzenden mislukt","Sending...":"Aan het verzenden...","Slow Mode ON":"Langzame modus aan","Start of a new thread":"Begin van een nieuwe draadje","This message was deleted...":"Dit bericht was verwijderd",Thread:Thread$4,"Type your message":"Type je bericht",Unmute:Unmute$3,Unpin:Unpin$3,"Upload type: \"{{ type }}\" is not allowed":"Uploadtype: \"{{ type }}\" is niet toegestaan","Wait until all attachments have uploaded":"Wacht tot alle bijlagen zijn geüpload","You have no channels currently":"Er zijn geen chats beschikbaar","You've reached the maximum number of files":"Je hebt het maximale aantal bestanden bereikt",live:live$3,"this content could not be displayed":"Deze inhoud kan niet weergegeven worden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} en {{ moreCount }} meer","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} en {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} en {{ secondUser }}","{{ imageCount }} more":"+{{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} deelnemers","{{ replyCount }} replies":"{{ replyCount }} antwoorden","{{ user }} has been muted":"{{ user }} is muted","{{ user }} has been unmuted":"{{ user }} is unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Bijlage..."};
6798
6996
 
6799
- var Cancel$2="Cancelar";var Close$2="Perto";var Delete$2="Excluir";var Delivered$2="Entregue";var Flag$2="Bandeira";var Mute$2="Mudo";var New$2="Novo";var Pin$2="Alfinete";var Reply$2="Responder";var Search$2="Procurar";var Send$2="Mandar";var Thread$3="Fio";var Unmute$2="Com som";var Unpin$2="Liberar";var live$2="viver";var ptTranslations = {"1 reply":"1 resposta","Attach files":"Anexar arquivos",Cancel:Cancel$2,"Channel Missing":"Canal ausente",Close:Close$2,"Close emoji picker":"Fechar seletor de emoji","Commands matching":"Correspondência de comandos","Connection failure, reconnecting now...":"Falha de conexão, reconectando agora ...",Delete:Delete$2,Delivered:Delivered$2,"Edit Message":"Editar Mensagem","Edit message request failed":"O pedido de edição da mensagem falhou","Emoji matching":"Emoji correspondente","Empty message...":"Mensagem vazia ...","Error adding flag":"Erro ao adicionar bandeira","Error connecting to chat, refresh the page to try again.":"Erro ao conectar ao bate-papo, atualize a página para tentar novamente.","Error deleting message":"Erro ao deletar mensagem","Error muting a user ...":"Erro ao silenciar um usuário ...","Error pinning message":"Erro ao fixar mensagem","Error removing message pin":"Erro ao remover o PIN da mensagem","Error unmuting a user ...":"Erro ao ativar o som de um usuário ...","Error uploading file":"Erro ao enviar arquivo","Error uploading image":"Erro ao carregar a imagem","Error · Unsent":"Erro · Não enviado","Error: {{ errorMessage }}":"Erro: {{ errorMessage }}",Flag:Flag$2,"Message Failed · Click to try again":"A mensagem falhou · Clique para tentar novamente","Message Failed · Unauthorized":"A mensagem falhou · não autorizado","Message deleted":"Mensagem apagada","Message has been successfully flagged":"A mensagem foi sinalizada com sucesso","Message pinned":"Mensagem fixada",Mute:Mute$2,New:New$2,"New Messages!":"Novas mensagens!","No results found":"Nenhum resultado encontrado","Nothing yet...":"Nada ainda...","Only visible to you":"Visível apenas para você","Open emoji picker":"Abrir seletor de emoji","People matching":"Pessoas combinando","Pick your emoji":"Escolha o seu emoji",Pin:Pin$2,"Pinned by":"Fixado por",Reply:Reply$2,"Reply to Message":"Responder a mensagem",Search:Search$2,"Searching...":"Procurando...",Send:Send$2,"Send message request failed":"O pedido de envio de mensagem falhou","Sending...":"Enviando ...","Slow Mode ON":"Modo lento LIGADO","Start of a new thread":"Início de um novo tópico","This message was deleted...":"Esta mensagem foi excluída ...",Thread:Thread$3,"Type your message":"Digite sua mensagem",Unmute:Unmute$2,Unpin:Unpin$2,"Wait until all attachments have uploaded":"Espere até que todos os anexos tenham sido carregados","You have no channels currently":"Você não tem canais atualmente","You've reached the maximum number of files":"Você atingiu o número máximo de arquivos",live:live$2,"this content could not be displayed":"este conteúdo não pôde ser exibido","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e mais {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} mais","{{ memberCount }} members":"{{ memberCount }} membros","{{ replyCount }} replies":"{{ replyCount }} respostas","{{ user }} has been muted":"{{ user }} foi silenciado","{{ user }} has been unmuted":"{{ user }} foi reativado","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anexo ..."};
6997
+ var Cancel$2="Cancelar";var Close$2="Perto";var Delete$2="Excluir";var Delivered$2="Entregue";var Flag$2="Bandeira";var Mute$2="Mudo";var New$2="Novo";var Pin$2="Alfinete";var Reply$2="Responder";var Search$2="Procurar";var Send$2="Mandar";var Thread$3="Fio";var Unmute$2="Com som";var Unpin$2="Liberar";var live$2="viver";var ptTranslations = {"1 reply":"1 resposta","Attach files":"Anexar arquivos",Cancel:Cancel$2,"Channel Missing":"Canal ausente",Close:Close$2,"Close emoji picker":"Fechar seletor de emoji","Commands matching":"Correspondência de comandos","Connection failure, reconnecting now...":"Falha de conexão, reconectando agora ...",Delete:Delete$2,Delivered:Delivered$2,"Edit Message":"Editar Mensagem","Edit message request failed":"O pedido de edição da mensagem falhou","Emoji matching":"Emoji correspondente","Empty message...":"Mensagem vazia ...","Error adding flag":"Erro ao adicionar bandeira","Error connecting to chat, refresh the page to try again.":"Erro ao conectar ao bate-papo, atualize a página para tentar novamente.","Error deleting message":"Erro ao deletar mensagem","Error muting a user ...":"Erro ao silenciar um usuário ...","Error pinning message":"Erro ao fixar mensagem","Error removing message pin":"Erro ao remover o PIN da mensagem","Error unmuting a user ...":"Erro ao ativar o som de um usuário ...","Error uploading file":"Erro ao enviar arquivo","Error uploading image":"Erro ao carregar a imagem","Error · Unsent":"Erro · Não enviado","Error: {{ errorMessage }}":"Erro: {{ errorMessage }}",Flag:Flag$2,"Message Failed · Click to try again":"A mensagem falhou · Clique para tentar novamente","Message Failed · Unauthorized":"A mensagem falhou · não autorizado","Message deleted":"Mensagem apagada","Message has been successfully flagged":"A mensagem foi sinalizada com sucesso","Message pinned":"Mensagem fixada",Mute:Mute$2,New:New$2,"New Messages!":"Novas mensagens!","No results found":"Nenhum resultado encontrado","Nothing yet...":"Nada ainda...","Only visible to you":"Visível apenas para você","Open emoji picker":"Abrir seletor de emoji","People matching":"Pessoas combinando","Pick your emoji":"Escolha o seu emoji",Pin:Pin$2,"Pinned by":"Fixado por",Reply:Reply$2,"Reply to Message":"Responder a mensagem",Search:Search$2,"Searching...":"Procurando...",Send:Send$2,"Send message request failed":"O pedido de envio de mensagem falhou","Sending...":"Enviando ...","Slow Mode ON":"Modo lento LIGADO","Start of a new thread":"Início de um novo tópico","This message was deleted...":"Esta mensagem foi excluída ...",Thread:Thread$3,"Type your message":"Digite sua mensagem",Unmute:Unmute$2,Unpin:Unpin$2,"Upload type: \"{{ type }}\" is not allowed":"Tipo de upload: \"{{ type }}\" não é permitido","Wait until all attachments have uploaded":"Espere até que todos os anexos tenham sido carregados","You have no channels currently":"Você não tem canais atualmente","You've reached the maximum number of files":"Você atingiu o número máximo de arquivos",live:live$2,"this content could not be displayed":"este conteúdo não pôde ser exibido","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e mais {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} mais","{{ memberCount }} members":"{{ memberCount }} membros","{{ replyCount }} replies":"{{ replyCount }} respostas","{{ user }} has been muted":"{{ user }} foi silenciado","{{ user }} has been unmuted":"{{ user }} foi reativado","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anexo ..."};
6800
6998
 
6801
- var Cancel$1="Отмена";var Close$1="Закрыть";var Delete$1="Удалить";var Delivered$1="Отправлено";var Flag$1="Пожаловаться";var Mute$1="Отключить уведомления";var New$1="Новые";var Pin$1="Штырь";var Reply$1="Отвечать";var Search$1="Поиск";var Send$1="Отправить";var Thread$2="Ветка";var Unmute$1="Включить уведомления";var Unpin$1="Открепить";var live$1="В прямом эфире";var ruTranslations = {"1 reply":"1 ответ","Attach files":"Прикрепить файлы",Cancel:Cancel$1,"Channel Missing":"Канал не найден",Close:Close$1,"Close emoji picker":"Закрыть окно выбора смайлов","Commands matching":"Соответствие команд","Connection failure, reconnecting now...":"Ошибка соединения, переподключение...",Delete:Delete$1,Delivered:Delivered$1,"Edit Message":"Редактировать сообщение","Edit message request failed":"Не удалось изменить запрос сообщения","Emoji matching":"Соответствие эмодзи","Empty message...":"Пустое сообщение...","Error adding flag":"Ошибка добавления флага","Error connecting to chat, refresh the page to try again.":"Ошибка подключения к чату, обновите страницу чтобы попробовать снова.","Error deleting message":"Ошибка при удалении сообщения","Error muting a user ...":"Ошибка отключения уведомлений от пользователя...","Error pinning message":"Сообщение об ошибке при закреплении","Error removing message pin":"Ошибка при удалении булавки сообщения","Error unmuting a user ...":"Ошибка включения уведомлений...","Error uploading file":"Ошибка при загрузке файла","Error uploading image":"Ошибка загрузки изображения","Error · Unsent":"Ошибка · Не отправлено","Error: {{ errorMessage }}":"Ошибка: {{ errorMessage }}",Flag:Flag$1,"Message Failed · Click to try again":"Ошибка отправки сообщения · Нажмите чтобы повторить","Message Failed · Unauthorized":"Ошибка отправки сообщения · Неавторизованный","Message deleted":"Сообщение удалено","Message has been successfully flagged":"Жалоба на сообщение была принята","Message pinned":"Сообщение закреплено",Mute:Mute$1,New:New$1,"New Messages!":"Новые сообщения!","No results found":"результаты не найдены","Nothing yet...":"Пока ничего нет...","Only visible to you":"Только видно для вас","Open emoji picker":"Выбрать emoji","People matching":"Соответствующие люди","Pick your emoji":"Выберите свой emoji",Pin:Pin$1,"Pinned by":"Закреплено",Reply:Reply$1,"Reply to Message":"Ответить на сообщение",Search:Search$1,"Searching...":"Ищем...",Send:Send$1,"Send message request failed":"Не удалось отправить запрос на отправку сообщения","Sending...":"Отправка...","Slow Mode ON":"Медленный режим включен","Start of a new thread":"Начало новой ветки","This message was deleted...":"Сообщение было удалено...",Thread:Thread$2,"Type your message":"Ваше сообщение",Unmute:Unmute$1,Unpin:Unpin$1,"Wait until all attachments have uploaded":"Подождите, пока все вложения загрузятся","You have no channels currently":"У вас нет каналов в данный момент","You've reached the maximum number of files":"Вы достигли максимального количества файлов",live:live$1,"this content could not be displayed":"Этот контент не может быть отображен в данный момент","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} и {{ moreCount }} еще","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} и {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} и {{ secondUser }}","{{ imageCount }} more":"Ещё {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} члены","{{ replyCount }} replies":"{{ replyCount }} ответов","{{ user }} has been muted":"Вы отписались от уведомлений от {{ user }}","{{ user }} has been unmuted":"Уведомления от {{ user }} были включены","{{ watcherCount }} online":"{{ watcherCount }} в сети","🏙 Attachment...":"🏙 Вложение..."};
6999
+ var Cancel$1="Отмена";var Close$1="Закрыть";var Delete$1="Удалить";var Delivered$1="Отправлено";var Flag$1="Пожаловаться";var Mute$1="Отключить уведомления";var New$1="Новые";var Pin$1="Штырь";var Reply$1="Отвечать";var Search$1="Поиск";var Send$1="Отправить";var Thread$2="Ветка";var Unmute$1="Включить уведомления";var Unpin$1="Открепить";var live$1="В прямом эфире";var ruTranslations = {"1 reply":"1 ответ","Attach files":"Прикрепить файлы",Cancel:Cancel$1,"Channel Missing":"Канал не найден",Close:Close$1,"Close emoji picker":"Закрыть окно выбора смайлов","Commands matching":"Соответствие команд","Connection failure, reconnecting now...":"Ошибка соединения, переподключение...",Delete:Delete$1,Delivered:Delivered$1,"Edit Message":"Редактировать сообщение","Edit message request failed":"Не удалось изменить запрос сообщения","Emoji matching":"Соответствие эмодзи","Empty message...":"Пустое сообщение...","Error adding flag":"Ошибка добавления флага","Error connecting to chat, refresh the page to try again.":"Ошибка подключения к чату, обновите страницу чтобы попробовать снова.","Error deleting message":"Ошибка при удалении сообщения","Error muting a user ...":"Ошибка отключения уведомлений от пользователя...","Error pinning message":"Сообщение об ошибке при закреплении","Error removing message pin":"Ошибка при удалении булавки сообщения","Error unmuting a user ...":"Ошибка включения уведомлений...","Error uploading file":"Ошибка при загрузке файла","Error uploading image":"Ошибка загрузки изображения","Error · Unsent":"Ошибка · Не отправлено","Error: {{ errorMessage }}":"Ошибка: {{ errorMessage }}",Flag:Flag$1,"Message Failed · Click to try again":"Ошибка отправки сообщения · Нажмите чтобы повторить","Message Failed · Unauthorized":"Ошибка отправки сообщения · Неавторизованный","Message deleted":"Сообщение удалено","Message has been successfully flagged":"Жалоба на сообщение была принята","Message pinned":"Сообщение закреплено",Mute:Mute$1,New:New$1,"New Messages!":"Новые сообщения!","No results found":"результаты не найдены","Nothing yet...":"Пока ничего нет...","Only visible to you":"Только видно для вас","Open emoji picker":"Выбрать emoji","People matching":"Соответствующие люди","Pick your emoji":"Выберите свой emoji",Pin:Pin$1,"Pinned by":"Закреплено",Reply:Reply$1,"Reply to Message":"Ответить на сообщение",Search:Search$1,"Searching...":"Ищем...",Send:Send$1,"Send message request failed":"Не удалось отправить запрос на отправку сообщения","Sending...":"Отправка...","Slow Mode ON":"Медленный режим включен","Start of a new thread":"Начало новой ветки","This message was deleted...":"Сообщение было удалено...",Thread:Thread$2,"Type your message":"Ваше сообщение",Unmute:Unmute$1,Unpin:Unpin$1,"Upload type: \"{{ type }}\" is not allowed":"Тип загрузки: \"{{ type }}\" не разрешен","Wait until all attachments have uploaded":"Подождите, пока все вложения загрузятся","You have no channels currently":"У вас нет каналов в данный момент","You've reached the maximum number of files":"Вы достигли максимального количества файлов",live:live$1,"this content could not be displayed":"Этот контент не может быть отображен в данный момент","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} и {{ moreCount }} еще","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} и {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} и {{ secondUser }}","{{ imageCount }} more":"Ещё {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} члены","{{ replyCount }} replies":"{{ replyCount }} ответов","{{ user }} has been muted":"Вы отписались от уведомлений от {{ user }}","{{ user }} has been unmuted":"Уведомления от {{ user }} были включены","{{ watcherCount }} online":"{{ watcherCount }} в сети","🏙 Attachment...":"🏙 Вложение..."};
6802
7000
 
6803
- var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi";var Flag="Bayrak";var Mute="Sessiz";var New="Yeni";var Pin="Toplu iğne";var Reply="Cevapla";var Search="Arama";var Send="Gönder";var Thread$1="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var trTranslations = {"1 reply":"1 cevap","Attach files":"Dosya ekle",Cancel:Cancel,"Channel Missing":"Kanal bulunamıyor",Close:Close,"Close emoji picker":"Emoji seçiciyi kapat","Commands matching":"Eşleşen komutlar","Connection failure, reconnecting now...":"Bağlantı hatası, tekrar bağlanılıyor...",Delete:Delete,Delivered:Delivered,"Edit Message":"Mesajı Düzenle","Edit message request failed":"Mesaj düzenleme isteği başarısız oldu","Emoji matching":"Emoji eşleştirme","Empty message...":"Boş mesaj...","Error adding flag":"Bayrak eklenirken hata oluştu","Error connecting to chat, refresh the page to try again.":"Bağlantı hatası, sayfayı yenileyip tekrar deneyin.","Error deleting message":"Mesaj silinirken hata oluştu","Error muting a user ...":"Kullanıcıyı sessize alırken hata oluştu ...","Error pinning message":"Mesaj sabitlenirken hata oluştu","Error removing message pin":"Mesaj PIN'i kaldırılırken hata oluştu","Error unmuting a user ...":"Kullanıcının sesini açarken hata oluştu ...","Error uploading file":"Dosya yüklenirken hata oluştu","Error uploading image":"Resmi yüklerken hata","Error · Unsent":"Hata · Gönderilemedi","Error: {{ errorMessage }}":"Hata: {{ errorMessage }}",Flag:Flag,"Message Failed · Click to try again":"Mesaj Başarısız · Tekrar denemek için tıklayın","Message Failed · Unauthorized":"Mesaj Başarısız · Yetkisiz","Message deleted":"Mesaj silindi","Message has been successfully flagged":"Mesaj başarıyla bayraklandı","Message pinned":"Mesaj sabitlendi",Mute:Mute,New:New,"New Messages!":"Yeni Mesajlar!","No results found":"Sonuç bulunamadı","Nothing yet...":"Şimdilik hiçbir şey...","Only visible to you":"Sadece size görünür","Open emoji picker":"Emoji klavyesini aç","People matching":"Eşleşen kişiler","Pick your emoji":"Emoji seçin",Pin:Pin,"Pinned by":"Sabitleyen",Reply:Reply,"Reply to Message":"Mesajı Cevapla",Search:Search,"Searching...":"Aranıyor...",Send:Send,"Send message request failed":"Mesaj gönderme isteği başarısız oldu","Sending...":"Gönderiliyor...","Slow Mode ON":"Yavaş Mod Açık","Start of a new thread":"Yeni konunun başı","This message was deleted...":"Bu mesaj silindi",Thread:Thread$1,"Type your message":"Mesajınızı yazın",Unmute:Unmute,Unpin:Unpin,"Wait until all attachments have uploaded":"Tüm ekler yüklenene kadar bekleyin","You have no channels currently":"Henüz kanalınız yok","You've reached the maximum number of files":"Maksimum dosya sayısına ulaştınız",live:live,"this content could not be displayed":"bu içerik gösterilemiyor","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} ve {{ moreCount }} daha","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, ve {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} ve {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} adet daha","{{ memberCount }} members":"{{ memberCount }} üyeler","{{ replyCount }} replies":"{{ replyCount }} cevaplar","{{ user }} has been muted":"{{ user }} sessize alındı","{{ user }} has been unmuted":"{{ user }} sesi açıldı","{{ watcherCount }} online":"{{ watcherCount }} çevrimiçi","🏙 Attachment...":"🏙 Ek..."};
7001
+ var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi";var Flag="Bayrak";var Mute="Sessiz";var New="Yeni";var Pin="Toplu iğne";var Reply="Cevapla";var Search="Arama";var Send="Gönder";var Thread$1="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var trTranslations = {"1 reply":"1 cevap","Attach files":"Dosya ekle",Cancel:Cancel,"Channel Missing":"Kanal bulunamıyor",Close:Close,"Close emoji picker":"Emoji seçiciyi kapat","Commands matching":"Eşleşen komutlar","Connection failure, reconnecting now...":"Bağlantı hatası, tekrar bağlanılıyor...",Delete:Delete,Delivered:Delivered,"Edit Message":"Mesajı Düzenle","Edit message request failed":"Mesaj düzenleme isteği başarısız oldu","Emoji matching":"Emoji eşleştirme","Empty message...":"Boş mesaj...","Error adding flag":"Bayrak eklenirken hata oluştu","Error connecting to chat, refresh the page to try again.":"Bağlantı hatası, sayfayı yenileyip tekrar deneyin.","Error deleting message":"Mesaj silinirken hata oluştu","Error muting a user ...":"Kullanıcıyı sessize alırken hata oluştu ...","Error pinning message":"Mesaj sabitlenirken hata oluştu","Error removing message pin":"Mesaj PIN'i kaldırılırken hata oluştu","Error unmuting a user ...":"Kullanıcının sesini açarken hata oluştu ...","Error uploading file":"Dosya yüklenirken hata oluştu","Error uploading image":"Resmi yüklerken hata","Error · Unsent":"Hata · Gönderilemedi","Error: {{ errorMessage }}":"Hata: {{ errorMessage }}",Flag:Flag,"Message Failed · Click to try again":"Mesaj Başarısız · Tekrar denemek için tıklayın","Message Failed · Unauthorized":"Mesaj Başarısız · Yetkisiz","Message deleted":"Mesaj silindi","Message has been successfully flagged":"Mesaj başarıyla bayraklandı","Message pinned":"Mesaj sabitlendi",Mute:Mute,New:New,"New Messages!":"Yeni Mesajlar!","No results found":"Sonuç bulunamadı","Nothing yet...":"Şimdilik hiçbir şey...","Only visible to you":"Sadece size görünür","Open emoji picker":"Emoji klavyesini aç","People matching":"Eşleşen kişiler","Pick your emoji":"Emoji seçin",Pin:Pin,"Pinned by":"Sabitleyen",Reply:Reply,"Reply to Message":"Mesajı Cevapla",Search:Search,"Searching...":"Aranıyor...",Send:Send,"Send message request failed":"Mesaj gönderme isteği başarısız oldu","Sending...":"Gönderiliyor...","Slow Mode ON":"Yavaş Mod Açık","Start of a new thread":"Yeni konunun başı","This message was deleted...":"Bu mesaj silindi",Thread:Thread$1,"Type your message":"Mesajınızı yazın",Unmute:Unmute,Unpin:Unpin,"Upload type: \"{{ type }}\" is not allowed":"Yükleme türü: \"{{ type }}\" izin verilmez","Wait until all attachments have uploaded":"Tüm ekler yüklenene kadar bekleyin","You have no channels currently":"Henüz kanalınız yok","You've reached the maximum number of files":"Maksimum dosya sayısına ulaştınız",live:live,"this content could not be displayed":"bu içerik gösterilemiyor","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} ve {{ moreCount }} daha","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, ve {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} ve {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} adet daha","{{ memberCount }} members":"{{ memberCount }} üyeler","{{ replyCount }} replies":"{{ replyCount }} cevaplar","{{ user }} has been muted":"{{ user }} sessize alındı","{{ user }} has been unmuted":"{{ user }} sesi açıldı","{{ watcherCount }} online":"{{ watcherCount }} çevrimiçi","🏙 Attachment...":"🏙 Ek..."};
6804
7002
 
6805
7003
  var defaultNS = 'translation';
6806
7004
  var defaultLng = 'en';
@@ -6808,9 +7006,9 @@ Dayjs__default['default'].extend(updateLocale__default['default']);
6808
7006
  Dayjs__default['default'].updateLocale('de', {
6809
7007
  calendar: {
6810
7008
  lastDay: '[gestern um] LT',
6811
- lastWeek: '[vergangenheit] dddd [beim] LT',
7009
+ lastWeek: '[letzten] dddd [bei] LT',
6812
7010
  nextDay: '[morgen zu] LT',
6813
- nextWeek: 'dddd [beim] LT',
7011
+ nextWeek: 'dddd [bei] LT',
6814
7012
  sameDay: '[heute um] LT',
6815
7013
  sameElse: 'L',
6816
7014
  },
@@ -7401,7 +7599,7 @@ var Streami18n = /** @class */ (function () {
7401
7599
  return Streami18n;
7402
7600
  }());
7403
7601
 
7404
- var version = '6.9.0';
7602
+ var version = '6.12.0';
7405
7603
 
7406
7604
  var useChat = function (_a) {
7407
7605
  var _b;
@@ -7417,13 +7615,19 @@ var useChat = function (_a) {
7417
7615
  var clientMutes = (_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes;
7418
7616
  var closeMobileNav = function () { return setNavOpen(false); };
7419
7617
  var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
7618
+ var appSettings = React.useRef(null);
7619
+ var getAppSettings = function () {
7620
+ if (appSettings.current) {
7621
+ return appSettings.current;
7622
+ }
7623
+ appSettings.current = client.getAppSettings();
7624
+ return appSettings.current;
7625
+ };
7420
7626
  React.useEffect(function () {
7421
7627
  if (client) {
7422
7628
  var userAgent = client.getUserAgent();
7423
7629
  if (!userAgent.includes('stream-chat-react')) {
7424
- /**
7425
- * results in something like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7426
- */
7630
+ // result looks like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7427
7631
  client.setUserAgent("stream-chat-react-" + version + "-" + userAgent);
7428
7632
  }
7429
7633
  }
@@ -7436,7 +7640,7 @@ var useChat = function (_a) {
7436
7640
  };
7437
7641
  client.on('notification.mutes_updated', handleEvent);
7438
7642
  return function () { return client.off('notification.mutes_updated', handleEvent); };
7439
- }, [client, clientMutes]);
7643
+ }, [clientMutes === null || clientMutes === void 0 ? void 0 : clientMutes.length]);
7440
7644
  React.useEffect(function () {
7441
7645
  var _a;
7442
7646
  var userLanguage = (_a = client.user) === null || _a === void 0 ? void 0 : _a.language;
@@ -7451,7 +7655,7 @@ var useChat = function (_a) {
7451
7655
  streami18n.getTranslators().then(function (translator) {
7452
7656
  setTranslators(__assign(__assign({}, translator), { userLanguage: userLanguage || defaultLanguage }));
7453
7657
  });
7454
- }, [client, i18nInstance]);
7658
+ }, [i18nInstance]);
7455
7659
  var setActiveChannel = React.useCallback(function (activeChannel, watchers, event) {
7456
7660
  if (watchers === void 0) { watchers = {}; }
7457
7661
  return __awaiter(void 0, void 0, void 0, function () {
@@ -7476,6 +7680,7 @@ var useChat = function (_a) {
7476
7680
  return {
7477
7681
  channel: channel,
7478
7682
  closeMobileNav: closeMobileNav,
7683
+ getAppSettings: getAppSettings,
7479
7684
  mutes: mutes,
7480
7685
  navOpen: navOpen,
7481
7686
  openMobileNav: openMobileNav,
@@ -7486,7 +7691,7 @@ var useChat = function (_a) {
7486
7691
 
7487
7692
  var useCreateChatContext = function (value) {
7488
7693
  var _a;
7489
- var channel = value.channel, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
7694
+ var channel = value.channel, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, getAppSettings = value.getAppSettings, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
7490
7695
  var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
7491
7696
  var clientValues = "" + client.clientID + Object.keys(client.activeChannels).length + Object.keys(client.listeners).length + client.mutedChannels.length + "\n " + ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id);
7492
7697
  var mutedUsersLength = mutes.length;
@@ -7495,13 +7700,14 @@ var useCreateChatContext = function (value) {
7495
7700
  client: client,
7496
7701
  closeMobileNav: closeMobileNav,
7497
7702
  customClasses: customClasses,
7703
+ getAppSettings: getAppSettings,
7498
7704
  mutes: mutes,
7499
7705
  navOpen: navOpen,
7500
7706
  openMobileNav: openMobileNav,
7501
7707
  setActiveChannel: setActiveChannel,
7502
7708
  theme: theme,
7503
7709
  useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
7504
- }); }, [channelCid, clientValues, mutedUsersLength, navOpen]);
7710
+ }); }, [channelCid, clientValues, getAppSettings, mutedUsersLength, navOpen]);
7505
7711
  return chatContext;
7506
7712
  };
7507
7713
 
@@ -7541,13 +7747,14 @@ var useCustomStyles = function (customStyles) {
7541
7747
  */
7542
7748
  var Chat = function (props) {
7543
7749
  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;
7544
- var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
7750
+ var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
7545
7751
  useCustomStyles(darkMode ? darkModeTheme : customStyles);
7546
7752
  var chatContextValue = useCreateChatContext({
7547
7753
  channel: channel,
7548
7754
  client: client,
7549
7755
  closeMobileNav: closeMobileNav,
7550
7756
  customClasses: customClasses,
7757
+ getAppSettings: getAppSettings,
7551
7758
  mutes: mutes,
7552
7759
  navOpen: navOpen,
7553
7760
  openMobileNav: openMobileNav,
@@ -7563,7 +7770,7 @@ var Chat = function (props) {
7563
7770
 
7564
7771
  var UnMemoizedDateSeparator = function (props) {
7565
7772
  var date = props.date, formatDate = props.formatDate, _a = props.position, position = _a === void 0 ? 'right' : _a, unread = props.unread;
7566
- var _b = useTranslationContext(), t = _b.t, tDateTimeParser = _b.tDateTimeParser;
7773
+ var _b = useTranslationContext('DateSeparator'), t = _b.t, tDateTimeParser = _b.tDateTimeParser;
7567
7774
  if (typeof date === 'string')
7568
7775
  return null;
7569
7776
  var parsedDate = tDateTimeParser(date.toISOString());
@@ -7588,7 +7795,7 @@ var DateSeparator = React__default['default'].memo(UnMemoizedDateSeparator);
7588
7795
  var UnMemoizedEventComponent = function (props) {
7589
7796
  var _a, _b, _c;
7590
7797
  var _d = props.Avatar, Avatar$1 = _d === void 0 ? Avatar : _d, message = props.message;
7591
- var tDateTimeParser = useTranslationContext().tDateTimeParser;
7798
+ var tDateTimeParser = useTranslationContext('EventComponent').tDateTimeParser;
7592
7799
  var _e = message.created_at, created_at = _e === void 0 ? '' : _e, event = message.event, text = message.text, type = message.type;
7593
7800
  var dateFormatter = function (date, format) {
7594
7801
  var parsedDate = tDateTimeParser(date);
@@ -7743,10 +7950,10 @@ var getUserColor = function (theme, userId) {
7743
7950
  var UnMemoizedFixedHeightMessage = function (props) {
7744
7951
  var _a, _b, _c, _d;
7745
7952
  var propGroupedByUser = props.groupedByUser, propMessage = props.message;
7746
- var theme = useChatContext().theme;
7747
- var _e = useMessageContext(), contextGroupedByUser = _e.groupedByUser, contextMessage = _e.message;
7748
- var _f = useComponentContext().MessageDeleted, MessageDeleted$1 = _f === void 0 ? MessageDeleted : _f;
7749
- var userLanguage = useTranslationContext().userLanguage;
7953
+ var theme = useChatContext('FixedHeightMessage').theme;
7954
+ var _e = useMessageContext('FixedHeightMessage'), contextGroupedByUser = _e.groupedByUser, contextMessage = _e.message;
7955
+ var _f = useComponentContext('FixedHeightMessage').MessageDeleted, MessageDeleted$1 = _f === void 0 ? MessageDeleted : _f;
7956
+ var userLanguage = useTranslationContext('FixedHeightMessage').userLanguage;
7750
7957
  var groupedByUser = propGroupedByUser !== undefined ? propGroupedByUser : contextGroupedByUser;
7751
7958
  var message = propMessage || contextMessage;
7752
7959
  var handleAction = useActionHandler(message);
@@ -7790,7 +7997,7 @@ var FixedHeightMessage = React__default['default'].memo(UnMemoizedFixedHeightMes
7790
7997
 
7791
7998
  var MessageWithContext = function (props) {
7792
7999
  var canPin = props.canPin, groupedByUser = props.groupedByUser, propMessage = props.Message, message = props.message, _a = props.messageActions, messageActions = _a === void 0 ? Object.keys(MESSAGE_ACTIONS) : _a, propOnUserClick = props.onUserClick, propOnUserHover = props.onUserHover, userRoles = props.userRoles;
7793
- var contextMessage = useComponentContext().Message;
8000
+ var contextMessage = useComponentContext('Message').Message;
7794
8001
  var actionsEnabled = message.type === 'regular' && message.status === 'received';
7795
8002
  var MessageUIComponent = propMessage || contextMessage;
7796
8003
  var _b = useEditHandler(), clearEdit = _b.clearEdit, editing = _b.editing, setEdit = _b.setEdit;
@@ -7800,9 +8007,6 @@ var MessageWithContext = function (props) {
7800
8007
  }), onUserClick = _c.onUserClick, onUserHover = _c.onUserHover;
7801
8008
  var canDelete = userRoles.canDelete, canEdit = userRoles.canEdit, canFlag = userRoles.canFlag, canMute = userRoles.canMute, canQuote = userRoles.canQuote, canReact = userRoles.canReact, canReply = userRoles.canReply, isMyMessage = userRoles.isMyMessage;
7802
8009
  var messageActionsHandler = React.useCallback(function () {
7803
- if (!message || !messageActions) {
7804
- return [];
7805
- }
7806
8010
  return getMessageActions(messageActions, {
7807
8011
  canDelete: canDelete,
7808
8012
  canEdit: canEdit,
@@ -7832,8 +8036,8 @@ var MemoizedMessage = React__default['default'].memo(MessageWithContext, areMess
7832
8036
  */
7833
8037
  var Message = function (props) {
7834
8038
  var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage;
7835
- var addNotification = useChannelActionContext().addNotification;
7836
- var mutes = useChannelStateContext().mutes;
8039
+ var addNotification = useChannelActionContext('Message').addNotification;
8040
+ var mutes = useChannelStateContext('Message').mutes;
7837
8041
  var reactionSelectorRef = React.useRef(null);
7838
8042
  var handleAction = useActionHandler(message);
7839
8043
  var handleOpenThread = useOpenThreadHandler(message, propOpenThread);
@@ -7869,7 +8073,7 @@ var Message = function (props) {
7869
8073
  var MessageCommerceWithContext = function (props) {
7870
8074
  var _a, _b, _c, _d, _e, _f;
7871
8075
  var groupStyles = props.groupStyles, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
7872
- var _g = useComponentContext(), Attachment = _g.Attachment, _h = _g.Avatar, Avatar$1 = _h === void 0 ? Avatar : _h, _j = _g.MessageDeleted, MessageDeleted$1 = _j === void 0 ? MessageDeleted : _j, _k = _g.MessageRepliesCountButton, MessageRepliesCountButton$1 = _k === void 0 ? MessageRepliesCountButton : _k, _l = _g.MessageOptions, MessageOptions$1 = _l === void 0 ? MessageOptions : _l, _m = _g.MessageTimestamp, MessageTimestamp$1 = _m === void 0 ? MessageTimestamp : _m, _o = _g.ReactionSelector, ReactionSelector$1 = _o === void 0 ? ReactionSelector : _o, _p = _g.ReactionsList, ReactionsList$1 = _p === void 0 ? ReactionsList : _p;
8076
+ var _g = useComponentContext('MessageCommerce'), Attachment = _g.Attachment, _h = _g.Avatar, Avatar$1 = _h === void 0 ? Avatar : _h, _j = _g.MessageDeleted, MessageDeleted$1 = _j === void 0 ? MessageDeleted : _j, _k = _g.MessageRepliesCountButton, MessageRepliesCountButton$1 = _k === void 0 ? MessageRepliesCountButton : _k, _l = _g.MessageOptions, MessageOptions$1 = _l === void 0 ? MessageOptions : _l, _m = _g.MessageTimestamp, MessageTimestamp$1 = _m === void 0 ? MessageTimestamp : _m, _o = _g.ReactionSelector, ReactionSelector$1 = _o === void 0 ? ReactionSelector : _o, _p = _g.ReactionsList, ReactionsList$1 = _p === void 0 ? ReactionsList : _p;
7873
8077
  var hasAttachment = messageHasAttachments(message);
7874
8078
  var hasReactions = messageHasReactions(message);
7875
8079
  var firstGroupStyle = groupStyles ? groupStyles[0] : 'single';
@@ -7903,16 +8107,15 @@ var MemoizedMessageCommerce = React__default['default'].memo(MessageCommerceWith
7903
8107
  * UI component that renders a message and receives functionality from the Message/MessageList components
7904
8108
  */
7905
8109
  var MessageCommerce = function (props) {
7906
- var messageContext = useMessageContext();
8110
+ var messageContext = useMessageContext('MessageCommerce');
7907
8111
  return React__default['default'].createElement(MemoizedMessageCommerce, __assign({}, messageContext, props));
7908
8112
  };
7909
8113
 
7910
8114
  var MessageLivestreamWithContext = function (props) {
7911
8115
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
7912
8116
  var clearEditingState = props.clearEditingState, editing = props.editing, groupStyles = props.groupStyles, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, initialMessage = props.initialMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, messageWrapperRef = props.messageWrapperRef, onMentionsClickMessage = props.onMentionsClickMessage, onMentionsHoverMessage = props.onMentionsHoverMessage, onReactionListClick = props.onReactionListClick, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, _l = props.renderText, renderText$1 = _l === void 0 ? renderText : _l, showDetailedReactions = props.showDetailedReactions, unsafeHTML = props.unsafeHTML;
7913
- var _m = useComponentContext().QuotedMessage, QuotedMessage$1 = _m === void 0 ? QuotedMessage : _m;
7914
- var _o = useComponentContext(), Attachment = _o.Attachment, _p = _o.Avatar, Avatar$1 = _p === void 0 ? Avatar : _p, _q = _o.EditMessageInput, EditMessageInput = _q === void 0 ? EditMessageForm : _q, _r = _o.MessageDeleted, MessageDeleted$1 = _r === void 0 ? MessageDeleted : _r, _s = _o.MessageRepliesCountButton, MessageRepliesCountButton$1 = _s === void 0 ? MessageRepliesCountButton : _s, _t = _o.PinIndicator, PinIndicator$1 = _t === void 0 ? PinIndicator : _t, _u = _o.ReactionsList, ReactionsList = _u === void 0 ? SimpleReactionsList : _u, _v = _o.ReactionSelector, ReactionSelector$1 = _v === void 0 ? ReactionSelector : _v;
7915
- var _w = useTranslationContext(), t = _w.t, userLanguage = _w.userLanguage;
8117
+ var _m = useComponentContext('MessageLivestream'), Attachment = _m.Attachment, _o = _m.Avatar, Avatar$1 = _o === void 0 ? Avatar : _o, _p = _m.EditMessageInput, EditMessageInput = _p === void 0 ? EditMessageForm : _p, _q = _m.MessageDeleted, MessageDeleted$1 = _q === void 0 ? MessageDeleted : _q, _r = _m.MessageRepliesCountButton, MessageRepliesCountButton$1 = _r === void 0 ? MessageRepliesCountButton : _r, _s = _m.PinIndicator, PinIndicator$1 = _s === void 0 ? PinIndicator : _s, _t = _m.QuotedMessage, QuotedMessage$1 = _t === void 0 ? QuotedMessage : _t, _u = _m.ReactionsList, ReactionsList = _u === void 0 ? SimpleReactionsList : _u, _v = _m.ReactionSelector, ReactionSelector$1 = _v === void 0 ? ReactionSelector : _v;
8118
+ var _w = useTranslationContext('MessageLivestream'), t = _w.t, userLanguage = _w.userLanguage;
7916
8119
  var messageTextToRender = ((_a = message.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) || message.text;
7917
8120
  var messageText = React.useMemo(function () { return renderText$1(messageTextToRender, message.mentioned_users); }, [
7918
8121
  message.mentioned_users,
@@ -7975,8 +8178,8 @@ var MessageLivestreamWithContext = function (props) {
7975
8178
  };
7976
8179
  var MessageLivestreamActions = function (props) {
7977
8180
  var messageWrapperRef = props.messageWrapperRef, onReactionListClick = props.onReactionListClick;
7978
- var _a = useComponentContext().MessageTimestamp, MessageTimestamp$1 = _a === void 0 ? MessageTimestamp : _a;
7979
- var _b = useMessageContext(), getMessageActions = _b.getMessageActions, handleOpenThread = _b.handleOpenThread, initialMessage = _b.initialMessage, message = _b.message, threadList = _b.threadList;
8181
+ var _a = useComponentContext('MessageLivestream').MessageTimestamp, MessageTimestamp$1 = _a === void 0 ? MessageTimestamp : _a;
8182
+ var _b = useMessageContext('MessageLivestream'), getMessageActions = _b.getMessageActions, handleOpenThread = _b.handleOpenThread, initialMessage = _b.initialMessage, message = _b.message, threadList = _b.threadList;
7980
8183
  var _c = React.useState(false), actionsBoxOpen = _c[0], setActionsBoxOpen = _c[1];
7981
8184
  var hideOptions = React.useCallback(function () { return setActionsBoxOpen(false); }, []);
7982
8185
  var messageDeletedAt = !!message.deleted_at;
@@ -8037,7 +8240,7 @@ var MemoizedMessageLivestream = React__default['default'].memo(MessageLivestream
8037
8240
  * Implements the look and feel for a livestream use case.
8038
8241
  */
8039
8242
  var MessageLivestream = function (props) {
8040
- var messageContext = useMessageContext();
8243
+ var messageContext = useMessageContext('MessageLivestream');
8041
8244
  var messageWrapperRef = React.useRef(null);
8042
8245
  var reactionSelectorRef = React.useRef(null);
8043
8246
  var message = props.message || messageContext.message;
@@ -8048,8 +8251,8 @@ var MessageLivestream = function (props) {
8048
8251
  var MessageTeamWithContext = function (props) {
8049
8252
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
8050
8253
  var clearEditingState = props.clearEditingState, editing = props.editing, getMessageActions = props.getMessageActions, groupStyles = props.groupStyles, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, initialMessage = props.initialMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, messageWrapperRef = props.messageWrapperRef, onMentionsClickMessage = props.onMentionsClickMessage, onMentionsHoverMessage = props.onMentionsHoverMessage, onReactionListClick = props.onReactionListClick, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, _o = props.renderText, renderText$1 = _o === void 0 ? renderText : _o, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList, unsafeHTML = props.unsafeHTML;
8051
- var _p = useComponentContext(), Attachment = _p.Attachment, _q = _p.Avatar, Avatar$1 = _q === void 0 ? Avatar : _q, _r = _p.EditMessageInput, EditMessageInput = _r === void 0 ? EditMessageForm : _r, _s = _p.MessageDeleted, MessageDeleted$1 = _s === void 0 ? MessageDeleted : _s, _t = _p.MessageRepliesCountButton, MessageRepliesCountButton$1 = _t === void 0 ? MessageRepliesCountButton : _t, _u = _p.MessageTimestamp, MessageTimestamp$1 = _u === void 0 ? MessageTimestamp : _u, _v = _p.PinIndicator, PinIndicator$1 = _v === void 0 ? PinIndicator : _v, _w = _p.QuotedMessage, QuotedMessage$1 = _w === void 0 ? QuotedMessage : _w, _x = _p.ReactionsList, ReactionsList = _x === void 0 ? SimpleReactionsList : _x, _y = _p.ReactionSelector, ReactionSelector$1 = _y === void 0 ? ReactionSelector : _y;
8052
- var _z = useTranslationContext(), t = _z.t, userLanguage = _z.userLanguage;
8254
+ var _p = useComponentContext('MessageTeam'), Attachment = _p.Attachment, _q = _p.Avatar, Avatar$1 = _q === void 0 ? Avatar : _q, _r = _p.EditMessageInput, EditMessageInput = _r === void 0 ? EditMessageForm : _r, _s = _p.MessageDeleted, MessageDeleted$1 = _s === void 0 ? MessageDeleted : _s, _t = _p.MessageRepliesCountButton, MessageRepliesCountButton$1 = _t === void 0 ? MessageRepliesCountButton : _t, _u = _p.MessageTimestamp, MessageTimestamp$1 = _u === void 0 ? MessageTimestamp : _u, _v = _p.PinIndicator, PinIndicator$1 = _v === void 0 ? PinIndicator : _v, _w = _p.QuotedMessage, QuotedMessage$1 = _w === void 0 ? QuotedMessage : _w, _x = _p.ReactionsList, ReactionsList = _x === void 0 ? SimpleReactionsList : _x, _y = _p.ReactionSelector, ReactionSelector$1 = _y === void 0 ? ReactionSelector : _y;
8255
+ var _z = useTranslationContext('MessageTeam'), t = _z.t, userLanguage = _z.userLanguage;
8053
8256
  var messageActions = getMessageActions();
8054
8257
  var showActionsBox = showMessageActionsBox(messageActions);
8055
8258
  var shouldShowReplies = messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1 && !threadList;
@@ -8119,7 +8322,7 @@ var MemoizedMessageTeam = React__default['default'].memo(MessageTeamWithContext,
8119
8322
  * Implements the look and feel for a team style collaboration environment.
8120
8323
  */
8121
8324
  var MessageTeam = function (props) {
8122
- var messageContext = useMessageContext();
8325
+ var messageContext = useMessageContext('MessageTeam');
8123
8326
  var reactionSelectorRef = React.useRef(null);
8124
8327
  var messageWrapperRef = React.useRef(null);
8125
8328
  var message = props.message || messageContext.message;
@@ -8136,8 +8339,8 @@ var UnMemoizedCustomNotification = function (props) {
8136
8339
  var CustomNotification = React__default['default'].memo(UnMemoizedCustomNotification);
8137
8340
 
8138
8341
  var UnMemoizedConnectionStatus = function () {
8139
- var client = useChatContext().client;
8140
- var t = useTranslationContext().t;
8342
+ var client = useChatContext('ConnectionStatus').client;
8343
+ var t = useTranslationContext('ConnectionStatus').t;
8141
8344
  var _a = React.useState(true), online = _a[0], setOnline = _a[1];
8142
8345
  React.useEffect(function () {
8143
8346
  var connectionChanged = function (_a) {
@@ -8357,9 +8560,9 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
8357
8560
  };
8358
8561
 
8359
8562
  var useEnrichedMessages = function (args) {
8360
- var channel = args.channel, disableDateSeparator = args.disableDateSeparator, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser, threadList = args.threadList;
8361
- var client = useChatContext().client;
8362
- var HeaderComponent = useComponentContext().HeaderComponent;
8563
+ var channel = args.channel, disableDateSeparator = args.disableDateSeparator, groupStyles = args.groupStyles, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser, threadList = args.threadList;
8564
+ var client = useChatContext('useEnrichedMessages').client;
8565
+ var HeaderComponent = useComponentContext('useEnrichedMessages').HeaderComponent;
8363
8566
  var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
8364
8567
  var messagesWithDates = disableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator
8365
8568
  ? messages
@@ -8375,9 +8578,10 @@ var useEnrichedMessages = function (args) {
8375
8578
  if (HeaderComponent) {
8376
8579
  messagesWithDates = insertIntro(messagesWithDates, headerPosition);
8377
8580
  }
8581
+ var groupStylesFn = groupStyles || getGroupStyles;
8378
8582
  var messageGroupStyles = React.useMemo(function () {
8379
8583
  return messagesWithDates.reduce(function (acc, message, i) {
8380
- var style = getGroupStyles(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8584
+ var style = groupStylesFn(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8381
8585
  if (style)
8382
8586
  acc[message.id] = style;
8383
8587
  return acc;
@@ -8398,8 +8602,8 @@ var useLastReadData = function (props) {
8398
8602
 
8399
8603
  var useMessageListElements = function (props) {
8400
8604
  var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, onMessageLoadCaptured = props.onMessageLoadCaptured, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
8401
- var _a = useChatContext(), client = _a.client, customClasses = _a.customClasses;
8402
- var _b = useComponentContext(), _c = _b.DateSeparator, DateSeparator$1 = _c === void 0 ? DateSeparator : _c, HeaderComponent = _b.HeaderComponent, _d = _b.MessageSystem, MessageSystem = _d === void 0 ? EventComponent : _d;
8605
+ var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
8606
+ var _b = useComponentContext('useMessageListElements'), _c = _b.DateSeparator, DateSeparator$1 = _c === void 0 ? DateSeparator : _c, HeaderComponent = _b.HeaderComponent, _d = _b.MessageSystem, MessageSystem = _d === void 0 ? EventComponent : _d;
8403
8607
  // get the readData, but only for messages submitted by the user themselves
8404
8608
  var readData = useLastReadData({
8405
8609
  messages: enrichedMessages,
@@ -8427,7 +8631,7 @@ var useMessageListElements = function (props) {
8427
8631
  }
8428
8632
  var groupStyles = messageGroupStyles[message.id] || '';
8429
8633
  var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--" + groupStyles;
8430
- return (React__default['default'].createElement("li", { className: messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8634
+ return (React__default['default'].createElement("li", { className: messageClass, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8431
8635
  React__default['default'].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
8432
8636
  });
8433
8637
  }, [
@@ -8443,7 +8647,7 @@ var useMessageListElements = function (props) {
8443
8647
 
8444
8648
  function useMessageListScrollManager(params) {
8445
8649
  var onScrollBy = params.onScrollBy, scrollContainerMeasures = params.scrollContainerMeasures, scrolledUpThreshold = params.scrolledUpThreshold, scrollToBottom = params.scrollToBottom, showNewMessages = params.showNewMessages;
8446
- var client = useChatContext().client;
8650
+ var client = useChatContext('useMessageListScrollManager').client;
8447
8651
  var measures = React.useRef({
8448
8652
  offsetHeight: 0,
8449
8653
  scrollHeight: 0,
@@ -8586,14 +8790,25 @@ var UnMemoizedMessageNotification = function (props) {
8586
8790
  };
8587
8791
  var MessageNotification = React__default['default'].memo(UnMemoizedMessageNotification);
8588
8792
 
8793
+ var MessageListNotifications = function (props) {
8794
+ var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
8795
+ var t = useTranslationContext('MessageListNotifications').t;
8796
+ return (React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
8797
+ notifications.map(function (notification) { return (React__default['default'].createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
8798
+ React__default['default'].createElement(ConnectionStatus, null),
8799
+ React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
8800
+ };
8801
+
8589
8802
  /**
8590
8803
  * TypingIndicator lists users currently typing, it needs to be a child of Channel component
8591
8804
  */
8592
8805
  var UnMemoizedTypingIndicator = function (props) {
8593
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, _b = props.avatarSize, avatarSize = _b === void 0 ? 32 : _b, threadList = props.threadList;
8594
- var _c = useChannelStateContext(), channelConfig = _c.channelConfig, thread = _c.thread;
8595
- var client = useChatContext().client;
8596
- var _d = useTypingContext().typing, typing = _d === void 0 ? {} : _d;
8806
+ var PropAvatar = props.Avatar, _a = props.avatarSize, avatarSize = _a === void 0 ? 32 : _a, threadList = props.threadList;
8807
+ var _b = useChannelStateContext('TypingIndicator'), channelConfig = _b.channelConfig, thread = _b.thread;
8808
+ var client = useChatContext('TypingIndicator').client;
8809
+ var ContextAvatar = useComponentContext('TypingIndicator').Avatar;
8810
+ var _c = useTypingContext('TypingIndicator').typing, typing = _c === void 0 ? {} : _c;
8811
+ var Avatar$1 = PropAvatar || ContextAvatar || Avatar;
8597
8812
  if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.typing_events) === false) {
8598
8813
  return null;
8599
8814
  }
@@ -8625,23 +8840,17 @@ var UnMemoizedTypingIndicator = function (props) {
8625
8840
  };
8626
8841
  var TypingIndicator = React__default['default'].memo(UnMemoizedTypingIndicator);
8627
8842
 
8628
- var DefaultMessageListNotifications = function (props) {
8629
- var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
8630
- var t = useTranslationContext().t;
8631
- return (React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
8632
- notifications.map(function (notification) { return (React__default['default'].createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
8633
- React__default['default'].createElement(ConnectionStatus, null),
8634
- React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
8635
- };
8636
8843
  var useInternalInfiniteScrollProps = function (props) {
8637
- var _a = useComponentContext().LoadingIndicator, LoadingIndicator$1 = _a === void 0 ? LoadingIndicator : _a;
8844
+ var _a = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator$1 = _a === void 0 ? LoadingIndicator : _a;
8638
8845
  return __assign({ hasMore: props.hasMore, isLoading: props.loadingMore, loader: (React__default['default'].createElement(Center, { key: 'loadingindicator' },
8639
8846
  React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))), loadMore: useCallLoadMore(props.loadMore, props.messageLimit || 100) }, props.internalInfiniteScrollProps);
8640
8847
  };
8641
8848
  var MessageListWithContext = function (props) {
8642
- var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, _d = props.messageActions, messageActions = _d === void 0 ? Object.keys(MESSAGE_ACTIONS) : _d, _e = props.messages, messages = _e === void 0 ? [] : _e, notifications = props.notifications, _f = props.noGroupByUser, noGroupByUser = _f === void 0 ? false : _f, _g = props.pinPermissions, pinPermissions = _g === void 0 ? defaultPinPermissions : _g, _h = props.returnAllReadData, returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read;
8643
- var customClasses = useChatContext().customClasses;
8644
- var _l = useComponentContext(), _m = _l.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _l.MessageListNotifications, MessageListNotifications = _o === void 0 ? DefaultMessageListNotifications : _o, _p = _l.MessageNotification, MessageNotification$1 = _p === void 0 ? MessageNotification : _p, _q = _l.TypingIndicator, TypingIndicator$1 = _q === void 0 ? TypingIndicator : _q;
8849
+ var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, groupStyles = props.groupStyles, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, _d = props.messageActions, messageActions = _d === void 0 ? Object.keys(MESSAGE_ACTIONS) : _d, _e = props.messages, messages = _e === void 0 ? [] : _e, notifications = props.notifications, _f = props.noGroupByUser, noGroupByUser = _f === void 0 ? false : _f, _g = props.pinPermissions, pinPermissions = _g === void 0 ? defaultPinPermissions : _g, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
8850
+ _h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
8851
+ returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read;
8852
+ var customClasses = useChatContext('MessageList').customClasses;
8853
+ var _l = useComponentContext('MessageList'), _m = _l.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _l.MessageListNotifications, MessageListNotifications$1 = _o === void 0 ? MessageListNotifications : _o, _p = _l.MessageNotification, MessageNotification$1 = _p === void 0 ? MessageNotification : _p, _q = _l.TypingIndicator, TypingIndicator$1 = _q === void 0 ? TypingIndicator : _q;
8645
8854
  var _r = useScrollLocationLogic({
8646
8855
  messages: messages,
8647
8856
  scrolledUpThreshold: props.scrolledUpThreshold,
@@ -8649,6 +8858,7 @@ var MessageListWithContext = function (props) {
8649
8858
  var _s = useEnrichedMessages({
8650
8859
  channel: channel,
8651
8860
  disableDateSeparator: disableDateSeparator,
8861
+ groupStyles: groupStyles,
8652
8862
  headerPosition: headerPosition,
8653
8863
  hideDeletedMessages: hideDeletedMessages,
8654
8864
  hideNewMessageSeparator: hideNewMessageSeparator,
@@ -8698,7 +8908,7 @@ var MessageListWithContext = function (props) {
8698
8908
  React__default['default'].createElement("ul", { className: 'str-chat__ul' }, elements),
8699
8909
  React__default['default'].createElement(TypingIndicator$1, { threadList: threadList }),
8700
8910
  React__default['default'].createElement("div", { key: 'bottom' })))),
8701
- React__default['default'].createElement(MessageListNotifications, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom })));
8911
+ React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom })));
8702
8912
  };
8703
8913
  /**
8704
8914
  * The MessageList component renders a list of Messages.
@@ -8709,8 +8919,8 @@ var MessageListWithContext = function (props) {
8709
8919
  * - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)
8710
8920
  */
8711
8921
  var MessageList = function (props) {
8712
- var loadMore = useChannelActionContext().loadMore;
8713
- var _a = useChannelStateContext(); _a.members; // eslint-disable-line @typescript-eslint/no-unused-vars
8922
+ var loadMore = useChannelActionContext('MessageList').loadMore;
8923
+ var _a = useChannelStateContext('MessageList'); _a.members; // eslint-disable-line @typescript-eslint/no-unused-vars
8714
8924
  _a.mutes; // eslint-disable-line @typescript-eslint/no-unused-vars
8715
8925
  _a.watchers; // eslint-disable-line @typescript-eslint/no-unused-vars
8716
8926
  var restChannelStateContext = __rest(_a, ["members", "mutes", "watchers"]);
@@ -8719,7 +8929,7 @@ var MessageList = function (props) {
8719
8929
 
8720
8930
  var useGiphyPreview = function (separateGiphyPreview) {
8721
8931
  var _a = React.useState(), giphyPreviewMessage = _a[0], setGiphyPreviewMessage = _a[1];
8722
- var client = useChatContext().client;
8932
+ var client = useChatContext('useGiphyPreview').client;
8723
8933
  React.useEffect(function () {
8724
8934
  var handleEvent = function (event) {
8725
8935
  var message = event.message, user = event.user;
@@ -8825,15 +9035,14 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
8825
9035
 
8826
9036
  var PREPEND_OFFSET = Math.pow(10, 7);
8827
9037
  var VirtualizedMessageListWithContext = function (props) {
8828
- var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, _e = props.overscan, overscan = _e === void 0 ? 0 : _e,
9038
+ var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, notifications = props.notifications, _e = props.overscan, overscan = _e === void 0 ? 0 : _e,
8829
9039
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
8830
9040
  scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _f = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _f === void 0 ? false : _f, _g = props.separateGiphyPreview, separateGiphyPreview = _g === void 0 ? false : _g, _h = props.shouldGroupByUser, shouldGroupByUser = _h === void 0 ? false : _h, _j = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _j === void 0 ? 'smooth' : _j;
8831
- var _k = useComponentContext(), _l = _k.DateSeparator, DateSeparator$1 = _l === void 0 ? DateSeparator : _l, _m = _k.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _k.GiphyPreviewMessage, GiphyPreviewMessage$1 = _o === void 0 ? GiphyPreviewMessage : _o, _p = _k.LoadingIndicator, LoadingIndicator$1 = _p === void 0 ? LoadingIndicator : _p, _q = _k.MessageNotification, MessageNotification$1 = _q === void 0 ? MessageNotification : _q, _r = _k.MessageSystem, MessageSystem = _r === void 0 ? EventComponent : _r, _s = _k.TypingIndicator, TypingIndicator = _s === void 0 ? null : _s, _t = _k.VirtualMessage, contextMessage = _t === void 0 ? MessageSimple : _t;
8832
- var _u = useChatContext(), client = _u.client, customClasses = _u.customClasses;
8833
- var t = useTranslationContext().t;
9041
+ var _k = useComponentContext('VirtualizedMessageList'), _l = _k.DateSeparator, DateSeparator$1 = _l === void 0 ? DateSeparator : _l, _m = _k.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _k.GiphyPreviewMessage, GiphyPreviewMessage$1 = _o === void 0 ? GiphyPreviewMessage : _o, _p = _k.LoadingIndicator, LoadingIndicator$1 = _p === void 0 ? LoadingIndicator : _p, _q = _k.MessageListNotifications, MessageListNotifications$1 = _q === void 0 ? MessageListNotifications : _q, _r = _k.MessageNotification, MessageNotification$1 = _r === void 0 ? MessageNotification : _r, _s = _k.MessageSystem, MessageSystem = _s === void 0 ? EventComponent : _s, _t = _k.TypingIndicator, TypingIndicator = _t === void 0 ? null : _t, _u = _k.VirtualMessage, contextMessage = _u === void 0 ? MessageSimple : _u;
9042
+ var _v = useChatContext('VirtualizedMessageList'), client = _v.client, customClasses = _v.customClasses;
8834
9043
  var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
8835
9044
  var MessageUIComponent = propMessage || contextMessage;
8836
- var _v = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _v.giphyPreviewMessage, setGiphyPreviewMessage = _v.setGiphyPreviewMessage;
9045
+ var _w = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _w.giphyPreviewMessage, setGiphyPreviewMessage = _w.setGiphyPreviewMessage;
8837
9046
  var processedMessages = React.useMemo(function () {
8838
9047
  if (typeof messages === 'undefined') {
8839
9048
  return [];
@@ -8864,7 +9073,7 @@ var VirtualizedMessageListWithContext = function (props) {
8864
9073
  client.userID,
8865
9074
  ]);
8866
9075
  var virtuoso = React.useRef(null);
8867
- var _w = useNewMessageNotification(processedMessages, client.userID), atBottom = _w.atBottom, newMessagesNotification = _w.newMessagesNotification, setNewMessagesNotification = _w.setNewMessagesNotification;
9076
+ var _x = useNewMessageNotification(processedMessages, client.userID), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
8868
9077
  var scrollToBottom = React.useCallback(function () {
8869
9078
  if (virtuoso.current) {
8870
9079
  virtuoso.current.scrollToIndex(processedMessages.length - 1);
@@ -8953,9 +9162,8 @@ var VirtualizedMessageListWithContext = function (props) {
8953
9162
  var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
8954
9163
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
8955
9164
  React__default['default'].createElement("div", { className: virtualizedMessageListClass },
8956
- React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, initialTopMostItemIndex: processedMessages.length ? processedMessages.length - 1 : 0, itemContent: function (i) { return messageRenderer(processedMessages, i); }, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))),
8957
- React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
8958
- React__default['default'].createElement(MessageNotification$1, { onClick: scrollToBottom, showNotification: newMessagesNotification }, t('New Messages!')))),
9165
+ React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, initialTopMostItemIndex: processedMessages.length ? processedMessages.length - 1 : 0, itemContent: function (i) { return messageRenderer(processedMessages, i); }, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
9166
+ React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom }),
8959
9167
  giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
8960
9168
  };
8961
9169
  /**
@@ -8965,26 +9173,25 @@ var VirtualizedMessageListWithContext = function (props) {
8965
9173
  * **Note**: It works well when there are thousands of messages in a channel, it has a shortcoming though - the message UI should have a fixed height.
8966
9174
  */
8967
9175
  function VirtualizedMessageList(props) {
8968
- var loadMore = useChannelActionContext().loadMore;
8969
- var _a = useChannelStateContext(), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages;
9176
+ var loadMore = useChannelActionContext('VirtualizedMessageList').loadMore;
9177
+ var _a = useChannelStateContext('VirtualizedMessageList'), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages, notifications = _a.notifications;
8970
9178
  var messages = props.messages || contextMessages;
8971
- return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages }, props)));
9179
+ return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages, notifications: notifications }, props)));
8972
9180
  }
8973
9181
 
8974
9182
  /**
8975
9183
  * The Thread component renders a parent Message with a list of replies
8976
9184
  */
8977
9185
  var Thread = function (props) {
8978
- var _a, _b;
8979
- var _c = useChannelStateContext(), channel = _c.channel, thread = _c.thread;
8980
- if (!thread || ((_b = (_a = channel === null || channel === void 0 ? void 0 : channel.getConfig) === null || _a === void 0 ? void 0 : _a.call(channel)) === null || _b === void 0 ? void 0 : _b.replies) === false)
9186
+ var _a = useChannelStateContext('Thread'), channel = _a.channel, channelConfig = _a.channelConfig, thread = _a.thread;
9187
+ if (!thread || (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) === false)
8981
9188
  return null;
8982
9189
  // The wrapper ensures a key variable is set and the component recreates on thread switch
8983
9190
  return React__default['default'].createElement(ThreadInner, __assign({}, props, { key: "thread-" + thread.id + "-" + (channel === null || channel === void 0 ? void 0 : channel.cid) }));
8984
9191
  };
8985
9192
  var DefaultThreadHeader = function (props) {
8986
9193
  var closeThread = props.closeThread, thread = props.thread;
8987
- var t = useTranslationContext().t;
9194
+ var t = useTranslationContext('Thread').t;
8988
9195
  var getReplyCount = function () {
8989
9196
  if (!thread.reply_count)
8990
9197
  return '';
@@ -9003,15 +9210,15 @@ var DefaultThreadHeader = function (props) {
9003
9210
  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' })))));
9004
9211
  };
9005
9212
  var DefaultThreadStart = function () {
9006
- var t = useTranslationContext().t;
9213
+ var t = useTranslationContext('Thread').t;
9007
9214
  return React__default['default'].createElement("div", { className: 'str-chat__thread-start' }, t('Start of a new thread'));
9008
9215
  };
9009
9216
  var ThreadInner = function (props) {
9010
9217
  var additionalMessageInputProps = props.additionalMessageInputProps, additionalMessageListProps = props.additionalMessageListProps, additionalParentMessageProps = props.additionalParentMessageProps, additionalVirtualizedMessageListProps = props.additionalVirtualizedMessageListProps, _a = props.autoFocus, autoFocus = _a === void 0 ? true : _a, _b = props.fullWidth, fullWidth = _b === void 0 ? false : _b, PropInput = props.Input, PropMessage = props.Message, virtualized = props.virtualized;
9011
- var _c = useChannelStateContext(), thread = _c.thread, threadHasMore = _c.threadHasMore, threadLoadingMore = _c.threadLoadingMore, threadMessages = _c.threadMessages;
9012
- var _d = useChannelActionContext(), closeThread = _d.closeThread, loadMoreThread = _d.loadMoreThread;
9013
- var customClasses = useChatContext().customClasses;
9014
- var _e = useComponentContext(), ContextInput = _e.ThreadInput, ContextMessage = _e.Message, _f = _e.ThreadHeader, ThreadHeader = _f === void 0 ? DefaultThreadHeader : _f, _g = _e.ThreadStart, ThreadStart = _g === void 0 ? DefaultThreadStart : _g, _h = _e.VirtualMessage, VirtualMessage = _h === void 0 ? FixedHeightMessage : _h;
9218
+ var _c = useChannelStateContext('Thread'), thread = _c.thread, threadHasMore = _c.threadHasMore, threadLoadingMore = _c.threadLoadingMore, threadMessages = _c.threadMessages;
9219
+ var _d = useChannelActionContext('Thread'), closeThread = _d.closeThread, loadMoreThread = _d.loadMoreThread;
9220
+ var customClasses = useChatContext('Thread').customClasses;
9221
+ var _e = useComponentContext('Thread'), ContextInput = _e.ThreadInput, ContextMessage = _e.Message, _f = _e.ThreadHeader, ThreadHeader = _f === void 0 ? DefaultThreadHeader : _f, _g = _e.ThreadStart, ThreadStart = _g === void 0 ? DefaultThreadStart : _g, _h = _e.VirtualMessage, VirtualMessage = _h === void 0 ? FixedHeightMessage : _h;
9015
9222
  var messageList = React.useRef(null);
9016
9223
  var ThreadInput = PropInput || (additionalMessageInputProps === null || additionalMessageInputProps === void 0 ? void 0 : additionalMessageInputProps.Input) || ContextInput || MessageInputSmall;
9017
9224
  var ThreadMessage = PropMessage || (additionalMessageListProps === null || additionalMessageListProps === void 0 ? void 0 : additionalMessageListProps.Message);
@@ -9045,7 +9252,7 @@ var ThreadInner = function (props) {
9045
9252
 
9046
9253
  var UnMemoizedWindow = function (props) {
9047
9254
  var children = props.children, _a = props.hideOnThread, hideOnThread = _a === void 0 ? false : _a;
9048
- var thread = useChannelStateContext().thread;
9255
+ var thread = useChannelStateContext('Window').thread;
9049
9256
  // If thread is active and window should hide on thread. Return null
9050
9257
  if (thread && hideOnThread)
9051
9258
  return null;
@@ -9177,6 +9384,7 @@ exports.deTranslations = deTranslations;
9177
9384
  exports.defaultPinPermissions = defaultPinPermissions;
9178
9385
  exports.defaultScrollToItem = defaultScrollToItem;
9179
9386
  exports.defaultTimestampFormat = defaultTimestampFormat;
9387
+ exports.emojiMarkdownPlugin = emojiMarkdownPlugin;
9180
9388
  exports.enTranslations = enTranslations;
9181
9389
  exports.esTranslations = esTranslations;
9182
9390
  exports.escapeRegExp = escapeRegExp;
@@ -9185,14 +9393,18 @@ exports.generateRandomId = generateRandomId;
9185
9393
  exports.getChannel = getChannel;
9186
9394
  exports.getDisplayImage = getDisplayImage;
9187
9395
  exports.getDisplayTitle = getDisplayTitle;
9396
+ exports.getGroupStyles = getGroupStyles;
9188
9397
  exports.getImages = getImages;
9398
+ exports.getLastReceived = getLastReceived;
9189
9399
  exports.getLatestMessagePreview = getLatestMessagePreview;
9190
9400
  exports.getMessageActions = getMessageActions;
9191
9401
  exports.getNonImageAttachments = getNonImageAttachments;
9192
9402
  exports.getReadByTooltipText = getReadByTooltipText;
9403
+ exports.getReadStates = getReadStates;
9193
9404
  exports.getWholeChar = getWholeChar;
9194
9405
  exports.handleActionWarning = handleActionWarning;
9195
9406
  exports.hiTranslations = hiTranslations;
9407
+ exports.insertIntro = insertIntro;
9196
9408
  exports.isAudioAttachment = isAudioAttachment;
9197
9409
  exports.isChannel = isChannel;
9198
9410
  exports.isDate = isDate;
@@ -9209,6 +9421,10 @@ exports.itTranslations = itTranslations;
9209
9421
  exports.jaTranslations = jaTranslations;
9210
9422
  exports.koTranslations = koTranslations;
9211
9423
  exports.listener = Listeners;
9424
+ exports.markDownRenderers = markDownRenderers;
9425
+ exports.matchMarkdownLinks = matchMarkdownLinks;
9426
+ exports.mentionsMarkdownPlugin = mentionsMarkdownPlugin;
9427
+ exports.messageCodeBlocks = messageCodeBlocks;
9212
9428
  exports.messageHasAttachments = messageHasAttachments;
9213
9429
  exports.messageHasReactions = messageHasReactions;
9214
9430
  exports.missingUseFlagHandlerParameterWarning = missingUseFlagHandlerParameterWarning;
@@ -9217,6 +9433,7 @@ exports.moveChannelUp = moveChannelUp;
9217
9433
  exports.nlTranslations = nlTranslations;
9218
9434
  exports.noParsingFunctionWarning = noParsingFunctionWarning;
9219
9435
  exports.notValidDateWarning = notValidDateWarning;
9436
+ exports.processMessages = processMessages;
9220
9437
  exports.ptTranslations = ptTranslations;
9221
9438
  exports.reactionHandlerWarning = reactionHandlerWarning;
9222
9439
  exports.renderAttachmentActions = renderAttachmentActions;