@patternfly/chatbot 2.2.0-prerelease.2 → 2.2.0-prerelease.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/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.js +3 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
- 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/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 +3 -1
- 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/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/ListMessage/OrderedListMessage.d.ts +1 -1
- package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
- package/dist/cjs/Message/Message.d.ts +28 -7
- package/dist/cjs/Message/Message.js +29 -14
- package/dist/cjs/Message/Message.test.js +89 -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/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.js +9 -12
- package/dist/cjs/MessageBar/MessageBar.test.js +4 -4
- 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/index.d.ts +6 -0
- package/dist/cjs/index.js +10 -1
- package/dist/css/main.css +372 -102
- 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.js +3 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
- 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/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 +3 -1
- 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/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/ListMessage/OrderedListMessage.d.ts +1 -1
- package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
- package/dist/esm/Message/Message.d.ts +28 -7
- package/dist/esm/Message/Message.js +27 -12
- package/dist/esm/Message/Message.test.js +89 -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/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.js +9 -12
- package/dist/esm/MessageBar/MessageBar.test.js +4 -4
- 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/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -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/BotMessage.tsx +142 -13
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +4 -0
- 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/MessageWithQuickStart.tsx +31 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +63 -11
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +182 -12
- 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 +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +2 -2
- 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/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 +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +20 -19
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -2
- 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.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 +7 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +8 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +112 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +41 -8
- package/src/ChatbotFooter/ChatbotFooter.scss +2 -6
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
- package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
- 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 +8 -1
- 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/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/ListMessage/ListMessage.scss +5 -5
- package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
- package/src/Message/Message.scss +4 -26
- package/src/Message/Message.test.tsx +116 -3
- package/src/Message/Message.tsx +72 -22
- 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/TextMessage/TextMessage.scss +8 -11
- 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 +3 -2
- package/src/MessageBar/MessageBar.test.tsx +4 -4
- package/src/MessageBar/MessageBar.tsx +9 -12
- package/src/MessageBar/MicrophoneButton.scss +8 -8
- 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 +103 -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/index.ts +9 -0
- package/src/main.scss +6 -4
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import ChatbotHeaderActions from './ChatbotHeaderActions';
|
4
|
+
|
5
|
+
describe('ChatbotHeaderActions', () => {
|
6
|
+
it('should render ChatbotHeaderActions with children', () => {
|
7
|
+
render(<ChatbotHeaderActions>Chatbot Header</ChatbotHeaderActions>);
|
8
|
+
expect(screen.getByText('Chatbot Header')).toBeTruthy();
|
9
|
+
});
|
10
|
+
|
11
|
+
it('should render ChatbotHeaderActions with custom classname', () => {
|
12
|
+
const { container } = render(
|
13
|
+
<ChatbotHeaderActions className="custom-header-action-class">Chatbot Content</ChatbotHeaderActions>
|
14
|
+
);
|
15
|
+
expect(container.querySelector('.custom-header-action-class')).toBeTruthy();
|
16
|
+
});
|
17
|
+
});
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
3
|
+
import { ChatbotHeaderCloseButton } from './ChatbotHeaderCloseButton';
|
4
|
+
|
5
|
+
describe('ChatbotHeaderCloseButton', () => {
|
6
|
+
it('should render ChatbotHeaderCloseButton', () => {
|
7
|
+
const { container } = render(
|
8
|
+
<ChatbotHeaderCloseButton className="custom-header-close-button" onClick={jest.fn()} />
|
9
|
+
);
|
10
|
+
|
11
|
+
expect(container.querySelector('.custom-header-close-button')).toBeTruthy();
|
12
|
+
});
|
13
|
+
|
14
|
+
it('should call onClick handler when close button is pressed', () => {
|
15
|
+
const onClick = jest.fn();
|
16
|
+
render(<ChatbotHeaderCloseButton className="custom-header-close-button" onClick={onClick} />);
|
17
|
+
fireEvent.click(screen.getByRole('button', { name: 'Close' }));
|
18
|
+
expect(onClick).toHaveBeenCalled();
|
19
|
+
});
|
20
|
+
});
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
4
|
+
import { CloseIcon } from '@patternfly/react-icons';
|
5
|
+
|
6
|
+
export interface ChatbotHeaderCloseButtonProps {
|
7
|
+
/** Callback function for when button is clicked */
|
8
|
+
onClick: () => void;
|
9
|
+
/** Custom classname for the header component */
|
10
|
+
className?: string;
|
11
|
+
/** Props spread to the PF Tooltip component wrapping the display mode dropdown */
|
12
|
+
tooltipProps?: TooltipProps;
|
13
|
+
/** Aria label for menu */
|
14
|
+
menuAriaLabel?: string;
|
15
|
+
/** Ref applied to menu */
|
16
|
+
innerRef?: React.Ref<HTMLButtonElement>;
|
17
|
+
/** Content used in tooltip */
|
18
|
+
tooltipContent?: string;
|
19
|
+
}
|
20
|
+
|
21
|
+
const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseButtonProps> = ({
|
22
|
+
className,
|
23
|
+
onClick,
|
24
|
+
tooltipProps,
|
25
|
+
menuAriaLabel = 'Close',
|
26
|
+
innerRef,
|
27
|
+
tooltipContent = 'Close'
|
28
|
+
}: ChatbotHeaderCloseButtonProps) => (
|
29
|
+
<div className={`pf-chatbot__menu ${className}`}>
|
30
|
+
<Tooltip
|
31
|
+
content={tooltipContent}
|
32
|
+
position="bottom"
|
33
|
+
// prevents VO announcements of both aria label and tooltip
|
34
|
+
aria="none"
|
35
|
+
{...tooltipProps}
|
36
|
+
>
|
37
|
+
<Button
|
38
|
+
className="pf-chatbot__button--toggle-menu"
|
39
|
+
variant="plain"
|
40
|
+
onClick={onClick}
|
41
|
+
aria-label={menuAriaLabel}
|
42
|
+
ref={innerRef}
|
43
|
+
icon={
|
44
|
+
<Icon size="xl" isInline>
|
45
|
+
<CloseIcon />
|
46
|
+
</Icon>
|
47
|
+
}
|
48
|
+
/>
|
49
|
+
</Tooltip>
|
50
|
+
</div>
|
51
|
+
);
|
52
|
+
|
53
|
+
export const ChatbotHeaderCloseButton = React.forwardRef(
|
54
|
+
(props: ChatbotHeaderCloseButtonProps, ref: React.Ref<HTMLButtonElement>) => (
|
55
|
+
<ChatbotHeaderCloseButtonBase innerRef={ref} {...props} />
|
56
|
+
)
|
57
|
+
);
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import ChatbotHeaderMain from './ChatbotHeaderMain';
|
4
|
+
|
5
|
+
describe('ChatbotHeaderMain', () => {
|
6
|
+
it('should render ChatbotHeaderMain with children', () => {
|
7
|
+
render(<ChatbotHeaderMain>Chatbot Header Main</ChatbotHeaderMain>);
|
8
|
+
expect(screen.getByText('Chatbot Header Main')).toBeTruthy();
|
9
|
+
});
|
10
|
+
|
11
|
+
it('should render ChatbotHeaderMain with custom classname', () => {
|
12
|
+
const { container } = render(
|
13
|
+
<ChatbotHeaderMain className="custom-header-class">Chatbot Content</ChatbotHeaderMain>
|
14
|
+
);
|
15
|
+
expect(container.querySelector('.custom-header-class')).toBeTruthy();
|
16
|
+
});
|
17
|
+
});
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
3
|
+
import { ChatbotHeaderMenu } from './ChatbotHeaderMenu';
|
4
|
+
|
5
|
+
describe('ChatbotHeaderMenu', () => {
|
6
|
+
it('should render ChatbotHeaderMenu with custom class', () => {
|
7
|
+
const { container } = render(<ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={jest.fn()} />);
|
8
|
+
|
9
|
+
expect(container.querySelector('.custom-header-menu')).toBeTruthy();
|
10
|
+
});
|
11
|
+
|
12
|
+
it('should call onMenuToggle when ChatbotHeaderMenu button is clicked', () => {
|
13
|
+
const onMenuToggle = jest.fn();
|
14
|
+
render(<ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={onMenuToggle} />);
|
15
|
+
fireEvent.click(screen.getByRole('button', { name: 'Toggle menu' }));
|
16
|
+
|
17
|
+
expect(onMenuToggle).toHaveBeenCalled();
|
18
|
+
});
|
19
|
+
});
|
@@ -14,6 +14,8 @@ export interface ChatbotHeaderMenuProps {
|
|
14
14
|
menuAriaLabel?: string;
|
15
15
|
/** Ref applied to menu */
|
16
16
|
innerRef?: React.Ref<HTMLButtonElement>;
|
17
|
+
/** Content used in tooltip */
|
18
|
+
tooltipContent?: string;
|
17
19
|
}
|
18
20
|
|
19
21
|
const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = ({
|
@@ -21,10 +23,17 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
|
|
21
23
|
onMenuToggle,
|
22
24
|
tooltipProps,
|
23
25
|
menuAriaLabel = 'Toggle menu',
|
24
|
-
innerRef
|
26
|
+
innerRef,
|
27
|
+
tooltipContent = 'Menu'
|
25
28
|
}: ChatbotHeaderMenuProps) => (
|
26
29
|
<div className={`pf-chatbot__menu ${className}`}>
|
27
|
-
<Tooltip
|
30
|
+
<Tooltip
|
31
|
+
content={tooltipContent}
|
32
|
+
position="bottom"
|
33
|
+
// prevents VO announcements of both aria label and tooltip
|
34
|
+
aria="none"
|
35
|
+
{...tooltipProps}
|
36
|
+
>
|
28
37
|
<Button
|
29
38
|
className="pf-chatbot__button--toggle-menu"
|
30
39
|
variant="plain"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { DropdownItem } from '@patternfly/react-core';
|
3
|
+
import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
|
4
|
+
import { ChatbotHeaderOptionsDropdown } from './ChatbotHeaderOptionsDropdown';
|
5
|
+
|
6
|
+
describe('ChatbotHeaderOptionsDropdown', () => {
|
7
|
+
const dropdownItems = (
|
8
|
+
<>
|
9
|
+
<DropdownItem>Option 1</DropdownItem>
|
10
|
+
<DropdownItem>Option 2</DropdownItem>
|
11
|
+
<DropdownItem>Option 3</DropdownItem>
|
12
|
+
</>
|
13
|
+
);
|
14
|
+
|
15
|
+
it('should render ChatbotHeaderOptionsDropdown', () => {
|
16
|
+
render(<ChatbotHeaderOptionsDropdown>{dropdownItems}</ChatbotHeaderOptionsDropdown>);
|
17
|
+
|
18
|
+
expect(screen.getByRole('button', { name: 'Chatbot options' })).toBeTruthy();
|
19
|
+
});
|
20
|
+
|
21
|
+
it('should call onselect handler when a dropdown item is clicked', async () => {
|
22
|
+
const onSelect = jest.fn();
|
23
|
+
const { container } = render(
|
24
|
+
<ChatbotHeaderOptionsDropdown className="custom-header-options-dropdown" onSelect={onSelect}>
|
25
|
+
{dropdownItems}
|
26
|
+
</ChatbotHeaderOptionsDropdown>
|
27
|
+
);
|
28
|
+
|
29
|
+
act(() => {
|
30
|
+
fireEvent.click(screen.getByRole('button', { name: 'Chatbot options' }));
|
31
|
+
});
|
32
|
+
|
33
|
+
await waitFor(() => {
|
34
|
+
expect(container.querySelector('.custom-header-options-dropdown')).toBeTruthy();
|
35
|
+
|
36
|
+
expect(screen.getByText('Option 1'));
|
37
|
+
expect(screen.getByText('Option 2'));
|
38
|
+
expect(screen.getByText('Option 3'));
|
39
|
+
|
40
|
+
fireEvent.click(screen.getByText('Option 3'));
|
41
|
+
|
42
|
+
expect(onSelect).toHaveBeenCalled();
|
43
|
+
});
|
44
|
+
});
|
45
|
+
});
|
@@ -33,7 +33,14 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
|
|
33
33
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
|
34
34
|
|
35
35
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
36
|
-
<Tooltip
|
36
|
+
<Tooltip
|
37
|
+
className="pf-chatbot__tooltip"
|
38
|
+
content="Chatbot options"
|
39
|
+
position="bottom"
|
40
|
+
// prevents VO announcements of both aria label and tooltip
|
41
|
+
aria="none"
|
42
|
+
{...tooltipProps}
|
43
|
+
>
|
37
44
|
<MenuToggle
|
38
45
|
className="pf-chatbot__button--toggle-options"
|
39
46
|
variant="plain"
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { DropdownItem } from '@patternfly/react-core';
|
3
|
+
import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
|
4
|
+
import { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
|
5
|
+
|
6
|
+
describe('ChatbotHeaderSelectorDropdown', () => {
|
7
|
+
const dropdownItems = (
|
8
|
+
<>
|
9
|
+
<DropdownItem>Option 1</DropdownItem>
|
10
|
+
<DropdownItem>Option 2</DropdownItem>
|
11
|
+
<DropdownItem>Option 3</DropdownItem>
|
12
|
+
</>
|
13
|
+
);
|
14
|
+
|
15
|
+
it('should render ChatbotHeaderSelectorDropdown', () => {
|
16
|
+
render(<ChatbotHeaderSelectorDropdown value="Option 1">{dropdownItems}</ChatbotHeaderSelectorDropdown>);
|
17
|
+
|
18
|
+
expect(screen.getByRole('button', { name: 'Chatbot selector' })).toBeTruthy();
|
19
|
+
});
|
20
|
+
|
21
|
+
it('should call onselect handler when a dropdown item is clicked', async () => {
|
22
|
+
const onSelect = jest.fn();
|
23
|
+
const { container } = render(
|
24
|
+
<ChatbotHeaderSelectorDropdown value="Option 1" className="custom-header-selector-dropdown" onSelect={onSelect}>
|
25
|
+
{dropdownItems}
|
26
|
+
</ChatbotHeaderSelectorDropdown>
|
27
|
+
);
|
28
|
+
|
29
|
+
act(() => {
|
30
|
+
fireEvent.click(screen.getByRole('button', { name: 'Chatbot selector' }));
|
31
|
+
});
|
32
|
+
|
33
|
+
await waitFor(() => {
|
34
|
+
expect(container.querySelector('.custom-header-selector-dropdown')).toBeTruthy();
|
35
|
+
|
36
|
+
expect(screen.getByText('Option 3'));
|
37
|
+
|
38
|
+
fireEvent.click(screen.getByText('Option 3'));
|
39
|
+
|
40
|
+
expect(onSelect).toHaveBeenCalled();
|
41
|
+
});
|
42
|
+
});
|
43
|
+
});
|
@@ -31,7 +31,14 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
|
|
31
31
|
const [defaultAriaLabel, setDefaultAriaLabel] = React.useState('Chatbot selector');
|
32
32
|
|
33
33
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
34
|
-
<Tooltip
|
34
|
+
<Tooltip
|
35
|
+
className="pf-chatbot__tooltip"
|
36
|
+
content={tooltipContent}
|
37
|
+
position="bottom"
|
38
|
+
// prevents VO announcements of both aria label and tooltip
|
39
|
+
aria="none"
|
40
|
+
{...tooltipProps}
|
41
|
+
>
|
35
42
|
<MenuToggle
|
36
43
|
variant="secondary"
|
37
44
|
aria-label={menuToggleAriaLabel ?? defaultAriaLabel}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
4
|
+
import ChatbotHeaderTitle from './ChatbotHeaderTitle';
|
5
|
+
|
6
|
+
describe('ChatbotHeaderTitle', () => {
|
7
|
+
it('should render ChatbotHeaderTitle with children', () => {
|
8
|
+
render(<ChatbotHeaderTitle>Chatbot Header Title</ChatbotHeaderTitle>);
|
9
|
+
expect(screen.getByText('Chatbot Header Title')).toBeTruthy();
|
10
|
+
});
|
11
|
+
|
12
|
+
it('should render ChatbotHeaderTitle with custom classname', () => {
|
13
|
+
const { container } = render(
|
14
|
+
<ChatbotHeaderTitle className="custom-header-class">Chatbot Header Title</ChatbotHeaderTitle>
|
15
|
+
);
|
16
|
+
expect(container.querySelector('.custom-header-class')).toBeTruthy();
|
17
|
+
});
|
18
|
+
|
19
|
+
it('should render title for default display mode', () => {
|
20
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.default} showOnDefault={'Default header title'} />);
|
21
|
+
expect(screen.getByText('Default header title')).toBeTruthy();
|
22
|
+
});
|
23
|
+
|
24
|
+
it('should render title for docked display mode', () => {
|
25
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.docked} showOnDocked={'Docked header title'} />);
|
26
|
+
expect(screen.getByText('Docked header title')).toBeTruthy();
|
27
|
+
});
|
28
|
+
|
29
|
+
it('should fallback to default title when docked display mode title is not configured', () => {
|
30
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.docked} showOnDefault={'Default header title'} />);
|
31
|
+
expect(screen.getByText('Default header title')).toBeTruthy();
|
32
|
+
});
|
33
|
+
|
34
|
+
it('should render title for embedded display mode', () => {
|
35
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.embedded} showOnEmbedded={'Embedded header title'} />);
|
36
|
+
expect(screen.getByText('Embedded header title')).toBeTruthy();
|
37
|
+
});
|
38
|
+
|
39
|
+
it('should fallback to default title when embedded display mode title is not configured', () => {
|
40
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.embedded} showOnDefault={'Default header title'} />);
|
41
|
+
expect(screen.getByText('Default header title')).toBeTruthy();
|
42
|
+
});
|
43
|
+
|
44
|
+
it('should render title for fullscreen display mode', () => {
|
45
|
+
render(
|
46
|
+
<ChatbotHeaderTitle
|
47
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
48
|
+
showOnFullScreen={'Fullscreen header title'}
|
49
|
+
className="custom-header-class"
|
50
|
+
/>
|
51
|
+
);
|
52
|
+
expect(screen.getByText('Fullscreen header title')).toBeTruthy();
|
53
|
+
});
|
54
|
+
|
55
|
+
it('should fallback to default title when fullscreen display mode title is not configured', () => {
|
56
|
+
render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.fullscreen} showOnDefault={'Default header title'} />);
|
57
|
+
expect(screen.getByText('Default header title')).toBeTruthy();
|
58
|
+
});
|
59
|
+
});
|
@@ -16,7 +16,7 @@
|
|
16
16
|
}
|
17
17
|
.pf-v6-c-button.pf-m-primary.pf-m-block,
|
18
18
|
.pf-v6-c-button.pf-m-link.pf-m-block {
|
19
|
-
--pf-v6-c-button--FontWeight:
|
19
|
+
--pf-v6-c-button--FontWeight: var(--pf-t--global--font--weight--body--bold);
|
20
20
|
}
|
21
21
|
.pf-v6-c-modal-box__footer {
|
22
22
|
padding-block-start: var(--pf-t--global--spacer--xl);
|
@@ -65,7 +65,12 @@ const ChatbotToggleBase: React.FunctionComponent<ChatbotToggleProps> = ({
|
|
65
65
|
const icon = isChatbotVisible ? <AngleDownIcon data-testid={openIconTestId} /> : closedIcon;
|
66
66
|
|
67
67
|
return (
|
68
|
-
<Tooltip
|
68
|
+
<Tooltip
|
69
|
+
content={tooltipLabel}
|
70
|
+
// prevents VO announcements of both aria label and tooltip
|
71
|
+
aria="none"
|
72
|
+
{...tooltipProps}
|
73
|
+
>
|
69
74
|
<Button
|
70
75
|
className={`pf-chatbot__button ${isChatbotVisible ? 'pf-chatbot__button--active' : ''} ${isRound ? 'pf-chatbot__button--round' : ''} ${className ? className : ''}`}
|
71
76
|
variant="plain"
|
@@ -38,7 +38,7 @@
|
|
38
38
|
border: none;
|
39
39
|
--pf-v6-c-code-editor__tab--BorderStartEndRadius: 0;
|
40
40
|
border-start-start-radius: var(--pf-t--global--border--radius--small);
|
41
|
-
--pf-t--global--font--weight--body--default:
|
41
|
+
--pf-t--global--font--weight--body--default: var(--pf-t--global--font--weight--body--bold);
|
42
42
|
}
|
43
43
|
.pf-v6-c-code-editor__tab-icon {
|
44
44
|
display: none;
|
@@ -74,3 +74,11 @@
|
|
74
74
|
}
|
75
75
|
}
|
76
76
|
}
|
77
|
+
|
78
|
+
.pf-chatbot__code-modal-body {
|
79
|
+
flex: 1;
|
80
|
+
}
|
81
|
+
|
82
|
+
.pf-chatbot__code-modal--fullscreen {
|
83
|
+
height: inherit; // override shared modal so code editor works in full screen
|
84
|
+
}
|
@@ -87,17 +87,6 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
|
|
87
87
|
}
|
88
88
|
};
|
89
89
|
|
90
|
-
/* eslint-disable indent */
|
91
|
-
const getHeight = (displayMode: ChatbotDisplayMode) => {
|
92
|
-
switch (displayMode) {
|
93
|
-
case ChatbotDisplayMode.docked:
|
94
|
-
return '100vh';
|
95
|
-
default:
|
96
|
-
return '45vh';
|
97
|
-
}
|
98
|
-
};
|
99
|
-
/* eslint-enable indent */
|
100
|
-
|
101
90
|
const modal = (
|
102
91
|
<ChatbotModal
|
103
92
|
isOpen={isModalOpen}
|
@@ -114,7 +103,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
|
|
114
103
|
<StackItem className="pf-chatbot__code-modal-file-details">
|
115
104
|
<FileDetails fileName={fileName} />
|
116
105
|
</StackItem>
|
117
|
-
<StackItem>
|
106
|
+
<StackItem className="pf-chatbot__code-modal-body">
|
118
107
|
<CodeEditor
|
119
108
|
isDarkTheme
|
120
109
|
isLineNumbersVisible={isLineNumbersVisible}
|
@@ -126,7 +115,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
|
|
126
115
|
onEditorDidMount={onEditorDidMount}
|
127
116
|
onCodeChange={onCodeChange}
|
128
117
|
className={codeEditorClassName}
|
129
|
-
|
118
|
+
isFullHeight
|
130
119
|
options={{
|
131
120
|
glyphMargin: false,
|
132
121
|
folding: false
|
@@ -0,0 +1,72 @@
|
|
1
|
+
.pf-chatbot__compare-container {
|
2
|
+
display: flex;
|
3
|
+
flex-direction: column;
|
4
|
+
position: relative;
|
5
|
+
height: 100%;
|
6
|
+
}
|
7
|
+
.pf-chatbot__compare-toggle {
|
8
|
+
width: 100%;
|
9
|
+
|
10
|
+
.pf-v6-c-toggle-group__button {
|
11
|
+
width: 100%;
|
12
|
+
display: flex;
|
13
|
+
justify-content: center;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
.pf-chatbot__compare {
|
17
|
+
display: flex;
|
18
|
+
height: 100%;
|
19
|
+
width: 100%;
|
20
|
+
|
21
|
+
@media screen and (max-width: 900px) {
|
22
|
+
overflow-y: auto;
|
23
|
+
}
|
24
|
+
|
25
|
+
.pf-chatbot__compare-item:first-of-type {
|
26
|
+
border-right: 1px solid var(--pf-t--global--border--color--default);
|
27
|
+
|
28
|
+
@media screen and (max-width: 900px) {
|
29
|
+
border-right: 0px;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
.pf-chatbot__compare-item {
|
35
|
+
flex: 1;
|
36
|
+
|
37
|
+
.pf-chatbot--embedded .pf-chatbot__messagebox {
|
38
|
+
width: 100%;
|
39
|
+
}
|
40
|
+
|
41
|
+
.pf-chatbot__content {
|
42
|
+
padding: 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
.pf-chatbot.pf-chatbot--embedded {
|
46
|
+
@media screen and (max-width: 900px) {
|
47
|
+
height: 100%;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
.pf-chatbot__compare-item-hidden {
|
52
|
+
display: block;
|
53
|
+
|
54
|
+
@media screen and (max-width: 900px) {
|
55
|
+
display: none;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
.pf-chatbot__compare-mobile-controls {
|
60
|
+
padding: var(--pf-t--global--spacer--md) var(--pf-t--global--spacer--lg) 0 var(--pf-t--global--spacer--lg);
|
61
|
+
display: none;
|
62
|
+
background-color: var(--pf-t--global--background--color--secondary--default);
|
63
|
+
position: sticky;
|
64
|
+
top: 0;
|
65
|
+
z-index: 9999;
|
66
|
+
|
67
|
+
@media screen and (max-width: 900px) {
|
68
|
+
display: flex;
|
69
|
+
flex-direction: column;
|
70
|
+
gap: var(--pf-t--global--spacer--md);
|
71
|
+
}
|
72
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import '@testing-library/jest-dom';
|
4
|
+
import Compare from './Compare';
|
5
|
+
|
6
|
+
const firstChild = (
|
7
|
+
<div>
|
8
|
+
<h1>Child 1</h1>
|
9
|
+
</div>
|
10
|
+
);
|
11
|
+
|
12
|
+
const secondChild = (
|
13
|
+
<div>
|
14
|
+
<h1>Child 2</h1>
|
15
|
+
</div>
|
16
|
+
);
|
17
|
+
|
18
|
+
describe('Compare', () => {
|
19
|
+
it('should render compare correctly', () => {
|
20
|
+
render(
|
21
|
+
<Compare
|
22
|
+
firstChildDisplayName="Child 1"
|
23
|
+
secondChildDisplayName="Child 2"
|
24
|
+
firstChild={firstChild}
|
25
|
+
secondChild={secondChild}
|
26
|
+
/>
|
27
|
+
);
|
28
|
+
expect(screen.getByRole('heading', { name: /Child 1/i })).toBeTruthy();
|
29
|
+
expect(screen.getByRole('heading', { name: /Child 2/i })).toBeTruthy();
|
30
|
+
});
|
31
|
+
});
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import React, { PropsWithChildren } from 'react';
|
2
|
+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
3
|
+
|
4
|
+
interface CompareProps {
|
5
|
+
/** First of two children to render */
|
6
|
+
firstChild: React.ReactNode;
|
7
|
+
/** Second of two children to render */
|
8
|
+
secondChild: React.ReactNode;
|
9
|
+
/** Display name for first child, used in mobile toggle */
|
10
|
+
firstChildDisplayName: string;
|
11
|
+
/** Display name for second child, used in mobile toggle */
|
12
|
+
secondChildDisplayName: string;
|
13
|
+
/** Aria label for mobile toggle group */
|
14
|
+
toggleGroupAriaLabel?: string;
|
15
|
+
/** Callback for when mobile toggle is used */
|
16
|
+
onToggleClick?: (event: MouseEvent | React.MouseEvent<any, MouseEvent> | React.KeyboardEvent<Element>) => void;
|
17
|
+
}
|
18
|
+
|
19
|
+
export const Compare = ({
|
20
|
+
firstChild,
|
21
|
+
secondChild,
|
22
|
+
firstChildDisplayName,
|
23
|
+
secondChildDisplayName,
|
24
|
+
onToggleClick,
|
25
|
+
toggleGroupAriaLabel = 'Select which chatbot to display'
|
26
|
+
}: PropsWithChildren<CompareProps>) => {
|
27
|
+
const [isSelected, setIsSelected] = React.useState('toggle-group-chatbot-1');
|
28
|
+
const [showFirstChatbot, setShowFirstChatbot] = React.useState(true);
|
29
|
+
const [showSecondChatbot, setShowSecondChatbot] = React.useState(false);
|
30
|
+
|
31
|
+
React.useEffect(() => {
|
32
|
+
// we want to show the first if we switch to the mobile toggle view
|
33
|
+
// and reset/switch back to normal otherwise
|
34
|
+
const updateChatbotVisibility = () => {
|
35
|
+
if (window.innerWidth >= 901) {
|
36
|
+
setShowFirstChatbot(true);
|
37
|
+
setShowSecondChatbot(true);
|
38
|
+
} else {
|
39
|
+
setShowFirstChatbot(true);
|
40
|
+
setShowSecondChatbot(false);
|
41
|
+
setIsSelected('toggle-group-chatbot-1');
|
42
|
+
}
|
43
|
+
};
|
44
|
+
window.addEventListener('resize', updateChatbotVisibility);
|
45
|
+
|
46
|
+
return () => {
|
47
|
+
window.removeEventListener('resize', updateChatbotVisibility);
|
48
|
+
};
|
49
|
+
}, []);
|
50
|
+
|
51
|
+
// this only happens on mobile
|
52
|
+
const handleChildToggleClick = (
|
53
|
+
event: MouseEvent | React.MouseEvent<any, MouseEvent> | React.KeyboardEvent<Element>
|
54
|
+
) => {
|
55
|
+
const id = event.currentTarget.id;
|
56
|
+
setIsSelected(id);
|
57
|
+
setShowSecondChatbot(!showSecondChatbot);
|
58
|
+
setShowFirstChatbot(!showFirstChatbot);
|
59
|
+
onToggleClick && onToggleClick(event);
|
60
|
+
};
|
61
|
+
|
62
|
+
return (
|
63
|
+
<>
|
64
|
+
<div className="pf-chatbot__compare-mobile-controls">
|
65
|
+
<ToggleGroup aria-label={toggleGroupAriaLabel}>
|
66
|
+
<ToggleGroupItem
|
67
|
+
className="pf-chatbot__compare-toggle"
|
68
|
+
text={firstChildDisplayName}
|
69
|
+
buttonId="toggle-group-chatbot-1"
|
70
|
+
isSelected={isSelected === 'toggle-group-chatbot-1'}
|
71
|
+
onChange={handleChildToggleClick}
|
72
|
+
/>
|
73
|
+
<ToggleGroupItem
|
74
|
+
className="pf-chatbot__compare-toggle"
|
75
|
+
text={secondChildDisplayName}
|
76
|
+
buttonId="toggle-group-chatbot-2"
|
77
|
+
isSelected={isSelected === 'toggle-group-chatbot-2'}
|
78
|
+
onChange={handleChildToggleClick}
|
79
|
+
/>
|
80
|
+
</ToggleGroup>
|
81
|
+
</div>
|
82
|
+
<div className="pf-chatbot__compare">
|
83
|
+
<div
|
84
|
+
className={`pf-chatbot__compare-item ${!showFirstChatbot ? 'pf-chatbot__compare-item-hidden' : undefined}`}
|
85
|
+
>
|
86
|
+
{firstChild}
|
87
|
+
</div>
|
88
|
+
<div
|
89
|
+
className={`pf-chatbot__compare-item ${!showSecondChatbot ? 'pf-chatbot__compare-item-hidden' : undefined}`}
|
90
|
+
>
|
91
|
+
{secondChild}
|
92
|
+
</div>
|
93
|
+
</div>
|
94
|
+
</>
|
95
|
+
);
|
96
|
+
};
|
97
|
+
|
98
|
+
export default Compare;
|
@@ -2,7 +2,7 @@
|
|
2
2
|
color: var(--pf-t--global--text--color--subtle);
|
3
3
|
display: flex; // this is needed for when FileDetailsLabel is clickable
|
4
4
|
font-size: var(--pf-t--global--icon--size--font--xs);
|
5
|
-
font-weight:
|
5
|
+
font-weight: var(--pf-t--global--font--weight--body--bold);
|
6
6
|
}
|
7
7
|
|
8
8
|
.pf-chatbot__code-icon {
|
@@ -9,7 +9,7 @@ exports[`FileDropZone should render file drop zone 1`] = `
|
|
9
9
|
>
|
10
10
|
<input
|
11
11
|
multiple=""
|
12
|
-
style="
|
12
|
+
style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
|
13
13
|
tabindex="-1"
|
14
14
|
type="file"
|
15
15
|
/>
|