@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(
|