@patternfly/chatbot 2.2.0-prerelease.8 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +52 -0
- package/dist/cjs/Chatbot/Chatbot.d.ts +2 -1
- package/dist/cjs/Chatbot/Chatbot.js +1 -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 +24 -12
- 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.js +3 -1
- 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.js +3 -1
- 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.d.ts +3 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +55 -0
- package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- 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/ErrorMessage/ErrorMessage.d.ts +4 -0
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +26 -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/Message.d.ts +49 -8
- package/dist/cjs/Message/Message.js +70 -18
- package/dist/cjs/Message/Message.test.js +269 -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 +54 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +133 -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 +127 -46
- 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 +4 -1
- package/dist/cjs/ResponseActions/ResponseActionButton.js +21 -6
- package/dist/cjs/ResponseActions/ResponseActions.d.ts +8 -2
- package/dist/cjs/ResponseActions/ResponseActions.js +7 -7
- package/dist/cjs/ResponseActions/ResponseActions.test.js +2 -2
- package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
- package/dist/cjs/Settings/SettingsForm.test.js +26 -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 +4 -0
- package/dist/cjs/index.js +7 -1
- package/dist/cjs/tracking/console_tracking_provider.d.ts +10 -0
- package/dist/cjs/tracking/console_tracking_provider.js +27 -0
- package/dist/cjs/tracking/index.d.ts +2 -0
- package/dist/cjs/tracking/index.js +23 -0
- package/dist/cjs/tracking/posthog_tracking_provider.d.ts +9 -0
- package/dist/cjs/tracking/posthog_tracking_provider.js +37 -0
- package/dist/cjs/tracking/segment_tracking_provider.d.ts +10 -0
- package/dist/cjs/tracking/segment_tracking_provider.js +50 -0
- package/dist/cjs/tracking/trackingProviderProxy.d.ts +9 -0
- package/dist/cjs/tracking/trackingProviderProxy.js +24 -0
- package/dist/cjs/tracking/tracking_api.d.ts +8 -0
- package/dist/cjs/tracking/tracking_api.js +2 -0
- package/dist/cjs/tracking/tracking_registry.d.ts +4 -0
- package/dist/cjs/tracking/tracking_registry.js +33 -0
- package/dist/cjs/tracking/tracking_spi.d.ts +9 -0
- package/dist/cjs/tracking/tracking_spi.js +2 -0
- package/dist/cjs/tracking/umami_tracking_provider.d.ts +14 -0
- package/dist/cjs/tracking/umami_tracking_provider.js +44 -0
- package/dist/css/main.css +438 -147
- package/dist/css/main.css.map +1 -1
- package/dist/dynamic/Compare/package.json +1 -0
- package/dist/dynamic/tracking/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.d.ts +2 -1
- package/dist/esm/Chatbot/Chatbot.js +1 -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 +24 -12
- 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.js +3 -1
- 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.js +3 -1
- 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.d.ts +3 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +50 -0
- package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- 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/ErrorMessage/ErrorMessage.d.ts +4 -0
- package/dist/esm/Message/ErrorMessage/ErrorMessage.js +21 -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/Message.d.ts +49 -8
- package/dist/esm/Message/Message.js +68 -16
- package/dist/esm/Message/Message.test.js +269 -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 +49 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +128 -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 +127 -46
- 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 +4 -1
- package/dist/esm/ResponseActions/ResponseActionButton.js +18 -3
- package/dist/esm/ResponseActions/ResponseActions.d.ts +8 -2
- package/dist/esm/ResponseActions/ResponseActions.js +7 -7
- package/dist/esm/ResponseActions/ResponseActions.test.js +2 -2
- package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
- package/dist/esm/Settings/SettingsForm.test.js +21 -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 +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/tracking/console_tracking_provider.d.ts +10 -0
- package/dist/esm/tracking/console_tracking_provider.js +23 -0
- package/dist/esm/tracking/index.d.ts +2 -0
- package/dist/esm/tracking/index.js +2 -0
- package/dist/esm/tracking/posthog_tracking_provider.d.ts +9 -0
- package/dist/esm/tracking/posthog_tracking_provider.js +33 -0
- package/dist/esm/tracking/segment_tracking_provider.d.ts +10 -0
- package/dist/esm/tracking/segment_tracking_provider.js +46 -0
- package/dist/esm/tracking/trackingProviderProxy.d.ts +9 -0
- package/dist/esm/tracking/trackingProviderProxy.js +22 -0
- package/dist/esm/tracking/tracking_api.d.ts +8 -0
- package/dist/esm/tracking/tracking_api.js +1 -0
- package/dist/esm/tracking/tracking_registry.d.ts +4 -0
- package/dist/esm/tracking/tracking_registry.js +26 -0
- package/dist/esm/tracking/tracking_spi.d.ts +9 -0
- package/dist/esm/tracking/tracking_spi.js +1 -0
- package/dist/esm/tracking/umami_tracking_provider.d.ts +14 -0
- package/dist/esm/tracking/umami_tracking_provider.js +40 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -9
- package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +8 -2
- package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +192 -15
- package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +219 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +214 -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 +1 -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 +61 -9
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +244 -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/SquareChatbotToggle.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +21 -6
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +39 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +48 -35
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +453 -0
- 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/ai-action-inpage.svg +85 -0
- package/patternfly-docs/content/extensions/chatbot/img/ai-action-message.svg +63 -0
- package/patternfly-docs/content/extensions/chatbot/img/analytics-example.svg +127 -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 -58
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-analytics.svg +51 -0
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +11 -12
- 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/comparison.svg +45 -0
- package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
- package/patternfly-docs/content/extensions/chatbot/img/docked.svg +259 -241
- package/patternfly-docs/content/extensions/chatbot/img/drawer.svg +255 -0
- package/patternfly-docs/content/extensions/chatbot/img/error-state.svg +30 -0
- package/patternfly-docs/content/extensions/chatbot/img/feedback-form.svg +88 -0
- 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-pulse.svg +22 -0
- package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
- package/patternfly-docs/content/extensions/chatbot/img/loading-state.svg +28 -0
- package/patternfly-docs/content/extensions/chatbot/img/masthead-toggle-notification.svg +49 -0
- package/patternfly-docs/content/extensions/chatbot/img/masthead-toggle.svg +75 -0
- package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
- package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +84 -142
- package/patternfly-docs/content/extensions/chatbot/img/message-feedback.svg +52 -0
- package/patternfly-docs/content/extensions/chatbot/img/message-responses.svg +54 -0
- package/patternfly-docs/content/extensions/chatbot/img/new-chat-emptystate.svg +27 -0
- package/patternfly-docs/content/extensions/chatbot/img/no-results-emptystate.svg +27 -0
- package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +54 -39
- package/patternfly-docs/content/extensions/chatbot/img/posthog.svg +30 -0
- package/patternfly-docs/content/extensions/chatbot/img/segment.svg +36 -0
- 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/thank-you-card.svg +81 -0
- package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
- package/patternfly-docs/content/extensions/chatbot/img/toggle-tooltips.svg +38 -0
- package/patternfly-docs/content/extensions/chatbot/img/umami.svg +30 -0
- package/patternfly-docs/content/extensions/chatbot/img/welcome-elements.svg +82 -0
- package/patternfly-docs/content/extensions/chatbot/img/welcome-message.svg +94 -0
- package/src/AttachMenu/AttachMenu.scss +1 -1
- package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
- package/src/Chatbot/Chatbot.scss +20 -1
- package/src/Chatbot/Chatbot.test.tsx +31 -0
- package/src/Chatbot/Chatbot.tsx +2 -1
- package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
- package/src/ChatbotContent/ChatbotContent.scss +1 -0
- package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +10 -4
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +24 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +242 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +94 -26
- package/src/ChatbotConversationHistoryNav/EmptyState.tsx +44 -0
- package/src/ChatbotConversationHistoryNav/LoadingState.tsx +38 -0
- package/src/ChatbotFooter/ChatbotFooter.scss +8 -4
- 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 +5 -6
- 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 +7 -1
- package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -1
- 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 +75 -0
- package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +7 -2
- package/src/ChatbotModal/ChatbotModal.scss +12 -12
- package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +2 -0
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +26 -18
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +2 -2
- package/src/CodeModal/CodeModal.scss +7 -4
- 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/FileDetailsLabel/FileDetailsLabel.scss +2 -2
- package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
- package/src/Message/ErrorMessage/ErrorMessage.tsx +14 -0
- 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/Message.scss +4 -26
- package/src/Message/Message.test.tsx +367 -3
- package/src/Message/Message.tsx +157 -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 +236 -0
- package/src/Message/UserFeedback/UserFeedback.tsx +128 -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 +58 -24
- package/src/MessageBar/MessageBar.test.tsx +12 -4
- package/src/MessageBar/MessageBar.tsx +164 -65
- 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.scss +1 -0
- package/src/MessageBox/MessageBox.test.tsx +26 -0
- package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
- package/src/ResponseActions/ResponseActionButton.tsx +14 -2
- package/src/ResponseActions/ResponseActions.scss +2 -2
- package/src/ResponseActions/ResponseActions.test.tsx +4 -2
- package/src/ResponseActions/ResponseActions.tsx +26 -2
- package/src/Settings/Settings.scss +2 -2
- package/src/Settings/SettingsForm.test.tsx +28 -0
- package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +2 -2
- package/src/SourcesCard/SourcesCard.scss +9 -3
- package/src/TermsOfUse/TermsOfUse.scss +1 -1
- 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 +6 -0
- package/src/main.scss +6 -6
- package/src/tracking/console_tracking_provider.ts +30 -0
- package/src/tracking/index.ts +3 -0
- package/src/tracking/posthog_tracking_provider.ts +42 -0
- package/src/tracking/segment_tracking_provider.ts +62 -0
- package/src/tracking/trackingProviderProxy.ts +28 -0
- package/src/tracking/tracking_api.ts +11 -0
- package/src/tracking/tracking_registry.ts +33 -0
- package/src/tracking/tracking_spi.ts +14 -0
- package/src/tracking/umami_tracking_provider.ts +54 -0
@@ -4,6 +4,37 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
4
4
|
|
5
5
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
6
6
|
import ChatbotConversationHistoryNav, { Conversation } from './ChatbotConversationHistoryNav';
|
7
|
+
import { EmptyStateStatus, Spinner } from '@patternfly/react-core';
|
8
|
+
|
9
|
+
const ERROR = {
|
10
|
+
bodyText: (
|
11
|
+
<>
|
12
|
+
To try again, check your connection and reload this page. If the issue persists,{' '}
|
13
|
+
<a href="">contact the support team</a>.
|
14
|
+
</>
|
15
|
+
),
|
16
|
+
buttonText: 'Reload',
|
17
|
+
buttonIcon: <Spinner size="sm" />,
|
18
|
+
hasButton: true,
|
19
|
+
titleText: 'Could not load chat history',
|
20
|
+
status: EmptyStateStatus.danger,
|
21
|
+
onClick: () => alert('Clicked Reload')
|
22
|
+
};
|
23
|
+
|
24
|
+
const ERROR_WITHOUT_BUTTON = {
|
25
|
+
bodyText: (
|
26
|
+
<>
|
27
|
+
To try again, check your connection and reload this page. If the issue persists,{' '}
|
28
|
+
<a href="">contact the support team</a>.
|
29
|
+
</>
|
30
|
+
),
|
31
|
+
buttonText: 'Reload',
|
32
|
+
buttonIcon: <Spinner size="sm" />,
|
33
|
+
hasButton: false,
|
34
|
+
titleText: 'Could not load chat history',
|
35
|
+
status: EmptyStateStatus.danger,
|
36
|
+
onClick: () => alert('Clicked Reload')
|
37
|
+
};
|
7
38
|
|
8
39
|
describe('ChatbotConversationHistoryNav', () => {
|
9
40
|
const onDrawerToggle = jest.fn();
|
@@ -11,7 +42,7 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
11
42
|
const initialConversations: Conversation[] = [
|
12
43
|
{
|
13
44
|
id: '1',
|
14
|
-
text: '
|
45
|
+
text: 'ChatBot documentation'
|
15
46
|
}
|
16
47
|
];
|
17
48
|
|
@@ -25,7 +56,7 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
25
56
|
conversations={initialConversations}
|
26
57
|
/>
|
27
58
|
);
|
28
|
-
expect(screen.queryByText('
|
59
|
+
expect(screen.queryByText('ChatBot documentation')).toBeInTheDocument();
|
29
60
|
});
|
30
61
|
|
31
62
|
it('should display the conversations for grouped conversations', () => {
|
@@ -120,7 +151,215 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
120
151
|
});
|
121
152
|
|
122
153
|
waitFor(() => {
|
123
|
-
expect(screen.queryByText('
|
154
|
+
expect(screen.queryByText('ChatBot documentation')).not.toBeInTheDocument();
|
124
155
|
});
|
125
156
|
});
|
157
|
+
|
158
|
+
it('should be resizable', () => {
|
159
|
+
render(
|
160
|
+
<ChatbotConversationHistoryNav
|
161
|
+
onDrawerToggle={onDrawerToggle}
|
162
|
+
isDrawerOpen={true}
|
163
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
164
|
+
setIsDrawerOpen={jest.fn()}
|
165
|
+
conversations={initialConversations}
|
166
|
+
drawerPanelContentProps={{ isResizable: true, minSize: '200px' }}
|
167
|
+
/>
|
168
|
+
);
|
169
|
+
expect(screen.getByRole('dialog', { name: /Resize/i })).toBeTruthy();
|
170
|
+
expect(screen.getByRole('separator', { name: /Resize/i })).toBeTruthy();
|
171
|
+
expect(screen.getByRole('dialog', { name: /Resize/i })).toHaveAttribute(
|
172
|
+
'style',
|
173
|
+
'--pf-v6-c-drawer__panel--md--FlexBasis: 384px; --pf-v6-c-drawer__panel--md--FlexBasis--min: 200px;'
|
174
|
+
);
|
175
|
+
});
|
176
|
+
|
177
|
+
it('should accept drawerContentProps', () => {
|
178
|
+
const { container } = render(
|
179
|
+
<ChatbotConversationHistoryNav
|
180
|
+
onDrawerToggle={onDrawerToggle}
|
181
|
+
isDrawerOpen={true}
|
182
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
183
|
+
setIsDrawerOpen={jest.fn()}
|
184
|
+
conversations={initialConversations}
|
185
|
+
drawerContentProps={{ className: 'test' }}
|
186
|
+
/>
|
187
|
+
);
|
188
|
+
const element = container.querySelector('.test');
|
189
|
+
expect(element).toBeInTheDocument();
|
190
|
+
});
|
191
|
+
|
192
|
+
it('should accept drawerContentBodyProps', () => {
|
193
|
+
const { container } = render(
|
194
|
+
<ChatbotConversationHistoryNav
|
195
|
+
onDrawerToggle={onDrawerToggle}
|
196
|
+
isDrawerOpen={true}
|
197
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
198
|
+
setIsDrawerOpen={jest.fn()}
|
199
|
+
conversations={initialConversations}
|
200
|
+
drawerContentBodyProps={{ className: 'test' }}
|
201
|
+
/>
|
202
|
+
);
|
203
|
+
const element = container.querySelector('.test');
|
204
|
+
expect(element).toBeInTheDocument();
|
205
|
+
});
|
206
|
+
|
207
|
+
it('should accept drawerHeadProps', () => {
|
208
|
+
const { container } = render(
|
209
|
+
<ChatbotConversationHistoryNav
|
210
|
+
onDrawerToggle={onDrawerToggle}
|
211
|
+
isDrawerOpen={true}
|
212
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
213
|
+
setIsDrawerOpen={jest.fn()}
|
214
|
+
conversations={initialConversations}
|
215
|
+
drawerHeadProps={{ className: 'test' }}
|
216
|
+
/>
|
217
|
+
);
|
218
|
+
const element = container.querySelector('.test');
|
219
|
+
expect(element).toBeInTheDocument();
|
220
|
+
});
|
221
|
+
|
222
|
+
it('should accept drawerActionsProps', () => {
|
223
|
+
const { container } = render(
|
224
|
+
<ChatbotConversationHistoryNav
|
225
|
+
onDrawerToggle={onDrawerToggle}
|
226
|
+
isDrawerOpen={true}
|
227
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
228
|
+
setIsDrawerOpen={jest.fn()}
|
229
|
+
conversations={initialConversations}
|
230
|
+
drawerActionsProps={{ className: 'test' }}
|
231
|
+
/>
|
232
|
+
);
|
233
|
+
const element = container.querySelector('.test');
|
234
|
+
expect(element).toBeInTheDocument();
|
235
|
+
});
|
236
|
+
|
237
|
+
it('should accept drawerCloseButtonProps', () => {
|
238
|
+
const { container } = render(
|
239
|
+
<ChatbotConversationHistoryNav
|
240
|
+
onDrawerToggle={onDrawerToggle}
|
241
|
+
isDrawerOpen={true}
|
242
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
243
|
+
setIsDrawerOpen={jest.fn()}
|
244
|
+
conversations={initialConversations}
|
245
|
+
drawerCloseButtonProps={{ className: 'test' }}
|
246
|
+
/>
|
247
|
+
);
|
248
|
+
const element = container.querySelector('.test');
|
249
|
+
expect(element).toBeInTheDocument();
|
250
|
+
});
|
251
|
+
|
252
|
+
it('should accept drawerPanelBodyProps', () => {
|
253
|
+
const { container } = render(
|
254
|
+
<ChatbotConversationHistoryNav
|
255
|
+
onDrawerToggle={onDrawerToggle}
|
256
|
+
isDrawerOpen={true}
|
257
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
258
|
+
setIsDrawerOpen={jest.fn()}
|
259
|
+
conversations={initialConversations}
|
260
|
+
drawerPanelBodyProps={{ className: 'test' }}
|
261
|
+
/>
|
262
|
+
);
|
263
|
+
const element = container.querySelector('.test');
|
264
|
+
expect(element).toBeInTheDocument();
|
265
|
+
});
|
266
|
+
|
267
|
+
it('should show loading state if triggered', () => {
|
268
|
+
render(
|
269
|
+
<ChatbotConversationHistoryNav
|
270
|
+
onDrawerToggle={onDrawerToggle}
|
271
|
+
isDrawerOpen={true}
|
272
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
273
|
+
setIsDrawerOpen={jest.fn()}
|
274
|
+
reverseButtonOrder={false}
|
275
|
+
handleTextInputChange={jest.fn()}
|
276
|
+
conversations={initialConversations}
|
277
|
+
isLoading
|
278
|
+
/>
|
279
|
+
);
|
280
|
+
expect(screen.getByRole('dialog', { name: /Loading chatbot conversation history/i })).toBeTruthy();
|
281
|
+
expect(screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
282
|
+
});
|
283
|
+
|
284
|
+
it('should pass alternative aria label to loading state', () => {
|
285
|
+
render(
|
286
|
+
<ChatbotConversationHistoryNav
|
287
|
+
onDrawerToggle={onDrawerToggle}
|
288
|
+
isDrawerOpen={true}
|
289
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
290
|
+
setIsDrawerOpen={jest.fn()}
|
291
|
+
reverseButtonOrder={false}
|
292
|
+
handleTextInputChange={jest.fn()}
|
293
|
+
conversations={initialConversations}
|
294
|
+
isLoading
|
295
|
+
loadingState={{ screenreaderText: 'I am a test' }}
|
296
|
+
/>
|
297
|
+
);
|
298
|
+
expect(screen.getByRole('dialog', { name: /I am a test/i })).toBeTruthy();
|
299
|
+
});
|
300
|
+
|
301
|
+
it('should accept errorState', () => {
|
302
|
+
render(
|
303
|
+
<ChatbotConversationHistoryNav
|
304
|
+
onDrawerToggle={onDrawerToggle}
|
305
|
+
isDrawerOpen={true}
|
306
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
307
|
+
setIsDrawerOpen={jest.fn()}
|
308
|
+
reverseButtonOrder={false}
|
309
|
+
handleTextInputChange={jest.fn()}
|
310
|
+
conversations={initialConversations}
|
311
|
+
errorState={ERROR}
|
312
|
+
/>
|
313
|
+
);
|
314
|
+
expect(
|
315
|
+
screen.getByRole('dialog', {
|
316
|
+
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
|
317
|
+
})
|
318
|
+
).toBeTruthy();
|
319
|
+
expect(screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
320
|
+
expect(screen.getByRole('button', { name: /Loading... Reload/i })).toBeTruthy();
|
321
|
+
expect(screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
322
|
+
expect(screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
323
|
+
});
|
324
|
+
|
325
|
+
it('should accept errorState without button', () => {
|
326
|
+
render(
|
327
|
+
<ChatbotConversationHistoryNav
|
328
|
+
onDrawerToggle={onDrawerToggle}
|
329
|
+
isDrawerOpen={true}
|
330
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
331
|
+
setIsDrawerOpen={jest.fn()}
|
332
|
+
reverseButtonOrder={false}
|
333
|
+
handleTextInputChange={jest.fn()}
|
334
|
+
conversations={initialConversations}
|
335
|
+
errorState={ERROR_WITHOUT_BUTTON}
|
336
|
+
/>
|
337
|
+
);
|
338
|
+
expect(
|
339
|
+
screen.getByRole('dialog', {
|
340
|
+
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
|
341
|
+
})
|
342
|
+
).toBeTruthy();
|
343
|
+
expect(screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
344
|
+
expect(screen.queryByRole('button', { name: /Loading... Reload/i })).toBeFalsy();
|
345
|
+
expect(screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
346
|
+
expect(screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
347
|
+
});
|
348
|
+
|
349
|
+
it('should show loading state over error state if both are supplied', () => {
|
350
|
+
render(
|
351
|
+
<ChatbotConversationHistoryNav
|
352
|
+
onDrawerToggle={onDrawerToggle}
|
353
|
+
isDrawerOpen={true}
|
354
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
355
|
+
setIsDrawerOpen={jest.fn()}
|
356
|
+
reverseButtonOrder={false}
|
357
|
+
handleTextInputChange={jest.fn()}
|
358
|
+
conversations={initialConversations}
|
359
|
+
isLoading
|
360
|
+
errorState={ERROR}
|
361
|
+
/>
|
362
|
+
);
|
363
|
+
expect(screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
|
364
|
+
});
|
126
365
|
});
|
@@ -21,12 +21,23 @@ import {
|
|
21
21
|
MenuGroup,
|
22
22
|
MenuItem,
|
23
23
|
MenuContent,
|
24
|
-
MenuItemProps
|
24
|
+
MenuItemProps,
|
25
|
+
MenuProps,
|
26
|
+
DrawerPanelContentProps,
|
27
|
+
DrawerContentProps,
|
28
|
+
DrawerContentBodyProps,
|
29
|
+
DrawerHeadProps,
|
30
|
+
DrawerActionsProps,
|
31
|
+
DrawerCloseButtonProps,
|
32
|
+
DrawerPanelBodyProps,
|
33
|
+
SkeletonProps
|
25
34
|
} from '@patternfly/react-core';
|
26
35
|
|
27
36
|
import { OutlinedCommentAltIcon } from '@patternfly/react-icons';
|
28
37
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
29
38
|
import ConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
|
39
|
+
import LoadingState from './LoadingState';
|
40
|
+
import HistoryEmptyState, { HistoryEmptyStateProps } from './EmptyState';
|
30
41
|
|
31
42
|
export interface Conversation {
|
32
43
|
/** Conversation id */
|
@@ -37,11 +48,11 @@ export interface Conversation {
|
|
37
48
|
noIcon?: boolean;
|
38
49
|
/** Conversation */
|
39
50
|
text: string;
|
40
|
-
/** Dropdown items rendered in conversation
|
51
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
41
52
|
menuItems?: React.ReactNode;
|
42
|
-
/** Optional classname applied to conversation
|
53
|
+
/** Optional classname applied to conversation settings dropdown */
|
43
54
|
menuClassName?: string;
|
44
|
-
/** Tooltip content and aria-label applied to conversation
|
55
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
45
56
|
label?: string;
|
46
57
|
/** Callback for when user selects item. */
|
47
58
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -79,6 +90,28 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
79
90
|
reverseButtonOrder?: boolean;
|
80
91
|
/** Custom test id for the drawer actions */
|
81
92
|
drawerActionsTestId?: string;
|
93
|
+
/** Additional props applied to menu */
|
94
|
+
menuProps?: MenuProps;
|
95
|
+
/** Additional props applied to panel */
|
96
|
+
drawerPanelContentProps?: DrawerPanelContentProps;
|
97
|
+
/** Additional props applied to drawer content */
|
98
|
+
drawerContentProps?: Omit<DrawerContentProps, 'panelContent'>;
|
99
|
+
/** Additional props applied to drawer content body */
|
100
|
+
drawerContentBodyProps?: DrawerContentBodyProps;
|
101
|
+
/** Additional props applied to drawer head */
|
102
|
+
drawerHeadProps?: DrawerHeadProps;
|
103
|
+
/** Additional props applied to drawer actions */
|
104
|
+
drawerActionsProps?: DrawerActionsProps;
|
105
|
+
/** Additional props applied to drawer close button */
|
106
|
+
drawerCloseButtonProps?: DrawerCloseButtonProps;
|
107
|
+
/** Additional props appleid to drawer panel body */
|
108
|
+
drawerPanelBodyProps?: DrawerPanelBodyProps;
|
109
|
+
/** Whether to show drawer loading state */
|
110
|
+
isLoading?: boolean;
|
111
|
+
/** Additional props for loading state */
|
112
|
+
loadingState?: SkeletonProps;
|
113
|
+
/** Content to show in error state. Error state will appear once content is passed in. */
|
114
|
+
errorState?: HistoryEmptyStateProps;
|
82
115
|
}
|
83
116
|
|
84
117
|
export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps> = ({
|
@@ -91,12 +124,23 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
91
124
|
newChatButtonText = 'New chat',
|
92
125
|
drawerContent,
|
93
126
|
onNewChat,
|
94
|
-
searchInputPlaceholder = 'Search...',
|
127
|
+
searchInputPlaceholder = 'Search previous conversations...',
|
95
128
|
searchInputAriaLabel = 'Filter menu items',
|
96
129
|
handleTextInputChange,
|
97
130
|
displayMode,
|
98
131
|
reverseButtonOrder = false,
|
99
132
|
drawerActionsTestId = 'chatbot-nav-drawer-actions',
|
133
|
+
menuProps,
|
134
|
+
drawerPanelContentProps,
|
135
|
+
drawerContentProps,
|
136
|
+
drawerContentBodyProps,
|
137
|
+
drawerHeadProps,
|
138
|
+
drawerActionsProps,
|
139
|
+
drawerCloseButtonProps,
|
140
|
+
drawerPanelBodyProps,
|
141
|
+
isLoading,
|
142
|
+
loadingState,
|
143
|
+
errorState,
|
100
144
|
...props
|
101
145
|
}: ChatbotConversationHistoryNavProps) => {
|
102
146
|
const drawerRef = React.useRef<HTMLDivElement>(null);
|
@@ -162,23 +206,19 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
162
206
|
// Menu Content
|
163
207
|
// - Consumers should pass an array to <Chatbot> of the list of conversations
|
164
208
|
// - Groups could be optional, but items need to be ordered by date
|
165
|
-
const
|
166
|
-
|
167
|
-
<
|
168
|
-
|
169
|
-
|
209
|
+
const renderMenuContent = () => {
|
210
|
+
if (errorState) {
|
211
|
+
return <HistoryEmptyState {...errorState} />;
|
212
|
+
}
|
213
|
+
return (
|
214
|
+
<Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId} {...menuProps}>
|
215
|
+
<MenuContent>{buildMenu()}</MenuContent>
|
216
|
+
</Menu>
|
217
|
+
);
|
218
|
+
};
|
170
219
|
|
171
|
-
const
|
172
|
-
|
173
|
-
<DrawerHead>
|
174
|
-
<DrawerActions
|
175
|
-
data-testid={drawerActionsTestId}
|
176
|
-
className={reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : ''}
|
177
|
-
>
|
178
|
-
<DrawerCloseButton onClick={onDrawerToggle} />
|
179
|
-
{onNewChat && <Button onClick={onNewChat}>{newChatButtonText}</Button>}
|
180
|
-
</DrawerActions>
|
181
|
-
</DrawerHead>
|
220
|
+
const renderDrawerContent = () => (
|
221
|
+
<>
|
182
222
|
{handleTextInputChange && (
|
183
223
|
<div className="pf-chatbot__input">
|
184
224
|
<SearchInput
|
@@ -188,10 +228,38 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
188
228
|
/>
|
189
229
|
</div>
|
190
230
|
)}
|
191
|
-
<DrawerPanelBody>{
|
192
|
-
|
231
|
+
<DrawerPanelBody {...drawerPanelBodyProps}>{renderMenuContent()}</DrawerPanelBody>
|
232
|
+
</>
|
193
233
|
);
|
194
234
|
|
235
|
+
const renderPanelContent = () => {
|
236
|
+
const drawer = (
|
237
|
+
<>
|
238
|
+
<DrawerHead {...drawerHeadProps}>
|
239
|
+
<DrawerActions
|
240
|
+
data-testid={drawerActionsTestId}
|
241
|
+
className={reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : ''}
|
242
|
+
{...drawerActionsProps}
|
243
|
+
>
|
244
|
+
<DrawerCloseButton onClick={onDrawerToggle} {...drawerCloseButtonProps} />
|
245
|
+
{onNewChat && <Button onClick={onNewChat}>{newChatButtonText}</Button>}
|
246
|
+
</DrawerActions>
|
247
|
+
</DrawerHead>
|
248
|
+
{isLoading ? <LoadingState {...loadingState} /> : renderDrawerContent()}
|
249
|
+
</>
|
250
|
+
);
|
251
|
+
return (
|
252
|
+
<DrawerPanelContent
|
253
|
+
aria-live="polite"
|
254
|
+
focusTrap={{ enabled: true }}
|
255
|
+
defaultSize="384px"
|
256
|
+
{...drawerPanelContentProps}
|
257
|
+
>
|
258
|
+
{drawer}
|
259
|
+
</DrawerPanelContent>
|
260
|
+
);
|
261
|
+
};
|
262
|
+
|
195
263
|
// An onKeyDown property must be passed to the Drawer component to handle closing
|
196
264
|
// the drawer panel and deactivating the focus trap via the Escape key.
|
197
265
|
const onEscape = (event: React.KeyboardEvent) => {
|
@@ -213,11 +281,11 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
213
281
|
isInline={displayMode === ChatbotDisplayMode.fullscreen || displayMode === ChatbotDisplayMode.embedded}
|
214
282
|
{...props}
|
215
283
|
>
|
216
|
-
<DrawerContent panelContent={
|
217
|
-
<DrawerContentBody>
|
284
|
+
<DrawerContent panelContent={renderPanelContent()} {...drawerContentProps}>
|
285
|
+
<DrawerContentBody {...drawerContentBodyProps}>
|
218
286
|
<>
|
219
287
|
<div
|
220
|
-
className={`${isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} `}
|
288
|
+
className={`${isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked || displayMode === ChatbotDisplayMode.drawer) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} `}
|
221
289
|
></div>
|
222
290
|
{drawerContent}
|
223
291
|
</>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import {
|
2
|
+
Button,
|
3
|
+
EmptyState,
|
4
|
+
EmptyStateActions,
|
5
|
+
EmptyStateBody,
|
6
|
+
EmptyStateFooter,
|
7
|
+
EmptyStateProps
|
8
|
+
} from '@patternfly/react-core';
|
9
|
+
import React from 'react';
|
10
|
+
|
11
|
+
export interface HistoryEmptyStateProps extends EmptyStateProps {
|
12
|
+
onClick?: () => void;
|
13
|
+
bodyText?: string | React.ReactNode;
|
14
|
+
buttonText?: string;
|
15
|
+
buttonIcon?: React.ReactNode;
|
16
|
+
hasButton?: boolean;
|
17
|
+
}
|
18
|
+
|
19
|
+
export const HistoryEmptyState: React.FunctionComponent<HistoryEmptyStateProps> = ({
|
20
|
+
bodyText,
|
21
|
+
buttonIcon,
|
22
|
+
buttonText,
|
23
|
+
status,
|
24
|
+
titleText,
|
25
|
+
headingLevel,
|
26
|
+
onClick,
|
27
|
+
hasButton = false,
|
28
|
+
...props
|
29
|
+
}: HistoryEmptyStateProps) => (
|
30
|
+
<EmptyState status={status} titleText={titleText} headingLevel={headingLevel} {...props}>
|
31
|
+
<EmptyStateBody>{bodyText}</EmptyStateBody>
|
32
|
+
{hasButton && (
|
33
|
+
<EmptyStateFooter>
|
34
|
+
<EmptyStateActions>
|
35
|
+
<Button icon={buttonIcon} variant="secondary" onClick={onClick}>
|
36
|
+
{buttonText}
|
37
|
+
</Button>
|
38
|
+
</EmptyStateActions>
|
39
|
+
</EmptyStateFooter>
|
40
|
+
)}
|
41
|
+
</EmptyState>
|
42
|
+
);
|
43
|
+
|
44
|
+
export default HistoryEmptyState;
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { Skeleton, SkeletonProps } from '@patternfly/react-core';
|
2
|
+
import React from 'react';
|
3
|
+
|
4
|
+
export const LoadingState: React.FunctionComponent<SkeletonProps> = ({ screenreaderText, ...rest }: SkeletonProps) => (
|
5
|
+
<div className="pf-chatbot__history-loading">
|
6
|
+
<div className="pf-chatbot__history-loading-block">
|
7
|
+
<Skeleton
|
8
|
+
screenreaderText={screenreaderText ?? 'Loading chatbot conversation history'}
|
9
|
+
fontSize="3xl"
|
10
|
+
{...rest}
|
11
|
+
/>
|
12
|
+
</div>
|
13
|
+
<div className="pf-chatbot__history-loading-block">
|
14
|
+
<Skeleton fontSize="sm" width="70%" {...rest} />
|
15
|
+
<Skeleton fontSize="3xl" {...rest} />
|
16
|
+
<Skeleton fontSize="3xl" {...rest} />
|
17
|
+
</div>
|
18
|
+
<div className="pf-chatbot__history-loading-block">
|
19
|
+
<Skeleton fontSize="sm" width="70%" {...rest} />
|
20
|
+
<Skeleton fontSize="3xl" {...rest} />
|
21
|
+
<Skeleton fontSize="3xl" {...rest} />
|
22
|
+
<Skeleton fontSize="3xl" {...rest} />
|
23
|
+
</div>
|
24
|
+
<div className="pf-chatbot__history-loading-block">
|
25
|
+
<Skeleton fontSize="sm" width="70%" {...rest} />
|
26
|
+
<Skeleton fontSize="3xl" {...rest} />
|
27
|
+
<Skeleton fontSize="3xl" {...rest} />
|
28
|
+
<Skeleton fontSize="3xl" {...rest} />
|
29
|
+
<Skeleton fontSize="3xl" {...rest} />
|
30
|
+
</div>
|
31
|
+
<div className="pf-chatbot__history-loading-block">
|
32
|
+
<Skeleton fontSize="sm" width="70%" {...rest} />
|
33
|
+
<Skeleton fontSize="3xl" {...rest} />
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
);
|
37
|
+
|
38
|
+
export default LoadingState;
|
@@ -44,11 +44,15 @@
|
|
44
44
|
// Chatbot Display Mode - Docked
|
45
45
|
// ============================================================================
|
46
46
|
.pf-chatbot--docked {
|
47
|
-
.pf-chatbot__footer {
|
48
|
-
|
49
|
-
display: none;
|
50
|
-
}
|
47
|
+
.pf-chatbot__footer-container {
|
48
|
+
padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
|
51
49
|
}
|
50
|
+
}
|
51
|
+
|
52
|
+
// ============================================================================
|
53
|
+
// Chatbot Display Mode - Drawer
|
54
|
+
// ============================================================================
|
55
|
+
.pf-chatbot--drawer {
|
52
56
|
.pf-chatbot__footer-container {
|
53
57
|
padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
|
54
58
|
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import ChatbotFooter from './ChatbotFooter';
|
4
|
+
|
5
|
+
describe('ChatbotFooter', () => {
|
6
|
+
it('should render ChatbotFooter with children', () => {
|
7
|
+
render(<ChatbotFooter>Chatbot Content</ChatbotFooter>);
|
8
|
+
expect(screen.getByText('Chatbot Content')).toBeTruthy();
|
9
|
+
});
|
10
|
+
|
11
|
+
it('should render ChatbotFooter with custom classname', () => {
|
12
|
+
const { container } = render(<ChatbotFooter className="custom-class">Chatbot Content</ChatbotFooter>);
|
13
|
+
expect(container.querySelector('.custom-class')).toBeTruthy();
|
14
|
+
});
|
15
|
+
});
|
@@ -0,0 +1,84 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
|
3
|
+
import ChatbotFootnote from './ChatbotFootnote';
|
4
|
+
|
5
|
+
describe('ChatbotFooternote', () => {
|
6
|
+
const onClick = jest.fn();
|
7
|
+
const popoverProps = {
|
8
|
+
title: 'Verify accuracy',
|
9
|
+
description: 'description',
|
10
|
+
bannerImage: {
|
11
|
+
src: 'src',
|
12
|
+
alt: 'alt'
|
13
|
+
},
|
14
|
+
cta: {
|
15
|
+
label: 'Got it',
|
16
|
+
onClick
|
17
|
+
},
|
18
|
+
link: {
|
19
|
+
label: 'label',
|
20
|
+
url: 'url'
|
21
|
+
}
|
22
|
+
};
|
23
|
+
|
24
|
+
it('should render ChatbotFooternote', () => {
|
25
|
+
render(<ChatbotFootnote label="Chatbot footer" />);
|
26
|
+
expect(screen.getByText('Chatbot footer')).toBeTruthy();
|
27
|
+
});
|
28
|
+
|
29
|
+
it('should render ChatbotFooternote with popover', async () => {
|
30
|
+
render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
|
31
|
+
|
32
|
+
// click on the footer button
|
33
|
+
act(() => {
|
34
|
+
fireEvent.click(screen.getByRole('button'));
|
35
|
+
});
|
36
|
+
|
37
|
+
await waitFor(() => {
|
38
|
+
// Check if the popover is visible and click on the cta button
|
39
|
+
screen.getByLabelText('More information');
|
40
|
+
screen.getByText('Verify accuracy');
|
41
|
+
fireEvent.click(screen.getByRole('button', { name: 'Got it' }));
|
42
|
+
expect(onClick).toHaveBeenCalled();
|
43
|
+
});
|
44
|
+
});
|
45
|
+
it('should call onClick handler when popover cta button is clicked', async () => {
|
46
|
+
render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
|
47
|
+
|
48
|
+
// click on the footer button
|
49
|
+
act(() => {
|
50
|
+
fireEvent.click(screen.getByRole('button'));
|
51
|
+
});
|
52
|
+
|
53
|
+
await waitFor(() => {
|
54
|
+
// Check if the popover is visible and click on the cta button
|
55
|
+
screen.getByLabelText('More information');
|
56
|
+
screen.getByText('Verify accuracy');
|
57
|
+
fireEvent.click(screen.getByRole('button', { name: 'Got it' }));
|
58
|
+
expect(onClick).toHaveBeenCalled();
|
59
|
+
});
|
60
|
+
});
|
61
|
+
it('should close the popover when escape is pressed', async () => {
|
62
|
+
render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
|
63
|
+
|
64
|
+
// click on the footer button
|
65
|
+
act(() => {
|
66
|
+
fireEvent.click(screen.getByRole('button'));
|
67
|
+
});
|
68
|
+
|
69
|
+
await waitFor(() => {
|
70
|
+
// Check if the popover is visible and click on the cta button
|
71
|
+
screen.getByLabelText('More information');
|
72
|
+
screen.getByText('Verify accuracy');
|
73
|
+
});
|
74
|
+
|
75
|
+
act(() => {
|
76
|
+
// trigger escape to close the popover
|
77
|
+
fireEvent.keyDown(document, { key: 'Escape', code: 'Escape' });
|
78
|
+
});
|
79
|
+
|
80
|
+
await waitFor(() => {
|
81
|
+
expect(screen.queryByText('Verify accuracy')).toBeFalsy();
|
82
|
+
});
|
83
|
+
});
|
84
|
+
});
|
@@ -32,7 +32,7 @@ export interface ChatbotFootnotePopover {
|
|
32
32
|
bannerImage?: ChatbotFootnotePopoverBannerImage;
|
33
33
|
/** Optional CTA button that can be used to trigger an action and close the popover */
|
34
34
|
cta?: ChatbotFootnotePopoverCTA;
|
35
|
-
/** Optional link that can be used to show
|
35
|
+
/** Optional link that can be used to show an external link like **View AI policy** */
|
36
36
|
link?: ChatbotFootnotePopoverLink;
|
37
37
|
/** Props for PF Popover */
|
38
38
|
popoverProps?: PopoverProps;
|
@@ -87,7 +87,7 @@ export const ChatbotFootnote: React.FunctionComponent<ChatbotFootnoteProps> = ({
|
|
87
87
|
popover.cta?.onClick();
|
88
88
|
}}
|
89
89
|
>
|
90
|
-
{popover.cta?.label || '
|
90
|
+
{popover.cta?.label || 'Dismiss'}
|
91
91
|
</Button>
|
92
92
|
)}
|
93
93
|
{popover?.link && (
|