@patternfly/chatbot 2.2.1 → 6.3.0-prerelease.10
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.d.ts +2 -0
- package/dist/cjs/AttachmentEdit/AttachmentEdit.js +2 -2
- package/dist/cjs/Chatbot/Chatbot.d.ts +2 -0
- package/dist/cjs/Chatbot/Chatbot.js +2 -2
- package/dist/cjs/Chatbot/Chatbot.test.js +4 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +1 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -2
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeader.js +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
- package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +3 -0
- package/dist/cjs/ChatbotModal/ChatbotModal.js +2 -2
- package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
- package/dist/cjs/ChatbotModal/ChatbotModal.test.js +28 -0
- package/dist/cjs/ChatbotPopover/ChatbotPopover.js +1 -1
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
- package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
- package/dist/cjs/CodeModal/CodeModal.js +3 -3
- package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
- package/dist/cjs/CodeModal/CodeModal.test.js +15 -0
- package/dist/cjs/FileDetails/FileDetails.js +1 -1
- package/dist/cjs/Message/Message.d.ts +19 -1
- package/dist/cjs/Message/Message.js +58 -39
- package/dist/cjs/Message/Message.test.js +64 -0
- package/dist/cjs/Message/MessageInput.d.ts +18 -0
- package/dist/cjs/Message/MessageInput.js +34 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +2 -2
- package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTile.js +2 -2
- package/dist/cjs/Message/UserFeedback/UserFeedback.js +4 -4
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +4 -0
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +4 -4
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
- package/dist/cjs/MessageBar/AttachButton.d.ts +1 -0
- package/dist/cjs/MessageBar/AttachButton.js +3 -3
- package/dist/cjs/MessageBar/AttachButton.test.js +4 -0
- package/dist/cjs/MessageBar/MessageBar.d.ts +5 -0
- package/dist/cjs/MessageBar/MessageBar.js +14 -13
- package/dist/cjs/MessageBar/MessageBar.test.js +13 -0
- package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -0
- package/dist/cjs/MessageBar/MicrophoneButton.js +4 -4
- package/dist/cjs/MessageBar/SendButton.d.ts +1 -0
- package/dist/cjs/MessageBar/SendButton.js +3 -3
- package/dist/cjs/MessageBar/SendButton.test.js +4 -0
- package/dist/cjs/MessageBar/StopButton.d.ts +1 -0
- package/dist/cjs/MessageBar/StopButton.js +3 -3
- package/dist/cjs/MessageBar/StopButton.test.js +4 -0
- package/dist/cjs/MessageBox/MessageBox.d.ts +4 -0
- package/dist/cjs/MessageBox/MessageBox.js +21 -7
- package/dist/cjs/MessageBox/MessageBox.test.js +43 -0
- package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +2 -0
- package/dist/cjs/PreviewAttachment/PreviewAttachment.js +2 -2
- package/dist/cjs/Settings/SettingsForm.d.ts +2 -0
- package/dist/cjs/Settings/SettingsForm.js +2 -2
- package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -1
- package/dist/cjs/Settings/SettingsForm.test.js +12 -0
- package/dist/cjs/SourcesCard/SourcesCard.d.ts +7 -1
- package/dist/cjs/SourcesCard/SourcesCard.js +17 -11
- package/dist/cjs/SourcesCard/SourcesCard.test.js +25 -15
- package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +2 -0
- package/dist/cjs/TermsOfUse/TermsOfUse.js +5 -5
- package/dist/cjs/tracking/console_tracking_provider.d.ts +4 -5
- package/dist/cjs/tracking/console_tracking_provider.js +22 -15
- package/dist/cjs/tracking/posthog_tracking_provider.d.ts +2 -2
- package/dist/cjs/tracking/posthog_tracking_provider.js +21 -12
- package/dist/cjs/tracking/segment_tracking_provider.d.ts +2 -2
- package/dist/cjs/tracking/segment_tracking_provider.js +21 -12
- package/dist/cjs/tracking/trackingProviderProxy.d.ts +1 -1
- package/dist/cjs/tracking/trackingProviderProxy.js +2 -2
- package/dist/cjs/tracking/tracking_api.d.ts +1 -1
- package/dist/cjs/tracking/tracking_registry.js +46 -12
- package/dist/cjs/tracking/tracking_spi.d.ts +15 -5
- package/dist/cjs/tracking/tracking_spi.js +9 -0
- package/dist/cjs/tracking/umami_tracking_provider.d.ts +6 -2
- package/dist/cjs/tracking/umami_tracking_provider.js +66 -22
- package/dist/css/main.css +225 -22
- package/dist/css/main.css.map +1 -1
- package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +2 -0
- package/dist/esm/AttachmentEdit/AttachmentEdit.js +2 -2
- package/dist/esm/Chatbot/Chatbot.d.ts +2 -0
- package/dist/esm/Chatbot/Chatbot.js +2 -2
- package/dist/esm/Chatbot/Chatbot.test.js +4 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
- package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +1 -0
- package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -2
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeader.js +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
- package/dist/esm/ChatbotModal/ChatbotModal.d.ts +3 -0
- package/dist/esm/ChatbotModal/ChatbotModal.js +2 -2
- package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
- package/dist/esm/ChatbotModal/ChatbotModal.test.js +23 -0
- package/dist/esm/ChatbotPopover/ChatbotPopover.js +1 -1
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
- package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
- package/dist/esm/CodeModal/CodeModal.js +3 -3
- package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
- package/dist/esm/CodeModal/CodeModal.test.js +10 -0
- package/dist/esm/FileDetails/FileDetails.js +1 -1
- package/dist/esm/Message/Message.d.ts +19 -1
- package/dist/esm/Message/Message.js +58 -39
- package/dist/esm/Message/Message.test.js +64 -0
- package/dist/esm/Message/MessageInput.d.ts +18 -0
- package/dist/esm/Message/MessageInput.js +29 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.js +2 -2
- package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -0
- package/dist/esm/Message/QuickStarts/QuickStartTile.js +2 -2
- package/dist/esm/Message/UserFeedback/UserFeedback.js +4 -4
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +4 -0
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +4 -4
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
- package/dist/esm/MessageBar/AttachButton.d.ts +1 -0
- package/dist/esm/MessageBar/AttachButton.js +3 -3
- package/dist/esm/MessageBar/AttachButton.test.js +4 -0
- package/dist/esm/MessageBar/MessageBar.d.ts +5 -0
- package/dist/esm/MessageBar/MessageBar.js +14 -13
- package/dist/esm/MessageBar/MessageBar.test.js +13 -0
- package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -0
- package/dist/esm/MessageBar/MicrophoneButton.js +4 -4
- package/dist/esm/MessageBar/SendButton.d.ts +1 -0
- package/dist/esm/MessageBar/SendButton.js +3 -3
- package/dist/esm/MessageBar/SendButton.test.js +4 -0
- package/dist/esm/MessageBar/StopButton.d.ts +1 -0
- package/dist/esm/MessageBar/StopButton.js +3 -3
- package/dist/esm/MessageBar/StopButton.test.js +4 -0
- package/dist/esm/MessageBox/MessageBox.d.ts +4 -0
- package/dist/esm/MessageBox/MessageBox.js +21 -7
- package/dist/esm/MessageBox/MessageBox.test.js +44 -1
- package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +2 -0
- package/dist/esm/PreviewAttachment/PreviewAttachment.js +2 -2
- package/dist/esm/Settings/SettingsForm.d.ts +2 -0
- package/dist/esm/Settings/SettingsForm.js +2 -2
- package/dist/esm/Settings/SettingsForm.test.d.ts +1 -1
- package/dist/esm/Settings/SettingsForm.test.js +12 -0
- package/dist/esm/SourcesCard/SourcesCard.d.ts +7 -1
- package/dist/esm/SourcesCard/SourcesCard.js +18 -12
- package/dist/esm/SourcesCard/SourcesCard.test.js +25 -15
- package/dist/esm/TermsOfUse/TermsOfUse.d.ts +2 -0
- package/dist/esm/TermsOfUse/TermsOfUse.js +5 -5
- package/dist/esm/tracking/console_tracking_provider.d.ts +4 -5
- package/dist/esm/tracking/console_tracking_provider.js +22 -15
- package/dist/esm/tracking/posthog_tracking_provider.d.ts +2 -2
- package/dist/esm/tracking/posthog_tracking_provider.js +21 -12
- package/dist/esm/tracking/segment_tracking_provider.d.ts +2 -2
- package/dist/esm/tracking/segment_tracking_provider.js +21 -12
- package/dist/esm/tracking/trackingProviderProxy.d.ts +1 -1
- package/dist/esm/tracking/trackingProviderProxy.js +2 -2
- package/dist/esm/tracking/tracking_api.d.ts +1 -1
- package/dist/esm/tracking/tracking_registry.js +46 -12
- package/dist/esm/tracking/tracking_spi.d.ts +15 -5
- package/dist/esm/tracking/tracking_spi.js +8 -1
- package/dist/esm/tracking/umami_tracking_provider.d.ts +6 -2
- package/dist/esm/tracking/umami_tracking_provider.js +66 -22
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +18 -14
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +10 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +74 -104
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +48 -37
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +33 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +34 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +11 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +71 -13
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +3 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +10 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +80 -104
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +44 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +13 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +9 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +11 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +289 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +136 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +15 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +8 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +6 -3
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +2 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +481 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +2 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +62 -57
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +2 -0
- package/src/AttachmentEdit/AttachmentEdit.tsx +5 -1
- package/src/Chatbot/Chatbot.scss +7 -0
- package/src/Chatbot/Chatbot.test.tsx +9 -0
- package/src/Chatbot/Chatbot.tsx +4 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +38 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +71 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +23 -2
- package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -0
- package/src/ChatbotFooter/ChatbotFooter.tsx +3 -1
- package/src/ChatbotHeader/ChatbotHeader.scss +25 -0
- package/src/ChatbotHeader/ChatbotHeader.tsx +1 -1
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +6 -0
- package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +12 -6
- package/src/ChatbotHeader/ChatbotHeaderMain.tsx +3 -1
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +10 -5
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +6 -0
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +5 -2
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +10 -0
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +4 -0
- package/src/ChatbotModal/ChatbotModal.scss +15 -4
- package/src/ChatbotModal/ChatbotModal.test.tsx +59 -0
- package/src/ChatbotModal/ChatbotModal.tsx +5 -1
- package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
- package/src/ChatbotPopover/ChatbotPopover.tsx +1 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -0
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +13 -2
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
- package/src/CodeModal/CodeModal.scss +11 -3
- package/src/CodeModal/CodeModal.test.tsx +24 -0
- package/src/CodeModal/CodeModal.tsx +6 -2
- package/src/FileDetails/FileDetails.tsx +1 -1
- package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
- package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
- package/src/Message/Message.scss +31 -0
- package/src/Message/Message.test.tsx +83 -0
- package/src/Message/Message.tsx +121 -56
- package/src/Message/MessageInput.tsx +59 -0
- package/src/Message/QuickResponse/QuickResponse.tsx +5 -1
- package/src/Message/QuickStarts/QuickStartTile.tsx +5 -1
- package/src/Message/TextMessage/TextMessage.scss +25 -0
- package/src/Message/UserFeedback/UserFeedback.scss +24 -3
- package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -0
- package/src/Message/UserFeedback/UserFeedback.tsx +4 -2
- package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -0
- package/src/Message/UserFeedback/UserFeedbackComplete.tsx +10 -2
- package/src/MessageBar/AttachButton.scss +10 -0
- package/src/MessageBar/AttachButton.test.tsx +4 -0
- package/src/MessageBar/AttachButton.tsx +5 -2
- package/src/MessageBar/MessageBar.scss +17 -0
- package/src/MessageBar/MessageBar.test.tsx +13 -0
- package/src/MessageBar/MessageBar.tsx +23 -8
- package/src/MessageBar/MicrophoneButton.scss +10 -0
- package/src/MessageBar/MicrophoneButton.tsx +6 -3
- package/src/MessageBar/SendButton.scss +10 -0
- package/src/MessageBar/SendButton.test.tsx +5 -1
- package/src/MessageBar/SendButton.tsx +5 -2
- package/src/MessageBar/StopButton.scss +10 -0
- package/src/MessageBar/StopButton.test.tsx +5 -1
- package/src/MessageBar/StopButton.tsx +5 -2
- package/src/MessageBox/MessageBox.scss +6 -0
- package/src/MessageBox/MessageBox.test.tsx +45 -1
- package/src/MessageBox/MessageBox.tsx +16 -6
- package/src/PreviewAttachment/PreviewAttachment.tsx +5 -1
- package/src/Settings/Settings.scss +11 -0
- package/src/Settings/SettingsForm.test.tsx +17 -0
- package/src/Settings/SettingsForm.tsx +12 -2
- package/src/SourcesCard/SourcesCard.scss +11 -7
- package/src/SourcesCard/SourcesCard.test.tsx +30 -22
- package/src/SourcesCard/SourcesCard.tsx +56 -13
- package/src/TermsOfUse/TermsOfUse.scss +20 -0
- package/src/TermsOfUse/TermsOfUse.tsx +9 -4
- package/src/tracking/console_tracking_provider.ts +21 -17
- package/src/tracking/posthog_tracking_provider.ts +20 -13
- package/src/tracking/segment_tracking_provider.ts +20 -13
- package/src/tracking/trackingProviderProxy.ts +2 -2
- package/src/tracking/tracking_api.ts +1 -1
- package/src/tracking/tracking_registry.ts +46 -13
- package/src/tracking/tracking_spi.ts +18 -7
- package/src/tracking/umami_tracking_provider.ts +76 -20
- package/src/SourcesCard/__snapshots__/SourcesCard.test.tsx.snap +0 -34
package/src/Message/Message.tsx
CHANGED
|
@@ -10,7 +10,9 @@ import {
|
|
|
10
10
|
AlertProps,
|
|
11
11
|
Avatar,
|
|
12
12
|
AvatarProps,
|
|
13
|
+
ButtonProps,
|
|
13
14
|
ContentVariants,
|
|
15
|
+
FormProps,
|
|
14
16
|
Label,
|
|
15
17
|
LabelGroupProps,
|
|
16
18
|
Timestamp,
|
|
@@ -44,6 +46,7 @@ import rehypeSanitize from 'rehype-sanitize';
|
|
|
44
46
|
import { PluggableList } from 'react-markdown/lib';
|
|
45
47
|
import LinkMessage from './LinkMessage/LinkMessage';
|
|
46
48
|
import ErrorMessage from './ErrorMessage/ErrorMessage';
|
|
49
|
+
import MessageInput from './MessageInput';
|
|
47
50
|
|
|
48
51
|
export interface MessageAttachment {
|
|
49
52
|
/** Name of file attached to the message */
|
|
@@ -145,6 +148,24 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
|
|
|
145
148
|
openLinkInNewTab?: boolean;
|
|
146
149
|
/** Optional inline error message that can be displayed in the message */
|
|
147
150
|
error?: AlertProps;
|
|
151
|
+
/** Props for links */
|
|
152
|
+
linkProps?: ButtonProps;
|
|
153
|
+
/** Whether message is in edit mode */
|
|
154
|
+
isEditable?: boolean;
|
|
155
|
+
/** Placeholder for edit input */
|
|
156
|
+
editPlaceholder?: string;
|
|
157
|
+
/** Label for the English word "Update" used in edit mode. */
|
|
158
|
+
updateWord?: string;
|
|
159
|
+
/** Label for the English word "Cancel" used in edit mode. */
|
|
160
|
+
cancelWord?: string;
|
|
161
|
+
/** Callback function for when edit mode update button is clicked */
|
|
162
|
+
onEditUpdate?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
163
|
+
/** Callback functionf or when edit cancel update button is clicked */
|
|
164
|
+
onEditCancel?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
165
|
+
/** Props for edit form */
|
|
166
|
+
editFormProps?: FormProps;
|
|
167
|
+
/** Sets message to compact styling. */
|
|
168
|
+
isCompact?: boolean;
|
|
148
169
|
}
|
|
149
170
|
|
|
150
171
|
export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
|
@@ -173,9 +194,24 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
|
|
173
194
|
tableProps,
|
|
174
195
|
openLinkInNewTab = true,
|
|
175
196
|
additionalRehypePlugins = [],
|
|
197
|
+
linkProps,
|
|
176
198
|
error,
|
|
199
|
+
isEditable,
|
|
200
|
+
editPlaceholder = 'Edit prompt message...',
|
|
201
|
+
updateWord = 'Update',
|
|
202
|
+
cancelWord = 'Cancel',
|
|
203
|
+
onEditUpdate,
|
|
204
|
+
onEditCancel,
|
|
205
|
+
editFormProps,
|
|
206
|
+
isCompact,
|
|
177
207
|
...props
|
|
178
208
|
}: MessageProps) => {
|
|
209
|
+
const [messageText, setMessageText] = React.useState(content);
|
|
210
|
+
|
|
211
|
+
React.useEffect(() => {
|
|
212
|
+
setMessageText(content);
|
|
213
|
+
}, [content]);
|
|
214
|
+
|
|
179
215
|
const { beforeMainContent, afterMainContent, endContent } = extraContent || {};
|
|
180
216
|
let rehypePlugins: PluggableList = [rehypeUnwrapImages];
|
|
181
217
|
if (openLinkInNewTab) {
|
|
@@ -193,6 +229,82 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
|
|
193
229
|
// Keep timestamps consistent between Timestamp component and aria-label
|
|
194
230
|
const date = new Date();
|
|
195
231
|
const dateString = timestamp ?? `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
|
232
|
+
|
|
233
|
+
const renderMessage = () => {
|
|
234
|
+
if (isLoading) {
|
|
235
|
+
return <MessageLoading loadingWord={loadingWord} />;
|
|
236
|
+
}
|
|
237
|
+
if (isEditable) {
|
|
238
|
+
return (
|
|
239
|
+
<>
|
|
240
|
+
{beforeMainContent && <>{beforeMainContent}</>}
|
|
241
|
+
<MessageInput
|
|
242
|
+
content={content}
|
|
243
|
+
editPlaceholder={editPlaceholder}
|
|
244
|
+
updateWord={updateWord}
|
|
245
|
+
cancelWord={cancelWord}
|
|
246
|
+
onEditUpdate={(event, text) => {
|
|
247
|
+
onEditUpdate && onEditUpdate(event);
|
|
248
|
+
setMessageText(text);
|
|
249
|
+
}}
|
|
250
|
+
onEditCancel={onEditCancel}
|
|
251
|
+
{...editFormProps}
|
|
252
|
+
/>
|
|
253
|
+
</>
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
return (
|
|
257
|
+
<>
|
|
258
|
+
{beforeMainContent && <>{beforeMainContent}</>}
|
|
259
|
+
{error ? (
|
|
260
|
+
<ErrorMessage {...error} />
|
|
261
|
+
) : (
|
|
262
|
+
<Markdown
|
|
263
|
+
components={{
|
|
264
|
+
p: (props) => <TextMessage component={ContentVariants.p} {...props} />,
|
|
265
|
+
code: ({ children, ...props }) => (
|
|
266
|
+
<CodeBlockMessage {...props} {...codeBlockProps}>
|
|
267
|
+
{children}
|
|
268
|
+
</CodeBlockMessage>
|
|
269
|
+
),
|
|
270
|
+
h1: (props) => <TextMessage component={ContentVariants.h1} {...props} />,
|
|
271
|
+
h2: (props) => <TextMessage component={ContentVariants.h2} {...props} />,
|
|
272
|
+
h3: (props) => <TextMessage component={ContentVariants.h3} {...props} />,
|
|
273
|
+
h4: (props) => <TextMessage component={ContentVariants.h4} {...props} />,
|
|
274
|
+
h5: (props) => <TextMessage component={ContentVariants.h5} {...props} />,
|
|
275
|
+
h6: (props) => <TextMessage component={ContentVariants.h6} {...props} />,
|
|
276
|
+
blockquote: (props) => <TextMessage component={ContentVariants.blockquote} {...props} />,
|
|
277
|
+
ul: (props) => <UnorderedListMessage {...props} />,
|
|
278
|
+
ol: (props) => <OrderedListMessage {...props} />,
|
|
279
|
+
li: (props) => <ListItemMessage {...props} />,
|
|
280
|
+
table: (props) => <TableMessage {...props} {...tableProps} />,
|
|
281
|
+
tbody: (props) => <TbodyMessage {...props} />,
|
|
282
|
+
thead: (props) => <TheadMessage {...props} />,
|
|
283
|
+
tr: (props) => <TrMessage {...props} />,
|
|
284
|
+
td: (props) => {
|
|
285
|
+
// Conflicts with Td type
|
|
286
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
287
|
+
const { width, ...rest } = props;
|
|
288
|
+
return <TdMessage {...rest} />;
|
|
289
|
+
},
|
|
290
|
+
th: (props) => <ThMessage {...props} />,
|
|
291
|
+
img: (props) => <ImageMessage {...props} />,
|
|
292
|
+
a: (props) => (
|
|
293
|
+
<LinkMessage href={props.href} rel={props.rel} target={props.target} {...linkProps}>
|
|
294
|
+
{props.children}
|
|
295
|
+
</LinkMessage>
|
|
296
|
+
)
|
|
297
|
+
}}
|
|
298
|
+
remarkPlugins={[remarkGfm]}
|
|
299
|
+
rehypePlugins={rehypePlugins}
|
|
300
|
+
>
|
|
301
|
+
{messageText}
|
|
302
|
+
</Markdown>
|
|
303
|
+
)}
|
|
304
|
+
</>
|
|
305
|
+
);
|
|
306
|
+
};
|
|
307
|
+
|
|
196
308
|
return (
|
|
197
309
|
<section
|
|
198
310
|
aria-label={`Message from ${role} - ${dateString}`}
|
|
@@ -225,60 +337,9 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
|
|
225
337
|
</div>
|
|
226
338
|
<div className="pf-chatbot__message-response">
|
|
227
339
|
<div className="pf-chatbot__message-and-actions">
|
|
228
|
-
{
|
|
229
|
-
|
|
230
|
-
|
|
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
|
-
</>
|
|
280
|
-
)}
|
|
281
|
-
{!isLoading && sources && <SourcesCard {...sources} />}
|
|
340
|
+
{renderMessage()}
|
|
341
|
+
{afterMainContent && <>{afterMainContent}</>}
|
|
342
|
+
{!isLoading && sources && <SourcesCard {...sources} isCompact={isCompact} />}
|
|
282
343
|
{quickStarts && quickStarts.quickStart && (
|
|
283
344
|
<QuickStartTile
|
|
284
345
|
quickStart={quickStarts.quickStart}
|
|
@@ -288,15 +349,19 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
|
|
|
288
349
|
prerequisiteWord={quickStarts.prerequisiteWord}
|
|
289
350
|
prerequisiteWordPlural={quickStarts.prerequisiteWordPlural}
|
|
290
351
|
quickStartButtonAriaLabel={quickStarts.quickStartButtonAriaLabel}
|
|
352
|
+
isCompact={isCompact}
|
|
291
353
|
/>
|
|
292
354
|
)}
|
|
293
355
|
{!isLoading && actions && <ResponseActions actions={actions} />}
|
|
294
|
-
{userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} />}
|
|
295
|
-
{userFeedbackComplete &&
|
|
356
|
+
{userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} isCompact={isCompact} />}
|
|
357
|
+
{userFeedbackComplete && (
|
|
358
|
+
<UserFeedbackComplete {...userFeedbackComplete} timestamp={dateString} isCompact={isCompact} />
|
|
359
|
+
)}
|
|
296
360
|
{!isLoading && quickResponses && (
|
|
297
361
|
<QuickResponse
|
|
298
362
|
quickResponses={quickResponses}
|
|
299
363
|
quickResponseContainerProps={quickResponseContainerProps}
|
|
364
|
+
isCompact={isCompact}
|
|
300
365
|
/>
|
|
301
366
|
)}
|
|
302
367
|
</div>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Chatbot Main - Message Input
|
|
3
|
+
// ============================================================================
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { ActionGroup, Button, Form, FormProps, TextArea } from '@patternfly/react-core';
|
|
7
|
+
|
|
8
|
+
export interface MessageInputProps extends FormProps {
|
|
9
|
+
/** Placeholder for edit input */
|
|
10
|
+
editPlaceholder?: string;
|
|
11
|
+
/** Label for the English word "Update" used in edit mode. */
|
|
12
|
+
updateWord?: string;
|
|
13
|
+
/** Label for the English word "Cancel" used in edit mode. */
|
|
14
|
+
cancelWord?: string;
|
|
15
|
+
/** Callback function for when edit mode update button is clicked */
|
|
16
|
+
onEditUpdate?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>, value: string) => void;
|
|
17
|
+
/** Callback functionf or when edit cancel update button is clicked */
|
|
18
|
+
onEditCancel?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
19
|
+
/** Message text */
|
|
20
|
+
content?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const MessageInput: React.FunctionComponent<MessageInputProps> = ({
|
|
24
|
+
editPlaceholder = 'Edit prompt message...',
|
|
25
|
+
updateWord = 'Update',
|
|
26
|
+
cancelWord = 'Cancel',
|
|
27
|
+
onEditUpdate,
|
|
28
|
+
onEditCancel,
|
|
29
|
+
content,
|
|
30
|
+
...props
|
|
31
|
+
}: MessageInputProps) => {
|
|
32
|
+
const [messageText, setMessageText] = React.useState(content ?? '');
|
|
33
|
+
|
|
34
|
+
const onChange = (event: React.FormEvent<HTMLTextAreaElement>, value: string) => {
|
|
35
|
+
setMessageText(value);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<Form {...props}>
|
|
40
|
+
<TextArea
|
|
41
|
+
placeholder={editPlaceholder}
|
|
42
|
+
value={messageText}
|
|
43
|
+
onChange={onChange}
|
|
44
|
+
aria-label={editPlaceholder}
|
|
45
|
+
autoResize
|
|
46
|
+
/>
|
|
47
|
+
<ActionGroup className="pf-chatbot__message-edit-buttons">
|
|
48
|
+
<Button variant="primary" onClick={(event) => onEditUpdate && onEditUpdate(event, messageText)}>
|
|
49
|
+
{updateWord}
|
|
50
|
+
</Button>
|
|
51
|
+
<Button variant="secondary" onClick={onEditCancel}>
|
|
52
|
+
{cancelWord}
|
|
53
|
+
</Button>
|
|
54
|
+
</ActionGroup>
|
|
55
|
+
</Form>
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export default MessageInput;
|
|
@@ -15,12 +15,15 @@ export interface QuickResponseProps {
|
|
|
15
15
|
quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
|
|
16
16
|
/** Callback when a response is clicked; used in feedback cards */
|
|
17
17
|
onSelect?: (id: string) => void;
|
|
18
|
+
/** Sets the quick responses to compact styling */
|
|
19
|
+
isCompact?: boolean;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
export const QuickResponse: React.FunctionComponent<QuickResponseProps> = ({
|
|
21
23
|
quickResponses,
|
|
22
24
|
quickResponseContainerProps = { numLabels: 5 },
|
|
23
|
-
onSelect
|
|
25
|
+
onSelect,
|
|
26
|
+
isCompact
|
|
24
27
|
}: QuickResponseProps) => {
|
|
25
28
|
const [selectedQuickResponse, setSelectedQuickResponse] = React.useState<string>();
|
|
26
29
|
|
|
@@ -42,6 +45,7 @@ export const QuickResponse: React.FunctionComponent<QuickResponseProps> = ({
|
|
|
42
45
|
key={id}
|
|
43
46
|
onClick={() => handleQuickResponseClick(id, onClick)}
|
|
44
47
|
className={`${id === selectedQuickResponse ? 'pf-chatbot__message-quick-response--selected' : ''} ${className ? className : ''}`}
|
|
48
|
+
isCompact={isCompact}
|
|
45
49
|
{...props}
|
|
46
50
|
>
|
|
47
51
|
{content}
|
|
@@ -49,6 +49,8 @@ export interface QuickStartTileProps {
|
|
|
49
49
|
prerequisiteWordPlural?: string;
|
|
50
50
|
/** Aria-label for the quick start description button */
|
|
51
51
|
quickStartButtonAriaLabel?: string;
|
|
52
|
+
/** Sets the tile to compact styling */
|
|
53
|
+
isCompact?: boolean;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
const QuickStartTile: React.FC<QuickStartTileProps> = ({
|
|
@@ -61,7 +63,8 @@ const QuickStartTile: React.FC<QuickStartTileProps> = ({
|
|
|
61
63
|
prerequisiteWord,
|
|
62
64
|
prerequisiteWordPlural,
|
|
63
65
|
quickStartButtonAriaLabel,
|
|
64
|
-
action
|
|
66
|
+
action,
|
|
67
|
+
isCompact
|
|
65
68
|
}) => {
|
|
66
69
|
const {
|
|
67
70
|
metadata: { name: id },
|
|
@@ -105,6 +108,7 @@ const QuickStartTile: React.FC<QuickStartTileProps> = ({
|
|
|
105
108
|
id={`${id}-chatbot-qs-tile`}
|
|
106
109
|
style={{ height: '100%' }}
|
|
107
110
|
data-testid={`chatbot-qs-card-${camelize(displayName)}`}
|
|
111
|
+
isCompact={isCompact}
|
|
108
112
|
>
|
|
109
113
|
<CardHeader
|
|
110
114
|
{...(action && {
|
|
@@ -58,3 +58,28 @@
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Information density styles
|
|
64
|
+
// ============================================================================
|
|
65
|
+
.pf-chatbot.pf-m-compact {
|
|
66
|
+
// Need to inline shorter text
|
|
67
|
+
.pf-chatbot__message-text {
|
|
68
|
+
.pf-v6-c-button.pf-m-link {
|
|
69
|
+
font-size: var(--pf-t--global--font--size--sm);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.pf-v6-c-content,
|
|
73
|
+
.pf-v6-c-content--small,
|
|
74
|
+
.pf-v6-c-content--blockquote,
|
|
75
|
+
p,
|
|
76
|
+
a {
|
|
77
|
+
--pf-v6-c-content--FontSize: var(--pf-t--global--font--size--sm);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.pf-v6-c-content--blockquote {
|
|
81
|
+
--pf-v6-c-content--blockquote--PaddingBlockStart: 0;
|
|
82
|
+
--pf-v6-c-content--blockquote--PaddingBlockEnd: 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
flex-direction: column;
|
|
12
12
|
gap: var(--pf-t--global--spacer--lg);
|
|
13
13
|
align-items: center;
|
|
14
|
+
text-align: center;
|
|
14
15
|
}
|
|
15
16
|
.pf-chatbot__feedback-complete-text {
|
|
16
17
|
display: flex;
|
|
@@ -26,9 +27,6 @@
|
|
|
26
27
|
align-items: center;
|
|
27
28
|
justify-content: center;
|
|
28
29
|
}
|
|
29
|
-
.pf-chatbot__feedback-complete-body {
|
|
30
|
-
text-align: center;
|
|
31
|
-
}
|
|
32
30
|
.pf-chatbot__feedback-complete-title {
|
|
33
31
|
font-family: var(--pf-t--global--font--family--heading);
|
|
34
32
|
font-size: var(--pf-t--global--font--size--lg);
|
|
@@ -51,3 +49,26 @@
|
|
|
51
49
|
.pf-chatbot__feedback-card-optional {
|
|
52
50
|
font-weight: initial;
|
|
53
51
|
}
|
|
52
|
+
|
|
53
|
+
// Compact styles
|
|
54
|
+
.pf-v6-c-card.pf-m-compact.pf-chatbot__feedback-card {
|
|
55
|
+
.pf-chatbot__feedback-card-form.pf-m-compact {
|
|
56
|
+
--pf-v6-c-form--GridGap: var(--pf-t--global--spacer--md);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.pf-v6-c-card.pf-m-compact.pf-chatbot__feedback-card.pf-chatbot__feedback-card-complete {
|
|
61
|
+
div.pf-chatbot__feedback-complete-body {
|
|
62
|
+
gap: var(--pf-t--global--spacer--sm);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.pf-chatbot__feedback-complete-image {
|
|
66
|
+
width: 40px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.pf-chatbot__feedback-card-complete-empty-header {
|
|
70
|
+
.pf-v6-c-card__header:first-child {
|
|
71
|
+
--pf-v6-c-card--first-child--PaddingBlockStart: var(--pf-t--global--spacer--sm);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -233,4 +233,17 @@ describe('UserFeedback', () => {
|
|
|
233
233
|
);
|
|
234
234
|
expect(screen.getByTestId('card').parentElement).not.toHaveFocus();
|
|
235
235
|
});
|
|
236
|
+
it('should handle isCompact', () => {
|
|
237
|
+
render(
|
|
238
|
+
<UserFeedback
|
|
239
|
+
timestamp="12/12/12"
|
|
240
|
+
onClose={jest.fn}
|
|
241
|
+
onSubmit={jest.fn}
|
|
242
|
+
quickResponses={MOCK_RESPONSES}
|
|
243
|
+
data-testid="card"
|
|
244
|
+
isCompact
|
|
245
|
+
/>
|
|
246
|
+
);
|
|
247
|
+
expect(screen.getByTestId('card')).toHaveClass('pf-m-compact');
|
|
248
|
+
});
|
|
236
249
|
});
|
|
@@ -71,6 +71,7 @@ const UserFeedback: React.FunctionComponent<UserFeedbackProps> = ({
|
|
|
71
71
|
id,
|
|
72
72
|
headingLevel: HeadingLevel = 'h1',
|
|
73
73
|
focusOnLoad = true,
|
|
74
|
+
isCompact,
|
|
74
75
|
...props
|
|
75
76
|
}: UserFeedbackProps) => {
|
|
76
77
|
const [selectedResponse, setSelectedResponse] = React.useState<string>();
|
|
@@ -86,7 +87,7 @@ const UserFeedback: React.FunctionComponent<UserFeedbackProps> = ({
|
|
|
86
87
|
return (
|
|
87
88
|
/* card does not have ref forwarding; hence wrapper div */
|
|
88
89
|
<div ref={divRef} id={id} tabIndex={0} aria-label={title}>
|
|
89
|
-
<Card className={`pf-chatbot__feedback-card ${className ? className : ''}`} {...props}>
|
|
90
|
+
<Card isCompact={isCompact} className={`pf-chatbot__feedback-card ${className ? className : ''}`} {...props}>
|
|
90
91
|
<CardHeader
|
|
91
92
|
actions={{
|
|
92
93
|
actions: <CloseButton onClose={onClose} ariaLabel={closeButtonAriaLabel} />
|
|
@@ -95,12 +96,13 @@ const UserFeedback: React.FunctionComponent<UserFeedbackProps> = ({
|
|
|
95
96
|
<HeadingLevel className="pf-chatbot__feedback-card-title">{title}</HeadingLevel>
|
|
96
97
|
</CardHeader>
|
|
97
98
|
<CardBody>
|
|
98
|
-
<Form className=
|
|
99
|
+
<Form className={`pf-chatbot__feedback-card-form ${isCompact ? 'pf-m-compact' : ''}`}>
|
|
99
100
|
{quickResponses && (
|
|
100
101
|
<QuickResponse
|
|
101
102
|
quickResponses={quickResponses}
|
|
102
103
|
quickResponseContainerProps={quickResponseContainerProps}
|
|
103
104
|
onSelect={(id) => setSelectedResponse(id)}
|
|
105
|
+
isCompact={isCompact}
|
|
104
106
|
/>
|
|
105
107
|
)}
|
|
106
108
|
{hasTextArea && (
|
|
@@ -252,4 +252,8 @@ describe('UserFeedbackComplete', () => {
|
|
|
252
252
|
render(<UserFeedbackComplete timestamp="12/12/12" data-testid="card" focusOnLoad={false} />);
|
|
253
253
|
expect(screen.getByTestId('card').parentElement).not.toHaveFocus();
|
|
254
254
|
});
|
|
255
|
+
it('should handle isCompact', () => {
|
|
256
|
+
render(<UserFeedbackComplete timestamp="12/12/12" data-testid="card" isCompact />);
|
|
257
|
+
expect(screen.getByTestId('card')).toHaveClass('pf-m-compact');
|
|
258
|
+
});
|
|
255
259
|
});
|
|
@@ -63,6 +63,7 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
63
63
|
isLiveRegion,
|
|
64
64
|
id,
|
|
65
65
|
focusOnLoad = true,
|
|
66
|
+
isCompact,
|
|
66
67
|
...props
|
|
67
68
|
}: UserFeedbackCompleteProps) => {
|
|
68
69
|
const [timedOut, setTimedOut] = React.useState(false);
|
|
@@ -143,8 +144,15 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
143
144
|
aria-label={title}
|
|
144
145
|
{...ouiaProps}
|
|
145
146
|
>
|
|
146
|
-
<Card
|
|
147
|
+
<Card
|
|
148
|
+
isCompact={isCompact}
|
|
149
|
+
className={`pf-chatbot__feedback-card pf-chatbot__feedback-card-complete${className ? ` ${className}` : ''}`}
|
|
150
|
+
{...props}
|
|
151
|
+
>
|
|
147
152
|
<CardHeader
|
|
153
|
+
className={
|
|
154
|
+
onClose ? 'pf-chatbot__feedback-card-complete-header' : 'pf-chatbot__feedback-card-complete-empty-header'
|
|
155
|
+
}
|
|
148
156
|
actions={
|
|
149
157
|
/* eslint-disable indent */
|
|
150
158
|
onClose
|
|
@@ -200,7 +208,7 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
|
|
|
200
208
|
</div>
|
|
201
209
|
<div className="pf-chatbot__feedback-complete-text">
|
|
202
210
|
<CardTitle className="pf-chatbot__feedback-complete-title">{title}</CardTitle>
|
|
203
|
-
<CardBody className={`pf-chatbot__feedback-complete-body`}>{body}</CardBody>
|
|
211
|
+
<CardBody className={`pf-chatbot__feedback-complete-card-body`}>{body}</CardBody>
|
|
204
212
|
</div>
|
|
205
213
|
</div>
|
|
206
214
|
</Card>
|
|
@@ -34,3 +34,13 @@
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Information density styles
|
|
40
|
+
// ============================================================================
|
|
41
|
+
.pf-v6-c-button.pf-chatbot__button--attach.pf-m-compact {
|
|
42
|
+
width: 1.5rem;
|
|
43
|
+
height: 1.5rem;
|
|
44
|
+
padding: var(--pf-t--global--spacer--sm);
|
|
45
|
+
align-items: center;
|
|
46
|
+
}
|
|
@@ -50,4 +50,8 @@ describe('Attach button', () => {
|
|
|
50
50
|
expect(input.files).toHaveLength(1);
|
|
51
51
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
52
52
|
});
|
|
53
|
+
it('should handle isCompact', () => {
|
|
54
|
+
render(<AttachButton isCompact data-testid="button" />);
|
|
55
|
+
expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
|
56
|
+
});
|
|
53
57
|
});
|
|
@@ -25,6 +25,7 @@ export interface AttachButtonProps extends ButtonProps {
|
|
|
25
25
|
tooltipContent?: string;
|
|
26
26
|
/** Test id applied to input */
|
|
27
27
|
inputTestId?: string;
|
|
28
|
+
isCompact?: boolean;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
@@ -36,6 +37,7 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
|
36
37
|
innerRef,
|
|
37
38
|
tooltipContent = 'Attach',
|
|
38
39
|
inputTestId,
|
|
40
|
+
isCompact,
|
|
39
41
|
...props
|
|
40
42
|
}: AttachButtonProps) => {
|
|
41
43
|
const { open, getInputProps } = useDropzone({
|
|
@@ -62,15 +64,16 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
|
|
|
62
64
|
<Button
|
|
63
65
|
variant="plain"
|
|
64
66
|
ref={innerRef}
|
|
65
|
-
className={`pf-chatbot__button--attach ${className ?? ''}`}
|
|
67
|
+
className={`pf-chatbot__button--attach ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
|
|
66
68
|
aria-label={props['aria-label'] || 'Attach button'}
|
|
67
69
|
isDisabled={isDisabled}
|
|
68
70
|
onClick={onClick ?? open}
|
|
69
71
|
icon={
|
|
70
|
-
<Icon iconSize=
|
|
72
|
+
<Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>
|
|
71
73
|
<PaperclipIcon />
|
|
72
74
|
</Icon>
|
|
73
75
|
}
|
|
76
|
+
size={isCompact ? 'sm' : undefined}
|
|
74
77
|
{...props}
|
|
75
78
|
/>
|
|
76
79
|
</Tooltip>
|
|
@@ -110,3 +110,20 @@
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
+
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Information density styles
|
|
116
|
+
// ============================================================================
|
|
117
|
+
.pf-chatbot__message-bar-input.pf-m-compact {
|
|
118
|
+
padding-block-start: 0;
|
|
119
|
+
padding-block-end: 0;
|
|
120
|
+
|
|
121
|
+
.pf-chatbot__message-textarea {
|
|
122
|
+
font-size: var(--pf-t--global--font--size--sm) !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.pf-chatbot__message-bar-actions {
|
|
126
|
+
padding-block-start: var(--pf-t--global--spacer--md);
|
|
127
|
+
padding-block-end: var(--pf-t--global--spacer--md);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -96,6 +96,12 @@ describe('Message bar', () => {
|
|
|
96
96
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
97
97
|
expect(spy).toHaveBeenCalledWith(expect.any(Object), 'A');
|
|
98
98
|
});
|
|
99
|
+
it('can use specified placeholder text', async () => {
|
|
100
|
+
render(<MessageBar onSendMessage={jest.fn} placeholder="test placeholder" />);
|
|
101
|
+
const input = screen.getByRole('textbox', { name: /test placeholder/i });
|
|
102
|
+
await userEvent.type(input, 'Hello world');
|
|
103
|
+
expect(input).toHaveTextContent('Hello world');
|
|
104
|
+
});
|
|
99
105
|
|
|
100
106
|
// Send button
|
|
101
107
|
// --------------------------------------------------------------------------
|
|
@@ -304,6 +310,13 @@ describe('Message bar', () => {
|
|
|
304
310
|
await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
|
|
305
311
|
expect(screen.getByRole('tooltip', { name: 'Not currently listening' })).toBeTruthy();
|
|
306
312
|
});
|
|
313
|
+
it('can customize the listening placeholder', async () => {
|
|
314
|
+
mockSpeechRecognition();
|
|
315
|
+
render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton listeningText="I am listening" />);
|
|
316
|
+
await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
|
|
317
|
+
const input = screen.getByRole('textbox', { name: /I am listening/i });
|
|
318
|
+
expect(input).toBeTruthy();
|
|
319
|
+
});
|
|
307
320
|
it('can handle buttonProps props appropriately for microphone', async () => {
|
|
308
321
|
mockSpeechRecognition();
|
|
309
322
|
render(
|