@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/Chatbot/Chatbot.scss
CHANGED
@@ -125,3 +125,10 @@
|
|
125
125
|
border-radius: var(--pf-t--global--border--radius--sharp);
|
126
126
|
}
|
127
127
|
}
|
128
|
+
|
129
|
+
// ============================================================================
|
130
|
+
// Information density styles
|
131
|
+
// ============================================================================
|
132
|
+
.pf-chatbot.pf-m-compact {
|
133
|
+
font-size: var(--pf-t--global--font--size--sm);
|
134
|
+
}
|
@@ -28,4 +28,13 @@ describe('Chatbot', () => {
|
|
28
28
|
render(<Chatbot isVisible={false}>Chatbot Content</Chatbot>);
|
29
29
|
expect(screen.queryByLabelText('Chatbot')).toBeFalsy();
|
30
30
|
});
|
31
|
+
|
32
|
+
it('should handle isCompact', () => {
|
33
|
+
render(
|
34
|
+
<Chatbot data-testid="chatbot" isVisible={true} isCompact>
|
35
|
+
Chatbot Content
|
36
|
+
</Chatbot>
|
37
|
+
);
|
38
|
+
expect(screen.getByTestId('chatbot')).toHaveClass('pf-m-compact');
|
39
|
+
});
|
31
40
|
});
|
package/src/Chatbot/Chatbot.tsx
CHANGED
@@ -17,6 +17,8 @@ export interface ChatbotProps {
|
|
17
17
|
innerRef?: React.Ref<HTMLDivElement>;
|
18
18
|
/** Custom aria label applied to focusable container */
|
19
19
|
ariaLabel?: string;
|
20
|
+
/** Density of information within the ChatBot */
|
21
|
+
isCompact?: boolean;
|
20
22
|
}
|
21
23
|
|
22
24
|
export enum ChatbotDisplayMode {
|
@@ -34,6 +36,7 @@ const ChatbotBase: React.FunctionComponent<ChatbotProps> = ({
|
|
34
36
|
className,
|
35
37
|
innerRef,
|
36
38
|
ariaLabel,
|
39
|
+
isCompact,
|
37
40
|
...props
|
38
41
|
}: ChatbotProps) => {
|
39
42
|
// Configure animations
|
@@ -44,7 +47,7 @@ const ChatbotBase: React.FunctionComponent<ChatbotProps> = ({
|
|
44
47
|
|
45
48
|
return (
|
46
49
|
<motion.div
|
47
|
-
className={`pf-chatbot pf-chatbot--${displayMode} ${!isVisible ? 'pf-chatbot--hidden' : ''} ${className ?? ''}`}
|
50
|
+
className={`pf-chatbot pf-chatbot--${displayMode} ${!isVisible ? 'pf-chatbot--hidden' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
|
48
51
|
variants={motionChatbot}
|
49
52
|
initial="hidden"
|
50
53
|
animate={isVisible ? 'visible' : 'hidden'}
|
@@ -9,8 +9,8 @@
|
|
9
9
|
// Drawer input
|
10
10
|
// ----------------------------------------------------------------------------
|
11
11
|
.pf-chatbot__input {
|
12
|
-
padding-inline-start: var(--pf-t--global--spacer--
|
13
|
-
padding-inline-end: var(--pf-t--global--spacer--
|
12
|
+
padding-inline-start: var(--pf-t--global--spacer--lg);
|
13
|
+
padding-inline-end: var(--pf-t--global--spacer--lg);
|
14
14
|
}
|
15
15
|
|
16
16
|
// Drawer menu
|
@@ -118,7 +118,6 @@
|
|
118
118
|
border-radius: var(--pf-t--global--border--radius--pill);
|
119
119
|
justify-content: center;
|
120
120
|
align-items: center;
|
121
|
-
border-radius: var(--pf-t--global--border--radius--small);
|
122
121
|
}
|
123
122
|
}
|
124
123
|
|
@@ -205,3 +204,39 @@
|
|
205
204
|
gap: var(--pf-t--global--spacer--sm);
|
206
205
|
align-self: stretch;
|
207
206
|
}
|
207
|
+
|
208
|
+
.pf-chatbot__history.pf-m-compact {
|
209
|
+
.pf-v6-c-drawer__main {
|
210
|
+
.pf-v6-c-drawer__panel {
|
211
|
+
--pf-v6-c-drawer__panel--PaddingBlockStart: var(--pf-t--global--spacer--sm);
|
212
|
+
--pf-v6-c-drawer__panel--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
|
213
|
+
--pf-v6-c-drawer__head--PaddingInlineStart: var(--pf-t--global--spacer--md);
|
214
|
+
--pf-v6-c-drawer__head--PaddingInlineEnd: var(--pf-t--global--spacer--md);
|
215
|
+
--pf-v6-c-drawer__panel--RowGap: var(--pf-t--global--spacer--md);
|
216
|
+
}
|
217
|
+
|
218
|
+
.pf-v6-c-drawer__body {
|
219
|
+
--pf-v6-c-drawer__panel__body--PaddingInlineStart: var(--pf-t--global--spacer--md);
|
220
|
+
--pf-v6-c-drawer__panel__body--PaddingInlineEnd: var(--pf-t--global--spacer--md);
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
.pf-chatbot__menu-item {
|
225
|
+
font-size: var(--pf-t--global--font--size--body--md);
|
226
|
+
}
|
227
|
+
|
228
|
+
.pf-v6-c-drawer__head {
|
229
|
+
--pf-v6-c-drawer__head--PaddingInlineStart: var(--pf-t--global--spacer--lg);
|
230
|
+
--pf-v6-c-drawer__head--PaddingInlineEnd: var(--pf-t--global--spacer--lg);
|
231
|
+
}
|
232
|
+
.pf-v6-c-drawer__close {
|
233
|
+
.pf-v6-c-button {
|
234
|
+
width: 2rem;
|
235
|
+
height: 2rem;
|
236
|
+
--pf-v6-c-button--m-plain--PaddingInlineEnd: var(--pf-t--global--spacer--xs);
|
237
|
+
--pf-v6-c-button--m-plain--PaddingInlineStart: var(--pf-t--global--spacer--xs);
|
238
|
+
--pf-v6-c-button--PaddingBlockStart: var(--pf-t--global--spacer--xs);
|
239
|
+
--pf-v6-c-button--PaddingBlockEnd: var(--pf-t--global--spacer--xs);
|
240
|
+
}
|
241
|
+
}
|
242
|
+
}
|
@@ -5,6 +5,7 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
5
5
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
6
6
|
import ChatbotConversationHistoryNav, { Conversation } from './ChatbotConversationHistoryNav';
|
7
7
|
import { EmptyStateStatus, Spinner } from '@patternfly/react-core';
|
8
|
+
import { OutlinedCommentsIcon, SearchIcon } from '@patternfly/react-icons';
|
8
9
|
|
9
10
|
const ERROR = {
|
10
11
|
bodyText: (
|
@@ -21,6 +22,18 @@ const ERROR = {
|
|
21
22
|
onClick: () => alert('Clicked Reload')
|
22
23
|
};
|
23
24
|
|
25
|
+
const NO_RESULTS = {
|
26
|
+
bodyText: 'Adjust your search query and try again. Check your spelling or try a more general term.',
|
27
|
+
titleText: 'No results found',
|
28
|
+
icon: SearchIcon
|
29
|
+
};
|
30
|
+
|
31
|
+
const EMPTY_STATE = {
|
32
|
+
bodyText: 'Access timely assistance by starting a conversation with an AI model.',
|
33
|
+
titleText: 'Start a new chat',
|
34
|
+
icon: OutlinedCommentsIcon
|
35
|
+
};
|
36
|
+
|
24
37
|
const ERROR_WITHOUT_BUTTON = {
|
25
38
|
bodyText: (
|
26
39
|
<>
|
@@ -362,4 +375,62 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
362
375
|
);
|
363
376
|
expect(screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
|
364
377
|
});
|
378
|
+
|
379
|
+
it('should accept emptyState', () => {
|
380
|
+
render(
|
381
|
+
<ChatbotConversationHistoryNav
|
382
|
+
onDrawerToggle={onDrawerToggle}
|
383
|
+
isDrawerOpen={true}
|
384
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
385
|
+
setIsDrawerOpen={jest.fn()}
|
386
|
+
reverseButtonOrder={false}
|
387
|
+
handleTextInputChange={jest.fn()}
|
388
|
+
conversations={initialConversations}
|
389
|
+
emptyState={EMPTY_STATE}
|
390
|
+
/>
|
391
|
+
);
|
392
|
+
expect(
|
393
|
+
screen.getByRole('dialog', {
|
394
|
+
name: /Start a new chat Access timely assistance by starting a conversation with an AI model./i
|
395
|
+
})
|
396
|
+
).toBeTruthy();
|
397
|
+
});
|
398
|
+
|
399
|
+
it('should accept no results state', () => {
|
400
|
+
render(
|
401
|
+
<ChatbotConversationHistoryNav
|
402
|
+
onDrawerToggle={onDrawerToggle}
|
403
|
+
isDrawerOpen={true}
|
404
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
405
|
+
setIsDrawerOpen={jest.fn()}
|
406
|
+
reverseButtonOrder={false}
|
407
|
+
handleTextInputChange={jest.fn()}
|
408
|
+
conversations={initialConversations}
|
409
|
+
noResultsState={NO_RESULTS}
|
410
|
+
/>
|
411
|
+
);
|
412
|
+
expect(
|
413
|
+
screen.getByRole('dialog', {
|
414
|
+
name: /No results found Adjust your search query and try again. Check your spelling or try a more general term./i
|
415
|
+
})
|
416
|
+
).toBeTruthy();
|
417
|
+
});
|
418
|
+
|
419
|
+
it('should handle isCompact', () => {
|
420
|
+
render(
|
421
|
+
<ChatbotConversationHistoryNav
|
422
|
+
onDrawerToggle={onDrawerToggle}
|
423
|
+
isDrawerOpen={true}
|
424
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
425
|
+
setIsDrawerOpen={jest.fn()}
|
426
|
+
reverseButtonOrder={false}
|
427
|
+
handleTextInputChange={jest.fn()}
|
428
|
+
conversations={initialConversations}
|
429
|
+
noResultsState={NO_RESULTS}
|
430
|
+
isCompact
|
431
|
+
data-testid="drawer"
|
432
|
+
/>
|
433
|
+
);
|
434
|
+
expect(screen.getByTestId('drawer')).toHaveClass('pf-m-compact');
|
435
|
+
});
|
365
436
|
});
|
@@ -112,6 +112,12 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
112
112
|
loadingState?: SkeletonProps;
|
113
113
|
/** Content to show in error state. Error state will appear once content is passed in. */
|
114
114
|
errorState?: HistoryEmptyStateProps;
|
115
|
+
/** Content to show in empty state. Empty state will appear once content is passed in. */
|
116
|
+
emptyState?: HistoryEmptyStateProps;
|
117
|
+
/** Content to show in no results state. No results state will appear once content is passed in. */
|
118
|
+
noResultsState?: HistoryEmptyStateProps;
|
119
|
+
/** Sets drawer to compact styling. */
|
120
|
+
isCompact?: boolean;
|
115
121
|
}
|
116
122
|
|
117
123
|
export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps> = ({
|
@@ -141,6 +147,9 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
141
147
|
isLoading,
|
142
148
|
loadingState,
|
143
149
|
errorState,
|
150
|
+
emptyState,
|
151
|
+
noResultsState,
|
152
|
+
isCompact,
|
144
153
|
...props
|
145
154
|
}: ChatbotConversationHistoryNavProps) => {
|
146
155
|
const drawerRef = React.useRef<HTMLDivElement>(null);
|
@@ -210,6 +219,14 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
210
219
|
if (errorState) {
|
211
220
|
return <HistoryEmptyState {...errorState} />;
|
212
221
|
}
|
222
|
+
|
223
|
+
if (emptyState) {
|
224
|
+
return <HistoryEmptyState {...emptyState} />;
|
225
|
+
}
|
226
|
+
|
227
|
+
if (noResultsState) {
|
228
|
+
return <HistoryEmptyState {...noResultsState} />;
|
229
|
+
}
|
213
230
|
return (
|
214
231
|
<Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId} {...menuProps}>
|
215
232
|
<MenuContent>{buildMenu()}</MenuContent>
|
@@ -242,7 +259,11 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
242
259
|
{...drawerActionsProps}
|
243
260
|
>
|
244
261
|
<DrawerCloseButton onClick={onDrawerToggle} {...drawerCloseButtonProps} />
|
245
|
-
{onNewChat &&
|
262
|
+
{onNewChat && (
|
263
|
+
<Button size={isCompact ? 'sm' : undefined} onClick={onNewChat}>
|
264
|
+
{newChatButtonText}
|
265
|
+
</Button>
|
266
|
+
)}
|
246
267
|
</DrawerActions>
|
247
268
|
</DrawerHead>
|
248
269
|
{isLoading ? <LoadingState {...loadingState} /> : renderDrawerContent()}
|
@@ -273,7 +294,7 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
|
|
273
294
|
|
274
295
|
return (
|
275
296
|
<Drawer
|
276
|
-
className=
|
297
|
+
className={`pf-chatbot__history ${isCompact ? 'pf-m-compact' : ''}`}
|
277
298
|
isExpanded={isDrawerOpen}
|
278
299
|
onExpand={onExpand}
|
279
300
|
position="start"
|
@@ -57,3 +57,8 @@
|
|
57
57
|
padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
|
58
58
|
}
|
59
59
|
}
|
60
|
+
|
61
|
+
.pf-chatbot__footer.pf-m-compact .pf-chatbot__footer-container {
|
62
|
+
padding: 0 var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--sm);
|
63
|
+
row-gap: var(--pf-t--global--spacer--sm);
|
64
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { render, screen } from '@testing-library/react';
|
3
3
|
import ChatbotFooter from './ChatbotFooter';
|
4
|
+
import '@testing-library/jest-dom';
|
4
5
|
|
5
6
|
describe('ChatbotFooter', () => {
|
6
7
|
it('should render ChatbotFooter with children', () => {
|
@@ -12,4 +13,13 @@ describe('ChatbotFooter', () => {
|
|
12
13
|
const { container } = render(<ChatbotFooter className="custom-class">Chatbot Content</ChatbotFooter>);
|
13
14
|
expect(container.querySelector('.custom-class')).toBeTruthy();
|
14
15
|
});
|
16
|
+
|
17
|
+
it('should handle isCompact', () => {
|
18
|
+
render(
|
19
|
+
<ChatbotFooter className="custom-class" isCompact data-testid="footer">
|
20
|
+
Chatbot Content
|
21
|
+
</ChatbotFooter>
|
22
|
+
);
|
23
|
+
expect(screen.getByTestId('footer')).toHaveClass('pf-m-compact');
|
24
|
+
});
|
15
25
|
});
|
@@ -17,14 +17,16 @@ export interface ChatbotFooterProps extends React.HTMLProps<HTMLDivElement> {
|
|
17
17
|
children?: React.ReactNode;
|
18
18
|
/** Custom classname for the Footer component */
|
19
19
|
className?: string;
|
20
|
+
isCompact?: boolean;
|
20
21
|
}
|
21
22
|
|
22
23
|
export const ChatbotFooter: React.FunctionComponent<ChatbotFooterProps> = ({
|
23
24
|
children,
|
24
25
|
className,
|
26
|
+
isCompact,
|
25
27
|
...props
|
26
28
|
}: ChatbotFooterProps) => (
|
27
|
-
<div className={`pf-chatbot__footer ${className ?? ''}`} {...props}>
|
29
|
+
<div className={`pf-chatbot__footer ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`} {...props}>
|
28
30
|
<Divider />
|
29
31
|
<div className="pf-chatbot__footer-container">{children}</div>
|
30
32
|
</div>
|
@@ -137,3 +137,28 @@
|
|
137
137
|
:where(.pf-v6-theme-dark) .show-dark .pf-m-picture {
|
138
138
|
display: inline-flex;
|
139
139
|
}
|
140
|
+
|
141
|
+
// ============================================================================
|
142
|
+
// Information density styles
|
143
|
+
// ============================================================================
|
144
|
+
.pf-chatbot.pf-m-compact {
|
145
|
+
.pf-chatbot__header {
|
146
|
+
gap: var(--pf-t--global--spacer--sm);
|
147
|
+
padding: var(--pf-t--global--spacer--sm);
|
148
|
+
}
|
149
|
+
|
150
|
+
.pf-chatbot__header .pf-chatbot__title img {
|
151
|
+
max-height: 24px;
|
152
|
+
vertical-align: middle;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
.pf-v6-c-menu-toggle.pf-chatbot__button--toggle-options.pf-m-compact,
|
157
|
+
.pf-chatbot__button--toggle-menu.pf-m-compact {
|
158
|
+
width: 2rem;
|
159
|
+
height: 2rem;
|
160
|
+
}
|
161
|
+
|
162
|
+
.pf-chatbot__header .pf-chatbot__actions .pf-v6-c-menu-toggle.pf-m-secondary.pf-m-compact {
|
163
|
+
width: initial;
|
164
|
+
}
|
@@ -14,7 +14,7 @@ export const ChatbotHeader: React.FunctionComponent<ChatbotHeaderProps> = ({
|
|
14
14
|
children
|
15
15
|
}: ChatbotHeaderProps) => (
|
16
16
|
<div className="pf-chatbot__header-container">
|
17
|
-
<div className={`pf-chatbot__header ${className
|
17
|
+
<div className={`pf-chatbot__header${className ? ` ${className}` : ''}`}>{children}</div>
|
18
18
|
<Divider className="pf-chatbot__header__divider" />
|
19
19
|
</div>
|
20
20
|
);
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { fireEvent, render, screen } from '@testing-library/react';
|
3
3
|
import { ChatbotHeaderCloseButton } from './ChatbotHeaderCloseButton';
|
4
|
+
import '@testing-library/jest-dom';
|
4
5
|
|
5
6
|
describe('ChatbotHeaderCloseButton', () => {
|
6
7
|
it('should render ChatbotHeaderCloseButton', () => {
|
@@ -17,4 +18,9 @@ describe('ChatbotHeaderCloseButton', () => {
|
|
17
18
|
fireEvent.click(screen.getByRole('button', { name: 'Close' }));
|
18
19
|
expect(onClick).toHaveBeenCalled();
|
19
20
|
});
|
21
|
+
|
22
|
+
it('should render button with isCompact', () => {
|
23
|
+
render(<ChatbotHeaderCloseButton data-testid="close-button" onClick={jest.fn()} isCompact />);
|
24
|
+
expect(screen.getByTestId('close-button')).toHaveClass('pf-m-compact');
|
25
|
+
});
|
20
26
|
});
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
3
|
+
import { Button, ButtonProps, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
4
4
|
import { CloseIcon } from '@patternfly/react-icons';
|
5
5
|
|
6
|
-
export interface ChatbotHeaderCloseButtonProps {
|
6
|
+
export interface ChatbotHeaderCloseButtonProps extends ButtonProps {
|
7
7
|
/** Callback function for when button is clicked */
|
8
8
|
onClick: () => void;
|
9
9
|
/** Custom classname for the header component */
|
@@ -16,6 +16,8 @@ export interface ChatbotHeaderCloseButtonProps {
|
|
16
16
|
innerRef?: React.Ref<HTMLButtonElement>;
|
17
17
|
/** Content used in tooltip */
|
18
18
|
tooltipContent?: string;
|
19
|
+
/** Sets button to compact styling. */
|
20
|
+
isCompact?: boolean;
|
19
21
|
}
|
20
22
|
|
21
23
|
const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseButtonProps> = ({
|
@@ -24,9 +26,11 @@ const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseBu
|
|
24
26
|
tooltipProps,
|
25
27
|
menuAriaLabel = 'Close',
|
26
28
|
innerRef,
|
27
|
-
tooltipContent = 'Close'
|
29
|
+
tooltipContent = 'Close',
|
30
|
+
isCompact,
|
31
|
+
...props
|
28
32
|
}: ChatbotHeaderCloseButtonProps) => (
|
29
|
-
<div className={`pf-chatbot__menu ${className}`}>
|
33
|
+
<div className={`pf-chatbot__menu${className ? ` ${className}` : ''}`}>
|
30
34
|
<Tooltip
|
31
35
|
content={tooltipContent}
|
32
36
|
position="bottom"
|
@@ -35,16 +39,18 @@ const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseBu
|
|
35
39
|
{...tooltipProps}
|
36
40
|
>
|
37
41
|
<Button
|
38
|
-
className=
|
42
|
+
className={`pf-chatbot__button--toggle-menu ${isCompact ? 'pf-m-compact' : ''}`}
|
39
43
|
variant="plain"
|
40
44
|
onClick={onClick}
|
41
45
|
aria-label={menuAriaLabel}
|
42
46
|
ref={innerRef}
|
43
47
|
icon={
|
44
|
-
<Icon size=
|
48
|
+
<Icon size={isCompact ? 'lg' : 'xl'} isInline>
|
45
49
|
<CloseIcon />
|
46
50
|
</Icon>
|
47
51
|
}
|
52
|
+
size={isCompact ? 'sm' : undefined}
|
53
|
+
{...props}
|
48
54
|
/>
|
49
55
|
</Tooltip>
|
50
56
|
</div>
|
@@ -10,6 +10,8 @@ export interface ChatbotHeaderMainProps {
|
|
10
10
|
export const ChatbotHeaderMain: React.FunctionComponent<ChatbotHeaderMainProps> = ({
|
11
11
|
className,
|
12
12
|
children
|
13
|
-
}: ChatbotHeaderMainProps) =>
|
13
|
+
}: ChatbotHeaderMainProps) => (
|
14
|
+
<div className={`pf-chatbot__header-main${className ? ` ${className}` : ''}`}>{children}</div>
|
15
|
+
);
|
14
16
|
|
15
17
|
export default ChatbotHeaderMain;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { fireEvent, render, screen } from '@testing-library/react';
|
3
3
|
import { ChatbotHeaderMenu } from './ChatbotHeaderMenu';
|
4
|
+
import '@testing-library/jest-dom';
|
4
5
|
|
5
6
|
describe('ChatbotHeaderMenu', () => {
|
6
7
|
it('should render ChatbotHeaderMenu with custom class', () => {
|
@@ -16,4 +17,11 @@ describe('ChatbotHeaderMenu', () => {
|
|
16
17
|
|
17
18
|
expect(onMenuToggle).toHaveBeenCalled();
|
18
19
|
});
|
20
|
+
|
21
|
+
it('should handle isCompact', () => {
|
22
|
+
render(
|
23
|
+
<ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={jest.fn()} isCompact data-testid="button" />
|
24
|
+
);
|
25
|
+
expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
26
|
+
});
|
19
27
|
});
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
3
|
+
import { Button, ButtonProps, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
|
4
4
|
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
5
5
|
|
6
|
-
export interface ChatbotHeaderMenuProps {
|
6
|
+
export interface ChatbotHeaderMenuProps extends ButtonProps {
|
7
7
|
/** Callback function to attach to menu toggle on top right of chatbot header. */
|
8
8
|
onMenuToggle: () => void;
|
9
9
|
/** Custom classname for the header component */
|
@@ -16,6 +16,7 @@ export interface ChatbotHeaderMenuProps {
|
|
16
16
|
innerRef?: React.Ref<HTMLButtonElement>;
|
17
17
|
/** Content used in tooltip */
|
18
18
|
tooltipContent?: string;
|
19
|
+
isCompact?: boolean;
|
19
20
|
}
|
20
21
|
|
21
22
|
const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = ({
|
@@ -24,7 +25,9 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
|
|
24
25
|
tooltipProps,
|
25
26
|
menuAriaLabel = 'Toggle menu',
|
26
27
|
innerRef,
|
27
|
-
tooltipContent = 'Menu'
|
28
|
+
tooltipContent = 'Menu',
|
29
|
+
isCompact,
|
30
|
+
...props
|
28
31
|
}: ChatbotHeaderMenuProps) => (
|
29
32
|
<div className={`pf-chatbot__menu ${className}`}>
|
30
33
|
<Tooltip
|
@@ -35,16 +38,18 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
|
|
35
38
|
{...tooltipProps}
|
36
39
|
>
|
37
40
|
<Button
|
38
|
-
className=
|
41
|
+
className={`pf-chatbot__button--toggle-menu ${isCompact ? 'pf-m-compact' : ''}`}
|
39
42
|
variant="plain"
|
40
43
|
onClick={onMenuToggle}
|
41
44
|
aria-label={menuAriaLabel}
|
42
45
|
ref={innerRef}
|
43
46
|
icon={
|
44
|
-
<Icon size=
|
47
|
+
<Icon size={isCompact ? 'lg' : 'xl'} isInline>
|
45
48
|
<BarsIcon />
|
46
49
|
</Icon>
|
47
50
|
}
|
51
|
+
size={isCompact ? 'sm' : undefined}
|
52
|
+
{...props}
|
48
53
|
/>
|
49
54
|
</Tooltip>
|
50
55
|
</div>
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { DropdownItem } from '@patternfly/react-core';
|
3
3
|
import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
|
4
4
|
import { ChatbotHeaderOptionsDropdown } from './ChatbotHeaderOptionsDropdown';
|
5
|
+
import '@testing-library/jest-dom';
|
5
6
|
|
6
7
|
describe('ChatbotHeaderOptionsDropdown', () => {
|
7
8
|
const dropdownItems = (
|
@@ -42,4 +43,9 @@ describe('ChatbotHeaderOptionsDropdown', () => {
|
|
42
43
|
expect(onSelect).toHaveBeenCalled();
|
43
44
|
});
|
44
45
|
});
|
46
|
+
|
47
|
+
it('should handle isCompact', () => {
|
48
|
+
render(<ChatbotHeaderOptionsDropdown isCompact>{dropdownItems}</ChatbotHeaderOptionsDropdown>);
|
49
|
+
expect(screen.getByRole('button', { name: 'Chatbot options' })).toHaveClass('pf-m-compact');
|
50
|
+
});
|
45
51
|
});
|
@@ -20,6 +20,7 @@ export interface ChatbotHeaderOptionsDropdownProps extends Omit<DropdownProps, '
|
|
20
20
|
tooltipProps?: TooltipProps;
|
21
21
|
/** Aria label for menu toggle */
|
22
22
|
menuToggleAriaLabel?: string;
|
23
|
+
isCompact?: boolean;
|
23
24
|
}
|
24
25
|
|
25
26
|
export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeaderOptionsDropdownProps> = ({
|
@@ -28,6 +29,7 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
|
|
28
29
|
onSelect,
|
29
30
|
tooltipProps,
|
30
31
|
menuToggleAriaLabel = 'Chatbot options',
|
32
|
+
isCompact,
|
31
33
|
...props
|
32
34
|
}: ChatbotHeaderOptionsDropdownProps) => {
|
33
35
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
|
@@ -42,17 +44,18 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
|
|
42
44
|
{...tooltipProps}
|
43
45
|
>
|
44
46
|
<MenuToggle
|
45
|
-
className=
|
47
|
+
className={`pf-chatbot__button--toggle-options ${isCompact ? 'pf-m-compact' : ''}`}
|
46
48
|
variant="plain"
|
47
49
|
aria-label={menuToggleAriaLabel}
|
48
50
|
ref={toggleRef}
|
49
51
|
icon={
|
50
|
-
<Icon
|
52
|
+
<Icon size={isCompact ? 'lg' : 'xl'} isInline>
|
51
53
|
<EllipsisIcon />
|
52
54
|
</Icon>
|
53
55
|
}
|
54
56
|
isExpanded={isOptionsMenuOpen}
|
55
57
|
onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
|
58
|
+
size={isCompact ? 'sm' : undefined}
|
56
59
|
/>
|
57
60
|
</Tooltip>
|
58
61
|
);
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { DropdownItem } from '@patternfly/react-core';
|
3
3
|
import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
|
4
4
|
import { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
|
5
|
+
import '@testing-library/jest-dom';
|
5
6
|
|
6
7
|
describe('ChatbotHeaderSelectorDropdown', () => {
|
7
8
|
const dropdownItems = (
|
@@ -40,4 +41,13 @@ describe('ChatbotHeaderSelectorDropdown', () => {
|
|
40
41
|
expect(onSelect).toHaveBeenCalled();
|
41
42
|
});
|
42
43
|
});
|
44
|
+
|
45
|
+
it('should handle isCompact', () => {
|
46
|
+
render(
|
47
|
+
<ChatbotHeaderSelectorDropdown value="Option 1" isCompact>
|
48
|
+
{dropdownItems}
|
49
|
+
</ChatbotHeaderSelectorDropdown>
|
50
|
+
);
|
51
|
+
expect(screen.getByRole('button', { name: /Select model/i })).toHaveClass('pf-m-compact');
|
52
|
+
});
|
43
53
|
});
|
@@ -15,6 +15,7 @@ export interface ChatbotHeaderSelectorDropdownProps extends Omit<DropdownProps,
|
|
15
15
|
menuToggleAriaLabel?: string;
|
16
16
|
/** Text displayed in Tooltip wrapping the display mode dropdown */
|
17
17
|
tooltipContent?: string;
|
18
|
+
isCompact?: boolean;
|
18
19
|
}
|
19
20
|
|
20
21
|
export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeaderSelectorDropdownProps> = ({
|
@@ -25,6 +26,7 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
|
|
25
26
|
tooltipProps,
|
26
27
|
tooltipContent = 'Select model',
|
27
28
|
menuToggleAriaLabel,
|
29
|
+
isCompact,
|
28
30
|
...props
|
29
31
|
}: ChatbotHeaderSelectorDropdownProps) => {
|
30
32
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
|
@@ -45,6 +47,8 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
|
|
45
47
|
ref={toggleRef}
|
46
48
|
isExpanded={isOptionsMenuOpen}
|
47
49
|
onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
|
50
|
+
size={isCompact ? 'sm' : undefined}
|
51
|
+
className={`${isCompact ? 'pf-m-compact' : ''}`}
|
48
52
|
>
|
49
53
|
{value}
|
50
54
|
</MenuToggle>
|
@@ -14,10 +14,7 @@
|
|
14
14
|
.pf-v6-c-modal-box__title {
|
15
15
|
--pf-v6-c-modal-box__title--FontSize: var(--pf-t--global--font--size--heading--h3);
|
16
16
|
}
|
17
|
-
|
18
|
-
.pf-v6-c-button.pf-m-link.pf-m-block {
|
19
|
-
--pf-v6-c-button--FontWeight: var(--pf-t--global--font--weight--body--bold);
|
20
|
-
}
|
17
|
+
|
21
18
|
.pf-v6-c-modal-box__footer {
|
22
19
|
padding-block-start: var(--pf-t--global--spacer--xl);
|
23
20
|
padding-block-end: var(--pf-t--global--spacer--xl);
|
@@ -91,3 +88,17 @@
|
|
91
88
|
.pf-v6-c-backdrop.pf-chatbot__backdrop {
|
92
89
|
position: absolute;
|
93
90
|
}
|
91
|
+
|
92
|
+
// ============================================================================
|
93
|
+
// Compact
|
94
|
+
// ============================================================================
|
95
|
+
.pf-chatbot__chatbot-modal.pf-m-compact {
|
96
|
+
.pf-v6-c-modal-box__header {
|
97
|
+
padding-block-end: 0;
|
98
|
+
}
|
99
|
+
|
100
|
+
.pf-v6-c-modal-box__footer {
|
101
|
+
padding-block-start: var(--pf-t--global--spacer--lg);
|
102
|
+
padding-block-end: var(--pf-t--global--spacer--lg);
|
103
|
+
}
|
104
|
+
}
|