@patternfly/chatbot 6.3.0-prerelease.9 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AttachMenu/AttachMenu.d.ts +2 -2
- package/dist/cjs/AttachMenu/AttachMenu.js +2 -12
- package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +12 -2
- package/dist/cjs/AttachmentEdit/AttachmentEdit.js +3 -6
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +33 -8
- package/dist/cjs/Chatbot/Chatbot.d.ts +1 -2
- package/dist/cjs/Chatbot/Chatbot.js +4 -9
- package/dist/cjs/Chatbot/Chatbot.test.js +11 -11
- package/dist/cjs/ChatbotAlert/ChatbotAlert.d.ts +2 -2
- package/dist/cjs/ChatbotAlert/ChatbotAlert.js +4 -8
- package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +10 -10
- package/dist/cjs/ChatbotContent/ChatbotContent.d.ts +3 -3
- package/dist/cjs/ChatbotContent/ChatbotContent.js +2 -8
- package/dist/cjs/ChatbotContent/ChatbotContent.test.js +5 -5
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +31 -33
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -2
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +56 -64
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +2 -9
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +2 -25
- package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +3 -3
- package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -15
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +7 -7
- package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +28 -28
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +10 -23
- package/dist/cjs/ChatbotHeader/ChatbotHeader.d.ts +3 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeader.js +2 -7
- package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +5 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.js +2 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +5 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -10
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +7 -10
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +2 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +5 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +7 -10
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +19 -21
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -12
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +17 -19
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +2 -5
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +23 -23
- package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +2 -2
- package/dist/cjs/ChatbotModal/ChatbotModal.js +3 -9
- package/dist/cjs/ChatbotModal/ChatbotModal.test.js +4 -16
- package/dist/cjs/ChatbotPopover/ChatbotPopover.d.ts +2 -2
- package/dist/cjs/ChatbotPopover/ChatbotPopover.js +2 -8
- package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +1 -2
- package/dist/cjs/ChatbotToggle/ChatbotToggle.js +8 -13
- package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +25 -25
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -20
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +16 -16
- package/dist/cjs/CodeModal/CodeModal.d.ts +8 -2
- package/dist/cjs/CodeModal/CodeModal.js +8 -20
- package/dist/cjs/CodeModal/CodeModal.test.js +23 -4
- package/dist/cjs/Compare/Compare.d.ts +2 -2
- package/dist/cjs/Compare/Compare.js +7 -16
- package/dist/cjs/Compare/Compare.test.js +7 -9
- package/dist/cjs/FileDetails/FileDetails.d.ts +2 -2
- package/dist/cjs/FileDetails/FileDetails.js +2 -15
- package/dist/cjs/FileDetails/FileDetails.test.js +10 -10
- package/dist/cjs/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
- package/dist/cjs/FileDetailsLabel/FileDetailsLabel.js +2 -5
- package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +21 -21
- package/dist/cjs/FileDropZone/FileDropZone.d.ts +23 -2
- package/dist/cjs/FileDropZone/FileDropZone.js +11 -9
- package/dist/cjs/FileDropZone/FileDropZone.test.js +86 -5
- package/dist/cjs/LoadingMessage/LoadingMessage.d.ts +2 -2
- package/dist/cjs/LoadingMessage/LoadingMessage.js +2 -10
- package/dist/cjs/LoadingMessage/LoadingMessage.test.js +6 -6
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +34 -16
- package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
- package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +139 -0
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -8
- package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +1 -2
- package/dist/cjs/Message/ImageMessage/ImageMessage.js +2 -8
- package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +1 -2
- package/dist/cjs/Message/LinkMessage/LinkMessage.js +6 -9
- package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +1 -2
- package/dist/cjs/Message/ListMessage/ListItemMessage.js +2 -8
- package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -2
- package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -9
- package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
- package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -9
- package/dist/cjs/Message/Message.d.ts +24 -8
- package/dist/cjs/Message/Message.js +49 -71
- package/dist/cjs/Message/Message.test.js +112 -82
- package/dist/cjs/Message/MessageInput.d.ts +2 -2
- package/dist/cjs/Message/MessageInput.js +5 -14
- package/dist/cjs/Message/MessageLoading.d.ts +1 -2
- package/dist/cjs/Message/MessageLoading.js +3 -8
- package/dist/cjs/Message/Plugins/index.d.ts +1 -0
- package/dist/cjs/Message/Plugins/index.js +5 -0
- package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
- package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.js +24 -0
- package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
- package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -2
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +7 -9
- package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +2 -2
- package/dist/cjs/Message/QuickStarts/FallbackImg.js +5 -27
- package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -2
- package/dist/cjs/Message/QuickStarts/QuickStartTile.js +7 -43
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +9 -38
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +16 -16
- package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
- package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +2 -26
- package/dist/cjs/Message/QuickStarts/types.d.ts +4 -3
- package/dist/cjs/Message/TableMessage/TableMessage.d.ts +1 -2
- package/dist/cjs/Message/TableMessage/TableMessage.js +8 -10
- package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +2 -3
- package/dist/cjs/Message/TableMessage/TbodyMessage.js +7 -9
- package/dist/cjs/Message/TableMessage/TdMessage.d.ts +1 -2
- package/dist/cjs/Message/TableMessage/TdMessage.js +2 -8
- package/dist/cjs/Message/TableMessage/ThMessage.d.ts +1 -2
- package/dist/cjs/Message/TableMessage/ThMessage.js +2 -8
- package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +1 -2
- package/dist/cjs/Message/TableMessage/TheadMessage.js +2 -8
- package/dist/cjs/Message/TableMessage/TrMessage.d.ts +2 -3
- package/dist/cjs/Message/TableMessage/TrMessage.js +8 -10
- package/dist/cjs/Message/TextMessage/TextMessage.d.ts +1 -2
- package/dist/cjs/Message/TextMessage/TextMessage.js +2 -9
- package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +2 -2
- package/dist/cjs/Message/UserFeedback/CloseButton.js +2 -8
- package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +2 -2
- package/dist/cjs/Message/UserFeedback/UserFeedback.js +12 -23
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +53 -53
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +20 -44
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +81 -91
- package/dist/cjs/Message/index.d.ts +1 -0
- package/dist/cjs/Message/index.js +3 -1
- package/dist/cjs/MessageBar/AttachButton.d.ts +25 -2
- package/dist/cjs/MessageBar/AttachButton.js +10 -20
- package/dist/cjs/MessageBar/AttachButton.test.js +102 -24
- package/dist/cjs/MessageBar/MessageBar.d.ts +31 -3
- package/dist/cjs/MessageBar/MessageBar.js +30 -32
- package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
- package/dist/cjs/MessageBar/MicrophoneButton.d.ts +2 -2
- package/dist/cjs/MessageBar/MicrophoneButton.js +7 -14
- package/dist/cjs/MessageBar/SendButton.d.ts +3 -2
- package/dist/cjs/MessageBar/SendButton.js +3 -11
- package/dist/cjs/MessageBar/SendButton.test.js +15 -15
- package/dist/cjs/MessageBar/StopButton.d.ts +3 -2
- package/dist/cjs/MessageBar/StopButton.js +3 -12
- package/dist/cjs/MessageBar/StopButton.test.js +15 -15
- package/dist/cjs/MessageBox/JumpButton.d.ts +2 -2
- package/dist/cjs/MessageBox/JumpButton.js +2 -10
- package/dist/cjs/MessageBox/JumpButton.test.js +10 -10
- package/dist/cjs/MessageBox/MessageBox.d.ts +21 -5
- package/dist/cjs/MessageBox/MessageBox.js +170 -45
- package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
- package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +12 -2
- package/dist/cjs/PreviewAttachment/PreviewAttachment.js +3 -6
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +34 -12
- package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +5 -5
- package/dist/cjs/ResponseActions/ResponseActionButton.js +5 -8
- package/dist/cjs/ResponseActions/ResponseActionButton.test.js +19 -19
- package/dist/cjs/ResponseActions/ResponseActions.d.ts +7 -3
- package/dist/cjs/ResponseActions/ResponseActions.js +39 -18
- package/dist/cjs/ResponseActions/ResponseActions.test.js +120 -41
- package/dist/cjs/Settings/SettingsForm.d.ts +2 -2
- package/dist/cjs/Settings/SettingsForm.js +2 -8
- package/dist/cjs/Settings/SettingsForm.test.js +9 -12
- package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
- package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
- package/dist/cjs/SourcesCard/SourcesCard.d.ts +12 -3
- package/dist/cjs/SourcesCard/SourcesCard.js +17 -42
- package/dist/cjs/SourcesCard/SourcesCard.test.js +70 -60
- package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +3 -3
- package/dist/cjs/TermsOfUse/TermsOfUse.js +4 -16
- package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
- package/dist/css/main.css +15 -7
- package/dist/css/main.css.map +1 -1
- package/dist/esm/AttachMenu/AttachMenu.d.ts +2 -2
- package/dist/esm/AttachMenu/AttachMenu.js +2 -9
- package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +12 -2
- package/dist/esm/AttachmentEdit/AttachmentEdit.js +3 -6
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +30 -5
- package/dist/esm/Chatbot/Chatbot.d.ts +1 -2
- package/dist/esm/Chatbot/Chatbot.js +4 -6
- package/dist/esm/Chatbot/Chatbot.test.js +6 -6
- package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +2 -2
- package/dist/esm/ChatbotAlert/ChatbotAlert.js +4 -5
- package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +4 -4
- package/dist/esm/ChatbotContent/ChatbotContent.d.ts +3 -3
- package/dist/esm/ChatbotContent/ChatbotContent.js +2 -5
- package/dist/esm/ChatbotContent/ChatbotContent.test.js +3 -3
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +8 -10
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -2
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +26 -34
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +2 -6
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +2 -22
- package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +3 -3
- package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -12
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +4 -4
- package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +5 -5
- package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
- package/dist/esm/ChatbotFooter/ChatbotFootnote.js +10 -23
- package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeader.js +2 -4
- package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -7
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +4 -4
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +4 -4
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +9 -8
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +9 -8
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +12 -12
- package/dist/esm/ChatbotModal/ChatbotModal.d.ts +2 -2
- package/dist/esm/ChatbotModal/ChatbotModal.js +3 -6
- package/dist/esm/ChatbotModal/ChatbotModal.test.js +2 -14
- package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +2 -2
- package/dist/esm/ChatbotPopover/ChatbotPopover.js +2 -5
- package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +1 -2
- package/dist/esm/ChatbotToggle/ChatbotToggle.js +8 -13
- package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +8 -8
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -17
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +8 -8
- package/dist/esm/CodeModal/CodeModal.d.ts +8 -2
- package/dist/esm/CodeModal/CodeModal.js +8 -20
- package/dist/esm/CodeModal/CodeModal.test.js +22 -3
- package/dist/esm/Compare/Compare.d.ts +2 -2
- package/dist/esm/Compare/Compare.js +7 -13
- package/dist/esm/Compare/Compare.test.js +4 -6
- package/dist/esm/FileDetails/FileDetails.d.ts +2 -2
- package/dist/esm/FileDetails/FileDetails.js +2 -15
- package/dist/esm/FileDetails/FileDetails.test.js +4 -4
- package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
- package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +2 -5
- package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +9 -9
- package/dist/esm/FileDropZone/FileDropZone.d.ts +23 -2
- package/dist/esm/FileDropZone/FileDropZone.js +11 -6
- package/dist/esm/FileDropZone/FileDropZone.test.js +84 -3
- package/dist/esm/LoadingMessage/LoadingMessage.d.ts +2 -2
- package/dist/esm/LoadingMessage/LoadingMessage.js +2 -10
- package/dist/esm/LoadingMessage/LoadingMessage.test.js +3 -3
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +35 -17
- package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
- package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +133 -0
- package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
- package/dist/esm/Message/ErrorMessage/ErrorMessage.js +5 -5
- package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +1 -2
- package/dist/esm/Message/ImageMessage/ImageMessage.js +2 -5
- package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +1 -2
- package/dist/esm/Message/LinkMessage/LinkMessage.js +6 -6
- package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +1 -2
- package/dist/esm/Message/ListMessage/ListItemMessage.js +2 -5
- package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -2
- package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -6
- package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
- package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -6
- package/dist/esm/Message/Message.d.ts +24 -8
- package/dist/esm/Message/Message.js +49 -71
- package/dist/esm/Message/Message.test.js +112 -82
- package/dist/esm/Message/MessageInput.d.ts +2 -2
- package/dist/esm/Message/MessageInput.js +5 -11
- package/dist/esm/Message/MessageLoading.d.ts +1 -2
- package/dist/esm/Message/MessageLoading.js +2 -4
- package/dist/esm/Message/Plugins/index.d.ts +1 -0
- package/dist/esm/Message/Plugins/index.js +1 -0
- package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
- package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.js +20 -0
- package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
- package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +43 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -2
- package/dist/esm/Message/QuickResponse/QuickResponse.js +7 -6
- package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +2 -2
- package/dist/esm/Message/QuickStarts/FallbackImg.js +5 -4
- package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -2
- package/dist/esm/Message/QuickStarts/QuickStartTile.js +7 -20
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +9 -15
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +5 -5
- package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
- package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +2 -3
- package/dist/esm/Message/QuickStarts/types.d.ts +4 -3
- package/dist/esm/Message/TableMessage/TableMessage.d.ts +1 -2
- package/dist/esm/Message/TableMessage/TableMessage.js +8 -7
- package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +2 -3
- package/dist/esm/Message/TableMessage/TbodyMessage.js +7 -6
- package/dist/esm/Message/TableMessage/TdMessage.d.ts +1 -2
- package/dist/esm/Message/TableMessage/TdMessage.js +2 -5
- package/dist/esm/Message/TableMessage/ThMessage.d.ts +1 -2
- package/dist/esm/Message/TableMessage/ThMessage.js +2 -5
- package/dist/esm/Message/TableMessage/TheadMessage.d.ts +1 -2
- package/dist/esm/Message/TableMessage/TheadMessage.js +2 -5
- package/dist/esm/Message/TableMessage/TrMessage.d.ts +2 -3
- package/dist/esm/Message/TableMessage/TrMessage.js +8 -7
- package/dist/esm/Message/TextMessage/TextMessage.d.ts +1 -2
- package/dist/esm/Message/TextMessage/TextMessage.js +2 -6
- package/dist/esm/Message/UserFeedback/CloseButton.d.ts +2 -2
- package/dist/esm/Message/UserFeedback/CloseButton.js +2 -5
- package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +2 -2
- package/dist/esm/Message/UserFeedback/UserFeedback.js +12 -23
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +21 -21
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +20 -44
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +26 -36
- package/dist/esm/Message/index.d.ts +1 -0
- package/dist/esm/Message/index.js +1 -0
- package/dist/esm/MessageBar/AttachButton.d.ts +25 -2
- package/dist/esm/MessageBar/AttachButton.js +10 -17
- package/dist/esm/MessageBar/AttachButton.test.js +95 -17
- package/dist/esm/MessageBar/MessageBar.d.ts +31 -3
- package/dist/esm/MessageBar/MessageBar.js +28 -30
- package/dist/esm/MessageBar/MessageBar.test.js +87 -73
- package/dist/esm/MessageBar/MicrophoneButton.d.ts +2 -2
- package/dist/esm/MessageBar/MicrophoneButton.js +7 -11
- package/dist/esm/MessageBar/SendButton.d.ts +3 -2
- package/dist/esm/MessageBar/SendButton.js +3 -8
- package/dist/esm/MessageBar/SendButton.test.js +9 -9
- package/dist/esm/MessageBar/StopButton.d.ts +3 -2
- package/dist/esm/MessageBar/StopButton.js +3 -9
- package/dist/esm/MessageBar/StopButton.test.js +9 -9
- package/dist/esm/MessageBox/JumpButton.d.ts +2 -2
- package/dist/esm/MessageBox/JumpButton.js +2 -7
- package/dist/esm/MessageBox/JumpButton.test.js +9 -9
- package/dist/esm/MessageBox/MessageBox.d.ts +21 -5
- package/dist/esm/MessageBox/MessageBox.js +170 -45
- package/dist/esm/MessageBox/MessageBox.test.js +220 -7
- package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +12 -2
- package/dist/esm/PreviewAttachment/PreviewAttachment.js +3 -6
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +30 -5
- package/dist/esm/ResponseActions/ResponseActionButton.d.ts +5 -5
- package/dist/esm/ResponseActions/ResponseActionButton.js +5 -5
- package/dist/esm/ResponseActions/ResponseActionButton.test.js +7 -7
- package/dist/esm/ResponseActions/ResponseActions.d.ts +7 -3
- package/dist/esm/ResponseActions/ResponseActions.js +40 -19
- package/dist/esm/ResponseActions/ResponseActions.test.js +95 -16
- package/dist/esm/Settings/SettingsForm.d.ts +2 -2
- package/dist/esm/Settings/SettingsForm.js +2 -5
- package/dist/esm/Settings/SettingsForm.test.js +6 -6
- package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
- package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
- package/dist/esm/SourcesCard/SourcesCard.d.ts +12 -3
- package/dist/esm/SourcesCard/SourcesCard.js +17 -39
- package/dist/esm/SourcesCard/SourcesCard.test.js +29 -19
- package/dist/esm/TermsOfUse/TermsOfUse.d.ts +3 -3
- package/dist/esm/TermsOfUse/TermsOfUse.js +4 -16
- package/dist/esm/TermsOfUse/TermsOfUse.test.js +10 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -6
- package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +10 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +51 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +9 -9
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -20
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +9 -9
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +4 -4
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +7 -7
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithClickedResponseActions.tsx +25 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +3 -12
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +4 -4
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +19 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +25 -14
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +4 -4
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +59 -36
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +10 -13
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +10 -10
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +6 -6
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +7 -7
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +59 -34
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +9 -9
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarDisabled.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarLanguage.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +74 -37
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +8 -8
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +16 -23
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +16 -23
- package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +91 -48
- package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +82 -39
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +3 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +19 -25
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +42 -15
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +15 -14
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +19 -25
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +17 -22
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +17 -22
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +13 -13
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +7 -7
- package/patternfly-docs/content/extensions/chatbot/img/quick-response-confirmation.svg +67 -0
- package/src/AttachMenu/AttachMenu.tsx +2 -2
- package/src/AttachmentEdit/AttachmentEdit.test.tsx +46 -2
- package/src/AttachmentEdit/AttachmentEdit.tsx +25 -7
- package/src/Chatbot/Chatbot.test.tsx +0 -1
- package/src/Chatbot/Chatbot.tsx +5 -3
- package/src/ChatbotAlert/ChatbotAlert.test.tsx +0 -1
- package/src/ChatbotAlert/ChatbotAlert.tsx +2 -2
- package/src/ChatbotContent/ChatbotContent.test.tsx +0 -1
- package/src/ChatbotContent/ChatbotContent.tsx +3 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +0 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +6 -4
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +3 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +8 -6
- package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
- package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +0 -1
- package/src/ChatbotFooter/ChatbotFooter.tsx +3 -3
- package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
- package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
- package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeader.tsx +3 -6
- package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +5 -4
- package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderMain.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -7
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +9 -1
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +12 -5
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +9 -1
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +26 -6
- package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
- package/src/ChatbotModal/ChatbotModal.test.tsx +0 -1
- package/src/ChatbotModal/ChatbotModal.tsx +2 -2
- package/src/ChatbotPopover/ChatbotPopover.tsx +3 -3
- package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
- package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +0 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +2 -2
- package/src/CodeModal/CodeModal.test.tsx +29 -2
- package/src/CodeModal/CodeModal.tsx +18 -8
- package/src/Compare/Compare.test.tsx +0 -1
- package/src/Compare/Compare.tsx +7 -6
- package/src/FileDetails/FileDetails.test.tsx +0 -1
- package/src/FileDetails/FileDetails.tsx +1 -1
- package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
- package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
- package/src/FileDropZone/FileDropZone.test.tsx +112 -1
- package/src/FileDropZone/FileDropZone.tsx +44 -4
- package/src/LoadingMessage/LoadingMessage.test.tsx +0 -1
- package/src/LoadingMessage/LoadingMessage.tsx +2 -2
- package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +7 -0
- package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +126 -18
- package/src/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.tsx +223 -0
- package/src/Message/ErrorMessage/ErrorMessage.tsx +0 -1
- package/src/Message/ImageMessage/ImageMessage.tsx +1 -2
- package/src/Message/LinkMessage/LinkMessage.tsx +0 -1
- package/src/Message/ListMessage/ListItemMessage.tsx +0 -1
- package/src/Message/ListMessage/OrderedListMessage.tsx +0 -1
- package/src/Message/ListMessage/UnorderedListMessage.tsx +0 -1
- package/src/Message/Message.test.tsx +49 -6
- package/src/Message/Message.tsx +31 -14
- package/src/Message/MessageInput.tsx +5 -5
- package/src/Message/MessageLoading.tsx +0 -2
- package/src/Message/Plugins/index.ts +1 -0
- package/src/Message/Plugins/rehypeCodeBlockToggle.ts +24 -0
- package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
- package/src/Message/QuickResponse/QuickResponse.tsx +4 -3
- package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
- package/src/Message/QuickStarts/QuickStartTile.tsx +3 -3
- package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +0 -1
- package/src/Message/QuickStarts/QuickStartTileDescription.tsx +4 -3
- package/src/Message/QuickStarts/QuickStartTileHeader.tsx +2 -2
- package/src/Message/QuickStarts/types.ts +4 -3
- package/src/Message/TableMessage/TableMessage.tsx +4 -4
- package/src/Message/TableMessage/TbodyMessage.tsx +3 -3
- package/src/Message/TableMessage/TdMessage.tsx +1 -2
- package/src/Message/TableMessage/ThMessage.tsx +1 -2
- package/src/Message/TableMessage/TheadMessage.tsx +3 -2
- package/src/Message/TableMessage/TrMessage.tsx +4 -4
- package/src/Message/TextMessage/TextMessage.scss +2 -5
- package/src/Message/TextMessage/TextMessage.tsx +1 -2
- package/src/Message/UserFeedback/CloseButton.tsx +2 -2
- package/src/Message/UserFeedback/UserFeedback.test.tsx +0 -1
- package/src/Message/UserFeedback/UserFeedback.tsx +8 -6
- package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +0 -1
- package/src/Message/UserFeedback/UserFeedbackComplete.tsx +16 -14
- package/src/Message/index.ts +1 -0
- package/src/MessageBar/AttachButton.test.tsx +127 -8
- package/src/MessageBar/AttachButton.tsx +49 -6
- package/src/MessageBar/MessageBar.test.tsx +81 -30
- package/src/MessageBar/MessageBar.tsx +85 -19
- package/src/MessageBar/MicrophoneButton.tsx +10 -7
- package/src/MessageBar/SendButton.test.tsx +5 -6
- package/src/MessageBar/SendButton.tsx +4 -3
- package/src/MessageBar/StopButton.test.tsx +5 -6
- package/src/MessageBar/StopButton.tsx +4 -3
- package/src/MessageBox/JumpButton.test.tsx +4 -5
- package/src/MessageBox/JumpButton.tsx +3 -3
- package/src/MessageBox/MessageBox.test.tsx +295 -5
- package/src/MessageBox/MessageBox.tsx +301 -84
- package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
- package/src/PreviewAttachment/PreviewAttachment.tsx +24 -6
- package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
- package/src/ResponseActions/ResponseActionButton.tsx +6 -5
- package/src/ResponseActions/ResponseActions.test.tsx +121 -4
- package/src/ResponseActions/ResponseActions.tsx +71 -12
- package/src/Settings/SettingsForm.test.tsx +0 -1
- package/src/Settings/SettingsForm.tsx +2 -7
- package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
- package/src/SourcesCard/SourcesCard.test.tsx +14 -1
- package/src/SourcesCard/SourcesCard.tsx +19 -7
- package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
- package/src/TermsOfUse/TermsOfUse.tsx +6 -5
- package/tsconfig.cjs.json +0 -1
- package/tsconfig.json +3 -3
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// Chatbot Main - Messages - Feedback Complete Card
|
|
3
3
|
// ============================================================================
|
|
4
|
-
import
|
|
4
|
+
import type { MouseEvent as ReactMouseEvent, FunctionComponent } from 'react';
|
|
5
|
+
|
|
6
|
+
import { useState, useRef, useEffect } from 'react';
|
|
5
7
|
|
|
6
8
|
// Import PatternFly components
|
|
7
9
|
import { Card, CardBody, CardHeader, CardProps, CardTitle, OUIAProps, useOUIAProps } from '@patternfly/react-core';
|
|
@@ -46,7 +48,7 @@ export interface UserFeedbackCompleteProps extends Omit<CardProps, 'ref'>, OUIAP
|
|
|
46
48
|
timestamp?: string;
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
const UserFeedbackComplete:
|
|
51
|
+
const UserFeedbackComplete: FunctionComponent<UserFeedbackCompleteProps> = ({
|
|
50
52
|
className,
|
|
51
53
|
title = 'Feedback submitted',
|
|
52
54
|
body = "We've received your response. Thank you for sharing your feedback!",
|
|
@@ -66,21 +68,21 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
66
68
|
isCompact,
|
|
67
69
|
...props
|
|
68
70
|
}: UserFeedbackCompleteProps) => {
|
|
69
|
-
const [timedOut, setTimedOut] =
|
|
70
|
-
const [timedOutAnimation, setTimedOutAnimation] =
|
|
71
|
-
const [isMouseOver, setIsMouseOver] =
|
|
72
|
-
const [containsFocus, setContainsFocus] =
|
|
71
|
+
const [timedOut, setTimedOut] = useState(false);
|
|
72
|
+
const [timedOutAnimation, setTimedOutAnimation] = useState(true);
|
|
73
|
+
const [isMouseOver, setIsMouseOver] = useState<boolean | undefined>();
|
|
74
|
+
const [containsFocus, setContainsFocus] = useState<boolean | undefined>();
|
|
73
75
|
const dismissed = timedOut && timedOutAnimation && !isMouseOver && !containsFocus;
|
|
74
|
-
const divRef =
|
|
76
|
+
const divRef = useRef<HTMLDivElement>(null);
|
|
75
77
|
const ouiaProps = useOUIAProps('User Feedback Complete', ouiaId, ouiaSafe);
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
useEffect(() => {
|
|
78
80
|
if (focusOnLoad) {
|
|
79
81
|
divRef.current?.focus();
|
|
80
82
|
}
|
|
81
83
|
}, []);
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
useEffect(() => {
|
|
84
86
|
const calculatedTimeout = timeout === true ? 8000 : Number(timeout);
|
|
85
87
|
if (calculatedTimeout > 0) {
|
|
86
88
|
const timer = setTimeout(() => setTimedOut(true), calculatedTimeout);
|
|
@@ -88,7 +90,7 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
88
90
|
}
|
|
89
91
|
}, [timeout]);
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
useEffect(() => {
|
|
92
94
|
const onDocumentFocus = () => {
|
|
93
95
|
if (divRef.current) {
|
|
94
96
|
if (divRef.current.contains(document.activeElement)) {
|
|
@@ -103,14 +105,14 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
103
105
|
return () => document.removeEventListener('focus', onDocumentFocus, true);
|
|
104
106
|
}, [containsFocus]);
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
useEffect(() => {
|
|
107
109
|
if (containsFocus === false || isMouseOver === false) {
|
|
108
110
|
const timer = setTimeout(() => setTimedOutAnimation(true), timeoutAnimation);
|
|
109
111
|
return () => clearTimeout(timer);
|
|
110
112
|
}
|
|
111
113
|
}, [containsFocus, isMouseOver, timeoutAnimation]);
|
|
112
114
|
|
|
113
|
-
|
|
115
|
+
useEffect(() => {
|
|
114
116
|
dismissed && onTimeout && onTimeout();
|
|
115
117
|
}, [dismissed, onTimeout]);
|
|
116
118
|
|
|
@@ -118,13 +120,13 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
118
120
|
return null;
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
const myOnMouseEnter = (ev:
|
|
123
|
+
const myOnMouseEnter = (ev: ReactMouseEvent<HTMLDivElement>) => {
|
|
122
124
|
setIsMouseOver(true);
|
|
123
125
|
setTimedOutAnimation(false);
|
|
124
126
|
onMouseEnter && onMouseEnter(ev);
|
|
125
127
|
};
|
|
126
128
|
|
|
127
|
-
const myOnMouseLeave = (ev:
|
|
129
|
+
const myOnMouseLeave = (ev: ReactMouseEvent<HTMLDivElement>) => {
|
|
128
130
|
setIsMouseOver(false);
|
|
129
131
|
onMouseLeave && onMouseLeave(ev);
|
|
130
132
|
};
|
package/src/Message/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { render, screen } from '@testing-library/react';
|
|
3
2
|
import '@testing-library/jest-dom';
|
|
4
3
|
import userEvent from '@testing-library/user-event';
|
|
@@ -7,11 +6,11 @@ import { AttachButton } from './AttachButton';
|
|
|
7
6
|
describe('Attach button', () => {
|
|
8
7
|
it('should render button correctly', () => {
|
|
9
8
|
render(<AttachButton />);
|
|
10
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
9
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
|
|
11
10
|
});
|
|
12
11
|
it('should handle isDisabled prop', () => {
|
|
13
12
|
render(<AttachButton isDisabled />);
|
|
14
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
13
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toBeDisabled();
|
|
15
14
|
});
|
|
16
15
|
it('should handle spread props, including aria-label', () => {
|
|
17
16
|
render(<AttachButton aria-label="test" />);
|
|
@@ -20,22 +19,22 @@ describe('Attach button', () => {
|
|
|
20
19
|
it('should handle onClick', async () => {
|
|
21
20
|
const spy = jest.fn();
|
|
22
21
|
render(<AttachButton onClick={spy} />);
|
|
23
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
22
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
24
23
|
expect(screen.getByRole('tooltip', { name: 'Attach' })).toBeTruthy();
|
|
25
24
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
26
25
|
});
|
|
27
26
|
it('should handle className prop', () => {
|
|
28
27
|
render(<AttachButton className="test" />);
|
|
29
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
28
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toHaveClass('test');
|
|
30
29
|
});
|
|
31
30
|
it('should handle custom tooltip correctly', async () => {
|
|
32
31
|
render(<AttachButton onClick={jest.fn} tooltipContent="Test" />);
|
|
33
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
32
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
34
33
|
expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
|
|
35
34
|
});
|
|
36
35
|
it('should handle tooltipProps prop', async () => {
|
|
37
36
|
render(<AttachButton tooltipProps={{ id: 'test' }} />);
|
|
38
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
37
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
39
38
|
expect(screen.getByRole('tooltip', { name: 'Attach' })).toHaveAttribute('id', 'test');
|
|
40
39
|
});
|
|
41
40
|
// Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
|
|
@@ -43,7 +42,7 @@ describe('Attach button', () => {
|
|
|
43
42
|
it('should handle onAttachAccepted prop', async () => {
|
|
44
43
|
const spy = jest.fn();
|
|
45
44
|
render(<AttachButton onAttachAccepted={spy} inputTestId="input" />);
|
|
46
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
45
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
47
46
|
const file = new File(['test'], 'test.json');
|
|
48
47
|
const input = screen.getByTestId('input') as HTMLInputElement;
|
|
49
48
|
await userEvent.upload(input, file);
|
|
@@ -54,4 +53,124 @@ describe('Attach button', () => {
|
|
|
54
53
|
render(<AttachButton isCompact data-testid="button" />);
|
|
55
54
|
expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
|
56
55
|
});
|
|
56
|
+
|
|
57
|
+
it('should set correct accept attribute on file input', async () => {
|
|
58
|
+
render(<AttachButton inputTestId="input" allowedFileTypes={{ 'text/plain': ['.txt'] }} />);
|
|
59
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
60
|
+
const input = screen.getByTestId('input') as HTMLInputElement;
|
|
61
|
+
expect(input).toHaveAttribute('accept', 'text/plain,.txt');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should call onAttachAccepted when file type is accepted', async () => {
|
|
65
|
+
const onAttachAccepted = jest.fn();
|
|
66
|
+
render(
|
|
67
|
+
<AttachButton
|
|
68
|
+
inputTestId="input"
|
|
69
|
+
allowedFileTypes={{ 'text/plain': ['.txt'] }}
|
|
70
|
+
onAttachAccepted={onAttachAccepted}
|
|
71
|
+
/>
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const file = new File(['hello'], 'example.txt', { type: 'text/plain' });
|
|
75
|
+
const input = screen.getByTestId('input');
|
|
76
|
+
|
|
77
|
+
await userEvent.upload(input, file);
|
|
78
|
+
|
|
79
|
+
expect(onAttachAccepted).toHaveBeenCalled();
|
|
80
|
+
const [attachedFile] = onAttachAccepted.mock.calls[0][0];
|
|
81
|
+
expect(attachedFile).toEqual(file);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('should not call onAttachAccepted when file type is not accepted', async () => {
|
|
85
|
+
const onAttachAccepted = jest.fn();
|
|
86
|
+
render(
|
|
87
|
+
<AttachButton
|
|
88
|
+
inputTestId="input"
|
|
89
|
+
allowedFileTypes={{ 'text/plain': ['.txt'] }}
|
|
90
|
+
onAttachAccepted={onAttachAccepted}
|
|
91
|
+
/>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const file = new File(['[]'], 'example.json', { type: 'application/json' });
|
|
95
|
+
const input = screen.getByTestId('input');
|
|
96
|
+
|
|
97
|
+
await userEvent.upload(input, file);
|
|
98
|
+
|
|
99
|
+
expect(onAttachAccepted).not.toHaveBeenCalled();
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('should respect minSize restriction', async () => {
|
|
103
|
+
const onAttachRejected = jest.fn();
|
|
104
|
+
render(<AttachButton inputTestId="input" minSize={1000} onAttachRejected={onAttachRejected} />);
|
|
105
|
+
|
|
106
|
+
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
107
|
+
const input = screen.getByTestId('input');
|
|
108
|
+
|
|
109
|
+
await userEvent.upload(input, file);
|
|
110
|
+
|
|
111
|
+
expect(onAttachRejected).toHaveBeenCalled();
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('should respect maxSize restriction', async () => {
|
|
115
|
+
const onAttachRejected = jest.fn();
|
|
116
|
+
render(<AttachButton inputTestId="input" maxSize={100} onAttachRejected={onAttachRejected} />);
|
|
117
|
+
|
|
118
|
+
const largeContent = 'x'.repeat(200);
|
|
119
|
+
const file = new File([largeContent], 'example.txt', { type: 'text/plain' });
|
|
120
|
+
const input = screen.getByTestId('input');
|
|
121
|
+
|
|
122
|
+
await userEvent.upload(input, file);
|
|
123
|
+
|
|
124
|
+
expect(onAttachRejected).toHaveBeenCalled();
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('should respect maxFiles restriction', async () => {
|
|
128
|
+
const onAttachRejected = jest.fn();
|
|
129
|
+
render(<AttachButton inputTestId="input" maxFiles={1} onAttachRejected={onAttachRejected} />);
|
|
130
|
+
|
|
131
|
+
const files = [
|
|
132
|
+
new File(['Test1'], 'example1.txt', { type: 'text/plain' }),
|
|
133
|
+
new File(['Test2'], 'example2.txt', { type: 'text/plain' })
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const input = screen.getByTestId('input');
|
|
137
|
+
await userEvent.upload(input, files);
|
|
138
|
+
|
|
139
|
+
expect(onAttachRejected).toHaveBeenCalled();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('should be disabled when isAttachmentDisabled is true', async () => {
|
|
143
|
+
const onFileDrop = jest.fn();
|
|
144
|
+
render(<AttachButton inputTestId="input" isAttachmentDisabled={true} />);
|
|
145
|
+
|
|
146
|
+
const file = new File(['Test'], 'example.text', { type: 'text/plain' });
|
|
147
|
+
const input = screen.getByTestId('input');
|
|
148
|
+
await userEvent.upload(input, file);
|
|
149
|
+
|
|
150
|
+
expect(onFileDrop).not.toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('should call onAttach when files are attached', async () => {
|
|
154
|
+
const onAttach = jest.fn();
|
|
155
|
+
render(<AttachButton inputTestId="input" onAttach={onAttach} />);
|
|
156
|
+
|
|
157
|
+
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
158
|
+
const input = screen.getByTestId('input');
|
|
159
|
+
|
|
160
|
+
await userEvent.upload(input, file);
|
|
161
|
+
|
|
162
|
+
expect(onAttach).toHaveBeenCalled();
|
|
163
|
+
});
|
|
164
|
+
it('should use custom validator when provided', async () => {
|
|
165
|
+
const validator = jest.fn().mockReturnValue({ message: 'Custom error' });
|
|
166
|
+
const onAttachRejected = jest.fn();
|
|
167
|
+
render(<AttachButton inputTestId="input" validator={validator} onAttachRejected={onAttachRejected} />);
|
|
168
|
+
|
|
169
|
+
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
170
|
+
const input = screen.getByTestId('input');
|
|
171
|
+
await userEvent.upload(input, file);
|
|
172
|
+
|
|
173
|
+
expect(validator).toHaveBeenCalledWith(file);
|
|
174
|
+
expect(onAttachRejected).toHaveBeenCalled();
|
|
175
|
+
});
|
|
57
176
|
});
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// Chatbot Footer - Message Bar - Attach
|
|
3
3
|
// ============================================================================
|
|
4
|
-
import
|
|
4
|
+
import type { Ref, FunctionComponent } from 'react';
|
|
5
|
+
|
|
6
|
+
import { forwardRef } from 'react';
|
|
5
7
|
|
|
6
8
|
// Import PatternFly components
|
|
7
9
|
import { Button, ButtonProps, DropEvent, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
|
8
|
-
import { useDropzone } from 'react-dropzone';
|
|
10
|
+
import { Accept, DropzoneOptions, FileError, FileRejection, useDropzone } from 'react-dropzone';
|
|
9
11
|
import { PaperclipIcon } from '@patternfly/react-icons/dist/esm/icons/paperclip-icon';
|
|
10
12
|
|
|
11
13
|
export interface AttachButtonProps extends ButtonProps {
|
|
@@ -13,6 +15,12 @@ export interface AttachButtonProps extends ButtonProps {
|
|
|
13
15
|
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
14
16
|
/** Callback function for AttachButton when an attachment is made */
|
|
15
17
|
onAttachAccepted?: (data: File[], event: DropEvent) => void;
|
|
18
|
+
/** Specifies the file types accepted by the attachment upload component.
|
|
19
|
+
* Files that don't match the accepted types will be disabled in the file picker.
|
|
20
|
+
* For example,
|
|
21
|
+
* allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
|
|
22
|
+
**/
|
|
23
|
+
allowedFileTypes?: Accept;
|
|
16
24
|
/** Class name for AttachButton */
|
|
17
25
|
className?: string;
|
|
18
26
|
/** Props to control if the AttachButton should be disabled */
|
|
@@ -25,10 +33,27 @@ export interface AttachButtonProps extends ButtonProps {
|
|
|
25
33
|
tooltipContent?: string;
|
|
26
34
|
/** Test id applied to input */
|
|
27
35
|
inputTestId?: string;
|
|
36
|
+
/** Whether button is compact */
|
|
28
37
|
isCompact?: boolean;
|
|
38
|
+
/** Minimum file size allowed */
|
|
39
|
+
minSize?: number;
|
|
40
|
+
/** Max file size allowed */
|
|
41
|
+
maxSize?: number;
|
|
42
|
+
/** Max number of files allowed */
|
|
43
|
+
maxFiles?: number;
|
|
44
|
+
/** Whether attachments are disabled */
|
|
45
|
+
isAttachmentDisabled?: boolean;
|
|
46
|
+
/** Callback when file(s) are attached */
|
|
47
|
+
onAttach?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
|
|
48
|
+
/** Callback function for AttachButton when an attachment fails */
|
|
49
|
+
onAttachRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
|
|
50
|
+
/** Validator for files; see https://react-dropzone.js.org/#!/Custom%20validation for more information */
|
|
51
|
+
validator?: <T extends File>(file: T) => FileError | readonly FileError[] | null;
|
|
52
|
+
/** Additional props passed to react-dropzone */
|
|
53
|
+
dropzoneProps?: DropzoneOptions;
|
|
29
54
|
}
|
|
30
55
|
|
|
31
|
-
const AttachButtonBase:
|
|
56
|
+
const AttachButtonBase: FunctionComponent<AttachButtonProps> = ({
|
|
32
57
|
onAttachAccepted,
|
|
33
58
|
onClick,
|
|
34
59
|
isDisabled,
|
|
@@ -38,11 +63,29 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
|
38
63
|
tooltipContent = 'Attach',
|
|
39
64
|
inputTestId,
|
|
40
65
|
isCompact,
|
|
66
|
+
allowedFileTypes,
|
|
67
|
+
minSize,
|
|
68
|
+
maxSize,
|
|
69
|
+
maxFiles,
|
|
70
|
+
isAttachmentDisabled,
|
|
71
|
+
onAttach,
|
|
72
|
+
onAttachRejected,
|
|
73
|
+
validator,
|
|
74
|
+
dropzoneProps,
|
|
41
75
|
...props
|
|
42
76
|
}: AttachButtonProps) => {
|
|
43
77
|
const { open, getInputProps } = useDropzone({
|
|
44
78
|
multiple: true,
|
|
45
|
-
onDropAccepted: onAttachAccepted
|
|
79
|
+
onDropAccepted: onAttachAccepted,
|
|
80
|
+
accept: allowedFileTypes,
|
|
81
|
+
minSize,
|
|
82
|
+
maxSize,
|
|
83
|
+
maxFiles,
|
|
84
|
+
disabled: isAttachmentDisabled,
|
|
85
|
+
onDrop: onAttach,
|
|
86
|
+
onDropRejected: onAttachRejected,
|
|
87
|
+
validator,
|
|
88
|
+
...dropzoneProps
|
|
46
89
|
});
|
|
47
90
|
|
|
48
91
|
return (
|
|
@@ -65,7 +108,7 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
|
65
108
|
variant="plain"
|
|
66
109
|
ref={innerRef}
|
|
67
110
|
className={`pf-chatbot__button--attach ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
|
|
68
|
-
aria-label={props['aria-label'] || 'Attach
|
|
111
|
+
aria-label={props['aria-label'] || 'Attach'}
|
|
69
112
|
isDisabled={isDisabled}
|
|
70
113
|
onClick={onClick ?? open}
|
|
71
114
|
icon={
|
|
@@ -81,6 +124,6 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
|
81
124
|
);
|
|
82
125
|
};
|
|
83
126
|
|
|
84
|
-
export const AttachButton =
|
|
127
|
+
export const AttachButton = forwardRef((props: AttachButtonProps, ref: Ref<any>) => (
|
|
85
128
|
<AttachButtonBase innerRef={ref} {...props} />
|
|
86
129
|
));
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import '@testing-library/jest-dom';
|
|
2
|
-
import React from 'react';
|
|
3
2
|
import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
|
|
4
3
|
import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
|
|
5
4
|
import { render, screen } from '@testing-library/react';
|
|
6
5
|
import userEvent from '@testing-library/user-event';
|
|
6
|
+
import { createRef } from 'react';
|
|
7
7
|
import SourceDetailsMenuItem from '../SourceDetailsMenuItem';
|
|
8
8
|
import { MessageBar } from './MessageBar';
|
|
9
9
|
|
|
@@ -73,9 +73,9 @@ describe('Message bar', () => {
|
|
|
73
73
|
});
|
|
74
74
|
it('should render correctly', () => {
|
|
75
75
|
render(<MessageBar onSendMessage={jest.fn} />);
|
|
76
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
77
|
-
expect(screen.queryByRole('button', { name: 'Send
|
|
78
|
-
expect(screen.queryByRole('button', { name: '
|
|
76
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
|
|
77
|
+
expect(screen.queryByRole('button', { name: 'Send' })).toBeFalsy();
|
|
78
|
+
expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
|
|
79
79
|
expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
|
|
80
80
|
});
|
|
81
81
|
it('can send via enter key', async () => {
|
|
@@ -110,15 +110,15 @@ describe('Message bar', () => {
|
|
|
110
110
|
const input = screen.getByRole('textbox', { name: /Send a message.../i });
|
|
111
111
|
await userEvent.type(input, 'Hello world');
|
|
112
112
|
expect(input).toHaveTextContent('Hello world');
|
|
113
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
113
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
|
114
114
|
});
|
|
115
115
|
it('can disable send button shown when text is input', async () => {
|
|
116
116
|
render(<MessageBar onSendMessage={jest.fn} isSendButtonDisabled />);
|
|
117
117
|
const input = screen.getByRole('textbox', { name: /Send a message.../i });
|
|
118
118
|
await userEvent.type(input, 'Hello world');
|
|
119
119
|
expect(input).toHaveTextContent('Hello world');
|
|
120
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
121
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
120
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
|
121
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
|
|
122
122
|
});
|
|
123
123
|
it('can click send button', async () => {
|
|
124
124
|
const spy = jest.fn();
|
|
@@ -126,28 +126,39 @@ describe('Message bar', () => {
|
|
|
126
126
|
const input = screen.getByRole('textbox', { name: /Send a message.../i });
|
|
127
127
|
await userEvent.type(input, 'Hello world');
|
|
128
128
|
expect(input).toHaveTextContent('Hello world');
|
|
129
|
-
const sendButton = screen.getByRole('button', { name: 'Send
|
|
129
|
+
const sendButton = screen.getByRole('button', { name: 'Send' });
|
|
130
130
|
expect(sendButton).toBeTruthy();
|
|
131
131
|
await userEvent.click(sendButton);
|
|
132
132
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
133
133
|
});
|
|
134
134
|
it('can always show send button', () => {
|
|
135
135
|
render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton />);
|
|
136
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
137
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
136
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
|
137
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeEnabled();
|
|
138
138
|
});
|
|
139
139
|
it('can disable send button if always showing', () => {
|
|
140
140
|
render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton isSendButtonDisabled />);
|
|
141
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
142
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
141
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
|
142
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
|
|
143
143
|
});
|
|
144
144
|
it('can handle buttonProps tooltipContent appropriately for send', async () => {
|
|
145
145
|
render(
|
|
146
146
|
<MessageBar onSendMessage={jest.fn} alwayShowSendButton buttonProps={{ send: { tooltipContent: 'Test' } }} />
|
|
147
147
|
);
|
|
148
|
-
await userEvent.click(screen.getByRole('button', { name: 'Send
|
|
148
|
+
await userEvent.click(screen.getByRole('button', { name: 'Send' }));
|
|
149
149
|
expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
|
|
150
150
|
});
|
|
151
|
+
it('can handle buttonProps tooltipProps appropriately for send', () => {
|
|
152
|
+
render(
|
|
153
|
+
<MessageBar
|
|
154
|
+
onSendMessage={jest.fn}
|
|
155
|
+
alwayShowSendButton
|
|
156
|
+
buttonProps={{ send: { tooltipProps: { isVisible: true } } }}
|
|
157
|
+
/>
|
|
158
|
+
);
|
|
159
|
+
// isVisible, so no need for click
|
|
160
|
+
expect(screen.getByRole('tooltip', { name: 'Send' })).toBeTruthy();
|
|
161
|
+
});
|
|
151
162
|
it('can handle buttonProps props appropriately for send', async () => {
|
|
152
163
|
render(
|
|
153
164
|
<MessageBar
|
|
@@ -203,13 +214,13 @@ describe('Message bar', () => {
|
|
|
203
214
|
expect(screen.queryByRole('menuitem', { name: /Logs/i })).toBeFalsy();
|
|
204
215
|
expect(screen.queryByRole('menuitem', { name: /YAML - Status/i })).toBeFalsy();
|
|
205
216
|
expect(screen.queryByRole('menuitem', { name: /YAML - All contents/i })).toBeFalsy();
|
|
206
|
-
const attachButton = screen.getByRole('button', { name: 'Attach
|
|
217
|
+
const attachButton = screen.getByRole('button', { name: 'Attach' });
|
|
207
218
|
await userEvent.click(attachButton);
|
|
208
219
|
expect(attachToggleClickSpy).toHaveBeenCalledTimes(1);
|
|
209
220
|
});
|
|
210
221
|
it('can hide attach button', () => {
|
|
211
222
|
render(<MessageBar onSendMessage={jest.fn} hasAttachButton={false} />);
|
|
212
|
-
expect(screen.queryByRole('button', { name: 'Attach
|
|
223
|
+
expect(screen.queryByRole('button', { name: 'Attach' })).toBeFalsy();
|
|
213
224
|
});
|
|
214
225
|
// Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
|
|
215
226
|
// See also https://developer.mozilla.org/en-US/docs/Web/API/File/File for what that file variable is doing
|
|
@@ -223,19 +234,30 @@ describe('Message bar', () => {
|
|
|
223
234
|
buttonProps={{ attach: { inputTestId: 'input' } }}
|
|
224
235
|
/>
|
|
225
236
|
);
|
|
226
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
227
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
237
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
|
|
238
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
228
239
|
const file = new File(['test'], 'test.json');
|
|
229
240
|
const input = screen.getByTestId('input') as HTMLInputElement;
|
|
230
241
|
await userEvent.upload(input, file);
|
|
231
242
|
expect(input.files).toHaveLength(1);
|
|
232
243
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
233
244
|
});
|
|
234
|
-
it('can handle buttonProps tooltipContent
|
|
245
|
+
it('can handle buttonProps tooltipContent appropriately for attach', async () => {
|
|
235
246
|
render(<MessageBar onSendMessage={jest.fn} hasAttachButton buttonProps={{ attach: { tooltipContent: 'Test' } }} />);
|
|
236
|
-
await userEvent.click(screen.getByRole('button', { name: 'Attach
|
|
247
|
+
await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
|
|
237
248
|
expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
|
|
238
249
|
});
|
|
250
|
+
it('can handle buttonProps tooltipProps appropriately for attach', () => {
|
|
251
|
+
render(
|
|
252
|
+
<MessageBar
|
|
253
|
+
onSendMessage={jest.fn}
|
|
254
|
+
alwayShowSendButton
|
|
255
|
+
buttonProps={{ attach: { tooltipProps: { isVisible: true } } }}
|
|
256
|
+
/>
|
|
257
|
+
);
|
|
258
|
+
// isVisible, so no need for click
|
|
259
|
+
expect(screen.getByRole('tooltip', { name: 'Attach' })).toBeTruthy();
|
|
260
|
+
});
|
|
239
261
|
it('can handle buttonProps props appropriately for attach', async () => {
|
|
240
262
|
render(
|
|
241
263
|
<MessageBar
|
|
@@ -251,12 +273,12 @@ describe('Message bar', () => {
|
|
|
251
273
|
// --------------------------------------------------------------------------
|
|
252
274
|
it('can show stop button', () => {
|
|
253
275
|
render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={jest.fn} />);
|
|
254
|
-
expect(screen.getByRole('button', { name: 'Stop
|
|
276
|
+
expect(screen.getByRole('button', { name: 'Stop' })).toBeTruthy();
|
|
255
277
|
});
|
|
256
278
|
it('can call handleStopButton', async () => {
|
|
257
279
|
const spy = jest.fn();
|
|
258
280
|
render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={spy} />);
|
|
259
|
-
await userEvent.click(screen.getByRole('button', { name: 'Stop
|
|
281
|
+
await userEvent.click(screen.getByRole('button', { name: 'Stop' }));
|
|
260
282
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
261
283
|
});
|
|
262
284
|
it('can handle buttonProps tooltipContent appropriately for stop', async () => {
|
|
@@ -268,9 +290,21 @@ describe('Message bar', () => {
|
|
|
268
290
|
buttonProps={{ stop: { tooltipContent: 'Test' } }}
|
|
269
291
|
/>
|
|
270
292
|
);
|
|
271
|
-
await userEvent.click(screen.getByRole('button', { name: 'Stop
|
|
293
|
+
await userEvent.click(screen.getByRole('button', { name: 'Stop' }));
|
|
272
294
|
expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
|
|
273
295
|
});
|
|
296
|
+
it('can handle buttonProps tooltipProps appropriately for stop', () => {
|
|
297
|
+
render(
|
|
298
|
+
<MessageBar
|
|
299
|
+
onSendMessage={jest.fn}
|
|
300
|
+
hasStopButton
|
|
301
|
+
handleStopButton={jest.fn}
|
|
302
|
+
buttonProps={{ stop: { tooltipProps: { isVisible: true } } }}
|
|
303
|
+
/>
|
|
304
|
+
);
|
|
305
|
+
// isVisible, so no need for click
|
|
306
|
+
expect(screen.getByRole('tooltip', { name: 'Stop' })).toBeTruthy();
|
|
307
|
+
});
|
|
274
308
|
it('can handle buttonProps props appropriately for stop', async () => {
|
|
275
309
|
render(
|
|
276
310
|
<MessageBar
|
|
@@ -287,12 +321,12 @@ describe('Message bar', () => {
|
|
|
287
321
|
// --------------------------------------------------------------------------
|
|
288
322
|
it('can hide microphone button when window.SpeechRecognition is not there', () => {
|
|
289
323
|
render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
|
|
290
|
-
expect(screen.queryByRole('button', { name: '
|
|
324
|
+
expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
|
|
291
325
|
});
|
|
292
326
|
it('can show microphone button', () => {
|
|
293
327
|
mockSpeechRecognition();
|
|
294
328
|
render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
|
|
295
|
-
expect(screen.getByRole('button', { name: '
|
|
329
|
+
expect(screen.getByRole('button', { name: 'Use microphone' })).toBeTruthy();
|
|
296
330
|
});
|
|
297
331
|
it('can handle buttonProps appropriately for microphone', async () => {
|
|
298
332
|
mockSpeechRecognition();
|
|
@@ -305,18 +339,29 @@ describe('Message bar', () => {
|
|
|
305
339
|
}}
|
|
306
340
|
/>
|
|
307
341
|
);
|
|
308
|
-
await userEvent.click(screen.getByRole('button', { name: '
|
|
342
|
+
await userEvent.click(screen.getByRole('button', { name: 'Use microphone' }));
|
|
309
343
|
expect(screen.getByRole('tooltip', { name: 'Currently listening' })).toBeTruthy();
|
|
310
|
-
await userEvent.click(screen.getByRole('button', { name: '
|
|
344
|
+
await userEvent.click(screen.getByRole('button', { name: 'Stop listening' }));
|
|
311
345
|
expect(screen.getByRole('tooltip', { name: 'Not currently listening' })).toBeTruthy();
|
|
312
346
|
});
|
|
313
347
|
it('can customize the listening placeholder', async () => {
|
|
314
348
|
mockSpeechRecognition();
|
|
315
349
|
render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton listeningText="I am listening" />);
|
|
316
|
-
await userEvent.click(screen.getByRole('button', { name: '
|
|
350
|
+
await userEvent.click(screen.getByRole('button', { name: 'Use microphone' }));
|
|
317
351
|
const input = screen.getByRole('textbox', { name: /I am listening/i });
|
|
318
352
|
expect(input).toBeTruthy();
|
|
319
353
|
});
|
|
354
|
+
it('can handle buttonProps tooltipProps appropriately for microphone', () => {
|
|
355
|
+
render(
|
|
356
|
+
<MessageBar
|
|
357
|
+
onSendMessage={jest.fn}
|
|
358
|
+
hasMicrophoneButton
|
|
359
|
+
buttonProps={{ microphone: { tooltipProps: { isVisible: true } } }}
|
|
360
|
+
/>
|
|
361
|
+
);
|
|
362
|
+
// isVisible, so no need for click
|
|
363
|
+
expect(screen.getByRole('tooltip', { name: 'Use microphone' })).toBeTruthy();
|
|
364
|
+
});
|
|
320
365
|
it('can handle buttonProps props appropriately for microphone', async () => {
|
|
321
366
|
mockSpeechRecognition();
|
|
322
367
|
render(
|
|
@@ -330,10 +375,16 @@ describe('Message bar', () => {
|
|
|
330
375
|
});
|
|
331
376
|
it('can be controlled', () => {
|
|
332
377
|
render(<MessageBar onSendMessage={jest.fn} value="test" />);
|
|
333
|
-
expect(screen.getByRole('button', { name: 'Attach
|
|
334
|
-
expect(screen.getByRole('button', { name: 'Send
|
|
335
|
-
expect(screen.queryByRole('button', { name: '
|
|
378
|
+
expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
|
|
379
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
|
380
|
+
expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
|
|
336
381
|
expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
|
|
337
382
|
expect(screen.getByRole('textbox', { name: /Send a message.../i })).toHaveValue('test');
|
|
338
383
|
});
|
|
384
|
+
it('should focus textarea when using a custom ref', () => {
|
|
385
|
+
const ref = createRef<HTMLTextAreaElement>();
|
|
386
|
+
render(<MessageBar onSendMessage={jest.fn} innerRef={ref} />);
|
|
387
|
+
ref.current?.focus();
|
|
388
|
+
expect(document.activeElement).toBe(screen.getByRole('textbox'));
|
|
389
|
+
});
|
|
339
390
|
});
|