stream-chat-react 6.11.0 → 6.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.full-bundle.js +7032 -23976
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +5 -5
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Attachment/Audio.js +2 -2
  7. package/dist/components/Attachment/Card.d.ts.map +1 -1
  8. package/dist/components/Attachment/Card.js +1 -3
  9. package/dist/components/AutoCompleteTextarea/Item.d.ts.map +1 -1
  10. package/dist/components/AutoCompleteTextarea/Item.js +1 -1
  11. package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
  12. package/dist/components/AutoCompleteTextarea/List.js +0 -1
  13. package/dist/components/AutoCompleteTextarea/Textarea.d.ts +7 -6
  14. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  15. package/dist/components/AutoCompleteTextarea/Textarea.js +32 -35
  16. package/dist/components/Channel/Channel.d.ts +8 -3
  17. package/dist/components/Channel/Channel.d.ts.map +1 -1
  18. package/dist/components/Channel/Channel.js +25 -10
  19. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  20. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +6 -5
  21. package/dist/components/ChannelHeader/ChannelHeader.js +1 -1
  22. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  23. package/dist/components/ChannelList/ChannelList.js +4 -7
  24. package/dist/components/ChannelList/ChannelListMessenger.d.ts +2 -0
  25. package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
  26. package/dist/components/ChannelList/ChannelListMessenger.js +1 -1
  27. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts.map +1 -1
  28. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +13 -1
  29. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  30. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +1 -0
  31. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
  32. package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +1 -1
  33. package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
  34. package/dist/components/ChannelSearch/SearchResults.js +6 -6
  35. package/dist/components/Chat/Chat.d.ts.map +1 -1
  36. package/dist/components/Chat/Chat.js +2 -1
  37. package/dist/components/Chat/hooks/useChat.d.ts +2 -1
  38. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  39. package/dist/components/Chat/hooks/useChat.js +13 -6
  40. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  41. package/dist/components/Chat/hooks/useCreateChatContext.js +3 -2
  42. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +3 -1
  43. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
  44. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +16 -14
  45. package/dist/components/ChatDown/ChatDown.d.ts.map +1 -1
  46. package/dist/components/ChatDown/ChatDown.js +2 -2
  47. package/dist/components/EmptyStateIndicator/EmptyStateIndicator.js +1 -1
  48. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  49. package/dist/components/Gallery/Gallery.js +5 -3
  50. package/dist/components/Gallery/Image.d.ts.map +1 -1
  51. package/dist/components/Gallery/Image.js +4 -2
  52. package/dist/components/Gallery/ModalWrapper.d.ts +3 -6
  53. package/dist/components/Gallery/ModalWrapper.d.ts.map +1 -1
  54. package/dist/components/Gallery/ModalWrapper.js +4 -7
  55. package/dist/components/Gallery/index.d.ts +0 -1
  56. package/dist/components/Gallery/index.d.ts.map +1 -1
  57. package/dist/components/Gallery/index.js +0 -1
  58. package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  59. package/dist/components/LoadMore/LoadMoreButton.js +1 -1
  60. package/dist/components/Message/MessageOptions.d.ts.map +1 -1
  61. package/dist/components/Message/MessageOptions.js +4 -4
  62. package/dist/components/Message/MessageSimple.d.ts.map +1 -1
  63. package/dist/components/Message/MessageSimple.js +2 -0
  64. package/dist/components/Message/QuotedMessage.d.ts.map +1 -1
  65. package/dist/components/Message/QuotedMessage.js +4 -3
  66. package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  67. package/dist/components/Message/hooks/useReactionHandler.js +15 -12
  68. package/dist/components/Message/hooks/useUserRole.js +1 -1
  69. package/dist/components/Message/utils.d.ts.map +1 -1
  70. package/dist/components/Message/utils.js +8 -4
  71. package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
  72. package/dist/components/MessageActions/MessageActions.js +2 -1
  73. package/dist/components/MessageActions/MessageActionsBox.d.ts +1 -1
  74. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  75. package/dist/components/MessageActions/MessageActionsBox.js +12 -19
  76. package/dist/components/MessageInput/DropzoneProvider.d.ts +5 -0
  77. package/dist/components/MessageInput/DropzoneProvider.d.ts.map +1 -0
  78. package/dist/components/MessageInput/DropzoneProvider.js +31 -0
  79. package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
  80. package/dist/components/MessageInput/EditMessageForm.js +2 -2
  81. package/dist/components/MessageInput/MessageInput.d.ts +5 -3
  82. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  83. package/dist/components/MessageInput/MessageInput.js +16 -6
  84. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  85. package/dist/components/MessageInput/MessageInputFlat.js +4 -4
  86. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  87. package/dist/components/MessageInput/MessageInputSmall.js +7 -5
  88. package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
  89. package/dist/components/MessageInput/QuotedMessagePreview.js +4 -3
  90. package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
  91. package/dist/components/MessageInput/UploadsPreview.js +2 -1
  92. package/dist/components/MessageInput/hooks/useAttachments.d.ts +1 -1
  93. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  94. package/dist/components/MessageInput/hooks/useAttachments.js +3 -1
  95. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  96. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +6 -1
  97. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts +3 -3
  98. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts.map +1 -1
  99. package/dist/components/MessageInput/hooks/useEmojiPicker.js +14 -4
  100. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  101. package/dist/components/MessageInput/hooks/useFileUploads.js +29 -13
  102. package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
  103. package/dist/components/MessageInput/hooks/useImageUploads.js +29 -13
  104. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +14 -3
  105. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  106. package/dist/components/MessageInput/hooks/useMessageInputState.js +14 -5
  107. package/dist/components/MessageInput/hooks/utils.d.ts +14 -1
  108. package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
  109. package/dist/components/MessageInput/hooks/utils.js +54 -1
  110. package/dist/components/MessageInput/icons.js +1 -1
  111. package/dist/components/MessageInput/index.d.ts +1 -0
  112. package/dist/components/MessageInput/index.d.ts.map +1 -1
  113. package/dist/components/MessageInput/index.js +1 -0
  114. package/dist/components/MessageList/CustomNotification.d.ts.map +1 -1
  115. package/dist/components/MessageList/CustomNotification.js +1 -1
  116. package/dist/components/MessageList/MessageList.d.ts +3 -0
  117. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  118. package/dist/components/MessageList/MessageList.js +2 -1
  119. package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
  120. package/dist/components/MessageList/MessageNotification.js +1 -1
  121. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  122. package/dist/components/MessageList/VirtualizedMessageList.js +2 -6
  123. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts +1 -0
  124. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
  125. package/dist/components/MessageList/hooks/useEnrichedMessages.js +3 -2
  126. package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
  127. package/dist/components/MessageList/hooks/useMessageListElements.js +1 -1
  128. package/dist/components/MessageList/index.d.ts +1 -0
  129. package/dist/components/MessageList/index.d.ts.map +1 -1
  130. package/dist/components/MessageList/index.js +1 -0
  131. package/dist/components/Modal/Modal.d.ts.map +1 -1
  132. package/dist/components/Modal/Modal.js +8 -4
  133. package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
  134. package/dist/components/Reactions/ReactionSelector.js +7 -6
  135. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  136. package/dist/components/Reactions/ReactionsList.js +5 -4
  137. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  138. package/dist/components/Reactions/SimpleReactionsList.js +1 -1
  139. package/dist/components/SafeAnchor/SafeAnchor.d.ts.map +1 -1
  140. package/dist/components/SafeAnchor/SafeAnchor.js +1 -1
  141. package/dist/components/Thread/Thread.js +1 -1
  142. package/dist/components/TypingIndicator/TypingIndicator.d.ts +3 -3
  143. package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  144. package/dist/components/TypingIndicator/TypingIndicator.js +6 -3
  145. package/dist/components/Window/Window.d.ts +1 -1
  146. package/dist/components/Window/Window.d.ts.map +1 -1
  147. package/dist/components/Window/Window.js +1 -4
  148. package/dist/context/ChannelStateContext.d.ts +2 -1
  149. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  150. package/dist/context/ChatContext.d.ts +2 -1
  151. package/dist/context/ChatContext.d.ts.map +1 -1
  152. package/dist/context/ComponentContext.d.ts +1 -1
  153. package/dist/context/ComponentContext.d.ts.map +1 -1
  154. package/dist/context/MessageInputContext.d.ts +2 -2
  155. package/dist/context/MessageInputContext.d.ts.map +1 -1
  156. package/dist/css/index.css +1 -1
  157. package/dist/i18n/Streami18n.d.ts +1 -0
  158. package/dist/i18n/Streami18n.d.ts.map +1 -1
  159. package/dist/i18n/Streami18n.js +5 -5
  160. package/dist/i18n/de.json +1 -0
  161. package/dist/i18n/en.json +1 -0
  162. package/dist/i18n/es.json +1 -0
  163. package/dist/i18n/fr.json +1 -0
  164. package/dist/i18n/hi.json +1 -0
  165. package/dist/i18n/it.json +1 -0
  166. package/dist/i18n/ja.json +1 -0
  167. package/dist/i18n/ko.json +1 -0
  168. package/dist/i18n/nl.json +1 -0
  169. package/dist/i18n/pt.json +1 -0
  170. package/dist/i18n/ru.json +1 -0
  171. package/dist/i18n/tr.json +1 -0
  172. package/dist/index.cjs.js +542 -376
  173. package/dist/index.cjs.js.map +1 -1
  174. package/dist/scss/Card.scss +10 -0
  175. package/dist/scss/ChannelListMessenger.scss +4 -0
  176. package/dist/scss/ChannelSearch.scss +4 -1
  177. package/dist/scss/EditMessageForm.scss +4 -0
  178. package/dist/scss/Gallery.scss +6 -0
  179. package/dist/scss/LoadMoreButton.scss +6 -0
  180. package/dist/scss/Message.scss +29 -5
  181. package/dist/scss/MessageActions.scss +21 -0
  182. package/dist/scss/MessageInput.scss +26 -0
  183. package/dist/scss/MessageInputFlat.scss +27 -1
  184. package/dist/scss/MessageTeam.scss +8 -0
  185. package/dist/scss/Modal.scss +11 -2
  186. package/dist/scss/ReactionList.scss +7 -0
  187. package/dist/scss/ReactionSelector.scss +7 -0
  188. package/dist/scss/SendButton.scss +5 -0
  189. package/dist/scss/SmallMessageInput.scss +12 -0
  190. package/dist/scss/Thread.scss +24 -0
  191. package/dist/scss/_base.scss +8 -2
  192. package/dist/scss/_variables.scss +6 -1
  193. package/dist/scss/index.scss +1 -1
  194. package/dist/scss/vendor/react-file-utils.scss +2 -0
  195. package/dist/scss/vendor/react-image-gallery.scss +224 -0
  196. package/dist/types/types.d.ts +1 -0
  197. package/dist/types/types.d.ts.map +1 -1
  198. package/dist/utils.d.ts.map +1 -1
  199. package/dist/utils.js +24 -3
  200. package/dist/version.d.ts +1 -1
  201. package/dist/version.js +1 -1
  202. package/package.json +16 -11
  203. package/CHANGELOG.md +0 -1633
  204. package/dist/components/Gallery/ModalImage.d.ts +0 -9
  205. package/dist/components/Gallery/ModalImage.d.ts.map +0 -1
  206. package/dist/components/Gallery/ModalImage.js +0 -6
  207. package/dist/scss/ModalImage.scss +0 -11
package/dist/index.cjs.js CHANGED
@@ -10,7 +10,7 @@ var calendar = require('dayjs/plugin/calendar');
10
10
  var localizedFormat = require('dayjs/plugin/localizedFormat');
11
11
  var prettybytes = require('pretty-bytes');
12
12
  var reactFileUtils = require('react-file-utils');
13
- var Carousel = require('react-images');
13
+ var ImageGallery = require('react-image-gallery');
14
14
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
15
15
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
16
16
  var emojiRegex = require('emoji-regex');
@@ -84,7 +84,7 @@ var Dayjs__default = /*#__PURE__*/_interopDefaultLegacy(Dayjs);
84
84
  var calendar__default = /*#__PURE__*/_interopDefaultLegacy(calendar);
85
85
  var localizedFormat__default = /*#__PURE__*/_interopDefaultLegacy(localizedFormat);
86
86
  var prettybytes__default = /*#__PURE__*/_interopDefaultLegacy(prettybytes);
87
- var Carousel__default = /*#__PURE__*/_interopDefaultLegacy(Carousel);
87
+ var ImageGallery__default = /*#__PURE__*/_interopDefaultLegacy(ImageGallery);
88
88
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
89
89
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
90
90
  var emojiRegex__default = /*#__PURE__*/_interopDefaultLegacy(emojiRegex);
@@ -251,9 +251,9 @@ var UnMemoizedAudio = function (props) {
251
251
  React__default['default'].createElement("audio", { ref: audioRef },
252
252
  React__default['default'].createElement("source", { "data-testid": 'audio-source', src: asset_url, type: 'audio/mp3' })),
253
253
  React__default['default'].createElement("div", { className: 'str-chat__audio__image' },
254
- React__default['default'].createElement("div", { className: 'str-chat__audio__image--overlay' }, !isPlaying ? (React__default['default'].createElement("div", { className: 'str-chat__audio__image--button', "data-testid": 'play-audio', onClick: function () { return setIsPlaying(true); } },
254
+ React__default['default'].createElement("div", { className: 'str-chat__audio__image--overlay' }, !isPlaying ? (React__default['default'].createElement("button", { className: 'str-chat__audio__image--button', "data-testid": 'play-audio', onClick: function () { return setIsPlaying(true); } },
255
255
  React__default['default'].createElement("svg", { height: '40', viewBox: '0 0 64 64', width: '40', xmlns: 'http://www.w3.org/2000/svg' },
256
- React__default['default'].createElement("path", { d: 'M32 58c14.36 0 26-11.64 26-26S46.36 6 32 6 6 17.64 6 32s11.64 26 26 26zm0 6C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm13.237-28.412L26.135 45.625a3.27 3.27 0 0 1-4.426-1.4 3.319 3.319 0 0 1-.372-1.47L21 23.36c-.032-1.823 1.41-3.327 3.222-3.358a3.263 3.263 0 0 1 1.473.322l19.438 9.36a3.311 3.311 0 0 1 .103 5.905z', fillRule: 'nonzero' })))) : (React__default['default'].createElement("div", { className: 'str-chat__audio__image--button', "data-testid": 'pause-audio', onClick: function () { return setIsPlaying(false); } },
256
+ React__default['default'].createElement("path", { d: 'M32 58c14.36 0 26-11.64 26-26S46.36 6 32 6 6 17.64 6 32s11.64 26 26 26zm0 6C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm13.237-28.412L26.135 45.625a3.27 3.27 0 0 1-4.426-1.4 3.319 3.319 0 0 1-.372-1.47L21 23.36c-.032-1.823 1.41-3.327 3.222-3.358a3.263 3.263 0 0 1 1.473.322l19.438 9.36a3.311 3.311 0 0 1 .103 5.905z', fillRule: 'nonzero' })))) : (React__default['default'].createElement("button", { className: 'str-chat__audio__image--button', "data-testid": 'pause-audio', onClick: function () { return setIsPlaying(false); } },
257
257
  React__default['default'].createElement("svg", { height: '40', viewBox: '0 0 64 64', width: '40', xmlns: 'http://www.w3.org/2000/svg' },
258
258
  React__default['default'].createElement("path", { d: 'M32 58.215c14.478 0 26.215-11.737 26.215-26.215S46.478 5.785 32 5.785 5.785 17.522 5.785 32 17.522 58.215 32 58.215zM32 64C14.327 64 0 49.673 0 32 0 14.327 14.327 0 32 0c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32zm-7.412-45.56h2.892a2.17 2.17 0 0 1 2.17 2.17v23.865a2.17 2.17 0 0 1-2.17 2.17h-2.892a2.17 2.17 0 0 1-2.17-2.17V20.61a2.17 2.17 0 0 1 2.17-2.17zm12.293 0h2.893a2.17 2.17 0 0 1 2.17 2.17v23.865a2.17 2.17 0 0 1-2.17 2.17h-2.893a2.17 2.17 0 0 1-2.17-2.17V20.61a2.17 2.17 0 0 1 2.17-2.17z', fillRule: 'nonzero' }))))),
259
259
  image_url && React__default['default'].createElement("img", { alt: "" + description, src: image_url })),
@@ -274,12 +274,10 @@ var UnMemoizedSafeAnchor = function (props) {
274
274
  if (!href)
275
275
  return null;
276
276
  var sanitized = sanitizeUrl.sanitizeUrl(href);
277
- return (React__default['default'].createElement("a", { className: className, download: download, href: sanitized, rel: rel, target: target }, children));
277
+ return (React__default['default'].createElement("a", { "aria-label": 'Attachment', className: className, download: download, href: sanitized, rel: rel, target: target }, children));
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
  };
@@ -351,8 +349,7 @@ var UnMemoizedCard = function (props) {
351
349
  React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--flex' },
352
350
  title && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--title' }, title),
353
351
  text && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--text' }, text),
354
- (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
- 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)))))));
356
353
  };
