@patternfly/chatbot 6.5.0-prerelease.9 → 6.5.0
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 +9 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -2
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +38 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +29 -2
- package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
- package/dist/cjs/CodeModal/CodeModal.js +53 -12
- package/dist/cjs/DeepThinking/DeepThinking.d.ts +13 -0
- package/dist/cjs/DeepThinking/DeepThinking.js +31 -3
- package/dist/cjs/DeepThinking/DeepThinking.test.js +80 -0
- package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +44 -0
- package/dist/cjs/MarkdownContent/MarkdownContent.js +181 -0
- package/dist/cjs/MarkdownContent/MarkdownContent.test.d.ts +1 -0
- package/dist/cjs/MarkdownContent/MarkdownContent.test.js +192 -0
- package/dist/cjs/MarkdownContent/index.d.ts +2 -0
- package/dist/cjs/MarkdownContent/index.js +23 -0
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +3 -1
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +15 -4
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +1 -0
- package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.js +131 -0
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -3
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +30 -0
- package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +5 -1
- package/dist/cjs/Message/LinkMessage/LinkMessage.js +4 -3
- package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +9 -1
- package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -1
- package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +7 -1
- package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -1
- package/dist/cjs/Message/Message.d.ts +20 -3
- package/dist/cjs/Message/Message.js +7 -160
- package/dist/cjs/Message/Message.test.js +129 -2
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.js +22 -0
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
- package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +25 -0
- package/dist/cjs/Message/MessageAndActions/index.d.ts +1 -0
- package/dist/cjs/Message/MessageAndActions/index.js +17 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.js +22 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +25 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.js +22 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
- package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +25 -0
- package/dist/cjs/Message/MessageAttachments/index.d.ts +2 -0
- package/dist/cjs/Message/MessageAttachments/index.js +18 -0
- package/dist/cjs/Message/MessageInput.d.ts +1 -1
- package/dist/cjs/Message/MessageInput.js +3 -1
- package/dist/cjs/Message/MessageLoading.d.ts +13 -4
- package/dist/cjs/Message/MessageLoading.js +19 -5
- package/dist/cjs/Message/MessageLoading.test.d.ts +1 -0
- package/dist/cjs/Message/MessageLoading.test.js +25 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.js +3 -2
- package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
- package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +109 -0
- package/dist/cjs/Message/QuickResponse/index.d.ts +1 -0
- package/dist/cjs/Message/QuickResponse/index.js +17 -0
- package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +1 -1
- package/dist/cjs/Message/QuickStarts/QuickStartTile.js +3 -2
- package/dist/cjs/Message/QuickStarts/index.d.ts +2 -0
- package/dist/cjs/Message/QuickStarts/index.js +18 -0
- package/dist/cjs/Message/TableMessage/TableMessage.d.ts +6 -1
- package/dist/cjs/Message/TableMessage/TableMessage.js +3 -2
- package/dist/cjs/Message/TextMessage/TextMessage.d.ts +8 -1
- package/dist/cjs/Message/TextMessage/TextMessage.js +3 -2
- package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +3 -1
- package/dist/cjs/Message/UserFeedback/UserFeedback.js +8 -6
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
- package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +3 -2
- package/dist/cjs/Message/UserFeedback/index.d.ts +2 -0
- package/dist/cjs/Message/UserFeedback/index.js +18 -0
- package/dist/cjs/Message/index.d.ts +8 -0
- package/dist/cjs/Message/index.js +8 -0
- package/dist/cjs/MessageBar/MessageBar.d.ts +4 -0
- package/dist/cjs/MessageBar/MessageBar.js +20 -5
- package/dist/cjs/MessageBar/MessageBar.test.js +8 -0
- package/dist/cjs/Onboarding/Onboarding.d.ts +36 -0
- package/dist/cjs/Onboarding/Onboarding.js +37 -0
- package/dist/cjs/Onboarding/Onboarding.test.d.ts +1 -0
- package/dist/cjs/Onboarding/Onboarding.test.js +80 -0
- package/dist/cjs/Onboarding/index.d.ts +2 -0
- package/dist/cjs/Onboarding/index.js +23 -0
- package/dist/cjs/ResponseActions/ResponseActions.d.ts +7 -0
- package/dist/cjs/ResponseActions/ResponseActions.js +28 -7
- package/dist/cjs/ResponseActions/ResponseActions.test.js +67 -12
- package/dist/cjs/ResponseActions/ResponseActionsGroups.d.ts +13 -0
- package/dist/cjs/ResponseActions/ResponseActionsGroups.js +22 -0
- package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
- package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +25 -0
- package/dist/cjs/ResponseActions/index.d.ts +1 -0
- package/dist/cjs/ResponseActions/index.js +1 -0
- package/dist/cjs/ToolCall/ToolCall.d.ts +11 -0
- package/dist/cjs/ToolCall/ToolCall.js +24 -3
- package/dist/cjs/ToolCall/ToolCall.test.js +57 -0
- package/dist/cjs/ToolResponse/ToolResponse.d.ts +17 -0
- package/dist/cjs/ToolResponse/ToolResponse.js +49 -3
- package/dist/cjs/ToolResponse/ToolResponse.test.js +100 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +7 -1
- package/dist/css/main.css +264 -30
- package/dist/css/main.css.map +1 -1
- package/dist/dynamic/MarkdownContent/package.json +1 -0
- package/dist/dynamic/Onboarding/package.json +1 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +9 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +10 -3
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +38 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +30 -3
- package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
- package/dist/esm/CodeModal/CodeModal.js +54 -13
- package/dist/esm/DeepThinking/DeepThinking.d.ts +13 -0
- package/dist/esm/DeepThinking/DeepThinking.js +28 -3
- package/dist/esm/DeepThinking/DeepThinking.test.js +80 -0
- package/dist/esm/MarkdownContent/MarkdownContent.d.ts +44 -0
- package/dist/esm/MarkdownContent/MarkdownContent.js +174 -0
- package/dist/esm/MarkdownContent/MarkdownContent.test.d.ts +1 -0
- package/dist/esm/MarkdownContent/MarkdownContent.test.js +187 -0
- package/dist/esm/MarkdownContent/index.d.ts +2 -0
- package/dist/esm/MarkdownContent/index.js +2 -0
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +3 -1
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +15 -4
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +1 -0
- package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.js +126 -0
- package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
- package/dist/esm/Message/ErrorMessage/ErrorMessage.js +3 -3
- package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
- package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +25 -0
- package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +5 -1
- package/dist/esm/Message/LinkMessage/LinkMessage.js +4 -3
- package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +9 -1
- package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -1
- package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +7 -1
- package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -1
- package/dist/esm/Message/Message.d.ts +20 -3
- package/dist/esm/Message/Message.js +8 -161
- package/dist/esm/Message/Message.test.js +129 -2
- package/dist/esm/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
- package/dist/esm/Message/MessageAndActions/MessageAndActions.js +18 -0
- package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
- package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +20 -0
- package/dist/esm/Message/MessageAndActions/index.d.ts +1 -0
- package/dist/esm/Message/MessageAndActions/index.js +1 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.js +18 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +20 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.js +18 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
- package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +20 -0
- package/dist/esm/Message/MessageAttachments/index.d.ts +2 -0
- package/dist/esm/Message/MessageAttachments/index.js +2 -0
- package/dist/esm/Message/MessageInput.d.ts +1 -1
- package/dist/esm/Message/MessageInput.js +1 -1
- package/dist/esm/Message/MessageLoading.d.ts +13 -4
- package/dist/esm/Message/MessageLoading.js +16 -4
- package/dist/esm/Message/MessageLoading.test.d.ts +1 -0
- package/dist/esm/Message/MessageLoading.test.js +20 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.js +3 -2
- package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
- package/dist/esm/Message/QuickResponse/QuickResponse.test.js +104 -0
- package/dist/esm/Message/QuickResponse/index.d.ts +1 -0
- package/dist/esm/Message/QuickResponse/index.js +1 -0
- package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +1 -1
- package/dist/esm/Message/QuickStarts/QuickStartTile.js +1 -1
- package/dist/esm/Message/QuickStarts/index.d.ts +2 -0
- package/dist/esm/Message/QuickStarts/index.js +2 -0
- package/dist/esm/Message/TableMessage/TableMessage.d.ts +6 -1
- package/dist/esm/Message/TableMessage/TableMessage.js +3 -2
- package/dist/esm/Message/TextMessage/TextMessage.d.ts +8 -1
- package/dist/esm/Message/TextMessage/TextMessage.js +3 -2
- package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +3 -1
- package/dist/esm/Message/UserFeedback/UserFeedback.js +7 -7
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
- package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +1 -2
- package/dist/esm/Message/UserFeedback/index.d.ts +2 -0
- package/dist/esm/Message/UserFeedback/index.js +2 -0
- package/dist/esm/Message/index.d.ts +8 -0
- package/dist/esm/Message/index.js +8 -0
- package/dist/esm/MessageBar/MessageBar.d.ts +4 -0
- package/dist/esm/MessageBar/MessageBar.js +20 -5
- package/dist/esm/MessageBar/MessageBar.test.js +8 -0
- package/dist/esm/Onboarding/Onboarding.d.ts +36 -0
- package/dist/esm/Onboarding/Onboarding.js +30 -0
- package/dist/esm/Onboarding/Onboarding.test.d.ts +1 -0
- package/dist/esm/Onboarding/Onboarding.test.js +75 -0
- package/dist/esm/Onboarding/index.d.ts +2 -0
- package/dist/esm/Onboarding/index.js +2 -0
- package/dist/esm/ResponseActions/ResponseActions.d.ts +7 -0
- package/dist/esm/ResponseActions/ResponseActions.js +28 -7
- package/dist/esm/ResponseActions/ResponseActions.test.js +67 -12
- package/dist/esm/ResponseActions/ResponseActionsGroups.d.ts +13 -0
- package/dist/esm/ResponseActions/ResponseActionsGroups.js +18 -0
- package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
- package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +20 -0
- package/dist/esm/ResponseActions/index.d.ts +1 -0
- package/dist/esm/ResponseActions/index.js +1 -0
- package/dist/esm/ToolCall/ToolCall.d.ts +11 -0
- package/dist/esm/ToolCall/ToolCall.js +21 -3
- package/dist/esm/ToolCall/ToolCall.test.js +57 -0
- package/dist/esm/ToolResponse/ToolResponse.d.ts +17 -0
- package/dist/esm/ToolResponse/ToolResponse.js +46 -3
- package/dist/esm/ToolResponse/ToolResponse.test.js +100 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -3
- package/patternfly-docs/content/extensions/chatbot/chatbot.md +57 -0
- package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +12 -12
- package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomStructure.tsx +102 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithDeepThinking.tsx +25 -11
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +14 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownDeepThinking.tsx +26 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownToolCall.tsx +29 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownToolResponse.tsx +200 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMultipleActionGroups.tsx +61 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithPersistedActions.tsx +22 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +11 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithToolCall.tsx +14 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithToolResponse.tsx +222 -105
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +123 -14
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +1 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSearchActions.tsx +198 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarIndicatorThinking.tsx +15 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactOnboarding.tsx +141 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/Onboarding.tsx +151 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/RH-Hat-Image.svg +9 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +67 -29
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +18 -18
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +33 -19
- package/patternfly-docs/patternfly-docs.config.js +1 -1
- package/patternfly-docs/patternfly-docs.source.js +1 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +43 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +95 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +51 -15
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +56 -14
- package/src/ChatbotModal/ChatbotModal.scss +3 -0
- package/src/CodeModal/CodeModal.tsx +71 -26
- package/src/DeepThinking/DeepThinking.scss +1 -1
- package/src/DeepThinking/DeepThinking.test.tsx +109 -0
- package/src/DeepThinking/DeepThinking.tsx +54 -5
- package/src/MarkdownContent/MarkdownContent.test.tsx +207 -0
- package/src/MarkdownContent/MarkdownContent.tsx +269 -0
- package/src/MarkdownContent/index.ts +2 -0
- package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +13 -0
- package/src/Message/CodeBlockMessage/CodeBlockMessage.test.tsx +171 -0
- package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +17 -4
- package/src/Message/ErrorMessage/ErrorMessage.test.tsx +38 -0
- package/src/Message/ErrorMessage/ErrorMessage.tsx +17 -2
- package/src/Message/LinkMessage/LinkMessage.scss +5 -0
- package/src/Message/LinkMessage/LinkMessage.tsx +24 -2
- package/src/Message/ListMessage/ListMessage.scss +8 -0
- package/src/Message/ListMessage/OrderedListMessage.tsx +16 -2
- package/src/Message/ListMessage/UnorderedListMessage.tsx +12 -2
- package/src/Message/Message.scss +11 -7
- package/src/Message/Message.test.tsx +202 -2
- package/src/Message/Message.tsx +129 -241
- package/src/Message/MessageAndActions/MessageAndActions.test.tsx +23 -0
- package/src/Message/MessageAndActions/MessageAndActions.tsx +22 -0
- package/src/Message/MessageAndActions/index.ts +1 -0
- package/src/Message/MessageAttachments/MessageAttachmentItem.test.tsx +23 -0
- package/src/Message/MessageAttachments/MessageAttachmentItem.tsx +25 -0
- package/src/Message/MessageAttachments/MessageAttachmentsContainer.test.tsx +23 -0
- package/src/Message/MessageAttachments/MessageAttachmentsContainer.tsx +25 -0
- package/src/Message/MessageAttachments/index.ts +2 -0
- package/src/Message/MessageInput.tsx +1 -1
- package/src/Message/MessageLoading.test.tsx +23 -0
- package/src/Message/MessageLoading.tsx +17 -2
- package/src/Message/QuickResponse/QuickResponse.scss +3 -1
- package/src/Message/QuickResponse/QuickResponse.test.tsx +131 -0
- package/src/Message/QuickResponse/QuickResponse.tsx +3 -2
- package/src/Message/QuickResponse/index.ts +1 -0
- package/src/Message/QuickStarts/QuickStartTile.tsx +1 -1
- package/src/Message/QuickStarts/index.ts +2 -0
- package/src/Message/TableMessage/TableMessage.scss +13 -1
- package/src/Message/TableMessage/TableMessage.tsx +18 -2
- package/src/Message/TextMessage/TextMessage.scss +12 -0
- package/src/Message/TextMessage/TextMessage.tsx +29 -2
- package/src/Message/UserFeedback/UserFeedback.scss +28 -1
- package/src/Message/UserFeedback/UserFeedback.tsx +23 -13
- package/src/Message/UserFeedback/UserFeedbackComplete.tsx +1 -4
- package/src/Message/UserFeedback/index.ts +2 -0
- package/src/Message/index.ts +8 -0
- package/src/MessageBar/AttachButton.scss +0 -1
- package/src/MessageBar/MessageBar.scss +48 -6
- package/src/MessageBar/MessageBar.test.tsx +12 -0
- package/src/MessageBar/MessageBar.tsx +38 -4
- package/src/MessageBar/MicrophoneButton.scss +0 -1
- package/src/MessageBar/SendButton.scss +0 -1
- package/src/MessageBar/StopButton.scss +0 -1
- package/src/Onboarding/Onboarding.scss +101 -0
- package/src/Onboarding/Onboarding.test.tsx +148 -0
- package/src/Onboarding/Onboarding.tsx +126 -0
- package/src/Onboarding/index.ts +3 -0
- package/src/ResponseActions/ResponseActions.scss +12 -1
- package/src/ResponseActions/ResponseActions.test.tsx +111 -12
- package/src/ResponseActions/ResponseActions.tsx +44 -10
- package/src/ResponseActions/ResponseActionsGroups.test.tsx +23 -0
- package/src/ResponseActions/ResponseActionsGroups.tsx +28 -0
- package/src/ResponseActions/index.ts +1 -0
- package/src/ToolCall/ToolCall.scss +1 -1
- package/src/ToolCall/ToolCall.test.tsx +91 -0
- package/src/ToolCall/ToolCall.tsx +49 -4
- package/src/ToolResponse/ToolResponse.scss +13 -3
- package/src/ToolResponse/ToolResponse.test.tsx +119 -0
- package/src/ToolResponse/ToolResponse.tsx +82 -7
- package/src/index.ts +6 -0
- package/src/main.scss +2 -0
- package/tsconfig.json +1 -1
- package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +0 -44
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
|
|
20
20
|
import { CheckIcon } from '@patternfly/react-icons/dist/esm/icons/check-icon';
|
|
21
21
|
import { CopyIcon } from '@patternfly/react-icons/dist/esm/icons/copy-icon';
|
|
22
|
+
import { css } from '@patternfly/react-styles';
|
|
22
23
|
|
|
23
24
|
export interface CodeBlockMessageProps {
|
|
24
25
|
/** Content rendered in code block */
|
|
@@ -41,6 +42,8 @@ export interface CodeBlockMessageProps {
|
|
|
41
42
|
customActions?: React.ReactNode;
|
|
42
43
|
/** Sets background colors to be appropriate on primary chatbot background */
|
|
43
44
|
isPrimary?: boolean;
|
|
45
|
+
/** Flag indicating that the content should retain message styles when using Markdown. */
|
|
46
|
+
shouldRetainStyles?: boolean;
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
const DEFAULT_EXPANDED_TEXT = 'Show less';
|
|
@@ -57,6 +60,7 @@ const CodeBlockMessage = ({
|
|
|
57
60
|
collapsedText = DEFAULT_COLLAPSED_TEXT,
|
|
58
61
|
customActions,
|
|
59
62
|
isPrimary,
|
|
63
|
+
shouldRetainStyles,
|
|
60
64
|
...props
|
|
61
65
|
}: CodeBlockMessageProps) => {
|
|
62
66
|
const [copied, setCopied] = useState(false);
|
|
@@ -88,13 +92,22 @@ const CodeBlockMessage = ({
|
|
|
88
92
|
);
|
|
89
93
|
}
|
|
90
94
|
|
|
91
|
-
const onToggle = (isExpanded) => {
|
|
95
|
+
const onToggle = (isExpanded: boolean) => {
|
|
92
96
|
setIsExpanded(isExpanded);
|
|
93
97
|
};
|
|
94
98
|
|
|
95
99
|
// Handle clicking copy button
|
|
96
|
-
const handleCopy = useCallback((
|
|
97
|
-
|
|
100
|
+
const handleCopy = useCallback((_event: React.MouseEvent, text: React.ReactNode) => {
|
|
101
|
+
let textToCopy = '';
|
|
102
|
+
if (typeof text === 'string') {
|
|
103
|
+
textToCopy = text;
|
|
104
|
+
} else {
|
|
105
|
+
if (codeBlockRef.current) {
|
|
106
|
+
const codeElement = codeBlockRef.current.querySelector('code');
|
|
107
|
+
textToCopy = codeElement?.textContent || '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
navigator.clipboard.writeText(textToCopy);
|
|
98
111
|
setCopied(true);
|
|
99
112
|
}, []);
|
|
100
113
|
|
|
@@ -138,7 +151,7 @@ const CodeBlockMessage = ({
|
|
|
138
151
|
);
|
|
139
152
|
|
|
140
153
|
return (
|
|
141
|
-
<div className=
|
|
154
|
+
<div className={css('pf-chatbot__message-code-block', shouldRetainStyles && 'pf-m-markdown')} ref={codeBlockRef}>
|
|
142
155
|
<CodeBlock actions={actions}>
|
|
143
156
|
<CodeBlockCode>
|
|
144
157
|
<>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import '@testing-library/jest-dom';
|
|
3
|
+
import ErrorMessage from './ErrorMessage';
|
|
4
|
+
|
|
5
|
+
test('Renders with title', () => {
|
|
6
|
+
render(<ErrorMessage title="Error occurred" />);
|
|
7
|
+
|
|
8
|
+
expect(screen.getByText('Error occurred')).toBeVisible();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('Renders with children', () => {
|
|
12
|
+
render(<ErrorMessage title="Error occurred">This is the error message body</ErrorMessage>);
|
|
13
|
+
|
|
14
|
+
expect(screen.getByText('This is the error message body')).toBeVisible();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('Renders with action links', () => {
|
|
18
|
+
const actionLinks = (
|
|
19
|
+
<a href="#retry" data-testid="retry-link">
|
|
20
|
+
Retry action link
|
|
21
|
+
</a>
|
|
22
|
+
);
|
|
23
|
+
render(<ErrorMessage title="Error occurred" actionLinks={actionLinks} />);
|
|
24
|
+
|
|
25
|
+
expect(screen.getByText('Retry action link')).toBeVisible();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('Renders with custom className', () => {
|
|
29
|
+
render(<ErrorMessage title="Error occurred" className="custom-error-class" />);
|
|
30
|
+
|
|
31
|
+
expect(screen.getByText('Error occurred').parentElement).toHaveClass('custom-error-class');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('Renders with spread props', () => {
|
|
35
|
+
render(<ErrorMessage title="Error occurred" id="test-error-id" />);
|
|
36
|
+
|
|
37
|
+
expect(screen.getByText('Error occurred').parentElement).toHaveAttribute('id', 'test-error-id');
|
|
38
|
+
});
|
|
@@ -4,8 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
import { Alert, AlertProps } from '@patternfly/react-core';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* ErrorMessage displays an inline danger alert for error states in messages.
|
|
9
|
+
* Use this component when passing children to Message to display error information.
|
|
10
|
+
*/
|
|
11
|
+
export interface ErrorMessageProps extends Partial<AlertProps> {
|
|
12
|
+
/** Content to display in the error alert body */
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
/** Additional classes for the error alert */
|
|
15
|
+
className?: string;
|
|
16
|
+
/** Title of the error alert */
|
|
17
|
+
title?: React.ReactNode;
|
|
18
|
+
/** Action links to display in the alert footer */
|
|
19
|
+
actionLinks?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const ErrorMessage = ({ title, actionLinks, children, className, ...props }: ErrorMessageProps) => (
|
|
23
|
+
<Alert isInline variant="danger" title={title} actionLinks={actionLinks} className={className} {...props}>
|
|
9
24
|
{children}
|
|
10
25
|
</Alert>
|
|
11
26
|
);
|
|
@@ -5,8 +5,21 @@
|
|
|
5
5
|
import { Button, ButtonProps } from '@patternfly/react-core';
|
|
6
6
|
import { ExternalLinkSquareAltIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { ExtraProps } from 'react-markdown';
|
|
8
|
+
import { css } from '@patternfly/react-styles';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
export interface LinkMessageProps {
|
|
11
|
+
/** Flag indicating that the content should retain message styles when using Markdown. */
|
|
12
|
+
shouldRetainStyles?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const LinkMessage = ({
|
|
16
|
+
children,
|
|
17
|
+
target,
|
|
18
|
+
href,
|
|
19
|
+
id,
|
|
20
|
+
shouldRetainStyles,
|
|
21
|
+
...props
|
|
22
|
+
}: LinkMessageProps & ButtonProps & ExtraProps) => {
|
|
10
23
|
if (target === '_blank') {
|
|
11
24
|
return (
|
|
12
25
|
<Button
|
|
@@ -20,6 +33,7 @@ const LinkMessage = ({ children, target, href, id, ...props }: ButtonProps & Ext
|
|
|
20
33
|
// need to explicitly call this out or id doesn't seem to get passed - required for footnotes
|
|
21
34
|
id={id}
|
|
22
35
|
{...props}
|
|
36
|
+
className={css(shouldRetainStyles && 'pf-m-markdown', props?.className)}
|
|
23
37
|
>
|
|
24
38
|
{children}
|
|
25
39
|
</Button>
|
|
@@ -28,7 +42,15 @@ const LinkMessage = ({ children, target, href, id, ...props }: ButtonProps & Ext
|
|
|
28
42
|
|
|
29
43
|
return (
|
|
30
44
|
// need to explicitly call this out or id doesn't seem to get passed - required for footnotes
|
|
31
|
-
<Button
|
|
45
|
+
<Button
|
|
46
|
+
isInline
|
|
47
|
+
component="a"
|
|
48
|
+
href={href}
|
|
49
|
+
variant="link"
|
|
50
|
+
id={id}
|
|
51
|
+
{...props}
|
|
52
|
+
className={css(shouldRetainStyles && 'pf-m-markdown', props?.className)}
|
|
53
|
+
>
|
|
32
54
|
{children}
|
|
33
55
|
</Button>
|
|
34
56
|
);
|
|
@@ -4,9 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
import { ExtraProps } from 'react-markdown';
|
|
6
6
|
import { List, ListComponent, OrderType } from '@patternfly/react-core';
|
|
7
|
+
import { css } from '@patternfly/react-styles';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
export interface OrderedListMessageProps {
|
|
10
|
+
/** The ordered list content */
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
/** The number to start the ordered list at. */
|
|
13
|
+
start?: number;
|
|
14
|
+
/** Flag indicating that the content should retain message styles when using Markdown. */
|
|
15
|
+
shouldRetainStyles?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const OrderedListMessage = ({
|
|
19
|
+
children,
|
|
20
|
+
start,
|
|
21
|
+
shouldRetainStyles
|
|
22
|
+
}: OrderedListMessageProps & JSX.IntrinsicElements['ol'] & ExtraProps) => (
|
|
23
|
+
<div className={css('pf-chatbot__message-ordered-list', shouldRetainStyles && 'pf-m-markdown')}>
|
|
10
24
|
<List component={ListComponent.ol} type={OrderType.number} start={start}>
|
|
11
25
|
{children}
|
|
12
26
|
</List>
|
|
@@ -4,9 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
import { ExtraProps } from 'react-markdown';
|
|
6
6
|
import { List } from '@patternfly/react-core';
|
|
7
|
+
import { css } from '@patternfly/react-styles';
|
|
8
|
+
export interface UnrderedListMessageProps {
|
|
9
|
+
/** The ordered list content */
|
|
10
|
+
children?: React.ReactNode;
|
|
11
|
+
/** Flag indicating that the content should retain message styles when using Markdown. */
|
|
12
|
+
shouldRetainStyles?: boolean;
|
|
13
|
+
}
|
|
7
14
|
|
|
8
|
-
const UnorderedListMessage = ({
|
|
9
|
-
|
|
15
|
+
const UnorderedListMessage = ({
|
|
16
|
+
children,
|
|
17
|
+
shouldRetainStyles
|
|
18
|
+
}: UnrderedListMessageProps & JSX.IntrinsicElements['ul'] & ExtraProps) => (
|
|
19
|
+
<div className={css('pf-chatbot__message-unordered-list', shouldRetainStyles && 'pf-m-markdown')}>
|
|
10
20
|
<List>{children}</List>
|
|
11
21
|
</div>
|
|
12
22
|
);
|
package/src/Message/Message.scss
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
display: flex;
|
|
6
6
|
align-items: flex-start;
|
|
7
7
|
gap: var(--pf-t--global--spacer--lg);
|
|
8
|
-
padding-bottom: var(--pf-t--global--spacer--
|
|
8
|
+
padding-bottom: var(--pf-t--global--spacer--lg);
|
|
9
9
|
|
|
10
10
|
// Avatar
|
|
11
11
|
// --------------------------------------------------------------------------
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
&-avatar.pf-chatbot__message-avatar--round.pf-v6-c-avatar {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
&:not(.pf-m-xl, .pf-m-lg, .pf-m-md, .pf-m-sm) {
|
|
22
|
+
--pf-v6-c-avatar--Width: 3rem;
|
|
23
|
+
--pf-v6-c-avatar--Height: 3rem;
|
|
24
|
+
}
|
|
23
25
|
--pf-v6-c-avatar--BorderRadius: var(--pf-t--global--border--radius--pill);
|
|
24
26
|
}
|
|
25
27
|
|
|
@@ -156,8 +158,8 @@
|
|
|
156
158
|
// ============================================================================
|
|
157
159
|
.pf-chatbot.pf-m-compact {
|
|
158
160
|
.pf-chatbot__message {
|
|
159
|
-
gap: var(--pf-t--global--spacer--
|
|
160
|
-
padding-bottom: var(--pf-t--global--spacer--
|
|
161
|
+
gap: var(--pf-t--global--spacer--sm);
|
|
162
|
+
padding-bottom: var(--pf-t--global--spacer--md);
|
|
161
163
|
|
|
162
164
|
.pf-chatbot__message-contents {
|
|
163
165
|
gap: var(--pf-t--global--spacer--xs);
|
|
@@ -169,8 +171,10 @@
|
|
|
169
171
|
}
|
|
170
172
|
|
|
171
173
|
.pf-chatbot__message-avatar.pf-chatbot__message-avatar--round.pf-v6-c-avatar {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
&:not(.pf-m-xl, .pf-m-lg, .pf-m-md, .pf-m-sm) {
|
|
175
|
+
--pf-v6-c-avatar--Width: 1.5rem;
|
|
176
|
+
--pf-v6-c-avatar--Height: 1.5rem;
|
|
177
|
+
}
|
|
174
178
|
}
|
|
175
179
|
|
|
176
180
|
.pf-chatbot__message-contents {
|
|
@@ -228,6 +228,10 @@ describe('Message', () => {
|
|
|
228
228
|
render(<Message avatar="./testImg" role="bot" name="Bot" content="Hi" />);
|
|
229
229
|
expect(screen.getByRole('img')).toHaveAttribute('src', './testImg');
|
|
230
230
|
});
|
|
231
|
+
it('should not render avatar if no avatar prop is passed', () => {
|
|
232
|
+
render(<Message role="bot" name="Bot" content="Hi" />);
|
|
233
|
+
expect(screen.queryByRole('img')).not.toBeInTheDocument();
|
|
234
|
+
});
|
|
231
235
|
it('should render botWord correctly', () => {
|
|
232
236
|
render(<Message avatar="./img" role="bot" name="Bot" content="Hi" botWord="人工知能" />);
|
|
233
237
|
expect(screen.getByText('Bot')).toBeTruthy();
|
|
@@ -433,7 +437,7 @@ describe('Message', () => {
|
|
|
433
437
|
expect(screen.queryByRole('button', { name: /No/i })).toBeFalsy();
|
|
434
438
|
expect(screen.getByRole('button', { name: /1 more/i }));
|
|
435
439
|
});
|
|
436
|
-
it('
|
|
440
|
+
it('Renders response actions when a single actions object is passed', async () => {
|
|
437
441
|
render(
|
|
438
442
|
<Message
|
|
439
443
|
avatar="./img"
|
|
@@ -459,9 +463,204 @@ describe('Message', () => {
|
|
|
459
463
|
/>
|
|
460
464
|
);
|
|
461
465
|
ALL_ACTIONS.forEach(({ label }) => {
|
|
462
|
-
expect(screen.getByRole('button', { name: label })).
|
|
466
|
+
expect(screen.getByRole('button', { name: label })).toBeVisible();
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
it('Renders response actions when an array of actions objects is passed', async () => {
|
|
470
|
+
render(
|
|
471
|
+
<Message
|
|
472
|
+
avatar="./img"
|
|
473
|
+
role="bot"
|
|
474
|
+
name="Bot"
|
|
475
|
+
content="Hi"
|
|
476
|
+
actions={[
|
|
477
|
+
{
|
|
478
|
+
// eslint-disable-next-line no-console
|
|
479
|
+
positive: { onClick: () => console.log('Good response') },
|
|
480
|
+
// eslint-disable-next-line no-console
|
|
481
|
+
negative: { onClick: () => console.log('Bad response') }
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
// eslint-disable-next-line no-console
|
|
485
|
+
copy: { onClick: () => console.log('Copy') },
|
|
486
|
+
// eslint-disable-next-line no-console
|
|
487
|
+
edit: { onClick: () => console.log('Edit') },
|
|
488
|
+
// eslint-disable-next-line no-console
|
|
489
|
+
share: { onClick: () => console.log('Share') },
|
|
490
|
+
// eslint-disable-next-line no-console
|
|
491
|
+
download: { onClick: () => console.log('Download') }
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
// eslint-disable-next-line no-console
|
|
495
|
+
listen: { onClick: () => console.log('Listen') }
|
|
496
|
+
}
|
|
497
|
+
]}
|
|
498
|
+
/>
|
|
499
|
+
);
|
|
500
|
+
ALL_ACTIONS.forEach(({ label }) => {
|
|
501
|
+
expect(screen.getByRole('button', { name: label })).toBeVisible();
|
|
502
|
+
});
|
|
503
|
+
});
|
|
504
|
+
it('Renders response actions when an array of objects containing actions objects is passed', async () => {
|
|
505
|
+
render(
|
|
506
|
+
<Message
|
|
507
|
+
avatar="./img"
|
|
508
|
+
role="bot"
|
|
509
|
+
name="Bot"
|
|
510
|
+
content="Hi"
|
|
511
|
+
actions={[
|
|
512
|
+
{
|
|
513
|
+
actions: {
|
|
514
|
+
// eslint-disable-next-line no-console
|
|
515
|
+
positive: { onClick: () => console.log('Good response') },
|
|
516
|
+
// eslint-disable-next-line no-console
|
|
517
|
+
negative: { onClick: () => console.log('Bad response') }
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
actions: {
|
|
522
|
+
// eslint-disable-next-line no-console
|
|
523
|
+
copy: { onClick: () => console.log('Copy') },
|
|
524
|
+
// eslint-disable-next-line no-console
|
|
525
|
+
edit: { onClick: () => console.log('Edit') },
|
|
526
|
+
// eslint-disable-next-line no-console
|
|
527
|
+
share: { onClick: () => console.log('Share') },
|
|
528
|
+
// eslint-disable-next-line no-console
|
|
529
|
+
download: { onClick: () => console.log('Download') }
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
actions: {
|
|
534
|
+
// eslint-disable-next-line no-console
|
|
535
|
+
listen: { onClick: () => console.log('Listen') }
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
]}
|
|
539
|
+
/>
|
|
540
|
+
);
|
|
541
|
+
ALL_ACTIONS.forEach(({ label }) => {
|
|
542
|
+
expect(screen.getByRole('button', { name: label })).toBeVisible();
|
|
463
543
|
});
|
|
464
544
|
});
|
|
545
|
+
|
|
546
|
+
it('should handle persistActionSelection correctly when a single actions object is passed', async () => {
|
|
547
|
+
render(
|
|
548
|
+
<Message
|
|
549
|
+
avatar="./img"
|
|
550
|
+
role="bot"
|
|
551
|
+
name="Bot"
|
|
552
|
+
content="Test message"
|
|
553
|
+
persistActionSelection
|
|
554
|
+
actions={{
|
|
555
|
+
positive: { onClick: jest.fn() },
|
|
556
|
+
negative: { onClick: jest.fn() }
|
|
557
|
+
}}
|
|
558
|
+
/>
|
|
559
|
+
);
|
|
560
|
+
const goodBtn = screen.getByRole('button', { name: /Good response/i });
|
|
561
|
+
const badBtn = screen.getByRole('button', { name: /Bad response/i });
|
|
562
|
+
|
|
563
|
+
await userEvent.click(goodBtn);
|
|
564
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
565
|
+
'pf-chatbot__button--response-action-clicked'
|
|
566
|
+
);
|
|
567
|
+
|
|
568
|
+
await userEvent.click(screen.getByText('Test message'));
|
|
569
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
570
|
+
'pf-chatbot__button--response-action-clicked'
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
await userEvent.click(badBtn);
|
|
574
|
+
expect(screen.getByRole('button', { name: /Bad response recorded/i })).toHaveClass(
|
|
575
|
+
'pf-chatbot__button--response-action-clicked'
|
|
576
|
+
);
|
|
577
|
+
expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
it('should handle persistActionSelection correctly when an array of actions objects is passed', async () => {
|
|
581
|
+
render(
|
|
582
|
+
<Message
|
|
583
|
+
avatar="./img"
|
|
584
|
+
role="bot"
|
|
585
|
+
name="Bot"
|
|
586
|
+
content="Test message"
|
|
587
|
+
persistActionSelection
|
|
588
|
+
actions={[
|
|
589
|
+
{
|
|
590
|
+
positive: { onClick: jest.fn() },
|
|
591
|
+
negative: { onClick: jest.fn() }
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
copy: { onClick: jest.fn() }
|
|
595
|
+
}
|
|
596
|
+
]}
|
|
597
|
+
/>
|
|
598
|
+
);
|
|
599
|
+
const goodBtn = screen.getByRole('button', { name: /Good response/i });
|
|
600
|
+
const copyBtn = screen.getByRole('button', { name: /Copy/i });
|
|
601
|
+
|
|
602
|
+
await userEvent.click(goodBtn);
|
|
603
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
604
|
+
'pf-chatbot__button--response-action-clicked'
|
|
605
|
+
);
|
|
606
|
+
|
|
607
|
+
await userEvent.click(screen.getByText('Test message'));
|
|
608
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
609
|
+
'pf-chatbot__button--response-action-clicked'
|
|
610
|
+
);
|
|
611
|
+
|
|
612
|
+
await userEvent.click(copyBtn);
|
|
613
|
+
expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
|
|
614
|
+
|
|
615
|
+
await userEvent.click(screen.getByText('Test message'));
|
|
616
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
617
|
+
'pf-chatbot__button--response-action-clicked'
|
|
618
|
+
);
|
|
619
|
+
expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
it('should handle persistActionSelection correctly when an array of objects containing actions objects is passed', async () => {
|
|
623
|
+
render(
|
|
624
|
+
<Message
|
|
625
|
+
avatar="./img"
|
|
626
|
+
role="bot"
|
|
627
|
+
name="Bot"
|
|
628
|
+
content="Test message"
|
|
629
|
+
actions={[
|
|
630
|
+
{
|
|
631
|
+
actions: {
|
|
632
|
+
positive: { onClick: jest.fn() },
|
|
633
|
+
negative: { onClick: jest.fn() }
|
|
634
|
+
},
|
|
635
|
+
persistActionSelection: true
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
actions: {
|
|
639
|
+
copy: { onClick: jest.fn() }
|
|
640
|
+
},
|
|
641
|
+
persistActionSelection: false
|
|
642
|
+
}
|
|
643
|
+
]}
|
|
644
|
+
/>
|
|
645
|
+
);
|
|
646
|
+
const goodBtn = screen.getByRole('button', { name: /Good response/i });
|
|
647
|
+
const copyBtn = screen.getByRole('button', { name: /Copy/i });
|
|
648
|
+
|
|
649
|
+
await userEvent.click(goodBtn);
|
|
650
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
651
|
+
'pf-chatbot__button--response-action-clicked'
|
|
652
|
+
);
|
|
653
|
+
|
|
654
|
+
await userEvent.click(copyBtn);
|
|
655
|
+
expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
|
|
656
|
+
|
|
657
|
+
await userEvent.click(screen.getByText('Test message'));
|
|
658
|
+
expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
|
|
659
|
+
'pf-chatbot__button--response-action-clicked'
|
|
660
|
+
);
|
|
661
|
+
expect(copyBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
|
|
662
|
+
});
|
|
663
|
+
|
|
465
664
|
it('should not show actions if loading', async () => {
|
|
466
665
|
render(
|
|
467
666
|
<Message
|
|
@@ -523,6 +722,7 @@ describe('Message', () => {
|
|
|
523
722
|
expect(screen.queryByRole('button', { name: label })).toBeFalsy();
|
|
524
723
|
});
|
|
525
724
|
});
|
|
725
|
+
|
|
526
726
|
it('should render unordered lists correctly', () => {
|
|
527
727
|
render(<Message avatar="./img" role="user" name="User" content={UNORDERED_LIST} />);
|
|
528
728
|
expect(screen.getByText('Here is an unordered list:')).toBeTruthy();
|