stream-chat-react 6.9.1 → 6.12.1

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 (247) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.full-bundle.js +2053 -667
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +4 -4
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Attachment/Card.d.ts.map +1 -1
  7. package/dist/components/Attachment/Card.js +2 -4
  8. package/dist/components/AutoCompleteTextarea/Header.d.ts +2 -0
  9. package/dist/components/AutoCompleteTextarea/Header.d.ts.map +1 -1
  10. package/dist/components/AutoCompleteTextarea/Header.js +10 -9
  11. package/dist/components/AutoCompleteTextarea/List.js +1 -1
  12. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  13. package/dist/components/AutoCompleteTextarea/Textarea.js +23 -13
  14. package/dist/components/Channel/Channel.d.ts +8 -3
  15. package/dist/components/Channel/Channel.d.ts.map +1 -1
  16. package/dist/components/Channel/Channel.js +26 -12
  17. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +2 -10
  18. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  19. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +11 -5
  20. package/dist/components/Channel/hooks/useEditMessageHandler.js +1 -1
  21. package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
  22. package/dist/components/ChannelHeader/ChannelHeader.js +3 -3
  23. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  24. package/dist/components/ChannelList/ChannelList.js +5 -8
  25. package/dist/components/ChannelList/ChannelListMessenger.d.ts +2 -0
  26. package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
  27. package/dist/components/ChannelList/hooks/useChannelDeletedListener.js +1 -1
  28. package/dist/components/ChannelList/hooks/useChannelHiddenListener.js +1 -1
  29. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.js +1 -1
  30. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +1 -1
  31. package/dist/components/ChannelList/hooks/useChannelVisibleListener.js +1 -1
  32. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.js +1 -1
  33. package/dist/components/ChannelList/hooks/useMessageNewListener.js +1 -1
  34. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
  35. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +1 -1
  36. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
  37. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.js +1 -1
  38. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
  39. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.js +1 -1
  40. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  41. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +1 -0
  42. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.js +1 -1
  43. package/dist/components/ChannelPreview/ChannelPreview.js +2 -2
  44. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.js +1 -1
  45. package/dist/components/ChannelSearch/ChannelSearch.js +1 -1
  46. package/dist/components/ChannelSearch/SearchInput.js +1 -1
  47. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  48. package/dist/components/Chat/Chat.d.ts +1 -1
  49. package/dist/components/Chat/Chat.d.ts.map +1 -1
  50. package/dist/components/Chat/Chat.js +2 -1
  51. package/dist/components/Chat/hooks/useChat.d.ts +2 -1
  52. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  53. package/dist/components/Chat/hooks/useChat.js +13 -6
  54. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  55. package/dist/components/Chat/hooks/useCreateChatContext.js +3 -2
  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 +4 -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 +1 -1
  126. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  127. package/dist/components/MessageInput/hooks/useAttachments.js +4 -2
  128. package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
  129. package/dist/components/MessageInput/hooks/useCommandTrigger.js +2 -3
  130. package/dist/components/MessageInput/hooks/useCooldownTimer.js +2 -2
  131. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  132. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +6 -1
  133. package/dist/components/MessageInput/hooks/useEmojiIndex.js +1 -1
  134. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts +1 -1
  135. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts.map +1 -1
  136. package/dist/components/MessageInput/hooks/useEmojiPicker.js +12 -4
  137. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  138. package/dist/components/MessageInput/hooks/useFileUploads.js +32 -16
  139. package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
  140. package/dist/components/MessageInput/hooks/useImageUploads.js +32 -16
  141. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +14 -3
  142. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  143. package/dist/components/MessageInput/hooks/useMessageInputState.js +16 -8
  144. package/dist/components/MessageInput/hooks/useMessageInputText.js +1 -1
  145. package/dist/components/MessageInput/hooks/useSubmitHandler.js +3 -3
  146. package/dist/components/MessageInput/hooks/useUserTrigger.js +3 -2
  147. package/dist/components/MessageInput/hooks/utils.d.ts +15 -1
  148. package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
  149. package/dist/components/MessageInput/hooks/utils.js +60 -4
  150. package/dist/components/MessageInput/icons.js +5 -5
  151. package/dist/components/MessageList/ConnectionStatus.js +2 -2
  152. package/dist/components/MessageList/MessageList.d.ts +4 -9
  153. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  154. package/dist/components/MessageList/MessageList.js +11 -18
  155. package/dist/components/MessageList/MessageListNotifications.d.ts +11 -0
  156. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -0
  157. package/dist/components/MessageList/MessageListNotifications.js +12 -0
  158. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  159. package/dist/components/MessageList/VirtualizedMessageList.js +13 -14
  160. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts +1 -0
  161. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
  162. package/dist/components/MessageList/hooks/useEnrichedMessages.js +5 -4
  163. package/dist/components/MessageList/hooks/useGiphyPreview.js +1 -1
  164. package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
  165. package/dist/components/MessageList/hooks/useMessageListElements.js +3 -3
  166. package/dist/components/MessageList/hooks/useMessageListScrollManager.js +1 -1
  167. package/dist/components/MessageList/index.d.ts +1 -0
  168. package/dist/components/MessageList/index.d.ts.map +1 -1
  169. package/dist/components/MessageList/index.js +1 -0
  170. package/dist/components/Modal/Modal.js +1 -1
  171. package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
  172. package/dist/components/Reactions/ReactionSelector.js +3 -3
  173. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  174. package/dist/components/Reactions/ReactionsList.js +2 -2
  175. package/dist/components/Reactions/SimpleReactionsList.js +2 -2
  176. package/dist/components/Thread/Thread.d.ts.map +1 -1
  177. package/dist/components/Thread/Thread.js +8 -9
  178. package/dist/components/TypingIndicator/TypingIndicator.d.ts +3 -3
  179. package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  180. package/dist/components/TypingIndicator/TypingIndicator.js +7 -4
  181. package/dist/components/Window/Window.js +1 -1
  182. package/dist/context/ChannelActionContext.d.ts +1 -1
  183. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  184. package/dist/context/ChannelActionContext.js +3 -5
  185. package/dist/context/ChannelStateContext.d.ts +4 -2
  186. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  187. package/dist/context/ChannelStateContext.js +3 -5
  188. package/dist/context/ChatContext.d.ts +4 -2
  189. package/dist/context/ChatContext.d.ts.map +1 -1
  190. package/dist/context/ChatContext.js +3 -5
  191. package/dist/context/ComponentContext.d.ts +3 -3
  192. package/dist/context/ComponentContext.d.ts.map +1 -1
  193. package/dist/context/ComponentContext.js +3 -5
  194. package/dist/context/EmojiContext.d.ts +1 -1
  195. package/dist/context/EmojiContext.d.ts.map +1 -1
  196. package/dist/context/EmojiContext.js +3 -4
  197. package/dist/context/MessageContext.d.ts +2 -2
  198. package/dist/context/MessageContext.d.ts.map +1 -1
  199. package/dist/context/MessageContext.js +3 -5
  200. package/dist/context/MessageInputContext.d.ts +3 -3
  201. package/dist/context/MessageInputContext.d.ts.map +1 -1
  202. package/dist/context/MessageInputContext.js +3 -5
  203. package/dist/context/TranslationContext.d.ts +1 -1
  204. package/dist/context/TranslationContext.d.ts.map +1 -1
  205. package/dist/context/TranslationContext.js +3 -2
  206. package/dist/context/TypingContext.d.ts +1 -1
  207. package/dist/context/TypingContext.d.ts.map +1 -1
  208. package/dist/context/TypingContext.js +3 -5
  209. package/dist/css/index.css +1 -1
  210. package/dist/i18n/Streami18n.d.ts +1 -0
  211. package/dist/i18n/Streami18n.d.ts.map +1 -1
  212. package/dist/i18n/Streami18n.js +7 -7
  213. package/dist/i18n/de.json +5 -4
  214. package/dist/i18n/en.json +1 -0
  215. package/dist/i18n/es.json +1 -0
  216. package/dist/i18n/fr.json +1 -0
  217. package/dist/i18n/hi.json +1 -0
  218. package/dist/i18n/it.json +1 -0
  219. package/dist/i18n/ja.json +1 -0
  220. package/dist/i18n/ko.json +1 -0
  221. package/dist/i18n/nl.json +1 -0
  222. package/dist/i18n/pt.json +1 -0
  223. package/dist/i18n/ru.json +1 -0
  224. package/dist/i18n/tr.json +1 -0
  225. package/dist/index.cjs.js +615 -435
  226. package/dist/index.cjs.js.map +1 -1
  227. package/dist/scss/Card.scss +10 -0
  228. package/dist/scss/ChannelListMessenger.scss +4 -0
  229. package/dist/scss/ChannelSearch.scss +1 -1
  230. package/dist/scss/EditMessageForm.scss +4 -0
  231. package/dist/scss/LoadMoreButton.scss +5 -0
  232. package/dist/scss/Message.scss +10 -5
  233. package/dist/scss/MessageActions.scss +12 -0
  234. package/dist/scss/MessageInput.scss +15 -0
  235. package/dist/scss/MessageInputFlat.scss +12 -1
  236. package/dist/scss/Modal.scss +7 -2
  237. package/dist/scss/_base.scss +14 -0
  238. package/dist/scss/_variables.scss +2 -0
  239. package/dist/types/types.d.ts +1 -0
  240. package/dist/types/types.d.ts.map +1 -1
  241. package/dist/utils.d.ts +7 -0
  242. package/dist/utils.d.ts.map +1 -1
  243. package/dist/utils.js +6 -6
  244. package/dist/version.d.ts +1 -1
  245. package/dist/version.d.ts.map +1 -1
  246. package/dist/version.js +1 -1
  247. package/package.json +14 -10
package/dist/index.cjs.js CHANGED
@@ -278,8 +278,6 @@ var UnMemoizedSafeAnchor = function (props) {
278
278
  };
279
279
  var SafeAnchor = React__default['default'].memo(UnMemoizedSafeAnchor);
280
280
 
281
- var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAkCAYAAAB/up84AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABVhJREFUeNrsW6GS20AMdToGBgEGAQYBBgEBBQYFgQcP5hMO9jP6CYWFBwsPBgYUGBQEFAQUGAQYBBgYGHjmutt5O6NupbXXcZJrx5rJXGyv11o96Ukr52avr6/BJG9HZmMBMpvNYnxt1JzNZNoRAYFxM2Z8rT6FuueMcaH6s1KfhBn3U42r1Jg1rrfq+Bt5xgf1Z64+uQFQndNzLc1Ydfwg6F2p6wd1PVXfU+b6Gc9vHGuh8+jrsXVN61Sq64XggNw95tlH9XmP6y3W2OI+qvN3db6mN7/zBFAb8L2aNMJxRsDQC6jIuEyN039LnAvV8QJKRRijZUHmT8iiLpEFDHKJaB1TGN732WuAokEIDQCwhwGjsMEIMNgp6qY9JlsTgyXquCFG1d54IsbOsKAVPLDBcQJjUxB0RJwAltGntNQ46GhzqPnb0y0954RG/1iLQ7SRCkR+guiPtW6GFRg5gAlCrFvbJEZ0ngDAUn0/Y77fDCJFXuiB/AmGDC3PLg0YWLRW5CcJWWPglNxDKS6C59AcZBs/sYxbOQBqHHkuZYCsGCds4SQJDDx3RK3RjUb9EfMUcLQ57BHS64MAIYtYkvEt+d4wCzqr++ipkoTtkihOI2chREfA5KiC0GOAaMig05zoWJPjgMk39jxcPphDR0mSDrtq438g51iq8omQlEnYJfHoiAFxYQGko6bCPSmZ5wS+TRx0Zc5R4CtmHbEVJT+0p1uOYdNE1SMfOKNO0zXWEmItptApsfYa1LV0UZUPIHSCmlRYJhfokNWhX5IcsmIWbEAMCQWerWirhZK57MghNQyzgke3QuQWPUv4EAac9wCuJjmkNmvUNEwiobX+DgdEWoQGgNDPGtTWWhRRWONX5JlnePCZhP1JUCOzPN1O0C2MohP7xuiko8Qy9INUDBg2YPJMlzP8pRv0qYeUdu+Cy+RAKIYmtVqojM5kkS0DwkXlLuY0ICzgAEOlAd8fPe+rYJdppz61TiZ5G4AgcScWz05RcUtAkOwyJMtI4FzNt3suCWKfwLUhdqRC0yA/enB1CZ4vBZ2fhIptJ4x/5PYVavyzQ39N0V8ddnsQ+m3sfX02hjo3bIVJ7d5PhqojZxYdC3NEdv9oQMQWFFjHHqpLEsc9BZyF23c9cG0ZOJjUIN15V1mY8OOAhW0E77yWaP2eoO9VBFG/d6yX6/xuHT2z3AsQ5ImnjrZBF6XcUiKAEl0RlJzZ7ZtnbxmqSgRqfxmyD9k6wNDGzuExecB3Z1/ukBOjQH73MZbspChFp9nQ/EYY9+LaaIYOqlo7JjwISX+LcBwbjAOz2ZKS7BpOcq0o0R2HvZAbHpHPJGc+dm00paQuedmOA4O0WD5fyQ4V08Ip4ATxhYl8CCh76/0QLVyehlBVFyCpYJTcKmPjHoY8XNE2VQ8dbIkdr4Z95npBwcNVahKzNEMBSYSyz46iLm8sLunreG5O+xYTsaMUHYu6bMn79sRCT2+8l6SMV2cCT5e3UspBXbbd9n3nDIN/Q1KP3JDfWLcd8kZwCVX12hjeOlmOIMe+L6FGjJLC4QS5rz6hg/tThjZiU0Pr/g7D65/uCUafKgaUJu0lHjvox/XsjXA+GAOQUogIXV8/v7GoKOGJfYuHxvHjt7t3rEMHD2+E5PoR+5GCLCS+8g6Z2xgGt6anuwGC99MSKAl6RrfUs/ofje+b1PcjlJBlMMk4gKBUe77AqKVP/T1Jj30IQPmCTdkm6NeKb5BkJzCGdCA8XuFGZIOWCBEh/mwGiZ/rFZXk3xHEdkjHb6MknVOhypJe+Sac03XlL4fe3r81mH518q9GyCS3kV8CDADlsrVaJhTLAgAAAABJRU5ErkJggg==";
282
-
283
281
  var getDisplayName = function (Component) {
284
282
  return Component.displayName || Component.name || 'Component';
285
283
  };
@@ -308,10 +306,11 @@ var TranslationProvider = function (_a) {
308
306
  var children = _a.children, value = _a.value;
309
307
  return (React__default['default'].createElement(TranslationContext.Provider, { value: value }, children));
310
308
  };
311
- var useTranslationContext = function () {
309
+ var useTranslationContext = function (componentName) {
312
310
  var contextValue = React.useContext(TranslationContext);
313
311
  if (!contextValue) {
314
- throw new Error('The useTranslationContext hook was called outside of the TranslationContext provider. Make sure this hook is called within a child of the Chat component.');
312
+ 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.");
313
+ return {};
315
314
  }
316
315
  return contextValue;
317
316
  };
@@ -326,7 +325,7 @@ var withTranslationContext = function (Component) {
326
325
 
327
326
  var UnMemoizedCard = function (props) {
328
327
  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;
329
- var t = useTranslationContext().t;
328
+ var t = useTranslationContext('Card').t;
330
329
  var image = thumb_url || image_url;
331
330
  var trimUrl = function (url) {
332
331
  if (url !== undefined && url !== null) {
@@ -350,8 +349,7 @@ var UnMemoizedCard = function (props) {
350
349
  React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--flex' },
351
350
  title && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--title' }, title),
352
351
  text && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--text' }, text),
353
- (title_link || og_scrape_url) && (React__default['default'].createElement(SafeAnchor, { className: 'str-chat__message-attachment-card--url', href: title_link || og_scrape_url, rel: 'noopener noreferrer', target: '_blank' }, trimUrl(title_link || og_scrape_url)))),
354
- type === 'giphy' && (React__default['default'].createElement("img", { alt: 'giphy logo', className: 'str-chat__message-attachment-card__giphy-logo', "data-testid": 'card-giphy', src: img$1 })))));
352
+ (title_link || og_scrape_url) && (React__default['default'].createElement(SafeAnchor, { className: 'str-chat__message-attachment-card--url', href: title_link || og_scrape_url, rel: 'noopener noreferrer', target: '_blank' }, trimUrl(title_link || og_scrape_url)))))));
355
353
  };
356
354
  /**
357
355
  * Simple Card Layout for displaying links
@@ -387,7 +385,7 @@ var UnMemoizedGallery = function (props) {
387
385
  var images = props.images;
388
386
  var _a = React.useState(0), index = _a[0], setIndex = _a[1];
389
387
  var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
390
- var t = useTranslationContext().t;
388
+ var t = useTranslationContext('Gallery').t;
391
389
  var toggleModal = function (selectedIndex) {
392
390
  if (modalOpen) {
393
391
  setModalOpen(false);
@@ -621,10 +619,11 @@ var ComponentProvider = function (_a) {
621
619
  var children = _a.children, value = _a.value;
622
620
  return (React__default['default'].createElement(ComponentContext.Provider, { value: value }, children));
623
621
  };
624
- var useComponentContext = function () {
622
+ var useComponentContext = function (componentName) {
625
623
  var contextValue = React.useContext(ComponentContext);
626
624
  if (!contextValue) {
627
- throw new Error('The useComponentContext hook was called outside of the ComponentContext provider. Make sure this hook is called within a child of the Channel component.');
625
+ 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.");
626
+ return {};
628
627
  }
629
628
  return contextValue;
630
629
  };
@@ -766,7 +765,7 @@ var renderText = function (text, mentioned_users, options) {
766
765
  if (noParsingNeeded.length > 0 || linkIsInBlock)
767
766
  return;
768
767
  var displayLink = type === 'email' ? value : value.replace(detectHttp, '');
769
- newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeURI(href) + ")");
768
+ newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeURI(decodeURI(href)) + ")");
770
769
  });
771
770
  var plugins = [emojiMarkdownPlugin];
772
771
  if (mentioned_users === null || mentioned_users === void 0 ? void 0 : mentioned_users.length) {
@@ -815,26 +814,27 @@ var getWholeChar = function (str, i) {
815
814
  return '';
816
815
  };
817
816
 
818
- var DefaultSuggestionListHeader = function (_a) {
819
- var value = _a.value;
820
- var t = useTranslationContext().t;
821
- if (value[0] === '/') {
817
+ var DefaultSuggestionListHeader = function (props) {
818
+ var currentTrigger = props.currentTrigger, value = props.value;
819
+ var t = useTranslationContext('DefaultSuggestionListHeader').t;
820
+ var triggerIndex = value.lastIndexOf(currentTrigger);
821
+ if (currentTrigger === '/') {
822
822
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
823
823
  t('Commands matching'),
824
824
  " ",
825
- React__default['default'].createElement("strong", null, value.replace('/', ''))));
825
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
826
826
  }
827
- if (value[0] === ':') {
827
+ if (currentTrigger === ':') {
828
828
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
829
829
  t('Emoji matching'),
830
830
  " ",
831
- React__default['default'].createElement("strong", null, value.replace(':', ''))));
831
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
832
832
  }
833
- if (value[0] === '@') {
833
+ if (currentTrigger === '@') {
834
834
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
835
835
  t('People matching'),
836
836
  " ",
837
- React__default['default'].createElement("strong", null, value.replace('@', ''))));
837
+ React__default['default'].createElement("strong", null, value.slice(triggerIndex + 1))));
838
838
  }
839
839
  return null;
840
840
  };
@@ -1062,6 +1062,7 @@ var List = function List(props) {
1062
1062
  }, /*#__PURE__*/React__default['default'].createElement("li", {
1063
1063
  className: "rta__list-header"
1064
1064
  }, /*#__PURE__*/React__default['default'].createElement(SuggestionHeader, {
1065
+ currentTrigger: currentTrigger,
1065
1066
  value: propValue
1066
1067
  })), values.map(function (item, i) {
1067
1068
  return /*#__PURE__*/React__default['default'].createElement(SuggestionItem, {
@@ -1152,6 +1153,54 @@ var UnMemoizedCommandItem = function (props) {
1152
1153
  };
1153
1154
  var CommandItem = React__default['default'].memo(UnMemoizedCommandItem);
1154
1155
 
1156
+ /**
1157
+ * A round avatar image with fallback to username's first letter
1158
+ */
1159
+ var Avatar = function (props) {
1160
+ 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;
1161
+ var _e = React.useState(false), error = _e[0], setError = _e[1];
1162
+ var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1163
+ React.useEffect(function () {
1164
+ setError(false);
1165
+ setLoaded(false);
1166
+ }, [image]);
1167
+ var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1168
+ var initials = getWholeChar(nameStr, 0);
1169
+ return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1170
+ flexBasis: size + "px",
1171
+ fontSize: size / 2 + "px",
1172
+ height: size + "px",
1173
+ lineHeight: size + "px",
1174
+ width: size + "px",
1175
+ }, 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: {
1176
+ flexBasis: size + "px",
1177
+ height: size + "px",
1178
+ objectFit: 'cover',
1179
+ width: size + "px",
1180
+ } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1181
+ };
1182
+
1183
+ /**
1184
+ * UI component for mentions rendered in suggestion list
1185
+ */
1186
+ var UnMemoizedUserItem = function (props) {
1187
+ var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
1188
+ var hasEntity = Object.keys(entity).length;
1189
+ var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
1190
+ var renderName = function () {
1191
+ if (!hasEntity)
1192
+ return null;
1193
+ return (hasEntity &&
1194
+ itemParts.parts.map(function (part, i) {
1195
+ 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));
1196
+ }));
1197
+ };
1198
+ return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
1199
+ React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
1200
+ React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
1201
+ };
1202
+ var UserItem = React__default['default'].memo(UnMemoizedUserItem);
1203
+
1155
1204
  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; }