357
354
  /**
358
355
  * Simple Card Layout for displaying links
@@ -369,19 +366,46 @@ var UnMemoizedFileAttachment = function (props) {
369
366
  };
370
367
  var FileAttachment = React__default['default'].memo(UnMemoizedFileAttachment);
371
368
 
372
- var ModalImage = function (props) {
373
- var data = props.data;
374
- return (React__default['default'].createElement("div", { className: 'str-chat__modal-image__wrapper', "data-testid": 'modal-image' },
375
- React__default['default'].createElement("img", { className: 'str-chat__modal-image__image', src: data.source })));
369
+ var Modal = function (props) {
370
+ var children = props.children, onClose = props.onClose, open = props.open;
371
+ var t = useTranslationContext('Modal').t;
372
+ var innerRef = React.useRef(null);
373
+ var closeRef = React.useRef(null);
374
+ var handleClick = function (event) {
375
+ var _a, _b;
376
+ if ((event.target instanceof HTMLDivElement &&
377
+ !((_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
378
+ onClose) ||
379
+ (event.target instanceof HTMLButtonElement &&
380
+ ((_b = closeRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target)) &&
381
+ onClose)) {
382
+ onClose();
383
+ }
384
+ };
385
+ React.useEffect(function () {
386
+ if (!open)
387
+ return function () { return null; };
388
+ var handleEscKey = function (event) {
389
+ if (event instanceof KeyboardEvent && event.key === 'Escape' && onClose) {
390
+ onClose();
391
+ }
392
+ };
393
+ document.addEventListener('keypress', handleEscKey);
394
+ return function () { return document.removeEventListener('keypress', handleEscKey); };
395
+ }, [onClose, open]);
396
+ var openClasses = open ? 'str-chat__modal--open' : 'str-chat__modal--closed';
397
+ return (React__default['default'].createElement("div", { className: "str-chat__modal " + openClasses, onClick: handleClick },
398
+ React__default['default'].createElement("button", { className: 'str-chat__modal__close-button', ref: closeRef, title: 'Close' },
399
+ t('Close'),
400
+ React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
401
+ 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' }))),
402
+ React__default['default'].createElement("div", { className: 'str-chat__modal__inner', ref: innerRef }, children)));
376
403
  };
377
404
 
378
405
  var ModalComponent = function (props) {
379
406
  var images = props.images, index = props.index, modalIsOpen = props.modalIsOpen, toggleModal = props.toggleModal;
380
- return (React__default['default'].createElement(Carousel.ModalGateway, null, modalIsOpen ? (React__default['default'].createElement(Carousel.Modal, { onClose: toggleModal },
381
- React__default['default'].createElement(Carousel__default['default'], { components: {
382
- // @ts-expect-error
383
- View: ModalImage,
384
- }, currentIndex: index, views: images }))) : null));
407
+ return (React__default['default'].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
408
+ React__default['default'].createElement(ImageGallery__default['default'], { items: images, showIndex: true, showPlayButton: false, showThumbnails: false, startIndex: index })));
385
409
  };
386
410
 
387
411
  var UnMemoizedGallery = function (props) {
@@ -400,14 +424,16 @@ var UnMemoizedGallery = function (props) {
400
424
  };
401
425
  var formattedArray = React.useMemo(function () {
402
426
  return images.map(function (image) { return ({
427
+ original: image.image_url || image.thumb_url || '',
428
+ originalAlt: 'User uploaded content',
403
429
  source: image.image_url || image.thumb_url || '',
404
430
  }); });
405
431
  }, [images]);
406
- var renderImages = images.slice(0, 3).map(function (image, i) { return (React__default['default'].createElement("div", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-" + i, onClick: function () { return toggleModal(i); } },
407
- React__default['default'].createElement("img", { src: image.image_url || image.thumb_url }))); });
432
+ var renderImages = images.slice(0, 3).map(function (image, i) { return (React__default['default'].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-" + i, onClick: function () { return toggleModal(i); } },
433
+ React__default['default'].createElement("img", { alt: 'User uploaded content', src: image.image_url || image.thumb_url }))); });
408
434
  return (React__default['default'].createElement("div", { className: "str-chat__gallery " + (images.length > 3 ? 'str-chat__gallery--square' : '') },
409
435
  renderImages,
410
- images.length > 3 && (React__default['default'].createElement("div", { className: 'str-chat__gallery-placeholder', onClick: function () { return toggleModal(3); }, style: {
436
+ images.length > 3 && (React__default['default'].createElement("button", { className: 'str-chat__gallery-placeholder', onClick: function () { return toggleModal(3); }, style: {
411
437
  backgroundImage: "url(" + images[3].image_url + ")",
412
438
  } },
413
439
  React__default['default'].createElement("p", null, t('{{ imageCount }} more', {
@@ -427,10 +453,12 @@ var ImageComponent = function (props) {
427
453
  var _a = React.useState(false), modalIsOpen = _a[0], setModalIsOpen = _a[1];
428
454
  var fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url;
429
455
  var imageSrc = sanitizeUrl.sanitizeUrl(image_url || thumb_url);
430
- var formattedArray = [{ source: imageSrc }];
456
+ var formattedArray = [
457
+ { original: imageSrc, originalAlt: 'User uploaded content', source: imageSrc },
458
+ ];
431
459
  var toggleModal = function () { return setModalIsOpen(!modalIsOpen); };
432
460
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
433
- React__default['default'].createElement("img", { alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc }),
461
+ React__default['default'].createElement("img", { alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, onKeyPress: toggleModal, src: imageSrc, tabIndex: 0 }),
434
462
  React__default['default'].createElement(ModalComponent, { images: formattedArray, index: 0, modalIsOpen: modalIsOpen, toggleModal: toggleModal })));
435
463
  };
436
464
 
@@ -603,14 +631,12 @@ var Item = /*#__PURE__*/React__default['default'].forwardRef(function Item(props
603
631
  return /*#__PURE__*/React__default['default'].createElement("li", {
604
632
  className: "rta__item ".concat(className || ''),
605
633
  style: style
606
- }, /*#__PURE__*/React__default['default'].createElement("div", {
634
+ }, /*#__PURE__*/React__default['default'].createElement("button", {
607
635
  className: "rta__entity ".concat(selected ? 'rta__entity--selected' : ''),
608
636
  onClick: onClickHandler,
609
637
  onFocus: selectItem,
610
638
  onMouseEnter: selectItem,
611
- ref: innerRef,
612
- role: "button",
613
- tabIndex: 0
639
+ ref: innerRef
614
640
  }, /*#__PURE__*/React__default['default'].createElement(Component, {
615
641
  entity: item,
616
642
  selected: selected
@@ -687,6 +713,23 @@ var messageCodeBlocks = function (message) {
687
713
  var matches = message.match(codeRegex);
688
714
  return matches || [];
689
715
  };
716
+ var detectHttp = /(http(s?):\/\/)?(www\.)?/;
717
+ function formatUrlForDisplay(url) {
718
+ try {
719
+ return decodeURIComponent(url).replace(detectHttp, '');
720
+ }
721
+ catch (e) {
722
+ return url;
723
+ }
724
+ }
725
+ function encodeDecode(url) {
726
+ try {
727
+ return encodeURI(decodeURIComponent(url));
728
+ }
729
+ catch (error) {
730
+ return url;
731
+ }
732
+ }
690
733
  var markDownRenderers = {
691
734
  // eslint-disable-next-line react/display-name
692
735
  link: function (props) {
@@ -751,7 +794,6 @@ var renderText = function (text, mentioned_users, options) {
751
794
  var newText = text;
752
795
  var markdownLinks = matchMarkdownLinks(newText);
753
796
  var codeBlocks = messageCodeBlocks(newText);
754
- var detectHttp = /(http(s?):\/\/)?(www\.)?/;
755
797
  // extract all valid links/emails within text and replace it with proper markup
756
798
  uniqBy__default['default'](linkify__namespace.find(newText), 'value').forEach(function (_a) {
757
799
  var href = _a.href, type = _a.type, value = _a.value;
@@ -767,8 +809,12 @@ var renderText = function (text, mentioned_users, options) {
767
809
  });
768
810
  if (noParsingNeeded.length > 0 || linkIsInBlock)
769
811
  return;
770
- var displayLink = type === 'email' ? value : value.replace(detectHttp, '');
771
- newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeURI(href) + ")");
812
+ try {
813
+ var displayLink = type === 'email' ? value : formatUrlForDisplay(href);
814
+ newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[" + displayLink + "](" + encodeDecode(href) + ")");
815
+ }
816
+ catch (e) {
817
+ }
772
818
  });
773
819
  var plugins = [emojiMarkdownPlugin];
774
820
  if (mentioned_users === null || mentioned_users === void 0 ? void 0 : mentioned_users.length) {
@@ -1028,7 +1074,6 @@ var List = function List(props) {
1028
1074
 
1029
1075
  if ((event.which === KEY_CODES.ENTER || event.which === KEY_CODES.TAB) && selectedItem !== undefined) {
1030
1076
  handleClick(event);
1031
- return setSelectedItem(undefined);
1032
1077
  }
1033
1078
 
1034
1079
  return null;
@@ -1156,6 +1201,54 @@ var UnMemoizedCommandItem = function (props) {
1156
1201
  };
1157
1202
  var CommandItem = React__default['default'].memo(UnMemoizedCommandItem);
1158
1203
 
1204
+ /**
1205
+ * A round avatar image with fallback to username's first letter
1206
+ */
1207
+ var Avatar = function (props) {
1208
+ 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;
1209
+ var _e = React.useState(false), error = _e[0], setError = _e[1];
1210
+ var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1211
+ React.useEffect(function () {
1212
+ setError(false);
1213
+ setLoaded(false);
1214
+ }, [image]);
1215
+ var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1216
+ var initials = getWholeChar(nameStr, 0);
1217
+ return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1218
+ flexBasis: size + "px",
1219
+ fontSize: size / 2 + "px",
1220
+ height: size + "px",
1221
+ lineHeight: size + "px",
1222
+ width: size + "px",
1223
+ }, 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: {
1224
+ flexBasis: size + "px",
1225
+ height: size + "px",
1226
+ objectFit: 'cover',
1227
+ width: size + "px",
1228
+ } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1229
+ };
1230
+
1231
+ /**
1232
+ * UI component for mentions rendered in suggestion list
1233
+ */
1234
+ var UnMemoizedUserItem = function (props) {
1235
+ var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
1236
+ var hasEntity = Object.keys(entity).length;
1237
+ var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
1238
+ var renderName = function () {
1239
+ if (!hasEntity)
1240
+ return null;
1241
+ return (hasEntity &&
1242
+ itemParts.parts.map(function (part, i) {
1243
+ 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));
1244
+ }));
1245
+ };
1246
+ return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
1247
+ React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
1248
+ React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
1249
+ };
1250
+ var UserItem = React__default['default'].memo(UnMemoizedUserItem);
1251
+
1159
1252
  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; }
1160
1253
 
1161
1254
  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; }
@@ -1292,13 +1385,15 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1292
1385
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_onSelect", function (newToken) {
1293
1386
  var _this$props = _this.props,
1294
1387
  closeCommandsList = _this$props.closeCommandsList,
1388
+ closeMentionsList = _this$props.closeMentionsList,
1295
1389
  onChange = _this$props.onChange,
1296
- showCommandsList = _this$props.showCommandsList;
1390
+ showCommandsList = _this$props.showCommandsList,
1391
+ showMentionsList = _this$props.showMentionsList;
1297
1392
  var _this$state = _this.state,
1298
1393
  stateTrigger = _this$state.currentTrigger,
1299
1394
  selectionEnd = _this$state.selectionEnd,
1300
1395
  textareaValue = _this$state.value;
1301
- var currentTrigger = showCommandsList ? '/' : stateTrigger;
1396
+ var currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;
1302
1397
  if (!currentTrigger) return;
1303
1398
 
1304
1399
  var computeCaretPosition = function computeCaretPosition(position, token, startToken) {
@@ -1319,7 +1414,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1319
1414
  }
1320
1415
  };
1321
1416
 
1322
- var textToModify = showCommandsList ? '/' : textareaValue.slice(0, selectionEnd);
1417
+ var textToModify = showCommandsList ? '/' : showMentionsList ? '@' : textareaValue.slice(0, selectionEnd);
1323
1418
  var startOfTokenPosition = textToModify.lastIndexOf(currentTrigger); // we add space after emoji is selected if a caret position is next
1324
1419
 
1325
1420
  var newTokenString = newToken.caretPosition === 'next' ? "".concat(newToken.text, " ") : newToken.text;
@@ -1345,7 +1440,8 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1345
1440
 
1346
1441
  _this._closeAutocomplete();
1347
1442
 
1348
- closeCommandsList();
1443
+ if (showCommandsList) closeCommandsList();
1444
+ if (showMentionsList) closeMentionsList();
1349
1445
  });
1350
1446
 
1351
1447
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_getItemOnSelect", function (paramTrigger) {
@@ -1486,13 +1582,6 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1486
1582
  return data;
1487
1583
  });
1488
1584
 
