stream-chat-react 11.8.0 → 11.10.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 (366) hide show
  1. package/dist/{Window-7c2f264c.js → Window-7d524c3b.js} +3367 -165
  2. package/dist/browser.full-bundle.js +3692 -400
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +4 -4
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Attachment/Attachment.d.ts +1 -1
  7. package/dist/components/Attachment/Attachment.d.ts.map +1 -1
  8. package/dist/components/Attachment/AttachmentActions.d.ts +2 -1
  9. package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
  10. package/dist/components/Attachment/AttachmentContainer.d.ts +9 -9
  11. package/dist/components/Attachment/AttachmentContainer.d.ts.map +1 -1
  12. package/dist/components/Attachment/Audio.d.ts +3 -3
  13. package/dist/components/Attachment/Audio.d.ts.map +1 -1
  14. package/dist/components/Attachment/Card.d.ts +3 -2
  15. package/dist/components/Attachment/Card.d.ts.map +1 -1
  16. package/dist/components/Attachment/DownloadButton.d.ts +2 -1
  17. package/dist/components/Attachment/DownloadButton.d.ts.map +1 -1
  18. package/dist/components/Attachment/FileAttachment.d.ts +2 -1
  19. package/dist/components/Attachment/FileAttachment.d.ts.map +1 -1
  20. package/dist/components/Attachment/FileSizeIndicator.d.ts +2 -1
  21. package/dist/components/Attachment/FileSizeIndicator.d.ts.map +1 -1
  22. package/dist/components/Attachment/UnsupportedAttachment.d.ts +2 -1
  23. package/dist/components/Attachment/UnsupportedAttachment.d.ts.map +1 -1
  24. package/dist/components/Attachment/icons.d.ts +4 -3
  25. package/dist/components/Attachment/icons.d.ts.map +1 -1
  26. package/dist/components/Attachment/utils.d.ts +8 -8
  27. package/dist/components/Attachment/utils.d.ts.map +1 -1
  28. package/dist/components/AutoCompleteTextarea/Header.d.ts +2 -1
  29. package/dist/components/AutoCompleteTextarea/Header.d.ts.map +1 -1
  30. package/dist/components/AutoCompleteTextarea/List.d.ts +2 -1
  31. package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
  32. package/dist/components/AutoCompleteTextarea/Textarea.d.ts +2 -2
  33. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  34. package/dist/components/Avatar/Avatar.d.ts +1 -1
  35. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  36. package/dist/components/Channel/Channel.d.ts +2 -2
  37. package/dist/components/Channel/Channel.d.ts.map +1 -1
  38. package/dist/components/Channel/Channel.js +77 -62
  39. package/dist/components/Channel/LoadingChannel.d.ts +2 -1
  40. package/dist/components/Channel/LoadingChannel.d.ts.map +1 -1
  41. package/dist/components/ChannelHeader/ChannelHeader.d.ts +1 -1
  42. package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
  43. package/dist/components/ChannelHeader/ChannelHeader.js +1 -1
  44. package/dist/components/ChannelHeader/icons.d.ts +2 -1
  45. package/dist/components/ChannelHeader/icons.d.ts.map +1 -1
  46. package/dist/components/ChannelList/ChannelList.d.ts +1 -1
  47. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  48. package/dist/components/ChannelList/ChannelListMessenger.d.ts +1 -1
  49. package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
  50. package/dist/components/ChannelList/ChannelListMessenger.js +3 -1
  51. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  52. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +12 -13
  53. package/dist/components/ChannelPreview/ChannelPreview.d.ts +1 -1
  54. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  55. package/dist/components/ChannelPreview/ChannelPreview.js +11 -8
  56. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +2 -1
  57. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
  58. package/dist/components/ChannelPreview/utils.d.ts +2 -1
  59. package/dist/components/ChannelPreview/utils.d.ts.map +1 -1
  60. package/dist/components/ChannelSearch/ChannelSearch.d.ts +1 -1
  61. package/dist/components/ChannelSearch/ChannelSearch.d.ts.map +1 -1
  62. package/dist/components/ChannelSearch/SearchBar.d.ts +1 -1
  63. package/dist/components/ChannelSearch/SearchBar.d.ts.map +1 -1
  64. package/dist/components/ChannelSearch/SearchInput.d.ts +1 -1
  65. package/dist/components/ChannelSearch/SearchInput.d.ts.map +1 -1
  66. package/dist/components/ChannelSearch/SearchResults.d.ts +1 -1
  67. package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
  68. package/dist/components/ChannelSearch/SearchResults.js +2 -1
  69. package/dist/components/ChannelSearch/icons.d.ts +5 -4
  70. package/dist/components/ChannelSearch/icons.d.ts.map +1 -1
  71. package/dist/components/Chat/Chat.d.ts +1 -1
  72. package/dist/components/Chat/Chat.d.ts.map +1 -1
  73. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +1 -1
  74. package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
  75. package/dist/components/ChatDown/ChatDown.d.ts +1 -1
  76. package/dist/components/ChatDown/ChatDown.d.ts.map +1 -1
  77. package/dist/components/ChatDown/icons.d.ts +2 -1
  78. package/dist/components/ChatDown/icons.d.ts.map +1 -1
  79. package/dist/components/CommandItem/CommandItem.d.ts +2 -2
  80. package/dist/components/CommandItem/CommandItem.d.ts.map +1 -1
  81. package/dist/components/DateSeparator/DateSeparator.d.ts +2 -1
  82. package/dist/components/DateSeparator/DateSeparator.d.ts.map +1 -1
  83. package/dist/components/Emojis/EmojiPicker.d.ts +1 -1
  84. package/dist/components/Emojis/EmojiPicker.d.ts.map +1 -1
  85. package/dist/components/Emojis/EmojiPicker.js +1 -1
  86. package/dist/components/Emojis/index.cjs.js +4 -4
  87. package/dist/components/EmoticonItem/EmoticonItem.d.ts +2 -1
  88. package/dist/components/EmoticonItem/EmoticonItem.d.ts.map +1 -1
  89. package/dist/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +2 -1
  90. package/dist/components/EmptyStateIndicator/EmptyStateIndicator.d.ts.map +1 -1
  91. package/dist/components/EmptyStateIndicator/icons.d.ts +2 -1
  92. package/dist/components/EmptyStateIndicator/icons.d.ts.map +1 -1
  93. package/dist/components/EventComponent/EventComponent.d.ts +1 -1
  94. package/dist/components/EventComponent/EventComponent.d.ts.map +1 -1
  95. package/dist/components/Gallery/BaseImage.d.ts +2 -2
  96. package/dist/components/Gallery/BaseImage.d.ts.map +1 -1
  97. package/dist/components/Gallery/Gallery.d.ts +2 -2
  98. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  99. package/dist/components/Gallery/Image.d.ts +2 -2
  100. package/dist/components/Gallery/Image.d.ts.map +1 -1
  101. package/dist/components/Gallery/ModalGallery.d.ts +2 -1
  102. package/dist/components/Gallery/ModalGallery.d.ts.map +1 -1
  103. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  104. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +7 -12
  105. package/dist/components/LoadMore/LoadMoreButton.d.ts +1 -1
  106. package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  107. package/dist/components/LoadMore/LoadMoreButton.js +1 -1
  108. package/dist/components/LoadMore/LoadMorePaginator.d.ts +2 -2
  109. package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
  110. package/dist/components/Loading/LoadingChannels.d.ts +1 -1
  111. package/dist/components/Loading/LoadingChannels.d.ts.map +1 -1
  112. package/dist/components/Loading/LoadingErrorIndicator.d.ts +2 -1
  113. package/dist/components/Loading/LoadingErrorIndicator.d.ts.map +1 -1
  114. package/dist/components/Loading/LoadingIndicator.d.ts +2 -1
  115. package/dist/components/Loading/LoadingIndicator.d.ts.map +1 -1
  116. package/dist/components/MML/MML.d.ts +2 -1
  117. package/dist/components/MML/MML.d.ts.map +1 -1
  118. package/dist/components/Message/FixedHeightMessage.d.ts +2 -1
  119. package/dist/components/Message/FixedHeightMessage.d.ts.map +1 -1
  120. package/dist/components/Message/Message.d.ts +2 -1
  121. package/dist/components/Message/Message.d.ts.map +1 -1
  122. package/dist/components/Message/Message.js +2 -2
  123. package/dist/components/Message/MessageDeleted.d.ts +2 -1
  124. package/dist/components/Message/MessageDeleted.d.ts.map +1 -1
  125. package/dist/components/Message/MessageErrorText.d.ts +2 -2
  126. package/dist/components/Message/MessageErrorText.d.ts.map +1 -1
  127. package/dist/components/Message/MessageOptions.d.ts +1 -1
  128. package/dist/components/Message/MessageOptions.d.ts.map +1 -1
  129. package/dist/components/Message/MessageOptions.js +5 -3
  130. package/dist/components/Message/MessageRepliesCountButton.d.ts +2 -2
  131. package/dist/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
  132. package/dist/components/Message/MessageSimple.d.ts +2 -1
  133. package/dist/components/Message/MessageSimple.d.ts.map +1 -1
  134. package/dist/components/Message/MessageStatus.d.ts +1 -1
  135. package/dist/components/Message/MessageStatus.d.ts.map +1 -1
  136. package/dist/components/Message/MessageText.d.ts +2 -1
  137. package/dist/components/Message/MessageText.d.ts.map +1 -1
  138. package/dist/components/Message/MessageTimestamp.d.ts +2 -1
  139. package/dist/components/Message/MessageTimestamp.d.ts.map +1 -1
  140. package/dist/components/Message/QuotedMessage.d.ts +2 -1
  141. package/dist/components/Message/QuotedMessage.d.ts.map +1 -1
  142. package/dist/components/Message/icons.d.ts +11 -10
  143. package/dist/components/Message/icons.d.ts.map +1 -1
  144. package/dist/components/Message/renderText/componentRenderers/Anchor.d.ts +2 -2
  145. package/dist/components/Message/renderText/componentRenderers/Anchor.d.ts.map +1 -1
  146. package/dist/components/Message/renderText/componentRenderers/Emoji.d.ts +2 -1
  147. package/dist/components/Message/renderText/componentRenderers/Emoji.d.ts.map +1 -1
  148. package/dist/components/Message/renderText/componentRenderers/Mention.d.ts +2 -2
  149. package/dist/components/Message/renderText/componentRenderers/Mention.d.ts.map +1 -1
  150. package/dist/components/Message/renderText/renderText.d.ts +2 -2
  151. package/dist/components/Message/renderText/renderText.d.ts.map +1 -1
  152. package/dist/components/Message/types.d.ts +5 -0
  153. package/dist/components/Message/types.d.ts.map +1 -1
  154. package/dist/components/MessageActions/CustomMessageActionsList.d.ts +2 -1
  155. package/dist/components/MessageActions/CustomMessageActionsList.d.ts.map +1 -1
  156. package/dist/components/MessageActions/MessageActions.d.ts +1 -1
  157. package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
  158. package/dist/components/MessageActions/MessageActions.js +3 -1
  159. package/dist/components/MessageActions/MessageActionsBox.d.ts +1 -1
  160. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  161. package/dist/components/MessageActions/MessageActionsBox.js +1 -1
  162. package/dist/components/MessageBounce/MessageBounceModal.d.ts +2 -2
  163. package/dist/components/MessageBounce/MessageBounceModal.d.ts.map +1 -1
  164. package/dist/components/MessageBounce/MessageBouncePrompt.d.ts +2 -1
  165. package/dist/components/MessageBounce/MessageBouncePrompt.d.ts.map +1 -1
  166. package/dist/components/MessageInput/AttachmentPreviewList.d.ts +3 -2
  167. package/dist/components/MessageInput/AttachmentPreviewList.d.ts.map +1 -1
  168. package/dist/components/MessageInput/CooldownTimer.d.ts +1 -1
  169. package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -1
  170. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +1 -1
  171. package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
  172. package/dist/components/MessageInput/DropzoneProvider.d.ts +1 -1
  173. package/dist/components/MessageInput/DropzoneProvider.d.ts.map +1 -1
  174. package/dist/components/MessageInput/EditMessageForm.d.ts +2 -1
  175. package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
  176. package/dist/components/MessageInput/LinkPreviewList.d.ts +2 -1
  177. package/dist/components/MessageInput/LinkPreviewList.d.ts.map +1 -1
  178. package/dist/components/MessageInput/MessageInput.d.ts +1 -1
  179. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  180. package/dist/components/MessageInput/MessageInputFlat.d.ts +2 -1
  181. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  182. package/dist/components/MessageInput/MessageInputFlat.js +1 -1
  183. package/dist/components/MessageInput/MessageInputSmall.d.ts +2 -1
  184. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  185. package/dist/components/MessageInput/QuotedMessagePreview.d.ts +3 -2
  186. package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
  187. package/dist/components/MessageInput/QuotedMessagePreview.js +1 -1
  188. package/dist/components/MessageInput/UploadsPreview.d.ts +2 -1
  189. package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
  190. package/dist/components/MessageInput/icons.d.ts +14 -14
  191. package/dist/components/MessageInput/icons.d.ts.map +1 -1
  192. package/dist/components/MessageInput/icons.js +2 -1
  193. package/dist/components/MessageList/ConnectionStatus.d.ts +1 -1
  194. package/dist/components/MessageList/ConnectionStatus.d.ts.map +1 -1
  195. package/dist/components/MessageList/CustomNotification.d.ts +2 -2
  196. package/dist/components/MessageList/CustomNotification.d.ts.map +1 -1
  197. package/dist/components/MessageList/GiphyPreviewMessage.d.ts +2 -1
  198. package/dist/components/MessageList/GiphyPreviewMessage.d.ts.map +1 -1
  199. package/dist/components/MessageList/MessageList.d.ts +8 -4
  200. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  201. package/dist/components/MessageList/MessageList.js +4 -2
  202. package/dist/components/MessageList/MessageListMainPanel.d.ts +2 -1
  203. package/dist/components/MessageList/MessageListMainPanel.d.ts.map +1 -1
  204. package/dist/components/MessageList/MessageListNotifications.d.ts +1 -1
  205. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
  206. package/dist/components/MessageList/MessageNotification.d.ts +1 -1
  207. package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
  208. package/dist/components/MessageList/ScrollToBottomButton.d.ts +2 -1
  209. package/dist/components/MessageList/ScrollToBottomButton.d.ts.map +1 -1
  210. package/dist/components/MessageList/ScrollToBottomButton.js +44 -3
  211. package/dist/components/MessageList/UnreadMessagesNotification.d.ts +12 -1
  212. package/dist/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
  213. package/dist/components/MessageList/UnreadMessagesNotification.js +4 -2
  214. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts +9 -1
  215. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -1
  216. package/dist/components/MessageList/UnreadMessagesSeparator.js +2 -2
  217. package/dist/components/MessageList/VirtualizedMessageList.d.ts +9 -5
  218. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  219. package/dist/components/MessageList/VirtualizedMessageList.js +9 -4
  220. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +6 -6
  221. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  222. package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
  223. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +2 -1
  224. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -1
  225. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +27 -13
  226. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +3 -1
  227. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -1
  228. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +13 -7
  229. package/dist/components/MessageList/hooks/useMarkRead.d.ts +3 -2
  230. package/dist/components/MessageList/hooks/useMarkRead.d.ts.map +1 -1
  231. package/dist/components/MessageList/hooks/useMarkRead.js +65 -11
  232. package/dist/components/MessageList/icons.d.ts +4 -3
  233. package/dist/components/MessageList/icons.d.ts.map +1 -1
  234. package/dist/components/MessageList/renderMessages.d.ts +2 -2
  235. package/dist/components/MessageList/renderMessages.d.ts.map +1 -1
  236. package/dist/components/Modal/Modal.d.ts +1 -1
  237. package/dist/components/Modal/Modal.d.ts.map +1 -1
  238. package/dist/components/Modal/Modal.js +9 -7
  239. package/dist/components/Modal/icons.d.ts +2 -1
  240. package/dist/components/Modal/icons.d.ts.map +1 -1
  241. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +1 -1
  242. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts.map +1 -1
  243. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts +12 -12
  244. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts.map +1 -1
  245. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts +18 -18
  246. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts.map +1 -1
  247. package/dist/components/ReactFileUtilities/FilePreviewer.d.ts +2 -1
  248. package/dist/components/ReactFileUtilities/FilePreviewer.d.ts.map +1 -1
  249. package/dist/components/ReactFileUtilities/FileUploadButton.d.ts +2 -2
  250. package/dist/components/ReactFileUtilities/FileUploadButton.d.ts.map +1 -1
  251. package/dist/components/ReactFileUtilities/FileUploadButton.js +3 -1
  252. package/dist/components/ReactFileUtilities/IconButton.d.ts +2 -2
  253. package/dist/components/ReactFileUtilities/IconButton.d.ts.map +1 -1
  254. package/dist/components/ReactFileUtilities/IconButton.js +3 -1
  255. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +2 -2
  256. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts.map +1 -1
  257. package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts +2 -2
  258. package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts.map +1 -1
  259. package/dist/components/ReactFileUtilities/ImagePreviewer.js +3 -1
  260. package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts +2 -2
  261. package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts.map +1 -1
  262. package/dist/components/ReactFileUtilities/ImageUploadButton.js +3 -1
  263. package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts +2 -1
  264. package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts.map +1 -1
  265. package/dist/components/ReactFileUtilities/Thumbnail.d.ts +2 -2
  266. package/dist/components/ReactFileUtilities/Thumbnail.d.ts.map +1 -1
  267. package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts +2 -1
  268. package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts.map +1 -1
  269. package/dist/components/ReactFileUtilities/UploadButton.d.ts +2 -2
  270. package/dist/components/ReactFileUtilities/UploadButton.d.ts.map +1 -1
  271. package/dist/components/ReactFileUtilities/icons/AttachmentIcon.d.ts +2 -1
  272. package/dist/components/ReactFileUtilities/icons/AttachmentIcon.d.ts.map +1 -1
  273. package/dist/components/ReactFileUtilities/icons/CloseIcon.d.ts +2 -1
  274. package/dist/components/ReactFileUtilities/icons/CloseIcon.d.ts.map +1 -1
  275. package/dist/components/ReactFileUtilities/icons/FilePlaceholderIcon.d.ts +2 -2
  276. package/dist/components/ReactFileUtilities/icons/FilePlaceholderIcon.d.ts.map +1 -1
  277. package/dist/components/ReactFileUtilities/icons/PictureIcon.d.ts +2 -1
  278. package/dist/components/ReactFileUtilities/icons/PictureIcon.d.ts.map +1 -1
  279. package/dist/components/ReactFileUtilities/icons/RetryIcon.d.ts +2 -1
  280. package/dist/components/ReactFileUtilities/icons/RetryIcon.d.ts.map +1 -1
  281. package/dist/components/Reactions/ReactionsList.d.ts +7 -1
  282. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  283. package/dist/components/Reactions/ReactionsList.js +5 -3
  284. package/dist/components/Reactions/ReactionsListModal.d.ts +4 -3
  285. package/dist/components/Reactions/ReactionsListModal.d.ts.map +1 -1
  286. package/dist/components/Reactions/ReactionsListModal.js +18 -8
  287. package/dist/components/Reactions/SimpleReactionsList.d.ts +2 -1
  288. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  289. package/dist/components/Reactions/SpriteImage.d.ts +2 -1
  290. package/dist/components/Reactions/SpriteImage.d.ts.map +1 -1
  291. package/dist/components/Reactions/SpriteImage.js +3 -17
  292. package/dist/components/Reactions/StreamEmoji.d.ts +1 -1
  293. package/dist/components/Reactions/StreamEmoji.d.ts.map +1 -1
  294. package/dist/components/Reactions/StreamEmoji.js +3 -1
  295. package/dist/components/Reactions/hooks/useFetchReactions.js +2 -2
  296. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +5 -2
  297. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  298. package/dist/components/Reactions/hooks/useProcessReactions.js +10 -3
  299. package/dist/components/Reactions/types.d.ts +4 -1
  300. package/dist/components/Reactions/types.d.ts.map +1 -1
  301. package/dist/components/SafeAnchor/SafeAnchor.d.ts +2 -2
  302. package/dist/components/SafeAnchor/SafeAnchor.d.ts.map +1 -1
  303. package/dist/components/SafeAnchor/SafeAnchor.js +3 -1
  304. package/dist/components/Thread/Thread.d.ts +1 -1
  305. package/dist/components/Thread/Thread.d.ts.map +1 -1
  306. package/dist/components/Thread/ThreadHead.d.ts +2 -1
  307. package/dist/components/Thread/ThreadHead.d.ts.map +1 -1
  308. package/dist/components/Thread/ThreadHeader.d.ts +1 -1
  309. package/dist/components/Thread/ThreadHeader.d.ts.map +1 -1
  310. package/dist/components/Thread/ThreadHeader.js +1 -1
  311. package/dist/components/Thread/ThreadStart.d.ts +2 -1
  312. package/dist/components/Thread/ThreadStart.d.ts.map +1 -1
  313. package/dist/components/Thread/icons.d.ts +2 -1
  314. package/dist/components/Thread/icons.d.ts.map +1 -1
  315. package/dist/components/Tooltip/Tooltip.d.ts +2 -2
  316. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  317. package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -1
  318. package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  319. package/dist/components/UserItem/UserItem.d.ts +1 -1
  320. package/dist/components/UserItem/UserItem.d.ts.map +1 -1
  321. package/dist/components/Window/Window.d.ts +1 -1
  322. package/dist/components/Window/Window.d.ts.map +1 -1
  323. package/dist/context/ChannelActionContext.d.ts +4 -3
  324. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  325. package/dist/context/ChannelListContext.d.ts +1 -1
  326. package/dist/context/ChannelListContext.d.ts.map +1 -1
  327. package/dist/context/ChannelStateContext.d.ts +2 -2
  328. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  329. package/dist/context/ChatContext.d.ts +2 -2
  330. package/dist/context/ChatContext.d.ts.map +1 -1
  331. package/dist/context/ComponentContext.d.ts +2 -2
  332. package/dist/context/ComponentContext.d.ts.map +1 -1
  333. package/dist/context/MessageBounceContext.d.ts +2 -2
  334. package/dist/context/MessageBounceContext.d.ts.map +1 -1
  335. package/dist/context/MessageContext.d.ts +7 -2
  336. package/dist/context/MessageContext.d.ts.map +1 -1
  337. package/dist/context/MessageInputContext.d.ts +1 -1
  338. package/dist/context/MessageInputContext.d.ts.map +1 -1
  339. package/dist/context/MessageListContext.d.ts +1 -1
  340. package/dist/context/MessageListContext.d.ts.map +1 -1
  341. package/dist/context/TranslationContext.d.ts +2 -2
  342. package/dist/context/TranslationContext.d.ts.map +1 -1
  343. package/dist/context/TypingContext.d.ts +2 -2
  344. package/dist/context/TypingContext.d.ts.map +1 -1
  345. package/dist/css/v2/index.css +1 -1
  346. package/dist/css/v2/index.layout.css +1 -1
  347. package/dist/i18n/Streami18n.d.ts +19 -0
  348. package/dist/i18n/Streami18n.d.ts.map +1 -1
  349. package/dist/i18n/de.json +19 -0
  350. package/dist/i18n/en.json +19 -0
  351. package/dist/i18n/es.json +19 -0
  352. package/dist/i18n/fr.json +19 -0
  353. package/dist/i18n/hi.json +19 -0
  354. package/dist/i18n/it.json +19 -0
  355. package/dist/i18n/ja.json +19 -0
  356. package/dist/i18n/ko.json +19 -0
  357. package/dist/i18n/nl.json +19 -0
  358. package/dist/i18n/pt.json +19 -0
  359. package/dist/i18n/ru.json +19 -0
  360. package/dist/i18n/tr.json +19 -0
  361. package/dist/index.cjs.js +129 -54
  362. package/dist/scss/v2/MessageReactions/MessageReactions-layout.scss +15 -1
  363. package/dist/version.d.ts +1 -1
  364. package/dist/version.d.ts.map +1 -1
  365. package/dist/version.js +1 -1
  366. package/package.json +9 -6
@@ -22,8 +22,6 @@ require('dayjs/locale/pt');
22
22
  require('dayjs/locale/ru');
23
23
  require('dayjs/locale/tr');
24
24
  require('dayjs/locale/en');
25
- var uniqBy = require('lodash.uniqby');
26
- var jsxRuntime = require('react/jsx-runtime');
27
25
  var ReactPlayer = require('react-player');
28
26
  var prettybytes = require('pretty-bytes');
29
27
  var sanitizeUrl = require('@braintree/sanitize-url');
@@ -31,6 +29,7 @@ var ImageGallery = require('react-image-gallery');
31
29
  var PropTypes = require('prop-types');
32
30
  var linkify = require('linkifyjs');
33
31
  var emojiRegex = require('emoji-regex');
32
+ var uniqBy = require('lodash.uniqby');
34
33
  var _extends = require('@babel/runtime/helpers/extends');
35
34
  var _defineProperty$2 = require('@babel/runtime/helpers/defineProperty');
36
35
  var Textarea = require('react-textarea-autosize');
@@ -41,6 +40,7 @@ var throttle = require('lodash.throttle');
41
40
  var crypto = require('crypto');
42
41
  var deepequal = require('react-fast-compare');
43
42
  var ReactDOM = require('react-dom');
43
+ var jsxRuntime = require('react/jsx-runtime');
44
44
  var streamChat = require('stream-chat');
45
45
  require('react-virtuoso');
46
46
 
@@ -75,13 +75,13 @@ var localeData__default = /*#__PURE__*/_interopDefaultLegacy(localeData);
75
75
  var relativeTime__default = /*#__PURE__*/_interopDefaultLegacy(relativeTime);
76
76
  var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
77
77
  var timezone__default = /*#__PURE__*/_interopDefaultLegacy(timezone);
78
- var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
79
78
  var ReactPlayer__default = /*#__PURE__*/_interopDefaultLegacy(ReactPlayer);
80
79
  var prettybytes__default = /*#__PURE__*/_interopDefaultLegacy(prettybytes);
81
80
  var ImageGallery__default = /*#__PURE__*/_interopDefaultLegacy(ImageGallery);
82
81
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
83
82
  var linkify__namespace = /*#__PURE__*/_interopNamespace(linkify);
84
83
  var emojiRegex__default = /*#__PURE__*/_interopDefaultLegacy(emojiRegex);
84
+ var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
85
85
  var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
86
86
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty$2);
87
87
  var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
@@ -431,29 +431,29 @@ var useMessageListContext = function (componentName) {
431
431
  return contextValue;
432
432
  };
433
433
 
434
- var Cancel$b="Stornieren";var Close$b="Schließen";var Delete$b="Löschen";var Delivered$b="Zugestellt";var Flag$b="Meldung";var Menu$b="Menü";var Mute$b="Stumm schalten";var New$b="Neu";var Pin$b="Pin";var Reply$b="Antworten";var Search$b="Suche";var Send$b="Senden";var Shuffle$b="Mischen";var Thread$b="Thread";var Unmute$b="Stummschaltung aufheben";var Unpin$b="Pin entfernen";var live$b="live";var replyCount_one$b="1 Antwort";var replyCount_other$b="{{ count }} Antworten";var searchResultsCount_one$b="1 Ergebnis";var searchResultsCount_other$b="{{ count }} Ergebnisse";var unreadMessagesSeparatorText_one$9="1 ungelesene Nachricht";var unreadMessagesSeparatorText_other$b="{{count}} ungelesene Nachrichten";var deTranslations = {"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, Wiederherstellung der Verbindung...",Delete:Delete$b,Delivered:Delivered$b,"Drag your files here":"Ziehen Sie Ihre Dateien hierher","Drag your files here to add to your post":"Ziehen Sie Ihre Dateien hierher, um sie Ihrem Beitrag hinzuzufügen","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.":"Verbindungsfehler zum Chat, Aktualisiere die Seite um es erneut zu versuchen.","Error deleting message":"Fehler beim Löschen der Nachricht","Error fetching reactions":"Fehler beim Laden von Reaktionen","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Fehler beim Markieren der Nachricht als ungelesen. Kann keine älteren ungelesenen Nachrichten markieren als die neuesten 100 Kanalnachrichten.","Error muting a user ...":"Fehler beim Stummschalten eines Nutzers.","Error pinning message":"Fehler beim Pinnen der Nachricht","Error removing message pin":"Fehler beim Entfernen der gepinnten Nachricht","Error unmuting a user ...":"Stummschaltung des Nutzers fehlgeschlagen ...","Error uploading file":"Fehler beim Hochladen der Datei","Error uploading image":"Hochladen des Bildes fehlgeschlagen","Error · Unsent":"Fehler nicht gesendet","Error: {{ errorMessage }}":"Fehler: {{ errorMessage }}","Failed to jump to the first unread message":"Fehler beim Springen zur ersten ungelesenen Nachricht","Failed to mark channel as read":"Fehler beim Markieren des Kanals als gelesen",Flag:Flag$b,"Latest Messages":"Neueste Nachrichten","Load more":"Mehr laden","Mark as unread":"Als ungelesen markieren",Menu:Menu$b,"Message Failed · Click to try again":"Nachricht fehlgeschlagen · Klicken, 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 gemeldet","Message pinned":"Nachricht gepinnt","Messages have been marked unread.":"Nachrichten wurden als ungelesen markiert.",Mute:Mute$b,New:New$b,"New Messages!":"Neue Nachrichten!","No chats here yet…":"Noch keine Chats hier...","No results found":"keine Ergebnisse gefunden","Nothing yet...":"Noch nichts...","Open emoji picker":"Emoji-Picker öffnen","People matching":"Passende Personen",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 Anyway":"Trotzdem senden","Send message request failed":"Senden der Nachrichtenanfrage fehlgeschlagen","Sending...":"Senden...",Shuffle:Shuffle$b,"Slow Mode ON":"Slow-Mode EIN","Some of the files will not be accepted":"Einige der Dateien werden nicht akzeptiert","This message did not meet our content guidelines":"Diese Nachricht entsprach nicht unseren Inhaltsrichtlinien","This message was deleted...":"Diese Nachricht wurde gelöscht...",Thread:Thread$b,"Type your message":"Nachricht eingeben",Unmute:Unmute$b,Unpin:Unpin$b,"Unread messages":"Ungelesene Nachrichten","Upload type: \"{{ type }}\" is not allowed":"Upload-Typ: \"{{ type }}\" ist nicht erlaubt","User uploaded content":"Benutzer hochgeladenen Inhalts","Wait until all attachments have uploaded":"Bitte warten, bis alle Anhänge hochgeladen wurden","You have no channels currently":"Du hast momentan noch keinen Channels","You've reached the maximum number of files":"Die maximale Dateianzahl ist erreicht","ban-command-args":"[@Benutzername] [Text]","ban-command-description":"Einen Benutzer verbannen","giphy-command-args":"[Text]","giphy-command-description":"Poste ein zufälliges Gif in den Kanal",live:live$b,"mute-command-args":"[@Benutzername]","mute-command-description":"Stummschalten eines Benutzers",replyCount_one:replyCount_one$b,replyCount_other:replyCount_other$b,searchResultsCount_one:searchResultsCount_one$b,searchResultsCount_other:searchResultsCount_other$b,"this content could not be displayed":"Dieser Inhalt konnte nicht angezeigt werden","unban-command-args":"[@Benutzername]","unban-command-description":"Einen Benutzer entbannen","unmute-command-args":"[@Benutzername]","unmute-command-description":"Stummschaltung eines Benutzers aufheben",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$9,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$b,"{{ 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","{{ user }} has been muted":"{{ user }} wurde stummgeschaltet","{{ user }} has been unmuted":"{{ user }} wurde nicht stummgeschaltet","{{ user }} is typing...":"{{ user }} tippt...","{{ users }} and more are typing...":"{{ users }} und mehr tippen...","{{ users }} and {{ user }} are typing...":"{{ users }} und {{ user }} tippen...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} ungelesen","{{count}} unread_other":"{{count}} ungelesen","🏙 Attachment...":"🏙 Anhang..."};
434
+ var Cancel$b="Stornieren";var Close$b="Schließen";var Delete$b="Löschen";var Delivered$b="Zugestellt";var Flag$b="Meldung";var Menu$b="Menü";var Mute$b="Stumm schalten";var New$b="Neu";var Pin$b="Pin";var Reply$b="Antworten";var Search$b="Suche";var Send$b="Senden";var Shuffle$b="Mischen";var Thread$b="Thread";var Unmute$b="Stummschaltung aufheben";var Unpin$b="Pin entfernen";var live$b="live";var replyCount_one$b="1 Antwort";var replyCount_other$b="{{ count }} Antworten";var searchResultsCount_one$b="1 Ergebnis";var searchResultsCount_other$b="{{ count }} Ergebnisse";var unreadMessagesSeparatorText_one$9="1 ungelesene Nachricht";var unreadMessagesSeparatorText_other$b="{{count}} ungelesene Nachrichten";var deTranslations = {"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, Wiederherstellung der Verbindung...",Delete:Delete$b,Delivered:Delivered$b,"Drag your files here":"Ziehen Sie Ihre Dateien hierher","Drag your files here to add to your post":"Ziehen Sie Ihre Dateien hierher, um sie Ihrem Beitrag hinzuzufügen","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.":"Verbindungsfehler zum Chat, Aktualisiere die Seite um es erneut zu versuchen.","Error deleting message":"Fehler beim Löschen der Nachricht","Error fetching reactions":"Fehler beim Laden von Reaktionen","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Fehler beim Markieren der Nachricht als ungelesen. Kann keine älteren ungelesenen Nachrichten markieren als die neuesten 100 Kanalnachrichten.","Error muting a user ...":"Fehler beim Stummschalten eines Nutzers.","Error pinning message":"Fehler beim Pinnen der Nachricht","Error removing message pin":"Fehler beim Entfernen der gepinnten Nachricht","Error unmuting a user ...":"Stummschaltung des Nutzers fehlgeschlagen ...","Error uploading file":"Fehler beim Hochladen der Datei","Error uploading image":"Hochladen des Bildes fehlgeschlagen","Error · Unsent":"Fehler nicht gesendet","Error: {{ errorMessage }}":"Fehler: {{ errorMessage }}","Failed to jump to the first unread message":"Fehler beim Springen zur ersten ungelesenen Nachricht","Failed to mark channel as read":"Fehler beim Markieren des Kanals als gelesen",Flag:Flag$b,"Latest Messages":"Neueste Nachrichten","Load more":"Mehr laden","Mark as unread":"Als ungelesen markieren",Menu:Menu$b,"Message Failed · Click to try again":"Nachricht fehlgeschlagen · Klicken, 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 gemeldet","Message pinned":"Nachricht gepinnt","Messages have been marked unread.":"Nachrichten wurden als ungelesen markiert.",Mute:Mute$b,New:New$b,"New Messages!":"Neue Nachrichten!","No chats here yet…":"Noch keine Chats hier...","No results found":"keine Ergebnisse gefunden","Nothing yet...":"Noch nichts...","Open emoji picker":"Emoji-Picker öffnen","People matching":"Passende Personen",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 Anyway":"Trotzdem senden","Send message request failed":"Senden der Nachrichtenanfrage fehlgeschlagen","Sending...":"Senden...",Shuffle:Shuffle$b,"Slow Mode ON":"Slow-Mode EIN","Some of the files will not be accepted":"Einige der Dateien werden nicht akzeptiert","This message did not meet our content guidelines":"Diese Nachricht entsprach nicht unseren Inhaltsrichtlinien","This message was deleted...":"Diese Nachricht wurde gelöscht...",Thread:Thread$b,"Type your message":"Nachricht eingeben",Unmute:Unmute$b,Unpin:Unpin$b,"Unread messages":"Ungelesene Nachrichten","Upload type: \"{{ type }}\" is not allowed":"Upload-Typ: \"{{ type }}\" ist nicht erlaubt","User uploaded content":"Benutzer hochgeladenen Inhalts","Wait until all attachments have uploaded":"Bitte warten, bis alle Anhänge hochgeladen wurden","You have no channels currently":"Du hast momentan noch keinen Channels","You've reached the maximum number of files":"Die maximale Dateianzahl ist erreicht","aria/Attachment":"Anhang","aria/Cancel Reply":"Antwort abbrechen","aria/Cancel upload":"Upload abbrechen","aria/Channel list":"Kanalliste","aria/Channel search results":"Kanalsuchergebnisse","aria/Close thread":"Thread schließen","aria/Emoji picker":"Emoji-Auswahl","aria/File input":"Dateieingabe","aria/File upload":"Datei hochladen","aria/Image input":"Bildeingabe","aria/Load More Channels":"Mehr Kanäle laden","aria/Menu":"Menü","aria/Message Options":"Nachrichtenoptionen","aria/Open Message Actions Menu":"Nachrichtenaktionsmenü öffnen","aria/Open Reaction Selector":"Reaktionsauswahl öffnen","aria/Open Thread":"Thread öffnen","aria/Reaction list":"Reaktionsliste","aria/Retry upload":"Upload erneut versuchen","aria/Send":"Senden","ban-command-args":"[@Benutzername] [Text]","ban-command-description":"Einen Benutzer verbannen","giphy-command-args":"[Text]","giphy-command-description":"Poste ein zufälliges Gif in den Kanal",live:live$b,"mute-command-args":"[@Benutzername]","mute-command-description":"Stummschalten eines Benutzers",replyCount_one:replyCount_one$b,replyCount_other:replyCount_other$b,searchResultsCount_one:searchResultsCount_one$b,searchResultsCount_other:searchResultsCount_other$b,"this content could not be displayed":"Dieser Inhalt konnte nicht angezeigt werden","unban-command-args":"[@Benutzername]","unban-command-description":"Einen Benutzer entbannen","unmute-command-args":"[@Benutzername]","unmute-command-description":"Stummschaltung eines Benutzers aufheben",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$9,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$b,"{{ 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","{{ user }} has been muted":"{{ user }} wurde stummgeschaltet","{{ user }} has been unmuted":"{{ user }} wurde nicht stummgeschaltet","{{ user }} is typing...":"{{ user }} tippt...","{{ users }} and more are typing...":"{{ users }} und mehr tippen...","{{ users }} and {{ user }} are typing...":"{{ users }} und {{ user }} tippen...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} ungelesen","{{count}} unread_other":"{{count}} ungelesen","🏙 Attachment...":"🏙 Anhang..."};
435
435
 
436
- var Cancel$a="Cancel";var Close$a="Close";var Delete$a="Delete";var Delivered$a="Delivered";var Flag$a="Flag";var Menu$a="Menu";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 Shuffle$a="Shuffle";var Thread$a="Thread";var Unmute$a="Unmute";var Unpin$a="Unpin";var live$a="live";var replyCount_one$a="1 reply";var replyCount_other$a="{{ count }} replies";var searchResultsCount_one$a="1 result";var searchResultsCount_other$a="{{ count }} results";var unreadMessagesSeparatorText_one$8="1 unread message";var unreadMessagesSeparatorText_other$a="{{count}} unread messages";var enTranslations = {"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,"Drag your files here":"Drag your files here","Drag your files here to add to your post":"Drag your files here to add to your post","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 fetching reactions":"Error loading reactions","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.","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 }}","Failed to jump to the first unread message":"Failed to jump to the first unread message","Failed to mark channel as read":"Failed to mark channel as read",Flag:Flag$a,"Latest Messages":"Latest Messages","Load more":"Load more","Mark as unread":"Mark as unread",Menu:Menu$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","Messages have been marked unread.":"Messages have been marked unread.",Mute:Mute$a,New:New$a,"New Messages!":"New Messages!","No chats here yet…":"No chats here yet…","No results found":"No results found","Nothing yet...":"Nothing yet...","Open emoji picker":"Open emoji picker","People matching":"People matching",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 Anyway":"Send Anyway","Send message request failed":"Send message request failed","Sending...":"Sending...",Shuffle:Shuffle$a,"Slow Mode ON":"Slow Mode ON","Some of the files will not be accepted":"Some of the files will not be accepted","This message did not meet our content guidelines":"This message did not meet our content guidelines","This message was deleted...":"This message was deleted...",Thread:Thread$a,"Type your message":"Type your message",Unmute:Unmute$a,Unpin:Unpin$a,"Unread messages":"Unread messages","Upload type: \"{{ type }}\" is not allowed":"Upload type: \"{{ type }}\" is not allowed","User uploaded content":"User uploaded content","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,replyCount_one:replyCount_one$a,replyCount_other:replyCount_other$a,searchResultsCount_one:searchResultsCount_one$a,searchResultsCount_other:searchResultsCount_other$a,"this content could not be displayed":"this content could not be displayed",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$8,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$a,"{{ 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","{{ user }} has been muted":"{{ user }} has been muted","{{ user }} has been unmuted":"{{ user }} has been unmuted","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} unread","{{count}} unread_other":"{{count}} unread","🏙 Attachment...":"🏙 Attachment..."};
436
+ var Cancel$a="Cancel";var Close$a="Close";var Delete$a="Delete";var Delivered$a="Delivered";var Flag$a="Flag";var Menu$a="Menu";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 Shuffle$a="Shuffle";var Thread$a="Thread";var Unmute$a="Unmute";var Unpin$a="Unpin";var live$a="live";var replyCount_one$a="1 reply";var replyCount_other$a="{{ count }} replies";var searchResultsCount_one$a="1 result";var searchResultsCount_other$a="{{ count }} results";var unreadMessagesSeparatorText_one$8="1 unread message";var unreadMessagesSeparatorText_other$a="{{count}} unread messages";var enTranslations = {"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,"Drag your files here":"Drag your files here","Drag your files here to add to your post":"Drag your files here to add to your post","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 fetching reactions":"Error loading reactions","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.","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 }}","Failed to jump to the first unread message":"Failed to jump to the first unread message","Failed to mark channel as read":"Failed to mark channel as read",Flag:Flag$a,"Latest Messages":"Latest Messages","Load more":"Load more","Mark as unread":"Mark as unread",Menu:Menu$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","Messages have been marked unread.":"Messages have been marked unread.",Mute:Mute$a,New:New$a,"New Messages!":"New Messages!","No chats here yet…":"No chats here yet…","No results found":"No results found","Nothing yet...":"Nothing yet...","Open emoji picker":"Open emoji picker","People matching":"People matching",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 Anyway":"Send Anyway","Send message request failed":"Send message request failed","Sending...":"Sending...",Shuffle:Shuffle$a,"Slow Mode ON":"Slow Mode ON","Some of the files will not be accepted":"Some of the files will not be accepted","This message did not meet our content guidelines":"This message did not meet our content guidelines","This message was deleted...":"This message was deleted...",Thread:Thread$a,"Type your message":"Type your message",Unmute:Unmute$a,Unpin:Unpin$a,"Unread messages":"Unread messages","Upload type: \"{{ type }}\" is not allowed":"Upload type: \"{{ type }}\" is not allowed","User uploaded content":"User uploaded content","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","aria/Attachment":"Attachment","aria/Cancel Reply":"Cancel Reply","aria/Cancel upload":"Cancel upload","aria/Channel list":"Channel list","aria/Channel search results":"Channel search results","aria/Close thread":"Close thread","aria/Emoji picker":"Emoji picker","aria/File input":"File input","aria/File upload":"File upload","aria/Image input":"Image input","aria/Load More Channels":"Load More Channels","aria/Menu":"Menu","aria/Message Options":"Message Options","aria/Open Message Actions Menu":"Open Message Actions Menu","aria/Open Reaction Selector":"Open Reaction Selector","aria/Open Thread":"Open Thread","aria/Reaction list":"Reaction list","aria/Retry upload":"Retry upload","aria/Send":"Send",live:live$a,replyCount_one:replyCount_one$a,replyCount_other:replyCount_other$a,searchResultsCount_one:searchResultsCount_one$a,searchResultsCount_other:searchResultsCount_other$a,"this content could not be displayed":"this content could not be displayed",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$8,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$a,"{{ 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","{{ user }} has been muted":"{{ user }} has been muted","{{ user }} has been unmuted":"{{ user }} has been unmuted","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} unread","{{count}} unread_other":"{{count}} unread","🏙 Attachment...":"🏙 Attachment..."};
437
437
 
438
- var Cancel$9="Cancelar";var Close$9="Cerca";var Delete$9="Borrar";var Delivered$9="Entregado";var Flag$9="Bandera";var Menu$9="Menú";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 Shuffle$9="Mezclar";var Thread$9="Hilo";var Unmute$9="Activar sonido";var Unpin$9="Desprender";var live$9="En Vivo";var replyCount_many$4="{{ count }} respuestas";var replyCount_one$9="1 respuesta";var replyCount_other$9="{{ count }} respuestas";var searchResultsCount_many$4="{{ count }} resultados";var searchResultsCount_one$9="1 resultado";var searchResultsCount_other$9="{{ count }} resultados";var unreadMessagesSeparatorText_many$4="{{count}} mensajes no leídos";var unreadMessagesSeparatorText_one$7="1 mensaje no leído";var unreadMessagesSeparatorText_other$9="{{count}} mensajes no leídos";var esTranslations = {"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,"Drag your files here":"Arrastra tus archivos aquí","Drag your files here to add to your post":"Arrastra tus archivos aquí para agregarlos a tu publicación","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 fetching reactions":"Error al cargar las reacciones","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Error al marcar el mensaje como no leído. No se pueden marcar mensajes no leídos más antiguos que los últimos 100 mensajes del canal.","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 }}","Failed to jump to the first unread message":"Error al saltar al primer mensaje no leído","Failed to mark channel as read":"Error al marcar el canal como leído",Flag:Flag$9,"Latest Messages":"Últimos mensajes","Load more":"Cargar más","Mark as unread":"Marcar como no leído",Menu:Menu$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","Messages have been marked unread.":"Los mensajes han sido marcados como no leídos.",Mute:Mute$9,New:New$9,"New Messages!":"¡Nuevos mensajes!","No chats here yet…":"Aún no hay mensajes aquí...","No results found":"No se han encontrado resultados","Nothing yet...":"Nada aún...","Open emoji picker":"Selector de emoji abierto","People matching":"Personas que coinciden",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 Anyway":"Enviar de todos modos","Send message request failed":"Error al enviar la solicitud de mensaje","Sending...":"Enviando...",Shuffle:Shuffle$9,"Slow Mode ON":"Modo lento activado","Some of the files will not be accepted":"Algunos de los archivos no serán aceptados","This message did not meet our content guidelines":"Este mensaje no cumple nuestras directrices de contenido","This message was deleted...":"Este mensaje fue eliminado ...",Thread:Thread$9,"Type your message":"Escribe tu mensaje",Unmute:Unmute$9,Unpin:Unpin$9,"Unread messages":"Mensajes no leídos","Upload type: \"{{ type }}\" is not allowed":"Tipo de carga: \"{{ type }}\" no está permitido","User uploaded content":"Contenido subido por el usuario","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","ban-command-args":"[@usuario] [texto]","ban-command-description":"Prohibir a un usuario","giphy-command-args":"[texto]","giphy-command-description":"Publicar un gif aleatorio en el canal",live:live$9,"mute-command-args":"[@usuario]","mute-command-description":"Silenciar a un usuario",replyCount_many:replyCount_many$4,replyCount_one:replyCount_one$9,replyCount_other:replyCount_other$9,searchResultsCount_many:searchResultsCount_many$4,searchResultsCount_one:searchResultsCount_one$9,searchResultsCount_other:searchResultsCount_other$9,"this content could not be displayed":"este contenido no se pudo mostrar","unban-command-args":"[@usuario]","unban-command-description":"Quitar la prohibición a un usuario","unmute-command-args":"[@usuario]","unmute-command-description":"Anular el silencio de un usuario",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$4,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$7,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$9,"{{ 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","{{ user }} has been muted":"{{ user }} ha sido silenciado","{{ user }} has been unmuted":"{{ user }} se ha desactivado","{{ user }} is typing...":"{{ user }} está escribiendo...","{{ users }} and more are typing...":"{{ users }} y más están escribiendo...","{{ users }} and {{ user }} are typing...":"{{ users }} y {{ user }} están escribiendo...","{{ watcherCount }} online":"{{ watcherCount }} en línea","{{count}} unread_many":"{{count}} no leídos","{{count}} unread_one":"{{count}} no leído","{{count}} unread_other":"{{count}} no leídos","🏙 Attachment...":"🏙 Adjunto..."};
438
+ var Cancel$9="Cancelar";var Close$9="Cerca";var Delete$9="Borrar";var Delivered$9="Entregado";var Flag$9="Bandera";var Menu$9="Menú";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 Shuffle$9="Mezclar";var Thread$9="Hilo";var Unmute$9="Activar sonido";var Unpin$9="Desprender";var live$9="En Vivo";var replyCount_many$4="{{ count }} respuestas";var replyCount_one$9="1 respuesta";var replyCount_other$9="{{ count }} respuestas";var searchResultsCount_many$4="{{ count }} resultados";var searchResultsCount_one$9="1 resultado";var searchResultsCount_other$9="{{ count }} resultados";var unreadMessagesSeparatorText_many$4="{{count}} mensajes no leídos";var unreadMessagesSeparatorText_one$7="1 mensaje no leído";var unreadMessagesSeparatorText_other$9="{{count}} mensajes no leídos";var esTranslations = {"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,"Drag your files here":"Arrastra tus archivos aquí","Drag your files here to add to your post":"Arrastra tus archivos aquí para agregarlos a tu publicación","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 fetching reactions":"Error al cargar las reacciones","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Error al marcar el mensaje como no leído. No se pueden marcar mensajes no leídos más antiguos que los últimos 100 mensajes del canal.","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 }}","Failed to jump to the first unread message":"Error al saltar al primer mensaje no leído","Failed to mark channel as read":"Error al marcar el canal como leído",Flag:Flag$9,"Latest Messages":"Últimos mensajes","Load more":"Cargar más","Mark as unread":"Marcar como no leído",Menu:Menu$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","Messages have been marked unread.":"Los mensajes han sido marcados como no leídos.",Mute:Mute$9,New:New$9,"New Messages!":"¡Nuevos mensajes!","No chats here yet…":"Aún no hay mensajes aquí...","No results found":"No se han encontrado resultados","Nothing yet...":"Nada aún...","Open emoji picker":"Selector de emoji abierto","People matching":"Personas que coinciden",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 Anyway":"Enviar de todos modos","Send message request failed":"Error al enviar la solicitud de mensaje","Sending...":"Enviando...",Shuffle:Shuffle$9,"Slow Mode ON":"Modo lento activado","Some of the files will not be accepted":"Algunos de los archivos no serán aceptados","This message did not meet our content guidelines":"Este mensaje no cumple nuestras directrices de contenido","This message was deleted...":"Este mensaje fue eliminado ...",Thread:Thread$9,"Type your message":"Escribe tu mensaje",Unmute:Unmute$9,Unpin:Unpin$9,"Unread messages":"Mensajes no leídos","Upload type: \"{{ type }}\" is not allowed":"Tipo de carga: \"{{ type }}\" no está permitido","User uploaded content":"Contenido subido por el usuario","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","aria/Attachment":"Adjunto","aria/Cancel Reply":"Cancelar respuesta","aria/Cancel upload":"Cancelar carga","aria/Channel list":"Lista de canales","aria/Channel search results":"Resultados de búsqueda de canales","aria/Close thread":"Cerrar hilo","aria/Emoji picker":"Selector de emojis","aria/File input":"Entrada de archivo","aria/File upload":"Carga de archivo","aria/Image input":"Entrada de imagen","aria/Load More Channels":"Cargar más canales","aria/Menu":"Menú","aria/Message Options":"Opciones de mensaje","aria/Open Message Actions Menu":"Abrir menú de acciones de mensaje","aria/Open Reaction Selector":"Abrir selector de reacción","aria/Open Thread":"Abrir hilo","aria/Reaction list":"Lista de reacciones","aria/Retry upload":"Reintentar carga","aria/Send":"Enviar","ban-command-args":"[@usuario] [texto]","ban-command-description":"Prohibir a un usuario","giphy-command-args":"[texto]","giphy-command-description":"Publicar un gif aleatorio en el canal",live:live$9,"mute-command-args":"[@usuario]","mute-command-description":"Silenciar a un usuario",replyCount_many:replyCount_many$4,replyCount_one:replyCount_one$9,replyCount_other:replyCount_other$9,searchResultsCount_many:searchResultsCount_many$4,searchResultsCount_one:searchResultsCount_one$9,searchResultsCount_other:searchResultsCount_other$9,"this content could not be displayed":"este contenido no se pudo mostrar","unban-command-args":"[@usuario]","unban-command-description":"Quitar la prohibición a un usuario","unmute-command-args":"[@usuario]","unmute-command-description":"Anular el silencio de un usuario",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$4,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$7,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$9,"{{ 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","{{ user }} has been muted":"{{ user }} ha sido silenciado","{{ user }} has been unmuted":"{{ user }} se ha desactivado","{{ user }} is typing...":"{{ user }} está escribiendo...","{{ users }} and more are typing...":"{{ users }} y más están escribiendo...","{{ users }} and {{ user }} are typing...":"{{ users }} y {{ user }} están escribiendo...","{{ watcherCount }} online":"{{ watcherCount }} en línea","{{count}} unread_many":"{{count}} no leídos","{{count}} unread_one":"{{count}} no leído","{{count}} unread_other":"{{count}} no leídos","🏙 Attachment...":"🏙 Adjunto..."};
439
439
 
440
- var Cancel$8="Annuler";var Close$8="Fermer";var Delete$8="Supprimer";var Delivered$8="Publié";var Flag$8="Signaler";var Menu$8="Menu";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 Shuffle$8="Mélanger";var Thread$8="Fil de discussion";var Unmute$8="Désactiver muet";var Unpin$8="Détacher";var live$8="en direct";var replyCount_many$3="{{ count }} réponses";var replyCount_one$8="1 réponse";var replyCount_other$8="{{ count }} réponses";var searchResultsCount_many$3="{{ count }} résultats";var searchResultsCount_one$8="1 résultat";var searchResultsCount_other$8="{{ count }} résultats";var unreadMessagesSeparatorText_many$3="{{count}} messages non lus";var unreadMessagesSeparatorText_one$6="1 message non lu";var unreadMessagesSeparatorText_other$8="{{count}} messages non lus";var frTranslations = {"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,"Drag your files here":"Glissez vos fichiers ici","Drag your files here to add to your post":"Glissez vos fichiers ici pour les ajouter à votre publication","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 fetching reactions":"Erreur de chargement des réactions","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Erreur lors de la marque du message comme non lu. Impossible de marquer des messages non lus plus anciens que les 100 derniers messages du canal.","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 }}","Failed to jump to the first unread message":"Échec de saut vers le premier message non lu","Failed to mark channel as read":"Échec de la marque du canal comme lu",Flag:Flag$8,"Latest Messages":"Derniers messages","Load more":"Charger plus","Mark as unread":"Marquer comme non lu",Menu:Menu$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é","Messages have been marked unread.":"Les messages ont été marqués comme non lus.",Mute:Mute$8,New:New$8,"New Messages!":"Nouveaux Messages!","No chats here yet…":"Pas encore de messages ici...","No results found":"Aucun résultat trouvé","Nothing yet...":"Aucun message...","Open emoji picker":"Ouvrez le sélecteur d'emoji","People matching":"Correspondance de personnes",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 Anyway":"Envoyer quand même","Send message request failed":"Échec de la demande d'envoi de message","Sending...":"Envoi en cours...",Shuffle:Shuffle$8,"Slow Mode ON":"Mode lent activé","Some of the files will not be accepted":"Certains fichiers ne seront pas acceptés","This message did not meet our content guidelines":"Ce message n'est pas conforme à nos lignes directrices en matière de contenu","This message was deleted...":"Ce message a été supprimé...",Thread:Thread$8,"Type your message":"Saisissez votre message",Unmute:Unmute$8,Unpin:Unpin$8,"Unread messages":"Messages non lus","Upload type: \"{{ type }}\" is not allowed":"Le type de téléchargement: \"{{ type }}\" n'est pas autorisé","User uploaded content":"Contenu téléchargé par l'utilisateur","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","ban-command-args":"[@nomdutilisateur] [texte]","ban-command-description":"Bannir un utilisateur","giphy-command-args":"[texte]","giphy-command-description":"Poster un GIF aléatoire dans le canal",live:live$8,"mute-command-args":"[@nomdutilisateur]","mute-command-description":"Muter un utilisateur",replyCount_many:replyCount_many$3,replyCount_one:replyCount_one$8,replyCount_other:replyCount_other$8,searchResultsCount_many:searchResultsCount_many$3,searchResultsCount_one:searchResultsCount_one$8,searchResultsCount_other:searchResultsCount_other$8,"this content could not be displayed":"ce contenu n'a pu être affiché","unban-command-args":"[@nomdutilisateur]","unban-command-description":"Débannir un utilisateur","unmute-command-args":"[@nomdutilisateur]","unmute-command-description":"Démuter un utilisateur",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$3,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$6,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$8,"{{ 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","{{ user }} has been muted":"{{ user }} a été mis en sourdine","{{ user }} has been unmuted":"{{ user }} n'est plus en sourdine","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} en ligne","{{count}} unread_many":"{{count}} non lus","{{count}} unread_one":"{{count}} non lu","{{count}} unread_other":"{{count}} non lus","🏙 Attachment...":"🏙 Pièce jointe..."};
440
+ var Cancel$8="Annuler";var Close$8="Fermer";var Delete$8="Supprimer";var Delivered$8="Publié";var Flag$8="Signaler";var Menu$8="Menu";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 Shuffle$8="Mélanger";var Thread$8="Fil de discussion";var Unmute$8="Désactiver muet";var Unpin$8="Détacher";var live$8="en direct";var replyCount_many$3="{{ count }} réponses";var replyCount_one$8="1 réponse";var replyCount_other$8="{{ count }} réponses";var searchResultsCount_many$3="{{ count }} résultats";var searchResultsCount_one$8="1 résultat";var searchResultsCount_other$8="{{ count }} résultats";var unreadMessagesSeparatorText_many$3="{{count}} messages non lus";var unreadMessagesSeparatorText_one$6="1 message non lu";var unreadMessagesSeparatorText_other$8="{{count}} messages non lus";var frTranslations = {"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,"Drag your files here":"Glissez vos fichiers ici","Drag your files here to add to your post":"Glissez vos fichiers ici pour les ajouter à votre publication","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 fetching reactions":"Erreur de chargement des réactions","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Erreur lors de la marque du message comme non lu. Impossible de marquer des messages non lus plus anciens que les 100 derniers messages du canal.","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 }}","Failed to jump to the first unread message":"Échec de saut vers le premier message non lu","Failed to mark channel as read":"Échec de la marque du canal comme lu",Flag:Flag$8,"Latest Messages":"Derniers messages","Load more":"Charger plus","Mark as unread":"Marquer comme non lu",Menu:Menu$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é","Messages have been marked unread.":"Les messages ont été marqués comme non lus.",Mute:Mute$8,New:New$8,"New Messages!":"Nouveaux Messages!","No chats here yet…":"Pas encore de messages ici...","No results found":"Aucun résultat trouvé","Nothing yet...":"Aucun message...","Open emoji picker":"Ouvrez le sélecteur d'emoji","People matching":"Correspondance de personnes",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 Anyway":"Envoyer quand même","Send message request failed":"Échec de la demande d'envoi de message","Sending...":"Envoi en cours...",Shuffle:Shuffle$8,"Slow Mode ON":"Mode lent activé","Some of the files will not be accepted":"Certains fichiers ne seront pas acceptés","This message did not meet our content guidelines":"Ce message n'est pas conforme à nos lignes directrices en matière de contenu","This message was deleted...":"Ce message a été supprimé...",Thread:Thread$8,"Type your message":"Saisissez votre message",Unmute:Unmute$8,Unpin:Unpin$8,"Unread messages":"Messages non lus","Upload type: \"{{ type }}\" is not allowed":"Le type de téléchargement: \"{{ type }}\" n'est pas autorisé","User uploaded content":"Contenu téléchargé par l'utilisateur","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","aria/Attachment":"Pièce jointe","aria/Cancel Reply":"Annuler la réponse","aria/Cancel upload":"Annuler le téléchargement","aria/Channel list":"Liste des canaux","aria/Channel search results":"Résultats de la recherche de canaux","aria/Close thread":"Fermer le fil","aria/Emoji picker":"Sélecteur d'émojis","aria/File input":"Entrée de fichier","aria/File upload":"Téléchargement de fichier","aria/Image input":"Entrée d'image","aria/Load More Channels":"Charger plus de canaux","aria/Menu":"Menu","aria/Message Options":"Options de message","aria/Open Message Actions Menu":"Ouvrir le menu des actions de message","aria/Open Reaction Selector":"Ouvrir le sélecteur de réaction","aria/Open Thread":"Ouvrir le fil","aria/Reaction list":"Liste des réactions","aria/Retry upload":"Réessayer le téléchargement","aria/Send":"Envoyer","ban-command-args":"[@nomdutilisateur] [texte]","ban-command-description":"Bannir un utilisateur","giphy-command-args":"[texte]","giphy-command-description":"Poster un GIF aléatoire dans le canal",live:live$8,"mute-command-args":"[@nomdutilisateur]","mute-command-description":"Muter un utilisateur",replyCount_many:replyCount_many$3,replyCount_one:replyCount_one$8,replyCount_other:replyCount_other$8,searchResultsCount_many:searchResultsCount_many$3,searchResultsCount_one:searchResultsCount_one$8,searchResultsCount_other:searchResultsCount_other$8,"this content could not be displayed":"ce contenu n'a pu être affiché","unban-command-args":"[@nomdutilisateur]","unban-command-description":"Débannir un utilisateur","unmute-command-args":"[@nomdutilisateur]","unmute-command-description":"Démuter un utilisateur",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$3,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$6,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$8,"{{ 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","{{ user }} has been muted":"{{ user }} a été mis en sourdine","{{ user }} has been unmuted":"{{ user }} n'est plus en sourdine","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} en ligne","{{count}} unread_many":"{{count}} non lus","{{count}} unread_one":"{{count}} non lu","{{count}} unread_other":"{{count}} non lus","🏙 Attachment...":"🏙 Pièce jointe..."};
441
441
 
442
- var Cancel$7="रद्द करें";var Close$7="बंद करे";var Delete$7="डिलीट";var Delivered$7="पहुंच गया";var Flag$7="फ्लैग करे";var Menu$7="मेन्यू";var Mute$7="म्यूट करे";var New$7="नए";var Pin$7="पिन";var Reply$7="जवाब दे दो";var Search$7="खोज";var Send$7="भेजे";var Shuffle$7="मिश्रित करें";var Thread$7="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var replyCount_one$7="1 रिप्लाई";var replyCount_other$7="{{ count }} रिप्लाई";var searchResultsCount_one$7="1 परिणाम";var searchResultsCount_other$7="{{ count }} परिणाम";var unreadMessagesSeparatorText_one$5="1 अपठित संदेश";var unreadMessagesSeparatorText_other$7="{{count}} अपठित संदेश";var hiTranslations = {"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,"Drag your files here":"अपनी फ़ाइलें यहाँ खींचें","Drag your files here to add to your post":"अपनी फ़ाइलें यहाँ खींचें और अपने पोस्ट में जोड़ने के लिए","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 fetching reactions":"प्रतिक्रियाएँ लोड करने में त्रुटि","Error marking message unread":"संदेश को अपठित चिह्नित करने में त्रुटि","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"संदेश को अपठित मार्क करने में त्रुटि। सबसे नए 100 चैनल संदेश से पहले के सभी अपठित संदेशों को अपठित मार्क नहीं किया जा सकता है।","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 }}","Failed to jump to the first unread message":"पहले अपठित संदेश पर जाने में विफल","Failed to mark channel as read":"चैनल को पढ़ा हुआ चिह्नित करने में विफल।",Flag:Flag$7,"Latest Messages":"नवीनतम संदेश","Load more":"और लोड करें","Mark as unread":"अपठित चिह्नित करें",Menu:Menu$7,"Message Failed · Click to try again":"मैसेज फ़ैल - पुनः कोशिश करें","Message Failed · Unauthorized":"मैसेज फ़ैल - अनधिकृत","Message deleted":"मैसेज हटा दिया गया","Message has been successfully flagged":"मैसेज को फ्लैग कर दिया गया है","Message pinned":"संदेश पिन किया गया","Messages have been marked unread.":"संदेशों को अपठित चिह्नित किया गया है।",Mute:Mute$7,New:New$7,"New Messages!":"नए मैसेज!","No chats here yet…":"यहां अभी तक कोई चैट नहीं...","No results found":"कोई परिणाम नहीं मिला","Nothing yet...":"कोई मैसेज नहीं है","Open emoji picker":"इमोजी पिकर खोलिये","People matching":"मेल खाते लोग",Pin:Pin$7,"Pinned by":"द्वारा पिन किया गया",Reply:Reply$7,"Reply to Message":"संदेश का जवाब दें",Search:Search$7,"Searching...":"खोज कर...",Send:Send$7,"Send Anyway":"वैसे भी भेजें","Send message request failed":"संदेश भेजने का अनुरोध विफल रहा","Sending...":"भेजा जा रहा है",Shuffle:Shuffle$7,"Slow Mode ON":"स्लो मोड ऑन","Some of the files will not be accepted":"कुछ फ़ाइलें स्वीकार नहीं की जाएंगी","This message did not meet our content guidelines":"यह संदेश हमारे सामग्री दिशानिर्देशों के अनुरूप नहीं था","This message was deleted...":"मैसेज हटा दिया गया",Thread:Thread$7,"Type your message":"अपना मैसेज लिखे",Unmute:Unmute$7,Unpin:Unpin$7,"Unread messages":"अपठित संदेश","Upload type: \"{{ type }}\" is not allowed":"अपलोड प्रकार: \"{{ type }}\" की अनुमति नहीं है","User uploaded content":"उपयोगकर्ता अपलोड की गई सामग्री","Wait until all attachments have uploaded":"सभी अटैचमेंट अपलोड होने तक प्रतीक्षा करें","You have no channels currently":"आपके पास कोई चैनल नहीं है","You've reached the maximum number of files":"आप अधिकतम फ़ाइलों तक पहुँच गए हैं","ban-command-args":"[@उपयोगकर्तनाम] [पाठ]","ban-command-description":"एक उपयोगकर्ता को प्रतिषेधित करें","giphy-command-args":"[पाठ]","giphy-command-description":"चैनल पर एक क्रॉफिल जीआइएफ पोस्ट करें",live:live$7,"mute-command-args":"[@उपयोगकर्तनाम]","mute-command-description":"एक उपयोगकर्ता को म्यूट करें",replyCount_one:replyCount_one$7,replyCount_other:replyCount_other$7,searchResultsCount_one:searchResultsCount_one$7,searchResultsCount_other:searchResultsCount_other$7,"this content could not be displayed":"यह कॉन्टेंट लोड नहीं हो पाया","unban-command-args":"[@उपयोगकर्तनाम]","unban-command-description":"एक उपयोगकर्ता को प्रतिषेध से मुक्त करें","unmute-command-args":"[@उपयोगकर्तनाम]","unmute-command-description":"एक उपयोगकर्ता को अनम्यूट करें",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$5,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$7,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} और {{ moreCount }} और","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} और {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} और {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} और","{{ memberCount }} members":"{{ memberCount }} मेंबर्स","{{ user }} has been muted":"{{ user }} को म्यूट कर दिया गया है","{{ user }} has been unmuted":"{{ user }} को अनम्यूट कर दिया गया है","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} अपठित","{{count}} unread_other":"{{count}} अपठित","🏙 Attachment...":"🏙 अटैचमेंट"};
442
+ var Cancel$7="रद्द करें";var Close$7="बंद करे";var Delete$7="डिलीट";var Delivered$7="पहुंच गया";var Flag$7="फ्लैग करे";var Menu$7="मेन्यू";var Mute$7="म्यूट करे";var New$7="नए";var Pin$7="पिन";var Reply$7="जवाब दे दो";var Search$7="खोज";var Send$7="भेजे";var Shuffle$7="मिश्रित करें";var Thread$7="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var replyCount_one$7="1 रिप्लाई";var replyCount_other$7="{{ count }} रिप्लाई";var searchResultsCount_one$7="1 परिणाम";var searchResultsCount_other$7="{{ count }} परिणाम";var unreadMessagesSeparatorText_one$5="1 अपठित संदेश";var unreadMessagesSeparatorText_other$7="{{count}} अपठित संदेश";var hiTranslations = {"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,"Drag your files here":"अपनी फ़ाइलें यहाँ खींचें","Drag your files here to add to your post":"अपनी फ़ाइलें यहाँ खींचें और अपने पोस्ट में जोड़ने के लिए","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 fetching reactions":"प्रतिक्रियाएँ लोड करने में त्रुटि","Error marking message unread":"संदेश को अपठित चिह्नित करने में त्रुटि","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"संदेश को अपठित मार्क करने में त्रुटि। सबसे नए 100 चैनल संदेश से पहले के सभी अपठित संदेशों को अपठित मार्क नहीं किया जा सकता है।","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 }}","Failed to jump to the first unread message":"पहले अपठित संदेश पर जाने में विफल","Failed to mark channel as read":"चैनल को पढ़ा हुआ चिह्नित करने में विफल।",Flag:Flag$7,"Latest Messages":"नवीनतम संदेश","Load more":"और लोड करें","Mark as unread":"अपठित चिह्नित करें",Menu:Menu$7,"Message Failed · Click to try again":"मैसेज फ़ैल - पुनः कोशिश करें","Message Failed · Unauthorized":"मैसेज फ़ैल - अनधिकृत","Message deleted":"मैसेज हटा दिया गया","Message has been successfully flagged":"मैसेज को फ्लैग कर दिया गया है","Message pinned":"संदेश पिन किया गया","Messages have been marked unread.":"संदेशों को अपठित चिह्नित किया गया है।",Mute:Mute$7,New:New$7,"New Messages!":"नए मैसेज!","No chats here yet…":"यहां अभी तक कोई चैट नहीं...","No results found":"कोई परिणाम नहीं मिला","Nothing yet...":"कोई मैसेज नहीं है","Open emoji picker":"इमोजी पिकर खोलिये","People matching":"मेल खाते लोग",Pin:Pin$7,"Pinned by":"द्वारा पिन किया गया",Reply:Reply$7,"Reply to Message":"संदेश का जवाब दें",Search:Search$7,"Searching...":"खोज कर...",Send:Send$7,"Send Anyway":"वैसे भी भेजें","Send message request failed":"संदेश भेजने का अनुरोध विफल रहा","Sending...":"भेजा जा रहा है",Shuffle:Shuffle$7,"Slow Mode ON":"स्लो मोड ऑन","Some of the files will not be accepted":"कुछ फ़ाइलें स्वीकार नहीं की जाएंगी","This message did not meet our content guidelines":"यह संदेश हमारे सामग्री दिशानिर्देशों के अनुरूप नहीं था","This message was deleted...":"मैसेज हटा दिया गया",Thread:Thread$7,"Type your message":"अपना मैसेज लिखे",Unmute:Unmute$7,Unpin:Unpin$7,"Unread messages":"अपठित संदेश","Upload type: \"{{ type }}\" is not allowed":"अपलोड प्रकार: \"{{ type }}\" की अनुमति नहीं है","User uploaded content":"उपयोगकर्ता अपलोड की गई सामग्री","Wait until all attachments have uploaded":"सभी अटैचमेंट अपलोड होने तक प्रतीक्षा करें","You have no channels currently":"आपके पास कोई चैनल नहीं है","You've reached the maximum number of files":"आप अधिकतम फ़ाइलों तक पहुँच गए हैं","aria/Attachment":"अनुलग्नक","aria/Cancel Reply":"उत्तर रद्द करें","aria/Cancel upload":"अपलोड रद्द करें","aria/Channel list":"चैनल सूची","aria/Channel search results":"चैनल खोज परिणाम","aria/Close thread":"थ्रेड बंद करें","aria/Emoji picker":"इमोजी चुनने वाला","aria/File input":"फ़ाइल इनपुट","aria/File upload":"फ़ाइल अपलोड","aria/Image input":"छवि इनपुट","aria/Load More Channels":"और चैनल लोड करें","aria/Menu":"मेन्यू","aria/Message Options":"संदेश विकल्प","aria/Open Message Actions Menu":"संदेश क्रिया मेन्यू खोलें","aria/Open Reaction Selector":"प्रतिक्रिया चयनकर्ता खोलें","aria/Open Thread":"थ्रेड खोलें","aria/Reaction list":"प्रतिक्रिया सूची","aria/Retry upload":"अपलोड पुनः प्रयास करें","aria/Send":"भेजें","ban-command-args":"[@उपयोगकर्तनाम] [पाठ]","ban-command-description":"एक उपयोगकर्ता को प्रतिषेधित करें","giphy-command-args":"[पाठ]","giphy-command-description":"चैनल पर एक क्रॉफिल जीआइएफ पोस्ट करें",live:live$7,"mute-command-args":"[@उपयोगकर्तनाम]","mute-command-description":"एक उपयोगकर्ता को म्यूट करें",replyCount_one:replyCount_one$7,replyCount_other:replyCount_other$7,searchResultsCount_one:searchResultsCount_one$7,searchResultsCount_other:searchResultsCount_other$7,"this content could not be displayed":"यह कॉन्टेंट लोड नहीं हो पाया","unban-command-args":"[@उपयोगकर्तनाम]","unban-command-description":"एक उपयोगकर्ता को प्रतिषेध से मुक्त करें","unmute-command-args":"[@उपयोगकर्तनाम]","unmute-command-description":"एक उपयोगकर्ता को अनम्यूट करें",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$5,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$7,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} और {{ moreCount }} और","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} और {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} और {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} और","{{ memberCount }} members":"{{ memberCount }} मेंबर्स","{{ user }} has been muted":"{{ user }} को म्यूट कर दिया गया है","{{ user }} has been unmuted":"{{ user }} को अनम्यूट कर दिया गया है","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} अपठित","{{count}} unread_other":"{{count}} अपठित","🏙 Attachment...":"🏙 अटैचमेंट"};
443
443
 
444
- var Cancel$6="Annulla";var Close$6="Chiudi";var Delete$6="Cancella";var Delivered$6="Consegnato";var Flag$6="Segnala";var Menu$6="Menù";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 Shuffle$6="Mescolare";var Thread$6="Thread";var Unmute$6="Riattiva le notifiche";var Unpin$6="Sblocca";var live$6="live";var replyCount_many$2="{{ count }} risposte";var replyCount_one$6="Una risposta";var replyCount_other$6="{{ count }} risposte";var searchResultsCount_many$2="{{ count }} risultati";var searchResultsCount_one$6="1 risultato";var searchResultsCount_other$6="{{ count }} risultati";var unreadMessagesSeparatorText_many$2="{{count}} messaggi non letti";var unreadMessagesSeparatorText_one$4="1 messaggio non letto";var unreadMessagesSeparatorText_other$6="{{count}} messaggi non letti";var itTranslations = {"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,"Drag your files here":"Trascina i tuoi file qui","Drag your files here to add to your post":"Trascina i tuoi file qui per aggiungerli al tuo post","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 fetching reactions":"Errore nel caricamento delle reazioni","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Errore durante la marcatura del messaggio come non letto. Impossibile marcare messaggi non letti più vecchi dei più recenti 100 messaggi del canale.","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 }}","Failed to jump to the first unread message":"Impossibile passare al primo messaggio non letto","Failed to mark channel as read":"Impossibile contrassegnare il canale come letto",Flag:Flag$6,"Latest Messages":"Ultimi messaggi","Load more":"Carica di più","Mark as unread":"Contrassegna come non letto",Menu:Menu$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","Messages have been marked unread.":"I messaggi sono stati contrassegnati come non letti.",Mute:Mute$6,New:New$6,"New Messages!":"Nuovo messaggio!","No chats here yet…":"Non ci sono ancora messaggi qui...","No results found":"Nessun risultato trovato","Nothing yet...":"Ancora niente...","Open emoji picker":"Apri il selettore dellle emoji","People matching":"Persone che corrispondono",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 Anyway":"Invia comunque","Send message request failed":"Invia messaggio di richiesta non riuscito","Sending...":"Invio in corso...",Shuffle:Shuffle$6,"Slow Mode ON":"Modalità lenta attivata","Some of the files will not be accepted":"Alcuni dei file non saranno accettati","This message did not meet our content guidelines":"Questo messaggio non soddisfa le nostre linee guida sui contenuti","This message was deleted...":"Questo messaggio é stato cancellato",Thread:Thread$6,"Type your message":"Scrivi il tuo messaggio",Unmute:Unmute$6,Unpin:Unpin$6,"Unread messages":"Messaggi non letti","Upload type: \"{{ type }}\" is not allowed":"Tipo di caricamento: \"{{ type }}\" non è consentito","User uploaded content":"Contenuto caricato dall'utente","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","ban-command-args":"[@nomeutente] [testo]","ban-command-description":"Vietare un utente","giphy-command-args":"[testo]","giphy-command-description":"Pubblica un gif casuale sul canale",live:live$6,"mute-command-args":"[@nomeutente]","mute-command-description":"Silenzia un utente",replyCount_many:replyCount_many$2,replyCount_one:replyCount_one$6,replyCount_other:replyCount_other$6,searchResultsCount_many:searchResultsCount_many$2,searchResultsCount_one:searchResultsCount_one$6,searchResultsCount_other:searchResultsCount_other$6,"this content could not be displayed":"questo contenuto non puó essere mostrato","unban-command-args":"[@nomeutente]","unban-command-description":"Togliere il divieto a un utente","unmute-command-args":"[@nomeutente]","unmute-command-description":"Togliere il silenzio a un utente",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$2,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$4,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$6,"{{ 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","{{ user }} has been muted":"{{ user }} é stato silenziato","{{ user }} has been unmuted":"Notifiche riattivate per {{ user }}","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_many":"{{count}} non letti","{{count}} unread_one":"{{count}} non letto","{{count}} unread_other":"{{count}} non letti","🏙 Attachment...":"🏙 Allegato..."};
444
+ var Cancel$6="Annulla";var Close$6="Chiudi";var Delete$6="Cancella";var Delivered$6="Consegnato";var Flag$6="Segnala";var Menu$6="Menù";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 Shuffle$6="Mescolare";var Thread$6="Thread";var Unmute$6="Riattiva le notifiche";var Unpin$6="Sblocca";var live$6="live";var replyCount_many$2="{{ count }} risposte";var replyCount_one$6="Una risposta";var replyCount_other$6="{{ count }} risposte";var searchResultsCount_many$2="{{ count }} risultati";var searchResultsCount_one$6="1 risultato";var searchResultsCount_other$6="{{ count }} risultati";var unreadMessagesSeparatorText_many$2="{{count}} messaggi non letti";var unreadMessagesSeparatorText_one$4="1 messaggio non letto";var unreadMessagesSeparatorText_other$6="{{count}} messaggi non letti";var itTranslations = {"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,"Drag your files here":"Trascina i tuoi file qui","Drag your files here to add to your post":"Trascina i tuoi file qui per aggiungerli al tuo post","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 fetching reactions":"Errore nel caricamento delle reazioni","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Errore durante la marcatura del messaggio come non letto. Impossibile marcare messaggi non letti più vecchi dei più recenti 100 messaggi del canale.","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 }}","Failed to jump to the first unread message":"Impossibile passare al primo messaggio non letto","Failed to mark channel as read":"Impossibile contrassegnare il canale come letto",Flag:Flag$6,"Latest Messages":"Ultimi messaggi","Load more":"Carica di più","Mark as unread":"Contrassegna come non letto",Menu:Menu$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","Messages have been marked unread.":"I messaggi sono stati contrassegnati come non letti.",Mute:Mute$6,New:New$6,"New Messages!":"Nuovo messaggio!","No chats here yet…":"Non ci sono ancora messaggi qui...","No results found":"Nessun risultato trovato","Nothing yet...":"Ancora niente...","Open emoji picker":"Apri il selettore dellle emoji","People matching":"Persone che corrispondono",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 Anyway":"Invia comunque","Send message request failed":"Invia messaggio di richiesta non riuscito","Sending...":"Invio in corso...",Shuffle:Shuffle$6,"Slow Mode ON":"Modalità lenta attivata","Some of the files will not be accepted":"Alcuni dei file non saranno accettati","This message did not meet our content guidelines":"Questo messaggio non soddisfa le nostre linee guida sui contenuti","This message was deleted...":"Questo messaggio é stato cancellato",Thread:Thread$6,"Type your message":"Scrivi il tuo messaggio",Unmute:Unmute$6,Unpin:Unpin$6,"Unread messages":"Messaggi non letti","Upload type: \"{{ type }}\" is not allowed":"Tipo di caricamento: \"{{ type }}\" non è consentito","User uploaded content":"Contenuto caricato dall'utente","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","aria/Attachment":"Allegato","aria/Cancel Reply":"Annulla risposta","aria/Cancel upload":"Annulla caricamento","aria/Channel list":"Elenco dei canali","aria/Channel search results":"Risultati della ricerca dei canali","aria/Close thread":"Chiudi discussione","aria/Emoji picker":"Selettore di emoji","aria/File input":"Input di file","aria/File upload":"Caricamento di file","aria/Image input":"Input di immagine","aria/Load More Channels":"Carica altri canali","aria/Menu":"Menu","aria/Message Options":"Opzioni di messaggio","aria/Open Message Actions Menu":"Apri il menu delle azioni di messaggio","aria/Open Reaction Selector":"Apri il selettore di reazione","aria/Open Thread":"Apri discussione","aria/Reaction list":"Elenco delle reazioni","aria/Retry upload":"Riprova caricamento","aria/Send":"Invia","ban-command-args":"[@nomeutente] [testo]","ban-command-description":"Vietare un utente","giphy-command-args":"[testo]","giphy-command-description":"Pubblica un gif casuale sul canale",live:live$6,"mute-command-args":"[@nomeutente]","mute-command-description":"Silenzia un utente",replyCount_many:replyCount_many$2,replyCount_one:replyCount_one$6,replyCount_other:replyCount_other$6,searchResultsCount_many:searchResultsCount_many$2,searchResultsCount_one:searchResultsCount_one$6,searchResultsCount_other:searchResultsCount_other$6,"this content could not be displayed":"questo contenuto non puó essere mostrato","unban-command-args":"[@nomeutente]","unban-command-description":"Togliere il divieto a un utente","unmute-command-args":"[@nomeutente]","unmute-command-description":"Togliere il silenzio a un utente",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$2,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$4,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$6,"{{ 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","{{ user }} has been muted":"{{ user }} é stato silenziato","{{ user }} has been unmuted":"Notifiche riattivate per {{ user }}","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_many":"{{count}} non letti","{{count}} unread_one":"{{count}} non letto","{{count}} unread_other":"{{count}} non letti","🏙 Attachment...":"🏙 Allegato..."};
445
445
 
446
- var Cancel$5="キャンセル";var Close$5="閉める";var Delete$5="消去";var Delivered$5="配信しました";var Flag$5="フラグ";var Menu$5="メニュー";var Mute$5="無音";var New$5="新しい";var Pin$5="ピン";var Reply$5="返事";var Search$5="探す";var Send$5="送信";var Shuffle$5="シャッフル";var Thread$5="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var replyCount_one$5="1件の返信";var replyCount_other$5="{{ count }} 返信";var searchResultsCount_one$5="1件の結果";var searchResultsCount_other$5="{{ count }}件の結果";var unreadMessagesSeparatorText_other$5="未読メッセージ {{count}} 件";var jaTranslations = {"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,"Drag your files here":"ここにファイルをドラッグ","Drag your files here to add to your post":"投稿に追加するためにここにファイルをドラッグ","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 fetching reactions":"反応の読み込みエラー","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"メッセージを未読にする際にエラーが発生しました。最新の100件のチャンネルメッセージより古い未読メッセージはマークできません。","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 }}","Failed to jump to the first unread message":"最初の未読メッセージにジャンプできませんでした","Failed to mark channel as read":"チャンネルを既読にすることができませんでした",Flag:Flag$5,"Latest Messages":"最新のメッセージ","Load more":"もっと読み込む","Mark as unread":"未読としてマーク",Menu:Menu$5,"Message Failed · Click to try again":"メッセージが失敗しました · クリックして再試行してください","Message Failed · Unauthorized":"メッセージが失敗しました · 許可されていません","Message deleted":"メッセージが削除されました","Message has been successfully flagged":"メッセージに正常にフラグが付けられました","Message pinned":"メッセージにピンが付けられました","Messages have been marked unread.":"メッセージは未読としてマークされました。",Mute:Mute$5,New:New$5,"New Messages!":"新しいメッセージ!","No chats here yet…":"ここにはまだチャットはありません…","No results found":"結果が見つかりません","Nothing yet...":"まだ何もありません...","Open emoji picker":"絵文字ピッカーを開く","People matching":"一致する人",Pin:Pin$5,"Pinned by":"ピンした方",Reply:Reply$5,"Reply to Message":"メッセージに返信",Search:Search$5,"Searching...":"検索中...",Send:Send$5,"Send Anyway":"とにかく送信する","Send message request failed":"メッセージ送信リクエストが失敗しました","Sending...":"送信中...",Shuffle:Shuffle$5,"Slow Mode ON":"スローモードオン","Some of the files will not be accepted":"一部のファイルは受け付けられません","This message did not meet our content guidelines":"このメッセージはコンテンツガイドラインに適合していません","This message was deleted...":"このメッセージは削除されました...",Thread:Thread$5,"Type your message":"メッセージを入力してください",Unmute:Unmute$5,Unpin:Unpin$5,"Unread messages":"未読メッセージ","Upload type: \"{{ type }}\" is not allowed":"アップロードタイプ:\"{{ type }}\"は許可されていません","User uploaded content":"ユーザーがアップロードしたコンテンツ","Wait until all attachments have uploaded":"すべての添付ファイルがアップロードされるまでお待ちください","You have no channels currently":"現在チャンネルはありません","You've reached the maximum number of files":"ファイルの最大数に達しました","ban-command-args":"[@ユーザ名] [テキスト]","ban-command-description":"ユーザーを禁止する","giphy-command-args":"[テキスト]","giphy-command-description":"チャンネルにランダムなGIFを投稿する",live:live$5,"mute-command-args":"[@ユーザ名]","mute-command-description":"ユーザーをミュートする",replyCount_one:replyCount_one$5,replyCount_other:replyCount_other$5,searchResultsCount_one:searchResultsCount_one$5,searchResultsCount_other:searchResultsCount_other$5,"this content could not be displayed":"このコンテンツは表示できませんでした","unban-command-args":"[@ユーザ名]","unban-command-description":"ユーザーの禁止を解除する","unmute-command-args":"[@ユーザ名]","unmute-command-description":"ユーザーのミュートを解除する",unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$5,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} と {{ moreCount }} 他人","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} と {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} と {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} イメージ","{{ memberCount }} members":"{{ memberCount }} メンバー","{{ user }} has been muted":"{{ user }} 無音されています","{{ user }} has been unmuted":"{{ user }} 無音されていません","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} オンライン","{{count}} unread_other":"{{count}} 未読","🏙 Attachment...":"🏙 アタッチメント..."};
446
+ var Cancel$5="キャンセル";var Close$5="閉める";var Delete$5="消去";var Delivered$5="配信しました";var Flag$5="フラグ";var Menu$5="メニュー";var Mute$5="無音";var New$5="新しい";var Pin$5="ピン";var Reply$5="返事";var Search$5="探す";var Send$5="送信";var Shuffle$5="シャッフル";var Thread$5="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var replyCount_one$5="1件の返信";var replyCount_other$5="{{ count }} 返信";var searchResultsCount_one$5="1件の結果";var searchResultsCount_other$5="{{ count }}件の結果";var unreadMessagesSeparatorText_other$5="未読メッセージ {{count}} 件";var jaTranslations = {"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,"Drag your files here":"ここにファイルをドラッグ","Drag your files here to add to your post":"投稿に追加するためにここにファイルをドラッグ","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 fetching reactions":"反応の読み込みエラー","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"メッセージを未読にする際にエラーが発生しました。最新の100件のチャンネルメッセージより古い未読メッセージはマークできません。","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 }}","Failed to jump to the first unread message":"最初の未読メッセージにジャンプできませんでした","Failed to mark channel as read":"チャンネルを既読にすることができませんでした",Flag:Flag$5,"Latest Messages":"最新のメッセージ","Load more":"もっと読み込む","Mark as unread":"未読としてマーク",Menu:Menu$5,"Message Failed · Click to try again":"メッセージが失敗しました · クリックして再試行してください","Message Failed · Unauthorized":"メッセージが失敗しました · 許可されていません","Message deleted":"メッセージが削除されました","Message has been successfully flagged":"メッセージに正常にフラグが付けられました","Message pinned":"メッセージにピンが付けられました","Messages have been marked unread.":"メッセージは未読としてマークされました。",Mute:Mute$5,New:New$5,"New Messages!":"新しいメッセージ!","No chats here yet…":"ここにはまだチャットはありません…","No results found":"結果が見つかりません","Nothing yet...":"まだ何もありません...","Open emoji picker":"絵文字ピッカーを開く","People matching":"一致する人",Pin:Pin$5,"Pinned by":"ピンした方",Reply:Reply$5,"Reply to Message":"メッセージに返信",Search:Search$5,"Searching...":"検索中...",Send:Send$5,"Send Anyway":"とにかく送信する","Send message request failed":"メッセージ送信リクエストが失敗しました","Sending...":"送信中...",Shuffle:Shuffle$5,"Slow Mode ON":"スローモードオン","Some of the files will not be accepted":"一部のファイルは受け付けられません","This message did not meet our content guidelines":"このメッセージはコンテンツガイドラインに適合していません","This message was deleted...":"このメッセージは削除されました...",Thread:Thread$5,"Type your message":"メッセージを入力してください",Unmute:Unmute$5,Unpin:Unpin$5,"Unread messages":"未読メッセージ","Upload type: \"{{ type }}\" is not allowed":"アップロードタイプ:\"{{ type }}\"は許可されていません","User uploaded content":"ユーザーがアップロードしたコンテンツ","Wait until all attachments have uploaded":"すべての添付ファイルがアップロードされるまでお待ちください","You have no channels currently":"現在チャンネルはありません","You've reached the maximum number of files":"ファイルの最大数に達しました","aria/Attachment":"添付ファイル","aria/Cancel Reply":"返信をキャンセル","aria/Cancel upload":"アップロードをキャンセル","aria/Channel list":"チャンネル一覧","aria/Channel search results":"チャンネル検索結果","aria/Close thread":"スレッドを閉じる","aria/Emoji picker":"絵文字ピッカー","aria/File input":"ファイル入力","aria/File upload":"ファイルアップロード","aria/Image input":"画像入力","aria/Load More Channels":"さらにチャンネルを読み込む","aria/Menu":"メニュー","aria/Message Options":"メッセージオプション","aria/Open Message Actions Menu":"メッセージアクションメニューを開く","aria/Open Reaction Selector":"リアクションセレクターを開く","aria/Open Thread":"スレッドを開く","aria/Reaction list":"リアクション一覧","aria/Retry upload":"アップロードを再試行","aria/Send":"送信","ban-command-args":"[@ユーザ名] [テキスト]","ban-command-description":"ユーザーを禁止する","giphy-command-args":"[テキスト]","giphy-command-description":"チャンネルにランダムなGIFを投稿する",live:live$5,"mute-command-args":"[@ユーザ名]","mute-command-description":"ユーザーをミュートする",replyCount_one:replyCount_one$5,replyCount_other:replyCount_other$5,searchResultsCount_one:searchResultsCount_one$5,searchResultsCount_other:searchResultsCount_other$5,"this content could not be displayed":"このコンテンツは表示できませんでした","unban-command-args":"[@ユーザ名]","unban-command-description":"ユーザーの禁止を解除する","unmute-command-args":"[@ユーザ名]","unmute-command-description":"ユーザーのミュートを解除する",unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$5,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} と {{ moreCount }} 他人","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} と {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} と {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} イメージ","{{ memberCount }} members":"{{ memberCount }} メンバー","{{ user }} has been muted":"{{ user }} 無音されています","{{ user }} has been unmuted":"{{ user }} 無音されていません","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} オンライン","{{count}} unread_other":"{{count}} 未読","🏙 Attachment...":"🏙 アタッチメント..."};
447
447
 
448
- var Cancel$4="취소";var Close$4="닫기";var Delete$4="삭제";var Delivered$4="배달됨";var Flag$4="플래그";var Menu$4="메뉴";var Mute$4="무음";var New$4="새로운";var Pin$4="핀";var Reply$4="답장";var Search$4="찾다";var Send$4="보내다";var Shuffle$4="셔플";var Thread$4="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var replyCount_one$4="답장 1개";var replyCount_other$4="{{ count }} 답장";var searchResultsCount_one$4="1개의 결과";var searchResultsCount_other$4="{{ count }}개 결과";var unreadMessagesSeparatorText_other$4="읽지 않은 메시지 {{count}}개";var koTranslations = {"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,"Drag your files here":"여기로 파일을 끌어다 놓으세요","Drag your files here to add to your post":"게시물에 추가하려면 파일을 여기로 끌어다 놓으세요","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 fetching reactions":"반응 로딩 오류.","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"메시지를 읽지 않음으로 표시하는 중 오류가 발생했습니다. 가장 최근 100개의 채널 메시지보다 오래된 읽지 않은 메시지는 표시할 수 없습니다.","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 }}","Failed to jump to the first unread message":"첫 번째 읽지 않은 메시지로 이동하지 못했습니다","Failed to mark channel as read":"채널을 읽음으로 표시하는 데 실패했습니다",Flag:Flag$4,"Latest Messages":"최신 메시지","Load more":"더 불러오기","Mark as unread":"읽지 않음으로 표시",Menu:Menu$4,"Message Failed · Click to try again":"메시지 실패 · 다시 시도하려면 클릭하세요.","Message Failed · Unauthorized":"메시지 실패 · 승인되지 않음","Message deleted":"메시지가 삭제되었습니다.","Message has been successfully flagged":"메시지에 플래그가 지정되었습니다.","Message pinned":"메시지 핀했습니다","Messages have been marked unread.":"메시지가 읽지 않음으로 표시되었습니다.",Mute:Mute$4,New:New$4,"New Messages!":"새 메시지!","No chats here yet…":"아직 채팅이 없습니다...","No results found":"검색 결과가 없습니다","Nothing yet...":"아직 아무것도...","Open emoji picker":"이모티콘 선택기 열기","People matching":"일치하는 사람",Pin:Pin$4,"Pinned by":"핀했던 분:",Reply:Reply$4,"Reply to Message":"메시지에 답장",Search:Search$4,"Searching...":"수색...",Send:Send$4,"Send Anyway":"어쨌든 보내기","Send message request failed":"메시지 보내기 요청 실패","Sending...":"배상중...",Shuffle:Shuffle$4,"Slow Mode ON":"슬로우 모드 켜짐","Some of the files will not be accepted":"일부 파일은 허용되지 않을 수 있습니다","This message did not meet our content guidelines":"이 메시지는 콘텐츠 가이드라인을 충족하지 않습니다.","This message was deleted...":"이 메시지는 삭제되었습니다...",Thread:Thread$4,"Type your message":"메시지 입력",Unmute:Unmute$4,Unpin:Unpin$4,"Unread messages":"읽지 않은 메시지","Upload type: \"{{ type }}\" is not allowed":"업로드 유형: \"{{ type }}\"은(는) 허용되지 않습니다.","User uploaded content":"사용자 업로드 콘텐츠","Wait until all attachments have uploaded":"모든 첨부 파일이 업로드될 때까지 기다립니다.","You have no channels currently":"현재 채널이 없습니다.","You've reached the maximum number of files":"최대 파일 수에 도달했습니다.","ban-command-args":"[@사용자이름] [텍스트]","ban-command-description":"사용자를 차단","giphy-command-args":"[텍스트]","giphy-command-description":"채널에 무작위 GIF 게시",live:live$4,"mute-command-args":"[@사용자이름]","mute-command-description":"사용자 음소거",replyCount_one:replyCount_one$4,replyCount_other:replyCount_other$4,searchResultsCount_one:searchResultsCount_one$4,searchResultsCount_other:searchResultsCount_other$4,"this content could not be displayed":"이 콘텐츠를 표시할 수 없습니다","unban-command-args":"[@사용자이름]","unban-command-description":"사용자 차단 해제","unmute-command-args":"[@사용자이름]","unmute-command-description":"사용자 음소거 해제",unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$4,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} 그리고 {{ moreCount }}명 더","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} 그리고 {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} 그리고 {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }}개 더","{{ memberCount }} members":"{{ memberCount }}명","{{ user }} has been muted":"{{ user }} 음소거되었습니다","{{ user }} has been unmuted":"{{ user }} 음소거가 해제되었습니다","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} 온라인","{{count}} unread_other":"{{count}} 읽지 않음","🏙 Attachment...":"🏙 부착..."};
448
+ var Cancel$4="취소";var Close$4="닫기";var Delete$4="삭제";var Delivered$4="배달됨";var Flag$4="플래그";var Menu$4="메뉴";var Mute$4="무음";var New$4="새로운";var Pin$4="핀";var Reply$4="답장";var Search$4="찾다";var Send$4="보내다";var Shuffle$4="셔플";var Thread$4="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var replyCount_one$4="답장 1개";var replyCount_other$4="{{ count }} 답장";var searchResultsCount_one$4="1개의 결과";var searchResultsCount_other$4="{{ count }}개 결과";var unreadMessagesSeparatorText_other$4="읽지 않은 메시지 {{count}}개";var koTranslations = {"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,"Drag your files here":"여기로 파일을 끌어다 놓으세요","Drag your files here to add to your post":"게시물에 추가하려면 파일을 여기로 끌어다 놓으세요","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 fetching reactions":"반응 로딩 오류.","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"메시지를 읽지 않음으로 표시하는 중 오류가 발생했습니다. 가장 최근 100개의 채널 메시지보다 오래된 읽지 않은 메시지는 표시할 수 없습니다.","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 }}","Failed to jump to the first unread message":"첫 번째 읽지 않은 메시지로 이동하지 못했습니다","Failed to mark channel as read":"채널을 읽음으로 표시하는 데 실패했습니다",Flag:Flag$4,"Latest Messages":"최신 메시지","Load more":"더 불러오기","Mark as unread":"읽지 않음으로 표시",Menu:Menu$4,"Message Failed · Click to try again":"메시지 실패 · 다시 시도하려면 클릭하세요.","Message Failed · Unauthorized":"메시지 실패 · 승인되지 않음","Message deleted":"메시지가 삭제되었습니다.","Message has been successfully flagged":"메시지에 플래그가 지정되었습니다.","Message pinned":"메시지 핀했습니다","Messages have been marked unread.":"메시지가 읽지 않음으로 표시되었습니다.",Mute:Mute$4,New:New$4,"New Messages!":"새 메시지!","No chats here yet…":"아직 채팅이 없습니다...","No results found":"검색 결과가 없습니다","Nothing yet...":"아직 아무것도...","Open emoji picker":"이모티콘 선택기 열기","People matching":"일치하는 사람",Pin:Pin$4,"Pinned by":"핀했던 분:",Reply:Reply$4,"Reply to Message":"메시지에 답장",Search:Search$4,"Searching...":"수색...",Send:Send$4,"Send Anyway":"어쨌든 보내기","Send message request failed":"메시지 보내기 요청 실패","Sending...":"배상중...",Shuffle:Shuffle$4,"Slow Mode ON":"슬로우 모드 켜짐","Some of the files will not be accepted":"일부 파일은 허용되지 않을 수 있습니다","This message did not meet our content guidelines":"이 메시지는 콘텐츠 가이드라인을 충족하지 않습니다.","This message was deleted...":"이 메시지는 삭제되었습니다...",Thread:Thread$4,"Type your message":"메시지 입력",Unmute:Unmute$4,Unpin:Unpin$4,"Unread messages":"읽지 않은 메시지","Upload type: \"{{ type }}\" is not allowed":"업로드 유형: \"{{ type }}\"은(는) 허용되지 않습니다.","User uploaded content":"사용자 업로드 콘텐츠","Wait until all attachments have uploaded":"모든 첨부 파일이 업로드될 때까지 기다립니다.","You have no channels currently":"현재 채널이 없습니다.","You've reached the maximum number of files":"최대 파일 수에 도달했습니다.","aria/Attachment":"첨부 파일","aria/Cancel Reply":"답장 취소","aria/Cancel upload":"업로드 취소","aria/Channel list":"채널 목록","aria/Channel search results":"채널 검색 결과","aria/Close thread":"스레드 닫기","aria/Emoji picker":"이모지 선택기","aria/File input":"파일 입력","aria/File upload":"파일 업로드","aria/Image input":"이미지 입력","aria/Load More Channels":"더 많은 채널 불러오기","aria/Menu":"메뉴","aria/Message Options":"메시지 옵션","aria/Open Message Actions Menu":"메시지 액션 메뉴 열기","aria/Open Reaction Selector":"반응 선택기 열기","aria/Open Thread":"스레드 열기","aria/Reaction list":"반응 목록","aria/Retry upload":"업로드 다시 시도","aria/Send":"보내기","ban-command-args":"[@사용자이름] [텍스트]","ban-command-description":"사용자를 차단","giphy-command-args":"[텍스트]","giphy-command-description":"채널에 무작위 GIF 게시",live:live$4,"mute-command-args":"[@사용자이름]","mute-command-description":"사용자 음소거",replyCount_one:replyCount_one$4,replyCount_other:replyCount_other$4,searchResultsCount_one:searchResultsCount_one$4,searchResultsCount_other:searchResultsCount_other$4,"this content could not be displayed":"이 콘텐츠를 표시할 수 없습니다","unban-command-args":"[@사용자이름]","unban-command-description":"사용자 차단 해제","unmute-command-args":"[@사용자이름]","unmute-command-description":"사용자 음소거 해제",unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$4,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} 그리고 {{ moreCount }}명 더","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} 그리고 {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} 그리고 {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }}개 더","{{ memberCount }} members":"{{ memberCount }}명","{{ user }} has been muted":"{{ user }} 음소거되었습니다","{{ user }} has been unmuted":"{{ user }} 음소거가 해제되었습니다","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} 온라인","{{count}} unread_other":"{{count}} 읽지 않음","🏙 Attachment...":"🏙 부착..."};
449
449
 
450
- var Cancel$3="Annuleer";var Close$3="Sluit";var Delete$3="Verwijder";var Delivered$3="Afgeleverd";var Flag$3="Markeer";var Menu$3="Menu";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 Shuffle$3="Schudden";var Thread$3="Draadje";var Unmute$3="Unmute";var Unpin$3="Losmaken";var live$3="live";var replyCount_one$3="1 antwoord";var replyCount_other$3="{{ count }} antwoorden";var searchResultsCount_one$3="1 resultaat";var searchResultsCount_other$3="{{ count }} resultaten";var unreadMessagesSeparatorText_one$3="1 ongelezen bericht";var unreadMessagesSeparatorText_other$3="{{count}} ongelezen berichten";var nlTranslations = {"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,"Drag your files here":"Sleep je bestanden hier naartoe","Drag your files here to add to your post":"Sleep je bestanden hier naartoe om aan je bericht toe te voegen","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 fetching reactions":"Fout bij het laden van reacties","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Fout bij markeren van bericht als ongelezen. Kan geen oudere ongelezen berichten markeren dan de nieuwste 100 kanaalberichten.","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 }}","Failed to jump to the first unread message":"Niet gelukt om naar het eerste ongelezen bericht te springen","Failed to mark channel as read":"Kanaal kon niet als gelezen worden gemarkeerd",Flag:Flag$3,"Latest Messages":"Laatste berichten","Load more":"Meer laden","Mark as unread":"Markeren als ongelezen",Menu:Menu$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","Messages have been marked unread.":"Berichten zijn gemarkeerd als ongelezen.",Mute:Mute$3,New:New$3,"New Messages!":"Nieuwe Berichten!","No chats here yet…":"Nog geen chats hier...","No results found":"Geen resultaten gevonden","Nothing yet...":"Nog niets ...","Open emoji picker":"Open emojipicker","People matching":"Mensen die matchen",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 Anyway":"Toch versturen","Send message request failed":"Verzoek om bericht te verzenden mislukt","Sending...":"Aan het verzenden...",Shuffle:Shuffle$3,"Slow Mode ON":"Langzame modus aan","Some of the files will not be accepted":"Sommige bestanden zullen niet worden geaccepteerd","This message did not meet our content guidelines":"Dit bericht voldeed niet aan onze inhoudsrichtlijnen","This message was deleted...":"Dit bericht was verwijderd",Thread:Thread$3,"Type your message":"Type je bericht",Unmute:Unmute$3,Unpin:Unpin$3,"Unread messages":"Ongelezen berichten","Upload type: \"{{ type }}\" is not allowed":"Uploadtype: \"{{ type }}\" is niet toegestaan","User uploaded content":"Gebruikersgeüploade inhoud","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","ban-command-args":"[@gebruikersnaam] [tekst]","ban-command-description":"Een gebruiker verbannen","giphy-command-args":"[tekst]","giphy-command-description":"Plaats een willekeurige gif in het kanaal",live:live$3,"mute-command-args":"[@gebruikersnaam]","mute-command-description":"Een gebruiker dempen",replyCount_one:replyCount_one$3,replyCount_other:replyCount_other$3,searchResultsCount_one:searchResultsCount_one$3,searchResultsCount_other:searchResultsCount_other$3,"this content could not be displayed":"Deze inhoud kan niet weergegeven worden","unban-command-args":"[@gebruikersnaam]","unban-command-description":"Een gebruiker debannen","unmute-command-args":"[@gebruikersnaam]","unmute-command-description":"Een gebruiker niet meer dempen",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$3,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$3,"{{ 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","{{ user }} has been muted":"{{ user }} is muted","{{ user }} has been unmuted":"{{ user }} is unmuted","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} ongelezen","{{count}} unread_other":"{{count}} ongelezen","🏙 Attachment...":"🏙 Bijlage..."};
450
+ var Cancel$3="Annuleer";var Close$3="Sluit";var Delete$3="Verwijder";var Delivered$3="Afgeleverd";var Flag$3="Markeer";var Menu$3="Menu";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 Shuffle$3="Schudden";var Thread$3="Draadje";var Unmute$3="Unmute";var Unpin$3="Losmaken";var live$3="live";var replyCount_one$3="1 antwoord";var replyCount_other$3="{{ count }} antwoorden";var searchResultsCount_one$3="1 resultaat";var searchResultsCount_other$3="{{ count }} resultaten";var unreadMessagesSeparatorText_one$3="1 ongelezen bericht";var unreadMessagesSeparatorText_other$3="{{count}} ongelezen berichten";var nlTranslations = {"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,"Drag your files here":"Sleep je bestanden hier naartoe","Drag your files here to add to your post":"Sleep je bestanden hier naartoe om aan je bericht toe te voegen","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 fetching reactions":"Fout bij het laden van reacties","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Fout bij markeren van bericht als ongelezen. Kan geen oudere ongelezen berichten markeren dan de nieuwste 100 kanaalberichten.","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 }}","Failed to jump to the first unread message":"Niet gelukt om naar het eerste ongelezen bericht te springen","Failed to mark channel as read":"Kanaal kon niet als gelezen worden gemarkeerd",Flag:Flag$3,"Latest Messages":"Laatste berichten","Load more":"Meer laden","Mark as unread":"Markeren als ongelezen",Menu:Menu$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","Messages have been marked unread.":"Berichten zijn gemarkeerd als ongelezen.",Mute:Mute$3,New:New$3,"New Messages!":"Nieuwe Berichten!","No chats here yet…":"Nog geen chats hier...","No results found":"Geen resultaten gevonden","Nothing yet...":"Nog niets ...","Open emoji picker":"Open emojipicker","People matching":"Mensen die matchen",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 Anyway":"Toch versturen","Send message request failed":"Verzoek om bericht te verzenden mislukt","Sending...":"Aan het verzenden...",Shuffle:Shuffle$3,"Slow Mode ON":"Langzame modus aan","Some of the files will not be accepted":"Sommige bestanden zullen niet worden geaccepteerd","This message did not meet our content guidelines":"Dit bericht voldeed niet aan onze inhoudsrichtlijnen","This message was deleted...":"Dit bericht was verwijderd",Thread:Thread$3,"Type your message":"Type je bericht",Unmute:Unmute$3,Unpin:Unpin$3,"Unread messages":"Ongelezen berichten","Upload type: \"{{ type }}\" is not allowed":"Uploadtype: \"{{ type }}\" is niet toegestaan","User uploaded content":"Gebruikersgeüploade inhoud","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","aria/Attachment":"Bijlage","aria/Cancel Reply":"Antwoord annuleren","aria/Cancel upload":"Upload annuleren","aria/Channel list":"Kanaallijst","aria/Channel search results":"Zoekresultaten voor kanalen","aria/Close thread":"Draad sluiten","aria/Emoji picker":"Emoji kiezer","aria/File input":"Bestandsinvoer","aria/File upload":"Bestand uploaden","aria/Image input":"Afbeelding invoeren","aria/Load More Channels":"Meer kanalen laden","aria/Menu":"Menu","aria/Message Options":"Berichtopties","aria/Open Message Actions Menu":"Menu voor berichtacties openen","aria/Open Reaction Selector":"Reactiekiezer openen","aria/Open Thread":"Draad openen","aria/Reaction list":"Reactielijst","aria/Retry upload":"Upload opnieuw proberen","aria/Send":"Verzenden","ban-command-args":"[@gebruikersnaam] [tekst]","ban-command-description":"Een gebruiker verbannen","giphy-command-args":"[tekst]","giphy-command-description":"Plaats een willekeurige gif in het kanaal",live:live$3,"mute-command-args":"[@gebruikersnaam]","mute-command-description":"Een gebruiker dempen",replyCount_one:replyCount_one$3,replyCount_other:replyCount_other$3,searchResultsCount_one:searchResultsCount_one$3,searchResultsCount_other:searchResultsCount_other$3,"this content could not be displayed":"Deze inhoud kan niet weergegeven worden","unban-command-args":"[@gebruikersnaam]","unban-command-description":"Een gebruiker debannen","unmute-command-args":"[@gebruikersnaam]","unmute-command-description":"Een gebruiker niet meer dempen",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$3,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$3,"{{ 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","{{ user }} has been muted":"{{ user }} is muted","{{ user }} has been unmuted":"{{ user }} is unmuted","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_one":"{{count}} ongelezen","{{count}} unread_other":"{{count}} ongelezen","🏙 Attachment...":"🏙 Bijlage..."};
451
451
 
452
- var Cancel$2="Cancelar";var Close$2="Fechar";var Delete$2="Excluir";var Delivered$2="Entregue";var Flag$2="Reportar";var Menu$2="Menu";var Mute$2="Mudo";var New$2="Novo";var Pin$2="Fixar";var Reply$2="Responder";var Search$2="Procurar";var Send$2="Enviar";var Shuffle$2="Embaralhar";var Thread$2="Fio";var Unmute$2="Ativar som";var Unpin$2="Liberar";var live$2="ao vivo";var replyCount_many$1="{{ count }} respostas";var replyCount_one$2="1 resposta";var replyCount_other$2="{{ count }} respostas";var searchResultsCount_many$1="{{ count }} resultados";var searchResultsCount_one$2="1 resultado";var searchResultsCount_other$2="{{ count }} resultados";var unreadMessagesSeparatorText_many$1="{{count}} mensagens não lidas";var unreadMessagesSeparatorText_one$2="1 mensagem não lida";var unreadMessagesSeparatorText_other$2="{{count}} mensagens não lidas";var ptTranslations = {"Attach files":"Anexar arquivos",Cancel:Cancel$2,"Channel Missing":"Canal ausente",Close:Close$2,"Close emoji picker":"Fechar seletor de emoji","Commands matching":"Comandos correspondentes","Connection failure, reconnecting now...":"Falha de conexão, reconectando agora...",Delete:Delete$2,Delivered:Delivered$2,"Drag your files here":"Arraste seus arquivos aqui","Drag your files here to add to your post":"Arraste seus arquivos aqui para adicionar ao seu post","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 reportar","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 fetching reactions":"Erro ao carregar reacções","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Erro ao marcar a mensagem como não lida. Não é possível marcar mensagens não lidas mais antigas do que as 100 mensagens mais recentes do canal.","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 }}","Failed to jump to the first unread message":"Falha ao pular para a primeira mensagem não lida","Failed to mark channel as read":"Falha ao marcar o canal como lido",Flag:Flag$2,"Latest Messages":"Mensagens mais recentes","Load more":"Carregar mais","Mark as unread":"Marcar como não lida",Menu:Menu$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 reportada com sucesso","Message pinned":"Mensagem fixada","Messages have been marked unread.":"Mensagens foram marcadas como não lidas.",Mute:Mute$2,New:New$2,"New Messages!":"Novas mensagens!","No chats here yet…":"Ainda não há conversas aqui...","No results found":"Nenhum resultado encontrado","Nothing yet...":"Nada ainda...","Open emoji picker":"Abrir seletor de emoji","People matching":"Pessoas correspondentes",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 Anyway":"Enviar de qualquer forma","Send message request failed":"O pedido de envio de mensagem falhou","Sending...":"Enviando...",Shuffle:Shuffle$2,"Slow Mode ON":"Modo lento LIGADO","Some of the files will not be accepted":"Alguns dos arquivos não serão aceitos","This message did not meet our content guidelines":"Esta mensagem não corresponde às nossas directrizes de conteúdo","This message was deleted...":"Esta mensagem foi excluída...",Thread:Thread$2,"Type your message":"Digite sua mensagem",Unmute:Unmute$2,Unpin:Unpin$2,"Unread messages":"Mensagens não lidas","Upload type: \"{{ type }}\" is not allowed":"Tipo de upload: \"{{ type }}\" não é permitido","User uploaded content":"Conteúdo enviado pelo usuário","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","ban-command-args":"[@nomedeusuário] [texto]","ban-command-description":"Banir um usuário","giphy-command-args":"[texto]","giphy-command-description":"Postar um gif aleatório no canal",live:live$2,"mute-command-args":"[@nomedeusuário]","mute-command-description":"Silenciar um usuário",replyCount_many:replyCount_many$1,replyCount_one:replyCount_one$2,replyCount_other:replyCount_other$2,searchResultsCount_many:searchResultsCount_many$1,searchResultsCount_one:searchResultsCount_one$2,searchResultsCount_other:searchResultsCount_other$2,"this content could not be displayed":"este conteúdo não pôde ser exibido","unban-command-args":"[@nomedeusuário]","unban-command-description":"Desbanir um usuário","unmute-command-args":"[@nomedeusuário]","unmute-command-description":"Retirar o silenciamento de um usuário",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$1,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$2,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$2,"{{ 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","{{ user }} has been muted":"{{ user }} foi silenciado","{{ user }} has been unmuted":"{{ user }} foi reativado","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_many":"{{count}} não lidos","{{count}} unread_one":"{{count}} não lido","{{count}} unread_other":"{{count}} não lidos","🏙 Attachment...":"🏙 Anexo..."};
452
+ var Cancel$2="Cancelar";var Close$2="Fechar";var Delete$2="Excluir";var Delivered$2="Entregue";var Flag$2="Reportar";var Menu$2="Menu";var Mute$2="Mudo";var New$2="Novo";var Pin$2="Fixar";var Reply$2="Responder";var Search$2="Procurar";var Send$2="Enviar";var Shuffle$2="Embaralhar";var Thread$2="Fio";var Unmute$2="Ativar som";var Unpin$2="Liberar";var live$2="ao vivo";var replyCount_many$1="{{ count }} respostas";var replyCount_one$2="1 resposta";var replyCount_other$2="{{ count }} respostas";var searchResultsCount_many$1="{{ count }} resultados";var searchResultsCount_one$2="1 resultado";var searchResultsCount_other$2="{{ count }} resultados";var unreadMessagesSeparatorText_many$1="{{count}} mensagens não lidas";var unreadMessagesSeparatorText_one$2="1 mensagem não lida";var unreadMessagesSeparatorText_other$2="{{count}} mensagens não lidas";var ptTranslations = {"Attach files":"Anexar arquivos",Cancel:Cancel$2,"Channel Missing":"Canal ausente",Close:Close$2,"Close emoji picker":"Fechar seletor de emoji","Commands matching":"Comandos correspondentes","Connection failure, reconnecting now...":"Falha de conexão, reconectando agora...",Delete:Delete$2,Delivered:Delivered$2,"Drag your files here":"Arraste seus arquivos aqui","Drag your files here to add to your post":"Arraste seus arquivos aqui para adicionar ao seu post","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 reportar","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 fetching reactions":"Erro ao carregar reacções","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Erro ao marcar a mensagem como não lida. Não é possível marcar mensagens não lidas mais antigas do que as 100 mensagens mais recentes do canal.","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 }}","Failed to jump to the first unread message":"Falha ao pular para a primeira mensagem não lida","Failed to mark channel as read":"Falha ao marcar o canal como lido",Flag:Flag$2,"Latest Messages":"Mensagens mais recentes","Load more":"Carregar mais","Mark as unread":"Marcar como não lida",Menu:Menu$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 reportada com sucesso","Message pinned":"Mensagem fixada","Messages have been marked unread.":"Mensagens foram marcadas como não lidas.",Mute:Mute$2,New:New$2,"New Messages!":"Novas mensagens!","No chats here yet…":"Ainda não há conversas aqui...","No results found":"Nenhum resultado encontrado","Nothing yet...":"Nada ainda...","Open emoji picker":"Abrir seletor de emoji","People matching":"Pessoas correspondentes",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 Anyway":"Enviar de qualquer forma","Send message request failed":"O pedido de envio de mensagem falhou","Sending...":"Enviando...",Shuffle:Shuffle$2,"Slow Mode ON":"Modo lento LIGADO","Some of the files will not be accepted":"Alguns dos arquivos não serão aceitos","This message did not meet our content guidelines":"Esta mensagem não corresponde às nossas directrizes de conteúdo","This message was deleted...":"Esta mensagem foi excluída...",Thread:Thread$2,"Type your message":"Digite sua mensagem",Unmute:Unmute$2,Unpin:Unpin$2,"Unread messages":"Mensagens não lidas","Upload type: \"{{ type }}\" is not allowed":"Tipo de upload: \"{{ type }}\" não é permitido","User uploaded content":"Conteúdo enviado pelo usuário","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","aria/Attachment":"Bijlage","aria/Cancel Reply":"Antwoord annuleren","aria/Cancel upload":"Upload annuleren","aria/Channel list":"Kanaallijst","aria/Channel search results":"Zoekresultaten voor kanalen","aria/Close thread":"Draad sluiten","aria/Emoji picker":"Emoji kiezer","aria/File input":"Bestandsinvoer","aria/File upload":"Bestand uploaden","aria/Image input":"Afbeelding invoeren","aria/Load More Channels":"Meer kanalen laden","aria/Menu":"Menu","aria/Message Options":"Berichtopties","aria/Open Message Actions Menu":"Menu voor berichtacties openen","aria/Open Reaction Selector":"Reactiekiezer openen","aria/Open Thread":"Draad openen","aria/Reaction list":"Reactielijst","aria/Retry upload":"Upload opnieuw proberen","aria/Send":"Verzenden","ban-command-args":"[@nomedeusuário] [texto]","ban-command-description":"Banir um usuário","giphy-command-args":"[texto]","giphy-command-description":"Postar um gif aleatório no canal",live:live$2,"mute-command-args":"[@nomedeusuário]","mute-command-description":"Silenciar um usuário",replyCount_many:replyCount_many$1,replyCount_one:replyCount_one$2,replyCount_other:replyCount_other$2,searchResultsCount_many:searchResultsCount_many$1,searchResultsCount_one:searchResultsCount_one$2,searchResultsCount_other:searchResultsCount_other$2,"this content could not be displayed":"este conteúdo não pôde ser exibido","unban-command-args":"[@nomedeusuário]","unban-command-description":"Desbanir um usuário","unmute-command-args":"[@nomedeusuário]","unmute-command-description":"Retirar o silenciamento de um usuário",unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many$1,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$2,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$2,"{{ 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","{{ user }} has been muted":"{{ user }} foi silenciado","{{ user }} has been unmuted":"{{ user }} foi reativado","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} online","{{count}} unread_many":"{{count}} não lidos","{{count}} unread_one":"{{count}} não lido","{{count}} unread_other":"{{count}} não lidos","🏙 Attachment...":"🏙 Anexo..."};
453
453
 
454
- var Cancel$1="Отмена";var Close$1="Закрыть";var Delete$1="Удалить";var Delivered$1="Отправлено";var Flag$1="Пожаловаться";var Menu$1="Меню";var Mute$1="Отключить уведомления";var New$1="Новые";var Pin$1="Штырь";var Reply$1="Отвечать";var Search$1="Поиск";var Send$1="Отправить";var Shuffle$1="Перемешать";var Thread$1="Ветка";var Unmute$1="Включить уведомления";var Unpin$1="Открепить";var live$1="В прямом эфире";var replyCount_few="{{ count }} ответов";var replyCount_many="{{ count }} ответов";var replyCount_one$1="1 ответ";var replyCount_other$1="{{ count }} ответов";var searchResultsCount_few="{{ count }} результата";var searchResultsCount_many="{{ count }} результатов";var searchResultsCount_one$1="1 результат";var searchResultsCount_other$1="{{ count }} результатов";var unreadMessagesSeparatorText_few="1 непрочитанное сообщения";var unreadMessagesSeparatorText_many="{{count}} непрочитанных сообщений";var unreadMessagesSeparatorText_one$1="1 непрочитанное сообщение";var unreadMessagesSeparatorText_other$1="{{count}} непрочитанных сообщений";var ruTranslations = {"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,"Drag your files here":"Перетащите ваши файлы сюда","Drag your files here to add to your post":"Перетащите ваши файлы сюда, чтобы добавить их в ваш пост","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 fetching reactions":"Ошибка при загрузке реакций","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Ошибка при отметке сообщения как непрочитанного. Невозможно отметить как непрочитанные сообщения старше последних 100 сообщений в канале.","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 }}","Failed to jump to the first unread message":"Не удалось перейти к первому непрочитанному сообщению","Failed to mark channel as read":"Не удалось пометить канал как прочитанный",Flag:Flag$1,"Latest Messages":"Последние сообщения","Load more":"Загрузить больше","Mark as unread":"Отметить как непрочитанное",Menu:Menu$1,"Message Failed · Click to try again":"Ошибка отправки сообщения · Нажмите чтобы повторить","Message Failed · Unauthorized":"Ошибка отправки сообщения · Неавторизованный","Message deleted":"Сообщение удалено","Message has been successfully flagged":"Жалоба на сообщение была принята","Message pinned":"Сообщение закреплено","Messages have been marked unread.":"Сообщения были отмечены как непрочитанные.",Mute:Mute$1,New:New$1,"New Messages!":"Новые сообщения!","No chats here yet…":"Здесь еще нет чатов...","No results found":"результаты не найдены","Nothing yet...":"Пока ничего нет...","Open emoji picker":"Выбрать emoji","People matching":"Соответствующие люди",Pin:Pin$1,"Pinned by":"Закреплено",Reply:Reply$1,"Reply to Message":"Ответить на сообщение",Search:Search$1,"Searching...":"Ищем...",Send:Send$1,"Send Anyway":"Мне всё равно, отправить","Send message request failed":"Не удалось отправить запрос на отправку сообщения","Sending...":"Отправка...",Shuffle:Shuffle$1,"Slow Mode ON":"Медленный режим включен","Some of the files will not be accepted":"Некоторые файлы не будут приняты","This message did not meet our content guidelines":"Сообщение не соответствует правилам","This message was deleted...":"Сообщение было удалено...",Thread:Thread$1,"Type your message":"Ваше сообщение",Unmute:Unmute$1,Unpin:Unpin$1,"Unread messages":"Непрочитанные сообщения","Upload type: \"{{ type }}\" is not allowed":"Тип загрузки: \"{{ type }}\" не разрешен","User uploaded content":"Пользователь загрузил контент","Wait until all attachments have uploaded":"Подождите, пока все вложения загрузятся","You have no channels currently":"У вас нет каналов в данный момент","You've reached the maximum number of files":"Вы достигли максимального количества файлов","ban-command-args":"[@имяпользователя] [текст]","ban-command-description":"Заблокировать пользователя","giphy-command-args":"[текст]","giphy-command-description":"Опубликовать случайную GIF-анимацию в канале",live:live$1,"mute-command-args":"[@имяпользователя]","mute-command-description":"Выключить микрофон у пользователя",replyCount_few:replyCount_few,replyCount_many:replyCount_many,replyCount_one:replyCount_one$1,replyCount_other:replyCount_other$1,searchResultsCount_few:searchResultsCount_few,searchResultsCount_many:searchResultsCount_many,searchResultsCount_one:searchResultsCount_one$1,searchResultsCount_other:searchResultsCount_other$1,"this content could not be displayed":"Этот контент не может быть отображен в данный момент","unban-command-args":"[@имяпользователя]","unban-command-description":"Разблокировать пользователя","unmute-command-args":"[@имяпользователя]","unmute-command-description":"Включить микрофон у пользователя",unreadMessagesSeparatorText_few:unreadMessagesSeparatorText_few,unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$1,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$1,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} и {{ moreCount }} еще","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} и {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} и {{ secondUser }}","{{ imageCount }} more":"Ещё {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} члены","{{ user }} has been muted":"Вы отписались от уведомлений от {{ user }}","{{ user }} has been unmuted":"Уведомления от {{ user }} были включены","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} в сети","{{count}} unread_few":"{{count}} непрочитанных","{{count}} unread_many":"{{count}} непрочитанных","{{count}} unread_one":"{{count}} непрочитанное","{{count}} unread_other":"{{count}} непрочитанных","🏙 Attachment...":"🏙 Вложение..."};
454
+ var Cancel$1="Отмена";var Close$1="Закрыть";var Delete$1="Удалить";var Delivered$1="Отправлено";var Flag$1="Пожаловаться";var Menu$1="Меню";var Mute$1="Отключить уведомления";var New$1="Новые";var Pin$1="Штырь";var Reply$1="Отвечать";var Search$1="Поиск";var Send$1="Отправить";var Shuffle$1="Перемешать";var Thread$1="Ветка";var Unmute$1="Включить уведомления";var Unpin$1="Открепить";var live$1="В прямом эфире";var replyCount_few="{{ count }} ответов";var replyCount_many="{{ count }} ответов";var replyCount_one$1="1 ответ";var replyCount_other$1="{{ count }} ответов";var searchResultsCount_few="{{ count }} результата";var searchResultsCount_many="{{ count }} результатов";var searchResultsCount_one$1="1 результат";var searchResultsCount_other$1="{{ count }} результатов";var unreadMessagesSeparatorText_few="1 непрочитанное сообщения";var unreadMessagesSeparatorText_many="{{count}} непрочитанных сообщений";var unreadMessagesSeparatorText_one$1="1 непрочитанное сообщение";var unreadMessagesSeparatorText_other$1="{{count}} непрочитанных сообщений";var ruTranslations = {"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,"Drag your files here":"Перетащите ваши файлы сюда","Drag your files here to add to your post":"Перетащите ваши файлы сюда, чтобы добавить их в ваш пост","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 fetching reactions":"Ошибка при загрузке реакций","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Ошибка при отметке сообщения как непрочитанного. Невозможно отметить как непрочитанные сообщения старше последних 100 сообщений в канале.","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 }}","Failed to jump to the first unread message":"Не удалось перейти к первому непрочитанному сообщению","Failed to mark channel as read":"Не удалось пометить канал как прочитанный",Flag:Flag$1,"Latest Messages":"Последние сообщения","Load more":"Загрузить больше","Mark as unread":"Отметить как непрочитанное",Menu:Menu$1,"Message Failed · Click to try again":"Ошибка отправки сообщения · Нажмите чтобы повторить","Message Failed · Unauthorized":"Ошибка отправки сообщения · Неавторизованный","Message deleted":"Сообщение удалено","Message has been successfully flagged":"Жалоба на сообщение была принята","Message pinned":"Сообщение закреплено","Messages have been marked unread.":"Сообщения были отмечены как непрочитанные.",Mute:Mute$1,New:New$1,"New Messages!":"Новые сообщения!","No chats here yet…":"Здесь еще нет чатов...","No results found":"результаты не найдены","Nothing yet...":"Пока ничего нет...","Open emoji picker":"Выбрать emoji","People matching":"Соответствующие люди",Pin:Pin$1,"Pinned by":"Закреплено",Reply:Reply$1,"Reply to Message":"Ответить на сообщение",Search:Search$1,"Searching...":"Ищем...",Send:Send$1,"Send Anyway":"Мне всё равно, отправить","Send message request failed":"Не удалось отправить запрос на отправку сообщения","Sending...":"Отправка...",Shuffle:Shuffle$1,"Slow Mode ON":"Медленный режим включен","Some of the files will not be accepted":"Некоторые файлы не будут приняты","This message did not meet our content guidelines":"Сообщение не соответствует правилам","This message was deleted...":"Сообщение было удалено...",Thread:Thread$1,"Type your message":"Ваше сообщение",Unmute:Unmute$1,Unpin:Unpin$1,"Unread messages":"Непрочитанные сообщения","Upload type: \"{{ type }}\" is not allowed":"Тип загрузки: \"{{ type }}\" не разрешен","User uploaded content":"Пользователь загрузил контент","Wait until all attachments have uploaded":"Подождите, пока все вложения загрузятся","You have no channels currently":"У вас нет каналов в данный момент","You've reached the maximum number of files":"Вы достигли максимального количества файлов","aria/Attachment":"Вложение","aria/Cancel Reply":"Отменить ответ","aria/Cancel upload":"Отменить загрузку","aria/Channel list":"Список каналов","aria/Channel search results":"Результаты поиска по каналам","aria/Close thread":"Закрыть тему","aria/Emoji picker":"Выбор эмодзи","aria/File input":"Ввод файла","aria/File upload":"Загрузка файла","aria/Image input":"Ввод изображения","aria/Load More Channels":"Загрузить больше каналов","aria/Menu":"Меню","aria/Message Options":"Параметры сообщения","aria/Open Message Actions Menu":"Открыть меню действий с сообщениями","aria/Open Reaction Selector":"Открыть селектор реакций","aria/Open Thread":"Открыть тему","aria/Reaction list":"Список реакций","aria/Retry upload":"Повторить загрузку","aria/Send":"Отправить","ban-command-args":"[@имяпользователя] [текст]","ban-command-description":"Заблокировать пользователя","giphy-command-args":"[текст]","giphy-command-description":"Опубликовать случайную GIF-анимацию в канале",live:live$1,"mute-command-args":"[@имяпользователя]","mute-command-description":"Выключить микрофон у пользователя",replyCount_few:replyCount_few,replyCount_many:replyCount_many,replyCount_one:replyCount_one$1,replyCount_other:replyCount_other$1,searchResultsCount_few:searchResultsCount_few,searchResultsCount_many:searchResultsCount_many,searchResultsCount_one:searchResultsCount_one$1,searchResultsCount_other:searchResultsCount_other$1,"this content could not be displayed":"Этот контент не может быть отображен в данный момент","unban-command-args":"[@имяпользователя]","unban-command-description":"Разблокировать пользователя","unmute-command-args":"[@имяпользователя]","unmute-command-description":"Включить микрофон у пользователя",unreadMessagesSeparatorText_few:unreadMessagesSeparatorText_few,unreadMessagesSeparatorText_many:unreadMessagesSeparatorText_many,unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one$1,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other$1,"{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} и {{ moreCount }} еще","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} и {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} и {{ secondUser }}","{{ imageCount }} more":"Ещё {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} члены","{{ user }} has been muted":"Вы отписались от уведомлений от {{ user }}","{{ user }} has been unmuted":"Уведомления от {{ user }} были включены","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} в сети","{{count}} unread_few":"{{count}} непрочитанных","{{count}} unread_many":"{{count}} непрочитанных","{{count}} unread_one":"{{count}} непрочитанное","{{count}} unread_other":"{{count}} непрочитанных","🏙 Attachment...":"🏙 Вложение..."};
455
455
 
456
- var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi";var Flag="Bayrak";var Menu="Menü";var Mute="Sessiz";var New="Yeni";var Pin="Toplu iğne";var Reply="Cevapla";var Search="Arama";var Send="Gönder";var Shuffle="Karıştır";var Thread="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var replyCount_one="1 cevap";var replyCount_other="{{ count }} cevaplar";var searchResultsCount_one="1 sonuç";var searchResultsCount_other="{{ count }} sonuç";var unreadMessagesSeparatorText_one="1 okunmamış mesaj";var unreadMessagesSeparatorText_other="{{count}} okunmamış mesaj";var trTranslations = {"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,"Drag your files here":"Dosyalarınızı buraya sürükleyin","Drag your files here to add to your post":"Gönderinize eklemek için dosyalarınızı buraya sürükleyin","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 fetching reactions":"Reaksiyonlar alınırken hata oluştu","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Mesajı okunmamış olarak işaretleme hatası. En yeni 100 kanal mesajından daha eski okunmamış mesajları işaretleme yapılamaz.","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 }}","Failed to jump to the first unread message":"İlk okunmamış mesaja atlamada hata oluştu","Failed to mark channel as read":"Kanalı okundu olarak işaretleme başarısız oldu",Flag:Flag,"Latest Messages":"Son Mesajlar","Load more":"Daha fazla yükle","Mark as unread":"Okunmamış olarak işaretle",Menu:Menu,"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","Messages have been marked unread.":"Mesajlar okunmamış olarak işaretlendi.",Mute:Mute,New:New,"New Messages!":"Yeni Mesajlar!","No chats here yet…":"Henüz burada sohbet yok...","No results found":"Sonuç bulunamadı","Nothing yet...":"Şimdilik hiçbir şey...","Open emoji picker":"Emoji klavyesini aç","People matching":"Eşleşen kişiler",Pin:Pin,"Pinned by":"Sabitleyen",Reply:Reply,"Reply to Message":"Mesajı Cevapla",Search:Search,"Searching...":"Aranıyor...",Send:Send,"Send Anyway":"Neyse Gönder","Send message request failed":"Mesaj gönderme isteği başarısız oldu","Sending...":"Gönderiliyor...",Shuffle:Shuffle,"Slow Mode ON":"Yavaş Mod Açık","Some of the files will not be accepted":"Bazı dosyalar kabul edilmeyecektir","This message did not meet our content guidelines":"Bu mesaj içerik yönergelerimize uygun değil","This message was deleted...":"Bu mesaj silindi",Thread:Thread,"Type your message":"Mesajınızı yazın",Unmute:Unmute,Unpin:Unpin,"Unread messages":"Okunmamış mesajlar","Upload type: \"{{ type }}\" is not allowed":"Yükleme türü: \"{{ type }}\" izin verilmez","User uploaded content":"Kullanıcı tarafından yüklenen içerik","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","ban-command-args":"[@kullanıcıadı] [metin]","ban-command-description":"Bir kullanıcıyı yasakla","giphy-command-args":"[metin]","giphy-command-description":"Rastgele bir gif'i kanala gönder",live:live,"mute-command-args":"[@kullanıcıadı]","mute-command-description":"Bir kullanıcının sesini kapat",replyCount_one:replyCount_one,replyCount_other:replyCount_other,searchResultsCount_one:searchResultsCount_one,searchResultsCount_other:searchResultsCount_other,"this content could not be displayed":"bu içerik gösterilemiyor","unban-command-args":"[@kullanıcıadı]","unban-command-description":"Bir kullanıcının yasağını kaldır","unmute-command-args":"[@kullanıcıadı]","unmute-command-description":"Bir kullanıcının sesini aç",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other,"{{ 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","{{ user }} has been muted":"{{ user }} sessize alındı","{{ user }} has been unmuted":"{{ user }} sesi açıldı","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} çevrimiçi","{{count}} unread_one":"{{count}} okunmamış","{{count}} unread_other":"{{count}} okunmamış","🏙 Attachment...":"🏙 Ek..."};
456
+ var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi";var Flag="Bayrak";var Menu="Menü";var Mute="Sessiz";var New="Yeni";var Pin="Toplu iğne";var Reply="Cevapla";var Search="Arama";var Send="Gönder";var Shuffle="Karıştır";var Thread="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var replyCount_one="1 cevap";var replyCount_other="{{ count }} cevaplar";var searchResultsCount_one="1 sonuç";var searchResultsCount_other="{{ count }} sonuç";var unreadMessagesSeparatorText_one="1 okunmamış mesaj";var unreadMessagesSeparatorText_other="{{count}} okunmamış mesaj";var trTranslations = {"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,"Drag your files here":"Dosyalarınızı buraya sürükleyin","Drag your files here to add to your post":"Gönderinize eklemek için dosyalarınızı buraya sürükleyin","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 fetching reactions":"Reaksiyonlar alınırken hata oluştu","Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.":"Mesajı okunmamış olarak işaretleme hatası. En yeni 100 kanal mesajından daha eski okunmamış mesajları işaretleme yapılamaz.","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 }}","Failed to jump to the first unread message":"İlk okunmamış mesaja atlamada hata oluştu","Failed to mark channel as read":"Kanalı okundu olarak işaretleme başarısız oldu",Flag:Flag,"Latest Messages":"Son Mesajlar","Load more":"Daha fazla yükle","Mark as unread":"Okunmamış olarak işaretle",Menu:Menu,"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","Messages have been marked unread.":"Mesajlar okunmamış olarak işaretlendi.",Mute:Mute,New:New,"New Messages!":"Yeni Mesajlar!","No chats here yet…":"Henüz burada sohbet yok...","No results found":"Sonuç bulunamadı","Nothing yet...":"Şimdilik hiçbir şey...","Open emoji picker":"Emoji klavyesini aç","People matching":"Eşleşen kişiler",Pin:Pin,"Pinned by":"Sabitleyen",Reply:Reply,"Reply to Message":"Mesajı Cevapla",Search:Search,"Searching...":"Aranıyor...",Send:Send,"Send Anyway":"Neyse Gönder","Send message request failed":"Mesaj gönderme isteği başarısız oldu","Sending...":"Gönderiliyor...",Shuffle:Shuffle,"Slow Mode ON":"Yavaş Mod Açık","Some of the files will not be accepted":"Bazı dosyalar kabul edilmeyecektir","This message did not meet our content guidelines":"Bu mesaj içerik yönergelerimize uygun değil","This message was deleted...":"Bu mesaj silindi",Thread:Thread,"Type your message":"Mesajınızı yazın",Unmute:Unmute,Unpin:Unpin,"Unread messages":"Okunmamış mesajlar","Upload type: \"{{ type }}\" is not allowed":"Yükleme türü: \"{{ type }}\" izin verilmez","User uploaded content":"Kullanıcı tarafından yüklenen içerik","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","aria/Attachment":"Bijlage","aria/Cancel Reply":"Antwoord annuleren","aria/Cancel upload":"Upload annuleren","aria/Channel list":"Kanaallijst","aria/Channel search results":"Zoekresultaten voor kanalen","aria/Close thread":"Draad sluiten","aria/Emoji picker":"Emoji kiezer","aria/File input":"Bestandsinvoer","aria/File upload":"Bestand uploaden","aria/Image input":"Afbeelding invoeren","aria/Load More Channels":"Meer kanalen laden","aria/Menu":"Menu","aria/Message Options":"Berichtopties","aria/Open Message Actions Menu":"Menu voor berichtacties openen","aria/Open Reaction Selector":"Reactiekiezer openen","aria/Open Thread":"Draad openen","aria/Reaction list":"Reactielijst","aria/Retry upload":"Upload opnieuw proberen","aria/Send":"Verzenden","ban-command-args":"[@kullanıcıadı] [metin]","ban-command-description":"Bir kullanıcıyı yasakla","giphy-command-args":"[metin]","giphy-command-description":"Rastgele bir gif'i kanala gönder",live:live,"mute-command-args":"[@kullanıcıadı]","mute-command-description":"Bir kullanıcının sesini kapat",replyCount_one:replyCount_one,replyCount_other:replyCount_other,searchResultsCount_one:searchResultsCount_one,searchResultsCount_other:searchResultsCount_other,"this content could not be displayed":"bu içerik gösterilemiyor","unban-command-args":"[@kullanıcıadı]","unban-command-description":"Bir kullanıcının yasağını kaldır","unmute-command-args":"[@kullanıcıadı]","unmute-command-description":"Bir kullanıcının sesini aç",unreadMessagesSeparatorText_one:unreadMessagesSeparatorText_one,unreadMessagesSeparatorText_other:unreadMessagesSeparatorText_other,"{{ 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","{{ user }} has been muted":"{{ user }} sessize alındı","{{ user }} has been unmuted":"{{ user }} sesi açıldı","{{ user }} is typing...":"{{ user }} is typing...","{{ users }} and more are typing...":"{{ users }} and more are typing...","{{ users }} and {{ user }} are typing...":"{{ users }} and {{ user }} are typing...","{{ watcherCount }} online":"{{ watcherCount }} çevrimiçi","{{count}} unread_one":"{{count}} okunmamış","{{count}} unread_other":"{{count}} okunmamış","🏙 Attachment...":"🏙 Ek..."};
457
457
 
458
458
  var defaultNS = 'translation';
459
459
  var defaultLng = 'en';
@@ -1163,10 +1163,11 @@ var FileSizeIndicator = function (_a) {
1163
1163
 
1164
1164
  var UnMemoizedSafeAnchor = function (props) {
1165
1165
  var children = props.children, className = props.className, download = props.download, href = props.href, rel = props.rel, target = props.target;
1166
+ var t = useTranslationContext('SafeAnchor').t;
1166
1167
  if (!href)
1167
1168
  return null;
1168
1169
  var sanitized = sanitizeUrl.sanitizeUrl(href);
1169
- return (React__default["default"].createElement("a", { "aria-label": 'Attachment', className: className, download: download, href: sanitized, rel: rel, target: target }, children));
1170
+ return (React__default["default"].createElement("a", { "aria-label": t('aria/Attachment'), className: className, download: download, href: sanitized, rel: rel, target: target }, children));
1170
1171
  };
1171
1172
  var SafeAnchor = React__default["default"].memo(UnMemoizedSafeAnchor);
1172
1173
 
@@ -1302,6 +1303,1110 @@ var BaseImage = React.forwardRef(function BaseImage(_a, ref) {
1302
1303
  error && React__default["default"].createElement(DownloadButton, { assetUrl: props.src })));
1303
1304
  });
1304
1305
 
1306
+ /*
1307
+ * Copyright 2020 Adobe. All rights reserved.
1308
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1309
+ * you may not use this file except in compliance with the License. You may obtain a copy
1310
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1311
+ *
1312
+ * Unless required by applicable law or agreed to in writing, software distributed under
1313
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1314
+ * OF ANY KIND, either express or implied. See the License for the specific language
1315
+ * governing permissions and limitations under the License.
1316
+ */ /*
1317
+ * Copyright 2020 Adobe. All rights reserved.
1318
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1319
+ * you may not use this file except in compliance with the License. You may obtain a copy
1320
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1321
+ *
1322
+ * Unless required by applicable law or agreed to in writing, software distributed under
1323
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1324
+ * OF ANY KIND, either express or implied. See the License for the specific language
1325
+ * governing permissions and limitations under the License.
1326
+ */
1327
+ /*
1328
+ * Copyright 2020 Adobe. All rights reserved.
1329
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1330
+ * you may not use this file except in compliance with the License. You may obtain a copy
1331
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1332
+ *
1333
+ * Unless required by applicable law or agreed to in writing, software distributed under
1334
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1335
+ * OF ANY KIND, either express or implied. See the License for the specific language
1336
+ * governing permissions and limitations under the License.
1337
+ */
1338
+ const $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== "undefined" ? (React__default["default"]).useLayoutEffect : ()=>{};
1339
+
1340
+
1341
+ const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{
1342
+ var _el_ownerDocument;
1343
+ return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;
1344
+ };
1345
+ const $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{
1346
+ if (el && "window" in el && el.window === el) return el;
1347
+ const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);
1348
+ return doc.defaultView || window;
1349
+ };
1350
+
1351
+
1352
+ /*
1353
+ * Copyright 2020 Adobe. All rights reserved.
1354
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1355
+ * you may not use this file except in compliance with the License. You may obtain a copy
1356
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1357
+ *
1358
+ * Unless required by applicable law or agreed to in writing, software distributed under
1359
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1360
+ * OF ANY KIND, either express or implied. See the License for the specific language
1361
+ * governing permissions and limitations under the License.
1362
+ */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {
1363
+ if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({
1364
+ preventScroll: true
1365
+ });
1366
+ else {
1367
+ let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);
1368
+ element.focus();
1369
+ $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);
1370
+ }
1371
+ }
1372
+ let $7215afc6de606d6b$var$supportsPreventScrollCached = null;
1373
+ function $7215afc6de606d6b$var$supportsPreventScroll() {
1374
+ if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {
1375
+ $7215afc6de606d6b$var$supportsPreventScrollCached = false;
1376
+ try {
1377
+ let focusElem = document.createElement("div");
1378
+ focusElem.focus({
1379
+ get preventScroll () {
1380
+ $7215afc6de606d6b$var$supportsPreventScrollCached = true;
1381
+ return true;
1382
+ }
1383
+ });
1384
+ } catch (e) {
1385
+ // Ignore
1386
+ }
1387
+ }
1388
+ return $7215afc6de606d6b$var$supportsPreventScrollCached;
1389
+ }
1390
+ function $7215afc6de606d6b$var$getScrollableElements(element) {
1391
+ let parent = element.parentNode;
1392
+ let scrollableElements = [];
1393
+ let rootScrollingElement = document.scrollingElement || document.documentElement;
1394
+ while(parent instanceof HTMLElement && parent !== rootScrollingElement){
1395
+ if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({
1396
+ element: parent,
1397
+ scrollTop: parent.scrollTop,
1398
+ scrollLeft: parent.scrollLeft
1399
+ });
1400
+ parent = parent.parentNode;
1401
+ }
1402
+ if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({
1403
+ element: rootScrollingElement,
1404
+ scrollTop: rootScrollingElement.scrollTop,
1405
+ scrollLeft: rootScrollingElement.scrollLeft
1406
+ });
1407
+ return scrollableElements;
1408
+ }
1409
+ function $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {
1410
+ for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){
1411
+ element.scrollTop = scrollTop;
1412
+ element.scrollLeft = scrollLeft;
1413
+ }
1414
+ }
1415
+
1416
+
1417
+ /*
1418
+ * Copyright 2023 Adobe. All rights reserved.
1419
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1420
+ * you may not use this file except in compliance with the License. You may obtain a copy
1421
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1422
+ *
1423
+ * Unless required by applicable law or agreed to in writing, software distributed under
1424
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1425
+ * OF ANY KIND, either express or implied. See the License for the specific language
1426
+ * governing permissions and limitations under the License.
1427
+ */ /*
1428
+ * Copyright 2020 Adobe. All rights reserved.
1429
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1430
+ * you may not use this file except in compliance with the License. You may obtain a copy
1431
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1432
+ *
1433
+ * Unless required by applicable law or agreed to in writing, software distributed under
1434
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1435
+ * OF ANY KIND, either express or implied. See the License for the specific language
1436
+ * governing permissions and limitations under the License.
1437
+ */ function $c87311424ea30a05$var$testUserAgent(re) {
1438
+ var _window_navigator_userAgentData;
1439
+ if (typeof window === "undefined" || window.navigator == null) return false;
1440
+ return ((_window_navigator_userAgentData = window.navigator["userAgentData"]) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands.some((brand)=>re.test(brand.brand))) || re.test(window.navigator.userAgent);
1441
+ }
1442
+ function $c87311424ea30a05$var$testPlatform(re) {
1443
+ var _window_navigator_userAgentData;
1444
+ return typeof window !== "undefined" && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator["userAgentData"]) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;
1445
+ }
1446
+ function $c87311424ea30a05$export$9ac100e40613ea10() {
1447
+ return $c87311424ea30a05$var$testPlatform(/^Mac/i);
1448
+ }
1449
+ function $c87311424ea30a05$export$a11b0059900ceec8() {
1450
+ return $c87311424ea30a05$var$testUserAgent(/Android/i);
1451
+ }
1452
+
1453
+
1454
+ /*
1455
+ * Copyright 2020 Adobe. All rights reserved.
1456
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1457
+ * you may not use this file except in compliance with the License. You may obtain a copy
1458
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1459
+ *
1460
+ * Unless required by applicable law or agreed to in writing, software distributed under
1461
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1462
+ * OF ANY KIND, either express or implied. See the License for the specific language
1463
+ * governing permissions and limitations under the License.
1464
+ */ // We store a global list of elements that are currently transitioning,
1465
+ // mapped to a set of CSS properties that are transitioning for that element.
1466
+ // This is necessary rather than a simple count of transitions because of browser
1467
+ // bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather
1468
+ // than one or the other. So we need to track what's actually transitioning so that
1469
+ // we can ignore these duplicate events.
1470
+ let $bbed8b41f857bcc0$var$transitionsByElement = new Map();
1471
+ // A list of callbacks to call once there are no transitioning elements.
1472
+ let $bbed8b41f857bcc0$var$transitionCallbacks = new Set();
1473
+ function $bbed8b41f857bcc0$var$setupGlobalEvents() {
1474
+ if (typeof window === "undefined") return;
1475
+ function isTransitionEvent(event) {
1476
+ return "propertyName" in event;
1477
+ }
1478
+ let onTransitionStart = (e)=>{
1479
+ if (!isTransitionEvent(e) || !e.target) return;
1480
+ // Add the transitioning property to the list for this element.
1481
+ let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);
1482
+ if (!transitions) {
1483
+ transitions = new Set();
1484
+ $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);
1485
+ // The transitioncancel event must be registered on the element itself, rather than as a global
1486
+ // event. This enables us to handle when the node is deleted from the document while it is transitioning.
1487
+ // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.
1488
+ e.target.addEventListener("transitioncancel", onTransitionEnd, {
1489
+ once: true
1490
+ });
1491
+ }
1492
+ transitions.add(e.propertyName);
1493
+ };
1494
+ let onTransitionEnd = (e)=>{
1495
+ if (!isTransitionEvent(e) || !e.target) return;
1496
+ // Remove property from list of transitioning properties.
1497
+ let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);
1498
+ if (!properties) return;
1499
+ properties.delete(e.propertyName);
1500
+ // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.
1501
+ if (properties.size === 0) {
1502
+ e.target.removeEventListener("transitioncancel", onTransitionEnd);
1503
+ $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);
1504
+ }
1505
+ // If no transitioning elements, call all of the queued callbacks.
1506
+ if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {
1507
+ for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();
1508
+ $bbed8b41f857bcc0$var$transitionCallbacks.clear();
1509
+ }
1510
+ };
1511
+ document.body.addEventListener("transitionrun", onTransitionStart);
1512
+ document.body.addEventListener("transitionend", onTransitionEnd);
1513
+ }
1514
+ if (typeof document !== "undefined") {
1515
+ if (document.readyState !== "loading") $bbed8b41f857bcc0$var$setupGlobalEvents();
1516
+ else document.addEventListener("DOMContentLoaded", $bbed8b41f857bcc0$var$setupGlobalEvents);
1517
+ }
1518
+ function $bbed8b41f857bcc0$export$24490316f764c430(fn) {
1519
+ // Wait one frame to see if an animation starts, e.g. a transition on mount.
1520
+ requestAnimationFrame(()=>{
1521
+ // If no transitions are running, call the function immediately.
1522
+ // Otherwise, add it to a list of callbacks to run at the end of the animation.
1523
+ if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();
1524
+ else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);
1525
+ });
1526
+ }
1527
+
1528
+
1529
+
1530
+ /*
1531
+ * Copyright 2022 Adobe. All rights reserved.
1532
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1533
+ * you may not use this file except in compliance with the License. You may obtain a copy
1534
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1535
+ *
1536
+ * Unless required by applicable law or agreed to in writing, software distributed under
1537
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1538
+ * OF ANY KIND, either express or implied. See the License for the specific language
1539
+ * governing permissions and limitations under the License.
1540
+ */
1541
+ function $6a7db85432448f7f$export$60278871457622de(event) {
1542
+ // JAWS/NVDA with Firefox.
1543
+ if (event.mozInputSource === 0 && event.isTrusted) return true;
1544
+ // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead
1545
+ // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check
1546
+ // to detect TalkBack virtual clicks.
1547
+ if (($c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === "click" && event.buttons === 1;
1548
+ return event.detail === 0 && !event.pointerType;
1549
+ }
1550
+
1551
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
1552
+
1553
+ function getDefaultExportFromCjs (x) {
1554
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
1555
+ }
1556
+
1557
+ /*
1558
+ * Copyright 2020 Adobe. All rights reserved.
1559
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1560
+ * you may not use this file except in compliance with the License. You may obtain a copy
1561
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1562
+ *
1563
+ * Unless required by applicable law or agreed to in writing, software distributed under
1564
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1565
+ * OF ANY KIND, either express or implied. See the License for the specific language
1566
+ * governing permissions and limitations under the License.
1567
+ */
1568
+ const $ae1eeba8b9eafd08$export$5165eccb35aaadb5 = (React__default["default"]).createContext({
1569
+ register: ()=>{}
1570
+ });
1571
+ $ae1eeba8b9eafd08$export$5165eccb35aaadb5.displayName = "PressResponderContext";
1572
+
1573
+
1574
+ /*
1575
+ * Copyright 2020 Adobe. All rights reserved.
1576
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1577
+ * you may not use this file except in compliance with the License. You may obtain a copy
1578
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1579
+ *
1580
+ * Unless required by applicable law or agreed to in writing, software distributed under
1581
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1582
+ * OF ANY KIND, either express or implied. See the License for the specific language
1583
+ * governing permissions and limitations under the License.
1584
+ */ // Portions of the code in this file are based on code from react.
1585
+ // Original licensing for the following can be found in the
1586
+ // NOTICE file in the root directory of this source tree.
1587
+ // See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions
1588
+
1589
+
1590
+
1591
+ let $507fabe10e71c6fb$var$currentModality = null;
1592
+ let $507fabe10e71c6fb$var$changeHandlers = new Set();
1593
+ let $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.
1594
+ let $507fabe10e71c6fb$var$hasEventBeforeFocus = false;
1595
+ let $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;
1596
+ function $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {
1597
+ for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);
1598
+ }
1599
+ /**
1600
+ * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.
1601
+ */ function $507fabe10e71c6fb$var$isValidKey(e) {
1602
+ // Control and Shift keys trigger when navigating back to the tab with keyboard.
1603
+ return !(e.metaKey || !($c87311424ea30a05$export$9ac100e40613ea10)() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
1604
+ }
1605
+ function $507fabe10e71c6fb$var$handleKeyboardEvent(e) {
1606
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = true;
1607
+ if ($507fabe10e71c6fb$var$isValidKey(e)) {
1608
+ $507fabe10e71c6fb$var$currentModality = "keyboard";
1609
+ $507fabe10e71c6fb$var$triggerChangeHandlers("keyboard", e);
1610
+ }
1611
+ }
1612
+ function $507fabe10e71c6fb$var$handlePointerEvent(e) {
1613
+ $507fabe10e71c6fb$var$currentModality = "pointer";
1614
+ if (e.type === "mousedown" || e.type === "pointerdown") {
1615
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = true;
1616
+ $507fabe10e71c6fb$var$triggerChangeHandlers("pointer", e);
1617
+ }
1618
+ }
1619
+ function $507fabe10e71c6fb$var$handleClickEvent(e) {
1620
+ if (($6a7db85432448f7f$export$60278871457622de)(e)) {
1621
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = true;
1622
+ $507fabe10e71c6fb$var$currentModality = "virtual";
1623
+ }
1624
+ }
1625
+ function $507fabe10e71c6fb$var$handleFocusEvent(e) {
1626
+ // Firefox fires two extra focus events when the user first clicks into an iframe:
1627
+ // first on the window, then on the document. We ignore these events so they don't
1628
+ // cause keyboard focus rings to appear.
1629
+ if (e.target === window || e.target === document) return;
1630
+ // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.
1631
+ // This occurs, for example, when navigating a form with the next/previous buttons on iOS.
1632
+ if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {
1633
+ $507fabe10e71c6fb$var$currentModality = "virtual";
1634
+ $507fabe10e71c6fb$var$triggerChangeHandlers("virtual", e);
1635
+ }
1636
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = false;
1637
+ $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;
1638
+ }
1639
+ function $507fabe10e71c6fb$var$handleWindowBlur() {
1640
+ // When the window is blurred, reset state. This is necessary when tabbing out of the window,
1641
+ // for example, since a subsequent focus event won't be fired.
1642
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = false;
1643
+ $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;
1644
+ }
1645
+ /**
1646
+ * Setup global event listeners to control when keyboard focus style should be visible.
1647
+ */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {
1648
+ if (typeof window === "undefined" || $507fabe10e71c6fb$export$d90243b58daecda7.get(($431fbd86ca7dc216$export$f21a1ffae260145a)(element))) return;
1649
+ const windowObject = ($431fbd86ca7dc216$export$f21a1ffae260145a)(element);
1650
+ const documentObject = ($431fbd86ca7dc216$export$b204af158042fbac)(element);
1651
+ // Programmatic focus() calls shouldn't affect the current input modality.
1652
+ // However, we need to detect other cases when a focus event occurs without
1653
+ // a preceding user event (e.g. screen reader focus). Overriding the focus
1654
+ // method on HTMLElement.prototype is a bit hacky, but works.
1655
+ let focus = windowObject.HTMLElement.prototype.focus;
1656
+ windowObject.HTMLElement.prototype.focus = function() {
1657
+ $507fabe10e71c6fb$var$hasEventBeforeFocus = true;
1658
+ focus.apply(this, arguments);
1659
+ };
1660
+ documentObject.addEventListener("keydown", $507fabe10e71c6fb$var$handleKeyboardEvent, true);
1661
+ documentObject.addEventListener("keyup", $507fabe10e71c6fb$var$handleKeyboardEvent, true);
1662
+ documentObject.addEventListener("click", $507fabe10e71c6fb$var$handleClickEvent, true);
1663
+ // Register focus events on the window so they are sure to happen
1664
+ // before React's event listeners (registered on the document).
1665
+ windowObject.addEventListener("focus", $507fabe10e71c6fb$var$handleFocusEvent, true);
1666
+ windowObject.addEventListener("blur", $507fabe10e71c6fb$var$handleWindowBlur, false);
1667
+ if (typeof PointerEvent !== "undefined") {
1668
+ documentObject.addEventListener("pointerdown", $507fabe10e71c6fb$var$handlePointerEvent, true);
1669
+ documentObject.addEventListener("pointermove", $507fabe10e71c6fb$var$handlePointerEvent, true);
1670
+ documentObject.addEventListener("pointerup", $507fabe10e71c6fb$var$handlePointerEvent, true);
1671
+ } else {
1672
+ documentObject.addEventListener("mousedown", $507fabe10e71c6fb$var$handlePointerEvent, true);
1673
+ documentObject.addEventListener("mousemove", $507fabe10e71c6fb$var$handlePointerEvent, true);
1674
+ documentObject.addEventListener("mouseup", $507fabe10e71c6fb$var$handlePointerEvent, true);
1675
+ }
1676
+ // Add unmount handler
1677
+ windowObject.addEventListener("beforeunload", ()=>{
1678
+ $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);
1679
+ }, {
1680
+ once: true
1681
+ });
1682
+ $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {
1683
+ focus: focus
1684
+ });
1685
+ }
1686
+ const $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{
1687
+ const windowObject = ($431fbd86ca7dc216$export$f21a1ffae260145a)(element);
1688
+ const documentObject = ($431fbd86ca7dc216$export$b204af158042fbac)(element);
1689
+ if (loadListener) documentObject.removeEventListener("DOMContentLoaded", loadListener);
1690
+ if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;
1691
+ windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;
1692
+ documentObject.removeEventListener("keydown", $507fabe10e71c6fb$var$handleKeyboardEvent, true);
1693
+ documentObject.removeEventListener("keyup", $507fabe10e71c6fb$var$handleKeyboardEvent, true);
1694
+ documentObject.removeEventListener("click", $507fabe10e71c6fb$var$handleClickEvent, true);
1695
+ windowObject.removeEventListener("focus", $507fabe10e71c6fb$var$handleFocusEvent, true);
1696
+ windowObject.removeEventListener("blur", $507fabe10e71c6fb$var$handleWindowBlur, false);
1697
+ if (typeof PointerEvent !== "undefined") {
1698
+ documentObject.removeEventListener("pointerdown", $507fabe10e71c6fb$var$handlePointerEvent, true);
1699
+ documentObject.removeEventListener("pointermove", $507fabe10e71c6fb$var$handlePointerEvent, true);
1700
+ documentObject.removeEventListener("pointerup", $507fabe10e71c6fb$var$handlePointerEvent, true);
1701
+ } else {
1702
+ documentObject.removeEventListener("mousedown", $507fabe10e71c6fb$var$handlePointerEvent, true);
1703
+ documentObject.removeEventListener("mousemove", $507fabe10e71c6fb$var$handlePointerEvent, true);
1704
+ documentObject.removeEventListener("mouseup", $507fabe10e71c6fb$var$handlePointerEvent, true);
1705
+ }
1706
+ $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);
1707
+ };
1708
+ function $507fabe10e71c6fb$export$2f1888112f558a7d(element) {
1709
+ const documentObject = ($431fbd86ca7dc216$export$b204af158042fbac)(element);
1710
+ let loadListener;
1711
+ if (documentObject.readyState !== "loading") $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);
1712
+ else {
1713
+ loadListener = ()=>{
1714
+ $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);
1715
+ };
1716
+ documentObject.addEventListener("DOMContentLoaded", loadListener);
1717
+ }
1718
+ return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);
1719
+ }
1720
+ // Server-side rendering does not have the document object defined
1721
+ // eslint-disable-next-line no-restricted-globals
1722
+ if (typeof document !== "undefined") $507fabe10e71c6fb$export$2f1888112f558a7d();
1723
+ function $507fabe10e71c6fb$export$630ff653c5ada6a9() {
1724
+ return $507fabe10e71c6fb$var$currentModality;
1725
+ }
1726
+
1727
+ /*
1728
+ * Copyright 2020 Adobe. All rights reserved.
1729
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1730
+ * you may not use this file except in compliance with the License. You may obtain a copy
1731
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1732
+ *
1733
+ * Unless required by applicable law or agreed to in writing, software distributed under
1734
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1735
+ * OF ANY KIND, either express or implied. See the License for the specific language
1736
+ * governing permissions and limitations under the License.
1737
+ */ /*
1738
+ * Copyright 2020 Adobe. All rights reserved.
1739
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1740
+ * you may not use this file except in compliance with the License. You may obtain a copy
1741
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1742
+ *
1743
+ * Unless required by applicable law or agreed to in writing, software distributed under
1744
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1745
+ * OF ANY KIND, either express or implied. See the License for the specific language
1746
+ * governing permissions and limitations under the License.
1747
+ */ /*
1748
+ * Copyright 2020 Adobe. All rights reserved.
1749
+ * This file is licensed to you under the Apache License, Version 2.0 (the 'License');
1750
+ * you may not use this file except in compliance with the License. You may obtain a copy
1751
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1752
+ *
1753
+ * Unless required by applicable law or agreed to in writing, software distributed under
1754
+ * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1755
+ * OF ANY KIND, either express or implied. See the License for the specific language
1756
+ * governing permissions and limitations under the License.
1757
+ */
1758
+
1759
+ function $6a99195332edec8b$export$80f3e147d781571c(element) {
1760
+ // If the user is interacting with a virtual cursor, e.g. screen reader, then
1761
+ // wait until after any animated transitions that are currently occurring on
1762
+ // the page before shifting focus. This avoids issues with VoiceOver on iOS
1763
+ // causing the page to scroll when moving focus if the element is transitioning
1764
+ // from off the screen.
1765
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(element);
1766
+ if (($507fabe10e71c6fb$export$630ff653c5ada6a9)() === "virtual") {
1767
+ let lastFocusedElement = ownerDocument.activeElement;
1768
+ ($bbed8b41f857bcc0$export$24490316f764c430)(()=>{
1769
+ // If focus did not move and the element is still in the document, focus it.
1770
+ if (ownerDocument.activeElement === lastFocusedElement && element.isConnected) ($7215afc6de606d6b$export$de79e2c695e052f3)(element);
1771
+ });
1772
+ } else ($7215afc6de606d6b$export$de79e2c695e052f3)(element);
1773
+ }
1774
+
1775
+
1776
+
1777
+ /*
1778
+ * Copyright 2021 Adobe. All rights reserved.
1779
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
1780
+ * you may not use this file except in compliance with the License. You may obtain a copy
1781
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
1782
+ *
1783
+ * Unless required by applicable law or agreed to in writing, software distributed under
1784
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
1785
+ * OF ANY KIND, either express or implied. See the License for the specific language
1786
+ * governing permissions and limitations under the License.
1787
+ */
1788
+ function $645f2e67b85a24c9$var$isStyleVisible(element) {
1789
+ const windowObject = ($431fbd86ca7dc216$export$f21a1ffae260145a)(element);
1790
+ if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;
1791
+ let { display: display, visibility: visibility } = element.style;
1792
+ let isVisible = display !== "none" && visibility !== "hidden" && visibility !== "collapse";
1793
+ if (isVisible) {
1794
+ const { getComputedStyle: getComputedStyle } = element.ownerDocument.defaultView;
1795
+ let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);
1796
+ isVisible = computedDisplay !== "none" && computedVisibility !== "hidden" && computedVisibility !== "collapse";
1797
+ }
1798
+ return isVisible;
1799
+ }
1800
+ function $645f2e67b85a24c9$var$isAttributeVisible(element, childElement) {
1801
+ return !element.hasAttribute("hidden") && (element.nodeName === "DETAILS" && childElement && childElement.nodeName !== "SUMMARY" ? element.hasAttribute("open") : true);
1802
+ }
1803
+ function $645f2e67b85a24c9$export$e989c0fffaa6b27a(element, childElement) {
1804
+ return element.nodeName !== "#comment" && $645f2e67b85a24c9$var$isStyleVisible(element) && $645f2e67b85a24c9$var$isAttributeVisible(element, childElement) && (!element.parentElement || $645f2e67b85a24c9$export$e989c0fffaa6b27a(element.parentElement, element));
1805
+ }
1806
+
1807
+
1808
+
1809
+ const $9bf71ea28793e738$var$FocusContext = /*#__PURE__*/ (React__default["default"]).createContext(null);
1810
+ let $9bf71ea28793e738$var$activeScope = null;
1811
+ function $9bf71ea28793e738$export$20e40289641fbbb6(props) {
1812
+ let { children: children, contain: contain, restoreFocus: restoreFocus, autoFocus: autoFocus } = props;
1813
+ let startRef = (React.useRef)(null);
1814
+ let endRef = (React.useRef)(null);
1815
+ let scopeRef = (React.useRef)([]);
1816
+ let { parentNode: parentNode } = (React.useContext)($9bf71ea28793e738$var$FocusContext) || {};
1817
+ // Create a tree node here so we can add children to it even before it is added to the tree.
1818
+ let node = (React.useMemo)(()=>new $9bf71ea28793e738$var$TreeNode({
1819
+ scopeRef: scopeRef
1820
+ }), [
1821
+ scopeRef
1822
+ ]);
1823
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
1824
+ // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),
1825
+ // use the active scope as the parent instead of the parent from context. Layout effects run bottom
1826
+ // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope
1827
+ // that is being added should get the activeScope as its parent.
1828
+ let parent = parentNode || $9bf71ea28793e738$export$d06fae2ee68b101e.root;
1829
+ if ($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parent.scopeRef) && $9bf71ea28793e738$var$activeScope && !$9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, parent.scopeRef)) {
1830
+ let activeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);
1831
+ if (activeNode) parent = activeNode;
1832
+ }
1833
+ // Add the node to the parent, and to the tree.
1834
+ parent.addChild(node);
1835
+ $9bf71ea28793e738$export$d06fae2ee68b101e.addNode(node);
1836
+ }, [
1837
+ node,
1838
+ parentNode
1839
+ ]);
1840
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
1841
+ let node = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);
1842
+ if (node) node.contain = !!contain;
1843
+ }, [
1844
+ contain
1845
+ ]);
1846
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
1847
+ var _startRef_current;
1848
+ // Find all rendered nodes between the sentinels and add them to the scope.
1849
+ let node = (_startRef_current = startRef.current) === null || _startRef_current === void 0 ? void 0 : _startRef_current.nextSibling;
1850
+ let nodes = [];
1851
+ while(node && node !== endRef.current){
1852
+ nodes.push(node);
1853
+ node = node.nextSibling;
1854
+ }
1855
+ scopeRef.current = nodes;
1856
+ }, [
1857
+ children
1858
+ ]);
1859
+ $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restoreFocus, contain);
1860
+ $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain);
1861
+ $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain);
1862
+ $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus);
1863
+ // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.
1864
+ // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.
1865
+ (React.useEffect)(()=>{
1866
+ const activeElement = ($431fbd86ca7dc216$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined).activeElement;
1867
+ let scope = null;
1868
+ if ($9bf71ea28793e738$var$isElementInScope(activeElement, scopeRef.current)) {
1869
+ // We need to traverse the focusScope tree and find the bottom most scope that
1870
+ // contains the active element and set that as the activeScope.
1871
+ for (let node of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse())if (node.scopeRef && $9bf71ea28793e738$var$isElementInScope(activeElement, node.scopeRef.current)) scope = node;
1872
+ if (scope === $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) $9bf71ea28793e738$var$activeScope = scope.scopeRef;
1873
+ }
1874
+ }, [
1875
+ scopeRef
1876
+ ]);
1877
+ // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF
1878
+ // in useRestoreFocus cleanup runs.
1879
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
1880
+ return ()=>{
1881
+ var _focusScopeTree_getTreeNode_parent, _focusScopeTree_getTreeNode;
1882
+ var _focusScopeTree_getTreeNode_parent_scopeRef;
1883
+ // Scope may have been re-parented.
1884
+ let parentScope = (_focusScopeTree_getTreeNode_parent_scopeRef = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : (_focusScopeTree_getTreeNode_parent = _focusScopeTree_getTreeNode.parent) === null || _focusScopeTree_getTreeNode_parent === void 0 ? void 0 : _focusScopeTree_getTreeNode_parent.scopeRef) !== null && _focusScopeTree_getTreeNode_parent_scopeRef !== void 0 ? _focusScopeTree_getTreeNode_parent_scopeRef : null;
1885
+ if ((scopeRef === $9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope(scopeRef, $9bf71ea28793e738$var$activeScope)) && (!parentScope || $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parentScope))) $9bf71ea28793e738$var$activeScope = parentScope;
1886
+ $9bf71ea28793e738$export$d06fae2ee68b101e.removeTreeNode(scopeRef);
1887
+ };
1888
+ }, [
1889
+ scopeRef
1890
+ ]);
1891
+ let focusManager = (React.useMemo)(()=>$9bf71ea28793e738$var$createFocusManagerForScope(scopeRef), []);
1892
+ let value = (React.useMemo)(()=>({
1893
+ focusManager: focusManager,
1894
+ parentNode: node
1895
+ }), [
1896
+ node,
1897
+ focusManager
1898
+ ]);
1899
+ return /*#__PURE__*/ (React__default["default"]).createElement($9bf71ea28793e738$var$FocusContext.Provider, {
1900
+ value: value
1901
+ }, /*#__PURE__*/ (React__default["default"]).createElement("span", {
1902
+ "data-focus-scope-start": true,
1903
+ hidden: true,
1904
+ ref: startRef
1905
+ }), children, /*#__PURE__*/ (React__default["default"]).createElement("span", {
1906
+ "data-focus-scope-end": true,
1907
+ hidden: true,
1908
+ ref: endRef
1909
+ }));
1910
+ }
1911
+ function $9bf71ea28793e738$var$createFocusManagerForScope(scopeRef) {
1912
+ return {
1913
+ focusNext (opts = {}) {
1914
+ let scope = scopeRef.current;
1915
+ let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;
1916
+ let node = from || ($431fbd86ca7dc216$export$b204af158042fbac)(scope[0]).activeElement;
1917
+ let sentinel = scope[0].previousElementSibling;
1918
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
1919
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
1920
+ tabbable: tabbable,
1921
+ accept: accept
1922
+ }, scope);
1923
+ walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;
1924
+ let nextNode = walker.nextNode();
1925
+ if (!nextNode && wrap) {
1926
+ walker.currentNode = sentinel;
1927
+ nextNode = walker.nextNode();
1928
+ }
1929
+ if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);
1930
+ return nextNode;
1931
+ },
1932
+ focusPrevious (opts = {}) {
1933
+ let scope = scopeRef.current;
1934
+ let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;
1935
+ let node = from || ($431fbd86ca7dc216$export$b204af158042fbac)(scope[0]).activeElement;
1936
+ let sentinel = scope[scope.length - 1].nextElementSibling;
1937
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
1938
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
1939
+ tabbable: tabbable,
1940
+ accept: accept
1941
+ }, scope);
1942
+ walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;
1943
+ let previousNode = walker.previousNode();
1944
+ if (!previousNode && wrap) {
1945
+ walker.currentNode = sentinel;
1946
+ previousNode = walker.previousNode();
1947
+ }
1948
+ if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);
1949
+ return previousNode;
1950
+ },
1951
+ focusFirst (opts = {}) {
1952
+ let scope = scopeRef.current;
1953
+ let { tabbable: tabbable, accept: accept } = opts;
1954
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
1955
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
1956
+ tabbable: tabbable,
1957
+ accept: accept
1958
+ }, scope);
1959
+ walker.currentNode = scope[0].previousElementSibling;
1960
+ let nextNode = walker.nextNode();
1961
+ if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);
1962
+ return nextNode;
1963
+ },
1964
+ focusLast (opts = {}) {
1965
+ let scope = scopeRef.current;
1966
+ let { tabbable: tabbable, accept: accept } = opts;
1967
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
1968
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
1969
+ tabbable: tabbable,
1970
+ accept: accept
1971
+ }, scope);
1972
+ walker.currentNode = scope[scope.length - 1].nextElementSibling;
1973
+ let previousNode = walker.previousNode();
1974
+ if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);
1975
+ return previousNode;
1976
+ }
1977
+ };
1978
+ }
1979
+ const $9bf71ea28793e738$var$focusableElements = [
1980
+ "input:not([disabled]):not([type=hidden])",
1981
+ "select:not([disabled])",
1982
+ "textarea:not([disabled])",
1983
+ "button:not([disabled])",
1984
+ "a[href]",
1985
+ "area[href]",
1986
+ "summary",
1987
+ "iframe",
1988
+ "object",
1989
+ "embed",
1990
+ "audio[controls]",
1991
+ "video[controls]",
1992
+ "[contenteditable]"
1993
+ ];
1994
+ const $9bf71ea28793e738$var$FOCUSABLE_ELEMENT_SELECTOR = $9bf71ea28793e738$var$focusableElements.join(":not([hidden]),") + ",[tabindex]:not([disabled]):not([hidden])";
1995
+ $9bf71ea28793e738$var$focusableElements.push('[tabindex]:not([tabindex="-1"]):not([disabled])');
1996
+ const $9bf71ea28793e738$var$TABBABLE_ELEMENT_SELECTOR = $9bf71ea28793e738$var$focusableElements.join(':not([hidden]):not([tabindex="-1"]),');
1997
+ function $9bf71ea28793e738$var$getScopeRoot(scope) {
1998
+ return scope[0].parentElement;
1999
+ }
2000
+ function $9bf71ea28793e738$var$shouldContainFocus(scopeRef) {
2001
+ let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);
2002
+ while(scope && scope.scopeRef !== scopeRef){
2003
+ if (scope.contain) return false;
2004
+ scope = scope.parent;
2005
+ }
2006
+ return true;
2007
+ }
2008
+ function $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain) {
2009
+ let focusedNode = (React.useRef)();
2010
+ let raf = (React.useRef)();
2011
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2012
+ let scope = scopeRef.current;
2013
+ if (!contain) {
2014
+ // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment
2015
+ if (raf.current) {
2016
+ cancelAnimationFrame(raf.current);
2017
+ raf.current = undefined;
2018
+ }
2019
+ return;
2020
+ }
2021
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scope ? scope[0] : undefined);
2022
+ // Handle the Tab key to contain focus within the scope
2023
+ let onKeyDown = (e)=>{
2024
+ if (e.key !== "Tab" || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef)) return;
2025
+ let focusedElement = ownerDocument.activeElement;
2026
+ let scope = scopeRef.current;
2027
+ if (!scope || !$9bf71ea28793e738$var$isElementInScope(focusedElement, scope)) return;
2028
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
2029
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
2030
+ tabbable: true
2031
+ }, scope);
2032
+ if (!focusedElement) return;
2033
+ walker.currentNode = focusedElement;
2034
+ let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();
2035
+ if (!nextElement) {
2036
+ walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;
2037
+ nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();
2038
+ }
2039
+ e.preventDefault();
2040
+ if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);
2041
+ };
2042
+ let onFocus = (e)=>{
2043
+ // If focusing an element in a child scope of the currently active scope, the child becomes active.
2044
+ // Moving out of the active scope to an ancestor is not allowed.
2045
+ if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope(e.target, scopeRef.current)) {
2046
+ $9bf71ea28793e738$var$activeScope = scopeRef;
2047
+ focusedNode.current = e.target;
2048
+ } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope(e.target, scopeRef)) {
2049
+ // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),
2050
+ // restore focus to the previously focused node or the first tabbable element in the active scope.
2051
+ if (focusedNode.current) focusedNode.current.focus();
2052
+ else if ($9bf71ea28793e738$var$activeScope && $9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);
2053
+ } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef)) focusedNode.current = e.target;
2054
+ };
2055
+ let onBlur = (e)=>{
2056
+ // Firefox doesn't shift focus back to the Dialog properly without this
2057
+ if (raf.current) cancelAnimationFrame(raf.current);
2058
+ raf.current = requestAnimationFrame(()=>{
2059
+ // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe
2060
+ if (ownerDocument.activeElement && $9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope(ownerDocument.activeElement, scopeRef)) {
2061
+ $9bf71ea28793e738$var$activeScope = scopeRef;
2062
+ if (ownerDocument.body.contains(e.target)) {
2063
+ var _focusedNode_current;
2064
+ focusedNode.current = e.target;
2065
+ (_focusedNode_current = focusedNode.current) === null || _focusedNode_current === void 0 ? void 0 : _focusedNode_current.focus();
2066
+ } else if ($9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);
2067
+ }
2068
+ });
2069
+ };
2070
+ ownerDocument.addEventListener("keydown", onKeyDown, false);
2071
+ ownerDocument.addEventListener("focusin", onFocus, false);
2072
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener("focusin", onFocus, false));
2073
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener("focusout", onBlur, false));
2074
+ return ()=>{
2075
+ ownerDocument.removeEventListener("keydown", onKeyDown, false);
2076
+ ownerDocument.removeEventListener("focusin", onFocus, false);
2077
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener("focusin", onFocus, false));
2078
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener("focusout", onBlur, false));
2079
+ };
2080
+ }, [
2081
+ scopeRef,
2082
+ contain
2083
+ ]);
2084
+ // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur
2085
+ // eslint-disable-next-line arrow-body-style
2086
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2087
+ return ()=>{
2088
+ if (raf.current) cancelAnimationFrame(raf.current);
2089
+ };
2090
+ }, [
2091
+ raf
2092
+ ]);
2093
+ }
2094
+ function $9bf71ea28793e738$var$isElementInAnyScope(element) {
2095
+ return $9bf71ea28793e738$var$isElementInChildScope(element);
2096
+ }
2097
+ function $9bf71ea28793e738$var$isElementInScope(element, scope) {
2098
+ if (!element) return false;
2099
+ if (!scope) return false;
2100
+ return scope.some((node)=>node.contains(element));
2101
+ }
2102
+ function $9bf71ea28793e738$var$isElementInChildScope(element, scope = null) {
2103
+ // If the element is within a top layer element (e.g. toasts), always allow moving focus there.
2104
+ if (element instanceof Element && element.closest("[data-react-aria-top-layer]")) return true;
2105
+ // node.contains in isElementInScope covers child scopes that are also DOM children,
2106
+ // but does not cover child scopes in portals.
2107
+ for (let { scopeRef: s } of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope))){
2108
+ if (s && $9bf71ea28793e738$var$isElementInScope(element, s.current)) return true;
2109
+ }
2110
+ return false;
2111
+ }
2112
+ function $9bf71ea28793e738$var$isAncestorScope(ancestor, scope) {
2113
+ var _focusScopeTree_getTreeNode;
2114
+ let parent = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : _focusScopeTree_getTreeNode.parent;
2115
+ while(parent){
2116
+ if (parent.scopeRef === ancestor) return true;
2117
+ parent = parent.parent;
2118
+ }
2119
+ return false;
2120
+ }
2121
+ function $9bf71ea28793e738$var$focusElement(element, scroll = false) {
2122
+ if (element != null && !scroll) try {
2123
+ (0, $6a99195332edec8b$export$80f3e147d781571c)(element);
2124
+ } catch (err) {
2125
+ // ignore
2126
+ }
2127
+ else if (element != null) try {
2128
+ element.focus();
2129
+ } catch (err) {
2130
+ // ignore
2131
+ }
2132
+ }
2133
+ function $9bf71ea28793e738$var$focusFirstInScope(scope, tabbable = true) {
2134
+ let sentinel = scope[0].previousElementSibling;
2135
+ let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
2136
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
2137
+ tabbable: tabbable
2138
+ }, scope);
2139
+ walker.currentNode = sentinel;
2140
+ let nextNode = walker.nextNode();
2141
+ // If the scope does not contain a tabbable element, use the first focusable element.
2142
+ if (tabbable && !nextNode) {
2143
+ scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);
2144
+ walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {
2145
+ tabbable: false
2146
+ }, scope);
2147
+ walker.currentNode = sentinel;
2148
+ nextNode = walker.nextNode();
2149
+ }
2150
+ $9bf71ea28793e738$var$focusElement(nextNode);
2151
+ }
2152
+ function $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus) {
2153
+ const autoFocusRef = (React__default["default"]).useRef(autoFocus);
2154
+ (React.useEffect)(()=>{
2155
+ if (autoFocusRef.current) {
2156
+ $9bf71ea28793e738$var$activeScope = scopeRef;
2157
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);
2158
+ if (!$9bf71ea28793e738$var$isElementInScope(ownerDocument.activeElement, $9bf71ea28793e738$var$activeScope.current) && scopeRef.current) $9bf71ea28793e738$var$focusFirstInScope(scopeRef.current);
2159
+ }
2160
+ autoFocusRef.current = false;
2161
+ }, [
2162
+ scopeRef
2163
+ ]);
2164
+ }
2165
+ function $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restore, contain) {
2166
+ // tracks the active scope, in case restore and contain are both false.
2167
+ // if either are true, this is tracked in useRestoreFocus or useFocusContainment.
2168
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2169
+ if (restore || contain) return;
2170
+ let scope = scopeRef.current;
2171
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scope ? scope[0] : undefined);
2172
+ let onFocus = (e)=>{
2173
+ let target = e.target;
2174
+ if ($9bf71ea28793e738$var$isElementInScope(target, scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;
2175
+ else if (!$9bf71ea28793e738$var$isElementInAnyScope(target)) $9bf71ea28793e738$var$activeScope = null;
2176
+ };
2177
+ ownerDocument.addEventListener("focusin", onFocus, false);
2178
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener("focusin", onFocus, false));
2179
+ return ()=>{
2180
+ ownerDocument.removeEventListener("focusin", onFocus, false);
2181
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener("focusin", onFocus, false));
2182
+ };
2183
+ }, [
2184
+ scopeRef,
2185
+ restore,
2186
+ contain
2187
+ ]);
2188
+ }
2189
+ function $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef) {
2190
+ let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);
2191
+ while(scope && scope.scopeRef !== scopeRef){
2192
+ if (scope.nodeToRestore) return false;
2193
+ scope = scope.parent;
2194
+ }
2195
+ return (scope === null || scope === void 0 ? void 0 : scope.scopeRef) === scopeRef;
2196
+ }
2197
+ function $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain) {
2198
+ // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.
2199
+ // eslint-disable-next-line no-restricted-globals
2200
+ const nodeToRestoreRef = (React.useRef)(typeof document !== "undefined" ? ($431fbd86ca7dc216$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined).activeElement : null);
2201
+ // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus
2202
+ // restoring-non-containing scopes should only care if they become active so they can perform the restore
2203
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2204
+ let scope = scopeRef.current;
2205
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scope ? scope[0] : undefined);
2206
+ if (!restoreFocus || contain) return;
2207
+ let onFocus = ()=>{
2208
+ // If focusing an element in a child scope of the currently active scope, the child becomes active.
2209
+ // Moving out of the active scope to an ancestor is not allowed.
2210
+ if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope(ownerDocument.activeElement, scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;
2211
+ };
2212
+ ownerDocument.addEventListener("focusin", onFocus, false);
2213
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener("focusin", onFocus, false));
2214
+ return ()=>{
2215
+ ownerDocument.removeEventListener("focusin", onFocus, false);
2216
+ scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener("focusin", onFocus, false));
2217
+ };
2218
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2219
+ }, [
2220
+ scopeRef,
2221
+ contain
2222
+ ]);
2223
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2224
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);
2225
+ if (!restoreFocus) return;
2226
+ // Handle the Tab key so that tabbing out of the scope goes to the next element
2227
+ // after the node that had focus when the scope mounted. This is important when
2228
+ // using portals for overlays, so that focus goes to the expected element when
2229
+ // tabbing out of the overlay.
2230
+ let onKeyDown = (e)=>{
2231
+ if (e.key !== "Tab" || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef)) return;
2232
+ let focusedElement = ownerDocument.activeElement;
2233
+ if (!$9bf71ea28793e738$var$isElementInScope(focusedElement, scopeRef.current)) return;
2234
+ let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);
2235
+ if (!treeNode) return;
2236
+ let nodeToRestore = treeNode.nodeToRestore;
2237
+ // Create a DOM tree walker that matches all tabbable elements
2238
+ let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(ownerDocument.body, {
2239
+ tabbable: true
2240
+ });
2241
+ // Find the next tabbable element after the currently focused element
2242
+ walker.currentNode = focusedElement;
2243
+ let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();
2244
+ if (!nodeToRestore || !ownerDocument.body.contains(nodeToRestore) || nodeToRestore === ownerDocument.body) {
2245
+ nodeToRestore = undefined;
2246
+ treeNode.nodeToRestore = undefined;
2247
+ }
2248
+ // If there is no next element, or it is outside the current scope, move focus to the
2249
+ // next element after the node to restore to instead.
2250
+ if ((!nextElement || !$9bf71ea28793e738$var$isElementInScope(nextElement, scopeRef.current)) && nodeToRestore) {
2251
+ walker.currentNode = nodeToRestore;
2252
+ // Skip over elements within the scope, in case the scope immediately follows the node to restore.
2253
+ do nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();
2254
+ while ($9bf71ea28793e738$var$isElementInScope(nextElement, scopeRef.current));
2255
+ e.preventDefault();
2256
+ e.stopPropagation();
2257
+ if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);
2258
+ else // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)
2259
+ // then move focus to the body.
2260
+ // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)
2261
+ if (!$9bf71ea28793e738$var$isElementInAnyScope(nodeToRestore)) focusedElement.blur();
2262
+ else $9bf71ea28793e738$var$focusElement(nodeToRestore, true);
2263
+ }
2264
+ };
2265
+ if (!contain) ownerDocument.addEventListener("keydown", onKeyDown, true);
2266
+ return ()=>{
2267
+ if (!contain) ownerDocument.removeEventListener("keydown", onKeyDown, true);
2268
+ };
2269
+ }, [
2270
+ scopeRef,
2271
+ restoreFocus,
2272
+ contain
2273
+ ]);
2274
+ // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.
2275
+ ($f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{
2276
+ const ownerDocument = ($431fbd86ca7dc216$export$b204af158042fbac)(scopeRef.current ? scopeRef.current[0] : undefined);
2277
+ if (!restoreFocus) return;
2278
+ let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);
2279
+ if (!treeNode) return;
2280
+ var _nodeToRestoreRef_current;
2281
+ treeNode.nodeToRestore = (_nodeToRestoreRef_current = nodeToRestoreRef.current) !== null && _nodeToRestoreRef_current !== void 0 ? _nodeToRestoreRef_current : undefined;
2282
+ return ()=>{
2283
+ let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);
2284
+ if (!treeNode) return;
2285
+ let nodeToRestore = treeNode.nodeToRestore;
2286
+ // if we already lost focus to the body and this was the active scope, then we should attempt to restore
2287
+ if (restoreFocus && nodeToRestore && // eslint-disable-next-line react-hooks/exhaustive-deps
2288
+ ($9bf71ea28793e738$var$isElementInScope(ownerDocument.activeElement, scopeRef.current) || ownerDocument.activeElement === ownerDocument.body && $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef))) {
2289
+ // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it
2290
+ let clonedTree = $9bf71ea28793e738$export$d06fae2ee68b101e.clone();
2291
+ requestAnimationFrame(()=>{
2292
+ // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere
2293
+ if (ownerDocument.activeElement === ownerDocument.body) {
2294
+ // look up the tree starting with our scope to find a nodeToRestore still in the DOM
2295
+ let treeNode = clonedTree.getTreeNode(scopeRef);
2296
+ while(treeNode){
2297
+ if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {
2298
+ $9bf71ea28793e738$var$focusElement(treeNode.nodeToRestore);
2299
+ return;
2300
+ }
2301
+ treeNode = treeNode.parent;
2302
+ }
2303
+ // If no nodeToRestore was found, focus the first element in the nearest
2304
+ // ancestor scope that is still in the tree.
2305
+ treeNode = clonedTree.getTreeNode(scopeRef);
2306
+ while(treeNode){
2307
+ if (treeNode.scopeRef && treeNode.scopeRef.current && $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(treeNode.scopeRef)) {
2308
+ $9bf71ea28793e738$var$focusFirstInScope(treeNode.scopeRef.current, true);
2309
+ return;
2310
+ }
2311
+ treeNode = treeNode.parent;
2312
+ }
2313
+ }
2314
+ });
2315
+ }
2316
+ };
2317
+ }, [
2318
+ scopeRef,
2319
+ restoreFocus
2320
+ ]);
2321
+ }
2322
+ function $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, opts, scope) {
2323
+ let selector = (opts === null || opts === void 0 ? void 0 : opts.tabbable) ? $9bf71ea28793e738$var$TABBABLE_ELEMENT_SELECTOR : $9bf71ea28793e738$var$FOCUSABLE_ELEMENT_SELECTOR;
2324
+ let walker = ($431fbd86ca7dc216$export$b204af158042fbac)(root).createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
2325
+ acceptNode (node) {
2326
+ var _opts_from;
2327
+ // Skip nodes inside the starting node.
2328
+ if (opts === null || opts === void 0 ? void 0 : (_opts_from = opts.from) === null || _opts_from === void 0 ? void 0 : _opts_from.contains(node)) return NodeFilter.FILTER_REJECT;
2329
+ if (node.matches(selector) && ($645f2e67b85a24c9$export$e989c0fffaa6b27a)(node) && (!scope || $9bf71ea28793e738$var$isElementInScope(node, scope)) && (!(opts === null || opts === void 0 ? void 0 : opts.accept) || opts.accept(node))) return NodeFilter.FILTER_ACCEPT;
2330
+ return NodeFilter.FILTER_SKIP;
2331
+ }
2332
+ });
2333
+ if (opts === null || opts === void 0 ? void 0 : opts.from) walker.currentNode = opts.from;
2334
+ return walker;
2335
+ }
2336
+ class $9bf71ea28793e738$var$Tree {
2337
+ get size() {
2338
+ return this.fastMap.size;
2339
+ }
2340
+ getTreeNode(data) {
2341
+ return this.fastMap.get(data);
2342
+ }
2343
+ addTreeNode(scopeRef, parent, nodeToRestore) {
2344
+ let parentNode = this.fastMap.get(parent !== null && parent !== void 0 ? parent : null);
2345
+ if (!parentNode) return;
2346
+ let node = new $9bf71ea28793e738$var$TreeNode({
2347
+ scopeRef: scopeRef
2348
+ });
2349
+ parentNode.addChild(node);
2350
+ node.parent = parentNode;
2351
+ this.fastMap.set(scopeRef, node);
2352
+ if (nodeToRestore) node.nodeToRestore = nodeToRestore;
2353
+ }
2354
+ addNode(node) {
2355
+ this.fastMap.set(node.scopeRef, node);
2356
+ }
2357
+ removeTreeNode(scopeRef) {
2358
+ // never remove the root
2359
+ if (scopeRef === null) return;
2360
+ let node = this.fastMap.get(scopeRef);
2361
+ if (!node) return;
2362
+ let parentNode = node.parent;
2363
+ // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing
2364
+ // if we are, then replace the siblings restore with the restore from the scope we're removing
2365
+ for (let current of this.traverse())if (current !== node && node.nodeToRestore && current.nodeToRestore && node.scopeRef && node.scopeRef.current && $9bf71ea28793e738$var$isElementInScope(current.nodeToRestore, node.scopeRef.current)) current.nodeToRestore = node.nodeToRestore;
2366
+ let children = node.children;
2367
+ if (parentNode) {
2368
+ parentNode.removeChild(node);
2369
+ if (children.size > 0) children.forEach((child)=>parentNode && parentNode.addChild(child));
2370
+ }
2371
+ this.fastMap.delete(node.scopeRef);
2372
+ }
2373
+ // Pre Order Depth First
2374
+ *traverse(node = this.root) {
2375
+ if (node.scopeRef != null) yield node;
2376
+ if (node.children.size > 0) for (let child of node.children)yield* this.traverse(child);
2377
+ }
2378
+ clone() {
2379
+ var _node_parent;
2380
+ let newTree = new $9bf71ea28793e738$var$Tree();
2381
+ var _node_parent_scopeRef;
2382
+ for (let node of this.traverse())newTree.addTreeNode(node.scopeRef, (_node_parent_scopeRef = (_node_parent = node.parent) === null || _node_parent === void 0 ? void 0 : _node_parent.scopeRef) !== null && _node_parent_scopeRef !== void 0 ? _node_parent_scopeRef : null, node.nodeToRestore);
2383
+ return newTree;
2384
+ }
2385
+ constructor(){
2386
+ this.fastMap = new Map();
2387
+ this.root = new $9bf71ea28793e738$var$TreeNode({
2388
+ scopeRef: null
2389
+ });
2390
+ this.fastMap.set(null, this.root);
2391
+ }
2392
+ }
2393
+ class $9bf71ea28793e738$var$TreeNode {
2394
+ addChild(node) {
2395
+ this.children.add(node);
2396
+ node.parent = this;
2397
+ }
2398
+ removeChild(node) {
2399
+ this.children.delete(node);
2400
+ node.parent = undefined;
2401
+ }
2402
+ constructor(props){
2403
+ this.children = new Set();
2404
+ this.contain = false;
2405
+ this.scopeRef = props.scopeRef;
2406
+ }
2407
+ }
2408
+ let $9bf71ea28793e738$export$d06fae2ee68b101e = new $9bf71ea28793e738$var$Tree();
2409
+
1305
2410
  var CloseIconRound = function () { return (React__default["default"].createElement("svg", { "data-testid": 'close-icon-round', fill: 'none', height: '28', viewBox: '0 0 28 28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
1306
2411
  React__default["default"].createElement("rect", { fill: '#72767E', height: '28', rx: '14', width: '28' }),
1307
2412
  React__default["default"].createElement("circle", { cx: '14', cy: '14', fill: '#72767E', r: '12' }),
@@ -1333,13 +2438,14 @@ var Modal = function (_a) {
1333
2438
  if (!open)
1334
2439
  return null;
1335
2440
  return (React__default["default"].createElement("div", { className: 'str-chat__modal str-chat__modal--open', onClick: handleClick },
1336
- React__default["default"].createElement("button", { className: 'str-chat__modal__close-button', ref: closeRef, title: t('Close') },
1337
- themeVersion === '2' && React__default["default"].createElement(CloseIconRound, null),
1338
- themeVersion === '1' && (React__default["default"].createElement(React__default["default"].Fragment, null,
1339
- t('Close'),
1340
- React__default["default"].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
1341
- 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' }))))),
1342
- React__default["default"].createElement("div", { className: 'str-chat__modal__inner str-chat-react__modal__inner', ref: innerRef }, children)));
2441
+ React__default["default"].createElement($9bf71ea28793e738$export$20e40289641fbbb6, { autoFocus: true, contain: true },
2442
+ React__default["default"].createElement("button", { className: 'str-chat__modal__close-button', ref: closeRef, title: t('Close') },
2443
+ themeVersion === '2' && React__default["default"].createElement(CloseIconRound, null),
2444
+ themeVersion === '1' && (React__default["default"].createElement(React__default["default"].Fragment, null,
2445
+ t('Close'),
2446
+ React__default["default"].createElement("svg", { height: '10', width: '10', xmlns: 'http://www.w3.org/2000/svg' },
2447
+ 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' }))))),
2448
+ React__default["default"].createElement("div", { className: 'str-chat__modal__inner str-chat-react__modal__inner', ref: innerRef }, children))));
1343
2449
  };
1344
2450
 
1345
2451
  var onError = function (e) {
@@ -2217,13 +3323,14 @@ var UploadButton = function (_a) {
2217
3323
  */
2218
3324
  var FileUploadButton = function (_a) {
2219
3325
  var _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.multiple, multiple = _c === void 0 ? false : _c, _d = _a.children, children = _d === void 0 ? React__default["default"].createElement(AttachmentIcon, null) : _d, handleFiles = _a.handleFiles, accepts = _a.accepts, _e = _a.resetOnChange, resetOnChange = _e === void 0 ? true : _e;
3326
+ var t = useTranslationContext('FileUploadButton').t;
2220
3327
  var className = 'rfu-file-upload-button';
2221
3328
  if (disabled) {
2222
3329
  className = "".concat(className, " rfu-file-upload-button--disabled");
2223
3330
  }
2224
3331
  return (React__default["default"].createElement("div", { className: className },
2225
3332
  React__default["default"].createElement("label", null,
2226
- React__default["default"].createElement(UploadButton, { accept: Array.isArray(accepts) ? accepts.join(',') : accepts, "aria-label": 'File input', className: 'rfu-file-input', disabled: disabled, multiple: multiple, onFileChange: handleFiles, resetOnChange: resetOnChange }),
3333
+ React__default["default"].createElement(UploadButton, { accept: Array.isArray(accepts) ? accepts.join(',') : accepts, "aria-label": t('aria/File input'), className: 'rfu-file-input', disabled: disabled, multiple: multiple, onFileChange: handleFiles, resetOnChange: resetOnChange }),
2227
3334
  children)));
2228
3335
  };
2229
3336
 
@@ -2543,10 +3650,6 @@ function fromFileEntry(entry) {
2543
3650
  });
2544
3651
  }
2545
3652
 
2546
- function getDefaultExportFromCjs (x) {
2547
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
2548
- }
2549
-
2550
3653
  var _default = function (file, acceptedFiles) {
2551
3654
  if (file && acceptedFiles) {
2552
3655
  var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
@@ -3895,7 +4998,8 @@ var ImageDropzone = function (_a) {
3895
4998
  */
3896
4999
  var IconButton = function (_a) {
3897
5000
  var children = _a.children, onClick = _a.onClick;
3898
- return (React__default["default"].createElement("button", { "aria-label": 'Cancel upload', className: 'rfu-icon-button', "data-testid": 'cancel-upload-button', onClick: onClick, type: 'button' }, children));
5001
+ var t = useTranslationContext('IconButton').t;
5002
+ return (React__default["default"].createElement("button", { "aria-label": t('aria/Cancel upload'), className: 'rfu-icon-button', "data-testid": 'cancel-upload-button', onClick: onClick, type: 'button' }, children));
3899
5003
  };
3900
5004
 
3901
5005
  var Thumbnail = function (_a) {
@@ -3912,9 +5016,10 @@ var Thumbnail = function (_a) {
3912
5016
  */
3913
5017
  var ImageUploadButton = function (_a) {
3914
5018
  var _b = _a.multiple, multiple = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, handleFiles = _a.handleFiles, _d = _a.children, children = _d === void 0 ? React__default["default"].createElement(PictureIcon, null) : _d, _e = _a.resetOnChange, resetOnChange = _e === void 0 ? false : _e;
5019
+ var t = useTranslationContext('ImageUploadButton').t;
3915
5020
  return (React__default["default"].createElement("div", { className: 'rfu-image-upload-button' },
3916
5021
  React__default["default"].createElement("label", null,
3917
- React__default["default"].createElement(UploadButton, { accept: 'image/*', "aria-label": 'Image input', className: 'rfu-image-input', disabled: disabled, multiple: multiple, onFileChange: handleFiles, resetOnChange: resetOnChange }),
5022
+ React__default["default"].createElement(UploadButton, { accept: 'image/*', "aria-label": t('aria/Image input'), className: 'rfu-image-input', disabled: disabled, multiple: multiple, onFileChange: handleFiles, resetOnChange: resetOnChange }),
3918
5023
  children)));
3919
5024
  };
3920
5025
 
@@ -3928,6 +5033,7 @@ var ThumbnailPlaceholder = function (_a) {
3928
5033
 
3929
5034
  var ImagePreviewer = function (_a) {
3930
5035
  var _b = _a.disabled, disabled = _b === void 0 ? false : _b, handleFiles = _a.handleFiles, handleRemove = _a.handleRemove, handleRetry = _a.handleRetry, imageUploads = _a.imageUploads, _c = _a.multiple, multiple = _c === void 0 ? true : _c;
5036
+ var t = useTranslationContext('ImagePreviewer').t;
3931
5037
  var onClose = React.useCallback(function (id, event) {
3932
5038
  if (!id)
3933
5039
  return console.warn("image.id of closed image was \"null\", this shouldn't happen");
@@ -3937,7 +5043,7 @@ var ImagePreviewer = function (_a) {
3937
5043
  imageUploads.map(function (image) {
3938
5044
  var url = image.url || image.previewUri;
3939
5045
  return (React__default["default"].createElement("div", { className: clsx('rfu-image-previewer__image', image.state === 'finished' && 'rfu-image-previewer__image--loaded'), key: image.id },
3940
- image.state === 'failed' && (React__default["default"].createElement("button", { "aria-label": 'Retry upload', className: 'rfu-image-previewer__retry', onClick: function (event) { return handleRetry === null || handleRetry === void 0 ? void 0 : handleRetry(image.id, event); }, type: 'button' },
5046
+ image.state === 'failed' && (React__default["default"].createElement("button", { "aria-label": t('aria/Retry upload'), className: 'rfu-image-previewer__retry', onClick: function (event) { return handleRetry === null || handleRetry === void 0 ? void 0 : handleRetry(image.id, event); }, type: 'button' },
3941
5047
  React__default["default"].createElement(RetryIcon$1, null))),
3942
5048
  url && React__default["default"].createElement(Thumbnail, { handleClose: function (event) { return onClose(image.id, event); }, image: url }),
3943
5049
  image.state === 'uploading' && (React__default["default"].createElement(LoadingIndicator$1, { backgroundColor: '#ffffff19', color: '#ffffffb2' }))));
@@ -32491,6 +33597,2038 @@ ReactTextareaAutocomplete.propTypes = {
32491
33597
  value: PropTypes__default["default"].string
32492
33598
  };
32493
33599
 
33600
+ var lodash_defaultsdeep = {exports: {}};
33601
+
33602
+ /**
33603
+ * Lodash (Custom Build) <https://lodash.com/>
33604
+ * Build: `lodash modularize exports="npm" -o ./`
33605
+ * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
33606
+ * Released under MIT license <https://lodash.com/license>
33607
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
33608
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
33609
+ */
33610
+
33611
+ (function (module, exports) {
33612
+ /** Used as the size to enable large array optimizations. */
33613
+ var LARGE_ARRAY_SIZE = 200;
33614
+
33615
+ /** Used to stand-in for `undefined` hash values. */
33616
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
33617
+
33618
+ /** Used to detect hot functions by number of calls within a span of milliseconds. */
33619
+ var HOT_COUNT = 800,
33620
+ HOT_SPAN = 16;
33621
+
33622
+ /** Used as references for various `Number` constants. */
33623
+ var MAX_SAFE_INTEGER = 9007199254740991;
33624
+
33625
+ /** `Object#toString` result references. */
33626
+ var argsTag = '[object Arguments]',
33627
+ arrayTag = '[object Array]',
33628
+ asyncTag = '[object AsyncFunction]',
33629
+ boolTag = '[object Boolean]',
33630
+ dateTag = '[object Date]',
33631
+ errorTag = '[object Error]',
33632
+ funcTag = '[object Function]',
33633
+ genTag = '[object GeneratorFunction]',
33634
+ mapTag = '[object Map]',
33635
+ numberTag = '[object Number]',
33636
+ nullTag = '[object Null]',
33637
+ objectTag = '[object Object]',
33638
+ proxyTag = '[object Proxy]',
33639
+ regexpTag = '[object RegExp]',
33640
+ setTag = '[object Set]',
33641
+ stringTag = '[object String]',
33642
+ undefinedTag = '[object Undefined]',
33643
+ weakMapTag = '[object WeakMap]';
33644
+
33645
+ var arrayBufferTag = '[object ArrayBuffer]',
33646
+ dataViewTag = '[object DataView]',
33647
+ float32Tag = '[object Float32Array]',
33648
+ float64Tag = '[object Float64Array]',
33649
+ int8Tag = '[object Int8Array]',
33650
+ int16Tag = '[object Int16Array]',
33651
+ int32Tag = '[object Int32Array]',
33652
+ uint8Tag = '[object Uint8Array]',
33653
+ uint8ClampedTag = '[object Uint8ClampedArray]',
33654
+ uint16Tag = '[object Uint16Array]',
33655
+ uint32Tag = '[object Uint32Array]';
33656
+
33657
+ /**
33658
+ * Used to match `RegExp`
33659
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
33660
+ */
33661
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
33662
+
33663
+ /** Used to detect host constructors (Safari). */
33664
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
33665
+
33666
+ /** Used to detect unsigned integer values. */
33667
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
33668
+
33669
+ /** Used to identify `toStringTag` values of typed arrays. */
33670
+ var typedArrayTags = {};
33671
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
33672
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
33673
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
33674
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
33675
+ typedArrayTags[uint32Tag] = true;
33676
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
33677
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
33678
+ typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
33679
+ typedArrayTags[errorTag] = typedArrayTags[funcTag] =
33680
+ typedArrayTags[mapTag] = typedArrayTags[numberTag] =
33681
+ typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
33682
+ typedArrayTags[setTag] = typedArrayTags[stringTag] =
33683
+ typedArrayTags[weakMapTag] = false;
33684
+
33685
+ /** Detect free variable `global` from Node.js. */
33686
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
33687
+
33688
+ /** Detect free variable `self`. */
33689
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
33690
+
33691
+ /** Used as a reference to the global object. */
33692
+ var root = freeGlobal || freeSelf || Function('return this')();
33693
+
33694
+ /** Detect free variable `exports`. */
33695
+ var freeExports = exports && !exports.nodeType && exports;
33696
+
33697
+ /** Detect free variable `module`. */
33698
+ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
33699
+
33700
+ /** Detect the popular CommonJS extension `module.exports`. */
33701
+ var moduleExports = freeModule && freeModule.exports === freeExports;
33702
+
33703
+ /** Detect free variable `process` from Node.js. */
33704
+ var freeProcess = moduleExports && freeGlobal.process;
33705
+
33706
+ /** Used to access faster Node.js helpers. */
33707
+ var nodeUtil = (function() {
33708
+ try {
33709
+ // Use `util.types` for Node.js 10+.
33710
+ var types = freeModule && freeModule.require && freeModule.require('util').types;
33711
+
33712
+ if (types) {
33713
+ return types;
33714
+ }
33715
+
33716
+ // Legacy `process.binding('util')` for Node.js < 10.
33717
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
33718
+ } catch (e) {}
33719
+ }());
33720
+
33721
+ /* Node.js helper references. */
33722
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
33723
+
33724
+ /**
33725
+ * A faster alternative to `Function#apply`, this function invokes `func`
33726
+ * with the `this` binding of `thisArg` and the arguments of `args`.
33727
+ *
33728
+ * @private
33729
+ * @param {Function} func The function to invoke.
33730
+ * @param {*} thisArg The `this` binding of `func`.
33731
+ * @param {Array} args The arguments to invoke `func` with.
33732
+ * @returns {*} Returns the result of `func`.
33733
+ */
33734
+ function apply(func, thisArg, args) {
33735
+ switch (args.length) {
33736
+ case 0: return func.call(thisArg);
33737
+ case 1: return func.call(thisArg, args[0]);
33738
+ case 2: return func.call(thisArg, args[0], args[1]);
33739
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
33740
+ }
33741
+ return func.apply(thisArg, args);
33742
+ }
33743
+
33744
+ /**
33745
+ * The base implementation of `_.times` without support for iteratee shorthands
33746
+ * or max array length checks.
33747
+ *
33748
+ * @private
33749
+ * @param {number} n The number of times to invoke `iteratee`.
33750
+ * @param {Function} iteratee The function invoked per iteration.
33751
+ * @returns {Array} Returns the array of results.
33752
+ */
33753
+ function baseTimes(n, iteratee) {
33754
+ var index = -1,
33755
+ result = Array(n);
33756
+
33757
+ while (++index < n) {
33758
+ result[index] = iteratee(index);
33759
+ }
33760
+ return result;
33761
+ }
33762
+
33763
+ /**
33764
+ * The base implementation of `_.unary` without support for storing metadata.
33765
+ *
33766
+ * @private
33767
+ * @param {Function} func The function to cap arguments for.
33768
+ * @returns {Function} Returns the new capped function.
33769
+ */
33770
+ function baseUnary(func) {
33771
+ return function(value) {
33772
+ return func(value);
33773
+ };
33774
+ }
33775
+
33776
+ /**
33777
+ * Gets the value at `key` of `object`.
33778
+ *
33779
+ * @private
33780
+ * @param {Object} [object] The object to query.
33781
+ * @param {string} key The key of the property to get.
33782
+ * @returns {*} Returns the property value.
33783
+ */
33784
+ function getValue(object, key) {
33785
+ return object == null ? undefined : object[key];
33786
+ }
33787
+
33788
+ /**
33789
+ * Creates a unary function that invokes `func` with its argument transformed.
33790
+ *
33791
+ * @private
33792
+ * @param {Function} func The function to wrap.
33793
+ * @param {Function} transform The argument transform.
33794
+ * @returns {Function} Returns the new function.
33795
+ */
33796
+ function overArg(func, transform) {
33797
+ return function(arg) {
33798
+ return func(transform(arg));
33799
+ };
33800
+ }
33801
+
33802
+ /** Used for built-in method references. */
33803
+ var arrayProto = Array.prototype,
33804
+ funcProto = Function.prototype,
33805
+ objectProto = Object.prototype;
33806
+
33807
+ /** Used to detect overreaching core-js shims. */
33808
+ var coreJsData = root['__core-js_shared__'];
33809
+
33810
+ /** Used to resolve the decompiled source of functions. */
33811
+ var funcToString = funcProto.toString;
33812
+
33813
+ /** Used to check objects for own properties. */
33814
+ var hasOwnProperty = objectProto.hasOwnProperty;
33815
+
33816
+ /** Used to detect methods masquerading as native. */
33817
+ var maskSrcKey = (function() {
33818
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
33819
+ return uid ? ('Symbol(src)_1.' + uid) : '';
33820
+ }());
33821
+
33822
+ /**
33823
+ * Used to resolve the
33824
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
33825
+ * of values.
33826
+ */
33827
+ var nativeObjectToString = objectProto.toString;
33828
+
33829
+ /** Used to infer the `Object` constructor. */
33830
+ var objectCtorString = funcToString.call(Object);
33831
+
33832
+ /** Used to detect if a method is native. */
33833
+ var reIsNative = RegExp('^' +
33834
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
33835
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
33836
+ );
33837
+
33838
+ /** Built-in value references. */
33839
+ var Buffer = moduleExports ? root.Buffer : undefined,
33840
+ Symbol = root.Symbol,
33841
+ Uint8Array = root.Uint8Array,
33842
+ allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
33843
+ getPrototype = overArg(Object.getPrototypeOf, Object),
33844
+ objectCreate = Object.create,
33845
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
33846
+ splice = arrayProto.splice,
33847
+ symToStringTag = Symbol ? Symbol.toStringTag : undefined;
33848
+
33849
+ var defineProperty = (function() {
33850
+ try {
33851
+ var func = getNative(Object, 'defineProperty');
33852
+ func({}, '', {});
33853
+ return func;
33854
+ } catch (e) {}
33855
+ }());
33856
+
33857
+ /* Built-in method references for those with the same name as other `lodash` methods. */
33858
+ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
33859
+ nativeMax = Math.max,
33860
+ nativeNow = Date.now;
33861
+
33862
+ /* Built-in method references that are verified to be native. */
33863
+ var Map = getNative(root, 'Map'),
33864
+ nativeCreate = getNative(Object, 'create');
33865
+
33866
+ /**
33867
+ * The base implementation of `_.create` without support for assigning
33868
+ * properties to the created object.
33869
+ *
33870
+ * @private
33871
+ * @param {Object} proto The object to inherit from.
33872
+ * @returns {Object} Returns the new object.
33873
+ */
33874
+ var baseCreate = (function() {
33875
+ function object() {}
33876
+ return function(proto) {
33877
+ if (!isObject(proto)) {
33878
+ return {};
33879
+ }
33880
+ if (objectCreate) {
33881
+ return objectCreate(proto);
33882
+ }
33883
+ object.prototype = proto;
33884
+ var result = new object;
33885
+ object.prototype = undefined;
33886
+ return result;
33887
+ };
33888
+ }());
33889
+
33890
+ /**
33891
+ * Creates a hash object.
33892
+ *
33893
+ * @private
33894
+ * @constructor
33895
+ * @param {Array} [entries] The key-value pairs to cache.
33896
+ */
33897
+ function Hash(entries) {
33898
+ var index = -1,
33899
+ length = entries == null ? 0 : entries.length;
33900
+
33901
+ this.clear();
33902
+ while (++index < length) {
33903
+ var entry = entries[index];
33904
+ this.set(entry[0], entry[1]);
33905
+ }
33906
+ }
33907
+
33908
+ /**
33909
+ * Removes all key-value entries from the hash.
33910
+ *
33911
+ * @private
33912
+ * @name clear
33913
+ * @memberOf Hash
33914
+ */
33915
+ function hashClear() {
33916
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
33917
+ this.size = 0;
33918
+ }
33919
+
33920
+ /**
33921
+ * Removes `key` and its value from the hash.
33922
+ *
33923
+ * @private
33924
+ * @name delete
33925
+ * @memberOf Hash
33926
+ * @param {Object} hash The hash to modify.
33927
+ * @param {string} key The key of the value to remove.
33928
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
33929
+ */
33930
+ function hashDelete(key) {
33931
+ var result = this.has(key) && delete this.__data__[key];
33932
+ this.size -= result ? 1 : 0;
33933
+ return result;
33934
+ }
33935
+
33936
+ /**
33937
+ * Gets the hash value for `key`.
33938
+ *
33939
+ * @private
33940
+ * @name get
33941
+ * @memberOf Hash
33942
+ * @param {string} key The key of the value to get.
33943
+ * @returns {*} Returns the entry value.
33944
+ */
33945
+ function hashGet(key) {
33946
+ var data = this.__data__;
33947
+ if (nativeCreate) {
33948
+ var result = data[key];
33949
+ return result === HASH_UNDEFINED ? undefined : result;
33950
+ }
33951
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
33952
+ }
33953
+
33954
+ /**
33955
+ * Checks if a hash value for `key` exists.
33956
+ *
33957
+ * @private
33958
+ * @name has
33959
+ * @memberOf Hash
33960
+ * @param {string} key The key of the entry to check.
33961
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
33962
+ */
33963
+ function hashHas(key) {
33964
+ var data = this.__data__;
33965
+ return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
33966
+ }
33967
+
33968
+ /**
33969
+ * Sets the hash `key` to `value`.
33970
+ *
33971
+ * @private
33972
+ * @name set
33973
+ * @memberOf Hash
33974
+ * @param {string} key The key of the value to set.
33975
+ * @param {*} value The value to set.
33976
+ * @returns {Object} Returns the hash instance.
33977
+ */
33978
+ function hashSet(key, value) {
33979
+ var data = this.__data__;
33980
+ this.size += this.has(key) ? 0 : 1;
33981
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
33982
+ return this;
33983
+ }
33984
+
33985
+ // Add methods to `Hash`.
33986
+ Hash.prototype.clear = hashClear;
33987
+ Hash.prototype['delete'] = hashDelete;
33988
+ Hash.prototype.get = hashGet;
33989
+ Hash.prototype.has = hashHas;
33990
+ Hash.prototype.set = hashSet;
33991
+
33992
+ /**
33993
+ * Creates an list cache object.
33994
+ *
33995
+ * @private
33996
+ * @constructor
33997
+ * @param {Array} [entries] The key-value pairs to cache.
33998
+ */
33999
+ function ListCache(entries) {
34000
+ var index = -1,
34001
+ length = entries == null ? 0 : entries.length;
34002
+
34003
+ this.clear();
34004
+ while (++index < length) {
34005
+ var entry = entries[index];
34006
+ this.set(entry[0], entry[1]);
34007
+ }
34008
+ }
34009
+
34010
+ /**
34011
+ * Removes all key-value entries from the list cache.
34012
+ *
34013
+ * @private
34014
+ * @name clear
34015
+ * @memberOf ListCache
34016
+ */
34017
+ function listCacheClear() {
34018
+ this.__data__ = [];
34019
+ this.size = 0;
34020
+ }
34021
+
34022
+ /**
34023
+ * Removes `key` and its value from the list cache.
34024
+ *
34025
+ * @private
34026
+ * @name delete
34027
+ * @memberOf ListCache
34028
+ * @param {string} key The key of the value to remove.
34029
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
34030
+ */
34031
+ function listCacheDelete(key) {
34032
+ var data = this.__data__,
34033
+ index = assocIndexOf(data, key);
34034
+
34035
+ if (index < 0) {
34036
+ return false;
34037
+ }
34038
+ var lastIndex = data.length - 1;
34039
+ if (index == lastIndex) {
34040
+ data.pop();
34041
+ } else {
34042
+ splice.call(data, index, 1);
34043
+ }
34044
+ --this.size;
34045
+ return true;
34046
+ }
34047
+
34048
+ /**
34049
+ * Gets the list cache value for `key`.
34050
+ *
34051
+ * @private
34052
+ * @name get
34053
+ * @memberOf ListCache
34054
+ * @param {string} key The key of the value to get.
34055
+ * @returns {*} Returns the entry value.
34056
+ */
34057
+ function listCacheGet(key) {
34058
+ var data = this.__data__,
34059
+ index = assocIndexOf(data, key);
34060
+
34061
+ return index < 0 ? undefined : data[index][1];
34062
+ }
34063
+
34064
+ /**
34065
+ * Checks if a list cache value for `key` exists.
34066
+ *
34067
+ * @private
34068
+ * @name has
34069
+ * @memberOf ListCache
34070
+ * @param {string} key The key of the entry to check.
34071
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
34072
+ */
34073
+ function listCacheHas(key) {
34074
+ return assocIndexOf(this.__data__, key) > -1;
34075
+ }
34076
+
34077
+ /**
34078
+ * Sets the list cache `key` to `value`.
34079
+ *
34080
+ * @private
34081
+ * @name set
34082
+ * @memberOf ListCache
34083
+ * @param {string} key The key of the value to set.
34084
+ * @param {*} value The value to set.
34085
+ * @returns {Object} Returns the list cache instance.
34086
+ */
34087
+ function listCacheSet(key, value) {
34088
+ var data = this.__data__,
34089
+ index = assocIndexOf(data, key);
34090
+
34091
+ if (index < 0) {
34092
+ ++this.size;
34093
+ data.push([key, value]);
34094
+ } else {
34095
+ data[index][1] = value;
34096
+ }
34097
+ return this;
34098
+ }
34099
+
34100
+ // Add methods to `ListCache`.
34101
+ ListCache.prototype.clear = listCacheClear;
34102
+ ListCache.prototype['delete'] = listCacheDelete;
34103
+ ListCache.prototype.get = listCacheGet;
34104
+ ListCache.prototype.has = listCacheHas;
34105
+ ListCache.prototype.set = listCacheSet;
34106
+
34107
+ /**
34108
+ * Creates a map cache object to store key-value pairs.
34109
+ *
34110
+ * @private
34111
+ * @constructor
34112
+ * @param {Array} [entries] The key-value pairs to cache.
34113
+ */
34114
+ function MapCache(entries) {
34115
+ var index = -1,
34116
+ length = entries == null ? 0 : entries.length;
34117
+
34118
+ this.clear();
34119
+ while (++index < length) {
34120
+ var entry = entries[index];
34121
+ this.set(entry[0], entry[1]);
34122
+ }
34123
+ }
34124
+
34125
+ /**
34126
+ * Removes all key-value entries from the map.
34127
+ *
34128
+ * @private
34129
+ * @name clear
34130
+ * @memberOf MapCache
34131
+ */
34132
+ function mapCacheClear() {
34133
+ this.size = 0;
34134
+ this.__data__ = {
34135
+ 'hash': new Hash,
34136
+ 'map': new (Map || ListCache),
34137
+ 'string': new Hash
34138
+ };
34139
+ }
34140
+
34141
+ /**
34142
+ * Removes `key` and its value from the map.
34143
+ *
34144
+ * @private
34145
+ * @name delete
34146
+ * @memberOf MapCache
34147
+ * @param {string} key The key of the value to remove.
34148
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
34149
+ */
34150
+ function mapCacheDelete(key) {
34151
+ var result = getMapData(this, key)['delete'](key);
34152
+ this.size -= result ? 1 : 0;
34153
+ return result;
34154
+ }
34155
+
34156
+ /**
34157
+ * Gets the map value for `key`.
34158
+ *
34159
+ * @private
34160
+ * @name get
34161
+ * @memberOf MapCache
34162
+ * @param {string} key The key of the value to get.
34163
+ * @returns {*} Returns the entry value.
34164
+ */
34165
+ function mapCacheGet(key) {
34166
+ return getMapData(this, key).get(key);
34167
+ }
34168
+
34169
+ /**
34170
+ * Checks if a map value for `key` exists.
34171
+ *
34172
+ * @private
34173
+ * @name has
34174
+ * @memberOf MapCache
34175
+ * @param {string} key The key of the entry to check.
34176
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
34177
+ */
34178
+ function mapCacheHas(key) {
34179
+ return getMapData(this, key).has(key);
34180
+ }
34181
+
34182
+ /**
34183
+ * Sets the map `key` to `value`.
34184
+ *
34185
+ * @private
34186
+ * @name set
34187
+ * @memberOf MapCache
34188
+ * @param {string} key The key of the value to set.
34189
+ * @param {*} value The value to set.
34190
+ * @returns {Object} Returns the map cache instance.
34191
+ */
34192
+ function mapCacheSet(key, value) {
34193
+ var data = getMapData(this, key),
34194
+ size = data.size;
34195
+
34196
+ data.set(key, value);
34197
+ this.size += data.size == size ? 0 : 1;
34198
+ return this;
34199
+ }
34200
+
34201
+ // Add methods to `MapCache`.
34202
+ MapCache.prototype.clear = mapCacheClear;
34203
+ MapCache.prototype['delete'] = mapCacheDelete;
34204
+ MapCache.prototype.get = mapCacheGet;
34205
+ MapCache.prototype.has = mapCacheHas;
34206
+ MapCache.prototype.set = mapCacheSet;
34207
+
34208
+ /**
34209
+ * Creates a stack cache object to store key-value pairs.
34210
+ *
34211
+ * @private
34212
+ * @constructor
34213
+ * @param {Array} [entries] The key-value pairs to cache.
34214
+ */
34215
+ function Stack(entries) {
34216
+ var data = this.__data__ = new ListCache(entries);
34217
+ this.size = data.size;
34218
+ }
34219
+
34220
+ /**
34221
+ * Removes all key-value entries from the stack.
34222
+ *
34223
+ * @private
34224
+ * @name clear
34225
+ * @memberOf Stack
34226
+ */
34227
+ function stackClear() {
34228
+ this.__data__ = new ListCache;
34229
+ this.size = 0;
34230
+ }
34231
+
34232
+ /**
34233
+ * Removes `key` and its value from the stack.
34234
+ *
34235
+ * @private
34236
+ * @name delete
34237
+ * @memberOf Stack
34238
+ * @param {string} key The key of the value to remove.
34239
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
34240
+ */
34241
+ function stackDelete(key) {
34242
+ var data = this.__data__,
34243
+ result = data['delete'](key);
34244
+
34245
+ this.size = data.size;
34246
+ return result;
34247
+ }
34248
+
34249
+ /**
34250
+ * Gets the stack value for `key`.
34251
+ *
34252
+ * @private
34253
+ * @name get
34254
+ * @memberOf Stack
34255
+ * @param {string} key The key of the value to get.
34256
+ * @returns {*} Returns the entry value.
34257
+ */
34258
+ function stackGet(key) {
34259
+ return this.__data__.get(key);
34260
+ }
34261
+
34262
+ /**
34263
+ * Checks if a stack value for `key` exists.
34264
+ *
34265
+ * @private
34266
+ * @name has
34267
+ * @memberOf Stack
34268
+ * @param {string} key The key of the entry to check.
34269
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
34270
+ */
34271
+ function stackHas(key) {
34272
+ return this.__data__.has(key);
34273
+ }
34274
+
34275
+ /**
34276
+ * Sets the stack `key` to `value`.
34277
+ *
34278
+ * @private
34279
+ * @name set
34280
+ * @memberOf Stack
34281
+ * @param {string} key The key of the value to set.
34282
+ * @param {*} value The value to set.
34283
+ * @returns {Object} Returns the stack cache instance.
34284
+ */
34285
+ function stackSet(key, value) {
34286
+ var data = this.__data__;
34287
+ if (data instanceof ListCache) {
34288
+ var pairs = data.__data__;
34289
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
34290
+ pairs.push([key, value]);
34291
+ this.size = ++data.size;
34292
+ return this;
34293
+ }
34294
+ data = this.__data__ = new MapCache(pairs);
34295
+ }
34296
+ data.set(key, value);
34297
+ this.size = data.size;
34298
+ return this;
34299
+ }
34300
+
34301
+ // Add methods to `Stack`.
34302
+ Stack.prototype.clear = stackClear;
34303
+ Stack.prototype['delete'] = stackDelete;
34304
+ Stack.prototype.get = stackGet;
34305
+ Stack.prototype.has = stackHas;
34306
+ Stack.prototype.set = stackSet;
34307
+
34308
+ /**
34309
+ * Creates an array of the enumerable property names of the array-like `value`.
34310
+ *
34311
+ * @private
34312
+ * @param {*} value The value to query.
34313
+ * @param {boolean} inherited Specify returning inherited property names.
34314
+ * @returns {Array} Returns the array of property names.
34315
+ */
34316
+ function arrayLikeKeys(value, inherited) {
34317
+ var isArr = isArray(value),
34318
+ isArg = !isArr && isArguments(value),
34319
+ isBuff = !isArr && !isArg && isBuffer(value),
34320
+ isType = !isArr && !isArg && !isBuff && isTypedArray(value),
34321
+ skipIndexes = isArr || isArg || isBuff || isType,
34322
+ result = skipIndexes ? baseTimes(value.length, String) : [],
34323
+ length = result.length;
34324
+
34325
+ for (var key in value) {
34326
+ if ((inherited || hasOwnProperty.call(value, key)) &&
34327
+ !(skipIndexes && (
34328
+ // Safari 9 has enumerable `arguments.length` in strict mode.
34329
+ key == 'length' ||
34330
+ // Node.js 0.10 has enumerable non-index properties on buffers.
34331
+ (isBuff && (key == 'offset' || key == 'parent')) ||
34332
+ // PhantomJS 2 has enumerable non-index properties on typed arrays.
34333
+ (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
34334
+ // Skip index properties.
34335
+ isIndex(key, length)
34336
+ ))) {
34337
+ result.push(key);
34338
+ }
34339
+ }
34340
+ return result;
34341
+ }
34342
+
34343
+ /**
34344
+ * This function is like `assignValue` except that it doesn't assign
34345
+ * `undefined` values.
34346
+ *
34347
+ * @private
34348
+ * @param {Object} object The object to modify.
34349
+ * @param {string} key The key of the property to assign.
34350
+ * @param {*} value The value to assign.
34351
+ */
34352
+ function assignMergeValue(object, key, value) {
34353
+ if ((value !== undefined && !eq(object[key], value)) ||
34354
+ (value === undefined && !(key in object))) {
34355
+ baseAssignValue(object, key, value);
34356
+ }
34357
+ }
34358
+
34359
+ /**
34360
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
34361
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
34362
+ * for equality comparisons.
34363
+ *
34364
+ * @private
34365
+ * @param {Object} object The object to modify.
34366
+ * @param {string} key The key of the property to assign.
34367
+ * @param {*} value The value to assign.
34368
+ */
34369
+ function assignValue(object, key, value) {
34370
+ var objValue = object[key];
34371
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
34372
+ (value === undefined && !(key in object))) {
34373
+ baseAssignValue(object, key, value);
34374
+ }
34375
+ }
34376
+
34377
+ /**
34378
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
34379
+ *
34380
+ * @private
34381
+ * @param {Array} array The array to inspect.
34382
+ * @param {*} key The key to search for.
34383
+ * @returns {number} Returns the index of the matched value, else `-1`.
34384
+ */
34385
+ function assocIndexOf(array, key) {
34386
+ var length = array.length;
34387
+ while (length--) {
34388
+ if (eq(array[length][0], key)) {
34389
+ return length;
34390
+ }
34391
+ }
34392
+ return -1;
34393
+ }
34394
+
34395
+ /**
34396
+ * The base implementation of `assignValue` and `assignMergeValue` without
34397
+ * value checks.
34398
+ *
34399
+ * @private
34400
+ * @param {Object} object The object to modify.
34401
+ * @param {string} key The key of the property to assign.
34402
+ * @param {*} value The value to assign.
34403
+ */
34404
+ function baseAssignValue(object, key, value) {
34405
+ if (key == '__proto__' && defineProperty) {
34406
+ defineProperty(object, key, {
34407
+ 'configurable': true,
34408
+ 'enumerable': true,
34409
+ 'value': value,
34410
+ 'writable': true
34411
+ });
34412
+ } else {
34413
+ object[key] = value;
34414
+ }
34415
+ }
34416
+
34417
+ /**
34418
+ * The base implementation of `baseForOwn` which iterates over `object`
34419
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
34420
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
34421
+ *
34422
+ * @private
34423
+ * @param {Object} object The object to iterate over.
34424
+ * @param {Function} iteratee The function invoked per iteration.
34425
+ * @param {Function} keysFunc The function to get the keys of `object`.
34426
+ * @returns {Object} Returns `object`.
34427
+ */
34428
+ var baseFor = createBaseFor();
34429
+
34430
+ /**
34431
+ * The base implementation of `getTag` without fallbacks for buggy environments.
34432
+ *
34433
+ * @private
34434
+ * @param {*} value The value to query.
34435
+ * @returns {string} Returns the `toStringTag`.
34436
+ */
34437
+ function baseGetTag(value) {
34438
+ if (value == null) {
34439
+ return value === undefined ? undefinedTag : nullTag;
34440
+ }
34441
+ return (symToStringTag && symToStringTag in Object(value))
34442
+ ? getRawTag(value)
34443
+ : objectToString(value);
34444
+ }
34445
+
34446
+ /**
34447
+ * The base implementation of `_.isArguments`.
34448
+ *
34449
+ * @private
34450
+ * @param {*} value The value to check.
34451
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
34452
+ */
34453
+ function baseIsArguments(value) {
34454
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
34455
+ }
34456
+
34457
+ /**
34458
+ * The base implementation of `_.isNative` without bad shim checks.
34459
+ *
34460
+ * @private
34461
+ * @param {*} value The value to check.
34462
+ * @returns {boolean} Returns `true` if `value` is a native function,
34463
+ * else `false`.
34464
+ */
34465
+ function baseIsNative(value) {
34466
+ if (!isObject(value) || isMasked(value)) {
34467
+ return false;
34468
+ }
34469
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
34470
+ return pattern.test(toSource(value));
34471
+ }
34472
+
34473
+ /**
34474
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
34475
+ *
34476
+ * @private
34477
+ * @param {*} value The value to check.
34478
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
34479
+ */
34480
+ function baseIsTypedArray(value) {
34481
+ return isObjectLike(value) &&
34482
+ isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
34483
+ }
34484
+
34485
+ /**
34486
+ * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
34487
+ *
34488
+ * @private
34489
+ * @param {Object} object The object to query.
34490
+ * @returns {Array} Returns the array of property names.
34491
+ */
34492
+ function baseKeysIn(object) {
34493
+ if (!isObject(object)) {
34494
+ return nativeKeysIn(object);
34495
+ }
34496
+ var isProto = isPrototype(object),
34497
+ result = [];
34498
+
34499
+ for (var key in object) {
34500
+ if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
34501
+ result.push(key);
34502
+ }
34503
+ }
34504
+ return result;
34505
+ }
34506
+
34507
+ /**
34508
+ * The base implementation of `_.merge` without support for multiple sources.
34509
+ *
34510
+ * @private
34511
+ * @param {Object} object The destination object.
34512
+ * @param {Object} source The source object.
34513
+ * @param {number} srcIndex The index of `source`.
34514
+ * @param {Function} [customizer] The function to customize merged values.
34515
+ * @param {Object} [stack] Tracks traversed source values and their merged
34516
+ * counterparts.
34517
+ */
34518
+ function baseMerge(object, source, srcIndex, customizer, stack) {
34519
+ if (object === source) {
34520
+ return;
34521
+ }
34522
+ baseFor(source, function(srcValue, key) {
34523
+ stack || (stack = new Stack);
34524
+ if (isObject(srcValue)) {
34525
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
34526
+ }
34527
+ else {
34528
+ var newValue = customizer
34529
+ ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
34530
+ : undefined;
34531
+
34532
+ if (newValue === undefined) {
34533
+ newValue = srcValue;
34534
+ }
34535
+ assignMergeValue(object, key, newValue);
34536
+ }
34537
+ }, keysIn);
34538
+ }
34539
+
34540
+ /**
34541
+ * A specialized version of `baseMerge` for arrays and objects which performs
34542
+ * deep merges and tracks traversed objects enabling objects with circular
34543
+ * references to be merged.
34544
+ *
34545
+ * @private
34546
+ * @param {Object} object The destination object.
34547
+ * @param {Object} source The source object.
34548
+ * @param {string} key The key of the value to merge.
34549
+ * @param {number} srcIndex The index of `source`.
34550
+ * @param {Function} mergeFunc The function to merge values.
34551
+ * @param {Function} [customizer] The function to customize assigned values.
34552
+ * @param {Object} [stack] Tracks traversed source values and their merged
34553
+ * counterparts.
34554
+ */
34555
+ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
34556
+ var objValue = safeGet(object, key),
34557
+ srcValue = safeGet(source, key),
34558
+ stacked = stack.get(srcValue);
34559
+
34560
+ if (stacked) {
34561
+ assignMergeValue(object, key, stacked);
34562
+ return;
34563
+ }
34564
+ var newValue = customizer
34565
+ ? customizer(objValue, srcValue, (key + ''), object, source, stack)
34566
+ : undefined;
34567
+
34568
+ var isCommon = newValue === undefined;
34569
+
34570
+ if (isCommon) {
34571
+ var isArr = isArray(srcValue),
34572
+ isBuff = !isArr && isBuffer(srcValue),
34573
+ isTyped = !isArr && !isBuff && isTypedArray(srcValue);
34574
+
34575
+ newValue = srcValue;
34576
+ if (isArr || isBuff || isTyped) {
34577
+ if (isArray(objValue)) {
34578
+ newValue = objValue;
34579
+ }
34580
+ else if (isArrayLikeObject(objValue)) {
34581
+ newValue = copyArray(objValue);
34582
+ }
34583
+ else if (isBuff) {
34584
+ isCommon = false;
34585
+ newValue = cloneBuffer(srcValue, true);
34586
+ }
34587
+ else if (isTyped) {
34588
+ isCommon = false;
34589
+ newValue = cloneTypedArray(srcValue, true);
34590
+ }
34591
+ else {
34592
+ newValue = [];
34593
+ }
34594
+ }
34595
+ else if (isPlainObject(srcValue) || isArguments(srcValue)) {
34596
+ newValue = objValue;
34597
+ if (isArguments(objValue)) {
34598
+ newValue = toPlainObject(objValue);
34599
+ }
34600
+ else if (!isObject(objValue) || isFunction(objValue)) {
34601
+ newValue = initCloneObject(srcValue);
34602
+ }
34603
+ }
34604
+ else {
34605
+ isCommon = false;
34606
+ }
34607
+ }
34608
+ if (isCommon) {
34609
+ // Recursively merge objects and arrays (susceptible to call stack limits).
34610
+ stack.set(srcValue, newValue);
34611
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
34612
+ stack['delete'](srcValue);
34613
+ }
34614
+ assignMergeValue(object, key, newValue);
34615
+ }
34616
+
34617
+ /**
34618
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
34619
+ *
34620
+ * @private
34621
+ * @param {Function} func The function to apply a rest parameter to.
34622
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
34623
+ * @returns {Function} Returns the new function.
34624
+ */
34625
+ function baseRest(func, start) {
34626
+ return setToString(overRest(func, start, identity), func + '');
34627
+ }
34628
+
34629
+ /**
34630
+ * The base implementation of `setToString` without support for hot loop shorting.
34631
+ *
34632
+ * @private
34633
+ * @param {Function} func The function to modify.
34634
+ * @param {Function} string The `toString` result.
34635
+ * @returns {Function} Returns `func`.
34636
+ */
34637
+ var baseSetToString = !defineProperty ? identity : function(func, string) {
34638
+ return defineProperty(func, 'toString', {
34639
+ 'configurable': true,
34640
+ 'enumerable': false,
34641
+ 'value': constant(string),
34642
+ 'writable': true
34643
+ });
34644
+ };
34645
+
34646
+ /**
34647
+ * Creates a clone of `buffer`.
34648
+ *
34649
+ * @private
34650
+ * @param {Buffer} buffer The buffer to clone.
34651
+ * @param {boolean} [isDeep] Specify a deep clone.
34652
+ * @returns {Buffer} Returns the cloned buffer.
34653
+ */
34654
+ function cloneBuffer(buffer, isDeep) {
34655
+ if (isDeep) {
34656
+ return buffer.slice();
34657
+ }
34658
+ var length = buffer.length,
34659
+ result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
34660
+
34661
+ buffer.copy(result);
34662
+ return result;
34663
+ }
34664
+
34665
+ /**
34666
+ * Creates a clone of `arrayBuffer`.
34667
+ *
34668
+ * @private
34669
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
34670
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
34671
+ */
34672
+ function cloneArrayBuffer(arrayBuffer) {
34673
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
34674
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
34675
+ return result;
34676
+ }
34677
+
34678
+ /**
34679
+ * Creates a clone of `typedArray`.
34680
+ *
34681
+ * @private
34682
+ * @param {Object} typedArray The typed array to clone.
34683
+ * @param {boolean} [isDeep] Specify a deep clone.
34684
+ * @returns {Object} Returns the cloned typed array.
34685
+ */
34686
+ function cloneTypedArray(typedArray, isDeep) {
34687
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
34688
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
34689
+ }
34690
+
34691
+ /**
34692
+ * Copies the values of `source` to `array`.
34693
+ *
34694
+ * @private
34695
+ * @param {Array} source The array to copy values from.
34696
+ * @param {Array} [array=[]] The array to copy values to.
34697
+ * @returns {Array} Returns `array`.
34698
+ */
34699
+ function copyArray(source, array) {
34700
+ var index = -1,
34701
+ length = source.length;
34702
+
34703
+ array || (array = Array(length));
34704
+ while (++index < length) {
34705
+ array[index] = source[index];
34706
+ }
34707
+ return array;
34708
+ }
34709
+
34710
+ /**
34711
+ * Copies properties of `source` to `object`.
34712
+ *
34713
+ * @private
34714
+ * @param {Object} source The object to copy properties from.
34715
+ * @param {Array} props The property identifiers to copy.
34716
+ * @param {Object} [object={}] The object to copy properties to.
34717
+ * @param {Function} [customizer] The function to customize copied values.
34718
+ * @returns {Object} Returns `object`.
34719
+ */
34720
+ function copyObject(source, props, object, customizer) {
34721
+ var isNew = !object;
34722
+ object || (object = {});
34723
+
34724
+ var index = -1,
34725
+ length = props.length;
34726
+
34727
+ while (++index < length) {
34728
+ var key = props[index];
34729
+
34730
+ var newValue = customizer
34731
+ ? customizer(object[key], source[key], key, object, source)
34732
+ : undefined;
34733
+
34734
+ if (newValue === undefined) {
34735
+ newValue = source[key];
34736
+ }
34737
+ if (isNew) {
34738
+ baseAssignValue(object, key, newValue);
34739
+ } else {
34740
+ assignValue(object, key, newValue);
34741
+ }
34742
+ }
34743
+ return object;
34744
+ }
34745
+
34746
+ /**
34747
+ * Creates a function like `_.assign`.
34748
+ *
34749
+ * @private
34750
+ * @param {Function} assigner The function to assign values.
34751
+ * @returns {Function} Returns the new assigner function.
34752
+ */
34753
+ function createAssigner(assigner) {
34754
+ return baseRest(function(object, sources) {
34755
+ var index = -1,
34756
+ length = sources.length,
34757
+ customizer = length > 1 ? sources[length - 1] : undefined,
34758
+ guard = length > 2 ? sources[2] : undefined;
34759
+
34760
+ customizer = (assigner.length > 3 && typeof customizer == 'function')
34761
+ ? (length--, customizer)
34762
+ : undefined;
34763
+
34764
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
34765
+ customizer = length < 3 ? undefined : customizer;
34766
+ length = 1;
34767
+ }
34768
+ object = Object(object);
34769
+ while (++index < length) {
34770
+ var source = sources[index];
34771
+ if (source) {
34772
+ assigner(object, source, index, customizer);
34773
+ }
34774
+ }
34775
+ return object;
34776
+ });
34777
+ }
34778
+
34779
+ /**
34780
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
34781
+ *
34782
+ * @private
34783
+ * @param {boolean} [fromRight] Specify iterating from right to left.
34784
+ * @returns {Function} Returns the new base function.
34785
+ */
34786
+ function createBaseFor(fromRight) {
34787
+ return function(object, iteratee, keysFunc) {
34788
+ var index = -1,
34789
+ iterable = Object(object),
34790
+ props = keysFunc(object),
34791
+ length = props.length;
34792
+
34793
+ while (length--) {
34794
+ var key = props[fromRight ? length : ++index];
34795
+ if (iteratee(iterable[key], key, iterable) === false) {
34796
+ break;
34797
+ }
34798
+ }
34799
+ return object;
34800
+ };
34801
+ }
34802
+
34803
+ /**
34804
+ * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
34805
+ * objects into destination objects that are passed thru.
34806
+ *
34807
+ * @private
34808
+ * @param {*} objValue The destination value.
34809
+ * @param {*} srcValue The source value.
34810
+ * @param {string} key The key of the property to merge.
34811
+ * @param {Object} object The parent object of `objValue`.
34812
+ * @param {Object} source The parent object of `srcValue`.
34813
+ * @param {Object} [stack] Tracks traversed source values and their merged
34814
+ * counterparts.
34815
+ * @returns {*} Returns the value to assign.
34816
+ */
34817
+ function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
34818
+ if (isObject(objValue) && isObject(srcValue)) {
34819
+ // Recursively merge objects and arrays (susceptible to call stack limits).
34820
+ stack.set(srcValue, objValue);
34821
+ baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
34822
+ stack['delete'](srcValue);
34823
+ }
34824
+ return objValue;
34825
+ }
34826
+
34827
+ /**
34828
+ * Gets the data for `map`.
34829
+ *
34830
+ * @private
34831
+ * @param {Object} map The map to query.
34832
+ * @param {string} key The reference key.
34833
+ * @returns {*} Returns the map data.
34834
+ */
34835
+ function getMapData(map, key) {
34836
+ var data = map.__data__;
34837
+ return isKeyable(key)
34838
+ ? data[typeof key == 'string' ? 'string' : 'hash']
34839
+ : data.map;
34840
+ }
34841
+
34842
+ /**
34843
+ * Gets the native function at `key` of `object`.
34844
+ *
34845
+ * @private
34846
+ * @param {Object} object The object to query.
34847
+ * @param {string} key The key of the method to get.
34848
+ * @returns {*} Returns the function if it's native, else `undefined`.
34849
+ */
34850
+ function getNative(object, key) {
34851
+ var value = getValue(object, key);
34852
+ return baseIsNative(value) ? value : undefined;
34853
+ }
34854
+
34855
+ /**
34856
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
34857
+ *
34858
+ * @private
34859
+ * @param {*} value The value to query.
34860
+ * @returns {string} Returns the raw `toStringTag`.
34861
+ */
34862
+ function getRawTag(value) {
34863
+ var isOwn = hasOwnProperty.call(value, symToStringTag),
34864
+ tag = value[symToStringTag];
34865
+
34866
+ try {
34867
+ value[symToStringTag] = undefined;
34868
+ var unmasked = true;
34869
+ } catch (e) {}
34870
+
34871
+ var result = nativeObjectToString.call(value);
34872
+ if (unmasked) {
34873
+ if (isOwn) {
34874
+ value[symToStringTag] = tag;
34875
+ } else {
34876
+ delete value[symToStringTag];
34877
+ }
34878
+ }
34879
+ return result;
34880
+ }
34881
+
34882
+ /**
34883
+ * Initializes an object clone.
34884
+ *
34885
+ * @private
34886
+ * @param {Object} object The object to clone.
34887
+ * @returns {Object} Returns the initialized clone.
34888
+ */
34889
+ function initCloneObject(object) {
34890
+ return (typeof object.constructor == 'function' && !isPrototype(object))
34891
+ ? baseCreate(getPrototype(object))
34892
+ : {};
34893
+ }
34894
+
34895
+ /**
34896
+ * Checks if `value` is a valid array-like index.
34897
+ *
34898
+ * @private
34899
+ * @param {*} value The value to check.
34900
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
34901
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
34902
+ */
34903
+ function isIndex(value, length) {
34904
+ var type = typeof value;
34905
+ length = length == null ? MAX_SAFE_INTEGER : length;
34906
+
34907
+ return !!length &&
34908
+ (type == 'number' ||
34909
+ (type != 'symbol' && reIsUint.test(value))) &&
34910
+ (value > -1 && value % 1 == 0 && value < length);
34911
+ }
34912
+
34913
+ /**
34914
+ * Checks if the given arguments are from an iteratee call.
34915
+ *
34916
+ * @private
34917
+ * @param {*} value The potential iteratee value argument.
34918
+ * @param {*} index The potential iteratee index or key argument.
34919
+ * @param {*} object The potential iteratee object argument.
34920
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
34921
+ * else `false`.
34922
+ */
34923
+ function isIterateeCall(value, index, object) {
34924
+ if (!isObject(object)) {
34925
+ return false;
34926
+ }
34927
+ var type = typeof index;
34928
+ if (type == 'number'
34929
+ ? (isArrayLike(object) && isIndex(index, object.length))
34930
+ : (type == 'string' && index in object)
34931
+ ) {
34932
+ return eq(object[index], value);
34933
+ }
34934
+ return false;
34935
+ }
34936
+
34937
+ /**
34938
+ * Checks if `value` is suitable for use as unique object key.
34939
+ *
34940
+ * @private
34941
+ * @param {*} value The value to check.
34942
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
34943
+ */
34944
+ function isKeyable(value) {
34945
+ var type = typeof value;
34946
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
34947
+ ? (value !== '__proto__')
34948
+ : (value === null);
34949
+ }
34950
+
34951
+ /**
34952
+ * Checks if `func` has its source masked.
34953
+ *
34954
+ * @private
34955
+ * @param {Function} func The function to check.
34956
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
34957
+ */
34958
+ function isMasked(func) {
34959
+ return !!maskSrcKey && (maskSrcKey in func);
34960
+ }
34961
+
34962
+ /**
34963
+ * Checks if `value` is likely a prototype object.
34964
+ *
34965
+ * @private
34966
+ * @param {*} value The value to check.
34967
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
34968
+ */
34969
+ function isPrototype(value) {
34970
+ var Ctor = value && value.constructor,
34971
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
34972
+
34973
+ return value === proto;
34974
+ }
34975
+
34976
+ /**
34977
+ * This function is like
34978
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
34979
+ * except that it includes inherited enumerable properties.
34980
+ *
34981
+ * @private
34982
+ * @param {Object} object The object to query.
34983
+ * @returns {Array} Returns the array of property names.
34984
+ */
34985
+ function nativeKeysIn(object) {
34986
+ var result = [];
34987
+ if (object != null) {
34988
+ for (var key in Object(object)) {
34989
+ result.push(key);
34990
+ }
34991
+ }
34992
+ return result;
34993
+ }
34994
+
34995
+ /**
34996
+ * Converts `value` to a string using `Object.prototype.toString`.
34997
+ *
34998
+ * @private
34999
+ * @param {*} value The value to convert.
35000
+ * @returns {string} Returns the converted string.
35001
+ */
35002
+ function objectToString(value) {
35003
+ return nativeObjectToString.call(value);
35004
+ }
35005
+
35006
+ /**
35007
+ * A specialized version of `baseRest` which transforms the rest array.
35008
+ *
35009
+ * @private
35010
+ * @param {Function} func The function to apply a rest parameter to.
35011
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
35012
+ * @param {Function} transform The rest array transform.
35013
+ * @returns {Function} Returns the new function.
35014
+ */
35015
+ function overRest(func, start, transform) {
35016
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
35017
+ return function() {
35018
+ var args = arguments,
35019
+ index = -1,
35020
+ length = nativeMax(args.length - start, 0),
35021
+ array = Array(length);
35022
+
35023
+ while (++index < length) {
35024
+ array[index] = args[start + index];
35025
+ }
35026
+ index = -1;
35027
+ var otherArgs = Array(start + 1);
35028
+ while (++index < start) {
35029
+ otherArgs[index] = args[index];
35030
+ }
35031
+ otherArgs[start] = transform(array);
35032
+ return apply(func, this, otherArgs);
35033
+ };
35034
+ }
35035
+
35036
+ /**
35037
+ * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
35038
+ *
35039
+ * @private
35040
+ * @param {Object} object The object to query.
35041
+ * @param {string} key The key of the property to get.
35042
+ * @returns {*} Returns the property value.
35043
+ */
35044
+ function safeGet(object, key) {
35045
+ if (key === 'constructor' && typeof object[key] === 'function') {
35046
+ return;
35047
+ }
35048
+
35049
+ if (key == '__proto__') {
35050
+ return;
35051
+ }
35052
+
35053
+ return object[key];
35054
+ }
35055
+
35056
+ /**
35057
+ * Sets the `toString` method of `func` to return `string`.
35058
+ *
35059
+ * @private
35060
+ * @param {Function} func The function to modify.
35061
+ * @param {Function} string The `toString` result.
35062
+ * @returns {Function} Returns `func`.
35063
+ */
35064
+ var setToString = shortOut(baseSetToString);
35065
+
35066
+ /**
35067
+ * Creates a function that'll short out and invoke `identity` instead
35068
+ * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
35069
+ * milliseconds.
35070
+ *
35071
+ * @private
35072
+ * @param {Function} func The function to restrict.
35073
+ * @returns {Function} Returns the new shortable function.
35074
+ */
35075
+ function shortOut(func) {
35076
+ var count = 0,
35077
+ lastCalled = 0;
35078
+
35079
+ return function() {
35080
+ var stamp = nativeNow(),
35081
+ remaining = HOT_SPAN - (stamp - lastCalled);
35082
+
35083
+ lastCalled = stamp;
35084
+ if (remaining > 0) {
35085
+ if (++count >= HOT_COUNT) {
35086
+ return arguments[0];
35087
+ }
35088
+ } else {
35089
+ count = 0;
35090
+ }
35091
+ return func.apply(undefined, arguments);
35092
+ };
35093
+ }
35094
+
35095
+ /**
35096
+ * Converts `func` to its source code.
35097
+ *
35098
+ * @private
35099
+ * @param {Function} func The function to convert.
35100
+ * @returns {string} Returns the source code.
35101
+ */
35102
+ function toSource(func) {
35103
+ if (func != null) {
35104
+ try {
35105
+ return funcToString.call(func);
35106
+ } catch (e) {}
35107
+ try {
35108
+ return (func + '');
35109
+ } catch (e) {}
35110
+ }
35111
+ return '';
35112
+ }
35113
+
35114
+ /**
35115
+ * Performs a
35116
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
35117
+ * comparison between two values to determine if they are equivalent.
35118
+ *
35119
+ * @static
35120
+ * @memberOf _
35121
+ * @since 4.0.0
35122
+ * @category Lang
35123
+ * @param {*} value The value to compare.
35124
+ * @param {*} other The other value to compare.
35125
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
35126
+ * @example
35127
+ *
35128
+ * var object = { 'a': 1 };
35129
+ * var other = { 'a': 1 };
35130
+ *
35131
+ * _.eq(object, object);
35132
+ * // => true
35133
+ *
35134
+ * _.eq(object, other);
35135
+ * // => false
35136
+ *
35137
+ * _.eq('a', 'a');
35138
+ * // => true
35139
+ *
35140
+ * _.eq('a', Object('a'));
35141
+ * // => false
35142
+ *
35143
+ * _.eq(NaN, NaN);
35144
+ * // => true
35145
+ */
35146
+ function eq(value, other) {
35147
+ return value === other || (value !== value && other !== other);
35148
+ }
35149
+
35150
+ /**
35151
+ * Checks if `value` is likely an `arguments` object.
35152
+ *
35153
+ * @static
35154
+ * @memberOf _
35155
+ * @since 0.1.0
35156
+ * @category Lang
35157
+ * @param {*} value The value to check.
35158
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
35159
+ * else `false`.
35160
+ * @example
35161
+ *
35162
+ * _.isArguments(function() { return arguments; }());
35163
+ * // => true
35164
+ *
35165
+ * _.isArguments([1, 2, 3]);
35166
+ * // => false
35167
+ */
35168
+ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
35169
+ return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
35170
+ !propertyIsEnumerable.call(value, 'callee');
35171
+ };
35172
+
35173
+ /**
35174
+ * Checks if `value` is classified as an `Array` object.
35175
+ *
35176
+ * @static
35177
+ * @memberOf _
35178
+ * @since 0.1.0
35179
+ * @category Lang
35180
+ * @param {*} value The value to check.
35181
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
35182
+ * @example
35183
+ *
35184
+ * _.isArray([1, 2, 3]);
35185
+ * // => true
35186
+ *
35187
+ * _.isArray(document.body.children);
35188
+ * // => false
35189
+ *
35190
+ * _.isArray('abc');
35191
+ * // => false
35192
+ *
35193
+ * _.isArray(_.noop);
35194
+ * // => false
35195
+ */
35196
+ var isArray = Array.isArray;
35197
+
35198
+ /**
35199
+ * Checks if `value` is array-like. A value is considered array-like if it's
35200
+ * not a function and has a `value.length` that's an integer greater than or
35201
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
35202
+ *
35203
+ * @static
35204
+ * @memberOf _
35205
+ * @since 4.0.0
35206
+ * @category Lang
35207
+ * @param {*} value The value to check.
35208
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
35209
+ * @example
35210
+ *
35211
+ * _.isArrayLike([1, 2, 3]);
35212
+ * // => true
35213
+ *
35214
+ * _.isArrayLike(document.body.children);
35215
+ * // => true
35216
+ *
35217
+ * _.isArrayLike('abc');
35218
+ * // => true
35219
+ *
35220
+ * _.isArrayLike(_.noop);
35221
+ * // => false
35222
+ */
35223
+ function isArrayLike(value) {
35224
+ return value != null && isLength(value.length) && !isFunction(value);
35225
+ }
35226
+
35227
+ /**
35228
+ * This method is like `_.isArrayLike` except that it also checks if `value`
35229
+ * is an object.
35230
+ *
35231
+ * @static
35232
+ * @memberOf _
35233
+ * @since 4.0.0
35234
+ * @category Lang
35235
+ * @param {*} value The value to check.
35236
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
35237
+ * else `false`.
35238
+ * @example
35239
+ *
35240
+ * _.isArrayLikeObject([1, 2, 3]);
35241
+ * // => true
35242
+ *
35243
+ * _.isArrayLikeObject(document.body.children);
35244
+ * // => true
35245
+ *
35246
+ * _.isArrayLikeObject('abc');
35247
+ * // => false
35248
+ *
35249
+ * _.isArrayLikeObject(_.noop);
35250
+ * // => false
35251
+ */
35252
+ function isArrayLikeObject(value) {
35253
+ return isObjectLike(value) && isArrayLike(value);
35254
+ }
35255
+
35256
+ /**
35257
+ * Checks if `value` is a buffer.
35258
+ *
35259
+ * @static
35260
+ * @memberOf _
35261
+ * @since 4.3.0
35262
+ * @category Lang
35263
+ * @param {*} value The value to check.
35264
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
35265
+ * @example
35266
+ *
35267
+ * _.isBuffer(new Buffer(2));
35268
+ * // => true
35269
+ *
35270
+ * _.isBuffer(new Uint8Array(2));
35271
+ * // => false
35272
+ */
35273
+ var isBuffer = nativeIsBuffer || stubFalse;
35274
+
35275
+ /**
35276
+ * Checks if `value` is classified as a `Function` object.
35277
+ *
35278
+ * @static
35279
+ * @memberOf _
35280
+ * @since 0.1.0
35281
+ * @category Lang
35282
+ * @param {*} value The value to check.
35283
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
35284
+ * @example
35285
+ *
35286
+ * _.isFunction(_);
35287
+ * // => true
35288
+ *
35289
+ * _.isFunction(/abc/);
35290
+ * // => false
35291
+ */
35292
+ function isFunction(value) {
35293
+ if (!isObject(value)) {
35294
+ return false;
35295
+ }
35296
+ // The use of `Object#toString` avoids issues with the `typeof` operator
35297
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
35298
+ var tag = baseGetTag(value);
35299
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
35300
+ }
35301
+
35302
+ /**
35303
+ * Checks if `value` is a valid array-like length.
35304
+ *
35305
+ * **Note:** This method is loosely based on
35306
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
35307
+ *
35308
+ * @static
35309
+ * @memberOf _
35310
+ * @since 4.0.0
35311
+ * @category Lang
35312
+ * @param {*} value The value to check.
35313
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
35314
+ * @example
35315
+ *
35316
+ * _.isLength(3);
35317
+ * // => true
35318
+ *
35319
+ * _.isLength(Number.MIN_VALUE);
35320
+ * // => false
35321
+ *
35322
+ * _.isLength(Infinity);
35323
+ * // => false
35324
+ *
35325
+ * _.isLength('3');
35326
+ * // => false
35327
+ */
35328
+ function isLength(value) {
35329
+ return typeof value == 'number' &&
35330
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
35331
+ }
35332
+
35333
+ /**
35334
+ * Checks if `value` is the
35335
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
35336
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
35337
+ *
35338
+ * @static
35339
+ * @memberOf _
35340
+ * @since 0.1.0
35341
+ * @category Lang
35342
+ * @param {*} value The value to check.
35343
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
35344
+ * @example
35345
+ *
35346
+ * _.isObject({});
35347
+ * // => true
35348
+ *
35349
+ * _.isObject([1, 2, 3]);
35350
+ * // => true
35351
+ *
35352
+ * _.isObject(_.noop);
35353
+ * // => true
35354
+ *
35355
+ * _.isObject(null);
35356
+ * // => false
35357
+ */
35358
+ function isObject(value) {
35359
+ var type = typeof value;
35360
+ return value != null && (type == 'object' || type == 'function');
35361
+ }
35362
+
35363
+ /**
35364
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
35365
+ * and has a `typeof` result of "object".
35366
+ *
35367
+ * @static
35368
+ * @memberOf _
35369
+ * @since 4.0.0
35370
+ * @category Lang
35371
+ * @param {*} value The value to check.
35372
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
35373
+ * @example
35374
+ *
35375
+ * _.isObjectLike({});
35376
+ * // => true
35377
+ *
35378
+ * _.isObjectLike([1, 2, 3]);
35379
+ * // => true
35380
+ *
35381
+ * _.isObjectLike(_.noop);
35382
+ * // => false
35383
+ *
35384
+ * _.isObjectLike(null);
35385
+ * // => false
35386
+ */
35387
+ function isObjectLike(value) {
35388
+ return value != null && typeof value == 'object';
35389
+ }
35390
+
35391
+ /**
35392
+ * Checks if `value` is a plain object, that is, an object created by the
35393
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
35394
+ *
35395
+ * @static
35396
+ * @memberOf _
35397
+ * @since 0.8.0
35398
+ * @category Lang
35399
+ * @param {*} value The value to check.
35400
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
35401
+ * @example
35402
+ *
35403
+ * function Foo() {
35404
+ * this.a = 1;
35405
+ * }
35406
+ *
35407
+ * _.isPlainObject(new Foo);
35408
+ * // => false
35409
+ *
35410
+ * _.isPlainObject([1, 2, 3]);
35411
+ * // => false
35412
+ *
35413
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
35414
+ * // => true
35415
+ *
35416
+ * _.isPlainObject(Object.create(null));
35417
+ * // => true
35418
+ */
35419
+ function isPlainObject(value) {
35420
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
35421
+ return false;
35422
+ }
35423
+ var proto = getPrototype(value);
35424
+ if (proto === null) {
35425
+ return true;
35426
+ }
35427
+ var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
35428
+ return typeof Ctor == 'function' && Ctor instanceof Ctor &&
35429
+ funcToString.call(Ctor) == objectCtorString;
35430
+ }
35431
+
35432
+ /**
35433
+ * Checks if `value` is classified as a typed array.
35434
+ *
35435
+ * @static
35436
+ * @memberOf _
35437
+ * @since 3.0.0
35438
+ * @category Lang
35439
+ * @param {*} value The value to check.
35440
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
35441
+ * @example
35442
+ *
35443
+ * _.isTypedArray(new Uint8Array);
35444
+ * // => true
35445
+ *
35446
+ * _.isTypedArray([]);
35447
+ * // => false
35448
+ */
35449
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
35450
+
35451
+ /**
35452
+ * Converts `value` to a plain object flattening inherited enumerable string
35453
+ * keyed properties of `value` to own properties of the plain object.
35454
+ *
35455
+ * @static
35456
+ * @memberOf _
35457
+ * @since 3.0.0
35458
+ * @category Lang
35459
+ * @param {*} value The value to convert.
35460
+ * @returns {Object} Returns the converted plain object.
35461
+ * @example
35462
+ *
35463
+ * function Foo() {
35464
+ * this.b = 2;
35465
+ * }
35466
+ *
35467
+ * Foo.prototype.c = 3;
35468
+ *
35469
+ * _.assign({ 'a': 1 }, new Foo);
35470
+ * // => { 'a': 1, 'b': 2 }
35471
+ *
35472
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
35473
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
35474
+ */
35475
+ function toPlainObject(value) {
35476
+ return copyObject(value, keysIn(value));
35477
+ }
35478
+
35479
+ /**
35480
+ * This method is like `_.defaults` except that it recursively assigns
35481
+ * default properties.
35482
+ *
35483
+ * **Note:** This method mutates `object`.
35484
+ *
35485
+ * @static
35486
+ * @memberOf _
35487
+ * @since 3.10.0
35488
+ * @category Object
35489
+ * @param {Object} object The destination object.
35490
+ * @param {...Object} [sources] The source objects.
35491
+ * @returns {Object} Returns `object`.
35492
+ * @see _.defaults
35493
+ * @example
35494
+ *
35495
+ * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
35496
+ * // => { 'a': { 'b': 2, 'c': 3 } }
35497
+ */
35498
+ var defaultsDeep = baseRest(function(args) {
35499
+ args.push(undefined, customDefaultsMerge);
35500
+ return apply(mergeWith, undefined, args);
35501
+ });
35502
+
35503
+ /**
35504
+ * Creates an array of the own and inherited enumerable property names of `object`.
35505
+ *
35506
+ * **Note:** Non-object values are coerced to objects.
35507
+ *
35508
+ * @static
35509
+ * @memberOf _
35510
+ * @since 3.0.0
35511
+ * @category Object
35512
+ * @param {Object} object The object to query.
35513
+ * @returns {Array} Returns the array of property names.
35514
+ * @example
35515
+ *
35516
+ * function Foo() {
35517
+ * this.a = 1;
35518
+ * this.b = 2;
35519
+ * }
35520
+ *
35521
+ * Foo.prototype.c = 3;
35522
+ *
35523
+ * _.keysIn(new Foo);
35524
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
35525
+ */
35526
+ function keysIn(object) {
35527
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
35528
+ }
35529
+
35530
+ /**
35531
+ * This method is like `_.merge` except that it accepts `customizer` which
35532
+ * is invoked to produce the merged values of the destination and source
35533
+ * properties. If `customizer` returns `undefined`, merging is handled by the
35534
+ * method instead. The `customizer` is invoked with six arguments:
35535
+ * (objValue, srcValue, key, object, source, stack).
35536
+ *
35537
+ * **Note:** This method mutates `object`.
35538
+ *
35539
+ * @static
35540
+ * @memberOf _
35541
+ * @since 4.0.0
35542
+ * @category Object
35543
+ * @param {Object} object The destination object.
35544
+ * @param {...Object} sources The source objects.
35545
+ * @param {Function} customizer The function to customize assigned values.
35546
+ * @returns {Object} Returns `object`.
35547
+ * @example
35548
+ *
35549
+ * function customizer(objValue, srcValue) {
35550
+ * if (_.isArray(objValue)) {
35551
+ * return objValue.concat(srcValue);
35552
+ * }
35553
+ * }
35554
+ *
35555
+ * var object = { 'a': [1], 'b': [2] };
35556
+ * var other = { 'a': [3], 'b': [4] };
35557
+ *
35558
+ * _.mergeWith(object, other, customizer);
35559
+ * // => { 'a': [1, 3], 'b': [2, 4] }
35560
+ */
35561
+ var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
35562
+ baseMerge(object, source, srcIndex, customizer);
35563
+ });
35564
+
35565
+ /**
35566
+ * Creates a function that returns `value`.
35567
+ *
35568
+ * @static
35569
+ * @memberOf _
35570
+ * @since 2.4.0
35571
+ * @category Util
35572
+ * @param {*} value The value to return from the new function.
35573
+ * @returns {Function} Returns the new constant function.
35574
+ * @example
35575
+ *
35576
+ * var objects = _.times(2, _.constant({ 'a': 1 }));
35577
+ *
35578
+ * console.log(objects);
35579
+ * // => [{ 'a': 1 }, { 'a': 1 }]
35580
+ *
35581
+ * console.log(objects[0] === objects[1]);
35582
+ * // => true
35583
+ */
35584
+ function constant(value) {
35585
+ return function() {
35586
+ return value;
35587
+ };
35588
+ }
35589
+
35590
+ /**
35591
+ * This method returns the first argument it receives.
35592
+ *
35593
+ * @static
35594
+ * @since 0.1.0
35595
+ * @memberOf _
35596
+ * @category Util
35597
+ * @param {*} value Any value.
35598
+ * @returns {*} Returns `value`.
35599
+ * @example
35600
+ *
35601
+ * var object = { 'a': 1 };
35602
+ *
35603
+ * console.log(_.identity(object) === object);
35604
+ * // => true
35605
+ */
35606
+ function identity(value) {
35607
+ return value;
35608
+ }
35609
+
35610
+ /**
35611
+ * This method returns `false`.
35612
+ *
35613
+ * @static
35614
+ * @memberOf _
35615
+ * @since 4.13.0
35616
+ * @category Util
35617
+ * @returns {boolean} Returns `false`.
35618
+ * @example
35619
+ *
35620
+ * _.times(2, _.stubFalse);
35621
+ * // => [false, false]
35622
+ */
35623
+ function stubFalse() {
35624
+ return false;
35625
+ }
35626
+
35627
+ module.exports = defaultsDeep;
35628
+ } (lodash_defaultsdeep, lodash_defaultsdeep.exports));
35629
+
35630
+ var defaultsDeep = lodash_defaultsdeep.exports;
35631
+
32494
35632
  let urlAlphabet =
32495
35633
  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
32496
35634
 
@@ -33319,7 +36457,7 @@ var UnMemoizedMessageActionsBox = React__default["default"].forwardRef(function
33319
36457
  });
33320
36458
  var buttonClassName = 'str-chat__message-actions-list-item str-chat__message-actions-list-item-button';
33321
36459
  return (React__default["default"].createElement("div", exports.__assign({}, restDivProps, { className: rootClassName, "data-testid": 'message-actions-box', ref: ref }),
33322
- React__default["default"].createElement("div", { "aria-label": 'Message Options', className: 'str-chat__message-actions-list', role: 'listbox' },
36460
+ React__default["default"].createElement("div", { "aria-label": t('aria/Message Options'), className: 'str-chat__message-actions-list', role: 'listbox' },
33323
36461
  React__default["default"].createElement(CustomMessageActionsList$1, { customMessageActions: customMessageActions, message: message }),
33324
36462
  messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && (React__default["default"].createElement("button", { "aria-selected": 'false', className: buttonClassName, onClick: handleQuote, role: 'option' }, t('Reply'))),
33325
36463
  messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (React__default["default"].createElement("button", { "aria-selected": 'false', className: buttonClassName, onClick: handlePin, role: 'option' }, !message.pinned ? t('Pin') : t('Unpin'))),
@@ -35275,6 +38413,7 @@ var MessageActions = function (props) {
35275
38413
  var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.customWrapperClass, customWrapperClass = _b === void 0 ? '' : _b, propGetMessageActions = props.getMessageActions, propHandleDelete = props.handleDelete, propHandleFlag = props.handleFlag, propHandleMarkUnread = props.handleMarkUnread, propHandleMute = props.handleMute, propHandlePin = props.handlePin, inline = props.inline, propMessage = props.message, messageWrapperRef = props.messageWrapperRef, mine = props.mine;
35276
38414
  var mutes = useChatContext('MessageActions').mutes;
35277
38415
  var _c = useMessageContext('MessageActions'), customMessageActions = _c.customMessageActions, contextGetMessageActions = _c.getMessageActions, contextHandleDelete = _c.handleDelete, contextHandleFlag = _c.handleFlag, contextHandleMarkUnread = _c.handleMarkUnread, contextHandleMute = _c.handleMute, contextHandlePin = _c.handlePin, isMyMessage = _c.isMyMessage, contextMessage = _c.message, setEditingState = _c.setEditingState;
38416
+ var t = useTranslationContext('MessageActions').t;
35278
38417
  var getMessageActions = propGetMessageActions || contextGetMessageActions;
35279
38418
  var handleDelete = propHandleDelete || contextHandleDelete;
35280
38419
  var handleFlag = propHandleFlag || contextHandleFlag;
@@ -35323,7 +38462,7 @@ var MessageActions = function (props) {
35323
38462
  return null;
35324
38463
  return (React__default["default"].createElement(MessageActionsWrapper, { customWrapperClass: customWrapperClass, inline: inline, setActionsBoxOpen: setActionsBoxOpen },
35325
38464
  React__default["default"].createElement(MessageActionsBox, exports.__assign({}, attributes.popper, { getMessageActions: getMessageActions, handleDelete: handleDelete, handleEdit: setEditingState, handleFlag: handleFlag, handleMarkUnread: handleMarkUnread, handleMute: handleMute, handlePin: handlePin, isUserMuted: isMuted, mine: isMine, open: actionsBoxOpen, ref: popperElementRef, style: styles.popper })),
35326
- React__default["default"].createElement("button", { "aria-expanded": actionsBoxOpen, "aria-haspopup": 'true', "aria-label": 'Open Message Actions Menu', className: 'str-chat__message-actions-box-button', ref: actionsBoxButtonRef },
38465
+ React__default["default"].createElement("button", { "aria-expanded": actionsBoxOpen, "aria-haspopup": 'true', "aria-label": t('aria/Open Message Actions Menu'), className: 'str-chat__message-actions-box-button', ref: actionsBoxButtonRef },
35327
38466
  React__default["default"].createElement(ActionsIcon$1, { className: 'str-chat__message-action-icon' }))));
35328
38467
  };
35329
38468
  var MessageActionsWrapper = function (props) {
@@ -35346,7 +38485,8 @@ var MessageActionsWrapper = function (props) {
35346
38485
 
35347
38486
  var UnMemoizedMessageOptions = function (props) {
35348
38487
  var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.displayReplies, displayReplies = _b === void 0 ? true : _b, propHandleOpenThread = props.handleOpenThread, messageWrapperRef = props.messageWrapperRef, _c = props.ReactionIcon, ReactionIcon$1 = _c === void 0 ? ReactionIcon : _c, _d = props.theme, theme = _d === void 0 ? 'simple' : _d, _e = props.ThreadIcon, ThreadIcon$1 = _e === void 0 ? ThreadIcon : _e;
35349
- var _f = useMessageContext('MessageOptions'), customMessageActions = _f.customMessageActions, getMessageActions = _f.getMessageActions, contextHandleOpenThread = _f.handleOpenThread, initialMessage = _f.initialMessage, message = _f.message, onReactionListClick = _f.onReactionListClick, threadList = _f.threadList;
38488
+ var _f = useMessageContext('MessageOptions'), customMessageActions = _f.customMessageActions, getMessageActions = _f.getMessageActions, contextHandleOpenThread = _f.handleOpenThread, initialMessage = _f.initialMessage, message = _f.message, onReactionListClick = _f.onReactionListClick, showDetailedReactions = _f.showDetailedReactions, threadList = _f.threadList;
38489
+ var t = useTranslationContext('MessageOptions').t;
35350
38490
  var handleOpenThread = propHandleOpenThread || contextHandleOpenThread;
35351
38491
  var messageActions = getMessageActions();
35352
38492
  var showActionsBox = showMessageActionsBox(messageActions, threadList) || !!customMessageActions;
@@ -35364,9 +38504,9 @@ var UnMemoizedMessageOptions = function (props) {
35364
38504
  var rootClassName = "str-chat__message-".concat(theme, "__actions str-chat__message-options");
35365
38505
  return (React__default["default"].createElement("div", { className: rootClassName, "data-testid": 'message-options' },
35366
38506
  showActionsBox && (React__default["default"].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef })),
35367
- shouldShowReplies && (React__default["default"].createElement("button", { "aria-label": 'Open Thread', className: "str-chat__message-".concat(theme, "__actions__action str-chat__message-").concat(theme, "__actions__action--thread str-chat__message-reply-in-thread-button"), "data-testid": 'thread-action', onClick: handleOpenThread },
38507
+ shouldShowReplies && (React__default["default"].createElement("button", { "aria-label": t('aria/Open Thread'), className: "str-chat__message-".concat(theme, "__actions__action str-chat__message-").concat(theme, "__actions__action--thread str-chat__message-reply-in-thread-button"), "data-testid": 'thread-action', onClick: handleOpenThread },
35368
38508
  React__default["default"].createElement(ThreadIcon$1, { className: 'str-chat__message-action-icon' }))),
35369
- shouldShowReactions && (React__default["default"].createElement("button", { "aria-label": 'Open Reaction Selector', className: "str-chat__message-".concat(theme, "__actions__action str-chat__message-").concat(theme, "__actions__action--reactions str-chat__message-reactions-button"), "data-testid": 'message-reaction-action', onClick: onReactionListClick },
38509
+ shouldShowReactions && (React__default["default"].createElement("button", { "aria-expanded": showDetailedReactions, "aria-label": t('aria/Open Reaction Selector'), className: "str-chat__message-".concat(theme, "__actions__action str-chat__message-").concat(theme, "__actions__action--reactions str-chat__message-reactions-button"), "data-testid": 'message-reaction-action', onClick: onReactionListClick },
35370
38510
  React__default["default"].createElement(ReactionIcon$1, { className: 'str-chat__message-action-icon' })))));
35371
38511
  };
35372
38512
  var MessageOptions = React__default["default"].memo(UnMemoizedMessageOptions);
@@ -35679,7 +38819,8 @@ var SendIconV2 = function () {
35679
38819
  var SendButton = function (_a) {
35680
38820
  var sendMessage = _a.sendMessage, rest = __rest(_a, ["sendMessage"]);
35681
38821
  var themeVersion = useChatContext('SendButton').themeVersion;
35682
- return (React__default["default"].createElement("button", exports.__assign({ "aria-label": 'Send', className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React__default["default"].createElement(SendIconV2, null) : React__default["default"].createElement(SendIconV1, null)));
38822
+ var t = useTranslationContext('SendButton').t;
38823
+ return (React__default["default"].createElement("button", exports.__assign({ "aria-label": t('aria/Send'), className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React__default["default"].createElement(SendIconV2, null) : React__default["default"].createElement(SendIconV1, null)));
35683
38824
  };
35684
38825
 
35685
38826
  var AttachmentPreviewList = function () {
@@ -36254,7 +39395,7 @@ var QuotedMessagePreviewHeader = function () {
36254
39395
  var t = useTranslationContext('QuotedMessagePreview').t;
36255
39396
  return (React__default["default"].createElement("div", { className: 'quoted-message-preview-header str-chat__quoted-message-preview-header' },
36256
39397
  React__default["default"].createElement("div", { className: 'str-chat__quoted-message-reply-to-message' }, t('Reply to Message')),
36257
- React__default["default"].createElement("button", { "aria-label": 'Cancel Reply', className: 'str-chat__square-button str-chat__quoted-message-remove', onClick: function () { return setQuotedMessage(undefined); } },
39398
+ React__default["default"].createElement("button", { "aria-label": t('aria/Cancel Reply'), className: 'str-chat__square-button str-chat__quoted-message-remove', onClick: function () { return setQuotedMessage(undefined); } },
36258
39399
  React__default["default"].createElement(CloseIcon$1, null))));
36259
39400
  };
36260
39401
  var QuotedMessagePreview = function (_a) {
@@ -36420,7 +39561,7 @@ var MessageInputV2 = function () {
36420
39561
  displayQuotedMessage && React__default["default"].createElement(QuotedMessagePreviewHeader, null),
36421
39562
  React__default["default"].createElement("div", { className: 'str-chat__message-input-inner' },
36422
39563
  React__default["default"].createElement("div", { className: 'str-chat__file-input-container', "data-testid": 'file-upload-button' },
36423
- React__default["default"].createElement(UploadButton, { accept: acceptedFiles === null || acceptedFiles === void 0 ? void 0 : acceptedFiles.join(','), "aria-label": 'File upload', className: 'str-chat__file-input', "data-testid": 'file-input', disabled: !isUploadEnabled || maxFilesLeft === 0, id: id, multiple: multipleUploads, onFileChange: uploadNewFiles }),
39564
+ React__default["default"].createElement(UploadButton, { accept: acceptedFiles === null || acceptedFiles === void 0 ? void 0 : acceptedFiles.join(','), "aria-label": t('aria/File upload'), className: 'str-chat__file-input', "data-testid": 'file-input', disabled: !isUploadEnabled || maxFilesLeft === 0, id: id, multiple: multipleUploads, onFileChange: uploadNewFiles }),
36424
39565
  React__default["default"].createElement("label", { className: 'str-chat__file-input-label', htmlFor: id },
36425
39566
  React__default["default"].createElement(FileUploadIcon, null))),
36426
39567
  React__default["default"].createElement("div", { className: 'str-chat__message-textarea-container' },
@@ -37632,11 +40773,16 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
37632
40773
  */
37633
40774
  var ReactionSelector = React__default["default"].memo(UnMemoizedReactionSelector);
37634
40775
 
40776
+ var defaultReactionsSort = function (a, b) {
40777
+ return a.reactionType.localeCompare(b.reactionType, 'en');
40778
+ };
37635
40779
  var useProcessReactions = function (params) {
37636
- var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions;
37637
- var message = useMessageContext('useProcessReactions').message;
40780
+ var _a;
40781
+ var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
40782
+ var _b = useMessageContext('useProcessReactions'), message = _b.message, contextSortReactions = _b.sortReactions;
37638
40783
  var contextReactionOptions = useComponentContext('useProcessReactions').reactionOptions;
37639
40784
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
40785
+ var sortReactions = (_a = propSortReactions !== null && propSortReactions !== void 0 ? propSortReactions : contextSortReactions) !== null && _a !== void 0 ? _a : defaultReactionsSort;
37640
40786
  var latestReactions = propReactions || message.latest_reactions;
37641
40787
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions);
37642
40788
  var reactionCounts = propReactionCounts || message.reaction_counts;
@@ -37663,7 +40809,7 @@ var useProcessReactions = function (params) {
37663
40809
  if (!reactionCounts) {
37664
40810
  return [];
37665
40811
  }
37666
- return Object.entries(reactionCounts).flatMap(function (_a) {
40812
+ var unsortedReactions = Object.entries(reactionCounts).flatMap(function (_a) {
37667
40813
  var reactionType = _a[0], reactionCount = _a[1];
37668
40814
  if (reactionCount === 0 || !isSupportedReaction(reactionType)) {
37669
40815
  return [];
@@ -37678,12 +40824,14 @@ var useProcessReactions = function (params) {
37678
40824
  },
37679
40825
  ];
37680
40826
  });
40827
+ return unsortedReactions.sort(sortReactions);
37681
40828
  }, [
37682
40829
  getEmojiByReactionType,
37683
40830
  getLatestReactedUserNames,
37684
40831
  isOwnReaction,
37685
40832
  isSupportedReaction,
37686
40833
  reactionCounts,
40834
+ sortReactions,
37687
40835
  ]);
37688
40836
  var hasReactions = existingReactions.length > 0;
37689
40837
  var totalReactionCount = React.useMemo(function () { return existingReactions.reduce(function (total, _a) {
@@ -37700,9 +40848,9 @@ var useProcessReactions = function (params) {
37700
40848
  function useFetchReactions(options) {
37701
40849
  var _this = this;
37702
40850
  var contextHandleFetchReactions = useMessageContext('useFetchReactions').handleFetchReactions;
37703
- var _a = React.useState(false), isLoading = _a[0], setIsLoading = _a[1];
37704
- var _b = React.useState([]), reactions = _b[0], setReactions = _b[1];
40851
+ var _a = React.useState([]), reactions = _a[0], setReactions = _a[1];
37705
40852
  var propHandleFetchReactions = options.handleFetchReactions, shouldFetch = options.shouldFetch;
40853
+ var _b = React.useState(shouldFetch), isLoading = _b[0], setIsLoading = _b[1];
37706
40854
  var handleFetchReactions = propHandleFetchReactions !== null && propHandleFetchReactions !== void 0 ? propHandleFetchReactions : contextHandleFetchReactions;
37707
40855
  React.useEffect(function () {
37708
40856
  if (!shouldFetch) {
@@ -37745,24 +40893,33 @@ function useFetchReactions(options) {
37745
40893
  return { isLoading: isLoading, reactions: reactions };
37746
40894
  }
37747
40895
 
40896
+ var defaultSortReactionDetails = function (a, b) {
40897
+ var _a, _b, _c, _d, _e, _f;
40898
+ var aName = (_b = (_a = a.user) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : (_c = a.user) === null || _c === void 0 ? void 0 : _c.id;
40899
+ var bName = (_e = (_d = b.user) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : (_f = b.user) === null || _f === void 0 ? void 0 : _f.id;
40900
+ return aName ? (bName ? aName.localeCompare(bName, 'en') : -1) : 1;
40901
+ };
37748
40902
  function ReactionsListModal(_a) {
37749
- var _b;
37750
- var handleFetchReactions = _a.handleFetchReactions, onSelectedReactionTypeChange = _a.onSelectedReactionTypeChange, reactions = _a.reactions, selectedReactionType = _a.selectedReactionType, modalProps = __rest(_a, ["handleFetchReactions", "onSelectedReactionTypeChange", "reactions", "selectedReactionType"]);
40903
+ var _b, _c;
40904
+ var handleFetchReactions = _a.handleFetchReactions, onSelectedReactionTypeChange = _a.onSelectedReactionTypeChange, reactions = _a.reactions, selectedReactionType = _a.selectedReactionType, propSortReactionDetails = _a.sortReactionDetails, modalProps = __rest(_a, ["handleFetchReactions", "onSelectedReactionTypeChange", "reactions", "selectedReactionType", "sortReactionDetails"]);
37751
40905
  var selectedReaction = reactions.find(function (_a) {
37752
40906
  var reactionType = _a.reactionType;
37753
40907
  return reactionType === selectedReactionType;
37754
40908
  });
37755
40909
  var SelectedEmojiComponent = (_b = selectedReaction === null || selectedReaction === void 0 ? void 0 : selectedReaction.EmojiComponent) !== null && _b !== void 0 ? _b : null;
37756
- var _c = useFetchReactions({
40910
+ var _d = useFetchReactions({
37757
40911
  handleFetchReactions: handleFetchReactions,
37758
40912
  shouldFetch: modalProps.open,
37759
- }), areReactionsLoading = _c.isLoading, allReactions = _c.reactions;
40913
+ }), areReactionsLoading = _d.isLoading, allReactions = _d.reactions;
40914
+ var contextSortReactionDetails = useMessageContext('ReactionsListModal').sortReactionDetails;
40915
+ var sortReactionDetails = (_c = propSortReactionDetails !== null && propSortReactionDetails !== void 0 ? propSortReactionDetails : contextSortReactionDetails) !== null && _c !== void 0 ? _c : defaultSortReactionDetails;
37760
40916
  var currentReactions = React.useMemo(function () {
37761
40917
  if (!selectedReactionType) {
37762
40918
  return [];
37763
40919
  }
37764
- return allReactions.filter(function (reaction) { return reaction.type === selectedReactionType && reaction.user; });
37765
- }, [allReactions, selectedReactionType]);
40920
+ var unsortedCurrentReactions = allReactions.filter(function (reaction) { return reaction.type === selectedReactionType && reaction.user; });
40921
+ return unsortedCurrentReactions.sort(sortReactionDetails);
40922
+ }, [allReactions, selectedReactionType, sortReactionDetails]);
37766
40923
  return (React__default["default"].createElement(Modal, exports.__assign({}, modalProps),
37767
40924
  React__default["default"].createElement("div", { className: 'str-chat__message-reactions-details', "data-testid": 'reactions-list-modal' },
37768
40925
  React__default["default"].createElement("div", { className: 'str-chat__message-reactions-details-reaction-types' }, reactions.map(function (_a) {
@@ -37770,12 +40927,12 @@ function ReactionsListModal(_a) {
37770
40927
  return EmojiComponent && (React__default["default"].createElement("div", { className: clsx('str-chat__message-reactions-details-reaction-type', {
37771
40928
  'str-chat__message-reactions-details-reaction-type--selected': selectedReactionType === reactionType,
37772
40929
  }), "data-testid": "reaction-details-selector-".concat(reactionType), key: reactionType, onClick: function () { return onSelectedReactionTypeChange === null || onSelectedReactionTypeChange === void 0 ? void 0 : onSelectedReactionTypeChange(reactionType); } },
37773
- React__default["default"].createElement("span", { className: 'emoji str-chat__message-reaction-emoji' },
40930
+ React__default["default"].createElement("span", { className: 'emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback' },
37774
40931
  React__default["default"].createElement(EmojiComponent, null)),
37775
40932
  "\u00A0",
37776
40933
  React__default["default"].createElement("span", { className: 'str-chat__message-reaction-count' }, reactionCount)));
37777
40934
  })),
37778
- SelectedEmojiComponent && (React__default["default"].createElement("div", { className: 'emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big' },
40935
+ SelectedEmojiComponent && (React__default["default"].createElement("div", { className: 'emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback str-chat__message-reaction-emoji-big' },
37779
40936
  React__default["default"].createElement(SelectedEmojiComponent, null))),
37780
40937
  React__default["default"].createElement("div", { className: 'str-chat__message-reactions-details-reacting-users', "data-testid": 'all-reacting-users' }, areReactionsLoading ? (React__default["default"].createElement(LoadingIndicator, null)) : (currentReactions.map(function (_a) {
37781
40938
  var user = _a.user;
@@ -38396,9 +41553,10 @@ function fetchMessageReactions(channel, messageId) {
38396
41553
  }
38397
41554
 
38398
41555
  var UnMemoizedReactionsList = function (props) {
38399
- var handleFetchReactions = props.handleFetchReactions, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["handleFetchReactions", "reverse"]);
41556
+ var handleFetchReactions = props.handleFetchReactions, _a = props.reverse, reverse = _a === void 0 ? false : _a, sortReactionDetails = props.sortReactionDetails, rest = __rest(props, ["handleFetchReactions", "reverse", "sortReactionDetails"]);
38400
41557
  var _b = useProcessReactions(rest), existingReactions = _b.existingReactions, hasReactions = _b.hasReactions, totalReactionCount = _b.totalReactionCount;
38401
41558
  var _c = React.useState(null), selectedReactionType = _c[0], setSelectedReactionType = _c[1];
41559
+ var t = useTranslationContext('ReactionsList').t;
38402
41560
  var handleReactionButtonClick = function (reactionType) {
38403
41561
  if (totalReactionCount > MAX_MESSAGE_REACTIONS_TO_FETCH) {
38404
41562
  return;
@@ -38408,7 +41566,7 @@ var UnMemoizedReactionsList = function (props) {
38408
41566
  if (!hasReactions)
38409
41567
  return null;
38410
41568
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
38411
- React__default["default"].createElement("div", { "aria-label": 'Reaction list', className: clsx('str-chat__reaction-list str-chat__message-reactions-container', {
41569
+ React__default["default"].createElement("div", { "aria-label": t('aria/Reaction list'), className: clsx('str-chat__reaction-list str-chat__message-reactions-container', {
38412
41570
  'str-chat__reaction-list--reverse': reverse,
38413
41571
  }), "data-testid": 'reaction-list', role: 'figure' },
38414
41572
  React__default["default"].createElement("ul", { className: 'str-chat__message-reactions' },
@@ -38425,7 +41583,7 @@ var UnMemoizedReactionsList = function (props) {
38425
41583
  }),
38426
41584
  React__default["default"].createElement("li", null,
38427
41585
  React__default["default"].createElement("span", { className: 'str-chat__reaction-list--counter' }, totalReactionCount)))),
38428
- React__default["default"].createElement(ReactionsListModal, { handleFetchReactions: handleFetchReactions, onClose: function () { return setSelectedReactionType(null); }, onSelectedReactionTypeChange: setSelectedReactionType, open: selectedReactionType !== null, reactions: existingReactions, selectedReactionType: selectedReactionType })));
41586
+ React__default["default"].createElement(ReactionsListModal, { handleFetchReactions: handleFetchReactions, onClose: function () { return setSelectedReactionType(null); }, onSelectedReactionTypeChange: setSelectedReactionType, open: selectedReactionType !== null, reactions: existingReactions, selectedReactionType: selectedReactionType, sortReactionDetails: sortReactionDetails })));
38429
41587
  };
38430
41588
  /**
38431
41589
  * Component that displays a list of reactions on a message.
@@ -38474,30 +41632,15 @@ var UnMemoizedSimpleReactionsList = function (props) {
38474
41632
  var SimpleReactionsList = React__default["default"].memo(UnMemoizedSimpleReactionsList);
38475
41633
 
38476
41634
  var SpriteImage = function (_a) {
38477
- var columns = _a.columns, fallback = _a.fallback, height = _a.height, position = _a.position, rows = _a.rows, spriteUrl = _a.spriteUrl, width = _a.width;
41635
+ var columns = _a.columns, fallback = _a.fallback, height = _a.height, position = _a.position, rows = _a.rows, spriteUrl = _a.spriteUrl, style = _a.style, width = _a.width;
38478
41636
  var _b = React.useState([0, 0]), _c = _b[0], spriteWidth = _c[0], spriteHeight = _c[1], setSpriteDimensions = _b[1];
38479
41637
  React.useEffect(function () {
38480
41638
  getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
38481
41639
  }, [spriteUrl]);
38482
41640
  var x = position[0], y = position[1];
38483
- var spriteItemWidth = spriteWidth / columns;
38484
- var spriteItemHeight = spriteHeight / rows;
38485
- var resizeRatio = 1;
38486
- if (!width && height)
38487
- resizeRatio = height / spriteItemHeight;
38488
- if (width && !height)
38489
- resizeRatio = width / spriteItemWidth;
38490
- if (resizeRatio === Infinity)
38491
- resizeRatio = 1;
38492
41641
  if (!spriteHeight || !spriteWidth)
38493
41642
  return React__default["default"].createElement(React__default["default"].Fragment, null, fallback);
38494
- return (React__default["default"].createElement("div", { "data-testid": 'sprite-image', style: {
38495
- backgroundImage: "url('".concat(spriteUrl, "')"),
38496
- backgroundPosition: "".concat(x * (100 / (columns - 1)), "% ").concat(y * (100 / (rows - 1)), "%"),
38497
- backgroundSize: "".concat(columns * 100, "% ").concat(rows * 100, "%"),
38498
- height: height !== null && height !== void 0 ? height : spriteItemHeight * resizeRatio,
38499
- width: width !== null && width !== void 0 ? width : spriteItemWidth * resizeRatio,
38500
- } }));
41643
+ return (React__default["default"].createElement("div", { "data-testid": 'sprite-image', style: exports.__assign(exports.__assign(exports.__assign(exports.__assign(exports.__assign({}, style), { '--str-chat__sprite-image-resize-ratio': 'var(--str-chat__sprite-image-resize-ratio-x, var(--str-chat__sprite-image-resize-ratio-y, 1))', '--str-chat__sprite-image-resize-ratio-x': 'calc(var(--str-chat__sprite-image-width) / var(--str-chat__sprite-item-width))', '--str-chat__sprite-image-resize-ratio-y': 'calc(var(--str-chat__sprite-image-height) / var(--str-chat__sprite-item-height))', '--str-chat__sprite-item-height': "".concat(spriteHeight / rows), '--str-chat__sprite-item-width': "".concat(spriteWidth / columns) }), (Number.isFinite(height) ? { '--str-chat__sprite-image-height': "".concat(height, "px") } : {})), (Number.isFinite(width) ? { '--str-chat__sprite-image-width': "".concat(width, "px") } : {})), { backgroundImage: "url('".concat(spriteUrl, "')"), backgroundPosition: "".concat(x * (100 / (columns - 1)), "% ").concat(y * (100 / (rows - 1)), "%"), backgroundSize: "".concat(columns * 100, "% ").concat(rows * 100, "%"), height: 'var(--str-chat__sprite-image-height, calc(var(--str-chat__sprite-item-height) * var(--str-chat__sprite-image-resize-ratio)))', width: 'var(--str-chat__sprite-image-width, calc(var(--str-chat__sprite-item-width) * var(--str-chat__sprite-image-resize-ratio)))' }) }));
38501
41644
  };
38502
41645
 
38503
41646
  var StreamSpriteEmojiPositions = {
@@ -38512,7 +41655,9 @@ var STREAM_SPRITE_URL = 'https://getstream.imgix.net/images/emoji-sprite.png';
38512
41655
  var StreamEmoji = function (_a) {
38513
41656
  var fallback = _a.fallback, type = _a.type;
38514
41657
  var position = StreamSpriteEmojiPositions[type];
38515
- return (React__default["default"].createElement(SpriteImage, { columns: 2, fallback: fallback, height: 18, position: position, rows: 3, spriteUrl: STREAM_SPRITE_URL }));
41658
+ return (React__default["default"].createElement(SpriteImage, { columns: 2, fallback: fallback, position: position, rows: 3, spriteUrl: STREAM_SPRITE_URL, style: {
41659
+ '--str-chat__sprite-image-height': 'var(--str-chat__stream-emoji-size, 18px)',
41660
+ } }));
38516
41661
  };
38517
41662
 
38518
41663
  /* eslint-disable sort-keys */
@@ -38713,7 +41858,7 @@ var MemoizedMessage = React__default["default"].memo(MessageWithContext, areMess
38713
41858
  * an individual message. The actual UI of the message is delegated via the Message prop on Channel.
38714
41859
  */
38715
41860
  var Message = function (props) {
38716
- var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFetchReactionsErrorNotification = props.getFetchReactionsErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMarkMessageUnreadErrorNotification = props.getMarkMessageUnreadErrorNotification, getMarkMessageUnreadSuccessNotification = props.getMarkMessageUnreadSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage;
41861
+ var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFetchReactionsErrorNotification = props.getFetchReactionsErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMarkMessageUnreadErrorNotification = props.getMarkMessageUnreadErrorNotification, getMarkMessageUnreadSuccessNotification = props.getMarkMessageUnreadSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage, sortReactionDetails = props.sortReactionDetails, sortReactions = props.sortReactions;
38717
41862
  var addNotification = useChannelActionContext('Message').addNotification;
38718
41863
  var _b = useChannelStateContext('Message'), highlightedMessageId = _b.highlightedMessageId, mutes = _b.mutes;
38719
41864
  var reactionSelectorRef = React.useRef(null);
@@ -38755,7 +41900,7 @@ var Message = function (props) {
38755
41900
  }), canPin = _d.canPin, handlePin = _d.handlePin;
38756
41901
  var _e = useReactionClick(message, reactionSelectorRef, undefined, closeReactionSelectorOnClick), isReactionEnabled = _e.isReactionEnabled, onReactionListClick = _e.onReactionListClick, showDetailedReactions = _e.showDetailedReactions;
38757
41902
  var highlighted = highlightedMessageId === message.id;
38758
- return (React__default["default"].createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, autoscrollToBottom: props.autoscrollToBottom, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, endOfGroup: props.endOfGroup, firstOfGroup: props.firstOfGroup, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFetchReactions: handleFetchReactions, handleFlag: handleFlag, handleMarkUnread: handleMarkUnread, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, highlighted: highlighted, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
41903
+ return (React__default["default"].createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, autoscrollToBottom: props.autoscrollToBottom, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, endOfGroup: props.endOfGroup, firstOfGroup: props.firstOfGroup, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFetchReactions: handleFetchReactions, handleFlag: handleFlag, handleMarkUnread: handleMarkUnread, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, highlighted: highlighted, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, sortReactionDetails: sortReactionDetails, sortReactions: sortReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
38759
41904
  };
38760
41905
 
38761
41906
  /* eslint-disable no-continue */
@@ -38983,9 +42128,9 @@ var hasNotMoreMessages = function (returnedCountMessages, limit) {
38983
42128
 
38984
42129
  var UNREAD_MESSAGE_SEPARATOR_CLASS = 'str-chat__unread-messages-separator';
38985
42130
  var UnreadMessagesSeparator = function (_a) {
38986
- var unreadCount = _a.unreadCount;
42131
+ var showCount = _a.showCount, unreadCount = _a.unreadCount;
38987
42132
  var t = useTranslationContext('UnreadMessagesSeparator').t;
38988
- return (React__default["default"].createElement("div", { className: UNREAD_MESSAGE_SEPARATOR_CLASS, "data-testid": 'unread-messages-separator' }, unreadCount
42133
+ return (React__default["default"].createElement("div", { className: UNREAD_MESSAGE_SEPARATOR_CLASS, "data-testid": 'unread-messages-separator' }, unreadCount && showCount
38989
42134
  ? t('unreadMessagesSeparatorText', { count: unreadCount })
38990
42135
  : t('Unread messages')));
38991
42136
  };
@@ -39128,13 +42273,53 @@ var UnMemoizedTypingIndicator = function (props) {
39128
42273
  var TypingIndicator = React__default["default"].memo(UnMemoizedTypingIndicator);
39129
42274
 
39130
42275
  var UnMemoizedScrollToBottomButton = function (props) {
39131
- var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick, _a = props.unreadCount, unreadCount = _a === void 0 ? 0 : _a;
42276
+ var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick, threadList = props.threadList;
42277
+ var _a = useChatContext(), activeChannel = _a.channel, client = _a.client;
42278
+ var thread = useChannelStateContext().thread;
42279
+ var _b = React.useState((activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.countUnread()) || 0), countUnread = _b[0], setCountUnread = _b[1];
42280
+ var _c = React.useState((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0), replyCount = _c[0], setReplyCount = _c[1];
42281
+ var observedEvent = threadList ? 'message.updated' : 'message.new';
42282
+ React.useEffect(function () {
42283
+ var handleEvent = function (event) {
42284
+ var _a, _b, _c, _d, _e;
42285
+ var newMessageInAnotherChannel = event.cid !== (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid);
42286
+ var newMessageIsMine = ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id);
42287
+ var isThreadOpen = !!thread;
42288
+ var newMessageIsReply = !!((_c = event.message) === null || _c === void 0 ? void 0 : _c.parent_id);
42289
+ var dontIncreaseMainListCounterOnNewReply = isThreadOpen && !threadList && newMessageIsReply;
42290
+ if (isMessageListScrolledToBottom ||
42291
+ newMessageInAnotherChannel ||
42292
+ newMessageIsMine ||
42293
+ dontIncreaseMainListCounterOnNewReply) {
42294
+ return;
42295
+ }
42296
+ if (event.type === 'message.new') {
42297
+ // cannot rely on channel.countUnread because active channel is automatically marked read
42298
+ setCountUnread(function (prev) { return prev + 1; });
42299
+ }
42300
+ else if (((_d = event.message) === null || _d === void 0 ? void 0 : _d.id) === (thread === null || thread === void 0 ? void 0 : thread.id)) {
42301
+ var newReplyCount_1 = ((_e = event.message) === null || _e === void 0 ? void 0 : _e.reply_count) || 0;
42302
+ setCountUnread(function () { return newReplyCount_1 - replyCount; });
42303
+ }
42304
+ };
42305
+ client.on(observedEvent, handleEvent);
42306
+ return function () {
42307
+ client.off(observedEvent, handleEvent);
42308
+ };
42309
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42310
+ }, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);
42311
+ React.useEffect(function () {
42312
+ if (isMessageListScrolledToBottom) {
42313
+ setCountUnread(0);
42314
+ setReplyCount((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0);
42315
+ }
42316
+ }, [isMessageListScrolledToBottom, thread]);
39132
42317
  if (isMessageListScrolledToBottom)
39133
42318
  return null;
39134
42319
  return (React__default["default"].createElement("div", { className: 'str-chat__jump-to-latest-message' },
39135
42320
  React__default["default"].createElement("button", { "aria-live": 'polite', className: "\n str-chat__message-notification-right\n str-chat__message-notification-scroll-to-latest\n str-chat__circle-fab\n ", "data-testid": 'message-notification', onClick: onClick },
39136
42321
  React__default["default"].createElement(ArrowDown, null),
39137
- unreadCount > 0 && (React__default["default"].createElement("div", { className: clsx('str-chat__message-notification', 'str-chat__message-notification-scroll-to-latest-unread-count', 'str-chat__jump-to-latest-unread-count'), "data-testid": 'unread-message-notification-counter' }, unreadCount)))));
42322
+ countUnread > 0 && (React__default["default"].createElement("div", { className: clsx('str-chat__message-notification', 'str-chat__message-notification-scroll-to-latest-unread-count', 'str-chat__jump-to-latest-unread-count'), "data-testid": 'unread-message-notification-counter' }, countUnread)))));
39138
42323
  };
39139
42324
  var ScrollToBottomButton = React__default["default"].memo(UnMemoizedScrollToBottomButton);
39140
42325
 
@@ -39449,69 +42634,81 @@ var UnMemoizedChannel = function (props) {
39449
42634
  };
39450
42635
  var ChannelInner = function (props) {
39451
42636
  var _a;
39452
- var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, channelQueryOptions = props.channelQueryOptions, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannel : _e, _f = props.markReadOnMount, markReadOnMount = _f === void 0 ? true : _f, maxNumberOfFiles = props.maxNumberOfFiles, _g = props.multipleUploads, multipleUploads = _g === void 0 ? true : _g, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _h = props.optionalMessageInputProps, optionalMessageInputProps = _h === void 0 ? {} : _h, skipMessageDataMemoization = props.skipMessageDataMemoization;
42637
+ var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, propChannelQueryOptions = props.channelQueryOptions, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannel : _e, _f = props.markReadOnMount, markReadOnMount = _f === void 0 ? true : _f, maxNumberOfFiles = props.maxNumberOfFiles, _g = props.multipleUploads, multipleUploads = _g === void 0 ? true : _g, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _h = props.optionalMessageInputProps, optionalMessageInputProps = _h === void 0 ? {} : _h, skipMessageDataMemoization = props.skipMessageDataMemoization;
42638
+ var channelQueryOptions = React.useMemo(function () {
42639
+ return defaultsDeep(propChannelQueryOptions, {
42640
+ messages: { limit: DEFAULT_INITIAL_CHANNEL_PAGE_SIZE },
42641
+ });
42642
+ }, [propChannelQueryOptions]);
39453
42643
  var _j = useChatContext('Channel'), client = _j.client, customClasses = _j.customClasses, latestMessageDatesByChannels = _j.latestMessageDatesByChannels, mutes = _j.mutes, theme = _j.theme;
39454
42644
  var t = useTranslationContext('Channel').t;
39455
42645
  var _k = useChannelContainerClasses({ customClasses: customClasses }), channelClass = _k.channelClass, chatClass = _k.chatClass, chatContainerClass = _k.chatContainerClass, windowsEmojiClass = _k.windowsEmojiClass;
39456
42646
  var _l = React.useState(channel.getConfig()), channelConfig = _l[0], setChannelConfig = _l[1];
39457
42647
  var _m = React.useState([]), notifications = _m[0], setNotifications = _m[1];
39458
42648
  var _o = React.useState(), quotedMessage = _o[0], setQuotedMessage = _o[1];
39459
- var _p = React.useState(), channelUnreadUiState = _p[0], setChannelUnreadUiState = _p[1];
42649
+ var _p = React.useState(), channelUnreadUiState = _p[0], _setChannelUnreadUiState = _p[1];
39460
42650
  var notificationTimeouts = [];
39461
42651
  var _q = React.useReducer(channelReducer, exports.__assign(exports.__assign({}, initialState), { loading: !channel.initialized })), state = _q[0], dispatch = _q[1];
39462
42652
  var isMounted = useIsMounted();
39463
42653
  var originalTitle = React.useRef('');
39464
- var lastRead = React.useRef(new Date());
42654
+ var lastRead = React.useRef();
39465
42655
  var online = React.useRef(true);
39466
42656
  var channelCapabilitiesArray = (_a = channel.data) === null || _a === void 0 ? void 0 : _a.own_capabilities;
39467
42657
  var throttledCopyStateFromChannel = throttle__default["default"](function () { return dispatch({ channel: channel, type: 'copyStateFromChannelOnEvent' }); }, 500, {
39468
42658
  leading: true,
39469
42659
  trailing: true,
39470
42660
  });
39471
- // eslint-disable-next-line react-hooks/exhaustive-deps
39472
- var markRead = React.useCallback(throttle__default["default"](function (options) { return __awaiter(void 0, void 0, void 0, function () {
39473
- var _a, updateChannelUiUnreadState, markReadResponse;
39474
- return __generator(this, function (_b) {
39475
- switch (_b.label) {
39476
- case 0:
39477
- _a = (options !== null && options !== void 0 ? options : {}).updateChannelUiUnreadState, updateChannelUiUnreadState = _a === void 0 ? true : _a;
39478
- if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
39479
- return [2 /*return*/];
39480
- }
39481
- lastRead.current = new Date();
39482
- _b.label = 1;
39483
- case 1:
39484
- _b.trys.push([1, 5, , 6]);
39485
- if (!doMarkReadRequest) return [3 /*break*/, 2];
39486
- doMarkReadRequest(channel, updateChannelUiUnreadState ? setChannelUnreadUiState : undefined);
39487
- return [3 /*break*/, 4];
39488
- case 2: return [4 /*yield*/, channel.markRead()];
39489
- case 3:
39490
- markReadResponse = _b.sent();
39491
- if (updateChannelUiUnreadState && markReadResponse) {
39492
- setChannelUnreadUiState({
39493
- last_read: lastRead.current,
39494
- last_read_message_id: markReadResponse.event.last_read_message_id,
39495
- unread_messages: 0,
39496
- });
39497
- }
39498
- _b.label = 4;
39499
- case 4:
39500
- if (activeUnreadHandler) {
39501
- activeUnreadHandler(0, originalTitle.current);
39502
- }
39503
- else if (originalTitle.current) {
39504
- document.title = originalTitle.current;
39505
- }
39506
- return [3 /*break*/, 6];
39507
- case 5:
39508
- _b.sent();
39509
- console.error(t('Failed to mark channel as read'));
39510
- return [3 /*break*/, 6];
39511
- case 6: return [2 /*return*/];
39512
- }
42661
+ var setChannelUnreadUiState = React.useMemo(function () {
42662
+ return throttle__default["default"](_setChannelUnreadUiState, 200, {
42663
+ leading: true,
42664
+ trailing: false,
39513
42665
  });
39514
- }); }, 500, { leading: true, trailing: false }), [activeUnreadHandler, channel, channelConfig, doMarkReadRequest, t]);
42666
+ }, []);
42667
+ var markRead = React.useMemo(function () {
42668
+ return throttle__default["default"](function (options) { return __awaiter(void 0, void 0, void 0, function () {
42669
+ var _a, updateChannelUiUnreadState, markReadResponse;
42670
+ return __generator(this, function (_b) {
42671
+ switch (_b.label) {
42672
+ case 0:
42673
+ _a = (options !== null && options !== void 0 ? options : {}).updateChannelUiUnreadState, updateChannelUiUnreadState = _a === void 0 ? true : _a;
42674
+ if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
42675
+ return [2 /*return*/];
42676
+ }
42677
+ lastRead.current = new Date();
42678
+ _b.label = 1;
42679
+ case 1:
42680
+ _b.trys.push([1, 5, , 6]);
42681
+ if (!doMarkReadRequest) return [3 /*break*/, 2];
42682
+ doMarkReadRequest(channel, updateChannelUiUnreadState ? setChannelUnreadUiState : undefined);
42683
+ return [3 /*break*/, 4];
42684
+ case 2: return [4 /*yield*/, channel.markRead()];
42685
+ case 3:
42686
+ markReadResponse = _b.sent();
42687
+ if (updateChannelUiUnreadState && markReadResponse) {
42688
+ _setChannelUnreadUiState({
42689
+ last_read: lastRead.current,
42690
+ last_read_message_id: markReadResponse.event.last_read_message_id,
42691
+ unread_messages: 0,
42692
+ });
42693
+ }
42694
+ _b.label = 4;
42695
+ case 4:
42696
+ if (activeUnreadHandler) {
42697
+ activeUnreadHandler(0, originalTitle.current);
42698
+ }
42699
+ else if (originalTitle.current) {
42700
+ document.title = originalTitle.current;
42701
+ }
42702
+ return [3 /*break*/, 6];
42703
+ case 5:
42704
+ _b.sent();
42705
+ console.error(t('Failed to mark channel as read'));
42706
+ return [3 /*break*/, 6];
42707
+ case 6: return [2 /*return*/];
42708
+ }
42709
+ });
42710
+ }); }, 500, { leading: true, trailing: false });
42711
+ }, [activeUnreadHandler, channel, channelConfig, doMarkReadRequest, setChannelUnreadUiState, t]);
39515
42712
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
39516
42713
  var mainChannelUpdated, unread, messageDate, cid, oldestID;
39517
42714
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
@@ -39534,10 +42731,7 @@ var ChannelInner = function (props) {
39534
42731
  online.current = event.online;
39535
42732
  }
39536
42733
  if (event.type === 'message.new') {
39537
- mainChannelUpdated = true;
39538
- if (((_a = event.message) === null || _a === void 0 ? void 0 : _a.parent_id) && !((_b = event.message) === null || _b === void 0 ? void 0 : _b.show_in_channel)) {
39539
- mainChannelUpdated = false;
39540
- }
42734
+ mainChannelUpdated = !((_a = event.message) === null || _a === void 0 ? void 0 : _a.parent_id) || ((_b = event.message) === null || _b === void 0 ? void 0 : _b.show_in_channel);
39541
42735
  if (mainChannelUpdated) {
39542
42736
  if (document.hidden && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
39543
42737
  unread = channel.countUnread(lastRead.current);
@@ -39579,7 +42773,7 @@ var ChannelInner = function (props) {
39579
42773
  _k.label = 2;
39580
42774
  case 2:
39581
42775
  if (event.type === 'notification.mark_unread')
39582
- setChannelUnreadUiState(function (prev) {
42776
+ _setChannelUnreadUiState(function (prev) {
39583
42777
  var _a;
39584
42778
  if (!(event.last_read_at && event.user))
39585
42779
  return prev;
@@ -39599,16 +42793,17 @@ var ChannelInner = function (props) {
39599
42793
  React.useLayoutEffect(function () {
39600
42794
  var errored = false;
39601
42795
  var done = false;
42796
+ var channelInitializedExternally = true;
39602
42797
  (function () { return __awaiter(void 0, void 0, void 0, function () {
39603
42798
  var members, _i, _a, member, userId, _b, user, user_id, config, e_2, _c, user, ownReadState;
39604
- var _d, _e, _f, _g;
39605
- return __generator(this, function (_h) {
39606
- switch (_h.label) {
42799
+ var _d, _e;
42800
+ return __generator(this, function (_f) {
42801
+ switch (_f.label) {
39607
42802
  case 0:
39608
42803
  if (!(!channel.initialized && initializeOnMount)) return [3 /*break*/, 4];
39609
- _h.label = 1;
42804
+ _f.label = 1;
39610
42805
  case 1:
39611
- _h.trys.push([1, 3, , 4]);
42806
+ _f.trys.push([1, 3, , 4]);
39612
42807
  members = [];
39613
42808
  if (!channel.id && ((_d = channel.data) === null || _d === void 0 ? void 0 : _d.members)) {
39614
42809
  for (_i = 0, _a = channel.data.members; _i < _a.length; _i++) {
@@ -39628,12 +42823,13 @@ var ChannelInner = function (props) {
39628
42823
  }
39629
42824
  return [4 /*yield*/, getChannel({ channel: channel, client: client, members: members, options: channelQueryOptions })];
39630
42825
  case 2:
39631
- _h.sent();
42826
+ _f.sent();
39632
42827
  config = channel.getConfig();
39633
42828
  setChannelConfig(config);
42829
+ channelInitializedExternally = false;
39634
42830
  return [3 /*break*/, 4];
39635
42831
  case 3:
39636
- e_2 = _h.sent();
42832
+ e_2 = _f.sent();
39637
42833
  dispatch({ error: e_2, type: 'setError' });
39638
42834
  errored = true;
39639
42835
  return [3 /*break*/, 4];
@@ -39643,12 +42839,13 @@ var ChannelInner = function (props) {
39643
42839
  if (!errored) {
39644
42840
  dispatch({
39645
42841
  channel: channel,
39646
- hasMore: hasMoreMessagesProbably(channel.state.messages.length, (_f = (_e = channelQueryOptions === null || channelQueryOptions === void 0 ? void 0 : channelQueryOptions.messages) === null || _e === void 0 ? void 0 : _e.limit) !== null && _f !== void 0 ? _f : DEFAULT_INITIAL_CHANNEL_PAGE_SIZE),
42842
+ hasMore: channelInitializedExternally ||
42843
+ hasMoreMessagesProbably(channel.state.messages.length, channelQueryOptions.messages.limit),
39647
42844
  type: 'initStateFromChannel',
39648
42845
  });
39649
- if (((_g = client.user) === null || _g === void 0 ? void 0 : _g.id) && channel.state.read[client.user.id]) {
42846
+ if (((_e = client.user) === null || _e === void 0 ? void 0 : _e.id) && channel.state.read[client.user.id]) {
39650
42847
  _c = channel.state.read[client.user.id], user = _c.user, ownReadState = __rest(_c, ["user"]);
39651
- setChannelUnreadUiState(ownReadState);
42848
+ _setChannelUnreadUiState(ownReadState);
39652
42849
  }
39653
42850
  /**
39654
42851
  * TODO: maybe pass last_read to the countUnread method to get proper value
@@ -39844,7 +43041,7 @@ var ChannelInner = function (props) {
39844
43041
  return __generator(this, function (_b) {
39845
43042
  switch (_b.label) {
39846
43043
  case 0:
39847
- if (!client.user)
43044
+ if (!(client.user && (channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages)))
39848
43045
  return [2 /*return*/];
39849
43046
  if (!(channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.last_read_message_id)) {
39850
43047
  addNotification(t('Failed to jump to the first unread message'), 'error');
@@ -40124,6 +43321,7 @@ var ChannelInner = function (props) {
40124
43321
  removeMessage: removeMessage,
40125
43322
  retrySendMessage: retrySendMessage,
40126
43323
  sendMessage: sendMessage,
43324
+ setChannelUnreadUiState: setChannelUnreadUiState,
40127
43325
  setQuotedMessage: setQuotedMessage,
40128
43326
  skipMessageDataMemoization: skipMessageDataMemoization,
40129
43327
  updateMessage: updateMessage,
@@ -40141,6 +43339,7 @@ var ChannelInner = function (props) {
40141
43339
  jumpToFirstUnreadMessage,
40142
43340
  jumpToMessage,
40143
43341
  jumpToLatestMessage,
43342
+ setChannelUnreadUiState,
40144
43343
  ]);
40145
43344
  var componentContextValue = React.useMemo(function () {
40146
43345
  var _a;
@@ -40328,7 +43527,7 @@ var UnMemoizedChannelHeader = function (props) {
40328
43527
  }), displayImage = _d.displayImage, displayTitle = _d.displayTitle;
40329
43528
  var _e = (channel === null || channel === void 0 ? void 0 : channel.data) || {}, member_count = _e.member_count, subtitle = _e.subtitle;
40330
43529
  return (React__default["default"].createElement("div", { className: 'str-chat__header-livestream str-chat__channel-header' },
40331
- React__default["default"].createElement("button", { "aria-label": 'Menu', className: 'str-chat__header-hamburger', onClick: openMobileNav },
43530
+ React__default["default"].createElement("button", { "aria-label": t('aria/Menu'), className: 'str-chat__header-hamburger', onClick: openMobileNav },
40332
43531
  React__default["default"].createElement(MenuIcon, null)),
40333
43532
  React__default["default"].createElement(Avatar$1, { image: displayImage, name: displayTitle, shape: 'rounded', size: (channel === null || channel === void 0 ? void 0 : channel.type) === 'commerce' ? 60 : 40 }),
40334
43533
  React__default["default"].createElement("div", { className: 'str-chat__header-livestream-left str-chat__channel-header-end' },
@@ -40377,6 +43576,7 @@ var ChatDown = React__default["default"].memo(UnMemoizedChatDown);
40377
43576
  */
40378
43577
  var ChannelListMessenger = function (props) {
40379
43578
  var children = props.children, _a = props.error, error = _a === void 0 ? null : _a, loading = props.loading, _b = props.LoadingErrorIndicator, LoadingErrorIndicator = _b === void 0 ? ChatDown : _b, _c = props.LoadingIndicator, LoadingIndicator = _c === void 0 ? LoadingChannels : _c;
43579
+ var t = useTranslationContext('ChannelListMessenger').t;
40380
43580
  if (error) {
40381
43581
  return React__default["default"].createElement(LoadingErrorIndicator, { type: 'Connection Error' });
40382
43582
  }
@@ -40384,7 +43584,7 @@ var ChannelListMessenger = function (props) {
40384
43584
  return React__default["default"].createElement(LoadingIndicator, null);
40385
43585
  }
40386
43586
  return (React__default["default"].createElement("div", { className: 'str-chat__channel-list-messenger str-chat__channel-list-messenger-react' },
40387
- React__default["default"].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main str-chat__channel-list-messenger-react__main', role: 'listbox' }, children)));
43587
+ React__default["default"].createElement("div", { "aria-label": t('aria/Channel list'), className: 'str-chat__channel-list-messenger__main str-chat__channel-list-messenger-react__main', role: 'listbox' }, children)));
40388
43588
  };
40389
43589
 
40390
43590
  var useChannelDeletedListener = function (setChannels, customHandler) {
@@ -40706,9 +43906,7 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
40706
43906
  var lastRecoveryTimestamp = React.useRef();
40707
43907
  var recoveryThrottleInterval = recoveryThrottleIntervalMs < MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS
40708
43908
  ? MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS
40709
- : recoveryThrottleIntervalMs
40710
- ? recoveryThrottleIntervalMs
40711
- : RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS;
43909
+ : recoveryThrottleIntervalMs !== null && recoveryThrottleIntervalMs !== void 0 ? recoveryThrottleIntervalMs : RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS;
40712
43910
  // memoize props
40713
43911
  var filterString = React.useMemo(function () { return JSON.stringify(filters); }, [filters]);
40714
43912
  var sortString = React.useMemo(function () { return JSON.stringify(sort); }, [sort]);
@@ -40717,18 +43915,18 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
40717
43915
  if (queryType === void 0) { queryType = 'load-more'; }
40718
43916
  return __awaiter(void 0, void 0, void 0, function () {
40719
43917
  var offset, newOptions, channelQueryResponse, newChannels, err_1;
40720
- var _a;
40721
- return __generator(this, function (_b) {
40722
- switch (_b.label) {
43918
+ var _a, _b;
43919
+ return __generator(this, function (_c) {
43920
+ switch (_c.label) {
40723
43921
  case 0:
40724
43922
  setError(null);
40725
43923
  if (queryType === 'reload') {
40726
43924
  setChannels([]);
40727
43925
  }
40728
43926
  setQueryInProgress(queryType);
40729
- _b.label = 1;
43927
+ _c.label = 1;
40730
43928
  case 1:
40731
- _b.trys.push([1, 6, , 7]);
43929
+ _c.trys.push([1, 6, , 7]);
40732
43930
  if (!customQueryChannels) return [3 /*break*/, 3];
40733
43931
  return [4 /*yield*/, customQueryChannels({
40734
43932
  currentChannels: channels,
@@ -40737,14 +43935,14 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
40737
43935
  setHasNextPage: setHasNextPage,
40738
43936
  })];
40739
43937
  case 2:
40740
- _b.sent();
43938
+ _c.sent();
40741
43939
  return [3 /*break*/, 5];
40742
43940
  case 3:
40743
43941
  offset = queryType === 'reload' ? 0 : channels.length;
40744
- newOptions = exports.__assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, offset: offset }, options);
43942
+ newOptions = exports.__assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, message_limit: (_b = options === null || options === void 0 ? void 0 : options.message_limit) !== null && _b !== void 0 ? _b : DEFAULT_INITIAL_CHANNEL_PAGE_SIZE, offset: offset }, options);
40745
43943
  return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
40746
43944
  case 4:
40747
- channelQueryResponse = _b.sent();
43945
+ channelQueryResponse = _c.sent();
40748
43946
  newChannels = queryType === 'reload'
40749
43947
  ? channelQueryResponse
40750
43948
  : uniqBy__default["default"](__spreadArray(__spreadArray([], channels, true), channelQueryResponse, true), 'cid');
@@ -40754,10 +43952,10 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
40754
43952
  if (!offset && activeChannelHandler) {
40755
43953
  activeChannelHandler(newChannels, setChannels);
40756
43954
  }
40757
- _b.label = 5;
43955
+ _c.label = 5;
40758
43956
  case 5: return [3 /*break*/, 7];
40759
43957
  case 6:
40760
- err_1 = _b.sent();
43958
+ err_1 = _c.sent();
40761
43959
  console.warn(err_1);
40762
43960
  setError(err_1);
40763
43961
  return [3 /*break*/, 7];
@@ -40967,13 +44165,15 @@ var ChannelPreview = function (props) {
40967
44165
  channel.off('notification.mark_unread', handleEvent);
40968
44166
  };
40969
44167
  }, [channel, client]);
40970
- var refreshUnreadCount = React.useCallback(function () {
40971
- if (muted) {
40972
- setUnread(0);
40973
- }
40974
- else {
40975
- setUnread(channel.countUnread());
40976
- }
44168
+ var refreshUnreadCount = React.useMemo(function () {
44169
+ return throttle__default["default"](function () {
44170
+ if (muted) {
44171
+ setUnread(0);
44172
+ }
44173
+ else {
44174
+ setUnread(channel.countUnread());
44175
+ }
44176
+ }, 400);
40977
44177
  }, [channel, muted]);
40978
44178
  React.useEffect(function () {
40979
44179
  refreshUnreadCount();
@@ -41319,7 +44519,8 @@ var DefaultSearchResultItem = function (props) {
41319
44519
  };
41320
44520
  var ResultsContainer = function (_a) {
41321
44521
  var children = _a.children, popupResults = _a.popupResults;
41322
- return (React__default["default"].createElement("div", { "aria-label": 'Channel search results', className: clsx("str-chat__channel-search-container str-chat__channel-search-result-list", popupResults ? 'popup' : 'inline') }, children));
44522
+ var t = useTranslationContext('ResultsContainer').t;
44523
+ return (React__default["default"].createElement("div", { "aria-label": t('aria/Channel search results'), className: clsx("str-chat__channel-search-container str-chat__channel-search-result-list", popupResults ? 'popup' : 'inline') }, children));
41323
44524
  };
41324
44525
  var SearchResults = function (props) {
41325
44526
  var popupResults = props.popupResults, results = props.results, searching = props.searching, _a = props.SearchEmpty, SearchEmpty = _a === void 0 ? DefaultSearchEmpty : _a, _b = props.SearchResultsHeader, SearchResultsHeader = _b === void 0 ? DefaultSearchResultsHeader : _b, SearchLoading = props.SearchLoading, _c = props.SearchResultItem, SearchResultItem = _c === void 0 ? DefaultSearchResultItem : _c, _d = props.SearchResultsList, SearchResultsList = _d === void 0 ? DefaultSearchResultsList : _d, selectResult = props.selectResult;
@@ -41394,7 +44595,7 @@ var UnMemoizedLoadMoreButton = function (_a) {
41394
44595
  // eslint-disable-next-line react-hooks/exhaustive-deps
41395
44596
  }, []);
41396
44597
  return (React__default["default"].createElement("div", { className: 'str-chat__load-more-button' },
41397
- React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : childrenOrDefaultString)));
44598
+ React__default["default"].createElement("button", { "aria-label": t('aria/Load More Channels'), className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : childrenOrDefaultString)));
41398
44599
  };
41399
44600
  var LoadMoreButton = React__default["default"].memo(UnMemoizedLoadMoreButton);
41400
44601
 
@@ -41597,6 +44798,7 @@ exports.ConnectionStatus = ConnectionStatus;
41597
44798
  exports.CooldownTimer = CooldownTimer;
41598
44799
  exports.CustomMessageActionsList = CustomMessageActionsList;
41599
44800
  exports.CustomNotification = CustomNotification;
44801
+ exports.DEFAULT_NEXT_CHANNEL_PAGE_SIZE = DEFAULT_NEXT_CHANNEL_PAGE_SIZE;
41600
44802
  exports.DateSeparator = DateSeparator;
41601
44803
  exports.DefaultSuggestionListHeader = DefaultSuggestionListHeader;
41602
44804
  exports.DefaultTriggerProvider = DefaultTriggerProvider;