1156
1205
 
1157
1206
  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; }
@@ -1288,13 +1337,15 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1288
1337
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_onSelect", function (newToken) {
1289
1338
  var _this$props = _this.props,
1290
1339
  closeCommandsList = _this$props.closeCommandsList,
1340
+ closeMentionsList = _this$props.closeMentionsList,
1291
1341
  onChange = _this$props.onChange,
1292
- showCommandsList = _this$props.showCommandsList;
1342
+ showCommandsList = _this$props.showCommandsList,
1343
+ showMentionsList = _this$props.showMentionsList;
1293
1344
  var _this$state = _this.state,
1294
1345
  stateTrigger = _this$state.currentTrigger,
1295
1346
  selectionEnd = _this$state.selectionEnd,
1296
1347
  textareaValue = _this$state.value;
1297
- var currentTrigger = showCommandsList ? '/' : stateTrigger;
1348
+ var currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;
1298
1349
  if (!currentTrigger) return;
1299
1350
 
1300
1351
  var computeCaretPosition = function computeCaretPosition(position, token, startToken) {
@@ -1315,7 +1366,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1315
1366
  }
1316
1367
  };
1317
1368
 
1318
- var textToModify = showCommandsList ? '/' : textareaValue.slice(0, selectionEnd);
1369
+ var textToModify = showCommandsList ? '/' : showMentionsList ? '@' : textareaValue.slice(0, selectionEnd);
1319
1370
  var startOfTokenPosition = textToModify.lastIndexOf(currentTrigger); // we add space after emoji is selected if a caret position is next
1320
1371
 
1321
1372
  var newTokenString = newToken.caretPosition === 'next' ? "".concat(newToken.text, " ") : newToken.text;
@@ -1341,7 +1392,8 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1341
1392
 
1342
1393
  _this._closeAutocomplete();
1343
1394
 
1344
- closeCommandsList();
1395
+ if (showCommandsList) closeCommandsList();
1396
+ if (showMentionsList) closeMentionsList();
1345
1397
  });
1346
1398
 
1347
1399
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_getItemOnSelect", function (paramTrigger) {
@@ -1502,7 +1554,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1502
1554
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_cleanUpProps", function () {
1503
1555
  var props = _objectSpread({}, _this.props);
1504
1556
 
1505
- 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
1557
+ 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
1506
1558
 
1507
1559
  for (var prop in props) {
1508
1560
  if (notSafe.includes(prop)) delete props[prop];
@@ -1659,6 +1711,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1659
1711
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getTriggerProps", function () {
1660
1712
  var _this$props5 = _this.props,
1661
1713
  showCommandsList = _this$props5.showCommandsList,
1714
+ showMentionsList = _this$props5.showMentionsList,
1662
1715
  trigger = _this$props5.trigger;
1663
1716
  var _this$state6 = _this.state,
1664
1717
  component = _this$state6.component,
@@ -1682,18 +1735,18 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1682
1735
  values: suggestionData
1683
1736
  };
1684
1737
 
1685
- if (showCommandsList && trigger['/']) {
1738
+ if (showCommandsList && trigger['/'] || showMentionsList && trigger['@']) {
1686
1739
  var currentCommands;
1687
- var getCommands = trigger['/'].dataProvider;
1688
- getCommands === null || getCommands === void 0 ? void 0 : getCommands('', '/', function (data) {
1740
+ var getCommands = trigger[showCommandsList ? '/' : '@'].dataProvider;
1741
+ getCommands === null || getCommands === void 0 ? void 0 : getCommands('', showCommandsList ? '/' : '@', function (data) {
1689
1742
  currentCommands = data;
1690
1743
  });
1691
- triggerProps.component = CommandItem;
1692
- triggerProps.currentTrigger = '/';
1693
- triggerProps.getTextToReplace = _this._getTextToReplace('/');
1694
- triggerProps.getSelectedItem = _this._getItemOnSelect('/');
1744
+ triggerProps.component = showCommandsList ? CommandItem : UserItem;
1745
+ triggerProps.currentTrigger = showCommandsList ? '/' : '@';
1746
+ triggerProps.getTextToReplace = _this._getTextToReplace(showCommandsList ? '/' : '@');
1747
+ triggerProps.getSelectedItem = _this._getItemOnSelect(showCommandsList ? '/' : '@');
1695
1748
  triggerProps.selectionEnd = 1;
1696
- triggerProps.value = '/';
1749
+ triggerProps.value = showCommandsList ? '/' : '@';
1697
1750
  triggerProps.values = currentCommands;
1698
1751
  }
1699
1752
 
@@ -1908,33 +1961,6 @@ ReactTextareaAutocomplete.propTypes = {
1908
1961
  value: PropTypes__default['default'].string
1909
1962
  };
1910
1963
 
1911
- /**
1912
- * A round avatar image with fallback to username's first letter
1913
- */
1914
- var Avatar = function (props) {
1915
- 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;
1916
- var _e = React.useState(false), error = _e[0], setError = _e[1];
1917
- var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1918
- React.useEffect(function () {
1919
- setError(false);
1920
- setLoaded(false);
1921
- }, [image]);
1922
- var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1923
- var initials = getWholeChar(nameStr, 0);
1924
- return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1925
- flexBasis: size + "px",
1926
- fontSize: size / 2 + "px",
1927
- height: size + "px",
1928
- lineHeight: size + "px",
1929
- width: size + "px",
1930
- }, 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: {
1931
- flexBasis: size + "px",
1932
- height: size + "px",
1933
- objectFit: 'cover',
1934
- width: size + "px",
1935
- } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1936
- };
1937
-
1938
1964
  var channelReducer = function (state, action) {
1939
1965
  var _a;
1940
1966
  switch (action.type) {
@@ -2039,7 +2065,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
2039
2065
 
2040
2066
  var useCreateChannelStateContext = function (value) {
2041
2067
  var _a;
2042
- 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;
2068
+ 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;
2043
2069
  var channelId = channel.cid;
2044
2070
  var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
2045
2071
  var membersLength = Object.keys(members || []).length;
@@ -2051,34 +2077,40 @@ var useCreateChannelStateContext = function (value) {
2051
2077
  return last_read.toISOString();
2052
2078
  }).join();
2053
2079
  var threadMessagesLength = threadMessages === null || threadMessages === void 0 ? void 0 : threadMessages.length;
2080
+ var channelCapabilities = {};
2081
+ channelCapabilitiesArray.forEach(function (capability) {
2082
+ channelCapabilities[capability] = true;
2083
+ });
2054
2084
  var memoizedMessageData = skipMessageDataMemoization
2055
2085
  ? messages
2056
2086
  : messages
2057
2087
  .map(function (_a) {
2058
- 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;
2088
+ 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;
2059
2089
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2060
2090
  var type = _a.type;
2061
2091
  return type;
2062
2092
  }).join() : '') + pinned + reply_count + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2063
2093
  ? updated_at.toISOString()
2064
- : updated_at || '');
2094
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2065
2095
  })
2066
2096
  .join();
2067
2097
  var memoizedThreadMessageData = threadMessages
2068
2098
  .map(function (_a) {
2069
- var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at;
2099
+ 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;
2070
2100
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2071
2101
  var type = _a.type;
2072
2102
  return type;
2073
2103
  }).join() : '') + pinned + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2074
2104
  ? updated_at.toISOString()
2075
- : updated_at || '');
2105
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2076
2106
  })
2077
2107
  .join();
