@patternfly/chatbot 2.2.0-prerelease.9 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/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 +35 -8
- package/dist/cjs/Message/Message.js +68 -18
- package/dist/cjs/Message/Message.test.js +239 -3
- package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -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 +420 -148
- 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 +35 -8
- package/dist/esm/Message/Message.js +66 -16
- package/dist/esm/Message/Message.test.js +239 -3
- package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -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 -3
- 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 +2 -2
- 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 +49 -8
- 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/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/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/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -0
- 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 +313 -3
- package/src/Message/Message.tsx +130 -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/QuickStartTile.scss +0 -1
- 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 +5 -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
@@ -5,6 +5,8 @@ import Message from './Message';
|
|
5
5
|
import userEvent from '@testing-library/user-event';
|
6
6
|
import { monitorSampleAppQuickStart } from './QuickStarts/monitor-sampleapp-quickstart';
|
7
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';
|
8
10
|
|
9
11
|
const ALL_ACTIONS = [
|
10
12
|
{ label: /Good response/i },
|
@@ -71,6 +73,89 @@ const ORDERED_LIST_WITH_CODE = `
|
|
71
73
|
3. Item 3
|
72
74
|
`;
|
73
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
|
+
};
|
74
159
|
const checkListItemsRendered = () => {
|
75
160
|
const items = ['Item 1', 'Item 2', 'Item 3'];
|
76
161
|
expect(screen.getAllByRole('listitem')).toHaveLength(3);
|
@@ -81,6 +166,9 @@ const checkListItemsRendered = () => {
|
|
81
166
|
};
|
82
167
|
|
83
168
|
describe('Message', () => {
|
169
|
+
beforeEach(() => {
|
170
|
+
jest.clearAllMocks();
|
171
|
+
});
|
84
172
|
it('should render user messages correctly', () => {
|
85
173
|
render(<Message avatar="./img" role="user" name="User" content="Hi" />);
|
86
174
|
expect(screen.getByText('User')).toBeTruthy();
|
@@ -377,13 +465,17 @@ describe('Message', () => {
|
|
377
465
|
render(<Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} />);
|
378
466
|
expect(screen.getByText('Here is some YAML code:')).toBeTruthy();
|
379
467
|
expect(screen.getByRole('button', { name: 'Copy code button' })).toBeTruthy();
|
380
|
-
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();
|
381
471
|
expect(screen.getByText(/metadata:/i)).toBeTruthy();
|
382
|
-
expect(screen.getByText(/name
|
472
|
+
expect(screen.getByText(/name:/i)).toBeTruthy();
|
473
|
+
expect(screen.getByText(/azure-sample-repo0oooo00ooo/i)).toBeTruthy();
|
383
474
|
expect(screen.getByText(/spec/i)).toBeTruthy();
|
384
475
|
expect(screen.getByText(/connectionConfig:/i)).toBeTruthy();
|
476
|
+
expect(screen.getByText(/url:/i)).toBeTruthy();
|
385
477
|
expect(
|
386
|
-
screen.getByText(/
|
478
|
+
screen.getByText(/https:\/\/raw.githubusercontent.com\/Azure-Samples\/helm-charts\/master\/docs/i)
|
387
479
|
).toBeTruthy();
|
388
480
|
});
|
389
481
|
it('can click copy code button', async () => {
|
@@ -491,4 +583,222 @@ describe('Message', () => {
|
|
491
583
|
);
|
492
584
|
expect(screen.getAllByRole('img')[1]).toHaveAttribute('src', 'test.png');
|
493
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
|
+
});
|
494
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';
|
@@ -27,12 +27,24 @@ import UnorderedListMessage from './ListMessage/UnorderedListMessage';
|
|
27
27
|
import OrderedListMessage from './ListMessage/OrderedListMessage';
|
28
28
|
import QuickStartTile from './QuickStarts/QuickStartTile';
|
29
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';
|
30
47
|
|
31
|
-
export interface QuickResponse extends Omit<LabelProps, 'children'> {
|
32
|
-
content: string;
|
33
|
-
id: string;
|
34
|
-
onClick: () => void;
|
35
|
-
}
|
36
48
|
export interface MessageAttachment {
|
37
49
|
/** Name of file attached to the message */
|
38
50
|
name: string;
|
@@ -52,6 +64,17 @@ export interface MessageAttachment {
|
|
52
64
|
spinnerTestId?: string;
|
53
65
|
}
|
54
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
|
+
|
55
78
|
export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'role'> {
|
56
79
|
/** Unique id for message */
|
57
80
|
id?: string;
|
@@ -59,6 +82,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
59
82
|
role: 'user' | 'bot';
|
60
83
|
/** Message content */
|
61
84
|
content?: string;
|
85
|
+
/** Extra Message content */
|
86
|
+
extraContent?: MessageExtraContent;
|
62
87
|
/** Name of the user */
|
63
88
|
name?: string;
|
64
89
|
/** Avatar src for the user */
|
@@ -87,6 +112,10 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
87
112
|
quickResponses?: QuickResponse[];
|
88
113
|
/** Props for quick responses container */
|
89
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'>;
|
90
119
|
/** Whether avatar is round */
|
91
120
|
hasRoundAvatar?: boolean;
|
92
121
|
/** Any additional props applied to the avatar, for additional customization */
|
@@ -104,11 +133,24 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
104
133
|
onClick?: () => void;
|
105
134
|
action?: QuickstartAction;
|
106
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;
|
107
148
|
}
|
108
149
|
|
109
|
-
export const
|
150
|
+
export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
110
151
|
role,
|
111
152
|
content,
|
153
|
+
extraContent,
|
112
154
|
name,
|
113
155
|
avatar,
|
114
156
|
timestamp,
|
@@ -124,8 +166,24 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
124
166
|
hasRoundAvatar = true,
|
125
167
|
avatarProps,
|
126
168
|
quickStarts,
|
169
|
+
userFeedbackForm,
|
170
|
+
userFeedbackComplete,
|
171
|
+
isLiveRegion = true,
|
172
|
+
innerRef,
|
173
|
+
tableProps,
|
174
|
+
openLinkInNewTab = true,
|
175
|
+
additionalRehypePlugins = [],
|
176
|
+
error,
|
127
177
|
...props
|
128
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
|
+
}
|
129
187
|
let avatarClassName;
|
130
188
|
if (avatarProps && 'className' in avatarProps) {
|
131
189
|
const { className, ...rest } = avatarProps;
|
@@ -139,6 +197,9 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
139
197
|
<section
|
140
198
|
aria-label={`Message from ${role} - ${dateString}`}
|
141
199
|
className={`pf-chatbot__message pf-chatbot__message--${role}`}
|
200
|
+
aria-live={isLiveRegion ? 'polite' : undefined}
|
201
|
+
aria-atomic={isLiveRegion ? false : undefined}
|
202
|
+
ref={innerRef}
|
142
203
|
{...props}
|
143
204
|
>
|
144
205
|
{/* We are using an empty alt tag intentionally in order to reduce noise on screen readers */}
|
@@ -167,18 +228,55 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
167
228
|
{isLoading ? (
|
168
229
|
<MessageLoading loadingWord={loadingWord} />
|
169
230
|
) : (
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
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
|
+
</>
|
182
280
|
)}
|
183
281
|
{!isLoading && sources && <SourcesCard {...sources} />}
|
184
282
|
{quickStarts && quickStarts.quickStart && (
|
@@ -193,17 +291,13 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
193
291
|
/>
|
194
292
|
)}
|
195
293
|
{!isLoading && actions && <ResponseActions actions={actions} />}
|
294
|
+
{userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} />}
|
295
|
+
{userFeedbackComplete && <UserFeedbackComplete {...userFeedbackComplete} timestamp={dateString} />}
|
196
296
|
{!isLoading && quickResponses && (
|
197
|
-
<
|
198
|
-
|
199
|
-
{
|
200
|
-
|
201
|
-
{quickResponses.map(({ id, onClick, content, ...props }: QuickResponse) => (
|
202
|
-
<Label variant="outline" color="blue" key={id} onClick={onClick} {...props}>
|
203
|
-
{content}
|
204
|
-
</Label>
|
205
|
-
))}
|
206
|
-
</LabelGroup>
|
297
|
+
<QuickResponse
|
298
|
+
quickResponses={quickResponses}
|
299
|
+
quickResponseContainerProps={quickResponseContainerProps}
|
300
|
+
/>
|
207
301
|
)}
|
208
302
|
</div>
|
209
303
|
{attachments && (
|
@@ -224,10 +318,15 @@ export const Message: React.FunctionComponent<MessageProps> = ({
|
|
224
318
|
))}
|
225
319
|
</div>
|
226
320
|
)}
|
321
|
+
{!isLoading && endContent && <>{endContent}</>}
|
227
322
|
</div>
|
228
323
|
</div>
|
229
324
|
</section>
|
230
325
|
);
|
231
326
|
};
|
232
327
|
|
328
|
+
const Message = React.forwardRef((props: MessageProps, ref: React.Ref<HTMLDivElement>) => (
|
329
|
+
<MessageBase innerRef={ref} {...props} />
|
330
|
+
));
|
331
|
+
|
233
332
|
export default Message;
|
@@ -3,9 +3,9 @@
|
|
3
3
|
// ============================================================================
|
4
4
|
.pf-chatbot__message-loading {
|
5
5
|
width: 36px;
|
6
|
-
padding: var(--pf-t--
|
6
|
+
padding: var(--pf-t--global--spacer--sm);
|
7
7
|
background-color: var(--pf-t--global--background--color--tertiary--default);
|
8
|
-
border-radius: var(--pf-t--
|
8
|
+
border-radius: var(--pf-t--global--border--radius--small);
|
9
9
|
|
10
10
|
&-dots {
|
11
11
|
position: relative;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
.pf-chatbot__message-quick-response {
|
2
|
+
.pf-v6-c-label {
|
3
|
+
--pf-v6-c-label--FontSize: var(--pf-t--global--font--size--md);
|
4
|
+
|
5
|
+
@media screen and (min-width: 401px) and (max-width: 600px) {
|
6
|
+
--pf-v6-c-label__text--MaxWidth: 20ch;
|
7
|
+
}
|
8
|
+
|
9
|
+
@media screen and (max-width: 400px) {
|
10
|
+
--pf-v6-c-label__text--MaxWidth: 15ch;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
.pf-chatbot__message-quick-response--selected {
|
15
|
+
.pf-v6-c-label__content:is(:hover, :focus) {
|
16
|
+
--pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
|
17
|
+
--pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
.pf-chatbot__message-quick-response--selected:hover,
|
22
|
+
.pf-chatbot__message-quick-response--selected:focus {
|
23
|
+
--pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
|
24
|
+
--pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
|
25
|
+
}
|
26
|
+
|
27
|
+
// active state right before selection
|
28
|
+
.pf-v6-c-label.pf-m-blue.pf-m-clickable .pf-v6-c-label__content:is(:active) {
|
29
|
+
--pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
|
30
|
+
--pf-v6-c-label--m-clickable--hover--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
|
31
|
+
--pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
|
32
|
+
}
|
33
|
+
}
|