@patternfly/chatbot 6.3.0-prerelease.2 → 6.3.0-prerelease.20
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 +14 -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 +3 -2
- package/dist/cjs/Chatbot/Chatbot.js +5 -10
- package/dist/cjs/Chatbot/Chatbot.test.js +13 -9
- 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 +4 -2
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -34
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +58 -62
- 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 +4 -3
- package/dist/cjs/ChatbotFooter/ChatbotFooter.js +3 -16
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +10 -5
- 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 +5 -4
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +19 -10
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +10 -8
- 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 +5 -4
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -8
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +10 -8
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +7 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +22 -19
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +9 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -12
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +20 -17
- 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 +5 -2
- package/dist/cjs/ChatbotModal/ChatbotModal.js +4 -10
- package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
- package/dist/cjs/ChatbotModal/ChatbotModal.test.js +16 -0
- 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 +3 -2
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +7 -21
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +18 -14
- package/dist/cjs/CodeModal/CodeModal.d.ts +10 -2
- package/dist/cjs/CodeModal/CodeModal.js +8 -20
- package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
- package/dist/cjs/CodeModal/CodeModal.test.js +34 -0
- 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 +9 -2
- package/dist/cjs/FileDropZone/FileDropZone.js +6 -9
- package/dist/cjs/FileDropZone/FileDropZone.test.js +31 -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 +22 -16
- package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
- package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +136 -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 +26 -8
- package/dist/cjs/Message/Message.js +50 -72
- package/dist/cjs/Message/Message.test.js +119 -81
- 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/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
- package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +4 -2
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +8 -10
- 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 +4 -2
- package/dist/cjs/Message/QuickStarts/QuickStartTile.js +8 -44
- 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 +13 -24
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +55 -51
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +21 -45
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +83 -89
- package/dist/cjs/MessageBar/AttachButton.d.ts +9 -2
- package/dist/cjs/MessageBar/AttachButton.js +9 -17
- package/dist/cjs/MessageBar/AttachButton.test.js +50 -22
- package/dist/cjs/MessageBar/MessageBar.d.ts +16 -3
- package/dist/cjs/MessageBar/MessageBar.js +36 -37
- package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
- package/dist/cjs/MessageBar/MicrophoneButton.d.ts +3 -2
- package/dist/cjs/MessageBar/MicrophoneButton.js +8 -15
- package/dist/cjs/MessageBar/SendButton.d.ts +4 -2
- package/dist/cjs/MessageBar/SendButton.js +4 -12
- package/dist/cjs/MessageBar/SendButton.test.js +18 -14
- package/dist/cjs/MessageBar/StopButton.d.ts +4 -2
- package/dist/cjs/MessageBar/StopButton.js +4 -13
- package/dist/cjs/MessageBar/StopButton.test.js +18 -14
- 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 +181 -44
- package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
- package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +14 -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 +6 -3
- package/dist/cjs/ResponseActions/ResponseActions.js +10 -14
- package/dist/cjs/ResponseActions/ResponseActions.test.js +55 -40
- package/dist/cjs/Settings/SettingsForm.d.ts +4 -2
- package/dist/cjs/Settings/SettingsForm.js +3 -9
- package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -1
- package/dist/cjs/Settings/SettingsForm.test.js +18 -9
- package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
- package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
- package/dist/cjs/SourcesCard/SourcesCard.d.ts +2 -2
- package/dist/cjs/SourcesCard/SourcesCard.js +17 -43
- package/dist/cjs/SourcesCard/SourcesCard.test.js +60 -60
- package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +5 -3
- package/dist/cjs/TermsOfUse/TermsOfUse.js +5 -17
- package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
- package/dist/css/main.css +228 -15
- 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 +14 -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 +3 -2
- package/dist/esm/Chatbot/Chatbot.js +5 -7
- package/dist/esm/Chatbot/Chatbot.test.js +9 -5
- 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 +4 -2
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -34
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +29 -33
- 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 +4 -3
- package/dist/esm/ChatbotFooter/ChatbotFooter.js +3 -13
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +8 -3
- 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 +5 -4
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -8
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +8 -3
- 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 +5 -4
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -8
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +8 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +7 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +13 -7
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +9 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +13 -7
- 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 +5 -2
- package/dist/esm/ChatbotModal/ChatbotModal.js +4 -7
- package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
- package/dist/esm/ChatbotModal/ChatbotModal.test.js +11 -0
- 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 +3 -2
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +7 -18
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +11 -7
- package/dist/esm/CodeModal/CodeModal.d.ts +10 -2
- package/dist/esm/CodeModal/CodeModal.js +8 -20
- package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
- package/dist/esm/CodeModal/CodeModal.test.js +29 -0
- 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 +9 -2
- package/dist/esm/FileDropZone/FileDropZone.js +6 -6
- package/dist/esm/FileDropZone/FileDropZone.test.js +29 -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 +23 -17
- package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
- package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +130 -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 +26 -8
- package/dist/esm/Message/Message.js +50 -72
- package/dist/esm/Message/Message.test.js +119 -81
- 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/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
- package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +43 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +4 -2
- package/dist/esm/Message/QuickResponse/QuickResponse.js +8 -7
- 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 +4 -2
- package/dist/esm/Message/QuickStarts/QuickStartTile.js +8 -21
- 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 +13 -24
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +24 -20
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +21 -45
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +29 -35
- package/dist/esm/MessageBar/AttachButton.d.ts +9 -2
- package/dist/esm/MessageBar/AttachButton.js +9 -14
- package/dist/esm/MessageBar/AttachButton.test.js +44 -16
- package/dist/esm/MessageBar/MessageBar.d.ts +16 -3
- package/dist/esm/MessageBar/MessageBar.js +34 -35
- package/dist/esm/MessageBar/MessageBar.test.js +87 -73
- package/dist/esm/MessageBar/MicrophoneButton.d.ts +3 -2
- package/dist/esm/MessageBar/MicrophoneButton.js +8 -12
- package/dist/esm/MessageBar/SendButton.d.ts +4 -2
- package/dist/esm/MessageBar/SendButton.js +4 -9
- package/dist/esm/MessageBar/SendButton.test.js +13 -9
- package/dist/esm/MessageBar/StopButton.d.ts +4 -2
- package/dist/esm/MessageBar/StopButton.js +4 -10
- package/dist/esm/MessageBar/StopButton.test.js +13 -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 +181 -44
- package/dist/esm/MessageBox/MessageBox.test.js +220 -7
- package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +14 -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 +6 -3
- package/dist/esm/ResponseActions/ResponseActions.js +10 -14
- package/dist/esm/ResponseActions/ResponseActions.test.js +30 -15
- package/dist/esm/Settings/SettingsForm.d.ts +4 -2
- package/dist/esm/Settings/SettingsForm.js +3 -6
- package/dist/esm/Settings/SettingsForm.test.d.ts +1 -1
- package/dist/esm/Settings/SettingsForm.test.js +16 -4
- package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
- package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
- package/dist/esm/SourcesCard/SourcesCard.d.ts +2 -2
- package/dist/esm/SourcesCard/SourcesCard.js +17 -40
- package/dist/esm/SourcesCard/SourcesCard.test.js +19 -19
- package/dist/esm/TermsOfUse/TermsOfUse.d.ts +5 -3
- package/dist/esm/TermsOfUse/TermsOfUse.js +5 -17
- 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 +14 -5
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +19 -12
- 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/MessageWithCustomResponseActions.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +37 -4
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +26 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +13 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +24 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +14 -5
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +20 -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 +18 -9
- 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 +12 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +15 -6
- 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 +7 -7
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +282 -0
- 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 +179 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +17 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +9 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +17 -23
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +23 -14
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +14 -14
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +475 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +15 -20
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +15 -20
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +12 -12
- 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 +29 -7
- package/src/Chatbot/Chatbot.scss +7 -0
- package/src/Chatbot/Chatbot.test.tsx +9 -1
- package/src/Chatbot/Chatbot.tsx +9 -4
- 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.scss +38 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +21 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +17 -8
- package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
- package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
- package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -1
- package/src/ChatbotFooter/ChatbotFooter.tsx +6 -4
- package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
- package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
- package/src/ChatbotHeader/ChatbotHeader.scss +25 -0
- package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeader.tsx +4 -7
- package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +6 -1
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +17 -10
- package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderMain.tsx +5 -3
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -1
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +17 -12
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +15 -1
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +17 -7
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +19 -1
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +30 -6
- package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
- package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
- package/src/ChatbotModal/ChatbotModal.scss +15 -4
- package/src/ChatbotModal/ChatbotModal.test.tsx +58 -0
- package/src/ChatbotModal/ChatbotModal.tsx +7 -3
- package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
- package/src/ChatbotPopover/ChatbotPopover.tsx +2 -2
- package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
- package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +15 -4
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
- package/src/CodeModal/CodeModal.scss +11 -3
- package/src/CodeModal/CodeModal.test.tsx +51 -0
- package/src/CodeModal/CodeModal.tsx +24 -10
- 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 +2 -2
- package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
- package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
- package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
- package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
- package/src/FileDropZone/FileDropZone.test.tsx +29 -1
- package/src/FileDropZone/FileDropZone.tsx +13 -3
- 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 +105 -18
- package/src/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.tsx +220 -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.scss +27 -0
- package/src/Message/Message.test.tsx +66 -6
- package/src/Message/Message.tsx +41 -17
- package/src/Message/MessageInput.tsx +5 -5
- package/src/Message/MessageLoading.tsx +0 -2
- package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
- package/src/Message/QuickResponse/QuickResponse.tsx +9 -4
- package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
- package/src/Message/QuickStarts/QuickStartTile.tsx +8 -4
- 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 +25 -0
- package/src/Message/TextMessage/TextMessage.tsx +1 -2
- package/src/Message/UserFeedback/CloseButton.tsx +2 -2
- package/src/Message/UserFeedback/UserFeedback.scss +24 -3
- package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -1
- package/src/Message/UserFeedback/UserFeedback.tsx +12 -8
- package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -1
- package/src/Message/UserFeedback/UserFeedbackComplete.tsx +26 -16
- package/src/MessageBar/AttachButton.scss +10 -0
- package/src/MessageBar/AttachButton.test.tsx +56 -8
- package/src/MessageBar/AttachButton.tsx +21 -8
- package/src/MessageBar/MessageBar.scss +17 -0
- package/src/MessageBar/MessageBar.test.tsx +81 -30
- package/src/MessageBar/MessageBar.tsx +60 -25
- package/src/MessageBar/MicrophoneButton.scss +10 -0
- package/src/MessageBar/MicrophoneButton.tsx +15 -9
- package/src/MessageBar/SendButton.scss +10 -0
- package/src/MessageBar/SendButton.test.tsx +10 -7
- package/src/MessageBar/SendButton.tsx +9 -5
- package/src/MessageBar/StopButton.scss +10 -0
- package/src/MessageBar/StopButton.test.tsx +10 -7
- package/src/MessageBar/StopButton.tsx +9 -5
- package/src/MessageBox/JumpButton.test.tsx +4 -5
- package/src/MessageBox/JumpButton.tsx +3 -3
- package/src/MessageBox/MessageBox.scss +6 -0
- package/src/MessageBox/MessageBox.test.tsx +295 -5
- package/src/MessageBox/MessageBox.tsx +301 -82
- package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
- package/src/PreviewAttachment/PreviewAttachment.tsx +29 -7
- package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
- package/src/ResponseActions/ResponseActionButton.tsx +6 -5
- package/src/ResponseActions/ResponseActions.test.tsx +18 -2
- package/src/ResponseActions/ResponseActions.tsx +18 -8
- package/src/Settings/Settings.scss +11 -0
- package/src/Settings/SettingsForm.test.tsx +17 -1
- package/src/Settings/SettingsForm.tsx +8 -3
- package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
- package/src/SourcesCard/SourcesCard.scss +8 -0
- package/src/SourcesCard/SourcesCard.test.tsx +0 -1
- package/src/SourcesCard/SourcesCard.tsx +9 -8
- package/src/TermsOfUse/TermsOfUse.scss +20 -0
- package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
- package/src/TermsOfUse/TermsOfUse.tsx +15 -9
- package/tsconfig.cjs.json +0 -1
- package/tsconfig.json +3 -3
@@ -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
|
});
|
@@ -1,4 +1,6 @@
|
|
1
|
-
import
|
1
|
+
import type { ChangeEvent, FunctionComponent, KeyboardEvent as ReactKeyboardEvent, Ref } from 'react';
|
2
|
+
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
3
|
+
import { Accept } from 'react-dropzone/.';
|
2
4
|
import { ButtonProps, DropEvent, TextArea, TextAreaProps, TooltipProps } from '@patternfly/react-core';
|
3
5
|
|
4
6
|
// Import Chatbot components
|
@@ -30,7 +32,7 @@ export interface MessageBarWithAttachMenuProps {
|
|
30
32
|
onAttachMenuOpenChange?: (isOpen: boolean) => void;
|
31
33
|
}
|
32
34
|
|
33
|
-
export interface MessageBarProps extends TextAreaProps {
|
35
|
+
export interface MessageBarProps extends Omit<TextAreaProps, 'innerRef'> {
|
34
36
|
/** Callback to get the value of input message by user */
|
35
37
|
onSendMessage: (message: string | number) => void;
|
36
38
|
/** Class Name for the MessageBar component */
|
@@ -76,9 +78,19 @@ export interface MessageBarProps extends TextAreaProps {
|
|
76
78
|
onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string | number) => void;
|
77
79
|
/** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
|
78
80
|
displayMode?: ChatbotDisplayMode;
|
81
|
+
/** Whether message bar is compact */
|
82
|
+
isCompact?: boolean;
|
83
|
+
/** Specifies the file types accepted by the attachment upload component.
|
84
|
+
* Files that don't match the accepted types will be disabled in the file picker.
|
85
|
+
* For example,
|
86
|
+
* allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
|
87
|
+
**/
|
88
|
+
allowedFileTypes?: Accept;
|
89
|
+
/** Ref applied to message bar textarea, for use with focus or other custom behaviors */
|
90
|
+
innerRef?: React.Ref<HTMLTextAreaElement>;
|
79
91
|
}
|
80
92
|
|
81
|
-
export const
|
93
|
+
export const MessageBarBase: FunctionComponent<MessageBarProps> = ({
|
82
94
|
onSendMessage,
|
83
95
|
className,
|
84
96
|
alwayShowSendButton,
|
@@ -95,21 +107,27 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
95
107
|
onChange,
|
96
108
|
displayMode,
|
97
109
|
value,
|
110
|
+
isCompact = false,
|
111
|
+
allowedFileTypes,
|
112
|
+
innerRef,
|
98
113
|
...props
|
99
114
|
}: MessageBarProps) => {
|
100
115
|
// Text Input
|
101
116
|
// --------------------------------------------------------------------------
|
102
|
-
const [message, setMessage] =
|
103
|
-
const [isListeningMessage, setIsListeningMessage] =
|
104
|
-
const [hasSentMessage, setHasSentMessage] =
|
105
|
-
const
|
106
|
-
const
|
117
|
+
const [message, setMessage] = useState<string | number>(value ?? '');
|
118
|
+
const [isListeningMessage, setIsListeningMessage] = useState<boolean>(false);
|
119
|
+
const [hasSentMessage, setHasSentMessage] = useState(false);
|
120
|
+
const inputRef = useRef<HTMLTextAreaElement>(null);
|
121
|
+
const textareaRef = (innerRef as React.RefObject<HTMLTextAreaElement>) ?? inputRef;
|
122
|
+
const attachButtonRef = useRef<HTMLButtonElement>(null);
|
123
|
+
|
124
|
+
const topMargin = '1rem';
|
107
125
|
|
108
126
|
const setInitialLineHeight = (field: HTMLTextAreaElement) => {
|
109
127
|
field.style.setProperty('line-height', '1rem');
|
110
128
|
const parent = field.parentElement;
|
111
129
|
if (parent) {
|
112
|
-
parent.style.setProperty('margin-top',
|
130
|
+
parent.style.setProperty('margin-top', topMargin);
|
113
131
|
parent.style.setProperty('margin-bottom', `0rem`);
|
114
132
|
parent.style.setProperty('height', 'inherit');
|
115
133
|
|
@@ -135,8 +153,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
135
153
|
parent.style.setProperty('height', `${height}px`);
|
136
154
|
|
137
155
|
if (height > 32 || window.innerWidth <= 507) {
|
138
|
-
parent.style.setProperty('margin-bottom',
|
139
|
-
parent.style.setProperty('margin-top',
|
156
|
+
parent.style.setProperty('margin-bottom', topMargin);
|
157
|
+
parent.style.setProperty('margin-top', topMargin);
|
140
158
|
}
|
141
159
|
}
|
142
160
|
};
|
@@ -147,7 +165,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
147
165
|
return lines > 2;
|
148
166
|
};
|
149
167
|
|
150
|
-
const setAutoWidth =
|
168
|
+
const setAutoWidth = useCallback((field: HTMLTextAreaElement) => {
|
151
169
|
const parent = field.parentElement;
|
152
170
|
if (parent) {
|
153
171
|
const grandparent = parent.parentElement;
|
@@ -160,12 +178,12 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
160
178
|
const handleNewLine = (field: HTMLTextAreaElement) => {
|
161
179
|
const parent = field.parentElement;
|
162
180
|
if (parent) {
|
163
|
-
parent.style.setProperty('margin-bottom',
|
164
|
-
parent.style.setProperty('margin-top',
|
181
|
+
parent.style.setProperty('margin-bottom', topMargin);
|
182
|
+
parent.style.setProperty('margin-top', topMargin);
|
165
183
|
}
|
166
184
|
};
|
167
185
|
|
168
|
-
|
186
|
+
useEffect(() => {
|
169
187
|
const field = textareaRef.current;
|
170
188
|
if (field) {
|
171
189
|
if (field.value === '') {
|
@@ -196,19 +214,19 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
196
214
|
};
|
197
215
|
}, [setAutoWidth]);
|
198
216
|
|
199
|
-
|
217
|
+
useEffect(() => {
|
200
218
|
const field = textareaRef.current;
|
201
219
|
if (field) {
|
202
220
|
if (field.value === '') {
|
203
|
-
setInitialLineHeight(
|
221
|
+
setInitialLineHeight(field);
|
204
222
|
} else {
|
205
|
-
setAutoHeight(
|
223
|
+
setAutoHeight(field);
|
206
224
|
setAutoWidth(field);
|
207
225
|
}
|
208
226
|
}
|
209
227
|
}, [displayMode, message, setAutoWidth]);
|
210
228
|
|
211
|
-
|
229
|
+
useEffect(() => {
|
212
230
|
const field = textareaRef.current;
|
213
231
|
if (field) {
|
214
232
|
setInitialLineHeight(field);
|
@@ -216,7 +234,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
216
234
|
}
|
217
235
|
}, [hasSentMessage]);
|
218
236
|
|
219
|
-
const handleChange =
|
237
|
+
const handleChange = useCallback(
|
220
238
|
(event) => {
|
221
239
|
onChange && onChange(event, event.target.value);
|
222
240
|
if (textareaRef.current) {
|
@@ -232,7 +250,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
232
250
|
);
|
233
251
|
|
234
252
|
// Handle sending message
|
235
|
-
const handleSend =
|
253
|
+
const handleSend = useCallback(
|
236
254
|
(newMessage: string | number) => {
|
237
255
|
onSendMessage(newMessage);
|
238
256
|
setHasSentMessage(true);
|
@@ -241,8 +259,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
241
259
|
[onSendMessage]
|
242
260
|
);
|
243
261
|
|
244
|
-
const handleKeyDown =
|
245
|
-
(event:
|
262
|
+
const handleKeyDown = useCallback(
|
263
|
+
(event: ReactKeyboardEvent) => {
|
246
264
|
if (event.key === 'Enter' && !event.shiftKey) {
|
247
265
|
event.preventDefault();
|
248
266
|
if (!isSendButtonDisabled && !hasStopButton) {
|
@@ -265,7 +283,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
265
283
|
|
266
284
|
const handleSpeechRecognition = (message) => {
|
267
285
|
setMessage(message);
|
268
|
-
onChange && onChange({} as
|
286
|
+
onChange && onChange({} as ChangeEvent<HTMLTextAreaElement>, message);
|
269
287
|
};
|
270
288
|
|
271
289
|
const renderButtons = () => {
|
@@ -274,6 +292,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
274
292
|
<StopButton
|
275
293
|
onClick={handleStopButton}
|
276
294
|
tooltipContent={buttonProps?.stop?.tooltipContent}
|
295
|
+
isCompact={isCompact}
|
296
|
+
tooltipProps={buttonProps?.stop?.tooltipProps}
|
277
297
|
{...buttonProps?.stop?.props}
|
278
298
|
/>
|
279
299
|
);
|
@@ -286,6 +306,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
286
306
|
onClick={handleAttachMenuToggle}
|
287
307
|
isDisabled={isListeningMessage}
|
288
308
|
tooltipContent={buttonProps?.attach?.tooltipContent}
|
309
|
+
isCompact={isCompact}
|
310
|
+
tooltipProps={buttonProps?.attach?.tooltipProps}
|
311
|
+
allowedFileTypes={allowedFileTypes}
|
289
312
|
{...buttonProps?.attach?.props}
|
290
313
|
/>
|
291
314
|
)}
|
@@ -295,6 +318,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
295
318
|
isDisabled={isListeningMessage}
|
296
319
|
tooltipContent={buttonProps?.attach?.tooltipContent}
|
297
320
|
inputTestId={buttonProps?.attach?.inputTestId}
|
321
|
+
isCompact={isCompact}
|
322
|
+
tooltipProps={buttonProps?.attach?.tooltipProps}
|
323
|
+
allowedFileTypes={allowedFileTypes}
|
298
324
|
{...buttonProps?.attach?.props}
|
299
325
|
/>
|
300
326
|
)}
|
@@ -305,6 +331,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
305
331
|
onSpeechRecognition={handleSpeechRecognition}
|
306
332
|
tooltipContent={buttonProps?.microphone?.tooltipContent}
|
307
333
|
language={buttonProps?.microphone?.language}
|
334
|
+
isCompact={isCompact}
|
335
|
+
tooltipProps={buttonProps?.microphone?.tooltipProps}
|
308
336
|
{...buttonProps?.microphone?.props}
|
309
337
|
/>
|
310
338
|
)}
|
@@ -314,6 +342,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
314
342
|
onClick={() => handleSend(message)}
|
315
343
|
isDisabled={isSendButtonDisabled}
|
316
344
|
tooltipContent={buttonProps?.send?.tooltipContent}
|
345
|
+
isCompact={isCompact}
|
346
|
+
tooltipProps={buttonProps?.send?.tooltipProps}
|
317
347
|
{...buttonProps?.send?.props}
|
318
348
|
/>
|
319
349
|
)}
|
@@ -323,7 +353,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
323
353
|
|
324
354
|
const messageBarContents = (
|
325
355
|
<>
|
326
|
-
<div className=
|
356
|
+
<div className={`pf-chatbot__message-bar-input ${isCompact ? 'pf-m-compact' : ''}`}>
|
327
357
|
<TextArea
|
328
358
|
className="pf-chatbot__message-textarea"
|
329
359
|
value={message}
|
@@ -366,4 +396,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
366
396
|
return <div className={`pf-chatbot__message-bar ${className ?? ''}`}>{messageBarContents}</div>;
|
367
397
|
};
|
368
398
|
|
399
|
+
const MessageBar = forwardRef((props: MessageBarProps, ref: Ref<HTMLTextAreaElement>) => (
|
400
|
+
<MessageBarBase innerRef={ref} {...props} />
|
401
|
+
));
|
402
|
+
|
403
|
+
export { MessageBar };
|
369
404
|
export default MessageBar;
|
@@ -46,3 +46,13 @@
|
|
46
46
|
box-shadow: 0 0 0 16px rgba(0, 102, 204, 0);
|
47
47
|
}
|
48
48
|
}
|
49
|
+
|
50
|
+
// ============================================================================
|
51
|
+
// Information density styles
|
52
|
+
// ============================================================================
|
53
|
+
.pf-v6-c-button.pf-chatbot__button--microphone.pf-m-compact {
|
54
|
+
width: 1.5rem;
|
55
|
+
height: 1.5rem;
|
56
|
+
padding: var(--pf-t--global--spacer--sm);
|
57
|
+
align-items: center;
|
58
|
+
}
|
@@ -1,7 +1,9 @@
|
|
1
1
|
// ============================================================================
|
2
2
|
// Chatbot Footer - Message Bar - Microphone
|
3
3
|
// ============================================================================
|
4
|
-
import
|
4
|
+
import type { FunctionComponent } from 'react';
|
5
|
+
|
6
|
+
import { useState, useCallback, useEffect } from 'react';
|
5
7
|
|
6
8
|
// Import PatternFly components
|
7
9
|
import { Button, ButtonProps, Tooltip, TooltipProps, Icon } from '@patternfly/react-core';
|
@@ -24,9 +26,10 @@ export interface MicrophoneButtonProps extends ButtonProps {
|
|
24
26
|
tooltipContent?: { active?: string; inactive?: string };
|
25
27
|
/** Locale code for language speech recognition is conducted in. This should be in the format 'en-US', a.k.a. the ISO 639-1 code, a dash, and the ISO_3166-1 code. */
|
26
28
|
language?: string;
|
29
|
+
isCompact?: boolean;
|
27
30
|
}
|
28
31
|
|
29
|
-
export const MicrophoneButton:
|
32
|
+
export const MicrophoneButton: FunctionComponent<MicrophoneButtonProps> = ({
|
30
33
|
isListening,
|
31
34
|
onIsListeningChange,
|
32
35
|
onSpeechRecognition,
|
@@ -34,14 +37,15 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
34
37
|
tooltipProps,
|
35
38
|
tooltipContent = { active: 'Stop listening', inactive: 'Use microphone' },
|
36
39
|
language = 'en-US',
|
40
|
+
isCompact,
|
37
41
|
...props
|
38
42
|
}: MicrophoneButtonProps) => {
|
39
43
|
// Microphone
|
40
44
|
// --------------------------------------------------------------------------
|
41
|
-
const [speechRecognition, setSpeechRecognition] =
|
45
|
+
const [speechRecognition, setSpeechRecognition] = useState<SpeechRecognition>();
|
42
46
|
|
43
47
|
// Listen for speech
|
44
|
-
const startListening =
|
48
|
+
const startListening = useCallback(() => {
|
45
49
|
if (speechRecognition) {
|
46
50
|
speechRecognition.start();
|
47
51
|
onIsListeningChange(true);
|
@@ -49,7 +53,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
49
53
|
}, [onIsListeningChange, speechRecognition]);
|
50
54
|
|
51
55
|
// Stop listening for speech
|
52
|
-
const stopListening =
|
56
|
+
const stopListening = useCallback(() => {
|
53
57
|
if (speechRecognition && isListening) {
|
54
58
|
speechRecognition.stop();
|
55
59
|
onIsListeningChange(false);
|
@@ -57,7 +61,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
57
61
|
}, [isListening, onIsListeningChange, speechRecognition]);
|
58
62
|
|
59
63
|
// Detect speech recognition browser support
|
60
|
-
|
64
|
+
useEffect(() => {
|
61
65
|
if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
|
62
66
|
// Initialize SpeechRecognition
|
63
67
|
const recognition: SpeechRecognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
|
@@ -102,14 +106,16 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
102
106
|
>
|
103
107
|
<Button
|
104
108
|
variant="plain"
|
105
|
-
className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${className ?? ''}`}
|
106
|
-
aria-label={props['aria-label'] || '
|
109
|
+
className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
|
110
|
+
aria-label={props['aria-label'] || (isListening ? 'Stop listening' : 'Use microphone')}
|
111
|
+
aria-pressed={isListening}
|
107
112
|
onClick={isListening ? stopListening : startListening}
|
108
113
|
icon={
|
109
|
-
<Icon iconSize=
|
114
|
+
<Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>
|
110
115
|
<MicrophoneIcon />
|
111
116
|
</Icon>
|
112
117
|
}
|
118
|
+
size={isCompact ? 'sm' : undefined}
|
113
119
|
{...props}
|
114
120
|
/>
|
115
121
|
</Tooltip>
|
@@ -51,3 +51,13 @@
|
|
51
51
|
transform: translate3d(0, 0, 0);
|
52
52
|
}
|
53
53
|
}
|
54
|
+
|
55
|
+
// ============================================================================
|
56
|
+
// Information density styles
|
57
|
+
// ============================================================================
|
58
|
+
.pf-v6-c-button.pf-chatbot__button--send.pf-m-compact {
|
59
|
+
width: 1.5rem;
|
60
|
+
height: 1.5rem;
|
61
|
+
padding: var(--pf-t--global--spacer--sm);
|
62
|
+
align-items: center;
|
63
|
+
}
|
@@ -1,34 +1,33 @@
|
|
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';
|
5
4
|
import { SendButton } from './SendButton';
|
6
5
|
import { TooltipProps } from '@patternfly/react-core';
|
7
6
|
|
8
|
-
const renderSend = (props?: { [key: string]: string | Omit<TooltipProps, 'content'> }) => {
|
7
|
+
const renderSend = (props?: { [key: string]: string | boolean | Omit<TooltipProps, 'content'> }) => {
|
9
8
|
const spy = jest.fn();
|
10
9
|
render(<SendButton onClick={spy} {...props} />);
|
11
10
|
};
|
12
11
|
describe('Send button', () => {
|
13
12
|
it('should render button correctly', () => {
|
14
13
|
renderSend();
|
15
|
-
expect(screen.getByRole('button', { name: 'Send
|
14
|
+
expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
|
16
15
|
});
|
17
16
|
it('should handle onClick correctly', async () => {
|
18
17
|
const spy = jest.fn();
|
19
18
|
render(<SendButton onClick={spy} />);
|
20
|
-
await userEvent.click(screen.getByRole('button', { name: 'Send
|
19
|
+
await userEvent.click(screen.getByRole('button', { name: 'Send' }));
|
21
20
|
expect(screen.getByRole('tooltip', { name: 'Send' })).toBeTruthy();
|
22
21
|
expect(spy).toHaveBeenCalledTimes(1);
|
23
22
|
});
|
24
23
|
it('should handle custom tooltip correctly', async () => {
|
25
24
|
render(<SendButton onClick={jest.fn} tooltipContent="Test" />);
|
26
|
-
await userEvent.click(screen.getByRole('button', { name: 'Send
|
25
|
+
await userEvent.click(screen.getByRole('button', { name: 'Send' }));
|
27
26
|
expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
|
28
27
|
});
|
29
28
|
it('should handle className prop', () => {
|
30
29
|
renderSend({ className: 'test' });
|
31
|
-
expect(screen.getByRole('button', { name: 'Send
|
30
|
+
expect(screen.getByRole('button', { name: 'Send' })).toHaveClass('test');
|
32
31
|
});
|
33
32
|
|
34
33
|
it('should handle spread props, including aria-label', () => {
|
@@ -37,7 +36,11 @@ describe('Send button', () => {
|
|
37
36
|
});
|
38
37
|
it('should handle tooltipProps prop', async () => {
|
39
38
|
renderSend({ tooltipProps: { id: 'test' } });
|
40
|
-
await userEvent.click(screen.getByRole('button', { name: 'Send
|
39
|
+
await userEvent.click(screen.getByRole('button', { name: 'Send' }));
|
41
40
|
expect(screen.getByRole('tooltip', { name: 'Send' })).toHaveAttribute('id', 'test');
|
42
41
|
});
|
42
|
+
it('should handle isCompact', () => {
|
43
|
+
renderSend({ 'data-testid': 'button', isCompact: true });
|
44
|
+
expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
45
|
+
});
|
43
46
|
});
|