2078
2108
  var channelStateContext = React.useMemo(function () { return ({
2079
2109
  acceptedFiles: acceptedFiles,
2080
2110
  channel: channel,
2111
+ channelCapabilities: channelCapabilities,
2081
2112
  channelConfig: channelConfig,
2113
+ dragAndDropWindow: dragAndDropWindow,
2082
2114
  error: error,
2083
2115
  hasMore: hasMore,
2084
2116
  loading: loading,
@@ -2137,10 +2169,11 @@ var ChatProvider = function (_a) {
2137
2169
  var children = _a.children, value = _a.value;
2138
2170
  return (React__default['default'].createElement(ChatContext.Provider, { value: value }, children));
2139
2171
  };
2140
- var useChatContext = function () {
2172
+ var useChatContext = function (componentName) {
2141
2173
  var contextValue = React.useContext(ChatContext);
2142
2174
  if (!contextValue) {
2143
- throw new Error('The useChatContext hook was called outside of the ChatContext provider. Make sure this hook is called within a child of the Chat component.');
2175
+ 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.");
2176
+ return {};
2144
2177
  }
2145
2178
  return contextValue;
2146
2179
  };
@@ -2159,7 +2192,7 @@ var withChatContext = function (Component) {
2159
2192
  };
2160
2193
 
2161
2194
  var useEditMessageHandler = function (doUpdateMessageRequest) {
2162
- var _a = useChatContext(), channel = _a.channel, client = _a.client;
2195
+ var _a = useChatContext('useEditMessageHandler'), channel = _a.channel, client = _a.client;
2163
2196
  return function (updatedMessage) {
2164
2197
  if (doUpdateMessageRequest && channel) {
2165
2198
  return Promise.resolve(doUpdateMessageRequest(channel.cid, updatedMessage));
@@ -2220,7 +2253,7 @@ var LoadingChannels = React__default['default'].memo(UnMemoizedLoadingChannels);
2220
2253
  */
2221
2254
  var UnMemoizedLoadingErrorIndicator = function (_a) {
2222
2255
  var error = _a.error;
2223
- var t = useTranslationContext().t;
2256
+ var t = useTranslationContext('LoadingErrorIndicator').t;
2224
2257
  if (!error)
2225
2258
  return null;
2226
2259
  return React__default['default'].createElement("div", null, t('Error: {{ errorMessage }}', { errorMessage: error.message }));
@@ -2249,10 +2282,11 @@ var ChannelStateProvider = function (_a) {
2249
2282
  var children = _a.children, value = _a.value;
2250
2283
  return (React__default['default'].createElement(ChannelStateContext.Provider, { value: value }, children));
2251
2284
  };
2252
- var useChannelStateContext = function () {
2285
+ var useChannelStateContext = function (componentName) {
2253
2286
  var contextValue = React.useContext(ChannelStateContext);
2254
2287
  if (!contextValue) {
2255
- throw new Error('The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component.');
2288
+ 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.");
2289
+ return {};
2256
2290
  }
2257
2291
  return contextValue;
2258
2292
  };
@@ -2274,21 +2308,23 @@ var withChannelStateContext = function (Component) {
2274
2308
 
2275
2309
  var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2276
2310
  var _a, _b, _c;
2277
- var _d = useChannelStateContext(), channel = _d.channel, channelConfig = _d.channelConfig;
2278
- var client = useChatContext().client;
2311
+ var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e, channelConfig = _d.channelConfig;
2312
+ var client = useChatContext('useUserRole').client;
2279
2313
  var isAdmin = ((_a = client.user) === null || _a === void 0 ? void 0 : _a.role) === 'admin' || channel.state.membership.role === 'admin';
2280
2314
  var isMyMessage = client.userID === ((_b = message.user) === null || _b === void 0 ? void 0 : _b.id);
2281
2315
  var isOwner = channel.state.membership.role === 'owner';
2282
2316
  var isModerator = ((_c = client.user) === null || _c === void 0 ? void 0 : _c.role) === 'channel_moderator' ||
2283
2317
  channel.state.membership.role === 'channel_moderator' ||
2284
2318
  channel.state.membership.role === 'moderator';
2285
- var canEdit = isMyMessage || (!onlySenderCanEdit && (isModerator || isAdmin));
2286
- var canDelete = isMyMessage || isModerator || isAdmin;
2319
+ var canEdit = (!onlySenderCanEdit && channelCapabilities['update-any-message']) ||
2320
+ (isMyMessage && channelCapabilities['update-own-message']);
2321
+ var canDelete = channelCapabilities['delete-any-message'] ||
2322
+ (isMyMessage && channelCapabilities['delete-own-message']);
2287
2323
  var canFlag = !isMyMessage;
2288
2324
  var canMute = !isMyMessage && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.mutes);
2289
2325
  var canQuote = !disableQuotedMessages;
2290
- var canReact = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions;
2291
- var canReply = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies;
2326
+ var canReact = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
2327
+ var canReply = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) !== false && channelCapabilities['send-reply'];
2292
2328
  return {
2293
2329
  canDelete: canDelete,
2294
2330
  canEdit: canEdit,
@@ -2306,7 +2342,7 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2306
2342
 
2307
2343
  var MessageDeleted = function (props) {
2308
2344
  var message = props.message;
2309
- var t = useTranslationContext().t;
2345
+ var t = useTranslationContext('MessageDeleted').t;
2310
2346
  var isMyMessage = useUserRole(message).isMyMessage;
2311
2347
  var messageClasses = isMyMessage
2312
2348
  ? 'str-chat__message str-chat__message--me str-chat__message-simple str-chat__message-simple--me'
@@ -2385,6 +2421,7 @@ var MESSAGE_ACTIONS = {
2385
2421
  react: 'react',
2386
2422
  reply: 'reply',
2387
2423
  };
2424
+ // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
2388
2425
  var defaultPinPermissions = {
2389
2426
  commerce: {
2390
2427
  admin: true,
@@ -2495,7 +2532,7 @@ var showMessageActionsBox = function (actions) {
2495
2532
  return true;
2496
2533
  };
2497
2534
  var areMessagePropsEqual = function (prevProps, nextProps) {
2498
- var _a, _b, _c, _d;
2535
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2499
2536
  var prevMessage = prevProps.message, prevMessageUI = prevProps.Message;
2500
2537
  var nextMessage = nextProps.message, nextMessageUI = nextProps.Message;
2501
2538
  if (prevMessageUI !== nextMessageUI)
@@ -2513,7 +2550,9 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2513
2550
  prevMessage.status === nextMessage.status &&
2514
2551
  prevMessage.text === nextMessage.text &&
2515
2552
  prevMessage.type === nextMessage.type &&
2516
- prevMessage.updated_at === nextMessage.updated_at;
2553
+ prevMessage.updated_at === nextMessage.updated_at &&
2554
+ ((_e = prevMessage.user) === null || _e === void 0 ? void 0 : _e.image) === ((_f = nextMessage.user) === null || _f === void 0 ? void 0 : _f.image) &&
2555
+ ((_g = prevMessage.user) === null || _g === void 0 ? void 0 : _g.name) === ((_h = nextMessage.user) === null || _h === void 0 ? void 0 : _h.name);
2517
2556
  if (!messagesAreEqual)
2518
2557
  return false;
2519
2558
  var deepEqualProps = deepequal__default['default'](nextProps.readBy, prevProps.readBy) &&
@@ -2526,7 +2565,7 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2526
2565
  );
2527
2566
  };
2528
2567
  var areMessageUIPropsEqual = function (prevProps, nextProps) {
2529
- var _a, _b, _c, _d, _e, _f, _g, _h;
2568
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
2530
2569
  var prevLastReceivedId = prevProps.lastReceivedId, prevMessage = prevProps.message;
2531
2570
  var nextLastReceivedId = nextProps.lastReceivedId, nextMessage = nextProps.message;
2532
2571
  if (prevProps.editing !== nextProps.editing)
@@ -2552,7 +2591,9 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
2552
2591
  prevMessage.status === nextMessage.status &&
2553
2592
  prevMessage.text === nextMessage.text &&
2554
2593
  prevMessage.type === nextMessage.type &&
2555
- prevMessage.updated_at === nextMessage.updated_at;
2594
+ prevMessage.updated_at === nextMessage.updated_at &&
2595
+ ((_j = prevMessage.user) === null || _j === void 0 ? void 0 : _j.image) === ((_k = nextMessage.user) === null || _k === void 0 ? void 0 : _k.image) &&
2596
+ ((_l = prevMessage.user) === null || _l === void 0 ? void 0 : _l.name) === ((_m = nextMessage.user) === null || _m === void 0 ? void 0 : _m.name);
2556
2597
  if (!messagesAreEqual)
2557
2598
  return false;
2558
2599
  return true;
@@ -2619,10 +2660,11 @@ var ChannelActionProvider = function (_a) {
2619
2660
  var children = _a.children, value = _a.value;
2620
2661
  return (React__default['default'].createElement(ChannelActionContext.Provider, { value: value }, children));
2621
2662
  };
2622
- var useChannelActionContext = function () {
2663
+ var useChannelActionContext = function (componentName) {
2623
2664
  var contextValue = React.useContext(ChannelActionContext);
2624
2665
  if (!contextValue) {
2625
- throw new Error('The useChannelActionContext hook was called outside of the ChannelActionContext provider. Make sure this hook is called within a child of the Channel component.');
2666
+ 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.");
2667
+ return {};
2626
2668
  }
2627
2669
  return contextValue;
2628
2670
  };
@@ -2647,10 +2689,11 @@ var MessageProvider = function (_a) {
2647
2689
  var children = _a.children, value = _a.value;
2648
2690
  return (React__default['default'].createElement(MessageContext.Provider, { value: value }, children));
2649
2691
  };
2650
- var useMessageContext = function () {
2692
+ var useMessageContext = function (componentName) {
2651
2693
  var contextValue = React.useContext(MessageContext);
2652
2694
  if (!contextValue) {
2653
- throw new Error("The useMessageContext hook was called outside of the MessageContext provider. Make sure this hook is called within the Message's UI component.");
2695
+ 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.");
2696
+ return {};
2654
2697
  }
2655
2698
  return contextValue;
2656
2699
  };
@@ -2681,9 +2724,9 @@ var CustomMessageActionsList = function (props) {
2681
2724
  };
2682
2725
  var UnMemoizedMessageActionsBox = function (props) {
2683
2726
  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;
2684
- var setQuotedMessage = useChannelActionContext().setQuotedMessage;
2685
- var _b = useMessageContext(), customMessageActions = _b.customMessageActions, message = _b.message, messageListRect = _b.messageListRect;
2686
- var t = useTranslationContext().t;
2727
+ var setQuotedMessage = useChannelActionContext('MessageActionsBox').setQuotedMessage;
2728
+ var _b = useMessageContext('MessageActionsBox'), customMessageActions = _b.customMessageActions, message = _b.message, messageListRect = _b.messageListRect;
2729
+ var t = useTranslationContext('MessageActionsBox').t;
2687
2730
  var _c = React.useState(false), reverse = _c[0], setReverse = _c[1];
2688
2731
  var messageActions = getMessageActions();
2689
2732
  var checkIfReverse = React.useCallback(function (containerElement) {
@@ -2734,8 +2777,8 @@ var MessageActionsBox = React__default['default'].memo(UnMemoizedMessageActionsB
2734
2777
 
2735
2778
  var MessageActions = function (props) {
2736
2779
  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;
2737
- var mutes = useChatContext().mutes;
2738
- 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;
2780
+ var mutes = useChatContext('MessageActions').mutes;
2781
+ 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;
2739
2782
  var getMessageActions = propGetMessageActions || contextGetMessageActions;
2740
2783
  var handleDelete = propHandleDelete || contextHandleDelete;
2741
2784
  var handleFlag = propHandleFlag || contextHandleFlag;
@@ -2792,7 +2835,7 @@ var MessageActionsWrapper = function (props) {
2792
2835
 
2793
2836
  var UnMemoizedMessageOptions = function (props) {
2794
2837
  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;
2795
- 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;
2838
+ 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;
2796
2839
  var handleOpenThread = propHandleOpenThread || contextHandleOpenThread;
2797
2840
  var messageActions = getMessageActions();
2798
2841
  var showActionsBox = showMessageActionsBox(messageActions) || !!customMessageActions;
@@ -2826,7 +2869,7 @@ var MessageOptions = React__default['default'].memo(UnMemoizedMessageOptions);
2826
2869
 
2827
2870
  var UnMemoizedMessageRepliesCountButton = function (props) {
2828
2871
  var labelPlural = props.labelPlural, labelSingle = props.labelSingle, onClick = props.onClick, _a = props.reply_count, reply_count = _a === void 0 ? 0 : _a;
2829
- var t = useTranslationContext().t;
2872
+ var t = useTranslationContext('MessageRepliesCountButton').t;
2830
2873
  var singleReplyText;
2831
2874
  var pluralReplyText;
2832
2875
  if (reply_count === 1) {
@@ -2864,10 +2907,10 @@ var Tooltip = function (props) {
2864
2907
  var UnMemoizedMessageStatus = function (props) {
2865
2908
  var _a;
2866
2909
  var propAvatar = props.Avatar, _b = props.messageType, messageType = _b === void 0 ? 'simple' : _b;
2867
- var client = useChatContext().client;
2868
- var contextAvatar = useComponentContext().Avatar;
2869
- var _c = useMessageContext(), isMyMessage = _c.isMyMessage, lastReceivedId = _c.lastReceivedId, message = _c.message, readBy = _c.readBy, threadList = _c.threadList;
2870
- var t = useTranslationContext().t;
2910
+ var client = useChatContext('MessageStatus').client;
2911
+ var contextAvatar = useComponentContext('MessageStatus').Avatar;
2912
+ var _c = useMessageContext('MessageStatus'), isMyMessage = _c.isMyMessage, lastReceivedId = _c.lastReceivedId, message = _c.message, readBy = _c.readBy, threadList = _c.threadList;
2913
+ var t = useTranslationContext('MessageStatus').t;
2871
2914
  var Avatar$1 = propAvatar || contextAvatar || Avatar;
2872
2915
  if (!isMyMessage() || message.type === 'error') {
2873
2916
  return null;
@@ -2897,8 +2940,8 @@ var MessageStatus = React__default['default'].memo(UnMemoizedMessageStatus);
2897
2940
  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.";
2898
2941
  function useActionHandler(message) {
2899
2942
  var _this = this;
2900
- var _a = useChannelActionContext(), removeMessage = _a.removeMessage, updateMessage = _a.updateMessage;
2901
- var channel = useChannelStateContext().channel;
2943
+ var _a = useChannelActionContext('useActionHandler'), removeMessage = _a.removeMessage, updateMessage = _a.updateMessage;
2944
+ var channel = useChannelStateContext('useActionHandler').channel;
2902
2945
  return function (dataOrName, value, event) { return __awaiter(_this, void 0, void 0, function () {
2903
2946
  var messageID, formData, data;
2904
2947
  return __generator(this, function (_a) {
@@ -2956,9 +2999,9 @@ var useBreakpoint = function () {
2956
2999
  var useDeleteHandler = function (message, notifications) {
2957
3000
  if (notifications === void 0) { notifications = {}; }
2958
3001
  var getErrorNotification = notifications.getErrorNotification, notify = notifications.notify;
2959
- var updateMessage = useChannelActionContext().updateMessage;
2960
- var client = useChatContext().client;
2961
- var t = useTranslationContext().t;
3002
+ var updateMessage = useChannelActionContext('useDeleteHandler').updateMessage;
3003
+ var client = useChatContext('useDeleteHandler').client;
3004
+ var t = useTranslationContext('useDeleteHandler').t;
2962
3005
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
2963
3006
  var data, errorMessage;
2964
3007
  return __generator(this, function (_a) {
@@ -3011,8 +3054,8 @@ var useEditHandler = function (customInitialState, customSetEditing, customClear
3011
3054
  var missingUseFlagHandlerParameterWarning = 'useFlagHandler was called but it is missing one or more necessary parameters.';
3012
3055
  var useFlagHandler = function (message, notifications) {
3013
3056
  if (notifications === void 0) { notifications = {}; }
3014
- var client = useChatContext().client;
3015
- var t = useTranslationContext().t;
3057
+ var client = useChatContext('useFlagHandler').client;
3058
+ var t = useTranslationContext('useFlagHandler').t;
3016
3059
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
3017
3060
  var getErrorNotification, getSuccessNotification, notify, successMessage, errorMessage;
3018
3061
  var _a;
@@ -3058,7 +3101,7 @@ function createEventHandler(fn, message) {
3058
3101
  };
3059
3102
  }
3060
3103
  var useMentionsHandler = function (message, customMentionHandler) {
3061
- var _a = useChannelActionContext(), contextOnMentionsClick = _a.onMentionsClick, contextOnMentionsHover = _a.onMentionsHover;
3104
+ var _a = useChannelActionContext('useMentionsHandler'), contextOnMentionsClick = _a.onMentionsClick, contextOnMentionsHover = _a.onMentionsHover;
3062
3105
  var onMentionsClick = (customMentionHandler === null || customMentionHandler === void 0 ? void 0 : customMentionHandler.onMentionsClick) || contextOnMentionsClick || (function () { return null; });
3063
3106
  var onMentionsHover = (customMentionHandler === null || customMentionHandler === void 0 ? void 0 : customMentionHandler.onMentionsHover) || contextOnMentionsHover || (function () { return null; });
3064
3107
  return {
@@ -3102,9 +3145,9 @@ var useMobilePress = function () {
3102
3145
  var missingUseMuteHandlerParamsWarning = 'useMuteHandler was called but it is missing one or more necessary parameter.';
3103
3146
  var useMuteHandler = function (message, notifications) {
3104
3147
  if (notifications === void 0) { notifications = {}; }
3105
- var mutes = useChannelStateContext().mutes;
3106
- var client = useChatContext().client;
3107
- var t = useTranslationContext().t;
3148
+ var mutes = useChannelStateContext('useMuteHandler').mutes;
3149
+ var client = useChatContext('useMuteHandler').client;
3150
+ var t = useTranslationContext('useMuteHandler').t;
3108
3151
  return function (event) { return __awaiter(void 0, void 0, void 0, function () {
3109
3152
  var getErrorNotification, getSuccessNotification, notify, successMessage, errorMessage, fallbackMessage, successMessage, errorMessage;
3110
3153
  return __generator(this, function (_a) {
@@ -3165,7 +3208,7 @@ var useMuteHandler = function (message, notifications) {
3165
3208
  };
3166
3209
 
3167
3210
  var useOpenThreadHandler = function (message, customOpenThread) {
3168
- var channelOpenThread = useChannelActionContext().openThread;
3211
+ var channelOpenThread = useChannelActionContext('useOpenThreadHandler').openThread;
3169
3212
  var openThread = customOpenThread || channelOpenThread;
3170
3213
  return function (event) {
3171
3214
  if (!openThread || !message) {
@@ -3176,25 +3219,17 @@ var useOpenThreadHandler = function (message, customOpenThread) {
3176
3219
  };
3177
3220
  };
3178
3221
 
3179
- var usePinHandler = function (message, permissions, notifications) {
3180
- if (permissions === void 0) { permissions = defaultPinPermissions; }
3222
+ var usePinHandler = function (message,
3223
+ // @ts-expect-error @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
3224
+ permissions, // eslint-disable-line
3225
+ notifications) {
3181
3226
  if (notifications === void 0) { notifications = {}; }
3182
3227
  var getErrorNotification = notifications.getErrorNotification, notify = notifications.notify;
3183
- var updateMessage = useChannelActionContext().updateMessage;
3184
- var channel = useChannelStateContext().channel;
3185
- var client = useChatContext().client;
3186
- var t = useTranslationContext().t;
3187
- var canPin = function () {
3188
- if (!channel || !permissions || !permissions[channel.type]) {
3189
- return false;
3190
- }
3191
- var currentChannelPermissions = permissions[channel.type];
3192
- var currentRole = channel.state.membership.role;
3193
- if (currentChannelPermissions && currentRole && currentChannelPermissions[currentRole]) {
3194
- return true;
3195
- }
3196
- return false;
3197
- };
3228
+ var updateMessage = useChannelActionContext('usePinHandler').updateMessage;
3229
+ var _a = useChannelStateContext('usePinHandler').channelCapabilities, channelCapabilities = _a === void 0 ? {} : _a;
3230
+ var client = useChatContext('usePinHandler').client;
3231
+ var t = useTranslationContext('usePinHandler').t;
3232
+ var canPin = !!channelCapabilities['pin-message'];
3198
3233
  var handlePin = function (event) { return __awaiter(void 0, void 0, void 0, function () {
3199
3234
  var optimisticMessage, messageResponse, errorMessage, optimisticMessage, messageResponse, errorMessage;
3200
3235
  return __generator(this, function (_a) {
@@ -3242,14 +3277,14 @@ var usePinHandler = function (message, permissions, notifications) {
3242
3277
  }
3243
3278
  });
3244
3279
  }); };
3245
- return { canPin: canPin(), handlePin: handlePin };
3280
+ return { canPin: canPin, handlePin: handlePin };
3246
3281
  };
3247
3282
 
3248
3283
  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.";
3249
3284
  var useReactionHandler = function (message) {
3250
- var updateMessage = useChannelActionContext().updateMessage;
3251
- var channel = useChannelStateContext().channel;
3252
- var client = useChatContext().client;
3285
+ var updateMessage = useChannelActionContext('useReactionHandler').updateMessage;
3286
+ var channel = useChannelStateContext('useReactionHandler').channel;
3287
+ var client = useChatContext('useReactionHandler').client;
3253
3288
  var createMessagePreview = React.useCallback(function (add, reaction, message) {
3254
3289
  var _a, _b;
3255
3290
  var newReactionCounts = (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
@@ -3284,32 +3319,33 @@ var useReactionHandler = function (message) {
3284
3319
  };
3285
3320
  var toggleReaction = throttle__default['default'](function (id, type, add) { return __awaiter(void 0, void 0, void 0, function () {
3286
3321
  var newReaction, tempMessage, messageResponse, _a;
3287
- return __generator(this, function (_b) {
3288
- switch (_b.label) {
3322
+ var _b;
3323
+ return __generator(this, function (_c) {
3324
+ switch (_c.label) {
3289
3325
  case 0:
3290
- if (!message)
3326
+ if (!message || ((_b = channel.data) === null || _b === void 0 ? void 0 : _b.frozen))
3291
3327
  return [2 /*return*/];
3292
3328
  newReaction = creatReactionPreview(type);
3293
3329
  tempMessage = createMessagePreview(add, newReaction, message);
3294
- _b.label = 1;
3330
+ _c.label = 1;
3295
3331
  case 1:
3296
- _b.trys.push([1, 6, , 7]);
3332
+ _c.trys.push([1, 6, , 7]);
3297
3333
  updateMessage(tempMessage);
3298
3334
  if (!add) return [3 /*break*/, 3];
3299
3335
  return [4 /*yield*/, channel.sendReaction(id, { type: type })];
3300
3336
  case 2:
3301
- _a = _b.sent();
3337
+ _a = _c.sent();
3302
3338
  return [3 /*break*/, 5];
3303
3339
  case 3: return [4 /*yield*/, channel.deleteReaction(id, type)];
3304
3340
  case 4:
3305
- _a = _b.sent();
3306
- _b.label = 5;
3341
+ _a = _c.sent();
3342
+ _c.label = 5;
3307
3343
  case 5:
3308
3344
  messageResponse = _a;
3309
3345
  updateMessage(messageResponse.message);
3310
3346
  return [3 /*break*/, 7];
3311
3347
  case 6:
3312
- _b.sent();
3348
+ _c.sent();
3313
3349
  // revert to the original message if the API call fails
3314
3350
  updateMessage(message);
3315
3351
  return [3 /*break*/, 7];
@@ -3364,11 +3400,12 @@ var useReactionHandler = function (message) {
3364
3400
  }); };
3365
3401
  };
3366
3402
  var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef, closeReactionSelectorOnClick) {
3367
- var _a, _b;
3368
- var channel = useChannelStateContext().channel;
3369
- var _c = React.useState(false), showDetailedReactions = _c[0], setShowDetailedReactions = _c[1];
3403
+ var _a;
3404
+ var _b = useChannelStateContext('useReactionClick'), channel = _b.channel, _c = _b.channelCapabilities, channelCapabilities = _c === void 0 ? {} : _c, channelConfig = _b.channelConfig;
3405
+ var _d = React.useState(false), showDetailedReactions = _d[0], setShowDetailedReactions = _d[1];
3370
3406
  var hasListener = React.useRef(false);
3371
- 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;
3407
+ var isFrozen = !!((_a = channel.data) === null || _a === void 0 ? void 0 : _a.frozen);
3408
+ var isReactionEnabled = ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction']) || isFrozen;
3372
3409
  var messageDeleted = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
3373
3410
  var closeDetailedReactions = React.useCallback(function (event) {
3374
3411
  var _a;
@@ -3429,7 +3466,7 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
3429
3466
  };
3430
3467
 
3431
3468
  var useRetryHandler = function (customRetrySendMessage) {
3432
- var contextRetrySendMessage = useChannelActionContext().retrySendMessage;
3469
+ var contextRetrySendMessage = useChannelActionContext('useRetryHandler').retrySendMessage;
3433
3470
  var retrySendMessage = customRetrySendMessage || contextRetrySendMessage;
3434
3471
  return function (message) { return __awaiter(void 0, void 0, void 0, function () {
3435
3472
  return __generator(this, function (_a) {
@@ -3463,9 +3500,10 @@ var useUserHandler = function (message, eventHandlers) { return ({
3463
3500
 
3464
3501
  var QuotedMessage = function () {
3465
3502
  var _a, _b;
3466
- var Attachment = useComponentContext().Attachment;
3467
- var _c = useMessageContext(), isMyMessage = _c.isMyMessage, message = _c.message;
3468
- var userLanguage = useTranslationContext().userLanguage;
3503
+ var _c = useComponentContext('QuotedMessage'), Attachment = _c.Attachment, ContextAvatar = _c.Avatar;
3504
+ var _d = useMessageContext('QuotedMessage'), isMyMessage = _d.isMyMessage, message = _d.message;
3505
+ var userLanguage = useTranslationContext('QuotedMessage').userLanguage;
3506
+ var Avatar$1 = ContextAvatar || Avatar;
3469
3507
  var quoted_message = message.quoted_message;
3470
3508
  if (!quoted_message)
3471
3509
  return null;
@@ -3480,7 +3518,7 @@ var QuotedMessage = function () {
3480
3518
  return null;
3481
3519
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
3482
3520
  React__default['default'].createElement("div", { className: "" + (isMyMessage() ? 'quoted-message mine' : 'quoted-message') },
3483
- 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 })),
3521
+ 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 })),
3484
3522
  React__default['default'].createElement("div", { className: 'quoted-message-inner' },
3485
3523
  quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
3486
3524
  React__default['default'].createElement("div", null, quotedMessageText))),
@@ -3490,9 +3528,9 @@ var QuotedMessage = function () {
3490
3528
  var UnMemoizedMessageTextComponent = function (props) {
3491
3529
  var _a;
3492
3530
  var customInnerClass = props.customInnerClass, _b = props.customWrapperClass, customWrapperClass = _b === void 0 ? '' : _b, propMessage = props.message, _c = props.theme, theme = _c === void 0 ? 'simple' : _c;
3493
- var _d = useComponentContext().QuotedMessage, QuotedMessage$1 = _d === void 0 ? QuotedMessage : _d;
3494
- 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;
3495
- var _g = useTranslationContext(), t = _g.t, userLanguage = _g.userLanguage;
3531
+ var _d = useComponentContext('MessageText').QuotedMessage, QuotedMessage$1 = _d === void 0 ? QuotedMessage : _d;
3532
+ 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;
3533
+ var _g = useTranslationContext('MessageText'), t = _g.t, userLanguage = _g.userLanguage;
3496
3534
  var handleMobilePress = useMobilePress().handleMobilePress;
3497
3535
  var message = propMessage || contextMessage;
3498
3536
  var hasAttachment = messageHasAttachments(message);
@@ -3551,8 +3589,8 @@ function getDateString(messageCreatedAt, formatDate, calendar, tDateTimeParser,
3551
3589
  }
3552
3590
  var UnMemoizedMessageTimestamp = function (props) {
3553
3591
  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;
3554
- var _d = useMessageContext(), formatDate = _d.formatDate, contextMessage = _d.message;
3555
- var tDateTimeParser = useTranslationContext().tDateTimeParser;
3592
+ var _d = useMessageContext('MessageTimestamp'), formatDate = _d.formatDate, contextMessage = _d.message;
3593
+ var tDateTimeParser = useTranslationContext('MessageTimestamp').tDateTimeParser;
3556
3594
  var message = propMessage || contextMessage;
3557
3595
  var createdAt = message.created_at;
3558
3596
  var when = React.useMemo(function () { return getDateString(createdAt, formatDate, calendar, tDateTimeParser, format); }, [formatDate, calendar, tDateTimeParser, format, createdAt]);
@@ -3563,9 +3601,8 @@ var UnMemoizedMessageTimestamp = function (props) {
3563
3601
  var MessageTimestamp = React__default['default'].memo(UnMemoizedMessageTimestamp);
3564
3602
 
3565
3603
  var useCommandTrigger = function () {
3566
- var _a, _b;
3567
- var channel = useChannelStateContext().channel;
3568
- 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;
3604
+ var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
3605
+ var commands = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.commands;
3569
3606
  return {
3570
3607
  component: CommandItem,
3571
3608
  dataProvider: function (query, text, onReady) {
@@ -3652,7 +3689,7 @@ var accentsMap = {
3652
3689
  e: 'é|è|ê|É|È|Ê',
3653
3690
  i: 'í|ì|î|Í|Ì|Î',
3654
3691
  n: 'ñ|Ñ',
3655
- o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
3692
+ o: 'ó|ò|ô|ő|õ|Ó|Ò|Ô|Õ',
3656
3693
  u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
3657
3694
  };
3658
3695
  var removeDiacritics = function (text) {
@@ -3689,7 +3726,7 @@ var calculateLevenshtein = function (query, name) {
3689
3726
  return matrix[name.length][query.length];
3690
3727
  };
3691
3728
  var searchLocalUsers = function (params) {
3692
- var ownUserId = params.ownUserId, query = params.query, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
3729
+ var ownUserId = params.ownUserId, query = params.query, text = params.text, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
3693
3730
  var matchingUsers = users.filter(function (user) {
3694
3731
  if (user.id === ownUserId)
3695
3732
  return false;
@@ -3714,43 +3751,78 @@ var searchLocalUsers = function (params) {
3714
3751
  });
3715
3752
  }); })();
3716
3753
  }
3754
+ var maxDistance = 3;
3755
+ var lastDigits = text.slice(-(maxDistance + 1)).includes('@');
3717
3756
  if (updatedName) {
3718
3757
  var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
3719
- if (updatedName.includes(updatedQuery) || levenshtein_1 <= 3)
3758
+ if (updatedName.includes(updatedQuery) || (levenshtein_1 <= maxDistance && lastDigits)) {
3720
3759
  return true;
3760
+ }
3721
3761
  }
3722
3762
  var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
3723
- return updatedId.includes(updatedQuery) || levenshtein <= 3;
3763
+ return updatedId.includes(updatedQuery) || (levenshtein <= maxDistance && lastDigits);
3724
3764
  });
3725
3765
  return matchingUsers;
3726
3766
  };
3727
-
3728
- /**
3729
- * UI component for mentions rendered in suggestion list
3730
- */
3731
- var UnMemoizedUserItem = function (props) {
3732
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
3733
- var hasEntity = Object.keys(entity).length;
3734
- var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
3735
- var renderName = function () {
3736
- if (!hasEntity)
3737
- return null;
3738
- return (hasEntity &&
3739
- itemParts.parts.map(function (part, i) {
3740
- 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));
3741
- }));
3742
- };
3743
- return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
3744
- React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
3745
- React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
3746
- };
3747
- var UserItem = React__default['default'].memo(UnMemoizedUserItem);
3767
+ var checkUploadPermissions = function (params) { return __awaiter(void 0, void 0, void 0, function () {
3768
+ 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;
3769
+ var _b, _c;
3770
+ return __generator(this, function (_d) {
3771
+ switch (_d.label) {
3772
+ case 0:
3773
+ addNotification = params.addNotification, file = params.file, getAppSettings = params.getAppSettings, t = params.t, uploadType = params.uploadType;
3774
+ appSettings = null;
3775
+ return [4 /*yield*/, getAppSettings()];
3776
+ case 1:
3777
+ appSettings = _d.sent();
3778
+ _a = (uploadType === 'image'
3779
+ ? (_b = appSettings === null || appSettings === void 0 ? void 0 : appSettings.app) === null || _b === void 0 ? void 0 : _b.image_upload_config
3780
+ : (_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;
3781
+ sendErrorNotification = function () {
3782
+ return addNotification(t("Upload type: \"{{ type }}\" is not allowed", { type: file.type || 'unknown type' }), 'error');
3783
+ };
3784
+ if (allowed_file_extensions === null || allowed_file_extensions === void 0 ? void 0 : allowed_file_extensions.length) {
3785
+ allowed = allowed_file_extensions.some(function (ext) {
3786
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3787
+ });
3788
+ if (!allowed) {
3789
+ sendErrorNotification();
3790
+ return [2 /*return*/, false];
3791
+ }
3792
+ }
3793
+ if (blocked_file_extensions === null || blocked_file_extensions === void 0 ? void 0 : blocked_file_extensions.length) {
3794
+ blocked = blocked_file_extensions.some(function (ext) {
3795
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3796
+ });
3797
+ if (blocked) {
3798
+ sendErrorNotification();
3799
+ return [2 /*return*/, false];
3800
+ }
3801
+ }
3802
+ if (allowed_mime_types === null || allowed_mime_types === void 0 ? void 0 : allowed_mime_types.length) {
3803
+ allowed = allowed_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3804
+ if (!allowed) {
3805
+ sendErrorNotification();
3806
+ return [2 /*return*/, false];
3807
+ }
3808
+ }
3809
+ if (blocked_mime_types === null || blocked_mime_types === void 0 ? void 0 : blocked_mime_types.length) {
3810
+ blocked = blocked_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3811
+ if (blocked) {
3812
+ sendErrorNotification();
3813
+ return [2 /*return*/, false];
3814
+ }
3815
+ }
3816
+ return [2 /*return*/, true];
3817
+ }
3818
+ });
3819
+ }); };
3748
3820
 
3749
3821
  var useUserTrigger = function (params) {
3750
3822
  var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
3751
3823
  var _b = React.useState(false), searching = _b[0], setSearching = _b[1];
3752
- var _c = useChatContext(), client = _c.client, mutes = _c.mutes;
3753
- var channel = useChannelStateContext().channel;
3824
+ var _c = useChatContext('useUserTrigger'), client = _c.client, mutes = _c.mutes;
3825
+ var channel = useChannelStateContext('useUserTrigger').channel;
3754
3826
  var members = channel.state.members;
3755
3827
  var watchers = channel.state.watchers;
3756
3828
  var getMembersAndWatchers = React.useCallback(function () {
@@ -3865,6 +3937,7 @@ var useUserTrigger = function (params) {
3865
3937
  var params_1 = {
3866
3938
  ownUserId: client.userID,
3867
3939
  query: query,
3940
+ text: text,
3868
3941
  useMentionsTransliteration: useMentionsTransliteration,
3869
3942
  users: users,
3870
3943
  };
@@ -3893,17 +3966,18 @@ var MessageInputContextProvider = function (_a) {
3893
3966
  var children = _a.children, value = _a.value;
3894
3967
  return (React__default['default'].createElement(MessageInputContext.Provider, { value: value }, children));
3895
3968
  };
3896
- var useMessageInputContext = function () {
3969
+ var useMessageInputContext = function (componentName) {
3897
3970
  var contextValue = React.useContext(MessageInputContext);
3898
3971
  if (!contextValue) {
3899
- throw new Error("The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure this hook is called within the MessageInput's UI component.");
3972
+ 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.");
3973
+ return {};
3900
3974
  }
3901
3975
  return contextValue;
3902
3976
  };
3903
3977
 
3904
3978
  var DefaultTriggerProvider = function (_a) {
3905
3979
  var children = _a.children;
3906
- var currentValue = useMessageInputContext();
3980
+ var currentValue = useMessageInputContext('DefaultTriggerProvider');
3907
3981
  var defaultAutocompleteTriggers = {
3908
3982
  '/': useCommandTrigger(),
3909
3983
  ':': useEmojiTrigger(currentValue.emojiIndex),
@@ -3953,10 +4027,11 @@ var EmojiProvider = function (_a) {
3953
4027
  };
3954
4028
  return React__default['default'].createElement(EmojiContext.Provider, { value: emojiContextValue }, children);
3955
4029
  };
3956
- var useEmojiContext = function () {
4030
+ var useEmojiContext = function (componentName) {
3957
4031
  var contextValue = React.useContext(EmojiContext);
3958
4032
  if (!contextValue) {
3959
- throw new Error('The useEmojiContext hook was called outside of the EmojiContext provider. Make sure this hook is called within a child of the Channel component.');
4033
+ 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.");
4034
+ return {};
3960
4035
  }
3961
4036
  return contextValue;
3962
4037
  };
@@ -3984,9 +4059,9 @@ var filterEmoji = function (emoji) {
3984
4059
  };
3985
4060
  var EmojiPicker = function (props) {
3986
4061
  var small = props.small;
3987
- var _a = useEmojiContext(), emojiConfig = _a.emojiConfig, EmojiPickerComponent = _a.EmojiPicker;
3988
- var t = useTranslationContext().t;
3989
- var messageInput = useMessageInputContext();
4062
+ var _a = useEmojiContext('EmojiPicker'), emojiConfig = _a.emojiConfig, EmojiPickerComponent = _a.EmojiPicker;
4063
+ var t = useTranslationContext('EmojiPicker').t;
4064
+ var messageInput = useMessageInputContext('EmojiPicker');
3990
4065
  var emojiData = (emojiConfig || {}).emojiData;
3991
4066
  if (messageInput.emojiPickerIsOpen && emojiData) {
3992
4067
  var className = small
@@ -4000,34 +4075,34 @@ var EmojiPicker = function (props) {
4000
4075
  };
4001
4076
 
4002
4077
  var EmojiIconLarge = function () {
4003
- var t = useTranslationContext().t;
4078
+ var t = useTranslationContext('EmojiIconLarge').t;
4004
4079
  return (React__default['default'].createElement("svg", { height: '28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
4005
4080
  React__default['default'].createElement("title", null, t('Open emoji picker')),
4006
4081
  React__default['default'].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
4007
4082
  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' }))));
4008
4083
  };
4009
4084
  var EmojiIconSmall = function () {
4010
- var t = useTranslationContext().t;
4085
+ var t = useTranslationContext('EmojiIconSmall').t;
4011
4086
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
4012
4087
  React__default['default'].createElement("title", null, t('Open emoji picker')),
4013
4088
  React__default['default'].createElement("g", { clipRule: 'evenodd', fillRule: 'evenodd' },
4014
4089
  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' }))));
4015
4090
  };
4016
4091
  var FileUploadIcon = function () {
4017
- var t = useTranslationContext().t;
4092
+ var t = useTranslationContext('FileUploadIcon').t;
4018
4093
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
4019
4094
  React__default['default'].createElement("title", null, t('Attach files')),
4020
4095
  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' })));
4021
4096
  };
4022
4097
  var FileUploadIconFlat = function () {
4023
- var t = useTranslationContext().t;
4098
+ var t = useTranslationContext('FileUploadIconFlat').t;
4024
4099
  return (React__default['default'].createElement("svg", { height: '14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
4025
4100
  React__default['default'].createElement("title", null, t('Attach files')),
4026
4101
  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' })));
4027
4102
  };
4028
4103
  var SendButton = function (_a) {
4029
4104
  var sendMessage = _a.sendMessage;
4030
- var t = useTranslationContext().t;
4105
+ var t = useTranslationContext('SendButton').t;
4031
4106
  return (React__default['default'].createElement("button", { className: 'str-chat__send-button', onClick: sendMessage },
4032
4107
  React__default['default'].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
4033
4108
  React__default['default'].createElement("title", null, t('Send')),
@@ -4035,8 +4110,8 @@ var SendButton = function (_a) {
4035
4110
  };
4036
4111
 
4037
4112
  var UploadsPreview = function () {
4038
- var _a = useChannelStateContext(), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4039
- var messageInput = useMessageInputContext();
4113
+ var _a = useChannelStateContext('UploadsPreview'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4114
+ var messageInput = useMessageInputContext('UploadsPreview');
4040
4115
  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;
4041
4116
  var imagesToPreview = imageOrder.map(function (id) { return imageUploads[id]; });
4042
4117
  var filesToPreview = fileOrder.map(function (id) { return fileUploads[id]; });
@@ -4059,9 +4134,9 @@ var UploadsPreview = function () {
4059
4134
  };
4060
4135
 
4061
4136
  var UnMemoizedChatAutoComplete = function (props) {
4062
- var _a = useComponentContext(), SuggestionItem = _a.AutocompleteSuggestionItem, SuggestionList = _a.AutocompleteSuggestionList;
4063
- var t = useTranslationContext().t;
4064
- var messageInput = useMessageInputContext();
4137
+ var _a = useComponentContext('ChatAutoComplete'), SuggestionItem = _a.AutocompleteSuggestionItem, SuggestionList = _a.AutocompleteSuggestionList;
4138
+ var t = useTranslationContext('ChatAutoComplete').t;
4139
+ var messageInput = useMessageInputContext('ChatAutoComplete');
4065
4140
  var cooldownRemaining = messageInput.cooldownRemaining, disabled = messageInput.disabled, emojiIndex = messageInput.emojiIndex, innerRef = messageInput.textareaRef;
4066
4141
  var placeholder = props.placeholder || t('Type your message');
4067
4142
  var emojiReplace = function (word) {
@@ -4082,15 +4157,15 @@ var UnMemoizedChatAutoComplete = function (props) {
4082
4157
  innerRef.current = ref;
4083
4158
  }
4084
4159
  }, [innerRef]);
4085
- 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 }));
4160
+ 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 }));
4086
4161
  };
4087
4162
  var ChatAutoComplete = React__default['default'].memo(UnMemoizedChatAutoComplete);
4088
4163
 
4089
4164
  var EditMessageForm = function () {
4090
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
4091
- var t = useTranslationContext().t;
4092
- var _b = useMessageInputContext(), clearEditingState = _b.clearEditingState, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
4093
- var _c = useComponentContext(), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
4165
+ var _a = useChannelStateContext('EditMessageForm'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
4166
+ var t = useTranslationContext('EditMessageForm').t;
4167
+ var _b = useMessageInputContext('EditMessageForm'), clearEditingState = _b.clearEditingState, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
4168
+ var _c = useComponentContext('EditMessageForm'), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
4094
4169
  React.useEffect(function () {
4095
4170
  var onKeyDown = function (event) {
4096
4171
  if (event.keyCode === KEY_CODES.ESC && clearEditingState)
@@ -4153,8 +4228,8 @@ var checkUserRoles = function (globalRole, channelRole) {
4153
4228
  };
4154
4229
  var useCooldownTimer = function () {
4155
4230
  var _a, _b;
4156
- var client = useChatContext().client;
4157
- var channel = useChannelStateContext().channel;
4231
+ var client = useChatContext('useCooldownTimer').client;
4232
+ var channel = useChannelStateContext('useCooldownTimer').channel;
4158
4233
  var cooldownInterval = (channel.data || {}).cooldown;
4159
4234
  var _c = React.useState(), cooldownRemaining = _c[0], setCooldownRemaining = _c[1];
4160
4235
  var globalRole = ((_a = client.user) === null || _a === void 0 ? void 0 : _a.role) || '';
@@ -4175,7 +4250,7 @@ var useCooldownTimer = function () {
4175
4250
  };
4176
4251
 
4177
4252
  var useEmojiIndex = function () {
4178
- var _a = useEmojiContext(), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
4253
+ var _a = useEmojiContext('useEmojiIndex'), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
4179
4254
  var emojiData = (emojiConfig || {}).emojiData;
4180
4255
  var emojiIndex = React.useMemo(function () {
4181
4256
  if (EmojiIndex) {
@@ -4189,15 +4264,16 @@ var useEmojiIndex = function () {
4189
4264
  var useImageUploads = function (props, state, dispatch) {
4190
4265
  var doImageUploadRequest = props.doImageUploadRequest, errorHandler = props.errorHandler;
4191
4266
  var imageUploads = state.imageUploads;
4192
- var channel = useChannelStateContext().channel;
4193
- var addNotification = useChannelActionContext().addNotification;
4194
- var t = useTranslationContext().t;
4267
+ var channel = useChannelStateContext('useImageUploads').channel;
4268
+ var getAppSettings = useChatContext('useImageUploads').getAppSettings;
4269
+ var addNotification = useChannelActionContext('useImageUploads').addNotification;
4270
+ var t = useTranslationContext('useImageUploads').t;
4195
4271
  var removeImage = React.useCallback(function (id) {
4196
4272
  dispatch({ id: id, type: 'removeImageUpload' });
4197
4273
  // TODO: cancel upload if still uploading
4198
4274
  }, []);
4199
4275
  var uploadImage = React.useCallback(function (id) { return __awaiter(void 0, void 0, void 0, function () {
4200
- var img, file, response, error_1, errorMessage, alreadyRemoved;
4276
+ var img, file, canUpload, response, error_1, errorMessage, alreadyRemoved;
4201
4277
  return __generator(this, function (_a) {
4202
4278
  switch (_a.label) {
4203
4279
  case 0:
@@ -4208,22 +4284,35 @@ var useImageUploads = function (props, state, dispatch) {
4208
4284
  if (img.state !== 'uploading') {
4209
4285
  dispatch({ id: id, state: 'uploading', type: 'setImageUpload' });
4210
4286
  }
4211
- _a.label = 1;
4287
+ return [4 /*yield*/, checkUploadPermissions({
4288
+ addNotification: addNotification,
4289
+ file: file,
4290
+ getAppSettings: getAppSettings,
4291
+ t: t,
4292
+ uploadType: 'image',
4293
+ })];
4212
4294
  case 1:
4213
- _a.trys.push([1, 6, , 7]);
4214
- if (!doImageUploadRequest) return [3 /*break*/, 3];
4215
- return [4 /*yield*/, doImageUploadRequest(file, channel)];
4295
+ canUpload = _a.sent();
4296
+ if (!canUpload)
4297
+ return [2 /*return*/, removeImage(id)];
4298
+ _a.label = 2;
4216
4299
  case 2:
4300
+ _a.trys.push([2, 7, , 8]);
4301
+ if (!doImageUploadRequest) return [3 /*break*/, 4];
4302
+ return [4 /*yield*/, doImageUploadRequest(file, channel)];
4303
+ case 3:
4217
4304
  response = _a.sent();
4218
- return [3 /*break*/, 5];
4219
- case 3: return [4 /*yield*/, channel.sendImage(file)];
4220
- case 4:
4305
+ return [3 /*break*/, 6];
4306
+ case 4: return [4 /*yield*/, channel.sendImage(file)];
4307
+ case 5:
4221
4308
  response = _a.sent();
4222
- _a.label = 5;
4223
- case 5: return [3 /*break*/, 7];
4224
- case 6:
4309
+ _a.label = 6;
4310
+ case 6: return [3 /*break*/, 8];
4311
+ case 7:
4225
4312
  error_1 = _a.sent();
4226
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading image');
4313
+ errorMessage = typeof error_1.message === 'string'
4314
+ ? error_1.message
4315
+ : t('Error uploading image');
4227
4316
  addNotification(errorMessage, 'error');
4228
4317
  alreadyRemoved = false;
4229
4318
  if (!imageUploads[id]) {
@@ -4237,7 +4326,7 @@ var useImageUploads = function (props, state, dispatch) {
4237
4326
  errorHandler(error_1, 'upload-image', __assign(__assign({}, file), { id: id }));
4238
4327
  }
4239
4328
  return [2 /*return*/];
4240
- case 7:
4329
+ case 8:
4241
4330
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4242
4331
  // This is for the case if someone wants to handle failure on app level.
4243
4332
  if (!response) {
@@ -4292,9 +4381,10 @@ var useImageUploads = function (props, state, dispatch) {
4292
4381
  var useFileUploads = function (props, state, dispatch) {
4293
4382
  var doFileUploadRequest = props.doFileUploadRequest, errorHandler = props.errorHandler;
4294
4383
  var fileUploads = state.fileUploads;
4295
- var channel = useChannelStateContext().channel;
4296
- var addNotification = useChannelActionContext().addNotification;
4297
- var t = useTranslationContext().t;
4384
+ var channel = useChannelStateContext('useFileUploads').channel;
4385
+ var addNotification = useChannelActionContext('useFileUploads').addNotification;
4386
+ var getAppSettings = useChatContext('useFileUploads').getAppSettings;
4387
+ var t = useTranslationContext('useFileUploads').t;
4298
4388
  var uploadFile = React.useCallback(function (id) {
4299
4389
  dispatch({ id: id, state: 'uploading', type: 'setFileUpload' });
4300
4390
  }, []);
@@ -4304,7 +4394,7 @@ var useFileUploads = function (props, state, dispatch) {
4304
4394
  }, []);
4305
4395
  React.useEffect(function () {
4306
4396
  (function () { return __awaiter(void 0, void 0, void 0, function () {
4307
- var upload, file, id, response, error_1, errorMessage, alreadyRemoved;
4397
+ var upload, file, id, canUpload, response, error_1, errorMessage, alreadyRemoved;
4308
4398
  return __generator(this, function (_a) {
4309
4399
  switch (_a.label) {
4310
4400
  case 0:
@@ -4312,22 +4402,35 @@ var useFileUploads = function (props, state, dispatch) {
4312
4402
  if (!upload)
4313
4403
  return [2 /*return*/];
4314
4404
  file = upload.file, id = upload.id;
4315
- _a.label = 1;
4405
+ return [4 /*yield*/, checkUploadPermissions({
4406
+ addNotification: addNotification,
4407
+ file: file,
4408
+ getAppSettings: getAppSettings,
4409
+ t: t,
4410
+ uploadType: 'file',
4411
+ })];
4316
4412
  case 1:
4317
- _a.trys.push([1, 6, , 7]);
4318
- if (!doFileUploadRequest) return [3 /*break*/, 3];
4319
- return [4 /*yield*/, doFileUploadRequest(file, channel)];
4413
+ canUpload = _a.sent();
4414
+ if (!canUpload)
4415
+ return [2 /*return*/, removeFile(id)];
4416
+ _a.label = 2;
4320
4417
  case 2:
4418
+ _a.trys.push([2, 7, , 8]);
4419
+ if (!doFileUploadRequest) return [3 /*break*/, 4];
4420
+ return [4 /*yield*/, doFileUploadRequest(file, channel)];
4421
+ case 3:
4321
4422
  response = _a.sent();
4322
- return [3 /*break*/, 5];
4323
- case 3: return [4 /*yield*/, channel.sendFile(file)];
4324
- case 4:
4423
+ return [3 /*break*/, 6];
4424
+ case 4: return [4 /*yield*/, channel.sendFile(file)];
4425
+ case 5:
4325
4426
  response = _a.sent();
4326
- _a.label = 5;
4327
- case 5: return [3 /*break*/, 7];
4328
- case 6:
4427
+ _a.label = 6;
4428
+ case 6: return [3 /*break*/, 8];
4429
+ case 7:
4329
4430
  error_1 = _a.sent();
4330
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading file');
4431
+ errorMessage = typeof error_1.message === 'string'
4432
+ ? error_1.message
4433
+ : t('Error uploading file');
4331
4434
  addNotification(errorMessage, 'error');
4332
4435
  alreadyRemoved = false;
4333
4436
  if (!fileUploads[id]) {
@@ -4341,7 +4444,7 @@ var useFileUploads = function (props, state, dispatch) {
4341
4444
  errorHandler(error_1, 'upload-file', file);
4342
4445
  }
4343
4446
  return [2 /*return*/];
4344
- case 7:
4447
+ case 8:
4345
4448
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4346
4449
  // This is for the case if someone wants to handle failure on app level.
4347
4450
  if (!response) {
@@ -4366,10 +4469,10 @@ var useFileUploads = function (props, state, dispatch) {
4366
4469
  };
4367
4470
 
4368
4471
  var apiMaxNumberOfFiles = 10;
4369
- var useAttachments = function (props, state, dispatch) {
4472
+ var useAttachments = function (props, state, dispatch, textareaRef) {
4370
4473
  var noFiles = props.noFiles;
4371
4474
  var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
4372
- var _a = useChannelStateContext(), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4475
+ var _a = useChannelStateContext('useAttachments'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
4373
4476
  var _b = useFileUploads(props, state, dispatch), removeFile = _b.removeFile, uploadFile = _b.uploadFile;
4374
4477
  var _c = useImageUploads(props, state, dispatch), removeImage = _c.removeImage, uploadImage = _c.uploadImage;
4375
4478
  // Number of files that the user can still add. Should never be more than the amount allowed by the API.
@@ -4387,6 +4490,7 @@ var useAttachments = function (props, state, dispatch) {
4387
4490
  var numberOfUploads = numberOfImages + numberOfFiles;
4388
4491
  var maxFilesLeft = maxFilesAllowed - numberOfUploads;
4389
4492
  var uploadNewFiles = React.useCallback(function (files) {
4493
+ var _a;
4390
4494
  Array.from(files)
4391
4495
  .slice(0, maxFilesLeft)
4392
4496
  .forEach(function (file) {
@@ -4400,6 +4504,7 @@ var useAttachments = function (props, state, dispatch) {
4400
4504
  dispatch({ file: file, id: id, state: 'uploading', type: 'setFileUpload' });
4401
4505
  }
4402
4506
  });
4507
+ (_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
4403
4508
  }, [maxFilesLeft, noFiles]);
4404
4509
  return {
4405
4510
  maxFilesLeft: maxFilesLeft,
@@ -4413,7 +4518,7 @@ var useAttachments = function (props, state, dispatch) {
4413
4518
  };
4414
4519
 
4415
4520
  var useMessageInputText = function (props, state, dispatch) {
4416
- var channel = useChannelStateContext().channel;
4521
+ var channel = useChannelStateContext('useMessageInputText').channel;
4417
4522
  var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent, _a = props.publishTypingEvent, publishTypingEvent = _a === void 0 ? true : _a;
4418
4523
  var text = state.text;
4419
4524
  var textareaRef = React.useRef();
@@ -4482,7 +4587,7 @@ var useMessageInputText = function (props, state, dispatch) {
4482
4587
  };
4483
4588
  };
4484
4589
 
4485
- var useEmojiPicker = function (state, dispatch, insertText) {
4590
+ var useEmojiPicker = function (state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick) {
4486
4591
  var emojiPickerRef = React.useRef(null);
4487
4592
  var closeEmojiPicker = React.useCallback(function (event) {
4488
4593
  if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
@@ -4528,9 +4633,17 @@ var useEmojiPicker = function (state, dispatch, insertText) {
4528
4633
  document.removeEventListener('keydown', handleEmojiEscape);
4529
4634
  };
4530
4635
  }, [closeEmojiPicker, state.emojiPickerIsOpen]);
4531
- var onSelectEmoji = React.useCallback(function (emoji) { return insertText(emoji.native); }, [
4532
- insertText,
4533
- ]);
4636
+ var onSelectEmoji = React.useCallback(function (emoji) {
4637
+ var _a;
4638
+ insertText(emoji.native);
4639
+ if (closeEmojiPickerOnClick) {
4640
+ dispatch({
4641
+ type: 'setEmojiPickerIsOpen',
4642
+ value: false,
4643
+ });
4644
+ }
4645
+ (_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
4646
+ }, [insertText]);
4534
4647
  return {
4535
4648
  closeEmojiPicker: closeEmojiPicker,
4536
4649
  emojiPickerRef: emojiPickerRef,
@@ -4550,9 +4663,9 @@ var getAttachmentTypeFromMime = function (mime) {
4550
4663
  var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
4551
4664
  var clearEditingState = props.clearEditingState, message = props.message, overrideSubmitHandler = props.overrideSubmitHandler, parent = props.parent, publishTypingEvent = props.publishTypingEvent;
4552
4665
  var attachments = state.attachments, fileOrder = state.fileOrder, fileUploads = state.fileUploads, imageOrder = state.imageOrder, imageUploads = state.imageUploads, mentioned_users = state.mentioned_users, text = state.text;
4553
- var channel = useChannelStateContext().channel;
4554
- var _a = useChannelActionContext(), addNotification = _a.addNotification, editMessage = _a.editMessage, sendMessage = _a.sendMessage;
4555
- var t = useTranslationContext().t;
4666
+ var channel = useChannelStateContext('useSubmitHandler').channel;
4667
+ var _a = useChannelActionContext('useSubmitHandler'), addNotification = _a.addNotification, editMessage = _a.editMessage, sendMessage = _a.sendMessage;
4668
+ var t = useTranslationContext('useSubmitHandler').t;
4556
4669
  var getAttachmentsFromUploads = function () {
4557
4670
  var imageAttachments = imageOrder
4558
4671
  .map(function (id) { return imageUploads[id]; })
@@ -4745,7 +4858,7 @@ var initState = function (message) {
4745
4858
  var id = generateRandomId();
4746
4859
  acc[id] = {
4747
4860
  file: {
4748
- name: attachment.fallback,
4861
+ name: attachment.fallback || '',
4749
4862
  },
4750
4863
  id: id,
4751
4864
  state: 'finished',
@@ -4852,12 +4965,12 @@ var messageInputReducer = function (state, action) {
4852
4965
  * hook for MessageInput state
4853
4966
  */
4854
4967
  var useMessageInputState = function (props) {
4855
- var _a, _b;
4856
- var message = props.message;
4857
- var channel = useChannelStateContext().channel;
4968
+ var closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, message = props.message;
4969
+ var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
4858
4970
  var _c = React.useReducer(messageInputReducer, message, initState), state = _c[0], dispatch = _c[1];
4859
4971
  var _d = useMessageInputText(props, state, dispatch), handleChange = _d.handleChange, insertText = _d.insertText, textareaRef = _d.textareaRef;
4860
4972
  var _e = React.useState(false), showCommandsList = _e[0], setShowCommandsList = _e[1];
4973
+ var _f = React.useState(false), showMentionsList = _f[0], setShowMentionsList = _f[1];
4861
4974
  var openCommandsList = function () {
4862
4975
  dispatch({
4863
4976
  getNewText: function () { return '/'; },
@@ -4866,11 +4979,19 @@ var useMessageInputState = function (props) {
4866
4979
  setShowCommandsList(true);
4867
4980
  };
4868
4981
  var closeCommandsList = function () { return setShowCommandsList(false); };
4869
- var _f = useEmojiPicker(state, dispatch, insertText), closeEmojiPicker = _f.closeEmojiPicker, emojiPickerRef = _f.emojiPickerRef, handleEmojiKeyDown = _f.handleEmojiKeyDown, onSelectEmoji = _f.onSelectEmoji, openEmojiPicker = _f.openEmojiPicker;
4870
- 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;
4982
+ var openMentionsList = function () {
4983
+ dispatch({
4984
+ getNewText: function () { return '@'; },
4985
+ type: 'setText',
4986
+ });
4987
+ setShowMentionsList(true);
4988
+ };
4989
+ var closeMentionsList = function () { return setShowMentionsList(false); };
4990
+ var _g = useEmojiPicker(state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick), closeEmojiPicker = _g.closeEmojiPicker, emojiPickerRef = _g.emojiPickerRef, handleEmojiKeyDown = _g.handleEmojiKeyDown, onSelectEmoji = _g.onSelectEmoji, openEmojiPicker = _g.openEmojiPicker;
4991
+ var _h = useAttachments(props, state, dispatch, textareaRef), maxFilesLeft = _h.maxFilesLeft, numberOfUploads = _h.numberOfUploads, removeFile = _h.removeFile, removeImage = _h.removeImage, uploadFile = _h.uploadFile, uploadImage = _h.uploadImage, uploadNewFiles = _h.uploadNewFiles;
4871
4992
  var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads).handleSubmit;
4872
4993
  var onPaste = usePasteHandler(uploadNewFiles, insertText).onPaste;
4873
- 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;
4994
+ var isUploadEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.uploads) !== false && channelCapabilities['upload-file'] !== false;
4874
4995
  var onSelectUser = React.useCallback(function (item) {
4875
4996
  dispatch({ type: 'addMentionedUser', user: item });
4876
4997
  }, []);
@@ -4882,12 +5003,12 @@ var useMessageInputState = function (props) {
4882
5003
  * TODO: fix the below at some point because this type casting is wrong
4883
5004
  * and just forced to not have warnings currently with the unknown casting
4884
5005
  */
4885
- 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 });
5006
+ 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 });
4886
5007
  };
4887
5008
 
4888
5009
  var QuotedMessagePreviewHeader = function () {
4889
- var setQuotedMessage = useChannelActionContext().setQuotedMessage;
4890
- var t = useTranslationContext().t;
5010
+ var setQuotedMessage = useChannelActionContext('QuotedMessagePreview').setQuotedMessage;
5011
+ var t = useTranslationContext('QuotedMessagePreview').t;
4891
5012
  return (React__default['default'].createElement("div", { className: 'quoted-message-preview-header' },
4892
5013
  React__default['default'].createElement("div", null, t('Reply to Message')),
4893
5014
  React__default['default'].createElement("button", { className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
@@ -4897,8 +5018,8 @@ var QuotedMessagePreviewHeader = function () {
4897
5018
  var QuotedMessagePreview = function (props) {
4898
5019
  var _a;
4899
5020
  var quotedMessage = props.quotedMessage;
4900
- var Attachment = useComponentContext().Attachment;
4901
- var userLanguage = useTranslationContext().userLanguage;
5021
+ var Attachment = useComponentContext('QuotedMessagePreview').Attachment;
5022
+ var userLanguage = useTranslationContext('QuotedMessagePreview').userLanguage;
4902
5023
  var quotedMessageText = ((_a = quotedMessage.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) ||
4903
5024
  quotedMessage.text;
4904
5025
  // @ts-expect-error
@@ -4918,10 +5039,10 @@ var QuotedMessagePreview = function (props) {
4918
5039
  };
4919
5040
 
4920
5041
  var MessageInputFlat = function () {
4921
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
4922
- var t = useTranslationContext().t;
4923
- 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;
4924
- 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;
5042
+ var _a = useChannelStateContext('MessageInputFlat'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
5043
+ var t = useTranslationContext('MessageInputFlat').t;
5044
+ 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;
5045
+ 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;
4925
5046
  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) },
4926
5047
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
4927
5048
  quotedMessage && React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage }),
@@ -4945,7 +5066,7 @@ var MessageInputFlat = function () {
4945
5066
  };
4946
5067
 
4947
5068
  var useCreateMessageInputContext = function (value) {
4948
- var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, 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, 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;
5069
+ 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;
4949
5070
  var editing = message === null || message === void 0 ? void 0 : message.editing;
4950
5071
  var fileUploadsValue = Object.entries(fileUploads)
4951
5072
  // eslint-disable-next-line
@@ -4970,6 +5091,7 @@ var useCreateMessageInputContext = function (value) {
4970
5091
  clearEditingState: clearEditingState,
4971
5092
  closeCommandsList: closeCommandsList,
4972
5093
  closeEmojiPicker: closeEmojiPicker,
5094
+ closeMentionsList: closeMentionsList,
4973
5095
  cooldownInterval: cooldownInterval,
4974
5096
  cooldownRemaining: cooldownRemaining,
4975
5097
  disabled: disabled,
@@ -5005,6 +5127,7 @@ var useCreateMessageInputContext = function (value) {
5005
5127
  onSelectUser: onSelectUser,
5006
5128
  openCommandsList: openCommandsList,
5007
5129
  openEmojiPicker: openEmojiPicker,
5130
+ openMentionsList: openMentionsList,
5008
5131
  overrideSubmitHandler: overrideSubmitHandler,
5009
5132
  parent: parent,
5010
5133
  publishTypingEvent: publishTypingEvent,
@@ -5013,6 +5136,7 @@ var useCreateMessageInputContext = function (value) {
5013
5136
  setCooldownRemaining: setCooldownRemaining,
5014
5137
  setText: setText,
5015
5138
  showCommandsList: showCommandsList,
5139
+ showMentionsList: showMentionsList,
5016
5140
  text: text,
5017
5141
  textareaRef: textareaRef,
5018
5142
  uploadFile: uploadFile,
@@ -5030,19 +5154,30 @@ var useCreateMessageInputContext = function (value) {
5030
5154
  mentionedUsersLength,
5031
5155
  parentId,
5032
5156
  publishTypingEvent,
5157
+ showCommandsList,
5158
+ showMentionsList,
5033
5159
  text,
5034
5160
  ]);
5035
5161
  return messageInputContext;
5036
5162
  };
5037
5163
 
5164
+ var MessageInputProvider = function (props) {
5165
+ var cooldownTimerState = useCooldownTimer();
5166
+ var messageInputState = useMessageInputState(props);
5167
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5168
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue }, props.children));
5169
+ };
5038
5170
  var UnMemoizedMessageInput = function (props) {
5039
5171
  var PropInput = props.Input;
5040
- var _a = useComponentContext(), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
5172
+ var dragAndDropWindow = useChannelStateContext().dragAndDropWindow;
5173
+ var _a = useComponentContext('MessageInput'), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
5041
5174
  var Input = PropInput || ContextInput || MessageInputFlat;
5042
- var messageInputState = useMessageInputState(props);
5043
- var cooldownTimerState = useCooldownTimer();
5044
- var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5045
- return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5175
+ var NullProvider = function (_a) {
5176
+ var children = _a.children;
5177
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
5178
+ };
5179
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? NullProvider : MessageInputProvider); }, [dragAndDropWindow]);
5180
+ return (React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, props),
5046
5181
  React__default['default'].createElement(TriggerProvider, null,
5047
5182
  React__default['default'].createElement(Input, null))));
5048
5183
  };
@@ -5052,10 +5187,10 @@ var UnMemoizedMessageInput = function (props) {
5052
5187
  var MessageInput = React__default['default'].memo(UnMemoizedMessageInput);
5053
5188
 
5054
5189
  var MessageInputSmall = function () {
5055
- var _a = useChannelStateContext(), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
5056
- var t = useTranslationContext().t;
5057
- 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;
5058
- 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;
5190
+ var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
5191
+ var t = useTranslationContext('MessageInputSmall').t;
5192
+ 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;
5193
+ 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;
5059
5194
  return (React__default['default'].createElement("div", { className: 'str-chat__small-message-input__wrapper' },
5060
5195
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
5061
5196
  React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) },
@@ -5095,14 +5230,14 @@ var MMLReact = React__default['default'].lazy(function () { return __awaiter(voi
5095
5230
  */
5096
5231
  var MML = function (props) {
5097
5232
  var actionHandler = props.actionHandler, _a = props.align, align = _a === void 0 ? 'right' : _a, source = props.source;
5098
- var theme = useChatContext().theme;
5233
+ var theme = useChatContext('MML').theme;
5099
5234
  return (React__default['default'].createElement(React.Suspense, { fallback: null },
5100
5235
  React__default['default'].createElement(MMLReact, { className: "mml-align-" + align, Loading: null, onSubmit: actionHandler, source: source, Success: null, theme: (theme || '').replace(' ', '-') })));
5101
5236
  };
5102
5237
 
5103
5238
  var Modal = function (props) {
5104
5239
  var children = props.children, onClose = props.onClose, open = props.open;
5105
- var t = useTranslationContext().t;
5240
+ var t = useTranslationContext('Modal').t;
5106
5241
  var innerRef = React.useRef(null);
5107
5242
  var handleClick = function (event) {
5108
5243
  var _a;
@@ -5142,9 +5277,9 @@ var isMutableRef = function (ref) {
5142
5277
  var UnMemoizedReactionSelector = React__default['default'].forwardRef(function (props, ref) {
5143
5278
  var _a;
5144
5279
  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;
5145
- var contextAvatar = useComponentContext().Avatar;
5146
- var _e = useEmojiContext(), Emoji = _e.Emoji, emojiConfig = _e.emojiConfig;
5147
- var _f = useMessageContext(), contextHandleReaction = _f.handleReaction, message = _f.message;
5280
+ var contextAvatar = useComponentContext('ReactionSelector').Avatar;
5281
+ var _e = useEmojiContext('ReactionSelector'), Emoji = _e.Emoji, emojiConfig = _e.emojiConfig;
5282
+ var _f = useMessageContext('ReactionSelector'), contextHandleReaction = _f.handleReaction, message = _f.message;
5148
5283
  var _g = emojiConfig || {}, defaultMinimalEmojis = _g.defaultMinimalEmojis, fullEmojiData = _g.emojiData, emojiSetDef = _g.emojiSetDef;
5149
5284
  var Avatar$1 = propAvatar || contextAvatar || Avatar;
5150
5285
  var handleReaction = propHandleReaction || contextHandleReaction;
@@ -5224,8 +5359,8 @@ var ReactionSelector = React__default['default'].memo(UnMemoizedReactionSelector
5224
5359
 
5225
5360
  var UnMemoizedReactionsList = function (props) {
5226
5361
  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;
5227
- var _b = useEmojiContext(), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5228
- var _c = useMessageContext(), message = _c.message, onReactionListClick = _c.onReactionListClick;
5362
+ var _b = useEmojiContext('ReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5363
+ var _c = useMessageContext('ReactionsList'), message = _c.message, onReactionListClick = _c.onReactionListClick;
5229
5364
  var _d = emojiConfig || {}, defaultMinimalEmojis = _d.defaultMinimalEmojis, fullEmojiData = _d.emojiData, emojiSetDef = _d.emojiSetDef;
5230
5365
  var reactions = propReactions || message.latest_reactions || [];
5231
5366
  var reactionCounts = propReactionCounts || message.reaction_counts || {};
@@ -5283,8 +5418,8 @@ var ReactionsList = React__default['default'].memo(UnMemoizedReactionsList);
5283
5418
 
5284
5419
  var UnMemoizedSimpleReactionsList = function (props) {
5285
5420
  var _a = props.additionalEmojiProps, additionalEmojiProps = _a === void 0 ? {} : _a, propHandleReaction = props.handleReaction, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, propReactions = props.reactions;
5286
- var _b = useEmojiContext(), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5287
- var _c = useMessageContext(), contextHandleReaction = _c.handleReaction, message = _c.message;
5421
+ var _b = useEmojiContext('SimpleReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
5422
+ var _c = useMessageContext('SimpleReactionsList'), contextHandleReaction = _c.handleReaction, message = _c.message;
5288
5423
  var _d = emojiConfig || {}, defaultMinimalEmojis = _d.defaultMinimalEmojis, fullEmojiData = _d.emojiData, emojiSetDef = _d.emojiSetDef;
5289
5424
  var _e = React.useState(undefined), tooltipReactionType = _e[0], setTooltipReactionType = _e[1];
5290
5425
  var handleReaction = propHandleReaction || contextHandleReaction;
@@ -5356,7 +5491,7 @@ var SimpleReactionsList = React__default['default'].memo(UnMemoizedSimpleReactio
5356
5491
  var MessageSimpleWithContext = function (props) {
5357
5492
  var _a;
5358
5493
  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;
5359
- 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;
5494
+ 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;
5360
5495
  var messageWrapperRef = React.useRef(null);
5361
5496
  var hasAttachment = messageHasAttachments(message);
5362
5497
  var hasReactions = messageHasReactions(message);
@@ -5396,19 +5531,34 @@ var MemoizedMessageSimple = React__default['default'].memo(MessageSimpleWithCont
5396
5531
  * The default UI component that renders a message and receives functionality and logic from the MessageContext.
5397
5532
  */
5398
5533
  var MessageSimple = function (props) {
5399
- var messageContext = useMessageContext();
5534
+ var messageContext = useMessageContext('MessageSimple');
5400
5535
  return React__default['default'].createElement(MemoizedMessageSimple, __assign({}, messageContext, props));
5401
5536
  };
5402
5537
 
5538
+ var DropzoneInner = function (_a) {
5539
+ var children = _a.children;
5540
+ var _b = useChannelStateContext('DropzoneProvider'), acceptedFiles = _b.acceptedFiles, multipleUploads = _b.multipleUploads;
5541
+ var _c = useMessageInputContext('DropzoneProvider'), cooldownRemaining = _c.cooldownRemaining, isUploadEnabled = _c.isUploadEnabled, maxFilesLeft = _c.maxFilesLeft, uploadNewFiles = _c.uploadNewFiles;
5542
+ return (React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads }, children));
5543
+ };
5544
+ var DropzoneProvider = function (props) {
5545
+ var cooldownTimerState = useCooldownTimer();
5546
+ var messageInputState = useMessageInputState(props);
5547
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5548
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5549
+ React__default['default'].createElement(DropzoneInner, null, props.children)));
5550
+ };
5551
+
5403
5552
  var TypingContext = React__default['default'].createContext(undefined);
5404
5553
  var TypingProvider = function (_a) {
5405
5554
  var children = _a.children, value = _a.value;
5406
5555
  return (React__default['default'].createElement(TypingContext.Provider, { value: value }, children));
5407
5556
  };
5408
- var useTypingContext = function () {
5557
+ var useTypingContext = function (componentName) {
5409
5558
  var contextValue = React.useContext(TypingContext);
5410
5559
  if (!contextValue) {
5411
- throw new Error('The useTypingContext hook was called outside of the TypingContext provider. Make sure this hook is called within a child of the Channel component.');
5560
+ 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.");
5561
+ return {};
5412
5562
  }
5413
5563
  return contextValue;
5414
5564
  };
@@ -5432,25 +5582,27 @@ var compressed=true;var categories=[{id:"people",name:"Smileys & People",emojis:
5432
5582
 
5433
5583
  var UnMemoizedChannel = function (props) {
5434
5584
  var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a;
5435
- var contextChannel = useChatContext().channel;
5585
+ var contextChannel = useChatContext('Channel').channel;
5436
5586
  var channel = propsChannel || contextChannel;
5437
5587
  if (!(channel === null || channel === void 0 ? void 0 : channel.cid))
5438
5588
  return EmptyPlaceholder;
5439
5589
  return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
5440
5590
  };
5441
5591
  var ChannelInner = function (props) {
5442
- 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;
5443
- var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
5444
- var t = useTranslationContext().t;
5445
- var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
5446
- var _g = React.useState(), quotedMessage = _g[0], setQuotedMessage = _g[1];
5592
+ var _a;
5593
+ 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;
5594
+ var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, mutes = _h.mutes, theme = _h.theme, useImageFlagEmojisOnWindows = _h.useImageFlagEmojisOnWindows;
5595
+ var t = useTranslationContext('Channel').t;
5596
+ var _j = React.useState(channel.getConfig()), channelConfig = _j[0], setChannelConfig = _j[1];
5597
+ var _k = React.useState([]), notifications = _k[0], setNotifications = _k[1];
5598
+ var _l = React.useState(), quotedMessage = _l[0], setQuotedMessage = _l[1];
5447
5599
  var notificationTimeouts = [];
5448
- var _h = React.useReducer(channelReducer, initialState), state = _h[0], dispatch = _h[1];
5600
+ var _m = React.useReducer(channelReducer, initialState), state = _m[0], dispatch = _m[1];
5449
5601
  var isMounted = useIsMounted();
5450
5602
  var originalTitle = React.useRef('');
5451
5603
  var lastRead = React.useRef(new Date());
5452
5604
  var online = React.useRef(true);
5453
- var channelConfig = channel.getConfig();
5605
+ var channelCapabilitiesArray = (_a = channel.data) === null || _a === void 0 ? void 0 : _a.own_capabilities;
5454
5606
  var emojiConfig = {
5455
5607
  commonEmoji: commonEmoji,
5456
5608
  defaultMinimalEmojis: defaultMinimalEmojis,
@@ -5472,7 +5624,10 @@ var ChannelInner = function (props) {
5472
5624
  else {
5473
5625
  streamChat.logChatPromiseExecution(channel.markRead(), 'mark read');
5474
5626
  }
5475
- if (originalTitle.current) {
5627
+ if (activeUnreadHandler) {
5628
+ activeUnreadHandler(0, originalTitle.current);
5629
+ }
5630
+ else if (originalTitle.current) {
5476
5631
  document.title = originalTitle.current;
5477
5632
  }
5478
5633
  };
@@ -5525,7 +5680,7 @@ var ChannelInner = function (props) {
5525
5680
  markRead();
5526
5681
  };
5527
5682
  (function () { return __awaiter(void 0, void 0, void 0, function () {
5528
- var e_1;
5683
+ var config, e_1;
5529
5684
  return __generator(this, function (_a) {
5530
5685
  switch (_a.label) {
5531
5686
  case 0:
@@ -5536,6 +5691,8 @@ var ChannelInner = function (props) {
5536
5691
  return [4 /*yield*/, channel.watch()];
5537
5692
  case 2:
5538
5693
  _a.sent();
5694
+ config = channel.getConfig();
5695
+ setChannelConfig(config);
5539
5696
  return [3 /*break*/, 4];
5540
5697
  case 3:
5541
5698
  e_1 = _a.sent();
@@ -5804,7 +5961,7 @@ var ChannelInner = function (props) {
5804
5961
  var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
5805
5962
  var editMessage = useEditMessageHandler(doUpdateMessageRequest);
5806
5963
  var typing = state.typing, restState = __rest(state, ["typing"]);
5807
- 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 }));
5964
+ 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 }));
5808
5965
  var channelActionContextValue = React.useMemo(function () { return ({
5809
5966
  addNotification: addNotification,
5810
5967
  closeThread: closeThread,
@@ -5874,6 +6031,11 @@ var ChannelInner = function (props) {
5874
6031
  var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
5875
6032
  ? 'str-chat--windows-flags'
5876
6033
  : '';
6034
+ var NullProvider = function (_a) {
6035
+ var children = _a.children;
6036
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
6037
+ };
6038
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? DropzoneProvider : NullProvider); }, [dragAndDropWindow]);
5877
6039
  if (state.error) {
5878
6040
  return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
5879
6041
  React__default['default'].createElement(LoadingErrorIndicator$1, { error: state.error })));
@@ -5892,7 +6054,8 @@ var ChannelInner = function (props) {
5892
6054
  React__default['default'].createElement(ComponentProvider, { value: componentContextValue },
5893
6055
  React__default['default'].createElement(EmojiProvider, { value: emojiContextValue },
5894
6056
  React__default['default'].createElement(TypingProvider, { value: typingContextValue },
5895
- React__default['default'].createElement("div", { className: "" + chatContainerClass }, children))))))));
6057
+ React__default['default'].createElement("div", { className: "" + chatContainerClass },
6058
+ React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, optionalMessageInputProps), children)))))))));
5896
6059
  };
5897
6060
  /**
5898
6061
  * A wrapper component that provides channel data and renders children.
@@ -5907,9 +6070,9 @@ var Channel = React__default['default'].memo(UnMemoizedChannel);
5907
6070
 
5908
6071
  var UnMemoizedChannelHeader = function (props) {
5909
6072
  var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, propImage = props.image, live = props.live, title = props.title;
5910
- var _b = useChannelStateContext(), channel = _b.channel, watcher_count = _b.watcher_count;
5911
- var openMobileNav = useChatContext().openMobileNav;
5912
- var t = useTranslationContext().t;
6073
+ var _b = useChannelStateContext('ChannelHeader'), channel = _b.channel, watcher_count = _b.watcher_count;
6074
+ var openMobileNav = useChatContext('ChannelHeader').openMobileNav;
6075
+ var t = useTranslationContext('ChannelHeader').t;
5913
6076
  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;
5914
6077
  var image = propImage || channelImage;
5915
6078
  return (React__default['default'].createElement("div", { className: 'str-chat__header-livestream' },
@@ -5942,7 +6105,7 @@ var img = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3cs
5942
6105
 
5943
6106
  var UnMemoizedChatDown = function (props) {
5944
6107
  var image = props.image, text = props.text, _a = props.type, type = _a === void 0 ? 'Error' : _a;
5945
- var t = useTranslationContext().t;
6108
+ var t = useTranslationContext('ChatDown').t;
5946
6109
  return (React__default['default'].createElement("div", { className: 'str-chat__down' },
5947
6110
  React__default['default'].createElement(LoadingChannels, null),
5948
6111
  React__default['default'].createElement("div", { className: 'str-chat__down-main' },
@@ -5971,7 +6134,7 @@ var ChannelListMessenger = function (props) {
5971
6134
  };
5972
6135
 
5973
6136
  var useChannelDeletedListener = function (setChannels, customHandler) {
5974
- var client = useChatContext().client;
6137
+ var client = useChatContext('useChannelDeletedListener').client;
5975
6138
  React.useEffect(function () {
5976
6139
  var handleEvent = function (event) {
5977
6140
  if (customHandler && typeof customHandler === 'function') {
@@ -5996,7 +6159,7 @@ var useChannelDeletedListener = function (setChannels, customHandler) {
5996
6159
  };
5997
6160
 
5998
6161
  var useChannelHiddenListener = function (setChannels, customHandler) {
5999
- var client = useChatContext().client;
6162
+ var client = useChatContext('useChannelHiddenListener').client;
6000
6163
  React.useEffect(function () {
6001
6164
  var handleEvent = function (event) {
6002
6165
  if (customHandler && typeof customHandler === 'function') {
@@ -6021,7 +6184,7 @@ var useChannelHiddenListener = function (setChannels, customHandler) {
6021
6184
  };
6022
6185
 
6023
6186
  var useChannelTruncatedListener = function (setChannels, customHandler, forceUpdate) {
6024
- var client = useChatContext().client;
6187
+ var client = useChatContext('useChannelTruncatedListener').client;
6025
6188
  React.useEffect(function () {
6026
6189
  var handleEvent = function (event) {
6027
6190
  setChannels(function (channels) { return __spreadArray([], channels); });
@@ -6040,7 +6203,7 @@ var useChannelTruncatedListener = function (setChannels, customHandler, forceUpd
6040
6203
  };
6041
6204
 
6042
6205
  var useChannelUpdatedListener = function (setChannels, customHandler, forceUpdate) {
6043
- var client = useChatContext().client;
6206
+ var client = useChatContext('useChannelUpdatedListener').client;
6044
6207
  React.useEffect(function () {
6045
6208
  var handleEvent = function (event) {
6046
6209
  setChannels(function (channels) {
@@ -6092,7 +6255,7 @@ var moveChannelUp = function (_a) {
6092
6255
  };
6093
6256
 
6094
6257
  var useChannelVisibleListener = function (setChannels, customHandler) {
6095
- var client = useChatContext().client;
6258
+ var client = useChatContext('useChannelVisibleListener').client;
6096
6259
  React.useEffect(function () {
6097
6260
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6098
6261
  var channel_1;
@@ -6121,7 +6284,7 @@ var useChannelVisibleListener = function (setChannels, customHandler) {
6121
6284
  };
6122
6285
 
6123
6286
  var useConnectionRecoveredListener = function (forceUpdate) {
6124
- var client = useChatContext().client;
6287
+ var client = useChatContext('useConnectionRecoveredListener').client;
6125
6288
  React.useEffect(function () {
6126
6289
  var handleEvent = function () {
6127
6290
  if (forceUpdate) {
@@ -6138,7 +6301,7 @@ var useConnectionRecoveredListener = function (forceUpdate) {
6138
6301
  var useMessageNewListener = function (setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels) {
6139
6302
  if (lockChannelOrder === void 0) { lockChannelOrder = false; }
6140
6303
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6141
- var client = useChatContext().client;
6304
+ var client = useChatContext('useMessageNewListener').client;
6142
6305
  React.useEffect(function () {
6143
6306
  var handleEvent = function (event) {
6144
6307
  setChannels(function (channels) {
@@ -6178,7 +6341,7 @@ var useMobileNavigation = function (channelListRef, navOpen, closeMobileNav) {
6178
6341
 
6179
6342
  var useNotificationAddedToChannelListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
6180
6343
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6181
- var client = useChatContext().client;
6344
+ var client = useChatContext('useNotificationAddedToChannelListener').client;
6182
6345
  React.useEffect(function () {
6183
6346
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6184
6347
  var channel_1;
@@ -6209,7 +6372,7 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
6209
6372
 
6210
6373
  var useNotificationMessageNewListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
6211
6374
  if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
6212
- var client = useChatContext().client;
6375
+ var client = useChatContext('useNotificationMessageNewListener').client;
6213
6376
  React.useEffect(function () {
6214
6377
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
6215
6378
  var channel_1;
@@ -6239,7 +6402,7 @@ var useNotificationMessageNewListener = function (setChannels, customHandler, al
6239
6402
  };
6240
6403
 
6241
6404
  var useNotificationRemovedFromChannelListener = function (setChannels, customHandler) {
6242
- var client = useChatContext().client;
6405
+ var client = useChatContext('useNotificationRemovedFromChannelListener').client;
6243
6406
  React.useEffect(function () {
6244
6407
  var handleEvent = function (event) {
6245
6408
  if (customHandler && typeof customHandler === 'function') {
@@ -6270,6 +6433,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
6270
6433
  return __generator(this, function (_b) {
6271
6434
  switch (_b.label) {
6272
6435
  case 0:
6436
+ setError(false);
6273
6437
  if (queryType === 'reload') {
6274
6438
  setChannels([]);
6275
6439
  setLoadingChannels(true);
@@ -6323,7 +6487,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
6323
6487
  };
6324
6488
 
6325
6489
  var useUserPresenceChangedListener = function (setChannels) {
6326
- var client = useChatContext().client;
6490
+ var client = useChatContext('useUserPresenceChangedListener').client;
6327
6491
  React.useEffect(function () {
6328
6492
  var handleEvent = function (event) {
6329
6493
  setChannels(function (channels) {
@@ -6376,7 +6540,7 @@ var UnMemoizedChannelPreviewMessenger = function (props) {
6376
6540
  var ChannelPreviewMessenger = React__default['default'].memo(UnMemoizedChannelPreviewMessenger);
6377
6541
 
6378
6542
  var useIsChannelMuted = function (channel) {
6379
- var client = useChatContext().client;
6543
+ var client = useChatContext('useIsChannelMuted').client;
6380
6544
  var _a = React.useState(channel.muteStatus()), muted = _a[0], setMuted = _a[1];
6381
6545
  React.useEffect(function () {
6382
6546
  var handleEvent = function () { return setMuted(channel.muteStatus()); };
@@ -6438,8 +6602,8 @@ var getDisplayImage = function (channel, currentUser) {
6438
6602
 
6439
6603
  var ChannelPreview = function (props) {
6440
6604
  var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a;
6441
- var _b = useChatContext(), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
6442
- var _c = useTranslationContext(), t = _c.t, userLanguage = _c.userLanguage;
6605
+ var _b = useChatContext('ChannelPreview'), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
6606
+ var _c = useTranslationContext('ChannelPreview'), t = _c.t, userLanguage = _c.userLanguage;
6443
6607
  var _d = React.useState(channel.state.messages[channel.state.messages.length - 1]), lastMessage = _d[0], setLastMessage = _d[1];
6444
6608
  var _e = React.useState(0), unread = _e[0], setUnread = _e[1];
6445
6609
  var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
@@ -6492,7 +6656,7 @@ var ChannelPreview = function (props) {
6492
6656
 
6493
6657
  var SearchInput = function (props) {
6494
6658
  var channelSearchParams = props.channelSearchParams, inputRef = props.inputRef, onSearch = props.onSearch, query = props.query, searchFunction = props.searchFunction;
6495
- var t = useTranslationContext().t;
6659
+ var t = useTranslationContext('SearchInput').t;
6496
6660
  return (React__default['default'].createElement("input", { className: 'str-chat__channel-search-input', onChange: function (event) {
6497
6661
  return searchFunction ? searchFunction(channelSearchParams, event) : onSearch(event);
6498
6662
  }, placeholder: t('Search'), ref: inputRef, type: 'text', value: query }));
@@ -6524,7 +6688,7 @@ var DefaultSearchResultItem = function (props) {
6524
6688
  };
6525
6689
  var SearchResults = function (props) {
6526
6690
  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;
6527
- var t = useTranslationContext().t;
6691
+ var t = useTranslationContext('SearchResults').t;
6528
6692
  var _c = React.useState(), focusedUser = _c[0], setFocusedUser = _c[1];
6529
6693
  var device = useBreakpoint().device;
6530
6694
  var containerStyle = popupResults && device === 'full' ? 'popup' : 'inline';
@@ -6572,7 +6736,7 @@ var SearchResults = function (props) {
6572
6736
 
6573
6737
  var UnMemoizedChannelSearch = function (props) {
6574
6738
  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;
6575
- var _e = useChatContext(), client = _e.client, setActiveChannel = _e.setActiveChannel;
6739
+ var _e = useChatContext('ChannelSearch'), client = _e.client, setActiveChannel = _e.setActiveChannel;
6576
6740
  var _f = React.useState(''), query = _f[0], setQuery = _f[1];
6577
6741
  var _g = React.useState([]), results = _g[0], setResults = _g[1];
6578
6742
  var _h = React.useState(false), resultsOpen = _h[0], setResultsOpen = _h[1];
@@ -6686,7 +6850,7 @@ var ChannelSearch = React__default['default'].memo(UnMemoizedChannelSearch);
6686
6850
 
6687
6851
  var UnMemoizedEmptyStateIndicator = function (props) {
6688
6852
  var listType = props.listType;
6689
- var t = useTranslationContext().t;
6853
+ var t = useTranslationContext('EmptyStateIndicator').t;
6690
6854
  if (listType === 'channel')
6691
6855
  return React__default['default'].createElement("p", null, t('You have no channels currently'));
6692
6856
  if (listType === 'message')
@@ -6716,7 +6880,7 @@ var DEFAULT_OPTIONS = {};
6716
6880
  var DEFAULT_SORT = {};
6717
6881
  var UnMemoizedChannelList = function (props) {
6718
6882
  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;
6719
- 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;
6883
+ 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;
6720
6884
  var channelListRef = React.useRef(null);
6721
6885
  var _q = React.useState(0), channelUpdateCount = _q[0], setChannelUpdateCount = _q[1];
6722
6886
  /**
@@ -6728,7 +6892,7 @@ var UnMemoizedChannelList = function (props) {
6728
6892
  return __generator(this, function (_a) {
6729
6893
  switch (_a.label) {
6730
6894
  case 0:
6731
- if (channels.length === 0 || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6895
+ if (!channels.length || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6732
6896
  return [2 /*return*/];
6733
6897
  }
6734
6898
  if (!customActiveChannel) return [3 /*break*/, 3];
@@ -6779,7 +6943,7 @@ var UnMemoizedChannelList = function (props) {
6779
6943
  useUserPresenceChangedListener(setChannels);
6780
6944
  React.useEffect(function () {
6781
6945
  var handleEvent = function (event) {
6782
- if (setActiveChannel && (event === null || event === void 0 ? void 0 : event.cid) === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6946
+ if (event.cid === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6783
6947
  setActiveChannel();
6784
6948
  }
6785
6949
  };
@@ -6789,10 +6953,8 @@ var UnMemoizedChannelList = function (props) {
6789
6953
  client.off('channel.deleted', handleEvent);
6790
6954
  client.off('channel.hidden', handleEvent);
6791
6955
  };
6792
- }, [channel]);
6956
+ }, [channel === null || channel === void 0 ? void 0 : channel.cid]);
6793
6957
  var renderChannel = function (item) {
6794
- if (!item)
6795
- return null;
6796
6958
  var previewProps = {
6797
6959
  activeChannel: channel,
6798
6960
  Avatar: Avatar$1,
@@ -6805,7 +6967,6 @@ var UnMemoizedChannelList = function (props) {
6805
6967
  };
6806
6968
  return React__default['default'].createElement(ChannelPreview, __assign({}, previewProps));
6807
6969
  };
6808
- 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))))); };
6809
6970
  var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
6810
6971
  var channelListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) || 'str-chat-channel-list';
6811
6972
  var navigationClass = navOpen ? 'str-chat-channel-list--open' : '';
@@ -6815,36 +6976,36 @@ var UnMemoizedChannelList = function (props) {
6815
6976
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6816
6977
  React__default['default'].createElement("div", { className: chatClass + " " + channelListClass + " " + theme + " " + navigationClass + " " + windowsEmojiClass, ref: channelListRef },
6817
6978
  showChannelSearch && React__default['default'].createElement(ChannelSearch$1, __assign({}, additionalChannelSearchProps)),
6818
- renderList())));
6979
+ 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)))))));
6819
6980
  };
6820
6981
  /**
6821
6982
  * Renders a preview list of Channels, allowing you to select the Channel you want to open
6822
6983
  */
6823
6984
  var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
6824
6985
 
6825
- 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..."};
6986
+ 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..."};
6826
6987
 
6827
- 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..."};
6988
+ 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..."};
6828
6989
 
6829
- 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..."};
6990
+ 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..."};
6830
6991
 
6831
- 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..."};
6992
+ 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..."};
6832
6993
 
6833
- 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...":"🏙 अटैचमेंट"};
6994
+ 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...":"🏙 अटैचमेंट"};
6834
6995
 
6835
- 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..."};
6996
+ 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..."};
6836
6997
 
6837
- 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...":"🏙 アタッチメント..."};
6998
+ 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...":"🏙 アタッチメント..."};
6838
6999
 
6839
- 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...":"🏙 부착..."};
7000
+ 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...":"🏙 부착..."};
6840
7001
 
6841
- 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..."};
7002
+ 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..."};
6842
7003
 
6843
- 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 ..."};
7004
+ 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 ..."};
6844
7005
 
6845
- 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...":"🏙 Вложение..."};
7006
+ 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...":"🏙 Вложение..."};
6846
7007
 
6847
- 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..."};
7008
+ 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..."};
6848
7009
 
6849
7010
  var defaultNS = 'translation';
6850
7011
  var defaultLng = 'en';
@@ -6852,9 +7013,9 @@ Dayjs__default['default'].extend(updateLocale__default['default']);
6852
7013
  Dayjs__default['default'].updateLocale('de', {
6853
7014
  calendar: {
6854
7015
  lastDay: '[gestern um] LT',
6855
- lastWeek: '[vergangenheit] dddd [beim] LT',
7016
+ lastWeek: '[letzten] dddd [bei] LT',
6856
7017
  nextDay: '[morgen zu] LT',
6857
- nextWeek: 'dddd [beim] LT',
7018
+ nextWeek: 'dddd [bei] LT',
6858
7019
  sameDay: '[heute um] LT',
6859
7020
  sameElse: 'L',
6860
7021
  },
@@ -6940,19 +7101,19 @@ Dayjs__default['default'].updateLocale('it', {
6940
7101
  Dayjs__default['default'].updateLocale('ja', {
6941
7102
  calendar: {
6942
7103
  lastDay: '[昨日] LT',
6943
- lastWeek: '[過去] dddd [で] LT',
7104
+ lastWeek: 'dddd LT',
6944
7105
  nextDay: '[明日] LT',
6945
- nextWeek: 'dddd [] LT',
6946
- sameDay: '[今日は] LT',
7106
+ nextWeek: '[次の] dddd LT',
7107
+ sameDay: '[今日] LT',
6947
7108
  sameElse: 'L',
6948
7109
  },
6949
7110
  });
6950
7111
  Dayjs__default['default'].updateLocale('ko', {
6951
7112
  calendar: {
6952
7113
  lastDay: '[어제] LT',
6953
- lastWeek: '[마지막] dddd [~에] LT',
7114
+ lastWeek: '[지난] dddd LT',
6954
7115
  nextDay: '[내일] LT',
6955
- nextWeek: 'dddd [~에] LT',
7116
+ nextWeek: 'dddd LT',
6956
7117
  sameDay: '[오늘] LT',
6957
7118
  sameElse: 'L',
6958
7119
  },
@@ -7445,7 +7606,7 @@ var Streami18n = /** @class */ (function () {
7445
7606
  return Streami18n;
7446
7607
  }());
7447
7608
 
7448
- var version = '6.9.1';
7609
+ var version = '6.12.1';
7449
7610
 
7450
7611
  var useChat = function (_a) {
7451
7612
  var _b;
@@ -7461,13 +7622,19 @@ var useChat = function (_a) {
7461
7622
  var clientMutes = (_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes;
7462
7623
  var closeMobileNav = function () { return setNavOpen(false); };
7463
7624
  var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
7625
+ var appSettings = React.useRef(null);
7626
+ var getAppSettings = function () {
7627
+ if (appSettings.current) {
7628
+ return appSettings.current;
7629
+ }
7630
+ appSettings.current = client.getAppSettings();
7631
+ return appSettings.current;
7632
+ };
7464
7633
  React.useEffect(function () {
7465
7634
  if (client) {
7466
7635
  var userAgent = client.getUserAgent();
7467
7636
  if (!userAgent.includes('stream-chat-react')) {
7468
- /**
7469
- * results in something like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7470
- */
7637
+ // result looks like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7471
7638
  client.setUserAgent("stream-chat-react-" + version + "-" + userAgent);
7472
7639
  }
7473
7640
  }
@@ -7480,7 +7647,7 @@ var useChat = function (_a) {
7480
7647
  };
7481
7648
  client.on('notification.mutes_updated', handleEvent);
7482
7649
  return function () { return client.off('notification.mutes_updated', handleEvent); };
7483
- }, [client, clientMutes]);
7650
+ }, [clientMutes === null || clientMutes === void 0 ? void 0 : clientMutes.length]);
7484
7651
  React.useEffect(function () {
7485
7652
  var _a;
7486
7653
  var userLanguage = (_a = client.user) === null || _a === void 0 ? void 0 : _a.language;
@@ -7495,7 +7662,7 @@ var useChat = function (_a) {
7495
7662
  streami18n.getTranslators().then(function (translator) {
7496
7663
  setTranslators(__assign(__assign({}, translator), { userLanguage: userLanguage || defaultLanguage }));
7497
7664
  });
7498
- }, [client, i18nInstance]);
7665
+ }, [i18nInstance]);
7499
7666
  var setActiveChannel = React.useCallback(function (activeChannel, watchers, event) {
7500
7667
  if (watchers === void 0) { watchers = {}; }
7501
7668
  return __awaiter(void 0, void 0, void 0, function () {
@@ -7520,6 +7687,7 @@ var useChat = function (_a) {
7520
7687
  return {
7521
7688
  channel: channel,
7522
7689
  closeMobileNav: closeMobileNav,
7690
+ getAppSettings: getAppSettings,
7523
7691
  mutes: mutes,
7524
7692
  navOpen: navOpen,
7525
7693
  openMobileNav: openMobileNav,
@@ -7530,7 +7698,7 @@ var useChat = function (_a) {
7530
7698
 
7531
7699
  var useCreateChatContext = function (value) {
7532
7700
  var _a;
7533
- 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;
7701
+ 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;
7534
7702
  var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
7535
7703
  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);
7536
7704
  var mutedUsersLength = mutes.length;
@@ -7539,13 +7707,14 @@ var useCreateChatContext = function (value) {
7539
7707
  client: client,
7540
7708
  closeMobileNav: closeMobileNav,
7541
7709
  customClasses: customClasses,
7710
+ getAppSettings: getAppSettings,
7542
7711
  mutes: mutes,
7543
7712
  navOpen: navOpen,
7544
7713
  openMobileNav: openMobileNav,
7545
7714
  setActiveChannel: setActiveChannel,
7546
7715
  theme: theme,
7547
7716
  useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
7548
- }); }, [channelCid, clientValues, mutedUsersLength, navOpen]);
7717
+ }); }, [channelCid, clientValues, getAppSettings, mutedUsersLength, navOpen]);
7549
7718
  return chatContext;
7550
7719
  };
7551
7720
 
@@ -7585,13 +7754,14 @@ var useCustomStyles = function (customStyles) {
7585
7754
  */
7586
7755
  var Chat = function (props) {
7587
7756
  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;
7588
- 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;
7757
+ 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;
7589
7758
  useCustomStyles(darkMode ? darkModeTheme : customStyles);
7590
7759
  var chatContextValue = useCreateChatContext({
7591
7760
  channel: channel,
7592
7761
  client: client,
7593
7762
  closeMobileNav: closeMobileNav,
7594
7763
  customClasses: customClasses,
7764
+ getAppSettings: getAppSettings,
7595
7765
  mutes: mutes,
7596
7766
  navOpen: navOpen,
7597
7767
  openMobileNav: openMobileNav,
@@ -7607,7 +7777,7 @@ var Chat = function (props) {
7607
7777
 
7608
7778
  var UnMemoizedDateSeparator = function (props) {
7609
7779
  var date = props.date, formatDate = props.formatDate, _a = props.position, position = _a === void 0 ? 'right' : _a, unread = props.unread;
7610
- var _b = useTranslationContext(), t = _b.t, tDateTimeParser = _b.tDateTimeParser;
7780
+ var _b = useTranslationContext('DateSeparator'), t = _b.t, tDateTimeParser = _b.tDateTimeParser;
7611
7781
  if (typeof date === 'string')
7612
7782
  return null;
7613
7783
  var parsedDate = tDateTimeParser(date.toISOString());
@@ -7632,7 +7802,7 @@ var DateSeparator = React__default['default'].memo(UnMemoizedDateSeparator);
7632
7802
  var UnMemoizedEventComponent = function (props) {
7633
7803
  var _a, _b, _c;
7634
7804
  var _d = props.Avatar, Avatar$1 = _d === void 0 ? Avatar : _d, message = props.message;
7635
- var tDateTimeParser = useTranslationContext().tDateTimeParser;
7805
+ var tDateTimeParser = useTranslationContext('EventComponent').tDateTimeParser;
7636
7806
  var _e = message.created_at, created_at = _e === void 0 ? '' : _e, event = message.event, text = message.text, type = message.type;
7637
7807
  var dateFormatter = function (date, format) {
7638
7808
  var parsedDate = tDateTimeParser(date);
@@ -7787,10 +7957,10 @@ var getUserColor = function (theme, userId) {
7787
7957
  var UnMemoizedFixedHeightMessage = function (props) {
7788
7958
  var _a, _b, _c, _d;
7789
7959
  var propGroupedByUser = props.groupedByUser, propMessage = props.message;
7790
- var theme = useChatContext().theme;
7791
- var _e = useMessageContext(), contextGroupedByUser = _e.groupedByUser, contextMessage = _e.message;
7792
- var _f = useComponentContext().MessageDeleted, MessageDeleted$1 = _f === void 0 ? MessageDeleted : _f;
7793
- var userLanguage = useTranslationContext().userLanguage;
7960
+ var theme = useChatContext('FixedHeightMessage').theme;
7961
+ var _e = useMessageContext('FixedHeightMessage'), contextGroupedByUser = _e.groupedByUser, contextMessage = _e.message;
7962
+ var _f = useComponentContext('FixedHeightMessage').MessageDeleted, MessageDeleted$1 = _f === void 0 ? MessageDeleted : _f;
7963
+ var userLanguage = useTranslationContext('FixedHeightMessage').userLanguage;
7794
7964
  var groupedByUser = propGroupedByUser !== undefined ? propGroupedByUser : contextGroupedByUser;
7795
7965
  var message = propMessage || contextMessage;
7796
7966
  var handleAction = useActionHandler(message);
@@ -7834,7 +8004,7 @@ var FixedHeightMessage = React__default['default'].memo(UnMemoizedFixedHeightMes
7834
8004
 
7835
8005
  var MessageWithContext = function (props) {
7836
8006
  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;
7837
- var contextMessage = useComponentContext().Message;
8007
+ var contextMessage = useComponentContext('Message').Message;
7838
8008
  var actionsEnabled = message.type === 'regular' && message.status === 'received';
7839
8009
  var MessageUIComponent = propMessage || contextMessage;
7840
8010
  var _b = useEditHandler(), clearEdit = _b.clearEdit, editing = _b.editing, setEdit = _b.setEdit;
@@ -7844,9 +8014,6 @@ var MessageWithContext = function (props) {
7844
8014
  }), onUserClick = _c.onUserClick, onUserHover = _c.onUserHover;
7845
8015
  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;
7846
8016
  var messageActionsHandler = React.useCallback(function () {
7847
- if (!message || !messageActions) {
7848
- return [];
7849
- }
7850
8017
  return getMessageActions(messageActions, {
7851
8018
  canDelete: canDelete,
7852
8019
  canEdit: canEdit,
@@ -7876,8 +8043,8 @@ var MemoizedMessage = React__default['default'].memo(MessageWithContext, areMess
7876
8043
  */
7877
8044
  var Message = function (props) {
7878
8045
  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;
7879
- var addNotification = useChannelActionContext().addNotification;
7880
- var mutes = useChannelStateContext().mutes;
8046
+ var addNotification = useChannelActionContext('Message').addNotification;
8047
+ var mutes = useChannelStateContext('Message').mutes;
7881
8048
  var reactionSelectorRef = React.useRef(null);
7882
8049
  var handleAction = useActionHandler(message);
7883
8050
  var handleOpenThread = useOpenThreadHandler(message, propOpenThread);
@@ -7913,7 +8080,7 @@ var Message = function (props) {
7913
8080
  var MessageCommerceWithContext = function (props) {
7914
8081
  var _a, _b, _c, _d, _e, _f;
7915
8082
  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;
7916
- 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;
8083
+ 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;
7917
8084
  var hasAttachment = messageHasAttachments(message);
7918
8085
  var hasReactions = messageHasReactions(message);
7919
8086
  var firstGroupStyle = groupStyles ? groupStyles[0] : 'single';
@@ -7947,16 +8114,15 @@ var MemoizedMessageCommerce = React__default['default'].memo(MessageCommerceWith
7947
8114
  * UI component that renders a message and receives functionality from the Message/MessageList components
7948
8115
  */
7949
8116
  var MessageCommerce = function (props) {
7950
- var messageContext = useMessageContext();
8117
+ var messageContext = useMessageContext('MessageCommerce');
7951
8118
  return React__default['default'].createElement(MemoizedMessageCommerce, __assign({}, messageContext, props));
7952
8119
  };
7953
8120
 
7954
8121
  var MessageLivestreamWithContext = function (props) {
7955
8122
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
7956
8123
  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;
7957
- var _m = useComponentContext().QuotedMessage, QuotedMessage$1 = _m === void 0 ? QuotedMessage : _m;
7958
- 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;
7959
- var _w = useTranslationContext(), t = _w.t, userLanguage = _w.userLanguage;
8124
+ 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;
8125
+ var _w = useTranslationContext('MessageLivestream'), t = _w.t, userLanguage = _w.userLanguage;
7960
8126
  var messageTextToRender = ((_a = message.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) || message.text;
7961
8127
  var messageText = React.useMemo(function () { return renderText$1(messageTextToRender, message.mentioned_users); }, [
7962
8128
  message.mentioned_users,
@@ -8019,8 +8185,8 @@ var MessageLivestreamWithContext = function (props) {
8019
8185
  };
8020
8186
  var MessageLivestreamActions = function (props) {
8021
8187
  var messageWrapperRef = props.messageWrapperRef, onReactionListClick = props.onReactionListClick;
8022
- var _a = useComponentContext().MessageTimestamp, MessageTimestamp$1 = _a === void 0 ? MessageTimestamp : _a;
8023
- var _b = useMessageContext(), getMessageActions = _b.getMessageActions, handleOpenThread = _b.handleOpenThread, initialMessage = _b.initialMessage, message = _b.message, threadList = _b.threadList;
8188
+ var _a = useComponentContext('MessageLivestream').MessageTimestamp, MessageTimestamp$1 = _a === void 0 ? MessageTimestamp : _a;
8189
+ var _b = useMessageContext('MessageLivestream'), getMessageActions = _b.getMessageActions, handleOpenThread = _b.handleOpenThread, initialMessage = _b.initialMessage, message = _b.message, threadList = _b.threadList;
8024
8190
  var _c = React.useState(false), actionsBoxOpen = _c[0], setActionsBoxOpen = _c[1];
8025
8191
  var hideOptions = React.useCallback(function () { return setActionsBoxOpen(false); }, []);
8026
8192
  var messageDeletedAt = !!message.deleted_at;
@@ -8081,7 +8247,7 @@ var MemoizedMessageLivestream = React__default['default'].memo(MessageLivestream
8081
8247
  * Implements the look and feel for a livestream use case.
8082
8248
  */
8083
8249
  var MessageLivestream = function (props) {
8084
- var messageContext = useMessageContext();
8250
+ var messageContext = useMessageContext('MessageLivestream');
8085
8251
  var messageWrapperRef = React.useRef(null);
8086
8252
  var reactionSelectorRef = React.useRef(null);
8087
8253
  var message = props.message || messageContext.message;
@@ -8092,8 +8258,8 @@ var MessageLivestream = function (props) {
8092
8258
  var MessageTeamWithContext = function (props) {
8093
8259
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
8094
8260
  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;
8095
- 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;
8096
- var _z = useTranslationContext(), t = _z.t, userLanguage = _z.userLanguage;
8261
+ 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;
8262
+ var _z = useTranslationContext('MessageTeam'), t = _z.t, userLanguage = _z.userLanguage;
8097
8263
  var messageActions = getMessageActions();
8098
8264
  var showActionsBox = showMessageActionsBox(messageActions);
8099
8265
  var shouldShowReplies = messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1 && !threadList;
@@ -8163,7 +8329,7 @@ var MemoizedMessageTeam = React__default['default'].memo(MessageTeamWithContext,
8163
8329
  * Implements the look and feel for a team style collaboration environment.
8164
8330
  */
8165
8331
  var MessageTeam = function (props) {
8166
- var messageContext = useMessageContext();
8332
+ var messageContext = useMessageContext('MessageTeam');
8167
8333
  var reactionSelectorRef = React.useRef(null);
8168
8334
  var messageWrapperRef = React.useRef(null);
8169
8335
  var message = props.message || messageContext.message;
@@ -8180,8 +8346,8 @@ var UnMemoizedCustomNotification = function (props) {
8180
8346
  var CustomNotification = React__default['default'].memo(UnMemoizedCustomNotification);
8181
8347
 
8182
8348
  var UnMemoizedConnectionStatus = function () {
8183
- var client = useChatContext().client;
8184
- var t = useTranslationContext().t;
8349
+ var client = useChatContext('ConnectionStatus').client;
8350
+ var t = useTranslationContext('ConnectionStatus').t;
8185
8351
  var _a = React.useState(true), online = _a[0], setOnline = _a[1];
8186
8352
  React.useEffect(function () {
8187
8353
  var connectionChanged = function (_a) {
@@ -8401,9 +8567,9 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
8401
8567
  };
8402
8568
 
8403
8569
  var useEnrichedMessages = function (args) {
8404
- 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;
8405
- var client = useChatContext().client;
8406
- var HeaderComponent = useComponentContext().HeaderComponent;
8570
+ 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;
8571
+ var client = useChatContext('useEnrichedMessages').client;
8572
+ var HeaderComponent = useComponentContext('useEnrichedMessages').HeaderComponent;
8407
8573
  var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
8408
8574
  var messagesWithDates = disableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator
8409
8575
  ? messages
@@ -8419,9 +8585,10 @@ var useEnrichedMessages = function (args) {
8419
8585
  if (HeaderComponent) {
8420
8586
  messagesWithDates = insertIntro(messagesWithDates, headerPosition);
8421
8587
  }
8588
+ var groupStylesFn = groupStyles || getGroupStyles;
8422
8589
  var messageGroupStyles = React.useMemo(function () {
8423
8590
  return messagesWithDates.reduce(function (acc, message, i) {
8424
- var style = getGroupStyles(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8591
+ var style = groupStylesFn(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8425
8592
  if (style)
8426
8593
  acc[message.id] = style;
8427
8594
  return acc;
@@ -8442,8 +8609,8 @@ var useLastReadData = function (props) {
8442
8609
 
8443
8610
  var useMessageListElements = function (props) {
8444
8611
  var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, onMessageLoadCaptured = props.onMessageLoadCaptured, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
8445
- var _a = useChatContext(), client = _a.client, customClasses = _a.customClasses;
8446
- 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;
8612
+ var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
8613
+ 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;
8447
8614
  // get the readData, but only for messages submitted by the user themselves
8448
8615
  var readData = useLastReadData({
8449
8616
  messages: enrichedMessages,
@@ -8471,7 +8638,7 @@ var useMessageListElements = function (props) {
8471
8638
  }
8472
8639
  var groupStyles = messageGroupStyles[message.id] || '';
8473
8640
  var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--" + groupStyles;
8474
- return (React__default['default'].createElement("li", { className: messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8641
+ return (React__default['default'].createElement("li", { className: messageClass, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8475
8642
  React__default['default'].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
8476
8643
  });
8477
8644
  }, [
@@ -8487,7 +8654,7 @@ var useMessageListElements = function (props) {
8487
8654
 
8488
8655
  function useMessageListScrollManager(params) {
8489
8656
  var onScrollBy = params.onScrollBy, scrollContainerMeasures = params.scrollContainerMeasures, scrolledUpThreshold = params.scrolledUpThreshold, scrollToBottom = params.scrollToBottom, showNewMessages = params.showNewMessages;
8490
- var client = useChatContext().client;
8657
+ var client = useChatContext('useMessageListScrollManager').client;
8491
8658
  var measures = React.useRef({
8492
8659
  offsetHeight: 0,
8493
8660
  scrollHeight: 0,
@@ -8630,14 +8797,25 @@ var UnMemoizedMessageNotification = function (props) {
8630
8797
  };
8631
8798
  var MessageNotification = React__default['default'].memo(UnMemoizedMessageNotification);
8632
8799
 
8800
+ var MessageListNotifications = function (props) {
8801
+ var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
8802
+ var t = useTranslationContext('MessageListNotifications').t;
8803
+ return (React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
8804
+ notifications.map(function (notification) { return (React__default['default'].createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
8805
+ React__default['default'].createElement(ConnectionStatus, null),
8806
+ React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
8807
+ };
8808
+
8633
8809
  /**
8634
8810
  * TypingIndicator lists users currently typing, it needs to be a child of Channel component
8635
8811
  */
8636
8812
  var UnMemoizedTypingIndicator = function (props) {
8637
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, _b = props.avatarSize, avatarSize = _b === void 0 ? 32 : _b, threadList = props.threadList;
8638
- var _c = useChannelStateContext(), channelConfig = _c.channelConfig, thread = _c.thread;
8639
- var client = useChatContext().client;
8640
- var _d = useTypingContext().typing, typing = _d === void 0 ? {} : _d;
8813
+ var PropAvatar = props.Avatar, _a = props.avatarSize, avatarSize = _a === void 0 ? 32 : _a, threadList = props.threadList;
8814
+ var _b = useChannelStateContext('TypingIndicator'), channelConfig = _b.channelConfig, thread = _b.thread;
8815
+ var client = useChatContext('TypingIndicator').client;
8816
+ var ContextAvatar = useComponentContext('TypingIndicator').Avatar;
8817
+ var _c = useTypingContext('TypingIndicator').typing, typing = _c === void 0 ? {} : _c;
8818
+ var Avatar$1 = PropAvatar || ContextAvatar || Avatar;
8641
8819
  if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.typing_events) === false) {
8642
8820
  return null;
8643
8821
  }
@@ -8669,23 +8847,17 @@ var UnMemoizedTypingIndicator = function (props) {
8669
8847
  };
8670
8848
  var TypingIndicator = React__default['default'].memo(UnMemoizedTypingIndicator);
8671
8849
 
8672
- var DefaultMessageListNotifications = function (props) {
8673
- var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
8674
- var t = useTranslationContext().t;
8675
- return (React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
8676
- notifications.map(function (notification) { return (React__default['default'].createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
8677
- React__default['default'].createElement(ConnectionStatus, null),
8678
- React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
8679
- };
8680
8850
  var useInternalInfiniteScrollProps = function (props) {
8681
- var _a = useComponentContext().LoadingIndicator, LoadingIndicator$1 = _a === void 0 ? LoadingIndicator : _a;
8851
+ var _a = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator$1 = _a === void 0 ? LoadingIndicator : _a;
8682
8852
  return __assign({ hasMore: props.hasMore, isLoading: props.loadingMore, loader: (React__default['default'].createElement(Center, { key: 'loadingindicator' },
8683
8853
  React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))), loadMore: useCallLoadMore(props.loadMore, props.messageLimit || 100) }, props.internalInfiniteScrollProps);
8684
8854
  };
8685
8855
  var MessageListWithContext = function (props) {
8686
- 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;
8687
- var customClasses = useChatContext().customClasses;
8688
- 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;
8856
+ 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
8857
+ _h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
8858
+ 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;
8859
+ var customClasses = useChatContext('MessageList').customClasses;
8860
+ 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;
8689
8861
  var _r = useScrollLocationLogic({
8690
8862
  messages: messages,
8691
8863
  scrolledUpThreshold: props.scrolledUpThreshold,
@@ -8693,6 +8865,7 @@ var MessageListWithContext = function (props) {
8693
8865
  var _s = useEnrichedMessages({
8694
8866
  channel: channel,
8695
8867
  disableDateSeparator: disableDateSeparator,
8868
+ groupStyles: groupStyles,
8696
8869
  headerPosition: headerPosition,
8697
8870
  hideDeletedMessages: hideDeletedMessages,
8698
8871
  hideNewMessageSeparator: hideNewMessageSeparator,
@@ -8742,7 +8915,7 @@ var MessageListWithContext = function (props) {
8742
8915
  React__default['default'].createElement("ul", { className: 'str-chat__ul' }, elements),
8743
8916
  React__default['default'].createElement(TypingIndicator$1, { threadList: threadList }),
8744
8917
  React__default['default'].createElement("div", { key: 'bottom' })))),
8745
- React__default['default'].createElement(MessageListNotifications, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom })));
8918
+ React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom })));
8746
8919
  };
8747
8920
  /**
8748
8921
  * The MessageList component renders a list of Messages.
@@ -8753,8 +8926,8 @@ var MessageListWithContext = function (props) {
8753
8926
  * - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)
8754
8927
  */
8755
8928
  var MessageList = function (props) {
8756
- var loadMore = useChannelActionContext().loadMore;
8757
- var _a = useChannelStateContext(); _a.members; // eslint-disable-line @typescript-eslint/no-unused-vars
8929
+ var loadMore = useChannelActionContext('MessageList').loadMore;
8930
+ var _a = useChannelStateContext('MessageList'); _a.members; // eslint-disable-line @typescript-eslint/no-unused-vars
8758
8931
  _a.mutes; // eslint-disable-line @typescript-eslint/no-unused-vars
8759
8932
  _a.watchers; // eslint-disable-line @typescript-eslint/no-unused-vars
8760
8933
  var restChannelStateContext = __rest(_a, ["members", "mutes", "watchers"]);
@@ -8763,7 +8936,7 @@ var MessageList = function (props) {
8763
8936
 
8764
8937
  var useGiphyPreview = function (separateGiphyPreview) {
8765
8938
  var _a = React.useState(), giphyPreviewMessage = _a[0], setGiphyPreviewMessage = _a[1];
8766
- var client = useChatContext().client;
8939
+ var client = useChatContext('useGiphyPreview').client;
8767
8940
  React.useEffect(function () {
8768
8941
  var handleEvent = function (event) {
8769
8942
  var message = event.message, user = event.user;
@@ -8869,15 +9042,14 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
8869
9042
 
8870
9043
  var PREPEND_OFFSET = Math.pow(10, 7);
8871
9044
  var VirtualizedMessageListWithContext = function (props) {
8872
- 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,
9045
+ 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,
8873
9046
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
8874
9047
  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;
8875
- 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;
8876
- var _u = useChatContext(), client = _u.client, customClasses = _u.customClasses;
8877
- var t = useTranslationContext().t;
9048
+ 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;
9049
+ var _v = useChatContext('VirtualizedMessageList'), client = _v.client, customClasses = _v.customClasses;
8878
9050
  var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
8879
9051
  var MessageUIComponent = propMessage || contextMessage;
8880
- var _v = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _v.giphyPreviewMessage, setGiphyPreviewMessage = _v.setGiphyPreviewMessage;
9052
+ var _w = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _w.giphyPreviewMessage, setGiphyPreviewMessage = _w.setGiphyPreviewMessage;
8881
9053
  var processedMessages = React.useMemo(function () {
8882
9054
  if (typeof messages === 'undefined') {
8883
9055
  return [];
@@ -8908,7 +9080,7 @@ var VirtualizedMessageListWithContext = function (props) {
8908
9080
  client.userID,
8909
9081
  ]);
8910
9082
  var virtuoso = React.useRef(null);
8911
- var _w = useNewMessageNotification(processedMessages, client.userID), atBottom = _w.atBottom, newMessagesNotification = _w.newMessagesNotification, setNewMessagesNotification = _w.setNewMessagesNotification;
9083
+ var _x = useNewMessageNotification(processedMessages, client.userID), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
8912
9084
  var scrollToBottom = React.useCallback(function () {
8913
9085
  if (virtuoso.current) {
8914
9086
  virtuoso.current.scrollToIndex(processedMessages.length - 1);
@@ -8997,9 +9169,8 @@ var VirtualizedMessageListWithContext = function (props) {
8997
9169
  var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
8998
9170
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
8999
9171
  React__default['default'].createElement("div", { className: virtualizedMessageListClass },
9000
- 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 } : {}))),
9001
- React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
9002
- React__default['default'].createElement(MessageNotification$1, { onClick: scrollToBottom, showNotification: newMessagesNotification }, t('New Messages!')))),
9172
+ 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 } : {})))),
9173
+ React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom }),
9003
9174
  giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
9004
9175
  };
9005
9176
  /**
@@ -9009,26 +9180,25 @@ var VirtualizedMessageListWithContext = function (props) {
9009
9180
  * **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.
9010
9181
  */
9011
9182
  function VirtualizedMessageList(props) {
9012
- var loadMore = useChannelActionContext().loadMore;
9013
- var _a = useChannelStateContext(), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages;
9183
+ var loadMore = useChannelActionContext('VirtualizedMessageList').loadMore;
9184
+ var _a = useChannelStateContext('VirtualizedMessageList'), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages, notifications = _a.notifications;
9014
9185
  var messages = props.messages || contextMessages;
9015
- return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages }, props)));
9186
+ return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages, notifications: notifications }, props)));
9016
9187
  }
9017
9188
 
9018
9189
  /**
9019
9190
  * The Thread component renders a parent Message with a list of replies
9020
9191
  */
9021
9192
  var Thread = function (props) {
9022
- var _a, _b;
9023
- var _c = useChannelStateContext(), channel = _c.channel, thread = _c.thread;
9024
- 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)
9193
+ var _a = useChannelStateContext('Thread'), channel = _a.channel, channelConfig = _a.channelConfig, thread = _a.thread;
9194
+ if (!thread || (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) === false)
9025
9195
  return null;
9026
9196
  // The wrapper ensures a key variable is set and the component recreates on thread switch
9027
9197
  return React__default['default'].createElement(ThreadInner, __assign({}, props, { key: "thread-" + thread.id + "-" + (channel === null || channel === void 0 ? void 0 : channel.cid) }));
9028
9198
  };
9029
9199
  var DefaultThreadHeader = function (props) {
9030
9200
  var closeThread = props.closeThread, thread = props.thread;
9031
- var t = useTranslationContext().t;
9201
+ var t = useTranslationContext('Thread').t;
9032
9202
  var getReplyCount = function () {
9033
9203
  if (!thread.reply_count)
9034
9204
  return '';
@@ -9047,15 +9217,15 @@ var DefaultThreadHeader = function (props) {
9047
9217
  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' })))));
9048
9218
  };
9049
9219
  var DefaultThreadStart = function () {
9050
- var t = useTranslationContext().t;
9220
+ var t = useTranslationContext('Thread').t;
9051
9221
  return React__default['default'].createElement("div", { className: 'str-chat__thread-start' }, t('Start of a new thread'));
9052
9222
  };
9053
9223
  var ThreadInner = function (props) {
9054
9224
  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;
9055
- var _c = useChannelStateContext(), thread = _c.thread, threadHasMore = _c.threadHasMore, threadLoadingMore = _c.threadLoadingMore, threadMessages = _c.threadMessages;
9056
- var _d = useChannelActionContext(), closeThread = _d.closeThread, loadMoreThread = _d.loadMoreThread;
9057
- var customClasses = useChatContext().customClasses;
9058
- 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;
9225
+ var _c = useChannelStateContext('Thread'), thread = _c.thread, threadHasMore = _c.threadHasMore, threadLoadingMore = _c.threadLoadingMore, threadMessages = _c.threadMessages;
9226
+ var _d = useChannelActionContext('Thread'), closeThread = _d.closeThread, loadMoreThread = _d.loadMoreThread;
9227
+ var customClasses = useChatContext('Thread').customClasses;
9228
+ 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;
9059
9229
  var messageList = React.useRef(null);
9060
9230
  var ThreadInput = PropInput || (additionalMessageInputProps === null || additionalMessageInputProps === void 0 ? void 0 : additionalMessageInputProps.Input) || ContextInput || MessageInputSmall;
9061
9231
  var ThreadMessage = PropMessage || (additionalMessageListProps === null || additionalMessageListProps === void 0 ? void 0 : additionalMessageListProps.Message);
@@ -9089,7 +9259,7 @@ var ThreadInner = function (props) {
9089
9259
 
9090
9260
  var UnMemoizedWindow = function (props) {
9091
9261
  var children = props.children, _a = props.hideOnThread, hideOnThread = _a === void 0 ? false : _a;
9092
- var thread = useChannelStateContext().thread;
9262
+ var thread = useChannelStateContext('Window').thread;
9093
9263
  // If thread is active and window should hide on thread. Return null
9094
9264
  if (thread && hideOnThread)
9095
9265
  return null;
@@ -9221,6 +9391,7 @@ exports.deTranslations = deTranslations;
9221
9391
  exports.defaultPinPermissions = defaultPinPermissions;
9222
9392
  exports.defaultScrollToItem = defaultScrollToItem;
9223
9393
  exports.defaultTimestampFormat = defaultTimestampFormat;
9394
+ exports.emojiMarkdownPlugin = emojiMarkdownPlugin;
9224
9395
  exports.enTranslations = enTranslations;
9225
9396
  exports.esTranslations = esTranslations;
9226
9397
  exports.escapeRegExp = escapeRegExp;
@@ -9229,14 +9400,18 @@ exports.generateRandomId = generateRandomId;
9229
9400
  exports.getChannel = getChannel;
9230
9401
  exports.getDisplayImage = getDisplayImage;
9231
9402
  exports.getDisplayTitle = getDisplayTitle;
9403
+ exports.getGroupStyles = getGroupStyles;
9232
9404
  exports.getImages = getImages;
9405
+ exports.getLastReceived = getLastReceived;
9233
9406
  exports.getLatestMessagePreview = getLatestMessagePreview;
9234
9407
  exports.getMessageActions = getMessageActions;
9235
9408
  exports.getNonImageAttachments = getNonImageAttachments;
9236
9409
  exports.getReadByTooltipText = getReadByTooltipText;
9410
+ exports.getReadStates = getReadStates;
9237
9411
  exports.getWholeChar = getWholeChar;
9238
9412
  exports.handleActionWarning = handleActionWarning;
9239
9413
  exports.hiTranslations = hiTranslations;
9414
+ exports.insertIntro = insertIntro;
9240
9415
  exports.isAudioAttachment = isAudioAttachment;
9241
9416
  exports.isChannel = isChannel;
9242
9417
  exports.isDate = isDate;
@@ -9253,6 +9428,10 @@ exports.itTranslations = itTranslations;
9253
9428
  exports.jaTranslations = jaTranslations;
9254
9429
  exports.koTranslations = koTranslations;
9255
9430
  exports.listener = Listeners;
9431
+ exports.markDownRenderers = markDownRenderers;
9432
+ exports.matchMarkdownLinks = matchMarkdownLinks;
9433
+ exports.mentionsMarkdownPlugin = mentionsMarkdownPlugin;
9434
+ exports.messageCodeBlocks = messageCodeBlocks;
9256
9435
  exports.messageHasAttachments = messageHasAttachments;
9257
9436
  exports.messageHasReactions = messageHasReactions;
9258
9437
  exports.missingUseFlagHandlerParameterWarning = missingUseFlagHandlerParameterWarning;
@@ -9261,6 +9440,7 @@ exports.moveChannelUp = moveChannelUp;
9261
9440
  exports.nlTranslations = nlTranslations;
9262
9441
  exports.noParsingFunctionWarning = noParsingFunctionWarning;
9263
9442
  exports.notValidDateWarning = notValidDateWarning;
9443
+ exports.processMessages = processMessages;
9264
9444
  exports.ptTranslations = ptTranslations;
9265
9445
  exports.reactionHandlerWarning = reactionHandlerWarning;
9266
9446
  exports.renderAttachmentActions = renderAttachmentActions;