1489
- _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_createRegExp", function () {
1490
- var trigger = _this.props.trigger; // negative lookahead to match only the trigger + the actual token = "bladhwd:adawd:word test" => ":word"
1491
- // https://stackoverflow.com/a/8057827/2719917
1492
-
1493
- _this.tokenRegExp = new RegExp("([".concat(Object.keys(trigger).join(''), "])(?:(?!\\1)[^\\s])*$"));
1494
- });
1495
-
1496
1585
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_closeAutocomplete", function () {
1497
1586
  _this.setState({
1498
1587
  currentTrigger: null,
@@ -1506,7 +1595,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1506
1595
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "_cleanUpProps", function () {
1507
1596
  var props = _objectSpread({}, _this.props);
1508
1597
 
1509
- 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
1598
+ 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
1510
1599
 
1511
1600
  for (var prop in props) {
1512
1601
  if (notSafe.includes(prop)) delete props[prop];
@@ -1663,6 +1752,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1663
1752
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getTriggerProps", function () {
1664
1753
  var _this$props5 = _this.props,
1665
1754
  showCommandsList = _this$props5.showCommandsList,
1755
+ showMentionsList = _this$props5.showMentionsList,
1666
1756
  trigger = _this$props5.trigger;
1667
1757
  var _this$state6 = _this.state,
1668
1758
  component = _this$state6.component,
@@ -1686,18 +1776,18 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1686
1776
  values: suggestionData
1687
1777
  };
1688
1778
 
1689
- if (showCommandsList && trigger['/']) {
1779
+ if (showCommandsList && trigger['/'] || showMentionsList && trigger['@']) {
1690
1780
  var currentCommands;
1691
- var getCommands = trigger['/'].dataProvider;
1692
- getCommands === null || getCommands === void 0 ? void 0 : getCommands('', '/', function (data) {
1781
+ var getCommands = trigger[showCommandsList ? '/' : '@'].dataProvider;
1782
+ getCommands === null || getCommands === void 0 ? void 0 : getCommands('', showCommandsList ? '/' : '@', function (data) {
1693
1783
  currentCommands = data;
1694
1784
  });
1695
- triggerProps.component = CommandItem;
1696
- triggerProps.currentTrigger = '/';
1697
- triggerProps.getTextToReplace = _this._getTextToReplace('/');
1698
- triggerProps.getSelectedItem = _this._getItemOnSelect('/');
1785
+ triggerProps.component = showCommandsList ? CommandItem : UserItem;
1786
+ triggerProps.currentTrigger = showCommandsList ? '/' : '@';
1787
+ triggerProps.getTextToReplace = _this._getTextToReplace(showCommandsList ? '/' : '@');
1788
+ triggerProps.getSelectedItem = _this._getItemOnSelect(showCommandsList ? '/' : '@');
1699
1789
  triggerProps.selectionEnd = 1;
1700
- triggerProps.value = '/';
1790
+ triggerProps.value = showCommandsList ? '/' : '@';
1701
1791
  triggerProps.values = currentCommands;
1702
1792
  }
1703
1793
 
@@ -1710,8 +1800,6 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1710
1800
  _value = _this$props6.value; // TODO: it would be better to have the parent control state...
1711
1801
  // if (value) this.state.value = value;
1712
1802
 
1713
- _this._createRegExp();
1714
-
1715
1803
  if (!loadingComponent) {
1716
1804
  throw new Error('RTA: loadingComponent is not defined');
1717
1805
  }
@@ -1766,40 +1854,12 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1766
1854
  });
1767
1855
  Listeners.startListen();
1768
1856
  }
1769
- }, {
1770
- key: "UNSAFE_componentWillReceiveProps",
1771
- value: function UNSAFE_componentWillReceiveProps(nextProps) {
1772
- this._update(nextProps);
1773
- }
1774
1857
  }, {
1775
1858
  key: "componentWillUnmount",
1776
1859
  value: function componentWillUnmount() {
1777
1860
  Listeners.stopListen();
1778
1861
  Listeners.remove(this.state.listenerIndex);
1779
1862
  }
1780
- }, {
1781
- key: "_update",
1782
- value: // TODO: This is an anti pattern in react, should come up with a better way
1783
- function _update(_ref) {
1784
- var trigger = _ref.trigger,
1785
- value = _ref.value;
1786
- var oldValue = this.state.value;
1787
- var oldTrigger = this.props.trigger;
1788
- if (value !== oldValue || !oldValue) this.setState({
1789
- value: value
1790
- });
1791
- /**
1792
- * check if trigger chars are changed, if so, change the regexp accordingly
1793
- */
1794
-
1795
- if (Object.keys(trigger).join('') !== Object.keys(oldTrigger).join('')) {
1796
- this._createRegExp();
1797
- }
1798
- }
1799
- /**
1800
- * Close autocomplete, also clean up trigger (to avoid slow promises)
1801
- */
1802
-
1803
1863
  }, {
1804
1864
  key: "renderSuggestionListContainer",
1805
1865
  value: function renderSuggestionListContainer() {
@@ -1820,8 +1880,8 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1820
1880
  if (triggerProps.values && triggerProps.currentTrigger && !(disableMentions && triggerProps.currentTrigger === '@')) {
1821
1881
  return /*#__PURE__*/React__default['default'].createElement("div", {
1822
1882
  className: "rta__autocomplete ".concat(dropdownClassName || ''),
1823
- ref: function ref(_ref2) {
1824
- _this3.dropdownRef = _ref2;
1883
+ ref: function ref(_ref) {
1884
+ _this3.dropdownRef = _ref;
1825
1885
  },
1826
1886
  style: dropdownStyle
1827
1887
  }, /*#__PURE__*/React__default['default'].createElement(SuggestionList, _extends__default['default']({
@@ -1863,14 +1923,34 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
1863
1923
  onFocus: this.props.onFocus,
1864
1924
  onScroll: this._onScrollHandler,
1865
1925
  onSelect: this._selectHandler,
1866
- ref: function ref(_ref3) {
1867
- if (_this4.props.innerRef) _this4.props.innerRef(_ref3);
1868
- _this4.textareaRef = _ref3;
1926
+ ref: function ref(_ref2) {
1927
+ if (_this4.props.innerRef) _this4.props.innerRef(_ref2);
1928
+ _this4.textareaRef = _ref2;
1869
1929
  },
1870
1930
  style: style,
1871
1931
  value: value
1872
1932
  }, this.props.additionalTextareaProps)));
1873
1933
  }
1934
+ }], [{
1935
+ key: "getDerivedStateFromProps",
1936
+ value:
1937
+ /**
1938
+ * setup to emulate the UNSAFE_componentWillReceiveProps
1939
+ */
1940
+ function getDerivedStateFromProps(props, state) {
1941
+ if (props.value !== state.propsValue || !state.value) {
1942
+ return {
1943
+ propsValue: props.value,
1944
+ value: props.value
1945
+ };
1946
+ } else {
1947
+ return null;
1948
+ }
1949
+ }
1950
+ /**
1951
+ * Close autocomplete, also clean up trigger (to avoid slow promises)
1952
+ */
1953
+
1874
1954
  }]);
1875
1955
 
1876
1956
  return ReactTextareaAutocomplete;
@@ -1912,33 +1992,6 @@ ReactTextareaAutocomplete.propTypes = {
1912
1992
  value: PropTypes__default['default'].string
1913
1993
  };
1914
1994
 
1915
- /**
1916
- * A round avatar image with fallback to username's first letter
1917
- */
1918
- var Avatar = function (props) {
1919
- 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;
1920
- var _e = React.useState(false), error = _e[0], setError = _e[1];
1921
- var _f = React.useState(false), loaded = _f[0], setLoaded = _f[1];
1922
- React.useEffect(function () {
1923
- setError(false);
1924
- setLoaded(false);
1925
- }, [image]);
1926
- var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
1927
- var initials = getWholeChar(nameStr, 0);
1928
- return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
1929
- flexBasis: size + "px",
1930
- fontSize: size / 2 + "px",
1931
- height: size + "px",
1932
- lineHeight: size + "px",
1933
- width: size + "px",
1934
- }, 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: {
1935
- flexBasis: size + "px",
1936
- height: size + "px",
1937
- objectFit: 'cover',
1938
- width: size + "px",
1939
- } })) : (React__default['default'].createElement("div", { className: 'str-chat__avatar-fallback', "data-testid": 'avatar-fallback' }, initials))));
1940
- };
1941
-
1942
1995
  var channelReducer = function (state, action) {
1943
1996
  var _a;
1944
1997
  switch (action.type) {
@@ -2043,7 +2096,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
2043
2096
 
2044
2097
  var useCreateChannelStateContext = function (value) {
2045
2098
  var _a;
2046
- var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, 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;
2099
+ 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;
2047
2100
  var channelId = channel.cid;
2048
2101
  var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
2049
2102
  var membersLength = Object.keys(members || []).length;
@@ -2063,24 +2116,24 @@ var useCreateChannelStateContext = function (value) {
2063
2116
  ? messages
2064
2117
  : messages
2065
2118
  .map(function (_a) {
2066
- 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;
2119
+ 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;
2067
2120
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2068
2121
  var type = _a.type;
2069
2122
  return type;
2070
2123
  }).join() : '') + pinned + reply_count + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2071
2124
  ? updated_at.toISOString()
2072
- : updated_at || '');
2125
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2073
2126
  })
2074
2127
  .join();
2075
2128
  var memoizedThreadMessageData = threadMessages
2076
2129
  .map(function (_a) {
2077
- var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at;
2130
+ 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;
2078
2131
  return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
2079
2132
  var type = _a.type;
2080
2133
  return type;
2081
2134
  }).join() : '') + pinned + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
2082
2135
  ? updated_at.toISOString()
2083
- : updated_at || '');
2136
+ : updated_at || '') + (user === null || user === void 0 ? void 0 : user.image) + (user === null || user === void 0 ? void 0 : user.name);
2084
2137
  })
2085
2138
  .join();
2086
2139
  var channelStateContext = React.useMemo(function () { return ({
@@ -2088,6 +2141,7 @@ var useCreateChannelStateContext = function (value) {
2088
2141
  channel: channel,
2089
2142
  channelCapabilities: channelCapabilities,
2090
2143
  channelConfig: channelConfig,
2144
+ dragAndDropWindow: dragAndDropWindow,
2091
2145
  error: error,
2092
2146
  hasMore: hasMore,
2093
2147
  loading: loading,
@@ -2299,7 +2353,7 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2299
2353
  (isMyMessage && channelCapabilities['delete-own-message']);
2300
2354
  var canFlag = !isMyMessage;
2301
2355
  var canMute = !isMyMessage && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.mutes);
2302
- var canQuote = !disableQuotedMessages;
2356
+ var canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];
2303
2357
  var canReact = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
2304
2358
  var canReply = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.replies) !== false && channelCapabilities['send-reply'];
2305
2359
  return {
@@ -2509,7 +2563,7 @@ var showMessageActionsBox = function (actions) {
2509
2563
  return true;
2510
2564
  };
2511
2565
  var areMessagePropsEqual = function (prevProps, nextProps) {
2512
- var _a, _b, _c, _d;
2566
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2513
2567
  var prevMessage = prevProps.message, prevMessageUI = prevProps.Message;
2514
2568
  var nextMessage = nextProps.message, nextMessageUI = nextProps.Message;
2515
2569
  if (prevMessageUI !== nextMessageUI)
@@ -2527,7 +2581,9 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2527
2581
  prevMessage.status === nextMessage.status &&
2528
2582
  prevMessage.text === nextMessage.text &&
2529
2583
  prevMessage.type === nextMessage.type &&
2530
- prevMessage.updated_at === nextMessage.updated_at;
2584
+ prevMessage.updated_at === nextMessage.updated_at &&
2585
+ ((_e = prevMessage.user) === null || _e === void 0 ? void 0 : _e.image) === ((_f = nextMessage.user) === null || _f === void 0 ? void 0 : _f.image) &&
2586
+ ((_g = prevMessage.user) === null || _g === void 0 ? void 0 : _g.name) === ((_h = nextMessage.user) === null || _h === void 0 ? void 0 : _h.name);
2531
2587
  if (!messagesAreEqual)
2532
2588
  return false;
2533
2589
  var deepEqualProps = deepequal__default['default'](nextProps.readBy, prevProps.readBy) &&
@@ -2540,7 +2596,7 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
2540
2596
  );
2541
2597
  };
2542
2598
  var areMessageUIPropsEqual = function (prevProps, nextProps) {
2543
- var _a, _b, _c, _d, _e, _f, _g, _h;
2599
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
2544
2600
  var prevLastReceivedId = prevProps.lastReceivedId, prevMessage = prevProps.message;
2545
2601
  var nextLastReceivedId = nextProps.lastReceivedId, nextMessage = nextProps.message;
2546
2602
  if (prevProps.editing !== nextProps.editing)
@@ -2566,7 +2622,9 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
2566
2622
  prevMessage.status === nextMessage.status &&
2567
2623
  prevMessage.text === nextMessage.text &&
2568
2624
  prevMessage.type === nextMessage.type &&
2569
- prevMessage.updated_at === nextMessage.updated_at;
2625
+ prevMessage.updated_at === nextMessage.updated_at &&
2626
+ ((_j = prevMessage.user) === null || _j === void 0 ? void 0 : _j.image) === ((_k = nextMessage.user) === null || _k === void 0 ? void 0 : _k.image) &&
2627
+ ((_l = prevMessage.user) === null || _l === void 0 ? void 0 : _l.name) === ((_m = nextMessage.user) === null || _m === void 0 ? void 0 : _m.name);
2570
2628
  if (!messagesAreEqual)
2571
2629
  return false;
2572
2630
  return true;
@@ -2691,8 +2749,7 @@ var CustomMessageActionsList = function (props) {
2691
2749
  var customActionsArray = Object.keys(customMessageActions);
2692
2750
  return (React__default['default'].createElement(React__default['default'].Fragment, null, customActionsArray.map(function (customAction) {
2693
2751
  var customHandler = customMessageActions[customAction];
2694
- return (React__default['default'].createElement("button", { key: customAction, onClick: function (event) { return customHandler(message, event); } },
2695
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, customAction)));
2752
+ return (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
2696
2753
  })));
2697
2754
  };
2698
2755
  var UnMemoizedMessageActionsBox = function (props) {
@@ -2719,32 +2776,26 @@ var UnMemoizedMessageActionsBox = function (props) {
2719
2776
  }, [messageListRect, mine, open]);
2720
2777
  var handleQuote = function () {
2721
2778
  setQuotedMessage(message);
2722
- var elements = document.getElementsByClassName('str-chat__textarea__textarea');
2779
+ var elements = message.parent_id
2780
+ ? document.querySelectorAll('.str-chat__thread .str-chat__textarea__textarea')
2781
+ : document.getElementsByClassName('str-chat__textarea__textarea');
2723
2782
  var textarea = elements.item(0);
2724
2783
  if (textarea instanceof HTMLTextAreaElement) {
2725
2784
  textarea.focus();
2726
2785
  }
2727
2786
  };
2728
2787
  return (React__default['default'].createElement("div", { className: "str-chat__message-actions-box\n " + (open ? 'str-chat__message-actions-box--open' : '') + "\n " + (mine ? 'str-chat__message-actions-box--mine' : '') + "\n " + (reverse ? 'str-chat__message-actions-box--reverse' : '') + "\n ", "data-testid": 'message-actions-box', ref: checkIfReverse },
2729
- React__default['default'].createElement("ul", { className: 'str-chat__message-actions-list' },
2788
+ React__default['default'].createElement("div", { "aria-label": 'Message Options', className: 'str-chat__message-actions-list', role: 'listbox' },
2730
2789
  customMessageActions && (React__default['default'].createElement(CustomMessageActionsList, { customMessageActions: customMessageActions, message: message })),
2731
- messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 &&
2732
- !message.parent_id &&
2733
- !message.quoted_message && (React__default['default'].createElement("button", { onClick: handleQuote },
2734
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Reply')))),
2735
- messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (React__default['default'].createElement("button", { onClick: handlePin },
2736
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, !message.pinned ? t('Pin') : t('Unpin')))),
2737
- messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (React__default['default'].createElement("button", { onClick: handleFlag },
2738
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Flag')))),
2739
- messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (React__default['default'].createElement("button", { onClick: handleMute },
2740
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, isUserMuted() ? t('Unmute') : t('Mute')))),
2741
- messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1 && (React__default['default'].createElement("button", { onClick: handleEdit },
2742
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Edit Message')))),
2743
- messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1 && (React__default['default'].createElement("button", { onClick: handleDelete },
2744
- React__default['default'].createElement("li", { className: 'str-chat__message-actions-list-item' }, t('Delete')))))));
2790
+ messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && !message.quoted_message && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleQuote, role: 'option' }, t('Reply'))),
2791
+ messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handlePin, role: 'option' }, !message.pinned ? t('Pin') : t('Unpin'))),
2792
+ messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleFlag, role: 'option' }, t('Flag'))),
2793
+ messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleMute, role: 'option' }, isUserMuted() ? t('Unmute') : t('Mute'))),
2794
+ messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleEdit, role: 'option' }, t('Edit Message'))),
2795
+ messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleDelete, role: 'option' }, t('Delete'))))));
2745
2796
  };
2746
2797
  /**
2747
- * A popup box that displays the available actions on a message, such edit, delete, pin, etc.
2798
+ * A popup box that displays the available actions on a message, such as edit, delete, pin, etc.
2748
2799
  */
2749
2800
  var MessageActionsBox = React__default['default'].memo(UnMemoizedMessageActionsBox);
2750
2801
 
@@ -2786,7 +2837,8 @@ var MessageActions = function (props) {
2786
2837
  return null;
2787
2838
  return (React__default['default'].createElement(MessageActionsWrapper, { customWrapperClass: customWrapperClass, inline: inline, setActionsBoxOpen: setActionsBoxOpen },
2788
2839
  React__default['default'].createElement(MessageActionsBox, { getMessageActions: getMessageActions, handleDelete: handleDelete, handleEdit: setEditingState, handleFlag: handleFlag, handleMute: handleMute, handlePin: handlePin, isUserMuted: isMuted, mine: mine ? mine() : isMyMessage(), open: actionsBoxOpen }),
2789
- React__default['default'].createElement(ActionsIcon$1, null)));
2840
+ React__default['default'].createElement("button", { "aria-expanded": actionsBoxOpen, "aria-haspopup": 'true', "aria-label": 'Open Message Actions Menu' },
2841
+ React__default['default'].createElement(ActionsIcon$1, null))));
2790
2842
  };
2791
2843
  var MessageActionsWrapper = function (props) {
2792
2844
  var children = props.children, customWrapperClass = props.customWrapperClass, inline = props.inline, setActionsBoxOpen = props.setActionsBoxOpen;
@@ -2826,15 +2878,15 @@ var UnMemoizedMessageOptions = function (props) {
2826
2878
  if (isMyMessage() && displayLeft) {
2827
2879
  return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options-left' },
2828
2880
  showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef })),
2829
- shouldShowReplies && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
2881
+ shouldShowReplies && (React__default['default'].createElement("button", { "aria-label": 'Open Thread', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
2830
2882
  React__default['default'].createElement(ThreadIcon$1, null))),
2831
- shouldShowReactions && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
2883
+ shouldShowReactions && (React__default['default'].createElement("button", { "aria-label": 'Open Reaction Selector', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
2832
2884
  React__default['default'].createElement(ReactionIcon$1, null)))));
2833
2885
  }
2834
2886
  return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options' },
2835
- shouldShowReactions && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
2887
+ shouldShowReactions && (React__default['default'].createElement("button", { "aria-label": 'Open Reaction Selector', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
2836
2888
  React__default['default'].createElement(ReactionIcon$1, null))),
2837
- shouldShowReplies && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
2889
+ shouldShowReplies && (React__default['default'].createElement("button", { "aria-label": 'Open Thread', className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
2838
2890
  React__default['default'].createElement(ThreadIcon$1, null))),
2839
2891
  showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef }))));
2840
2892
  };
