@patternfly/chatbot 6.8.0-prerelease.7 → 6.8.0-prerelease.9
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/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +125 -16
- package/dist/cjs/CodeModal/CodeModal.js +5 -0
- package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +26 -7
- package/dist/cjs/MarkdownContent/MarkdownContent.js +79 -166
- package/dist/cjs/MarkdownContent/MarkdownRenderer.d.ts +6 -0
- package/dist/cjs/MarkdownContent/MarkdownRenderer.js +187 -0
- package/dist/cjs/Message/Message.d.ts +3 -4
- package/dist/cjs/Message/Message.js +0 -2
- package/dist/cjs/MessageBox/MessageBox.d.ts +2 -0
- package/dist/cjs/MessageBox/MessageBox.js +7 -2
- package/dist/cjs/index.d.ts +0 -8
- package/dist/cjs/index.js +1 -13
- package/dist/css/main.css +77 -10
- package/dist/css/main.css.map +1 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +128 -19
- package/dist/esm/CodeModal/CodeModal.js +5 -0
- package/dist/esm/MarkdownContent/MarkdownContent.d.ts +26 -7
- package/dist/esm/MarkdownContent/MarkdownContent.js +52 -165
- package/dist/esm/MarkdownContent/MarkdownRenderer.d.ts +6 -0
- package/dist/esm/MarkdownContent/MarkdownRenderer.js +182 -0
- package/dist/esm/Message/Message.d.ts +3 -4
- package/dist/esm/Message/Message.js +0 -2
- package/dist/esm/MessageBox/MessageBox.d.ts +2 -0
- package/dist/esm/MessageBox/MessageBox.js +7 -2
- package/dist/esm/index.d.ts +0 -8
- package/dist/esm/index.js +0 -8
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/generate-index.js +41 -16
- package/generate-index.test.js +68 -0
- package/monaco-environment.js +45 -0
- package/package.json +20 -2
- package/patternfly-docs/content/extensions/chatbot/chatbot.md +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/monitor-sampleapp-quickstart.ts +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithExpandableGroups.tsx +104 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +12 -1
- package/patternfly-docs/content/extensions/chatbot/tree-shaking.md +124 -0
- package/patternfly-docs/monaco-environment.js +45 -0
- package/patternfly-docs/patternfly-docs.css.js +6 -0
- package/src/Chatbot/Chatbot.scss +4 -0
- package/src/ChatbotContent/ChatbotContent.scss +1 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +52 -6
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +551 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +350 -49
- package/src/ChatbotFooter/ChatbotFooter.scss +2 -2
- package/src/ChatbotHeader/ChatbotHeader.scss +4 -0
- package/src/ChatbotModal/ChatbotModal.scss +10 -0
- package/src/ChatbotToggle/ChatbotToggle.scss +6 -0
- package/src/CodeModal/CodeModal.tsx +6 -0
- package/src/DeepThinking/DeepThinking.test.tsx +10 -12
- package/src/MarkdownContent/MarkdownContent.test.tsx +52 -5
- package/src/MarkdownContent/MarkdownContent.tsx +77 -220
- package/src/MarkdownContent/MarkdownRenderer.tsx +235 -0
- package/src/Message/Message.scss +5 -0
- package/src/Message/Message.test.tsx +5 -0
- package/src/Message/Message.tsx +3 -5
- package/src/MessageBox/MessageBox.scss +15 -1
- package/src/MessageBox/MessageBox.tsx +23 -2
- package/src/ResponseActions/ResponseActions.test.tsx +42 -48
- package/src/ToolCall/ToolCall.test.tsx +6 -9
- package/src/ToolResponse/ToolResponse.test.tsx +16 -22
- package/src/index.ts +0 -12
- package/src/test-utils/markdownTestUtils.ts +21 -0
- package/tsconfig.json +6 -1
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
- package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +0 -77
- package/dist/cjs/Chatbot/Chatbot.test.d.ts +0 -1
- package/dist/cjs/Chatbot/Chatbot.test.js +0 -32
- package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
- package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +0 -27
- package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +0 -1
- package/dist/cjs/ChatbotContent/ChatbotContent.test.js +0 -22
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -75
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -277
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +0 -27
- package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +0 -87
- package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +0 -18
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +0 -18
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -22
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +0 -18
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -22
- package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -22
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -46
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -44
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -55
- package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +0 -1
- package/dist/cjs/ChatbotModal/ChatbotModal.test.js +0 -16
- package/dist/cjs/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
- package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +0 -64
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -61
- package/dist/cjs/CodeModal/CodeModal.test.d.ts +0 -1
- package/dist/cjs/CodeModal/CodeModal.test.js +0 -34
- package/dist/cjs/Compare/Compare.test.d.ts +0 -1
- package/dist/cjs/Compare/Compare.test.js +0 -18
- package/dist/cjs/DeepThinking/DeepThinking.test.d.ts +0 -1
- package/dist/cjs/DeepThinking/DeepThinking.test.js +0 -146
- package/dist/cjs/FileDetails/FileDetails.test.d.ts +0 -1
- package/dist/cjs/FileDetails/FileDetails.test.js +0 -42
- package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
- package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +0 -79
- package/dist/cjs/FileDropZone/FileDropZone.test.d.ts +0 -1
- package/dist/cjs/FileDropZone/FileDropZone.test.js +0 -100
- package/dist/cjs/FilePreview/FilePreview.test.d.ts +0 -1
- package/dist/cjs/FilePreview/FilePreview.test.js +0 -97
- package/dist/cjs/ImagePreview/ImagePreview.test.d.ts +0 -1
- package/dist/cjs/ImagePreview/ImagePreview.test.js +0 -225
- package/dist/cjs/MarkdownContent/MarkdownContent.test.d.ts +0 -1
- package/dist/cjs/MarkdownContent/MarkdownContent.test.js +0 -192
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -131
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +0 -30
- package/dist/cjs/Message/Message.test.d.ts +0 -1
- package/dist/cjs/Message/Message.test.js +0 -1128
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +0 -25
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -25
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -25
- package/dist/cjs/Message/MessageLoading.test.d.ts +0 -1
- package/dist/cjs/Message/MessageLoading.test.js +0 -25
- package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
- package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +0 -109
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
- package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +0 -76
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
- package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +0 -181
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +0 -243
- package/dist/cjs/MessageBar/AttachButton.test.d.ts +0 -1
- package/dist/cjs/MessageBar/AttachButton.test.js +0 -152
- package/dist/cjs/MessageBar/MessageBar.test.d.ts +0 -1
- package/dist/cjs/MessageBar/MessageBar.test.js +0 -338
- package/dist/cjs/MessageBar/SendButton.test.d.ts +0 -1
- package/dist/cjs/MessageBar/SendButton.test.js +0 -58
- package/dist/cjs/MessageBar/StopButton.test.d.ts +0 -1
- package/dist/cjs/MessageBar/StopButton.test.js +0 -58
- package/dist/cjs/MessageBox/JumpButton.test.d.ts +0 -1
- package/dist/cjs/MessageBox/JumpButton.test.js +0 -39
- package/dist/cjs/MessageBox/MessageBox.test.d.ts +0 -1
- package/dist/cjs/MessageBox/MessageBox.test.js +0 -294
- package/dist/cjs/MessageDivider/MessageDivider.test.d.ts +0 -1
- package/dist/cjs/MessageDivider/MessageDivider.test.js +0 -29
- package/dist/cjs/Onboarding/Onboarding.test.d.ts +0 -1
- package/dist/cjs/Onboarding/Onboarding.test.js +0 -80
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
- package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +0 -50
- package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +0 -1
- package/dist/cjs/ResponseActions/ResponseActionButton.test.js +0 -54
- package/dist/cjs/ResponseActions/ResponseActions.test.d.ts +0 -1
- package/dist/cjs/ResponseActions/ResponseActions.test.js +0 -455
- package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
- package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +0 -25
- package/dist/cjs/Settings/SettingsForm.test.d.ts +0 -1
- package/dist/cjs/Settings/SettingsForm.test.js +0 -35
- package/dist/cjs/SourcesCard/SourcesCard.test.d.ts +0 -1
- package/dist/cjs/SourcesCard/SourcesCard.test.js +0 -39
- package/dist/cjs/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
- package/dist/cjs/SourcesCardBase/SourcesCardBase.test.js +0 -199
- package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +0 -1
- package/dist/cjs/TermsOfUse/TermsOfUse.test.js +0 -77
- package/dist/cjs/ToolCall/ToolCall.test.d.ts +0 -1
- package/dist/cjs/ToolCall/ToolCall.test.js +0 -201
- package/dist/cjs/ToolResponse/ToolResponse.test.d.ts +0 -1
- package/dist/cjs/ToolResponse/ToolResponse.test.js +0 -184
- package/dist/cjs/__mocks__/monaco-editor.d.ts +0 -11
- package/dist/cjs/__mocks__/monaco-editor.js +0 -18
- package/dist/cjs/__mocks__/rehype-external-links.d.ts +0 -2
- package/dist/cjs/__mocks__/rehype-external-links.js +0 -4
- package/dist/cjs/__mocks__/rehype-highlight.d.ts +0 -2
- package/dist/cjs/__mocks__/rehype-highlight.js +0 -4
- package/dist/cjs/__mocks__/rehype-sanitize.d.ts +0 -2
- package/dist/cjs/__mocks__/rehype-sanitize.js +0 -4
- package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +0 -2
- package/dist/cjs/__mocks__/rehype-unwrap-images.js +0 -4
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
- package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +0 -72
- package/dist/esm/Chatbot/Chatbot.test.d.ts +0 -1
- package/dist/esm/Chatbot/Chatbot.test.js +0 -27
- package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
- package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +0 -22
- package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +0 -1
- package/dist/esm/ChatbotContent/ChatbotContent.test.js +0 -17
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -70
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -272
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +0 -22
- package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
- package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +0 -82
- package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +0 -13
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +0 -13
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -20
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +0 -13
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -20
- package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -20
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -44
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -42
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -50
- package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +0 -1
- package/dist/esm/ChatbotModal/ChatbotModal.test.js +0 -11
- package/dist/esm/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
- package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +0 -59
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -56
- package/dist/esm/CodeModal/CodeModal.test.d.ts +0 -1
- package/dist/esm/CodeModal/CodeModal.test.js +0 -29
- package/dist/esm/Compare/Compare.test.d.ts +0 -1
- package/dist/esm/Compare/Compare.test.js +0 -13
- package/dist/esm/DeepThinking/DeepThinking.test.d.ts +0 -1
- package/dist/esm/DeepThinking/DeepThinking.test.js +0 -141
- package/dist/esm/FileDetails/FileDetails.test.d.ts +0 -1
- package/dist/esm/FileDetails/FileDetails.test.js +0 -37
- package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
- package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +0 -74
- package/dist/esm/FileDropZone/FileDropZone.test.d.ts +0 -1
- package/dist/esm/FileDropZone/FileDropZone.test.js +0 -95
- package/dist/esm/FilePreview/FilePreview.test.d.ts +0 -1
- package/dist/esm/FilePreview/FilePreview.test.js +0 -92
- package/dist/esm/ImagePreview/ImagePreview.test.d.ts +0 -1
- package/dist/esm/ImagePreview/ImagePreview.test.js +0 -220
- package/dist/esm/MarkdownContent/MarkdownContent.test.d.ts +0 -1
- package/dist/esm/MarkdownContent/MarkdownContent.test.js +0 -187
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -126
- package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
- package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +0 -25
- package/dist/esm/Message/Message.test.d.ts +0 -1
- package/dist/esm/Message/Message.test.js +0 -1123
- package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
- package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +0 -20
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -20
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -20
- package/dist/esm/Message/MessageLoading.test.d.ts +0 -1
- package/dist/esm/Message/MessageLoading.test.js +0 -20
- package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
- package/dist/esm/Message/QuickResponse/QuickResponse.test.js +0 -104
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
- package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +0 -48
- package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
- package/dist/esm/Message/UserFeedback/UserFeedback.test.js +0 -176
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +0 -238
- package/dist/esm/MessageBar/AttachButton.test.d.ts +0 -1
- package/dist/esm/MessageBar/AttachButton.test.js +0 -147
- package/dist/esm/MessageBar/MessageBar.test.d.ts +0 -1
- package/dist/esm/MessageBar/MessageBar.test.js +0 -333
- package/dist/esm/MessageBar/SendButton.test.d.ts +0 -1
- package/dist/esm/MessageBar/SendButton.test.js +0 -53
- package/dist/esm/MessageBar/StopButton.test.d.ts +0 -1
- package/dist/esm/MessageBar/StopButton.test.js +0 -53
- package/dist/esm/MessageBox/JumpButton.test.d.ts +0 -1
- package/dist/esm/MessageBox/JumpButton.test.js +0 -34
- package/dist/esm/MessageBox/MessageBox.test.d.ts +0 -1
- package/dist/esm/MessageBox/MessageBox.test.js +0 -289
- package/dist/esm/MessageDivider/MessageDivider.test.d.ts +0 -1
- package/dist/esm/MessageDivider/MessageDivider.test.js +0 -24
- package/dist/esm/Onboarding/Onboarding.test.d.ts +0 -1
- package/dist/esm/Onboarding/Onboarding.test.js +0 -75
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
- package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +0 -48
- package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +0 -1
- package/dist/esm/ResponseActions/ResponseActionButton.test.js +0 -49
- package/dist/esm/ResponseActions/ResponseActions.test.d.ts +0 -1
- package/dist/esm/ResponseActions/ResponseActions.test.js +0 -450
- package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
- package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +0 -20
- package/dist/esm/Settings/SettingsForm.test.d.ts +0 -1
- package/dist/esm/Settings/SettingsForm.test.js +0 -33
- package/dist/esm/SourcesCard/SourcesCard.test.d.ts +0 -1
- package/dist/esm/SourcesCard/SourcesCard.test.js +0 -34
- package/dist/esm/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
- package/dist/esm/SourcesCardBase/SourcesCardBase.test.js +0 -194
- package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +0 -1
- package/dist/esm/TermsOfUse/TermsOfUse.test.js +0 -72
- package/dist/esm/ToolCall/ToolCall.test.d.ts +0 -1
- package/dist/esm/ToolCall/ToolCall.test.js +0 -196
- package/dist/esm/ToolResponse/ToolResponse.test.d.ts +0 -1
- package/dist/esm/ToolResponse/ToolResponse.test.js +0 -179
- package/dist/esm/__mocks__/monaco-editor.d.ts +0 -11
- package/dist/esm/__mocks__/monaco-editor.js +0 -18
- package/dist/esm/__mocks__/rehype-external-links.d.ts +0 -2
- package/dist/esm/__mocks__/rehype-external-links.js +0 -2
- package/dist/esm/__mocks__/rehype-highlight.d.ts +0 -2
- package/dist/esm/__mocks__/rehype-highlight.js +0 -2
- package/dist/esm/__mocks__/rehype-sanitize.d.ts +0 -2
- package/dist/esm/__mocks__/rehype-sanitize.js +0 -2
- package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +0 -2
- package/dist/esm/__mocks__/rehype-unwrap-images.js +0 -2
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
-
const react_1 = require("@testing-library/react");
|
|
17
|
-
require("@testing-library/jest-dom");
|
|
18
|
-
const FileDetailsLabel_1 = __importDefault(require("./FileDetailsLabel"));
|
|
19
|
-
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
20
|
-
const react_icons_1 = require("@patternfly/react-icons");
|
|
21
|
-
describe('FileDetailsLabel', () => {
|
|
22
|
-
it('should render file details label', () => {
|
|
23
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt" }));
|
|
24
|
-
expect(container).toMatchSnapshot();
|
|
25
|
-
});
|
|
26
|
-
it('should render file details correctly if an extension we support is passed in', () => {
|
|
27
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt" }));
|
|
28
|
-
expect(react_1.screen.getByText('test')).toBeTruthy();
|
|
29
|
-
expect(react_1.screen.getByText('TEXT')).toBeTruthy();
|
|
30
|
-
});
|
|
31
|
-
it('should skip language if we do not support an extension', () => {
|
|
32
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.joke", languageTestId: "language" }));
|
|
33
|
-
expect(react_1.screen.getByText('test')).toBeTruthy();
|
|
34
|
-
expect(react_1.screen.queryByTestId('language')).toBeFalsy();
|
|
35
|
-
});
|
|
36
|
-
it('should pass file size down', () => {
|
|
37
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.svg", fileSize: "100MB" }));
|
|
38
|
-
expect(react_1.screen.getByText('100MB')).toBeTruthy();
|
|
39
|
-
});
|
|
40
|
-
it('should pass truncation prop down as true by default', () => {
|
|
41
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.svg" }));
|
|
42
|
-
expect(react_1.screen.getByText('test')).toBeTruthy();
|
|
43
|
-
expect(react_1.screen.queryByText('test.svg')).toBeFalsy();
|
|
44
|
-
});
|
|
45
|
-
it('should pass truncation prop down when false', () => {
|
|
46
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.svg", hasTruncation: false }));
|
|
47
|
-
expect(react_1.screen.getByText('test.svg')).toBeTruthy();
|
|
48
|
-
});
|
|
49
|
-
it('should not show spinner by default', () => {
|
|
50
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", spinnerTestId: "spinner" }));
|
|
51
|
-
expect(react_1.screen.queryByTestId('spinner')).toBeFalsy();
|
|
52
|
-
});
|
|
53
|
-
it('should show spinner if loading', () => {
|
|
54
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", isLoading: true, spinnerTestId: "spinner" }));
|
|
55
|
-
expect(react_1.screen.getByText('test')).toBeTruthy();
|
|
56
|
-
expect(react_1.screen.getByText('TEXT')).toBeTruthy();
|
|
57
|
-
expect(react_1.screen.queryByTestId('spinner')).toBeTruthy();
|
|
58
|
-
});
|
|
59
|
-
it('should call onClick prop', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
-
const spy = jest.fn();
|
|
61
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", onClick: spy }));
|
|
62
|
-
yield user_event_1.default.click(react_1.screen.getByRole('button'));
|
|
63
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
64
|
-
}));
|
|
65
|
-
it('should call onClose prop', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
-
const spy = jest.fn();
|
|
67
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", onClose: spy }));
|
|
68
|
-
yield user_event_1.default.click(react_1.screen.getByRole('button', { name: /Close test.txt/i }));
|
|
69
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
70
|
-
}));
|
|
71
|
-
it('should use closeButtonAriaLabel prop appropriately', () => {
|
|
72
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", onClose: jest.fn(), closeButtonAriaLabel: "Delete file" }));
|
|
73
|
-
expect(react_1.screen.getByRole('button', { name: /Delete file/i })).toBeTruthy();
|
|
74
|
-
});
|
|
75
|
-
it('should support custom close icon', () => {
|
|
76
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDetailsLabel_1.default, { fileName: "test.txt", onClose: jest.fn(), closeButtonIcon: (0, jsx_runtime_1.jsx)(react_icons_1.BellIcon, { "data-testid": "bell" }) }));
|
|
77
|
-
expect(react_1.screen.getByTestId('bell')).toBeTruthy();
|
|
78
|
-
});
|
|
79
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
-
const react_1 = require("@testing-library/react");
|
|
17
|
-
require("@testing-library/jest-dom");
|
|
18
|
-
const FileDropZone_1 = __importDefault(require("./FileDropZone"));
|
|
19
|
-
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
20
|
-
describe('FileDropZone', () => {
|
|
21
|
-
it('should render file drop zone', () => {
|
|
22
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn() }));
|
|
23
|
-
expect(container).toMatchSnapshot();
|
|
24
|
-
});
|
|
25
|
-
it('should render children', () => {
|
|
26
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn(), children: "Hi" }));
|
|
27
|
-
expect(react_1.screen.getByText('Hi')).toBeTruthy();
|
|
28
|
-
});
|
|
29
|
-
it('should call onFileDrop when file type is accepted', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
-
const onFileDrop = jest.fn();
|
|
31
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { "data-testid": "input", allowedFileTypes: { 'text/plain': ['.txt'] }, onFileDrop: onFileDrop }));
|
|
32
|
-
const file = new File(['Test'], 'example.text', { type: 'text/plain' });
|
|
33
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
34
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
35
|
-
expect(onFileDrop).toHaveBeenCalled();
|
|
36
|
-
}));
|
|
37
|
-
it('should not call onFileDrop when file type is not accepted', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
-
const onFileDrop = jest.fn();
|
|
39
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { "data-testid": "input", allowedFileTypes: { 'text/plain': ['.txt'] }, onFileDrop: onFileDrop }));
|
|
40
|
-
const file = new File(['[]'], 'example.json', { type: 'application/json' });
|
|
41
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
42
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
43
|
-
expect(onFileDrop).not.toHaveBeenCalled();
|
|
44
|
-
}));
|
|
45
|
-
it('should respect minSize restriction', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
const onAttachRejected = jest.fn();
|
|
47
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn(), minSize: 1000, onAttachRejected: onAttachRejected }));
|
|
48
|
-
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
49
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
50
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
51
|
-
expect(onAttachRejected).toHaveBeenCalled();
|
|
52
|
-
}));
|
|
53
|
-
it('should respect maxSize restriction', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
const onAttachRejected = jest.fn();
|
|
55
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn(), maxSize: 100, onAttachRejected: onAttachRejected }));
|
|
56
|
-
const largeContent = 'x'.repeat(200);
|
|
57
|
-
const file = new File([largeContent], 'example.txt', { type: 'text/plain' });
|
|
58
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
59
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
60
|
-
expect(onAttachRejected).toHaveBeenCalled();
|
|
61
|
-
}));
|
|
62
|
-
it('should respect maxFiles restriction', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
-
const onAttachRejected = jest.fn();
|
|
64
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn(), maxFiles: 1, onAttachRejected: onAttachRejected }));
|
|
65
|
-
const files = [
|
|
66
|
-
new File(['Test1'], 'example1.txt', { type: 'text/plain' }),
|
|
67
|
-
new File(['Test2'], 'example2.txt', { type: 'text/plain' })
|
|
68
|
-
];
|
|
69
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
70
|
-
yield user_event_1.default.upload(fileInput, files);
|
|
71
|
-
expect(onAttachRejected).toHaveBeenCalled();
|
|
72
|
-
}));
|
|
73
|
-
it('should be disabled when isAttachmentDisabled is true', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
-
const onFileDrop = jest.fn();
|
|
75
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: onFileDrop, isAttachmentDisabled: true }));
|
|
76
|
-
const file = new File(['Test'], 'example.text', { type: 'text/plain' });
|
|
77
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
78
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
79
|
-
expect(onFileDrop).not.toHaveBeenCalled();
|
|
80
|
-
}));
|
|
81
|
-
it('should call onAttach when files are attached', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
-
const onAttach = jest.fn();
|
|
83
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: jest.fn(), onAttach: onAttach }));
|
|
84
|
-
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
85
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
86
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
87
|
-
expect(onAttach).toHaveBeenCalled();
|
|
88
|
-
}));
|
|
89
|
-
it('should use custom validator when provided', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
90
|
-
const validator = jest.fn().mockReturnValue({ message: 'Custom error' });
|
|
91
|
-
const onAttachRejected = jest.fn();
|
|
92
|
-
const onFileDrop = jest.fn();
|
|
93
|
-
const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(FileDropZone_1.default, { onFileDrop: onFileDrop, validator: validator, onAttachRejected: onAttachRejected }));
|
|
94
|
-
const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
|
|
95
|
-
const fileInput = container.querySelector('input[type="file"]');
|
|
96
|
-
yield user_event_1.default.upload(fileInput, file);
|
|
97
|
-
expect(validator).toHaveBeenCalledWith(file);
|
|
98
|
-
expect(onAttachRejected).toHaveBeenCalled();
|
|
99
|
-
}));
|
|
100
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
-
const react_1 = require("@testing-library/react");
|
|
8
|
-
require("@testing-library/jest-dom");
|
|
9
|
-
const FilePreview_1 = __importDefault(require("./FilePreview"));
|
|
10
|
-
const Chatbot_1 = require("../Chatbot");
|
|
11
|
-
const react_core_1 = require("@patternfly/react-core");
|
|
12
|
-
describe('FilePreview', () => {
|
|
13
|
-
const defaultProps = {
|
|
14
|
-
isModalOpen: true,
|
|
15
|
-
handleModalToggle: jest.fn(),
|
|
16
|
-
fileName: 'test-file.txt',
|
|
17
|
-
children: 'File content preview'
|
|
18
|
-
};
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
jest.clearAllMocks();
|
|
21
|
-
});
|
|
22
|
-
it('should render with basic props', () => {
|
|
23
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps)));
|
|
24
|
-
expect(react_1.screen.getByText('File preview')).toBeInTheDocument();
|
|
25
|
-
expect(react_1.screen.getByText('test-file.txt')).toBeInTheDocument();
|
|
26
|
-
});
|
|
27
|
-
it('should render with custom title', () => {
|
|
28
|
-
const customTitle = 'Custom file preview title';
|
|
29
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { title: customTitle })));
|
|
30
|
-
expect(react_1.screen.getByRole('heading', { name: customTitle })).toBeTruthy();
|
|
31
|
-
});
|
|
32
|
-
it('should handle modal toggle when closed', () => {
|
|
33
|
-
const mockToggle = jest.fn();
|
|
34
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { isModalOpen: false, handleModalToggle: mockToggle })));
|
|
35
|
-
expect(react_1.screen.queryByRole('dialog')).not.toBeInTheDocument();
|
|
36
|
-
});
|
|
37
|
-
it('should apply default display mode class', () => {
|
|
38
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps)));
|
|
39
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
40
|
-
expect(modal).toHaveClass('pf-chatbot__file-preview-modal--default');
|
|
41
|
-
});
|
|
42
|
-
it('should apply custom display mode class', () => {
|
|
43
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen })));
|
|
44
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
45
|
-
expect(modal).toHaveClass('pf-chatbot__file-preview-modal--fullscreen');
|
|
46
|
-
});
|
|
47
|
-
it('should apply compact styling when isCompact is true', () => {
|
|
48
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { isCompact: true })));
|
|
49
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
50
|
-
expect(modal).toHaveClass('pf-m-compact');
|
|
51
|
-
});
|
|
52
|
-
it('should not apply compact styling when isCompact is false', () => {
|
|
53
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { isCompact: false })));
|
|
54
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
55
|
-
expect(modal).not.toHaveClass('pf-m-compact');
|
|
56
|
-
});
|
|
57
|
-
it('should apply custom className', () => {
|
|
58
|
-
const customClass = 'custom-file-preview';
|
|
59
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { className: customClass })));
|
|
60
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
61
|
-
expect(modal).toHaveClass(customClass);
|
|
62
|
-
});
|
|
63
|
-
it('should pass through additional props to ChatbotModal', () => {
|
|
64
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { "data-testid": "file-preview-modal" })));
|
|
65
|
-
const modal = react_1.screen.getByTestId('file-preview-modal');
|
|
66
|
-
expect(modal).toBeInTheDocument();
|
|
67
|
-
});
|
|
68
|
-
it('should pass modalHeaderProps to ModalHeader', () => {
|
|
69
|
-
const modalHeaderProps = {
|
|
70
|
-
'data-testid': 'custom-header'
|
|
71
|
-
};
|
|
72
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { modalHeaderProps: modalHeaderProps })));
|
|
73
|
-
const header = react_1.screen.getByTestId('custom-header');
|
|
74
|
-
expect(header).toBeInTheDocument();
|
|
75
|
-
});
|
|
76
|
-
it('should pass modalBodyProps to ModalBody', () => {
|
|
77
|
-
const modalBodyProps = {
|
|
78
|
-
'data-testid': 'custom-body'
|
|
79
|
-
};
|
|
80
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { modalBodyProps: modalBodyProps })));
|
|
81
|
-
const body = react_1.screen.getByTestId('custom-body');
|
|
82
|
-
expect(body).toBeInTheDocument();
|
|
83
|
-
});
|
|
84
|
-
it('should pass ouiaId to ChatbotModal', () => {
|
|
85
|
-
const ouiaId = 'file-preview-ouia-id';
|
|
86
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { ouiaId: ouiaId })));
|
|
87
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
88
|
-
expect(modal).toHaveAttribute('data-ouia-component-id', ouiaId);
|
|
89
|
-
});
|
|
90
|
-
it('should handle complex children', () => {
|
|
91
|
-
const complexChildren = ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { children: "File details" }), (0, jsx_runtime_1.jsx)("p", { children: "Size: 1.2 MB" }), (0, jsx_runtime_1.jsx)(react_core_1.Button, { children: "Download" })] }));
|
|
92
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(FilePreview_1.default, Object.assign({}, defaultProps, { children: complexChildren })));
|
|
93
|
-
expect(react_1.screen.getByRole('heading', { name: /File details/i })).toBeTruthy();
|
|
94
|
-
expect(react_1.screen.getByText('Size: 1.2 MB')).toBeTruthy();
|
|
95
|
-
expect(react_1.screen.getByRole('button', { name: /Download/i })).toBeTruthy();
|
|
96
|
-
});
|
|
97
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
-
const react_1 = require("@testing-library/react");
|
|
8
|
-
require("@testing-library/jest-dom");
|
|
9
|
-
const ImagePreview_1 = __importDefault(require("./ImagePreview"));
|
|
10
|
-
const Chatbot_1 = require("../Chatbot");
|
|
11
|
-
const mockImages = [
|
|
12
|
-
{
|
|
13
|
-
fileName: 'image1.jpg',
|
|
14
|
-
fileSize: '2.5 MB',
|
|
15
|
-
image: (0, jsx_runtime_1.jsx)("img", { src: "", alt: "Test image 1" })
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
fileName: 'image2.png',
|
|
19
|
-
fileSize: '1.8 MB',
|
|
20
|
-
image: (0, jsx_runtime_1.jsx)("img", { src: "", alt: "Test image 2" })
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
fileName: 'image3.gif',
|
|
24
|
-
image: (0, jsx_runtime_1.jsx)("img", { src: "", alt: "Test image 3" })
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
|
-
const defaultProps = {
|
|
28
|
-
isModalOpen: true,
|
|
29
|
-
handleModalToggle: jest.fn(),
|
|
30
|
-
images: mockImages
|
|
31
|
-
};
|
|
32
|
-
describe('ImagePreview', () => {
|
|
33
|
-
beforeEach(() => {
|
|
34
|
-
jest.clearAllMocks();
|
|
35
|
-
});
|
|
36
|
-
it('renders modal when isModalOpen is true', () => {
|
|
37
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
38
|
-
expect(react_1.screen.getByRole('dialog')).toBeInTheDocument();
|
|
39
|
-
});
|
|
40
|
-
it('does not render modal when isModalOpen is false', () => {
|
|
41
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { isModalOpen: false })));
|
|
42
|
-
expect(react_1.screen.queryByRole('dialog')).not.toBeInTheDocument();
|
|
43
|
-
});
|
|
44
|
-
it('displays custom title when provided', () => {
|
|
45
|
-
const customTitle = 'Custom image preview';
|
|
46
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { title: customTitle })));
|
|
47
|
-
expect(react_1.screen.getByRole('heading', { name: customTitle })).toBeInTheDocument();
|
|
48
|
-
});
|
|
49
|
-
it('displays default title when no title provided', () => {
|
|
50
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
51
|
-
expect(react_1.screen.getByRole('heading', { name: /Preview images/i })).toBeInTheDocument();
|
|
52
|
-
});
|
|
53
|
-
it('calls handleModalToggle when modal is closed', () => {
|
|
54
|
-
const mockHandleToggle = jest.fn();
|
|
55
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { handleModalToggle: mockHandleToggle })));
|
|
56
|
-
const closeButton = react_1.screen.getByRole('button', { name: /close/i });
|
|
57
|
-
react_1.fireEvent.click(closeButton);
|
|
58
|
-
expect(mockHandleToggle).toHaveBeenCalledTimes(1);
|
|
59
|
-
});
|
|
60
|
-
it('displays first image by default', () => {
|
|
61
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
62
|
-
expect(react_1.screen.getByText('image1.jpg')).toBeInTheDocument();
|
|
63
|
-
expect(react_1.screen.getByText('2.5 MB')).toBeInTheDocument();
|
|
64
|
-
expect(react_1.screen.getByAltText('Test image 1')).toBeInTheDocument();
|
|
65
|
-
});
|
|
66
|
-
it('displays page counter correctly', () => {
|
|
67
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
68
|
-
expect(react_1.screen.getByText('1/3')).toBeInTheDocument();
|
|
69
|
-
});
|
|
70
|
-
it('navigates to next image when next button is clicked', () => {
|
|
71
|
-
const mockOnNextClick = jest.fn();
|
|
72
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { onNextClick: mockOnNextClick })));
|
|
73
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
74
|
-
react_1.fireEvent.click(nextButton);
|
|
75
|
-
expect(mockOnNextClick).toHaveBeenCalled();
|
|
76
|
-
expect(react_1.screen.getByText('2/3')).toBeInTheDocument();
|
|
77
|
-
expect(react_1.screen.getByText('image2.png')).toBeInTheDocument();
|
|
78
|
-
});
|
|
79
|
-
it('navigates to previous image when previous button is clicked', () => {
|
|
80
|
-
const mockOnPreviousClick = jest.fn();
|
|
81
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { onPreviousClick: mockOnPreviousClick })));
|
|
82
|
-
// First go to page 2
|
|
83
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
84
|
-
react_1.fireEvent.click(nextButton);
|
|
85
|
-
// Then go back to page 1
|
|
86
|
-
const previousButton = react_1.screen.getByRole('button', { name: /Go to previous image/i });
|
|
87
|
-
react_1.fireEvent.click(previousButton);
|
|
88
|
-
expect(mockOnPreviousClick).toHaveBeenCalled();
|
|
89
|
-
expect(react_1.screen.getByText('1/3')).toBeInTheDocument();
|
|
90
|
-
});
|
|
91
|
-
it('calls onSetPage when page changes', () => {
|
|
92
|
-
const mockOnSetPage = jest.fn();
|
|
93
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { onSetPage: mockOnSetPage })));
|
|
94
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
95
|
-
react_1.fireEvent.click(nextButton);
|
|
96
|
-
expect(mockOnSetPage).toHaveBeenCalledWith(expect.any(Object), 2);
|
|
97
|
-
});
|
|
98
|
-
it('disables previous button on first page', () => {
|
|
99
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
100
|
-
const previousButton = react_1.screen.getByRole('button', { name: /Go to previous image/i });
|
|
101
|
-
expect(previousButton).toBeDisabled();
|
|
102
|
-
});
|
|
103
|
-
it('disables next button on last page', () => {
|
|
104
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
105
|
-
// Navigate to last page
|
|
106
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
107
|
-
react_1.fireEvent.click(nextButton); // page 2
|
|
108
|
-
react_1.fireEvent.click(nextButton); // page 3
|
|
109
|
-
expect(nextButton).toBeDisabled();
|
|
110
|
-
});
|
|
111
|
-
it('disables both navigation buttons when isDisabled is true', () => {
|
|
112
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { isDisabled: true })));
|
|
113
|
-
const previousButton = react_1.screen.getByRole('button', { name: /Go to previous image/i });
|
|
114
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
115
|
-
expect(previousButton).toBeDisabled();
|
|
116
|
-
expect(nextButton).toBeDisabled();
|
|
117
|
-
});
|
|
118
|
-
it('uses custom aria labels for pagination', () => {
|
|
119
|
-
const customLabels = {
|
|
120
|
-
paginationAriaLabel: 'Custom pagination',
|
|
121
|
-
toPreviousPageAriaLabel: 'Go to previous image',
|
|
122
|
-
toNextPageAriaLabel: 'Go to next image'
|
|
123
|
-
};
|
|
124
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, customLabels)));
|
|
125
|
-
expect(react_1.screen.getByRole('navigation', { name: 'Custom pagination' })).toBeInTheDocument();
|
|
126
|
-
expect(react_1.screen.getByRole('button', { name: 'Go to previous image' })).toBeInTheDocument();
|
|
127
|
-
expect(react_1.screen.getByRole('button', { name: 'Go to next image' })).toBeInTheDocument();
|
|
128
|
-
});
|
|
129
|
-
it('renders with compact mode when isCompact is true', () => {
|
|
130
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { isCompact: true })));
|
|
131
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
132
|
-
expect(modal).toHaveClass('pf-m-compact');
|
|
133
|
-
});
|
|
134
|
-
it('applies custom className when provided', () => {
|
|
135
|
-
const customClassName = 'custom-image-preview';
|
|
136
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { className: customClassName })));
|
|
137
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
138
|
-
expect(modal).toHaveClass(customClassName);
|
|
139
|
-
});
|
|
140
|
-
it('applies display mode class correctly', () => {
|
|
141
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { displayMode: Chatbot_1.ChatbotDisplayMode.embedded })));
|
|
142
|
-
const modal = react_1.screen.getByRole('dialog');
|
|
143
|
-
expect(modal).toHaveClass('pf-chatbot__image-preview-modal--embedded');
|
|
144
|
-
});
|
|
145
|
-
it('passes additional props to ChatbotModal', () => {
|
|
146
|
-
const modalClass = 'custom-modal-class';
|
|
147
|
-
const additionalProps = {
|
|
148
|
-
'data-testid': 'modal',
|
|
149
|
-
className: modalClass
|
|
150
|
-
};
|
|
151
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, additionalProps)));
|
|
152
|
-
const modal = react_1.screen.getByTestId('modal');
|
|
153
|
-
expect(modal).toBeInTheDocument();
|
|
154
|
-
expect(modal).toBeInTheDocument();
|
|
155
|
-
expect(modal).toHaveClass(modalClass);
|
|
156
|
-
});
|
|
157
|
-
it('passes modalHeaderProps correctly', () => {
|
|
158
|
-
const headerClass = 'custom-modal-header-class';
|
|
159
|
-
const headerProps = {
|
|
160
|
-
'data-testid': 'header',
|
|
161
|
-
className: headerClass
|
|
162
|
-
};
|
|
163
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { modalHeaderProps: headerProps })));
|
|
164
|
-
expect(react_1.screen.getByTestId('header')).toBeInTheDocument();
|
|
165
|
-
expect(react_1.screen.getByTestId('header')).toHaveClass(headerClass);
|
|
166
|
-
});
|
|
167
|
-
it('passes modalBodyProps correctly', () => {
|
|
168
|
-
const bodyClass = 'custom-modal-body-class';
|
|
169
|
-
const bodyProps = {
|
|
170
|
-
'data-testid': 'body',
|
|
171
|
-
className: bodyClass
|
|
172
|
-
};
|
|
173
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { modalBodyProps: bodyProps })));
|
|
174
|
-
expect(react_1.screen.getByTestId('body')).toBeInTheDocument();
|
|
175
|
-
expect(react_1.screen.getByTestId('body')).toHaveClass(bodyClass);
|
|
176
|
-
});
|
|
177
|
-
it('handles single image without pagination', () => {
|
|
178
|
-
const singleImage = [mockImages[0]];
|
|
179
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { images: singleImage })));
|
|
180
|
-
expect(react_1.screen.queryByText('1/1')).not.toBeInTheDocument();
|
|
181
|
-
expect(react_1.screen.queryByRole('button', { name: /Go to previous image/i })).not.toBeInTheDocument();
|
|
182
|
-
expect(react_1.screen.queryByRole('button', { name: /Go to next image/i })).not.toBeInTheDocument();
|
|
183
|
-
});
|
|
184
|
-
it('calls onCloseFileDetailsLabel when file details close button is clicked', () => {
|
|
185
|
-
const mockOnClose = jest.fn();
|
|
186
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { onCloseFileDetailsLabel: mockOnClose })));
|
|
187
|
-
const closeButton = react_1.screen.getByRole('button', { name: /Close image1.jpg/i });
|
|
188
|
-
react_1.fireEvent.click(closeButton);
|
|
189
|
-
expect(mockOnClose).toHaveBeenCalled();
|
|
190
|
-
});
|
|
191
|
-
it('passes fileDetailsLabelProps correctly to FileDetailsLabel', () => {
|
|
192
|
-
const customFileDetailsProps = {
|
|
193
|
-
'data-testid': 'custom-file-details'
|
|
194
|
-
};
|
|
195
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { fileDetailsLabelProps: customFileDetailsProps })));
|
|
196
|
-
expect(react_1.screen.getByTestId('custom-file-details')).toBeInTheDocument();
|
|
197
|
-
});
|
|
198
|
-
it('displays file details for current page when navigating', () => {
|
|
199
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps)));
|
|
200
|
-
// Initially shows first image details
|
|
201
|
-
expect(react_1.screen.getByText('image1.jpg')).toBeInTheDocument();
|
|
202
|
-
expect(react_1.screen.getByText('2.5 MB')).toBeInTheDocument();
|
|
203
|
-
// Navigate to second page
|
|
204
|
-
const nextButton = react_1.screen.getByRole('button', { name: /Go to next image/i });
|
|
205
|
-
react_1.fireEvent.click(nextButton);
|
|
206
|
-
// Should now show second image details
|
|
207
|
-
expect(react_1.screen.getByText('image2.png')).toBeInTheDocument();
|
|
208
|
-
expect(react_1.screen.getByText('1.8 MB')).toBeInTheDocument();
|
|
209
|
-
// Navigate to third page
|
|
210
|
-
react_1.fireEvent.click(nextButton);
|
|
211
|
-
// Should now show third image details (no file size)
|
|
212
|
-
expect(react_1.screen.getByText('image3.gif')).toBeInTheDocument();
|
|
213
|
-
expect(react_1.screen.queryByText(/MB/)).not.toBeInTheDocument();
|
|
214
|
-
});
|
|
215
|
-
it('sets hasTruncation to false on FileDetailsLabel', () => {
|
|
216
|
-
const longFileName = 'very-long-filename-that-would-normally-be-truncated-in-other-contexts.jpg';
|
|
217
|
-
const imageWithLongName = {
|
|
218
|
-
fileName: longFileName,
|
|
219
|
-
fileSize: '1.0 MB',
|
|
220
|
-
image: (0, jsx_runtime_1.jsx)("img", { src: "", alt: "Test image with long name" })
|
|
221
|
-
};
|
|
222
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ImagePreview_1.default, Object.assign({}, defaultProps, { images: [imageWithLongName] })));
|
|
223
|
-
expect(react_1.screen.getByText(longFileName)).toBeInTheDocument();
|
|
224
|
-
});
|
|
225
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|