@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
|
@@ -18,17 +18,13 @@ const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
|
18
18
|
require("@testing-library/jest-dom");
|
|
19
19
|
const SourcesCard_1 = __importDefault(require("./SourcesCard"));
|
|
20
20
|
describe('SourcesCard', () => {
|
|
21
|
-
it('should render card', () => {
|
|
22
|
-
const { container } = (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ link: '' }] }));
|
|
23
|
-
expect(container).toMatchSnapshot();
|
|
24
|
-
});
|
|
25
21
|
it('should render card correctly if one source with only a link is passed in', () => {
|
|
26
22
|
(0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ link: '' }] }));
|
|
27
23
|
expect(react_2.screen.getByText('1 source')).toBeTruthy();
|
|
28
24
|
expect(react_2.screen.getByText('Source 1')).toBeTruthy();
|
|
29
25
|
// no buttons or navigation when there is only 1 source
|
|
30
26
|
expect(react_2.screen.queryByRole('button')).toBeFalsy();
|
|
31
|
-
expect(react_2.screen.queryByText('1
|
|
27
|
+
expect(react_2.screen.queryByText('1/1')).toBeFalsy();
|
|
32
28
|
});
|
|
33
29
|
it('should render card correctly if one source with a title is passed in', () => {
|
|
34
30
|
(0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ title: 'How to make an apple pie', link: '' }] }));
|
|
@@ -53,7 +49,7 @@ describe('SourcesCard', () => {
|
|
|
53
49
|
] }));
|
|
54
50
|
expect(react_2.screen.getByText('2 sources')).toBeTruthy();
|
|
55
51
|
expect(react_2.screen.getByText('How to make an apple pie')).toBeTruthy();
|
|
56
|
-
expect(react_2.screen.getByText('1
|
|
52
|
+
expect(react_2.screen.getByText('1/2')).toBeTruthy();
|
|
57
53
|
react_2.screen.getByRole('button', { name: /Go to previous page/i });
|
|
58
54
|
react_2.screen.getByRole('button', { name: /Go to next page/i });
|
|
59
55
|
});
|
|
@@ -63,12 +59,12 @@ describe('SourcesCard', () => {
|
|
|
63
59
|
{ title: 'How to make cookies', link: '' }
|
|
64
60
|
] }));
|
|
65
61
|
expect(react_2.screen.getByText('How to make an apple pie')).toBeTruthy();
|
|
66
|
-
expect(react_2.screen.getByText('1
|
|
62
|
+
expect(react_2.screen.getByText('1/2')).toBeTruthy();
|
|
67
63
|
expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled();
|
|
68
64
|
yield user_event_1.default.click(react_2.screen.getByRole('button', { name: /Go to next page/i }));
|
|
69
65
|
expect(react_2.screen.queryByText('How to make an apple pie')).toBeFalsy();
|
|
70
66
|
expect(react_2.screen.getByText('How to make cookies')).toBeTruthy();
|
|
71
|
-
expect(react_2.screen.getByText('2
|
|
67
|
+
expect(react_2.screen.getByText('2/2')).toBeTruthy();
|
|
72
68
|
expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeEnabled();
|
|
73
69
|
expect(react_2.screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled();
|
|
74
70
|
}));
|
|
@@ -88,13 +84,6 @@ describe('SourcesCard', () => {
|
|
|
88
84
|
expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled();
|
|
89
85
|
expect(react_2.screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled();
|
|
90
86
|
});
|
|
91
|
-
it('should change ofWord appropriately', () => {
|
|
92
|
-
(0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
|
|
93
|
-
{ title: 'How to make an apple pie', link: '' },
|
|
94
|
-
{ title: 'How to make cookies', link: '' }
|
|
95
|
-
], ofWord: 'de' }));
|
|
96
|
-
expect(react_2.screen.getByText('1 de 2')).toBeTruthy();
|
|
97
|
-
});
|
|
98
87
|
it('should render navigation aria label appropriately', () => {
|
|
99
88
|
(0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
|
|
100
89
|
{ title: 'How to make an apple pie', link: '' },
|
|
@@ -164,4 +153,25 @@ describe('SourcesCard', () => {
|
|
|
164
153
|
yield user_event_1.default.click(react_2.screen.getByRole('button', { name: /Go to previous page/i }));
|
|
165
154
|
expect(spy).toHaveBeenCalledTimes(2);
|
|
166
155
|
}));
|
|
156
|
+
it('should handle showMore appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
157
|
+
(0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
|
|
158
|
+
{
|
|
159
|
+
title: 'Getting started with Red Hat OpenShift',
|
|
160
|
+
link: '#',
|
|
161
|
+
body: 'Red Hat OpenShift on IBM Cloud is a managed offering to create your own cluster of compute hosts where you can deploy and manage containerized apps on IBM Cloud ...',
|
|
162
|
+
hasShowMore: true
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
title: 'Azure Red Hat OpenShift documentation',
|
|
166
|
+
link: '#',
|
|
167
|
+
body: 'Microsoft Azure Red Hat OpenShift allows you to deploy a production ready Red Hat OpenShift cluster in Azure ...'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
title: 'OKD Documentation: Home',
|
|
171
|
+
link: '#',
|
|
172
|
+
body: 'OKD is a distribution of Kubernetes optimized for continuous application development and multi-tenant deployment. OKD also serves as the upstream code base upon ...'
|
|
173
|
+
}
|
|
174
|
+
] }));
|
|
175
|
+
expect(react_2.screen.getByRole('region')).toHaveAttribute('class', 'pf-v6-c-expandable-section__content');
|
|
176
|
+
}));
|
|
167
177
|
});
|
|
@@ -28,6 +28,8 @@ export interface TermsOfUseProps extends ModalProps {
|
|
|
28
28
|
innerRef?: React.Ref<HTMLDivElement>;
|
|
29
29
|
/** OuiaID applied to modal */
|
|
30
30
|
ouiaId?: string;
|
|
31
|
+
/** Sets modal to compact styling. */
|
|
32
|
+
isCompact?: boolean;
|
|
31
33
|
}
|
|
32
34
|
export declare const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps>;
|
|
33
35
|
declare const TermsOfUse: React.ForwardRefExoticComponent<Omit<TermsOfUseProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -23,7 +23,7 @@ const react_core_1 = require("@patternfly/react-core");
|
|
|
23
23
|
const Chatbot_1 = require("../Chatbot");
|
|
24
24
|
const ChatbotModal_1 = __importDefault(require("../ChatbotModal/ChatbotModal"));
|
|
25
25
|
const TermsOfUseBase = (_a) => {
|
|
26
|
-
var { handleModalToggle, isModalOpen, onPrimaryAction, onSecondaryAction, primaryActionBtn = 'Accept', secondaryActionBtn = 'Decline', title = 'Terms of use', image, altText, displayMode = Chatbot_1.ChatbotDisplayMode.default, className, children, innerRef, ouiaId = 'TermsOfUse' } = _a, props = __rest(_a, ["handleModalToggle", "isModalOpen", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "image", "altText", "displayMode", "className", "children", "innerRef", "ouiaId"]);
|
|
26
|
+
var { handleModalToggle, isModalOpen, onPrimaryAction, onSecondaryAction, primaryActionBtn = 'Accept', secondaryActionBtn = 'Decline', title = 'Terms of use', image, altText, displayMode = Chatbot_1.ChatbotDisplayMode.default, className, children, innerRef, ouiaId = 'TermsOfUse', isCompact } = _a, props = __rest(_a, ["handleModalToggle", "isModalOpen", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "image", "altText", "displayMode", "className", "children", "innerRef", "ouiaId", "isCompact"]);
|
|
27
27
|
const handlePrimaryAction = (_event) => {
|
|
28
28
|
handleModalToggle(_event);
|
|
29
29
|
onPrimaryAction && onPrimaryAction(_event);
|
|
@@ -31,13 +31,13 @@ const TermsOfUseBase = (_a) => {
|
|
|
31
31
|
const handleSecondaryAction = (_event) => {
|
|
32
32
|
onSecondaryAction(_event);
|
|
33
33
|
};
|
|
34
|
-
const modal = (react_1.default.createElement(ChatbotModal_1.default, Object.assign({ isOpen: isModalOpen, ouiaId: ouiaId, "aria-labelledby": "terms-of-use-title", "aria-describedby": "terms-of-use-modal", className: `pf-chatbot__terms-of-use-modal pf-chatbot__terms-of-use-modal--${displayMode} ${className ? className : ''}`, displayMode: displayMode }, props),
|
|
34
|
+
const modal = (react_1.default.createElement(ChatbotModal_1.default, Object.assign({ isOpen: isModalOpen, ouiaId: ouiaId, "aria-labelledby": "terms-of-use-title", "aria-describedby": "terms-of-use-modal", className: `pf-chatbot__terms-of-use-modal pf-chatbot__terms-of-use-modal--${displayMode} ${isCompact ? 'pf-m-compact' : ''} ${className ? className : ''}`, displayMode: displayMode }, props),
|
|
35
35
|
react_1.default.createElement("section", { className: `pf-chatbot__terms-of-use--section`, "aria-label": title, tabIndex: -1, ref: innerRef },
|
|
36
|
-
react_1.default.createElement(react_core_1.ModalHeader,
|
|
36
|
+
react_1.default.createElement(react_core_1.ModalHeader, { className: "pf-chatbot__terms-of-use--modal-header" },
|
|
37
37
|
react_1.default.createElement("div", { className: "pf-chatbot__terms-of-use--header" },
|
|
38
|
-
image && altText && react_1.default.createElement("img", { src: image, className: "pf-chatbot__terms-of-use--image", alt: altText }),
|
|
38
|
+
!isCompact && image && altText && (react_1.default.createElement("img", { src: image, className: "pf-chatbot__terms-of-use--image", alt: altText })),
|
|
39
39
|
react_1.default.createElement("h1", { className: "pf-chatbot__terms-of-use--title" }, title))),
|
|
40
|
-
react_1.default.createElement(react_core_1.ModalBody,
|
|
40
|
+
react_1.default.createElement(react_core_1.ModalBody, { className: "pf-chatbot__terms-of-use--modal-body" },
|
|
41
41
|
react_1.default.createElement(react_core_1.Content, null, children)),
|
|
42
42
|
react_1.default.createElement(react_core_1.ModalFooter, { className: "pf-chatbot__terms-of-use--footer" },
|
|
43
43
|
react_1.default.createElement(react_core_1.Button, { isBlock: true, key: "terms-of-use-modal-primary", variant: "primary", onClick: handlePrimaryAction, form: "terms-of-use-form", size: "lg" }, primaryActionBtn),
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { TrackingSpi } from './tracking_spi';
|
|
1
|
+
import { InitProps, TrackingSpi } from './tracking_spi';
|
|
2
2
|
import { TrackingApi, TrackingEventProperties } from './tracking_api';
|
|
3
3
|
export declare class ConsoleTrackingProvider implements TrackingSpi, TrackingApi {
|
|
4
|
+
private verbose;
|
|
4
5
|
trackPageView(url: string | undefined): void;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
identify(userID: string): void;
|
|
6
|
+
initialize(props: InitProps): void;
|
|
7
|
+
identify(userID: string, userProperties?: TrackingEventProperties): void;
|
|
8
8
|
trackSingleItem(item: string, properties?: TrackingEventProperties): void;
|
|
9
|
-
getKey(): string;
|
|
10
9
|
}
|
|
@@ -2,26 +2,33 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConsoleTrackingProvider = void 0;
|
|
4
4
|
class ConsoleTrackingProvider {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.verbose = false;
|
|
7
|
+
}
|
|
5
8
|
trackPageView(url) {
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
if (this.verbose) {
|
|
10
|
+
// eslint-disable-next-line no-console
|
|
11
|
+
console.log('ConsoleProvider pageView ', url);
|
|
12
|
+
}
|
|
8
13
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
initialize(props) {
|
|
15
|
+
this.verbose = props.verbose;
|
|
16
|
+
if (this.verbose) {
|
|
17
|
+
// eslint-disable-next-line no-console
|
|
18
|
+
console.log('ConsoleProvider initialize');
|
|
19
|
+
}
|
|
14
20
|
}
|
|
15
|
-
identify(userID) {
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
identify(userID, userProperties = {}) {
|
|
22
|
+
if (this.verbose) {
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
console.log('ConsoleProvider identify ', userID, userProperties);
|
|
25
|
+
}
|
|
18
26
|
}
|
|
19
27
|
trackSingleItem(item, properties) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return 'console';
|
|
28
|
+
if (this.verbose) {
|
|
29
|
+
// eslint-disable-next-line no-console
|
|
30
|
+
console.log('ConsoleProvider: ' + item, properties);
|
|
31
|
+
}
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
34
|
exports.ConsoleTrackingProvider = ConsoleTrackingProvider;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TrackingApi, TrackingEventProperties } from './tracking_api';
|
|
2
2
|
import { InitProps, TrackingSpi } from './tracking_spi';
|
|
3
3
|
export declare class PosthogTrackingProvider implements TrackingSpi, TrackingApi {
|
|
4
|
-
|
|
4
|
+
private verbose;
|
|
5
5
|
initialize(props: InitProps): void;
|
|
6
|
-
identify(userID: string): void;
|
|
6
|
+
identify(userID: string, userProperties?: TrackingEventProperties): void;
|
|
7
7
|
trackPageView(url: string | undefined): void;
|
|
8
8
|
trackSingleItem(item: string, properties?: TrackingEventProperties): void;
|
|
9
9
|
}
|
|
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PosthogTrackingProvider = void 0;
|
|
4
4
|
const posthog_js_1 = require("posthog-js");
|
|
5
5
|
class PosthogTrackingProvider {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
constructor() {
|
|
7
|
+
this.verbose = false;
|
|
8
8
|
}
|
|
9
9
|
initialize(props) {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
this.verbose = props.verbose;
|
|
11
|
+
if (this.verbose) {
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.log('PosthogProvider initialize');
|
|
14
|
+
}
|
|
12
15
|
const posthogKey = props.posthogKey;
|
|
13
16
|
posthog_js_1.posthog.init(posthogKey, {
|
|
14
17
|
// eslint-disable-next-line camelcase
|
|
@@ -17,20 +20,26 @@ class PosthogTrackingProvider {
|
|
|
17
20
|
person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well
|
|
18
21
|
});
|
|
19
22
|
}
|
|
20
|
-
identify(userID) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
identify(userID, userProperties = {}) {
|
|
24
|
+
if (this.verbose) {
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.log('PosthogProvider userID: ' + userID);
|
|
27
|
+
}
|
|
28
|
+
posthog_js_1.posthog.identify(userID, userProperties);
|
|
24
29
|
}
|
|
25
30
|
trackPageView(url) {
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
if (this.verbose) {
|
|
32
|
+
// eslint-disable-next-line no-console
|
|
33
|
+
console.log('PostHogProvider url ', url);
|
|
34
|
+
}
|
|
28
35
|
// TODO posthog seems to record that automatically.
|
|
29
36
|
// How to not clash with this here? Just leave as no-op?
|
|
30
37
|
}
|
|
31
38
|
trackSingleItem(item, properties) {
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
if (this.verbose) {
|
|
40
|
+
// eslint-disable-next-line no-console
|
|
41
|
+
console.log('PosthogProvider: trackSingleItem ' + item, properties);
|
|
42
|
+
}
|
|
34
43
|
posthog_js_1.posthog.capture(item, { properties });
|
|
35
44
|
}
|
|
36
45
|
}
|
|
@@ -2,9 +2,9 @@ import { TrackingApi, TrackingEventProperties } from './tracking_api';
|
|
|
2
2
|
import { InitProps, TrackingSpi } from './tracking_spi';
|
|
3
3
|
export declare class SegmentTrackingProvider implements TrackingSpi, TrackingApi {
|
|
4
4
|
private analytics;
|
|
5
|
-
|
|
5
|
+
private verbose;
|
|
6
6
|
initialize(props: InitProps): void;
|
|
7
|
-
identify(userID: string): void;
|
|
7
|
+
identify(userID: string, userProperties?: TrackingEventProperties): void;
|
|
8
8
|
trackPageView(url: string | undefined): void;
|
|
9
9
|
trackSingleItem(item: string, properties?: TrackingEventProperties): void;
|
|
10
10
|
}
|
|
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SegmentTrackingProvider = void 0;
|
|
4
4
|
const analytics_next_1 = require("@segment/analytics-next");
|
|
5
5
|
class SegmentTrackingProvider {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
constructor() {
|
|
7
|
+
this.verbose = false;
|
|
8
8
|
}
|
|
9
9
|
initialize(props) {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
this.verbose = props.verbose;
|
|
11
|
+
if (this.verbose) {
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.log('SegmentProvider initialize');
|
|
14
|
+
}
|
|
12
15
|
const segmentKey = props.segmentKey;
|
|
13
16
|
// We need to create an object here, as ts lint is unhappy otherwise
|
|
14
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -20,16 +23,20 @@ class SegmentTrackingProvider {
|
|
|
20
23
|
integrations: Object.assign({}, integrations)
|
|
21
24
|
});
|
|
22
25
|
}
|
|
23
|
-
identify(userID) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
identify(userID, userProperties = {}) {
|
|
27
|
+
if (this.verbose) {
|
|
28
|
+
// eslint-disable-next-line no-console
|
|
29
|
+
console.log('SegmentProvider userID: ' + userID);
|
|
30
|
+
}
|
|
26
31
|
if (this.analytics) {
|
|
27
|
-
this.analytics.identify(userID);
|
|
32
|
+
this.analytics.identify(userID, userProperties);
|
|
28
33
|
}
|
|
29
34
|
}
|
|
30
35
|
trackPageView(url) {
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
if (this.verbose) {
|
|
37
|
+
// eslint-disable-next-line no-console
|
|
38
|
+
console.log('SegmentProvider url ', url);
|
|
39
|
+
}
|
|
33
40
|
if (this.analytics) {
|
|
34
41
|
if (url) {
|
|
35
42
|
this.analytics.page(url);
|
|
@@ -40,8 +47,10 @@ class SegmentTrackingProvider {
|
|
|
40
47
|
}
|
|
41
48
|
}
|
|
42
49
|
trackSingleItem(item, properties) {
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
if (this.verbose) {
|
|
51
|
+
// eslint-disable-next-line no-console
|
|
52
|
+
console.log('SegmentProvider: trackSingleItem ' + item, properties);
|
|
53
|
+
}
|
|
45
54
|
if (this.analytics) {
|
|
46
55
|
this.analytics.track(item, { properties });
|
|
47
56
|
}
|
|
@@ -2,7 +2,7 @@ import { TrackingApi, TrackingEventProperties } from './tracking_api';
|
|
|
2
2
|
declare class TrackingProviderProxy implements TrackingApi {
|
|
3
3
|
providers: TrackingApi[];
|
|
4
4
|
constructor(providers: TrackingApi[]);
|
|
5
|
-
identify(userID: string): void;
|
|
5
|
+
identify(userID: string, userProperties?: TrackingEventProperties): void;
|
|
6
6
|
trackSingleItem(eventName: string, properties?: TrackingEventProperties): void;
|
|
7
7
|
trackPageView(url: string | undefined): void;
|
|
8
8
|
}
|
|
@@ -5,9 +5,9 @@ class TrackingProviderProxy {
|
|
|
5
5
|
this.providers = [];
|
|
6
6
|
this.providers = providers;
|
|
7
7
|
}
|
|
8
|
-
identify(userID) {
|
|
8
|
+
identify(userID, userProperties = {}) {
|
|
9
9
|
for (const provider of this.providers) {
|
|
10
|
-
provider.identify(userID);
|
|
10
|
+
provider.identify(userID, userProperties);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
trackSingleItem(eventName, properties) {
|
|
@@ -2,7 +2,7 @@ export interface TrackingEventProperties {
|
|
|
2
2
|
[key: string]: string | number | boolean | undefined;
|
|
3
3
|
}
|
|
4
4
|
export interface TrackingApi {
|
|
5
|
-
identify: (userID: string) => void;
|
|
5
|
+
identify: (userID: string, userProperties: TrackingEventProperties) => void;
|
|
6
6
|
trackPageView: (url: string | undefined) => void;
|
|
7
7
|
trackSingleItem: (eventName: string, properties: TrackingEventProperties | undefined) => void;
|
|
8
8
|
}
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getTrackingProviders = void 0;
|
|
7
|
+
const tracking_spi_1 = require("./tracking_spi");
|
|
7
8
|
const trackingProviderProxy_1 = __importDefault(require("./trackingProviderProxy"));
|
|
8
9
|
const console_tracking_provider_1 = require("./console_tracking_provider");
|
|
9
10
|
const segment_tracking_provider_1 = require("./segment_tracking_provider");
|
|
@@ -11,23 +12,56 @@ const posthog_tracking_provider_1 = require("./posthog_tracking_provider");
|
|
|
11
12
|
const umami_tracking_provider_1 = require("./umami_tracking_provider");
|
|
12
13
|
const getTrackingProviders = (initProps) => {
|
|
13
14
|
const providers = [];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (initProps.activeProviders) {
|
|
16
|
+
let tmpProps = initProps.activeProviders;
|
|
17
|
+
// Theoretically we get an array of provider names, but it could also be a CSV string...
|
|
18
|
+
if (!Array.isArray(initProps.activeProviders)) {
|
|
19
|
+
const tmpString = initProps.activeProviders;
|
|
20
|
+
if (tmpString && tmpString.indexOf(',') !== -1) {
|
|
21
|
+
tmpProps = tmpString.split(',');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
tmpProps = [tmpString];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
tmpProps.forEach((provider) => {
|
|
28
|
+
switch (tracking_spi_1.Providers[provider]) {
|
|
29
|
+
case tracking_spi_1.Providers.Segment:
|
|
30
|
+
providers.push(new segment_tracking_provider_1.SegmentTrackingProvider());
|
|
31
|
+
break;
|
|
32
|
+
case tracking_spi_1.Providers.Umami:
|
|
33
|
+
providers.push(new umami_tracking_provider_1.UmamiTrackingProvider());
|
|
34
|
+
break;
|
|
35
|
+
case tracking_spi_1.Providers.Posthog:
|
|
36
|
+
providers.push(new posthog_tracking_provider_1.PosthogTrackingProvider());
|
|
37
|
+
break;
|
|
38
|
+
case tracking_spi_1.Providers.Console:
|
|
39
|
+
providers.push(new console_tracking_provider_1.ConsoleTrackingProvider());
|
|
40
|
+
break;
|
|
41
|
+
case tracking_spi_1.Providers.None: // Do nothing, just a placeholder
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
if (providers.length > 1) {
|
|
45
|
+
if (initProps.verbose) {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.error("Unknown provider '" + provider);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
18
54
|
// Initialize them
|
|
19
|
-
const enabledProviders = [];
|
|
20
55
|
for (const provider of providers) {
|
|
21
|
-
|
|
22
|
-
if (Object.keys(initProps).indexOf(key) > -1) {
|
|
56
|
+
try {
|
|
23
57
|
provider.initialize(initProps);
|
|
24
|
-
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
// eslint-disable-next-line no-console
|
|
61
|
+
console.error(e);
|
|
25
62
|
}
|
|
26
63
|
}
|
|
27
|
-
|
|
28
|
-
const consoleTrackingProvider = new console_tracking_provider_1.ConsoleTrackingProvider();
|
|
29
|
-
enabledProviders.push(consoleTrackingProvider); // TODO noop- provider?
|
|
30
|
-
return new trackingProviderProxy_1.default(enabledProviders);
|
|
64
|
+
return new trackingProviderProxy_1.default(providers);
|
|
31
65
|
};
|
|
32
66
|
exports.getTrackingProviders = getTrackingProviders;
|
|
33
67
|
exports.default = exports.getTrackingProviders;
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { TrackingApi
|
|
2
|
-
export
|
|
3
|
-
|
|
1
|
+
import { TrackingApi } from './tracking_api';
|
|
2
|
+
export declare enum Providers {
|
|
3
|
+
None = 0,
|
|
4
|
+
Segment = 1,
|
|
5
|
+
Umami = 2,
|
|
6
|
+
Posthog = 3,
|
|
7
|
+
Console = 4
|
|
8
|
+
}
|
|
9
|
+
export type ProviderAsString = keyof typeof Providers;
|
|
10
|
+
export interface BaseProps {
|
|
11
|
+
verbose: boolean;
|
|
12
|
+
activeProviders: [ProviderAsString];
|
|
4
13
|
}
|
|
14
|
+
export type InitProps = {
|
|
15
|
+
[key: string]: string | number | boolean;
|
|
16
|
+
} & BaseProps;
|
|
5
17
|
export interface TrackingSpi extends TrackingApi {
|
|
6
|
-
getKey: () => string;
|
|
7
18
|
initialize: (props: InitProps) => void;
|
|
8
|
-
trackSingleItem: (item: string, properties?: TrackingEventProperties) => void;
|
|
9
19
|
}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Providers = void 0;
|
|
4
|
+
var Providers;
|
|
5
|
+
(function (Providers) {
|
|
6
|
+
Providers[Providers["None"] = 0] = "None";
|
|
7
|
+
Providers[Providers["Segment"] = 1] = "Segment";
|
|
8
|
+
Providers[Providers["Umami"] = 2] = "Umami";
|
|
9
|
+
Providers[Providers["Posthog"] = 3] = "Posthog";
|
|
10
|
+
Providers[Providers["Console"] = 4] = "Console";
|
|
11
|
+
})(Providers || (exports.Providers = Providers = {}));
|
|
@@ -6,9 +6,13 @@ declare global {
|
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
export declare class UmamiTrackingProvider implements TrackingSpi, TrackingApi {
|
|
9
|
-
|
|
9
|
+
private verbose;
|
|
10
|
+
private websiteId;
|
|
11
|
+
private queue;
|
|
10
12
|
initialize(props: InitProps): void;
|
|
11
|
-
identify(userID: string): void;
|
|
13
|
+
identify(userID: string, userProperties?: TrackingEventProperties): void;
|
|
12
14
|
trackPageView(url: string | undefined): void;
|
|
13
15
|
trackSingleItem(item: string, properties?: TrackingEventProperties): void;
|
|
16
|
+
flushQueue(): void;
|
|
17
|
+
log(msg: string): void;
|
|
14
18
|
}
|
|
@@ -2,43 +2,87 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UmamiTrackingProvider = void 0;
|
|
4
4
|
class UmamiTrackingProvider {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
constructor() {
|
|
6
|
+
this.verbose = false;
|
|
7
|
+
this.queue = [];
|
|
7
8
|
}
|
|
8
9
|
initialize(props) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
this.verbose = props.verbose;
|
|
11
|
+
this.log('UmamiProvider initialize');
|
|
12
|
+
this.websiteId = props.umamiKey;
|
|
12
13
|
const hostUrl = props.umamiHostUrl;
|
|
13
14
|
const script = document.createElement('script');
|
|
14
15
|
script.src = hostUrl + '/script.js';
|
|
15
16
|
script.async = true;
|
|
16
17
|
script.defer = true;
|
|
17
18
|
// Configure Umami properties
|
|
18
|
-
script.setAttribute('data-website-id',
|
|
19
|
-
script.setAttribute('data-
|
|
19
|
+
script.setAttribute('data-website-id', this.websiteId);
|
|
20
|
+
script.setAttribute('data-host-url', hostUrl);
|
|
20
21
|
script.setAttribute('data-auto-track', 'false');
|
|
21
|
-
script.setAttribute('data-
|
|
22
|
-
|
|
22
|
+
script.setAttribute('data-exclude-search', 'false');
|
|
23
|
+
// Now get from config, which may override some of the above.
|
|
24
|
+
const UMAMI_PREFIX = 'umami-';
|
|
25
|
+
for (const prop in props) {
|
|
26
|
+
if (prop.startsWith(UMAMI_PREFIX)) {
|
|
27
|
+
const att = 'data-' + prop.substring(UMAMI_PREFIX.length);
|
|
28
|
+
const val = props[prop];
|
|
29
|
+
script.setAttribute(att, String(val));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
script.onload = () => {
|
|
33
|
+
this.log('UmamiProvider script loaded');
|
|
34
|
+
this.flushQueue();
|
|
35
|
+
};
|
|
23
36
|
document.body.appendChild(script);
|
|
24
37
|
}
|
|
25
|
-
identify(userID) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
38
|
+
identify(userID, userProperties = {}) {
|
|
39
|
+
this.log('UmamiProvider userID: ' + userID + ' => ' + JSON.stringify(userProperties));
|
|
40
|
+
if (window.umami) {
|
|
41
|
+
window.umami.identify({ userID, userProperties });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.queue.push({ what: 'i', name: userID, payload: userProperties });
|
|
45
|
+
}
|
|
30
46
|
}
|
|
31
47
|
trackPageView(url) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
48
|
+
this.log('UmamiProvider url ' + url);
|
|
49
|
+
if (window.umami) {
|
|
50
|
+
window.umami.track({ url, website: this.websiteId });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.queue.push({ what: 'p', name: String(url) });
|
|
54
|
+
}
|
|
36
55
|
}
|
|
37
56
|
trackSingleItem(item, properties) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
57
|
+
this.log('UmamiProvider: trackSingleItem ' + item + JSON.stringify(properties));
|
|
58
|
+
if (window.umami) {
|
|
59
|
+
window.umami.track(item, properties);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.queue.push({ what: 't', name: item, payload: properties });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
flushQueue() {
|
|
66
|
+
for (const item of this.queue) {
|
|
67
|
+
this.log('Queue flush ' + JSON.stringify(item));
|
|
68
|
+
switch (item.what) {
|
|
69
|
+
case 'i':
|
|
70
|
+
this.identify(item.name, item.payload);
|
|
71
|
+
break;
|
|
72
|
+
case 't':
|
|
73
|
+
this.trackSingleItem(item.name, item.payload);
|
|
74
|
+
break;
|
|
75
|
+
case 'p':
|
|
76
|
+
this.trackPageView(item.name);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
log(msg) {
|
|
82
|
+
if (this.verbose) {
|
|
83
|
+
// eslint-disable-next-line no-console
|
|
84
|
+
console.debug('UmamiProvider: ', msg);
|
|
85
|
+
}
|
|
42
86
|
}
|
|
43
87
|
}
|
|
44
88
|
exports.UmamiTrackingProvider = UmamiTrackingProvider;
|