@@ -3292,32 +3344,33 @@ var useReactionHandler = function (message) {
3292
3344
  };
3293
3345
  var toggleReaction = throttle__default['default'](function (id, type, add) { return __awaiter(void 0, void 0, void 0, function () {
3294
3346
  var newReaction, tempMessage, messageResponse, _a;
3295
- return __generator(this, function (_b) {
3296
- switch (_b.label) {
3347
+ var _b;
3348
+ return __generator(this, function (_c) {
3349
+ switch (_c.label) {
3297
3350
  case 0:
3298
- if (!message)
3351
+ if (!message || ((_b = channel.data) === null || _b === void 0 ? void 0 : _b.frozen))
3299
3352
  return [2 /*return*/];
3300
3353
  newReaction = creatReactionPreview(type);
3301
3354
  tempMessage = createMessagePreview(add, newReaction, message);
3302
- _b.label = 1;
3355
+ _c.label = 1;
3303
3356
  case 1:
3304
- _b.trys.push([1, 6, , 7]);
3357
+ _c.trys.push([1, 6, , 7]);
3305
3358
  updateMessage(tempMessage);
3306
3359
  if (!add) return [3 /*break*/, 3];
3307
3360
  return [4 /*yield*/, channel.sendReaction(id, { type: type })];
3308
3361
  case 2:
3309
- _a = _b.sent();
3362
+ _a = _c.sent();
3310
3363
  return [3 /*break*/, 5];
3311
3364
  case 3: return [4 /*yield*/, channel.deleteReaction(id, type)];
3312
3365
  case 4:
3313
- _a = _b.sent();
3314
- _b.label = 5;
3366
+ _a = _c.sent();
3367
+ _c.label = 5;
3315
3368
  case 5:
3316
3369
  messageResponse = _a;
3317
3370
  updateMessage(messageResponse.message);
3318
3371
  return [3 /*break*/, 7];
3319
3372
  case 6:
3320
- _b.sent();
3373
+ _c.sent();
3321
3374
  // revert to the original message if the API call fails
3322
3375
  updateMessage(message);
3323
3376
  return [3 /*break*/, 7];
@@ -3372,10 +3425,12 @@ var useReactionHandler = function (message) {
3372
3425
  }); };
3373
3426
  };
3374
3427
  var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef, closeReactionSelectorOnClick) {
3375
- var _a = useChannelStateContext('useReactionClick'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
3376
- var _c = React.useState(false), showDetailedReactions = _c[0], setShowDetailedReactions = _c[1];
3428
+ var _a;
3429
+ var _b = useChannelStateContext('useReactionClick'), channel = _b.channel, _c = _b.channelCapabilities, channelCapabilities = _c === void 0 ? {} : _c, channelConfig = _b.channelConfig;
3430
+ var _d = React.useState(false), showDetailedReactions = _d[0], setShowDetailedReactions = _d[1];
3377
3431
  var hasListener = React.useRef(false);
3378
- var isReactionEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction'];
3432
+ var isFrozen = !!((_a = channel.data) === null || _a === void 0 ? void 0 : _a.frozen);
3433
+ var isReactionEnabled = ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction']) || isFrozen;
3379
3434
  var messageDeleted = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
3380
3435
  var closeDetailedReactions = React.useCallback(function (event) {
3381
3436
  var _a;
@@ -3470,9 +3525,10 @@ var useUserHandler = function (message, eventHandlers) { return ({
3470
3525
 
3471
3526
  var QuotedMessage = function () {
3472
3527
  var _a, _b;
3473
- var Attachment = useComponentContext('QuotedMessage').Attachment;
3474
- var _c = useMessageContext('QuotedMessage'), isMyMessage = _c.isMyMessage, message = _c.message;
3528
+ var _c = useComponentContext('QuotedMessage'), Attachment = _c.Attachment, ContextAvatar = _c.Avatar;
3529
+ var _d = useMessageContext('QuotedMessage'), isMyMessage = _d.isMyMessage, message = _d.message;
3475
3530
  var userLanguage = useTranslationContext('QuotedMessage').userLanguage;
3531
+ var Avatar$1 = ContextAvatar || Avatar;
3476
3532
  var quoted_message = message.quoted_message;
3477
3533
  if (!quoted_message)
3478
3534
  return null;
@@ -3487,7 +3543,7 @@ var QuotedMessage = function () {
3487
3543
  return null;
3488
3544
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
3489
3545
  React__default['default'].createElement("div", { className: "" + (isMyMessage() ? 'quoted-message mine' : 'quoted-message') },
3490
- 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 })),
3546
+ 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 })),
3491
3547
  React__default['default'].createElement("div", { className: 'quoted-message-inner' },
3492
3548
  quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
3493
3549
  React__default['default'].createElement("div", null, quotedMessageText))),
@@ -3709,7 +3765,7 @@ var searchLocalUsers = function (params) {
3709
3765
  var transliterate;
3710
3766
  return __generator(this, function (_a) {
3711
3767
  switch (_a.label) {
3712
- case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@sindresorhus/transliterate')); })];
3768
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@stream-io/transliterate')); })];
3713
3769
  case 1:
3714
3770
  transliterate = (_a.sent()).default;
3715
3771
  updatedName = transliterate(user.name || '').toLowerCase();
@@ -3733,27 +3789,59 @@ var searchLocalUsers = function (params) {
3733
3789
  });
3734
3790
  return matchingUsers;
3735
3791
  };
3736
-
3737
- /**
3738
- * UI component for mentions rendered in suggestion list
3739
- */
3740
- var UnMemoizedUserItem = function (props) {
3741
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, entity = props.entity;
3742
- var hasEntity = Object.keys(entity).length;
3743
- var itemParts = entity === null || entity === void 0 ? void 0 : entity.itemNameParts;
3744
- var renderName = function () {
3745
- if (!hasEntity)
3746
- return null;
3747
- return (hasEntity &&
3748
- itemParts.parts.map(function (part, i) {
3749
- 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));
3750
- }));
3751
- };
3752
- return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
3753
- React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
3754
- React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
3755
- };
3756
- var UserItem = React__default['default'].memo(UnMemoizedUserItem);
3792
+ var checkUploadPermissions = function (params) { return __awaiter(void 0, void 0, void 0, function () {
3793
+ 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;
3794
+ var _b, _c;
3795
+ return __generator(this, function (_d) {
3796
+ switch (_d.label) {
3797
+ case 0:
3798
+ addNotification = params.addNotification, file = params.file, getAppSettings = params.getAppSettings, t = params.t, uploadType = params.uploadType;
3799
+ appSettings = null;
3800
+ return [4 /*yield*/, getAppSettings()];
3801
+ case 1:
3802
+ appSettings = _d.sent();
3803
+ _a = (uploadType === 'image'
3804
+ ? (_b = appSettings === null || appSettings === void 0 ? void 0 : appSettings.app) === null || _b === void 0 ? void 0 : _b.image_upload_config
3805
+ : (_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;
3806
+ sendErrorNotification = function () {
3807
+ return addNotification(t("Upload type: \"{{ type }}\" is not allowed", { type: file.type || 'unknown type' }), 'error');
3808
+ };
3809
+ if (allowed_file_extensions === null || allowed_file_extensions === void 0 ? void 0 : allowed_file_extensions.length) {
3810
+ allowed = allowed_file_extensions.some(function (ext) {
3811
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3812
+ });
3813
+ if (!allowed) {
3814
+ sendErrorNotification();
3815
+ return [2 /*return*/, false];
3816
+ }
3817
+ }
3818
+ if (blocked_file_extensions === null || blocked_file_extensions === void 0 ? void 0 : blocked_file_extensions.length) {
3819
+ blocked = blocked_file_extensions.some(function (ext) {
3820
+ return file.name.toLowerCase().endsWith(ext.toLowerCase());
3821
+ });
3822
+ if (blocked) {
3823
+ sendErrorNotification();
3824
+ return [2 /*return*/, false];
3825
+ }
3826
+ }
3827
+ if (allowed_mime_types === null || allowed_mime_types === void 0 ? void 0 : allowed_mime_types.length) {
3828
+ allowed = allowed_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3829
+ if (!allowed) {
3830
+ sendErrorNotification();
3831
+ return [2 /*return*/, false];
3832
+ }
3833
+ }
3834
+ if (blocked_mime_types === null || blocked_mime_types === void 0 ? void 0 : blocked_mime_types.length) {
3835
+ blocked = blocked_mime_types.some(function (type) { var _a; return type.toLowerCase() === ((_a = file.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
3836
+ if (blocked) {
3837
+ sendErrorNotification();
3838
+ return [2 /*return*/, false];
3839
+ }
3840
+ }
3841
+ return [2 /*return*/, true];
3842
+ }
3843
+ });
3844
+ }); };
3757
3845
 
3758
3846
  var useUserTrigger = function (params) {
3759
3847
  var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
@@ -4040,7 +4128,7 @@ var FileUploadIconFlat = function () {
4040
4128
  var SendButton = function (_a) {
4041
4129
  var sendMessage = _a.sendMessage;
4042
4130
  var t = useTranslationContext('SendButton').t;
4043
- return (React__default['default'].createElement("button", { className: 'str-chat__send-button', onClick: sendMessage },
4131
+ return (React__default['default'].createElement("button", { "aria-label": 'Send', className: 'str-chat__send-button', onClick: sendMessage },
4044
4132
  React__default['default'].createElement("svg", { height: '17', viewBox: '0 0 18 17', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
4045
4133
  React__default['default'].createElement("title", null, t('Send')),
4046
4134
  React__default['default'].createElement("path", { d: 'M0 17.015l17.333-8.508L0 0v6.617l12.417 1.89L0 10.397z', fill: '#006cff', fillRule: 'evenodd' }))));
@@ -4066,7 +4154,8 @@ var UploadsPreview = function () {
4066
4154
  }
4067
4155
  }, [device, numberOfUploads, text]);
4068
4156
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
4069
- imageOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.ImagePreviewer, { disabled: maxNumberOfFiles !== undefined && numberOfUploads >= maxNumberOfFiles, handleFiles: uploadNewFiles, handleRemove: removeImage, handleRetry: uploadImage, imageUploads: imagesToPreview, multiple: multipleUploads })),
4157
+ imageOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.ImagePreviewer, { disabled: !multipleUploads ||
4158
+ (maxNumberOfFiles !== undefined && numberOfUploads >= maxNumberOfFiles), handleFiles: uploadNewFiles, handleRemove: removeImage, handleRetry: uploadImage, imageUploads: imagesToPreview, multiple: multipleUploads })),
4070
4159
  fileOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.FilePreviewer, { handleFiles: uploadNewFiles, handleRemove: removeFile, handleRetry: uploadFile, uploads: filesToPreview }))));
4071
4160
  };
4072
4161
 
@@ -4076,32 +4165,34 @@ var UnMemoizedChatAutoComplete = function (props) {
4076
4165
  var messageInput = useMessageInputContext('ChatAutoComplete');
4077
4166
  var cooldownRemaining = messageInput.cooldownRemaining, disabled = messageInput.disabled, emojiIndex = messageInput.emojiIndex, innerRef = messageInput.textareaRef;
4078
4167
  var placeholder = props.placeholder || t('Type your message');
4079
- var emojiReplace = function (word) {
4080
- var found = (emojiIndex === null || emojiIndex === void 0 ? void 0 : emojiIndex.search(word)) || [];
4081
- var emoji = found
4082
- .filter(Boolean)
4083
- .slice(0, 10)
4084
- .find(function (_a) {
4085
- var emoticons = _a.emoticons;
4086
- return !!(emoticons === null || emoticons === void 0 ? void 0 : emoticons.includes(word));
4087
- });
4088
- if (!emoji || !('native' in emoji))
4089
- return null;
4090
- return emoji.native;
4091
- };
4168
+ var emojiReplace = props.wordReplace
4169
+ ? function (word) { var _a; return (_a = props.wordReplace) === null || _a === void 0 ? void 0 : _a.call(props, word, emojiIndex); }
4170
+ : function (word) {
4171
+ var found = (emojiIndex === null || emojiIndex === void 0 ? void 0 : emojiIndex.search(word)) || [];
4172
+ var emoji = found
4173
+ .filter(Boolean)
4174
+ .slice(0, 10)
4175
+ .find(function (_a) {
4176
+ var emoticons = _a.emoticons;
4177
+ return !!(emoticons === null || emoticons === void 0 ? void 0 : emoticons.includes(word));
4178
+ });
4179
+ if (!emoji || !('native' in emoji))
4180
+ return null;
4181
+ return emoji.native;
4182
+ };
4092
4183
  var updateInnerRef = React.useCallback(function (ref) {
4093
4184
  if (innerRef) {
4094
4185
  innerRef.current = ref;
4095
4186
  }
4096
4187
  }, [innerRef]);
4097
- 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 }));
4188
+ return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, "aria-label": cooldownRemaining ? t('Slow Mode ON') : placeholder, 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 }));
4098
4189
  };
4099
4190
  var ChatAutoComplete = React__default['default'].memo(UnMemoizedChatAutoComplete);
4100
4191
 
4101
4192
  var EditMessageForm = function () {
4102
4193
  var _a = useChannelStateContext('EditMessageForm'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
4103
4194
  var t = useTranslationContext('EditMessageForm').t;
4104
- var _b = useMessageInputContext('EditMessageForm'), clearEditingState = _b.clearEditingState, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
4195
+ var _b = useMessageInputContext('EditMessageForm'), clearEditingState = _b.clearEditingState, closeEmojiPicker = _b.closeEmojiPicker, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, uploadNewFiles = _b.uploadNewFiles;
4105
4196
  var _c = useComponentContext('EditMessageForm'), _d = _c.EmojiIcon, EmojiIcon = _d === void 0 ? EmojiIconSmall : _d, _e = _c.FileUploadIcon, FileUploadIcon$1 = _e === void 0 ? FileUploadIcon : _e;
4106
4197
  React.useEffect(function () {
4107
4198
  var onKeyDown = function (event) {
@@ -4119,7 +4210,7 @@ var EditMessageForm = function () {
4119
4210
  React__default['default'].createElement(ChatAutoComplete, null),
4120
4211
  React__default['default'].createElement("div", { className: 'str-chat__message-team-form-footer' },
4121
4212
  React__default['default'].createElement("div", { className: 'str-chat__edit-message-form-options' },
4122
- React__default['default'].createElement("span", { className: 'str-chat__input-emojiselect', onClick: openEmojiPicker },
4213
+ React__default['default'].createElement("button", { "aria-label": 'Open Emoji Picker', className: 'str-chat__input-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker },
4123
4214
  React__default['default'].createElement(EmojiIcon, null)),
4124
4215
  isUploadEnabled && (React__default['default'].createElement("div", { className: 'str-chat__fileupload-wrapper', "data-testid": 'fileinput' },
4125
4216
  React__default['default'].createElement(Tooltip, null, maxFilesLeft
@@ -4202,6 +4293,7 @@ var useImageUploads = function (props, state, dispatch) {
4202
4293
  var doImageUploadRequest = props.doImageUploadRequest, errorHandler = props.errorHandler;
4203
4294
  var imageUploads = state.imageUploads;
4204
4295
  var channel = useChannelStateContext('useImageUploads').channel;
4296
+ var getAppSettings = useChatContext('useImageUploads').getAppSettings;
4205
4297
  var addNotification = useChannelActionContext('useImageUploads').addNotification;
4206
4298
  var t = useTranslationContext('useImageUploads').t;
4207
4299
  var removeImage = React.useCallback(function (id) {
@@ -4209,7 +4301,7 @@ var useImageUploads = function (props, state, dispatch) {
4209
4301
  // TODO: cancel upload if still uploading
4210
4302
  }, []);
4211
4303
  var uploadImage = React.useCallback(function (id) { return __awaiter(void 0, void 0, void 0, function () {
4212
- var img, file, response, error_1, errorMessage, alreadyRemoved;
4304
+ var img, file, canUpload, response, error_1, errorMessage, alreadyRemoved;
4213
4305
  return __generator(this, function (_a) {
4214
4306
  switch (_a.label) {
4215
4307
  case 0:
@@ -4220,22 +4312,35 @@ var useImageUploads = function (props, state, dispatch) {
4220
4312
  if (img.state !== 'uploading') {
4221
4313
  dispatch({ id: id, state: 'uploading', type: 'setImageUpload' });
4222
4314
  }
4223
- _a.label = 1;
4315
+ return [4 /*yield*/, checkUploadPermissions({
4316
+ addNotification: addNotification,
4317
+ file: file,
4318
+ getAppSettings: getAppSettings,
4319
+ t: t,
4320
+ uploadType: 'image',
4321
+ })];
4224
4322
  case 1:
4225
- _a.trys.push([1, 6, , 7]);
4226
- if (!doImageUploadRequest) return [3 /*break*/, 3];
4227
- return [4 /*yield*/, doImageUploadRequest(file, channel)];
4323
+ canUpload = _a.sent();
4324
+ if (!canUpload)
4325
+ return [2 /*return*/, removeImage(id)];
4326
+ _a.label = 2;
4228
4327
  case 2:
4328
+ _a.trys.push([2, 7, , 8]);
4329
+ if (!doImageUploadRequest) return [3 /*break*/, 4];
4330
+ return [4 /*yield*/, doImageUploadRequest(file, channel)];
4331
+ case 3:
4229
4332
  response = _a.sent();
4230
- return [3 /*break*/, 5];
4231
- case 3: return [4 /*yield*/, channel.sendImage(file)];
4232
- case 4:
4333
+ return [3 /*break*/, 6];
4334
+ case 4: return [4 /*yield*/, channel.sendImage(file)];
4335
+ case 5:
4233
4336
  response = _a.sent();
4234
- _a.label = 5;
4235
- case 5: return [3 /*break*/, 7];
4236
- case 6:
4337
+ _a.label = 6;
4338
+ case 6: return [3 /*break*/, 8];
4339
+ case 7:
4237
4340
  error_1 = _a.sent();
4238
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading image');
4341
+ errorMessage = typeof error_1.message === 'string'
4342
+ ? error_1.message
4343
+ : t('Error uploading image');
4239
4344
  addNotification(errorMessage, 'error');
4240
4345
  alreadyRemoved = false;
4241
4346
  if (!imageUploads[id]) {
@@ -4249,7 +4354,7 @@ var useImageUploads = function (props, state, dispatch) {
4249
4354
  errorHandler(error_1, 'upload-image', __assign(__assign({}, file), { id: id }));
4250
4355
  }
4251
4356
  return [2 /*return*/];
4252
- case 7:
4357
+ case 8:
4253
4358
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4254
4359
  // This is for the case if someone wants to handle failure on app level.
4255
4360
  if (!response) {
@@ -4306,6 +4411,7 @@ var useFileUploads = function (props, state, dispatch) {
4306
4411
  var fileUploads = state.fileUploads;
4307
4412
  var channel = useChannelStateContext('useFileUploads').channel;
4308
4413
  var addNotification = useChannelActionContext('useFileUploads').addNotification;
4414
+ var getAppSettings = useChatContext('useFileUploads').getAppSettings;
4309
4415
  var t = useTranslationContext('useFileUploads').t;
4310
4416
  var uploadFile = React.useCallback(function (id) {
4311
4417
  dispatch({ id: id, state: 'uploading', type: 'setFileUpload' });
@@ -4316,7 +4422,7 @@ var useFileUploads = function (props, state, dispatch) {
4316
4422
  }, []);
4317
4423
  React.useEffect(function () {
4318
4424
  (function () { return __awaiter(void 0, void 0, void 0, function () {
4319
- var upload, file, id, response, error_1, errorMessage, alreadyRemoved;
4425
+ var upload, file, id, canUpload, response, error_1, errorMessage, alreadyRemoved;
4320
4426
  return __generator(this, function (_a) {
4321
4427
  switch (_a.label) {
4322
4428
  case 0:
@@ -4324,22 +4430,35 @@ var useFileUploads = function (props, state, dispatch) {
4324
4430
  if (!upload)
4325
4431
  return [2 /*return*/];
4326
4432
  file = upload.file, id = upload.id;
4327
- _a.label = 1;
4433
+ return [4 /*yield*/, checkUploadPermissions({
4434
+ addNotification: addNotification,
4435
+ file: file,
4436
+ getAppSettings: getAppSettings,
4437
+ t: t,
4438
+ uploadType: 'file',
4439
+ })];
4328
4440
  case 1:
4329
- _a.trys.push([1, 6, , 7]);
4330
- if (!doFileUploadRequest) return [3 /*break*/, 3];
4331
- return [4 /*yield*/, doFileUploadRequest(file, channel)];
4441
+ canUpload = _a.sent();
4442
+ if (!canUpload)
4443
+ return [2 /*return*/, removeFile(id)];
4444
+ _a.label = 2;
4332
4445
  case 2:
4446
+ _a.trys.push([2, 7, , 8]);
4447
+ if (!doFileUploadRequest) return [3 /*break*/, 4];
4448
+ return [4 /*yield*/, doFileUploadRequest(file, channel)];
4449
+ case 3:
4333
4450
  response = _a.sent();
4334
- return [3 /*break*/, 5];
4335
- case 3: return [4 /*yield*/, channel.sendFile(file)];
4336
- case 4:
4451
+ return [3 /*break*/, 6];
4452
+ case 4: return [4 /*yield*/, channel.sendFile(file)];
4453
+ case 5:
4337
4454
  response = _a.sent();
4338
- _a.label = 5;
4339
- case 5: return [3 /*break*/, 7];
4340
- case 6:
4455
+ _a.label = 6;
4456
+ case 6: return [3 /*break*/, 8];
4457
+ case 7:
4341
4458
  error_1 = _a.sent();
4342
- errorMessage = typeof error_1.message === 'string' ? error_1.message : t('Error uploading file');
4459
+ errorMessage = typeof error_1.message === 'string'
4460
+ ? error_1.message
4461
+ : t('Error uploading file');
4343
4462
  addNotification(errorMessage, 'error');
4344
4463
  alreadyRemoved = false;
4345
4464
  if (!fileUploads[id]) {
@@ -4353,7 +4472,7 @@ var useFileUploads = function (props, state, dispatch) {
4353
4472
  errorHandler(error_1, 'upload-file', file);
4354
4473
  }
4355
4474
  return [2 /*return*/];
4356
- case 7:
4475
+ case 8:
4357
4476
  // If doImageUploadRequest returns any falsy value, then don't create the upload preview.
4358
4477
  // This is for the case if someone wants to handle failure on app level.
4359
4478
  if (!response) {
@@ -4378,7 +4497,7 @@ var useFileUploads = function (props, state, dispatch) {
4378
4497
  };
4379
4498
 
4380
4499
  var apiMaxNumberOfFiles = 10;
4381
- var useAttachments = function (props, state, dispatch) {
4500
+ var useAttachments = function (props, state, dispatch, textareaRef) {
4382
4501
  var noFiles = props.noFiles;
4383
4502
  var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
4384
4503
  var _a = useChannelStateContext('useAttachments'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
@@ -4399,6 +4518,7 @@ var useAttachments = function (props, state, dispatch) {
4399
4518
  var numberOfUploads = numberOfImages + numberOfFiles;
4400
4519
  var maxFilesLeft = maxFilesAllowed - numberOfUploads;
4401
4520
  var uploadNewFiles = React.useCallback(function (files) {
4521
+ var _a;
4402
4522
  Array.from(files)
4403
4523
  .slice(0, maxFilesLeft)
4404
4524
  .forEach(function (file) {
@@ -4412,6 +4532,7 @@ var useAttachments = function (props, state, dispatch) {
4412
4532
  dispatch({ file: file, id: id, state: 'uploading', type: 'setFileUpload' });
4413
4533
  }
4414
4534
  });
4535
+ (_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
4415
4536
  }, [maxFilesLeft, noFiles]);
4416
4537
  return {
4417
4538
  maxFilesLeft: maxFilesLeft,
@@ -4494,9 +4615,10 @@ var useMessageInputText = function (props, state, dispatch) {
4494
4615
  };
4495
4616
  };
4496
4617
 
4497
- var useEmojiPicker = function (state, dispatch, insertText) {
4618
+ var useEmojiPicker = function (state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick) {
4498
4619
  var emojiPickerRef = React.useRef(null);
4499
4620
  var closeEmojiPicker = React.useCallback(function (event) {
4621
+ event.preventDefault();
4500
4622
  if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
4501
4623
  dispatch({
4502
4624
  type: 'setEmojiPickerIsOpen',
@@ -4505,6 +4627,7 @@ var useEmojiPicker = function (state, dispatch, insertText) {
4505
4627
  }
4506
4628
  }, [emojiPickerRef]);
4507
4629
  var openEmojiPicker = React.useCallback(function (event) {
4630
+ event.preventDefault();
4508
4631
  dispatch({
4509
4632
  type: 'setEmojiPickerIsOpen',
4510
4633
  value: true,
@@ -4540,9 +4663,17 @@ var useEmojiPicker = function (state, dispatch, insertText) {
4540
4663
  document.removeEventListener('keydown', handleEmojiEscape);
4541
4664
  };
4542
4665
  }, [closeEmojiPicker, state.emojiPickerIsOpen]);
4543
- var onSelectEmoji = React.useCallback(function (emoji) { return insertText(emoji.native); }, [
4544
- insertText,
4545
- ]);
4666
+ var onSelectEmoji = React.useCallback(function (emoji) {
4667
+ var _a;
4668
+ insertText(emoji.native);
4669
+ if (closeEmojiPickerOnClick) {
4670
+ dispatch({
4671
+ type: 'setEmojiPickerIsOpen',
4672
+ value: false,
4673
+ });
4674
+ }
4675
+ (_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
4676
+ }, [insertText]);
4546
4677
  return {
4547
4678
  closeEmojiPicker: closeEmojiPicker,
4548
4679
  emojiPickerRef: emojiPickerRef,
@@ -4757,7 +4888,7 @@ var initState = function (message) {
4757
4888
  var id = generateRandomId();
4758
4889
  acc[id] = {
4759
4890
  file: {
4760
- name: attachment.fallback,
4891
+ name: attachment.fallback || '',
4761
4892
  },
4762
4893
  id: id,
4763
4894
  state: 'finished',
@@ -4864,11 +4995,12 @@ var messageInputReducer = function (state, action) {
4864
4995
  * hook for MessageInput state
4865
4996
  */
4866
4997
  var useMessageInputState = function (props) {
4867
- var message = props.message;
4998
+ var closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, message = props.message;
4868
4999
  var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
4869
5000
  var _c = React.useReducer(messageInputReducer, message, initState), state = _c[0], dispatch = _c[1];
4870
5001
  var _d = useMessageInputText(props, state, dispatch), handleChange = _d.handleChange, insertText = _d.insertText, textareaRef = _d.textareaRef;
4871
5002
  var _e = React.useState(false), showCommandsList = _e[0], setShowCommandsList = _e[1];
5003
+ var _f = React.useState(false), showMentionsList = _f[0], setShowMentionsList = _f[1];
4872
5004
  var openCommandsList = function () {
4873
5005
  dispatch({
4874
5006
  getNewText: function () { return '/'; },
@@ -4877,8 +5009,16 @@ var useMessageInputState = function (props) {
4877
5009
  setShowCommandsList(true);
4878
5010
  };
4879
5011
  var closeCommandsList = function () { return setShowCommandsList(false); };
4880
- var _f = useEmojiPicker(state, dispatch, insertText), closeEmojiPicker = _f.closeEmojiPicker, emojiPickerRef = _f.emojiPickerRef, handleEmojiKeyDown = _f.handleEmojiKeyDown, onSelectEmoji = _f.onSelectEmoji, openEmojiPicker = _f.openEmojiPicker;
4881
- 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;
5012
+ var openMentionsList = function () {
5013
+ dispatch({
5014
+ getNewText: function (currentText) { return currentText + '@'; },
5015
+ type: 'setText',
5016
+ });
5017
+ setShowMentionsList(true);
5018
+ };
5019
+ var closeMentionsList = function () { return setShowMentionsList(false); };
5020
+ var _g = useEmojiPicker(state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick), closeEmojiPicker = _g.closeEmojiPicker, emojiPickerRef = _g.emojiPickerRef, handleEmojiKeyDown = _g.handleEmojiKeyDown, onSelectEmoji = _g.onSelectEmoji, openEmojiPicker = _g.openEmojiPicker;
5021
+ 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;
4882
5022
  var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads).handleSubmit;
4883
5023
  var onPaste = usePasteHandler(uploadNewFiles, insertText).onPaste;
4884
5024
  var isUploadEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.uploads) !== false && channelCapabilities['upload-file'] !== false;
@@ -4893,7 +5033,7 @@ var useMessageInputState = function (props) {
4893
5033
  * TODO: fix the below at some point because this type casting is wrong
4894
5034
  * and just forced to not have warnings currently with the unknown casting
4895
5035
  */
4896
- 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 });
5036
+ 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 });
4897
5037
  };
4898
5038
 
4899
5039
  var QuotedMessagePreviewHeader = function () {
@@ -4901,15 +5041,16 @@ var QuotedMessagePreviewHeader = function () {
4901
5041
  var t = useTranslationContext('QuotedMessagePreview').t;
4902
5042
  return (React__default['default'].createElement("div", { className: 'quoted-message-preview-header' },
4903
5043
  React__default['default'].createElement("div", null, t('Reply to Message')),
4904
- React__default['default'].createElement("button", { className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
5044
+ React__default['default'].createElement("button", { "aria-label": 'Cancel Reply', className: 'str-chat__square-button', onClick: function () { return setQuotedMessage(undefined); } },
4905
5045
  React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
4906
5046
  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' })))));
4907
5047
  };
4908
5048
  var QuotedMessagePreview = function (props) {
4909
5049
  var _a;
4910
5050
  var quotedMessage = props.quotedMessage;
4911
- var Attachment = useComponentContext('QuotedMessagePreview').Attachment;
5051
+ var _b = useComponentContext('QuotedMessagePreview'), Attachment = _b.Attachment, ContextAvatar = _b.Avatar;
4912
5052
  var userLanguage = useTranslationContext('QuotedMessagePreview').userLanguage;
5053
+ var Avatar$1 = ContextAvatar || Avatar;
4913
5054
  var quotedMessageText = ((_a = quotedMessage.i18n) === null || _a === void 0 ? void 0 : _a[userLanguage + "_text"]) ||
4914
5055
  quotedMessage.text;
4915
5056
  // @ts-expect-error
@@ -4922,7 +5063,7 @@ var QuotedMessagePreview = function (props) {
4922
5063
  return (React__default['default'].createElement("div", { className: 'quoted-message-preview' },
4923
5064
  React__default['default'].createElement(QuotedMessagePreviewHeader, null),
4924
5065
  React__default['default'].createElement("div", { className: 'quoted-message-preview-content' },
4925
- quotedMessage.user && (React__default['default'].createElement(Avatar, { image: quotedMessage.user.image, name: quotedMessage.user.name || quotedMessage.user.id, size: 20, user: quotedMessage.user })),
5066
+ quotedMessage.user && (React__default['default'].createElement(Avatar$1, { image: quotedMessage.user.image, name: quotedMessage.user.name || quotedMessage.user.id, size: 20, user: quotedMessage.user })),
4926
5067
  React__default['default'].createElement("div", { className: 'quoted-message-preview-content-inner' },
4927
5068
  quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
4928
5069
  React__default['default'].createElement("div", null, quotedMessageText)))));
@@ -4931,17 +5072,17 @@ var QuotedMessagePreview = function (props) {
4931
5072
  var MessageInputFlat = function () {
4932
5073
  var _a = useChannelStateContext('MessageInputFlat'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
4933
5074
  var t = useTranslationContext('MessageInputFlat').t;
4934
- 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;
5075
+ var _b = useMessageInputContext('MessageInputFlat'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
4935
5076
  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;
4936
- 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) },
5077
+ return (React__default['default'].createElement("div", { className: "str-chat__input-flat " + (SendButton$1 ? 'str-chat__input-flat--send-button-active' : null) + " " + (quotedMessage && !quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : null) },
4937
5078
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
4938
- quotedMessage && React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage }),
5079
+ quotedMessage && !quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
4939
5080
  React__default['default'].createElement("div", { className: 'str-chat__input-flat-wrapper' },
4940
5081
  React__default['default'].createElement("div", { className: 'str-chat__input-flat--textarea-wrapper' },
4941
5082
  isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
4942
5083
  React__default['default'].createElement("div", { className: 'str-chat__emojiselect-wrapper' },
4943
5084
  React__default['default'].createElement(Tooltip, null, emojiPickerIsOpen ? t('Close emoji picker') : t('Open emoji picker')),
4944
- React__default['default'].createElement("span", { className: 'str-chat__input-flat-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker, onKeyDown: handleEmojiKeyDown, role: 'button', tabIndex: 0 }, cooldownRemaining ? (React__default['default'].createElement("div", { className: 'str-chat__input-flat-cooldown' },
5085
+ React__default['default'].createElement("button", { "aria-label": 'Emoji picker', className: 'str-chat__input-flat-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker }, cooldownRemaining ? (React__default['default'].createElement("div", { className: 'str-chat__input-flat-cooldown' },
4945
5086
  React__default['default'].createElement(CooldownTimer$1, { cooldownInterval: cooldownInterval, setCooldownRemaining: setCooldownRemaining }))) : (React__default['default'].createElement(EmojiIcon, null)))),
4946
5087
  React__default['default'].createElement(EmojiPicker, null),
4947
5088
  React__default['default'].createElement(ChatAutoComplete, null),
@@ -4956,7 +5097,7 @@ var MessageInputFlat = function () {
4956
5097
  };
4957
5098
 
4958
5099
  var useCreateMessageInputContext = function (value) {
4959
- 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;
5100
+ 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;
4960
5101
  var editing = message === null || message === void 0 ? void 0 : message.editing;
4961
5102
  var fileUploadsValue = Object.entries(fileUploads)
4962
5103
  // eslint-disable-next-line
@@ -4981,6 +5122,7 @@ var useCreateMessageInputContext = function (value) {
4981
5122
  clearEditingState: clearEditingState,
4982
5123
  closeCommandsList: closeCommandsList,
4983
5124
  closeEmojiPicker: closeEmojiPicker,
5125
+ closeMentionsList: closeMentionsList,
4984
5126
  cooldownInterval: cooldownInterval,
4985
5127
  cooldownRemaining: cooldownRemaining,
4986
5128
  disabled: disabled,
@@ -5016,6 +5158,7 @@ var useCreateMessageInputContext = function (value) {
5016
5158
  onSelectUser: onSelectUser,
5017
5159
  openCommandsList: openCommandsList,
5018
5160
  openEmojiPicker: openEmojiPicker,
5161
+ openMentionsList: openMentionsList,
5019
5162
  overrideSubmitHandler: overrideSubmitHandler,
5020
5163
  parent: parent,
5021
5164
  publishTypingEvent: publishTypingEvent,
@@ -5024,6 +5167,7 @@ var useCreateMessageInputContext = function (value) {
5024
5167
  setCooldownRemaining: setCooldownRemaining,
5025
5168
  setText: setText,
5026
5169
  showCommandsList: showCommandsList,
5170
+ showMentionsList: showMentionsList,
5027
5171
  text: text,
5028
5172
  textareaRef: textareaRef,
5029
5173
  uploadFile: uploadFile,
@@ -5041,19 +5185,30 @@ var useCreateMessageInputContext = function (value) {
5041
5185
  mentionedUsersLength,
5042
5186
  parentId,
5043
5187
  publishTypingEvent,
5188
+ showCommandsList,
5189
+ showMentionsList,
5044
5190
  text,
5045
5191
  ]);
5046
5192
  return messageInputContext;
5047
5193
  };
5048
5194
 
5195
+ var MessageInputProvider = function (props) {
5196
+ var cooldownTimerState = useCooldownTimer();
5197
+ var messageInputState = useMessageInputState(props);
5198
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5199
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue }, props.children));
5200
+ };
5049
5201
  var UnMemoizedMessageInput = function (props) {
5050
5202
  var PropInput = props.Input;
5203
+ var dragAndDropWindow = useChannelStateContext().dragAndDropWindow;
5051
5204
  var _a = useComponentContext('MessageInput'), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
5052
5205
  var Input = PropInput || ContextInput || MessageInputFlat;
5053
- var messageInputState = useMessageInputState(props);
5054
- var cooldownTimerState = useCooldownTimer();
5055
- var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5056
- return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5206
+ var NullProvider = function (_a) {
5207
+ var children = _a.children;
5208
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
5209
+ };
5210
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? NullProvider : MessageInputProvider); }, [dragAndDropWindow]);
5211
+ return (React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, props),
5057
5212
  React__default['default'].createElement(TriggerProvider, null,
5058
5213
  React__default['default'].createElement(Input, null))));
5059
5214
  };
@@ -5063,13 +5218,14 @@ var UnMemoizedMessageInput = function (props) {
5063
5218
  var MessageInput = React__default['default'].memo(UnMemoizedMessageInput);
5064
5219
 
5065
5220
  var MessageInputSmall = function () {
5066
- var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads;
5221
+ var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
5067
5222
  var t = useTranslationContext('MessageInputSmall').t;
5068
- 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;
5069
- 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;
5223
+ var _b = useMessageInputContext('MessageInputSmall'), closeEmojiPicker = _b.closeEmojiPicker, cooldownInterval = _b.cooldownInterval, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
5224
+ 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, _h = _c.QuotedMessagePreview, QuotedMessagePreview$1 = _h === void 0 ? QuotedMessagePreview : _h;
5070
5225
  return (React__default['default'].createElement("div", { className: 'str-chat__small-message-input__wrapper' },
5071
5226
  React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
5072
- React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) },
5227
+ React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : null) + " " + (quotedMessage && quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : null) },
5228
+ quotedMessage && quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
5073
5229
  React__default['default'].createElement("div", { className: 'str-chat__small-message-input--textarea-wrapper' },
5074
5230
  isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
5075
5231
  React__default['default'].createElement(ChatAutoComplete, null),
@@ -5084,7 +5240,7 @@ var MessageInputSmall = function () {
5084
5240
  React__default['default'].createElement(FileUploadIcon, null))))),
5085
5241
  React__default['default'].createElement("div", { className: 'str-chat__emojiselect-wrapper' },
5086
5242
  React__default['default'].createElement(Tooltip, null, emojiPickerIsOpen ? t('Close emoji picker') : t('Open emoji picker')),
5087
- React__default['default'].createElement("span", { className: 'str-chat__small-message-input-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker, onKeyDown: handleEmojiKeyDown, role: 'button', tabIndex: 0 },
5243
+ React__default['default'].createElement("button", { "aria-label": 'Emoji picker', className: 'str-chat__small-message-input-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker },
5088
5244
  React__default['default'].createElement(EmojiIcon, null))))),
5089
5245
  React__default['default'].createElement(EmojiPicker, { small: true })),
5090
5246
  !cooldownRemaining && React__default['default'].createElement(SendButton$1, { sendMessage: handleSubmit })))));
@@ -5111,38 +5267,6 @@ var MML = function (props) {
5111
5267
  React__default['default'].createElement(MMLReact, { className: "mml-align-" + align, Loading: null, onSubmit: actionHandler, source: source, Success: null, theme: (theme || '').replace(' ', '-') })));
5112
5268
  };
5113
5269
 
5114
- var Modal = function (props) {
5115
- var children = props.children, onClose = props.onClose, open = props.open;
5116
- var t = useTranslationContext('Modal').t;
5117
- var innerRef = React.useRef(null);
5118
- var handleClick = function (event) {
5119
- var _a;
5120
- if (event.target instanceof HTMLDivElement &&
5121
- !((_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
5122
- onClose) {
5123
- onClose();
5124
- }
5125
- };
5126
- React.useEffect(function () {
5127
- if (!open)
5128
- return function () { return null; };
5129
- var handleEscKey = function (event) {
5130
- if (event instanceof KeyboardEvent && event.key === 'Escape' && onClose) {
5131
- onClose();
5132
- }
5133
- };
5134
- document.addEventListener('keypress', handleEscKey);
5135
- return function () { return document.removeEventListener('keypress', handleEscKey); };
5136
- }, [onClose, open]);
5137
- var openClasses = open ? 'str-chat__modal--open' : 'str-chat__modal--closed';
5138
- return (React__default['default'].createElement("div", { className: "str-chat__modal " + openClasses, onClick: handleClick },
5139
- React__default['default'].createElement("div", { className: 'str-chat__modal__close-button' },
5140
- t('Close'),
5141
- React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
5142
- 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' }))),
5143
- React__default['default'].createElement("div", { className: 'str-chat__modal__inner', ref: innerRef }, children)));
5144
- };
5145
-
5146
5270
  var isMutableRef = function (ref) {
5147
5271
  if (ref) {
5148
5272
  return ref.current !== undefined;
@@ -5220,12 +5344,13 @@ var UnMemoizedReactionSelector = React__default['default'].forwardRef(function (
5220
5344
  React__default['default'].createElement("ul", { className: 'str-chat__message-reactions-list' }, reactionOptions.map(function (reactionOption) {
5221
5345
  var latestUser = getLatestUserForReactionType(reactionOption.id);
5222
5346
  var count = reactionCounts && reactionCounts[reactionOption.id];
5223
- return (React__default['default'].createElement("li", { className: 'str-chat__message-reactions-list-item', "data-text": reactionOption.id, key: "item-" + reactionOption.id, onClick: function (event) { return handleReaction(reactionOption.id, event); } },
5224
- !!count && detailedView && (React__default['default'].createElement(React__default['default'].Fragment, null,
5225
- React__default['default'].createElement("div", { className: 'latest-user', onClick: hideTooltip, onMouseEnter: function (e) { return showTooltip(e, reactionOption.id); }, onMouseLeave: hideTooltip }, latestUser ? (React__default['default'].createElement(Avatar$1, { image: latestUser.image, name: latestUser.name, size: 20, user: latestUser })) : (React__default['default'].createElement("div", { className: 'latest-user-not-found' }))))),
5226
- React__default['default'].createElement(React.Suspense, { fallback: null },
5227
- React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: reactionOption, size: 20 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
5228
- Boolean(count) && detailedView && (React__default['default'].createElement("span", { className: 'str-chat__message-reactions-list-item__count' }, count || ''))));
5347
+ return (React__default['default'].createElement("li", { key: "item-" + reactionOption.id },
5348
+ React__default['default'].createElement("button", { "aria-label": "Select Reaction: " + reactionOption.name, className: 'str-chat__message-reactions-list-item', "data-text": reactionOption.id, onClick: function (event) { return handleReaction(reactionOption.id, event); } },
5349
+ !!count && detailedView && (React__default['default'].createElement(React__default['default'].Fragment, null,
5350
+ React__default['default'].createElement("div", { className: 'latest-user', onClick: hideTooltip, onMouseEnter: function (e) { return showTooltip(e, reactionOption.id); }, onMouseLeave: hideTooltip }, latestUser ? (React__default['default'].createElement(Avatar$1, { image: latestUser.image, name: latestUser.name, size: 20, user: latestUser })) : (React__default['default'].createElement("div", { className: 'latest-user-not-found' }))))),
5351
+ React__default['default'].createElement(React.Suspense, { fallback: null },
5352
+ React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: reactionOption, size: 20 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
5353
+ Boolean(count) && detailedView && (React__default['default'].createElement("span", { className: 'str-chat__message-reactions-list-item__count' }, count || '')))));
5229
5354
  }))));
5230
5355
  });
5231
5356
  /**
@@ -5275,14 +5400,15 @@ var UnMemoizedReactionsList = function (props) {
5275
5400
  var supportedReactionsArePresent = messageReactionTypes.some(function (type) { return supportedReactionMap[type]; });
5276
5401
  if (!supportedReactionsArePresent)
5277
5402
  return null;
5278
- return (React__default['default'].createElement("div", { className: "str-chat__reaction-list " + (reverse ? 'str-chat__reaction-list--reverse' : ''), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick },
5403
+ return (React__default['default'].createElement("div", { "aria-label": 'Reaction list', className: "str-chat__reaction-list " + (reverse ? 'str-chat__reaction-list--reverse' : ''), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick, onKeyPress: onClick || onReactionListClick, role: 'figure' },
5279
5404
  React__default['default'].createElement("ul", null,
5280
5405
  messageReactionTypes.map(function (reactionType) {
5281
5406
  var emojiObject = getEmojiByReactionType(reactionType);
5282
5407
  return emojiObject ? (React__default['default'].createElement("li", { key: emojiObject.id },
5283
- React__default['default'].createElement(React.Suspense, { fallback: null },
5284
- React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 16 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
5285
- "\u00A0")) : null;
5408
+ React__default['default'].createElement("button", { "aria-label": "Reactions: " + reactionType },
5409
+ React__default['default'].createElement(React.Suspense, { fallback: null },
5410
+ React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 16 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
5411
+ "\u00A0"))) : null;
5286
5412
  }),
5287
5413
  React__default['default'].createElement("li", null,
5288
5414
  React__default['default'].createElement("span", { className: 'str-chat__reaction-list--counter' }, getTotalReactionCount())))));
@@ -5351,7 +5477,7 @@ var UnMemoizedSimpleReactionsList = function (props) {
5351
5477
  messageReactionTypes.map(function (reactionType, i) {
5352
5478
  var _a;
5353
5479
  var emojiObject = getEmojiByReactionType(reactionType);
5354
- return emojiObject ? (React__default['default'].createElement("li", { className: 'str-chat__simple-reactions-list-item', key: emojiObject.id + "-" + i, onClick: function (event) { return handleReaction(reactionType, event); } },
5480
+ return emojiObject ? (React__default['default'].createElement("li", { className: 'str-chat__simple-reactions-list-item', key: emojiObject.id + "-" + i, onClick: function (event) { return handleReaction(reactionType, event); }, onKeyPress: function (event) { return handleReaction(reactionType, event); } },
5355
5481
  React__default['default'].createElement("span", { onMouseEnter: function () { return setTooltipReactionType(reactionType); } },
5356
5482
  React__default['default'].createElement(React.Suspense, { fallback: null },
5357
5483
  React__default['default'].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 13 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef)))),
@@ -5387,6 +5513,8 @@ var MessageSimpleWithContext = function (props) {
5387
5513
  React__default['default'].createElement(MessageStatus$1, null),
5388
5514
  message.user && (React__default['default'].createElement(Avatar$1, { image: message.user.image, name: message.user.name || message.user.id, onClick: onUserClick, onMouseOver: onUserHover, user: message.user })),
5389
5515
  React__default['default'].createElement("div", { className: 'str-chat__message-inner', "data-testid": 'message-inner', onClick: message.status === 'failed' && message.errorStatusCode !== 403
5516
+ ? function () { return handleRetry(message); }
5517
+ : undefined, onKeyPress: message.status === 'failed' && message.errorStatusCode !== 403
5390
5518
  ? function () { return handleRetry(message); }
5391
5519
  : undefined },
5392
5520
  React__default['default'].createElement(React__default['default'].Fragment, null,
@@ -5411,6 +5539,20 @@ var MessageSimple = function (props) {
5411
5539
  return React__default['default'].createElement(MemoizedMessageSimple, __assign({}, messageContext, props));
5412
5540
  };
5413
5541
 
5542
+ var DropzoneInner = function (_a) {
5543
+ var children = _a.children;
5544
+ var _b = useChannelStateContext('DropzoneProvider'), acceptedFiles = _b.acceptedFiles, multipleUploads = _b.multipleUploads;
5545
+ var _c = useMessageInputContext('DropzoneProvider'), cooldownRemaining = _c.cooldownRemaining, isUploadEnabled = _c.isUploadEnabled, maxFilesLeft = _c.maxFilesLeft, uploadNewFiles = _c.uploadNewFiles;
5546
+ return (React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads }, children));
5547
+ };
5548
+ var DropzoneProvider = function (props) {
5549
+ var cooldownTimerState = useCooldownTimer();
5550
+ var messageInputState = useMessageInputState(props);
5551
+ var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
5552
+ return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
5553
+ React__default['default'].createElement(DropzoneInner, null, props.children)));
5554
+ };
5555
+
5414
5556
  var TypingContext = React__default['default'].createContext(undefined);
5415
5557
  var TypingProvider = function (_a) {
5416
5558
  var children = _a.children, value = _a.value;
@@ -5452,14 +5594,14 @@ var UnMemoizedChannel = function (props) {
5452
5594
  };
5453
5595
  var ChannelInner = function (props) {
5454
5596
  var _a;
5455
- var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.emojiData, emojiData = _b === void 0 ? defaultEmojiData : _b, _c = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _c === void 0 ? LoadingErrorIndicator : _c, _d = props.LoadingIndicator, LoadingIndicator$1 = _d === void 0 ? LoadingIndicator : _d, maxNumberOfFiles = props.maxNumberOfFiles, _e = props.multipleUploads, multipleUploads = _e === void 0 ? true : _e, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, skipMessageDataMemoization = props.skipMessageDataMemoization;
5456
- var _f = useChatContext('Channel'), client = _f.client, customClasses = _f.customClasses, mutes = _f.mutes, theme = _f.theme, useImageFlagEmojisOnWindows = _f.useImageFlagEmojisOnWindows;
5597
+ 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;
5598
+ var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, mutes = _h.mutes, theme = _h.theme, useImageFlagEmojisOnWindows = _h.useImageFlagEmojisOnWindows;
5457
5599
  var t = useTranslationContext('Channel').t;
5458
- var _g = React.useState(channel.getConfig()), channelConfig = _g[0], setChannelConfig = _g[1];
5459
- var _h = React.useState([]), notifications = _h[0], setNotifications = _h[1];
5460
- var _j = React.useState(), quotedMessage = _j[0], setQuotedMessage = _j[1];
5600
+ var _j = React.useState(channel.getConfig()), channelConfig = _j[0], setChannelConfig = _j[1];
5601
+ var _k = React.useState([]), notifications = _k[0], setNotifications = _k[1];
5602
+ var _l = React.useState(), quotedMessage = _l[0], setQuotedMessage = _l[1];
5461
5603
  var notificationTimeouts = [];
5462
- var _k = React.useReducer(channelReducer, initialState), state = _k[0], dispatch = _k[1];
5604
+ var _m = React.useReducer(channelReducer, initialState), state = _m[0], dispatch = _m[1];
5463
5605
  var isMounted = useIsMounted();
5464
5606
  var originalTitle = React.useRef('');
5465
5607
  var lastRead = React.useRef(new Date());
@@ -5692,7 +5834,7 @@ var ChannelInner = function (props) {
5692
5834
  return id;
5693
5835
  })
5694
5836
  : mentioned_users;
5695
- messageData = __assign({ attachments: attachments, id: id, mentioned_users: mentions, parent_id: parent_id, quoted_message_id: quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.id, text: text }, customMessageData);
5837
+ messageData = __assign({ attachments: attachments, id: id, mentioned_users: mentions, parent_id: parent_id, quoted_message_id: parent_id === (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.parent_id) ? quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.id : undefined, text: text }, customMessageData);
5696
5838
  _b.label = 1;
5697
5839
  case 1:
5698
5840
  _b.trys.push([1, 6, , 7]);
@@ -5711,7 +5853,7 @@ var ChannelInner = function (props) {
5711
5853
  if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
5712
5854
  updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
5713
5855
  }
5714
- if (quotedMessage)
5856
+ if (quotedMessage && parent_id === (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.parent_id))
5715
5857
  setQuotedMessage(undefined);
5716
5858
  return [3 /*break*/, 7];
5717
5859
  case 6:
@@ -5769,6 +5911,14 @@ var ChannelInner = function (props) {
5769
5911
  /** THREAD */
5770
5912
  var openThread = function (message, event) {
5771
5913
  event.preventDefault();
5914
+ setQuotedMessage(function (current) {
5915
+ if ((current === null || current === void 0 ? void 0 : current.parent_id) !== (message === null || message === void 0 ? void 0 : message.parent_id)) {
5916
+ return undefined;
5917
+ }
5918
+ else {
5919
+ return current;
5920
+ }
5921
+ });
5772
5922
  dispatch({ channel: channel, message: message, type: 'openThread' });
5773
5923
  };
5774
5924
  var closeThread = function (event) {
@@ -5823,7 +5973,7 @@ var ChannelInner = function (props) {
5823
5973
  var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
5824
5974
  var editMessage = useEditMessageHandler(doUpdateMessageRequest);
5825
5975
  var typing = state.typing, restState = __rest(state, ["typing"]);
5826
- var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
5976
+ 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 }));
5827
5977
  var channelActionContextValue = React.useMemo(function () { return ({
5828
5978
  addNotification: addNotification,
5829
5979
  closeThread: closeThread,
@@ -5893,6 +6043,11 @@ var ChannelInner = function (props) {
5893
6043
  var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
5894
6044
  ? 'str-chat--windows-flags'
5895
6045
  : '';
6046
+ var NullProvider = function (_a) {
6047
+ var children = _a.children;
6048
+ return React__default['default'].createElement(React__default['default'].Fragment, null, children);
6049
+ };
6050
+ var OptionalMessageInputProvider = React.useMemo(function () { return (dragAndDropWindow ? DropzoneProvider : NullProvider); }, [dragAndDropWindow]);
5896
6051
  if (state.error) {
5897
6052
  return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
5898
6053
  React__default['default'].createElement(LoadingErrorIndicator$1, { error: state.error })));
@@ -5911,7 +6066,8 @@ var ChannelInner = function (props) {
5911
6066
  React__default['default'].createElement(ComponentProvider, { value: componentContextValue },
5912
6067
  React__default['default'].createElement(EmojiProvider, { value: emojiContextValue },
5913
6068
  React__default['default'].createElement(TypingProvider, { value: typingContextValue },
5914
- React__default['default'].createElement("div", { className: "" + chatContainerClass }, children))))))));
6069
+ React__default['default'].createElement("div", { className: "" + chatContainerClass },
6070
+ React__default['default'].createElement(OptionalMessageInputProvider, __assign({}, optionalMessageInputProps), children)))))))));
5915
6071
  };
5916
6072
  /**
5917
6073
  * A wrapper component that provides channel data and renders children.
@@ -5932,7 +6088,7 @@ var UnMemoizedChannelHeader = function (props) {
5932
6088
  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;
5933
6089
  var image = propImage || channelImage;
5934
6090
  return (React__default['default'].createElement("div", { className: 'str-chat__header-livestream' },
5935
- React__default['default'].createElement("div", { className: 'str-chat__header-hamburger', onClick: openMobileNav },
6091
+ React__default['default'].createElement("button", { "aria-label": 'Menu', className: 'str-chat__header-hamburger', onClick: openMobileNav },
5936
6092
  React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' }),
5937
6093
  React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' }),
5938
6094
  React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' })),
@@ -5965,9 +6121,9 @@ var UnMemoizedChatDown = function (props) {
5965
6121
  return (React__default['default'].createElement("div", { className: 'str-chat__down' },
5966
6122
  React__default['default'].createElement(LoadingChannels, null),
5967
6123
  React__default['default'].createElement("div", { className: 'str-chat__down-main' },
5968
- React__default['default'].createElement("img", { "data-testid": 'chatdown-img', src: image || img }),
6124
+ React__default['default'].createElement("img", { alt: 'Connection error', "data-testid": 'chatdown-img', src: image || img }),
5969
6125
  React__default['default'].createElement("h1", null, type),
5970
- React__default['default'].createElement("h3", null, text || t('Error connecting to chat, refresh the page to try again.')))));
6126
+ React__default['default'].createElement("h3", { "aria-live": 'assertive' }, text || t('Error connecting to chat, refresh the page to try again.')))));
5971
6127
  };
5972
6128
  /**
5973
6129
  * A simple indicator that chat functionality isn't available, triggered when the Chat API is unavailable or your network isn't working.
@@ -5986,7 +6142,7 @@ var ChannelListMessenger = function (props) {
5986
6142
  return React__default['default'].createElement(LoadingIndicator, null);
5987
6143
  }
5988
6144
  return (React__default['default'].createElement("div", { className: 'str-chat__channel-list-messenger' },
5989
- React__default['default'].createElement("div", { className: 'str-chat__channel-list-messenger__main' }, children)));
6145
+ React__default['default'].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main', role: 'listbox' }, children)));
5990
6146
  };
5991
6147
 
5992
6148
  var useChannelDeletedListener = function (setChannels, customHandler) {
@@ -6063,10 +6219,11 @@ var useChannelUpdatedListener = function (setChannels, customHandler, forceUpdat
6063
6219
  React.useEffect(function () {
6064
6220
  var handleEvent = function (event) {
6065
6221
  setChannels(function (channels) {
6222
+ var _a, _b, _c, _d, _e, _f;
6066
6223
  var channelIndex = channels.findIndex(function (channel) { var _a; return channel.cid === ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.cid); });
6067
6224
  if (channelIndex > -1 && event.channel) {
6068
6225
  var newChannels = channels;
6069
- newChannels[channelIndex].data = event.channel;
6226
+ newChannels[channelIndex].data = __assign(__assign({}, event.channel), { hidden: (_b = (_a = event.channel) === null || _a === void 0 ? void 0 : _a.hidden) !== null && _b !== void 0 ? _b : (_c = newChannels[channelIndex].data) === null || _c === void 0 ? void 0 : _c.hidden, own_capabilities: (_e = (_d = event.channel) === null || _d === void 0 ? void 0 : _d.own_capabilities) !== null && _e !== void 0 ? _e : (_f = newChannels[channelIndex].data) === null || _f === void 0 ? void 0 : _f.own_capabilities });
6070
6227
  return __spreadArray([], newChannels);
6071
6228
  }
6072
6229
  return channels;
@@ -6289,6 +6446,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
6289
6446
  return __generator(this, function (_b) {
6290
6447
  switch (_b.label) {
6291
6448
  case 0:
6449
+ setError(false);
6292
6450
  if (queryType === 'reload') {
6293
6451
  setChannels([]);
6294
6452
  setLoadingChannels(true);
@@ -6380,7 +6538,7 @@ var UnMemoizedChannelPreviewMessenger = function (props) {
6380
6538
  channelPreviewButton.current.blur();
6381
6539
  }
6382
6540
  };
6383
- return (React__default['default'].createElement("button", { className: "str-chat__channel-preview-messenger " + unreadClass + " " + activeClass, "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton },
6541
+ return (React__default['default'].createElement("button", { "aria-label": "Select Channel: " + (displayTitle || ''), "aria-selected": active, className: "str-chat__channel-preview-messenger " + unreadClass + " " + activeClass, "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton, role: 'option' },
6384
6542
  React__default['default'].createElement("div", { className: 'str-chat__channel-preview-messenger--left' },
6385
6543
  React__default['default'].createElement(Avatar$1, { image: displayImage, name: avatarName, size: 40 })),
6386
6544
  React__default['default'].createElement("div", { className: 'str-chat__channel-preview-messenger--right' },
@@ -6523,20 +6681,20 @@ var isChannel = function (output) {
6523
6681
 
6524
6682
  var DefaultDropdownContainer = function (props) {
6525
6683
  var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
6526
- return (React__default['default'].createElement("div", null, results.map(function (result, index) { return (React__default['default'].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
6684
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, results.map(function (result, index) { return (React__default['default'].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
6527
6685
  };
6528
6686
  var DefaultSearchResultItem = function (props) {
6529
- var _a;
6687
+ var _a, _b;
6530
6688
  var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
6531
6689
  var focused = focusedUser === index;
6532
6690
  if (isChannel(result)) {
6533
6691
  var channel_1 = result;
6534
- return (React__default['default'].createElement("div", { className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(channel_1); } },
6692
+ return (React__default['default'].createElement("button", { "aria-label": "Select Channel: " + (((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(channel_1); } },
6535
6693
  React__default['default'].createElement("div", { className: 'result-hashtag' }, "#"),
6536
- React__default['default'].createElement("p", { className: 'channel-search__result-text' }, (_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name)));
6694
+ React__default['default'].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
6537
6695
  }
6538
6696
  else {
6539
- return (React__default['default'].createElement("div", { className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(result); } },
6697
+ return (React__default['default'].createElement("button", { "aria-label": "Select User Channel: " + (result.name || ''), className: "str-chat__channel-search-result " + (focused ? 'focused' : ''), onClick: function () { return selectResult(result); } },
6540
6698
  React__default['default'].createElement(Avatar, { image: result.image, user: result }),
6541
6699
  result.name || result.id));
6542
6700
  }
@@ -6582,7 +6740,7 @@ var SearchResults = function (props) {
6582
6740
  return (React__default['default'].createElement(ResultsContainer, null, SearchLoading ? (React__default['default'].createElement(SearchLoading, null)) : (React__default['default'].createElement("div", { className: 'str-chat__channel-search-container-searching' }, t('Searching...')))));
6583
6741
  }
6584
6742
  if (!results.length) {
6585
- return (React__default['default'].createElement(ResultsContainer, null, SearchEmpty ? (React__default['default'].createElement(SearchEmpty, null)) : (React__default['default'].createElement("div", { className: 'str-chat__channel-search-container-empty' }, t('No results found')))));
6743
+ return (React__default['default'].createElement(ResultsContainer, null, SearchEmpty ? (React__default['default'].createElement(SearchEmpty, null)) : (React__default['default'].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' }, t('No results found')))));
6586
6744
  }
6587
6745
  return (React__default['default'].createElement(ResultsContainer, null,
6588
6746
  SearchResultsHeader && React__default['default'].createElement(SearchResultsHeader, null),
@@ -6707,7 +6865,7 @@ var UnMemoizedEmptyStateIndicator = function (props) {
6707
6865
  var listType = props.listType;
6708
6866
  var t = useTranslationContext('EmptyStateIndicator').t;
6709
6867
  if (listType === 'channel')
6710
- return React__default['default'].createElement("p", null, t('You have no channels currently'));
6868
+ return React__default['default'].createElement("p", { role: 'listitem' }, t('You have no channels currently'));
6711
6869
  if (listType === 'message')
6712
6870
  return null;
6713
6871
  return React__default['default'].createElement("p", null, "No items exist");
@@ -6717,7 +6875,7 @@ var EmptyStateIndicator = React__default['default'].memo(UnMemoizedEmptyStateInd
6717
6875
  var UnMemoizedLoadMoreButton = function (props) {
6718
6876
  var _a = props.children, children = _a === void 0 ? 'Load more' : _a, onClick = props.onClick, refreshing = props.refreshing;
6719
6877
  return (React__default['default'].createElement("div", { className: 'str-chat__load-more-button' },
6720
- React__default['default'].createElement("button", { className: 'str-chat__load-more-button__button', "data-testid": 'load-more-button', disabled: refreshing, onClick: onClick }, refreshing ? React__default['default'].createElement(reactFileUtils.LoadingIndicator, null) : children)));
6878
+ React__default['default'].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button', "data-testid": 'load-more-button', disabled: refreshing, onClick: onClick }, refreshing ? React__default['default'].createElement(reactFileUtils.LoadingIndicator, null) : children)));
6721
6879
  };
6722
6880
  var LoadMoreButton = React__default['default'].memo(UnMemoizedLoadMoreButton);
6723
6881
 
@@ -6747,7 +6905,7 @@ var UnMemoizedChannelList = function (props) {
6747
6905
  return __generator(this, function (_a) {
6748
6906
  switch (_a.label) {
6749
6907
  case 0:
6750
- if (channels.length === 0 || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6908
+ if (!channels.length || channels.length > ((options === null || options === void 0 ? void 0 : options.limit) || MAX_QUERY_CHANNELS_LIMIT)) {
6751
6909
  return [2 /*return*/];
6752
6910
  }
6753
6911
  if (!customActiveChannel) return [3 /*break*/, 3];
@@ -6798,7 +6956,7 @@ var UnMemoizedChannelList = function (props) {
6798
6956
  useUserPresenceChangedListener(setChannels);
6799
6957
  React.useEffect(function () {
6800
6958
  var handleEvent = function (event) {
6801
- if (setActiveChannel && (event === null || event === void 0 ? void 0 : event.cid) === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6959
+ if (event.cid === (channel === null || channel === void 0 ? void 0 : channel.cid)) {
6802
6960
  setActiveChannel();
6803
6961
  }
6804
6962
  };
@@ -6808,10 +6966,8 @@ var UnMemoizedChannelList = function (props) {
6808
6966
  client.off('channel.deleted', handleEvent);
6809
6967
  client.off('channel.hidden', handleEvent);
6810
6968
  };
6811
- }, [channel]);
6969
+ }, [channel === null || channel === void 0 ? void 0 : channel.cid]);
6812
6970
  var renderChannel = function (item) {
6813
- if (!item)
6814
- return null;
6815
6971
  var previewProps = {
6816
6972
  activeChannel: channel,
6817
6973
  Avatar: Avatar$1,
@@ -6824,7 +6980,6 @@ var UnMemoizedChannelList = function (props) {
6824
6980
  };
6825
6981
  return React__default['default'].createElement(ChannelPreview, __assign({}, previewProps));
6826
6982
  };
6827
- 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))))); };
6828
6983
  var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
6829
6984
  var channelListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) || 'str-chat-channel-list';
6830
6985
  var navigationClass = navOpen ? 'str-chat-channel-list--open' : '';
@@ -6834,36 +6989,36 @@ var UnMemoizedChannelList = function (props) {
6834
6989
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6835
6990
  React__default['default'].createElement("div", { className: chatClass + " " + channelListClass + " " + theme + " " + navigationClass + " " + windowsEmojiClass, ref: channelListRef },
6836
6991
  showChannelSearch && React__default['default'].createElement(ChannelSearch$1, __assign({}, additionalChannelSearchProps)),
6837
- renderList())));
6992
+ 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)))))));
6838
6993
  };
6839
6994
  /**
6840
6995
  * Renders a preview list of Channels, allowing you to select the Channel you want to open
6841
6996
  */
6842
6997
  var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
6843
6998
 
6844
- 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,"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..."};
6999
+ 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..."};
6845
7000
 
6846
- 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..."};
7001
+ 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..."};
6847
7002
 
6848
- 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..."};
7003
+ 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..."};
6849
7004
 
6850
- 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..."};
7005
+ 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..."};
6851
7006
 
6852
- 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...":"🏙 अटैचमेंट"};
7007
+ 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...":"🏙 अटैचमेंट"};
6853
7008
 
6854
- 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..."};
7009
+ 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..."};
6855
7010
 
6856
- 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...":"🏙 アタッチメント..."};
7011
+ 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...":"🏙 アタッチメント..."};
6857
7012
 
6858
- 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...":"🏙 부착..."};
7013
+ 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...":"🏙 부착..."};
6859
7014
 
6860
- 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..."};
7015
+ 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..."};
6861
7016
 
6862
- 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 ..."};
7017
+ 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 ..."};
6863
7018
 
6864
- 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...":"🏙 Вложение..."};
7019
+ 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...":"🏙 Вложение..."};
6865
7020
 
6866
- 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..."};
7021
+ 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..."};
6867
7022
 
6868
7023
  var defaultNS = 'translation';
6869
7024
  var defaultLng = 'en';
@@ -6959,19 +7114,19 @@ Dayjs__default['default'].updateLocale('it', {
6959
7114
  Dayjs__default['default'].updateLocale('ja', {
6960
7115
  calendar: {
6961
7116
  lastDay: '[昨日] LT',
6962
- lastWeek: '[過去] dddd [で] LT',
7117
+ lastWeek: 'dddd LT',
6963
7118
  nextDay: '[明日] LT',
6964
- nextWeek: 'dddd [] LT',
6965
- sameDay: '[今日は] LT',
7119
+ nextWeek: '[次の] dddd LT',
7120
+ sameDay: '[今日] LT',
6966
7121
  sameElse: 'L',
6967
7122
  },
6968
7123
  });
6969
7124
  Dayjs__default['default'].updateLocale('ko', {
6970
7125
  calendar: {
6971
7126
  lastDay: '[어제] LT',
6972
- lastWeek: '[마지막] dddd [~에] LT',
7127
+ lastWeek: '[지난] dddd LT',
6973
7128
  nextDay: '[내일] LT',
6974
- nextWeek: 'dddd [~에] LT',
7129
+ nextWeek: 'dddd LT',
6975
7130
  sameDay: '[오늘] LT',
6976
7131
  sameElse: 'L',
6977
7132
  },
@@ -7464,7 +7619,7 @@ var Streami18n = /** @class */ (function () {
7464
7619
  return Streami18n;
7465
7620
  }());
7466
7621
 
7467
- var version = '6.11.0';
7622
+ var version = '6.13.0';
7468
7623
 
7469
7624
  var useChat = function (_a) {
7470
7625
  var _b;
@@ -7480,13 +7635,19 @@ var useChat = function (_a) {
7480
7635
  var clientMutes = (_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes;
7481
7636
  var closeMobileNav = function () { return setNavOpen(false); };
7482
7637
  var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
7638
+ var appSettings = React.useRef(null);
7639
+ var getAppSettings = function () {
7640
+ if (appSettings.current) {
7641
+ return appSettings.current;
7642
+ }
7643
+ appSettings.current = client.getAppSettings();
7644
+ return appSettings.current;
7645
+ };
7483
7646
  React.useEffect(function () {
7484
7647
  if (client) {
7485
7648
  var userAgent = client.getUserAgent();
7486
7649
  if (!userAgent.includes('stream-chat-react')) {
7487
- /**
7488
- * results in something like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7489
- */
7650
+ // result looks like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
7490
7651
  client.setUserAgent("stream-chat-react-" + version + "-" + userAgent);
7491
7652
  }
7492
7653
  }
@@ -7499,7 +7660,7 @@ var useChat = function (_a) {
7499
7660
  };
7500
7661
  client.on('notification.mutes_updated', handleEvent);
7501
7662
  return function () { return client.off('notification.mutes_updated', handleEvent); };
7502
- }, [client, clientMutes]);
7663
+ }, [clientMutes === null || clientMutes === void 0 ? void 0 : clientMutes.length]);
7503
7664
  React.useEffect(function () {
7504
7665
  var _a;
7505
7666
  var userLanguage = (_a = client.user) === null || _a === void 0 ? void 0 : _a.language;
@@ -7514,7 +7675,7 @@ var useChat = function (_a) {
7514
7675
  streami18n.getTranslators().then(function (translator) {
7515
7676
  setTranslators(__assign(__assign({}, translator), { userLanguage: userLanguage || defaultLanguage }));
7516
7677
  });
7517
- }, [client, i18nInstance]);
7678
+ }, [i18nInstance]);
7518
7679
  var setActiveChannel = React.useCallback(function (activeChannel, watchers, event) {
7519
7680
  if (watchers === void 0) { watchers = {}; }
7520
7681
  return __awaiter(void 0, void 0, void 0, function () {
@@ -7539,6 +7700,7 @@ var useChat = function (_a) {
7539
7700
  return {
7540
7701
  channel: channel,
7541
7702
  closeMobileNav: closeMobileNav,
7703
+ getAppSettings: getAppSettings,
7542
7704
  mutes: mutes,
7543
7705
  navOpen: navOpen,
7544
7706
  openMobileNav: openMobileNav,
@@ -7549,7 +7711,7 @@ var useChat = function (_a) {
7549
7711
 
7550
7712
  var useCreateChatContext = function (value) {
7551
7713
  var _a;
7552
- 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;
7714
+ 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;
7553
7715
  var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
7554
7716
  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);
7555
7717
  var mutedUsersLength = mutes.length;
@@ -7558,13 +7720,14 @@ var useCreateChatContext = function (value) {
7558
7720
  client: client,
7559
7721
  closeMobileNav: closeMobileNav,
7560
7722
  customClasses: customClasses,
7723
+ getAppSettings: getAppSettings,
7561
7724
  mutes: mutes,
7562
7725
  navOpen: navOpen,
7563
7726
  openMobileNav: openMobileNav,
7564
7727
  setActiveChannel: setActiveChannel,
7565
7728
  theme: theme,
7566
7729
  useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
7567
- }); }, [channelCid, clientValues, mutedUsersLength, navOpen]);
7730
+ }); }, [channelCid, clientValues, getAppSettings, mutedUsersLength, navOpen]);
7568
7731
  return chatContext;
7569
7732
  };
7570
7733
 
@@ -7604,13 +7767,14 @@ var useCustomStyles = function (customStyles) {
7604
7767
  */
7605
7768
  var Chat = function (props) {
7606
7769
  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;
7607
- 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;
7770
+ 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;
7608
7771
  useCustomStyles(darkMode ? darkModeTheme : customStyles);
7609
7772
  var chatContextValue = useCreateChatContext({
7610
7773
  channel: channel,
7611
7774
  client: client,
7612
7775
  closeMobileNav: closeMobileNav,
7613
7776
  customClasses: customClasses,
7777
+ getAppSettings: getAppSettings,
7614
7778
  mutes: mutes,
7615
7779
  navOpen: navOpen,
7616
7780
  openMobileNav: openMobileNav,
@@ -8190,7 +8354,7 @@ var UnMemoizedCustomNotification = function (props) {
8190
8354
  var active = props.active, children = props.children, type = props.type;
8191
8355
  if (!active)
8192
8356
  return null;
8193
- return (React__default['default'].createElement("div", { className: "str-chat__custom-notification notification-" + type, "data-testid": 'custom-notification' }, children));
8357
+ return (React__default['default'].createElement("div", { "aria-live": 'polite', className: "str-chat__custom-notification notification-" + type, "data-testid": 'custom-notification' }, children));
8194
8358
  };
8195
8359
  var CustomNotification = React__default['default'].memo(UnMemoizedCustomNotification);
8196
8360
 
@@ -8416,7 +8580,7 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
8416
8580
  };
8417
8581
 
8418
8582
  var useEnrichedMessages = function (args) {
8419
- 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;
8583
+ 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;
8420
8584
  var client = useChatContext('useEnrichedMessages').client;
8421
8585
  var HeaderComponent = useComponentContext('useEnrichedMessages').HeaderComponent;
8422
8586
  var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
@@ -8434,9 +8598,10 @@ var useEnrichedMessages = function (args) {
8434
8598
  if (HeaderComponent) {
8435
8599
  messagesWithDates = insertIntro(messagesWithDates, headerPosition);
8436
8600
  }
8601
+ var groupStylesFn = groupStyles || getGroupStyles;
8437
8602
  var messageGroupStyles = React.useMemo(function () {
8438
8603
  return messagesWithDates.reduce(function (acc, message, i) {
8439
- var style = getGroupStyles(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8604
+ var style = groupStylesFn(message, messagesWithDates[i - 1], messagesWithDates[i + 1], noGroupByUser);
8440
8605
  if (style)
8441
8606
  acc[message.id] = style;
8442
8607
  return acc;
@@ -8486,7 +8651,7 @@ var useMessageListElements = function (props) {
8486
8651
  }
8487
8652
  var groupStyles = messageGroupStyles[message.id] || '';
8488
8653
  var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--" + groupStyles;
8489
- return (React__default['default'].createElement("li", { className: messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8654
+ return (React__default['default'].createElement("li", { className: messageClass, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
8490
8655
  React__default['default'].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
8491
8656
  });
8492
8657
  }, [
@@ -8641,7 +8806,7 @@ var UnMemoizedMessageNotification = function (props) {
8641
8806
  var children = props.children, onClick = props.onClick, _a = props.showNotification, showNotification = _a === void 0 ? true : _a;
8642
8807
  if (!showNotification)
8643
8808
  return null;
8644
- return (React__default['default'].createElement("button", { className: 'str-chat__message-notification', "data-testid": 'message-notification', onClick: onClick }, children));
8809
+ return (React__default['default'].createElement("button", { "aria-live": 'polite', className: 'str-chat__message-notification', "data-testid": 'message-notification', onClick: onClick }, children));
8645
8810
  };
8646
8811
  var MessageNotification = React__default['default'].memo(UnMemoizedMessageNotification);
8647
8812
 
@@ -8658,10 +8823,12 @@ var MessageListNotifications = function (props) {
8658
8823
  * TypingIndicator lists users currently typing, it needs to be a child of Channel component
8659
8824
  */
8660
8825
  var UnMemoizedTypingIndicator = function (props) {
8661
- var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, _b = props.avatarSize, avatarSize = _b === void 0 ? 32 : _b, threadList = props.threadList;
8662
- var _c = useChannelStateContext('TypingIndicator'), channelConfig = _c.channelConfig, thread = _c.thread;
8826
+ var PropAvatar = props.Avatar, _a = props.avatarSize, avatarSize = _a === void 0 ? 32 : _a, threadList = props.threadList;
8827
+ var _b = useChannelStateContext('TypingIndicator'), channelConfig = _b.channelConfig, thread = _b.thread;
8663
8828
  var client = useChatContext('TypingIndicator').client;
8664
- var _d = useTypingContext('TypingIndicator').typing, typing = _d === void 0 ? {} : _d;
8829
+ var ContextAvatar = useComponentContext('TypingIndicator').Avatar;
8830
+ var _c = useTypingContext('TypingIndicator').typing, typing = _c === void 0 ? {} : _c;
8831
+ var Avatar$1 = PropAvatar || ContextAvatar || Avatar;
8665
8832
  if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.typing_events) === false) {
8666
8833
  return null;
8667
8834
  }
@@ -8699,7 +8866,7 @@ var useInternalInfiniteScrollProps = function (props) {
8699
8866
  React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))), loadMore: useCallLoadMore(props.loadMore, props.messageLimit || 100) }, props.internalInfiniteScrollProps);
8700
8867
  };
8701
8868
  var MessageListWithContext = function (props) {
8702
- 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, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
8869
+ 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
8703
8870
  _h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
8704
8871
  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;
8705
8872
  var customClasses = useChatContext('MessageList').customClasses;
@@ -8711,6 +8878,7 @@ var MessageListWithContext = function (props) {
8711
8878
  var _s = useEnrichedMessages({
8712
8879
  channel: channel,
8713
8880
  disableDateSeparator: disableDateSeparator,
8881
+ groupStyles: groupStyles,
8714
8882
  headerPosition: headerPosition,
8715
8883
  hideDeletedMessages: hideDeletedMessages,
8716
8884
  hideNewMessageSeparator: hideNewMessageSeparator,
@@ -8971,12 +9139,8 @@ var VirtualizedMessageListWithContext = function (props) {
8971
9139
  var groupedByUser = shouldGroupByUser &&
8972
9140
  streamMessageIndex > 0 &&
8973
9141
  ((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
8974
- var firstOfGroup = shouldGroupByUser &&
8975
- streamMessageIndex > 0 &&
8976
- ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
8977
- var endOfGroup = shouldGroupByUser &&
8978
- streamMessageIndex > 0 &&
8979
- ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
9142
+ var firstOfGroup = shouldGroupByUser && ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
9143
+ var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
8980
9144
  return (React__default['default'].createElement(Message, { closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: props.customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, message: message, Message: MessageUIComponent, messageActions: props.messageActions }));
8981
9145
  }, [customMessageRenderer, shouldGroupByUser, numItemsPrepended]);
8982
9146
  var virtuosoComponents = React.useMemo(function () {
@@ -9057,7 +9221,7 @@ var DefaultThreadHeader = function (props) {
9057
9221
  React__default['default'].createElement("div", { className: 'str-chat__thread-header-details' },
9058
9222
  React__default['default'].createElement("strong", null, t('Thread')),
9059
9223
  React__default['default'].createElement("small", null, getReplyCount())),
9060
- React__default['default'].createElement("button", { className: 'str-chat__square-button', "data-testid": 'close-button', onClick: function (event) { return closeThread(event); } },
9224
+ React__default['default'].createElement("button", { "aria-label": 'Close thread', className: 'str-chat__square-button', "data-testid": 'close-button', onClick: function (event) { return closeThread(event); } },
9061
9225
  React__default['default'].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
9062
9226
  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' })))));
9063
9227
  };
@@ -9105,10 +9269,7 @@ var ThreadInner = function (props) {
9105
9269
  var UnMemoizedWindow = function (props) {
9106
9270
  var children = props.children, _a = props.hideOnThread, hideOnThread = _a === void 0 ? false : _a;
9107
9271
  var thread = useChannelStateContext('Window').thread;
9108
- // If thread is active and window should hide on thread. Return null
9109
- if (thread && hideOnThread)
9110
- return null;
9111
- return React__default['default'].createElement("div", { className: "str-chat__main-panel" }, children);
9272
+ return (React__default['default'].createElement("div", { className: "str-chat__main-panel " + (hideOnThread && thread ? 'str-chat__main-panel--hideOnThread' : '') }, children));
9112
9273
  };
9113
9274
  /**
9114
9275
  * A UI component for conditionally displaying a Thread or Channel
@@ -9201,9 +9362,9 @@ exports.MessageText = MessageText;
9201
9362
  exports.MessageTimestamp = MessageTimestamp;
9202
9363
  exports.Modal = Modal;
9203
9364
  exports.ModalComponent = ModalComponent;
9204
- exports.ModalImage = ModalImage;
9205
9365
  exports.PinIcon = PinIcon;
9206
9366
  exports.PinIndicator = PinIndicator;
9367
+ exports.QuotedMessagePreview = QuotedMessagePreview;
9207
9368
  exports.ReactionIcon = ReactionIcon;
9208
9369
  exports.ReactionSelector = ReactionSelector;
9209
9370
  exports.ReactionsList = ReactionsList;
@@ -9245,14 +9406,18 @@ exports.generateRandomId = generateRandomId;
9245
9406
  exports.getChannel = getChannel;
9246
9407
  exports.getDisplayImage = getDisplayImage;
9247
9408
  exports.getDisplayTitle = getDisplayTitle;
9409
+ exports.getGroupStyles = getGroupStyles;
9248
9410
  exports.getImages = getImages;
9411
+ exports.getLastReceived = getLastReceived;
9249
9412
  exports.getLatestMessagePreview = getLatestMessagePreview;
9250
9413
  exports.getMessageActions = getMessageActions;
9251
9414
  exports.getNonImageAttachments = getNonImageAttachments;
9252
9415
  exports.getReadByTooltipText = getReadByTooltipText;
9416
+ exports.getReadStates = getReadStates;
9253
9417
  exports.getWholeChar = getWholeChar;
9254
9418
  exports.handleActionWarning = handleActionWarning;
9255
9419
  exports.hiTranslations = hiTranslations;
9420
+ exports.insertIntro = insertIntro;
9256
9421
  exports.isAudioAttachment = isAudioAttachment;
9257
9422
  exports.isChannel = isChannel;
9258
9423
  exports.isDate = isDate;
@@ -9281,6 +9446,7 @@ exports.moveChannelUp = moveChannelUp;
9281
9446
  exports.nlTranslations = nlTranslations;
9282
9447
  exports.noParsingFunctionWarning = noParsingFunctionWarning;
9283
9448
  exports.notValidDateWarning = notValidDateWarning;
9449
+ exports.processMessages = processMessages;
9284
9450
  exports.ptTranslations = ptTranslations;
9285
9451
  exports.reactionHandlerWarning = reactionHandlerWarning;
9286
9452
  exports.renderAttachmentActions = renderAttachmentActions;