@patternfly/chatbot 2.2.0-prerelease.3 → 2.2.0-prerelease.30
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/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +52 -0
- package/dist/cjs/Chatbot/Chatbot.test.d.ts +1 -0
- package/dist/cjs/Chatbot/Chatbot.test.js +28 -0
- package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
- package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +27 -0
- package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +1 -0
- package/dist/cjs/ChatbotContent/ChatbotContent.test.js +18 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +23 -11
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +29 -0
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +45 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +16 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +47 -0
- package/dist/cjs/ChatbotHeader/index.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/index.js +1 -0
- package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- package/dist/cjs/CodeModal/CodeModal.js +2 -12
- package/dist/cjs/Compare/Compare.d.ts +17 -0
- package/dist/cjs/Compare/Compare.js +50 -0
- package/dist/cjs/Compare/Compare.test.d.ts +1 -0
- package/dist/cjs/Compare/Compare.test.js +20 -0
- package/dist/cjs/Compare/index.d.ts +2 -0
- package/dist/cjs/Compare/index.js +23 -0
- package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +4 -0
- package/dist/cjs/Message/ImageMessage/ImageMessage.js +25 -0
- package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +4 -0
- package/dist/cjs/Message/LinkMessage/LinkMessage.js +30 -0
- package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -1
- package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
- package/dist/cjs/Message/Message.d.ts +47 -8
- package/dist/cjs/Message/Message.js +69 -18
- package/dist/cjs/Message/Message.test.js +265 -3
- package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -0
- package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +13 -0
- package/dist/cjs/Message/QuickStarts/FallbackImg.js +34 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +27 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTile.js +82 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +64 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +76 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +30 -0
- package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
- package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +77 -0
- package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
- package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.js +77 -0
- package/dist/cjs/Message/QuickStarts/types.d.ts +132 -0
- package/dist/cjs/Message/QuickStarts/types.js +17 -0
- package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
- package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
- package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
- package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
- package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
- package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
- package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
- package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
- package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
- package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.js +55 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +146 -0
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
- package/dist/cjs/MessageBar/AttachButton.js +4 -2
- package/dist/cjs/MessageBar/MessageBar.d.ts +11 -4
- package/dist/cjs/MessageBar/MessageBar.js +122 -39
- package/dist/cjs/MessageBar/MessageBar.test.js +12 -4
- package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -1
- package/dist/cjs/MessageBar/SendButton.js +3 -1
- package/dist/cjs/MessageBar/StopButton.js +3 -1
- package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
- package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
- package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +10 -1
- package/dist/cjs/ResponseActions/ResponseActionButton.js +28 -5
- package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
- package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
- package/dist/cjs/ResponseActions/ResponseActions.d.ts +12 -2
- package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
- package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
- package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
- package/dist/cjs/Settings/SettingsForm.js +27 -0
- package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
- package/dist/cjs/Settings/SettingsForm.test.js +26 -0
- package/dist/cjs/Settings/index.d.ts +2 -0
- package/dist/cjs/Settings/index.js +23 -0
- package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
- package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
- package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
- package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
- package/dist/cjs/TermsOfUse/index.d.ts +2 -0
- package/dist/cjs/TermsOfUse/index.js +23 -0
- package/dist/cjs/__mocks__/rehype-external-links.d.ts +2 -0
- package/dist/cjs/__mocks__/rehype-external-links.js +4 -0
- package/dist/cjs/__mocks__/rehype-sanitize.d.ts +2 -0
- package/dist/cjs/__mocks__/rehype-sanitize.js +4 -0
- package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +2 -0
- package/dist/cjs/__mocks__/rehype-unwrap-images.js +4 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +10 -1
- package/dist/css/main.css +467 -123
- package/dist/css/main.css.map +1 -1
- package/dist/dynamic/Compare/package.json +1 -0
- package/dist/dynamic/Settings/package.json +1 -0
- package/dist/dynamic/TermsOfUse/package.json +1 -0
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
- package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
- package/dist/esm/Chatbot/Chatbot.test.js +23 -0
- package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
- package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
- package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
- package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +23 -11
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +22 -0
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +38 -0
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
- package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
- package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
- package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFootnote.js +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +10 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
- package/dist/esm/ChatbotHeader/index.d.ts +1 -0
- package/dist/esm/ChatbotHeader/index.js +1 -0
- package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- package/dist/esm/CodeModal/CodeModal.js +2 -12
- package/dist/esm/Compare/Compare.d.ts +17 -0
- package/dist/esm/Compare/Compare.js +43 -0
- package/dist/esm/Compare/Compare.test.d.ts +1 -0
- package/dist/esm/Compare/Compare.test.js +15 -0
- package/dist/esm/Compare/index.d.ts +2 -0
- package/dist/esm/Compare/index.js +2 -0
- package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +4 -0
- package/dist/esm/Message/ImageMessage/ImageMessage.js +20 -0
- package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +4 -0
- package/dist/esm/Message/LinkMessage/LinkMessage.js +25 -0
- package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
- package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
- package/dist/esm/Message/Message.d.ts +47 -8
- package/dist/esm/Message/Message.js +67 -16
- package/dist/esm/Message/Message.test.js +265 -3
- package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
- package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
- package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
- package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
- package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
- package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
- package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
- package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
- package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
- package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
- package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
- package/dist/esm/Message/QuickStarts/types.js +14 -0
- package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
- package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
- package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
- package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
- package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
- package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
- package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
- package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
- package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
- package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
- package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
- package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
- package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.js +50 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +141 -0
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
- package/dist/esm/MessageBar/AttachButton.js +4 -2
- package/dist/esm/MessageBar/MessageBar.d.ts +11 -4
- package/dist/esm/MessageBar/MessageBar.js +122 -39
- package/dist/esm/MessageBar/MessageBar.test.js +12 -4
- package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -1
- package/dist/esm/MessageBar/SendButton.js +3 -1
- package/dist/esm/MessageBar/StopButton.js +3 -1
- package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
- package/dist/esm/MessageBox/MessageBox.test.js +17 -0
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
- package/dist/esm/ResponseActions/ResponseActionButton.d.ts +10 -1
- package/dist/esm/ResponseActions/ResponseActionButton.js +25 -2
- package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
- package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
- package/dist/esm/ResponseActions/ResponseActions.d.ts +12 -2
- package/dist/esm/ResponseActions/ResponseActions.js +26 -9
- package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
- package/dist/esm/Settings/SettingsForm.d.ts +13 -0
- package/dist/esm/Settings/SettingsForm.js +20 -0
- package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
- package/dist/esm/Settings/SettingsForm.test.js +21 -0
- package/dist/esm/Settings/index.d.ts +2 -0
- package/dist/esm/Settings/index.js +2 -0
- package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
- package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
- package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
- package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
- package/dist/esm/TermsOfUse/index.d.ts +2 -0
- package/dist/esm/TermsOfUse/index.js +2 -0
- package/dist/esm/__mocks__/rehype-external-links.d.ts +2 -0
- package/dist/esm/__mocks__/rehype-external-links.js +2 -0
- package/dist/esm/__mocks__/rehype-sanitize.d.ts +2 -0
- package/dist/esm/__mocks__/rehype-sanitize.js +2 -0
- package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +2 -0
- package/dist/esm/__mocks__/rehype-unwrap-images.js +2 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -13
- package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +5 -2
- package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +41 -4
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +191 -12
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +2 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +5 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +74 -11
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +221 -14
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +54 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +5 -5
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +36 -3
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +7 -7
- package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +49 -6
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +11 -11
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +21 -20
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +11 -11
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
- package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
- package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
- package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -57
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +5 -5
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
- package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
- package/patternfly-docs/content/extensions/chatbot/img/docked.svg +68 -49
- package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
- package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
- package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
- package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
- package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +85 -142
- package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +52 -36
- package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
- package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
- package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
- package/src/AttachMenu/AttachMenu.scss +1 -1
- package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
- package/src/Chatbot/Chatbot.scss +1 -1
- package/src/Chatbot/Chatbot.test.tsx +31 -0
- package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
- package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +10 -4
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +22 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +242 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +93 -25
- package/src/ChatbotConversationHistoryNav/EmptyState.tsx +44 -0
- package/src/ChatbotConversationHistoryNav/LoadingState.tsx +38 -0
- package/src/ChatbotFooter/ChatbotFooter.scss +0 -5
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
- package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
- package/src/ChatbotFooter/ChatbotFootnote.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeader.scss +2 -5
- package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
- package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +57 -0
- package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +11 -2
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +11 -4
- package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
- package/src/ChatbotHeader/index.ts +1 -0
- package/src/ChatbotModal/ChatbotModal.scss +1 -1
- package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +26 -18
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +2 -2
- package/src/CodeModal/CodeModal.scss +9 -1
- package/src/CodeModal/CodeModal.tsx +2 -13
- package/src/Compare/Compare.scss +72 -0
- package/src/Compare/Compare.test.tsx +31 -0
- package/src/Compare/Compare.tsx +98 -0
- package/src/Compare/index.ts +2 -0
- package/src/FileDetails/FileDetails.scss +1 -1
- package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
- package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
- package/src/Message/ImageMessage/ImageMessage.scss +9 -0
- package/src/Message/ImageMessage/ImageMessage.tsx +14 -0
- package/src/Message/LinkMessage/LinkMessage.tsx +34 -0
- package/src/Message/ListMessage/ListMessage.scss +6 -6
- package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
- package/src/Message/Message.scss +4 -26
- package/src/Message/Message.test.tsx +357 -3
- package/src/Message/Message.tsx +148 -31
- package/src/Message/MessageLoading.scss +2 -2
- package/src/Message/QuickResponse/QuickResponse.scss +33 -0
- package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
- package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
- package/src/Message/QuickStarts/QuickStartTile.scss +24 -0
- package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
- package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
- package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
- package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
- package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
- package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
- package/src/Message/QuickStarts/types.ts +154 -0
- package/src/Message/TableMessage/TableMessage.scss +23 -0
- package/src/Message/TableMessage/TableMessage.tsx +83 -0
- package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
- package/src/Message/TableMessage/TdMessage.tsx +11 -0
- package/src/Message/TableMessage/ThMessage.tsx +11 -0
- package/src/Message/TableMessage/TheadMessage.tsx +11 -0
- package/src/Message/TableMessage/TrMessage.tsx +27 -0
- package/src/Message/TextMessage/TextMessage.scss +21 -12
- package/src/Message/TextMessage/TextMessage.tsx +3 -3
- package/src/Message/UserFeedback/CloseButton.tsx +21 -0
- package/src/Message/UserFeedback/UserFeedback.scss +53 -0
- package/src/Message/UserFeedback/UserFeedback.test.tsx +257 -0
- package/src/Message/UserFeedback/UserFeedback.tsx +132 -0
- package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
- package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
- package/src/MessageBar/AttachButton.scss +19 -3
- package/src/MessageBar/AttachButton.tsx +3 -1
- package/src/MessageBar/MessageBar.scss +38 -20
- package/src/MessageBar/MessageBar.test.tsx +12 -4
- package/src/MessageBar/MessageBar.tsx +153 -58
- package/src/MessageBar/MicrophoneButton.scss +8 -8
- package/src/MessageBar/MicrophoneButton.tsx +1 -1
- package/src/MessageBar/SendButton.tsx +2 -0
- package/src/MessageBar/StopButton.scss +17 -3
- package/src/MessageBar/StopButton.tsx +2 -0
- package/src/MessageBox/JumpButton.scss +6 -6
- package/src/MessageBox/MessageBox.test.tsx +26 -0
- package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
- package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
- package/src/ResponseActions/ResponseActionButton.tsx +59 -28
- package/src/ResponseActions/ResponseActions.scss +11 -9
- package/src/ResponseActions/ResponseActions.test.tsx +105 -5
- package/src/ResponseActions/ResponseActions.tsx +80 -9
- package/src/Settings/Settings.scss +34 -0
- package/src/Settings/SettingsForm.test.tsx +28 -0
- package/src/Settings/SettingsForm.tsx +25 -0
- package/src/Settings/index.ts +3 -0
- package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +1 -1
- package/src/SourcesCard/SourcesCard.scss +2 -2
- package/src/TermsOfUse/TermsOfUse.scss +66 -0
- package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
- package/src/TermsOfUse/TermsOfUse.tsx +117 -0
- package/src/TermsOfUse/index.ts +3 -0
- package/src/__mocks__/rehype-external-links.ts +3 -0
- package/src/__mocks__/rehype-sanitize.ts +3 -0
- package/src/__mocks__/rehype-unwrap-images.tsx +3 -0
- package/src/index.ts +9 -0
- package/src/main.scss +8 -6
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,52 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const react_2 = require("@testing-library/react");
|
8
|
+
const AttachmentEdit_1 = __importDefault(require("./AttachmentEdit"));
|
9
|
+
describe('AttachmentEdit', () => {
|
10
|
+
it('should open AttachmentEdit modal', () => {
|
11
|
+
const props = {
|
12
|
+
code: 'code',
|
13
|
+
fileName: 'fileName',
|
14
|
+
onCancel: jest.fn(),
|
15
|
+
onSave: jest.fn(),
|
16
|
+
isModalOpen: true,
|
17
|
+
handleModalToggle: jest.fn()
|
18
|
+
};
|
19
|
+
(0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
|
20
|
+
expect(react_2.screen.getByText('Edit attachment')).toBeTruthy();
|
21
|
+
});
|
22
|
+
it('should call onSave handler when the save button is clicked', () => {
|
23
|
+
const onSaveHandler = jest.fn();
|
24
|
+
const props = {
|
25
|
+
code: 'code',
|
26
|
+
fileName: 'fileName',
|
27
|
+
onCancel: jest.fn(),
|
28
|
+
onSave: onSaveHandler,
|
29
|
+
isModalOpen: true,
|
30
|
+
handleModalToggle: jest.fn()
|
31
|
+
};
|
32
|
+
(0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
|
33
|
+
// Click on save button
|
34
|
+
react_2.fireEvent.click(react_2.screen.getByText('Save'));
|
35
|
+
expect(onSaveHandler).toHaveBeenCalledWith(expect.any(Object), 'code');
|
36
|
+
});
|
37
|
+
it('should call cancel handler when the cancel button is clicked', () => {
|
38
|
+
const onCancelHandler = jest.fn();
|
39
|
+
const props = {
|
40
|
+
code: 'code',
|
41
|
+
fileName: 'fileName',
|
42
|
+
onCancel: onCancelHandler,
|
43
|
+
onSave: jest.fn(),
|
44
|
+
isModalOpen: true,
|
45
|
+
handleModalToggle: jest.fn()
|
46
|
+
};
|
47
|
+
(0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
|
48
|
+
// Click on cancel button
|
49
|
+
react_2.fireEvent.click(react_2.screen.getByText('Cancel'));
|
50
|
+
expect(onCancelHandler).toHaveBeenCalled();
|
51
|
+
});
|
52
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
require("@testing-library/jest-dom");
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const react_2 = require("@testing-library/react");
|
9
|
+
const Chatbot_1 = __importDefault(require("./Chatbot"));
|
10
|
+
describe('Chatbot', () => {
|
11
|
+
it('should render Chatbot with default display mode', () => {
|
12
|
+
(0, react_2.render)(react_1.default.createElement(Chatbot_1.default, null, "Chatbot Content"));
|
13
|
+
expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
|
14
|
+
});
|
15
|
+
it('should render Chatbot with custom ariaLabel', () => {
|
16
|
+
(0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { ariaLabel: "Chatbot" }, "Chatbot Content"));
|
17
|
+
expect(react_2.screen.getByLabelText('Chatbot')).toBeTruthy();
|
18
|
+
});
|
19
|
+
it('should render Chatbot with custom className', () => {
|
20
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { ariaLabel: "Chatbot", className: "custom-class" }, "Chatbot Content"));
|
21
|
+
const chatbotElement = container.querySelector('.custom-class');
|
22
|
+
expect(chatbotElement).toBeInTheDocument();
|
23
|
+
});
|
24
|
+
it('should not render Chatbot', () => {
|
25
|
+
(0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { isVisible: false }, "Chatbot Content"));
|
26
|
+
expect(react_2.screen.queryByLabelText('Chatbot')).toBeFalsy();
|
27
|
+
});
|
28
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const react_2 = require("@testing-library/react");
|
8
|
+
const ChatbotAlert_1 = __importDefault(require("./ChatbotAlert"));
|
9
|
+
describe('ChatbotAlert', () => {
|
10
|
+
it('should render ChatbotAlert with default variant', () => {
|
11
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert" }));
|
12
|
+
expect(react_2.screen.getByText('Chatbot Alert')).toBeTruthy();
|
13
|
+
});
|
14
|
+
it('should render ChatbotAlert with children', () => {
|
15
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert" }, "Chatbot Alert Content"));
|
16
|
+
expect(react_2.screen.getByText('Chatbot Alert Content')).toBeTruthy();
|
17
|
+
});
|
18
|
+
it('should call onClose handler when onClose button is clicked', () => {
|
19
|
+
const onCloseHandler = jest.fn();
|
20
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert", onClose: onCloseHandler }, "Chatbot Alert Content"));
|
21
|
+
expect(react_2.screen.getByText('Chatbot Alert')).toBeTruthy();
|
22
|
+
expect(react_2.screen.getByText('Chatbot Alert Content')).toBeTruthy();
|
23
|
+
// click on the close button
|
24
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button'));
|
25
|
+
expect(onCloseHandler).toHaveBeenCalled();
|
26
|
+
});
|
27
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const react_2 = require("@testing-library/react");
|
8
|
+
const ChatbotContent_1 = __importDefault(require("./ChatbotContent"));
|
9
|
+
describe('ChatbotContent', () => {
|
10
|
+
it('should render ChatbotContent with children', () => {
|
11
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotContent_1.default, null, "Chatbot Content"));
|
12
|
+
expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
|
13
|
+
});
|
14
|
+
it('should render ChatbotContent with custom classname', () => {
|
15
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotContent_1.default, { className: "custom-class" }, "Chatbot Content"));
|
16
|
+
expect(container.querySelector('.custom-class')).toBeTruthy();
|
17
|
+
});
|
18
|
+
});
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { DropdownProps } from '@patternfly/react-core';
|
3
3
|
export interface ChatbotConversationHistoryDropdownProps extends Omit<DropdownProps, 'toggle'> {
|
4
|
-
/** Dropdown items rendered in conversation
|
4
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
5
5
|
menuItems: React.ReactNode;
|
6
|
-
/** Optional classname applied to conversation
|
6
|
+
/** Optional classname applied to conversation settings dropdown */
|
7
7
|
menuClassName?: string;
|
8
|
-
/** Tooltip content and aria-label applied to conversation
|
8
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
9
9
|
label?: string;
|
10
10
|
/** Callback for when user selects item. */
|
11
11
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -13,7 +13,9 @@ const react_core_1 = require("@patternfly/react-core");
|
|
13
13
|
const ellipsis_v_icon_1 = __importDefault(require("@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"));
|
14
14
|
const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, onSelect, label }) => {
|
15
15
|
const [isOpen, setIsOpen] = react_1.default.useState(false);
|
16
|
-
const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom"
|
16
|
+
const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom",
|
17
|
+
// prevents VO announcements of both aria label and tooltip
|
18
|
+
aria: "none" },
|
17
19
|
react_1.default.createElement(react_core_1.MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), role: "menuitem" },
|
18
20
|
react_1.default.createElement(ellipsis_v_icon_1.default, null))));
|
19
21
|
return (react_1.default.createElement(react_core_1.Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { DrawerProps, MenuItemProps } from '@patternfly/react-core';
|
2
|
+
import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps } from '@patternfly/react-core';
|
3
3
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
4
|
+
import { HistoryEmptyStateProps } from './EmptyState';
|
4
5
|
export interface Conversation {
|
5
6
|
/** Conversation id */
|
6
7
|
id: string;
|
@@ -10,11 +11,11 @@ export interface Conversation {
|
|
10
11
|
noIcon?: boolean;
|
11
12
|
/** Conversation */
|
12
13
|
text: string;
|
13
|
-
/** Dropdown items rendered in conversation
|
14
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
14
15
|
menuItems?: React.ReactNode;
|
15
|
-
/** Optional classname applied to conversation
|
16
|
+
/** Optional classname applied to conversation settings dropdown */
|
16
17
|
menuClassName?: string;
|
17
|
-
/** Tooltip content and aria-label applied to conversation
|
18
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
18
19
|
label?: string;
|
19
20
|
/** Callback for when user selects item. */
|
20
21
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -53,6 +54,28 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
53
54
|
reverseButtonOrder?: boolean;
|
54
55
|
/** Custom test id for the drawer actions */
|
55
56
|
drawerActionsTestId?: string;
|
57
|
+
/** Additional props applied to menu */
|
58
|
+
menuProps?: MenuProps;
|
59
|
+
/** Additional props applied to panel */
|
60
|
+
drawerPanelContentProps?: DrawerPanelContentProps;
|
61
|
+
/** Additional props applied to drawer content */
|
62
|
+
drawerContentProps?: Omit<DrawerContentProps, 'panelContent'>;
|
63
|
+
/** Additional props applied to drawer content body */
|
64
|
+
drawerContentBodyProps?: DrawerContentBodyProps;
|
65
|
+
/** Additional props applied to drawer head */
|
66
|
+
drawerHeadProps?: DrawerHeadProps;
|
67
|
+
/** Additional props applied to drawer actions */
|
68
|
+
drawerActionsProps?: DrawerActionsProps;
|
69
|
+
/** Additional props applied to drawer close button */
|
70
|
+
drawerCloseButtonProps?: DrawerCloseButtonProps;
|
71
|
+
/** Additional props appleid to drawer panel body */
|
72
|
+
drawerPanelBodyProps?: DrawerPanelBodyProps;
|
73
|
+
/** Whether to show drawer loading state */
|
74
|
+
isLoading?: boolean;
|
75
|
+
/** Additional props for loading state */
|
76
|
+
loadingState?: SkeletonProps;
|
77
|
+
/** Content to show in error state. Error state will appear once content is passed in. */
|
78
|
+
errorState?: HistoryEmptyStateProps;
|
56
79
|
}
|
57
80
|
export declare const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps>;
|
58
81
|
export default ChatbotConversationHistoryNav;
|
@@ -24,8 +24,10 @@ const react_core_1 = require("@patternfly/react-core");
|
|
24
24
|
const react_icons_1 = require("@patternfly/react-icons");
|
25
25
|
const Chatbot_1 = require("../Chatbot/Chatbot");
|
26
26
|
const ChatbotConversationHistoryDropdown_1 = __importDefault(require("./ChatbotConversationHistoryDropdown"));
|
27
|
+
const LoadingState_1 = __importDefault(require("./LoadingState"));
|
28
|
+
const EmptyState_1 = __importDefault(require("./EmptyState"));
|
27
29
|
const ChatbotConversationHistoryNav = (_a) => {
|
28
|
-
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions' } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId"]);
|
30
|
+
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState"]);
|
29
31
|
const drawerRef = react_1.default.useRef(null);
|
30
32
|
const onExpand = () => {
|
31
33
|
drawerRef.current && drawerRef.current.focus();
|
@@ -52,16 +54,26 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
52
54
|
// Menu Content
|
53
55
|
// - Consumers should pass an array to <Chatbot> of the list of conversations
|
54
56
|
// - Groups could be optional, but items need to be ordered by date
|
55
|
-
const
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
const renderMenuContent = () => {
|
58
|
+
if (errorState) {
|
59
|
+
return react_1.default.createElement(EmptyState_1.default, Object.assign({}, errorState));
|
60
|
+
}
|
61
|
+
return (react_1.default.createElement(react_core_1.Menu, Object.assign({ isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId }, menuProps),
|
62
|
+
react_1.default.createElement(react_core_1.MenuContent, null, buildMenu())));
|
63
|
+
};
|
64
|
+
const renderDrawerContent = () => (react_1.default.createElement(react_1.default.Fragment, null,
|
62
65
|
handleTextInputChange && (react_1.default.createElement("div", { className: "pf-chatbot__input" },
|
63
66
|
react_1.default.createElement(react_core_1.SearchInput, { "aria-label": searchInputAriaLabel, onChange: (_event, value) => handleTextInputChange(value), placeholder: searchInputPlaceholder }))),
|
64
|
-
react_1.default.createElement(react_core_1.DrawerPanelBody,
|
67
|
+
react_1.default.createElement(react_core_1.DrawerPanelBody, Object.assign({}, drawerPanelBodyProps), renderMenuContent())));
|
68
|
+
const renderPanelContent = () => {
|
69
|
+
const drawer = (react_1.default.createElement(react_1.default.Fragment, null,
|
70
|
+
react_1.default.createElement(react_core_1.DrawerHead, Object.assign({}, drawerHeadProps),
|
71
|
+
react_1.default.createElement(react_core_1.DrawerActions, Object.assign({ "data-testid": drawerActionsTestId, className: reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : '' }, drawerActionsProps),
|
72
|
+
react_1.default.createElement(react_core_1.DrawerCloseButton, Object.assign({ onClick: onDrawerToggle }, drawerCloseButtonProps)),
|
73
|
+
onNewChat && react_1.default.createElement(react_core_1.Button, { onClick: onNewChat }, newChatButtonText))),
|
74
|
+
isLoading ? react_1.default.createElement(LoadingState_1.default, Object.assign({}, loadingState)) : renderDrawerContent()));
|
75
|
+
return (react_1.default.createElement(react_core_1.DrawerPanelContent, Object.assign({ "aria-live": "polite", focusTrap: { enabled: true }, defaultSize: "384px" }, drawerPanelContentProps), drawer));
|
76
|
+
};
|
65
77
|
// An onKeyDown property must be passed to the Drawer component to handle closing
|
66
78
|
// the drawer panel and deactivating the focus trap via the Escape key.
|
67
79
|
const onEscape = (event) => {
|
@@ -73,8 +85,8 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
73
85
|
}
|
74
86
|
};
|
75
87
|
return (react_1.default.createElement(react_core_1.Drawer, Object.assign({ className: "pf-chatbot__history", isExpanded: isDrawerOpen, onExpand: onExpand, position: "start", onKeyDown: onEscape, isInline: displayMode === Chatbot_1.ChatbotDisplayMode.fullscreen || displayMode === Chatbot_1.ChatbotDisplayMode.embedded }, props),
|
76
|
-
react_1.default.createElement(react_core_1.DrawerContent, { panelContent:
|
77
|
-
react_1.default.createElement(react_core_1.DrawerContentBody,
|
88
|
+
react_1.default.createElement(react_core_1.DrawerContent, Object.assign({ panelContent: renderPanelContent() }, drawerContentProps),
|
89
|
+
react_1.default.createElement(react_core_1.DrawerContentBody, Object.assign({}, drawerContentBodyProps),
|
78
90
|
react_1.default.createElement(react_1.default.Fragment, null,
|
79
91
|
react_1.default.createElement("div", { className: `${isDrawerOpen && (displayMode === Chatbot_1.ChatbotDisplayMode.default || displayMode === Chatbot_1.ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
|
80
92
|
drawerContent)))));
|
@@ -17,17 +17,44 @@ require("@testing-library/jest-dom");
|
|
17
17
|
const react_2 = require("@testing-library/react");
|
18
18
|
const Chatbot_1 = require("../Chatbot/Chatbot");
|
19
19
|
const ChatbotConversationHistoryNav_1 = __importDefault(require("./ChatbotConversationHistoryNav"));
|
20
|
+
const react_core_1 = require("@patternfly/react-core");
|
21
|
+
const ERROR = {
|
22
|
+
bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
|
23
|
+
"To try again, check your connection and reload this page. If the issue persists,",
|
24
|
+
' ',
|
25
|
+
react_1.default.createElement("a", { href: "" }, "contact the support team"),
|
26
|
+
".")),
|
27
|
+
buttonText: 'Reload',
|
28
|
+
buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
|
29
|
+
hasButton: true,
|
30
|
+
titleText: 'Could not load chat history',
|
31
|
+
status: react_core_1.EmptyStateStatus.danger,
|
32
|
+
onClick: () => alert('Clicked Reload')
|
33
|
+
};
|
34
|
+
const ERROR_WITHOUT_BUTTON = {
|
35
|
+
bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
|
36
|
+
"To try again, check your connection and reload this page. If the issue persists,",
|
37
|
+
' ',
|
38
|
+
react_1.default.createElement("a", { href: "" }, "contact the support team"),
|
39
|
+
".")),
|
40
|
+
buttonText: 'Reload',
|
41
|
+
buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
|
42
|
+
hasButton: false,
|
43
|
+
titleText: 'Could not load chat history',
|
44
|
+
status: react_core_1.EmptyStateStatus.danger,
|
45
|
+
onClick: () => alert('Clicked Reload')
|
46
|
+
};
|
20
47
|
describe('ChatbotConversationHistoryNav', () => {
|
21
48
|
const onDrawerToggle = jest.fn();
|
22
49
|
const initialConversations = [
|
23
50
|
{
|
24
51
|
id: '1',
|
25
|
-
text: '
|
52
|
+
text: 'ChatBot documentation'
|
26
53
|
}
|
27
54
|
];
|
28
55
|
it('should open the conversation history navigation drawer', () => {
|
29
56
|
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations }));
|
30
|
-
expect(react_2.screen.queryByText('
|
57
|
+
expect(react_2.screen.queryByText('ChatBot documentation')).toBeInTheDocument();
|
31
58
|
});
|
32
59
|
it('should display the conversations for grouped conversations', () => {
|
33
60
|
const groupedConversations = {
|
@@ -63,7 +90,76 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
63
90
|
charCode: 27
|
64
91
|
});
|
65
92
|
(0, react_2.waitFor)(() => {
|
66
|
-
expect(react_2.screen.queryByText('
|
93
|
+
expect(react_2.screen.queryByText('ChatBot documentation')).not.toBeInTheDocument();
|
67
94
|
});
|
68
95
|
}));
|
96
|
+
it('should be resizable', () => {
|
97
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerPanelContentProps: { isResizable: true, minSize: '200px' } }));
|
98
|
+
expect(react_2.screen.getByRole('dialog', { name: /Resize/i })).toBeTruthy();
|
99
|
+
expect(react_2.screen.getByRole('separator', { name: /Resize/i })).toBeTruthy();
|
100
|
+
expect(react_2.screen.getByRole('dialog', { name: /Resize/i })).toHaveAttribute('style', '--pf-v6-c-drawer__panel--md--FlexBasis: 384px; --pf-v6-c-drawer__panel--md--FlexBasis--min: 200px;');
|
101
|
+
});
|
102
|
+
it('should accept drawerContentProps', () => {
|
103
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerContentProps: { className: 'test' } }));
|
104
|
+
const element = container.querySelector('.test');
|
105
|
+
expect(element).toBeInTheDocument();
|
106
|
+
});
|
107
|
+
it('should accept drawerContentBodyProps', () => {
|
108
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerContentBodyProps: { className: 'test' } }));
|
109
|
+
const element = container.querySelector('.test');
|
110
|
+
expect(element).toBeInTheDocument();
|
111
|
+
});
|
112
|
+
it('should accept drawerHeadProps', () => {
|
113
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerHeadProps: { className: 'test' } }));
|
114
|
+
const element = container.querySelector('.test');
|
115
|
+
expect(element).toBeInTheDocument();
|
116
|
+
});
|
117
|
+
it('should accept drawerActionsProps', () => {
|
118
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerActionsProps: { className: 'test' } }));
|
119
|
+
const element = container.querySelector('.test');
|
120
|
+
expect(element).toBeInTheDocument();
|
121
|
+
});
|
122
|
+
it('should accept drawerCloseButtonProps', () => {
|
123
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerCloseButtonProps: { className: 'test' } }));
|
124
|
+
const element = container.querySelector('.test');
|
125
|
+
expect(element).toBeInTheDocument();
|
126
|
+
});
|
127
|
+
it('should accept drawerPanelBodyProps', () => {
|
128
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerPanelBodyProps: { className: 'test' } }));
|
129
|
+
const element = container.querySelector('.test');
|
130
|
+
expect(element).toBeInTheDocument();
|
131
|
+
});
|
132
|
+
it('should show loading state if triggered', () => {
|
133
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true }));
|
134
|
+
expect(react_2.screen.getByRole('dialog', { name: /Loading chatbot conversation history/i })).toBeTruthy();
|
135
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
136
|
+
});
|
137
|
+
it('should pass alternative aria label to loading state', () => {
|
138
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, loadingState: { screenreaderText: 'I am a test' } }));
|
139
|
+
expect(react_2.screen.getByRole('dialog', { name: /I am a test/i })).toBeTruthy();
|
140
|
+
});
|
141
|
+
it('should accept errorState', () => {
|
142
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR }));
|
143
|
+
expect(react_2.screen.getByRole('dialog', {
|
144
|
+
name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team . Loading... Reload/i
|
145
|
+
})).toBeTruthy();
|
146
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
147
|
+
expect(react_2.screen.getByRole('button', { name: /Loading... Reload/i })).toBeTruthy();
|
148
|
+
expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
149
|
+
expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
150
|
+
});
|
151
|
+
it('should accept errorState without button', () => {
|
152
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR_WITHOUT_BUTTON }));
|
153
|
+
expect(react_2.screen.getByRole('dialog', {
|
154
|
+
name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team ./i
|
155
|
+
})).toBeTruthy();
|
156
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
157
|
+
expect(react_2.screen.queryByRole('button', { name: /Loading... Reload/i })).toBeFalsy();
|
158
|
+
expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
159
|
+
expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
160
|
+
});
|
161
|
+
it('should show loading state over error state if both are supplied', () => {
|
162
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, errorState: ERROR }));
|
163
|
+
expect(react_2.screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
|
164
|
+
});
|
69
165
|
});
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { EmptyStateProps } from '@patternfly/react-core';
|
2
|
+
import React from 'react';
|
3
|
+
export interface HistoryEmptyStateProps extends EmptyStateProps {
|
4
|
+
onClick?: () => void;
|
5
|
+
bodyText?: string | React.ReactNode;
|
6
|
+
buttonText?: string;
|
7
|
+
buttonIcon?: React.ReactNode;
|
8
|
+
hasButton?: boolean;
|
9
|
+
}
|
10
|
+
export declare const HistoryEmptyState: React.FunctionComponent<HistoryEmptyStateProps>;
|
11
|
+
export default HistoryEmptyState;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
3
|
+
var t = {};
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
5
|
+
t[p] = s[p];
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
9
|
+
t[p[i]] = s[p[i]];
|
10
|
+
}
|
11
|
+
return t;
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
exports.HistoryEmptyState = void 0;
|
18
|
+
const react_core_1 = require("@patternfly/react-core");
|
19
|
+
const react_1 = __importDefault(require("react"));
|
20
|
+
const HistoryEmptyState = (_a) => {
|
21
|
+
var { bodyText, buttonIcon, buttonText, status, titleText, headingLevel, onClick, hasButton = false } = _a, props = __rest(_a, ["bodyText", "buttonIcon", "buttonText", "status", "titleText", "headingLevel", "onClick", "hasButton"]);
|
22
|
+
return (react_1.default.createElement(react_core_1.EmptyState, Object.assign({ status: status, titleText: titleText, headingLevel: headingLevel }, props),
|
23
|
+
react_1.default.createElement(react_core_1.EmptyStateBody, null, bodyText),
|
24
|
+
hasButton && (react_1.default.createElement(react_core_1.EmptyStateFooter, null,
|
25
|
+
react_1.default.createElement(react_core_1.EmptyStateActions, null,
|
26
|
+
react_1.default.createElement(react_core_1.Button, { icon: buttonIcon, variant: "secondary", onClick: onClick }, buttonText))))));
|
27
|
+
};
|
28
|
+
exports.HistoryEmptyState = HistoryEmptyState;
|
29
|
+
exports.default = exports.HistoryEmptyState;
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
3
|
+
var t = {};
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
5
|
+
t[p] = s[p];
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
9
|
+
t[p[i]] = s[p[i]];
|
10
|
+
}
|
11
|
+
return t;
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
exports.LoadingState = void 0;
|
18
|
+
const react_core_1 = require("@patternfly/react-core");
|
19
|
+
const react_1 = __importDefault(require("react"));
|
20
|
+
const LoadingState = (_a) => {
|
21
|
+
var { screenreaderText } = _a, rest = __rest(_a, ["screenreaderText"]);
|
22
|
+
return (react_1.default.createElement("div", { className: "pf-chatbot__history-loading" },
|
23
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
24
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ screenreaderText: screenreaderText !== null && screenreaderText !== void 0 ? screenreaderText : 'Loading chatbot conversation history', fontSize: "3xl" }, rest))),
|
25
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
26
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
27
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
28
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
29
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
30
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
31
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
32
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
33
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
34
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
35
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
36
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
37
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
38
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
39
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
40
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
41
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
42
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)))));
|
43
|
+
};
|
44
|
+
exports.LoadingState = LoadingState;
|
45
|
+
exports.default = exports.LoadingState;
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const react_2 = require("@testing-library/react");
|
8
|
+
const ChatbotFooter_1 = __importDefault(require("./ChatbotFooter"));
|
9
|
+
describe('ChatbotFooter', () => {
|
10
|
+
it('should render ChatbotFooter with children', () => {
|
11
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, null, "Chatbot Content"));
|
12
|
+
expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
|
13
|
+
});
|
14
|
+
it('should render ChatbotFooter with custom classname', () => {
|
15
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, { className: "custom-class" }, "Chatbot Content"));
|
16
|
+
expect(container.querySelector('.custom-class')).toBeTruthy();
|
17
|
+
});
|
18
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,87 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
const react_1 = __importDefault(require("react"));
|
16
|
+
const react_2 = require("@testing-library/react");
|
17
|
+
const ChatbotFootnote_1 = __importDefault(require("./ChatbotFootnote"));
|
18
|
+
describe('ChatbotFooternote', () => {
|
19
|
+
const onClick = jest.fn();
|
20
|
+
const popoverProps = {
|
21
|
+
title: 'Verify accuracy',
|
22
|
+
description: 'description',
|
23
|
+
bannerImage: {
|
24
|
+
src: 'src',
|
25
|
+
alt: 'alt'
|
26
|
+
},
|
27
|
+
cta: {
|
28
|
+
label: 'Got it',
|
29
|
+
onClick
|
30
|
+
},
|
31
|
+
link: {
|
32
|
+
label: 'label',
|
33
|
+
url: 'url'
|
34
|
+
}
|
35
|
+
};
|
36
|
+
it('should render ChatbotFooternote', () => {
|
37
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFootnote_1.default, { label: "Chatbot footer" }));
|
38
|
+
expect(react_2.screen.getByText('Chatbot footer')).toBeTruthy();
|
39
|
+
});
|
40
|
+
it('should render ChatbotFooternote with popover', () => __awaiter(void 0, void 0, void 0, function* () {
|
41
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFootnote_1.default, { label: "Chatbot footer", popover: popoverProps }));
|
42
|
+
// click on the footer button
|
43
|
+
(0, react_2.act)(() => {
|
44
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button'));
|
45
|
+
});
|
46
|
+
yield (0, react_2.waitFor)(() => {
|
47
|
+
// Check if the popover is visible and click on the cta button
|
48
|
+
react_2.screen.getByLabelText('More information');
|
49
|
+
react_2.screen.getByText('Verify accuracy');
|
50
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button', { name: 'Got it' }));
|
51
|
+
expect(onClick).toHaveBeenCalled();
|
52
|
+
});
|
53
|
+
}));
|
54
|
+
it('should call onClick handler when popover cta button is clicked', () => __awaiter(void 0, void 0, void 0, function* () {
|
55
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFootnote_1.default, { label: "Chatbot footer", popover: popoverProps }));
|
56
|
+
// click on the footer button
|
57
|
+
(0, react_2.act)(() => {
|
58
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button'));
|
59
|
+
});
|
60
|
+
yield (0, react_2.waitFor)(() => {
|
61
|
+
// Check if the popover is visible and click on the cta button
|
62
|
+
react_2.screen.getByLabelText('More information');
|
63
|
+
react_2.screen.getByText('Verify accuracy');
|
64
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button', { name: 'Got it' }));
|
65
|
+
expect(onClick).toHaveBeenCalled();
|
66
|
+
});
|
67
|
+
}));
|
68
|
+
it('should close the popover when escape is pressed', () => __awaiter(void 0, void 0, void 0, function* () {
|
69
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFootnote_1.default, { label: "Chatbot footer", popover: popoverProps }));
|
70
|
+
// click on the footer button
|
71
|
+
(0, react_2.act)(() => {
|
72
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button'));
|
73
|
+
});
|
74
|
+
yield (0, react_2.waitFor)(() => {
|
75
|
+
// Check if the popover is visible and click on the cta button
|
76
|
+
react_2.screen.getByLabelText('More information');
|
77
|
+
react_2.screen.getByText('Verify accuracy');
|
78
|
+
});
|
79
|
+
(0, react_2.act)(() => {
|
80
|
+
// trigger escape to close the popover
|
81
|
+
react_2.fireEvent.keyDown(document, { key: 'Escape', code: 'Escape' });
|
82
|
+
});
|
83
|
+
yield (0, react_2.waitFor)(() => {
|
84
|
+
expect(react_2.screen.queryByText('Verify accuracy')).toBeFalsy();
|
85
|
+
});
|
86
|
+
}));
|
87
|
+
});
|