@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
@@ -3,6 +3,10 @@ import { render, screen } from '@testing-library/react';
|
|
3
3
|
import '@testing-library/jest-dom';
|
4
4
|
import Message from './Message';
|
5
5
|
import userEvent from '@testing-library/user-event';
|
6
|
+
import { monitorSampleAppQuickStart } from './QuickStarts/monitor-sampleapp-quickstart';
|
7
|
+
import { monitorSampleAppQuickStartWithImage } from './QuickStarts/monitor-sampleapp-quickstart-with-image';
|
8
|
+
import rehypeExternalLinks from '../__mocks__/rehype-external-links';
|
9
|
+
import { AlertActionLink } from '@patternfly/react-core';
|
6
10
|
|
7
11
|
const ALL_ACTIONS = [
|
8
12
|
{ label: /Good response/i },
|
@@ -69,6 +73,89 @@ const ORDERED_LIST_WITH_CODE = `
|
|
69
73
|
3. Item 3
|
70
74
|
`;
|
71
75
|
|
76
|
+
const HEADING = `
|
77
|
+
# h1 Heading
|
78
|
+
|
79
|
+
## h2 Heading
|
80
|
+
|
81
|
+
### h3 Heading
|
82
|
+
|
83
|
+
#### h4 Heading
|
84
|
+
|
85
|
+
##### h5 Heading
|
86
|
+
|
87
|
+
###### h6 Heading
|
88
|
+
`;
|
89
|
+
|
90
|
+
const BLOCK_QUOTES = `> Blockquotes can also be nested...
|
91
|
+
>> ...by using additional greater-than signs (>) right next to each other...
|
92
|
+
> > > ...or with spaces between each sign.`;
|
93
|
+
const TABLE = `
|
94
|
+
|
95
|
+
| Column 1 | Column 2 |
|
96
|
+
|-|-|
|
97
|
+
| Cell 1 | Cell 2 |
|
98
|
+
| Cell 3 | Cell 4 |
|
99
|
+
|
100
|
+
`;
|
101
|
+
|
102
|
+
const ONE_COLUMN_TABLE = `
|
103
|
+
|
104
|
+
| Column 1 |
|
105
|
+
|-|
|
106
|
+
| Cell 1 |
|
107
|
+
| Cell 2 |
|
108
|
+
|
109
|
+
`;
|
110
|
+
|
111
|
+
const ONE_CELL_TABLE = `
|
112
|
+
|
113
|
+
| Column 1 |
|
114
|
+
|-|
|
115
|
+
| Cell 1 |
|
116
|
+
|
117
|
+
`;
|
118
|
+
|
119
|
+
const HEADERLESS_TABLE = `
|
120
|
+
|
121
|
+
| |
|
122
|
+
|-|
|
123
|
+
| Cell 1 |
|
124
|
+
|
125
|
+
`;
|
126
|
+
|
127
|
+
const CHILDLESS_TABLE = `
|
128
|
+
|
129
|
+
| Column 1 |
|
130
|
+
|-|
|
131
|
+
| |
|
132
|
+
|
133
|
+
`;
|
134
|
+
|
135
|
+
const EMPTY_TABLE = `
|
136
|
+
|
137
|
+
| |
|
138
|
+
|-|
|
139
|
+
| |
|
140
|
+
|
141
|
+
`;
|
142
|
+
|
143
|
+
const IMAGE = ``;
|
144
|
+
|
145
|
+
const ERROR = {
|
146
|
+
title: 'Could not load chat',
|
147
|
+
children: 'Wait a few minutes and check your network settings. If the issue persists: ',
|
148
|
+
actionLinks: (
|
149
|
+
<React.Fragment>
|
150
|
+
<AlertActionLink component="a" href="#">
|
151
|
+
Start a new chat
|
152
|
+
</AlertActionLink>
|
153
|
+
<AlertActionLink component="a" href="#">
|
154
|
+
Contact support
|
155
|
+
</AlertActionLink>
|
156
|
+
</React.Fragment>
|
157
|
+
)
|
158
|
+
};
|
72
159
|
const checkListItemsRendered = () => {
|
73
160
|
const items = ['Item 1', 'Item 2', 'Item 3'];
|
74
161
|
expect(screen.getAllByRole('listitem')).toHaveLength(3);
|
@@ -79,6 +166,9 @@ const checkListItemsRendered = () => {
|
|
79
166
|
};
|
80
167
|
|
81
168
|
describe('Message', () => {
|
169
|
+
beforeEach(() => {
|
170
|
+
jest.clearAllMocks();
|
171
|
+
});
|
82
172
|
it('should render user messages correctly', () => {
|
83
173
|
render(<Message avatar="./img" role="user" name="User" content="Hi" />);
|
84
174
|
expect(screen.getByText('User')).toBeTruthy();
|
@@ -375,13 +465,17 @@ describe('Message', () => {
|
|
375
465
|
render(<Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} />);
|
376
466
|
expect(screen.getByText('Here is some YAML code:')).toBeTruthy();
|
377
467
|
expect(screen.getByRole('button', { name: 'Copy code button' })).toBeTruthy();
|
378
|
-
expect(screen.getByText(/
|
468
|
+
expect(screen.getByText(/yaml/)).toBeTruthy();
|
469
|
+
expect(screen.getByText(/apiVersion:/i)).toBeTruthy();
|
470
|
+
expect(screen.getByText(/helm.openshift.io\/v1beta1/i)).toBeTruthy();
|
379
471
|
expect(screen.getByText(/metadata:/i)).toBeTruthy();
|
380
|
-
expect(screen.getByText(/name
|
472
|
+
expect(screen.getByText(/name:/i)).toBeTruthy();
|
473
|
+
expect(screen.getByText(/azure-sample-repo0oooo00ooo/i)).toBeTruthy();
|
381
474
|
expect(screen.getByText(/spec/i)).toBeTruthy();
|
382
475
|
expect(screen.getByText(/connectionConfig:/i)).toBeTruthy();
|
476
|
+
expect(screen.getByText(/url:/i)).toBeTruthy();
|
383
477
|
expect(
|
384
|
-
screen.getByText(/
|
478
|
+
screen.getByText(/https:\/\/raw.githubusercontent.com\/Azure-Samples\/helm-charts\/master\/docs/i)
|
385
479
|
).toBeTruthy();
|
386
480
|
});
|
387
481
|
it('can click copy code button', async () => {
|
@@ -437,4 +531,274 @@ describe('Message', () => {
|
|
437
531
|
expect(screen.getByRole('img')).toHaveClass('test');
|
438
532
|
expect(screen.getByRole('img')).toHaveClass('pf-chatbot__message-avatar');
|
439
533
|
});
|
534
|
+
it('should handle QuickStart tile correctly', () => {
|
535
|
+
render(
|
536
|
+
<Message
|
537
|
+
avatar="./img"
|
538
|
+
role="user"
|
539
|
+
name="User"
|
540
|
+
content="Hi"
|
541
|
+
quickStarts={{
|
542
|
+
quickStart: monitorSampleAppQuickStart,
|
543
|
+
onSelectQuickStart: (id) => alert(id)
|
544
|
+
}}
|
545
|
+
/>
|
546
|
+
);
|
547
|
+
expect(screen.getByRole('button', { name: 'Monitoring your sample application' })).toBeTruthy();
|
548
|
+
expect(screen.getByRole('heading', { name: '1 Prerequisite' })).toBeTruthy();
|
549
|
+
expect(screen.getByRole('button', { name: 'Show prerequisites' })).toBeTruthy();
|
550
|
+
expect(screen.getByRole('button', { name: 'Start' })).toBeTruthy();
|
551
|
+
});
|
552
|
+
it('should handle click on QuickStart tile correctly', async () => {
|
553
|
+
const spy = jest.fn();
|
554
|
+
render(
|
555
|
+
<Message
|
556
|
+
avatar="./img"
|
557
|
+
role="user"
|
558
|
+
name="User"
|
559
|
+
content="Hi"
|
560
|
+
quickStarts={{
|
561
|
+
quickStart: monitorSampleAppQuickStart,
|
562
|
+
onSelectQuickStart: (id) => spy(id)
|
563
|
+
}}
|
564
|
+
/>
|
565
|
+
);
|
566
|
+
await userEvent.click(screen.getByRole('button', { name: 'Monitoring your sample application' }));
|
567
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
568
|
+
expect(spy).toHaveBeenCalledWith(monitorSampleAppQuickStart.metadata.name);
|
569
|
+
});
|
570
|
+
it('should handle QuickStart tile with image correctly', async () => {
|
571
|
+
const spy = jest.fn();
|
572
|
+
render(
|
573
|
+
<Message
|
574
|
+
avatar="./img"
|
575
|
+
role="user"
|
576
|
+
name="User"
|
577
|
+
content="Hi"
|
578
|
+
quickStarts={{
|
579
|
+
quickStart: monitorSampleAppQuickStartWithImage,
|
580
|
+
onSelectQuickStart: (id) => spy(id)
|
581
|
+
}}
|
582
|
+
/>
|
583
|
+
);
|
584
|
+
expect(screen.getAllByRole('img')[1]).toHaveAttribute('src', 'test.png');
|
585
|
+
});
|
586
|
+
it('should handle block quote correctly', () => {
|
587
|
+
render(<Message avatar="./img" role="user" name="User" content={BLOCK_QUOTES} />);
|
588
|
+
expect(screen.getByText(/Blockquotes can also be nested.../)).toBeTruthy();
|
589
|
+
expect(screen.getByText('...by using additional greater-than signs (>) right next to each other...')).toBeTruthy();
|
590
|
+
expect(screen.getByText(/...or with spaces between each sign./)).toBeTruthy();
|
591
|
+
});
|
592
|
+
it('should handle heading correctly', () => {
|
593
|
+
render(<Message avatar="./img" role="user" name="User" content={HEADING} />);
|
594
|
+
expect(screen.getByRole('heading', { name: /h1 Heading/i })).toBeTruthy();
|
595
|
+
expect(screen.getByRole('heading', { name: /h2 Heading/i })).toBeTruthy();
|
596
|
+
expect(screen.getByRole('heading', { name: /h3 Heading/i })).toBeTruthy();
|
597
|
+
expect(screen.getByRole('heading', { name: /h4 Heading/i })).toBeTruthy();
|
598
|
+
expect(screen.getByRole('heading', { name: /h5 Heading/i })).toBeTruthy();
|
599
|
+
expect(screen.getByRole('heading', { name: /h6 Heading/i })).toBeTruthy();
|
600
|
+
});
|
601
|
+
it('should render table correctly', () => {
|
602
|
+
render(<Message avatar="./img" role="user" name="User" content={TABLE} />);
|
603
|
+
expect(screen.getByRole('row', { name: /Column 1 Column 2/i })).toBeTruthy();
|
604
|
+
expect(screen.getByRole('row', { name: /Cell 1 Cell 2/i })).toBeTruthy();
|
605
|
+
expect(screen.getByRole('row', { name: /Cell 3 Cell 4/i })).toBeTruthy();
|
606
|
+
expect(screen.getByRole('columnheader', { name: /Column 1/i })).toBeTruthy();
|
607
|
+
expect(screen.getByRole('columnheader', { name: /Column 2/i })).toBeTruthy();
|
608
|
+
expect(screen.getByRole('cell', { name: /Cell 1/i })).toBeTruthy();
|
609
|
+
expect(screen.getByRole('cell', { name: /Cell 2/i })).toBeTruthy();
|
610
|
+
expect(screen.getByRole('cell', { name: /Cell 3/i })).toBeTruthy();
|
611
|
+
expect(screen.getByRole('cell', { name: /Cell 4/i })).toBeTruthy();
|
612
|
+
});
|
613
|
+
it('should render table data labels correctly for mobile breakpoint', () => {
|
614
|
+
render(<Message avatar="./img" role="user" name="User" content={TABLE} />);
|
615
|
+
expect(screen.getByRole('row', { name: /Cell 1 Cell 2/i })).toHaveAttribute('extraHeaders', 'Column 1,Column 2');
|
616
|
+
expect(screen.getByRole('row', { name: /Cell 3 Cell 4/i })).toHaveAttribute('extraHeaders', 'Column 1,Column 2');
|
617
|
+
expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
|
618
|
+
expect(screen.getByRole('cell', { name: /Cell 2/i })).toHaveAttribute('data-label', 'Column 2');
|
619
|
+
expect(screen.getByRole('cell', { name: /Cell 3/i })).toHaveAttribute('data-label', 'Column 1');
|
620
|
+
expect(screen.getByRole('cell', { name: /Cell 4/i })).toHaveAttribute('data-label', 'Column 2');
|
621
|
+
});
|
622
|
+
it('should render table data labels correctly for mobile breakpoint for one column table', () => {
|
623
|
+
render(<Message avatar="./img" role="user" name="User" content={ONE_COLUMN_TABLE} />);
|
624
|
+
expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', 'Column 1');
|
625
|
+
expect(screen.getByRole('row', { name: /Cell 2/i })).toHaveAttribute('extraHeaders', 'Column 1');
|
626
|
+
expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
|
627
|
+
expect(screen.getByRole('cell', { name: /Cell 2/i })).toHaveAttribute('data-label', 'Column 1');
|
628
|
+
});
|
629
|
+
it('should render table data labels correctly for mobile breakpoint for one cell table', () => {
|
630
|
+
render(<Message avatar="./img" role="user" name="User" content={ONE_CELL_TABLE} />);
|
631
|
+
expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', 'Column 1');
|
632
|
+
expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
|
633
|
+
});
|
634
|
+
it('should render table data labels correctly for mobile breakpoint for headerless', () => {
|
635
|
+
render(<Message avatar="./img" role="user" name="User" content={HEADERLESS_TABLE} />);
|
636
|
+
expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', '');
|
637
|
+
expect(screen.getByRole('cell', { name: /Cell 1/i })).not.toHaveAttribute('data-label');
|
638
|
+
});
|
639
|
+
it('should render table data labels correctly for mobile breakpoint for childless', () => {
|
640
|
+
render(<Message avatar="./img" role="user" name="User" content={CHILDLESS_TABLE} />);
|
641
|
+
expect(screen.getByRole('cell')).not.toHaveAttribute('extraHeaders', 'Column 1');
|
642
|
+
});
|
643
|
+
it('should render table data labels correctly for mobile breakpoint for empty', () => {
|
644
|
+
render(<Message avatar="./img" role="user" name="User" content={EMPTY_TABLE} />);
|
645
|
+
expect(screen.getByRole('cell')).not.toHaveAttribute('extraHeaders', '');
|
646
|
+
});
|
647
|
+
it('should render custom table aria label correctly', () => {
|
648
|
+
render(<Message avatar="./img" role="user" name="User" content={TABLE} tableProps={{ 'aria-label': 'Test' }} />);
|
649
|
+
expect(screen.getByRole('grid', { name: /Test/i })).toBeTruthy();
|
650
|
+
});
|
651
|
+
it('should render beforeMainContent with main content', () => {
|
652
|
+
const mainContent = 'Main message content';
|
653
|
+
const beforeMainContentText = 'Before main content';
|
654
|
+
const beforeMainContent = <div>{beforeMainContentText}</div>;
|
655
|
+
|
656
|
+
render(
|
657
|
+
<Message avatar="./img" role="user" name="User" content={mainContent} extraContent={{ beforeMainContent }} />
|
658
|
+
);
|
659
|
+
|
660
|
+
expect(screen.getByText(beforeMainContentText)).toBeTruthy();
|
661
|
+
expect(screen.getByText(mainContent)).toBeTruthy();
|
662
|
+
});
|
663
|
+
it('should render afterMainContent with main content', () => {
|
664
|
+
const mainContent = 'Main message content';
|
665
|
+
const afterMainContentText = 'After main content';
|
666
|
+
const afterMainContent = <div>{afterMainContentText}</div>;
|
667
|
+
|
668
|
+
render(
|
669
|
+
<Message avatar="./img" role="user" name="User" content={mainContent} extraContent={{ afterMainContent }} />
|
670
|
+
);
|
671
|
+
|
672
|
+
expect(screen.getByText(afterMainContentText)).toBeTruthy();
|
673
|
+
expect(screen.getByText(mainContent)).toBeTruthy();
|
674
|
+
});
|
675
|
+
|
676
|
+
it('should render endContent with main content', () => {
|
677
|
+
const mainContent = 'Main message content';
|
678
|
+
const endMainContentText = 'End content';
|
679
|
+
const endContent = <div>{endMainContentText}</div>;
|
680
|
+
|
681
|
+
render(<Message avatar="./img" role="user" name="User" content={mainContent} extraContent={{ endContent }} />);
|
682
|
+
|
683
|
+
expect(screen.getByText(endMainContentText)).toBeTruthy();
|
684
|
+
expect(screen.getByText(mainContent)).toBeTruthy();
|
685
|
+
});
|
686
|
+
it('should render all parts of extraContent with main content', () => {
|
687
|
+
const beforeMainContent = <div>Before main content</div>;
|
688
|
+
const afterMainContent = <div>After main content</div>;
|
689
|
+
const endContent = <div>End content</div>;
|
690
|
+
|
691
|
+
render(
|
692
|
+
<Message
|
693
|
+
avatar="./img"
|
694
|
+
role="user"
|
695
|
+
name="User"
|
696
|
+
content="Main message content"
|
697
|
+
extraContent={{ beforeMainContent, afterMainContent, endContent }}
|
698
|
+
/>
|
699
|
+
);
|
700
|
+
|
701
|
+
expect(screen.getByText('Before main content')).toBeTruthy();
|
702
|
+
expect(screen.getByText('Main message content')).toBeTruthy();
|
703
|
+
expect(screen.getByText('After main content')).toBeTruthy();
|
704
|
+
expect(screen.getByText('End content')).toBeTruthy();
|
705
|
+
});
|
706
|
+
|
707
|
+
it('should not render extraContent when not provided', () => {
|
708
|
+
render(<Message avatar="./img" role="user" name="User" content="Main message content" />);
|
709
|
+
|
710
|
+
// Ensure no extraContent is rendered
|
711
|
+
expect(screen.getByText('Main message content')).toBeTruthy();
|
712
|
+
expect(screen.queryByText('Before main content')).toBeFalsy();
|
713
|
+
expect(screen.queryByText('After main content')).toBeFalsy();
|
714
|
+
expect(screen.queryByText('end message content')).toBeFalsy();
|
715
|
+
});
|
716
|
+
|
717
|
+
it('should handle undefined or null values in extraContent gracefully', () => {
|
718
|
+
render(
|
719
|
+
<Message
|
720
|
+
avatar="./img"
|
721
|
+
role="user"
|
722
|
+
name="User"
|
723
|
+
content="Main message content"
|
724
|
+
extraContent={{ beforeMainContent: null, afterMainContent: undefined, endContent: null }}
|
725
|
+
/>
|
726
|
+
);
|
727
|
+
|
728
|
+
// Ensure that no extraContent is rendered if they are null or undefined
|
729
|
+
expect(screen.getByText('Main message content')).toBeTruthy();
|
730
|
+
expect(screen.queryByText('Before main content')).toBeFalsy();
|
731
|
+
expect(screen.queryByText('After main content')).toBeFalsy();
|
732
|
+
expect(screen.queryByText('end message content')).toBeFalsy();
|
733
|
+
});
|
734
|
+
it('should render JSX in extraContent correctly', () => {
|
735
|
+
const beforeMainContent = (
|
736
|
+
<div data-testid="before-main-content">
|
737
|
+
<strong>Bold before content</strong>
|
738
|
+
</div>
|
739
|
+
);
|
740
|
+
const afterMainContent = (
|
741
|
+
<div data-testid="after-main-content">
|
742
|
+
<strong>Bold after content</strong>
|
743
|
+
</div>
|
744
|
+
);
|
745
|
+
const endContent = (
|
746
|
+
<div data-testid="end-main-content">
|
747
|
+
<strong>Bold end content</strong>
|
748
|
+
</div>
|
749
|
+
);
|
750
|
+
render(
|
751
|
+
<Message
|
752
|
+
avatar="./img"
|
753
|
+
role="user"
|
754
|
+
name="User"
|
755
|
+
content="Main message content"
|
756
|
+
extraContent={{ beforeMainContent, afterMainContent, endContent }}
|
757
|
+
/>
|
758
|
+
);
|
759
|
+
|
760
|
+
// Check that the JSX is correctly rendered
|
761
|
+
expect(screen.getByTestId('before-main-content')).toContainHTML('<strong>Bold before content</strong>');
|
762
|
+
expect(screen.getByTestId('after-main-content')).toContainHTML('<strong>Bold after content</strong>');
|
763
|
+
expect(screen.getByTestId('end-main-content')).toContainHTML('<strong>Bold end content</strong>');
|
764
|
+
});
|
765
|
+
it('should handle image correctly', () => {
|
766
|
+
render(<Message avatar="./img" role="user" name="User" content={IMAGE} />);
|
767
|
+
expect(screen.getByRole('img', { name: /Multi-colored wavy lines on a black background/i })).toBeTruthy();
|
768
|
+
});
|
769
|
+
it('should handle external links correctly', () => {
|
770
|
+
render(<Message avatar="./img" role="user" name="User" content={`[PatternFly](https://www.patternfly.org/)`} />);
|
771
|
+
// we are mocking rehype libraries, so we can't test target _blank addition on links directly with RTL
|
772
|
+
expect(rehypeExternalLinks).toHaveBeenCalledTimes(1);
|
773
|
+
});
|
774
|
+
it('should handle external links correctly', () => {
|
775
|
+
render(
|
776
|
+
<Message
|
777
|
+
avatar="./img"
|
778
|
+
role="user"
|
779
|
+
name="User"
|
780
|
+
content={`[PatternFly](https://www.patternfly.org/)`}
|
781
|
+
openLinkInNewTab={false}
|
782
|
+
/>
|
783
|
+
);
|
784
|
+
// we are mocking rehype libraries, so we can't test target _blank addition on links directly with RTL
|
785
|
+
expect(rehypeExternalLinks).not.toHaveBeenCalled();
|
786
|
+
});
|
787
|
+
it('should handle error correctly', () => {
|
788
|
+
render(<Message avatar="./img" role="user" name="User" error={ERROR} />);
|
789
|
+
expect(screen.getByRole('heading', { name: /Could not load chat/i })).toBeTruthy();
|
790
|
+
expect(screen.getByRole('link', { name: /Start a new chat/i })).toBeTruthy();
|
791
|
+
expect(screen.getByRole('link', { name: /Contact support/i })).toBeTruthy();
|
792
|
+
expect(screen.getByText('Wait a few minutes and check your network settings. If the issue persists:')).toBeTruthy();
|
793
|
+
});
|
794
|
+
it('should handle error correctly when loading', () => {
|
795
|
+
render(<Message avatar="./img" role="user" name="User" error={ERROR} isLoading />);
|
796
|
+
expect(screen.queryByRole('heading', { name: /Could not load chat/i })).toBeFalsy();
|
797
|
+
expect(screen.getByText('Loading message')).toBeTruthy();
|
798
|
+
});
|
799
|
+
it('should handle error correctly when these is content', () => {
|
800
|
+
render(<Message avatar="./img" role="user" name="User" error={ERROR} content="Test" />);
|
801
|
+
expect(screen.getByRole('heading', { name: /Could not load chat/i })).toBeTruthy();
|
802
|
+
expect(screen.queryByText('Test')).toBeFalsy();
|
803
|
+
});
|
440
804
|
});
|
package/src/Message/Message.tsx
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
// Chatbot Main - Message
|
3
3
|
// ============================================================================
|
4
4
|
|
5
|
-
import React from 'react';
|
5
|
+
import React, { ReactNode } from 'react';
|
6
6
|
|
7
7
|
import Markdown from 'react-markdown';
|
8
8
|
import remarkGfm from 'remark-gfm';
|
9
9
|
import {
|
10
|
+
AlertProps,
|
10
11
|
Avatar,
|
11
12
|
AvatarProps,
|
13
|
+
ContentVariants,
|
12
14
|
Label,
|
13
|
-
LabelGroup,
|
14
15
|
LabelGroupProps,
|
15
|
-
LabelProps,
|
16
16
|
Timestamp,
|
17
17
|
Truncate
|
18
18
|
} from '@patternfly/react-core';
|
@@ -25,12 +25,26 @@ import SourcesCard, { SourcesCardProps } from '../SourcesCard';
|
|
25
25
|
import ListItemMessage from './ListMessage/ListItemMessage';
|
26
26
|
import UnorderedListMessage from './ListMessage/UnorderedListMessage';
|
27
27
|
import OrderedListMessage from './ListMessage/OrderedListMessage';
|
28
|
+
import QuickStartTile from './QuickStarts/QuickStartTile';
|
29
|
+
import { QuickStart, QuickstartAction } from './QuickStarts/types';
|
30
|
+
import QuickResponse from './QuickResponse/QuickResponse';
|
31
|
+
import UserFeedback, { UserFeedbackProps } from './UserFeedback/UserFeedback';
|
32
|
+
import UserFeedbackComplete, { UserFeedbackCompleteProps } from './UserFeedback/UserFeedbackComplete';
|
33
|
+
import TableMessage from './TableMessage/TableMessage';
|
34
|
+
import TrMessage from './TableMessage/TrMessage';
|
35
|
+
import TdMessage from './TableMessage/TdMessage';
|
36
|
+
import TbodyMessage from './TableMessage/TbodyMessage';
|
37
|
+
import TheadMessage from './TableMessage/TheadMessage';
|
38
|
+
import ThMessage from './TableMessage/ThMessage';
|
39
|
+
import { TableProps } from '@patternfly/react-table';
|
40
|
+
import ImageMessage from './ImageMessage/ImageMessage';
|
41
|
+
import rehypeUnwrapImages from 'rehype-unwrap-images';
|
42
|
+
import rehypeExternalLinks from 'rehype-external-links';
|
43
|
+
import rehypeSanitize from 'rehype-sanitize';
|
44
|
+
import { PluggableList } from 'react-markdown/lib';
|
45
|
+
import LinkMessage from './LinkMessage/LinkMessage';
|
46
|
+
import ErrorMessage from './ErrorMessage/ErrorMessage';
|
28
47
|
|
29
|
-
export interface QuickResponse extends Omit<LabelProps, 'children'> {
|
30
|
-
content: string;
|
31
|
-
id: string;
|
32
|
-
onClick: () => void;
|
33
|
-
}
|
34
48
|
export interface MessageAttachment {
|
35
49
|
/** Name of file attached to the message */
|
36
50
|
name: string;
|
@@ -50,6 +64,17 @@ export interface MessageAttachment {
|
|
50
64
|
spinnerTestId?: string;
|
51
65
|
}
|
52
66
|
|
67
|
+
export interface MessageExtraContent {
|
68
|
+
/** Content to display before the main content */
|
69
|
+
beforeMainContent?: ReactNode;
|
70
|
+
|
71
|
+
/** Content to display after the main content */
|
72
|
+
afterMainContent?: ReactNode;
|
73
|
+
|
74
|
+
/** Content to display at the end */
|
75
|
+
endContent?: ReactNode;
|
76
|
+
}
|
77
|
+
|
53
78
|
export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'role'> {
|
54
79
|
/** Unique id for message */
|
55
80
|
id?: string;
|
@@ -57,6 +82,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
57
82
|
role: 'user' | 'bot';
|
58
83
|
/** Message content */
|
59
84
|
content?: string;
|
85
|
+
/** Extra Message content */
|
86
|
+
extraContent?: MessageExtraContent;
|
60
87
|
/** Name of the user */
|
61
88
|
name?: string;
|
62
89
|
/** Avatar src for the user */
|
@@ -85,15 +112,45 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
85
112
|
quickResponses?: QuickResponse[];
|
86
113
|
/** Props for quick responses container */
|
87
114
|
quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
|
115
|
+
/** Props for user feedback card */
|
116
|
+
userFeedbackForm?: Omit<UserFeedbackProps, 'ref'>;
|
117
|
+
/** Props for user feedback response */
|
118
|
+
userFeedbackComplete?: Omit<UserFeedbackCompleteProps, 'ref'>;
|
88
119
|
/** Whether avatar is round */
|
89
120
|
hasRoundAvatar?: boolean;
|
90
121
|
/** Any additional props applied to the avatar, for additional customization */
|
91
122
|
avatarProps?: Omit<AvatarProps, 'alt'>;
|
123
|
+
/** Props for QuickStart card */
|
124
|
+
quickStarts?: {
|
125
|
+
quickStart: QuickStart;
|
126
|
+
onSelectQuickStart: (id?: string) => void;
|
127
|
+
minuteWord?: string;
|
128
|
+
minuteWordPlural?: string;
|
129
|
+
prerequisiteWord?: string;
|
130
|
+
prerequisiteWordPlural?: string;
|
131
|
+
quickStartButtonAriaLabel?: string;
|
132
|
+
className?: string;
|
133
|
+
onClick?: () => void;
|
134
|
+
action?: QuickstartAction;
|
135
|
+
};
|
136
|
+
/** Turns the container into a live region so that changes to content within the Message, such as appending a feedback card, are reliably announced to assistive technology. */
|
137
|
+
isLiveRegion?: boolean;
|
138
|
+
/** Ref applied to message */
|
139
|
+
innerRef?: React.Ref<HTMLDivElement>;
|
140
|
+
/** Props for table message. It is important to include a detailed aria-label that describes the purpose of the table. */
|
141
|
+
tableProps?: Required<Pick<TableProps, 'aria-label'>> & TableProps;
|
142
|
+
/** Additional rehype plugins passed from the consumer */
|
143
|
+
additionalRehypePlugins?: PluggableList;
|
144
|
+
/** Whether to open links in message in new tab. */
|
145
|
+
openLinkInNewTab?: boolean;
|
146
|
+
/** Optional inline error message that can be displayed in the message */
|
147
|
+
error?: AlertProps;
|
92
148
|
}
|
93
149
|
|
94
|
-
export const
|
150
|
+
export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
95
151
|
role,
|
96
152
|
content,
|
153
|
+
extraContent,
|
97
154
|
name,
|
98
155
|
avatar,
|
99
156
|
timestamp,
|
@@ -108,8 +165,25 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
108
165
|
attachments,
|
109
166
|
hasRoundAvatar = true,
|
110
167
|
avatarProps,
|
168
|
+
quickStarts,
|
169
|
+
userFeedbackForm,
|
170
|
+
userFeedbackComplete,
|
171
|
+
isLiveRegion = true,
|
172
|
+
innerRef,
|
173
|
+
tableProps,
|
174
|
+
openLinkInNewTab = true,
|
175
|
+
additionalRehypePlugins = [],
|
176
|
+
error,
|
111
177
|
...props
|
112
178
|
}: MessageProps) => {
|
179
|
+
const { beforeMainContent, afterMainContent, endContent } = extraContent || {};
|
180
|
+
let rehypePlugins: PluggableList = [rehypeUnwrapImages];
|
181
|
+
if (openLinkInNewTab) {
|
182
|
+
rehypePlugins = rehypePlugins.concat([[rehypeExternalLinks, { target: '_blank' }, rehypeSanitize]]);
|
183
|
+
}
|
184
|
+
if (additionalRehypePlugins) {
|
185
|
+
rehypePlugins.push(...additionalRehypePlugins);
|
186
|
+
}
|
113
187
|
let avatarClassName;
|
114
188
|
if (avatarProps && 'className' in avatarProps) {
|
115
189
|
const { className, ...rest } = avatarProps;
|
@@ -123,6 +197,9 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
123
197
|
<section
|
124
198
|
aria-label={`Message from ${role} - ${dateString}`}
|
125
199
|
className={`pf-chatbot__message pf-chatbot__message--${role}`}
|
200
|
+
aria-live={isLiveRegion ? 'polite' : undefined}
|
201
|
+
aria-atomic={isLiveRegion ? false : undefined}
|
202
|
+
ref={innerRef}
|
126
203
|
{...props}
|
127
204
|
>
|
128
205
|
{/* We are using an empty alt tag intentionally in order to reduce noise on screen readers */}
|
@@ -151,32 +228,76 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
151
228
|
{isLoading ? (
|
152
229
|
<MessageLoading loadingWord={loadingWord} />
|
153
230
|
) : (
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
231
|
+
<>
|
232
|
+
{beforeMainContent && <>{beforeMainContent}</>}
|
233
|
+
{error ? (
|
234
|
+
<ErrorMessage {...error} />
|
235
|
+
) : (
|
236
|
+
<Markdown
|
237
|
+
components={{
|
238
|
+
p: (props) => <TextMessage component={ContentVariants.p} {...props} />,
|
239
|
+
code: ({ children, ...props }) => (
|
240
|
+
<CodeBlockMessage {...props} {...codeBlockProps}>
|
241
|
+
{children}
|
242
|
+
</CodeBlockMessage>
|
243
|
+
),
|
244
|
+
h1: (props) => <TextMessage component={ContentVariants.h1} {...props} />,
|
245
|
+
h2: (props) => <TextMessage component={ContentVariants.h2} {...props} />,
|
246
|
+
h3: (props) => <TextMessage component={ContentVariants.h3} {...props} />,
|
247
|
+
h4: (props) => <TextMessage component={ContentVariants.h4} {...props} />,
|
248
|
+
h5: (props) => <TextMessage component={ContentVariants.h5} {...props} />,
|
249
|
+
h6: (props) => <TextMessage component={ContentVariants.h6} {...props} />,
|
250
|
+
blockquote: (props) => <TextMessage component={ContentVariants.blockquote} {...props} />,
|
251
|
+
ul: (props) => <UnorderedListMessage {...props} />,
|
252
|
+
ol: (props) => <OrderedListMessage {...props} />,
|
253
|
+
li: (props) => <ListItemMessage {...props} />,
|
254
|
+
table: (props) => <TableMessage {...props} {...tableProps} />,
|
255
|
+
tbody: (props) => <TbodyMessage {...props} />,
|
256
|
+
thead: (props) => <TheadMessage {...props} />,
|
257
|
+
tr: (props) => <TrMessage {...props} />,
|
258
|
+
td: (props) => {
|
259
|
+
// Conflicts with Td type
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
261
|
+
const { width, ...rest } = props;
|
262
|
+
return <TdMessage {...rest} />;
|
263
|
+
},
|
264
|
+
th: (props) => <ThMessage {...props} />,
|
265
|
+
img: (props) => <ImageMessage {...props} />,
|
266
|
+
a: (props) => (
|
267
|
+
<LinkMessage href={props.href} rel={props.rel} target={props.target}>
|
268
|
+
{props.children}
|
269
|
+
</LinkMessage>
|
270
|
+
)
|
271
|
+
}}
|
272
|
+
remarkPlugins={[remarkGfm]}
|
273
|
+
rehypePlugins={rehypePlugins}
|
274
|
+
>
|
275
|
+
{content}
|
276
|
+
</Markdown>
|
277
|
+
)}
|
278
|
+
{afterMainContent && <>{afterMainContent}</>}
|
279
|
+
</>
|
166
280
|
)}
|
167
281
|
{!isLoading && sources && <SourcesCard {...sources} />}
|
282
|
+
{quickStarts && quickStarts.quickStart && (
|
283
|
+
<QuickStartTile
|
284
|
+
quickStart={quickStarts.quickStart}
|
285
|
+
onSelectQuickStart={quickStarts.onSelectQuickStart}
|
286
|
+
minuteWord={quickStarts.minuteWord}
|
287
|
+
minuteWordPlural={quickStarts.minuteWordPlural}
|
288
|
+
prerequisiteWord={quickStarts.prerequisiteWord}
|
289
|
+
prerequisiteWordPlural={quickStarts.prerequisiteWordPlural}
|
290
|
+
quickStartButtonAriaLabel={quickStarts.quickStartButtonAriaLabel}
|
291
|
+
/>
|
292
|
+
)}
|
168
293
|
{!isLoading && actions && <ResponseActions actions={actions} />}
|
294
|
+
{userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} />}
|
295
|
+
{userFeedbackComplete && <UserFeedbackComplete {...userFeedbackComplete} timestamp={dateString} />}
|
169
296
|
{!isLoading && quickResponses && (
|
170
|
-
<
|
171
|
-
|
172
|
-
{
|
173
|
-
|
174
|
-
{quickResponses.map(({ id, onClick, content, ...props }: QuickResponse) => (
|
175
|
-
<Label variant="outline" color="blue" key={id} onClick={onClick} {...props}>
|
176
|
-
{content}
|
177
|
-
</Label>
|
178
|
-
))}
|
179
|
-
</LabelGroup>
|
297
|
+
<QuickResponse
|
298
|
+
quickResponses={quickResponses}
|
299
|
+
quickResponseContainerProps={quickResponseContainerProps}
|
300
|
+
/>
|
180
301
|
)}
|
181
302
|
</div>
|
182
303
|
{attachments && (
|
@@ -197,10 +318,15 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
197
318
|
))}
|
198
319
|
</div>
|
199
320
|
)}
|
321
|
+
{!isLoading && endContent && <>{endContent}</>}
|
200
322
|
</div>
|
201
323
|
</div>
|
202
324
|
</section>
|
203
325
|
);
|
204
326
|
};
|
205
327
|
|
328
|
+
const Message = React.forwardRef((props: MessageProps, ref: React.Ref<HTMLDivElement>) => (
|
329
|
+
<MessageBase innerRef={ref} {...props} />
|
330
|
+
));
|
331
|
+
|
206
332
|
export default Message;
|