@patternfly/chatbot 6.3.0-prerelease.9 → 6.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +30 -21
- 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 +31 -19
- 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 -7
- 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 +104 -20
- 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,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
|
});
|
|
@@ -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, DropzoneOptions, FileError, FileRejection } 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 */
|
|
@@ -51,6 +53,28 @@ export interface MessageBarProps extends TextAreaProps {
|
|
|
51
53
|
handleStopButton?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
52
54
|
/** Callback function for when attach button is used to upload a file */
|
|
53
55
|
handleAttach?: (data: File[], event: DropEvent) => void;
|
|
56
|
+
/** Specifies the file types accepted by the attachment upload component.
|
|
57
|
+
* Files that don't match the accepted types will be disabled in the file picker.
|
|
58
|
+
* For example,
|
|
59
|
+
* allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
|
|
60
|
+
**/
|
|
61
|
+
allowedFileTypes?: Accept;
|
|
62
|
+
/** Minimum file size allowed */
|
|
63
|
+
minSize?: number;
|
|
64
|
+
/** Max file size allowed */
|
|
65
|
+
maxSize?: number;
|
|
66
|
+
/** Max number of files allowed */
|
|
67
|
+
maxFiles?: number;
|
|
68
|
+
/** Whether attachments are disabled */
|
|
69
|
+
isAttachmentDisabled?: boolean;
|
|
70
|
+
/** Callback when file(s) are attached */
|
|
71
|
+
onAttach?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
|
|
72
|
+
/** Callback function for AttachButton when an attachment fails */
|
|
73
|
+
onAttachRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
|
|
74
|
+
/** Validator for files; see https://react-dropzone.js.org/#!/Custom%20validation for more information */
|
|
75
|
+
validator?: <T extends File>(file: T) => FileError | readonly FileError[] | null;
|
|
76
|
+
/** Additional props passed to react-dropzone */
|
|
77
|
+
dropzoneProps?: DropzoneOptions;
|
|
54
78
|
/** Props to enable a menu that opens when the Attach button is clicked, instead of the attachment window */
|
|
55
79
|
attachMenuProps?: MessageBarWithAttachMenuProps;
|
|
56
80
|
/** Flag to provide manual control over whether send button is disabled */
|
|
@@ -76,10 +100,13 @@ export interface MessageBarProps extends TextAreaProps {
|
|
|
76
100
|
onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string | number) => void;
|
|
77
101
|
/** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
|
|
78
102
|
displayMode?: ChatbotDisplayMode;
|
|
103
|
+
/** Whether message bar is compact */
|
|
79
104
|
isCompact?: boolean;
|
|
105
|
+
/** Ref applied to message bar textarea, for use with focus or other custom behaviors */
|
|
106
|
+
innerRef?: React.Ref<HTMLTextAreaElement>;
|
|
80
107
|
}
|
|
81
108
|
|
|
82
|
-
export const
|
|
109
|
+
export const MessageBarBase: FunctionComponent<MessageBarProps> = ({
|
|
83
110
|
onSendMessage,
|
|
84
111
|
className,
|
|
85
112
|
alwayShowSendButton,
|
|
@@ -97,15 +124,26 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
97
124
|
displayMode,
|
|
98
125
|
value,
|
|
99
126
|
isCompact = false,
|
|
127
|
+
allowedFileTypes,
|
|
128
|
+
minSize,
|
|
129
|
+
maxSize,
|
|
130
|
+
maxFiles,
|
|
131
|
+
isAttachmentDisabled,
|
|
132
|
+
onAttach,
|
|
133
|
+
onAttachRejected,
|
|
134
|
+
validator,
|
|
135
|
+
dropzoneProps,
|
|
136
|
+
innerRef,
|
|
100
137
|
...props
|
|
101
138
|
}: MessageBarProps) => {
|
|
102
139
|
// Text Input
|
|
103
140
|
// --------------------------------------------------------------------------
|
|
104
|
-
const [message, setMessage] =
|
|
105
|
-
const [isListeningMessage, setIsListeningMessage] =
|
|
106
|
-
const [hasSentMessage, setHasSentMessage] =
|
|
107
|
-
const
|
|
108
|
-
const
|
|
141
|
+
const [message, setMessage] = useState<string | number>(value ?? '');
|
|
142
|
+
const [isListeningMessage, setIsListeningMessage] = useState<boolean>(false);
|
|
143
|
+
const [hasSentMessage, setHasSentMessage] = useState(false);
|
|
144
|
+
const inputRef = useRef<HTMLTextAreaElement>(null);
|
|
145
|
+
const textareaRef = (innerRef as React.RefObject<HTMLTextAreaElement>) ?? inputRef;
|
|
146
|
+
const attachButtonRef = useRef<HTMLButtonElement>(null);
|
|
109
147
|
|
|
110
148
|
const topMargin = '1rem';
|
|
111
149
|
|
|
@@ -151,7 +189,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
151
189
|
return lines > 2;
|
|
152
190
|
};
|
|
153
191
|
|
|
154
|
-
const setAutoWidth =
|
|
192
|
+
const setAutoWidth = useCallback((field: HTMLTextAreaElement) => {
|
|
155
193
|
const parent = field.parentElement;
|
|
156
194
|
if (parent) {
|
|
157
195
|
const grandparent = parent.parentElement;
|
|
@@ -169,7 +207,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
169
207
|
}
|
|
170
208
|
};
|
|
171
209
|
|
|
172
|
-
|
|
210
|
+
useEffect(() => {
|
|
173
211
|
const field = textareaRef.current;
|
|
174
212
|
if (field) {
|
|
175
213
|
if (field.value === '') {
|
|
@@ -200,19 +238,19 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
200
238
|
};
|
|
201
239
|
}, [setAutoWidth]);
|
|
202
240
|
|
|
203
|
-
|
|
241
|
+
useEffect(() => {
|
|
204
242
|
const field = textareaRef.current;
|
|
205
243
|
if (field) {
|
|
206
244
|
if (field.value === '') {
|
|
207
|
-
setInitialLineHeight(
|
|
245
|
+
setInitialLineHeight(field);
|
|
208
246
|
} else {
|
|
209
|
-
setAutoHeight(
|
|
247
|
+
setAutoHeight(field);
|
|
210
248
|
setAutoWidth(field);
|
|
211
249
|
}
|
|
212
250
|
}
|
|
213
251
|
}, [displayMode, message, setAutoWidth]);
|
|
214
252
|
|
|
215
|
-
|
|
253
|
+
useEffect(() => {
|
|
216
254
|
const field = textareaRef.current;
|
|
217
255
|
if (field) {
|
|
218
256
|
setInitialLineHeight(field);
|
|
@@ -220,7 +258,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
220
258
|
}
|
|
221
259
|
}, [hasSentMessage]);
|
|
222
260
|
|
|
223
|
-
const handleChange =
|
|
261
|
+
const handleChange = useCallback(
|
|
224
262
|
(event) => {
|
|
225
263
|
onChange && onChange(event, event.target.value);
|
|
226
264
|
if (textareaRef.current) {
|
|
@@ -236,7 +274,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
236
274
|
);
|
|
237
275
|
|
|
238
276
|
// Handle sending message
|
|
239
|
-
const handleSend =
|
|
277
|
+
const handleSend = useCallback(
|
|
240
278
|
(newMessage: string | number) => {
|
|
241
279
|
onSendMessage(newMessage);
|
|
242
280
|
setHasSentMessage(true);
|
|
@@ -245,8 +283,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
245
283
|
[onSendMessage]
|
|
246
284
|
);
|
|
247
285
|
|
|
248
|
-
const handleKeyDown =
|
|
249
|
-
(event:
|
|
286
|
+
const handleKeyDown = useCallback(
|
|
287
|
+
(event: ReactKeyboardEvent) => {
|
|
250
288
|
if (event.key === 'Enter' && !event.shiftKey) {
|
|
251
289
|
event.preventDefault();
|
|
252
290
|
if (!isSendButtonDisabled && !hasStopButton) {
|
|
@@ -269,7 +307,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
269
307
|
|
|
270
308
|
const handleSpeechRecognition = (message) => {
|
|
271
309
|
setMessage(message);
|
|
272
|
-
onChange && onChange({} as
|
|
310
|
+
onChange && onChange({} as ChangeEvent<HTMLTextAreaElement>, message);
|
|
273
311
|
};
|
|
274
312
|
|
|
275
313
|
const renderButtons = () => {
|
|
@@ -279,6 +317,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
279
317
|
onClick={handleStopButton}
|
|
280
318
|
tooltipContent={buttonProps?.stop?.tooltipContent}
|
|
281
319
|
isCompact={isCompact}
|
|
320
|
+
tooltipProps={buttonProps?.stop?.tooltipProps}
|
|
282
321
|
{...buttonProps?.stop?.props}
|
|
283
322
|
/>
|
|
284
323
|
);
|
|
@@ -292,6 +331,16 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
292
331
|
isDisabled={isListeningMessage}
|
|
293
332
|
tooltipContent={buttonProps?.attach?.tooltipContent}
|
|
294
333
|
isCompact={isCompact}
|
|
334
|
+
tooltipProps={buttonProps?.attach?.tooltipProps}
|
|
335
|
+
allowedFileTypes={allowedFileTypes}
|
|
336
|
+
minSize={minSize}
|
|
337
|
+
maxSize={maxSize}
|
|
338
|
+
maxFiles={maxFiles}
|
|
339
|
+
isAttachmentDisabled={isAttachmentDisabled}
|
|
340
|
+
onAttach={onAttach}
|
|
341
|
+
onAttachRejected={onAttachRejected}
|
|
342
|
+
validator={validator}
|
|
343
|
+
dropzoneProps={dropzoneProps}
|
|
295
344
|
{...buttonProps?.attach?.props}
|
|
296
345
|
/>
|
|
297
346
|
)}
|
|
@@ -302,6 +351,16 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
302
351
|
tooltipContent={buttonProps?.attach?.tooltipContent}
|
|
303
352
|
inputTestId={buttonProps?.attach?.inputTestId}
|
|
304
353
|
isCompact={isCompact}
|
|
354
|
+
tooltipProps={buttonProps?.attach?.tooltipProps}
|
|
355
|
+
allowedFileTypes={allowedFileTypes}
|
|
356
|
+
minSize={minSize}
|
|
357
|
+
maxSize={maxSize}
|
|
358
|
+
maxFiles={maxFiles}
|
|
359
|
+
isAttachmentDisabled={isAttachmentDisabled}
|
|
360
|
+
onAttach={onAttach}
|
|
361
|
+
onAttachRejected={onAttachRejected}
|
|
362
|
+
validator={validator}
|
|
363
|
+
dropzoneProps={dropzoneProps}
|
|
305
364
|
{...buttonProps?.attach?.props}
|
|
306
365
|
/>
|
|
307
366
|
)}
|
|
@@ -313,6 +372,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
313
372
|
tooltipContent={buttonProps?.microphone?.tooltipContent}
|
|
314
373
|
language={buttonProps?.microphone?.language}
|
|
315
374
|
isCompact={isCompact}
|
|
375
|
+
tooltipProps={buttonProps?.microphone?.tooltipProps}
|
|
316
376
|
{...buttonProps?.microphone?.props}
|
|
317
377
|
/>
|
|
318
378
|
)}
|
|
@@ -323,6 +383,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
323
383
|
isDisabled={isSendButtonDisabled}
|
|
324
384
|
tooltipContent={buttonProps?.send?.tooltipContent}
|
|
325
385
|
isCompact={isCompact}
|
|
386
|
+
tooltipProps={buttonProps?.send?.tooltipProps}
|
|
326
387
|
{...buttonProps?.send?.props}
|
|
327
388
|
/>
|
|
328
389
|
)}
|
|
@@ -375,4 +436,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
|
|
|
375
436
|
return <div className={`pf-chatbot__message-bar ${className ?? ''}`}>{messageBarContents}</div>;
|
|
376
437
|
};
|
|
377
438
|
|
|
439
|
+
const MessageBar = forwardRef((props: MessageBarProps, ref: Ref<HTMLTextAreaElement>) => (
|
|
440
|
+
<MessageBarBase innerRef={ref} {...props} />
|
|
441
|
+
));
|
|
442
|
+
|
|
443
|
+
export { MessageBar };
|
|
378
444
|
export default MessageBar;
|
|
@@ -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';
|
|
@@ -27,7 +29,7 @@ export interface MicrophoneButtonProps extends ButtonProps {
|
|
|
27
29
|
isCompact?: boolean;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
export const MicrophoneButton:
|
|
32
|
+
export const MicrophoneButton: FunctionComponent<MicrophoneButtonProps> = ({
|
|
31
33
|
isListening,
|
|
32
34
|
onIsListeningChange,
|
|
33
35
|
onSpeechRecognition,
|
|
@@ -40,10 +42,10 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
|
40
42
|
}: MicrophoneButtonProps) => {
|
|
41
43
|
// Microphone
|
|
42
44
|
// --------------------------------------------------------------------------
|
|
43
|
-
const [speechRecognition, setSpeechRecognition] =
|
|
45
|
+
const [speechRecognition, setSpeechRecognition] = useState<SpeechRecognition>();
|
|
44
46
|
|
|
45
47
|
// Listen for speech
|
|
46
|
-
const startListening =
|
|
48
|
+
const startListening = useCallback(() => {
|
|
47
49
|
if (speechRecognition) {
|
|
48
50
|
speechRecognition.start();
|
|
49
51
|
onIsListeningChange(true);
|
|
@@ -51,7 +53,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
|
51
53
|
}, [onIsListeningChange, speechRecognition]);
|
|
52
54
|
|
|
53
55
|
// Stop listening for speech
|
|
54
|
-
const stopListening =
|
|
56
|
+
const stopListening = useCallback(() => {
|
|
55
57
|
if (speechRecognition && isListening) {
|
|
56
58
|
speechRecognition.stop();
|
|
57
59
|
onIsListeningChange(false);
|
|
@@ -59,7 +61,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
|
59
61
|
}, [isListening, onIsListeningChange, speechRecognition]);
|
|
60
62
|
|
|
61
63
|
// Detect speech recognition browser support
|
|
62
|
-
|
|
64
|
+
useEffect(() => {
|
|
63
65
|
if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
|
|
64
66
|
// Initialize SpeechRecognition
|
|
65
67
|
const recognition: SpeechRecognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
|
|
@@ -105,7 +107,8 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
|
|
|
105
107
|
<Button
|
|
106
108
|
variant="plain"
|
|
107
109
|
className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
|
|
108
|
-
aria-label={props['aria-label'] || '
|
|
110
|
+
aria-label={props['aria-label'] || (isListening ? 'Stop listening' : 'Use microphone')}
|
|
111
|
+
aria-pressed={isListening}
|
|
109
112
|
onClick={isListening ? stopListening : startListening}
|
|
110
113
|
icon={
|
|
111
114
|
<Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>
|