stream-chat-react 11.0.0 → 11.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 +1106 -1937
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +4 -4
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/Attachment.d.ts +1 -1
- package/dist/components/Attachment/Attachment.d.ts.map +1 -1
- package/dist/components/Attachment/AttachmentActions.d.ts +1 -1
- package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
- package/dist/components/Attachment/Audio.d.ts +3 -3
- package/dist/components/Attachment/Audio.d.ts.map +1 -1
- package/dist/components/Attachment/Audio.js +1 -1
- package/dist/components/Attachment/Card.d.ts +1 -1
- package/dist/components/Attachment/Card.d.ts.map +1 -1
- package/dist/components/Attachment/DownloadButton.d.ts +1 -1
- package/dist/components/Attachment/DownloadButton.d.ts.map +1 -1
- package/dist/components/Attachment/FileAttachment.d.ts +1 -1
- package/dist/components/Attachment/FileAttachment.d.ts.map +1 -1
- package/dist/components/Attachment/FileSizeIndicator.d.ts +1 -1
- package/dist/components/Attachment/FileSizeIndicator.d.ts.map +1 -1
- package/dist/components/Attachment/UnsupportedAttachment.d.ts +1 -1
- package/dist/components/Attachment/UnsupportedAttachment.d.ts.map +1 -1
- package/dist/components/Attachment/utils.d.ts +6 -6
- package/dist/components/Attachment/utils.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Header.d.ts +2 -2
- package/dist/components/AutoCompleteTextarea/Header.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +1 -1
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Channel/Channel.d.ts +5 -3
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +1 -0
- package/dist/components/Channel/channelState.d.ts +2 -2
- package/dist/components/Channel/channelState.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +1 -1
- package/dist/components/Channel/hooks/useEditMessageHandler.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useMentionsHandlers.d.ts +1 -1
- package/dist/components/Channel/hooks/useMentionsHandlers.d.ts.map +1 -1
- package/dist/components/ChannelHeader/ChannelHeader.d.ts +1 -1
- package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.d.ts +1 -1
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +2 -1
- package/dist/components/ChannelList/ChannelListMessenger.d.ts +1 -1
- package/dist/components/ChannelList/ChannelListMessenger.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.js +2 -2
- package/dist/components/ChannelList/utils.d.ts +1 -1
- package/dist/components/ChannelList/utils.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +2 -2
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts +1 -1
- package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts.map +1 -1
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +1 -1
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts.map +1 -1
- package/dist/components/ChannelSearch/ChannelSearch.d.ts +2 -2
- package/dist/components/ChannelSearch/ChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchBar.d.ts +4 -4
- package/dist/components/ChannelSearch/SearchBar.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchInput.d.ts +3 -3
- package/dist/components/ChannelSearch/SearchInput.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchResults.d.ts +6 -6
- package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +5 -5
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/utils.d.ts +1 -1
- package/dist/components/ChannelSearch/utils.d.ts.map +1 -1
- package/dist/components/Chat/Chat.d.ts +2 -2
- package/dist/components/Chat/Chat.d.ts.map +1 -1
- package/dist/components/Chat/Chat.js +1 -3
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +1 -1
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useChat.d.ts +1 -3
- package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useChat.js +4 -7
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useCreateChatContext.js +1 -5
- package/dist/components/Chat/hooks/useCustomStyles.d.ts +2 -2
- package/dist/components/Chat/hooks/useCustomStyles.d.ts.map +1 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +6 -6
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
- package/dist/components/ChatDown/ChatDown.d.ts +1 -1
- package/dist/components/ChatDown/ChatDown.d.ts.map +1 -1
- package/dist/components/CommandItem/CommandItem.d.ts +1 -1
- package/dist/components/CommandItem/CommandItem.d.ts.map +1 -1
- package/dist/components/DateSeparator/DateSeparator.d.ts +1 -1
- package/dist/components/DateSeparator/DateSeparator.d.ts.map +1 -1
- package/dist/components/Emojis/EmojiPicker.d.ts +1 -1
- package/dist/components/Emojis/EmojiPicker.d.ts.map +1 -1
- package/dist/components/Emojis/index.cjs.js +1 -1
- package/dist/components/EmoticonItem/EmoticonItem.d.ts +1 -1
- package/dist/components/EmoticonItem/EmoticonItem.d.ts.map +1 -1
- package/dist/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +1 -1
- package/dist/components/EmptyStateIndicator/EmptyStateIndicator.d.ts.map +1 -1
- package/dist/components/EventComponent/EventComponent.d.ts +1 -1
- package/dist/components/EventComponent/EventComponent.d.ts.map +1 -1
- package/dist/components/Gallery/BaseImage.d.ts +6 -0
- package/dist/components/Gallery/BaseImage.d.ts.map +1 -0
- package/dist/components/Gallery/BaseImage.js +20 -0
- package/dist/components/Gallery/Gallery.d.ts +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +4 -2
- package/dist/components/Gallery/Image.d.ts +1 -1
- package/dist/components/Gallery/Image.d.ts.map +1 -1
- package/dist/components/Gallery/Image.js +3 -2
- package/dist/components/Gallery/ModalGallery.d.ts +1 -1
- package/dist/components/Gallery/ModalGallery.d.ts.map +1 -1
- package/dist/components/Gallery/ModalGallery.js +3 -1
- package/dist/components/Gallery/index.d.ts +1 -0
- package/dist/components/Gallery/index.d.ts.map +1 -1
- package/dist/components/Gallery/index.js +1 -0
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +1 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
- package/dist/components/LoadMore/LoadMoreButton.d.ts +1 -1
- package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
- package/dist/components/LoadMore/LoadMorePaginator.d.ts +1 -1
- package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
- package/dist/components/Loading/LoadingErrorIndicator.d.ts +1 -1
- package/dist/components/Loading/LoadingErrorIndicator.d.ts.map +1 -1
- package/dist/components/Loading/LoadingIndicator.d.ts +1 -1
- package/dist/components/Loading/LoadingIndicator.d.ts.map +1 -1
- package/dist/components/MML/MML.d.ts +1 -1
- package/dist/components/MML/MML.d.ts.map +1 -1
- package/dist/components/Message/FixedHeightMessage.d.ts +1 -1
- package/dist/components/Message/FixedHeightMessage.d.ts.map +1 -1
- package/dist/components/Message/MessageDeleted.d.ts +1 -1
- package/dist/components/Message/MessageDeleted.d.ts.map +1 -1
- package/dist/components/Message/MessageOptions.d.ts +1 -1
- package/dist/components/Message/MessageOptions.d.ts.map +1 -1
- package/dist/components/Message/MessageRepliesCountButton.d.ts +1 -1
- package/dist/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
- package/dist/components/Message/MessageStatus.d.ts +1 -1
- package/dist/components/Message/MessageStatus.d.ts.map +1 -1
- package/dist/components/Message/MessageText.d.ts +1 -1
- package/dist/components/Message/MessageText.d.ts.map +1 -1
- package/dist/components/Message/MessageTimestamp.d.ts +1 -1
- package/dist/components/Message/MessageTimestamp.d.ts.map +1 -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 +1 -1
- package/dist/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useEditHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useEditHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useFlagHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useFlagHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useMentionsHandler.d.ts +2 -2
- package/dist/components/Message/hooks/useMentionsHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useMuteHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useMuteHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/usePinHandler.d.ts +3 -3
- package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useUserHandler.d.ts.map +1 -1
- package/dist/components/Message/renderText/componentRenderers/Mention.d.ts +1 -1
- package/dist/components/Message/renderText/componentRenderers/Mention.d.ts.map +1 -1
- package/dist/components/Message/renderText/regex.d.ts +1 -1
- package/dist/components/Message/renderText/regex.d.ts.map +1 -1
- package/dist/components/Message/renderText/renderText.d.ts +2 -2
- package/dist/components/Message/renderText/renderText.d.ts.map +1 -1
- package/dist/components/Message/renderText/types.d.ts +1 -1
- package/dist/components/Message/renderText/types.d.ts.map +1 -1
- package/dist/components/Message/types.d.ts +4 -4
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts +2 -2
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActions.d.ts +3 -3
- package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActionsBox.d.ts +3 -3
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageInput/AttachmentPreviewList.d.ts +5 -0
- package/dist/components/MessageInput/AttachmentPreviewList.d.ts.map +1 -1
- package/dist/components/MessageInput/AttachmentPreviewList.js +16 -10
- package/dist/components/MessageInput/CooldownTimer.d.ts +1 -1
- package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +6 -6
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/LinkPreviewList.d.ts +1 -1
- package/dist/components/MessageInput/LinkPreviewList.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInput.d.ts +2 -2
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts +1 -1
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts +3 -3
- package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +13 -13
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +1 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/utils.d.ts +2 -2
- package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
- package/dist/components/MessageInput/icons.d.ts +1 -1
- package/dist/components/MessageInput/icons.d.ts.map +1 -1
- package/dist/components/MessageInput/index.d.ts +1 -1
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +1 -1
- package/dist/components/MessageInput/types.d.ts +6 -6
- package/dist/components/MessageInput/types.d.ts.map +1 -1
- package/dist/components/MessageList/CustomNotification.d.ts +1 -1
- package/dist/components/MessageList/CustomNotification.d.ts.map +1 -1
- package/dist/components/MessageList/GiphyPreviewMessage.d.ts +1 -1
- package/dist/components/MessageList/GiphyPreviewMessage.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.d.ts +2 -2
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageListNotifications.d.ts +1 -1
- package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
- package/dist/components/MessageList/MessageNotification.d.ts +1 -1
- package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +4 -4
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +2 -2
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +2 -2
- package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +1 -1
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +31 -32
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useLastReadData.d.ts +1 -1
- package/dist/components/MessageList/hooks/useLastReadData.d.ts.map +1 -1
- package/dist/components/MessageList/utils.d.ts +2 -2
- package/dist/components/MessageList/utils.d.ts.map +1 -1
- package/dist/components/Modal/Modal.d.ts +1 -1
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts +2 -2
- package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts +4 -4
- package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts +2 -2
- package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FilePreviewer.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FilePreviewer.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/FileUploadButton.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FileUploadButton.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/IconButton.d.ts +1 -1
- package/dist/components/ReactFileUtilities/IconButton.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +1 -1
- package/dist/components/ReactFileUtilities/ImageDropzone.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts +2 -2
- package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts +1 -1
- package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts +1 -1
- package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/Thumbnail.d.ts +1 -1
- package/dist/components/ReactFileUtilities/Thumbnail.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts +1 -1
- package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/UploadButton.d.ts +1 -1
- package/dist/components/ReactFileUtilities/UploadButton.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/types.d.ts +5 -5
- package/dist/components/ReactFileUtilities/types.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionSelector.d.ts +1 -1
- package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.d.ts +1 -1
- package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SimpleReactionsList.d.ts +1 -1
- package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SpriteImage.d.ts +1 -1
- package/dist/components/Reactions/SpriteImage.d.ts.map +1 -1
- package/dist/components/Reactions/StreamEmoji.d.ts +1 -1
- package/dist/components/Reactions/StreamEmoji.d.ts.map +1 -1
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts +2 -2
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
- package/dist/components/Reactions/reactionOptions.d.ts +1 -1
- package/dist/components/Reactions/reactionOptions.d.ts.map +1 -1
- package/dist/components/SafeAnchor/SafeAnchor.d.ts +1 -1
- package/dist/components/SafeAnchor/SafeAnchor.d.ts.map +1 -1
- package/dist/components/Thread/Thread.d.ts +1 -1
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/ThreadHeader.d.ts +1 -1
- package/dist/components/Thread/ThreadHeader.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
- package/dist/components/UserItem/UserItem.d.ts +1 -1
- package/dist/components/UserItem/UserItem.d.ts.map +1 -1
- package/dist/components/Window/Window.d.ts +1 -1
- package/dist/components/Window/Window.d.ts.map +1 -1
- package/dist/context/ChannelActionContext.d.ts +4 -4
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- package/dist/context/ChannelListContext.d.ts +23 -0
- package/dist/context/ChannelListContext.d.ts.map +1 -0
- package/dist/context/ChannelListContext.js +17 -0
- package/dist/context/ChannelStateContext.d.ts +5 -5
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/context/ChatContext.d.ts +7 -16
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ComponentContext.d.ts +3 -2
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/MessageContext.d.ts +2 -2
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/context/MessageInputContext.d.ts +1 -1
- package/dist/context/MessageInputContext.d.ts.map +1 -1
- package/dist/context/MessageListContext.d.ts +1 -1
- package/dist/context/MessageListContext.d.ts.map +1 -1
- package/dist/context/TranslationContext.d.ts +5 -5
- package/dist/context/TranslationContext.d.ts.map +1 -1
- package/dist/context/TypingContext.d.ts +1 -1
- package/dist/context/TypingContext.d.ts.map +1 -1
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -0
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/i18n/Streami18n.d.ts +4 -3
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/de.json +1 -0
- package/dist/i18n/en.json +1 -0
- package/dist/i18n/es.json +1 -0
- package/dist/i18n/fr.json +1 -0
- package/dist/i18n/hi.json +1 -0
- package/dist/i18n/it.json +1 -0
- package/dist/i18n/ja.json +1 -0
- package/dist/i18n/ko.json +1 -0
- package/dist/i18n/nl.json +1 -0
- package/dist/i18n/pt.json +1 -0
- package/dist/i18n/ru.json +1 -0
- package/dist/i18n/tr.json +1 -0
- package/dist/{icons-427fd8d5.js → icons-a35a8ee7.js} +32 -12
- package/dist/index.cjs.js +602 -617
- package/dist/scss/v2/AttachmentList/AttachmentList-theme.scss +3 -3
- package/dist/scss/v2/AttachmentPreviewList/AttachmentPreviewList-layout.scss +4 -0
- package/dist/scss/v2/BaseImage/BaseImage-layout.scss +21 -0
- package/dist/scss/v2/BaseImage/BaseImage-theme.scss +35 -0
- package/dist/scss/v2/BaseImage/index.scss +2 -0
- package/dist/scss/v2/_icons.scss +3 -0
- package/dist/scss/v2/_utils.scss +12 -0
- package/dist/scss/v2/index.layout.scss +2 -0
- package/dist/scss/v2/index.scss +1 -0
- package/dist/types/types.d.ts +20 -20
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/getChannel.d.ts +1 -1
- package/dist/utils/getChannel.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -13
package/dist/index.cjs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var icons = require('./icons-
|
|
5
|
+
var icons = require('./icons-a35a8ee7.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var ReactPlayer = require('react-player');
|
|
8
8
|
var prettybytes = require('pretty-bytes');
|
|
@@ -10,21 +10,10 @@ var sanitizeUrl = require('@braintree/sanitize-url');
|
|
|
10
10
|
var ImageGallery = require('react-image-gallery');
|
|
11
11
|
var PropTypes = require('prop-types');
|
|
12
12
|
var linkify = require('linkifyjs');
|
|
13
|
-
var _defineProperty$2 = require('@babel/runtime/helpers/defineProperty');
|
|
14
|
-
var _slicedToArray$2 = require('@babel/runtime/helpers/slicedToArray');
|
|
15
13
|
var emojiRegex = require('emoji-regex');
|
|
16
14
|
var uniqBy = require('lodash.uniqby');
|
|
17
|
-
var _objectWithoutProperties$1 = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
18
15
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
19
|
-
var
|
|
20
|
-
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
21
|
-
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
22
|
-
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
23
|
-
var _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');
|
|
24
|
-
var _inherits = require('@babel/runtime/helpers/inherits');
|
|
25
|
-
var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
|
|
26
|
-
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
27
|
-
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
16
|
+
var _defineProperty$2 = require('@babel/runtime/helpers/defineProperty');
|
|
28
17
|
var Textarea = require('react-textarea-autosize');
|
|
29
18
|
var getCaretCoordinates = require('textarea-caret');
|
|
30
19
|
var reactIs = require('react-is');
|
|
@@ -84,21 +73,10 @@ var prettybytes__default = /*#__PURE__*/_interopDefaultLegacy(prettybytes);
|
|
|
84
73
|
var ImageGallery__default = /*#__PURE__*/_interopDefaultLegacy(ImageGallery);
|
|
85
74
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
86
75
|
var linkify__namespace = /*#__PURE__*/_interopNamespace(linkify);
|
|
87
|
-
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty$2);
|
|
88
|
-
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray$2);
|
|
89
76
|
var emojiRegex__default = /*#__PURE__*/_interopDefaultLegacy(emojiRegex);
|
|
90
77
|
var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
|
|
91
|
-
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties$1);
|
|
92
78
|
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
93
|
-
var
|
|
94
|
-
var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
|
|
95
|
-
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
|
|
96
|
-
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
|
|
97
|
-
var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
|
|
98
|
-
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
|
|
99
|
-
var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
|
|
100
|
-
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
|
|
101
|
-
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
|
|
79
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty$2);
|
|
102
80
|
var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
|
|
103
81
|
var getCaretCoordinates__default = /*#__PURE__*/_interopDefaultLegacy(getCaretCoordinates);
|
|
104
82
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
@@ -227,7 +205,7 @@ var PlayButton = function (_a) {
|
|
|
227
205
|
var ProgressBar = function (_a) {
|
|
228
206
|
var onClick = _a.onClick, progress = _a.progress;
|
|
229
207
|
return (React__default["default"].createElement("div", { className: 'str-chat__message-attachment-audio-widget--progress-track', "data-progress": progress, "data-testid": 'audio-progress', onClick: onClick, role: 'progressbar', style: {
|
|
230
|
-
background: "linear-gradient(\n\t\t to right
|
|
208
|
+
background: "linear-gradient(\n\t\t to right,\n\t\t var(--str-chat__primary-color),\n\t\t var(--str-chat__primary-color) ".concat(progress, "%,\n\t\t var(--str-chat__disabled-color) ").concat(progress, "%,\n\t\t var(--str-chat__disabled-color)\n\t )"),
|
|
231
209
|
} },
|
|
232
210
|
React__default["default"].createElement("div", { className: 'str-chat__message-attachment-audio-widget--progress-slider', style: { left: "".concat(progress, "px") } })));
|
|
233
211
|
};
|
|
@@ -261,6 +239,23 @@ var UnMemoizedAudio = function (props) {
|
|
|
261
239
|
*/
|
|
262
240
|
var Audio = React__default["default"].memo(UnMemoizedAudio);
|
|
263
241
|
|
|
242
|
+
var BaseImage = React.forwardRef(function BaseImage(_a, ref) {
|
|
243
|
+
var props = icons.__rest(_a, []);
|
|
244
|
+
var propsClassName = props.className, propsOnError = props.onError;
|
|
245
|
+
var _b = React.useState(false), error = _b[0], setError = _b[1];
|
|
246
|
+
React.useEffect(function () { return function () {
|
|
247
|
+
setError(false);
|
|
248
|
+
}; }, [props.src]);
|
|
249
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
250
|
+
React__default["default"].createElement("img", icons.__assign({ "data-testid": 'str-chat__base-image' }, props, { className: clsx(propsClassName, 'str-chat__base-image', {
|
|
251
|
+
'str-chat__base-image--load-failed': error,
|
|
252
|
+
}), onError: function (e) {
|
|
253
|
+
setError(true);
|
|
254
|
+
propsOnError === null || propsOnError === void 0 ? void 0 : propsOnError(e);
|
|
255
|
+
}, ref: ref })),
|
|
256
|
+
error && React__default["default"].createElement(DownloadButton, { assetUrl: props.src })));
|
|
257
|
+
});
|
|
258
|
+
|
|
264
259
|
var CloseIconRound = function () { return (React__default["default"].createElement("svg", { "data-testid": 'close-icon-round', fill: 'none', height: '28', viewBox: '0 0 28 28', width: '28', xmlns: 'http://www.w3.org/2000/svg' },
|
|
265
260
|
React__default["default"].createElement("rect", { fill: '#72767E', height: '28', rx: '14', width: '28' }),
|
|
266
261
|
React__default["default"].createElement("circle", { cx: '14', cy: '14', fill: '#72767E', r: '12' }),
|
|
@@ -303,12 +298,13 @@ var Modal = function (_a) {
|
|
|
303
298
|
|
|
304
299
|
var ModalGallery = function (props) {
|
|
305
300
|
var images = props.images, index = props.index;
|
|
301
|
+
var t = icons.useTranslationContext('ModalGallery').t;
|
|
306
302
|
var formattedArray = React.useMemo(function () {
|
|
307
303
|
return images.map(function (image) {
|
|
308
304
|
var imageSrc = image.image_url || image.thumb_url || '';
|
|
309
305
|
return {
|
|
310
306
|
original: imageSrc,
|
|
311
|
-
originalAlt: 'User uploaded content',
|
|
307
|
+
originalAlt: t('User uploaded content'),
|
|
312
308
|
source: imageSrc,
|
|
313
309
|
};
|
|
314
310
|
});
|
|
@@ -320,8 +316,9 @@ var UnMemoizedGallery = function (props) {
|
|
|
320
316
|
var images = props.images, innerRefs = props.innerRefs;
|
|
321
317
|
var _a = React.useState(0), index = _a[0], setIndex = _a[1];
|
|
322
318
|
var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
|
|
323
|
-
var _c = icons.useComponentContext('Gallery').ModalGallery, ModalGallery$1 =
|
|
319
|
+
var _c = icons.useComponentContext('Gallery'), _d = _c.BaseImage, BaseImage$1 = _d === void 0 ? BaseImage : _d, _e = _c.ModalGallery, ModalGallery$1 = _e === void 0 ? ModalGallery : _e;
|
|
324
320
|
var t = icons.useTranslationContext('Gallery').t;
|
|
321
|
+
var imageFallbackTitle = t('User uploaded content');
|
|
325
322
|
var countImagesDisplayedInPreview = 4;
|
|
326
323
|
var lastImageIndexInPreview = countImagesDisplayedInPreview - 1;
|
|
327
324
|
var toggleModal = function (selectedIndex) {
|
|
@@ -340,7 +337,7 @@ var UnMemoizedGallery = function (props) {
|
|
|
340
337
|
React__default["default"].createElement("p", null, t('{{ imageCount }} more', {
|
|
341
338
|
imageCount: images.length - countImagesDisplayedInPreview,
|
|
342
339
|
})))) : (React__default["default"].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); } },
|
|
343
|
-
React__default["default"].createElement(
|
|
340
|
+
React__default["default"].createElement(BaseImage$1, icons.__assign({ alt: (image === null || image === void 0 ? void 0 : image.fallback) || imageFallbackTitle, src: sanitizeUrl.sanitizeUrl(image.previewUrl || image.image_url || image.thumb_url), style: image.style, title: (image === null || image === void 0 ? void 0 : image.fallback) || imageFallbackTitle }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })))));
|
|
344
341
|
});
|
|
345
342
|
var className = clsx('str-chat__gallery', {
|
|
346
343
|
'str-chat__gallery--square': images.length > lastImageIndexInPreview,
|
|
@@ -362,11 +359,11 @@ var Gallery = React__default["default"].memo(UnMemoizedGallery);
|
|
|
362
359
|
var ImageComponent = function (props) {
|
|
363
360
|
var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url, innerRef = props.innerRef, previewUrl = props.previewUrl, style = props.style;
|
|
364
361
|
var _b = React.useState(false), modalIsOpen = _b[0], setModalIsOpen = _b[1];
|
|
365
|
-
var _c = icons.useComponentContext('ImageComponent').ModalGallery, ModalGallery$1 =
|
|
362
|
+
var _c = icons.useComponentContext('ImageComponent'), _d = _c.BaseImage, BaseImage$1 = _d === void 0 ? BaseImage : _d, _e = _c.ModalGallery, ModalGallery$1 = _e === void 0 ? ModalGallery : _e;
|
|
366
363
|
var imageSrc = sanitizeUrl.sanitizeUrl(previewUrl || image_url || thumb_url);
|
|
367
364
|
var toggleModal = function () { return setModalIsOpen(function (modalIsOpen) { return !modalIsOpen; }); };
|
|
368
365
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
369
|
-
React__default["default"].createElement(
|
|
366
|
+
React__default["default"].createElement(BaseImage$1, icons.__assign({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, style: style, tabIndex: 0, title: fallback }, dimensions, (innerRef && { ref: innerRef }))),
|
|
370
367
|
React__default["default"].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
|
|
371
368
|
React__default["default"].createElement(ModalGallery$1, { images: [props], index: 0 }))));
|
|
372
369
|
};
|
|
@@ -1524,9 +1521,9 @@ function _iterableToArray$1(iter) { if (typeof Symbol !== "undefined" && iter[Sy
|
|
|
1524
1521
|
|
|
1525
1522
|
function _arrayWithoutHoles$1(arr) { if (Array.isArray(arr)) return _arrayLikeToArray$1(arr); }
|
|
1526
1523
|
|
|
1527
|
-
function ownKeys$
|
|
1524
|
+
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1528
1525
|
|
|
1529
|
-
function _objectSpread$
|
|
1526
|
+
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty$1(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1530
1527
|
|
|
1531
1528
|
function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1532
1529
|
|
|
@@ -1743,7 +1740,7 @@ function pickerOptionsFromAccept(accept) {
|
|
|
1743
1740
|
mimeType = _ref5[0],
|
|
1744
1741
|
ext = _ref5[1];
|
|
1745
1742
|
|
|
1746
|
-
return _objectSpread$
|
|
1743
|
+
return _objectSpread$1(_objectSpread$1({}, agg), {}, _defineProperty$1({}, mimeType, ext));
|
|
1747
1744
|
}, {});
|
|
1748
1745
|
return [{
|
|
1749
1746
|
// description is required due to https://crbug.com/1264708
|
|
@@ -1831,7 +1828,7 @@ function isExt(v) {
|
|
|
1831
1828
|
* @typedef {"file-invalid-type"|"file-too-large"|"file-too-small"|"too-many-files"} ErrorCode
|
|
1832
1829
|
*/
|
|
1833
1830
|
|
|
1834
|
-
var _excluded
|
|
1831
|
+
var _excluded = ["children"],
|
|
1835
1832
|
_excluded2 = ["open"],
|
|
1836
1833
|
_excluded3 = ["refKey", "role", "onKeyDown", "onFocus", "onBlur", "onClick", "onDragEnter", "onDragOver", "onDragLeave", "onDrop"],
|
|
1837
1834
|
_excluded4 = ["refKey", "onChange", "onClick"];
|
|
@@ -1856,9 +1853,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
1856
1853
|
|
|
1857
1854
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
1858
1855
|
|
|
1859
|
-
function ownKeys
|
|
1856
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1860
1857
|
|
|
1861
|
-
function _objectSpread
|
|
1858
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1862
1859
|
|
|
1863
1860
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1864
1861
|
|
|
@@ -1882,7 +1879,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
1882
1879
|
|
|
1883
1880
|
var Dropzone = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
1884
1881
|
var children = _ref.children,
|
|
1885
|
-
params = _objectWithoutProperties(_ref, _excluded
|
|
1882
|
+
params = _objectWithoutProperties(_ref, _excluded);
|
|
1886
1883
|
|
|
1887
1884
|
var _useDropzone = useDropzone(params),
|
|
1888
1885
|
open = _useDropzone.open,
|
|
@@ -1894,7 +1891,7 @@ var Dropzone = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
1894
1891
|
};
|
|
1895
1892
|
}, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element
|
|
1896
1893
|
|
|
1897
|
-
return /*#__PURE__*/React__default["default"].createElement(React.Fragment, null, children(_objectSpread
|
|
1894
|
+
return /*#__PURE__*/React__default["default"].createElement(React.Fragment, null, children(_objectSpread(_objectSpread({}, props), {}, {
|
|
1898
1895
|
open: open
|
|
1899
1896
|
})));
|
|
1900
1897
|
});
|
|
@@ -2267,7 +2264,7 @@ var initialState$1 = {
|
|
|
2267
2264
|
function useDropzone() {
|
|
2268
2265
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
2269
2266
|
|
|
2270
|
-
var _defaultProps$props = _objectSpread
|
|
2267
|
+
var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props),
|
|
2271
2268
|
accept = _defaultProps$props.accept,
|
|
2272
2269
|
disabled = _defaultProps$props.disabled,
|
|
2273
2270
|
getFilesFromEvent = _defaultProps$props.getFilesFromEvent,
|
|
@@ -2692,7 +2689,7 @@ function useDropzone() {
|
|
|
2692
2689
|
onDrop = _ref2.onDrop,
|
|
2693
2690
|
rest = _objectWithoutProperties(_ref2, _excluded3);
|
|
2694
2691
|
|
|
2695
|
-
return _objectSpread
|
|
2692
|
+
return _objectSpread(_objectSpread(_defineProperty({
|
|
2696
2693
|
onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),
|
|
2697
2694
|
onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),
|
|
2698
2695
|
onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),
|
|
@@ -2731,10 +2728,10 @@ function useDropzone() {
|
|
|
2731
2728
|
tabIndex: -1
|
|
2732
2729
|
}, refKey, inputRef);
|
|
2733
2730
|
|
|
2734
|
-
return _objectSpread
|
|
2731
|
+
return _objectSpread(_objectSpread({}, inputProps), rest);
|
|
2735
2732
|
};
|
|
2736
2733
|
}, [inputRef, accept, multiple, onDropCb, disabled]);
|
|
2737
|
-
return _objectSpread
|
|
2734
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2738
2735
|
isFocused: isFocused && !disabled,
|
|
2739
2736
|
getRootProps: getRootProps,
|
|
2740
2737
|
getInputProps: getInputProps,
|
|
@@ -2753,40 +2750,40 @@ function reducer(state, action) {
|
|
|
2753
2750
|
/* istanbul ignore next */
|
|
2754
2751
|
switch (action.type) {
|
|
2755
2752
|
case "focus":
|
|
2756
|
-
return _objectSpread
|
|
2753
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2757
2754
|
isFocused: true
|
|
2758
2755
|
});
|
|
2759
2756
|
|
|
2760
2757
|
case "blur":
|
|
2761
|
-
return _objectSpread
|
|
2758
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2762
2759
|
isFocused: false
|
|
2763
2760
|
});
|
|
2764
2761
|
|
|
2765
2762
|
case "openDialog":
|
|
2766
|
-
return _objectSpread
|
|
2763
|
+
return _objectSpread(_objectSpread({}, initialState$1), {}, {
|
|
2767
2764
|
isFileDialogActive: true
|
|
2768
2765
|
});
|
|
2769
2766
|
|
|
2770
2767
|
case "closeDialog":
|
|
2771
|
-
return _objectSpread
|
|
2768
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2772
2769
|
isFileDialogActive: false
|
|
2773
2770
|
});
|
|
2774
2771
|
|
|
2775
2772
|
case "setDraggedFiles":
|
|
2776
|
-
return _objectSpread
|
|
2773
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2777
2774
|
isDragActive: action.isDragActive,
|
|
2778
2775
|
isDragAccept: action.isDragAccept,
|
|
2779
2776
|
isDragReject: action.isDragReject
|
|
2780
2777
|
});
|
|
2781
2778
|
|
|
2782
2779
|
case "setFiles":
|
|
2783
|
-
return _objectSpread
|
|
2780
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2784
2781
|
acceptedFiles: action.acceptedFiles,
|
|
2785
2782
|
fileRejections: action.fileRejections
|
|
2786
2783
|
});
|
|
2787
2784
|
|
|
2788
2785
|
case "reset":
|
|
2789
|
-
return _objectSpread
|
|
2786
|
+
return _objectSpread({}, initialState$1);
|
|
2790
2787
|
|
|
2791
2788
|
default:
|
|
2792
2789
|
return state;
|
|
@@ -3313,22 +3310,21 @@ var getAttachmentType = function (attachment) {
|
|
|
3313
3310
|
return 'unsupported';
|
|
3314
3311
|
};
|
|
3315
3312
|
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
}
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
}, [item, onClickHandler]);
|
|
3313
|
+
const Item$1 = /*#__PURE__*/React__default["default"].forwardRef(function Item(props, innerRef) {
|
|
3314
|
+
const {
|
|
3315
|
+
className,
|
|
3316
|
+
component: Component,
|
|
3317
|
+
item,
|
|
3318
|
+
onClickHandler,
|
|
3319
|
+
onSelectHandler,
|
|
3320
|
+
selected,
|
|
3321
|
+
style
|
|
3322
|
+
} = props;
|
|
3323
|
+
const {
|
|
3324
|
+
themeVersion
|
|
3325
|
+
} = icons.useChatContext('SuggestionItem');
|
|
3326
|
+
const handleSelect = React.useCallback(() => onSelectHandler(item), [item, onSelectHandler]);
|
|
3327
|
+
const handleClick = React.useCallback(event => onClickHandler(event, item), [item, onClickHandler]);
|
|
3332
3328
|
if (themeVersion === '2') return /*#__PURE__*/React__default["default"].createElement("li", {
|
|
3333
3329
|
className: clsx(className, {
|
|
3334
3330
|
'str-chat__suggestion-item--selected': selected
|
|
@@ -30531,43 +30527,38 @@ var renderText = function (text, mentionedUsers, _a) {
|
|
|
30531
30527
|
return (React__default["default"].createElement(Markdown, { allowedElements: allowedTagNames, components: icons.__assign(icons.__assign({}, markDownRenderers), customMarkDownRenderers), rehypePlugins: getRehypePlugins(rehypePlugins), remarkPlugins: getRemarkPlugins(remarkPlugins), skipHtml: true, unwrapDisallowed: true, urlTransform: urlTransform }, newText));
|
|
30532
30528
|
};
|
|
30533
30529
|
|
|
30534
|
-
|
|
30535
|
-
|
|
30536
|
-
|
|
30537
|
-
|
|
30538
|
-
|
|
30539
|
-
|
|
30540
|
-
|
|
30541
|
-
|
|
30542
|
-
|
|
30543
|
-
|
|
30544
|
-
|
|
30545
|
-
|
|
30546
|
-
|
|
30547
|
-
|
|
30548
|
-
|
|
30549
|
-
|
|
30550
|
-
|
|
30551
|
-
|
|
30552
|
-
|
|
30553
|
-
AutocompleteSuggestionHeader
|
|
30554
|
-
AutocompleteSuggestionItem
|
|
30555
|
-
|
|
30556
|
-
|
|
30557
|
-
|
|
30558
|
-
|
|
30559
|
-
|
|
30560
|
-
|
|
30561
|
-
|
|
30562
|
-
|
|
30563
|
-
|
|
30564
|
-
|
|
30565
|
-
|
|
30566
|
-
return getId(value) === getId(item);
|
|
30567
|
-
});
|
|
30568
|
-
};
|
|
30569
|
-
var getId = function getId(item) {
|
|
30570
|
-
var textToReplace = getTextToReplace(item);
|
|
30530
|
+
const List = _ref => {
|
|
30531
|
+
let {
|
|
30532
|
+
className,
|
|
30533
|
+
component,
|
|
30534
|
+
currentTrigger,
|
|
30535
|
+
dropdownScroll,
|
|
30536
|
+
getSelectedItem,
|
|
30537
|
+
getTextToReplace,
|
|
30538
|
+
Header: PropHeader,
|
|
30539
|
+
itemClassName,
|
|
30540
|
+
itemStyle,
|
|
30541
|
+
onSelect,
|
|
30542
|
+
selectionEnd,
|
|
30543
|
+
style,
|
|
30544
|
+
SuggestionItem: PropSuggestionItem,
|
|
30545
|
+
value: propValue,
|
|
30546
|
+
values
|
|
30547
|
+
} = _ref;
|
|
30548
|
+
const {
|
|
30549
|
+
AutocompleteSuggestionHeader,
|
|
30550
|
+
AutocompleteSuggestionItem
|
|
30551
|
+
} = icons.useComponentContext('SuggestionList');
|
|
30552
|
+
const {
|
|
30553
|
+
themeVersion
|
|
30554
|
+
} = icons.useChatContext('SuggestionList');
|
|
30555
|
+
const SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item$1;
|
|
30556
|
+
const SuggestionHeader = PropHeader || AutocompleteSuggestionHeader || DefaultSuggestionListHeader;
|
|
30557
|
+
const [selectedItemIndex, setSelectedItemIndex] = React.useState(undefined);
|
|
30558
|
+
const itemsRef = [];
|
|
30559
|
+
const isSelected = item => selectedItemIndex === values.findIndex(value => getId(value) === getId(item));
|
|
30560
|
+
const getId = item => {
|
|
30561
|
+
const textToReplace = getTextToReplace(item);
|
|
30571
30562
|
if (textToReplace.key) {
|
|
30572
30563
|
return textToReplace.key;
|
|
30573
30564
|
}
|
|
@@ -30576,38 +30567,34 @@ var List = function List(_ref) {
|
|
|
30576
30567
|
}
|
|
30577
30568
|
return item.key;
|
|
30578
30569
|
};
|
|
30579
|
-
|
|
30580
|
-
|
|
30581
|
-
return value.id ? value.id === item.id : value.name === item.name;
|
|
30582
|
-
});
|
|
30583
|
-
}, [values]);
|
|
30584
|
-
var modifyText = function modifyText(value) {
|
|
30570
|
+
const findItemIndex = React.useCallback(item => values.findIndex(value => value.id ? value.id === item.id : value.name === item.name), [values]);
|
|
30571
|
+
const modifyText = value => {
|
|
30585
30572
|
if (!value) return;
|
|
30586
30573
|
onSelect(getTextToReplace(value));
|
|
30587
30574
|
if (getSelectedItem) getSelectedItem(value);
|
|
30588
30575
|
};
|
|
30589
|
-
|
|
30576
|
+
const handleClick = React.useCallback((e, item) => {
|
|
30590
30577
|
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
30591
|
-
|
|
30578
|
+
const index = findItemIndex(item);
|
|
30592
30579
|
modifyText(values[index]);
|
|
30593
30580
|
}, [modifyText, findItemIndex]);
|
|
30594
|
-
|
|
30595
|
-
|
|
30581
|
+
const selectItem = React.useCallback(item => {
|
|
30582
|
+
const index = findItemIndex(item);
|
|
30596
30583
|
setSelectedItemIndex(index);
|
|
30597
30584
|
}, [findItemIndex]);
|
|
30598
|
-
|
|
30585
|
+
const handleKeyDown = React.useCallback(event => {
|
|
30599
30586
|
if (event.key === 'ArrowUp') {
|
|
30600
|
-
setSelectedItemIndex(
|
|
30587
|
+
setSelectedItemIndex(prevSelected => {
|
|
30601
30588
|
if (prevSelected === undefined) return 0;
|
|
30602
|
-
|
|
30589
|
+
const newIndex = prevSelected === 0 ? values.length - 1 : prevSelected - 1;
|
|
30603
30590
|
dropdownScroll(itemsRef[newIndex]);
|
|
30604
30591
|
return newIndex;
|
|
30605
30592
|
});
|
|
30606
30593
|
}
|
|
30607
30594
|
if (event.key === 'ArrowDown') {
|
|
30608
|
-
setSelectedItemIndex(
|
|
30595
|
+
setSelectedItemIndex(prevSelected => {
|
|
30609
30596
|
if (prevSelected === undefined) return 0;
|
|
30610
|
-
|
|
30597
|
+
const newIndex = prevSelected === values.length - 1 ? 0 : prevSelected + 1;
|
|
30611
30598
|
dropdownScroll(itemsRef[newIndex]);
|
|
30612
30599
|
return newIndex;
|
|
30613
30600
|
});
|
|
@@ -30617,33 +30604,30 @@ var List = function List(_ref) {
|
|
|
30617
30604
|
}
|
|
30618
30605
|
return null;
|
|
30619
30606
|
}, [selectedItemIndex, values]);
|
|
30620
|
-
React.useEffect(
|
|
30607
|
+
React.useEffect(() => {
|
|
30621
30608
|
document.addEventListener('keydown', handleKeyDown, false);
|
|
30622
|
-
return
|
|
30623
|
-
return document.removeEventListener('keydown', handleKeyDown);
|
|
30624
|
-
};
|
|
30609
|
+
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
30625
30610
|
}, [handleKeyDown]);
|
|
30626
|
-
React.useEffect(
|
|
30611
|
+
React.useEffect(() => {
|
|
30627
30612
|
if (values !== null && values !== void 0 && values.length) selectItem(values[0]);
|
|
30628
30613
|
}, [values]); // eslint-disable-line
|
|
30629
30614
|
|
|
30630
|
-
|
|
30631
|
-
|
|
30632
|
-
|
|
30633
|
-
|
|
30634
|
-
|
|
30635
|
-
|
|
30636
|
-
|
|
30615
|
+
const restructureItem = React.useCallback(item => {
|
|
30616
|
+
const matched = item.name || item.id;
|
|
30617
|
+
const textBeforeCursor = propValue.slice(0, selectionEnd);
|
|
30618
|
+
const triggerIndex = textBeforeCursor.lastIndexOf(currentTrigger);
|
|
30619
|
+
const editedPropValue = escapeRegExp(textBeforeCursor.slice(triggerIndex + 1));
|
|
30620
|
+
const parts = matched.split(new RegExp("(".concat(editedPropValue, ")"), 'gi'));
|
|
30621
|
+
const itemNameParts = {
|
|
30637
30622
|
match: editedPropValue,
|
|
30638
|
-
parts
|
|
30623
|
+
parts
|
|
30624
|
+
};
|
|
30625
|
+
return {
|
|
30626
|
+
...item,
|
|
30627
|
+
itemNameParts
|
|
30639
30628
|
};
|
|
30640
|
-
return _objectSpread$1(_objectSpread$1({}, item), {}, {
|
|
30641
|
-
itemNameParts: itemNameParts
|
|
30642
|
-
});
|
|
30643
30629
|
}, [propValue, selectionEnd, currentTrigger]);
|
|
30644
|
-
|
|
30645
|
-
return values.map(restructureItem);
|
|
30646
|
-
}, [values, restructureItem]);
|
|
30630
|
+
const restructuredValues = React.useMemo(() => values.map(restructureItem), [values, restructureItem]);
|
|
30647
30631
|
return /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
30648
30632
|
className: clsx('rta__list', className),
|
|
30649
30633
|
style: style
|
|
@@ -30652,31 +30636,29 @@ var List = function List(_ref) {
|
|
|
30652
30636
|
}, /*#__PURE__*/React__default["default"].createElement(SuggestionHeader, {
|
|
30653
30637
|
currentTrigger: currentTrigger,
|
|
30654
30638
|
value: propValue
|
|
30655
|
-
})), restructuredValues.map(
|
|
30656
|
-
|
|
30657
|
-
|
|
30658
|
-
|
|
30659
|
-
|
|
30660
|
-
|
|
30661
|
-
|
|
30662
|
-
|
|
30663
|
-
|
|
30664
|
-
|
|
30665
|
-
|
|
30666
|
-
|
|
30667
|
-
|
|
30668
|
-
|
|
30669
|
-
});
|
|
30670
|
-
}));
|
|
30639
|
+
})), restructuredValues.map((item, i) => /*#__PURE__*/React__default["default"].createElement(SuggestionItem, {
|
|
30640
|
+
className: itemClassName,
|
|
30641
|
+
component: component,
|
|
30642
|
+
item: item,
|
|
30643
|
+
key: getId(item),
|
|
30644
|
+
onClickHandler: handleClick,
|
|
30645
|
+
onSelectHandler: selectItem,
|
|
30646
|
+
ref: ref => {
|
|
30647
|
+
itemsRef[i] = ref;
|
|
30648
|
+
},
|
|
30649
|
+
selected: isSelected(item),
|
|
30650
|
+
style: itemStyle,
|
|
30651
|
+
value: propValue
|
|
30652
|
+
})));
|
|
30671
30653
|
};
|
|
30672
30654
|
|
|
30673
|
-
|
|
30655
|
+
const DEFAULT_CARET_POSITION = 'next';
|
|
30674
30656
|
function defaultScrollToItem(container, item) {
|
|
30675
30657
|
if (!item) return;
|
|
30676
|
-
|
|
30677
|
-
|
|
30678
|
-
|
|
30679
|
-
|
|
30658
|
+
const itemHeight = parseInt(getComputedStyle(item).getPropertyValue('height'), 10);
|
|
30659
|
+
const containerHight = parseInt(getComputedStyle(container).getPropertyValue('height'), 10) - itemHeight;
|
|
30660
|
+
const actualScrollTop = container.scrollTop;
|
|
30661
|
+
const itemOffsetTop = item.offsetTop;
|
|
30680
30662
|
if (itemOffsetTop < actualScrollTop + containerHight && actualScrollTop < itemOffsetTop) {
|
|
30681
30663
|
return;
|
|
30682
30664
|
}
|
|
@@ -30684,27 +30666,27 @@ function defaultScrollToItem(container, item) {
|
|
|
30684
30666
|
// eslint-disable-next-line
|
|
30685
30667
|
container.scrollTop = itemOffsetTop;
|
|
30686
30668
|
}
|
|
30687
|
-
|
|
30688
|
-
|
|
30689
|
-
|
|
30690
|
-
|
|
30691
|
-
|
|
30669
|
+
const errorMessage = message => console.error("RTA: dataProvider fails: ".concat(message, "\n \nCheck the documentation or create issue if you think it's bug. https://github.com/webscopeio/react-textarea-autocomplete/issues"));
|
|
30670
|
+
const triggerPropsCheck = _ref => {
|
|
30671
|
+
let {
|
|
30672
|
+
trigger
|
|
30673
|
+
} = _ref;
|
|
30692
30674
|
if (!trigger) return Error('Invalid prop trigger. Prop missing.');
|
|
30693
|
-
|
|
30694
|
-
for (
|
|
30695
|
-
|
|
30696
|
-
triggerChar = _triggers$i[0],
|
|
30697
|
-
settings = _triggers$i[1];
|
|
30675
|
+
const triggers = Object.entries(trigger);
|
|
30676
|
+
for (let i = 0; i < triggers.length; i += 1) {
|
|
30677
|
+
const [triggerChar, settings] = triggers[i];
|
|
30698
30678
|
if (typeof triggerChar !== 'string' || triggerChar.length !== 1) {
|
|
30699
30679
|
return Error('Invalid prop trigger. Keys of the object has to be string / one character.');
|
|
30700
30680
|
}
|
|
30701
30681
|
|
|
30702
30682
|
// $FlowFixMe
|
|
30703
|
-
|
|
30704
|
-
|
|
30705
|
-
|
|
30706
|
-
|
|
30707
|
-
|
|
30683
|
+
const triggerSetting = settings;
|
|
30684
|
+
const {
|
|
30685
|
+
callback,
|
|
30686
|
+
component,
|
|
30687
|
+
dataProvider,
|
|
30688
|
+
output
|
|
30689
|
+
} = triggerSetting;
|
|
30708
30690
|
if (!reactIs.isValidElementType(component)) {
|
|
30709
30691
|
return Error('Invalid prop trigger: component should be defined.');
|
|
30710
30692
|
}
|
|
@@ -30819,138 +30801,111 @@ var isSafari = function () {
|
|
|
30819
30801
|
return /^((?!chrome|android).)*safari/i.test(navigator.userAgent || '');
|
|
30820
30802
|
};
|
|
30821
30803
|
|
|
30822
|
-
|
|
30823
|
-
|
|
30824
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
30825
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
30826
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
30827
|
-
var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
30828
|
-
_inherits__default["default"](ReactTextareaAutocomplete, _React$Component);
|
|
30829
|
-
var _super = _createSuper(ReactTextareaAutocomplete);
|
|
30830
|
-
function ReactTextareaAutocomplete(_props) {
|
|
30804
|
+
class ReactTextareaAutocomplete extends React__default["default"].Component {
|
|
30805
|
+
constructor(_props) {
|
|
30831
30806
|
var _this;
|
|
30832
|
-
|
|
30833
|
-
_this =
|
|
30834
|
-
_defineProperty__default["default"](
|
|
30835
|
-
if (!
|
|
30807
|
+
super(_props);
|
|
30808
|
+
_this = this;
|
|
30809
|
+
_defineProperty__default["default"](this, "getSelectionPosition", () => {
|
|
30810
|
+
if (!this.textareaRef) return null;
|
|
30836
30811
|
return {
|
|
30837
|
-
selectionEnd:
|
|
30838
|
-
selectionStart:
|
|
30812
|
+
selectionEnd: this.textareaRef.selectionEnd,
|
|
30813
|
+
selectionStart: this.textareaRef.selectionStart
|
|
30839
30814
|
};
|
|
30840
30815
|
});
|
|
30841
|
-
_defineProperty__default["default"](
|
|
30842
|
-
if (!
|
|
30843
|
-
|
|
30844
|
-
selectionEnd
|
|
30845
|
-
selectionStart
|
|
30816
|
+
_defineProperty__default["default"](this, "getSelectedText", () => {
|
|
30817
|
+
if (!this.textareaRef) return null;
|
|
30818
|
+
const {
|
|
30819
|
+
selectionEnd,
|
|
30820
|
+
selectionStart
|
|
30821
|
+
} = this.textareaRef;
|
|
30846
30822
|
if (selectionStart === selectionEnd) return null;
|
|
30847
|
-
return
|
|
30823
|
+
return this.state.value.substr(selectionStart, selectionEnd - selectionStart);
|
|
30848
30824
|
});
|
|
30849
|
-
_defineProperty__default["default"](
|
|
30850
|
-
|
|
30825
|
+
_defineProperty__default["default"](this, "setCaretPosition", function () {
|
|
30826
|
+
let position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
30851
30827
|
if (!_this.textareaRef) return;
|
|
30852
30828
|
_this.textareaRef.focus();
|
|
30853
30829
|
_this.textareaRef.setSelectionRange(position, position);
|
|
30854
30830
|
});
|
|
30855
|
-
_defineProperty__default["default"](
|
|
30856
|
-
if (!
|
|
30857
|
-
return
|
|
30831
|
+
_defineProperty__default["default"](this, "getCaretPosition", () => {
|
|
30832
|
+
if (!this.textareaRef) return 0;
|
|
30833
|
+
return this.textareaRef.selectionEnd;
|
|
30858
30834
|
});
|
|
30859
|
-
_defineProperty__default["default"](
|
|
30860
|
-
|
|
30861
|
-
|
|
30862
|
-
|
|
30863
|
-
|
|
30864
|
-
shouldSubmit = _this$props$shouldSub === void 0 ? _this._defaultShouldSubmit : _this$props$shouldSub;
|
|
30835
|
+
_defineProperty__default["default"](this, "_defaultShouldSubmit", event => event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing);
|
|
30836
|
+
_defineProperty__default["default"](this, "_handleKeyDown", event => {
|
|
30837
|
+
const {
|
|
30838
|
+
shouldSubmit = this._defaultShouldSubmit
|
|
30839
|
+
} = this.props;
|
|
30865
30840
|
|
|
30866
30841
|
// prevent default behaviour when the selection list is rendered
|
|
30867
|
-
if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') &&
|
|
30868
|
-
if (shouldSubmit !== null && shouldSubmit !== void 0 && shouldSubmit(event)) return
|
|
30869
|
-
if (event.key === ' ') return
|
|
30870
|
-
if (event.key === 'Escape') return
|
|
30842
|
+
if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && this.dropdownRef) event.preventDefault();
|
|
30843
|
+
if (shouldSubmit !== null && shouldSubmit !== void 0 && shouldSubmit(event)) return this._onEnter(event);
|
|
30844
|
+
if (event.key === ' ') return this._onSpace(event);
|
|
30845
|
+
if (event.key === 'Escape') return this._closeAutocomplete();
|
|
30871
30846
|
});
|
|
30872
|
-
_defineProperty__default["default"](
|
|
30873
|
-
if (!
|
|
30874
|
-
|
|
30875
|
-
if (!trigger || !
|
|
30847
|
+
_defineProperty__default["default"](this, "_onEnter", event => {
|
|
30848
|
+
if (!this.textareaRef) return;
|
|
30849
|
+
const trigger = this.state.currentTrigger;
|
|
30850
|
+
if (!trigger || !this.state.data) {
|
|
30876
30851
|
// trigger a submit
|
|
30877
|
-
|
|
30878
|
-
if (
|
|
30879
|
-
|
|
30852
|
+
this._replaceWord();
|
|
30853
|
+
if (this.textareaRef) {
|
|
30854
|
+
this.textareaRef.selectionEnd = 0;
|
|
30880
30855
|
}
|
|
30881
|
-
|
|
30882
|
-
|
|
30856
|
+
this.props.handleSubmit(event);
|
|
30857
|
+
this._closeAutocomplete();
|
|
30883
30858
|
}
|
|
30884
30859
|
});
|
|
30885
|
-
_defineProperty__default["default"](
|
|
30886
|
-
if (!
|
|
30860
|
+
_defineProperty__default["default"](this, "_onSpace", () => {
|
|
30861
|
+
if (!this.props.replaceWord || !this.textareaRef) return;
|
|
30887
30862
|
|
|
30888
30863
|
// don't change characters if the element doesn't have focus
|
|
30889
|
-
|
|
30864
|
+
const hasFocus = this.textareaRef.matches(':focus');
|
|
30890
30865
|
if (!hasFocus) return;
|
|
30891
|
-
|
|
30866
|
+
this._replaceWord();
|
|
30892
30867
|
});
|
|
30893
|
-
_defineProperty__default["default"](
|
|
30894
|
-
|
|
30895
|
-
|
|
30896
|
-
|
|
30897
|
-
|
|
30898
|
-
|
|
30899
|
-
|
|
30900
|
-
|
|
30901
|
-
|
|
30902
|
-
|
|
30903
|
-
|
|
30904
|
-
|
|
30905
|
-
|
|
30906
|
-
|
|
30907
|
-
|
|
30908
|
-
|
|
30909
|
-
|
|
30910
|
-
|
|
30911
|
-
|
|
30912
|
-
|
|
30913
|
-
|
|
30914
|
-
|
|
30915
|
-
|
|
30916
|
-
|
|
30917
|
-
|
|
30918
|
-
|
|
30919
|
-
|
|
30920
|
-
|
|
30921
|
-
|
|
30922
|
-
|
|
30923
|
-
|
|
30924
|
-
|
|
30925
|
-
|
|
30926
|
-
|
|
30927
|
-
|
|
30928
|
-
|
|
30929
|
-
|
|
30930
|
-
|
|
30931
|
-
|
|
30932
|
-
});
|
|
30933
|
-
case 16:
|
|
30934
|
-
case "end":
|
|
30935
|
-
return _context.stop();
|
|
30936
|
-
}
|
|
30937
|
-
}
|
|
30938
|
-
}, _callee);
|
|
30939
|
-
})));
|
|
30940
|
-
_defineProperty__default["default"](_assertThisInitialized__default["default"](_this), "_onSelect", function (newToken) {
|
|
30941
|
-
var _this$props = _this.props,
|
|
30942
|
-
closeCommandsList = _this$props.closeCommandsList,
|
|
30943
|
-
closeMentionsList = _this$props.closeMentionsList,
|
|
30944
|
-
onChange = _this$props.onChange,
|
|
30945
|
-
showCommandsList = _this$props.showCommandsList,
|
|
30946
|
-
showMentionsList = _this$props.showMentionsList;
|
|
30947
|
-
var _this$state = _this.state,
|
|
30948
|
-
stateTrigger = _this$state.currentTrigger,
|
|
30949
|
-
selectionEnd = _this$state.selectionEnd,
|
|
30950
|
-
textareaValue = _this$state.value;
|
|
30951
|
-
var currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;
|
|
30868
|
+
_defineProperty__default["default"](this, "_replaceWord", async () => {
|
|
30869
|
+
const {
|
|
30870
|
+
value
|
|
30871
|
+
} = this.state;
|
|
30872
|
+
const lastWordRegex = /([^\s]+)(\s*)$/;
|
|
30873
|
+
const match = lastWordRegex.exec(value.slice(0, this.getCaretPosition()));
|
|
30874
|
+
const lastWord = match && match[1];
|
|
30875
|
+
if (!lastWord) return;
|
|
30876
|
+
const spaces = match[2];
|
|
30877
|
+
const newWord = await this.props.replaceWord(lastWord);
|
|
30878
|
+
if (newWord == null) return;
|
|
30879
|
+
const textBeforeWord = value.slice(0, this.getCaretPosition() - match[0].length);
|
|
30880
|
+
const textAfterCaret = value.slice(this.getCaretPosition(), -1);
|
|
30881
|
+
const newText = textBeforeWord + newWord + spaces + textAfterCaret;
|
|
30882
|
+
this.setState({
|
|
30883
|
+
value: newText
|
|
30884
|
+
}, () => {
|
|
30885
|
+
// fire onChange event after successful selection
|
|
30886
|
+
const e = new CustomEvent('change', {
|
|
30887
|
+
bubbles: true
|
|
30888
|
+
});
|
|
30889
|
+
this.textareaRef.dispatchEvent(e);
|
|
30890
|
+
if (this.props.onChange) this.props.onChange(e);
|
|
30891
|
+
});
|
|
30892
|
+
});
|
|
30893
|
+
_defineProperty__default["default"](this, "_onSelect", newToken => {
|
|
30894
|
+
const {
|
|
30895
|
+
closeCommandsList,
|
|
30896
|
+
closeMentionsList,
|
|
30897
|
+
onChange,
|
|
30898
|
+
showCommandsList,
|
|
30899
|
+
showMentionsList
|
|
30900
|
+
} = this.props;
|
|
30901
|
+
const {
|
|
30902
|
+
currentTrigger: stateTrigger,
|
|
30903
|
+
selectionEnd,
|
|
30904
|
+
value: textareaValue
|
|
30905
|
+
} = this.state;
|
|
30906
|
+
const currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;
|
|
30952
30907
|
if (!currentTrigger) return;
|
|
30953
|
-
|
|
30908
|
+
const computeCaretPosition = (position, token, startToken) => {
|
|
30954
30909
|
switch (position) {
|
|
30955
30910
|
case 'start':
|
|
30956
30911
|
return startToken;
|
|
@@ -30964,40 +30919,44 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
30964
30919
|
return position;
|
|
30965
30920
|
}
|
|
30966
30921
|
};
|
|
30967
|
-
|
|
30968
|
-
|
|
30922
|
+
const textToModify = showCommandsList ? '/' : showMentionsList ? '@' : textareaValue.slice(0, selectionEnd);
|
|
30923
|
+
const startOfTokenPosition = textToModify.lastIndexOf(currentTrigger);
|
|
30969
30924
|
|
|
30970
30925
|
// we add space after emoji is selected if a caret position is next
|
|
30971
|
-
|
|
30972
|
-
|
|
30973
|
-
|
|
30974
|
-
|
|
30926
|
+
const newTokenString = newToken.caretPosition === 'next' ? "".concat(newToken.text, " ") : newToken.text;
|
|
30927
|
+
const newCaretPosition = computeCaretPosition(newToken.caretPosition, newTokenString, startOfTokenPosition);
|
|
30928
|
+
const modifiedText = textToModify.substring(0, startOfTokenPosition) + newTokenString;
|
|
30929
|
+
const valueToReplace = textareaValue.replace(textToModify, modifiedText);
|
|
30975
30930
|
|
|
30976
30931
|
// set the new textarea value and after that set the caret back to its position
|
|
30977
|
-
|
|
30932
|
+
this.setState({
|
|
30978
30933
|
dataLoading: false,
|
|
30979
30934
|
value: valueToReplace
|
|
30980
|
-
},
|
|
30935
|
+
}, () => {
|
|
30981
30936
|
// fire onChange event after successful selection
|
|
30982
|
-
|
|
30937
|
+
const e = new CustomEvent('change', {
|
|
30983
30938
|
bubbles: true
|
|
30984
30939
|
});
|
|
30985
|
-
|
|
30940
|
+
this.textareaRef.dispatchEvent(e);
|
|
30986
30941
|
if (onChange) onChange(e);
|
|
30987
|
-
|
|
30942
|
+
this.setCaretPosition(newCaretPosition);
|
|
30988
30943
|
});
|
|
30989
|
-
|
|
30944
|
+
this._closeAutocomplete();
|
|
30990
30945
|
if (showCommandsList) closeCommandsList();
|
|
30991
30946
|
if (showMentionsList) closeMentionsList();
|
|
30992
30947
|
});
|
|
30993
|
-
_defineProperty__default["default"](
|
|
30994
|
-
|
|
30995
|
-
|
|
30996
|
-
|
|
30948
|
+
_defineProperty__default["default"](this, "_getItemOnSelect", paramTrigger => {
|
|
30949
|
+
const {
|
|
30950
|
+
currentTrigger: stateTrigger
|
|
30951
|
+
} = this.state;
|
|
30952
|
+
const triggerSettings = this._getCurrentTriggerSettings(paramTrigger);
|
|
30953
|
+
const currentTrigger = paramTrigger || stateTrigger;
|
|
30997
30954
|
if (!currentTrigger || !triggerSettings) return null;
|
|
30998
|
-
|
|
30955
|
+
const {
|
|
30956
|
+
callback
|
|
30957
|
+
} = triggerSettings;
|
|
30999
30958
|
if (!callback) return null;
|
|
31000
|
-
return
|
|
30959
|
+
return item => {
|
|
31001
30960
|
if (typeof callback !== 'function') {
|
|
31002
30961
|
throw new Error('Output functor is not defined! You have to define "output" function. https://github.com/webscopeio/react-textarea-autocomplete#trigger-type');
|
|
31003
30962
|
}
|
|
@@ -31007,20 +30966,23 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31007
30966
|
return null;
|
|
31008
30967
|
};
|
|
31009
30968
|
});
|
|
31010
|
-
_defineProperty__default["default"](
|
|
31011
|
-
|
|
31012
|
-
actualToken
|
|
31013
|
-
stateTrigger
|
|
31014
|
-
|
|
31015
|
-
|
|
30969
|
+
_defineProperty__default["default"](this, "_getTextToReplace", paramTrigger => {
|
|
30970
|
+
const {
|
|
30971
|
+
actualToken,
|
|
30972
|
+
currentTrigger: stateTrigger
|
|
30973
|
+
} = this.state;
|
|
30974
|
+
const triggerSettings = this._getCurrentTriggerSettings(paramTrigger);
|
|
30975
|
+
const currentTrigger = paramTrigger || stateTrigger;
|
|
31016
30976
|
if (!currentTrigger || !triggerSettings) return null;
|
|
31017
|
-
|
|
31018
|
-
|
|
31019
|
-
|
|
30977
|
+
const {
|
|
30978
|
+
output
|
|
30979
|
+
} = triggerSettings;
|
|
30980
|
+
return item => {
|
|
30981
|
+
if (typeof item === 'object' && (!output || typeof output !== 'function')) {
|
|
31020
30982
|
throw new Error('Output functor is not defined! If you are using items as object you have to define "output" function. https://github.com/webscopeio/react-textarea-autocomplete#trigger-type');
|
|
31021
30983
|
}
|
|
31022
30984
|
if (output) {
|
|
31023
|
-
|
|
30985
|
+
const textToReplace = output(item, currentTrigger);
|
|
31024
30986
|
if (!textToReplace || typeof textToReplace === 'number') {
|
|
31025
30987
|
throw new Error("Output functor should return string or object in shape {text: string, caretPosition: string | number}.\nGot \"".concat(String(textToReplace), "\". Check the implementation for trigger \"").concat(currentTrigger, "\" and its token \"").concat(actualToken, "\"\n\nSee https://github.com/webscopeio/react-textarea-autocomplete#trigger-type for more informations.\n"));
|
|
31026
30988
|
}
|
|
@@ -31047,31 +31009,36 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31047
31009
|
};
|
|
31048
31010
|
};
|
|
31049
31011
|
});
|
|
31050
|
-
_defineProperty__default["default"](
|
|
31051
|
-
|
|
31052
|
-
|
|
31012
|
+
_defineProperty__default["default"](this, "_getCurrentTriggerSettings", paramTrigger => {
|
|
31013
|
+
const {
|
|
31014
|
+
currentTrigger: stateTrigger
|
|
31015
|
+
} = this.state;
|
|
31016
|
+
const currentTrigger = paramTrigger || stateTrigger;
|
|
31053
31017
|
if (!currentTrigger) return null;
|
|
31054
|
-
return
|
|
31018
|
+
return this.props.trigger[currentTrigger];
|
|
31055
31019
|
});
|
|
31056
|
-
_defineProperty__default["default"](
|
|
31057
|
-
|
|
31058
|
-
actualToken
|
|
31059
|
-
currentTrigger
|
|
31060
|
-
|
|
31020
|
+
_defineProperty__default["default"](this, "_getValuesFromProvider", () => {
|
|
31021
|
+
const {
|
|
31022
|
+
actualToken,
|
|
31023
|
+
currentTrigger
|
|
31024
|
+
} = this.state;
|
|
31025
|
+
const triggerSettings = this._getCurrentTriggerSettings();
|
|
31061
31026
|
if (!currentTrigger || !triggerSettings) return;
|
|
31062
|
-
|
|
31063
|
-
|
|
31027
|
+
const {
|
|
31028
|
+
component,
|
|
31029
|
+
dataProvider
|
|
31030
|
+
} = triggerSettings;
|
|
31064
31031
|
if (typeof dataProvider !== 'function') {
|
|
31065
31032
|
throw new Error('Trigger provider has to be a function!');
|
|
31066
31033
|
}
|
|
31067
|
-
|
|
31034
|
+
this.setState({
|
|
31068
31035
|
dataLoading: true
|
|
31069
31036
|
});
|
|
31070
31037
|
|
|
31071
31038
|
// Modified: send the full text to support / style commands
|
|
31072
|
-
dataProvider(actualToken,
|
|
31039
|
+
dataProvider(actualToken, this.state.value, (data, token) => {
|
|
31073
31040
|
// Make sure that the result is still relevant for current query
|
|
31074
|
-
if (token !==
|
|
31041
|
+
if (token !== this.state.actualToken) return;
|
|
31075
31042
|
if (!Array.isArray(data)) {
|
|
31076
31043
|
throw new Error('Trigger provider has to provide an array!');
|
|
31077
31044
|
}
|
|
@@ -31080,30 +31047,31 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31080
31047
|
}
|
|
31081
31048
|
|
|
31082
31049
|
// throw away if we resolved old trigger
|
|
31083
|
-
if (currentTrigger !==
|
|
31050
|
+
if (currentTrigger !== this.state.currentTrigger) return;
|
|
31084
31051
|
|
|
31085
31052
|
// if we haven't resolved any data let's close the autocomplete
|
|
31086
31053
|
if (!data.length) {
|
|
31087
|
-
|
|
31054
|
+
this._closeAutocomplete();
|
|
31088
31055
|
return;
|
|
31089
31056
|
}
|
|
31090
|
-
|
|
31091
|
-
component
|
|
31092
|
-
data
|
|
31057
|
+
this.setState({
|
|
31058
|
+
component,
|
|
31059
|
+
data,
|
|
31093
31060
|
dataLoading: false
|
|
31094
31061
|
});
|
|
31095
31062
|
});
|
|
31096
31063
|
});
|
|
31097
|
-
_defineProperty__default["default"](
|
|
31098
|
-
|
|
31099
|
-
stateTrigger
|
|
31100
|
-
data
|
|
31101
|
-
|
|
31064
|
+
_defineProperty__default["default"](this, "_getSuggestions", paramTrigger => {
|
|
31065
|
+
const {
|
|
31066
|
+
currentTrigger: stateTrigger,
|
|
31067
|
+
data
|
|
31068
|
+
} = this.state;
|
|
31069
|
+
const currentTrigger = paramTrigger || stateTrigger;
|
|
31102
31070
|
if (!currentTrigger || !data || data && !data.length) return null;
|
|
31103
31071
|
return data;
|
|
31104
31072
|
});
|
|
31105
|
-
_defineProperty__default["default"](
|
|
31106
|
-
|
|
31073
|
+
_defineProperty__default["default"](this, "_closeAutocomplete", () => {
|
|
31074
|
+
this.setState({
|
|
31107
31075
|
currentTrigger: null,
|
|
31108
31076
|
data: null,
|
|
31109
31077
|
dataLoading: false,
|
|
@@ -31111,57 +31079,61 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31111
31079
|
top: null
|
|
31112
31080
|
});
|
|
31113
31081
|
});
|
|
31114
|
-
_defineProperty__default["default"](
|
|
31115
|
-
|
|
31116
|
-
|
|
31082
|
+
_defineProperty__default["default"](this, "_cleanUpProps", () => {
|
|
31083
|
+
const props = {
|
|
31084
|
+
...this.props
|
|
31085
|
+
};
|
|
31086
|
+
const notSafe = ['additionalTextareaProps', 'className', 'closeCommandsList', 'closeMentionsList', 'closeOnClickOutside', 'containerClassName', 'containerStyle', 'disableMentions', 'dropdownClassName', 'dropdownStyle', 'grow', 'handleSubmit', 'innerRef', 'itemClassName', 'itemStyle', 'listClassName', 'listStyle', 'loaderClassName', 'loaderStyle', 'loadingComponent', 'minChar', 'movePopupAsYouType', 'onCaretPositionChange', 'onChange', 'ref', 'replaceWord', 'scrollToItem', 'shouldSubmit', 'showCommandsList', 'showMentionsList', 'SuggestionItem', 'SuggestionList', 'trigger', 'value'];
|
|
31117
31087
|
|
|
31118
31088
|
// eslint-disable-next-line
|
|
31119
|
-
for (
|
|
31089
|
+
for (const prop in props) {
|
|
31120
31090
|
if (notSafe.includes(prop)) delete props[prop];
|
|
31121
31091
|
}
|
|
31122
31092
|
return props;
|
|
31123
31093
|
});
|
|
31124
|
-
_defineProperty__default["default"](
|
|
31094
|
+
_defineProperty__default["default"](this, "_isCommand", text => {
|
|
31125
31095
|
if (text[0] !== '/') return false;
|
|
31126
|
-
|
|
31096
|
+
const tokens = text.split(' ');
|
|
31127
31097
|
return tokens.length <= 1;
|
|
31128
31098
|
});
|
|
31129
|
-
_defineProperty__default["default"](
|
|
31130
|
-
|
|
31131
|
-
minChar
|
|
31132
|
-
movePopupAsYouType
|
|
31133
|
-
onCaretPositionChange
|
|
31134
|
-
onChange
|
|
31135
|
-
trigger
|
|
31136
|
-
|
|
31137
|
-
|
|
31138
|
-
|
|
31139
|
-
|
|
31140
|
-
|
|
31141
|
-
|
|
31142
|
-
|
|
31099
|
+
_defineProperty__default["default"](this, "_changeHandler", e => {
|
|
31100
|
+
const {
|
|
31101
|
+
minChar,
|
|
31102
|
+
movePopupAsYouType,
|
|
31103
|
+
onCaretPositionChange,
|
|
31104
|
+
onChange,
|
|
31105
|
+
trigger
|
|
31106
|
+
} = this.props;
|
|
31107
|
+
const {
|
|
31108
|
+
left,
|
|
31109
|
+
top
|
|
31110
|
+
} = this.state;
|
|
31111
|
+
const textarea = e.target;
|
|
31112
|
+
const {
|
|
31113
|
+
selectionEnd,
|
|
31114
|
+
selectionStart,
|
|
31115
|
+
value
|
|
31116
|
+
} = textarea;
|
|
31143
31117
|
if (onChange) {
|
|
31144
31118
|
e.persist();
|
|
31145
31119
|
onChange(e);
|
|
31146
31120
|
}
|
|
31147
|
-
if (onCaretPositionChange) onCaretPositionChange(
|
|
31148
|
-
|
|
31149
|
-
value
|
|
31121
|
+
if (onCaretPositionChange) onCaretPositionChange(this.getCaretPosition());
|
|
31122
|
+
this.setState({
|
|
31123
|
+
value
|
|
31150
31124
|
});
|
|
31151
|
-
|
|
31152
|
-
|
|
31153
|
-
if (
|
|
31125
|
+
let currentTrigger;
|
|
31126
|
+
let lastToken;
|
|
31127
|
+
if (this._isCommand(value)) {
|
|
31154
31128
|
currentTrigger = '/';
|
|
31155
31129
|
lastToken = value;
|
|
31156
31130
|
} else {
|
|
31157
|
-
|
|
31158
|
-
|
|
31159
|
-
|
|
31160
|
-
|
|
31131
|
+
const triggerTokens = Object.keys(trigger).join().replace('/', '');
|
|
31132
|
+
const triggerNorWhitespace = "[^\\s".concat(triggerTokens, "]*");
|
|
31133
|
+
const regex = new RegExp("(?!^|\\W)?[".concat(triggerTokens, "]").concat(triggerNorWhitespace, "\\s?").concat(triggerNorWhitespace, "$"), 'g');
|
|
31134
|
+
const tokenMatch = value.slice(0, selectionEnd).match(regex);
|
|
31161
31135
|
lastToken = tokenMatch && tokenMatch[tokenMatch.length - 1].trim();
|
|
31162
|
-
currentTrigger = lastToken && Object.keys(trigger).find(
|
|
31163
|
-
return a === lastToken[0];
|
|
31164
|
-
}) || null;
|
|
31136
|
+
currentTrigger = lastToken && Object.keys(trigger).find(a => a === lastToken[0]) || null;
|
|
31165
31137
|
}
|
|
31166
31138
|
|
|
31167
31139
|
/*
|
|
@@ -31169,132 +31141,138 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31169
31141
|
the autocomplete
|
|
31170
31142
|
*/
|
|
31171
31143
|
if (!lastToken || lastToken.length <= minChar) {
|
|
31172
|
-
|
|
31144
|
+
this._closeAutocomplete();
|
|
31173
31145
|
return;
|
|
31174
31146
|
}
|
|
31175
|
-
|
|
31147
|
+
const actualToken = lastToken.slice(1);
|
|
31176
31148
|
|
|
31177
31149
|
// if trigger is not configured step out from the function, otherwise proceed
|
|
31178
31150
|
if (!currentTrigger) return;
|
|
31179
31151
|
if (movePopupAsYouType || top === null && left === null ||
|
|
31180
31152
|
// if we have single char - trigger it means we want to re-position the autocomplete
|
|
31181
31153
|
lastToken.length === 1) {
|
|
31182
|
-
|
|
31183
|
-
newLeft
|
|
31184
|
-
newTop
|
|
31185
|
-
|
|
31154
|
+
const {
|
|
31155
|
+
left: newLeft,
|
|
31156
|
+
top: newTop
|
|
31157
|
+
} = getCaretCoordinates__default["default"](textarea, selectionEnd);
|
|
31158
|
+
this.setState({
|
|
31186
31159
|
// make position relative to textarea
|
|
31187
31160
|
left: newLeft,
|
|
31188
|
-
top: newTop -
|
|
31161
|
+
top: newTop - this.textareaRef.scrollTop || 0
|
|
31189
31162
|
});
|
|
31190
31163
|
}
|
|
31191
|
-
|
|
31192
|
-
actualToken
|
|
31193
|
-
currentTrigger
|
|
31194
|
-
selectionEnd
|
|
31195
|
-
selectionStart
|
|
31196
|
-
},
|
|
31164
|
+
this.setState({
|
|
31165
|
+
actualToken,
|
|
31166
|
+
currentTrigger,
|
|
31167
|
+
selectionEnd,
|
|
31168
|
+
selectionStart
|
|
31169
|
+
}, () => {
|
|
31197
31170
|
try {
|
|
31198
|
-
|
|
31171
|
+
this._getValuesFromProvider();
|
|
31199
31172
|
} catch (err) {
|
|
31200
31173
|
errorMessage(err.message);
|
|
31201
31174
|
}
|
|
31202
31175
|
});
|
|
31203
31176
|
});
|
|
31204
|
-
_defineProperty__default["default"](
|
|
31205
|
-
|
|
31206
|
-
onCaretPositionChange
|
|
31207
|
-
onSelect
|
|
31208
|
-
|
|
31177
|
+
_defineProperty__default["default"](this, "_selectHandler", e => {
|
|
31178
|
+
const {
|
|
31179
|
+
onCaretPositionChange,
|
|
31180
|
+
onSelect
|
|
31181
|
+
} = this.props;
|
|
31182
|
+
if (onCaretPositionChange) onCaretPositionChange(this.getCaretPosition());
|
|
31209
31183
|
if (onSelect) {
|
|
31210
31184
|
e.persist();
|
|
31211
31185
|
onSelect(e);
|
|
31212
31186
|
}
|
|
31213
31187
|
});
|
|
31214
|
-
_defineProperty__default["default"](
|
|
31215
|
-
|
|
31216
|
-
closeOnClickOutside
|
|
31217
|
-
onBlur
|
|
31188
|
+
_defineProperty__default["default"](this, "_onClickAndBlurHandler", e => {
|
|
31189
|
+
const {
|
|
31190
|
+
closeOnClickOutside,
|
|
31191
|
+
onBlur
|
|
31192
|
+
} = this.props;
|
|
31218
31193
|
|
|
31219
31194
|
// If this is a click: e.target is the textarea, and e.relatedTarget is the thing
|
|
31220
31195
|
// that was actually clicked. If we clicked inside the auto-select dropdown, then
|
|
31221
31196
|
// that's not a blur, from the auto-select point of view, so then do nothing.
|
|
31222
|
-
|
|
31197
|
+
const el = e.relatedTarget;
|
|
31223
31198
|
// If this is a blur event in Safari, then relatedTarget is never a dropdown item, but a common parent
|
|
31224
31199
|
// of textarea and dropdown container. That means that dropdownRef will not contain its parent and the
|
|
31225
31200
|
// autocomplete will be closed before onclick handler can be invoked selecting an item.
|
|
31226
31201
|
// It seems that Safari has different implementation determining the relatedTarget node than Chrome and Firefox.
|
|
31227
31202
|
// Therefore, if focused away in Safari, the dropdown will be kept rendered until pressing Esc or selecting and item from it.
|
|
31228
|
-
|
|
31229
|
-
if (
|
|
31203
|
+
const focusedAwayInSafari = isSafari() && e.type === 'blur';
|
|
31204
|
+
if (this.dropdownRef && el instanceof Node && this.dropdownRef.contains(el) || focusedAwayInSafari) {
|
|
31230
31205
|
return;
|
|
31231
31206
|
}
|
|
31232
|
-
if (closeOnClickOutside)
|
|
31207
|
+
if (closeOnClickOutside) this._closeAutocomplete();
|
|
31233
31208
|
if (onBlur) {
|
|
31234
31209
|
e.persist();
|
|
31235
31210
|
onBlur(e);
|
|
31236
31211
|
}
|
|
31237
31212
|
});
|
|
31238
|
-
_defineProperty__default["default"](
|
|
31239
|
-
|
|
31240
|
-
|
|
31241
|
-
|
|
31242
|
-
|
|
31213
|
+
_defineProperty__default["default"](this, "_onScrollHandler", () => this._closeAutocomplete());
|
|
31214
|
+
_defineProperty__default["default"](this, "_dropdownScroll", item => {
|
|
31215
|
+
const {
|
|
31216
|
+
scrollToItem
|
|
31217
|
+
} = this.props;
|
|
31243
31218
|
if (!scrollToItem) return;
|
|
31244
31219
|
if (scrollToItem === true) {
|
|
31245
|
-
defaultScrollToItem(
|
|
31220
|
+
defaultScrollToItem(this.dropdownRef, item);
|
|
31246
31221
|
return;
|
|
31247
31222
|
}
|
|
31248
31223
|
if (typeof scrollToItem !== 'function' || scrollToItem.length !== 2) {
|
|
31249
31224
|
throw new Error('`scrollToItem` has to be boolean (true for default implementation) or function with two parameters: container, item.');
|
|
31250
31225
|
}
|
|
31251
|
-
scrollToItem(
|
|
31226
|
+
scrollToItem(this.dropdownRef, item);
|
|
31252
31227
|
});
|
|
31253
|
-
_defineProperty__default["default"](
|
|
31254
|
-
|
|
31255
|
-
showCommandsList
|
|
31256
|
-
showMentionsList
|
|
31257
|
-
trigger
|
|
31258
|
-
|
|
31259
|
-
|
|
31260
|
-
|
|
31261
|
-
|
|
31262
|
-
|
|
31263
|
-
|
|
31264
|
-
|
|
31265
|
-
|
|
31266
|
-
|
|
31267
|
-
|
|
31268
|
-
|
|
31228
|
+
_defineProperty__default["default"](this, "getTriggerProps", () => {
|
|
31229
|
+
const {
|
|
31230
|
+
showCommandsList,
|
|
31231
|
+
showMentionsList,
|
|
31232
|
+
trigger
|
|
31233
|
+
} = this.props;
|
|
31234
|
+
const {
|
|
31235
|
+
component,
|
|
31236
|
+
currentTrigger,
|
|
31237
|
+
selectionEnd,
|
|
31238
|
+
value
|
|
31239
|
+
} = this.state;
|
|
31240
|
+
const selectedItem = this._getItemOnSelect();
|
|
31241
|
+
const suggestionData = this._getSuggestions();
|
|
31242
|
+
const textToReplace = this._getTextToReplace();
|
|
31243
|
+
const triggerProps = {
|
|
31244
|
+
component,
|
|
31245
|
+
currentTrigger,
|
|
31269
31246
|
getSelectedItem: selectedItem,
|
|
31270
31247
|
getTextToReplace: textToReplace,
|
|
31271
|
-
selectionEnd
|
|
31272
|
-
value
|
|
31248
|
+
selectionEnd,
|
|
31249
|
+
value,
|
|
31273
31250
|
values: suggestionData
|
|
31274
31251
|
};
|
|
31275
31252
|
if (showCommandsList && trigger['/'] || showMentionsList && trigger['@']) {
|
|
31276
|
-
|
|
31277
|
-
|
|
31278
|
-
getCommands === null || getCommands === void 0 ? void 0 : getCommands('', showCommandsList ? '/' : '@',
|
|
31253
|
+
let currentCommands;
|
|
31254
|
+
const getCommands = trigger[showCommandsList ? '/' : '@'].dataProvider;
|
|
31255
|
+
getCommands === null || getCommands === void 0 ? void 0 : getCommands('', showCommandsList ? '/' : '@', data => {
|
|
31279
31256
|
currentCommands = data;
|
|
31280
31257
|
});
|
|
31281
31258
|
triggerProps.component = showCommandsList ? CommandItem : UserItem;
|
|
31282
31259
|
triggerProps.currentTrigger = showCommandsList ? '/' : '@';
|
|
31283
|
-
triggerProps.getTextToReplace =
|
|
31284
|
-
triggerProps.getSelectedItem =
|
|
31260
|
+
triggerProps.getTextToReplace = this._getTextToReplace(showCommandsList ? '/' : '@');
|
|
31261
|
+
triggerProps.getSelectedItem = this._getItemOnSelect(showCommandsList ? '/' : '@');
|
|
31285
31262
|
triggerProps.selectionEnd = 1;
|
|
31286
31263
|
triggerProps.value = showCommandsList ? '/' : '@';
|
|
31287
31264
|
triggerProps.values = currentCommands;
|
|
31288
31265
|
}
|
|
31289
31266
|
return triggerProps;
|
|
31290
31267
|
});
|
|
31291
|
-
_defineProperty__default["default"](
|
|
31292
|
-
|
|
31268
|
+
_defineProperty__default["default"](this, "setDropdownRef", element => {
|
|
31269
|
+
this.dropdownRef = element;
|
|
31293
31270
|
});
|
|
31294
|
-
|
|
31295
|
-
loadingComponent
|
|
31296
|
-
_trigger
|
|
31297
|
-
_value
|
|
31271
|
+
const {
|
|
31272
|
+
loadingComponent,
|
|
31273
|
+
trigger: _trigger,
|
|
31274
|
+
value: _value
|
|
31275
|
+
} = this.props;
|
|
31298
31276
|
|
|
31299
31277
|
// TODO: it would be better to have the parent control state...
|
|
31300
31278
|
// if (value) this.state.value = value;
|
|
@@ -31305,7 +31283,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31305
31283
|
if (!_trigger) {
|
|
31306
31284
|
throw new Error('RTA: trigger is not defined');
|
|
31307
31285
|
}
|
|
31308
|
-
|
|
31286
|
+
this.state = {
|
|
31309
31287
|
actualToken: '',
|
|
31310
31288
|
component: null,
|
|
31311
31289
|
currentTrigger: null,
|
|
@@ -31317,140 +31295,148 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
31317
31295
|
top: null,
|
|
31318
31296
|
value: _value || ''
|
|
31319
31297
|
};
|
|
31320
|
-
return _this;
|
|
31321
31298
|
}
|
|
31322
31299
|
|
|
31323
31300
|
// FIXME: unused method
|
|
31324
|
-
|
|
31325
|
-
|
|
31326
|
-
|
|
31327
|
-
|
|
31328
|
-
|
|
31329
|
-
|
|
31330
|
-
|
|
31331
|
-
|
|
31332
|
-
|
|
31333
|
-
|
|
31334
|
-
|
|
31335
|
-
|
|
31336
|
-
|
|
31337
|
-
|
|
31338
|
-
|
|
31339
|
-
|
|
31340
|
-
|
|
31341
|
-
|
|
31342
|
-
|
|
31343
|
-
|
|
31344
|
-
|
|
31345
|
-
dropdownScroll: this._dropdownScroll,
|
|
31346
|
-
itemClassName: clsx('str-chat__suggestion-list-item', itemClassName),
|
|
31347
|
-
itemStyle: itemStyle,
|
|
31348
|
-
onSelect: this._onSelect,
|
|
31349
|
-
SuggestionItem: SuggestionItem
|
|
31350
|
-
}, triggerProps)));
|
|
31351
|
-
}
|
|
31301
|
+
|
|
31302
|
+
// FIXME: unused method
|
|
31303
|
+
|
|
31304
|
+
/**
|
|
31305
|
+
* isComposing prevents double submissions in Korean and other languages.
|
|
31306
|
+
* starting point for a read:
|
|
31307
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/isComposing
|
|
31308
|
+
* In the long term, the fix should happen by handling keypress, but changing this has unknown implications.
|
|
31309
|
+
* @param event React.KeyboardEvent
|
|
31310
|
+
*/
|
|
31311
|
+
|
|
31312
|
+
/**
|
|
31313
|
+
* setup to emulate the UNSAFE_componentWillReceiveProps
|
|
31314
|
+
*/
|
|
31315
|
+
static getDerivedStateFromProps(props, state) {
|
|
31316
|
+
if (props.value !== state.propsValue || !state.value) {
|
|
31317
|
+
return {
|
|
31318
|
+
propsValue: props.value,
|
|
31319
|
+
value: props.value
|
|
31320
|
+
};
|
|
31321
|
+
} else {
|
|
31352
31322
|
return null;
|
|
31353
31323
|
}
|
|
31354
|
-
}
|
|
31355
|
-
|
|
31356
|
-
|
|
31357
|
-
|
|
31358
|
-
var _this$props8 = this.props,
|
|
31359
|
-
className = _this$props8.className,
|
|
31360
|
-
containerClassName = _this$props8.containerClassName,
|
|
31361
|
-
containerStyle = _this$props8.containerStyle,
|
|
31362
|
-
style = _this$props8.style;
|
|
31363
|
-
var _ref2 = this.props.additionalTextareaProps || {},
|
|
31364
|
-
_onBlur = _ref2.onBlur,
|
|
31365
|
-
_onChange = _ref2.onChange,
|
|
31366
|
-
_onClick = _ref2.onClick,
|
|
31367
|
-
_onFocus = _ref2.onFocus,
|
|
31368
|
-
_onKeyDown = _ref2.onKeyDown,
|
|
31369
|
-
_onScroll = _ref2.onScroll,
|
|
31370
|
-
_onSelect = _ref2.onSelect,
|
|
31371
|
-
restAdditionalTextareaProps = _objectWithoutProperties__default["default"](_ref2, _excluded);
|
|
31372
|
-
var maxRows = this.props.maxRows;
|
|
31373
|
-
var _this$state7 = this.state,
|
|
31374
|
-
dataLoading = _this$state7.dataLoading,
|
|
31375
|
-
value = _this$state7.value;
|
|
31376
|
-
if (!this.props.grow) maxRows = 1;
|
|
31377
|
-
|
|
31378
|
-
// By setting defaultValue to undefined, avoid error:
|
|
31379
|
-
// ForwardRef(TextareaAutosize) contains a textarea with both value and defaultValue props.
|
|
31380
|
-
// Textarea elements must be either controlled or uncontrolled
|
|
31324
|
+
}
|
|
31325
|
+
/**
|
|
31326
|
+
* Close autocomplete, also clean up trigger (to avoid slow promises)
|
|
31327
|
+
*/
|
|
31381
31328
|
|
|
31329
|
+
// The textarea itself is outside the auto-select dropdown.
|
|
31330
|
+
|
|
31331
|
+
renderSuggestionListContainer() {
|
|
31332
|
+
const {
|
|
31333
|
+
disableMentions,
|
|
31334
|
+
dropdownClassName,
|
|
31335
|
+
dropdownStyle,
|
|
31336
|
+
itemClassName,
|
|
31337
|
+
itemStyle,
|
|
31338
|
+
listClassName,
|
|
31339
|
+
SuggestionItem,
|
|
31340
|
+
SuggestionList = List
|
|
31341
|
+
} = this.props;
|
|
31342
|
+
const triggerProps = this.getTriggerProps();
|
|
31343
|
+
if (triggerProps.values && triggerProps.currentTrigger && !(disableMentions && triggerProps.currentTrigger === '@')) {
|
|
31382
31344
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
31383
|
-
className: clsx('
|
|
31384
|
-
|
|
31385
|
-
|
|
31386
|
-
|
|
31387
|
-
|
|
31388
|
-
|
|
31389
|
-
|
|
31390
|
-
|
|
31391
|
-
|
|
31392
|
-
|
|
31393
|
-
|
|
31394
|
-
_onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
|
|
31395
|
-
},
|
|
31396
|
-
onChange: function onChange(e) {
|
|
31397
|
-
_this2._changeHandler(e);
|
|
31398
|
-
_onChange === null || _onChange === void 0 ? void 0 : _onChange(e);
|
|
31399
|
-
},
|
|
31400
|
-
onClick: function onClick(e) {
|
|
31401
|
-
_this2._onClickAndBlurHandler(e);
|
|
31402
|
-
_onClick === null || _onClick === void 0 ? void 0 : _onClick(e);
|
|
31403
|
-
},
|
|
31404
|
-
onFocus: function onFocus(e) {
|
|
31405
|
-
var _this2$props$onFocus, _this2$props;
|
|
31406
|
-
(_this2$props$onFocus = (_this2$props = _this2.props).onFocus) === null || _this2$props$onFocus === void 0 ? void 0 : _this2$props$onFocus.call(_this2$props, e);
|
|
31407
|
-
_onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
|
|
31408
|
-
},
|
|
31409
|
-
onKeyDown: function onKeyDown(e) {
|
|
31410
|
-
_this2._handleKeyDown(e);
|
|
31411
|
-
_onKeyDown === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(e);
|
|
31412
|
-
},
|
|
31413
|
-
onScroll: function onScroll(e) {
|
|
31414
|
-
_this2._onScrollHandler(e);
|
|
31415
|
-
_onScroll === null || _onScroll === void 0 ? void 0 : _onScroll(e);
|
|
31416
|
-
},
|
|
31417
|
-
onSelect: function onSelect(e) {
|
|
31418
|
-
_this2._selectHandler(e);
|
|
31419
|
-
_onSelect === null || _onSelect === void 0 ? void 0 : _onSelect(e);
|
|
31420
|
-
},
|
|
31421
|
-
ref: function ref(_ref3) {
|
|
31422
|
-
var _this2$props2;
|
|
31423
|
-
(_this2$props2 = _this2.props) === null || _this2$props2 === void 0 ? void 0 : _this2$props2.innerRef(_ref3);
|
|
31424
|
-
_this2.textareaRef = _ref3;
|
|
31425
|
-
},
|
|
31426
|
-
style: style,
|
|
31427
|
-
value: value
|
|
31428
|
-
}, restAdditionalTextareaProps, {
|
|
31429
|
-
defaultValue: undefined
|
|
31430
|
-
})));
|
|
31431
|
-
}
|
|
31432
|
-
}], [{
|
|
31433
|
-
key: "getDerivedStateFromProps",
|
|
31434
|
-
value:
|
|
31435
|
-
/**
|
|
31436
|
-
* setup to emulate the UNSAFE_componentWillReceiveProps
|
|
31437
|
-
*/
|
|
31438
|
-
function getDerivedStateFromProps(props, state) {
|
|
31439
|
-
if (props.value !== state.propsValue || !state.value) {
|
|
31440
|
-
return {
|
|
31441
|
-
propsValue: props.value,
|
|
31442
|
-
value: props.value
|
|
31443
|
-
};
|
|
31444
|
-
} else {
|
|
31445
|
-
return null;
|
|
31446
|
-
}
|
|
31345
|
+
className: clsx('rta__autocomplete', 'str-chat__suggestion-list-container', dropdownClassName),
|
|
31346
|
+
ref: this.setDropdownRef,
|
|
31347
|
+
style: dropdownStyle
|
|
31348
|
+
}, /*#__PURE__*/React__default["default"].createElement(SuggestionList, _extends__default["default"]({
|
|
31349
|
+
className: clsx('str-chat__suggestion-list', listClassName),
|
|
31350
|
+
dropdownScroll: this._dropdownScroll,
|
|
31351
|
+
itemClassName: clsx('str-chat__suggestion-list-item', itemClassName),
|
|
31352
|
+
itemStyle: itemStyle,
|
|
31353
|
+
onSelect: this._onSelect,
|
|
31354
|
+
SuggestionItem: SuggestionItem
|
|
31355
|
+
}, triggerProps)));
|
|
31447
31356
|
}
|
|
31448
|
-
|
|
31449
|
-
|
|
31450
|
-
|
|
31451
|
-
|
|
31452
|
-
|
|
31453
|
-
|
|
31357
|
+
return null;
|
|
31358
|
+
}
|
|
31359
|
+
render() {
|
|
31360
|
+
const {
|
|
31361
|
+
className,
|
|
31362
|
+
containerClassName,
|
|
31363
|
+
containerStyle,
|
|
31364
|
+
style
|
|
31365
|
+
} = this.props;
|
|
31366
|
+
const {
|
|
31367
|
+
onBlur,
|
|
31368
|
+
onChange,
|
|
31369
|
+
onClick,
|
|
31370
|
+
onFocus,
|
|
31371
|
+
onKeyDown,
|
|
31372
|
+
onScroll,
|
|
31373
|
+
onSelect,
|
|
31374
|
+
...restAdditionalTextareaProps
|
|
31375
|
+
} = this.props.additionalTextareaProps || {};
|
|
31376
|
+
let {
|
|
31377
|
+
maxRows
|
|
31378
|
+
} = this.props;
|
|
31379
|
+
const {
|
|
31380
|
+
dataLoading,
|
|
31381
|
+
value
|
|
31382
|
+
} = this.state;
|
|
31383
|
+
if (!this.props.grow) maxRows = 1;
|
|
31384
|
+
|
|
31385
|
+
// By setting defaultValue to undefined, avoid error:
|
|
31386
|
+
// ForwardRef(TextareaAutosize) contains a textarea with both value and defaultValue props.
|
|
31387
|
+
// Textarea elements must be either controlled or uncontrolled
|
|
31388
|
+
|
|
31389
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
31390
|
+
className: clsx('rta', containerClassName, {
|
|
31391
|
+
'rta--loading': dataLoading
|
|
31392
|
+
}),
|
|
31393
|
+
style: containerStyle
|
|
31394
|
+
}, this.renderSuggestionListContainer(), /*#__PURE__*/React__default["default"].createElement(Textarea__default["default"], _extends__default["default"]({
|
|
31395
|
+
"data-testid": "message-input"
|
|
31396
|
+
}, this._cleanUpProps(), {
|
|
31397
|
+
className: clsx('rta__textarea', className),
|
|
31398
|
+
maxRows: maxRows,
|
|
31399
|
+
onBlur: e => {
|
|
31400
|
+
this._onClickAndBlurHandler(e);
|
|
31401
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
|
31402
|
+
},
|
|
31403
|
+
onChange: e => {
|
|
31404
|
+
this._changeHandler(e);
|
|
31405
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(e);
|
|
31406
|
+
},
|
|
31407
|
+
onClick: e => {
|
|
31408
|
+
this._onClickAndBlurHandler(e);
|
|
31409
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
31410
|
+
},
|
|
31411
|
+
onFocus: e => {
|
|
31412
|
+
var _this$props$onFocus, _this$props;
|
|
31413
|
+
(_this$props$onFocus = (_this$props = this.props).onFocus) === null || _this$props$onFocus === void 0 ? void 0 : _this$props$onFocus.call(_this$props, e);
|
|
31414
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
|
|
31415
|
+
},
|
|
31416
|
+
onKeyDown: e => {
|
|
31417
|
+
this._handleKeyDown(e);
|
|
31418
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
31419
|
+
},
|
|
31420
|
+
onScroll: e => {
|
|
31421
|
+
this._onScrollHandler(e);
|
|
31422
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
|
|
31423
|
+
},
|
|
31424
|
+
onSelect: e => {
|
|
31425
|
+
this._selectHandler(e);
|
|
31426
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(e);
|
|
31427
|
+
},
|
|
31428
|
+
ref: ref => {
|
|
31429
|
+
var _this$props2;
|
|
31430
|
+
(_this$props2 = this.props) === null || _this$props2 === void 0 ? void 0 : _this$props2.innerRef(ref);
|
|
31431
|
+
this.textareaRef = ref;
|
|
31432
|
+
},
|
|
31433
|
+
style: style,
|
|
31434
|
+
value: value
|
|
31435
|
+
}, restAdditionalTextareaProps, {
|
|
31436
|
+
defaultValue: undefined
|
|
31437
|
+
})));
|
|
31438
|
+
}
|
|
31439
|
+
}
|
|
31454
31440
|
_defineProperty__default["default"](ReactTextareaAutocomplete, "defaultProps", {
|
|
31455
31441
|
closeOnClickOutside: true,
|
|
31456
31442
|
maxRows: 10,
|
|
@@ -32574,25 +32560,29 @@ var AttachmentPreviewList = function () {
|
|
|
32574
32560
|
var ImagePreviewItem = function (_a) {
|
|
32575
32561
|
var _b;
|
|
32576
32562
|
var id = _a.id;
|
|
32577
|
-
var _c = icons.
|
|
32563
|
+
var _c = icons.useComponentContext('ImagePreviewItem').BaseImage, BaseImage$1 = _c === void 0 ? BaseImage : _c;
|
|
32564
|
+
var _d = icons.useMessageInputContext('ImagePreviewItem'), imageUploads = _d.imageUploads, removeImage = _d.removeImage, uploadImage = _d.uploadImage;
|
|
32565
|
+
var _e = React.useState(false), previewError = _e[0], setPreviewError = _e[1];
|
|
32578
32566
|
var handleRemove = React.useCallback(function (e) {
|
|
32579
32567
|
e.stopPropagation();
|
|
32580
32568
|
removeImage(id);
|
|
32581
32569
|
}, [removeImage, id]);
|
|
32582
32570
|
var handleRetry = React.useCallback(function () { return uploadImage(id); }, [uploadImage, id]);
|
|
32571
|
+
var handleLoadError = React.useCallback(function () { return setPreviewError(true); }, []);
|
|
32583
32572
|
var image = imageUploads[id];
|
|
32584
|
-
var state = useFileState(image);
|
|
32585
32573
|
// do not display scraped attachments
|
|
32586
32574
|
if (!image || image.og_scrape_url)
|
|
32587
32575
|
return null;
|
|
32588
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image',
|
|
32589
|
-
|
|
32576
|
+
return (React__default["default"].createElement("div", { className: clsx('str-chat__attachment-preview-image', {
|
|
32577
|
+
'str-chat__attachment-preview-image--error': previewError,
|
|
32578
|
+
}), "data-testid": 'attachment-preview-image' },
|
|
32579
|
+
React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'image-preview-item-delete-button', disabled: image.state === 'uploading', onClick: handleRemove },
|
|
32590
32580
|
React__default["default"].createElement(icons.CloseIcon, null)),
|
|
32591
|
-
state
|
|
32581
|
+
image.state === 'failed' && (React__default["default"].createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-image', "data-testid": 'image-preview-item-retry-button', onClick: handleRetry },
|
|
32592
32582
|
React__default["default"].createElement(icons.RetryIcon, null))),
|
|
32593
|
-
state
|
|
32583
|
+
image.state === 'uploading' && (React__default["default"].createElement("div", { className: 'str-chat__attachment-preview-image-loading' },
|
|
32594
32584
|
React__default["default"].createElement(icons.LoadingIndicatorIcon, { size: 17 }))),
|
|
32595
|
-
(image.previewUri || image.url) && (React__default["default"].createElement(
|
|
32585
|
+
(image.previewUri || image.url) && (React__default["default"].createElement(BaseImage$1, { alt: image.file.name, className: 'str-chat__attachment-preview-thumbnail', onError: handleLoadError, src: (_b = image.previewUri) !== null && _b !== void 0 ? _b : image.url, title: image.file.name }))));
|
|
32596
32586
|
};
|
|
32597
32587
|
var FilePreviewItem = function (_a) {
|
|
32598
32588
|
var id = _a.id;
|
|
@@ -35834,6 +35824,7 @@ var ChannelInner = function (props) {
|
|
|
35834
35824
|
AutocompleteSuggestionItem: props.AutocompleteSuggestionItem,
|
|
35835
35825
|
AutocompleteSuggestionList: props.AutocompleteSuggestionList,
|
|
35836
35826
|
Avatar: props.Avatar,
|
|
35827
|
+
BaseImage: props.BaseImage,
|
|
35837
35828
|
CooldownTimer: props.CooldownTimer,
|
|
35838
35829
|
DateSeparator: props.DateSeparator,
|
|
35839
35830
|
EditMessageInput: props.EditMessageInput,
|
|
@@ -36360,7 +36351,8 @@ var RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000;
|
|
|
36360
36351
|
var MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000;
|
|
36361
36352
|
var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs) {
|
|
36362
36353
|
if (recoveryThrottleIntervalMs === void 0) { recoveryThrottleIntervalMs = RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS; }
|
|
36363
|
-
var _a = icons.useChatContext('usePaginatedChannels')
|
|
36354
|
+
var _a = icons.useChatContext('usePaginatedChannels').channelsQueryState, error = _a.error, setError = _a.setError, setQueryInProgress = _a.setQueryInProgress;
|
|
36355
|
+
var _b = React.useState([]), channels = _b[0], setChannels = _b[1];
|
|
36364
36356
|
var _c = React.useState(true), hasNextPage = _c[0], setHasNextPage = _c[1];
|
|
36365
36357
|
var lastRecoveryTimestamp = React.useRef();
|
|
36366
36358
|
var recoveryThrottleInterval = recoveryThrottleIntervalMs < MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS
|
|
@@ -36440,7 +36432,6 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
36440
36432
|
React.useEffect(function () {
|
|
36441
36433
|
queryChannels('reload');
|
|
36442
36434
|
}, [filterString, sortString]);
|
|
36443
|
-
// FIXME: state refactor (breaking change) is needed - do not forward `channels` and `setChannel`
|
|
36444
36435
|
return {
|
|
36445
36436
|
channels: channels,
|
|
36446
36437
|
hasNextPage: hasNextPage,
|
|
@@ -37182,7 +37173,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
37182
37173
|
'str-chat-channel-list--open': navOpen,
|
|
37183
37174
|
});
|
|
37184
37175
|
var showChannelList = !searchActive || (additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.popupResults);
|
|
37185
|
-
return (React__default["default"].createElement(
|
|
37176
|
+
return (React__default["default"].createElement(icons.ChannelListContextProvider, { value: { channels: channels, setChannels: setChannels } },
|
|
37186
37177
|
React__default["default"].createElement("div", { className: className, ref: channelListRef },
|
|
37187
37178
|
showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, icons.__assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
|
|
37188
37179
|
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: !!channelsQueryState.queryInProgress &&
|
|
@@ -37195,7 +37186,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
37195
37186
|
*/
|
|
37196
37187
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
37197
37188
|
|
|
37198
|
-
var version = '11.
|
|
37189
|
+
var version = '11.1.1';
|
|
37199
37190
|
|
|
37200
37191
|
var useChat = function (_a) {
|
|
37201
37192
|
var _b, _c;
|
|
@@ -37205,11 +37196,10 @@ var useChat = function (_a) {
|
|
|
37205
37196
|
tDateTimeParser: icons.defaultDateTimeParser,
|
|
37206
37197
|
userLanguage: 'en',
|
|
37207
37198
|
}), translators = _e[0], setTranslators = _e[1];
|
|
37208
|
-
var _f = React.useState(
|
|
37209
|
-
var _g = React.useState(),
|
|
37210
|
-
var _h = React.useState(
|
|
37211
|
-
var _j = React.useState(
|
|
37212
|
-
var _k = React.useState({}), latestMessageDatesByChannels = _k[0], setLatestMessageDatesByChannels = _k[1];
|
|
37199
|
+
var _f = React.useState(), channel = _f[0], setChannel = _f[1];
|
|
37200
|
+
var _g = React.useState([]), mutes = _g[0], setMutes = _g[1];
|
|
37201
|
+
var _h = React.useState(initialNavOpen), navOpen = _h[0], setNavOpen = _h[1];
|
|
37202
|
+
var _j = React.useState({}), latestMessageDatesByChannels = _j[0], setLatestMessageDatesByChannels = _j[1];
|
|
37213
37203
|
var clientMutes = ((_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes) || [];
|
|
37214
37204
|
var closeMobileNav = function () { return setNavOpen(false); };
|
|
37215
37205
|
var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
|
|
@@ -37280,7 +37270,6 @@ var useChat = function (_a) {
|
|
|
37280
37270
|
}, [(_c = client.user) === null || _c === void 0 ? void 0 : _c.id]);
|
|
37281
37271
|
return {
|
|
37282
37272
|
channel: channel,
|
|
37283
|
-
channels: channels,
|
|
37284
37273
|
closeMobileNav: closeMobileNav,
|
|
37285
37274
|
getAppSettings: getAppSettings,
|
|
37286
37275
|
latestMessageDatesByChannels: latestMessageDatesByChannels,
|
|
@@ -37288,14 +37277,13 @@ var useChat = function (_a) {
|
|
|
37288
37277
|
navOpen: navOpen,
|
|
37289
37278
|
openMobileNav: openMobileNav,
|
|
37290
37279
|
setActiveChannel: setActiveChannel,
|
|
37291
|
-
setChannels: setChannels,
|
|
37292
37280
|
translators: translators,
|
|
37293
37281
|
};
|
|
37294
37282
|
};
|
|
37295
37283
|
|
|
37296
37284
|
var useCreateChatContext = function (value) {
|
|
37297
37285
|
var _a;
|
|
37298
|
-
var channel = value.channel,
|
|
37286
|
+
var channel = value.channel, channelsQueryState = value.channelsQueryState, 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, themeVersion = value.themeVersion, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
|
|
37299
37287
|
var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
|
|
37300
37288
|
var channelsQueryError = channelsQueryState.error;
|
|
37301
37289
|
var channelsQueryInProgress = channelsQueryState.queryInProgress;
|
|
@@ -37303,7 +37291,6 @@ var useCreateChatContext = function (value) {
|
|
|
37303
37291
|
var mutedUsersLength = mutes.length;
|
|
37304
37292
|
var chatContext = React.useMemo(function () { return ({
|
|
37305
37293
|
channel: channel,
|
|
37306
|
-
channels: channels,
|
|
37307
37294
|
channelsQueryState: channelsQueryState,
|
|
37308
37295
|
client: client,
|
|
37309
37296
|
closeMobileNav: closeMobileNav,
|
|
@@ -37314,7 +37301,6 @@ var useCreateChatContext = function (value) {
|
|
|
37314
37301
|
navOpen: navOpen,
|
|
37315
37302
|
openMobileNav: openMobileNav,
|
|
37316
37303
|
setActiveChannel: setActiveChannel,
|
|
37317
|
-
setChannels: setChannels,
|
|
37318
37304
|
theme: theme,
|
|
37319
37305
|
themeVersion: themeVersion,
|
|
37320
37306
|
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
@@ -37322,12 +37308,10 @@ var useCreateChatContext = function (value) {
|
|
|
37322
37308
|
channelCid,
|
|
37323
37309
|
channelsQueryError,
|
|
37324
37310
|
channelsQueryInProgress,
|
|
37325
|
-
channels,
|
|
37326
37311
|
clientValues,
|
|
37327
37312
|
getAppSettings,
|
|
37328
37313
|
mutedUsersLength,
|
|
37329
37314
|
navOpen,
|
|
37330
|
-
setChannels,
|
|
37331
37315
|
]);
|
|
37332
37316
|
return chatContext;
|
|
37333
37317
|
};
|
|
@@ -37386,7 +37370,7 @@ var useCustomStyles = function (customStyles) {
|
|
|
37386
37370
|
*/
|
|
37387
37371
|
var Chat = function (props) {
|
|
37388
37372
|
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;
|
|
37389
|
-
var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel,
|
|
37373
|
+
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;
|
|
37390
37374
|
var channelsQueryState = useChannelsQueryState();
|
|
37391
37375
|
var themeVersion = typeof window !== 'undefined'
|
|
37392
37376
|
? (window
|
|
@@ -37397,7 +37381,6 @@ var Chat = function (props) {
|
|
|
37397
37381
|
useCustomStyles(darkMode ? darkModeTheme : customStyles);
|
|
37398
37382
|
var chatContextValue = useCreateChatContext({
|
|
37399
37383
|
channel: channel,
|
|
37400
|
-
channels: channels,
|
|
37401
37384
|
channelsQueryState: channelsQueryState,
|
|
37402
37385
|
client: client,
|
|
37403
37386
|
closeMobileNav: closeMobileNav,
|
|
@@ -37408,7 +37391,6 @@ var Chat = function (props) {
|
|
|
37408
37391
|
navOpen: navOpen,
|
|
37409
37392
|
openMobileNav: openMobileNav,
|
|
37410
37393
|
setActiveChannel: setActiveChannel,
|
|
37411
|
-
setChannels: setChannels,
|
|
37412
37394
|
theme: theme,
|
|
37413
37395
|
themeVersion: themeVersion,
|
|
37414
37396
|
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
@@ -38774,11 +38756,14 @@ function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
|
38774
38756
|
};
|
|
38775
38757
|
}
|
|
38776
38758
|
|
|
38777
|
-
var STATUSES_EXCLUDED_FROM_PREPEND =
|
|
38759
|
+
var STATUSES_EXCLUDED_FROM_PREPEND = {
|
|
38760
|
+
failed: true,
|
|
38761
|
+
sending: true,
|
|
38762
|
+
};
|
|
38778
38763
|
function usePrependedMessagesCount(messages, hasDateSeparator) {
|
|
38779
38764
|
var firstRealMessageIndex = hasDateSeparator ? 1 : 0;
|
|
38780
|
-
var
|
|
38781
|
-
var
|
|
38765
|
+
var firstMessageOnFirstLoadedPage = React.useRef();
|
|
38766
|
+
var previousFirstMessageOnFirstLoadedPage = React.useRef();
|
|
38782
38767
|
var previousNumItemsPrepended = React.useRef(0);
|
|
38783
38768
|
var numItemsPrepended = React.useMemo(function () {
|
|
38784
38769
|
var _a, _b;
|
|
@@ -38786,47 +38771,43 @@ function usePrependedMessagesCount(messages, hasDateSeparator) {
|
|
|
38786
38771
|
previousNumItemsPrepended.current = 0;
|
|
38787
38772
|
return 0;
|
|
38788
38773
|
}
|
|
38789
|
-
var
|
|
38790
|
-
|
|
38791
|
-
|
|
38774
|
+
var currentFirstMessage = messages === null || messages === void 0 ? void 0 : messages[firstRealMessageIndex];
|
|
38775
|
+
var noNewMessages = (currentFirstMessage === null || currentFirstMessage === void 0 ? void 0 : currentFirstMessage.id) === ((_a = previousFirstMessageOnFirstLoadedPage.current) === null || _a === void 0 ? void 0 : _a.id);
|
|
38776
|
+
// This is possible only, when sending messages very quickly (basically single char messages submitted like a crazy) in empty channel (first page)
|
|
38777
|
+
// Optimistic UI update, when sending messages, can lead to a situation, when
|
|
38778
|
+
// the order of the messages changes for a moment. This can happen, when a user
|
|
38779
|
+
// sends multiple messages withing few milliseconds. E.g. we send a message A
|
|
38780
|
+
// then message B. At first we have message array with both messages of status "sending"
|
|
38781
|
+
// then response for message A is received with a new - later - created_at timestamp
|
|
38782
|
+
// this leads to rearrangement of 1.B ("sending"), 2.A ("received"). Still firstMessageOnFirstLoadedPage.current
|
|
38783
|
+
// points to message A, but now this message has index 1 => previousNumItemsPrepended.current === 1
|
|
38784
|
+
// That in turn leads to incorrect index calculation in VirtualizedMessageList trying to access a message
|
|
38785
|
+
// at non-existent index. Therefore, we ignore messages of status "sending" / "failed" in order they are
|
|
38786
|
+
// not considered as prepended messages.
|
|
38787
|
+
var firstMsgMovedAfterMessagesInExcludedStatus = (currentFirstMessage === null || currentFirstMessage === void 0 ? void 0 : currentFirstMessage.status) && STATUSES_EXCLUDED_FROM_PREPEND[currentFirstMessage.status];
|
|
38788
|
+
if (noNewMessages || firstMsgMovedAfterMessagesInExcludedStatus) {
|
|
38792
38789
|
return previousNumItemsPrepended.current;
|
|
38793
38790
|
}
|
|
38794
|
-
if (!
|
|
38795
|
-
|
|
38791
|
+
if (!firstMessageOnFirstLoadedPage.current) {
|
|
38792
|
+
firstMessageOnFirstLoadedPage.current = currentFirstMessage;
|
|
38796
38793
|
}
|
|
38797
|
-
|
|
38794
|
+
previousFirstMessageOnFirstLoadedPage.current = currentFirstMessage;
|
|
38798
38795
|
// if new messages were prepended, find out how many
|
|
38799
38796
|
// start with this number because there cannot be fewer prepended items than before
|
|
38800
|
-
var
|
|
38801
|
-
|
|
38802
|
-
|
|
38803
|
-
|
|
38804
|
-
|
|
38805
|
-
// then message B. At first we have message array with both messages of status "sending"
|
|
38806
|
-
// then response for message A is received with a new - later - created_at timestamp
|
|
38807
|
-
// this leads to rearrangement of 1.B ("sending"), 2.A ("received"). Still firstMessageId.current
|
|
38808
|
-
// points to message A, but now this message has index 1 => previousNumItemsPrepended.current === 1
|
|
38809
|
-
// That in turn leads to incorrect index calculation in VirtualizedMessageList trying to access a message
|
|
38810
|
-
// at non-existent index. Therefore, we ignore messages of status "sending" / "failed" in order they are
|
|
38811
|
-
// not considered as prepended messages.
|
|
38812
|
-
if (((_b = messages[i]) === null || _b === void 0 ? void 0 : _b.status) &&
|
|
38813
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
38814
|
-
STATUSES_EXCLUDED_FROM_PREPEND.includes(messages[i].status) &&
|
|
38815
|
-
messages[i].id !== firstMessageId.current) {
|
|
38816
|
-
adjustPrependedMessageCount++;
|
|
38817
|
-
}
|
|
38818
|
-
if (messages[i].id === firstMessageId.current) {
|
|
38819
|
-
previousNumItemsPrepended.current = i - adjustPrependedMessageCount;
|
|
38820
|
-
return previousNumItemsPrepended.current;
|
|
38797
|
+
for (var prependedMessageCount = previousNumItemsPrepended.current; prependedMessageCount < messages.length; prependedMessageCount += 1) {
|
|
38798
|
+
var messageIsFirstOnFirstLoadedPage = messages[prependedMessageCount].id === ((_b = firstMessageOnFirstLoadedPage.current) === null || _b === void 0 ? void 0 : _b.id);
|
|
38799
|
+
if (messageIsFirstOnFirstLoadedPage) {
|
|
38800
|
+
previousNumItemsPrepended.current = prependedMessageCount;
|
|
38801
|
+
return prependedMessageCount;
|
|
38821
38802
|
}
|
|
38822
38803
|
}
|
|
38823
38804
|
// if no match has found, we have jumped - reset the prepended item count.
|
|
38824
|
-
|
|
38805
|
+
firstMessageOnFirstLoadedPage.current = currentFirstMessage;
|
|
38825
38806
|
previousNumItemsPrepended.current = 0;
|
|
38826
38807
|
return 0;
|
|
38827
38808
|
// TODO: there's a bug here, the messages prop is the same array instance (something mutates it)
|
|
38828
38809
|
// that's why the second dependency is necessary
|
|
38829
|
-
}, [messages, messages === null || messages === void 0 ? void 0 : messages.length]);
|
|
38810
|
+
}, [firstRealMessageIndex, messages, messages === null || messages === void 0 ? void 0 : messages.length]);
|
|
38830
38811
|
return numItemsPrepended;
|
|
38831
38812
|
}
|
|
38832
38813
|
|
|
@@ -39288,6 +39269,8 @@ var generateRandomId = icons.nanoid;
|
|
|
39288
39269
|
|
|
39289
39270
|
exports.ChannelActionContext = icons.ChannelActionContext;
|
|
39290
39271
|
exports.ChannelActionProvider = icons.ChannelActionProvider;
|
|
39272
|
+
exports.ChannelListContext = icons.ChannelListContext;
|
|
39273
|
+
exports.ChannelListContextProvider = icons.ChannelListContextProvider;
|
|
39291
39274
|
exports.ChannelStateContext = icons.ChannelStateContext;
|
|
39292
39275
|
exports.ChannelStateProvider = icons.ChannelStateProvider;
|
|
39293
39276
|
exports.ChatContext = icons.ChatContext;
|
|
@@ -39340,6 +39323,7 @@ exports.ptTranslations = icons.ptTranslations;
|
|
|
39340
39323
|
exports.ruTranslations = icons.ruTranslations;
|
|
39341
39324
|
exports.trTranslations = icons.trTranslations;
|
|
39342
39325
|
exports.useChannelActionContext = icons.useChannelActionContext;
|
|
39326
|
+
exports.useChannelListContext = icons.useChannelListContext;
|
|
39343
39327
|
exports.useChannelStateContext = icons.useChannelStateContext;
|
|
39344
39328
|
exports.useChatContext = icons.useChatContext;
|
|
39345
39329
|
exports.useComponentContext = icons.useComponentContext;
|
|
@@ -39366,6 +39350,7 @@ exports.Audio = Audio;
|
|
|
39366
39350
|
exports.AudioContainer = AudioContainer;
|
|
39367
39351
|
exports.AutoCompleteTextarea = ReactTextareaAutocomplete;
|
|
39368
39352
|
exports.Avatar = Avatar;
|
|
39353
|
+
exports.BaseImage = BaseImage;
|
|
39369
39354
|
exports.Card = Card;
|
|
39370
39355
|
exports.CardAudio = CardAudio;
|
|
39371
39356
|
exports.CardContainer = CardContainer;
|