stream-chat-react 7.0.0 → 8.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browser.full-bundle.js +2033 -785
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/Attachment.d.ts +8 -8
- package/dist/components/Attachment/Attachment.d.ts.map +1 -1
- package/dist/components/Attachment/AttachmentActions.d.ts +3 -4
- package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
- package/dist/components/Attachment/Audio.d.ts +4 -5
- package/dist/components/Attachment/Audio.d.ts.map +1 -1
- package/dist/components/Attachment/Card.d.ts +2 -0
- package/dist/components/Attachment/Card.d.ts.map +1 -1
- package/dist/components/Attachment/Card.js +22 -2
- package/dist/components/Attachment/FileAttachment.d.ts +4 -5
- package/dist/components/Attachment/FileAttachment.d.ts.map +1 -1
- package/dist/components/Attachment/utils.d.ts +22 -22
- package/dist/components/Attachment/utils.d.ts.map +1 -1
- package/dist/components/Attachment/utils.js +3 -1
- package/dist/components/AutoCompleteTextarea/Item.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Item.js +2 -1
- package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.js +1 -2
- package/dist/components/Avatar/Avatar.d.ts +4 -4
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Channel/Channel.d.ts +47 -45
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +109 -34
- package/dist/components/Channel/channelState.d.ts +32 -15
- package/dist/components/Channel/channelState.d.ts.map +1 -1
- package/dist/components/Channel/channelState.js +24 -2
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +3 -3
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +8 -1
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +2 -2
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +3 -3
- package/dist/components/Channel/hooks/useEditMessageHandler.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useIsMounted.d.ts +0 -1
- package/dist/components/Channel/hooks/useIsMounted.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useMentionsHandlers.d.ts +3 -3
- package/dist/components/Channel/hooks/useMentionsHandlers.d.ts.map +1 -1
- package/dist/components/Channel/utils.d.ts +5 -0
- package/dist/components/Channel/utils.d.ts.map +1 -0
- package/dist/components/Channel/utils.js +19 -0
- package/dist/components/ChannelHeader/ChannelHeader.d.ts +4 -2
- package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
- package/dist/components/ChannelHeader/ChannelHeader.js +5 -6
- package/dist/components/ChannelHeader/icons.d.ts +4 -0
- package/dist/components/ChannelHeader/icons.d.ts.map +1 -0
- package/dist/components/ChannelHeader/icons.js +9 -0
- package/dist/components/ChannelList/ChannelList.d.ts +19 -20
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +1 -0
- package/dist/components/ChannelList/ChannelListMessenger.d.ts +5 -5
- package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +2 -2
- package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +4 -5
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts +2 -3
- package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts.map +1 -1
- package/dist/components/ChannelList/utils.d.ts +6 -6
- package/dist/components/ChannelList/utils.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +9 -9
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +6 -10
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +2 -3
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
- package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts +2 -2
- package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts.map +1 -1
- package/dist/components/ChannelPreview/utils.d.ts +4 -5
- package/dist/components/ChannelPreview/utils.d.ts.map +1 -1
- package/dist/components/ChannelSearch/ChannelSearch.d.ts +16 -14
- package/dist/components/ChannelSearch/ChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/ChannelSearch.js +3 -3
- package/dist/components/ChannelSearch/SearchInput.d.ts +9 -7
- package/dist/components/ChannelSearch/SearchInput.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchInput.js +2 -2
- package/dist/components/ChannelSearch/SearchResults.d.ts +14 -14
- package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
- package/dist/components/ChannelSearch/utils.d.ts +3 -3
- package/dist/components/ChannelSearch/utils.d.ts.map +1 -1
- package/dist/components/ChannelSearch/utils.js +1 -3
- package/dist/components/Chat/Chat.d.ts +4 -4
- package/dist/components/Chat/Chat.d.ts.map +1 -1
- package/dist/components/Chat/Chat.js +2 -1
- package/dist/components/Chat/hooks/useChat.d.ts +9 -9
- package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useChat.js +14 -9
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts +2 -2
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useCreateChatContext.js +2 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +15 -13
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.js +1 -1
- package/dist/components/DateSeparator/DateSeparator.d.ts +0 -1
- package/dist/components/DateSeparator/DateSeparator.d.ts.map +1 -1
- package/dist/components/EventComponent/EventComponent.d.ts +4 -4
- package/dist/components/EventComponent/EventComponent.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts +4 -5
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +2 -2
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +16 -45
- package/dist/components/InfiniteScrollPaginator/index.d.ts +0 -2
- package/dist/components/InfiniteScrollPaginator/index.d.ts.map +1 -1
- package/dist/components/InfiniteScrollPaginator/index.js +0 -2
- package/dist/components/Message/FixedHeightMessage.d.ts +4 -5
- package/dist/components/Message/FixedHeightMessage.d.ts.map +1 -1
- package/dist/components/Message/Message.d.ts +2 -3
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +8 -7
- package/dist/components/Message/MessageCommerce.d.ts +2 -3
- package/dist/components/Message/MessageCommerce.d.ts.map +1 -1
- package/dist/components/Message/MessageCommerce.js +2 -1
- package/dist/components/Message/MessageDeleted.d.ts +4 -5
- package/dist/components/Message/MessageDeleted.d.ts.map +1 -1
- package/dist/components/Message/MessageLivestream.d.ts +2 -2
- package/dist/components/Message/MessageLivestream.d.ts.map +1 -1
- package/dist/components/Message/MessageLivestream.js +2 -1
- package/dist/components/Message/MessageOptions.d.ts +3 -3
- package/dist/components/Message/MessageOptions.d.ts.map +1 -1
- package/dist/components/Message/MessageOptions.js +1 -1
- package/dist/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
- package/dist/components/Message/MessageRepliesCountButton.js +10 -24
- package/dist/components/Message/MessageSimple.d.ts +2 -3
- package/dist/components/Message/MessageSimple.d.ts.map +1 -1
- package/dist/components/Message/MessageSimple.js +6 -6
- package/dist/components/Message/MessageStatus.d.ts +2 -2
- package/dist/components/Message/MessageStatus.d.ts.map +1 -1
- package/dist/components/Message/MessageTeam.d.ts +2 -3
- package/dist/components/Message/MessageTeam.d.ts.map +1 -1
- package/dist/components/Message/MessageText.d.ts +4 -5
- package/dist/components/Message/MessageText.d.ts.map +1 -1
- package/dist/components/Message/MessageTimestamp.d.ts +4 -5
- package/dist/components/Message/MessageTimestamp.d.ts.map +1 -1
- package/dist/components/Message/QuotedMessage.d.ts +2 -3
- package/dist/components/Message/QuotedMessage.d.ts.map +1 -1
- package/dist/components/Message/QuotedMessage.js +3 -1
- package/dist/components/Message/hooks/useActionHandler.d.ts +2 -2
- package/dist/components/Message/hooks/useActionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useDeleteHandler.d.ts +4 -4
- package/dist/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useEditHandler.d.ts +0 -1
- package/dist/components/Message/hooks/useEditHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useFlagHandler.d.ts +5 -5
- package/dist/components/Message/hooks/useFlagHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useMentionsHandler.d.ts +6 -6
- package/dist/components/Message/hooks/useMentionsHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useMuteHandler.d.ts +5 -5
- package/dist/components/Message/hooks/useMuteHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useOpenThreadHandler.d.ts +2 -2
- package/dist/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/usePinHandler.d.ts +4 -4
- package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useReactionHandler.d.ts +3 -3
- package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useRetryHandler.d.ts +2 -2
- package/dist/components/Message/hooks/useRetryHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserHandler.d.ts +5 -6
- package/dist/components/Message/hooks/useUserHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserRole.d.ts +2 -2
- package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
- package/dist/components/Message/icons.d.ts +2 -3
- package/dist/components/Message/icons.d.ts.map +1 -1
- package/dist/components/Message/types.d.ts +25 -24
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts +14 -14
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +9 -1
- package/dist/components/MessageActions/MessageActions.d.ts +3 -3
- package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActions.js +14 -8
- package/dist/components/MessageActions/MessageActionsBox.d.ts +6 -7
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +7 -7
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/DropzoneProvider.d.ts +2 -2
- package/dist/components/MessageInput/DropzoneProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/EditMessageForm.d.ts +2 -3
- package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
- package/dist/components/MessageInput/EmojiPicker.d.ts +2 -3
- package/dist/components/MessageInput/EmojiPicker.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInput.d.ts +10 -10
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.d.ts +2 -3
- package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.js +27 -5
- package/dist/components/MessageInput/MessageInputSmall.d.ts +2 -3
- package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputSmall.js +27 -5
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts +4 -5
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
- package/dist/components/MessageInput/UploadsPreview.d.ts +2 -3
- package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
- package/dist/components/MessageInput/UploadsPreview.js +2 -16
- package/dist/components/MessageInput/hooks/useAttachments.d.ts +2 -3
- package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts +2 -2
- package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCommandTrigger.js +3 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +2 -2
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.js +19 -28
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +2 -2
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts +2 -3
- package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useFileUploads.d.ts +2 -3
- package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useImageUploads.d.ts +2 -2
- package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +11 -11
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +2 -3
- package/dist/components/MessageInput/hooks/useMessageInputText.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +3 -4
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +5 -5
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/utils.d.ts +8 -8
- package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
- package/dist/components/MessageInput/icons.d.ts +4 -4
- package/dist/components/MessageInput/icons.d.ts.map +1 -1
- package/dist/components/MessageList/ConnectionStatus.d.ts.map +1 -1
- package/dist/components/MessageList/GiphyPreviewMessage.d.ts +4 -5
- package/dist/components/MessageList/GiphyPreviewMessage.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.d.ts +13 -8
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +90 -24
- package/dist/components/MessageList/MessageListNotifications.d.ts +1 -0
- package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
- package/dist/components/MessageList/MessageListNotifications.js +2 -2
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +18 -8
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +154 -23
- package/dist/components/MessageList/hooks/index.d.ts +0 -1
- package/dist/components/MessageList/hooks/index.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/index.js +0 -1
- package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts +6 -7
- package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useEnrichedMessages.js +4 -4
- package/dist/components/MessageList/hooks/useGiphyPreview.d.ts +4 -5
- package/dist/components/MessageList/hooks/useGiphyPreview.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useLastReadData.d.ts +5 -5
- package/dist/components/MessageList/hooks/useLastReadData.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts +6 -6
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.js +6 -3
- package/dist/components/MessageList/hooks/useMessageListScrollManager.d.ts +4 -4
- package/dist/components/MessageList/hooks/useMessageListScrollManager.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useNewMessageNotification.d.ts +2 -3
- package/dist/components/MessageList/hooks/useNewMessageNotification.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useNewMessageNotification.js +6 -2
- package/dist/components/MessageList/hooks/usePrependMessagesCount.d.ts +2 -2
- package/dist/components/MessageList/hooks/usePrependMessagesCount.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/usePrependMessagesCount.js +2 -0
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +6 -4
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.js +9 -5
- package/dist/components/MessageList/hooks/useShouldForceScrollToBottom.d.ts +2 -2
- package/dist/components/MessageList/hooks/useShouldForceScrollToBottom.d.ts.map +1 -1
- package/dist/components/MessageList/utils.d.ts +36 -17
- package/dist/components/MessageList/utils.d.ts.map +1 -1
- package/dist/components/MessageList/utils.js +57 -35
- package/dist/components/Reactions/ReactionSelector.d.ts +4 -4
- package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.d.ts +4 -5
- package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SimpleReactionsList.d.ts +4 -4
- package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/utils/utils.d.ts +0 -1
- package/dist/components/Reactions/utils/utils.d.ts.map +1 -1
- package/dist/components/Thread/Thread.d.ts +12 -10
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/Thread.js +6 -10
- package/dist/components/TypingIndicator/TypingIndicator.d.ts +4 -4
- package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
- package/dist/components/Window/Window.d.ts +4 -4
- package/dist/components/Window/Window.d.ts.map +1 -1
- package/dist/constants/messageTypes.d.ts +5 -0
- package/dist/constants/messageTypes.d.ts.map +1 -0
- package/dist/constants/messageTypes.js +4 -0
- package/dist/context/ChannelActionContext.d.ts +26 -26
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- package/dist/context/ChannelStateContext.d.ts +26 -21
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/context/ChatContext.d.ts +15 -12
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ComponentContext.d.ts +27 -27
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/MessageContext.d.ts +18 -16
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/context/MessageInputContext.d.ts +7 -7
- package/dist/context/MessageInputContext.d.ts.map +1 -1
- package/dist/context/TypingContext.d.ts +8 -8
- package/dist/context/TypingContext.d.ts.map +1 -1
- package/dist/context/utils/getDisplayName.d.ts +0 -1
- package/dist/context/utils/getDisplayName.d.ts.map +1 -1
- package/dist/css/index.css +1 -1
- package/dist/i18n/Streami18n.d.ts +6 -4
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/Streami18n.js +5 -5
- package/dist/i18n/de.json +29 -27
- package/dist/i18n/en.json +4 -2
- package/dist/i18n/es.json +5 -2
- package/dist/i18n/fr.json +5 -2
- package/dist/i18n/hi.json +4 -2
- package/dist/i18n/it.json +5 -2
- package/dist/i18n/ja.json +4 -2
- package/dist/i18n/ko.json +4 -2
- package/dist/i18n/nl.json +4 -2
- package/dist/i18n/pt.json +22 -19
- package/dist/i18n/ru.json +6 -2
- package/dist/i18n/tr.json +4 -2
- package/dist/index.cjs.js +664 -390
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/ActionsBox.scss +2 -2
- package/dist/scss/Attachment.scss +5 -0
- package/dist/scss/Avatar.scss +1 -1
- package/dist/scss/ChannelHeader.scss +8 -13
- package/dist/scss/ChannelList.scss +6 -0
- package/dist/scss/ChannelSearch.scss +12 -1
- package/dist/scss/Gallery.scss +19 -0
- package/dist/scss/Message.scss +110 -93
- package/dist/scss/MessageInput.scss +8 -2
- package/dist/scss/MessageInputFlat.scss +24 -0
- package/dist/scss/MessageList.scss +7 -0
- package/dist/scss/MessageNotification.scss +6 -18
- package/dist/scss/ReactionList.scss +2 -1
- package/dist/scss/ReactionSelector.scss +2 -1
- package/dist/scss/SimpleReactionsList.scss +2 -1
- package/dist/scss/SmallMessageInput.scss +34 -0
- package/dist/scss/Thread.scss +25 -5
- package/dist/scss/VirtualMessage.scss +6 -0
- package/dist/scss/_base.scss +4 -0
- package/dist/scss/_variables.scss +4 -5
- package/dist/stories/connected-user.stories.d.ts +4 -0
- package/dist/stories/connected-user.stories.d.ts.map +1 -0
- package/dist/stories/connected-user.stories.js +55 -0
- package/dist/stories/hello.stories.d.ts +3 -0
- package/dist/stories/hello.stories.d.ts.map +1 -0
- package/dist/stories/hello.stories.js +47 -0
- package/dist/stories/jump-to-message.stories.d.ts +4 -0
- package/dist/stories/jump-to-message.stories.d.ts.map +1 -0
- package/dist/stories/jump-to-message.stories.js +111 -0
- package/dist/stories/mark-read.stories.d.ts +4 -0
- package/dist/stories/mark-read.stories.d.ts.map +1 -0
- package/dist/stories/mark-read.stories.js +77 -0
- package/dist/stories/utils.d.ts +27 -0
- package/dist/stories/utils.d.ts.map +1 -0
- package/dist/stories/utils.js +38 -0
- package/dist/types/types.d.ts +32 -10
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils.d.ts +5 -5
- package/dist/utils.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +27 -15
- package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +0 -18
- package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts.map +0 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.js +0 -8
- package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.d.ts +0 -4
- package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.d.ts.map +0 -1
- package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.js +0 -14
- package/dist/components/MessageList/hooks/useCallLoadMore.d.ts +0 -3
- package/dist/components/MessageList/hooks/useCallLoadMore.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useCallLoadMore.js +0 -8
package/dist/index.cjs.js
CHANGED
|
@@ -30,7 +30,6 @@ var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
|
30
30
|
var PropTypes = require('prop-types');
|
|
31
31
|
var Textarea = require('react-textarea-autosize');
|
|
32
32
|
var getCaretCoordinates = require('textarea-caret');
|
|
33
|
-
var CustomEvent = require('custom-event');
|
|
34
33
|
var reactIs = require('react-is');
|
|
35
34
|
var debounce = require('lodash.debounce');
|
|
36
35
|
var throttle = require('lodash.throttle');
|
|
@@ -104,7 +103,6 @@ var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeO
|
|
|
104
103
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
105
104
|
var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
|
|
106
105
|
var getCaretCoordinates__default = /*#__PURE__*/_interopDefaultLegacy(getCaretCoordinates);
|
|
107
|
-
var CustomEvent__default = /*#__PURE__*/_interopDefaultLegacy(CustomEvent);
|
|
108
106
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
109
107
|
var throttle__default = /*#__PURE__*/_interopDefaultLegacy(throttle);
|
|
110
108
|
var deepequal__default = /*#__PURE__*/_interopDefaultLegacy(deepequal);
|
|
@@ -323,10 +321,47 @@ var withTranslationContext = function (Component) {
|
|
|
323
321
|
return WithTranslationContextComponent;
|
|
324
322
|
};
|
|
325
323
|
|
|
324
|
+
var ChannelStateContext = React__default['default'].createContext(undefined);
|
|
325
|
+
var ChannelStateProvider = function (_a) {
|
|
326
|
+
var children = _a.children, value = _a.value;
|
|
327
|
+
return (React__default['default'].createElement(ChannelStateContext.Provider, { value: value }, children));
|
|
328
|
+
};
|
|
329
|
+
var useChannelStateContext = function (componentName) {
|
|
330
|
+
var contextValue = React.useContext(ChannelStateContext);
|
|
331
|
+
if (!contextValue) {
|
|
332
|
+
console.warn("The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
|
|
333
|
+
return {};
|
|
334
|
+
}
|
|
335
|
+
return contextValue;
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Typescript currently does not support partial inference, so if ChannelStateContext
|
|
339
|
+
* typing is desired while using the HOC withChannelStateContext, the Props for the
|
|
340
|
+
* wrapped component must be provided as the first generic.
|
|
341
|
+
*/
|
|
342
|
+
var withChannelStateContext = function (Component) {
|
|
343
|
+
var WithChannelStateContextComponent = function (props) {
|
|
344
|
+
var channelStateContext = useChannelStateContext();
|
|
345
|
+
return React__default['default'].createElement(Component, __assign({}, props, channelStateContext));
|
|
346
|
+
};
|
|
347
|
+
WithChannelStateContextComponent.displayName = (Component.displayName ||
|
|
348
|
+
Component.name ||
|
|
349
|
+
'Component').replace('Base', '');
|
|
350
|
+
return WithChannelStateContextComponent;
|
|
351
|
+
};
|
|
352
|
+
|
|
326
353
|
var UnMemoizedCard = function (props) {
|
|
327
|
-
var image_url = props.image_url, og_scrape_url = props.og_scrape_url, text = props.text, thumb_url = props.thumb_url, title = props.title, title_link = props.title_link, type = props.type;
|
|
354
|
+
var giphy = props.giphy, image_url = props.image_url, og_scrape_url = props.og_scrape_url, text = props.text, thumb_url = props.thumb_url, title = props.title, title_link = props.title_link, type = props.type;
|
|
328
355
|
var t = useTranslationContext('Card').t;
|
|
356
|
+
var giphyVersionName = useChannelStateContext('Card').giphyVersion;
|
|
329
357
|
var image = thumb_url || image_url;
|
|
358
|
+
var dimensions = {};
|
|
359
|
+
if (type === 'giphy' && typeof giphy !== 'undefined') {
|
|
360
|
+
var giphyVersion = giphy[giphyVersionName];
|
|
361
|
+
image = giphyVersion.url;
|
|
362
|
+
dimensions.height = giphyVersion.height;
|
|
363
|
+
dimensions.width = giphyVersion.width;
|
|
364
|
+
}
|
|
330
365
|
var trimUrl = function (url) {
|
|
331
366
|
if (url !== undefined && url !== null) {
|
|
332
367
|
var trimmedUrl = url.replace(/^(?:https?:\/\/)?(?:www\.)?/i, '').split('/')[0];
|
|
@@ -344,7 +379,7 @@ var UnMemoizedCard = function (props) {
|
|
|
344
379
|
}
|
|
345
380
|
return (React__default['default'].createElement("div", { className: "str-chat__message-attachment-card str-chat__message-attachment-card--" + type },
|
|
346
381
|
image && (React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--header' },
|
|
347
|
-
React__default['default'].createElement("img", { alt: image, src: image }))),
|
|
382
|
+
React__default['default'].createElement("img", __assign({ alt: image, src: image }, dimensions)))),
|
|
348
383
|
React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--content' },
|
|
349
384
|
React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--flex' },
|
|
350
385
|
title && React__default['default'].createElement("div", { className: 'str-chat__message-attachment-card--title' }, title),
|
|
@@ -463,7 +498,9 @@ var ImageComponent = function (props) {
|
|
|
463
498
|
};
|
|
464
499
|
|
|
465
500
|
var SUPPORTED_VIDEO_FORMATS = ['video/mp4', 'video/ogg', 'video/webm', 'video/quicktime'];
|
|
466
|
-
var isGalleryAttachmentType = function (output) {
|
|
501
|
+
var isGalleryAttachmentType = function (output) {
|
|
502
|
+
return output.images != null;
|
|
503
|
+
};
|
|
467
504
|
var isAudioAttachment = function (attachment) { return attachment.type === 'audio'; };
|
|
468
505
|
var isFileAttachment = function (attachment) {
|
|
469
506
|
return attachment.type === 'file' ||
|
|
@@ -637,10 +674,12 @@ var Item = /*#__PURE__*/React__default['default'].forwardRef(function Item(props
|
|
|
637
674
|
onFocus: selectItem,
|
|
638
675
|
onMouseEnter: selectItem,
|
|
639
676
|
ref: innerRef
|
|
677
|
+
}, /*#__PURE__*/React__default['default'].createElement("div", {
|
|
678
|
+
tabIndex: -1
|
|
640
679
|
}, /*#__PURE__*/React__default['default'].createElement(Component, {
|
|
641
680
|
entity: item,
|
|
642
681
|
selected: selected
|
|
643
|
-
})));
|
|
682
|
+
}))));
|
|
644
683
|
});
|
|
645
684
|
|
|
646
685
|
var ComponentContext = React__default['default'].createContext(undefined);
|
|
@@ -1372,7 +1411,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1372
1411
|
value: newText
|
|
1373
1412
|
}, function () {
|
|
1374
1413
|
// fire onChange event after successful selection
|
|
1375
|
-
var e = new
|
|
1414
|
+
var e = new CustomEvent('change', {
|
|
1376
1415
|
bubbles: true
|
|
1377
1416
|
});
|
|
1378
1417
|
|
|
@@ -1427,7 +1466,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1427
1466
|
value: valueToReplace
|
|
1428
1467
|
}, function () {
|
|
1429
1468
|
// fire onChange event after successful selection
|
|
1430
|
-
var e = new
|
|
1469
|
+
var e = new CustomEvent('change', {
|
|
1431
1470
|
bubbles: true
|
|
1432
1471
|
});
|
|
1433
1472
|
|
|
@@ -1914,7 +1953,9 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1914
1953
|
return /*#__PURE__*/React__default['default'].createElement("div", {
|
|
1915
1954
|
className: "rta ".concat(dataLoading === true ? 'rta--loading' : '', " ").concat(containerClassName || ''),
|
|
1916
1955
|
style: containerStyle
|
|
1917
|
-
}, this.renderSuggestionListContainer(), /*#__PURE__*/React__default['default'].createElement(Textarea__default['default'], _extends__default['default']({
|
|
1956
|
+
}, this.renderSuggestionListContainer(), /*#__PURE__*/React__default['default'].createElement(Textarea__default['default'], _extends__default['default']({
|
|
1957
|
+
"data-testid": "message-input"
|
|
1958
|
+
}, this._cleanUpProps(), {
|
|
1918
1959
|
className: "rta__textarea ".concat(className || ''),
|
|
1919
1960
|
maxRows: maxRows,
|
|
1920
1961
|
onBlur: this._onClickAndBlurHandler,
|
|
@@ -2000,7 +2041,9 @@ var channelReducer = function (state, action) {
|
|
|
2000
2041
|
}
|
|
2001
2042
|
case 'copyMessagesFromChannel': {
|
|
2002
2043
|
var channel = action.channel, parentId = action.parentId;
|
|
2003
|
-
return __assign(__assign({}, state), { messages: __spreadArray([], channel.state.messages), pinnedMessages: __spreadArray([], channel.state.pinnedMessages),
|
|
2044
|
+
return __assign(__assign({}, state), { messages: __spreadArray([], channel.state.messages), pinnedMessages: __spreadArray([], channel.state.pinnedMessages),
|
|
2045
|
+
// copying messages from channel happens with new message - this resets the suppressAutoscroll
|
|
2046
|
+
suppressAutoscroll: false, threadMessages: parentId
|
|
2004
2047
|
? __assign({}, channel.state.threads)[parentId] || []
|
|
2005
2048
|
: state.threadMessages });
|
|
2006
2049
|
}
|
|
@@ -2012,10 +2055,23 @@ var channelReducer = function (state, action) {
|
|
|
2012
2055
|
var channel = action.channel;
|
|
2013
2056
|
return __assign(__assign({}, state), { loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages), pinnedMessages: __spreadArray([], channel.state.pinnedMessages), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
|
|
2014
2057
|
}
|
|
2058
|
+
case 'jumpToLatestMessage': {
|
|
2059
|
+
return __assign(__assign({}, state), { hasMoreNewer: false, highlightedMessageId: undefined, loading: false, suppressAutoscroll: false });
|
|
2060
|
+
}
|
|
2061
|
+
case 'jumpToMessageFinished': {
|
|
2062
|
+
return __assign(__assign({}, state), { hasMoreNewer: action.hasMoreNewer, highlightedMessageId: action.highlightedMessageId });
|
|
2063
|
+
}
|
|
2064
|
+
case 'clearHighlightedMessage': {
|
|
2065
|
+
return __assign(__assign({}, state), { highlightedMessageId: undefined });
|
|
2066
|
+
}
|
|
2015
2067
|
case 'loadMoreFinished': {
|
|
2016
2068
|
var hasMore = action.hasMore, messages = action.messages;
|
|
2017
2069
|
return __assign(__assign({}, state), { hasMore: hasMore, loadingMore: false, messages: messages });
|
|
2018
2070
|
}
|
|
2071
|
+
case 'loadMoreNewerFinished': {
|
|
2072
|
+
var hasMoreNewer = action.hasMoreNewer, messages = action.messages;
|
|
2073
|
+
return __assign(__assign({}, state), { hasMoreNewer: hasMoreNewer, loadingMoreNewer: false, messages: messages });
|
|
2074
|
+
}
|
|
2019
2075
|
case 'loadMoreThreadFinished': {
|
|
2020
2076
|
var threadHasMore = action.threadHasMore, threadMessages = action.threadMessages;
|
|
2021
2077
|
return __assign(__assign({}, state), { threadHasMore: threadHasMore, threadLoadingMore: false, threadMessages: threadMessages });
|
|
@@ -2030,7 +2086,12 @@ var channelReducer = function (state, action) {
|
|
|
2030
2086
|
}
|
|
2031
2087
|
case 'setLoadingMore': {
|
|
2032
2088
|
var loadingMore = action.loadingMore;
|
|
2033
|
-
|
|
2089
|
+
// supporess the autoscroll behavior
|
|
2090
|
+
return __assign(__assign({}, state), { loadingMore: loadingMore, suppressAutoscroll: true });
|
|
2091
|
+
}
|
|
2092
|
+
case 'setLoadingMoreNewer': {
|
|
2093
|
+
var loadingMoreNewer = action.loadingMoreNewer;
|
|
2094
|
+
return __assign(__assign({}, state), { loadingMoreNewer: loadingMoreNewer });
|
|
2034
2095
|
}
|
|
2035
2096
|
case 'setThread': {
|
|
2036
2097
|
var message = action.message;
|
|
@@ -2056,12 +2117,14 @@ var channelReducer = function (state, action) {
|
|
|
2056
2117
|
var initialState = {
|
|
2057
2118
|
error: null,
|
|
2058
2119
|
hasMore: true,
|
|
2120
|
+
hasMoreNewer: false,
|
|
2059
2121
|
loading: true,
|
|
2060
2122
|
loadingMore: false,
|
|
2061
2123
|
members: {},
|
|
2062
2124
|
messages: [],
|
|
2063
2125
|
pinnedMessages: [],
|
|
2064
2126
|
read: {},
|
|
2127
|
+
suppressAutoscroll: false,
|
|
2065
2128
|
thread: null,
|
|
2066
2129
|
threadHasMore: true,
|
|
2067
2130
|
threadLoadingMore: false,
|
|
@@ -2096,7 +2159,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
|
|
|
2096
2159
|
|
|
2097
2160
|
var useCreateChannelStateContext = function (value) {
|
|
2098
2161
|
var _a;
|
|
2099
|
-
var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, error = value.error, hasMore = value.hasMore, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
2162
|
+
var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, giphyVersion = value.giphyVersion, error = value.error, hasMore = value.hasMore, hasMoreNewer = value.hasMoreNewer, suppressAutoscroll = value.suppressAutoscroll, highlightedMessageId = value.highlightedMessageId, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
2100
2163
|
var channelId = channel.cid;
|
|
2101
2164
|
var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
|
|
2102
2165
|
var membersLength = Object.keys(members || []).length;
|
|
@@ -2143,7 +2206,10 @@ var useCreateChannelStateContext = function (value) {
|
|
|
2143
2206
|
channelConfig: channelConfig,
|
|
2144
2207
|
dragAndDropWindow: dragAndDropWindow,
|
|
2145
2208
|
error: error,
|
|
2209
|
+
giphyVersion: giphyVersion,
|
|
2146
2210
|
hasMore: hasMore,
|
|
2211
|
+
hasMoreNewer: hasMoreNewer,
|
|
2212
|
+
highlightedMessageId: highlightedMessageId,
|
|
2147
2213
|
loading: loading,
|
|
2148
2214
|
loadingMore: loadingMore,
|
|
2149
2215
|
maxNumberOfFiles: maxNumberOfFiles,
|
|
@@ -2155,6 +2221,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
2155
2221
|
pinnedMessages: pinnedMessages,
|
|
2156
2222
|
quotedMessage: quotedMessage,
|
|
2157
2223
|
read: read,
|
|
2224
|
+
suppressAutoscroll: suppressAutoscroll,
|
|
2158
2225
|
thread: thread,
|
|
2159
2226
|
threadHasMore: threadHasMore,
|
|
2160
2227
|
threadLoadingMore: threadLoadingMore,
|
|
@@ -2166,6 +2233,8 @@ var useCreateChannelStateContext = function (value) {
|
|
|
2166
2233
|
channelId,
|
|
2167
2234
|
error,
|
|
2168
2235
|
hasMore,
|
|
2236
|
+
hasMoreNewer,
|
|
2237
|
+
highlightedMessageId,
|
|
2169
2238
|
lastRead,
|
|
2170
2239
|
loading,
|
|
2171
2240
|
loadingMore,
|
|
@@ -2177,6 +2246,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
2177
2246
|
readUsersLength,
|
|
2178
2247
|
readUsersLastReads,
|
|
2179
2248
|
skipMessageDataMemoization,
|
|
2249
|
+
suppressAutoscroll,
|
|
2180
2250
|
thread,
|
|
2181
2251
|
threadHasMore,
|
|
2182
2252
|
threadLoadingMore,
|
|
@@ -2308,35 +2378,6 @@ var LoadingIndicator = React__default['default'].memo(UnMemoizedLoadingIndicator
|
|
|
2308
2378
|
return prevProps.color === nextProps.color && prevProps.size === nextProps.size;
|
|
2309
2379
|
});
|
|
2310
2380
|
|
|
2311
|
-
var ChannelStateContext = React__default['default'].createContext(undefined);
|
|
2312
|
-
var ChannelStateProvider = function (_a) {
|
|
2313
|
-
var children = _a.children, value = _a.value;
|
|
2314
|
-
return (React__default['default'].createElement(ChannelStateContext.Provider, { value: value }, children));
|
|
2315
|
-
};
|
|
2316
|
-
var useChannelStateContext = function (componentName) {
|
|
2317
|
-
var contextValue = React.useContext(ChannelStateContext);
|
|
2318
|
-
if (!contextValue) {
|
|
2319
|
-
console.warn("The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the " + componentName + " component.");
|
|
2320
|
-
return {};
|
|
2321
|
-
}
|
|
2322
|
-
return contextValue;
|
|
2323
|
-
};
|
|
2324
|
-
/**
|
|
2325
|
-
* Typescript currently does not support partial inference, so if ChannelStateContext
|
|
2326
|
-
* typing is desired while using the HOC withChannelStateContext, the Props for the
|
|
2327
|
-
* wrapped component must be provided as the first generic.
|
|
2328
|
-
*/
|
|
2329
|
-
var withChannelStateContext = function (Component) {
|
|
2330
|
-
var WithChannelStateContextComponent = function (props) {
|
|
2331
|
-
var channelStateContext = useChannelStateContext();
|
|
2332
|
-
return React__default['default'].createElement(Component, __assign({}, props, channelStateContext));
|
|
2333
|
-
};
|
|
2334
|
-
WithChannelStateContextComponent.displayName = (Component.displayName ||
|
|
2335
|
-
Component.name ||
|
|
2336
|
-
'Component').replace('Base', '');
|
|
2337
|
-
return WithChannelStateContextComponent;
|
|
2338
|
-
};
|
|
2339
|
-
|
|
2340
2381
|
var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
|
|
2341
2382
|
var _a, _b, _c;
|
|
2342
2383
|
var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e, channelConfig = _d.channelConfig;
|
|
@@ -2550,10 +2591,15 @@ var getMessageActions = function (actions, _a) {
|
|
|
2550
2591
|
}
|
|
2551
2592
|
return messageActionsAfterPermission;
|
|
2552
2593
|
};
|
|
2553
|
-
var
|
|
2594
|
+
var ACTIONS_NOT_WORKING_IN_THREAD = ['pin', 'react', 'reply'];
|
|
2595
|
+
var showMessageActionsBox = function (actions, inThread) {
|
|
2554
2596
|
if (actions.length === 0) {
|
|
2555
2597
|
return false;
|
|
2556
2598
|
}
|
|
2599
|
+
if (inThread &&
|
|
2600
|
+
actions.filter(function (action) { return !ACTIONS_NOT_WORKING_IN_THREAD.includes(action); }).length === 0) {
|
|
2601
|
+
return false;
|
|
2602
|
+
}
|
|
2557
2603
|
if (actions.length === 1 && (actions.includes('react') || actions.includes('reply'))) {
|
|
2558
2604
|
return false;
|
|
2559
2605
|
}
|
|
@@ -2587,6 +2633,7 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
|
|
|
2587
2633
|
if (!messagesAreEqual)
|
|
2588
2634
|
return false;
|
|
2589
2635
|
var deepEqualProps = deepequal__default['default'](nextProps.readBy, prevProps.readBy) &&
|
|
2636
|
+
deepequal__default['default'](nextProps.highlighted, prevProps.highlighted) &&
|
|
2590
2637
|
deepequal__default['default'](nextProps.groupStyles, prevProps.groupStyles) && // last 3 messages can have different group styles
|
|
2591
2638
|
deepequal__default['default'](nextProps.mutes, prevProps.mutes) &&
|
|
2592
2639
|
deepequal__default['default'](nextProps.lastReceivedId, prevProps.lastReceivedId);
|
|
@@ -2601,6 +2648,8 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
|
|
|
2601
2648
|
var nextLastReceivedId = nextProps.lastReceivedId, nextMessage = nextProps.message;
|
|
2602
2649
|
if (prevProps.editing !== nextProps.editing)
|
|
2603
2650
|
return false;
|
|
2651
|
+
if (prevProps.highlighted !== nextProps.highlighted)
|
|
2652
|
+
return false;
|
|
2604
2653
|
if (prevProps.endOfGroup !== nextProps.endOfGroup)
|
|
2605
2654
|
return false;
|
|
2606
2655
|
if (((_a = prevProps.mutes) === null || _a === void 0 ? void 0 : _a.length) !== ((_b = nextProps.mutes) === null || _b === void 0 ? void 0 : _b.length))
|
|
@@ -2811,7 +2860,12 @@ var MessageActions = function (props) {
|
|
|
2811
2860
|
var message = propMessage || contextMessage;
|
|
2812
2861
|
var _d = React.useState(false), actionsBoxOpen = _d[0], setActionsBoxOpen = _d[1];
|
|
2813
2862
|
var isMuted = React.useCallback(function () { return isUserMuted(message, mutes); }, [message, mutes]);
|
|
2814
|
-
var hideOptions = React.useCallback(function () {
|
|
2863
|
+
var hideOptions = React.useCallback(function (event) {
|
|
2864
|
+
if (event instanceof KeyboardEvent && event.key !== 'Escape') {
|
|
2865
|
+
return;
|
|
2866
|
+
}
|
|
2867
|
+
setActionsBoxOpen(false);
|
|
2868
|
+
}, []);
|
|
2815
2869
|
var messageActions = getMessageActions();
|
|
2816
2870
|
var messageDeletedAt = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
|
|
2817
2871
|
React.useEffect(function () {
|
|
@@ -2825,13 +2879,14 @@ var MessageActions = function (props) {
|
|
|
2825
2879
|
}
|
|
2826
2880
|
}, [hideOptions, messageDeletedAt]);
|
|
2827
2881
|
React.useEffect(function () {
|
|
2828
|
-
if (actionsBoxOpen)
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2882
|
+
if (!actionsBoxOpen)
|
|
2883
|
+
return;
|
|
2884
|
+
document.addEventListener('click', hideOptions);
|
|
2885
|
+
document.addEventListener('keyup', hideOptions);
|
|
2886
|
+
return function () {
|
|
2832
2887
|
document.removeEventListener('click', hideOptions);
|
|
2833
|
-
|
|
2834
|
-
|
|
2888
|
+
document.removeEventListener('keyup', hideOptions);
|
|
2889
|
+
};
|
|
2835
2890
|
}, [actionsBoxOpen, hideOptions]);
|
|
2836
2891
|
if (!messageActions.length && !customMessageActions)
|
|
2837
2892
|
return null;
|
|
@@ -2846,7 +2901,7 @@ var MessageActionsWrapper = function (props) {
|
|
|
2846
2901
|
var wrapperClass = customWrapperClass || defaultWrapperClass;
|
|
2847
2902
|
var onClickOptionsAction = function (event) {
|
|
2848
2903
|
event.stopPropagation();
|
|
2849
|
-
setActionsBoxOpen(
|
|
2904
|
+
setActionsBoxOpen(function (prev) { return !prev; });
|
|
2850
2905
|
};
|
|
2851
2906
|
var wrapperProps = {
|
|
2852
2907
|
className: wrapperClass,
|
|
@@ -2863,7 +2918,7 @@ var UnMemoizedMessageOptions = function (props) {
|
|
|
2863
2918
|
var _g = useMessageContext('MessageOptions'), customMessageActions = _g.customMessageActions, getMessageActions = _g.getMessageActions, contextHandleOpenThread = _g.handleOpenThread, initialMessage = _g.initialMessage, isMyMessage = _g.isMyMessage, message = _g.message, onReactionListClick = _g.onReactionListClick, threadList = _g.threadList;
|
|
2864
2919
|
var handleOpenThread = propHandleOpenThread || contextHandleOpenThread;
|
|
2865
2920
|
var messageActions = getMessageActions();
|
|
2866
|
-
var showActionsBox = showMessageActionsBox(messageActions) || !!customMessageActions;
|
|
2921
|
+
var showActionsBox = showMessageActionsBox(messageActions, threadList) || !!customMessageActions;
|
|
2867
2922
|
var shouldShowReactions = messageActions.indexOf(MESSAGE_ACTIONS.react) > -1;
|
|
2868
2923
|
var shouldShowReplies = messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1 && displayReplies && !threadList;
|
|
2869
2924
|
if (!message.type ||
|
|
@@ -2895,32 +2950,18 @@ var MessageOptions = React__default['default'].memo(UnMemoizedMessageOptions);
|
|
|
2895
2950
|
var UnMemoizedMessageRepliesCountButton = function (props) {
|
|
2896
2951
|
var labelPlural = props.labelPlural, labelSingle = props.labelSingle, onClick = props.onClick, _a = props.reply_count, reply_count = _a === void 0 ? 0 : _a;
|
|
2897
2952
|
var t = useTranslationContext('MessageRepliesCountButton').t;
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
}
|
|
2904
|
-
else {
|
|
2905
|
-
singleReplyText = t('1 reply');
|
|
2906
|
-
}
|
|
2907
|
-
}
|
|
2908
|
-
if (reply_count && reply_count > 1) {
|
|
2909
|
-
if (labelPlural) {
|
|
2910
|
-
pluralReplyText = reply_count + " " + labelPlural;
|
|
2911
|
-
}
|
|
2912
|
-
else {
|
|
2913
|
-
pluralReplyText = t('{{ replyCount }} replies', {
|
|
2914
|
-
replyCount: reply_count,
|
|
2915
|
-
});
|
|
2916
|
-
}
|
|
2953
|
+
if (!reply_count)
|
|
2954
|
+
return null;
|
|
2955
|
+
var replyCountText = t('replyCount', { count: reply_count });
|
|
2956
|
+
if (labelPlural && reply_count > 1) {
|
|
2957
|
+
replyCountText = reply_count + " " + labelPlural;
|
|
2917
2958
|
}
|
|
2918
|
-
if (
|
|
2919
|
-
|
|
2920
|
-
React__default['default'].createElement(ReplyIcon, null),
|
|
2921
|
-
reply_count === 1 ? singleReplyText : pluralReplyText));
|
|
2959
|
+
else if (labelSingle) {
|
|
2960
|
+
replyCountText = "1 " + labelSingle;
|
|
2922
2961
|
}
|
|
2923
|
-
return
|
|
2962
|
+
return (React__default['default'].createElement("button", { className: 'str-chat__message-replies-count-button', "data-testid": 'replies-count-button', onClick: onClick },
|
|
2963
|
+
React__default['default'].createElement(ReplyIcon, null),
|
|
2964
|
+
replyCountText));
|
|
2924
2965
|
};
|
|
2925
2966
|
var MessageRepliesCountButton = React__default['default'].memo(UnMemoizedMessageRepliesCountButton);
|
|
2926
2967
|
|
|
@@ -3528,6 +3569,7 @@ var QuotedMessage = function () {
|
|
|
3528
3569
|
var _c = useComponentContext('QuotedMessage'), Attachment = _c.Attachment, ContextAvatar = _c.Avatar;
|
|
3529
3570
|
var _d = useMessageContext('QuotedMessage'), isMyMessage = _d.isMyMessage, message = _d.message;
|
|
3530
3571
|
var userLanguage = useTranslationContext('QuotedMessage').userLanguage;
|
|
3572
|
+
var jumpToMessage = useChannelActionContext('QuotedMessage').jumpToMessage;
|
|
3531
3573
|
var Avatar$1 = ContextAvatar || Avatar;
|
|
3532
3574
|
var quoted_message = message.quoted_message;
|
|
3533
3575
|
if (!quoted_message)
|
|
@@ -3542,7 +3584,7 @@ var QuotedMessage = function () {
|
|
|
3542
3584
|
if (!quotedMessageText && !quotedMessageAttachment)
|
|
3543
3585
|
return null;
|
|
3544
3586
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
3545
|
-
React__default['default'].createElement("div", { className: "" + (isMyMessage() ? 'quoted-message mine' : 'quoted-message') },
|
|
3587
|
+
React__default['default'].createElement("div", { className: "" + (isMyMessage() ? 'quoted-message mine' : 'quoted-message'), onClick: function () { return jumpToMessage(quoted_message.id); } },
|
|
3546
3588
|
quoted_message.user && (React__default['default'].createElement(Avatar$1, { image: quoted_message.user.image, name: quoted_message.user.name || quoted_message.user.id, size: 20, user: quoted_message.user })),
|
|
3547
3589
|
React__default['default'].createElement("div", { className: 'quoted-message-inner' },
|
|
3548
3590
|
quotedMessageAttachment && React__default['default'].createElement(Attachment, { attachments: [quotedMessageAttachment] }),
|
|
@@ -3625,6 +3667,11 @@ var UnMemoizedMessageTimestamp = function (props) {
|
|
|
3625
3667
|
};
|
|
3626
3668
|
var MessageTimestamp = React__default['default'].memo(UnMemoizedMessageTimestamp);
|
|
3627
3669
|
|
|
3670
|
+
var CUSTOM_MESSAGE_TYPE = {
|
|
3671
|
+
date: 'message.date',
|
|
3672
|
+
intro: 'channel.intro',
|
|
3673
|
+
};
|
|
3674
|
+
|
|
3628
3675
|
var useCommandTrigger = function () {
|
|
3629
3676
|
var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
|
|
3630
3677
|
var commands = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.commands;
|
|
@@ -3659,7 +3706,9 @@ var useCommandTrigger = function () {
|
|
|
3659
3706
|
});
|
|
3660
3707
|
var result = selectedCommands.slice(0, 10);
|
|
3661
3708
|
if (onReady)
|
|
3662
|
-
onReady(result.filter(function (result) {
|
|
3709
|
+
onReady(result.filter(function (result) {
|
|
3710
|
+
return result.name !== undefined;
|
|
3711
|
+
}), query);
|
|
3663
3712
|
return result;
|
|
3664
3713
|
},
|
|
3665
3714
|
output: function (entity) { return ({
|
|
@@ -4137,22 +4186,9 @@ var SendButton = function (_a) {
|
|
|
4137
4186
|
var UploadsPreview = function () {
|
|
4138
4187
|
var _a = useChannelStateContext('UploadsPreview'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
|
|
4139
4188
|
var messageInput = useMessageInputContext('UploadsPreview');
|
|
4140
|
-
var fileOrder = messageInput.fileOrder, fileUploads = messageInput.fileUploads, imageOrder = messageInput.imageOrder, imageUploads = messageInput.imageUploads, numberOfUploads = messageInput.numberOfUploads, removeFile = messageInput.removeFile, removeImage = messageInput.removeImage,
|
|
4189
|
+
var fileOrder = messageInput.fileOrder, fileUploads = messageInput.fileUploads, imageOrder = messageInput.imageOrder, imageUploads = messageInput.imageUploads, numberOfUploads = messageInput.numberOfUploads, removeFile = messageInput.removeFile, removeImage = messageInput.removeImage, uploadFile = messageInput.uploadFile, uploadImage = messageInput.uploadImage, uploadNewFiles = messageInput.uploadNewFiles;
|
|
4141
4190
|
var imagesToPreview = imageOrder.map(function (id) { return imageUploads[id]; });
|
|
4142
4191
|
var filesToPreview = fileOrder.map(function (id) { return fileUploads[id]; });
|
|
4143
|
-
var device = useBreakpoint().device;
|
|
4144
|
-
React.useEffect(function () {
|
|
4145
|
-
var elements = document.getElementsByClassName('str-chat__send-button');
|
|
4146
|
-
var sendButton = elements.item(0);
|
|
4147
|
-
if (sendButton instanceof HTMLButtonElement) {
|
|
4148
|
-
if ((numberOfUploads && !text) || device !== 'full') {
|
|
4149
|
-
sendButton.style.display = 'block';
|
|
4150
|
-
}
|
|
4151
|
-
else {
|
|
4152
|
-
sendButton.style.display = 'none';
|
|
4153
|
-
}
|
|
4154
|
-
}
|
|
4155
|
-
}, [device, numberOfUploads, text]);
|
|
4156
4192
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
4157
4193
|
imageOrder.length > 0 && (React__default['default'].createElement(reactFileUtils.ImagePreviewer, { disabled: !multipleUploads ||
|
|
4158
4194
|
(maxNumberOfFiles !== undefined && numberOfUploads >= maxNumberOfFiles), handleFiles: uploadNewFiles, handleRemove: removeImage, handleRetry: uploadImage, imageUploads: imagesToPreview, multiple: multipleUploads })),
|
|
@@ -4185,7 +4221,7 @@ var UnMemoizedChatAutoComplete = function (props) {
|
|
|
4185
4221
|
innerRef.current = ref;
|
|
4186
4222
|
}
|
|
4187
4223
|
}, [innerRef]);
|
|
4188
|
-
return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, "aria-label": cooldownRemaining ? t('Slow Mode ON') : placeholder, className: 'str-chat__textarea__textarea', closeCommandsList: messageInput.closeCommandsList, closeMentionsList: messageInput.closeMentionsList, containerClassName: 'str-chat__textarea', disabled: disabled || !!cooldownRemaining, disableMentions: messageInput.disableMentions, dropdownClassName: 'str-chat__emojisearch', grow: messageInput.grow, handleSubmit: props.handleSubmit || messageInput.handleSubmit, innerRef: updateInnerRef, itemClassName: 'str-chat__emojisearch__item', keycodeSubmitKeys: messageInput.keycodeSubmitKeys, listClassName: 'str-chat__emojisearch__list', loadingComponent: LoadingIndicator, maxRows: messageInput.maxRows, minChar: 0, onChange: props.onChange || messageInput.handleChange, onFocus: props.onFocus, onPaste: props.onPaste || messageInput.onPaste, placeholder: cooldownRemaining ? t('Slow Mode ON') : placeholder, replaceWord: emojiReplace, rows: props.rows || 1, showCommandsList: messageInput.showCommandsList, showMentionsList: messageInput.showMentionsList, SuggestionItem: SuggestionItem, SuggestionList: SuggestionList, trigger: messageInput.autocompleteTriggers || {}, value: props.value || messageInput.text }));
|
|
4224
|
+
return (React__default['default'].createElement(ReactTextareaAutocomplete, { additionalTextareaProps: messageInput.additionalTextareaProps, "aria-label": cooldownRemaining ? t('Slow Mode ON') : placeholder, className: 'str-chat__textarea__textarea', closeCommandsList: messageInput.closeCommandsList, closeMentionsList: messageInput.closeMentionsList, containerClassName: 'str-chat__textarea', disabled: disabled || !!cooldownRemaining, disableMentions: messageInput.disableMentions, dropdownClassName: 'str-chat__emojisearch', grow: messageInput.grow, handleSubmit: props.handleSubmit || messageInput.handleSubmit, innerRef: updateInnerRef, itemClassName: 'str-chat__emojisearch__item', keycodeSubmitKeys: messageInput.keycodeSubmitKeys, listClassName: 'str-chat__emojisearch__list', loadingComponent: LoadingIndicator, maxRows: messageInput.maxRows, minChar: 0, onBlur: props.onBlur, onChange: props.onChange || messageInput.handleChange, onFocus: props.onFocus, onPaste: props.onPaste || messageInput.onPaste, placeholder: cooldownRemaining ? t('Slow Mode ON') : placeholder, replaceWord: emojiReplace, rows: props.rows || 1, showCommandsList: messageInput.showCommandsList, showMentionsList: messageInput.showMentionsList, SuggestionItem: SuggestionItem, SuggestionList: SuggestionList, trigger: messageInput.autocompleteTriggers || {}, value: props.value || messageInput.text }));
|
|
4189
4225
|
};
|
|
4190
4226
|
var ChatAutoComplete = React__default['default'].memo(UnMemoizedChatAutoComplete);
|
|
4191
4227
|
|
|
@@ -4244,37 +4280,28 @@ var CooldownTimer = function (props) {
|
|
|
4244
4280
|
});
|
|
4245
4281
|
return React__default['default'].createElement("div", null, seconds === 0 ? null : seconds);
|
|
4246
4282
|
};
|
|
4247
|
-
var rolesToSkip = {
|
|
4248
|
-
admin: true,
|
|
4249
|
-
channel_moderator: true,
|
|
4250
|
-
moderator: true,
|
|
4251
|
-
};
|
|
4252
|
-
var checkUserRoles = function (globalRole, channelRole) {
|
|
4253
|
-
var skipGlobal = !!rolesToSkip[globalRole];
|
|
4254
|
-
var skipChannel = !!rolesToSkip[channelRole];
|
|
4255
|
-
return skipGlobal || skipChannel;
|
|
4256
|
-
};
|
|
4257
4283
|
var useCooldownTimer = function () {
|
|
4258
|
-
var
|
|
4259
|
-
var client = useChatContext('useCooldownTimer').client;
|
|
4284
|
+
var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
|
|
4260
4285
|
var channel = useChannelStateContext('useCooldownTimer').channel;
|
|
4261
|
-
var
|
|
4262
|
-
|
|
4263
|
-
var
|
|
4264
|
-
var
|
|
4265
|
-
var skipCooldown = checkUserRoles(globalRole, channelRole);
|
|
4286
|
+
var _a = (channel.data ||
|
|
4287
|
+
{}), cooldownInterval = _a.cooldown, own_capabilities = _a.own_capabilities;
|
|
4288
|
+
var _b = React.useState(), cooldownRemaining = _b[0], setCooldownRemaining = _b[1];
|
|
4289
|
+
var skipCooldown = !(own_capabilities === null || own_capabilities === void 0 ? void 0 : own_capabilities.includes('slow-mode'));
|
|
4266
4290
|
React.useEffect(function () {
|
|
4267
|
-
var
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4291
|
+
var latestMessageDate = latestMessageDatesByChannels[channel.cid];
|
|
4292
|
+
if (!cooldownInterval || !latestMessageDate) {
|
|
4293
|
+
return;
|
|
4294
|
+
}
|
|
4295
|
+
var remainingCooldown = Math.round(cooldownInterval - (new Date().getTime() - latestMessageDate.getTime()) / 1000);
|
|
4296
|
+
if (remainingCooldown > 0 && !skipCooldown) {
|
|
4297
|
+
setCooldownRemaining(remainingCooldown);
|
|
4298
|
+
}
|
|
4299
|
+
}, [channel.id, cooldownInterval, latestMessageDatesByChannels[channel.cid]]);
|
|
4300
|
+
return {
|
|
4301
|
+
cooldownInterval: cooldownInterval || 0,
|
|
4302
|
+
cooldownRemaining: cooldownRemaining,
|
|
4303
|
+
setCooldownRemaining: setCooldownRemaining,
|
|
4304
|
+
};
|
|
4278
4305
|
};
|
|
4279
4306
|
|
|
4280
4307
|
var useEmojiIndex = function () {
|
|
@@ -5071,19 +5098,39 @@ var QuotedMessagePreview = function (props) {
|
|
|
5071
5098
|
|
|
5072
5099
|
var MessageInputFlat = function () {
|
|
5073
5100
|
var _a = useChannelStateContext('MessageInputFlat'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
|
|
5101
|
+
var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
|
|
5074
5102
|
var t = useTranslationContext('MessageInputFlat').t;
|
|
5075
|
-
var
|
|
5103
|
+
var channel = useChatContext('MessageInputFlat').channel;
|
|
5104
|
+
var _b = useMessageInputContext('MessageInputFlat'), closeEmojiPicker = _b.closeEmojiPicker, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, numberOfUploads = _b.numberOfUploads, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
|
|
5076
5105
|
var _c = useComponentContext('MessageInputFlat'), _d = _c.CooldownTimer, CooldownTimer$1 = _d === void 0 ? CooldownTimer : _d, _e = _c.EmojiIcon, EmojiIcon = _e === void 0 ? EmojiIconLarge : _e, _f = _c.FileUploadIcon, FileUploadIcon = _f === void 0 ? FileUploadIconFlat : _f, _g = _c.QuotedMessagePreview, QuotedMessagePreview$1 = _g === void 0 ? QuotedMessagePreview : _g, _h = _c.SendButton, SendButton$1 = _h === void 0 ? SendButton : _h;
|
|
5077
|
-
|
|
5106
|
+
React.useEffect(function () {
|
|
5107
|
+
var handleQuotedMessageUpdate = function (e) {
|
|
5108
|
+
var _a;
|
|
5109
|
+
if (((_a = e.message) === null || _a === void 0 ? void 0 : _a.id) !== (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.id))
|
|
5110
|
+
return;
|
|
5111
|
+
if (e.type === 'message.deleted') {
|
|
5112
|
+
setQuotedMessage(undefined);
|
|
5113
|
+
return;
|
|
5114
|
+
}
|
|
5115
|
+
setQuotedMessage(e.message);
|
|
5116
|
+
};
|
|
5117
|
+
channel === null || channel === void 0 ? void 0 : channel.on('message.deleted', handleQuotedMessageUpdate);
|
|
5118
|
+
channel === null || channel === void 0 ? void 0 : channel.on('message.updated', handleQuotedMessageUpdate);
|
|
5119
|
+
return function () {
|
|
5120
|
+
channel === null || channel === void 0 ? void 0 : channel.off('message.deleted', handleQuotedMessageUpdate);
|
|
5121
|
+
channel === null || channel === void 0 ? void 0 : channel.off('message.updated', handleQuotedMessageUpdate);
|
|
5122
|
+
};
|
|
5123
|
+
}, [channel, quotedMessage]);
|
|
5124
|
+
return (React__default['default'].createElement("div", { className: "str-chat__input-flat " + (SendButton$1 ? 'str-chat__input-flat--send-button-active' : '') + " " + (quotedMessage && !quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : '') + "\n " + (numberOfUploads ? 'str-chat__input-flat-has-attachments' : '') + "\n " },
|
|
5078
5125
|
React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
|
|
5079
5126
|
quotedMessage && !quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
|
|
5080
5127
|
React__default['default'].createElement("div", { className: 'str-chat__input-flat-wrapper' },
|
|
5128
|
+
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5081
5129
|
React__default['default'].createElement("div", { className: 'str-chat__input-flat--textarea-wrapper' },
|
|
5082
|
-
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5083
5130
|
React__default['default'].createElement("div", { className: 'str-chat__emojiselect-wrapper' },
|
|
5084
5131
|
React__default['default'].createElement(Tooltip, null, emojiPickerIsOpen ? t('Close emoji picker') : t('Open emoji picker')),
|
|
5085
5132
|
React__default['default'].createElement("button", { "aria-label": 'Emoji picker', className: 'str-chat__input-flat-emojiselect', onClick: emojiPickerIsOpen ? closeEmojiPicker : openEmojiPicker }, cooldownRemaining ? (React__default['default'].createElement("div", { className: 'str-chat__input-flat-cooldown' },
|
|
5086
|
-
React__default['default'].createElement(CooldownTimer$1, { cooldownInterval:
|
|
5133
|
+
React__default['default'].createElement(CooldownTimer$1, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining }))) : (React__default['default'].createElement(EmojiIcon, null)))),
|
|
5087
5134
|
React__default['default'].createElement(EmojiPicker, null),
|
|
5088
5135
|
React__default['default'].createElement(ChatAutoComplete, null),
|
|
5089
5136
|
isUploadEnabled && !cooldownRemaining && (React__default['default'].createElement("div", { className: 'str-chat__fileupload-wrapper', "data-testid": 'fileinput' },
|
|
@@ -5219,18 +5266,38 @@ var MessageInput = React__default['default'].memo(UnMemoizedMessageInput);
|
|
|
5219
5266
|
|
|
5220
5267
|
var MessageInputSmall = function () {
|
|
5221
5268
|
var _a = useChannelStateContext('MessageInputSmall'), acceptedFiles = _a.acceptedFiles, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
|
|
5269
|
+
var setQuotedMessage = useChannelActionContext('MessageInputSmall').setQuotedMessage;
|
|
5222
5270
|
var t = useTranslationContext('MessageInputSmall').t;
|
|
5223
|
-
var
|
|
5271
|
+
var channel = useChatContext('MessageInputSmall').channel;
|
|
5272
|
+
var _b = useMessageInputContext('MessageInputSmall'), closeEmojiPicker = _b.closeEmojiPicker, cooldownRemaining = _b.cooldownRemaining, emojiPickerIsOpen = _b.emojiPickerIsOpen, handleSubmit = _b.handleSubmit, isUploadEnabled = _b.isUploadEnabled, maxFilesLeft = _b.maxFilesLeft, numberOfUploads = _b.numberOfUploads, openEmojiPicker = _b.openEmojiPicker, setCooldownRemaining = _b.setCooldownRemaining, uploadNewFiles = _b.uploadNewFiles;
|
|
5224
5273
|
var _c = useComponentContext('MessageInputSmall'), _d = _c.CooldownTimer, CooldownTimer$1 = _d === void 0 ? CooldownTimer : _d, _e = _c.EmojiIcon, EmojiIcon = _e === void 0 ? EmojiIconSmall : _e, _f = _c.FileUploadIcon, FileUploadIcon = _f === void 0 ? FileUploadIconFlat : _f, _g = _c.SendButton, SendButton$1 = _g === void 0 ? SendButton : _g, _h = _c.QuotedMessagePreview, QuotedMessagePreview$1 = _h === void 0 ? QuotedMessagePreview : _h;
|
|
5274
|
+
React.useEffect(function () {
|
|
5275
|
+
var handleQuotedMessageUpdate = function (e) {
|
|
5276
|
+
var _a;
|
|
5277
|
+
if (!(quotedMessage && ((_a = e.message) === null || _a === void 0 ? void 0 : _a.id) === quotedMessage.id))
|
|
5278
|
+
return;
|
|
5279
|
+
if (e.type === 'message.deleted') {
|
|
5280
|
+
setQuotedMessage(undefined);
|
|
5281
|
+
return;
|
|
5282
|
+
}
|
|
5283
|
+
setQuotedMessage(e.message);
|
|
5284
|
+
};
|
|
5285
|
+
channel === null || channel === void 0 ? void 0 : channel.on('message.deleted', handleQuotedMessageUpdate);
|
|
5286
|
+
channel === null || channel === void 0 ? void 0 : channel.on('message.updated', handleQuotedMessageUpdate);
|
|
5287
|
+
return function () {
|
|
5288
|
+
channel === null || channel === void 0 ? void 0 : channel.off('message.deleted', handleQuotedMessageUpdate);
|
|
5289
|
+
channel === null || channel === void 0 ? void 0 : channel.off('message.updated', handleQuotedMessageUpdate);
|
|
5290
|
+
};
|
|
5291
|
+
}, [channel, quotedMessage]);
|
|
5225
5292
|
return (React__default['default'].createElement("div", { className: 'str-chat__small-message-input__wrapper' },
|
|
5226
5293
|
React__default['default'].createElement(reactFileUtils.ImageDropzone, { accept: acceptedFiles, disabled: !isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining, handleFiles: uploadNewFiles, maxNumberOfFiles: maxFilesLeft, multiple: multipleUploads },
|
|
5227
|
-
React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' :
|
|
5294
|
+
React__default['default'].createElement("div", { className: "str-chat__small-message-input " + (SendButton$1 ? 'str-chat__small-message-input--send-button-active' : '') + " " + (quotedMessage && quotedMessage.parent_id ? 'str-chat__input-flat-quoted' : '') + " " + (numberOfUploads ? 'str-chat__small-message-input-has-attachments' : '') + " " },
|
|
5228
5295
|
quotedMessage && quotedMessage.parent_id && (React__default['default'].createElement(QuotedMessagePreview$1, { quotedMessage: quotedMessage })),
|
|
5296
|
+
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5229
5297
|
React__default['default'].createElement("div", { className: 'str-chat__small-message-input--textarea-wrapper' },
|
|
5230
|
-
isUploadEnabled && React__default['default'].createElement(UploadsPreview, null),
|
|
5231
5298
|
React__default['default'].createElement(ChatAutoComplete, null),
|
|
5232
5299
|
cooldownRemaining ? (React__default['default'].createElement("div", { className: 'str-chat__input-small-cooldown' },
|
|
5233
|
-
React__default['default'].createElement(CooldownTimer$1, { cooldownInterval:
|
|
5300
|
+
React__default['default'].createElement(CooldownTimer$1, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining }))) : (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
5234
5301
|
isUploadEnabled && (React__default['default'].createElement("div", { className: 'str-chat__fileupload-wrapper', "data-testid": 'fileinput' },
|
|
5235
5302
|
React__default['default'].createElement(Tooltip, null, maxFilesLeft
|
|
5236
5303
|
? t('Attach files')
|
|
@@ -5492,15 +5559,14 @@ var SimpleReactionsList = React__default['default'].memo(UnMemoizedSimpleReactio
|
|
|
5492
5559
|
|
|
5493
5560
|
var MessageSimpleWithContext = function (props) {
|
|
5494
5561
|
var _a;
|
|
5495
|
-
var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
|
|
5562
|
+
var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, highlighted = props.highlighted, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
|
|
5496
5563
|
var _b = useComponentContext('MessageSimple'), Attachment = _b.Attachment, _c = _b.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, _d = _b.EditMessageInput, EditMessageInput = _d === void 0 ? EditMessageForm : _d, _e = _b.MessageDeleted, MessageDeleted$1 = _e === void 0 ? MessageDeleted : _e, _f = _b.MessageOptions, MessageOptions$1 = _f === void 0 ? MessageOptions : _f, _g = _b.MessageRepliesCountButton, MessageRepliesCountButton$1 = _g === void 0 ? MessageRepliesCountButton : _g, _h = _b.MessageStatus, MessageStatus$1 = _h === void 0 ? MessageStatus : _h, _j = _b.MessageTimestamp, MessageTimestamp$1 = _j === void 0 ? MessageTimestamp : _j, _k = _b.ReactionSelector, ReactionSelector$1 = _k === void 0 ? ReactionSelector : _k, _l = _b.ReactionsList, ReactionsList$1 = _l === void 0 ? ReactionsList : _l;
|
|
5497
|
-
var messageWrapperRef = React.useRef(null);
|
|
5498
5564
|
var hasAttachment = messageHasAttachments(message);
|
|
5499
5565
|
var hasReactions = messageHasReactions(message);
|
|
5500
5566
|
var messageClasses = isMyMessage()
|
|
5501
5567
|
? 'str-chat__message str-chat__message--me str-chat__message-simple str-chat__message-simple--me'
|
|
5502
5568
|
: 'str-chat__message str-chat__message-simple';
|
|
5503
|
-
if (message.customType ===
|
|
5569
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date) {
|
|
5504
5570
|
return null;
|
|
5505
5571
|
}
|
|
5506
5572
|
if (message.deleted_at || message.type === 'deleted') {
|
|
@@ -5509,7 +5575,7 @@ var MessageSimpleWithContext = function (props) {
|
|
|
5509
5575
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
5510
5576
|
editing && (React__default['default'].createElement(Modal, { onClose: clearEditingState, open: editing },
|
|
5511
5577
|
React__default['default'].createElement(MessageInput, __assign({ clearEditingState: clearEditingState, Input: EditMessageInput, message: message }, additionalMessageInputProps)))),
|
|
5512
|
-
React__default['default'].createElement("div", { className: ("\n\t\t\t\t\t\t" + messageClasses + "\n\t\t\t\t\t\tstr-chat__message--" + message.type + "\n\t\t\t\t\t\tstr-chat__message--" + message.status + "\n\t\t\t\t\t\t" + (message.text ? 'str-chat__message--has-text' : 'has-no-text') + "\n\t\t\t\t\t\t" + (hasAttachment ? 'str-chat__message--has-attachment' : '') + "\n " + (hasReactions && isReactionEnabled ? 'str-chat__message--with-reactions' : '') + "\n " + (message.pinned ? 'pinned-message' : '') + "\n " + (groupedByUser ? 'str-chat__virtual-message__wrapper--group' : '') + "\n " + (firstOfGroup ? 'str-chat__virtual-message__wrapper--first' : '') + "\n " + (endOfGroup ? 'str-chat__virtual-message__wrapper--end' : '') + "\n\t\t\t\t\t").trim(), key: message.id
|
|
5578
|
+
React__default['default'].createElement("div", { className: ("\n\t\t\t\t\t\t" + messageClasses + "\n\t\t\t\t\t\tstr-chat__message--" + message.type + "\n\t\t\t\t\t\tstr-chat__message--" + message.status + "\n\t\t\t\t\t\t" + (message.text ? 'str-chat__message--has-text' : 'has-no-text') + "\n\t\t\t\t\t\t" + (hasAttachment ? 'str-chat__message--has-attachment' : '') + "\n " + (hasReactions && isReactionEnabled ? 'str-chat__message--with-reactions' : '') + "\n " + (highlighted ? 'str-chat__message--highlighted' : '') + "\n " + (message.pinned ? 'pinned-message' : '') + "\n " + (groupedByUser ? 'str-chat__virtual-message__wrapper--group' : '') + "\n " + (firstOfGroup ? 'str-chat__virtual-message__wrapper--first' : '') + "\n " + (endOfGroup ? 'str-chat__virtual-message__wrapper--end' : '') + "\n\t\t\t\t\t").trim(), key: message.id },
|
|
5513
5579
|
React__default['default'].createElement(MessageStatus$1, null),
|
|
5514
5580
|
message.user && (React__default['default'].createElement(Avatar$1, { image: message.user.image, name: message.user.name || message.user.id, onClick: onUserClick, onMouseOver: onUserHover, user: message.user })),
|
|
5515
5581
|
React__default['default'].createElement("div", { className: 'str-chat__message-inner', "data-testid": 'message-inner', onClick: message.status === 'failed' && message.errorStatusCode !== 403
|
|
@@ -5518,7 +5584,7 @@ var MessageSimpleWithContext = function (props) {
|
|
|
5518
5584
|
? function () { return handleRetry(message); }
|
|
5519
5585
|
: undefined },
|
|
5520
5586
|
React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
5521
|
-
React__default['default'].createElement(MessageOptions$1,
|
|
5587
|
+
React__default['default'].createElement(MessageOptions$1, null),
|
|
5522
5588
|
hasReactions && !showDetailedReactions && isReactionEnabled && (React__default['default'].createElement(ReactionsList$1, { reverse: true })),
|
|
5523
5589
|
showDetailedReactions && isReactionEnabled && (React__default['default'].createElement(ReactionSelector$1, { ref: reactionSelectorRef }))),
|
|
5524
5590
|
((_a = message.attachments) === null || _a === void 0 ? void 0 : _a.length) && !message.quoted_message ? (React__default['default'].createElement(Attachment, { actionHandler: handleAction, attachments: message.attachments })) : null,
|
|
@@ -5584,6 +5650,21 @@ var withTypingContext = function (Component) {
|
|
|
5584
5650
|
|
|
5585
5651
|
var compressed=true;var categories=[{id:"people",name:"Smileys & People",emojis:["grinning","smiley","smile","grin","laughing","sweat_smile","rolling_on_the_floor_laughing","joy","slightly_smiling_face","upside_down_face","wink","blush","innocent","smiling_face_with_3_hearts","heart_eyes","star-struck","kissing_heart","kissing","relaxed","kissing_closed_eyes","kissing_smiling_eyes","yum","stuck_out_tongue","stuck_out_tongue_winking_eye","zany_face","stuck_out_tongue_closed_eyes","money_mouth_face","hugging_face","face_with_hand_over_mouth","shushing_face","thinking_face","zipper_mouth_face","face_with_raised_eyebrow","neutral_face","expressionless","no_mouth","smirk","unamused","face_with_rolling_eyes","grimacing","lying_face","relieved","pensive","sleepy","drooling_face","sleeping","mask","face_with_thermometer","face_with_head_bandage","nauseated_face","face_vomiting","sneezing_face","hot_face","cold_face","woozy_face","dizzy_face","exploding_head","face_with_cowboy_hat","partying_face","sunglasses","nerd_face","face_with_monocle","confused","worried","slightly_frowning_face","white_frowning_face","open_mouth","hushed","astonished","flushed","pleading_face","frowning","anguished","fearful","cold_sweat","disappointed_relieved","cry","sob","scream","confounded","persevere","disappointed","sweat","weary","tired_face","yawning_face","triumph","rage","angry","face_with_symbols_on_mouth","smiling_imp","imp","skull","skull_and_crossbones","hankey","clown_face","japanese_ogre","japanese_goblin","ghost","alien","space_invader","robot_face","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","kissing_cat","scream_cat","crying_cat_face","pouting_cat","see_no_evil","hear_no_evil","speak_no_evil","wave","raised_back_of_hand","raised_hand_with_fingers_splayed","hand","spock-hand","ok_hand","pinching_hand","v","crossed_fingers","i_love_you_hand_sign","the_horns","call_me_hand","point_left","point_right","point_up_2","middle_finger","point_down","point_up","+1","-1","fist","facepunch","left-facing_fist","right-facing_fist","clap","raised_hands","open_hands","palms_up_together","handshake","pray","writing_hand","nail_care","selfie","muscle","mechanical_arm","mechanical_leg","leg","foot","ear","ear_with_hearing_aid","nose","brain","tooth","bone","eyes","eye","tongue","lips","baby","child","boy","girl","adult","man","bearded_person","red_haired_man","curly_haired_man","white_haired_man","bald_man","woman","red_haired_woman","curly_haired_woman","white_haired_woman","bald_woman","blond-haired-woman","blond-haired-man","older_adult","older_man","older_woman","man-frowning","woman-frowning","man-pouting","woman-pouting","man-gesturing-no","woman-gesturing-no","man-gesturing-ok","woman-gesturing-ok","man-tipping-hand","woman-tipping-hand","man-raising-hand","woman-raising-hand","deaf_person","deaf_man","deaf_woman","man-bowing","woman-bowing","man-facepalming","woman-facepalming","man-shrugging","woman-shrugging","male-doctor","female-doctor","male-student","female-student","male-teacher","female-teacher","male-judge","female-judge","male-farmer","female-farmer","male-cook","female-cook","male-mechanic","female-mechanic","male-factory-worker","female-factory-worker","male-office-worker","female-office-worker","male-scientist","female-scientist","male-technologist","female-technologist","male-singer","female-singer","male-artist","female-artist","male-pilot","female-pilot","male-astronaut","female-astronaut","male-firefighter","female-firefighter","male-police-officer","female-police-officer","male-guard","female-guard","male-construction-worker","female-construction-worker","prince","princess","man-wearing-turban","woman-wearing-turban","man_with_gua_pi_mao","person_with_headscarf","man_in_tuxedo","bride_with_veil","pregnant_woman","breast-feeding","angel","santa","mrs_claus","superhero","male_superhero","female_superhero","supervillain","male_supervillain","female_supervillain","mage","male_mage","female_mage","fairy","male_fairy","female_fairy","vampire","male_vampire","female_vampire","merperson","merman","mermaid","elf","male_elf","female_elf","genie","male_genie","female_genie","zombie","male_zombie","female_zombie","man-getting-massage","woman-getting-massage","man-getting-haircut","woman-getting-haircut","man-walking","woman-walking","standing_person","man_standing","woman_standing","kneeling_person","man_kneeling","woman_kneeling","man_with_probing_cane","woman_with_probing_cane","man_in_motorized_wheelchair","woman_in_motorized_wheelchair","man_in_manual_wheelchair","woman_in_manual_wheelchair","man-running","woman-running","dancer","man_dancing","man_in_business_suit_levitating","dancers","man-with-bunny-ears-partying","woman-with-bunny-ears-partying","person_in_steamy_room","man_in_steamy_room","woman_in_steamy_room","person_climbing","man_climbing","woman_climbing","fencer","horse_racing","skier","snowboarder","man-surfing","woman-surfing","man-rowing-boat","woman-rowing-boat","man-swimming","woman-swimming","man-biking","woman-biking","man-mountain-biking","woman-mountain-biking","man-cartwheeling","woman-cartwheeling","wrestlers","man-wrestling","woman-wrestling","man-playing-water-polo","woman-playing-water-polo","man-playing-handball","woman-playing-handball","juggling","man-juggling","woman-juggling","person_in_lotus_position","man_in_lotus_position","woman_in_lotus_position","bath","sleeping_accommodation","people_holding_hands","two_women_holding_hands","couple","two_men_holding_hands","couplekiss","woman-kiss-man","man-kiss-man","woman-kiss-woman","couple_with_heart","woman-heart-man","man-heart-man","woman-heart-woman","family","man-woman-boy","man-woman-girl","man-woman-girl-boy","man-woman-boy-boy","man-woman-girl-girl","man-man-boy","man-man-girl","man-man-girl-boy","man-man-boy-boy","man-man-girl-girl","woman-woman-boy","woman-woman-girl","woman-woman-girl-boy","woman-woman-boy-boy","woman-woman-girl-girl","man-boy","man-boy-boy","man-girl","man-girl-boy","man-girl-girl","woman-boy","woman-boy-boy","woman-girl","woman-girl-boy","woman-girl-girl","speaking_head_in_silhouette","bust_in_silhouette","busts_in_silhouette","footprints","kiss","love_letter","cupid","gift_heart","sparkling_heart","heartpulse","heartbeat","revolving_hearts","two_hearts","heart_decoration","heavy_heart_exclamation_mark_ornament","broken_heart","heart","orange_heart","yellow_heart","green_heart","blue_heart","purple_heart","brown_heart","black_heart","white_heart","100","anger","boom","dizzy","sweat_drops","dash","hole","bomb","speech_balloon","left_speech_bubble","right_anger_bubble","thought_balloon","zzz"]},{id:"nature",name:"Animals & Nature",emojis:["monkey_face","monkey","gorilla","orangutan","dog","dog2","guide_dog","service_dog","poodle","wolf","fox_face","raccoon","cat","cat2","lion_face","tiger","tiger2","leopard","horse","racehorse","unicorn_face","zebra_face","deer","cow","ox","water_buffalo","cow2","pig","pig2","boar","pig_nose","ram","sheep","goat","dromedary_camel","camel","llama","giraffe_face","elephant","rhinoceros","hippopotamus","mouse","mouse2","rat","hamster","rabbit","rabbit2","chipmunk","hedgehog","bat","bear","koala","panda_face","sloth","otter","skunk","kangaroo","badger","feet","turkey","chicken","rooster","hatching_chick","baby_chick","hatched_chick","bird","penguin","dove_of_peace","eagle","duck","swan","owl","flamingo","peacock","parrot","frog","crocodile","turtle","lizard","snake","dragon_face","dragon","sauropod","t-rex","whale","whale2","dolphin","fish","tropical_fish","blowfish","shark","octopus","shell","snail","butterfly","bug","ant","bee","beetle","cricket","spider","spider_web","scorpion","mosquito","microbe","bouquet","cherry_blossom","white_flower","rosette","rose","wilted_flower","hibiscus","sunflower","blossom","tulip","seedling","evergreen_tree","deciduous_tree","palm_tree","cactus","ear_of_rice","herb","shamrock","four_leaf_clover","maple_leaf","fallen_leaf","leaves"]},{id:"foods",name:"Food & Drink",emojis:["grapes","melon","watermelon","tangerine","lemon","banana","pineapple","mango","apple","green_apple","pear","peach","cherries","strawberry","kiwifruit","tomato","coconut","avocado","eggplant","potato","carrot","corn","hot_pepper","cucumber","leafy_green","broccoli","garlic","onion","mushroom","peanuts","chestnut","bread","croissant","baguette_bread","pretzel","bagel","pancakes","waffle","cheese_wedge","meat_on_bone","poultry_leg","cut_of_meat","bacon","hamburger","fries","pizza","hotdog","sandwich","taco","burrito","stuffed_flatbread","falafel","egg","fried_egg","shallow_pan_of_food","stew","bowl_with_spoon","green_salad","popcorn","butter","salt","canned_food","bento","rice_cracker","rice_ball","rice","curry","ramen","spaghetti","sweet_potato","oden","sushi","fried_shrimp","fish_cake","moon_cake","dango","dumpling","fortune_cookie","takeout_box","crab","lobster","shrimp","squid","oyster","icecream","shaved_ice","ice_cream","doughnut","cookie","birthday","cake","cupcake","pie","chocolate_bar","candy","lollipop","custard","honey_pot","baby_bottle","glass_of_milk","coffee","tea","sake","champagne","wine_glass","cocktail","tropical_drink","beer","beers","clinking_glasses","tumbler_glass","cup_with_straw","beverage_box","mate_drink","ice_cube","chopsticks","knife_fork_plate","fork_and_knife","spoon","hocho","amphora"]},{id:"activity",name:"Activities",emojis:["jack_o_lantern","christmas_tree","fireworks","sparkler","firecracker","sparkles","balloon","tada","confetti_ball","tanabata_tree","bamboo","dolls","flags","wind_chime","rice_scene","red_envelope","ribbon","gift","reminder_ribbon","admission_tickets","ticket","medal","trophy","sports_medal","first_place_medal","second_place_medal","third_place_medal","soccer","baseball","softball","basketball","volleyball","football","rugby_football","tennis","flying_disc","bowling","cricket_bat_and_ball","field_hockey_stick_and_ball","ice_hockey_stick_and_puck","lacrosse","table_tennis_paddle_and_ball","badminton_racquet_and_shuttlecock","boxing_glove","martial_arts_uniform","goal_net","golf","ice_skate","fishing_pole_and_fish","diving_mask","running_shirt_with_sash","ski","sled","curling_stone","dart","yo-yo","kite","8ball","crystal_ball","nazar_amulet","video_game","joystick","slot_machine","game_die","jigsaw","teddy_bear","spades","hearts","diamonds","clubs","chess_pawn","black_joker","mahjong","flower_playing_cards","performing_arts","frame_with_picture","art","thread","yarn"]},{id:"places",name:"Travel & Places",emojis:["earth_africa","earth_americas","earth_asia","globe_with_meridians","world_map","japan","compass","snow_capped_mountain","mountain","volcano","mount_fuji","camping","beach_with_umbrella","desert","desert_island","national_park","stadium","classical_building","building_construction","bricks","house_buildings","derelict_house_building","house","house_with_garden","office","post_office","european_post_office","hospital","bank","hotel","love_hotel","convenience_store","school","department_store","factory","japanese_castle","european_castle","wedding","tokyo_tower","statue_of_liberty","church","mosque","hindu_temple","synagogue","shinto_shrine","kaaba","fountain","tent","foggy","night_with_stars","cityscape","sunrise_over_mountains","sunrise","city_sunset","city_sunrise","bridge_at_night","hotsprings","carousel_horse","ferris_wheel","roller_coaster","barber","circus_tent","steam_locomotive","railway_car","bullettrain_side","bullettrain_front","train2","metro","light_rail","station","tram","monorail","mountain_railway","train","bus","oncoming_bus","trolleybus","minibus","ambulance","fire_engine","police_car","oncoming_police_car","taxi","oncoming_taxi","car","oncoming_automobile","blue_car","truck","articulated_lorry","tractor","racing_car","racing_motorcycle","motor_scooter","manual_wheelchair","motorized_wheelchair","auto_rickshaw","bike","scooter","skateboard","busstop","motorway","railway_track","oil_drum","fuelpump","rotating_light","traffic_light","vertical_traffic_light","octagonal_sign","construction","anchor","boat","canoe","speedboat","passenger_ship","ferry","motor_boat","ship","airplane","small_airplane","airplane_departure","airplane_arriving","parachute","seat","helicopter","suspension_railway","mountain_cableway","aerial_tramway","satellite","rocket","flying_saucer","bellhop_bell","luggage","hourglass","hourglass_flowing_sand","watch","alarm_clock","stopwatch","timer_clock","mantelpiece_clock","clock12","clock1230","clock1","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","clock10","clock1030","clock11","clock1130","new_moon","waxing_crescent_moon","first_quarter_moon","moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","crescent_moon","new_moon_with_face","first_quarter_moon_with_face","last_quarter_moon_with_face","thermometer","sunny","full_moon_with_face","sun_with_face","ringed_planet","star","star2","stars","milky_way","cloud","partly_sunny","thunder_cloud_and_rain","mostly_sunny","barely_sunny","partly_sunny_rain","rain_cloud","snow_cloud","lightning","tornado","fog","wind_blowing_face","cyclone","rainbow","closed_umbrella","umbrella","umbrella_with_rain_drops","umbrella_on_ground","zap","snowflake","snowman","snowman_without_snow","comet","fire","droplet","ocean"]},{id:"objects",name:"Objects",emojis:["eyeglasses","dark_sunglasses","goggles","lab_coat","safety_vest","necktie","shirt","jeans","scarf","gloves","coat","socks","dress","kimono","sari","one-piece_swimsuit","briefs","shorts","bikini","womans_clothes","purse","handbag","pouch","shopping_bags","school_satchel","mans_shoe","athletic_shoe","hiking_boot","womans_flat_shoe","high_heel","sandal","ballet_shoes","boot","crown","womans_hat","tophat","mortar_board","billed_cap","helmet_with_white_cross","prayer_beads","lipstick","ring","gem","mute","speaker","sound","loud_sound","loudspeaker","mega","postal_horn","bell","no_bell","musical_score","musical_note","notes","studio_microphone","level_slider","control_knobs","microphone","headphones","radio","saxophone","guitar","musical_keyboard","trumpet","violin","banjo","drum_with_drumsticks","iphone","calling","phone","telephone_receiver","pager","fax","battery","electric_plug","computer","desktop_computer","printer","keyboard","three_button_mouse","trackball","minidisc","floppy_disk","cd","dvd","abacus","movie_camera","film_frames","film_projector","clapper","tv","camera","camera_with_flash","video_camera","vhs","mag","mag_right","candle","bulb","flashlight","izakaya_lantern","diya_lamp","notebook_with_decorative_cover","closed_book","book","green_book","blue_book","orange_book","books","notebook","ledger","page_with_curl","scroll","page_facing_up","newspaper","rolled_up_newspaper","bookmark_tabs","bookmark","label","moneybag","yen","dollar","euro","pound","money_with_wings","credit_card","receipt","chart","currency_exchange","heavy_dollar_sign","email","e-mail","incoming_envelope","envelope_with_arrow","outbox_tray","inbox_tray","package","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","postbox","ballot_box_with_ballot","pencil2","black_nib","lower_left_fountain_pen","lower_left_ballpoint_pen","lower_left_paintbrush","lower_left_crayon","memo","briefcase","file_folder","open_file_folder","card_index_dividers","date","calendar","spiral_note_pad","spiral_calendar_pad","card_index","chart_with_upwards_trend","chart_with_downwards_trend","bar_chart","clipboard","pushpin","round_pushpin","paperclip","linked_paperclips","straight_ruler","triangular_ruler","scissors","card_file_box","file_cabinet","wastebasket","lock","unlock","lock_with_ink_pen","closed_lock_with_key","key","old_key","hammer","axe","pick","hammer_and_pick","hammer_and_wrench","dagger_knife","crossed_swords","gun","bow_and_arrow","shield","wrench","nut_and_bolt","gear","compression","scales","probing_cane","link","chains","toolbox","magnet","alembic","test_tube","petri_dish","dna","microscope","telescope","satellite_antenna","syringe","drop_of_blood","pill","adhesive_bandage","stethoscope","door","bed","couch_and_lamp","chair","toilet","shower","bathtub","razor","lotion_bottle","safety_pin","broom","basket","roll_of_paper","soap","sponge","fire_extinguisher","shopping_trolley","smoking","coffin","funeral_urn","moyai"]},{id:"symbols",name:"Symbols",emojis:["atm","put_litter_in_its_place","potable_water","wheelchair","mens","womens","restroom","baby_symbol","wc","passport_control","customs","baggage_claim","left_luggage","warning","children_crossing","no_entry","no_entry_sign","no_bicycles","no_smoking","do_not_litter","non-potable_water","no_pedestrians","no_mobile_phones","underage","radioactive_sign","biohazard_sign","arrow_up","arrow_upper_right","arrow_right","arrow_lower_right","arrow_down","arrow_lower_left","arrow_left","arrow_upper_left","arrow_up_down","left_right_arrow","leftwards_arrow_with_hook","arrow_right_hook","arrow_heading_up","arrow_heading_down","arrows_clockwise","arrows_counterclockwise","back","end","on","soon","top","place_of_worship","atom_symbol","om_symbol","star_of_david","wheel_of_dharma","yin_yang","latin_cross","orthodox_cross","star_and_crescent","peace_symbol","menorah_with_nine_branches","six_pointed_star","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","ophiuchus","twisted_rightwards_arrows","repeat","repeat_one","arrow_forward","fast_forward","black_right_pointing_double_triangle_with_vertical_bar","black_right_pointing_triangle_with_double_vertical_bar","arrow_backward","rewind","black_left_pointing_double_triangle_with_vertical_bar","arrow_up_small","arrow_double_up","arrow_down_small","arrow_double_down","double_vertical_bar","black_square_for_stop","black_circle_for_record","eject","cinema","low_brightness","high_brightness","signal_strength","vibration_mode","mobile_phone_off","female_sign","male_sign","medical_symbol","infinity","recycle","fleur_de_lis","trident","name_badge","beginner","o","white_check_mark","ballot_box_with_check","heavy_check_mark","heavy_multiplication_x","x","negative_squared_cross_mark","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","curly_loop","loop","part_alternation_mark","eight_spoked_asterisk","eight_pointed_black_star","sparkle","bangbang","interrobang","question","grey_question","grey_exclamation","exclamation","wavy_dash","tm","keycap_ten","capital_abcd","abcd","1234","symbols","abc","a","ab","b","cl","cool","free","information_source","id","m","new","ng","o2","ok","parking","sos","up","vs","koko","sa","u6708","u6709","u6307","ideograph_advantage","u5272","u7121","u7981","accept","u7533","u5408","u7a7a","congratulations","secret","u55b6","u6e80","red_circle","large_orange_circle","large_yellow_circle","large_green_circle","large_blue_circle","large_purple_circle","large_brown_circle","black_circle","white_circle","large_red_square","large_orange_square","large_yellow_square","large_green_square","large_blue_square","large_purple_square","large_brown_square","black_large_square","white_large_square","black_medium_square","white_medium_square","black_medium_small_square","white_medium_small_square","black_small_square","white_small_square","large_orange_diamond","large_blue_diamond","small_orange_diamond","small_blue_diamond","small_red_triangle","small_red_triangle_down","diamond_shape_with_a_dot_inside","radio_button","white_square_button","black_square_button"]},{id:"flags",name:"Flags",emojis:["checkered_flag","cn","crossed_flags","de","es","flag-ac","flag-ad","flag-ae","flag-af","flag-ag","flag-ai","flag-al","flag-am","flag-ao","flag-aq","flag-ar","flag-as","flag-at","flag-au","flag-aw","flag-ax","flag-az","flag-ba","flag-bb","flag-bd","flag-be","flag-bf","flag-bg","flag-bh","flag-bi","flag-bj","flag-bl","flag-bm","flag-bn","flag-bo","flag-bq","flag-br","flag-bs","flag-bt","flag-bv","flag-bw","flag-by","flag-bz","flag-ca","flag-cc","flag-cd","flag-cf","flag-cg","flag-ch","flag-ci","flag-ck","flag-cl","flag-cm","flag-co","flag-cp","flag-cr","flag-cu","flag-cv","flag-cw","flag-cx","flag-cy","flag-cz","flag-dg","flag-dj","flag-dk","flag-dm","flag-do","flag-dz","flag-ea","flag-ec","flag-ee","flag-eg","flag-eh","flag-england","flag-er","flag-et","flag-eu","flag-fi","flag-fj","flag-fk","flag-fm","flag-fo","flag-ga","flag-gd","flag-ge","flag-gf","flag-gg","flag-gh","flag-gi","flag-gl","flag-gm","flag-gn","flag-gp","flag-gq","flag-gr","flag-gs","flag-gt","flag-gu","flag-gw","flag-gy","flag-hk","flag-hm","flag-hn","flag-hr","flag-ht","flag-hu","flag-ic","flag-id","flag-ie","flag-il","flag-im","flag-in","flag-io","flag-iq","flag-ir","flag-is","flag-je","flag-jm","flag-jo","flag-ke","flag-kg","flag-kh","flag-ki","flag-km","flag-kn","flag-kp","flag-kw","flag-ky","flag-kz","flag-la","flag-lb","flag-lc","flag-li","flag-lk","flag-lr","flag-ls","flag-lt","flag-lu","flag-lv","flag-ly","flag-ma","flag-mc","flag-md","flag-me","flag-mf","flag-mg","flag-mh","flag-mk","flag-ml","flag-mm","flag-mn","flag-mo","flag-mp","flag-mq","flag-mr","flag-ms","flag-mt","flag-mu","flag-mv","flag-mw","flag-mx","flag-my","flag-mz","flag-na","flag-nc","flag-ne","flag-nf","flag-ng","flag-ni","flag-nl","flag-no","flag-np","flag-nr","flag-nu","flag-nz","flag-om","flag-pa","flag-pe","flag-pf","flag-pg","flag-ph","flag-pk","flag-pl","flag-pm","flag-pn","flag-pr","flag-ps","flag-pt","flag-pw","flag-py","flag-qa","flag-re","flag-ro","flag-rs","flag-rw","flag-sa","flag-sb","flag-sc","flag-scotland","flag-sd","flag-se","flag-sg","flag-sh","flag-si","flag-sj","flag-sk","flag-sl","flag-sm","flag-sn","flag-so","flag-sr","flag-ss","flag-st","flag-sv","flag-sx","flag-sy","flag-sz","flag-ta","flag-tc","flag-td","flag-tf","flag-tg","flag-th","flag-tj","flag-tk","flag-tl","flag-tm","flag-tn","flag-to","flag-tr","flag-tt","flag-tv","flag-tw","flag-tz","flag-ua","flag-ug","flag-um","flag-uy","flag-uz","flag-va","flag-vc","flag-ve","flag-vg","flag-vi","flag-vn","flag-vu","flag-wales","flag-wf","flag-ws","flag-xk","flag-ye","flag-yt","flag-za","flag-zm","flag-zw","fr","gb","it","jp","kr","pirate_flag","rainbow-flag","ru","triangular_flag_on_post","us","waving_black_flag","waving_white_flag"]}];var emojis={"100":{a:"Hundred Points Symbol",b:"1F4AF",j:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],k:[26,5],o:2},"1234":{a:"Input Symbol for Numbers",b:"1F522",j:["numbers","blue-square"],k:[28,5],o:2},grinning:{a:"Grinning Face",b:"1F600",j:["face","smile","happy","joy",":D","grin"],k:[30,35],m:":D",o:2},monkey_face:{a:"Monkey Face",b:"1F435",j:["animal","nature","circus"],k:[12,25],l:[":o)"],o:2},grapes:{a:"Grapes",b:"1F347",j:["fruit","food","wine"],k:[6,31],o:2},eyeglasses:{a:"Eyeglasses",b:"1F453",j:["fashion","accessories","eyesight","nerdy","dork","geek"],k:[14,7],o:2},checkered_flag:{a:"Chequered Flag",b:"1F3C1",j:["contest","finishline","race","gokart"],k:[8,39],o:2},jack_o_lantern:{a:"Jack-O-Lantern",b:"1F383",j:["halloween","light","pumpkin","creepy","fall"],k:[7,34],o:2},wave:{a:"Waving Hand Sign",b:"1F44B",j:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],k:[13,26],o:2},earth_africa:{a:"Earth Globe Europe-Africa",b:"1F30D",j:["globe","world","international"],k:[5,32],o:2},atm:{a:"Automated Teller Machine",b:"1F3E7",j:["money","sales","cash","blue-square","payment","bank"],k:[11,1],o:2},melon:{a:"Melon",b:"1F348",j:["fruit","nature","food"],k:[6,32],o:2},triangular_flag_on_post:{a:"Triangular Flag on Post",b:"1F6A9",j:["mark","milestone","place"],k:[35,0],o:2},put_litter_in_its_place:{a:"Put Litter in Its Place Symbol",b:"1F6AE",j:["blue-square","sign","human","info"],k:[35,5],o:2},christmas_tree:{a:"Christmas Tree",b:"1F384",j:["festival","vacation","december","xmas","celebration"],k:[7,35],o:2},monkey:{a:"Monkey",b:"1F412",j:["animal","nature","banana","circus"],k:[11,46],o:2},earth_americas:{a:"Earth Globe Americas",b:"1F30E",j:["globe","world","USA","international"],k:[5,33],o:2},dark_sunglasses:{a:"Dark Sunglasses",b:"1F576-FE0F",c:"1F576",j:["face","cool","accessories"],k:[29,33],o:2},raised_back_of_hand:{a:"Raised Back of Hand",b:"1F91A",j:["fingers","raised","backhand"],k:[37,43],o:4},smiley:{a:"Smiling Face with Open Mouth",b:"1F603",j:["face","happy","joy","haha",":D",":)","smile","funny"],k:[30,38],l:["=)","=-)"],m:":)",o:2},earth_asia:{a:"Earth Globe Asia-Australia",b:"1F30F",j:["globe","world","east","international"],k:[5,34],o:2},crossed_flags:{a:"Crossed Flags",b:"1F38C",j:["japanese","nation","country","border"],k:[7,48],o:2},watermelon:{a:"Watermelon",b:"1F349",j:["fruit","food","picnic","summer"],k:[6,33],o:2},goggles:{a:"Goggles",b:"1F97D",k:[42,15],o:11},raised_hand_with_fingers_splayed:{a:"Raised Hand with Fingers Splayed",b:"1F590-FE0F",c:"1F590",j:["hand","fingers","palm"],k:[29,48],o:2},smile:{a:"Smiling Face with Open Mouth and Smiling Eyes",b:"1F604",j:["face","happy","joy","funny","haha","laugh","like",":D",":)"],k:[30,39],l:["C:","c:",":D",":-D"],m:":)",o:2},potable_water:{a:"Potable Water Symbol",b:"1F6B0",j:["blue-square","liquid","restroom","cleaning","faucet"],k:[35,7],o:2},fireworks:{a:"Fireworks",b:"1F386",j:["photo","festival","carnival","congratulations"],k:[7,42],o:2},gorilla:{a:"Gorilla",b:"1F98D",j:["animal","nature","circus"],k:[42,31],o:4},lab_coat:{a:"Lab Coat",b:"1F97C",k:[42,14],o:11},tangerine:{a:"Tangerine",b:"1F34A",j:["food","fruit","nature","orange"],k:[6,34],o:2},wheelchair:{a:"Wheelchair Symbol",b:"267F",j:["blue-square","disabled","a11y","accessibility"],k:[53,40],o:2},waving_black_flag:{a:"Waving Black Flag",b:"1F3F4",k:[11,17],o:2},orangutan:{a:"Orangutan",b:"1F9A7",k:[42,55],o:12},sparkler:{a:"Firework Sparkler",b:"1F387",j:["stars","night","shine"],k:[7,43],o:2},globe_with_meridians:{a:"Globe with Meridians",b:"1F310",j:["earth","international","world","internet","interweb","i18n"],k:[5,35],o:2},grin:{a:"Grinning Face with Smiling Eyes",b:"1F601",j:["face","happy","smile","joy","kawaii"],k:[30,36],o:2},hand:{a:"Raised Hand",b:"270B",k:[54,49],n:["raised_hand"],o:2},firecracker:{a:"Firecracker",b:"1F9E8",k:[51,27],o:11},lemon:{a:"Lemon",b:"1F34B",j:["fruit","nature"],k:[6,35],o:2},dog:{a:"Dog Face",b:"1F436",j:["animal","friend","nature","woof","puppy","pet","faithful"],k:[12,26],o:2},mens:{a:"Mens Symbol",b:"1F6B9",j:["toilet","restroom","wc","blue-square","gender","male"],k:[36,10],o:2},"spock-hand":{a:"Raised Hand with Part Between Middle and Ring Fingers",b:"1F596",k:[30,3],o:2},world_map:{a:"World Map",b:"1F5FA-FE0F",c:"1F5FA",j:["location","direction"],k:[30,29],o:2},laughing:{a:"Smiling Face with Open Mouth and Tightly-Closed Eyes",b:"1F606",j:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],k:[30,41],l:[":>",":->"],n:["satisfied"],o:2},waving_white_flag:{a:"Waving White Flag",b:"1F3F3-FE0F",c:"1F3F3",k:[11,12],o:2},safety_vest:{a:"Safety Vest",b:"1F9BA",k:[43,54],o:12},sweat_smile:{a:"Smiling Face with Open Mouth and Cold Sweat",b:"1F605",j:["face","hot","happy","laugh","sweat","smile","relief"],k:[30,40],o:2},sparkles:{a:"Sparkles",b:"2728",j:["stars","shine","shiny","cool","awesome","good","magic"],k:[55,16],o:2},banana:{a:"Banana",b:"1F34C",j:["fruit","food","monkey"],k:[6,36],o:2},"rainbow-flag":{a:"Rainbow Flag",b:"1F3F3-FE0F-200D-1F308",c:"1F3F3-200D-1F308",k:[11,11],o:4},ok_hand:{a:"Ok Hand Sign",b:"1F44C",j:["fingers","limbs","perfect","ok","okay"],k:[13,32],o:2},japan:{a:"Silhouette of Japan",b:"1F5FE",j:["nation","country","japanese","asia"],k:[30,33],o:2},dog2:{a:"Dog",b:"1F415",j:["animal","nature","friend","doge","pet","faithful"],k:[11,50],o:2},womens:{a:"Womens Symbol",b:"1F6BA",j:["purple-square","woman","female","toilet","loo","restroom","gender"],k:[36,11],o:2},necktie:{a:"Necktie",b:"1F454",j:["shirt","suitup","formal","fashion","cloth","business"],k:[14,8],o:2},pirate_flag:{a:"Pirate Flag",b:"1F3F4-200D-2620-FE0F",c:"1F3F4-200D-2620",k:[11,13],o:11},guide_dog:{a:"Guide Dog",b:"1F9AE",k:[43,2],o:12},restroom:{a:"Restroom",b:"1F6BB",j:["blue-square","toilet","refresh","wc","gender"],k:[36,12],o:2},compass:{a:"Compass",b:"1F9ED",k:[51,32],o:11},rolling_on_the_floor_laughing:{a:"Rolling on the Floor Laughing",b:"1F923",k:[38,20],o:4},balloon:{a:"Balloon",b:"1F388",j:["party","celebration","birthday","circus"],k:[7,44],o:2},pinching_hand:{a:"Pinching Hand",b:"1F90F",k:[37,17],o:12},pineapple:{a:"Pineapple",b:"1F34D",j:["fruit","nature","food"],k:[6,37],o:2},shirt:{a:"T-Shirt",b:"1F455",k:[14,9],n:["tshirt"],o:2},service_dog:{a:"Service Dog",b:"1F415-200D-1F9BA",k:[11,49],o:12},baby_symbol:{a:"Baby Symbol",b:"1F6BC",j:["orange-square","child"],k:[36,13],o:2},joy:{a:"Face with Tears of Joy",b:"1F602",j:["face","cry","tears","weep","happy","happytears","haha"],k:[30,37],o:2},tada:{a:"Party Popper",b:"1F389",j:["party","congratulations","birthday","magic","circus","celebration"],k:[7,45],o:2},mango:{a:"Mango",b:"1F96D",k:[42,3],o:11},v:{a:"Victory Hand",b:"270C-FE0F",c:"270C",j:["fingers","ohyeah","hand","peace","victory","two"],k:[54,55],o:2},snow_capped_mountain:{a:"Snow Capped Mountain",b:"1F3D4-FE0F",c:"1F3D4",k:[10,39],o:2},"flag-ac":{a:"Ascension Island Flag",b:"1F1E6-1F1E8",k:[0,31],o:2},jeans:{a:"Jeans",b:"1F456",j:["fashion","shopping"],k:[14,10],o:2},poodle:{a:"Poodle",b:"1F429",j:["dog","animal","101","nature","pet"],k:[12,13],o:2},crossed_fingers:{a:"Hand with Index and Middle Fingers Crossed",b:"1F91E",j:["good","lucky"],k:[38,5],n:["hand_with_index_and_middle_fingers_crossed"],o:4},"flag-ad":{a:"Andorra Flag",b:"1F1E6-1F1E9",k:[0,32],o:2},slightly_smiling_face:{a:"Slightly Smiling Face",b:"1F642",j:["face","smile"],k:[31,44],l:[":)","(:",":-)"],o:2},apple:{a:"Red Apple",b:"1F34E",j:["fruit","mac","school"],k:[6,38],o:2},wc:{a:"Water Closet",b:"1F6BE",j:["toilet","restroom","blue-square"],k:[36,15],o:2},scarf:{a:"Scarf",b:"1F9E3",k:[51,22],o:5},mountain:{a:"Mountain",b:"26F0-FE0F",c:"26F0",j:["photo","nature","environment"],k:[54,11],o:2},confetti_ball:{a:"Confetti Ball",b:"1F38A",j:["festival","party","birthday","circus"],k:[7,46],o:2},i_love_you_hand_sign:{a:"I Love You Hand Sign",b:"1F91F",k:[38,11],o:5},wolf:{a:"Wolf Face",b:"1F43A",j:["animal","nature","wild"],k:[12,30],o:2},gloves:{a:"Gloves",b:"1F9E4",k:[51,23],o:5},"flag-ae":{a:"United Arab Emirates Flag",b:"1F1E6-1F1EA",k:[0,33],o:2},upside_down_face:{a:"Upside-Down Face",b:"1F643",j:["face","flipped","silly","smile"],k:[31,45],o:2},green_apple:{a:"Green Apple",b:"1F34F",j:["fruit","nature"],k:[6,39],o:2},passport_control:{a:"Passport Control",b:"1F6C2",j:["custom","blue-square"],k:[36,24],o:2},volcano:{a:"Volcano",b:"1F30B",j:["photo","nature","disaster"],k:[5,30],o:2},tanabata_tree:{a:"Tanabata Tree",b:"1F38B",j:["plant","nature","branch","summer"],k:[7,47],o:2},customs:{a:"Customs",b:"1F6C3",j:["passport","border","blue-square"],k:[36,25],o:2},coat:{a:"Coat",b:"1F9E5",k:[51,24],o:5},wink:{a:"Winking Face",b:"1F609",j:["face","happy","mischievous","secret",";)","smile","eye"],k:[30,44],l:[";)",";-)"],m:";)",o:2},bamboo:{a:"Pine Decoration",b:"1F38D",j:["plant","nature","vegetable","panda","pine_decoration"],k:[7,49],o:2},"flag-af":{a:"Afghanistan Flag",b:"1F1E6-1F1EB",k:[0,34],o:2},fox_face:{a:"Fox Face",b:"1F98A",j:["animal","nature","face"],k:[42,28],o:4},pear:{a:"Pear",b:"1F350",j:["fruit","nature","food"],k:[6,40],o:2},mount_fuji:{a:"Mount Fuji",b:"1F5FB",j:["photo","mountain","nature","japanese"],k:[30,30],o:2},the_horns:{a:"Sign of the Horns",b:"1F918",k:[37,31],n:["sign_of_the_horns"],o:2},call_me_hand:{a:"Call Me Hand",b:"1F919",j:["hands","gesture"],k:[37,37],o:4},"flag-ag":{a:"Antigua & Barbuda Flag",b:"1F1E6-1F1EC",k:[0,35],o:2},raccoon:{a:"Raccoon",b:"1F99D",k:[42,47],o:11},dolls:{a:"Japanese Dolls",b:"1F38E",j:["japanese","toy","kimono"],k:[7,50],o:2},blush:{a:"Smiling Face with Smiling Eyes",b:"1F60A",j:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],k:[30,45],m:":)",o:2},peach:{a:"Peach",b:"1F351",j:["fruit","nature","food"],k:[6,41],o:2},baggage_claim:{a:"Baggage Claim",b:"1F6C4",j:["blue-square","airport","transport"],k:[36,26],o:2},socks:{a:"Socks",b:"1F9E6",k:[51,25],o:5},camping:{a:"Camping",b:"1F3D5-FE0F",c:"1F3D5",j:["photo","outdoors","tent"],k:[10,40],o:2},dress:{a:"Dress",b:"1F457",j:["clothes","fashion","shopping"],k:[14,11],o:2},beach_with_umbrella:{a:"Beach with Umbrella",b:"1F3D6-FE0F",c:"1F3D6",k:[10,41],o:2},cherries:{a:"Cherries",b:"1F352",j:["food","fruit"],k:[6,42],o:2},cat:{a:"Cat Face",b:"1F431",j:["animal","meow","nature","pet","kitten"],k:[12,21],o:2},point_left:{a:"White Left Pointing Backhand Index",b:"1F448",j:["direction","fingers","hand","left"],k:[13,8],o:2},left_luggage:{a:"Left Luggage",b:"1F6C5",j:["blue-square","travel"],k:[36,27],o:2},"flag-ai":{a:"Anguilla Flag",b:"1F1E6-1F1EE",k:[0,36],o:2},innocent:{a:"Smiling Face with Halo",b:"1F607",j:["face","angel","heaven","halo"],k:[30,42],o:2},flags:{a:"Carp Streamer",b:"1F38F",j:["fish","japanese","koinobori","carp","banner"],k:[7,51],o:2},warning:{a:"Warning Sign",b:"26A0-FE0F",c:"26A0",j:["exclamation","wip","alert","error","problem","issue"],k:[53,50],o:2},strawberry:{a:"Strawberry",b:"1F353",j:["fruit","food","nature"],k:[6,43],o:2},point_right:{a:"White Right Pointing Backhand Index",b:"1F449",j:["fingers","hand","direction","right"],k:[13,14],o:2},desert:{a:"Desert",b:"1F3DC-FE0F",c:"1F3DC",j:["photo","warm","saharah"],k:[10,47],o:2},kimono:{a:"Kimono",b:"1F458",j:["dress","fashion","women","female","japanese"],k:[14,12],o:2},"flag-al":{a:"Albania Flag",b:"1F1E6-1F1F1",k:[0,37],o:2},wind_chime:{a:"Wind Chime",b:"1F390",j:["nature","ding","spring","bell"],k:[7,52],o:2},smiling_face_with_3_hearts:{a:"Smiling Face with Smiling Eyes and Three Hearts",b:"1F970",k:[42,6],o:11},cat2:{a:"Cat",b:"1F408",j:["animal","meow","pet","cats"],k:[11,36],o:2},rice_scene:{a:"Moon Viewing Ceremony",b:"1F391",j:["photo","japan","asia","tsukimi"],k:[7,53],o:2},heart_eyes:{a:"Smiling Face with Heart-Shaped Eyes",b:"1F60D",j:["face","love","like","affection","valentines","infatuation","crush","heart"],k:[30,48],o:2},sari:{a:"Sari",b:"1F97B",k:[42,13],o:12},"flag-am":{a:"Armenia Flag",b:"1F1E6-1F1F2",k:[0,38],o:2},lion_face:{a:"Lion Face",b:"1F981",k:[42,19],o:2},desert_island:{a:"Desert Island",b:"1F3DD-FE0F",c:"1F3DD",j:["photo","tropical","mojito"],k:[10,48],o:2},point_up_2:{a:"White Up Pointing Backhand Index",b:"1F446",j:["fingers","hand","direction","up"],k:[12,53],o:2},kiwifruit:{a:"Kiwifruit",b:"1F95D",k:[41,44],o:4},children_crossing:{a:"Children Crossing",b:"1F6B8",j:["school","warning","danger","sign","driving","yellow-diamond"],k:[36,9],o:2},national_park:{a:"National Park",b:"1F3DE-FE0F",c:"1F3DE",j:["photo","environment","nature"],k:[10,49],o:2},no_entry:{a:"No Entry",b:"26D4",j:["limit","security","privacy","bad","denied","stop","circle"],k:[54,8],o:2},"one-piece_swimsuit":{a:"One-Piece Swimsuit",b:"1FA71",k:[51,52],o:12},tiger:{a:"Tiger Face",b:"1F42F",j:["animal","cat","danger","wild","nature","roar"],k:[12,19],o:2},red_envelope:{a:"Red Gift Envelope",b:"1F9E7",k:[51,26],o:11},"star-struck":{a:"Grinning Face with Star Eyes",b:"1F929",k:[38,43],n:["grinning_face_with_star_eyes"],o:5},middle_finger:{a:"Reversed Hand with Middle Finger Extended",b:"1F595",k:[29,54],n:["reversed_hand_with_middle_finger_extended"],o:2},"flag-ao":{a:"Angola Flag",b:"1F1E6-1F1F4",k:[0,39],o:2},tomato:{a:"Tomato",b:"1F345",j:["fruit","vegetable","nature","food"],k:[6,29],o:2},coconut:{a:"Coconut",b:"1F965",k:[41,52],o:5},ribbon:{a:"Ribbon",b:"1F380",j:["decoration","pink","girl","bowtie"],k:[7,31],o:2},no_entry_sign:{a:"No Entry Sign",b:"1F6AB",j:["forbid","stop","limit","denied","disallow","circle"],k:[35,2],o:2},point_down:{a:"White Down Pointing Backhand Index",b:"1F447",j:["fingers","hand","direction","down"],k:[13,2],o:2},"flag-aq":{a:"Antarctica Flag",b:"1F1E6-1F1F6",k:[0,40],o:2},briefs:{a:"Briefs",b:"1FA72",k:[51,53],o:12},kissing_heart:{a:"Face Throwing a Kiss",b:"1F618",j:["face","love","like","affection","valentines","infatuation","kiss"],k:[31,2],l:[":*",":-*"],o:2},tiger2:{a:"Tiger",b:"1F405",j:["animal","nature","roar"],k:[11,33],o:2},stadium:{a:"Stadium",b:"1F3DF-FE0F",c:"1F3DF",j:["photo","place","sports","concert","venue"],k:[10,50],o:2},leopard:{a:"Leopard",b:"1F406",j:["animal","nature"],k:[11,34],o:2},no_bicycles:{a:"No Bicycles",b:"1F6B3",j:["cyclist","prohibited","circle"],k:[35,10],o:2},kissing:{a:"Kissing Face",b:"1F617",j:["love","like","face","3","valentines","infatuation","kiss"],k:[31,1],o:2},"flag-ar":{a:"Argentina Flag",b:"1F1E6-1F1F7",k:[0,41],o:2},avocado:{a:"Avocado",b:"1F951",j:["fruit","food"],k:[41,32],o:4},point_up:{a:"White Up Pointing Index",b:"261D-FE0F",c:"261D",j:["hand","fingers","direction","up"],k:[53,2],o:2},gift:{a:"Wrapped Present",b:"1F381",j:["present","birthday","christmas","xmas"],k:[7,32],o:2},classical_building:{a:"Classical Building",b:"1F3DB-FE0F",c:"1F3DB",j:["art","culture","history"],k:[10,46],o:2},shorts:{a:"Shorts",b:"1FA73",k:[51,54],o:12},"+1":{a:"Thumbs Up Sign",b:"1F44D",j:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],k:[13,38],n:["thumbsup"],o:2},horse:{a:"Horse Face",b:"1F434",j:["animal","brown","nature"],k:[12,24],o:2},bikini:{a:"Bikini",b:"1F459",j:["swimming","female","woman","girl","fashion","beach","summer"],k:[14,13],o:2},no_smoking:{a:"No Smoking Symbol",b:"1F6AD",j:["cigarette","blue-square","smell","smoke"],k:[35,4],o:2},eggplant:{a:"Aubergine",b:"1F346",j:["vegetable","nature","food","aubergine"],k:[6,30],o:2},"flag-as":{a:"American Samoa Flag",b:"1F1E6-1F1F8",k:[0,42],o:2},reminder_ribbon:{a:"Reminder Ribbon",b:"1F397-FE0F",c:"1F397",j:["sports","cause","support","awareness"],k:[8,0],o:2},building_construction:{a:"Building Construction",b:"1F3D7-FE0F",c:"1F3D7",j:["wip","working","progress"],k:[10,42],o:2},relaxed:{a:"White Smiling Face",b:"263A-FE0F",c:"263A",j:["face","blush","massage","happiness"],k:[53,17],o:2},kissing_closed_eyes:{a:"Kissing Face with Closed Eyes",b:"1F61A",j:["face","love","like","affection","valentines","infatuation","kiss"],k:[31,4],o:2},"-1":{a:"Thumbs Down Sign",b:"1F44E",j:["thumbsdown","no","dislike","hand"],k:[13,44],n:["thumbsdown"],o:2},admission_tickets:{a:"Admission Tickets",b:"1F39F-FE0F",c:"1F39F",k:[8,5],o:2},"flag-at":{a:"Austria Flag",b:"1F1E6-1F1F9",k:[0,43],o:2},womans_clothes:{a:"Womans Clothes",b:"1F45A",j:["fashion","shopping_bags","female"],k:[14,14],o:2},do_not_litter:{a:"Do Not Litter Symbol",b:"1F6AF",j:["trash","bin","garbage","circle"],k:[35,6],o:2},potato:{a:"Potato",b:"1F954",j:["food","tuber","vegatable","starch"],k:[41,35],o:4},racehorse:{a:"Horse",b:"1F40E",j:["animal","gamble","luck"],k:[11,42],o:2},bricks:{a:"Brick",b:"1F9F1",k:[51,36],o:11},fist:{a:"Raised Fist",b:"270A",j:["fingers","hand","grasp"],k:[54,43],o:2},house_buildings:{a:"House Buildings",b:"1F3D8-FE0F",c:"1F3D8",k:[10,43],o:2},carrot:{a:"Carrot",b:"1F955",j:["vegetable","food","orange"],k:[41,36],o:4},ticket:{a:"Ticket",b:"1F3AB",j:["event","concert","pass"],k:[8,17],o:2},"flag-au":{a:"Australia Flag",b:"1F1E6-1F1FA",k:[0,44],o:2},"non-potable_water":{a:"Non-Potable Water Symbol",b:"1F6B1",j:["drink","faucet","tap","circle"],k:[35,8],o:2},purse:{a:"Purse",b:"1F45B",j:["fashion","accessories","money","sales","shopping"],k:[14,15],o:2},unicorn_face:{a:"Unicorn Face",b:"1F984",k:[42,22],o:2},kissing_smiling_eyes:{a:"Kissing Face with Smiling Eyes",b:"1F619",j:["face","affection","valentines","infatuation","kiss"],k:[31,3],o:2},facepunch:{a:"Fisted Hand Sign",b:"1F44A",j:["angry","violence","fist","hit","attack","hand"],k:[13,20],n:["punch"],o:2},medal:{a:"Medal",b:"1F396-FE0F",c:"1F396",k:[7,56],o:2},zebra_face:{a:"Zebra Face",b:"1F993",k:[42,37],o:5},handbag:{a:"Handbag",b:"1F45C",j:["fashion","accessory","accessories","shopping"],k:[14,16],o:2},derelict_house_building:{a:"Derelict House Building",b:"1F3DA-FE0F",c:"1F3DA",k:[10,45],o:2},yum:{a:"Face Savouring Delicious Food",b:"1F60B",j:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],k:[30,46],o:2},corn:{a:"Ear of Maize",b:"1F33D",j:["food","vegetable","plant"],k:[6,21],o:2},"flag-aw":{a:"Aruba Flag",b:"1F1E6-1F1FC",k:[0,45],o:2},no_pedestrians:{a:"No Pedestrians",b:"1F6B7",j:["rules","crossing","walking","circle"],k:[36,8],o:2},house:{a:"House Building",b:"1F3E0",j:["building","home"],k:[10,51],o:2},hot_pepper:{a:"Hot Pepper",b:"1F336-FE0F",c:"1F336",j:["food","spicy","chilli","chili"],k:[6,14],o:2},"flag-ax":{a:"Åland Islands Flag",b:"1F1E6-1F1FD",k:[0,46],o:2},trophy:{a:"Trophy",b:"1F3C6",j:["win","award","contest","place","ftw","ceremony"],k:[9,26],o:2},deer:{a:"Deer",b:"1F98C",j:["animal","nature","horns","venison"],k:[42,30],o:4},"left-facing_fist":{a:"Left-Facing Fist",b:"1F91B",k:[37,49],o:4},stuck_out_tongue:{a:"Face with Stuck-out Tongue",b:"1F61B",j:["face","prank","childish","playful","mischievous","smile","tongue"],k:[31,5],l:[":p",":-p",":P",":-P",":b",":-b"],m:":p",o:2},pouch:{a:"Pouch",b:"1F45D",j:["bag","accessories","shopping"],k:[14,17],o:2},no_mobile_phones:{a:"No Mobile Phones",b:"1F4F5",j:["iphone","mute","circle"],k:[27,18],o:2},stuck_out_tongue_winking_eye:{a:"Face with Stuck-out Tongue and Winking Eye",b:"1F61C",j:["face","prank","childish","playful","mischievous","smile","wink","tongue"],k:[31,6],l:[";p",";-p",";b",";-b",";P",";-P"],m:";p",o:2},sports_medal:{a:"Sports Medal",b:"1F3C5",k:[9,25],o:2},cucumber:{a:"Cucumber",b:"1F952",j:["fruit","food","pickle"],k:[41,33],o:4},cow:{a:"Cow Face",b:"1F42E",j:["beef","ox","animal","nature","moo","milk"],k:[12,18],o:2},underage:{a:"No One Under Eighteen Symbol",b:"1F51E",j:["18","drink","pub","night","minor","circle"],k:[28,1],o:2},"flag-az":{a:"Azerbaijan Flag",b:"1F1E6-1F1FF",k:[0,47],o:2},shopping_bags:{a:"Shopping Bags",b:"1F6CD-FE0F",c:"1F6CD",k:[36,35],o:2},"right-facing_fist":{a:"Right-Facing Fist",b:"1F91C",k:[37,55],o:4},house_with_garden:{a:"House with Garden",b:"1F3E1",j:["home","plant","nature"],k:[10,52],o:2},clap:{a:"Clapping Hands Sign",b:"1F44F",j:["hands","praise","applause","congrats","yay"],k:[13,50],o:2},leafy_green:{a:"Leafy Green",b:"1F96C",k:[42,2],o:11},office:{a:"Office Building",b:"1F3E2",j:["building","bureau","work"],k:[10,53],o:2},"flag-ba":{a:"Bosnia & Herzegovina Flag",b:"1F1E7-1F1E6",k:[0,48],o:2},zany_face:{a:"Grinning Face with One Large and One Small Eye",b:"1F92A",k:[38,44],n:["grinning_face_with_one_large_and_one_small_eye"],o:5},first_place_medal:{a:"First Place Medal",b:"1F947",k:[41,22],o:4},ox:{a:"Ox",b:"1F402",j:["animal","cow","beef"],k:[11,30],o:2},school_satchel:{a:"School Satchel",b:"1F392",j:["student","education","bag","backpack"],k:[7,54],o:2},radioactive_sign:{a:"Radioactive Sign",b:"2622-FE0F",c:"2622",k:[53,9],o:2},second_place_medal:{a:"Second Place Medal",b:"1F948",k:[41,23],o:4},stuck_out_tongue_closed_eyes:{a:"Face with Stuck-out Tongue and Tightly-Closed Eyes",b:"1F61D",j:["face","prank","playful","mischievous","smile","tongue"],k:[31,7],o:2},broccoli:{a:"Broccoli",b:"1F966",k:[41,53],o:5},biohazard_sign:{a:"Biohazard Sign",b:"2623-FE0F",c:"2623",k:[53,10],o:2},mans_shoe:{a:"Mans Shoe",b:"1F45E",j:["fashion","male"],k:[14,18],n:["shoe"],o:2},raised_hands:{a:"Person Raising Both Hands in Celebration",b:"1F64C",j:["gesture","hooray","yea","celebration","hands"],k:[33,8],o:2},post_office:{a:"Japanese Post Office",b:"1F3E3",j:["building","envelope","communication"],k:[10,54],o:2},"flag-bb":{a:"Barbados Flag",b:"1F1E7-1F1E7",k:[0,49],o:2},water_buffalo:{a:"Water Buffalo",b:"1F403",j:["animal","nature","ox","cow"],k:[11,31],o:2},third_place_medal:{a:"Third Place Medal",b:"1F949",k:[41,24],o:4},european_post_office:{a:"European Post Office",b:"1F3E4",j:["building","email"],k:[10,55],o:2},athletic_shoe:{a:"Athletic Shoe",b:"1F45F",j:["shoes","sports","sneakers"],k:[14,19],o:2},arrow_up:{a:"Upwards Black Arrow",b:"2B06-FE0F",c:"2B06",j:["blue-square","continue","top","direction"],k:[55,38],o:2},cow2:{a:"Cow",b:"1F404",j:["beef","ox","animal","nature","moo","milk"],k:[11,32],o:2},open_hands:{a:"Open Hands Sign",b:"1F450",j:["fingers","butterfly","hands","open"],k:[13,56],o:2},garlic:{a:"Garlic",b:"1F9C4",k:[44,12],o:12},money_mouth_face:{a:"Money-Mouth Face",b:"1F911",j:["face","rich","dollar","money"],k:[37,24],o:2},"flag-bd":{a:"Bangladesh Flag",b:"1F1E7-1F1E9",k:[0,50],o:2},soccer:{a:"Soccer Ball",b:"26BD",j:["sports","football"],k:[53,56],o:2},hugging_face:{a:"Hugging Face",b:"1F917",k:[37,30],o:2},onion:{a:"Onion",b:"1F9C5",k:[44,13],o:12},arrow_upper_right:{a:"North East Arrow",b:"2197-FE0F",c:"2197",j:["blue-square","point","direction","diagonal","northeast"],k:[52,17],o:2},palms_up_together:{a:"Palms Up Together",b:"1F932",k:[39,5],o:5},pig:{a:"Pig Face",b:"1F437",j:["animal","oink","nature"],k:[12,27],o:2},hospital:{a:"Hospital",b:"1F3E5",j:["building","health","surgery","doctor"],k:[10,56],o:2},hiking_boot:{a:"Hiking Boot",b:"1F97E",k:[42,16],o:11},"flag-be":{a:"Belgium Flag",b:"1F1E7-1F1EA",k:[0,51],o:2},"flag-bf":{a:"Burkina Faso Flag",b:"1F1E7-1F1EB",k:[0,52],o:2},mushroom:{a:"Mushroom",b:"1F344",j:["plant","vegetable"],k:[6,28],o:2},pig2:{a:"Pig",b:"1F416",j:["animal","nature"],k:[11,51],o:2},baseball:{a:"Baseball",b:"26BE",j:["sports","balls"],k:[54,0],o:2},face_with_hand_over_mouth:{a:"Smiling Face with Smiling Eyes and Hand Covering Mouth",b:"1F92D",k:[38,47],n:["smiling_face_with_smiling_eyes_and_hand_covering_mouth"],o:5},handshake:{a:"Handshake",b:"1F91D",j:["agreement","shake"],k:[38,4],o:4},womans_flat_shoe:{a:"Flat Shoe",b:"1F97F",k:[42,17],o:11},bank:{a:"Bank",b:"1F3E6",j:["building","money","sales","cash","business","enterprise"],k:[11,0],o:2},arrow_right:{a:"Black Rightwards Arrow",b:"27A1-FE0F",c:"27A1",j:["blue-square","next"],k:[55,32],o:2},peanuts:{a:"Peanuts",b:"1F95C",j:["food","nut"],k:[41,43],o:4},shushing_face:{a:"Face with Finger Covering Closed Lips",b:"1F92B",k:[38,45],n:["face_with_finger_covering_closed_lips"],o:5},pray:{a:"Person with Folded Hands",b:"1F64F",j:["please","hope","wish","namaste","highfive"],k:[33,50],o:2},softball:{a:"Softball",b:"1F94E",k:[41,29],o:11},high_heel:{a:"High-Heeled Shoe",b:"1F460",j:["fashion","shoes","female","pumps","stiletto"],k:[14,20],o:2},"flag-bg":{a:"Bulgaria Flag",b:"1F1E7-1F1EC",k:[0,53],o:2},arrow_lower_right:{a:"South East Arrow",b:"2198-FE0F",c:"2198",j:["blue-square","direction","diagonal","southeast"],k:[52,18],o:2},hotel:{a:"Hotel",b:"1F3E8",j:["building","accomodation","checkin"],k:[11,2],o:2},boar:{a:"Boar",b:"1F417",j:["animal","nature"],k:[11,52],o:2},sandal:{a:"Womans Sandal",b:"1F461",j:["shoes","fashion","flip flops"],k:[14,21],o:2},"flag-bh":{a:"Bahrain Flag",b:"1F1E7-1F1ED",k:[0,54],o:2},arrow_down:{a:"Downwards Black Arrow",b:"2B07-FE0F",c:"2B07",j:["blue-square","direction","bottom"],k:[55,39],o:2},thinking_face:{a:"Thinking Face",b:"1F914",k:[37,27],o:2},writing_hand:{a:"Writing Hand",b:"270D-FE0F",c:"270D",j:["lower_left_ballpoint_pen","stationery","write","compose"],k:[55,4],o:2},chestnut:{a:"Chestnut",b:"1F330",j:["food","squirrel"],k:[6,8],o:2},basketball:{a:"Basketball and Hoop",b:"1F3C0",j:["sports","balls","NBA"],k:[8,38],o:2},pig_nose:{a:"Pig Nose",b:"1F43D",j:["animal","oink"],k:[12,33],o:2},love_hotel:{a:"Love Hotel",b:"1F3E9",j:["like","affection","dating"],k:[11,3],o:2},nail_care:{a:"Nail Polish",b:"1F485",j:["beauty","manicure","finger","fashion","nail"],k:[24,33],o:2},volleyball:{a:"Volleyball",b:"1F3D0",j:["sports","balls"],k:[10,35],o:2},"flag-bi":{a:"Burundi Flag",b:"1F1E7-1F1EE",k:[0,55],o:2},arrow_lower_left:{a:"South West Arrow",b:"2199-FE0F",c:"2199",j:["blue-square","direction","diagonal","southwest"],k:[52,19],o:2},ram:{a:"Ram",b:"1F40F",j:["animal","sheep","nature"],k:[11,43],o:2},ballet_shoes:{a:"Ballet Shoes",b:"1FA70",k:[51,51],o:12},zipper_mouth_face:{a:"Zipper-Mouth Face",b:"1F910",j:["face","sealed","zipper","secret"],k:[37,23],o:2},bread:{a:"Bread",b:"1F35E",j:["food","wheat","breakfast","toast"],k:[6,54],o:2},convenience_store:{a:"Convenience Store",b:"1F3EA",j:["building","shopping","groceries"],k:[11,4],o:2},boot:{a:"Womans Boots",b:"1F462",j:["shoes","fashion"],k:[14,22],o:2},sheep:{a:"Sheep",b:"1F411",j:["animal","nature","wool","shipit"],k:[11,45],o:2},face_with_raised_eyebrow:{a:"Face with One Eyebrow Raised",b:"1F928",k:[38,42],n:["face_with_one_eyebrow_raised"],o:5},"flag-bj":{a:"Benin Flag",b:"1F1E7-1F1EF",k:[0,56],o:2},arrow_left:{a:"Leftwards Black Arrow",b:"2B05-FE0F",c:"2B05",j:["blue-square","previous","back"],k:[55,37],o:2},selfie:{a:"Selfie",b:"1F933",j:["camera","phone"],k:[39,11],o:4},croissant:{a:"Croissant",b:"1F950",j:["food","bread","french"],k:[41,31],o:4},school:{a:"School",b:"1F3EB",j:["building","student","education","learn","teach"],k:[11,5],o:2},football:{a:"American Football",b:"1F3C8",j:["sports","balls","NFL"],k:[9,33],o:2},goat:{a:"Goat",b:"1F410",j:["animal","nature"],k:[11,44],o:2},department_store:{a:"Department Store",b:"1F3EC",j:["building","shopping","mall"],k:[11,6],o:2},"flag-bl":{a:"St. Barthélemy Flag",b:"1F1E7-1F1F1",k:[1,0],o:2},crown:{a:"Crown",b:"1F451",j:["king","kod","leader","royalty","lord"],k:[14,5],o:2},arrow_upper_left:{a:"North West Arrow",b:"2196-FE0F",c:"2196",j:["blue-square","point","direction","diagonal","northwest"],k:[52,16],o:2},neutral_face:{a:"Neutral Face",b:"1F610",j:["indifference","meh",":|","neutral"],k:[30,51],l:[":|",":-|"],o:2},rugby_football:{a:"Rugby Football",b:"1F3C9",j:["sports","team"],k:[9,34],o:2},muscle:{a:"Flexed Biceps",b:"1F4AA",j:["arm","flex","hand","summer","strong","biceps"],k:[25,52],o:2},baguette_bread:{a:"Baguette Bread",b:"1F956",j:["food","bread","french"],k:[41,37],o:4},expressionless:{a:"Expressionless Face",b:"1F611",j:["face","indifferent","-_-","meh","deadpan"],k:[30,52],o:2},womans_hat:{a:"Womans Hat",b:"1F452",j:["fashion","accessories","female","lady","spring"],k:[14,6],o:2},pretzel:{a:"Pretzel",b:"1F968",k:[41,55],o:5},mechanical_arm:{a:"Mechanical Arm",b:"1F9BE",k:[44,6],o:12},arrow_up_down:{a:"Up Down Arrow",b:"2195-FE0F",c:"2195",j:["blue-square","direction","way","vertical"],k:[52,15],o:2},dromedary_camel:{a:"Dromedary Camel",b:"1F42A",j:["animal","hot","desert","hump"],k:[12,14],o:2},tennis:{a:"Tennis Racquet and Ball",b:"1F3BE",j:["sports","balls","green"],k:[8,36],o:2},"flag-bm":{a:"Bermuda Flag",b:"1F1E7-1F1F2",k:[1,1],o:2},factory:{a:"Factory",b:"1F3ED",j:["building","industry","pollution","smoke"],k:[11,7],o:2},japanese_castle:{a:"Japanese Castle",b:"1F3EF",j:["photo","building"],k:[11,9],o:2},no_mouth:{a:"Face Without Mouth",b:"1F636",j:["face","hellokitty"],k:[31,32],o:2},mechanical_leg:{a:"Mechanical Leg",b:"1F9BF",k:[44,7],o:12},bagel:{a:"Bagel",b:"1F96F",k:[42,5],o:11},camel:{a:"Bactrian Camel",b:"1F42B",j:["animal","nature","hot","desert","hump"],k:[12,15],o:2},tophat:{a:"Top Hat",b:"1F3A9",j:["magic","gentleman","classy","circus"],k:[8,15],o:2},left_right_arrow:{a:"Left Right Arrow",b:"2194-FE0F",c:"2194",j:["shape","direction","horizontal","sideways"],k:[52,14],o:2},"flag-bn":{a:"Brunei Flag",b:"1F1E7-1F1F3",k:[1,2],o:2},flying_disc:{a:"Flying Disc",b:"1F94F",k:[41,30],o:11},smirk:{a:"Smirking Face",b:"1F60F",j:["face","smile","mean","prank","smug","sarcasm"],k:[30,50],o:2},mortar_board:{a:"Graduation Cap",b:"1F393",j:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],k:[7,55],o:2},european_castle:{a:"European Castle",b:"1F3F0",j:["building","royalty","history"],k:[11,10],o:2},leg:{a:"Leg",b:"1F9B5",k:[43,5],o:11},pancakes:{a:"Pancakes",b:"1F95E",j:["food","breakfast","flapjacks","hotcakes"],k:[41,45],o:4},leftwards_arrow_with_hook:{a:"Leftwards Arrow with Hook",b:"21A9-FE0F",c:"21A9",j:["back","return","blue-square","undo","enter"],k:[52,20],o:2},"flag-bo":{a:"Bolivia Flag",b:"1F1E7-1F1F4",k:[1,3],o:2},bowling:{a:"Bowling",b:"1F3B3",j:["sports","fun","play"],k:[8,25],o:2},llama:{a:"Llama",b:"1F999",k:[42,43],o:11},arrow_right_hook:{a:"Rightwards Arrow with Hook",b:"21AA-FE0F",c:"21AA",j:["blue-square","return","rotate","direction"],k:[52,21],o:2},wedding:{a:"Wedding",b:"1F492",j:["love","like","affection","couple","marriage","bride","groom"],k:[25,28],o:2},"flag-bq":{a:"Caribbean Netherlands Flag",b:"1F1E7-1F1F6",k:[1,4],o:2},foot:{a:"Foot",b:"1F9B6",k:[43,11],o:11},giraffe_face:{a:"Giraffe Face",b:"1F992",k:[42,36],o:5},unamused:{a:"Unamused Face",b:"1F612",j:["indifference","bored","straight face","serious","sarcasm"],k:[30,53],m:":(",o:2},billed_cap:{a:"Billed Cap",b:"1F9E2",k:[51,21],o:5},waffle:{a:"Waffle",b:"1F9C7",k:[44,15],o:12},cricket_bat_and_ball:{a:"Cricket Bat and Ball",b:"1F3CF",k:[10,34],o:2},helmet_with_white_cross:{a:"Helmet with White Cross",b:"26D1-FE0F",c:"26D1",k:[54,6],o:2},ear:{a:"Ear",b:"1F442",j:["face","hear","sound","listen"],k:[12,39],o:2},elephant:{a:"Elephant",b:"1F418",j:["animal","nature","nose","th","circus"],k:[11,53],o:2},cheese_wedge:{a:"Cheese Wedge",b:"1F9C0",k:[44,8],o:2},tokyo_tower:{a:"Tokyo Tower",b:"1F5FC",j:["photo","japanese"],k:[30,31],o:2},arrow_heading_up:{a:"Arrow Pointing Rightwards Then Curving Upwards",b:"2934-FE0F",c:"2934",j:["blue-square","direction","top"],k:[55,35],o:2},field_hockey_stick_and_ball:{a:"Field Hockey Stick and Ball",b:"1F3D1",k:[10,36],o:2},"flag-br":{a:"Brazil Flag",b:"1F1E7-1F1F7",k:[1,5],o:2},face_with_rolling_eyes:{a:"Face with Rolling Eyes",b:"1F644",k:[31,46],o:2},ear_with_hearing_aid:{a:"Ear with Hearing Aid",b:"1F9BB",k:[43,55],o:12},arrow_heading_down:{a:"Arrow Pointing Rightwards Then Curving Downwards",b:"2935-FE0F",c:"2935",j:["blue-square","direction","bottom"],k:[55,36],o:2},ice_hockey_stick_and_puck:{a:"Ice Hockey Stick and Puck",b:"1F3D2",k:[10,37],o:2},meat_on_bone:{a:"Meat on Bone",b:"1F356",j:["good","food","drumstick"],k:[6,46],o:2},prayer_beads:{a:"Prayer Beads",b:"1F4FF",j:["dhikr","religious"],k:[27,27],o:2},statue_of_liberty:{a:"Statue of Liberty",b:"1F5FD",j:["american","newyork"],k:[30,32],o:2},grimacing:{a:"Grimacing Face",b:"1F62C",j:["face","grimace","teeth"],k:[31,22],o:2},"flag-bs":{a:"Bahamas Flag",b:"1F1E7-1F1F8",k:[1,6],o:2},rhinoceros:{a:"Rhinoceros",b:"1F98F",j:["animal","nature","horn"],k:[42,33],o:4},lacrosse:{a:"Lacrosse Stick and Ball",b:"1F94D",k:[41,28],o:11},poultry_leg:{a:"Poultry Leg",b:"1F357",j:["food","meat","drumstick","bird","chicken","turkey"],k:[6,47],o:2},hippopotamus:{a:"Hippopotamus",b:"1F99B",k:[42,45],o:11},nose:{a:"Nose",b:"1F443",j:["smell","sniff"],k:[12,45],o:2},arrows_clockwise:{a:"Clockwise Downwards and Upwards Open Circle Arrows",b:"1F503",j:["sync","cycle","round","repeat"],k:[27,31],o:2},"flag-bt":{a:"Bhutan Flag",b:"1F1E7-1F1F9",k:[1,7],o:2},church:{a:"Church",b:"26EA",j:["building","religion","christ"],k:[54,10],o:2},lipstick:{a:"Lipstick",b:"1F484",j:["female","girl","fashion","woman"],k:[24,32],o:2},lying_face:{a:"Lying Face",b:"1F925",j:["face","lie","pinocchio"],k:[38,22],o:4},arrows_counterclockwise:{a:"Anticlockwise Downwards and Upwards Open Circle Arrows",b:"1F504",j:["blue-square","sync","cycle"],k:[27,32],o:2},"flag-bv":{a:"Bouvet Island Flag",b:"1F1E7-1F1FB",k:[1,8],o:2},cut_of_meat:{a:"Cut of Meat",b:"1F969",k:[41,56],o:5},mosque:{a:"Mosque",b:"1F54C",j:["islam","worship","minaret"],k:[28,36],o:2},ring:{a:"Ring",b:"1F48D",j:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],k:[25,23],o:2},brain:{a:"Brain",b:"1F9E0",k:[51,19],o:5},table_tennis_paddle_and_ball:{a:"Table Tennis Paddle and Ball",b:"1F3D3",k:[10,38],o:2},relieved:{a:"Relieved Face",b:"1F60C",j:["face","relaxed","phew","massage","happiness"],k:[30,47],o:2},mouse:{a:"Mouse Face",b:"1F42D",j:["animal","nature","cheese_wedge","rodent"],k:[12,17],o:2},hindu_temple:{a:"Hindu Temple",b:"1F6D5",k:[36,41],o:12},back:{a:"Back with Leftwards Arrow Above",b:"1F519",j:["arrow","words","return"],k:[27,53],o:2},gem:{a:"Gem Stone",b:"1F48E",j:["blue","ruby","diamond","jewelry"],k:[25,24],o:2},pensive:{a:"Pensive Face",b:"1F614",j:["face","sad","depressed","upset"],k:[30,55],o:2},"flag-bw":{a:"Botswana Flag",b:"1F1E7-1F1FC",k:[1,9],o:2},mouse2:{a:"Mouse",b:"1F401",j:["animal","nature","rodent"],k:[11,29],o:2},bacon:{a:"Bacon",b:"1F953",j:["food","breakfast","pork","pig","meat"],k:[41,34],o:4},tooth:{a:"Tooth",b:"1F9B7",k:[43,17],o:11},badminton_racquet_and_shuttlecock:{a:"Badminton Racquet and Shuttlecock",b:"1F3F8",k:[11,20],o:2},rat:{a:"Rat",b:"1F400",j:["animal","mouse","rodent"],k:[11,28],o:2},synagogue:{a:"Synagogue",b:"1F54D",j:["judaism","worship","temple","jewish"],k:[28,37],o:2},end:{a:"End with Leftwards Arrow Above",b:"1F51A",j:["words","arrow"],k:[27,54],o:2},bone:{a:"Bone",b:"1F9B4",k:[43,4],o:11},boxing_glove:{a:"Boxing Glove",b:"1F94A",j:["sports","fighting"],k:[41,25],o:4},mute:{a:"Speaker with Cancellation Stroke",b:"1F507",j:["sound","volume","silence","quiet"],k:[27,35],o:2},hamburger:{a:"Hamburger",b:"1F354",j:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],k:[6,44],o:2},"flag-by":{a:"Belarus Flag",b:"1F1E7-1F1FE",k:[1,10],o:2},sleepy:{a:"Sleepy Face",b:"1F62A",j:["face","tired","rest","nap"],k:[31,20],o:2},on:{a:"On with Exclamation Mark with Left Right Arrow Above",b:"1F51B",j:["arrow","words"],k:[27,55],o:2},martial_arts_uniform:{a:"Martial Arts Uniform",b:"1F94B",j:["judo","karate","taekwondo"],k:[41,26],o:4},speaker:{a:"Speaker",b:"1F508",j:["sound","volume","silence","broadcast"],k:[27,36],o:2},drooling_face:{a:"Drooling Face",b:"1F924",j:["face"],k:[38,21],o:4},eyes:{a:"Eyes",b:"1F440",j:["look","watch","stalk","peek","see"],k:[12,36],o:2},"flag-bz":{a:"Belize Flag",b:"1F1E7-1F1FF",k:[1,11],o:2},hamster:{a:"Hamster Face",b:"1F439",j:["animal","nature"],k:[12,29],o:2},shinto_shrine:{a:"Shinto Shrine",b:"26E9-FE0F",c:"26E9",j:["temple","japan","kyoto"],k:[54,9],o:2},fries:{a:"French Fries",b:"1F35F",j:["chips","snack","fast food"],k:[6,55],o:2},goal_net:{a:"Goal Net",b:"1F945",j:["sports"],k:[41,21],o:4},kaaba:{a:"Kaaba",b:"1F54B",j:["mecca","mosque","islam"],k:[28,35],o:2},soon:{a:"Soon with Rightwards Arrow Above",b:"1F51C",j:["arrow","words"],k:[27,56],o:2},"flag-ca":{a:"Canada Flag",b:"1F1E8-1F1E6",k:[1,12],o:2},rabbit:{a:"Rabbit Face",b:"1F430",j:["animal","nature","pet","spring","magic","bunny"],k:[12,20],o:2},eye:{a:"Eye",b:"1F441-FE0F",c:"1F441",j:["face","look","see","watch","stare"],k:[12,38],o:2},sleeping:{a:"Sleeping Face",b:"1F634",j:["face","tired","sleepy","night","zzz"],k:[31,30],o:2},pizza:{a:"Slice of Pizza",b:"1F355",j:["food","party"],k:[6,45],o:2},sound:{a:"Speaker with One Sound Wave",b:"1F509",j:["volume","speaker","broadcast"],k:[27,37],o:2},rabbit2:{a:"Rabbit",b:"1F407",j:["animal","nature","pet","magic","spring"],k:[11,35],o:2},fountain:{a:"Fountain",b:"26F2",j:["photo","summer","water","fresh"],k:[54,13],o:2},golf:{a:"Flag in Hole",b:"26F3",j:["sports","business","flag","hole","summer"],k:[54,14],o:2},top:{a:"Top with Upwards Arrow Above",b:"1F51D",j:["words","blue-square"],k:[28,0],o:2},mask:{a:"Face with Medical Mask",b:"1F637",j:["face","sick","ill","disease"],k:[31,33],o:2},"flag-cc":{a:"Cocos (keeling) Islands Flag",b:"1F1E8-1F1E8",k:[1,13],o:2},hotdog:{a:"Hot Dog",b:"1F32D",j:["food","frankfurter"],k:[6,5],o:2},loud_sound:{a:"Speaker with Three Sound Waves",b:"1F50A",j:["volume","noise","noisy","speaker","broadcast"],k:[27,38],o:2},tongue:{a:"Tongue",b:"1F445",j:["mouth","playful"],k:[12,52],o:2},place_of_worship:{a:"Place of Worship",b:"1F6D0",j:["religion","church","temple","prayer"],k:[36,38],o:2},ice_skate:{a:"Ice Skate",b:"26F8-FE0F",c:"26F8",j:["sports"],k:[54,18],o:2},sandwich:{a:"Sandwich",b:"1F96A",k:[42,0],o:5},chipmunk:{a:"Chipmunk",b:"1F43F-FE0F",c:"1F43F",j:["animal","nature","rodent","squirrel"],k:[12,35],o:2},loudspeaker:{a:"Public Address Loudspeaker",b:"1F4E2",j:["volume","sound"],k:[26,56],o:2},lips:{a:"Mouth",b:"1F444",j:["mouth","kiss"],k:[12,51],o:2},"flag-cd":{a:"Congo - Kinshasa Flag",b:"1F1E8-1F1E9",k:[1,14],o:2},tent:{a:"Tent",b:"26FA",j:["photo","camping","outdoors"],k:[54,37],o:2},face_with_thermometer:{a:"Face with Thermometer",b:"1F912",j:["sick","temperature","thermometer","cold","fever"],k:[37,25],o:2},taco:{a:"Taco",b:"1F32E",j:["food","mexican"],k:[6,6],o:2},foggy:{a:"Foggy",b:"1F301",j:["photo","mountain"],k:[5,20],o:2},"flag-cf":{a:"Central African Republic Flag",b:"1F1E8-1F1EB",k:[1,15],o:2},baby:{a:"Baby",b:"1F476",j:["child","boy","girl","toddler"],k:[23,4],o:2},atom_symbol:{a:"Atom Symbol",b:"269B-FE0F",c:"269B",j:["science","physics","chemistry"],k:[53,48],o:2},fishing_pole_and_fish:{a:"Fishing Pole and Fish",b:"1F3A3",j:["food","hobby","summer"],k:[8,9],o:2},hedgehog:{a:"Hedgehog",b:"1F994",k:[42,38],o:5},face_with_head_bandage:{a:"Face with Head-Bandage",b:"1F915",j:["injured","clumsy","bandage","hurt"],k:[37,28],o:2},mega:{a:"Cheering Megaphone",b:"1F4E3",j:["sound","speaker","volume"],k:[27,0],o:2},nauseated_face:{a:"Nauseated Face",b:"1F922",j:["face","vomit","gross","green","sick","throw up","ill"],k:[38,19],o:4},child:{a:"Child",b:"1F9D2",k:[48,16],o:5},"flag-cg":{a:"Congo - Brazzaville Flag",b:"1F1E8-1F1EC",k:[1,16],o:2},bat:{a:"Bat",b:"1F987",j:["animal","nature","blind","vampire"],k:[42,25],o:4},diving_mask:{a:"Diving Mask",b:"1F93F",k:[41,15],o:12},burrito:{a:"Burrito",b:"1F32F",j:["food","mexican"],k:[6,7],o:2},postal_horn:{a:"Postal Horn",b:"1F4EF",j:["instrument","music"],k:[27,12],o:2},night_with_stars:{a:"Night with Stars",b:"1F303",j:["evening","city","downtown"],k:[5,22],o:2},om_symbol:{a:"Om Symbol",b:"1F549-FE0F",c:"1F549",k:[28,33],o:2},star_of_david:{a:"Star of David",b:"2721-FE0F",c:"2721",j:["judaism"],k:[55,15],o:2},boy:{a:"Boy",b:"1F466",j:["man","male","guy","teenager"],k:[14,26],o:2},bell:{a:"Bell",b:"1F514",j:["sound","notification","christmas","xmas","chime"],k:[27,48],o:2},"flag-ch":{a:"Switzerland Flag",b:"1F1E8-1F1ED",k:[1,17],o:2},running_shirt_with_sash:{a:"Running Shirt with Sash",b:"1F3BD",j:["play","pageant"],k:[8,35],o:2},stuffed_flatbread:{a:"Stuffed Flatbread",b:"1F959",j:["food","flatbread","stuffed","gyro"],k:[41,40],o:4},bear:{a:"Bear Face",b:"1F43B",j:["animal","nature","wild"],k:[12,31],o:2},cityscape:{a:"Cityscape",b:"1F3D9-FE0F",c:"1F3D9",j:["photo","night life","urban"],k:[10,44],o:2},face_vomiting:{a:"Face with Open Mouth Vomiting",b:"1F92E",k:[38,48],n:["face_with_open_mouth_vomiting"],o:5},wheel_of_dharma:{a:"Wheel of Dharma",b:"2638-FE0F",c:"2638",j:["hinduism","buddhism","sikhism","jainism"],k:[53,15],o:2},ski:{a:"Ski and Ski Boot",b:"1F3BF",j:["sports","winter","cold","snow"],k:[8,37],o:2},girl:{a:"Girl",b:"1F467",j:["female","woman","teenager"],k:[14,32],o:2},falafel:{a:"Falafel",b:"1F9C6",k:[44,14],o:12},sneezing_face:{a:"Sneezing Face",b:"1F927",j:["face","gesundheit","sneeze","sick","allergy"],k:[38,41],o:4},no_bell:{a:"Bell with Cancellation Stroke",b:"1F515",j:["sound","volume","mute","quiet","silent"],k:[27,49],o:2},koala:{a:"Koala",b:"1F428",j:["animal","nature"],k:[12,12],o:2},sunrise_over_mountains:{a:"Sunrise over Mountains",b:"1F304",j:["view","vacation","photo"],k:[5,23],o:2},"flag-ci":{a:"Côte D’ivoire Flag",b:"1F1E8-1F1EE",k:[1,18],o:2},sunrise:{a:"Sunrise",b:"1F305",j:["morning","view","vacation","photo"],k:[5,24],o:2},yin_yang:{a:"Yin Yang",b:"262F-FE0F",c:"262F",j:["balance"],k:[53,14],o:2},adult:{a:"Adult",b:"1F9D1",k:[48,10],o:5},hot_face:{a:"Overheated Face",b:"1F975",k:[42,10],o:11},musical_score:{a:"Musical Score",b:"1F3BC",j:["treble","clef","compose"],k:[8,34],o:2},sled:{a:"Sled",b:"1F6F7",k:[36,56],o:5},egg:{a:"Egg",b:"1F95A",j:["food","chicken","breakfast"],k:[41,41],o:4},panda_face:{a:"Panda Face",b:"1F43C",j:["animal","nature","panda"],k:[12,32],o:2},"flag-ck":{a:"Cook Islands Flag",b:"1F1E8-1F1F0",k:[1,19],o:2},"flag-cl":{a:"Chile Flag",b:"1F1E8-1F1F1",k:[1,20],o:2},sloth:{a:"Sloth",b:"1F9A5",k:[42,53],o:12},latin_cross:{a:"Latin Cross",b:"271D-FE0F",c:"271D",j:["christianity"],k:[55,14],o:2},curling_stone:{a:"Curling Stone",b:"1F94C",k:[41,27],o:5},cold_face:{a:"Freezing Face",b:"1F976",k:[42,11],o:11},fried_egg:{a:"Cooking",b:"1F373",j:["food","breakfast","kitchen","egg"],k:[7,18],n:["cooking"],o:2},city_sunset:{a:"Cityscape at Dusk",b:"1F306",j:["photo","evening","sky","buildings"],k:[5,25],o:2},musical_note:{a:"Musical Note",b:"1F3B5",j:["score","tone","sound"],k:[8,27],o:2},"flag-cm":{a:"Cameroon Flag",b:"1F1E8-1F1F2",k:[1,21],o:2},notes:{a:"Multiple Musical Notes",b:"1F3B6",j:["music","score"],k:[8,28],o:2},woozy_face:{a:"Face with Uneven Eyes and Wavy Mouth",b:"1F974",k:[42,9],o:11},dart:{a:"Direct Hit",b:"1F3AF",j:["game","play","bar"],k:[8,21],o:2},orthodox_cross:{a:"Orthodox Cross",b:"2626-FE0F",c:"2626",j:["suppedaneum","religion"],k:[53,11],o:2},shallow_pan_of_food:{a:"Shallow Pan of Food",b:"1F958",j:["food","cooking","casserole","paella"],k:[41,39],o:4},otter:{a:"Otter",b:"1F9A6",k:[42,54],o:12},man:{a:"Man",b:"1F468",j:["mustache","father","dad","guy","classy","sir","moustache"],k:[17,22],o:2},city_sunrise:{a:"Sunset over Buildings",b:"1F307",j:["photo","good morning","dawn"],k:[5,26],o:2},bearded_person:{a:"Bearded Person",b:"1F9D4",k:[48,28],o:5},skunk:{a:"Skunk",b:"1F9A8",k:[42,56],o:12},stew:{a:"Pot of Food",b:"1F372",j:["food","meat","soup"],k:[7,17],o:2},cn:{a:"China Flag",b:"1F1E8-1F1F3",j:["china","chinese","prc","flag","country","nation","banner"],k:[1,22],n:["flag-cn"],o:2},studio_microphone:{a:"Studio Microphone",b:"1F399-FE0F",c:"1F399",j:["sing","recording","artist","talkshow"],k:[8,1],o:2},star_and_crescent:{a:"Star and Crescent",b:"262A-FE0F",c:"262A",j:["islam"],k:[53,12],o:2},"yo-yo":{a:"Yo-Yo",b:"1FA80",k:[52,1],o:12},bridge_at_night:{a:"Bridge at Night",b:"1F309",j:["photo","sanfrancisco"],k:[5,28],o:2},dizzy_face:{a:"Dizzy Face",b:"1F635",j:["spent","unconscious","xox","dizzy"],k:[31,31],o:2},red_haired_man:{a:"Red Haired Man",b:"1F468-200D-1F9B0",k:[16,23],o:11},kite:{a:"Kite",b:"1FA81",k:[52,2],o:12},bowl_with_spoon:{a:"Bowl with Spoon",b:"1F963",k:[41,50],o:5},"flag-co":{a:"Colombia Flag",b:"1F1E8-1F1F4",k:[1,23],o:2},peace_symbol:{a:"Peace Symbol",b:"262E-FE0F",c:"262E",j:["hippie"],k:[53,13],o:2},kangaroo:{a:"Kangaroo",b:"1F998",k:[42,42],o:11},hotsprings:{a:"Hot Springs",b:"2668-FE0F",c:"2668",j:["bath","warm","relax"],k:[53,37],o:2},exploding_head:{a:"Shocked Face with Exploding Head",b:"1F92F",k:[38,49],n:["shocked_face_with_exploding_head"],o:5},level_slider:{a:"Level Slider",b:"1F39A-FE0F",c:"1F39A",j:["scale"],k:[8,2],o:2},badger:{a:"Badger",b:"1F9A1",k:[42,51],o:11},"8ball":{a:"Billiards",b:"1F3B1",j:["pool","hobby","game","luck","magic"],k:[8,23],o:2},curly_haired_man:{a:"Curly Haired Man",b:"1F468-200D-1F9B1",k:[16,29],o:11},"flag-cp":{a:"Clipperton Island Flag",b:"1F1E8-1F1F5",k:[1,24],o:2},carousel_horse:{a:"Carousel Horse",b:"1F3A0",j:["photo","carnival"],k:[8,6],o:2},face_with_cowboy_hat:{a:"Face with Cowboy Hat",b:"1F920",k:[38,17],o:4},menorah_with_nine_branches:{a:"Menorah with Nine Branches",b:"1F54E",k:[28,38],o:2},green_salad:{a:"Green Salad",b:"1F957",j:["food","healthy","lettuce"],k:[41,38],o:4},control_knobs:{a:"Control Knobs",b:"1F39B-FE0F",c:"1F39B",j:["dial"],k:[8,3],o:2},popcorn:{a:"Popcorn",b:"1F37F",j:["food","movie theater","films","snack"],k:[7,30],o:2},six_pointed_star:{a:"Six Pointed Star with Middle Dot",b:"1F52F",j:["purple-square","religion","jewish","hexagram"],k:[28,18],o:2},feet:{a:"Paw Prints",b:"1F43E",k:[12,34],n:["paw_prints"],o:2},ferris_wheel:{a:"Ferris Wheel",b:"1F3A1",j:["photo","carnival","londoneye"],k:[8,7],o:2},microphone:{a:"Microphone",b:"1F3A4",j:["sound","music","PA","sing","talkshow"],k:[8,10],o:2},crystal_ball:{a:"Crystal Ball",b:"1F52E",j:["disco","party","magic","circus","fortune_teller"],k:[28,17],o:2},partying_face:{a:"Face with Party Horn and Party Hat",b:"1F973",k:[42,8],o:11},"flag-cr":{a:"Costa Rica Flag",b:"1F1E8-1F1F7",k:[1,25],o:2},white_haired_man:{a:"White Haired Man",b:"1F468-200D-1F9B3",k:[16,41],o:11},headphones:{a:"Headphone",b:"1F3A7",j:["music","score","gadgets"],k:[8,13],o:2},bald_man:{a:"Bald Man",b:"1F468-200D-1F9B2",k:[16,35],o:11},sunglasses:{a:"Smiling Face with Sunglasses",b:"1F60E",j:["face","cool","smile","summer","beach","sunglass"],k:[30,49],l:["8)"],o:2},butter:{a:"Butter",b:"1F9C8",k:[44,16],o:12},roller_coaster:{a:"Roller Coaster",b:"1F3A2",j:["carnival","playground","photo","fun"],k:[8,8],o:2},turkey:{a:"Turkey",b:"1F983",j:["animal","bird"],k:[42,21],o:2},nazar_amulet:{a:"Nazar Amulet",b:"1F9FF",k:[51,50],o:11},"flag-cu":{a:"Cuba Flag",b:"1F1E8-1F1FA",k:[1,26],o:2},aries:{a:"Aries",b:"2648",j:["sign","purple-square","zodiac","astrology"],k:[53,20],o:2},"flag-cv":{a:"Cape Verde Flag",b:"1F1E8-1F1FB",k:[1,27],o:2},barber:{a:"Barber Pole",b:"1F488",j:["hair","salon","style"],k:[25,18],o:2},taurus:{a:"Taurus",b:"2649",j:["purple-square","sign","zodiac","astrology"],k:[53,21],o:2},salt:{a:"Salt Shaker",b:"1F9C2",k:[44,10],o:11},woman:{a:"Woman",b:"1F469",j:["female","girls","lady"],k:[20,9],o:2},video_game:{a:"Video Game",b:"1F3AE",j:["play","console","PS4","controller"],k:[8,20],o:2},chicken:{a:"Chicken",b:"1F414",j:["animal","cluck","nature","bird"],k:[11,48],o:2},radio:{a:"Radio",b:"1F4FB",j:["communication","music","podcast","program"],k:[27,24],o:2},nerd_face:{a:"Nerd Face",b:"1F913",j:["face","nerdy","geek","dork"],k:[37,26],o:2},red_haired_woman:{a:"Red Haired Woman",b:"1F469-200D-1F9B0",k:[19,8],o:11},circus_tent:{a:"Circus Tent",b:"1F3AA",j:["festival","carnival","party"],k:[8,16],o:2},face_with_monocle:{a:"Face with Monocle",b:"1F9D0",k:[45,16],o:5},canned_food:{a:"Canned Food",b:"1F96B",k:[42,1],o:5},"flag-cw":{a:"Curaçao Flag",b:"1F1E8-1F1FC",k:[1,28],o:2},gemini:{a:"Gemini",b:"264A",j:["sign","zodiac","purple-square","astrology"],k:[53,22],o:2},saxophone:{a:"Saxophone",b:"1F3B7",j:["music","instrument","jazz","blues"],k:[8,29],o:2},rooster:{a:"Rooster",b:"1F413",j:["animal","nature","chicken"],k:[11,47],o:2},joystick:{a:"Joystick",b:"1F579-FE0F",c:"1F579",j:["game","play"],k:[29,36],o:2},guitar:{a:"Guitar",b:"1F3B8",j:["music","instrument"],k:[8,30],o:2},slot_machine:{a:"Slot Machine",b:"1F3B0",j:["bet","gamble","vegas","fruit machine","luck","casino"],k:[8,22],o:2},bento:{a:"Bento Box",b:"1F371",j:["food","japanese","box"],k:[7,16],o:2},steam_locomotive:{a:"Steam Locomotive",b:"1F682",j:["transportation","vehicle","train"],k:[34,1],o:2},confused:{a:"Confused Face",b:"1F615",j:["face","indifference","huh","weird","hmmm",":/"],k:[30,56],l:[":\\",":-\\",":/",":-/"],o:2},"flag-cx":{a:"Christmas Island Flag",b:"1F1E8-1F1FD",k:[1,29],o:2},hatching_chick:{a:"Hatching Chick",b:"1F423",j:["animal","chicken","egg","born","baby","bird"],k:[12,7],o:2},cancer:{a:"Cancer",b:"264B",j:["sign","zodiac","purple-square","astrology"],k:[53,23],o:2},"flag-cy":{a:"Cyprus Flag",b:"1F1E8-1F1FE",k:[1,30],o:2},worried:{a:"Worried Face",b:"1F61F",j:["face","concern","nervous",":("],k:[31,9],o:2},railway_car:{a:"Railway Car",b:"1F683",j:["transportation","vehicle"],k:[34,2],o:2},leo:{a:"Leo",b:"264C",j:["sign","purple-square","zodiac","astrology"],k:[53,24],o:2},curly_haired_woman:{a:"Curly Haired Woman",b:"1F469-200D-1F9B1",k:[19,14],o:11},baby_chick:{a:"Baby Chick",b:"1F424",j:["animal","chicken","bird"],k:[12,8],o:2},musical_keyboard:{a:"Musical Keyboard",b:"1F3B9",j:["piano","instrument","compose"],k:[8,31],o:2},game_die:{a:"Game Die",b:"1F3B2",j:["dice","random","tabletop","play","luck"],k:[8,24],o:2},rice_cracker:{a:"Rice Cracker",b:"1F358",j:["food","japanese"],k:[6,48],o:2},virgo:{a:"Virgo",b:"264D",j:["sign","zodiac","purple-square","astrology"],k:[53,25],o:2},"flag-cz":{a:"Czechia Flag",b:"1F1E8-1F1FF",k:[1,31],o:2},rice_ball:{a:"Rice Ball",b:"1F359",j:["food","japanese"],k:[6,49],o:2},hatched_chick:{a:"Front-Facing Baby Chick",b:"1F425",j:["animal","chicken","baby","bird"],k:[12,9],o:2},jigsaw:{a:"Jigsaw Puzzle Piece",b:"1F9E9",k:[51,28],o:11},trumpet:{a:"Trumpet",b:"1F3BA",j:["music","brass"],k:[8,32],o:2},slightly_frowning_face:{a:"Slightly Frowning Face",b:"1F641",j:["face","frowning","disappointed","sad","upset"],k:[31,43],o:2},bullettrain_side:{a:"High-Speed Train",b:"1F684",j:["transportation","vehicle"],k:[34,3],o:2},libra:{a:"Libra",b:"264E",j:["sign","purple-square","zodiac","astrology"],k:[53,26],o:2},de:{a:"Germany Flag",b:"1F1E9-1F1EA",j:["german","nation","flag","country","banner"],k:[1,32],n:["flag-de"],o:2},rice:{a:"Cooked Rice",b:"1F35A",j:["food","china","asian"],k:[6,50],o:2},violin:{a:"Violin",b:"1F3BB",j:["music","instrument","orchestra","symphony"],k:[8,33],o:2},white_haired_woman:{a:"White Haired Woman",b:"1F469-200D-1F9B3",k:[19,26],o:11},bird:{a:"Bird",b:"1F426",j:["animal","nature","fly","tweet","spring"],k:[12,10],o:2},white_frowning_face:{a:"White Frowning Face",b:"2639-FE0F",c:"2639",k:[53,16],o:2},bullettrain_front:{a:"High-Speed Train with Bullet Nose",b:"1F685",j:["transportation","vehicle","speed","fast","public","travel"],k:[34,4],o:2},teddy_bear:{a:"Teddy Bear",b:"1F9F8",k:[51,43],o:11},spades:{a:"Black Spade Suit",b:"2660-FE0F",c:"2660",j:["poker","cards","suits","magic"],k:[53,33],o:2},banjo:{a:"Banjo",b:"1FA95",k:[52,9],o:12},train2:{a:"Train",b:"1F686",j:["transportation","vehicle"],k:[34,5],o:2},scorpius:{a:"Scorpius",b:"264F",j:["sign","zodiac","purple-square","astrology","scorpio"],k:[53,27],o:2},curry:{a:"Curry and Rice",b:"1F35B",j:["food","spicy","hot","indian"],k:[6,51],o:2},open_mouth:{a:"Face with Open Mouth",b:"1F62E",j:["face","surprise","impressed","wow","whoa",":O"],k:[31,24],l:[":o",":-o",":O",":-O"],o:2},"flag-dg":{a:"Diego Garcia Flag",b:"1F1E9-1F1EC",k:[1,33],o:2},penguin:{a:"Penguin",b:"1F427",j:["animal","nature"],k:[12,11],o:2},hearts:{a:"Black Heart Suit",b:"2665-FE0F",c:"2665",j:["poker","cards","magic","suits"],k:[53,35],o:2},ramen:{a:"Steaming Bowl",b:"1F35C",j:["food","japanese","noodle","chopsticks"],k:[6,52],o:2},sagittarius:{a:"Sagittarius",b:"2650",j:["sign","zodiac","purple-square","astrology"],k:[53,28],o:2},bald_woman:{a:"Bald Woman",b:"1F469-200D-1F9B2",k:[19,20],o:11},dove_of_peace:{a:"Dove of Peace",b:"1F54A-FE0F",c:"1F54A",k:[28,34],o:2},hushed:{a:"Hushed Face",b:"1F62F",j:["face","woo","shh"],k:[31,25],o:2},metro:{a:"Metro",b:"1F687",j:["transportation","blue-square","mrt","underground","tube"],k:[34,6],o:2},"flag-dj":{a:"Djibouti Flag",b:"1F1E9-1F1EF",k:[1,34],o:2},drum_with_drumsticks:{a:"Drum with Drumsticks",b:"1F941",k:[41,17],o:4},spaghetti:{a:"Spaghetti",b:"1F35D",j:["food","italian","noodle"],k:[6,53],o:2},eagle:{a:"Eagle",b:"1F985",j:["animal","nature","bird"],k:[42,23],o:4},astonished:{a:"Astonished Face",b:"1F632",j:["face","xox","surprised","poisoned"],k:[31,28],o:2},capricorn:{a:"Capricorn",b:"2651",j:["sign","zodiac","purple-square","astrology"],k:[53,29],o:2},light_rail:{a:"Light Rail",b:"1F688",j:["transportation","vehicle"],k:[34,7],o:2},"flag-dk":{a:"Denmark Flag",b:"1F1E9-1F1F0",k:[1,35],o:2},iphone:{a:"Mobile Phone",b:"1F4F1",j:["technology","apple","gadgets","dial"],k:[27,14],o:2},diamonds:{a:"Black Diamond Suit",b:"2666-FE0F",c:"2666",j:["poker","cards","magic","suits"],k:[53,36],o:2},clubs:{a:"Black Club Suit",b:"2663-FE0F",c:"2663",j:["poker","cards","magic","suits"],k:[53,34],o:2},aquarius:{a:"Aquarius",b:"2652",j:["sign","purple-square","zodiac","astrology"],k:[53,30],o:2},sweet_potato:{a:"Roasted Sweet Potato",b:"1F360",j:["food","nature"],k:[6,56],o:2},"flag-dm":{a:"Dominica Flag",b:"1F1E9-1F1F2",k:[1,36],o:2},duck:{a:"Duck",b:"1F986",j:["animal","nature","bird","mallard"],k:[42,24],o:4},calling:{a:"Mobile Phone with Rightwards Arrow at Left",b:"1F4F2",j:["iphone","incoming"],k:[27,15],o:2},station:{a:"Station",b:"1F689",j:["transportation","vehicle","public"],k:[34,8],o:2},"blond-haired-woman":{a:"Blond Haired Woman",b:"1F471-200D-2640-FE0F",c:"1F471-200D-2640",k:[22,7],o:4},flushed:{a:"Flushed Face",b:"1F633",j:["face","blush","shy","flattered"],k:[31,29],o:2},pisces:{a:"Pisces",b:"2653",j:["purple-square","sign","zodiac","astrology"],k:[53,31],o:2},chess_pawn:{a:"Chess Pawn",b:"265F-FE0F",c:"265F",k:[53,32],o:11},"blond-haired-man":{obsoletes:"1F471",a:"Blond Haired Man",b:"1F471-200D-2642-FE0F",c:"1F471-200D-2642",k:[22,13],o:4},phone:{a:"Black Telephone",b:"260E-FE0F",c:"260E",j:["technology","communication","dial","telephone"],k:[52,54],n:["telephone"],o:2},oden:{a:"Oden",b:"1F362",j:["food","japanese"],k:[7,1],o:2},"flag-do":{a:"Dominican Republic Flag",b:"1F1E9-1F1F4",k:[1,37],o:2},tram:{a:"Tram",b:"1F68A",j:["transportation","vehicle"],k:[34,9],o:2},swan:{a:"Swan",b:"1F9A2",k:[42,52],o:11},pleading_face:{a:"Face with Pleading Eyes",b:"1F97A",k:[42,12],o:11},"flag-dz":{a:"Algeria Flag",b:"1F1E9-1F1FF",k:[1,38],o:2},monorail:{a:"Monorail",b:"1F69D",j:["transportation","vehicle"],k:[34,28],o:2},owl:{a:"Owl",b:"1F989",j:["animal","nature","bird","hoot"],k:[42,27],o:4},sushi:{a:"Sushi",b:"1F363",j:["food","fish","japanese","rice"],k:[7,2],o:2},telephone_receiver:{a:"Telephone Receiver",b:"1F4DE",j:["technology","communication","dial"],k:[26,52],o:2},black_joker:{a:"Playing Card Black Joker",b:"1F0CF",j:["poker","cards","game","play","magic"],k:[0,15],o:2},ophiuchus:{a:"Ophiuchus",b:"26CE",j:["sign","purple-square","constellation","astrology"],k:[54,4],o:2},frowning:{a:"Frowning Face with Open Mouth",b:"1F626",j:["face","aw","what"],k:[31,16],o:2},older_adult:{a:"Older Adult",b:"1F9D3",k:[48,22],o:5},"flag-ea":{a:"Ceuta & Melilla Flag",b:"1F1EA-1F1E6",k:[1,39],o:2},flamingo:{a:"Flamingo",b:"1F9A9",k:[43,0],o:12},pager:{a:"Pager",b:"1F4DF",j:["bbcall","oldschool","90s"],k:[26,53],o:2},mountain_railway:{a:"Mountain Railway",b:"1F69E",j:["transportation","vehicle"],k:[34,29],o:2},mahjong:{a:"Mahjong Tile Red Dragon",b:"1F004",j:["game","play","chinese","kanji"],k:[0,14],o:2},older_man:{a:"Older Man",b:"1F474",j:["human","male","men","old","elder","senior"],k:[22,49],o:2},twisted_rightwards_arrows:{a:"Twisted Rightwards Arrows",b:"1F500",j:["blue-square","shuffle","music","random"],k:[27,28],o:2},fried_shrimp:{a:"Fried Shrimp",b:"1F364",j:["food","animal","appetizer","summer"],k:[7,3],o:2},anguished:{a:"Anguished Face",b:"1F627",j:["face","stunned","nervous"],k:[31,17],l:["D:"],o:2},repeat:{a:"Clockwise Rightwards and Leftwards Open Circle Arrows",b:"1F501",j:["loop","record"],k:[27,29],o:2},fish_cake:{a:"Fish Cake with Swirl Design",b:"1F365",j:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],k:[7,4],o:2},fax:{a:"Fax Machine",b:"1F4E0",j:["communication","technology"],k:[26,54],o:2},older_woman:{a:"Older Woman",b:"1F475",j:["human","female","women","lady","old","elder","senior"],k:[22,55],o:2},"flag-ec":{a:"Ecuador Flag",b:"1F1EA-1F1E8",k:[1,40],o:2},peacock:{a:"Peacock",b:"1F99A",k:[42,44],o:11},fearful:{a:"Fearful Face",b:"1F628",j:["face","scared","terrified","nervous","oops","huh"],k:[31,18],o:2},train:{a:"Tram Car",b:"1F68B",j:["transportation","vehicle","carriage","public","travel"],k:[34,10],o:2},flower_playing_cards:{a:"Flower Playing Cards",b:"1F3B4",j:["game","sunset","red"],k:[8,26],o:2},repeat_one:{a:"Clockwise Rightwards and Leftwards Open Circle Arrows with Circled One Overlay",b:"1F502",j:["blue-square","loop"],k:[27,30],o:2},moon_cake:{a:"Moon Cake",b:"1F96E",k:[42,4],o:11},performing_arts:{a:"Performing Arts",b:"1F3AD",j:["acting","theater","drama"],k:[8,19],o:2},cold_sweat:{a:"Face with Open Mouth and Cold Sweat",b:"1F630",j:["face","nervous","sweat"],k:[31,26],o:2},"flag-ee":{a:"Estonia Flag",b:"1F1EA-1F1EA",k:[1,41],o:2},battery:{a:"Battery",b:"1F50B",j:["power","energy","sustain"],k:[27,39],o:2},parrot:{a:"Parrot",b:"1F99C",k:[42,46],o:11},bus:{a:"Bus",b:"1F68C",j:["car","vehicle","transportation"],k:[34,11],o:2},"flag-eg":{a:"Egypt Flag",b:"1F1EA-1F1EC",k:[1,42],o:2},arrow_forward:{a:"Black Right-Pointing Triangle",b:"25B6-FE0F",c:"25B6",j:["blue-square","right","direction","play"],k:[52,43],o:2},"man-frowning":{a:"Man Frowning",b:"1F64D-200D-2642-FE0F",c:"1F64D-200D-2642",k:[33,20],o:4},disappointed_relieved:{a:"Disappointed but Relieved Face",b:"1F625",j:["face","phew","sweat","nervous"],k:[31,15],o:2},electric_plug:{a:"Electric Plug",b:"1F50C",j:["charger","power"],k:[27,40],o:2},frame_with_picture:{a:"Frame with Picture",b:"1F5BC-FE0F",c:"1F5BC",k:[30,14],o:2},oncoming_bus:{a:"Oncoming Bus",b:"1F68D",j:["vehicle","transportation"],k:[34,12],o:2},dango:{a:"Dango",b:"1F361",j:["food","dessert","sweet","japanese","barbecue","meat"],k:[7,0],o:2},frog:{a:"Frog Face",b:"1F438",j:["animal","nature","croak","toad"],k:[12,28],o:2},computer:{a:"Personal Computer",b:"1F4BB",j:["technology","laptop","screen","display","monitor"],k:[26,17],o:2},art:{a:"Artist Palette",b:"1F3A8",j:["design","paint","draw","colors"],k:[8,14],o:2},"flag-eh":{a:"Western Sahara Flag",b:"1F1EA-1F1ED",k:[1,43],o:2},fast_forward:{a:"Black Right-Pointing Double Triangle",b:"23E9",j:["blue-square","play","speed","continue"],k:[52,26],o:2},cry:{a:"Crying Face",b:"1F622",j:["face","tears","sad","depressed","upset",":'("],k:[31,12],l:[":'("],m:":'(",o:2},"woman-frowning":{obsoletes:"1F64D",a:"Woman Frowning",b:"1F64D-200D-2640-FE0F",c:"1F64D-200D-2640",k:[33,14],o:4},trolleybus:{a:"Trolleybus",b:"1F68E",j:["bart","transportation","vehicle"],k:[34,13],o:2},crocodile:{a:"Crocodile",b:"1F40A",j:["animal","nature","reptile","lizard","alligator"],k:[11,38],o:2},dumpling:{a:"Dumpling",b:"1F95F",k:[41,46],o:5},black_right_pointing_double_triangle_with_vertical_bar:{a:"Black Right Pointing Double Triangle with Vertical Bar",b:"23ED-FE0F",c:"23ED",k:[52,30],o:2},desktop_computer:{a:"Desktop Computer",b:"1F5A5-FE0F",c:"1F5A5",j:["technology","computing","screen"],k:[30,10],o:2},turtle:{a:"Turtle",b:"1F422",j:["animal","slow","nature","tortoise"],k:[12,6],o:2},sob:{a:"Loudly Crying Face",b:"1F62D",j:["face","cry","tears","sad","upset","depressed"],k:[31,23],m:":'(",o:2},"flag-er":{a:"Eritrea Flag",b:"1F1EA-1F1F7",k:[1,44],o:2},thread:{a:"Spool of Thread",b:"1F9F5",k:[51,40],o:11},minibus:{a:"Minibus",b:"1F690",j:["vehicle","car","transportation"],k:[34,15],o:2},fortune_cookie:{a:"Fortune Cookie",b:"1F960",k:[41,47],o:5},yarn:{a:"Ball of Yarn",b:"1F9F6",k:[51,41],o:11},takeout_box:{a:"Takeout Box",b:"1F961",k:[41,48],o:5},"man-pouting":{a:"Man Pouting",b:"1F64E-200D-2642-FE0F",c:"1F64E-200D-2642",k:[33,38],o:4},printer:{a:"Printer",b:"1F5A8-FE0F",c:"1F5A8",j:["paper","ink"],k:[30,11],o:2},scream:{a:"Face Screaming in Fear",b:"1F631",j:["face","munch","scared","omg"],k:[31,27],o:2},es:{a:"Spain Flag",b:"1F1EA-1F1F8",j:["spain","flag","nation","country","banner"],k:[1,45],n:["flag-es"],o:2},ambulance:{a:"Ambulance",b:"1F691",j:["health","911","hospital"],k:[34,16],o:2},black_right_pointing_triangle_with_double_vertical_bar:{a:"Black Right Pointing Triangle with Double Vertical Bar",b:"23EF-FE0F",c:"23EF",k:[52,32],o:2},lizard:{a:"Lizard",b:"1F98E",j:["animal","nature","reptile"],k:[42,32],o:4},"flag-et":{a:"Ethiopia Flag",b:"1F1EA-1F1F9",k:[1,46],o:2},keyboard:{a:"Keyboard",b:"2328-FE0F",c:"2328",j:["technology","computer","type","input","text"],k:[52,24],o:2},crab:{a:"Crab",b:"1F980",j:["animal","crustacean"],k:[42,18],o:2},confounded:{a:"Confounded Face",b:"1F616",j:["face","confused","sick","unwell","oops",":S"],k:[31,0],o:2},snake:{a:"Snake",b:"1F40D",j:["animal","evil","nature","hiss","python"],k:[11,41],o:2},"woman-pouting":{obsoletes:"1F64E",a:"Woman Pouting",b:"1F64E-200D-2640-FE0F",c:"1F64E-200D-2640",k:[33,32],o:4},arrow_backward:{a:"Black Left-Pointing Triangle",b:"25C0-FE0F",c:"25C0",j:["blue-square","left","direction"],k:[52,44],o:2},fire_engine:{a:"Fire Engine",b:"1F692",j:["transportation","cars","vehicle"],k:[34,17],o:2},rewind:{a:"Black Left-Pointing Double Triangle",b:"23EA",j:["play","blue-square"],k:[52,27],o:2},three_button_mouse:{a:"Three Button Mouse",b:"1F5B1-FE0F",c:"1F5B1",k:[30,12],o:2},police_car:{a:"Police Car",b:"1F693",j:["vehicle","cars","transportation","law","legal","enforcement"],k:[34,18],o:2},dragon_face:{a:"Dragon Face",b:"1F432",j:["animal","myth","nature","chinese","green"],k:[12,22],o:2},persevere:{a:"Persevering Face",b:"1F623",j:["face","sick","no","upset","oops"],k:[31,13],o:2},lobster:{a:"Lobster",b:"1F99E",k:[42,48],o:11},"flag-eu":{a:"European Union Flag",b:"1F1EA-1F1FA",k:[1,47],o:2},disappointed:{a:"Disappointed Face",b:"1F61E",j:["face","sad","upset","depressed",":("],k:[31,8],l:["):",":(",":-("],m:":(",o:2},shrimp:{a:"Shrimp",b:"1F990",j:["animal","ocean","nature","seafood"],k:[42,34],o:4},dragon:{a:"Dragon",b:"1F409",j:["animal","myth","nature","chinese","green"],k:[11,37],o:2},"man-gesturing-no":{a:"Man Gesturing No",b:"1F645-200D-2642-FE0F",c:"1F645-200D-2642",k:[31,53],o:4},"flag-fi":{a:"Finland Flag",b:"1F1EB-1F1EE",k:[1,48],o:2},trackball:{a:"Trackball",b:"1F5B2-FE0F",c:"1F5B2",j:["technology","trackpad"],k:[30,13],o:2},black_left_pointing_double_triangle_with_vertical_bar:{a:"Black Left Pointing Double Triangle with Vertical Bar",b:"23EE-FE0F",c:"23EE",k:[52,31],o:2},oncoming_police_car:{a:"Oncoming Police Car",b:"1F694",j:["vehicle","law","legal","enforcement","911"],k:[34,19],o:2},minidisc:{a:"Minidisc",b:"1F4BD",j:["technology","record","data","disk","90s"],k:[26,19],o:2},sweat:{a:"Face with Cold Sweat",b:"1F613",j:["face","hot","sad","tired","exercise"],k:[30,54],o:2},squid:{a:"Squid",b:"1F991",j:["animal","nature","ocean","sea"],k:[42,35],o:4},sauropod:{a:"Sauropod",b:"1F995",k:[42,39],o:5},arrow_up_small:{a:"Up-Pointing Small Red Triangle",b:"1F53C",j:["blue-square","triangle","direction","point","forward","top"],k:[28,31],o:2},"flag-fj":{a:"Fiji Flag",b:"1F1EB-1F1EF",k:[1,49],o:2},"woman-gesturing-no":{obsoletes:"1F645",a:"Woman Gesturing No",b:"1F645-200D-2640-FE0F",c:"1F645-200D-2640",k:[31,47],o:4},taxi:{a:"Taxi",b:"1F695",j:["uber","vehicle","cars","transportation"],k:[34,20],o:2},"flag-fk":{a:"Falkland Islands Flag",b:"1F1EB-1F1F0",k:[1,50],o:2},floppy_disk:{a:"Floppy Disk",b:"1F4BE",j:["oldschool","technology","save","90s","80s"],k:[26,20],o:2},"t-rex":{a:"T-Rex",b:"1F996",k:[42,40],o:5},oyster:{a:"Oyster",b:"1F9AA",k:[43,1],o:12},arrow_double_up:{a:"Black Up-Pointing Double Triangle",b:"23EB",j:["blue-square","direction","top"],k:[52,28],o:2},oncoming_taxi:{a:"Oncoming Taxi",b:"1F696",j:["vehicle","cars","uber"],k:[34,21],o:2},weary:{a:"Weary Face",b:"1F629",j:["face","tired","sleepy","sad","frustrated","upset"],k:[31,19],o:2},"man-gesturing-ok":{a:"Man Gesturing Ok",b:"1F646-200D-2642-FE0F",c:"1F646-200D-2642",k:[32,14],o:4},arrow_down_small:{a:"Down-Pointing Small Red Triangle",b:"1F53D",j:["blue-square","direction","bottom"],k:[28,32],o:2},tired_face:{a:"Tired Face",b:"1F62B",j:["sick","whine","upset","frustrated"],k:[31,21],o:2},car:{a:"Automobile",b:"1F697",k:[34,22],n:["red_car"],o:2},icecream:{a:"Soft Ice Cream",b:"1F366",j:["food","hot","dessert","summer"],k:[7,5],o:2},cd:{a:"Optical Disc",b:"1F4BF",j:["technology","dvd","disk","disc","90s"],k:[26,21],o:2},whale:{a:"Spouting Whale",b:"1F433",j:["animal","nature","sea","ocean"],k:[12,23],o:2},"flag-fm":{a:"Micronesia Flag",b:"1F1EB-1F1F2",k:[1,51],o:2},oncoming_automobile:{a:"Oncoming Automobile",b:"1F698",j:["car","vehicle","transportation"],k:[34,23],o:2},arrow_double_down:{a:"Black Down-Pointing Double Triangle",b:"23EC",j:["blue-square","direction","bottom"],k:[52,29],o:2},"woman-gesturing-ok":{obsoletes:"1F646",a:"Woman Gesturing Ok",b:"1F646-200D-2640-FE0F",c:"1F646-200D-2640",k:[32,8],o:4},yawning_face:{a:"Yawning Face",b:"1F971",k:[42,7],o:12},dvd:{a:"Dvd",b:"1F4C0",j:["cd","disk","disc"],k:[26,22],o:2},whale2:{a:"Whale",b:"1F40B",j:["animal","nature","sea","ocean"],k:[11,39],o:2},"flag-fo":{a:"Faroe Islands Flag",b:"1F1EB-1F1F4",k:[1,52],o:2},shaved_ice:{a:"Shaved Ice",b:"1F367",j:["hot","dessert","summer"],k:[7,6],o:2},double_vertical_bar:{a:"Double Vertical Bar",b:"23F8-FE0F",c:"23F8",k:[52,37],o:2},dolphin:{a:"Dolphin",b:"1F42C",j:["animal","nature","fish","sea","ocean","flipper","fins","beach"],k:[12,16],n:["flipper"],o:2},blue_car:{a:"Recreational Vehicle",b:"1F699",j:["transportation","vehicle"],k:[34,24],o:2},ice_cream:{a:"Ice Cream",b:"1F368",j:["food","hot","dessert"],k:[7,7],o:2},fr:{a:"France Flag",b:"1F1EB-1F1F7",j:["banner","flag","nation","france","french","country"],k:[1,53],n:["flag-fr"],o:2},triumph:{a:"Face with Look of Triumph",b:"1F624",j:["face","gas","phew","proud","pride"],k:[31,14],o:2},abacus:{a:"Abacus",b:"1F9EE",k:[51,33],o:11},"man-tipping-hand":{a:"Man Tipping Hand",b:"1F481-200D-2642-FE0F",c:"1F481-200D-2642",k:[23,53],o:4},doughnut:{a:"Doughnut",b:"1F369",j:["food","dessert","snack","sweet","donut"],k:[7,8],o:2},fish:{a:"Fish",b:"1F41F",j:["animal","food","nature"],k:[12,3],o:2},truck:{a:"Delivery Truck",b:"1F69A",j:["cars","transportation"],k:[34,25],o:2},movie_camera:{a:"Movie Camera",b:"1F3A5",j:["film","record"],k:[8,11],o:2},"flag-ga":{a:"Gabon Flag",b:"1F1EC-1F1E6",k:[1,54],o:2},rage:{a:"Pouting Face",b:"1F621",j:["angry","mad","hate","despise"],k:[31,11],o:2},black_square_for_stop:{a:"Black Square for Stop",b:"23F9-FE0F",c:"23F9",k:[52,38],o:2},articulated_lorry:{a:"Articulated Lorry",b:"1F69B",j:["vehicle","cars","transportation","express"],k:[34,26],o:2},angry:{a:"Angry Face",b:"1F620",j:["mad","face","annoyed","frustrated"],k:[31,10],l:[">:(",">:-("],o:2},cookie:{a:"Cookie",b:"1F36A",j:["food","snack","oreo","chocolate","sweet","dessert"],k:[7,9],o:2},gb:{a:"United Kingdom Flag",b:"1F1EC-1F1E7",k:[1,55],n:["uk","flag-gb"],o:2},tropical_fish:{a:"Tropical Fish",b:"1F420",j:["animal","swim","ocean","beach","nemo"],k:[12,4],o:2},"woman-tipping-hand":{obsoletes:"1F481",a:"Woman Tipping Hand",b:"1F481-200D-2640-FE0F",c:"1F481-200D-2640",k:[23,47],o:4},black_circle_for_record:{a:"Black Circle for Record",b:"23FA-FE0F",c:"23FA",k:[52,39],o:2},film_frames:{a:"Film Frames",b:"1F39E-FE0F",c:"1F39E",k:[8,4],o:2},film_projector:{a:"Film Projector",b:"1F4FD-FE0F",c:"1F4FD",j:["video","tape","record","movie"],k:[27,26],o:2},"flag-gd":{a:"Grenada Flag",b:"1F1EC-1F1E9",k:[1,56],o:2},blowfish:{a:"Blowfish",b:"1F421",j:["animal","nature","food","sea","ocean"],k:[12,5],o:2},face_with_symbols_on_mouth:{a:"Serious Face with Symbols Covering Mouth",b:"1F92C",k:[38,46],n:["serious_face_with_symbols_covering_mouth"],o:5},birthday:{a:"Birthday Cake",b:"1F382",j:["food","dessert","cake"],k:[7,33],o:2},eject:{a:"Eject",b:"23CF-FE0F",c:"23CF",k:[52,25],o:2},tractor:{a:"Tractor",b:"1F69C",j:["vehicle","car","farming","agriculture"],k:[34,27],o:2},"flag-ge":{a:"Georgia Flag",b:"1F1EC-1F1EA",k:[2,0],o:2},smiling_imp:{a:"Smiling Face with Horns",b:"1F608",j:["devil","horns"],k:[30,43],o:2},racing_car:{a:"Racing Car",b:"1F3CE-FE0F",c:"1F3CE",j:["sports","race","fast","formula","f1"],k:[10,33],o:2},cinema:{a:"Cinema",b:"1F3A6",j:["blue-square","record","film","movie","curtain","stage","theater"],k:[8,12],o:2},clapper:{a:"Clapper Board",b:"1F3AC",j:["movie","film","record"],k:[8,18],o:2},shark:{a:"Shark",b:"1F988",j:["animal","nature","fish","sea","ocean","jaws","fins","beach"],k:[42,26],o:4},cake:{a:"Shortcake",b:"1F370",j:["food","dessert"],k:[7,15],o:2},"man-raising-hand":{a:"Man Raising Hand",b:"1F64B-200D-2642-FE0F",c:"1F64B-200D-2642",k:[32,53],o:4},octopus:{a:"Octopus",b:"1F419",j:["animal","creature","ocean","sea","nature","beach"],k:[11,54],o:2},"woman-raising-hand":{obsoletes:"1F64B",a:"Woman Raising Hand",b:"1F64B-200D-2640-FE0F",c:"1F64B-200D-2640",k:[32,47],o:4},"flag-gf":{a:"French Guiana Flag",b:"1F1EC-1F1EB",k:[2,1],o:2},tv:{a:"Television",b:"1F4FA",j:["technology","program","oldschool","show","television"],k:[27,23],o:2},imp:{a:"Imp",b:"1F47F",j:["devil","angry","horns"],k:[23,45],o:2},cupcake:{a:"Cupcake",b:"1F9C1",k:[44,9],o:11},racing_motorcycle:{a:"Racing Motorcycle",b:"1F3CD-FE0F",c:"1F3CD",k:[10,32],o:2},low_brightness:{a:"Low Brightness Symbol",b:"1F505",j:["sun","afternoon","warm","summer"],k:[27,33],o:2},shell:{a:"Spiral Shell",b:"1F41A",j:["nature","sea","beach"],k:[11,55],o:2},"flag-gg":{a:"Guernsey Flag",b:"1F1EC-1F1EC",k:[2,2],o:2},high_brightness:{a:"High Brightness Symbol",b:"1F506",j:["sun","light"],k:[27,34],o:2},deaf_person:{a:"Deaf Person",b:"1F9CF",k:[45,10],o:12},skull:{a:"Skull",b:"1F480",j:["dead","skeleton","creepy","death"],k:[23,46],o:2},motor_scooter:{a:"Motor Scooter",b:"1F6F5",j:["vehicle","vespa","sasha"],k:[36,54],o:4},camera:{a:"Camera",b:"1F4F7",j:["gadgets","photography"],k:[27,20],o:2},pie:{a:"Pie",b:"1F967",k:[41,54],o:5},"flag-gh":{a:"Ghana Flag",b:"1F1EC-1F1ED",k:[2,3],o:2},deaf_man:{a:"Deaf Man",b:"1F9CF-200D-2642-FE0F",c:"1F9CF-200D-2642",k:[45,4],o:12},skull_and_crossbones:{a:"Skull and Crossbones",b:"2620-FE0F",c:"2620",j:["poison","danger","deadly","scary","death","pirate","evil"],k:[53,8],o:2},camera_with_flash:{a:"Camera with Flash",b:"1F4F8",k:[27,21],o:2},signal_strength:{a:"Antenna with Bars",b:"1F4F6",j:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],k:[27,19],o:2},chocolate_bar:{a:"Chocolate Bar",b:"1F36B",j:["food","snack","dessert","sweet"],k:[7,10],o:2},manual_wheelchair:{a:"Manual Wheelchair",b:"1F9BD",k:[44,5],o:12},snail:{a:"Snail",b:"1F40C",j:["slow","animal","shell"],k:[11,40],o:2},motorized_wheelchair:{a:"Motorized Wheelchair",b:"1F9BC",k:[44,4],o:12},"flag-gi":{a:"Gibraltar Flag",b:"1F1EC-1F1EE",k:[2,4],o:2},hankey:{a:"Pile of Poo",b:"1F4A9",k:[25,51],n:["poop","shit"],o:2},vibration_mode:{a:"Vibration Mode",b:"1F4F3",j:["orange-square","phone"],k:[27,16],o:2},deaf_woman:{a:"Deaf Woman",b:"1F9CF-200D-2640-FE0F",c:"1F9CF-200D-2640",k:[44,55],o:12},butterfly:{a:"Butterfly",b:"1F98B",j:["animal","insect","nature","caterpillar"],k:[42,29],o:4},video_camera:{a:"Video Camera",b:"1F4F9",j:["film","record"],k:[27,22],o:2},candy:{a:"Candy",b:"1F36C",j:["snack","dessert","sweet","lolly"],k:[7,11],o:2},auto_rickshaw:{a:"Auto Rickshaw",b:"1F6FA",k:[37,2],o:12},mobile_phone_off:{a:"Mobile Phone off",b:"1F4F4",j:["mute","orange-square","silence","quiet"],k:[27,17],o:2},clown_face:{a:"Clown Face",b:"1F921",j:["face"],k:[38,18],o:4},lollipop:{a:"Lollipop",b:"1F36D",j:["food","snack","candy","sweet"],k:[7,12],o:2},"flag-gl":{a:"Greenland Flag",b:"1F1EC-1F1F1",k:[2,5],o:2},vhs:{a:"Videocassette",b:"1F4FC",j:["record","video","oldschool","90s","80s"],k:[27,25],o:2},bug:{a:"Bug",b:"1F41B",j:["animal","insect","nature","worm"],k:[11,56],o:2},bike:{a:"Bicycle",b:"1F6B2",j:["sports","bicycle","exercise","hipster"],k:[35,9],o:2},"man-bowing":{obsoletes:"1F647",a:"Man Bowing",b:"1F647-200D-2642-FE0F",c:"1F647-200D-2642",k:[32,32],o:4},female_sign:{a:"Female Sign",b:"2640-FE0F",c:"2640",k:[53,18],o:4},japanese_ogre:{a:"Japanese Ogre",b:"1F479",j:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],k:[23,34],o:2},custard:{a:"Custard",b:"1F36E",j:["dessert","food"],k:[7,13],o:2},ant:{a:"Ant",b:"1F41C",j:["animal","insect","nature","bug"],k:[12,0],o:2},mag:{a:"Left-Pointing Magnifying Glass",b:"1F50D",j:["search","zoom","find","detective"],k:[27,41],o:2},"flag-gm":{a:"Gambia Flag",b:"1F1EC-1F1F2",k:[2,6],o:2},honey_pot:{a:"Honey Pot",b:"1F36F",j:["bees","sweet","kitchen"],k:[7,14],o:2},"woman-bowing":{a:"Woman Bowing",b:"1F647-200D-2640-FE0F",c:"1F647-200D-2640",k:[32,26],o:4},male_sign:{a:"Male Sign",b:"2642-FE0F",c:"2642",k:[53,19],o:4},mag_right:{a:"Right-Pointing Magnifying Glass",b:"1F50E",j:["search","zoom","find","detective"],k:[27,42],o:2},japanese_goblin:{a:"Japanese Goblin",b:"1F47A",j:["red","evil","mask","monster","scary","creepy","japanese","goblin"],k:[23,35],o:2},scooter:{a:"Scooter",b:"1F6F4",k:[36,53],o:4},bee:{a:"Honeybee",b:"1F41D",k:[12,1],n:["honeybee"],o:2},"flag-gn":{a:"Guinea Flag",b:"1F1EC-1F1F3",k:[2,7],o:2},candle:{a:"Candle",b:"1F56F-FE0F",c:"1F56F",j:["fire","wax"],k:[29,6],o:2},skateboard:{a:"Skateboard",b:"1F6F9",k:[37,1],o:11},medical_symbol:{a:"Medical Symbol",b:"2695-FE0F",c:"2695",k:[53,44],n:["staff_of_aesculapius"],o:4},ghost:{a:"Ghost",b:"1F47B",j:["halloween","spooky","scary"],k:[23,36],o:2},beetle:{a:"Lady Beetle",b:"1F41E",j:["animal","insect","nature","ladybug"],k:[12,2],o:2},"flag-gp":{a:"Guadeloupe Flag",b:"1F1EC-1F1F5",k:[2,8],o:2},baby_bottle:{a:"Baby Bottle",b:"1F37C",j:["food","container","milk"],k:[7,27],o:2},infinity:{a:"Infinity",b:"267E-FE0F",c:"267E",k:[53,39],o:11},glass_of_milk:{a:"Glass of Milk",b:"1F95B",k:[41,42],o:4},"man-facepalming":{a:"Man Facepalming",b:"1F926-200D-2642-FE0F",c:"1F926-200D-2642",k:[38,29],o:4},cricket:{a:"Cricket",b:"1F997",j:["sports"],k:[42,41],o:5},busstop:{a:"Bus Stop",b:"1F68F",j:["transportation","wait"],k:[34,14],o:2},"flag-gq":{a:"Equatorial Guinea Flag",b:"1F1EC-1F1F6",k:[2,9],o:2},alien:{a:"Extraterrestrial Alien",b:"1F47D",j:["UFO","paul","weird","outer_space"],k:[23,43],o:2},bulb:{a:"Electric Light Bulb",b:"1F4A1",j:["light","electricity","idea"],k:[25,43],o:2},"woman-facepalming":{a:"Woman Facepalming",b:"1F926-200D-2640-FE0F",c:"1F926-200D-2640",k:[38,23],o:4},spider:{a:"Spider",b:"1F577-FE0F",c:"1F577",j:["animal","arachnid"],k:[29,34],o:2},space_invader:{a:"Alien Monster",b:"1F47E",j:["game","arcade","play"],k:[23,44],o:2},motorway:{a:"Motorway",b:"1F6E3-FE0F",c:"1F6E3",j:["road","cupertino","interstate","highway"],k:[36,45],o:2},"flag-gr":{a:"Greece Flag",b:"1F1EC-1F1F7",k:[2,10],o:2},recycle:{a:"Black Universal Recycling Symbol",b:"267B-FE0F",c:"267B",j:["arrow","environment","garbage","trash"],k:[53,38],o:2},coffee:{a:"Hot Beverage",b:"2615",j:["beverage","caffeine","latte","espresso"],k:[53,0],o:2},flashlight:{a:"Electric Torch",b:"1F526",j:["dark","camping","sight","night"],k:[28,9],o:2},spider_web:{a:"Spider Web",b:"1F578-FE0F",c:"1F578",j:["animal","insect","arachnid","silk"],k:[29,35],o:2},izakaya_lantern:{a:"Izakaya Lantern",b:"1F3EE",j:["light","paper","halloween","spooky"],k:[11,8],n:["lantern"],o:2},"flag-gs":{a:"South Georgia & South Sandwich Islands Flag",b:"1F1EC-1F1F8",k:[2,11],o:2},fleur_de_lis:{a:"Fleur De Lis",b:"269C-FE0F",c:"269C",j:["decorative","scout"],k:[53,49],o:2},robot_face:{a:"Robot Face",b:"1F916",k:[37,29],o:2},railway_track:{a:"Railway Track",b:"1F6E4-FE0F",c:"1F6E4",j:["train","transportation"],k:[36,46],o:2},tea:{a:"Teacup Without Handle",b:"1F375",j:["drink","bowl","breakfast","green","british"],k:[7,20],o:2},"flag-gt":{a:"Guatemala Flag",b:"1F1EC-1F1F9",k:[2,12],o:2},oil_drum:{a:"Oil Drum",b:"1F6E2-FE0F",c:"1F6E2",j:["barrell"],k:[36,44],o:2},diya_lamp:{a:"Diya Lamp",b:"1FA94",k:[52,8],o:12},sake:{a:"Sake Bottle and Cup",b:"1F376",j:["wine","drink","drunk","beverage","japanese","alcohol","booze"],k:[7,21],o:2},trident:{a:"Trident Emblem",b:"1F531",j:["weapon","spear"],k:[28,20],o:2},"man-shrugging":{a:"Man Shrugging",b:"1F937-200D-2642-FE0F",c:"1F937-200D-2642",k:[39,41],o:4},smiley_cat:{a:"Smiling Cat Face with Open Mouth",b:"1F63A",j:["animal","cats","happy","smile"],k:[31,36],o:2},scorpion:{a:"Scorpion",b:"1F982",j:["animal","arachnid"],k:[42,20],o:2},"woman-shrugging":{a:"Woman Shrugging",b:"1F937-200D-2640-FE0F",c:"1F937-200D-2640",k:[39,35],o:4},notebook_with_decorative_cover:{a:"Notebook with Decorative Cover",b:"1F4D4",j:["classroom","notes","record","paper","study"],k:[26,42],o:2},fuelpump:{a:"Fuel Pump",b:"26FD",j:["gas station","petroleum"],k:[54,38],o:2},name_badge:{a:"Name Badge",b:"1F4DB",j:["fire","forbid"],k:[26,49],o:2},mosquito:{a:"Mosquito",b:"1F99F",k:[42,49],o:11},"flag-gu":{a:"Guam Flag",b:"1F1EC-1F1FA",k:[2,13],o:2},smile_cat:{a:"Grinning Cat Face with Smiling Eyes",b:"1F638",j:["animal","cats","smile"],k:[31,34],o:2},champagne:{a:"Bottle with Popping Cork",b:"1F37E",j:["drink","wine","bottle","celebration"],k:[7,29],o:2},joy_cat:{a:"Cat Face with Tears of Joy",b:"1F639",j:["animal","cats","haha","happy","tears"],k:[31,35],o:2},closed_book:{a:"Closed Book",b:"1F4D5",j:["read","library","knowledge","textbook","learn"],k:[26,43],o:2},rotating_light:{a:"Police Cars Revolving Light",b:"1F6A8",j:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],k:[34,56],o:2},microbe:{a:"Microbe",b:"1F9A0",k:[42,50],o:11},"flag-gw":{a:"Guinea-Bissau Flag",b:"1F1EC-1F1FC",k:[2,14],o:2},wine_glass:{a:"Wine Glass",b:"1F377",j:["drink","beverage","drunk","alcohol","booze"],k:[7,22],o:2},beginner:{a:"Japanese Symbol for Beginner",b:"1F530",j:["badge","shield"],k:[28,19],o:2},bouquet:{a:"Bouquet",b:"1F490",j:["flowers","nature","spring"],k:[25,26],o:2},heart_eyes_cat:{a:"Smiling Cat Face with Heart-Shaped Eyes",b:"1F63B",j:["animal","love","like","affection","cats","valentines","heart"],k:[31,37],o:2},"male-doctor":{a:"Male Doctor",b:"1F468-200D-2695-FE0F",c:"1F468-200D-2695",k:[17,2],o:4},book:{a:"Open Book",b:"1F4D6",k:[26,44],n:["open_book"],o:2},traffic_light:{a:"Horizontal Traffic Light",b:"1F6A5",j:["transportation","signal"],k:[34,53],o:2},cocktail:{a:"Cocktail Glass",b:"1F378",j:["drink","drunk","alcohol","beverage","booze","mojito"],k:[7,23],o:2},o:{a:"Heavy Large Circle",b:"2B55",j:["circle","round"],k:[55,43],o:2},"flag-gy":{a:"Guyana Flag",b:"1F1EC-1F1FE",k:[2,15],o:2},"female-doctor":{a:"Female Doctor",b:"1F469-200D-2695-FE0F",c:"1F469-200D-2695",k:[19,44],o:4},smirk_cat:{a:"Cat Face with Wry Smile",b:"1F63C",j:["animal","cats","smirk"],k:[31,38],o:2},green_book:{a:"Green Book",b:"1F4D7",j:["read","library","knowledge","study"],k:[26,45],o:2},cherry_blossom:{a:"Cherry Blossom",b:"1F338",j:["nature","plant","spring","flower"],k:[6,16],o:2},"flag-hk":{a:"Hong Kong Sar China Flag",b:"1F1ED-1F1F0",k:[2,16],o:2},vertical_traffic_light:{a:"Vertical Traffic Light",b:"1F6A6",j:["transportation","driving"],k:[34,54],o:2},white_check_mark:{a:"White Heavy Check Mark",b:"2705",j:["green-square","ok","agree","vote","election","answer","tick"],k:[54,40],o:2},tropical_drink:{a:"Tropical Drink",b:"1F379",j:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],k:[7,24],o:2},kissing_cat:{a:"Kissing Cat Face with Closed Eyes",b:"1F63D",j:["animal","cats","kiss"],k:[31,39],o:2},"flag-hm":{a:"Heard & Mcdonald Islands Flag",b:"1F1ED-1F1F2",k:[2,17],o:2},octagonal_sign:{a:"Octagonal Sign",b:"1F6D1",k:[36,39],o:4},white_flower:{a:"White Flower",b:"1F4AE",j:["japanese","spring"],k:[26,4],o:2},ballot_box_with_check:{a:"Ballot Box with Check",b:"2611-FE0F",c:"2611",j:["ok","agree","confirm","black-square","vote","election","yes","tick"],k:[52,55],o:2},blue_book:{a:"Blue Book",b:"1F4D8",j:["read","library","knowledge","learn","study"],k:[26,46],o:2},beer:{a:"Beer Mug",b:"1F37A",j:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],k:[7,25],o:2},construction:{a:"Construction Sign",b:"1F6A7",j:["wip","progress","caution","warning"],k:[34,55],o:2},rosette:{a:"Rosette",b:"1F3F5-FE0F",c:"1F3F5",j:["flower","decoration","military"],k:[11,18],o:2},heavy_check_mark:{a:"Heavy Check Mark",b:"2714-FE0F",c:"2714",j:["ok","nike","answer","yes","tick"],k:[55,12],o:2},scream_cat:{a:"Weary Cat Face",b:"1F640",j:["animal","cats","munch","scared","scream"],k:[31,42],o:2},orange_book:{a:"Orange Book",b:"1F4D9",j:["read","library","knowledge","textbook","study"],k:[26,47],o:2},beers:{a:"Clinking Beer Mugs",b:"1F37B",j:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],k:[7,26],o:2},"male-student":{a:"Male Student",b:"1F468-200D-1F393",k:[14,50],o:4},"flag-hn":{a:"Honduras Flag",b:"1F1ED-1F1F3",k:[2,18],o:2},crying_cat_face:{a:"Crying Cat Face",b:"1F63F",j:["animal","tears","weep","sad","cats","upset","cry"],k:[31,41],o:2},anchor:{a:"Anchor",b:"2693",j:["ship","ferry","sea","boat"],k:[53,42],o:2},"flag-hr":{a:"Croatia Flag",b:"1F1ED-1F1F7",k:[2,19],o:2},heavy_multiplication_x:{a:"Heavy Multiplication X",b:"2716-FE0F",c:"2716",j:["math","calculation"],k:[55,13],o:2},"female-student":{a:"Female Student",b:"1F469-200D-1F393",k:[17,40],o:4},rose:{a:"Rose",b:"1F339",j:["flowers","valentines","love","spring"],k:[6,17],o:2},books:{a:"Books",b:"1F4DA",j:["literature","library","study"],k:[26,48],o:2},clinking_glasses:{a:"Clinking Glasses",b:"1F942",j:["beverage","drink","party","alcohol","celebrate","cheers"],k:[41,18],o:4},x:{a:"Cross Mark",b:"274C",j:["no","delete","remove","cancel"],k:[55,21],o:2},pouting_cat:{a:"Pouting Cat Face",b:"1F63E",j:["animal","cats"],k:[31,40],o:2},wilted_flower:{a:"Wilted Flower",b:"1F940",j:["plant","nature","flower"],k:[41,16],o:4},boat:{a:"Sailboat",b:"26F5",k:[54,16],n:["sailboat"],o:2},"flag-ht":{a:"Haiti Flag",b:"1F1ED-1F1F9",k:[2,20],o:2},tumbler_glass:{a:"Tumbler Glass",b:"1F943",j:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],k:[41,19],o:4},notebook:{a:"Notebook",b:"1F4D3",j:["stationery","record","notes","paper","study"],k:[26,41],o:2},"male-teacher":{a:"Male Teacher",b:"1F468-200D-1F3EB",k:[15,11],o:4},ledger:{a:"Ledger",b:"1F4D2",j:["notes","paper"],k:[26,40],o:2},"flag-hu":{a:"Hungary Flag",b:"1F1ED-1F1FA",k:[2,21],o:2},cup_with_straw:{a:"Cup with Straw",b:"1F964",k:[41,51],o:5},hibiscus:{a:"Hibiscus",b:"1F33A",j:["plant","vegetable","flowers","beach"],k:[6,18],o:2},see_no_evil:{a:"See-No-Evil Monkey",b:"1F648",j:["monkey","animal","nature","haha"],k:[32,44],o:2},canoe:{a:"Canoe",b:"1F6F6",j:["boat","paddle","water","ship"],k:[36,55],o:4},negative_squared_cross_mark:{a:"Negative Squared Cross Mark",b:"274E",j:["x","green-square","no","deny"],k:[55,22],o:2},"flag-ic":{a:"Canary Islands Flag",b:"1F1EE-1F1E8",k:[2,22],o:2},beverage_box:{a:"Beverage Box",b:"1F9C3",k:[44,11],o:12},speedboat:{a:"Speedboat",b:"1F6A4",j:["ship","transportation","vehicle","summer"],k:[34,52],o:2},heavy_plus_sign:{a:"Heavy Plus Sign",b:"2795",j:["math","calculation","addition","more","increase"],k:[55,29],o:2},sunflower:{a:"Sunflower",b:"1F33B",j:["nature","plant","fall"],k:[6,19],o:2},page_with_curl:{a:"Page with Curl",b:"1F4C3",j:["documents","office","paper"],k:[26,25],o:2},"female-teacher":{a:"Female Teacher",b:"1F469-200D-1F3EB",k:[18,1],o:4},hear_no_evil:{a:"Hear-No-Evil Monkey",b:"1F649",j:["animal","monkey","nature"],k:[32,45],o:2},mate_drink:{a:"Mate Drink",b:"1F9C9",k:[44,17],o:12},passenger_ship:{a:"Passenger Ship",b:"1F6F3-FE0F",c:"1F6F3",j:["yacht","cruise","ferry"],k:[36,52],o:2},scroll:{a:"Scroll",b:"1F4DC",j:["documents","ancient","history","paper"],k:[26,50],o:2},blossom:{a:"Blossom",b:"1F33C",j:["nature","flowers","yellow"],k:[6,20],o:2},"flag-id":{a:"Indonesia Flag",b:"1F1EE-1F1E9",k:[2,23],o:2},speak_no_evil:{a:"Speak-No-Evil Monkey",b:"1F64A",j:["monkey","animal","nature","omg"],k:[32,46],o:2},heavy_minus_sign:{a:"Heavy Minus Sign",b:"2796",j:["math","calculation","subtract","less"],k:[55,30],o:2},"flag-ie":{a:"Ireland Flag",b:"1F1EE-1F1EA",k:[2,24],o:2},ice_cube:{a:"Ice Cube",b:"1F9CA",k:[44,18],o:12},page_facing_up:{a:"Page Facing Up",b:"1F4C4",j:["documents","office","paper","information"],k:[26,26],o:2},"male-judge":{a:"Male Judge",b:"1F468-200D-2696-FE0F",c:"1F468-200D-2696",k:[17,8],o:4},tulip:{a:"Tulip",b:"1F337",j:["flowers","plant","nature","summer","spring"],k:[6,15],o:2},ferry:{a:"Ferry",b:"26F4-FE0F",c:"26F4",j:["boat","ship","yacht"],k:[54,15],o:2},kiss:{a:"Kiss Mark",b:"1F48B",j:["face","lips","love","like","affection","valentines"],k:[25,21],o:2},heavy_division_sign:{a:"Heavy Division Sign",b:"2797",j:["divide","math","calculation"],k:[55,31],o:2},newspaper:{a:"Newspaper",b:"1F4F0",j:["press","headline"],k:[27,13],o:2},"female-judge":{a:"Female Judge",b:"1F469-200D-2696-FE0F",c:"1F469-200D-2696",k:[19,50],o:4},seedling:{a:"Seedling",b:"1F331",j:["plant","nature","grass","lawn","spring"],k:[6,9],o:2},love_letter:{a:"Love Letter",b:"1F48C",j:["email","like","affection","envelope","valentines"],k:[25,22],o:2},chopsticks:{a:"Chopsticks",b:"1F962",k:[41,49],o:5},motor_boat:{a:"Motor Boat",b:"1F6E5-FE0F",c:"1F6E5",j:["ship"],k:[36,47],o:2},"flag-il":{a:"Israel Flag",b:"1F1EE-1F1F1",k:[2,25],o:2},curly_loop:{a:"Curly Loop",b:"27B0",j:["scribble","draw","shape","squiggle"],k:[55,33],o:2},"flag-im":{a:"Isle of Man Flag",b:"1F1EE-1F1F2",k:[2,26],o:2},evergreen_tree:{a:"Evergreen Tree",b:"1F332",j:["plant","nature"],k:[6,10],o:2},cupid:{a:"Heart with Arrow",b:"1F498",j:["love","like","heart","affection","valentines"],k:[25,34],o:2},loop:{a:"Double Curly Loop",b:"27BF",j:["tape","cassette"],k:[55,34],o:2},ship:{a:"Ship",b:"1F6A2",j:["transportation","titanic","deploy"],k:[34,33],o:2},rolled_up_newspaper:{a:"Rolled Up Newspaper",b:"1F5DE-FE0F",c:"1F5DE",k:[30,23],o:2},knife_fork_plate:{a:"Knife Fork Plate",b:"1F37D-FE0F",c:"1F37D",k:[7,28],o:2},fork_and_knife:{a:"Fork and Knife",b:"1F374",j:["cutlery","kitchen"],k:[7,19],o:2},"male-farmer":{a:"Male Farmer",b:"1F468-200D-1F33E",k:[14,38],o:4},bookmark_tabs:{a:"Bookmark Tabs",b:"1F4D1",j:["favorite","save","order","tidy"],k:[26,39],o:2},part_alternation_mark:{a:"Part Alternation Mark",b:"303D-FE0F",c:"303D",j:["graph","presentation","stats","business","economics","bad"],k:[55,45],o:2},"flag-in":{a:"India Flag",b:"1F1EE-1F1F3",k:[2,27],o:2},gift_heart:{a:"Heart with Ribbon",b:"1F49D",j:["love","valentines"],k:[25,39],o:2},airplane:{a:"Airplane",b:"2708-FE0F",c:"2708",j:["vehicle","transportation","flight","fly"],k:[54,41],o:2},deciduous_tree:{a:"Deciduous Tree",b:"1F333",j:["plant","nature"],k:[6,11],o:2},spoon:{a:"Spoon",b:"1F944",j:["cutlery","kitchen","tableware"],k:[41,20],o:4},"flag-io":{a:"British Indian Ocean Territory Flag",b:"1F1EE-1F1F4",k:[2,28],o:2},palm_tree:{a:"Palm Tree",b:"1F334",j:["plant","vegetable","nature","summer","beach","mojito","tropical"],k:[6,12],o:2},sparkling_heart:{a:"Sparkling Heart",b:"1F496",j:["love","like","affection","valentines"],k:[25,32],o:2},"female-farmer":{a:"Female Farmer",b:"1F469-200D-1F33E",k:[17,28],o:4},eight_spoked_asterisk:{a:"Eight Spoked Asterisk",b:"2733-FE0F",c:"2733",j:["star","sparkle","green-square"],k:[55,17],o:2},small_airplane:{a:"Small Airplane",b:"1F6E9-FE0F",c:"1F6E9",j:["flight","transportation","fly","vehicle"],k:[36,48],o:2},bookmark:{a:"Bookmark",b:"1F516",j:["favorite","label","save"],k:[27,50],o:2},eight_pointed_black_star:{a:"Eight Pointed Black Star",b:"2734-FE0F",c:"2734",j:["orange-square","shape","polygon"],k:[55,18],o:2},heartpulse:{a:"Growing Heart",b:"1F497",j:["like","love","affection","valentines","pink"],k:[25,33],o:2},label:{a:"Label",b:"1F3F7-FE0F",c:"1F3F7",j:["sale","tag"],k:[11,19],o:2},"flag-iq":{a:"Iraq Flag",b:"1F1EE-1F1F6",k:[2,29],o:2},hocho:{a:"Hocho",b:"1F52A",j:["knife","blade","cutlery","kitchen","weapon"],k:[28,13],n:["knife"],o:2},cactus:{a:"Cactus",b:"1F335",j:["vegetable","plant","nature"],k:[6,13],o:2},airplane_departure:{a:"Airplane Departure",b:"1F6EB",k:[36,49],o:2},airplane_arriving:{a:"Airplane Arriving",b:"1F6EC",k:[36,50],o:2},ear_of_rice:{a:"Ear of Rice",b:"1F33E",j:["nature","plant"],k:[6,22],o:2},"flag-ir":{a:"Iran Flag",b:"1F1EE-1F1F7",k:[2,30],o:2},moneybag:{a:"Money Bag",b:"1F4B0",j:["dollar","payment","coins","sale"],k:[26,6],o:2},"male-cook":{a:"Male Cook",b:"1F468-200D-1F373",k:[14,44],o:4},heartbeat:{a:"Beating Heart",b:"1F493",j:["love","like","affection","valentines","pink","heart"],k:[25,29],o:2},sparkle:{a:"Sparkle",b:"2747-FE0F",c:"2747",j:["stars","green-square","awesome","good","fireworks"],k:[55,20],o:2},amphora:{a:"Amphora",b:"1F3FA",j:["vase","jar"],k:[11,22],o:2},yen:{a:"Banknote with Yen Sign",b:"1F4B4",j:["money","sales","japanese","dollar","currency"],k:[26,10],o:2},revolving_hearts:{a:"Revolving Hearts",b:"1F49E",j:["love","like","affection","valentines"],k:[25,40],o:2},bangbang:{a:"Double Exclamation Mark",b:"203C-FE0F",c:"203C",j:["exclamation","surprise"],k:[52,10],o:2},parachute:{a:"Parachute",b:"1FA82",k:[52,3],o:12},herb:{a:"Herb",b:"1F33F",j:["vegetable","plant","medicine","weed","grass","lawn"],k:[6,23],o:2},"flag-is":{a:"Iceland Flag",b:"1F1EE-1F1F8",k:[2,31],o:2},"female-cook":{a:"Female Cook",b:"1F469-200D-1F373",k:[17,34],o:4},interrobang:{a:"Exclamation Question Mark",b:"2049-FE0F",c:"2049",j:["wat","punctuation","surprise"],k:[52,11],o:2},seat:{a:"Seat",b:"1F4BA",j:["sit","airplane","transport","bus","flight","fly"],k:[26,16],o:2},dollar:{a:"Banknote with Dollar Sign",b:"1F4B5",j:["money","sales","bill","currency"],k:[26,11],o:2},two_hearts:{a:"Two Hearts",b:"1F495",j:["love","like","affection","valentines","heart"],k:[25,31],o:2},it:{a:"Italy Flag",b:"1F1EE-1F1F9",j:["italy","flag","nation","country","banner"],k:[2,32],n:["flag-it"],o:2},shamrock:{a:"Shamrock",b:"2618-FE0F",c:"2618",j:["vegetable","plant","nature","irish","clover"],k:[53,1],o:2},four_leaf_clover:{a:"Four Leaf Clover",b:"1F340",j:["vegetable","plant","nature","lucky","irish"],k:[6,24],o:2},euro:{a:"Banknote with Euro Sign",b:"1F4B6",j:["money","sales","dollar","currency"],k:[26,12],o:2},question:{a:"Black Question Mark Ornament",b:"2753",j:["doubt","confused"],k:[55,23],o:2},helicopter:{a:"Helicopter",b:"1F681",j:["transportation","vehicle","fly"],k:[34,0],o:2},heart_decoration:{a:"Heart Decoration",b:"1F49F",j:["purple-square","love","like"],k:[25,41],o:2},"flag-je":{a:"Jersey Flag",b:"1F1EF-1F1EA",k:[2,33],o:2},"male-mechanic":{a:"Male Mechanic",b:"1F468-200D-1F527",k:[15,50],o:4},suspension_railway:{a:"Suspension Railway",b:"1F69F",j:["vehicle","transportation"],k:[34,30],o:2},heavy_heart_exclamation_mark_ornament:{a:"Heavy Heart Exclamation Mark Ornament",b:"2763-FE0F",c:"2763",k:[55,27],o:2},"female-mechanic":{a:"Female Mechanic",b:"1F469-200D-1F527",k:[18,35],o:4},"flag-jm":{a:"Jamaica Flag",b:"1F1EF-1F1F2",k:[2,34],o:2},grey_question:{a:"White Question Mark Ornament",b:"2754",j:["doubts","gray","huh","confused"],k:[55,24],o:2},maple_leaf:{a:"Maple Leaf",b:"1F341",j:["nature","plant","vegetable","ca","fall"],k:[6,25],o:2},pound:{a:"Banknote with Pound Sign",b:"1F4B7",j:["british","sterling","money","sales","bills","uk","england","currency"],k:[26,13],o:2},money_with_wings:{a:"Money with Wings",b:"1F4B8",j:["dollar","bills","payment","sale"],k:[26,14],o:2},"flag-jo":{a:"Jordan Flag",b:"1F1EF-1F1F4",k:[2,35],o:2},fallen_leaf:{a:"Fallen Leaf",b:"1F342",j:["nature","plant","vegetable","leaves"],k:[6,26],o:2},broken_heart:{a:"Broken Heart",b:"1F494",j:["sad","sorry","break","heart","heartbreak"],k:[25,30],l:["</3"],m:"</3",o:2},grey_exclamation:{a:"White Exclamation Mark Ornament",b:"2755",j:["surprise","punctuation","gray","wow","warning"],k:[55,25],o:2},mountain_cableway:{a:"Mountain Cableway",b:"1F6A0",j:["transportation","vehicle","ski"],k:[34,31],o:2},exclamation:{a:"Heavy Exclamation Mark Symbol",b:"2757",j:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],k:[55,26],n:["heavy_exclamation_mark"],o:2},leaves:{a:"Leaf Fluttering in Wind",b:"1F343",j:["nature","plant","tree","vegetable","grass","lawn","spring"],k:[6,27],o:2},heart:{a:"Heavy Black Heart",b:"2764-FE0F",c:"2764",j:["love","like","valentines"],k:[55,28],l:["<3"],m:"<3",o:2},jp:{a:"Japan Flag",b:"1F1EF-1F1F5",j:["japanese","nation","flag","country","banner"],k:[2,36],n:["flag-jp"],o:2},"male-factory-worker":{a:"Male Factory Worker",b:"1F468-200D-1F3ED",k:[15,17],o:4},credit_card:{a:"Credit Card",b:"1F4B3",j:["money","sales","dollar","bill","payment","shopping"],k:[26,9],o:2},aerial_tramway:{a:"Aerial Tramway",b:"1F6A1",j:["transportation","vehicle","ski"],k:[34,32],o:2},"female-factory-worker":{a:"Female Factory Worker",b:"1F469-200D-1F3ED",k:[18,7],o:4},receipt:{a:"Receipt",b:"1F9FE",k:[51,49],o:11},wavy_dash:{a:"Wavy Dash",b:"3030-FE0F",c:"3030",j:["draw","line","moustache","mustache","squiggle","scribble"],k:[55,44],o:2},"flag-ke":{a:"Kenya Flag",b:"1F1F0-1F1EA",k:[2,37],o:2},satellite:{a:"Satellite",b:"1F6F0-FE0F",c:"1F6F0",j:["communication","future","radio","space"],k:[36,51],o:2},orange_heart:{a:"Orange Heart",b:"1F9E1",k:[51,20],o:5},yellow_heart:{a:"Yellow Heart",b:"1F49B",j:["love","like","affection","valentines"],k:[25,37],m:"<3",o:2},rocket:{a:"Rocket",b:"1F680",j:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],k:[33,56],o:2},chart:{a:"Chart with Upwards Trend and Yen Sign",b:"1F4B9",j:["green-square","graph","presentation","stats"],k:[26,15],o:2},"flag-kg":{a:"Kyrgyzstan Flag",b:"1F1F0-1F1EC",k:[2,38],o:2},currency_exchange:{a:"Currency Exchange",b:"1F4B1",j:["money","sales","dollar","travel"],k:[26,7],o:2},green_heart:{a:"Green Heart",b:"1F49A",j:["love","like","affection","valentines"],k:[25,36],m:"<3",o:2},flying_saucer:{a:"Flying Saucer",b:"1F6F8",k:[37,0],o:5},"flag-kh":{a:"Cambodia Flag",b:"1F1F0-1F1ED",k:[2,39],o:2},"male-office-worker":{a:"Male Office Worker",b:"1F468-200D-1F4BC",k:[15,44],o:4},tm:{a:"Trade Mark Sign",b:"2122-FE0F",c:"2122",j:["trademark","brand","law","legal"],k:[52,12],o:2},bellhop_bell:{a:"Bellhop Bell",b:"1F6CE-FE0F",c:"1F6CE",j:["service"],k:[36,36],o:2},blue_heart:{a:"Blue Heart",b:"1F499",j:["love","like","affection","valentines"],k:[25,35],m:"<3",o:2},"flag-ki":{a:"Kiribati Flag",b:"1F1F0-1F1EE",k:[2,40],o:2},heavy_dollar_sign:{a:"Heavy Dollar Sign",b:"1F4B2",j:["money","sales","payment","currency","buck"],k:[26,8],o:2},"female-office-worker":{a:"Female Office Worker",b:"1F469-200D-1F4BC",k:[18,29],o:4},purple_heart:{a:"Purple Heart",b:"1F49C",j:["love","like","affection","valentines"],k:[25,38],m:"<3",o:2},luggage:{a:"Luggage",b:"1F9F3",k:[51,38],o:11},"flag-km":{a:"Comoros Flag",b:"1F1F0-1F1F2",k:[2,41],o:2},email:{a:"Envelope",b:"2709-FE0F",c:"2709",j:["letter","postal","inbox","communication"],k:[54,42],n:["envelope"],o:2},"e-mail":{a:"E-Mail Symbol",b:"1F4E7",j:["communication","inbox"],k:[27,4],o:2},"flag-kn":{a:"St. Kitts & Nevis Flag",b:"1F1F0-1F1F3",k:[2,42],o:2},hourglass:{a:"Hourglass",b:"231B",j:["time","clock","oldschool","limit","exam","quiz","test"],k:[52,23],o:2},brown_heart:{a:"Brown Heart",b:"1F90E",k:[37,16],o:12},"male-scientist":{a:"Male Scientist",b:"1F468-200D-1F52C",k:[15,56],o:4},hourglass_flowing_sand:{a:"Hourglass with Flowing Sand",b:"23F3",j:["oldschool","time","countdown"],k:[52,36],o:2},black_heart:{a:"Black Heart",b:"1F5A4",j:["evil"],k:[30,9],o:4},incoming_envelope:{a:"Incoming Envelope",b:"1F4E8",j:["email","inbox"],k:[27,5],o:2},"flag-kp":{a:"North Korea Flag",b:"1F1F0-1F1F5",k:[2,43],o:2},"female-scientist":{a:"Female Scientist",b:"1F469-200D-1F52C",k:[18,41],o:4},watch:{a:"Watch",b:"231A",j:["time","accessories"],k:[52,22],o:2},white_heart:{a:"White Heart",b:"1F90D",k:[37,15],o:12},kr:{a:"South Korea Flag",b:"1F1F0-1F1F7",j:["south","korea","nation","flag","country","banner"],k:[2,44],n:["flag-kr"],o:2},envelope_with_arrow:{a:"Envelope with Downwards Arrow Above",b:"1F4E9",j:["email","communication"],k:[27,6],o:2},outbox_tray:{a:"Outbox Tray",b:"1F4E4",j:["inbox","email"],k:[27,1],o:2},"male-technologist":{a:"Male Technologist",b:"1F468-200D-1F4BB",k:[15,38],o:4},alarm_clock:{a:"Alarm Clock",b:"23F0",j:["time","wake"],k:[52,33],o:2},"flag-kw":{a:"Kuwait Flag",b:"1F1F0-1F1FC",k:[2,45],o:2},anger:{a:"Anger Symbol",b:"1F4A2",j:["angry","mad"],k:[25,44],o:2},inbox_tray:{a:"Inbox Tray",b:"1F4E5",j:["email","documents"],k:[27,2],o:2},"flag-ky":{a:"Cayman Islands Flag",b:"1F1F0-1F1FE",k:[2,46],o:2},stopwatch:{a:"Stopwatch",b:"23F1-FE0F",c:"23F1",j:["time","deadline"],k:[52,34],o:2},"female-technologist":{a:"Female Technologist",b:"1F469-200D-1F4BB",k:[18,23],o:4},boom:{a:"Collision Symbol",b:"1F4A5",j:["bomb","explode","explosion","collision","blown"],k:[25,47],n:["collision"],o:2},"flag-kz":{a:"Kazakhstan Flag",b:"1F1F0-1F1FF",k:[2,47],o:2},timer_clock:{a:"Timer Clock",b:"23F2-FE0F",c:"23F2",j:["alarm"],k:[52,35],o:2},"package":{a:"Package",b:"1F4E6",j:["mail","gift","cardboard","box","moving"],k:[27,3],o:2},mailbox:{a:"Closed Mailbox with Raised Flag",b:"1F4EB",j:["email","inbox","communication"],k:[27,8],o:2},"flag-la":{a:"Laos Flag",b:"1F1F1-1F1E6",k:[2,48],o:2},dizzy:{a:"Dizzy Symbol",b:"1F4AB",j:["star","sparkle","shoot","magic"],k:[26,1],o:2},"male-singer":{a:"Male Singer",b:"1F468-200D-1F3A4",k:[14,56],o:4},mantelpiece_clock:{a:"Mantelpiece Clock",b:"1F570-FE0F",c:"1F570",j:["time"],k:[29,7],o:2},"female-singer":{a:"Female Singer",b:"1F469-200D-1F3A4",k:[17,46],o:4},"flag-lb":{a:"Lebanon Flag",b:"1F1F1-1F1E7",k:[2,49],o:2},mailbox_closed:{a:"Closed Mailbox with Lowered Flag",b:"1F4EA",j:["email","communication","inbox"],k:[27,7],o:2},sweat_drops:{a:"Splashing Sweat Symbol",b:"1F4A6",j:["water","drip","oops"],k:[25,48],o:2},clock12:{a:"Clock Face Twelve Oclock",b:"1F55B",j:["time","noon","midnight","midday","late","early","schedule"],k:[28,50],o:2},mailbox_with_mail:{a:"Open Mailbox with Raised Flag",b:"1F4EC",j:["email","inbox","communication"],k:[27,9],o:2},clock1230:{a:"Clock Face Twelve-Thirty",b:"1F567",j:["time","late","early","schedule"],k:[29,5],o:2},dash:{a:"Dash Symbol",b:"1F4A8",j:["wind","air","fast","shoo","fart","smoke","puff"],k:[25,50],o:2},"flag-lc":{a:"St. Lucia Flag",b:"1F1F1-1F1E8",k:[2,50],o:2},hole:{a:"Hole",b:"1F573-FE0F",c:"1F573",j:["embarrassing"],k:[29,8],o:2},"male-artist":{a:"Male Artist",b:"1F468-200D-1F3A8",k:[15,5],o:4},clock1:{a:"Clock Face One Oclock",b:"1F550",j:["time","late","early","schedule"],k:[28,39],o:2},mailbox_with_no_mail:{a:"Open Mailbox with Lowered Flag",b:"1F4ED",j:["email","inbox"],k:[27,10],o:2},"flag-li":{a:"Liechtenstein Flag",b:"1F1F1-1F1EE",k:[2,51],o:2},bomb:{a:"Bomb",b:"1F4A3",j:["boom","explode","explosion","terrorism"],k:[25,45],o:2},postbox:{a:"Postbox",b:"1F4EE",j:["email","letter","envelope"],k:[27,11],o:2},"female-artist":{a:"Female Artist",b:"1F469-200D-1F3A8",k:[17,52],o:4},clock130:{a:"Clock Face One-Thirty",b:"1F55C",j:["time","late","early","schedule"],k:[28,51],o:2},"flag-lk":{a:"Sri Lanka Flag",b:"1F1F1-1F1F0",k:[2,52],o:2},ballot_box_with_ballot:{a:"Ballot Box with Ballot",b:"1F5F3-FE0F",c:"1F5F3",k:[30,28],o:2},keycap_ten:{a:"Keycap Ten",b:"1F51F",j:["numbers","10","blue-square"],k:[28,2],o:2},clock2:{a:"Clock Face Two Oclock",b:"1F551",j:["time","late","early","schedule"],k:[28,40],o:2},"flag-lr":{a:"Liberia Flag",b:"1F1F1-1F1F7",k:[2,53],o:2},speech_balloon:{a:"Speech Balloon",b:"1F4AC",j:["bubble","words","message","talk","chatting"],k:[26,2],o:2},"flag-ls":{a:"Lesotho Flag",b:"1F1F1-1F1F8",k:[2,54],o:2},clock230:{a:"Clock Face Two-Thirty",b:"1F55D",j:["time","late","early","schedule"],k:[28,52],o:2},"male-pilot":{a:"Male Pilot",b:"1F468-200D-2708-FE0F",c:"1F468-200D-2708",k:[17,14],o:4},capital_abcd:{a:"Input Symbol for Latin Capital Letters",b:"1F520",j:["alphabet","words","blue-square"],k:[28,3],o:2},pencil2:{a:"Pencil",b:"270F-FE0F",c:"270F",j:["stationery","write","paper","writing","school","study"],k:[55,10],o:2},"female-pilot":{a:"Female Pilot",b:"1F469-200D-2708-FE0F",c:"1F469-200D-2708",k:[19,56],o:4},black_nib:{a:"Black Nib",b:"2712-FE0F",c:"2712",j:["pen","stationery","writing","write"],k:[55,11],o:2},left_speech_bubble:{a:"Left Speech Bubble",b:"1F5E8-FE0F",c:"1F5E8",j:["words","message","talk","chatting"],k:[30,26],o:2},clock3:{a:"Clock Face Three Oclock",b:"1F552",j:["time","late","early","schedule"],k:[28,41],o:2},abcd:{a:"Input Symbol for Latin Small Letters",b:"1F521",j:["blue-square","alphabet"],k:[28,4],o:2},"flag-lt":{a:"Lithuania Flag",b:"1F1F1-1F1F9",k:[2,55],o:2},clock330:{a:"Clock Face Three-Thirty",b:"1F55E",j:["time","late","early","schedule"],k:[28,53],o:2},"flag-lu":{a:"Luxembourg Flag",b:"1F1F1-1F1FA",k:[2,56],o:2},right_anger_bubble:{a:"Right Anger Bubble",b:"1F5EF-FE0F",c:"1F5EF",j:["caption","speech","thinking","mad"],k:[30,27],o:2},lower_left_fountain_pen:{a:"Lower Left Fountain Pen",b:"1F58B-FE0F",c:"1F58B",k:[29,45],o:2},"male-astronaut":{a:"Male Astronaut",b:"1F468-200D-1F680",k:[16,5],o:4},thought_balloon:{a:"Thought Balloon",b:"1F4AD",j:["bubble","cloud","speech","thinking","dream"],k:[26,3],o:2},symbols:{a:"Input Symbol for Symbols",b:"1F523",j:["blue-square","music","note","ampersand","percent","glyphs","characters"],k:[28,6],o:2},clock4:{a:"Clock Face Four Oclock",b:"1F553",j:["time","late","early","schedule"],k:[28,42],o:2},"flag-lv":{a:"Latvia Flag",b:"1F1F1-1F1FB",k:[3,0],o:2},lower_left_ballpoint_pen:{a:"Lower Left Ballpoint Pen",b:"1F58A-FE0F",c:"1F58A",k:[29,44],o:2},abc:{a:"Input Symbol for Latin Letters",b:"1F524",j:["blue-square","alphabet"],k:[28,7],o:2},zzz:{a:"Sleeping Symbol",b:"1F4A4",j:["sleepy","tired","dream"],k:[25,46],o:2},lower_left_paintbrush:{a:"Lower Left Paintbrush",b:"1F58C-FE0F",c:"1F58C",k:[29,46],o:2},"female-astronaut":{a:"Female Astronaut",b:"1F469-200D-1F680",k:[18,47],o:4},"flag-ly":{a:"Libya Flag",b:"1F1F1-1F1FE",k:[3,1],o:2},clock430:{a:"Clock Face Four-Thirty",b:"1F55F",j:["time","late","early","schedule"],k:[28,54],o:2},"flag-ma":{a:"Morocco Flag",b:"1F1F2-1F1E6",k:[3,2],o:2},a:{a:"Negative Squared Latin Capital Letter a",b:"1F170-FE0F",c:"1F170",j:["red-square","alphabet","letter"],k:[0,16],o:2},clock5:{a:"Clock Face Five Oclock",b:"1F554",j:["time","late","early","schedule"],k:[28,43],o:2},lower_left_crayon:{a:"Lower Left Crayon",b:"1F58D-FE0F",c:"1F58D",k:[29,47],o:2},"male-firefighter":{a:"Male Firefighter",b:"1F468-200D-1F692",k:[16,11],o:4},memo:{a:"Memo",b:"1F4DD",j:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],k:[26,51],n:["pencil"],o:2},ab:{a:"Negative Squared Ab",b:"1F18E",j:["red-square","alphabet"],k:[0,20],o:2},"flag-mc":{a:"Monaco Flag",b:"1F1F2-1F1E8",k:[3,3],o:2},clock530:{a:"Clock Face Five-Thirty",b:"1F560",j:["time","late","early","schedule"],k:[28,55],o:2},briefcase:{a:"Briefcase",b:"1F4BC",j:["business","documents","work","law","legal","job","career"],k:[26,18],o:2},"female-firefighter":{a:"Female Firefighter",b:"1F469-200D-1F692",k:[18,53],o:4},clock6:{a:"Clock Face Six Oclock",b:"1F555",j:["time","late","early","schedule","dawn","dusk"],k:[28,44],o:2},b:{a:"Negative Squared Latin Capital Letter B",b:"1F171-FE0F",c:"1F171",j:["red-square","alphabet","letter"],k:[0,17],o:2},"flag-md":{a:"Moldova Flag",b:"1F1F2-1F1E9",k:[3,4],o:2},clock630:{a:"Clock Face Six-Thirty",b:"1F561",j:["time","late","early","schedule"],k:[28,56],o:2},cl:{a:"Squared Cl",b:"1F191",j:["alphabet","words","red-square"],k:[0,21],o:2},"flag-me":{a:"Montenegro Flag",b:"1F1F2-1F1EA",k:[3,5],o:2},file_folder:{a:"File Folder",b:"1F4C1",j:["documents","business","office"],k:[26,23],o:2},"male-police-officer":{obsoletes:"1F46E",a:"Male Police Officer",b:"1F46E-200D-2642-FE0F",c:"1F46E-200D-2642",k:[21,43],o:4},cool:{a:"Squared Cool",b:"1F192",j:["words","blue-square"],k:[0,22],o:2},clock7:{a:"Clock Face Seven Oclock",b:"1F556",j:["time","late","early","schedule"],k:[28,45],o:2},"flag-mf":{a:"St. Martin Flag",b:"1F1F2-1F1EB",k:[3,6],o:2},open_file_folder:{a:"Open File Folder",b:"1F4C2",j:["documents","load"],k:[26,24],o:2},card_index_dividers:{a:"Card Index Dividers",b:"1F5C2-FE0F",c:"1F5C2",j:["organizing","business","stationery"],k:[30,15],o:2},"flag-mg":{a:"Madagascar Flag",b:"1F1F2-1F1EC",k:[3,7],o:2},free:{a:"Squared Free",b:"1F193",j:["blue-square","words"],k:[0,23],o:2},"female-police-officer":{a:"Female Police Officer",b:"1F46E-200D-2640-FE0F",c:"1F46E-200D-2640",k:[21,37],o:4},clock730:{a:"Clock Face Seven-Thirty",b:"1F562",j:["time","late","early","schedule"],k:[29,0],o:2},date:{a:"Calendar",b:"1F4C5",j:["calendar","schedule"],k:[26,27],o:2},clock8:{a:"Clock Face Eight Oclock",b:"1F557",j:["time","late","early","schedule"],k:[28,46],o:2},information_source:{a:"Information Source",b:"2139-FE0F",c:"2139",j:["blue-square","alphabet","letter"],k:[52,13],o:2},"flag-mh":{a:"Marshall Islands Flag",b:"1F1F2-1F1ED",k:[3,8],o:2},clock830:{a:"Clock Face Eight-Thirty",b:"1F563",j:["time","late","early","schedule"],k:[29,1],o:2},calendar:{a:"Tear-off Calendar",b:"1F4C6",j:["schedule","date","planning"],k:[26,28],o:2},"flag-mk":{a:"North Macedonia Flag",b:"1F1F2-1F1F0",k:[3,9],o:2},id:{a:"Squared Id",b:"1F194",j:["purple-square","words"],k:[0,24],o:2},spiral_note_pad:{a:"Spiral Note Pad",b:"1F5D2-FE0F",c:"1F5D2",k:[30,19],o:2},clock9:{a:"Clock Face Nine Oclock",b:"1F558",j:["time","late","early","schedule"],k:[28,47],o:2},"flag-ml":{a:"Mali Flag",b:"1F1F2-1F1F1",k:[3,10],o:2},m:{a:"Circled Latin Capital Letter M",b:"24C2-FE0F",c:"24C2",j:["alphabet","blue-circle","letter"],k:[52,40],o:2},"flag-mm":{a:"Myanmar (burma) Flag",b:"1F1F2-1F1F2",k:[3,11],o:2},clock930:{a:"Clock Face Nine-Thirty",b:"1F564",j:["time","late","early","schedule"],k:[29,2],o:2},"new":{a:"Squared New",b:"1F195",j:["blue-square","words","start"],k:[0,25],o:2},spiral_calendar_pad:{a:"Spiral Calendar Pad",b:"1F5D3-FE0F",c:"1F5D3",k:[30,20],o:2},ng:{a:"Squared Ng",b:"1F196",j:["blue-square","words","shape","icon"],k:[0,26],o:2},card_index:{a:"Card Index",b:"1F4C7",j:["business","stationery"],k:[26,29],o:2},clock10:{a:"Clock Face Ten Oclock",b:"1F559",j:["time","late","early","schedule"],k:[28,48],o:2},"flag-mn":{a:"Mongolia Flag",b:"1F1F2-1F1F3",k:[3,12],o:2},"male-guard":{obsoletes:"1F482",a:"Male Guard",b:"1F482-200D-2642-FE0F",c:"1F482-200D-2642",k:[24,14],o:4},"flag-mo":{a:"Macao Sar China Flag",b:"1F1F2-1F1F4",k:[3,13],o:2},clock1030:{a:"Clock Face Ten-Thirty",b:"1F565",j:["time","late","early","schedule"],k:[29,3],o:2},chart_with_upwards_trend:{a:"Chart with Upwards Trend",b:"1F4C8",j:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],k:[26,30],o:2},o2:{a:"Negative Squared Latin Capital Letter O",b:"1F17E-FE0F",c:"1F17E",j:["alphabet","red-square","letter"],k:[0,18],o:2},"female-guard":{a:"Female Guard",b:"1F482-200D-2640-FE0F",c:"1F482-200D-2640",k:[24,8],o:4},chart_with_downwards_trend:{a:"Chart with Downwards Trend",b:"1F4C9",j:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],k:[26,31],o:2},"flag-mp":{a:"Northern Mariana Islands Flag",b:"1F1F2-1F1F5",k:[3,14],o:2},ok:{a:"Squared Ok",b:"1F197",j:["good","agree","yes","blue-square"],k:[0,27],o:2},clock11:{a:"Clock Face Eleven Oclock",b:"1F55A",j:["time","late","early","schedule"],k:[28,49],o:2},"male-construction-worker":{obsoletes:"1F477",a:"Male Construction Worker",b:"1F477-200D-2642-FE0F",c:"1F477-200D-2642",k:[23,16],o:4},clock1130:{a:"Clock Face Eleven-Thirty",b:"1F566",j:["time","late","early","schedule"],k:[29,4],o:2},"flag-mq":{a:"Martinique Flag",b:"1F1F2-1F1F6",k:[3,15],o:2},bar_chart:{a:"Bar Chart",b:"1F4CA",j:["graph","presentation","stats"],k:[26,32],o:2},parking:{a:"Negative Squared Latin Capital Letter P",b:"1F17F-FE0F",c:"1F17F",j:["cars","blue-square","alphabet","letter"],k:[0,19],o:2},new_moon:{a:"New Moon Symbol",b:"1F311",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,36],o:2},"female-construction-worker":{a:"Female Construction Worker",b:"1F477-200D-2640-FE0F",c:"1F477-200D-2640",k:[23,10],o:4},sos:{a:"Squared Sos",b:"1F198",j:["help","red-square","words","emergency","911"],k:[0,28],o:2},clipboard:{a:"Clipboard",b:"1F4CB",j:["stationery","documents"],k:[26,33],o:2},"flag-mr":{a:"Mauritania Flag",b:"1F1F2-1F1F7",k:[3,16],o:2},prince:{a:"Prince",b:"1F934",j:["boy","man","male","crown","royal","king"],k:[39,17],o:4},waxing_crescent_moon:{a:"Waxing Crescent Moon Symbol",b:"1F312",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,37],o:2},"flag-ms":{a:"Montserrat Flag",b:"1F1F2-1F1F8",k:[3,17],o:2},pushpin:{a:"Pushpin",b:"1F4CC",j:["stationery","mark","here"],k:[26,34],o:2},up:{a:"Squared Up with Exclamation Mark",b:"1F199",j:["blue-square","above","high"],k:[0,29],o:2},"flag-mt":{a:"Malta Flag",b:"1F1F2-1F1F9",k:[3,18],o:2},princess:{a:"Princess",b:"1F478",j:["girl","woman","female","blond","crown","royal","queen"],k:[23,28],o:2},round_pushpin:{a:"Round Pushpin",b:"1F4CD",j:["stationery","location","map","here"],k:[26,35],o:2},first_quarter_moon:{a:"First Quarter Moon Symbol",b:"1F313",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,38],o:2},vs:{a:"Squared Vs",b:"1F19A",j:["words","orange-square"],k:[0,30],o:2},"flag-mu":{a:"Mauritius Flag",b:"1F1F2-1F1FA",k:[3,19],o:2},koko:{a:"Squared Katakana Koko",b:"1F201",j:["blue-square","here","katakana","japanese","destination"],k:[5,4],o:2},moon:{a:"Waxing Gibbous Moon Symbol",b:"1F314",k:[5,39],n:["waxing_gibbous_moon"],o:2},paperclip:{a:"Paperclip",b:"1F4CE",j:["documents","stationery"],k:[26,36],o:2},linked_paperclips:{a:"Linked Paperclips",b:"1F587-FE0F",c:"1F587",k:[29,43],o:2},"man-wearing-turban":{obsoletes:"1F473",a:"Man Wearing Turban",b:"1F473-200D-2642-FE0F",c:"1F473-200D-2642",k:[22,37],o:4},sa:{a:"Squared Katakana Sa",b:"1F202-FE0F",c:"1F202",j:["japanese","blue-square","katakana"],k:[5,5],o:2},full_moon:{a:"Full Moon Symbol",b:"1F315",j:["nature","yellow","twilight","planet","space","night","evening","sleep"],k:[5,40],o:2},"flag-mv":{a:"Maldives Flag",b:"1F1F2-1F1FB",k:[3,20],o:2},"flag-mw":{a:"Malawi Flag",b:"1F1F2-1F1FC",k:[3,21],o:2},waning_gibbous_moon:{a:"Waning Gibbous Moon Symbol",b:"1F316",j:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],k:[5,41],o:2},"woman-wearing-turban":{a:"Woman Wearing Turban",b:"1F473-200D-2640-FE0F",c:"1F473-200D-2640",k:[22,31],o:4},u6708:{a:"Squared Cjk Unified Ideograph-6708",b:"1F237-FE0F",c:"1F237",j:["chinese","month","moon","japanese","orange-square","kanji"],k:[5,13],o:2},straight_ruler:{a:"Straight Ruler",b:"1F4CF",j:["stationery","calculate","length","math","school","drawing","architect","sketch"],k:[26,37],o:2},u6709:{a:"Squared Cjk Unified Ideograph-6709",b:"1F236",j:["orange-square","chinese","have","kanji"],k:[5,12],o:2},triangular_ruler:{a:"Triangular Ruler",b:"1F4D0",j:["stationery","math","architect","sketch"],k:[26,38],o:2},man_with_gua_pi_mao:{a:"Man with Gua Pi Mao",b:"1F472",j:["male","boy","chinese"],k:[22,25],o:2},"flag-mx":{a:"Mexico Flag",b:"1F1F2-1F1FD",k:[3,22],o:2},last_quarter_moon:{a:"Last Quarter Moon Symbol",b:"1F317",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,42],o:2},person_with_headscarf:{a:"Person with Headscarf",b:"1F9D5",k:[48,34],o:5},waning_crescent_moon:{a:"Waning Crescent Moon Symbol",b:"1F318",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,43],o:2},u6307:{a:"Squared Cjk Unified Ideograph-6307",b:"1F22F",j:["chinese","point","green-square","kanji"],k:[5,7],o:2},scissors:{a:"Black Scissors",b:"2702-FE0F",c:"2702",j:["stationery","cut"],k:[54,39],o:2},"flag-my":{a:"Malaysia Flag",b:"1F1F2-1F1FE",k:[3,23],o:2},ideograph_advantage:{a:"Circled Ideograph Advantage",b:"1F250",j:["chinese","kanji","obtain","get","circle"],k:[5,17],o:2},man_in_tuxedo:{a:"Man in Tuxedo",b:"1F935",j:["couple","marriage","wedding","groom"],k:[39,23],o:4},"flag-mz":{a:"Mozambique Flag",b:"1F1F2-1F1FF",k:[3,24],o:2},card_file_box:{a:"Card File Box",b:"1F5C3-FE0F",c:"1F5C3",j:["business","stationery"],k:[30,16],o:2},crescent_moon:{a:"Crescent Moon",b:"1F319",j:["night","sleep","sky","evening","magic"],k:[5,44],o:2},"flag-na":{a:"Namibia Flag",b:"1F1F3-1F1E6",k:[3,25],o:2},bride_with_veil:{a:"Bride with Veil",b:"1F470",j:["couple","marriage","wedding","woman","bride"],k:[22,1],o:2},new_moon_with_face:{a:"New Moon with Face",b:"1F31A",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,45],o:2},file_cabinet:{a:"File Cabinet",b:"1F5C4-FE0F",c:"1F5C4",j:["filing","organizing"],k:[30,17],o:2},u5272:{a:"Squared Cjk Unified Ideograph-5272",b:"1F239",j:["cut","divide","chinese","kanji","pink-square"],k:[5,15],o:2},wastebasket:{a:"Wastebasket",b:"1F5D1-FE0F",c:"1F5D1",j:["bin","trash","rubbish","garbage","toss"],k:[30,18],o:2},pregnant_woman:{a:"Pregnant Woman",b:"1F930",j:["baby"],k:[38,50],o:4},first_quarter_moon_with_face:{a:"First Quarter Moon with Face",b:"1F31B",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,46],o:2},"flag-nc":{a:"New Caledonia Flag",b:"1F1F3-1F1E8",k:[3,26],o:2},u7121:{a:"Squared Cjk Unified Ideograph-7121",b:"1F21A",j:["nothing","chinese","kanji","japanese","orange-square"],k:[5,6],o:2},lock:{a:"Lock",b:"1F512",j:["security","password","padlock"],k:[27,46],o:2},"flag-ne":{a:"Niger Flag",b:"1F1F3-1F1EA",k:[3,27],o:2},last_quarter_moon_with_face:{a:"Last Quarter Moon with Face",b:"1F31C",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,47],o:2},"breast-feeding":{a:"Breast-Feeding",b:"1F931",k:[38,56],o:5},u7981:{a:"Squared Cjk Unified Ideograph-7981",b:"1F232",j:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],k:[5,8],o:2},accept:{a:"Circled Ideograph Accept",b:"1F251",j:["ok","good","chinese","kanji","agree","yes","orange-circle"],k:[5,18],o:2},angel:{a:"Baby Angel",b:"1F47C",j:["heaven","wings","halo"],k:[23,37],o:2},unlock:{a:"Open Lock",b:"1F513",j:["privacy","security"],k:[27,47],o:2},"flag-nf":{a:"Norfolk Island Flag",b:"1F1F3-1F1EB",k:[3,28],o:2},thermometer:{a:"Thermometer",b:"1F321-FE0F",c:"1F321",j:["weather","temperature","hot","cold"],k:[5,52],o:2},"flag-ng":{a:"Nigeria Flag",b:"1F1F3-1F1EC",k:[3,29],o:2},u7533:{a:"Squared Cjk Unified Ideograph-7533",b:"1F238",j:["chinese","japanese","kanji","orange-square"],k:[5,14],o:2},sunny:{a:"Black Sun with Rays",b:"2600-FE0F",c:"2600",j:["weather","nature","brightness","summer","beach","spring"],k:[52,49],o:2},lock_with_ink_pen:{a:"Lock with Ink Pen",b:"1F50F",j:["security","secret"],k:[27,43],o:2},santa:{a:"Father Christmas",b:"1F385",j:["festival","man","male","xmas","father christmas"],k:[7,36],o:2},closed_lock_with_key:{a:"Closed Lock with Key",b:"1F510",j:["security","privacy"],k:[27,44],o:2},u5408:{a:"Squared Cjk Unified Ideograph-5408",b:"1F234",j:["japanese","chinese","join","kanji","red-square"],k:[5,10],o:2},"flag-ni":{a:"Nicaragua Flag",b:"1F1F3-1F1EE",k:[3,30],o:2},mrs_claus:{a:"Mother Christmas",b:"1F936",j:["woman","female","xmas","mother christmas"],k:[39,29],n:["mother_christmas"],o:4},full_moon_with_face:{a:"Full Moon with Face",b:"1F31D",j:["nature","twilight","planet","space","night","evening","sleep"],k:[5,48],o:2},key:{a:"Key",b:"1F511",j:["lock","door","password"],k:[27,45],o:2},superhero:{a:"Superhero",b:"1F9B8",k:[43,30],o:11},"flag-nl":{a:"Netherlands Flag",b:"1F1F3-1F1F1",k:[3,31],o:2},u7a7a:{a:"Squared Cjk Unified Ideograph-7a7a",b:"1F233",j:["kanji","japanese","chinese","empty","sky","blue-square"],k:[5,9],o:2},sun_with_face:{a:"Sun with Face",b:"1F31E",j:["nature","morning","sky"],k:[5,49],o:2},male_superhero:{a:"Male Superhero",b:"1F9B8-200D-2642-FE0F",c:"1F9B8-200D-2642",k:[43,24],o:11},ringed_planet:{a:"Ringed Planet",b:"1FA90",k:[52,4],o:12},old_key:{a:"Old Key",b:"1F5DD-FE0F",c:"1F5DD",j:["lock","door","password"],k:[30,22],o:2},congratulations:{a:"Circled Ideograph Congratulation",b:"3297-FE0F",c:"3297",j:["chinese","kanji","japanese","red-circle"],k:[55,46],o:2},"flag-no":{a:"Norway Flag",b:"1F1F3-1F1F4",k:[3,32],o:2},star:{a:"White Medium Star",b:"2B50",j:["night","yellow"],k:[55,42],o:2},secret:{a:"Circled Ideograph Secret",b:"3299-FE0F",c:"3299",j:["privacy","chinese","sshh","kanji","red-circle"],k:[55,47],o:2},"flag-np":{a:"Nepal Flag",b:"1F1F3-1F1F5",k:[3,33],o:2},female_superhero:{a:"Female Superhero",b:"1F9B8-200D-2640-FE0F",c:"1F9B8-200D-2640",k:[43,18],o:11},hammer:{a:"Hammer",b:"1F528",j:["tools","build","create"],k:[28,11],o:2},star2:{a:"Glowing Star",b:"1F31F",j:["night","sparkle","awesome","good","magic"],k:[5,50],o:2},"flag-nr":{a:"Nauru Flag",b:"1F1F3-1F1F7",k:[3,34],o:2},axe:{a:"Axe",b:"1FA93",k:[52,7],o:12},u55b6:{a:"Squared Cjk Unified Ideograph-55b6",b:"1F23A",j:["japanese","opening hours","orange-square"],k:[5,16],o:2},supervillain:{a:"Supervillain",b:"1F9B9",k:[43,48],o:11},stars:{a:"Shooting Star",b:"1F320",j:["night","photo"],k:[5,51],o:2},u6e80:{a:"Squared Cjk Unified Ideograph-6e80",b:"1F235",j:["full","chinese","japanese","red-square","kanji"],k:[5,11],o:2},"flag-nu":{a:"Niue Flag",b:"1F1F3-1F1FA",k:[3,35],o:2},pick:{a:"Pick",b:"26CF-FE0F",c:"26CF",j:["tools","dig"],k:[54,5],o:2},male_supervillain:{a:"Male Supervillain",b:"1F9B9-200D-2642-FE0F",c:"1F9B9-200D-2642",k:[43,42],o:11},female_supervillain:{a:"Female Supervillain",b:"1F9B9-200D-2640-FE0F",c:"1F9B9-200D-2640",k:[43,36],o:11},hammer_and_pick:{a:"Hammer and Pick",b:"2692-FE0F",c:"2692",j:["tools","build","create"],k:[53,41],o:2},milky_way:{a:"Milky Way",b:"1F30C",j:["photo","space","stars"],k:[5,31],o:2},red_circle:{a:"Large Red Circle",b:"1F534",j:["shape","error","danger"],k:[28,23],o:2},"flag-nz":{a:"New Zealand Flag",b:"1F1F3-1F1FF",k:[3,36],o:2},large_orange_circle:{a:"Large Orange Circle",b:"1F7E0",k:[37,3],o:12},hammer_and_wrench:{a:"Hammer and Wrench",b:"1F6E0-FE0F",c:"1F6E0",j:["tools","build","create"],k:[36,42],o:2},"flag-om":{a:"Oman Flag",b:"1F1F4-1F1F2",k:[3,37],o:2},cloud:{a:"Cloud",b:"2601-FE0F",c:"2601",j:["weather","sky"],k:[52,50],o:2},mage:{obsoleted_by:"1F9D9-200D-2640-FE0F",a:"Mage",b:"1F9D9",k:[49,49],o:5},dagger_knife:{a:"Dagger Knife",b:"1F5E1-FE0F",c:"1F5E1",k:[30,24],o:2},partly_sunny:{a:"Sun Behind Cloud",b:"26C5",j:["weather","nature","cloudy","morning","fall","spring"],k:[54,2],o:2},large_yellow_circle:{a:"Large Yellow Circle",b:"1F7E1",k:[37,4],o:12},male_mage:{a:"Male Mage",b:"1F9D9-200D-2642-FE0F",c:"1F9D9-200D-2642",k:[49,43],o:5},"flag-pa":{a:"Panama Flag",b:"1F1F5-1F1E6",k:[3,38],o:2},thunder_cloud_and_rain:{a:"Thunder Cloud and Rain",b:"26C8-FE0F",c:"26C8",k:[54,3],o:2},large_green_circle:{a:"Large Green Circle",b:"1F7E2",k:[37,5],o:12},female_mage:{obsoletes:"1F9D9",a:"Female Mage",b:"1F9D9-200D-2640-FE0F",c:"1F9D9-200D-2640",k:[49,37],o:5},crossed_swords:{a:"Crossed Swords",b:"2694-FE0F",c:"2694",j:["weapon"],k:[53,43],o:2},"flag-pe":{a:"Peru Flag",b:"1F1F5-1F1EA",k:[3,39],o:2},gun:{a:"Pistol",b:"1F52B",j:["violence","weapon","pistol","revolver"],k:[28,14],o:2},mostly_sunny:{a:"Mostly Sunny",b:"1F324-FE0F",c:"1F324",k:[5,53],n:["sun_small_cloud"],o:2},fairy:{obsoleted_by:"1F9DA-200D-2640-FE0F",a:"Fairy",b:"1F9DA",k:[50,10],o:5},"flag-pf":{a:"French Polynesia Flag",b:"1F1F5-1F1EB",k:[3,40],o:2},large_blue_circle:{a:"Large Blue Circle",b:"1F535",j:["shape","icon","button"],k:[28,24],o:2},large_purple_circle:{a:"Large Purple Circle",b:"1F7E3",k:[37,6],o:12},bow_and_arrow:{a:"Bow and Arrow",b:"1F3F9",j:["sports"],k:[11,21],o:2},male_fairy:{a:"Male Fairy",b:"1F9DA-200D-2642-FE0F",c:"1F9DA-200D-2642",k:[50,4],o:5},barely_sunny:{a:"Barely Sunny",b:"1F325-FE0F",c:"1F325",k:[5,54],n:["sun_behind_cloud"],o:2},"flag-pg":{a:"Papua New Guinea Flag",b:"1F1F5-1F1EC",k:[3,41],o:2},shield:{a:"Shield",b:"1F6E1-FE0F",c:"1F6E1",j:["protection","security"],k:[36,43],o:2},partly_sunny_rain:{a:"Partly Sunny Rain",b:"1F326-FE0F",c:"1F326",k:[5,55],n:["sun_behind_rain_cloud"],o:2},large_brown_circle:{a:"Large Brown Circle",b:"1F7E4",k:[37,7],o:12},female_fairy:{obsoletes:"1F9DA",a:"Female Fairy",b:"1F9DA-200D-2640-FE0F",c:"1F9DA-200D-2640",k:[49,55],o:5},"flag-ph":{a:"Philippines Flag",b:"1F1F5-1F1ED",k:[3,42],o:2},"flag-pk":{a:"Pakistan Flag",b:"1F1F5-1F1F0",k:[3,43],o:2},black_circle:{a:"Medium Black Circle",b:"26AB",j:["shape","button","round"],k:[53,53],o:2},wrench:{a:"Wrench",b:"1F527",j:["tools","diy","ikea","fix","maintainer"],k:[28,10],o:2},vampire:{obsoleted_by:"1F9DB-200D-2640-FE0F",a:"Vampire",b:"1F9DB",k:[50,28],o:5},rain_cloud:{a:"Rain Cloud",b:"1F327-FE0F",c:"1F327",k:[5,56],o:2},snow_cloud:{a:"Snow Cloud",b:"1F328-FE0F",c:"1F328",k:[6,0],o:2},"flag-pl":{a:"Poland Flag",b:"1F1F5-1F1F1",k:[3,44],o:2},male_vampire:{a:"Male Vampire",b:"1F9DB-200D-2642-FE0F",c:"1F9DB-200D-2642",k:[50,22],o:5},nut_and_bolt:{a:"Nut and Bolt",b:"1F529",j:["handy","tools","fix"],k:[28,12],o:2},white_circle:{a:"Medium White Circle",b:"26AA",j:["shape","round"],k:[53,52],o:2},female_vampire:{obsoletes:"1F9DB",a:"Female Vampire",b:"1F9DB-200D-2640-FE0F",c:"1F9DB-200D-2640",k:[50,16],o:5},"flag-pm":{a:"St. Pierre & Miquelon Flag",b:"1F1F5-1F1F2",k:[3,45],o:2},large_red_square:{a:"Large Red Square",b:"1F7E5",k:[37,8],o:12},lightning:{a:"Lightning",b:"1F329-FE0F",c:"1F329",k:[6,1],n:["lightning_cloud"],o:2},gear:{a:"Gear",b:"2699-FE0F",c:"2699",j:["cog"],k:[53,47],o:2},merperson:{obsoleted_by:"1F9DC-200D-2642-FE0F",a:"Merperson",b:"1F9DC",k:[50,46],o:5},tornado:{a:"Tornado",b:"1F32A-FE0F",c:"1F32A",j:["weather","cyclone","twister"],k:[6,2],n:["tornado_cloud"],o:2},large_orange_square:{a:"Large Orange Square",b:"1F7E7",k:[37,10],o:12},"flag-pn":{a:"Pitcairn Islands Flag",b:"1F1F5-1F1F3",k:[3,46],o:2},compression:{a:"Compression",b:"1F5DC-FE0F",c:"1F5DC",k:[30,21],o:2},merman:{obsoletes:"1F9DC",a:"Merman",b:"1F9DC-200D-2642-FE0F",c:"1F9DC-200D-2642",k:[50,40],o:5},large_yellow_square:{a:"Large Yellow Square",b:"1F7E8",k:[37,11],o:12},fog:{a:"Fog",b:"1F32B-FE0F",c:"1F32B",j:["weather"],k:[6,3],o:2},scales:{a:"Scales",b:"2696-FE0F",c:"2696",k:[53,45],o:2},"flag-pr":{a:"Puerto Rico Flag",b:"1F1F5-1F1F7",k:[3,47],o:2},wind_blowing_face:{a:"Wind Blowing Face",b:"1F32C-FE0F",c:"1F32C",k:[6,4],o:2},"flag-ps":{a:"Palestinian Territories Flag",b:"1F1F5-1F1F8",k:[3,48],o:2},mermaid:{a:"Mermaid",b:"1F9DC-200D-2640-FE0F",c:"1F9DC-200D-2640",k:[50,34],o:5},probing_cane:{a:"Probing Cane",b:"1F9AF",k:[43,3],o:12},large_green_square:{a:"Large Green Square",b:"1F7E9",k:[37,12],o:12},"flag-pt":{a:"Portugal Flag",b:"1F1F5-1F1F9",k:[3,49],o:2},link:{a:"Link Symbol",b:"1F517",j:["rings","url"],k:[27,51],o:2},large_blue_square:{a:"Large Blue Square",b:"1F7E6",k:[37,9],o:12},elf:{obsoleted_by:"1F9DD-200D-2642-FE0F",a:"Elf",b:"1F9DD",k:[51,7],o:5},cyclone:{a:"Cyclone",b:"1F300",j:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],k:[5,19],o:2},rainbow:{a:"Rainbow",b:"1F308",j:["nature","happy","unicorn_face","photo","sky","spring"],k:[5,27],o:2},male_elf:{obsoletes:"1F9DD",a:"Male Elf",b:"1F9DD-200D-2642-FE0F",c:"1F9DD-200D-2642",k:[51,1],o:5},"flag-pw":{a:"Palau Flag",b:"1F1F5-1F1FC",k:[3,50],o:2},chains:{a:"Chains",b:"26D3-FE0F",c:"26D3",j:["lock","arrest"],k:[54,7],o:2},large_purple_square:{a:"Large Purple Square",b:"1F7EA",k:[37,13],o:12},female_elf:{a:"Female Elf",b:"1F9DD-200D-2640-FE0F",c:"1F9DD-200D-2640",k:[50,52],o:5},"flag-py":{a:"Paraguay Flag",b:"1F1F5-1F1FE",k:[3,51],o:2},closed_umbrella:{a:"Closed Umbrella",b:"1F302",j:["weather","rain","drizzle"],k:[5,21],o:2},toolbox:{a:"Toolbox",b:"1F9F0",k:[51,35],o:11},large_brown_square:{a:"Large Brown Square",b:"1F7EB",k:[37,14],o:12},magnet:{a:"Magnet",b:"1F9F2",k:[51,37],o:11},genie:{obsoleted_by:"1F9DE-200D-2642-FE0F",a:"Genie",b:"1F9DE",k:[51,15],o:5},"flag-qa":{a:"Qatar Flag",b:"1F1F6-1F1E6",k:[3,52],o:2},umbrella:{a:"Umbrella",b:"2602-FE0F",c:"2602",j:["rainy","weather","spring"],k:[52,51],o:2},black_large_square:{a:"Black Large Square",b:"2B1B",j:["shape","icon","button"],k:[55,40],o:2},male_genie:{obsoletes:"1F9DE",a:"Male Genie",b:"1F9DE-200D-2642-FE0F",c:"1F9DE-200D-2642",k:[51,14],o:5},umbrella_with_rain_drops:{a:"Umbrella with Rain Drops",b:"2614",k:[52,56],o:2},"flag-re":{a:"Réunion Flag",b:"1F1F7-1F1EA",k:[3,53],o:2},white_large_square:{a:"White Large Square",b:"2B1C",j:["shape","icon","stone","button"],k:[55,41],o:2},alembic:{a:"Alembic",b:"2697-FE0F",c:"2697",j:["distilling","science","experiment","chemistry"],k:[53,46],o:2},black_medium_square:{a:"Black Medium Square",b:"25FC-FE0F",c:"25FC",j:["shape","button","icon"],k:[52,46],o:2},test_tube:{a:"Test Tube",b:"1F9EA",k:[51,29],o:11},"flag-ro":{a:"Romania Flag",b:"1F1F7-1F1F4",k:[3,54],o:2},female_genie:{a:"Female Genie",b:"1F9DE-200D-2640-FE0F",c:"1F9DE-200D-2640",k:[51,13],o:5},umbrella_on_ground:{a:"Umbrella on Ground",b:"26F1-FE0F",c:"26F1",k:[54,12],o:2},zombie:{obsoleted_by:"1F9DF-200D-2642-FE0F",a:"Zombie",b:"1F9DF",k:[51,18],o:5},zap:{a:"High Voltage Sign",b:"26A1",j:["thunder","weather","lightning bolt","fast"],k:[53,51],o:2},white_medium_square:{a:"White Medium Square",b:"25FB-FE0F",c:"25FB",j:["shape","stone","icon"],k:[52,45],o:2},"flag-rs":{a:"Serbia Flag",b:"1F1F7-1F1F8",k:[3,55],o:2},petri_dish:{a:"Petri Dish",b:"1F9EB",k:[51,30],o:11},snowflake:{a:"Snowflake",b:"2744-FE0F",c:"2744",j:["winter","season","cold","weather","christmas","xmas"],k:[55,19],o:2},dna:{a:"Dna Double Helix",b:"1F9EC",k:[51,31],o:11},male_zombie:{obsoletes:"1F9DF",a:"Male Zombie",b:"1F9DF-200D-2642-FE0F",c:"1F9DF-200D-2642",k:[51,17],o:5},black_medium_small_square:{a:"Black Medium Small Square",b:"25FE",j:["icon","shape","button"],k:[52,48],o:2},ru:{a:"Russia Flag",b:"1F1F7-1F1FA",j:["russian","federation","flag","nation","country","banner"],k:[3,56],n:["flag-ru"],o:2},female_zombie:{a:"Female Zombie",b:"1F9DF-200D-2640-FE0F",c:"1F9DF-200D-2640",k:[51,16],o:5},"flag-rw":{a:"Rwanda Flag",b:"1F1F7-1F1FC",k:[4,0],o:2},snowman:{a:"Snowman",b:"2603-FE0F",c:"2603",j:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],k:[52,52],o:2},white_medium_small_square:{a:"White Medium Small Square",b:"25FD",j:["shape","stone","icon","button"],k:[52,47],o:2},microscope:{a:"Microscope",b:"1F52C",j:["laboratory","experiment","zoomin","science","study"],k:[28,15],o:2},snowman_without_snow:{a:"Snowman Without Snow",b:"26C4",k:[54,1],o:2},telescope:{a:"Telescope",b:"1F52D",j:["stars","space","zoom","science","astronomy"],k:[28,16],o:2},black_small_square:{a:"Black Small Square",b:"25AA-FE0F",c:"25AA",j:["shape","icon"],k:[52,41],o:2},"flag-sa":{a:"Saudi Arabia Flag",b:"1F1F8-1F1E6",k:[4,1],o:2},"man-getting-massage":{a:"Man Getting Massage",b:"1F486-200D-2642-FE0F",c:"1F486-200D-2642",k:[24,45],o:4},comet:{a:"Comet",b:"2604-FE0F",c:"2604",j:["space"],k:[52,53],o:2},white_small_square:{a:"White Small Square",b:"25AB-FE0F",c:"25AB",j:["shape","icon"],k:[52,42],o:2},"flag-sb":{a:"Solomon Islands Flag",b:"1F1F8-1F1E7",k:[4,2],o:2},satellite_antenna:{a:"Satellite Antenna",b:"1F4E1",k:[26,55],o:2},large_orange_diamond:{a:"Large Orange Diamond",b:"1F536",j:["shape","jewel","gem"],k:[28,25],o:2},"woman-getting-massage":{obsoletes:"1F486",a:"Woman Getting Massage",b:"1F486-200D-2640-FE0F",c:"1F486-200D-2640",k:[24,39],o:4},fire:{a:"Fire",b:"1F525",j:["hot","cook","flame"],k:[28,8],o:2},syringe:{a:"Syringe",b:"1F489",j:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],k:[25,19],o:2},"flag-sc":{a:"Seychelles Flag",b:"1F1F8-1F1E8",k:[4,3],o:2},large_blue_diamond:{a:"Large Blue Diamond",b:"1F537",j:["shape","jewel","gem"],k:[28,26],o:2},"flag-sd":{a:"Sudan Flag",b:"1F1F8-1F1E9",k:[4,4],o:2},droplet:{a:"Droplet",b:"1F4A7",j:["water","drip","faucet","spring"],k:[25,49],o:2},drop_of_blood:{a:"Drop of Blood",b:"1FA78",k:[51,55],o:12},ocean:{a:"Water Wave",b:"1F30A",j:["sea","water","wave","nature","tsunami","disaster"],k:[5,29],o:2},"flag-se":{a:"Sweden Flag",b:"1F1F8-1F1EA",k:[4,5],o:2},"man-getting-haircut":{a:"Man Getting Haircut",b:"1F487-200D-2642-FE0F",c:"1F487-200D-2642",k:[25,6],o:4},small_orange_diamond:{a:"Small Orange Diamond",b:"1F538",j:["shape","jewel","gem"],k:[28,27],o:2},pill:{a:"Pill",b:"1F48A",j:["health","medicine","doctor","pharmacy","drug"],k:[25,20],o:2},"woman-getting-haircut":{obsoletes:"1F487",a:"Woman Getting Haircut",b:"1F487-200D-2640-FE0F",c:"1F487-200D-2640",k:[25,0],o:4},small_blue_diamond:{a:"Small Blue Diamond",b:"1F539",j:["shape","jewel","gem"],k:[28,28],o:2},"flag-sg":{a:"Singapore Flag",b:"1F1F8-1F1EC",k:[4,6],o:2},adhesive_bandage:{a:"Adhesive Bandage",b:"1FA79",k:[51,56],o:12},small_red_triangle:{a:"Up-Pointing Red Triangle",b:"1F53A",j:["shape","direction","up","top"],k:[28,29],o:2},"flag-sh":{a:"St. Helena Flag",b:"1F1F8-1F1ED",k:[4,7],o:2},stethoscope:{a:"Stethoscope",b:"1FA7A",k:[52,0],o:12},"man-walking":{obsoletes:"1F6B6",a:"Man Walking",b:"1F6B6-200D-2642-FE0F",c:"1F6B6-200D-2642",k:[35,53],o:4},"flag-si":{a:"Slovenia Flag",b:"1F1F8-1F1EE",k:[4,8],o:2},door:{a:"Door",b:"1F6AA",j:["house","entry","exit"],k:[35,1],o:2},small_red_triangle_down:{a:"Down-Pointing Red Triangle",b:"1F53B",j:["shape","direction","bottom"],k:[28,30],o:2},"flag-sj":{a:"Svalbard & Jan Mayen Flag",b:"1F1F8-1F1EF",k:[4,9],o:2},diamond_shape_with_a_dot_inside:{a:"Diamond Shape with a Dot Inside",b:"1F4A0",j:["jewel","blue","gem","crystal","fancy"],k:[25,42],o:2},"woman-walking":{a:"Woman Walking",b:"1F6B6-200D-2640-FE0F",c:"1F6B6-200D-2640",k:[35,47],o:4},bed:{a:"Bed",b:"1F6CF-FE0F",c:"1F6CF",j:["sleep","rest"],k:[36,37],o:2},radio_button:{a:"Radio Button",b:"1F518",j:["input","old","music","circle"],k:[27,52],o:2},"flag-sk":{a:"Slovakia Flag",b:"1F1F8-1F1F0",k:[4,10],o:2},standing_person:{a:"Standing Person",b:"1F9CD",k:[44,31],o:12},couch_and_lamp:{a:"Couch and Lamp",b:"1F6CB-FE0F",c:"1F6CB",j:["read","chill"],k:[36,28],o:2},man_standing:{a:"Man Standing",b:"1F9CD-200D-2642-FE0F",c:"1F9CD-200D-2642",k:[44,25],o:12},white_square_button:{a:"White Square Button",b:"1F533",j:["shape","input"],k:[28,22],o:2},"flag-sl":{a:"Sierra Leone Flag",b:"1F1F8-1F1F1",k:[4,11],o:2},chair:{a:"Chair",b:"1FA91",k:[52,5],o:12},toilet:{a:"Toilet",b:"1F6BD",j:["restroom","wc","washroom","bathroom","potty"],k:[36,14],o:2},black_square_button:{a:"Black Square Button",b:"1F532",j:["shape","input","frame"],k:[28,21],o:2},"flag-sm":{a:"San Marino Flag",b:"1F1F8-1F1F2",k:[4,12],o:2},woman_standing:{a:"Woman Standing",b:"1F9CD-200D-2640-FE0F",c:"1F9CD-200D-2640",k:[44,19],o:12},kneeling_person:{a:"Kneeling Person",b:"1F9CE",k:[44,49],o:12},shower:{a:"Shower",b:"1F6BF",j:["clean","water","bathroom"],k:[36,16],o:2},"flag-sn":{a:"Senegal Flag",b:"1F1F8-1F1F3",k:[4,13],o:2},bathtub:{a:"Bathtub",b:"1F6C1",j:["clean","shower","bathroom"],k:[36,23],o:2},"flag-so":{a:"Somalia Flag",b:"1F1F8-1F1F4",k:[4,14],o:2},man_kneeling:{a:"Man Kneeling",b:"1F9CE-200D-2642-FE0F",c:"1F9CE-200D-2642",k:[44,43],o:12},"flag-sr":{a:"Suriname Flag",b:"1F1F8-1F1F7",k:[4,15],o:2},woman_kneeling:{a:"Woman Kneeling",b:"1F9CE-200D-2640-FE0F",c:"1F9CE-200D-2640",k:[44,37],o:12},razor:{a:"Razor",b:"1FA92",k:[52,6],o:12},"flag-ss":{a:"South Sudan Flag",b:"1F1F8-1F1F8",k:[4,16],o:2},lotion_bottle:{a:"Lotion Bottle",b:"1F9F4",k:[51,39],o:11},"flag-st":{a:"São Tomé & Príncipe Flag",b:"1F1F8-1F1F9",k:[4,17],o:2},safety_pin:{a:"Safety Pin",b:"1F9F7",k:[51,42],o:11},man_with_probing_cane:{a:"Man with Probing Cane",b:"1F468-200D-1F9AF",k:[16,17],o:12},broom:{a:"Broom",b:"1F9F9",k:[51,44],o:11},woman_with_probing_cane:{a:"Woman with Probing Cane",b:"1F469-200D-1F9AF",k:[19,2],o:12},"flag-sv":{a:"El Salvador Flag",b:"1F1F8-1F1FB",k:[4,18],o:2},"flag-sx":{a:"Sint Maarten Flag",b:"1F1F8-1F1FD",k:[4,19],o:2},basket:{a:"Basket",b:"1F9FA",k:[51,45],o:11},man_in_motorized_wheelchair:{a:"Man in Motorized Wheelchair",b:"1F468-200D-1F9BC",k:[16,47],o:12},"flag-sy":{a:"Syria Flag",b:"1F1F8-1F1FE",k:[4,20],o:2},roll_of_paper:{a:"Roll of Paper",b:"1F9FB",k:[51,46],o:11},woman_in_motorized_wheelchair:{a:"Woman in Motorized Wheelchair",b:"1F469-200D-1F9BC",k:[19,32],o:12},"flag-sz":{a:"Eswatini Flag",b:"1F1F8-1F1FF",k:[4,21],o:2},soap:{a:"Bar of Soap",b:"1F9FC",k:[51,47],o:11},"flag-ta":{a:"Tristan Da Cunha Flag",b:"1F1F9-1F1E6",k:[4,22],o:2},sponge:{a:"Sponge",b:"1F9FD",k:[51,48],o:11},fire_extinguisher:{a:"Fire Extinguisher",b:"1F9EF",k:[51,34],o:11},man_in_manual_wheelchair:{a:"Man in Manual Wheelchair",b:"1F468-200D-1F9BD",k:[16,53],o:12},"flag-tc":{a:"Turks & Caicos Islands Flag",b:"1F1F9-1F1E8",k:[4,23],o:2},woman_in_manual_wheelchair:{a:"Woman in Manual Wheelchair",b:"1F469-200D-1F9BD",k:[19,38],o:12},"flag-td":{a:"Chad Flag",b:"1F1F9-1F1E9",k:[4,24],o:2},shopping_trolley:{a:"Shopping Trolley",b:"1F6D2",k:[36,40],o:4},"flag-tf":{a:"French Southern Territories Flag",b:"1F1F9-1F1EB",k:[4,25],o:2},smoking:{a:"Smoking Symbol",b:"1F6AC",j:["kills","tobacco","cigarette","joint","smoke"],k:[35,3],o:2},coffin:{a:"Coffin",b:"26B0-FE0F",c:"26B0",j:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],k:[53,54],o:2},"man-running":{obsoletes:"1F3C3",a:"Man Running",b:"1F3C3-200D-2642-FE0F",c:"1F3C3-200D-2642",k:[8,52],o:4},"flag-tg":{a:"Togo Flag",b:"1F1F9-1F1EC",k:[4,26],o:2},"woman-running":{a:"Woman Running",b:"1F3C3-200D-2640-FE0F",c:"1F3C3-200D-2640",k:[8,46],o:4},funeral_urn:{a:"Funeral Urn",b:"26B1-FE0F",c:"26B1",j:["dead","die","death","rip","ashes"],k:[53,55],o:2},"flag-th":{a:"Thailand Flag",b:"1F1F9-1F1ED",k:[4,27],o:2},moyai:{a:"Moyai",b:"1F5FF",j:["rock","easter island","moai"],k:[30,34],o:2},"flag-tj":{a:"Tajikistan Flag",b:"1F1F9-1F1EF",k:[4,28],o:2},dancer:{a:"Dancer",b:"1F483",j:["female","girl","woman","fun"],k:[24,26],o:2},"flag-tk":{a:"Tokelau Flag",b:"1F1F9-1F1F0",k:[4,29],o:2},man_dancing:{a:"Man Dancing",b:"1F57A",j:["male","boy","fun","dancer"],k:[29,37],o:4},"flag-tl":{a:"Timor-Leste Flag",b:"1F1F9-1F1F1",k:[4,30],o:2},man_in_business_suit_levitating:{a:"Man in Business Suit Levitating",b:"1F574-FE0F",c:"1F574",k:[29,9],o:2},"flag-tm":{a:"Turkmenistan Flag",b:"1F1F9-1F1F2",k:[4,31],o:2},dancers:{obsoleted_by:"1F46F-200D-2640-FE0F",a:"Woman with Bunny Ears",b:"1F46F",k:[22,0],o:2},"man-with-bunny-ears-partying":{a:"Man with Bunny Ears Partying",b:"1F46F-200D-2642-FE0F",c:"1F46F-200D-2642",k:[21,56],o:4},"flag-tn":{a:"Tunisia Flag",b:"1F1F9-1F1F3",k:[4,32],o:2},"flag-to":{a:"Tonga Flag",b:"1F1F9-1F1F4",k:[4,33],o:2},"woman-with-bunny-ears-partying":{obsoletes:"1F46F",a:"Woman with Bunny Ears Partying",b:"1F46F-200D-2640-FE0F",c:"1F46F-200D-2640",k:[21,55],o:4},"flag-tr":{a:"Turkey Flag",b:"1F1F9-1F1F7",k:[4,34],o:2},person_in_steamy_room:{obsoleted_by:"1F9D6-200D-2642-FE0F",a:"Person in Steamy Room",b:"1F9D6",k:[48,52],o:5},man_in_steamy_room:{obsoletes:"1F9D6",a:"Man in Steamy Room",b:"1F9D6-200D-2642-FE0F",c:"1F9D6-200D-2642",k:[48,46],o:5},"flag-tt":{a:"Trinidad & Tobago Flag",b:"1F1F9-1F1F9",k:[4,35],o:2},woman_in_steamy_room:{a:"Woman in Steamy Room",b:"1F9D6-200D-2640-FE0F",c:"1F9D6-200D-2640",k:[48,40],o:5},"flag-tv":{a:"Tuvalu Flag",b:"1F1F9-1F1FB",k:[4,36],o:2},"flag-tw":{a:"Taiwan Flag",b:"1F1F9-1F1FC",k:[4,37],o:2},person_climbing:{obsoleted_by:"1F9D7-200D-2640-FE0F",a:"Person Climbing",b:"1F9D7",k:[49,13],o:5},man_climbing:{a:"Man Climbing",b:"1F9D7-200D-2642-FE0F",c:"1F9D7-200D-2642",k:[49,7],o:5},"flag-tz":{a:"Tanzania Flag",b:"1F1F9-1F1FF",k:[4,38],o:2},"flag-ua":{a:"Ukraine Flag",b:"1F1FA-1F1E6",k:[4,39],o:2},woman_climbing:{obsoletes:"1F9D7",a:"Woman Climbing",b:"1F9D7-200D-2640-FE0F",c:"1F9D7-200D-2640",k:[49,1],o:5},"flag-ug":{a:"Uganda Flag",b:"1F1FA-1F1EC",k:[4,40],o:2},fencer:{a:"Fencer",b:"1F93A",k:[40,32],o:4},"flag-um":{a:"U.s. Outlying Islands Flag",b:"1F1FA-1F1F2",k:[4,41],o:2},horse_racing:{a:"Horse Racing",b:"1F3C7",j:["animal","betting","competition","gambling","luck"],k:[9,27],o:2},skier:{a:"Skier",b:"26F7-FE0F",c:"26F7",j:["sports","winter","snow"],k:[54,17],o:2},"flag-un":{a:"United Nations Flag",b:"1F1FA-1F1F3",k:[4,42],o:4},us:{a:"United States Flag",b:"1F1FA-1F1F8",j:["united","states","america","flag","nation","country","banner"],k:[4,43],n:["flag-us"],o:2},snowboarder:{a:"Snowboarder",b:"1F3C2",j:["sports","winter"],k:[8,40],o:2},"flag-uy":{a:"Uruguay Flag",b:"1F1FA-1F1FE",k:[4,44],o:2},"flag-uz":{a:"Uzbekistan Flag",b:"1F1FA-1F1FF",k:[4,45],o:2},"flag-va":{a:"Vatican City Flag",b:"1F1FB-1F1E6",k:[4,46],o:2},"flag-vc":{a:"St. Vincent & Grenadines Flag",b:"1F1FB-1F1E8",k:[4,47],o:2},"man-surfing":{obsoletes:"1F3C4",a:"Man Surfing",b:"1F3C4-200D-2642-FE0F",c:"1F3C4-200D-2642",k:[9,13],o:4},"flag-ve":{a:"Venezuela Flag",b:"1F1FB-1F1EA",k:[4,48],o:2},"flag-vg":{a:"British Virgin Islands Flag",b:"1F1FB-1F1EC",k:[4,49],o:2},"woman-surfing":{a:"Woman Surfing",b:"1F3C4-200D-2640-FE0F",c:"1F3C4-200D-2640",k:[9,7],o:4},"flag-vi":{a:"U.s. Virgin Islands Flag",b:"1F1FB-1F1EE",k:[4,50],o:2},"man-rowing-boat":{obsoletes:"1F6A3",a:"Man Rowing Boat",b:"1F6A3-200D-2642-FE0F",c:"1F6A3-200D-2642",k:[34,40],o:4},"flag-vn":{a:"Vietnam Flag",b:"1F1FB-1F1F3",k:[4,51],o:2},"flag-vu":{a:"Vanuatu Flag",b:"1F1FB-1F1FA",k:[4,52],o:2},"woman-rowing-boat":{a:"Woman Rowing Boat",b:"1F6A3-200D-2640-FE0F",c:"1F6A3-200D-2640",k:[34,34],o:4},"flag-wf":{a:"Wallis & Futuna Flag",b:"1F1FC-1F1EB",k:[4,53],o:2},"man-swimming":{obsoletes:"1F3CA",a:"Man Swimming",b:"1F3CA-200D-2642-FE0F",c:"1F3CA-200D-2642",k:[9,41],o:4},"flag-ws":{a:"Samoa Flag",b:"1F1FC-1F1F8",k:[4,54],o:2},"woman-swimming":{a:"Woman Swimming",b:"1F3CA-200D-2640-FE0F",c:"1F3CA-200D-2640",k:[9,35],o:4},"flag-xk":{a:"Kosovo Flag",b:"1F1FD-1F1F0",k:[4,55],o:2},"flag-ye":{a:"Yemen Flag",b:"1F1FE-1F1EA",k:[4,56],o:2},"flag-yt":{a:"Mayotte Flag",b:"1F1FE-1F1F9",k:[5,0],o:2},"flag-za":{a:"South Africa Flag",b:"1F1FF-1F1E6",k:[5,1],o:2},"flag-zm":{a:"Zambia Flag",b:"1F1FF-1F1F2",k:[5,2],o:2},"flag-zw":{a:"Zimbabwe Flag",b:"1F1FF-1F1FC",k:[5,3],o:2},"flag-england":{a:"England Flag",b:"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F",k:[11,14],o:5},"flag-scotland":{a:"Scotland Flag",b:"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F",k:[11,15],o:5},"flag-wales":{a:"Wales Flag",b:"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F",k:[11,16],o:5},"man-biking":{obsoletes:"1F6B4",a:"Man Biking",b:"1F6B4-200D-2642-FE0F",c:"1F6B4-200D-2642",k:[35,17],o:4},"woman-biking":{a:"Woman Biking",b:"1F6B4-200D-2640-FE0F",c:"1F6B4-200D-2640",k:[35,11],o:4},"man-mountain-biking":{obsoletes:"1F6B5",a:"Man Mountain Biking",b:"1F6B5-200D-2642-FE0F",c:"1F6B5-200D-2642",k:[35,35],o:4},"woman-mountain-biking":{a:"Woman Mountain Biking",b:"1F6B5-200D-2640-FE0F",c:"1F6B5-200D-2640",k:[35,29],o:4},"man-cartwheeling":{a:"Man Cartwheeling",b:"1F938-200D-2642-FE0F",c:"1F938-200D-2642",k:[40,2],o:4},"woman-cartwheeling":{a:"Woman Cartwheeling",b:"1F938-200D-2640-FE0F",c:"1F938-200D-2640",k:[39,53],o:4},wrestlers:{a:"Wrestlers",b:"1F93C",k:[40,35],o:4},"man-wrestling":{a:"Man Wrestling",b:"1F93C-200D-2642-FE0F",c:"1F93C-200D-2642",k:[40,34],o:4},"woman-wrestling":{a:"Woman Wrestling",b:"1F93C-200D-2640-FE0F",c:"1F93C-200D-2640",k:[40,33],o:4},"man-playing-water-polo":{a:"Man Playing Water Polo",b:"1F93D-200D-2642-FE0F",c:"1F93D-200D-2642",k:[40,42],o:4},"woman-playing-water-polo":{a:"Woman Playing Water Polo",b:"1F93D-200D-2640-FE0F",c:"1F93D-200D-2640",k:[40,36],o:4},"man-playing-handball":{a:"Man Playing Handball",b:"1F93E-200D-2642-FE0F",c:"1F93E-200D-2642",k:[41,3],o:4},"woman-playing-handball":{a:"Woman Playing Handball",b:"1F93E-200D-2640-FE0F",c:"1F93E-200D-2640",k:[40,54],o:4},juggling:{a:"Juggling",b:"1F939",k:[40,26],o:4},"man-juggling":{a:"Man Juggling",b:"1F939-200D-2642-FE0F",c:"1F939-200D-2642",k:[40,20],o:4},"woman-juggling":{a:"Woman Juggling",b:"1F939-200D-2640-FE0F",c:"1F939-200D-2640",k:[40,14],o:4},person_in_lotus_position:{obsoleted_by:"1F9D8-200D-2640-FE0F",a:"Person in Lotus Position",b:"1F9D8",k:[49,31],o:5},man_in_lotus_position:{a:"Man in Lotus Position",b:"1F9D8-200D-2642-FE0F",c:"1F9D8-200D-2642",k:[49,25],o:5},woman_in_lotus_position:{obsoletes:"1F9D8",a:"Woman in Lotus Position",b:"1F9D8-200D-2640-FE0F",c:"1F9D8-200D-2640",k:[49,19],o:5},bath:{a:"Bath",b:"1F6C0",j:["clean","shower","bathroom"],k:[36,17],o:2},sleeping_accommodation:{a:"Sleeping Accommodation",b:"1F6CC",k:[36,29],o:2},people_holding_hands:{a:"People Holding Hands",b:"1F9D1-200D-1F91D-200D-1F9D1",k:[46,38],o:12},two_women_holding_hands:{a:"Two Women Holding Hands",b:"1F46D",j:["pair","friendship","couple","love","like","female","people","human"],k:[21,11],n:["women_holding_hands"],o:2},couple:{a:"Man and Woman Holding Hands",b:"1F46B",j:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],k:[20,16],n:["man_and_woman_holding_hands","woman_and_man_holding_hands"],o:2},two_men_holding_hands:{a:"Two Men Holding Hands",b:"1F46C",j:["pair","couple","love","like","bromance","friendship","people","human"],k:[20,42],n:["men_holding_hands"],o:2},couplekiss:{obsoleted_by:"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468",a:"Kiss",b:"1F48F",k:[25,25],o:2},"woman-kiss-man":{obsoletes:"1F48F",a:"Woman Kiss Man",b:"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468",c:"1F469-200D-2764-200D-1F48B-200D-1F468",k:[20,7],o:2},"man-kiss-man":{a:"Man Kiss Man",b:"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468",c:"1F468-200D-2764-200D-1F48B-200D-1F468",k:[17,21],o:2},"woman-kiss-woman":{a:"Woman Kiss Woman",b:"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469",c:"1F469-200D-2764-200D-1F48B-200D-1F469",k:[20,8],o:2},couple_with_heart:{obsoleted_by:"1F469-200D-2764-FE0F-200D-1F468",a:"Couple with Heart",b:"1F491",k:[25,27],o:2},"woman-heart-man":{obsoletes:"1F491",a:"Woman Heart Man",b:"1F469-200D-2764-FE0F-200D-1F468",c:"1F469-200D-2764-200D-1F468",k:[20,5],o:2},"man-heart-man":{a:"Man Heart Man",b:"1F468-200D-2764-FE0F-200D-1F468",c:"1F468-200D-2764-200D-1F468",k:[17,20],o:2},"woman-heart-woman":{a:"Woman Heart Woman",b:"1F469-200D-2764-FE0F-200D-1F469",c:"1F469-200D-2764-200D-1F469",k:[20,6],o:2},family:{obsoleted_by:"1F468-200D-1F469-200D-1F466",a:"Family",b:"1F46A",k:[20,15],n:["man-woman-boy"],o:2},"man-woman-boy":{obsoletes:"1F46A",a:"Man Woman Boy",b:"1F468-200D-1F469-200D-1F466",k:[15,33],n:["family"],o:2},"man-woman-girl":{a:"Man Woman Girl",b:"1F468-200D-1F469-200D-1F467",k:[15,35],o:2},"man-woman-girl-boy":{a:"Man Woman Girl Boy",b:"1F468-200D-1F469-200D-1F467-200D-1F466",k:[15,36],o:2},"man-woman-boy-boy":{a:"Man Woman Boy Boy",b:"1F468-200D-1F469-200D-1F466-200D-1F466",k:[15,34],o:2},"man-woman-girl-girl":{a:"Man Woman Girl Girl",b:"1F468-200D-1F469-200D-1F467-200D-1F467",k:[15,37],o:2},"man-man-boy":{a:"Man Man Boy",b:"1F468-200D-1F468-200D-1F466",k:[15,28],o:2},"man-man-girl":{a:"Man Man Girl",b:"1F468-200D-1F468-200D-1F467",k:[15,30],o:2},"man-man-girl-boy":{a:"Man Man Girl Boy",b:"1F468-200D-1F468-200D-1F467-200D-1F466",k:[15,31],o:2},"man-man-boy-boy":{a:"Man Man Boy Boy",b:"1F468-200D-1F468-200D-1F466-200D-1F466",k:[15,29],o:2},"man-man-girl-girl":{a:"Man Man Girl Girl",b:"1F468-200D-1F468-200D-1F467-200D-1F467",k:[15,32],o:2},"woman-woman-boy":{a:"Woman Woman Boy",b:"1F469-200D-1F469-200D-1F466",k:[18,18],o:2},"woman-woman-girl":{a:"Woman Woman Girl",b:"1F469-200D-1F469-200D-1F467",k:[18,20],o:2},"woman-woman-girl-boy":{a:"Woman Woman Girl Boy",b:"1F469-200D-1F469-200D-1F467-200D-1F466",k:[18,21],o:2},"woman-woman-boy-boy":{a:"Woman Woman Boy Boy",b:"1F469-200D-1F469-200D-1F466-200D-1F466",k:[18,19],o:2},"woman-woman-girl-girl":{a:"Woman Woman Girl Girl",b:"1F469-200D-1F469-200D-1F467-200D-1F467",k:[18,22],o:2},"man-boy":{a:"Man Boy",b:"1F468-200D-1F466",k:[15,24],o:4},"man-boy-boy":{a:"Man Boy Boy",b:"1F468-200D-1F466-200D-1F466",k:[15,23],o:4},"man-girl":{a:"Man Girl",b:"1F468-200D-1F467",k:[15,27],o:4},"man-girl-boy":{a:"Man Girl Boy",b:"1F468-200D-1F467-200D-1F466",k:[15,25],o:4},"man-girl-girl":{a:"Man Girl Girl",b:"1F468-200D-1F467-200D-1F467",k:[15,26],o:4},"woman-boy":{a:"Woman Boy",b:"1F469-200D-1F466",k:[18,14],o:4},"woman-boy-boy":{a:"Woman Boy Boy",b:"1F469-200D-1F466-200D-1F466",k:[18,13],o:4},"woman-girl":{a:"Woman Girl",b:"1F469-200D-1F467",k:[18,17],o:4},"woman-girl-boy":{a:"Woman Girl Boy",b:"1F469-200D-1F467-200D-1F466",k:[18,15],o:4},"woman-girl-girl":{a:"Woman Girl Girl",b:"1F469-200D-1F467-200D-1F467",k:[18,16],o:4},speaking_head_in_silhouette:{a:"Speaking Head in Silhouette",b:"1F5E3-FE0F",c:"1F5E3",k:[30,25],o:2},bust_in_silhouette:{a:"Bust in Silhouette",b:"1F464",j:["user","person","human"],k:[14,24],o:2},busts_in_silhouette:{a:"Busts in Silhouette",b:"1F465",j:["user","person","human","group","team"],k:[14,25],o:2},footprints:{a:"Footprints",b:"1F463",j:["feet","tracking","walking","beach"],k:[14,23],o:2}};var aliases={raised_hand:"hand",satisfied:"laughing",tshirt:"shirt",hand_with_index_and_middle_fingers_crossed:"crossed_fingers",sign_of_the_horns:"the_horns",grinning_face_with_star_eyes:"star-struck",reversed_hand_with_middle_finger_extended:"middle_finger",thumbsup:"+1",thumbsdown:"-1",punch:"facepunch",grinning_face_with_one_large_and_one_small_eye:"zany_face",shoe:"mans_shoe",smiling_face_with_smiling_eyes_and_hand_covering_mouth:"face_with_hand_over_mouth",face_with_finger_covering_closed_lips:"shushing_face",face_with_one_eyebrow_raised:"face_with_raised_eyebrow",face_with_open_mouth_vomiting:"face_vomiting",cooking:"fried_egg","flag-cn":"cn",shocked_face_with_exploding_head:"exploding_head",paw_prints:"feet","flag-de":"de",telephone:"phone","flag-es":"es",red_car:"car",flipper:"dolphin","flag-fr":"fr",uk:"gb","flag-gb":"gb",serious_face_with_symbols_covering_mouth:"face_with_symbols_on_mouth",poop:"hankey",shit:"hankey",honeybee:"bee",staff_of_aesculapius:"medical_symbol",lantern:"izakaya_lantern",open_book:"book",sailboat:"boat",knife:"hocho","flag-it":"it",heavy_exclamation_mark:"exclamation","flag-jp":"jp",envelope:"email","flag-kr":"kr",collision:"boom",pencil:"memo",waxing_gibbous_moon:"moon",mother_christmas:"mrs_claus",sun_small_cloud:"mostly_sunny",sun_behind_cloud:"barely_sunny",sun_behind_rain_cloud:"partly_sunny_rain",lightning_cloud:"lightning",tornado_cloud:"tornado","flag-ru":"ru","flag-us":"us",women_holding_hands:"two_women_holding_hands",man_and_woman_holding_hands:"couple",woman_and_man_holding_hands:"couple",men_holding_hands:"two_men_holding_hands","man-woman-boy":"family",family:"man-woman-boy"};var defaultEmojiData = {compressed:compressed,categories:categories,emojis:emojis,aliases:aliases};
|
|
5586
5652
|
|
|
5653
|
+
var makeAddNotifications = function (setNotifications, notificationTimeouts) { return function (text, type) {
|
|
5654
|
+
if (typeof text !== 'string' || (type !== 'success' && type !== 'error')) {
|
|
5655
|
+
return;
|
|
5656
|
+
}
|
|
5657
|
+
var id = uuid.v4();
|
|
5658
|
+
setNotifications(function (prevNotifications) { return __spreadArray(__spreadArray([], prevNotifications), [{ id: id, text: text, type: type }]); });
|
|
5659
|
+
var timeout = setTimeout(function () {
|
|
5660
|
+
return setNotifications(function (prevNotifications) {
|
|
5661
|
+
return prevNotifications.filter(function (notification) { return notification.id !== id; });
|
|
5662
|
+
});
|
|
5663
|
+
}, 5000);
|
|
5664
|
+
notificationTimeouts.push(timeout);
|
|
5665
|
+
}; };
|
|
5666
|
+
|
|
5667
|
+
var JUMP_MESSAGE_PAGE_SIZE = 25;
|
|
5587
5668
|
var UnMemoizedChannel = function (props) {
|
|
5588
5669
|
var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a;
|
|
5589
5670
|
var contextChannel = useChatContext('Channel').channel;
|
|
@@ -5595,7 +5676,7 @@ var UnMemoizedChannel = function (props) {
|
|
|
5595
5676
|
var ChannelInner = function (props) {
|
|
5596
5677
|
var _a;
|
|
5597
5678
|
var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, _c = props.emojiData, emojiData = _c === void 0 ? defaultEmojiData : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _d === void 0 ? LoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator$1 = _e === void 0 ? LoadingIndicator : _e, maxNumberOfFiles = props.maxNumberOfFiles, _f = props.multipleUploads, multipleUploads = _f === void 0 ? true : _f, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _g = props.optionalMessageInputProps, optionalMessageInputProps = _g === void 0 ? {} : _g, skipMessageDataMemoization = props.skipMessageDataMemoization;
|
|
5598
|
-
var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, mutes = _h.mutes, theme = _h.theme, useImageFlagEmojisOnWindows = _h.useImageFlagEmojisOnWindows;
|
|
5679
|
+
var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, latestMessageDatesByChannels = _h.latestMessageDatesByChannels, mutes = _h.mutes, theme = _h.theme, useImageFlagEmojisOnWindows = _h.useImageFlagEmojisOnWindows;
|
|
5599
5680
|
var t = useTranslationContext('Channel').t;
|
|
5600
5681
|
var _j = React.useState(channel.getConfig()), channelConfig = _j[0], setChannelConfig = _j[1];
|
|
5601
5682
|
var _k = React.useState([]), notifications = _k[0], setNotifications = _k[1];
|
|
@@ -5637,7 +5718,7 @@ var ChannelInner = function (props) {
|
|
|
5637
5718
|
};
|
|
5638
5719
|
var markReadThrottled = throttle__default['default'](markRead, 500, { leading: true, trailing: true });
|
|
5639
5720
|
var handleEvent = function (event) {
|
|
5640
|
-
var _a, _b, _c, _d;
|
|
5721
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
5641
5722
|
if (event.message) {
|
|
5642
5723
|
dispatch({
|
|
5643
5724
|
channel: channel,
|
|
@@ -5672,6 +5753,16 @@ var ChannelInner = function (props) {
|
|
|
5672
5753
|
}
|
|
5673
5754
|
}
|
|
5674
5755
|
}
|
|
5756
|
+
if (((_f = (_e = event.message) === null || _e === void 0 ? void 0 : _e.user) === null || _f === void 0 ? void 0 : _f.id) === client.userID &&
|
|
5757
|
+
((_g = event === null || event === void 0 ? void 0 : event.message) === null || _g === void 0 ? void 0 : _g.created_at) &&
|
|
5758
|
+
((_h = event === null || event === void 0 ? void 0 : event.message) === null || _h === void 0 ? void 0 : _h.cid)) {
|
|
5759
|
+
var messageDate = new Date(event.message.created_at);
|
|
5760
|
+
var cid = event.message.cid;
|
|
5761
|
+
if (!latestMessageDatesByChannels[cid] ||
|
|
5762
|
+
latestMessageDatesByChannels[cid].getTime() < messageDate.getTime()) {
|
|
5763
|
+
latestMessageDatesByChannels[cid] = messageDate;
|
|
5764
|
+
}
|
|
5765
|
+
}
|
|
5675
5766
|
}
|
|
5676
5767
|
throttledCopyStateFromChannel();
|
|
5677
5768
|
};
|
|
@@ -5733,33 +5824,18 @@ var ChannelInner = function (props) {
|
|
|
5733
5824
|
client.off('user.deleted', handleEvent);
|
|
5734
5825
|
notificationTimeouts.forEach(clearTimeout);
|
|
5735
5826
|
};
|
|
5736
|
-
}, [channel.cid]);
|
|
5827
|
+
}, [channel.cid, doMarkReadRequest]);
|
|
5737
5828
|
React.useEffect(function () {
|
|
5738
5829
|
var _a;
|
|
5739
|
-
if (state.thread
|
|
5740
|
-
|
|
5741
|
-
|
|
5742
|
-
|
|
5743
|
-
|
|
5744
|
-
}
|
|
5745
|
-
}
|
|
5746
|
-
}
|
|
5830
|
+
if (!state.thread)
|
|
5831
|
+
return;
|
|
5832
|
+
var message = (_a = state.messages) === null || _a === void 0 ? void 0 : _a.find(function (m) { var _a; return m.id === ((_a = state.thread) === null || _a === void 0 ? void 0 : _a.id); });
|
|
5833
|
+
if (message)
|
|
5834
|
+
dispatch({ message: message, type: 'setThread' });
|
|
5747
5835
|
}, [state.messages, state.thread]);
|
|
5748
5836
|
/** MESSAGE */
|
|
5749
5837
|
// Adds a temporary notification to message list, will be removed after 5 seconds
|
|
5750
|
-
var addNotification =
|
|
5751
|
-
if (typeof text !== 'string' || (type !== 'success' && type !== 'error')) {
|
|
5752
|
-
return;
|
|
5753
|
-
}
|
|
5754
|
-
var id = uuid.v4();
|
|
5755
|
-
setNotifications(function (prevNotifications) { return __spreadArray(__spreadArray([], prevNotifications), [{ id: id, text: text, type: type }]); });
|
|
5756
|
-
var timeout = setTimeout(function () {
|
|
5757
|
-
return setNotifications(function (prevNotifications) {
|
|
5758
|
-
return prevNotifications.filter(function (notification) { return notification.id !== id; });
|
|
5759
|
-
});
|
|
5760
|
-
}, 5000);
|
|
5761
|
-
notificationTimeouts.push(timeout);
|
|
5762
|
-
};
|
|
5838
|
+
var addNotification = makeAddNotifications(setNotifications, notificationTimeouts);
|
|
5763
5839
|
var loadMoreFinished = debounce__default['default'](function (hasMore, messages) {
|
|
5764
5840
|
if (!isMounted.current)
|
|
5765
5841
|
return;
|
|
@@ -5779,8 +5855,9 @@ var ChannelInner = function (props) {
|
|
|
5779
5855
|
if (!online.current || !window.navigator.onLine)
|
|
5780
5856
|
return [2 /*return*/, 0];
|
|
5781
5857
|
oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
|
|
5782
|
-
if (state.loadingMore || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received')
|
|
5858
|
+
if (state.loadingMore || state.loadingMoreNewer || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received') {
|
|
5783
5859
|
return [2 /*return*/, 0];
|
|
5860
|
+
}
|
|
5784
5861
|
// initial state loads with up to 25 messages, so if less than 25 no need for additional query
|
|
5785
5862
|
if (channel.state.messages.length < 25) {
|
|
5786
5863
|
loadMoreFinished(false, channel.state.messages);
|
|
@@ -5812,6 +5889,85 @@ var ChannelInner = function (props) {
|
|
|
5812
5889
|
});
|
|
5813
5890
|
});
|
|
5814
5891
|
};
|
|
5892
|
+
var loadMoreNewer = function (limit) {
|
|
5893
|
+
if (limit === void 0) { limit = 100; }
|
|
5894
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
5895
|
+
var newestMessage, newestId, perPage, queryResponse, e_3, hasMoreNewer;
|
|
5896
|
+
var _a, _b;
|
|
5897
|
+
return __generator(this, function (_c) {
|
|
5898
|
+
switch (_c.label) {
|
|
5899
|
+
case 0:
|
|
5900
|
+
if (!online.current || !window.navigator.onLine)
|
|
5901
|
+
return [2 /*return*/, 0];
|
|
5902
|
+
newestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[((_b = state === null || state === void 0 ? void 0 : state.messages) === null || _b === void 0 ? void 0 : _b.length) - 1];
|
|
5903
|
+
if (state.loadingMore || state.loadingMoreNewer)
|
|
5904
|
+
return [2 /*return*/, 0];
|
|
5905
|
+
dispatch({ loadingMoreNewer: true, type: 'setLoadingMoreNewer' });
|
|
5906
|
+
newestId = newestMessage === null || newestMessage === void 0 ? void 0 : newestMessage.id;
|
|
5907
|
+
perPage = limit;
|
|
5908
|
+
_c.label = 1;
|
|
5909
|
+
case 1:
|
|
5910
|
+
_c.trys.push([1, 3, , 4]);
|
|
5911
|
+
return [4 /*yield*/, channel.query({
|
|
5912
|
+
messages: { id_gt: newestId, limit: perPage },
|
|
5913
|
+
watchers: { limit: perPage },
|
|
5914
|
+
})];
|
|
5915
|
+
case 2:
|
|
5916
|
+
queryResponse = _c.sent();
|
|
5917
|
+
return [3 /*break*/, 4];
|
|
5918
|
+
case 3:
|
|
5919
|
+
e_3 = _c.sent();
|
|
5920
|
+
console.warn('message pagination request failed with error', e_3);
|
|
5921
|
+
dispatch({ loadingMoreNewer: false, type: 'setLoadingMoreNewer' });
|
|
5922
|
+
return [2 /*return*/, 0];
|
|
5923
|
+
case 4:
|
|
5924
|
+
hasMoreNewer = channel.state.messages !== channel.state.latestMessages;
|
|
5925
|
+
dispatch({ hasMoreNewer: hasMoreNewer, messages: channel.state.messages, type: 'loadMoreNewerFinished' });
|
|
5926
|
+
return [2 /*return*/, queryResponse.messages.length];
|
|
5927
|
+
}
|
|
5928
|
+
});
|
|
5929
|
+
});
|
|
5930
|
+
};
|
|
5931
|
+
var jumpToMessage = function (messageId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5932
|
+
var indexOfMessage, hasMoreMessages;
|
|
5933
|
+
return __generator(this, function (_a) {
|
|
5934
|
+
switch (_a.label) {
|
|
5935
|
+
case 0:
|
|
5936
|
+
dispatch({ loadingMore: true, type: 'setLoadingMore' });
|
|
5937
|
+
return [4 /*yield*/, channel.state.loadMessageIntoState(messageId)];
|
|
5938
|
+
case 1:
|
|
5939
|
+
_a.sent();
|
|
5940
|
+
indexOfMessage = channel.state.messages.findIndex(function (message) { return message.id === messageId; });
|
|
5941
|
+
hasMoreMessages = indexOfMessage >= Math.floor(JUMP_MESSAGE_PAGE_SIZE / 2);
|
|
5942
|
+
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
5943
|
+
dispatch({
|
|
5944
|
+
hasMoreNewer: channel.state.messages !== channel.state.latestMessages,
|
|
5945
|
+
highlightedMessageId: messageId,
|
|
5946
|
+
type: 'jumpToMessageFinished',
|
|
5947
|
+
});
|
|
5948
|
+
setTimeout(function () {
|
|
5949
|
+
dispatch({ type: 'clearHighlightedMessage' });
|
|
5950
|
+
}, 500);
|
|
5951
|
+
return [2 /*return*/];
|
|
5952
|
+
}
|
|
5953
|
+
});
|
|
5954
|
+
}); };
|
|
5955
|
+
var jumpToLatestMessage = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
5956
|
+
var hasMoreOlder;
|
|
5957
|
+
return __generator(this, function (_a) {
|
|
5958
|
+
switch (_a.label) {
|
|
5959
|
+
case 0: return [4 /*yield*/, channel.state.loadMessageIntoState('latest')];
|
|
5960
|
+
case 1:
|
|
5961
|
+
_a.sent();
|
|
5962
|
+
hasMoreOlder = channel.state.messages.length >= 25;
|
|
5963
|
+
loadMoreFinished(hasMoreOlder, channel.state.messages);
|
|
5964
|
+
dispatch({
|
|
5965
|
+
type: 'jumpToLatestMessage',
|
|
5966
|
+
});
|
|
5967
|
+
return [2 /*return*/];
|
|
5968
|
+
}
|
|
5969
|
+
});
|
|
5970
|
+
}); };
|
|
5815
5971
|
var updateMessage = function (updatedMessage) {
|
|
5816
5972
|
// add the message to the local channel state
|
|
5817
5973
|
channel.state.addMessageSorted(updatedMessage, true);
|
|
@@ -5973,13 +6129,16 @@ var ChannelInner = function (props) {
|
|
|
5973
6129
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
5974
6130
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
5975
6131
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
5976
|
-
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
6132
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, giphyVersion: props.giphyVersion || 'fixed_height', maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
5977
6133
|
var channelActionContextValue = React.useMemo(function () { return ({
|
|
5978
6134
|
addNotification: addNotification,
|
|
5979
6135
|
closeThread: closeThread,
|
|
5980
6136
|
dispatch: dispatch,
|
|
5981
6137
|
editMessage: editMessage,
|
|
6138
|
+
jumpToLatestMessage: jumpToLatestMessage,
|
|
6139
|
+
jumpToMessage: jumpToMessage,
|
|
5982
6140
|
loadMore: loadMore,
|
|
6141
|
+
loadMoreNewer: loadMoreNewer,
|
|
5983
6142
|
loadMoreThread: loadMoreThread,
|
|
5984
6143
|
onMentionsClick: onMentionsHoverOrClick,
|
|
5985
6144
|
onMentionsHover: onMentionsHoverOrClick,
|
|
@@ -5990,7 +6149,7 @@ var ChannelInner = function (props) {
|
|
|
5990
6149
|
setQuotedMessage: setQuotedMessage,
|
|
5991
6150
|
skipMessageDataMemoization: skipMessageDataMemoization,
|
|
5992
6151
|
updateMessage: updateMessage,
|
|
5993
|
-
}); }, [channel.cid, loadMore, quotedMessage]);
|
|
6152
|
+
}); }, [channel.cid, loadMore, loadMoreNewer, quotedMessage, jumpToMessage, jumpToLatestMessage]);
|
|
5994
6153
|
var componentContextValue = React.useMemo(function () { return ({
|
|
5995
6154
|
Attachment: props.Attachment || Attachment,
|
|
5996
6155
|
AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
|
|
@@ -6080,18 +6239,24 @@ var ChannelInner = function (props) {
|
|
|
6080
6239
|
*/
|
|
6081
6240
|
var Channel = React__default['default'].memo(UnMemoizedChannel);
|
|
6082
6241
|
|
|
6242
|
+
var MenuIcon = function (_a) {
|
|
6243
|
+
var title = _a.title;
|
|
6244
|
+
var t = useTranslationContext('MenuIcon').t;
|
|
6245
|
+
return (React__default['default'].createElement("svg", { "data-testid": 'menu-icon', viewBox: '0 0 448 512', xmlns: 'http://www.w3.org/2000/svg' },
|
|
6246
|
+
React__default['default'].createElement("title", null, title !== null && title !== void 0 ? title : t('Menu')),
|
|
6247
|
+
React__default['default'].createElement("path", { d: 'M0 88C0 74.75 10.75 64 24 64H424C437.3 64 448 74.75 448 88C448 101.3 437.3 112 424 112H24C10.75 112 0 101.3 0 88zM0 248C0 234.7 10.75 224 24 224H424C437.3 224 448 234.7 448 248C448 261.3 437.3 272 424 272H24C10.75 272 0 261.3 0 248zM424 432H24C10.75 432 0 421.3 0 408C0 394.7 10.75 384 24 384H424C437.3 384 448 394.7 448 408C448 421.3 437.3 432 424 432z', fill: 'currentColor' })));
|
|
6248
|
+
};
|
|
6249
|
+
|
|
6083
6250
|
var UnMemoizedChannelHeader = function (props) {
|
|
6084
|
-
var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, propImage = props.image, live = props.live, title = props.title;
|
|
6085
|
-
var
|
|
6251
|
+
var _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, _b = props.MenuIcon, MenuIcon$1 = _b === void 0 ? MenuIcon : _b, propImage = props.image, live = props.live, title = props.title;
|
|
6252
|
+
var _c = useChannelStateContext('ChannelHeader'), channel = _c.channel, watcher_count = _c.watcher_count;
|
|
6086
6253
|
var openMobileNav = useChatContext('ChannelHeader').openMobileNav;
|
|
6087
6254
|
var t = useTranslationContext('ChannelHeader').t;
|
|
6088
|
-
var
|
|
6255
|
+
var _d = (channel === null || channel === void 0 ? void 0 : channel.data) || {}, channelImage = _d.image, member_count = _d.member_count, name = _d.name, subtitle = _d.subtitle;
|
|
6089
6256
|
var image = propImage || channelImage;
|
|
6090
6257
|
return (React__default['default'].createElement("div", { className: 'str-chat__header-livestream' },
|
|
6091
6258
|
React__default['default'].createElement("button", { "aria-label": 'Menu', className: 'str-chat__header-hamburger', onClick: openMobileNav },
|
|
6092
|
-
React__default['default'].createElement(
|
|
6093
|
-
React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' }),
|
|
6094
|
-
React__default['default'].createElement("span", { className: 'str-chat__header-hamburger--line' })),
|
|
6259
|
+
React__default['default'].createElement(MenuIcon$1, null)),
|
|
6095
6260
|
image && (React__default['default'].createElement(Avatar$1, { image: image, shape: 'rounded', size: (channel === null || channel === void 0 ? void 0 : channel.type) === 'commerce' ? 60 : 40 })),
|
|
6096
6261
|
React__default['default'].createElement("div", { className: 'str-chat__header-livestream-left' },
|
|
6097
6262
|
React__default['default'].createElement("p", { className: 'str-chat__header-livestream-left--title' },
|
|
@@ -6614,7 +6779,7 @@ var getDisplayImage = function (channel, currentUser) {
|
|
|
6614
6779
|
};
|
|
6615
6780
|
|
|
6616
6781
|
var ChannelPreview = function (props) {
|
|
6617
|
-
var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a;
|
|
6782
|
+
var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a, channelUpdateCount = props.channelUpdateCount;
|
|
6618
6783
|
var _b = useChatContext('ChannelPreview'), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
|
|
6619
6784
|
var _c = useTranslationContext('ChannelPreview'), t = _c.t, userLanguage = _c.userLanguage;
|
|
6620
6785
|
var _d = React.useState(channel.state.messages[channel.state.messages.length - 1]), lastMessage = _d[0], setLastMessage = _d[1];
|
|
@@ -6631,7 +6796,7 @@ var ChannelPreview = function (props) {
|
|
|
6631
6796
|
client.on('notification.mark_read', handleEvent);
|
|
6632
6797
|
return function () { return client.off('notification.mark_read', handleEvent); };
|
|
6633
6798
|
}, []);
|
|
6634
|
-
React.
|
|
6799
|
+
var refreshUnreadCount = React.useCallback(function () {
|
|
6635
6800
|
if (isActive || muted) {
|
|
6636
6801
|
setUnread(0);
|
|
6637
6802
|
}
|
|
@@ -6640,15 +6805,11 @@ var ChannelPreview = function (props) {
|
|
|
6640
6805
|
}
|
|
6641
6806
|
}, [channel, isActive, muted]);
|
|
6642
6807
|
React.useEffect(function () {
|
|
6808
|
+
refreshUnreadCount();
|
|
6643
6809
|
var handleEvent = function (event) {
|
|
6644
6810
|
if (event.message)
|
|
6645
6811
|
setLastMessage(event.message);
|
|
6646
|
-
|
|
6647
|
-
setUnread(channel.countUnread());
|
|
6648
|
-
}
|
|
6649
|
-
else {
|
|
6650
|
-
setUnread(0);
|
|
6651
|
-
}
|
|
6812
|
+
refreshUnreadCount();
|
|
6652
6813
|
};
|
|
6653
6814
|
channel.on('message.new', handleEvent);
|
|
6654
6815
|
channel.on('message.updated', handleEvent);
|
|
@@ -6658,7 +6819,7 @@ var ChannelPreview = function (props) {
|
|
|
6658
6819
|
channel.off('message.updated', handleEvent);
|
|
6659
6820
|
channel.off('message.deleted', handleEvent);
|
|
6660
6821
|
};
|
|
6661
|
-
}, [
|
|
6822
|
+
}, [refreshUnreadCount, channelUpdateCount]);
|
|
6662
6823
|
if (!Preview)
|
|
6663
6824
|
return null;
|
|
6664
6825
|
var displayImage = getDisplayImage(channel, client.user);
|
|
@@ -6668,16 +6829,14 @@ var ChannelPreview = function (props) {
|
|
|
6668
6829
|
};
|
|
6669
6830
|
|
|
6670
6831
|
var SearchInput = function (props) {
|
|
6671
|
-
var channelSearchParams = props.channelSearchParams, inputRef = props.inputRef, onSearch = props.onSearch, query = props.query, searchFunction = props.searchFunction;
|
|
6832
|
+
var channelSearchParams = props.channelSearchParams, inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, query = props.query, searchFunction = props.searchFunction;
|
|
6672
6833
|
var t = useTranslationContext('SearchInput').t;
|
|
6673
6834
|
return (React__default['default'].createElement("input", { className: 'str-chat__channel-search-input', onChange: function (event) {
|
|
6674
6835
|
return searchFunction ? searchFunction(channelSearchParams, event) : onSearch(event);
|
|
6675
|
-
}, placeholder: t('Search'), ref: inputRef, type: 'text', value: query }));
|
|
6836
|
+
}, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t('Search'), ref: inputRef, type: 'text', value: query }));
|
|
6676
6837
|
};
|
|
6677
6838
|
|
|
6678
|
-
var isChannel = function (output) {
|
|
6679
|
-
return output.cid != null;
|
|
6680
|
-
};
|
|
6839
|
+
var isChannel = function (output) { return output.cid != null; };
|
|
6681
6840
|
|
|
6682
6841
|
var DefaultDropdownContainer = function (props) {
|
|
6683
6842
|
var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
|
|
@@ -6748,7 +6907,7 @@ var SearchResults = function (props) {
|
|
|
6748
6907
|
};
|
|
6749
6908
|
|
|
6750
6909
|
var UnMemoizedChannelSearch = function (props) {
|
|
6751
|
-
var _a = props.channelType, channelType = _a === void 0 ? 'messaging' : _a, DropdownContainer = props.DropdownContainer, onSelectResult = props.onSelectResult, _b = props.popupResults, popupResults = _b === void 0 ? false : _b, SearchEmpty = props.SearchEmpty, _c = props.searchForChannels, searchForChannels = _c === void 0 ? false : _c, searchFunction = props.searchFunction, _d = props.SearchInput, SearchInput$1 = _d === void 0 ? SearchInput : _d, SearchLoading = props.SearchLoading, searchQueryParams = props.searchQueryParams, SearchResultItem = props.SearchResultItem, SearchResultsHeader = props.SearchResultsHeader;
|
|
6910
|
+
var _a = props.channelType, channelType = _a === void 0 ? 'messaging' : _a, DropdownContainer = props.DropdownContainer, onSelectResult = props.onSelectResult, placeholder = props.placeholder, _b = props.popupResults, popupResults = _b === void 0 ? false : _b, SearchEmpty = props.SearchEmpty, _c = props.searchForChannels, searchForChannels = _c === void 0 ? false : _c, searchFunction = props.searchFunction, _d = props.SearchInput, SearchInput$1 = _d === void 0 ? SearchInput : _d, SearchLoading = props.SearchLoading, searchQueryParams = props.searchQueryParams, SearchResultItem = props.SearchResultItem, SearchResultsHeader = props.SearchResultsHeader;
|
|
6752
6911
|
var _e = useChatContext('ChannelSearch'), client = _e.client, setActiveChannel = _e.setActiveChannel;
|
|
6753
6912
|
var _f = React.useState(''), query = _f[0], setQuery = _f[1];
|
|
6754
6913
|
var _g = React.useState([]), results = _g[0], setResults = _g[1];
|
|
@@ -6850,8 +7009,8 @@ var UnMemoizedChannelSearch = function (props) {
|
|
|
6850
7009
|
setResultsOpen: setResultsOpen,
|
|
6851
7010
|
setSearching: setSearching,
|
|
6852
7011
|
};
|
|
6853
|
-
return (React__default['default'].createElement("div", { className: 'str-chat__channel-search' },
|
|
6854
|
-
React__default['default'].createElement(SearchInput$1, { channelSearchParams: channelSearchParams, inputRef: inputRef, onSearch: onSearch, query: query, searchFunction: searchFunction }),
|
|
7012
|
+
return (React__default['default'].createElement("div", { className: 'str-chat__channel-search', "data-testid": 'channel-search' },
|
|
7013
|
+
React__default['default'].createElement(SearchInput$1, { channelSearchParams: channelSearchParams, inputRef: inputRef, onSearch: onSearch, placeholder: placeholder, query: query, searchFunction: searchFunction }),
|
|
6855
7014
|
query && (React__default['default'].createElement(SearchResults, { DropdownContainer: DropdownContainer, popupResults: popupResults, results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, selectResult: onSelectResult || selectResult }))));
|
|
6856
7015
|
};
|
|
6857
7016
|
/**
|
|
@@ -6972,6 +7131,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6972
7131
|
activeChannel: channel,
|
|
6973
7132
|
Avatar: Avatar$1,
|
|
6974
7133
|
channel: item,
|
|
7134
|
+
// forces the update of preview component on channel update
|
|
6975
7135
|
channelUpdateCount: channelUpdateCount,
|
|
6976
7136
|
key: item.id,
|
|
6977
7137
|
Preview: Preview,
|
|
@@ -6996,29 +7156,29 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6996
7156
|
*/
|
|
6997
7157
|
var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
|
|
6998
7158
|
|
|
6999
|
-
var Cancel$b="Stornieren";var Close$b="Schließen";var Delete$b="Löschen";var Delivered$b="
|
|
7159
|
+
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 Thread$c="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 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,"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 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 }}",Flag:Flag$b,"Latest Messages":"Neueste Nachrichten",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",Mute:Mute$b,New:New$b,"New Messages!":"Neue Nachrichten!","No results found":"keine Ergebnisse gefunden","Nothing yet...":"Noch nichts...","Only visible to you":"Nur für Sie sichtbar","Open emoji picker":"Emoji-Picker öffnen","People matching":"Passende Personen","Pick your emoji":"Emoji wählen",Pin:Pin$b,"Pinned by":"Gepinnt von",Reply:Reply$b,"Reply to Message":"Auf Nachricht antworten",Search:Search$b,"Searching...":"Suchen...",Send:Send$b,"Send message request failed":"Senden der Nachrichtenanfrage fehlgeschlagen","Sending...":"Senden...","Slow Mode ON":"Slow-Mode EIN","Start of a new thread":"Einen neuen Thread beginnen","This message was deleted...":"Diese Nachricht wurde gelöscht...",Thread:Thread$c,"Type your message":"Nachricht eingeben",Unmute:Unmute$b,Unpin:Unpin$b,"Upload type: \"{{ type }}\" is not allowed":"Upload-Typ: \"{{ type }}\" ist nicht erlaubt","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",live:live$b,replyCount_one:replyCount_one$b,replyCount_other:replyCount_other$b,"this content could not be displayed":"Dieser Inhalt konnte nicht angezeigt werden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} und {{moreCount}} Mehr","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} und {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} und {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} mehr","{{ memberCount }} members":"{{ memberCount }} Mitglieder","{{ user }} has been muted":"{{ user }} wurde stummgeschaltet","{{ user }} has been unmuted":"{{ user }} wurde nicht stummgeschaltet","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anhang..."};
|
|
7000
7160
|
|
|
7001
|
-
var Cancel$a="Cancel";var Close$a="Close";var Delete$a="Delete";var Delivered$a="Delivered";var Flag$a="Flag";var Mute$a="Mute";var New$a="New";var Pin$a="Pin";var Reply$a="Reply";var Search$a="Search";var Send$a="Send";var Thread$b="Thread";var Unmute$a="Unmute";var Unpin$a="Unpin";var live$a="live";var
|
|
7161
|
+
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 Thread$b="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 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,"Edit Message":"Edit Message","Edit message request failed":"Edit message request failed","Emoji matching":"Emoji matching","Empty message...":"Empty message...","Error adding flag":"Error adding flag","Error connecting to chat, refresh the page to try again.":"Error connecting to chat, refresh the page to try again.","Error deleting message":"Error deleting message","Error muting a user ...":"Error muting a user ...","Error pinning message":"Error pinning message","Error removing message pin":"Error removing message pin","Error unmuting a user ...":"Error unmuting a user ...","Error uploading file":"Error uploading file","Error uploading image":"Error uploading image","Error · Unsent":"Error · Unsent","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$a,"Latest Messages":"Latest Messages",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",Mute:Mute$a,New:New$a,"New Messages!":"New Messages!","No results found":"No results found","Nothing yet...":"Nothing yet...","Only visible to you":"Only visible to you","Open emoji picker":"Open emoji picker","People matching":"People matching","Pick your emoji":"Pick your emoji",Pin:Pin$a,"Pinned by":"Pinned by",Reply:Reply$a,"Reply to Message":"Reply to Message",Search:Search$a,"Searching...":"Searching...",Send:Send$a,"Send message request failed":"Send message request failed","Sending...":"Sending...","Slow Mode ON":"Slow Mode ON","Start of a new thread":"Start of a new thread","This message was deleted...":"This message was deleted...",Thread:Thread$b,"Type your message":"Type your message",Unmute:Unmute$a,Unpin:Unpin$a,"Upload type: \"{{ type }}\" is not allowed":"Upload type: \"{{ type }}\" is not allowed","Wait until all attachments have uploaded":"Wait until all attachments have uploaded","You have no channels currently":"You have no channels currently","You've reached the maximum number of files":"You've reached the maximum number of files",live:live$a,replyCount_one:replyCount_one$a,replyCount_other:replyCount_other$a,"this content could not be displayed":"this content could not be displayed","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} and {{ moreCount }} more","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, and {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} and {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} more","{{ memberCount }} members":"{{ memberCount }} members","{{ user }} has been muted":"{{ user }} has been muted","{{ user }} has been unmuted":"{{ user }} has been unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Attachment..."};
|
|
7002
7162
|
|
|
7003
|
-
var Cancel$9="Cancelar";var Close$9="Cerca";var Delete$9="Borrar";var Delivered$9="Entregado";var Flag$9="Bandera";var Mute$9="Mudo";var New$9="Nuevo";var Pin$9="Alfiler";var Reply$9="Respuesta";var Search$9="Buscar";var Send$9="Enviar";var Thread$a="Hilo";var Unmute$9="Activar sonido";var Unpin$9="Desprender";var live$9="En Vivo";var
|
|
7163
|
+
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 Thread$a="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 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,"Edit Message":"Editar mensaje","Edit message request failed":"Error al editar la solicitud de mensaje","Emoji matching":"Coincidencia de emoji","Empty message...":"Mensaje vacío ...","Error adding flag":"Error al agregar la bandera","Error connecting to chat, refresh the page to try again.":"Error al conectarse al chat, actualice la página para volver a intentarlo.","Error deleting message":"Error al eliminar el mensaje","Error muting a user ...":"Error al silenciar a un usuario ...","Error pinning message":"Mensaje de error al fijar","Error removing message pin":"Error al quitar el pin del mensaje","Error unmuting a user ...":"Error al activar el silencio de un usuario ...","Error uploading file":"Error al cargar el archivo","Error uploading image":"Error subiendo imagen","Error · Unsent":"Error · No enviado","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$9,"Latest Messages":"Últimos mensajes",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",Mute:Mute$9,New:New$9,"New Messages!":"¡Nuevos mensajes!","No results found":"No se han encontrado resultados","Nothing yet...":"Nada aún...","Only visible to you":"Solo visible para ti","Open emoji picker":"Selector de emoji abierto","People matching":"Personas que coinciden","Pick your emoji":"Elige tu emoji",Pin:Pin$9,"Pinned by":"Fijado por",Reply:Reply$9,"Reply to Message":"Responder al mensaje",Search:Search$9,"Searching...":"Buscando...",Send:Send$9,"Send message request failed":"Error al enviar la solicitud de mensaje","Sending...":"Enviando...","Slow Mode ON":"Modo lento activado","Start of a new thread":"Inicio de un nuevo hilo","This message was deleted...":"Este mensaje fue eliminado ...",Thread:Thread$a,"Type your message":"Escribe tu mensaje",Unmute:Unmute$9,Unpin:Unpin$9,"Upload type: \"{{ type }}\" is not allowed":"Tipo de carga: \"{{ type }}\" no está permitido","Wait until all attachments have uploaded":"Espere hasta que se hayan cargado todos los archivos adjuntos","You have no channels currently":"Actualmente no tienes canales","You've reached the maximum number of files":"Has alcanzado el número máximo de archivos",live:live$9,replyCount_many:replyCount_many$4,replyCount_one:replyCount_one$9,replyCount_other:replyCount_other$9,"this content could not be displayed":"este contenido no se pudo mostrar","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} y {{ moreCount }} más","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} y {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} y {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} más","{{ memberCount }} members":"{{ memberCount }} miembros","{{ user }} has been muted":"{{ user }} ha sido silenciado","{{ user }} has been unmuted":"{{ user }} se ha desactivado","{{ watcherCount }} online":"{{ watcherCount }} en línea","🏙 Attachment...":"🏙 Adjunto..."};
|
|
7004
7164
|
|
|
7005
|
-
var Cancel$8="Annuler";var Close$8="Fermer";var Delete$8="Supprimer";var Delivered$8="Publié";var Flag$8="Signaler";var Mute$8="Muet";var New$8="Nouveaux";var Pin$8="Épingle";var Reply$8="Réponse";var Search$8="Rechercher";var Send$8="Envoyer";var Thread$9="Fil de discussion";var Unmute$8="Désactiver muet";var Unpin$8="Détacher";var live$8="en direct";var
|
|
7165
|
+
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 Thread$9="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 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,"Edit Message":"Éditer un message","Edit message request failed":"Échec de la demande de modification du message","Emoji matching":"Correspondance emoji","Empty message...":"Message vide...","Error adding flag":"Erreur lors de l'ajout du drapeau","Error connecting to chat, refresh the page to try again.":"Erreur de connexion au chat, rafraîchissez la page pour réessayer.","Error deleting message":"Erreur lors de la suppression du message","Error muting a user ...":"Erreur de mise en sourdine d'un utilisateur ...","Error pinning message":"Erreur d'épinglage du message","Error removing message pin":"Erreur lors de la suppression du code PIN du message","Error unmuting a user ...":"Erreur de désactivation de la fonction sourdine pour un utilisateur ...","Error uploading file":"Erreur lors du téléchargement du fichier","Error uploading image":"Erreur lors de l'envoi de l'image","Error · Unsent":"Erreur - Non envoyé","Error: {{ errorMessage }}":"Erreur : {{ errorMessage }}",Flag:Flag$8,"Latest Messages":"Derniers messages",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é",Mute:Mute$8,New:New$8,"New Messages!":"Nouveaux Messages!","No results found":"Aucun résultat trouvé","Nothing yet...":"Aucun message...","Only visible to you":"Visible uniquement pour vous","Open emoji picker":"Ouvrez le sélecteur d'emoji","People matching":"Correspondance de personnes","Pick your emoji":"Choisissez votre emoji",Pin:Pin$8,"Pinned by":"Épinglé par",Reply:Reply$8,"Reply to Message":"Répondre au message",Search:Search$8,"Searching...":"Recherche...",Send:Send$8,"Send message request failed":"Échec de la demande d'envoi de message","Sending...":"Envoi en cours...","Slow Mode ON":"Mode lent activé","Start of a new thread":"Début d'un nouveau fil de discussion","This message was deleted...":"Ce message a été supprimé...",Thread:Thread$9,"Type your message":"Saisissez votre message",Unmute:Unmute$8,Unpin:Unpin$8,"Upload type: \"{{ type }}\" is not allowed":"Le type de téléchargement: \"{{ type }}\" n'est pas autorisé","Wait until all attachments have uploaded":"Attendez que toutes les pièces jointes soient téléchargées","You have no channels currently":"Vous n'avez actuellement aucun canal","You've reached the maximum number of files":"Vous avez atteint le nombre maximum de fichiers",live:live$8,replyCount_many:replyCount_many$3,replyCount_one:replyCount_one$8,replyCount_other:replyCount_other$8,"this content could not be displayed":"ce contenu n'a pu être affiché","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} et {{ moreCount }} autres","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} et {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} et {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} supplémentaires","{{ memberCount }} members":"{{ memberCount }} membres","{{ user }} has been muted":"{{ user }} a été mis en sourdine","{{ user }} has been unmuted":"{{ user }} n'est plus en sourdine","{{ watcherCount }} online":"{{ watcherCount }} en ligne","🏙 Attachment...":"🏙 Pièce jointe..."};
|
|
7006
7166
|
|
|
7007
|
-
var Cancel$7="रद्द करें";var Close$7="बंद करे";var Delete$7="डिलीट";var Delivered$7="पहुंच गया";var Flag$7="फ्लैग करे";var Mute$7="म्यूट करे";var New$7="नए";var Pin$7="पिन";var Reply$7="जवाब दे दो";var Search$7="खोज";var Send$7="भेजे";var Thread$8="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var
|
|
7167
|
+
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 Thread$8="रिप्लाई थ्रेड";var Unmute$7="अनम्यूट";var Unpin$7="अनपिन";var live$7="लाइव";var replyCount_one$7="1 रिप्लाई";var replyCount_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,"Edit Message":"मैसेज में बदलाव करे","Edit message request failed":"संदेश संपादित करने का अनुरोध विफल रहा","Emoji matching":"इमोजी मिलान","Empty message...":"खाली संदेश ...","Error adding flag":"ध्वज जोड़ने में त्रुटि","Error connecting to chat, refresh the page to try again.":"चैट से कनेक्ट करने में त्रुटि, पेज को रिफ्रेश करें","Error deleting message":"संदेश हटाने में त्रुटि","Error muting a user ...":"यूजर को म्यूट करने का प्रयास फेल हुआ","Error pinning message":"संदेश को पिन करने में त्रुटि","Error removing message pin":"संदेश पिन निकालने में त्रुटि","Error unmuting a user ...":"यूजर को अनम्यूट करने का प्रयास फेल हुआ","Error uploading file":"फ़ाइल अपलोड करने में त्रुटि","Error uploading image":"छवि अपलोड करने में त्रुटि","Error · Unsent":"फेल","Error: {{ errorMessage }}":"फेल: {{ errorMessage }}",Flag:Flag$7,"Latest Messages":"नवीनतम संदेश",Menu:Menu$7,"Message Failed · Click to try again":"मैसेज फ़ैल - पुनः कोशिश करें","Message Failed · Unauthorized":"मैसेज फ़ैल - अनधिकृत","Message deleted":"मैसेज हटा दिया गया","Message has been successfully flagged":"मैसेज को फ्लैग कर दिया गया है","Message pinned":"संदेश पिन किया गया",Mute:Mute$7,New:New$7,"New Messages!":"नए मैसेज!","No results found":"कोई परिणाम नहीं मिला","Nothing yet...":"कोई मैसेज नहीं है","Only visible to you":"सिर्फ आपको दिखाई दे रहा है","Open emoji picker":"इमोजी पिकर खोलिये","People matching":"मेल खाते लोग","Pick your emoji":"इमोजी चूस करे",Pin:Pin$7,"Pinned by":"द्वारा पिन किया गया",Reply:Reply$7,"Reply to Message":"संदेश का जवाब दें",Search:Search$7,"Searching...":"खोज कर...",Send:Send$7,"Send message request failed":"संदेश भेजने का अनुरोध विफल रहा","Sending...":"भेजा जा रहा है","Slow Mode ON":"स्लो मोड ऑन","Start of a new thread":"एक नए थ्रेड की शुरुआत","This message was deleted...":"मैसेज हटा दिया गया",Thread:Thread$8,"Type your message":"अपना मैसेज लिखे",Unmute:Unmute$7,Unpin:Unpin$7,"Upload type: \"{{ type }}\" is not allowed":"अपलोड प्रकार: \"{{ type }}\" की अनुमति नहीं है","Wait until all attachments have uploaded":"सभी अटैचमेंट अपलोड होने तक प्रतीक्षा करें","You have no channels currently":"आपके पास कोई चैनल नहीं है","You've reached the maximum number of files":"आप अधिकतम फ़ाइलों तक पहुँच गए हैं",live:live$7,replyCount_one:replyCount_one$7,replyCount_other:replyCount_other$7,"this content could not be displayed":"यह कॉन्टेंट लोड नहीं हो पाया","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} और {{ moreCount }} और","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} और {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} और {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} और","{{ memberCount }} members":"{{ memberCount }} मेंबर्स","{{ user }} has been muted":"{{ user }} को म्यूट कर दिया गया है","{{ user }} has been unmuted":"{{ user }} को अनम्यूट कर दिया गया है","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 अटैचमेंट"};
|
|
7008
7168
|
|
|
7009
|
-
var Cancel$6="Annulla";var Close$6="Chiudi";var Delete$6="Cancella";var Delivered$6="Consegnato";var Flag$6="Segnala";var Mute$6="Silenzia";var New$6="Nuovo";var Pin$6="Pin";var Reply$6="Rispondere";var Search$6="Ricerca";var Send$6="Invia";var Thread$7="Thread";var Unmute$6="Riattiva le notifiche";var Unpin$6="Sblocca";var live$6="live";var
|
|
7169
|
+
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 Thread$7="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 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,"Edit Message":"Modifica messaggio","Edit message request failed":"Richiesta di modifica del messaggio non riuscita","Emoji matching":"Abbinamento emoji","Empty message...":"Message vuoto...","Error adding flag":"Errore durante l'aggiunta del flag","Error connecting to chat, refresh the page to try again.":"Errore di connessione alla chat, aggiorna la pagina per riprovare","Error deleting message":"Errore durante l'eliminazione del messaggio","Error muting a user ...":"Errore silenziando un utente ...","Error pinning message":"Errore durante il blocco del messaggio","Error removing message pin":"Errore durante la rimozione del PIN del messaggio","Error unmuting a user ...":"Errore riattivando le notifiche per l'utente ...","Error uploading file":"Errore durante il caricamento del file","Error uploading image":"Errore durante il caricamento dell'immagine","Error · Unsent":"Errore · Non inviato","Error: {{ errorMessage }}":"Errore: {{ errorMessage }}",Flag:Flag$6,"Latest Messages":"Ultimi messaggi",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",Mute:Mute$6,New:New$6,"New Messages!":"Nuovo messaggio!","No results found":"Nessun risultato trovato","Nothing yet...":"Ancora niente...","Only visible to you":"Visibile soltanto da te","Open emoji picker":"Apri il selettore dellle emoji","People matching":"Persone che corrispondono","Pick your emoji":"Scegli la tua emoji",Pin:Pin$6,"Pinned by":"Appuntato da",Reply:Reply$6,"Reply to Message":"Rispondi al messaggio",Search:Search$6,"Searching...":"Ricerca in corso ...",Send:Send$6,"Send message request failed":"Invia messaggio di richiesta non riuscito","Sending...":"Invio in corso...","Slow Mode ON":"Modalità lenta attivata","Start of a new thread":"Inizia un nuovo thread","This message was deleted...":"Questo messaggio é stato cancellato",Thread:Thread$7,"Type your message":"Scrivi il tuo messaggio",Unmute:Unmute$6,Unpin:Unpin$6,"Upload type: \"{{ type }}\" is not allowed":"Tipo di caricamento: \"{{ type }}\" non è consentito","Wait until all attachments have uploaded":"Attendi il caricamento di tutti gli allegati","You have no channels currently":"Al momento non sono presenti canali","You've reached the maximum number of files":"Hai raggiunto il numero massimo di file",live:live$6,replyCount_many:replyCount_many$2,replyCount_one:replyCount_one$6,replyCount_other:replyCount_other$6,"this content could not be displayed":"questo contenuto non puó essere mostrato","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e altri {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"+ {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} membri","{{ user }} has been muted":"{{ user }} é stato silenziato","{{ user }} has been unmuted":"Notifiche riattivate per {{ user }}","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Allegato..."};
|
|
7010
7170
|
|
|
7011
|
-
var Cancel$5="キャンセル";var Close$5="閉める";var Delete$5="消去";var Delivered$5="配信しました";var Flag$5="フラグ";var Mute$5="無音";var New$5="新しい";var Pin$5="ピン";var Reply$5="返事";var Search$5="探す";var Send$5="送信";var Thread$6="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var
|
|
7171
|
+
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 Thread$6="スレッド";var Unmute$5="無音を解除する";var Unpin$5="ピンを解除する";var live$5="ライブ";var replyCount_one$5="1件の返信";var replyCount_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,"Edit Message":"メッセージを編集","Edit message request failed":"メッセージの編集要求が失敗しました","Emoji matching":"絵文字マッチング","Empty message...":"空のメッセージ...","Error adding flag":"フラグを追加のエラーが発生しました","Error connecting to chat, refresh the page to try again.":"チャットへの接続ができませんでした。ページを更新してください。","Error deleting message":"メッセージを削除するエラーが発生しました","Error muting a user ...":"ユーザーを無音するエラーが発生しました...","Error pinning message":"メッセージをピンのエラーが発生しました","Error removing message pin":"メッセージのピンを削除のエラーが発生しました","Error unmuting a user ...":"ユーザーの無音解除のエラーが発生しました...","Error uploading file":"ファイルをアップロードのエラーが発生しました","Error uploading image":"画像をアップロードのエラーが発生しました","Error · Unsent":"エラー・未送信","Error: {{ errorMessage }}":"エラー: {{ errorMessage }}",Flag:Flag$5,"Latest Messages":"最新のメッセージ",Menu:Menu$5,"Message Failed · Click to try again":"メッセージが失敗しました · クリックして再試行してください","Message Failed · Unauthorized":"メッセージが失敗しました · 許可されていません","Message deleted":"メッセージが削除されました","Message has been successfully flagged":"メッセージに正常にフラグが付けられました","Message pinned":"メッセージにピンが付けられました",Mute:Mute$5,New:New$5,"New Messages!":"新しいメッセージ!","No results found":"結果が見つかりません","Nothing yet...":"まだ何もありません...","Only visible to you":"あなただけに見える","Open emoji picker":"絵文字ピッカーを開く","People matching":"一致する人","Pick your emoji":"絵文字を選んでください",Pin:Pin$5,"Pinned by":"ピンした方",Reply:Reply$5,"Reply to Message":"メッセージに返信",Search:Search$5,"Searching...":"検索中...",Send:Send$5,"Send message request failed":"メッセージ送信リクエストが失敗しました","Sending...":"送信中...","Slow Mode ON":"スローモードオン","Start of a new thread":"新しいスレッドの開始","This message was deleted...":"このメッセージは削除されました...",Thread:Thread$6,"Type your message":"メッセージを入力してください",Unmute:Unmute$5,Unpin:Unpin$5,"Upload type: \"{{ type }}\" is not allowed":"アップロードタイプ:\"{{ type }}\"は許可されていません","Wait until all attachments have uploaded":"すべての添付ファイルがアップロードされるまでお待ちください","You have no channels currently":"現在チャンネルはありません","You've reached the maximum number of files":"ファイルの最大数に達しました",live:live$5,replyCount_one:replyCount_one$5,replyCount_other:replyCount_other$5,"this content could not be displayed":"このコンテンツは表示できませんでした","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} と {{ moreCount }} 他人","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} と {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} と {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} イメージ","{{ memberCount }} members":"{{ memberCount }} メンバー","{{ user }} has been muted":"{{ user }} 無音されています","{{ user }} has been unmuted":"{{ user }} 無音されていません","{{ watcherCount }} online":"{{ watcherCount }} オンライン","🏙 Attachment...":"🏙 アタッチメント..."};
|
|
7012
7172
|
|
|
7013
|
-
var Cancel$4="취소";var Close$4="닫기";var Delete$4="삭제";var Delivered$4="배달됨";var Flag$4="플래그";var Mute$4="무음";var New$4="새로운";var Pin$4="핀";var Reply$4="답장";var Search$4="찾다";var Send$4="보내다";var Thread$5="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var
|
|
7173
|
+
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 Thread$5="스레드";var Unmute$4="음소거 해제";var Unpin$4="핀 해제";var live$4="라이브";var replyCount_one$4="답장 1개";var replyCount_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,"Edit Message":"메시지 수정","Edit message request failed":"메시지 수정 요청 실패","Emoji matching":"이모티콘 매칭","Empty message...":"빈 메시지...","Error adding flag":"플래그를 추가하는 동안 오류가 발생했습니다.","Error connecting to chat, refresh the page to try again.":"채팅에 연결하는 동안 오류가 발생했습니다. 페이지를 새로고침하여 다시 시도하세요.","Error deleting message":"메시지를 삭제하는 중에 오류가 발생했습니다.","Error muting a user ...":"사용자를 음소거하는 중에 오류가 발생했습니다...","Error pinning message":"메시지를 핀하는 중에 오류가 발생했습니다.","Error removing message pin":"메시지 핀을 제거하는 중에 오류가 발생했습니다.","Error unmuting a user ...":"사용자 음소거 해제 중 오류 발생...","Error uploading file":"파일 업로드 오류","Error uploading image":"이미지를 업로드하는 동안 오류가 발생했습니다.","Error · Unsent":"오류 · 전송되지 않음","Error: {{ errorMessage }}":"오류: {{ errorMessage }}",Flag:Flag$4,"Latest Messages":"최신 메시지",Menu:Menu$4,"Message Failed · Click to try again":"메시지 실패 · 다시 시도하려면 클릭하세요.","Message Failed · Unauthorized":"메시지 실패 · 승인되지 않음","Message deleted":"메시지가 삭제되었습니다.","Message has been successfully flagged":"메시지에 플래그가 지정되었습니다.","Message pinned":"메시지 핀했습니다",Mute:Mute$4,New:New$4,"New Messages!":"새 메시지!","No results found":"검색 결과가 없습니다","Nothing yet...":"아직 아무것도...","Only visible to you":"당신만 볼 수 있습니다","Open emoji picker":"이모티콘 선택기 열기","People matching":"일치하는 사람","Pick your emoji":"이모티콘 선택",Pin:Pin$4,"Pinned by":"핀했던 분:",Reply:Reply$4,"Reply to Message":"메시지에 답장",Search:Search$4,"Searching...":"수색...",Send:Send$4,"Send message request failed":"메시지 보내기 요청 실패","Sending...":"배상중...","Slow Mode ON":"슬로우 모드 켜짐","Start of a new thread":"새 스레드의 시작","This message was deleted...":"이 메시지는 삭제되었습니다...",Thread:Thread$5,"Type your message":"메시지 입력",Unmute:Unmute$4,Unpin:Unpin$4,"Upload type: \"{{ type }}\" is not allowed":"업로드 유형: \"{{ type }}\"은(는) 허용되지 않습니다.","Wait until all attachments have uploaded":"모든 첨부 파일이 업로드될 때까지 기다립니다.","You have no channels currently":"현재 채널이 없습니다.","You've reached the maximum number of files":"최대 파일 수에 도달했습니다.",live:live$4,replyCount_one:replyCount_one$4,replyCount_other:replyCount_other$4,"this content could not be displayed":"이 콘텐츠를 표시할 수 없습니다","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} 그리고 {{ moreCount }}명 더","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} 그리고 {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} 그리고 {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }}개 더","{{ memberCount }} members":"{{ memberCount }}명","{{ user }} has been muted":"{{ user }} 음소거되었습니다","{{ user }} has been unmuted":"{{ user }} 음소거가 해제되었습니다","{{ watcherCount }} online":"{{ watcherCount }} 온라인","🏙 Attachment...":"🏙 부착..."};
|
|
7014
7174
|
|
|
7015
|
-
var Cancel$3="Annuleer";var Close$3="Sluit";var Delete$3="Verwijder";var Delivered$3="Afgeleverd";var Flag$3="Markeer";var Mute$3="Mute";var New$3="Nieuwe";var Pin$3="Pin";var Reply$3="Antwoord";var Search$3="Zoeken";var Send$3="Verstuur";var Thread$4="Draadje";var Unmute$3="Unmute";var Unpin$3="Losmaken";var live$3="live";var
|
|
7175
|
+
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 Thread$4="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 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,"Edit Message":"Pas bericht aan","Edit message request failed":"Verzoek om bericht bewerken mislukt","Emoji matching":"Emoji-overeenkomsten","Empty message...":"Leeg bericht...","Error adding flag":"Fout bij toevoegen van vlag","Error connecting to chat, refresh the page to try again.":"Fout bij het verbinden, ververs de pagina om nogmaals te proberen","Error deleting message":"Fout bij verwijderen van bericht","Error muting a user ...":"Fout bij het muten van de gebruiker","Error pinning message":"Fout bij vastzetten van bericht","Error removing message pin":"Fout bij verwijderen van berichtpin","Error unmuting a user ...":"Fout bij het unmuten van de gebruiker","Error uploading file":"Fout bij uploaden bestand","Error uploading image":"Fout bij uploaden afbeelding","Error · Unsent":"Error: · niet verzonden","Error: {{ errorMessage }}":"Error: {{ errorMessage }}",Flag:Flag$3,"Latest Messages":"Laatste berichten",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",Mute:Mute$3,New:New$3,"New Messages!":"Nieuwe Berichten!","No results found":"Geen resultaten gevonden","Nothing yet...":"Nog niets ...","Only visible to you":"Alleen zichtbaar voor jou","Open emoji picker":"Open emojipicker","People matching":"Mensen die matchen","Pick your emoji":"Kies je emoji",Pin:Pin$3,"Pinned by":"Vastgemaakt door",Reply:Reply$3,"Reply to Message":"Antwoord op bericht",Search:Search$3,"Searching...":"Zoeken...",Send:Send$3,"Send message request failed":"Verzoek om bericht te verzenden mislukt","Sending...":"Aan het verzenden...","Slow Mode ON":"Langzame modus aan","Start of a new thread":"Begin van een nieuwe draadje","This message was deleted...":"Dit bericht was verwijderd",Thread:Thread$4,"Type your message":"Type je bericht",Unmute:Unmute$3,Unpin:Unpin$3,"Upload type: \"{{ type }}\" is not allowed":"Uploadtype: \"{{ type }}\" is niet toegestaan","Wait until all attachments have uploaded":"Wacht tot alle bijlagen zijn geüpload","You have no channels currently":"Er zijn geen chats beschikbaar","You've reached the maximum number of files":"Je hebt het maximale aantal bestanden bereikt",live:live$3,replyCount_one:replyCount_one$3,replyCount_other:replyCount_other$3,"this content could not be displayed":"Deze inhoud kan niet weergegeven worden","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} en {{ moreCount }} meer","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} en {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} en {{ secondUser }}","{{ imageCount }} more":"+{{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} deelnemers","{{ user }} has been muted":"{{ user }} is muted","{{ user }} has been unmuted":"{{ user }} is unmuted","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Bijlage..."};
|
|
7016
7176
|
|
|
7017
|
-
var Cancel$2="Cancelar";var Close$2="
|
|
7177
|
+
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 Thread$3="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 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,"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 muting a user ...":"Erro ao silenciar um usuário...","Error pinning message":"Erro ao fixar mensagem","Error removing message pin":"Erro ao remover o PIN da mensagem","Error unmuting a user ...":"Erro ao ativar o som de um usuário...","Error uploading file":"Erro ao enviar arquivo","Error uploading image":"Erro ao carregar a imagem","Error · Unsent":"Erro · Não enviado","Error: {{ errorMessage }}":"Erro: {{ errorMessage }}",Flag:Flag$2,"Latest Messages":"Mensagens mais recentes",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",Mute:Mute$2,New:New$2,"New Messages!":"Novas mensagens!","No results found":"Nenhum resultado encontrado","Nothing yet...":"Nada ainda...","Only visible to you":"Visível apenas para você","Open emoji picker":"Abrir seletor de emoji","People matching":"Pessoas correspondentes","Pick your emoji":"Escolha o seu emoji",Pin:Pin$2,"Pinned by":"Fixado por",Reply:Reply$2,"Reply to Message":"Responder a mensagem",Search:Search$2,"Searching...":"Procurando...",Send:Send$2,"Send message request failed":"O pedido de envio de mensagem falhou","Sending...":"Enviando...","Slow Mode ON":"Modo lento LIGADO","Start of a new thread":"Início de um novo tópico","This message was deleted...":"Esta mensagem foi excluída...",Thread:Thread$3,"Type your message":"Digite sua mensagem",Unmute:Unmute$2,Unpin:Unpin$2,"Upload type: \"{{ type }}\" is not allowed":"Tipo de upload: \"{{ type }}\" não é permitido","Wait until all attachments have uploaded":"Espere até que todos os anexos tenham sido carregados","You have no channels currently":"Você não tem canais atualmente","You've reached the maximum number of files":"Você atingiu o número máximo de arquivos",live:live$2,replyCount_many:replyCount_many$1,replyCount_one:replyCount_one$2,replyCount_other:replyCount_other$2,"this content could not be displayed":"este conteúdo não pôde ser exibido","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} e mais {{ moreCount }}","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} e {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} e {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} mais","{{ memberCount }} members":"{{ memberCount }} membros","{{ user }} has been muted":"{{ user }} foi silenciado","{{ user }} has been unmuted":"{{ user }} foi reativado","{{ watcherCount }} online":"{{ watcherCount }} online","🏙 Attachment...":"🏙 Anexo..."};
|
|
7018
7178
|
|
|
7019
|
-
var Cancel$1="Отмена";var Close$1="Закрыть";var Delete$1="Удалить";var Delivered$1="Отправлено";var Flag$1="Пожаловаться";var Mute$1="Отключить уведомления";var New$1="Новые";var Pin$1="Штырь";var Reply$1="Отвечать";var Search$1="Поиск";var Send$1="Отправить";var Thread$2="Ветка";var Unmute$1="Включить уведомления";var Unpin$1="Открепить";var live$1="В прямом эфире";var
|
|
7179
|
+
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 Thread$2="Ветка";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 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,"Edit Message":"Редактировать сообщение","Edit message request failed":"Не удалось изменить запрос сообщения","Emoji matching":"Соответствие эмодзи","Empty message...":"Пустое сообщение...","Error adding flag":"Ошибка добавления флага","Error connecting to chat, refresh the page to try again.":"Ошибка подключения к чату, обновите страницу чтобы попробовать снова.","Error deleting message":"Ошибка при удалении сообщения","Error muting a user ...":"Ошибка отключения уведомлений от пользователя...","Error pinning message":"Сообщение об ошибке при закреплении","Error removing message pin":"Ошибка при удалении булавки сообщения","Error unmuting a user ...":"Ошибка включения уведомлений...","Error uploading file":"Ошибка при загрузке файла","Error uploading image":"Ошибка загрузки изображения","Error · Unsent":"Ошибка · Не отправлено","Error: {{ errorMessage }}":"Ошибка: {{ errorMessage }}",Flag:Flag$1,"Latest Messages":"Последние сообщения",Menu:Menu$1,"Message Failed · Click to try again":"Ошибка отправки сообщения · Нажмите чтобы повторить","Message Failed · Unauthorized":"Ошибка отправки сообщения · Неавторизованный","Message deleted":"Сообщение удалено","Message has been successfully flagged":"Жалоба на сообщение была принята","Message pinned":"Сообщение закреплено",Mute:Mute$1,New:New$1,"New Messages!":"Новые сообщения!","No results found":"результаты не найдены","Nothing yet...":"Пока ничего нет...","Only visible to you":"Только видно для вас","Open emoji picker":"Выбрать emoji","People matching":"Соответствующие люди","Pick your emoji":"Выберите свой emoji",Pin:Pin$1,"Pinned by":"Закреплено",Reply:Reply$1,"Reply to Message":"Ответить на сообщение",Search:Search$1,"Searching...":"Ищем...",Send:Send$1,"Send message request failed":"Не удалось отправить запрос на отправку сообщения","Sending...":"Отправка...","Slow Mode ON":"Медленный режим включен","Start of a new thread":"Начало новой ветки","This message was deleted...":"Сообщение было удалено...",Thread:Thread$2,"Type your message":"Ваше сообщение",Unmute:Unmute$1,Unpin:Unpin$1,"Upload type: \"{{ type }}\" is not allowed":"Тип загрузки: \"{{ type }}\" не разрешен","Wait until all attachments have uploaded":"Подождите, пока все вложения загрузятся","You have no channels currently":"У вас нет каналов в данный момент","You've reached the maximum number of files":"Вы достигли максимального количества файлов",live:live$1,replyCount_few:replyCount_few,replyCount_many:replyCount_many,replyCount_one:replyCount_one$1,replyCount_other:replyCount_other$1,"this content could not be displayed":"Этот контент не может быть отображен в данный момент","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} и {{ moreCount }} еще","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }} и {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} и {{ secondUser }}","{{ imageCount }} more":"Ещё {{ imageCount }}","{{ memberCount }} members":"{{ memberCount }} члены","{{ user }} has been muted":"Вы отписались от уведомлений от {{ user }}","{{ user }} has been unmuted":"Уведомления от {{ user }} были включены","{{ watcherCount }} online":"{{ watcherCount }} в сети","🏙 Attachment...":"🏙 Вложение..."};
|
|
7020
7180
|
|
|
7021
|
-
var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi";var Flag="Bayrak";var Mute="Sessiz";var New="Yeni";var Pin="Toplu iğne";var Reply="Cevapla";var Search="Arama";var Send="Gönder";var Thread$1="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var
|
|
7181
|
+
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 Thread$1="Konu";var Unmute="Sesini aç";var Unpin="Sabitlemeyi kaldır";var live="canlı";var replyCount_one="1 cevap";var replyCount_other="{{ count }} cevaplar";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,"Edit Message":"Mesajı Düzenle","Edit message request failed":"Mesaj düzenleme isteği başarısız oldu","Emoji matching":"Emoji eşleştirme","Empty message...":"Boş mesaj...","Error adding flag":"Bayrak eklenirken hata oluştu","Error connecting to chat, refresh the page to try again.":"Bağlantı hatası, sayfayı yenileyip tekrar deneyin.","Error deleting message":"Mesaj silinirken hata oluştu","Error muting a user ...":"Kullanıcıyı sessize alırken hata oluştu ...","Error pinning message":"Mesaj sabitlenirken hata oluştu","Error removing message pin":"Mesaj PIN'i kaldırılırken hata oluştu","Error unmuting a user ...":"Kullanıcının sesini açarken hata oluştu ...","Error uploading file":"Dosya yüklenirken hata oluştu","Error uploading image":"Resmi yüklerken hata","Error · Unsent":"Hata · Gönderilemedi","Error: {{ errorMessage }}":"Hata: {{ errorMessage }}",Flag:Flag,"Latest Messages":"Son Mesajlar",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",Mute:Mute,New:New,"New Messages!":"Yeni Mesajlar!","No results found":"Sonuç bulunamadı","Nothing yet...":"Şimdilik hiçbir şey...","Only visible to you":"Sadece size görünür","Open emoji picker":"Emoji klavyesini aç","People matching":"Eşleşen kişiler","Pick your emoji":"Emoji seçin",Pin:Pin,"Pinned by":"Sabitleyen",Reply:Reply,"Reply to Message":"Mesajı Cevapla",Search:Search,"Searching...":"Aranıyor...",Send:Send,"Send message request failed":"Mesaj gönderme isteği başarısız oldu","Sending...":"Gönderiliyor...","Slow Mode ON":"Yavaş Mod Açık","Start of a new thread":"Yeni konunun başı","This message was deleted...":"Bu mesaj silindi",Thread:Thread$1,"Type your message":"Mesajınızı yazın",Unmute:Unmute,Unpin:Unpin,"Upload type: \"{{ type }}\" is not allowed":"Yükleme türü: \"{{ type }}\" izin verilmez","Wait until all attachments have uploaded":"Tüm ekler yüklenene kadar bekleyin","You have no channels currently":"Henüz kanalınız yok","You've reached the maximum number of files":"Maksimum dosya sayısına ulaştınız",live:live,replyCount_one:replyCount_one,replyCount_other:replyCount_other,"this content could not be displayed":"bu içerik gösterilemiyor","{{ commaSeparatedUsers }} and {{ moreCount }} more":"{{ commaSeparatedUsers }} ve {{ moreCount }} daha","{{ commaSeparatedUsers }}, and {{ lastUser }}":"{{ commaSeparatedUsers }}, ve {{ lastUser }}","{{ firstUser }} and {{ secondUser }}":"{{ firstUser }} ve {{ secondUser }}","{{ imageCount }} more":"{{ imageCount }} adet daha","{{ memberCount }} members":"{{ memberCount }} üyeler","{{ user }} has been muted":"{{ user }} sessize alındı","{{ user }} has been unmuted":"{{ user }} sesi açıldı","{{ watcherCount }} online":"{{ watcherCount }} çevrimiçi","🏙 Attachment...":"🏙 Ek..."};
|
|
7022
7182
|
|
|
7023
7183
|
var defaultNS = 'translation';
|
|
7024
7184
|
var defaultLng = 'en';
|
|
@@ -7026,9 +7186,9 @@ Dayjs__default['default'].extend(updateLocale__default['default']);
|
|
|
7026
7186
|
Dayjs__default['default'].updateLocale('de', {
|
|
7027
7187
|
calendar: {
|
|
7028
7188
|
lastDay: '[gestern um] LT',
|
|
7029
|
-
lastWeek: '[letzten] dddd [
|
|
7030
|
-
nextDay: '[morgen
|
|
7031
|
-
nextWeek: 'dddd [
|
|
7189
|
+
lastWeek: '[letzten] dddd [um] LT',
|
|
7190
|
+
nextDay: '[morgen um] LT',
|
|
7191
|
+
nextWeek: 'dddd [um] LT',
|
|
7032
7192
|
sameDay: '[heute um] LT',
|
|
7033
7193
|
sameElse: 'L',
|
|
7034
7194
|
},
|
|
@@ -7144,9 +7304,9 @@ Dayjs__default['default'].updateLocale('nl', {
|
|
|
7144
7304
|
Dayjs__default['default'].updateLocale('pt', {
|
|
7145
7305
|
calendar: {
|
|
7146
7306
|
lastDay: '[ontem às] LT',
|
|
7147
|
-
lastWeek: '
|
|
7307
|
+
lastWeek: 'dddd [passada às] LT',
|
|
7148
7308
|
nextDay: '[amanhã às] LT',
|
|
7149
|
-
nextWeek: 'dddd [
|
|
7309
|
+
nextWeek: 'dddd [às] LT',
|
|
7150
7310
|
sameDay: '[hoje às] LT',
|
|
7151
7311
|
sameElse: 'L',
|
|
7152
7312
|
},
|
|
@@ -7619,20 +7779,21 @@ var Streami18n = /** @class */ (function () {
|
|
|
7619
7779
|
return Streami18n;
|
|
7620
7780
|
}());
|
|
7621
7781
|
|
|
7622
|
-
var version = '
|
|
7782
|
+
var version = '8.1.1';
|
|
7623
7783
|
|
|
7624
7784
|
var useChat = function (_a) {
|
|
7625
|
-
var _b;
|
|
7626
|
-
var client = _a.client,
|
|
7627
|
-
var
|
|
7785
|
+
var _b, _c;
|
|
7786
|
+
var client = _a.client, _d = _a.defaultLanguage, defaultLanguage = _d === void 0 ? 'en' : _d, i18nInstance = _a.i18nInstance, initialNavOpen = _a.initialNavOpen;
|
|
7787
|
+
var _e = React.useState({
|
|
7628
7788
|
t: function (key) { return key; },
|
|
7629
7789
|
tDateTimeParser: function (input) { return Dayjs__default['default'](input); },
|
|
7630
7790
|
userLanguage: 'en',
|
|
7631
|
-
}), translators =
|
|
7632
|
-
var
|
|
7633
|
-
var
|
|
7634
|
-
var
|
|
7635
|
-
var
|
|
7791
|
+
}), translators = _e[0], setTranslators = _e[1];
|
|
7792
|
+
var _f = React.useState(), channel = _f[0], setChannel = _f[1];
|
|
7793
|
+
var _g = React.useState([]), mutes = _g[0], setMutes = _g[1];
|
|
7794
|
+
var _h = React.useState(initialNavOpen), navOpen = _h[0], setNavOpen = _h[1];
|
|
7795
|
+
var _j = React.useState({}), latestMessageDatesByChannels = _j[0], setLatestMessageDatesByChannels = _j[1];
|
|
7796
|
+
var clientMutes = ((_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes) || [];
|
|
7636
7797
|
var closeMobileNav = function () { return setNavOpen(false); };
|
|
7637
7798
|
var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
|
|
7638
7799
|
var appSettings = React.useRef(null);
|
|
@@ -7653,7 +7814,7 @@ var useChat = function (_a) {
|
|
|
7653
7814
|
}
|
|
7654
7815
|
}, [client]);
|
|
7655
7816
|
React.useEffect(function () {
|
|
7656
|
-
setMutes(clientMutes
|
|
7817
|
+
setMutes(clientMutes);
|
|
7657
7818
|
var handleEvent = function (event) {
|
|
7658
7819
|
var _a;
|
|
7659
7820
|
setMutes(((_a = event.me) === null || _a === void 0 ? void 0 : _a.mutes) || []);
|
|
@@ -7697,10 +7858,14 @@ var useChat = function (_a) {
|
|
|
7697
7858
|
});
|
|
7698
7859
|
});
|
|
7699
7860
|
}, []);
|
|
7861
|
+
React.useEffect(function () {
|
|
7862
|
+
setLatestMessageDatesByChannels({});
|
|
7863
|
+
}, [(_c = client.user) === null || _c === void 0 ? void 0 : _c.id]);
|
|
7700
7864
|
return {
|
|
7701
7865
|
channel: channel,
|
|
7702
7866
|
closeMobileNav: closeMobileNav,
|
|
7703
7867
|
getAppSettings: getAppSettings,
|
|
7868
|
+
latestMessageDatesByChannels: latestMessageDatesByChannels,
|
|
7704
7869
|
mutes: mutes,
|
|
7705
7870
|
navOpen: navOpen,
|
|
7706
7871
|
openMobileNav: openMobileNav,
|
|
@@ -7711,7 +7876,7 @@ var useChat = function (_a) {
|
|
|
7711
7876
|
|
|
7712
7877
|
var useCreateChatContext = function (value) {
|
|
7713
7878
|
var _a;
|
|
7714
|
-
var channel = value.channel, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, getAppSettings = value.getAppSettings, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
|
|
7879
|
+
var channel = value.channel, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, getAppSettings = value.getAppSettings, latestMessageDatesByChannels = value.latestMessageDatesByChannels, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
|
|
7715
7880
|
var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
|
|
7716
7881
|
var clientValues = "" + client.clientID + Object.keys(client.activeChannels).length + Object.keys(client.listeners).length + client.mutedChannels.length + "\n " + ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id);
|
|
7717
7882
|
var mutedUsersLength = mutes.length;
|
|
@@ -7721,6 +7886,7 @@ var useCreateChatContext = function (value) {
|
|
|
7721
7886
|
closeMobileNav: closeMobileNav,
|
|
7722
7887
|
customClasses: customClasses,
|
|
7723
7888
|
getAppSettings: getAppSettings,
|
|
7889
|
+
latestMessageDatesByChannels: latestMessageDatesByChannels,
|
|
7724
7890
|
mutes: mutes,
|
|
7725
7891
|
navOpen: navOpen,
|
|
7726
7892
|
openMobileNav: openMobileNav,
|
|
@@ -7767,7 +7933,7 @@ var useCustomStyles = function (customStyles) {
|
|
|
7767
7933
|
*/
|
|
7768
7934
|
var Chat = function (props) {
|
|
7769
7935
|
var children = props.children, client = props.client, customClasses = props.customClasses, customStyles = props.customStyles, _a = props.darkMode, darkMode = _a === void 0 ? false : _a, defaultLanguage = props.defaultLanguage, i18nInstance = props.i18nInstance, _b = props.initialNavOpen, initialNavOpen = _b === void 0 ? true : _b, _c = props.theme, theme = _c === void 0 ? 'messaging light' : _c, _d = props.useImageFlagEmojisOnWindows, useImageFlagEmojisOnWindows = _d === void 0 ? false : _d;
|
|
7770
|
-
var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
|
|
7936
|
+
var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, latestMessageDatesByChannels = _e.latestMessageDatesByChannels, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
|
|
7771
7937
|
useCustomStyles(darkMode ? darkModeTheme : customStyles);
|
|
7772
7938
|
var chatContextValue = useCreateChatContext({
|
|
7773
7939
|
channel: channel,
|
|
@@ -7775,6 +7941,7 @@ var Chat = function (props) {
|
|
|
7775
7941
|
closeMobileNav: closeMobileNav,
|
|
7776
7942
|
customClasses: customClasses,
|
|
7777
7943
|
getAppSettings: getAppSettings,
|
|
7944
|
+
latestMessageDatesByChannels: latestMessageDatesByChannels,
|
|
7778
7945
|
mutes: mutes,
|
|
7779
7946
|
navOpen: navOpen,
|
|
7780
7947
|
openMobileNav: openMobileNav,
|
|
@@ -7856,55 +8023,31 @@ var mousewheelListener = function (event) {
|
|
|
7856
8023
|
event.preventDefault();
|
|
7857
8024
|
}
|
|
7858
8025
|
};
|
|
7859
|
-
var calculateTopPosition = function (element) {
|
|
7860
|
-
if (element instanceof HTMLElement) {
|
|
7861
|
-
return element.offsetTop + calculateTopPosition(element.offsetParent);
|
|
7862
|
-
}
|
|
7863
|
-
return 0;
|
|
7864
|
-
};
|
|
7865
|
-
/**
|
|
7866
|
-
* Computes by recursively summing offsetTop until an element without offsetParent is reached
|
|
7867
|
-
*/
|
|
7868
|
-
var calculateOffset = function (element, scrollTop) {
|
|
7869
|
-
if (!element) {
|
|
7870
|
-
return 0;
|
|
7871
|
-
}
|
|
7872
|
-
return calculateTopPosition(element) + (element.offsetHeight - scrollTop - window.innerHeight);
|
|
7873
|
-
};
|
|
7874
8026
|
var InfiniteScroll = function (props) {
|
|
7875
|
-
var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a, _b = props.hasMore, hasMore = _b === void 0 ? false : _b, _c = props.
|
|
8027
|
+
var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a, _b = props.hasMore, hasMore = _b === void 0 ? false : _b, _c = props.hasMoreNewer, hasMoreNewer = _c === void 0 ? false : _c, _d = props.initialLoad, initialLoad = _d === void 0 ? true : _d, _e = props.isLoading, isLoading = _e === void 0 ? false : _e, listenToScroll = props.listenToScroll, loader = props.loader, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, _f = props.threshold, threshold = _f === void 0 ? 250 : _f, _g = props.useCapture, useCapture = _g === void 0 ? false : _g, elementProps = __rest(props, ["children", "element", "hasMore", "hasMoreNewer", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "threshold", "useCapture"]);
|
|
7876
8028
|
var scrollComponent = React.useRef();
|
|
7877
8029
|
var scrollListener = React.useCallback(function () {
|
|
7878
8030
|
var element = scrollComponent.current;
|
|
7879
|
-
if (!element)
|
|
8031
|
+
if (!element || element.offsetParent === null) {
|
|
7880
8032
|
return;
|
|
7881
|
-
var parentElement = element.parentElement;
|
|
7882
|
-
var offset = 0;
|
|
7883
|
-
var reverseOffset = 0;
|
|
7884
|
-
if (useWindow) {
|
|
7885
|
-
var doc = document.documentElement || document.body.parentNode || document.body;
|
|
7886
|
-
var scrollTop = window.pageYOffset !== undefined ? window.pageYOffset : doc.scrollTop;
|
|
7887
|
-
offset = calculateOffset(element, scrollTop);
|
|
7888
|
-
reverseOffset = scrollTop;
|
|
7889
|
-
}
|
|
7890
|
-
else if (parentElement) {
|
|
7891
|
-
offset = element.scrollHeight - parentElement.scrollTop - parentElement.clientHeight;
|
|
7892
|
-
reverseOffset = parentElement.scrollTop;
|
|
7893
8033
|
}
|
|
8034
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
8035
|
+
var parentElement = element.parentElement;
|
|
8036
|
+
var offset = element.scrollHeight - parentElement.scrollTop - parentElement.clientHeight;
|
|
8037
|
+
var reverseOffset = parentElement.scrollTop;
|
|
7894
8038
|
if (listenToScroll) {
|
|
7895
8039
|
listenToScroll(offset, reverseOffset, threshold);
|
|
7896
8040
|
}
|
|
7897
|
-
|
|
7898
|
-
if ((isReverse ? reverseOffset : offset) < Number(threshold) &&
|
|
7899
|
-
element.offsetParent !== null &&
|
|
7900
|
-
typeof loadMore === 'function' &&
|
|
7901
|
-
hasMore) {
|
|
8041
|
+
if (reverseOffset < Number(threshold) && typeof loadMore === 'function' && hasMore) {
|
|
7902
8042
|
loadMore();
|
|
7903
8043
|
}
|
|
7904
|
-
|
|
8044
|
+
if (offset < Number(threshold) && typeof loadMoreNewer === 'function' && hasMoreNewer) {
|
|
8045
|
+
loadMoreNewer();
|
|
8046
|
+
}
|
|
8047
|
+
}, [hasMore, hasMoreNewer, threshold, listenToScroll, loadMore, loadMoreNewer]);
|
|
7905
8048
|
React.useEffect(function () {
|
|
7906
8049
|
var _a;
|
|
7907
|
-
var scrollElement =
|
|
8050
|
+
var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
|
|
7908
8051
|
if (isLoading || !scrollElement) {
|
|
7909
8052
|
return function () { return undefined; };
|
|
7910
8053
|
}
|
|
@@ -7917,10 +8060,10 @@ var InfiniteScroll = function (props) {
|
|
|
7917
8060
|
scrollElement.removeEventListener('scroll', scrollListener, useCapture);
|
|
7918
8061
|
scrollElement.removeEventListener('resize', scrollListener, useCapture);
|
|
7919
8062
|
};
|
|
7920
|
-
}, [initialLoad, isLoading, scrollListener, useCapture
|
|
8063
|
+
}, [initialLoad, isLoading, scrollListener, useCapture]);
|
|
7921
8064
|
React.useEffect(function () {
|
|
7922
8065
|
var _a;
|
|
7923
|
-
var scrollElement =
|
|
8066
|
+
var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
|
|
7924
8067
|
if (scrollElement) {
|
|
7925
8068
|
scrollElement.addEventListener('wheel', mousewheelListener, { passive: false });
|
|
7926
8069
|
}
|
|
@@ -7929,30 +8072,17 @@ var InfiniteScroll = function (props) {
|
|
|
7929
8072
|
scrollElement.removeEventListener('wheel', mousewheelListener, useCapture);
|
|
7930
8073
|
}
|
|
7931
8074
|
};
|
|
7932
|
-
}, [useCapture
|
|
8075
|
+
}, [useCapture]);
|
|
7933
8076
|
var attributes = __assign(__assign({}, elementProps), { ref: function (element) {
|
|
7934
8077
|
scrollComponent.current = element;
|
|
7935
8078
|
} });
|
|
7936
8079
|
var childrenArray = [children];
|
|
7937
8080
|
if (isLoading && loader) {
|
|
7938
|
-
|
|
7939
|
-
childrenArray.unshift(loader);
|
|
7940
|
-
}
|
|
7941
|
-
else {
|
|
7942
|
-
childrenArray.push(loader);
|
|
7943
|
-
}
|
|
8081
|
+
childrenArray.unshift(loader);
|
|
7944
8082
|
}
|
|
7945
8083
|
return React__default['default'].createElement(element, attributes, childrenArray);
|
|
7946
8084
|
};
|
|
7947
8085
|
|
|
7948
|
-
var InfiniteScrollPaginator = function (props) {
|
|
7949
|
-
var children = props.children, hasNextPage = props.hasNextPage, _a = props.LoadingIndicator, LoadingIndicator = _a === void 0 ? reactFileUtils.LoadingIndicator : _a, loadNextPage = props.loadNextPage, refreshing = props.refreshing, reverse = props.reverse, threshold = props.threshold;
|
|
7950
|
-
return (React__default['default'].createElement(InfiniteScroll, { hasMore: hasNextPage, isLoading: refreshing, isReverse: reverse, loader: React__default['default'].createElement("div", { className: 'str-chat__infinite-scroll-paginator', key: 'loadingindicator' },
|
|
7951
|
-
React__default['default'].createElement(LoadingIndicator, null)), loadMore: loadNextPage, threshold: threshold, useWindow: false }, children));
|
|
7952
|
-
};
|
|
7953
|
-
|
|
7954
|
-
var ReverseInfiniteScroll = function (props) { return (React__default['default'].createElement(InfiniteScroll, __assign({}, props, { isReverse: true }))); };
|
|
7955
|
-
|
|
7956
8086
|
var selectColor = function (number, dark) {
|
|
7957
8087
|
var hue = number * 137.508; // use golden angle approximation
|
|
7958
8088
|
return "hsl(" + hue + "," + (dark ? '50%' : '85%') + ", " + (dark ? '75%' : '55%') + ")";
|
|
@@ -8057,7 +8187,7 @@ var MemoizedMessage = React__default['default'].memo(MessageWithContext, areMess
|
|
|
8057
8187
|
var Message = function (props) {
|
|
8058
8188
|
var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage;
|
|
8059
8189
|
var addNotification = useChannelActionContext('Message').addNotification;
|
|
8060
|
-
var
|
|
8190
|
+
var _b = useChannelStateContext('Message'), highlightedMessageId = _b.highlightedMessageId, mutes = _b.mutes;
|
|
8061
8191
|
var reactionSelectorRef = React.useRef(null);
|
|
8062
8192
|
var handleAction = useActionHandler(message);
|
|
8063
8193
|
var handleOpenThread = useOpenThreadHandler(message, propOpenThread);
|
|
@@ -8078,16 +8208,17 @@ var Message = function (props) {
|
|
|
8078
8208
|
getSuccessNotification: getMuteUserSuccessNotification,
|
|
8079
8209
|
notify: addNotification,
|
|
8080
8210
|
});
|
|
8081
|
-
var
|
|
8211
|
+
var _c = useMentionsHandler(message, {
|
|
8082
8212
|
onMentionsClick: propOnMentionsClick,
|
|
8083
8213
|
onMentionsHover: propOnMentionsHover,
|
|
8084
|
-
}), onMentionsClick =
|
|
8085
|
-
var
|
|
8214
|
+
}), onMentionsClick = _c.onMentionsClick, onMentionsHover = _c.onMentionsHover;
|
|
8215
|
+
var _d = usePinHandler(message, pinPermissions, {
|
|
8086
8216
|
getErrorNotification: getPinMessageErrorNotification,
|
|
8087
8217
|
notify: addNotification,
|
|
8088
|
-
}), canPin =
|
|
8089
|
-
var
|
|
8090
|
-
|
|
8218
|
+
}), canPin = _d.canPin, handlePin = _d.handlePin;
|
|
8219
|
+
var _e = useReactionClick(message, reactionSelectorRef, undefined, closeReactionSelectorOnClick), isReactionEnabled = _e.isReactionEnabled, onReactionListClick = _e.onReactionListClick, showDetailedReactions = _e.showDetailedReactions;
|
|
8220
|
+
var highlighted = highlightedMessageId === message.id;
|
|
8221
|
+
return (React__default['default'].createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, 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, handleFlag: handleFlag, 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 }));
|
|
8091
8222
|
};
|
|
8092
8223
|
|
|
8093
8224
|
var MessageCommerceWithContext = function (props) {
|
|
@@ -8101,7 +8232,7 @@ var MessageCommerceWithContext = function (props) {
|
|
|
8101
8232
|
if (message.deleted_at) {
|
|
8102
8233
|
return React__default['default'].createElement(MessageDeleted$1, { message: message });
|
|
8103
8234
|
}
|
|
8104
|
-
if (message.customType ===
|
|
8235
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date) {
|
|
8105
8236
|
return null;
|
|
8106
8237
|
}
|
|
8107
8238
|
return (React__default['default'].createElement("div", { className: ("\n\t\t\t\t\t\t" + messageClasses + "\n\t\t\t\t\t\tstr-chat__message-commerce--" + message.type + "\n\t\t\t\t\t\t" + (message.text ? 'str-chat__message-commerce--has-text' : 'str-chat__message-commerce--has-no-text') + "\n\t\t\t\t\t\t" + (hasAttachment ? 'str-chat__message-commerce--has-attachment' : '') + "\n " + (hasReactions && isReactionEnabled ? 'str-chat__message-commerce--with-reactions' : '') + "\n " + ("str-chat__message-commerce--" + firstGroupStyle) + "\n " + (message.pinned ? 'pinned-message' : '') + "\n\t\t\t\t\t").trim(), "data-testid": 'message-commerce-wrapper', key: message.id },
|
|
@@ -8142,7 +8273,7 @@ var MessageLivestreamWithContext = function (props) {
|
|
|
8142
8273
|
messageTextToRender,
|
|
8143
8274
|
]);
|
|
8144
8275
|
var firstGroupStyle = groupStyles ? groupStyles[0] : 'single';
|
|
8145
|
-
if (message.customType ===
|
|
8276
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date) {
|
|
8146
8277
|
return null;
|
|
8147
8278
|
}
|
|
8148
8279
|
if (message.deleted_at) {
|
|
@@ -8382,18 +8513,26 @@ var GiphyPreviewMessage = function (props) {
|
|
|
8382
8513
|
React__default['default'].createElement(Message, { message: message })));
|
|
8383
8514
|
};
|
|
8384
8515
|
|
|
8385
|
-
var useCallLoadMore = function (loadMore, limit) {
|
|
8386
|
-
return React.useCallback(function () {
|
|
8387
|
-
if (loadMore) {
|
|
8388
|
-
loadMore(limit);
|
|
8389
|
-
}
|
|
8390
|
-
}, [limit, loadMore]);
|
|
8391
|
-
};
|
|
8392
|
-
|
|
8393
8516
|
/* eslint-disable no-continue */
|
|
8517
|
+
/**
|
|
8518
|
+
* processMessages - Transform the input message list according to config parameters
|
|
8519
|
+
*
|
|
8520
|
+
* Inserts date separators btw. messages created on different dates or before unread incoming messages. By default:
|
|
8521
|
+
* - enabled in main message list
|
|
8522
|
+
* - disabled in virtualized message list
|
|
8523
|
+
* - disabled in thread
|
|
8524
|
+
*
|
|
8525
|
+
* Allows to filter out deleted messages, contolled by hideDeletedMessages param. This is disabled by default.
|
|
8526
|
+
*
|
|
8527
|
+
* Sets Giphy preview message for VirtualizedMessageList
|
|
8528
|
+
*
|
|
8529
|
+
* The only required params are messages and userId, the rest are config params:
|
|
8530
|
+
*
|
|
8531
|
+
* @return {StreamMessage<StreamChatGenerics>[]} Transformed list of messages
|
|
8532
|
+
*/
|
|
8394
8533
|
var processMessages = function (params) {
|
|
8395
|
-
var _a, _b
|
|
8396
|
-
var
|
|
8534
|
+
var _a, _b;
|
|
8535
|
+
var enableDateSeparator = params.enableDateSeparator, hideDeletedMessages = params.hideDeletedMessages, hideNewMessageSeparator = params.hideNewMessageSeparator, lastRead = params.lastRead, messages = params.messages, setGiphyPreviewMessage = params.setGiphyPreviewMessage, userId = params.userId;
|
|
8397
8536
|
var unread = false;
|
|
8398
8537
|
var ephemeralMessagePresent = false;
|
|
8399
8538
|
var lastDateSeparator;
|
|
@@ -8403,50 +8542,43 @@ var processMessages = function (params) {
|
|
|
8403
8542
|
if (hideDeletedMessages && message.type === 'deleted') {
|
|
8404
8543
|
continue;
|
|
8405
8544
|
}
|
|
8406
|
-
if (
|
|
8407
|
-
setGiphyPreviewMessage &&
|
|
8408
|
-
message.type === 'ephemeral' &&
|
|
8409
|
-
message.command === 'giphy') {
|
|
8545
|
+
if (setGiphyPreviewMessage && message.type === 'ephemeral' && message.command === 'giphy') {
|
|
8410
8546
|
ephemeralMessagePresent = true;
|
|
8411
8547
|
setGiphyPreviewMessage(message);
|
|
8412
8548
|
continue;
|
|
8413
8549
|
}
|
|
8414
8550
|
var messageDate = (message.created_at && isDate(message.created_at) && message.created_at.toDateString()) || '';
|
|
8415
|
-
var prevMessageDate = messageDate;
|
|
8416
8551
|
var previousMessage = messages[i - 1];
|
|
8417
|
-
|
|
8418
|
-
|
|
8419
|
-
!threadList &&
|
|
8420
|
-
previousMessage.created_at &&
|
|
8421
|
-
isDate(previousMessage.created_at)) {
|
|
8552
|
+
var prevMessageDate = messageDate;
|
|
8553
|
+
if (enableDateSeparator && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.created_at) && isDate(previousMessage.created_at)) {
|
|
8422
8554
|
prevMessageDate = previousMessage.created_at.toDateString();
|
|
8423
8555
|
}
|
|
8424
|
-
if (!unread && !hideNewMessageSeparator
|
|
8556
|
+
if (!unread && !hideNewMessageSeparator) {
|
|
8425
8557
|
unread = (lastRead && message.created_at && new Date(lastRead) < message.created_at) || false;
|
|
8426
8558
|
// do not show date separator for current user's messages
|
|
8427
|
-
if (
|
|
8559
|
+
if (enableDateSeparator && unread && ((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) !== userId) {
|
|
8428
8560
|
newMessages.push({
|
|
8429
|
-
customType:
|
|
8561
|
+
customType: CUSTOM_MESSAGE_TYPE.date,
|
|
8430
8562
|
date: message.created_at,
|
|
8431
|
-
id: message.
|
|
8563
|
+
id: makeDateMessageId(message.created_at),
|
|
8432
8564
|
unread: unread,
|
|
8433
8565
|
});
|
|
8434
8566
|
}
|
|
8435
8567
|
}
|
|
8436
|
-
if (
|
|
8437
|
-
|
|
8438
|
-
|
|
8439
|
-
|
|
8568
|
+
if (enableDateSeparator &&
|
|
8569
|
+
(i === 0 || // always put date separator before the first message
|
|
8570
|
+
messageDate !== prevMessageDate || // add date separator btw. 2 messages created on different date
|
|
8571
|
+
// if hiding deleted messages replace the previous deleted message(s) with A separator if the last rendered message was created on different date
|
|
8440
8572
|
(hideDeletedMessages &&
|
|
8441
|
-
(
|
|
8573
|
+
(previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.type) === 'deleted' &&
|
|
8442
8574
|
lastDateSeparator !== messageDate)) &&
|
|
8443
|
-
((
|
|
8575
|
+
((_b = newMessages === null || newMessages === void 0 ? void 0 : newMessages[newMessages.length - 1]) === null || _b === void 0 ? void 0 : _b.customType) !== CUSTOM_MESSAGE_TYPE.date // do not show two date separators in a row)
|
|
8444
8576
|
) {
|
|
8445
8577
|
lastDateSeparator = messageDate;
|
|
8446
8578
|
newMessages.push({
|
|
8447
|
-
customType:
|
|
8579
|
+
customType: CUSTOM_MESSAGE_TYPE.date,
|
|
8448
8580
|
date: message.created_at,
|
|
8449
|
-
id: message.
|
|
8581
|
+
id: makeDateMessageId(message.created_at),
|
|
8450
8582
|
}, message);
|
|
8451
8583
|
}
|
|
8452
8584
|
else {
|
|
@@ -8454,11 +8586,21 @@ var processMessages = function (params) {
|
|
|
8454
8586
|
}
|
|
8455
8587
|
}
|
|
8456
8588
|
// clean up the giphy preview component state after a Cancel action
|
|
8457
|
-
if (
|
|
8458
|
-
setGiphyPreviewMessage
|
|
8589
|
+
if (setGiphyPreviewMessage && !ephemeralMessagePresent) {
|
|
8590
|
+
setGiphyPreviewMessage(undefined);
|
|
8459
8591
|
}
|
|
8460
8592
|
return newMessages;
|
|
8461
8593
|
};
|
|
8594
|
+
var makeDateMessageId = function (date) {
|
|
8595
|
+
var idSuffix;
|
|
8596
|
+
try {
|
|
8597
|
+
idSuffix = !date ? uuid.v4() : date instanceof Date ? date.toISOString() : date;
|
|
8598
|
+
}
|
|
8599
|
+
catch (e) {
|
|
8600
|
+
idSuffix = uuid.v4();
|
|
8601
|
+
}
|
|
8602
|
+
return CUSTOM_MESSAGE_TYPE.date + "-" + idSuffix;
|
|
8603
|
+
};
|
|
8462
8604
|
// fast since it usually iterates just the last few messages
|
|
8463
8605
|
var getLastReceived = function (messages) {
|
|
8464
8606
|
for (var i = messages.length - 1; i > 0; i -= 1) {
|
|
@@ -8501,7 +8643,9 @@ var getReadStates = function (messages, read, returnAllReadData) {
|
|
|
8501
8643
|
};
|
|
8502
8644
|
var insertIntro = function (messages, headerPosition) {
|
|
8503
8645
|
var newMessages = messages;
|
|
8504
|
-
var intro = {
|
|
8646
|
+
var intro = {
|
|
8647
|
+
customType: CUSTOM_MESSAGE_TYPE.intro,
|
|
8648
|
+
};
|
|
8505
8649
|
// if no headerPosition is set, HeaderComponent will go at the top
|
|
8506
8650
|
if (!headerPosition) {
|
|
8507
8651
|
newMessages.unshift(intro);
|
|
@@ -8524,13 +8668,12 @@ var insertIntro = function (messages, headerPosition) {
|
|
|
8524
8668
|
if (messageTime && messageTime < headerPosition) {
|
|
8525
8669
|
// if header position is also smaller than message time continue;
|
|
8526
8670
|
if (nextMessageTime && nextMessageTime < headerPosition) {
|
|
8527
|
-
if (messages[i + 1] && messages[i + 1].customType ===
|
|
8671
|
+
if (messages[i + 1] && messages[i + 1].customType === CUSTOM_MESSAGE_TYPE.date)
|
|
8528
8672
|
continue;
|
|
8529
8673
|
if (!nextMessageTime) {
|
|
8530
8674
|
newMessages.push(intro);
|
|
8531
8675
|
return newMessages;
|
|
8532
8676
|
}
|
|
8533
|
-
continue;
|
|
8534
8677
|
}
|
|
8535
8678
|
else {
|
|
8536
8679
|
newMessages.splice(i + 1, 0, intro);
|
|
@@ -8542,24 +8685,24 @@ var insertIntro = function (messages, headerPosition) {
|
|
|
8542
8685
|
};
|
|
8543
8686
|
var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByUser) {
|
|
8544
8687
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
8545
|
-
if (message.customType ===
|
|
8688
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date)
|
|
8546
8689
|
return '';
|
|
8547
|
-
if (message.customType ===
|
|
8690
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.intro)
|
|
8548
8691
|
return '';
|
|
8549
8692
|
if (noGroupByUser || ((_a = message.attachments) === null || _a === void 0 ? void 0 : _a.length) !== 0)
|
|
8550
8693
|
return 'single';
|
|
8551
8694
|
var isTopMessage = !previousMessage ||
|
|
8552
|
-
previousMessage.customType ===
|
|
8553
|
-
previousMessage.customType ===
|
|
8695
|
+
previousMessage.customType === CUSTOM_MESSAGE_TYPE.intro ||
|
|
8696
|
+
previousMessage.customType === CUSTOM_MESSAGE_TYPE.date ||
|
|
8554
8697
|
previousMessage.type === 'system' ||
|
|
8555
8698
|
((_b = previousMessage.attachments) === null || _b === void 0 ? void 0 : _b.length) !== 0 ||
|
|
8556
8699
|
((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_d = previousMessage.user) === null || _d === void 0 ? void 0 : _d.id) ||
|
|
8557
8700
|
previousMessage.type === 'error' ||
|
|
8558
8701
|
previousMessage.deleted_at;
|
|
8559
8702
|
var isBottomMessage = !nextMessage ||
|
|
8560
|
-
nextMessage.customType ===
|
|
8703
|
+
nextMessage.customType === CUSTOM_MESSAGE_TYPE.date ||
|
|
8561
8704
|
nextMessage.type === 'system' ||
|
|
8562
|
-
nextMessage.customType ===
|
|
8705
|
+
nextMessage.customType === CUSTOM_MESSAGE_TYPE.intro ||
|
|
8563
8706
|
((_e = nextMessage.attachments) === null || _e === void 0 ? void 0 : _e.length) !== 0 ||
|
|
8564
8707
|
((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_g = nextMessage.user) === null || _g === void 0 ? void 0 : _g.id) ||
|
|
8565
8708
|
nextMessage.type === 'error' ||
|
|
@@ -8580,19 +8723,19 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
|
|
|
8580
8723
|
};
|
|
8581
8724
|
|
|
8582
8725
|
var useEnrichedMessages = function (args) {
|
|
8583
|
-
var channel = args.channel, disableDateSeparator = args.disableDateSeparator, groupStyles = args.groupStyles, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser
|
|
8726
|
+
var channel = args.channel, disableDateSeparator = args.disableDateSeparator, groupStyles = args.groupStyles, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser;
|
|
8584
8727
|
var client = useChatContext('useEnrichedMessages').client;
|
|
8585
8728
|
var HeaderComponent = useComponentContext('useEnrichedMessages').HeaderComponent;
|
|
8586
8729
|
var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
|
|
8587
|
-
var
|
|
8730
|
+
var enableDateSeparator = !disableDateSeparator;
|
|
8731
|
+
var messagesWithDates = !enableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator
|
|
8588
8732
|
? messages
|
|
8589
8733
|
: processMessages({
|
|
8590
|
-
|
|
8734
|
+
enableDateSeparator: enableDateSeparator,
|
|
8591
8735
|
hideDeletedMessages: hideDeletedMessages,
|
|
8592
8736
|
hideNewMessageSeparator: hideNewMessageSeparator,
|
|
8593
8737
|
lastRead: lastRead,
|
|
8594
8738
|
messages: messages,
|
|
8595
|
-
threadList: threadList,
|
|
8596
8739
|
userId: client.userID || '',
|
|
8597
8740
|
});
|
|
8598
8741
|
if (HeaderComponent) {
|
|
@@ -8635,11 +8778,13 @@ var useMessageListElements = function (props) {
|
|
|
8635
8778
|
return React.useMemo(function () {
|
|
8636
8779
|
return enrichedMessages.map(function (message) {
|
|
8637
8780
|
var _a;
|
|
8638
|
-
if (message.customType ===
|
|
8781
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date &&
|
|
8782
|
+
message.date &&
|
|
8783
|
+
isDate(message.date)) {
|
|
8639
8784
|
return (React__default['default'].createElement("li", { key: message.date.toISOString() + "-i" },
|
|
8640
8785
|
React__default['default'].createElement(DateSeparator$1, { date: message.date, formatDate: internalMessageProps.formatDate, unread: message.unread })));
|
|
8641
8786
|
}
|
|
8642
|
-
if (message.customType ===
|
|
8787
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.intro && HeaderComponent) {
|
|
8643
8788
|
return (React__default['default'].createElement("li", { key: 'intro' },
|
|
8644
8789
|
React__default['default'].createElement(HeaderComponent, null)));
|
|
8645
8790
|
}
|
|
@@ -8651,7 +8796,7 @@ var useMessageListElements = function (props) {
|
|
|
8651
8796
|
}
|
|
8652
8797
|
var groupStyles = messageGroupStyles[message.id] || '';
|
|
8653
8798
|
var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--" + groupStyles;
|
|
8654
|
-
return (React__default['default'].createElement("li", { className: messageClass, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
|
|
8799
|
+
return (React__default['default'].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
|
|
8655
8800
|
React__default['default'].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
|
|
8656
8801
|
});
|
|
8657
8802
|
}, [
|
|
@@ -8723,7 +8868,7 @@ function useMessageListScrollManager(params) {
|
|
|
8723
8868
|
}
|
|
8724
8869
|
|
|
8725
8870
|
var useScrollLocationLogic = function (params) {
|
|
8726
|
-
var _a = params.messages, messages = _a === void 0 ? [] : _a, _b = params.scrolledUpThreshold, scrolledUpThreshold = _b === void 0 ? 200 : _b;
|
|
8871
|
+
var _a = params.messages, messages = _a === void 0 ? [] : _a, _b = params.scrolledUpThreshold, scrolledUpThreshold = _b === void 0 ? 200 : _b, hasMoreNewer = params.hasMoreNewer, suppressAutoscroll = params.suppressAutoscroll;
|
|
8727
8872
|
var _c = React.useState(false), hasNewMessages = _c[0], setHasNewMessages = _c[1];
|
|
8728
8873
|
var _d = React.useState(), wrapperRect = _d[0], setWrapperRect = _d[1];
|
|
8729
8874
|
var closeToBottom = React.useRef(false);
|
|
@@ -8731,8 +8876,9 @@ var useScrollLocationLogic = function (params) {
|
|
|
8731
8876
|
var listRef = React.useRef(null);
|
|
8732
8877
|
var scrollToBottom = React.useCallback(function () {
|
|
8733
8878
|
var _a, _b;
|
|
8734
|
-
if (!((_a = listRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo))
|
|
8879
|
+
if (!((_a = listRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo) || hasMoreNewer || suppressAutoscroll) {
|
|
8735
8880
|
return;
|
|
8881
|
+
}
|
|
8736
8882
|
(_b = listRef.current) === null || _b === void 0 ? void 0 : _b.scrollTo({
|
|
8737
8883
|
top: listRef.current.scrollHeight,
|
|
8738
8884
|
});
|
|
@@ -8744,16 +8890,19 @@ var useScrollLocationLogic = function (params) {
|
|
|
8744
8890
|
top: listRef.current.scrollHeight,
|
|
8745
8891
|
});
|
|
8746
8892
|
}, 200);
|
|
8747
|
-
}, [listRef]);
|
|
8893
|
+
}, [listRef, hasMoreNewer, suppressAutoscroll]);
|
|
8748
8894
|
React.useLayoutEffect(function () {
|
|
8749
8895
|
if (listRef === null || listRef === void 0 ? void 0 : listRef.current) {
|
|
8750
8896
|
setWrapperRect(listRef.current.getBoundingClientRect());
|
|
8751
8897
|
scrollToBottom();
|
|
8752
8898
|
}
|
|
8753
|
-
}, [listRef]);
|
|
8899
|
+
}, [listRef, hasMoreNewer]);
|
|
8754
8900
|
var updateScrollTop = useMessageListScrollManager({
|
|
8755
8901
|
messages: messages,
|
|
8756
|
-
onScrollBy: function (scrollBy) {
|
|
8902
|
+
onScrollBy: function (scrollBy) {
|
|
8903
|
+
var _a;
|
|
8904
|
+
(_a = listRef.current) === null || _a === void 0 ? void 0 : _a.scrollBy({ top: scrollBy });
|
|
8905
|
+
},
|
|
8757
8906
|
scrollContainerMeasures: function () {
|
|
8758
8907
|
var _a, _b;
|
|
8759
8908
|
return ({
|
|
@@ -8811,12 +8960,12 @@ var UnMemoizedMessageNotification = function (props) {
|
|
|
8811
8960
|
var MessageNotification = React__default['default'].memo(UnMemoizedMessageNotification);
|
|
8812
8961
|
|
|
8813
8962
|
var MessageListNotifications = function (props) {
|
|
8814
|
-
var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
|
|
8963
|
+
var hasNewMessages = props.hasNewMessages, isNotAtLatestMessageSet = props.isNotAtLatestMessageSet, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
|
|
8815
8964
|
var t = useTranslationContext('MessageListNotifications').t;
|
|
8816
8965
|
return (React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
|
|
8817
8966
|
notifications.map(function (notification) { return (React__default['default'].createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
|
|
8818
8967
|
React__default['default'].createElement(ConnectionStatus, null),
|
|
8819
|
-
React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
|
|
8968
|
+
React__default['default'].createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet }, isNotAtLatestMessageSet ? t('Latest Messages') : t('New Messages!'))));
|
|
8820
8969
|
};
|
|
8821
8970
|
|
|
8822
8971
|
/**
|
|
@@ -8860,22 +9009,19 @@ var UnMemoizedTypingIndicator = function (props) {
|
|
|
8860
9009
|
};
|
|
8861
9010
|
var TypingIndicator = React__default['default'].memo(UnMemoizedTypingIndicator);
|
|
8862
9011
|
|
|
8863
|
-
var useInternalInfiniteScrollProps = function (props) {
|
|
8864
|
-
var _a = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator$1 = _a === void 0 ? LoadingIndicator : _a;
|
|
8865
|
-
return __assign({ hasMore: props.hasMore, isLoading: props.loadingMore, loader: (React__default['default'].createElement(Center, { key: 'loadingindicator' },
|
|
8866
|
-
React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))), loadMore: useCallLoadMore(props.loadMore, props.messageLimit || 100) }, props.internalInfiniteScrollProps);
|
|
8867
|
-
};
|
|
8868
9012
|
var MessageListWithContext = function (props) {
|
|
8869
9013
|
var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, groupStyles = props.groupStyles, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, _d = props.messageActions, messageActions = _d === void 0 ? Object.keys(MESSAGE_ACTIONS) : _d, _e = props.messages, messages = _e === void 0 ? [] : _e, notifications = props.notifications, _f = props.noGroupByUser, noGroupByUser = _f === void 0 ? false : _f, _g = props.pinPermissions, pinPermissions = _g === void 0 ? defaultPinPermissions : _g, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
|
|
8870
9014
|
_h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
|
|
8871
|
-
returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read;
|
|
9015
|
+
returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read, _l = props.messageLimit, messageLimit = _l === void 0 ? 100 : _l, loadMoreCallback = props.loadMore, loadMoreNewerCallback = props.loadMoreNewer, _m = props.hasMoreNewer, hasMoreNewer = _m === void 0 ? false : _m, suppressAutoscroll = props.suppressAutoscroll, highlightedMessageId = props.highlightedMessageId, _o = props.jumpToLatestMessage, jumpToLatestMessage = _o === void 0 ? function () { return Promise.resolve(); } : _o;
|
|
8872
9016
|
var customClasses = useChatContext('MessageList').customClasses;
|
|
8873
|
-
var
|
|
8874
|
-
var
|
|
9017
|
+
var _p = useComponentContext('MessageList'), _q = _p.EmptyStateIndicator, EmptyStateIndicator$1 = _q === void 0 ? EmptyStateIndicator : _q, _r = _p.MessageListNotifications, MessageListNotifications$1 = _r === void 0 ? MessageListNotifications : _r, _s = _p.MessageNotification, MessageNotification$1 = _s === void 0 ? MessageNotification : _s, _t = _p.TypingIndicator, TypingIndicator$1 = _t === void 0 ? TypingIndicator : _t;
|
|
9018
|
+
var _u = useScrollLocationLogic({
|
|
9019
|
+
hasMoreNewer: hasMoreNewer,
|
|
8875
9020
|
messages: messages,
|
|
8876
9021
|
scrolledUpThreshold: props.scrolledUpThreshold,
|
|
8877
|
-
|
|
8878
|
-
|
|
9022
|
+
suppressAutoscroll: suppressAutoscroll,
|
|
9023
|
+
}), hasNewMessages = _u.hasNewMessages, listRef = _u.listRef, onMessageLoadCaptured = _u.onMessageLoadCaptured, onScroll = _u.onScroll, scrollToBottom = _u.scrollToBottom, wrapperRect = _u.wrapperRect;
|
|
9024
|
+
var _v = useEnrichedMessages({
|
|
8879
9025
|
channel: channel,
|
|
8880
9026
|
disableDateSeparator: disableDateSeparator,
|
|
8881
9027
|
groupStyles: groupStyles,
|
|
@@ -8884,8 +9030,7 @@ var MessageListWithContext = function (props) {
|
|
|
8884
9030
|
hideNewMessageSeparator: hideNewMessageSeparator,
|
|
8885
9031
|
messages: messages,
|
|
8886
9032
|
noGroupByUser: noGroupByUser,
|
|
8887
|
-
|
|
8888
|
-
}), messageGroupStyles = _s.messageGroupStyles, enrichedMessages = _s.messages;
|
|
9033
|
+
}), messageGroupStyles = _v.messageGroupStyles, enrichedMessages = _v.messages;
|
|
8889
9034
|
var elements = useMessageListElements({
|
|
8890
9035
|
enrichedMessages: enrichedMessages,
|
|
8891
9036
|
internalMessageProps: {
|
|
@@ -8920,15 +9065,50 @@ var MessageListWithContext = function (props) {
|
|
|
8920
9065
|
returnAllReadData: returnAllReadData,
|
|
8921
9066
|
threadList: threadList,
|
|
8922
9067
|
});
|
|
8923
|
-
var
|
|
9068
|
+
var _w = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator$1 = _w === void 0 ? LoadingIndicator : _w;
|
|
8924
9069
|
var messageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.messageList) || 'str-chat__list';
|
|
8925
9070
|
var threadListClass = threadList ? (customClasses === null || customClasses === void 0 ? void 0 : customClasses.threadList) || 'str-chat__list--thread' : '';
|
|
9071
|
+
var loadMore = React__default['default'].useCallback(function () {
|
|
9072
|
+
if (loadMoreCallback) {
|
|
9073
|
+
loadMoreCallback(messageLimit);
|
|
9074
|
+
}
|
|
9075
|
+
}, [loadMoreCallback, messageLimit]);
|
|
9076
|
+
var loadMoreNewer = React__default['default'].useCallback(function () {
|
|
9077
|
+
if (loadMoreNewerCallback) {
|
|
9078
|
+
loadMoreNewerCallback(messageLimit);
|
|
9079
|
+
}
|
|
9080
|
+
}, [loadMoreNewerCallback, messageLimit]);
|
|
9081
|
+
var scrollToBottomFromNotification = React__default['default'].useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
9082
|
+
return __generator(this, function (_a) {
|
|
9083
|
+
switch (_a.label) {
|
|
9084
|
+
case 0:
|
|
9085
|
+
if (!hasMoreNewer) return [3 /*break*/, 2];
|
|
9086
|
+
return [4 /*yield*/, jumpToLatestMessage()];
|
|
9087
|
+
case 1:
|
|
9088
|
+
_a.sent();
|
|
9089
|
+
return [3 /*break*/, 3];
|
|
9090
|
+
case 2:
|
|
9091
|
+
scrollToBottom();
|
|
9092
|
+
_a.label = 3;
|
|
9093
|
+
case 3: return [2 /*return*/];
|
|
9094
|
+
}
|
|
9095
|
+
});
|
|
9096
|
+
}); }, [scrollToBottom, hasMoreNewer]);
|
|
9097
|
+
var ulRef = React__default['default'].useRef(null);
|
|
9098
|
+
React__default['default'].useLayoutEffect(function () {
|
|
9099
|
+
var _a;
|
|
9100
|
+
if (highlightedMessageId) {
|
|
9101
|
+
var element = (_a = ulRef.current) === null || _a === void 0 ? void 0 : _a.querySelector("[data-message-id='" + highlightedMessageId + "']");
|
|
9102
|
+
element === null || element === void 0 ? void 0 : element.scrollIntoView({ block: 'center' });
|
|
9103
|
+
}
|
|
9104
|
+
}, [highlightedMessageId]);
|
|
8926
9105
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
8927
|
-
React__default['default'].createElement("div", { className: messageListClass + " " + threadListClass, onScroll: onScroll, ref: listRef }, !elements.length ? (React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'message' })) : (React__default['default'].createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll', "data-testid": 'reverse-infinite-scroll',
|
|
8928
|
-
|
|
9106
|
+
React__default['default'].createElement("div", { className: messageListClass + " " + threadListClass, onScroll: onScroll, ref: listRef }, !elements.length ? (React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'message' })) : (React__default['default'].createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll', "data-testid": 'reverse-infinite-scroll', hasMore: props.hasMore, hasMoreNewer: props.hasMoreNewer, isLoading: props.loadingMore, loader: React__default['default'].createElement(Center, { key: 'loadingindicator' },
|
|
9107
|
+
React__default['default'].createElement(LoadingIndicator$1, { size: 20 })), loadMore: loadMore, loadMoreNewer: loadMoreNewer }, props.internalInfiniteScrollProps),
|
|
9108
|
+
React__default['default'].createElement("ul", { className: 'str-chat__ul', ref: ulRef }, elements),
|
|
8929
9109
|
React__default['default'].createElement(TypingIndicator$1, { threadList: threadList }),
|
|
8930
9110
|
React__default['default'].createElement("div", { key: 'bottom' })))),
|
|
8931
|
-
React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom:
|
|
9111
|
+
React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: hasNewMessages, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottomFromNotification })));
|
|
8932
9112
|
};
|
|
8933
9113
|
/**
|
|
8934
9114
|
* The MessageList component renders a list of Messages.
|
|
@@ -8939,12 +9119,12 @@ var MessageListWithContext = function (props) {
|
|
|
8939
9119
|
* - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)
|
|
8940
9120
|
*/
|
|
8941
9121
|
var MessageList = function (props) {
|
|
8942
|
-
var
|
|
8943
|
-
var
|
|
8944
|
-
|
|
8945
|
-
|
|
8946
|
-
var restChannelStateContext = __rest(
|
|
8947
|
-
return (React__default['default'].createElement(MessageListWithContext, __assign({ loadMore: loadMore }, restChannelStateContext, props)));
|
|
9122
|
+
var _a = useChannelActionContext('MessageList'), jumpToLatestMessage = _a.jumpToLatestMessage, loadMore = _a.loadMore, loadMoreNewer = _a.loadMoreNewer;
|
|
9123
|
+
var _b = useChannelStateContext('MessageList'); _b.members; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
9124
|
+
_b.mutes; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
9125
|
+
_b.watchers; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
9126
|
+
var restChannelStateContext = __rest(_b, ["members", "mutes", "watchers"]);
|
|
9127
|
+
return (React__default['default'].createElement(MessageListWithContext, __assign({ jumpToLatestMessage: jumpToLatestMessage, loadMore: loadMore, loadMoreNewer: loadMoreNewer }, restChannelStateContext, props)));
|
|
8948
9128
|
};
|
|
8949
9129
|
|
|
8950
9130
|
var useGiphyPreview = function (separateGiphyPreview) {
|
|
@@ -8964,7 +9144,7 @@ var useGiphyPreview = function (separateGiphyPreview) {
|
|
|
8964
9144
|
return { giphyPreviewMessage: giphyPreviewMessage, setGiphyPreviewMessage: setGiphyPreviewMessage };
|
|
8965
9145
|
};
|
|
8966
9146
|
|
|
8967
|
-
function useNewMessageNotification(messages, currentUserId) {
|
|
9147
|
+
function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
8968
9148
|
var _a = React.useState(false), newMessagesNotification = _a[0], setNewMessagesNotification = _a[1];
|
|
8969
9149
|
/**
|
|
8970
9150
|
* use the flag to avoid the initial "new messages" quick blink
|
|
@@ -8974,6 +9154,10 @@ function useNewMessageNotification(messages, currentUserId) {
|
|
|
8974
9154
|
var atBottom = React.useRef(false);
|
|
8975
9155
|
React.useEffect(function () {
|
|
8976
9156
|
var _a;
|
|
9157
|
+
if (hasMoreNewer) {
|
|
9158
|
+
setNewMessagesNotification(true);
|
|
9159
|
+
return;
|
|
9160
|
+
}
|
|
8977
9161
|
/* handle scrolling behavior for new messages */
|
|
8978
9162
|
if (!(messages === null || messages === void 0 ? void 0 : messages.length))
|
|
8979
9163
|
return;
|
|
@@ -8992,7 +9176,7 @@ function useNewMessageNotification(messages, currentUserId) {
|
|
|
8992
9176
|
setNewMessagesNotification(true);
|
|
8993
9177
|
}
|
|
8994
9178
|
didMount.current = true;
|
|
8995
|
-
}, [currentUserId, messages]);
|
|
9179
|
+
}, [currentUserId, messages, hasMoreNewer]);
|
|
8996
9180
|
return { atBottom: atBottom, newMessagesNotification: newMessagesNotification, setNewMessagesNotification: setNewMessagesNotification };
|
|
8997
9181
|
}
|
|
8998
9182
|
|
|
@@ -9022,6 +9206,8 @@ function usePrependedMessagesCount(messages) {
|
|
|
9022
9206
|
return i;
|
|
9023
9207
|
}
|
|
9024
9208
|
}
|
|
9209
|
+
// if no match has found, we have jumped
|
|
9210
|
+
firstMessageId.current = currentFirstMessageId;
|
|
9025
9211
|
return 0;
|
|
9026
9212
|
// TODO: there's a bug here, the messages prop is the same array instance (something mutates it)
|
|
9027
9213
|
// that's why the second dependency is necessary
|
|
@@ -9054,10 +9240,44 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
9054
9240
|
}
|
|
9055
9241
|
|
|
9056
9242
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
9243
|
+
function captureResizeObserverExceededError(e) {
|
|
9244
|
+
if (e.message === 'ResizeObserver loop completed with undelivered notifications.' ||
|
|
9245
|
+
e.message === 'ResizeObserver loop limit exceeded') {
|
|
9246
|
+
e.stopImmediatePropagation();
|
|
9247
|
+
}
|
|
9248
|
+
}
|
|
9249
|
+
function useCaptureResizeObserverExceededError() {
|
|
9250
|
+
React.useEffect(function () {
|
|
9251
|
+
window.addEventListener('error', captureResizeObserverExceededError);
|
|
9252
|
+
return function () {
|
|
9253
|
+
window.removeEventListener('error', captureResizeObserverExceededError);
|
|
9254
|
+
};
|
|
9255
|
+
}, []);
|
|
9256
|
+
}
|
|
9257
|
+
function fractionalItemSize(element) {
|
|
9258
|
+
return element.getBoundingClientRect().height;
|
|
9259
|
+
}
|
|
9260
|
+
function findMessageIndex(messages, id) {
|
|
9261
|
+
return messages.findIndex(function (message) { return message.id === id; });
|
|
9262
|
+
}
|
|
9263
|
+
function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
|
|
9264
|
+
if (highlightedMessageId) {
|
|
9265
|
+
var index = findMessageIndex(messages, highlightedMessageId);
|
|
9266
|
+
if (index !== -1) {
|
|
9267
|
+
return { align: 'center', index: index };
|
|
9268
|
+
}
|
|
9269
|
+
}
|
|
9270
|
+
return messages.length - 1;
|
|
9271
|
+
}
|
|
9057
9272
|
var VirtualizedMessageListWithContext = function (props) {
|
|
9058
|
-
var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, notifications = props.notifications,
|
|
9273
|
+
var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, hasMoreNewer = props.hasMoreNewer, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, notifications = props.notifications,
|
|
9059
9274
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
9060
|
-
|
|
9275
|
+
_e = props.overscan,
|
|
9276
|
+
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
9277
|
+
overscan = _e === void 0 ? 0 : _e, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _f = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _f === void 0 ? false : _f, _g = props.separateGiphyPreview, separateGiphyPreview = _g === void 0 ? false : _g, _h = props.shouldGroupByUser, shouldGroupByUser = _h === void 0 ? false : _h, _j = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _j === void 0 ? 'smooth' : _j, suppressAutoscroll = props.suppressAutoscroll;
|
|
9278
|
+
// Stops errors generated from react-virtuoso to bubble up
|
|
9279
|
+
// to Sentry or other tracking tools.
|
|
9280
|
+
useCaptureResizeObserverExceededError();
|
|
9061
9281
|
var _k = useComponentContext('VirtualizedMessageList'), _l = _k.DateSeparator, DateSeparator$1 = _l === void 0 ? DateSeparator : _l, _m = _k.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _k.GiphyPreviewMessage, GiphyPreviewMessage$1 = _o === void 0 ? GiphyPreviewMessage : _o, _p = _k.LoadingIndicator, LoadingIndicator$1 = _p === void 0 ? LoadingIndicator : _p, _q = _k.MessageListNotifications, MessageListNotifications$1 = _q === void 0 ? MessageListNotifications : _q, _r = _k.MessageNotification, MessageNotification$1 = _r === void 0 ? MessageNotification : _r, _s = _k.MessageSystem, MessageSystem = _s === void 0 ? EventComponent : _s, _t = _k.TypingIndicator, TypingIndicator = _t === void 0 ? null : _t, _u = _k.VirtualMessage, contextMessage = _u === void 0 ? MessageSimple : _u;
|
|
9062
9282
|
var _v = useChatContext('VirtualizedMessageList'), client = _v.client, customClasses = _v.customClasses;
|
|
9063
9283
|
var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
|
|
@@ -9074,12 +9294,11 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9074
9294
|
return messages;
|
|
9075
9295
|
}
|
|
9076
9296
|
return processMessages({
|
|
9077
|
-
|
|
9297
|
+
enableDateSeparator: !disableDateSeparator,
|
|
9078
9298
|
hideDeletedMessages: hideDeletedMessages,
|
|
9079
9299
|
hideNewMessageSeparator: hideNewMessageSeparator,
|
|
9080
9300
|
lastRead: lastRead,
|
|
9081
9301
|
messages: messages,
|
|
9082
|
-
separateGiphyPreview: separateGiphyPreview,
|
|
9083
9302
|
setGiphyPreviewMessage: setGiphyPreviewMessage,
|
|
9084
9303
|
userId: client.userID || '',
|
|
9085
9304
|
});
|
|
@@ -9093,27 +9312,75 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9093
9312
|
client.userID,
|
|
9094
9313
|
]);
|
|
9095
9314
|
var virtuoso = React.useRef(null);
|
|
9096
|
-
var _x = useNewMessageNotification(processedMessages, client.userID), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
|
|
9097
|
-
var scrollToBottom = React.useCallback(function () {
|
|
9098
|
-
|
|
9099
|
-
|
|
9100
|
-
|
|
9101
|
-
|
|
9102
|
-
|
|
9315
|
+
var _x = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
|
|
9316
|
+
var scrollToBottom = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
9317
|
+
return __generator(this, function (_a) {
|
|
9318
|
+
switch (_a.label) {
|
|
9319
|
+
case 0:
|
|
9320
|
+
if (!hasMoreNewer) return [3 /*break*/, 2];
|
|
9321
|
+
return [4 /*yield*/, jumpToLatestMessage()];
|
|
9322
|
+
case 1:
|
|
9323
|
+
_a.sent();
|
|
9324
|
+
return [2 /*return*/];
|
|
9325
|
+
case 2:
|
|
9326
|
+
if (virtuoso.current) {
|
|
9327
|
+
virtuoso.current.scrollToIndex(processedMessages.length - 1);
|
|
9328
|
+
}
|
|
9329
|
+
setNewMessagesNotification(false);
|
|
9330
|
+
return [2 /*return*/];
|
|
9331
|
+
}
|
|
9332
|
+
});
|
|
9333
|
+
}); }, [
|
|
9334
|
+
virtuoso,
|
|
9335
|
+
processedMessages,
|
|
9336
|
+
setNewMessagesNotification,
|
|
9337
|
+
processedMessages.length,
|
|
9338
|
+
hasMoreNewer,
|
|
9339
|
+
jumpToLatestMessage,
|
|
9340
|
+
]);
|
|
9341
|
+
var _y = React__default['default'].useState(false), newMessagesReceivedInBackground = _y[0], setNewMessagesReceivedInBackground = _y[1];
|
|
9342
|
+
var resetNewMessagesReceivedInBackground = React.useCallback(function () {
|
|
9343
|
+
setNewMessagesReceivedInBackground(false);
|
|
9344
|
+
}, []);
|
|
9345
|
+
React.useEffect(function () {
|
|
9346
|
+
setNewMessagesReceivedInBackground(true);
|
|
9347
|
+
}, [messages]);
|
|
9103
9348
|
var scrollToBottomIfConfigured = React.useCallback(function (event) {
|
|
9104
9349
|
if (scrollToLatestMessageOnFocus && event.target === window) {
|
|
9105
|
-
|
|
9350
|
+
if (newMessagesReceivedInBackground) {
|
|
9351
|
+
setTimeout(scrollToBottom, 100);
|
|
9352
|
+
}
|
|
9106
9353
|
}
|
|
9107
|
-
}, [scrollToLatestMessageOnFocus, scrollToBottom]);
|
|
9354
|
+
}, [scrollToLatestMessageOnFocus, scrollToBottom, newMessagesReceivedInBackground]);
|
|
9108
9355
|
React.useEffect(function () {
|
|
9109
9356
|
if (typeof window !== 'undefined') {
|
|
9110
9357
|
window.addEventListener('focus', scrollToBottomIfConfigured);
|
|
9358
|
+
window.addEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
9111
9359
|
}
|
|
9112
|
-
return function () {
|
|
9360
|
+
return function () {
|
|
9361
|
+
window.removeEventListener('focus', scrollToBottomIfConfigured);
|
|
9362
|
+
window.removeEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
9363
|
+
};
|
|
9113
9364
|
}, [scrollToBottomIfConfigured]);
|
|
9114
9365
|
var numItemsPrepended = usePrependedMessagesCount(processedMessages);
|
|
9366
|
+
/**
|
|
9367
|
+
* Logic to update the key of the virtuoso component when the list jumps to a new location.
|
|
9368
|
+
*/
|
|
9369
|
+
var _z = React.useState(+new Date()), messageSetKey = _z[0], setMessageSetKey = _z[1];
|
|
9370
|
+
var firstMessageId = React.useRef();
|
|
9371
|
+
React.useEffect(function () {
|
|
9372
|
+
var _a;
|
|
9373
|
+
var continuousSet = messages && messages.find(function (message) { return message.id === firstMessageId.current; });
|
|
9374
|
+
if (!continuousSet) {
|
|
9375
|
+
setMessageSetKey(+new Date());
|
|
9376
|
+
}
|
|
9377
|
+
firstMessageId.current = (_a = messages === null || messages === void 0 ? void 0 : messages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
9378
|
+
}, [messages]);
|
|
9115
9379
|
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
|
|
9116
9380
|
var followOutput = function (isAtBottom) {
|
|
9381
|
+
if (hasMoreNewer || suppressAutoscroll) {
|
|
9382
|
+
return false;
|
|
9383
|
+
}
|
|
9117
9384
|
if (shouldForceScrollToBottom()) {
|
|
9118
9385
|
return isAtBottom ? stickToBottomScrollBehavior : 'auto';
|
|
9119
9386
|
}
|
|
@@ -9128,7 +9395,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9128
9395
|
return customMessageRenderer(messageList, streamMessageIndex);
|
|
9129
9396
|
}
|
|
9130
9397
|
var message = messageList[streamMessageIndex];
|
|
9131
|
-
if (message.customType ===
|
|
9398
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date && message.date && isDate(message.date)) {
|
|
9132
9399
|
return React__default['default'].createElement(DateSeparator$1, { date: message.date, unread: message.unread });
|
|
9133
9400
|
}
|
|
9134
9401
|
if (!message)
|
|
@@ -9173,13 +9440,26 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9173
9440
|
loadMore(messageLimit);
|
|
9174
9441
|
}
|
|
9175
9442
|
};
|
|
9443
|
+
var endReached = function () {
|
|
9444
|
+
if (hasMoreNewer && loadMoreNewer) {
|
|
9445
|
+
loadMoreNewer(messageLimit);
|
|
9446
|
+
}
|
|
9447
|
+
};
|
|
9448
|
+
React.useEffect(function () {
|
|
9449
|
+
var _a;
|
|
9450
|
+
if (highlightedMessageId) {
|
|
9451
|
+
var index = findMessageIndex(processedMessages, highlightedMessageId);
|
|
9452
|
+
if (index !== -1) {
|
|
9453
|
+
(_a = virtuoso.current) === null || _a === void 0 ? void 0 : _a.scrollToIndex({ align: 'center', index: index });
|
|
9454
|
+
}
|
|
9455
|
+
}
|
|
9456
|
+
}, [highlightedMessageId]);
|
|
9176
9457
|
if (!processedMessages)
|
|
9177
9458
|
return null;
|
|
9178
|
-
var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
|
|
9179
9459
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
9180
|
-
React__default['default'].createElement("div", { className:
|
|
9181
|
-
React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput,
|
|
9182
|
-
React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom }),
|
|
9460
|
+
React__default['default'].createElement("div", { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list' },
|
|
9461
|
+
React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, endReached: endReached, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: function (i) { return messageRenderer(processedMessages, i); }, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
|
|
9462
|
+
React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom }),
|
|
9183
9463
|
giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
|
|
9184
9464
|
};
|
|
9185
9465
|
/**
|
|
@@ -9189,10 +9469,10 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
9189
9469
|
* **Note**: It works well when there are thousands of messages in a channel, it has a shortcoming though - the message UI should have a fixed height.
|
|
9190
9470
|
*/
|
|
9191
9471
|
function VirtualizedMessageList(props) {
|
|
9192
|
-
var
|
|
9193
|
-
var
|
|
9472
|
+
var _a = useChannelActionContext('VirtualizedMessageList'), jumpToLatestMessage = _a.jumpToLatestMessage, loadMore = _a.loadMore, loadMoreNewer = _a.loadMoreNewer;
|
|
9473
|
+
var _b = useChannelStateContext('VirtualizedMessageList'), channel = _b.channel, hasMore = _b.hasMore, hasMoreNewer = _b.hasMoreNewer, highlightedMessageId = _b.highlightedMessageId, loadingMore = _b.loadingMore, loadingMoreNewer = _b.loadingMoreNewer, contextMessages = _b.messages, notifications = _b.notifications, suppressAutoscroll = _b.suppressAutoscroll;
|
|
9194
9474
|
var messages = props.messages || contextMessages;
|
|
9195
|
-
return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages, notifications: notifications }, props)));
|
|
9475
|
+
return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, hasMoreNewer: !!hasMoreNewer, highlightedMessageId: highlightedMessageId, jumpToLatestMessage: jumpToLatestMessage, loadingMore: !!loadingMore, loadingMoreNewer: !!loadingMoreNewer, loadMore: loadMore, loadMoreNewer: loadMoreNewer, messages: messages, notifications: notifications, suppressAutoscroll: suppressAutoscroll }, props)));
|
|
9196
9476
|
}
|
|
9197
9477
|
|
|
9198
9478
|
/**
|
|
@@ -9211,11 +9491,7 @@ var DefaultThreadHeader = function (props) {
|
|
|
9211
9491
|
var getReplyCount = function () {
|
|
9212
9492
|
if (!thread.reply_count)
|
|
9213
9493
|
return '';
|
|
9214
|
-
|
|
9215
|
-
return t('1 reply');
|
|
9216
|
-
return t('{{ replyCount }} replies', {
|
|
9217
|
-
replyCount: thread.reply_count,
|
|
9218
|
-
});
|
|
9494
|
+
return t('replyCount', { count: thread.reply_count });
|
|
9219
9495
|
};
|
|
9220
9496
|
return (React__default['default'].createElement("div", { className: 'str-chat__thread-header' },
|
|
9221
9497
|
React__default['default'].createElement("div", { className: 'str-chat__thread-header-details' },
|
|
@@ -9230,11 +9506,11 @@ var DefaultThreadStart = function () {
|
|
|
9230
9506
|
return React__default['default'].createElement("div", { className: 'str-chat__thread-start' }, t('Start of a new thread'));
|
|
9231
9507
|
};
|
|
9232
9508
|
var ThreadInner = function (props) {
|
|
9233
|
-
var additionalMessageInputProps = props.additionalMessageInputProps, additionalMessageListProps = props.additionalMessageListProps, additionalParentMessageProps = props.additionalParentMessageProps, additionalVirtualizedMessageListProps = props.additionalVirtualizedMessageListProps, _a = props.autoFocus, autoFocus = _a === void 0 ? true : _a, _b = props.
|
|
9234
|
-
var
|
|
9235
|
-
var
|
|
9509
|
+
var additionalMessageInputProps = props.additionalMessageInputProps, additionalMessageListProps = props.additionalMessageListProps, additionalParentMessageProps = props.additionalParentMessageProps, additionalVirtualizedMessageListProps = props.additionalVirtualizedMessageListProps, _a = props.autoFocus, autoFocus = _a === void 0 ? true : _a, _b = props.enableDateSeparator, enableDateSeparator = _b === void 0 ? false : _b, _c = props.fullWidth, fullWidth = _c === void 0 ? false : _c, PropInput = props.Input, PropMessage = props.Message, virtualized = props.virtualized;
|
|
9510
|
+
var _d = useChannelStateContext('Thread'), thread = _d.thread, threadHasMore = _d.threadHasMore, threadLoadingMore = _d.threadLoadingMore, threadMessages = _d.threadMessages;
|
|
9511
|
+
var _e = useChannelActionContext('Thread'), closeThread = _e.closeThread, loadMoreThread = _e.loadMoreThread;
|
|
9236
9512
|
var customClasses = useChatContext('Thread').customClasses;
|
|
9237
|
-
var
|
|
9513
|
+
var _f = useComponentContext('Thread'), ContextInput = _f.ThreadInput, ContextMessage = _f.Message, _g = _f.ThreadHeader, ThreadHeader = _g === void 0 ? DefaultThreadHeader : _g, _h = _f.ThreadStart, ThreadStart = _h === void 0 ? DefaultThreadStart : _h, _j = _f.VirtualMessage, VirtualMessage = _j === void 0 ? FixedHeightMessage : _j;
|
|
9238
9514
|
var messageList = React.useRef(null);
|
|
9239
9515
|
var ThreadInput = PropInput || (additionalMessageInputProps === null || additionalMessageInputProps === void 0 ? void 0 : additionalMessageInputProps.Input) || ContextInput || MessageInputSmall;
|
|
9240
9516
|
var ThreadMessage = PropMessage || (additionalMessageListProps === null || additionalMessageListProps === void 0 ? void 0 : additionalMessageListProps.Message);
|
|
@@ -9262,7 +9538,7 @@ var ThreadInner = function (props) {
|
|
|
9262
9538
|
React__default['default'].createElement("div", { className: 'str-chat__thread-list', ref: messageList },
|
|
9263
9539
|
React__default['default'].createElement(Message, __assign({ initialMessage: true, message: thread, Message: ThreadMessage || FallbackMessage, threadList: true }, additionalParentMessageProps)),
|
|
9264
9540
|
React__default['default'].createElement(ThreadStart, null),
|
|
9265
|
-
React__default['default'].createElement(ThreadMessageList, __assign({ hasMore: threadHasMore, loadingMore: threadLoadingMore, loadMore: loadMoreThread, Message: ThreadMessage || FallbackMessage, messages: threadMessages || [], threadList: true }, (virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps)))),
|
|
9541
|
+
React__default['default'].createElement(ThreadMessageList, __assign({ disableDateSeparator: !enableDateSeparator, hasMore: threadHasMore, loadingMore: threadLoadingMore, loadMore: loadMoreThread, Message: ThreadMessage || FallbackMessage, messages: threadMessages || [], threadList: true }, (virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps)))),
|
|
9266
9542
|
React__default['default'].createElement(MessageInput, __assign({ focus: autoFocus, Input: ThreadInput, parent: thread, publishTypingEvent: false }, additionalMessageInputProps))));
|
|
9267
9543
|
};
|
|
9268
9544
|
|
|
@@ -9328,7 +9604,6 @@ exports.Gallery = Gallery;
|
|
|
9328
9604
|
exports.GiphyPreviewMessage = GiphyPreviewMessage;
|
|
9329
9605
|
exports.ImageComponent = ImageComponent;
|
|
9330
9606
|
exports.InfiniteScroll = InfiniteScroll;
|
|
9331
|
-
exports.InfiniteScrollPaginator = InfiniteScrollPaginator;
|
|
9332
9607
|
exports.KEY_CODES = KEY_CODES;
|
|
9333
9608
|
exports.LoadMoreButton = LoadMoreButton;
|
|
9334
9609
|
exports.LoadMorePaginator = LoadMorePaginator;
|
|
@@ -9369,7 +9644,6 @@ exports.ReactionIcon = ReactionIcon;
|
|
|
9369
9644
|
exports.ReactionSelector = ReactionSelector;
|
|
9370
9645
|
exports.ReactionsList = ReactionsList;
|
|
9371
9646
|
exports.ReplyIcon = ReplyIcon;
|
|
9372
|
-
exports.ReverseInfiniteScroll = ReverseInfiniteScroll;
|
|
9373
9647
|
exports.SUPPORTED_VIDEO_FORMATS = SUPPORTED_VIDEO_FORMATS;
|
|
9374
9648
|
exports.SafeAnchor = SafeAnchor;
|
|
9375
9649
|
exports.SearchInput = SearchInput;
|
|
@@ -9434,6 +9708,7 @@ exports.itTranslations = itTranslations;
|
|
|
9434
9708
|
exports.jaTranslations = jaTranslations;
|
|
9435
9709
|
exports.koTranslations = koTranslations;
|
|
9436
9710
|
exports.listener = Listeners;
|
|
9711
|
+
exports.makeDateMessageId = makeDateMessageId;
|
|
9437
9712
|
exports.markDownRenderers = markDownRenderers;
|
|
9438
9713
|
exports.matchMarkdownLinks = matchMarkdownLinks;
|
|
9439
9714
|
exports.mentionsMarkdownPlugin = mentionsMarkdownPlugin;
|
|
@@ -9464,7 +9739,6 @@ exports.showMessageActionsBox = showMessageActionsBox;
|
|
|
9464
9739
|
exports.trTranslations = trTranslations;
|
|
9465
9740
|
exports.useActionHandler = useActionHandler;
|
|
9466
9741
|
exports.useBreakpoint = useBreakpoint;
|
|
9467
|
-
exports.useCallLoadMore = useCallLoadMore;
|
|
9468
9742
|
exports.useChannelActionContext = useChannelActionContext;
|
|
9469
9743
|
exports.useChannelDeletedListener = useChannelDeletedListener;
|
|
9470
9744
|
exports.useChannelEditMessageHandler = useEditMessageHandler;
|