@patternfly/chatbot 2.2.0-prerelease.26 → 2.2.0-prerelease.28
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/ChatbotConversationHistoryDropdown.d.ts +3 -3
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +11 -4
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +22 -10
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +60 -0
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
- package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +29 -0
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
- package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +45 -0
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +2 -2
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- package/dist/cjs/ResponseActions/ResponseActions.test.js +2 -2
- package/dist/css/main.css +17 -3
- package/dist/css/main.css.map +1 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +11 -4
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +22 -10
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +60 -0
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
- package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +22 -0
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
- package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +38 -0
- package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFootnote.js +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +2 -2
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
- package/dist/esm/ResponseActions/ResponseActions.test.js +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +19 -6
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +2 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +2 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +4 -4
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +34 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +7 -7
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +10 -10
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +10 -10
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +1 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +3 -3
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +14 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +130 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +60 -25
- package/src/ChatbotConversationHistoryNav/EmptyState.tsx +44 -0
- package/src/ChatbotConversationHistoryNav/LoadingState.tsx +38 -0
- package/src/ChatbotFooter/ChatbotFootnote.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +2 -2
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +3 -3
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +26 -18
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +2 -2
- package/src/MessageBar/MessageBar.scss +3 -3
- package/src/ResponseActions/ResponseActions.test.tsx +4 -2
@@ -1,11 +1,11 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { DropdownProps } from '@patternfly/react-core';
|
3
3
|
export interface ChatbotConversationHistoryDropdownProps extends Omit<DropdownProps, 'toggle'> {
|
4
|
-
/** Dropdown items rendered in conversation
|
4
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
5
5
|
menuItems: React.ReactNode;
|
6
|
-
/** Optional classname applied to conversation
|
6
|
+
/** Optional classname applied to conversation settings dropdown */
|
7
7
|
menuClassName?: string;
|
8
|
-
/** Tooltip content and aria-label applied to conversation
|
8
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
9
9
|
label?: string;
|
10
10
|
/** Callback for when user selects item. */
|
11
11
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps } from '@patternfly/react-core';
|
2
|
+
import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps } from '@patternfly/react-core';
|
3
3
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
4
|
+
import { HistoryEmptyStateProps } from './EmptyState';
|
4
5
|
export interface Conversation {
|
5
6
|
/** Conversation id */
|
6
7
|
id: string;
|
@@ -10,11 +11,11 @@ export interface Conversation {
|
|
10
11
|
noIcon?: boolean;
|
11
12
|
/** Conversation */
|
12
13
|
text: string;
|
13
|
-
/** Dropdown items rendered in conversation
|
14
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
14
15
|
menuItems?: React.ReactNode;
|
15
|
-
/** Optional classname applied to conversation
|
16
|
+
/** Optional classname applied to conversation settings dropdown */
|
16
17
|
menuClassName?: string;
|
17
|
-
/** Tooltip content and aria-label applied to conversation
|
18
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
18
19
|
label?: string;
|
19
20
|
/** Callback for when user selects item. */
|
20
21
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -69,6 +70,12 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
69
70
|
drawerCloseButtonProps?: DrawerCloseButtonProps;
|
70
71
|
/** Additional props appleid to drawer panel body */
|
71
72
|
drawerPanelBodyProps?: DrawerPanelBodyProps;
|
73
|
+
/** Whether to show drawer loading state */
|
74
|
+
isLoading?: boolean;
|
75
|
+
/** Additional props for loading state */
|
76
|
+
loadingState?: SkeletonProps;
|
77
|
+
/** Content to show in error state. Error state will appear once content is passed in. */
|
78
|
+
errorState?: HistoryEmptyStateProps;
|
72
79
|
}
|
73
80
|
export declare const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps>;
|
74
81
|
export default ChatbotConversationHistoryNav;
|
@@ -24,8 +24,10 @@ const react_core_1 = require("@patternfly/react-core");
|
|
24
24
|
const react_icons_1 = require("@patternfly/react-icons");
|
25
25
|
const Chatbot_1 = require("../Chatbot/Chatbot");
|
26
26
|
const ChatbotConversationHistoryDropdown_1 = __importDefault(require("./ChatbotConversationHistoryDropdown"));
|
27
|
+
const LoadingState_1 = __importDefault(require("./LoadingState"));
|
28
|
+
const EmptyState_1 = __importDefault(require("./EmptyState"));
|
27
29
|
const ChatbotConversationHistoryNav = (_a) => {
|
28
|
-
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps"]);
|
30
|
+
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState"]);
|
29
31
|
const drawerRef = react_1.default.useRef(null);
|
30
32
|
const onExpand = () => {
|
31
33
|
drawerRef.current && drawerRef.current.focus();
|
@@ -52,16 +54,26 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
52
54
|
// Menu Content
|
53
55
|
// - Consumers should pass an array to <Chatbot> of the list of conversations
|
54
56
|
// - Groups could be optional, but items need to be ordered by date
|
55
|
-
const
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
const renderMenuContent = () => {
|
58
|
+
if (errorState) {
|
59
|
+
return react_1.default.createElement(EmptyState_1.default, Object.assign({}, errorState));
|
60
|
+
}
|
61
|
+
return (react_1.default.createElement(react_core_1.Menu, Object.assign({ isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId }, menuProps),
|
62
|
+
react_1.default.createElement(react_core_1.MenuContent, null, buildMenu())));
|
63
|
+
};
|
64
|
+
const renderDrawerContent = () => (react_1.default.createElement(react_1.default.Fragment, null,
|
62
65
|
handleTextInputChange && (react_1.default.createElement("div", { className: "pf-chatbot__input" },
|
63
66
|
react_1.default.createElement(react_core_1.SearchInput, { "aria-label": searchInputAriaLabel, onChange: (_event, value) => handleTextInputChange(value), placeholder: searchInputPlaceholder }))),
|
64
|
-
react_1.default.createElement(react_core_1.DrawerPanelBody, Object.assign({}, drawerPanelBodyProps),
|
67
|
+
react_1.default.createElement(react_core_1.DrawerPanelBody, Object.assign({}, drawerPanelBodyProps), renderMenuContent())));
|
68
|
+
const renderPanelContent = () => {
|
69
|
+
const drawer = (react_1.default.createElement(react_1.default.Fragment, null,
|
70
|
+
react_1.default.createElement(react_core_1.DrawerHead, Object.assign({}, drawerHeadProps),
|
71
|
+
react_1.default.createElement(react_core_1.DrawerActions, Object.assign({ "data-testid": drawerActionsTestId, className: reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : '' }, drawerActionsProps),
|
72
|
+
react_1.default.createElement(react_core_1.DrawerCloseButton, Object.assign({ onClick: onDrawerToggle }, drawerCloseButtonProps)),
|
73
|
+
onNewChat && react_1.default.createElement(react_core_1.Button, { onClick: onNewChat }, newChatButtonText))),
|
74
|
+
isLoading ? react_1.default.createElement(LoadingState_1.default, Object.assign({}, loadingState)) : renderDrawerContent()));
|
75
|
+
return (react_1.default.createElement(react_core_1.DrawerPanelContent, Object.assign({ "aria-live": "polite", focusTrap: { enabled: true }, defaultSize: "384px" }, drawerPanelContentProps), drawer));
|
76
|
+
};
|
65
77
|
// An onKeyDown property must be passed to the Drawer component to handle closing
|
66
78
|
// the drawer panel and deactivating the focus trap via the Escape key.
|
67
79
|
const onEscape = (event) => {
|
@@ -73,7 +85,7 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
73
85
|
}
|
74
86
|
};
|
75
87
|
return (react_1.default.createElement(react_core_1.Drawer, Object.assign({ className: "pf-chatbot__history", isExpanded: isDrawerOpen, onExpand: onExpand, position: "start", onKeyDown: onEscape, isInline: displayMode === Chatbot_1.ChatbotDisplayMode.fullscreen || displayMode === Chatbot_1.ChatbotDisplayMode.embedded }, props),
|
76
|
-
react_1.default.createElement(react_core_1.DrawerContent, Object.assign({ panelContent:
|
88
|
+
react_1.default.createElement(react_core_1.DrawerContent, Object.assign({ panelContent: renderPanelContent() }, drawerContentProps),
|
77
89
|
react_1.default.createElement(react_core_1.DrawerContentBody, Object.assign({}, drawerContentBodyProps),
|
78
90
|
react_1.default.createElement(react_1.default.Fragment, null,
|
79
91
|
react_1.default.createElement("div", { className: `${isDrawerOpen && (displayMode === Chatbot_1.ChatbotDisplayMode.default || displayMode === Chatbot_1.ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
|
@@ -17,6 +17,33 @@ require("@testing-library/jest-dom");
|
|
17
17
|
const react_2 = require("@testing-library/react");
|
18
18
|
const Chatbot_1 = require("../Chatbot/Chatbot");
|
19
19
|
const ChatbotConversationHistoryNav_1 = __importDefault(require("./ChatbotConversationHistoryNav"));
|
20
|
+
const react_core_1 = require("@patternfly/react-core");
|
21
|
+
const ERROR = {
|
22
|
+
bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
|
23
|
+
"To try again, check your connection and reload this page. If the issue persists,",
|
24
|
+
' ',
|
25
|
+
react_1.default.createElement("a", { href: "" }, "contact the support team"),
|
26
|
+
".")),
|
27
|
+
buttonText: 'Reload',
|
28
|
+
buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
|
29
|
+
hasButton: true,
|
30
|
+
titleText: 'Could not load chat history',
|
31
|
+
status: react_core_1.EmptyStateStatus.danger,
|
32
|
+
onClick: () => alert('Clicked Reload')
|
33
|
+
};
|
34
|
+
const ERROR_WITHOUT_BUTTON = {
|
35
|
+
bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
|
36
|
+
"To try again, check your connection and reload this page. If the issue persists,",
|
37
|
+
' ',
|
38
|
+
react_1.default.createElement("a", { href: "" }, "contact the support team"),
|
39
|
+
".")),
|
40
|
+
buttonText: 'Reload',
|
41
|
+
buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
|
42
|
+
hasButton: false,
|
43
|
+
titleText: 'Could not load chat history',
|
44
|
+
status: react_core_1.EmptyStateStatus.danger,
|
45
|
+
onClick: () => alert('Clicked Reload')
|
46
|
+
};
|
20
47
|
describe('ChatbotConversationHistoryNav', () => {
|
21
48
|
const onDrawerToggle = jest.fn();
|
22
49
|
const initialConversations = [
|
@@ -102,4 +129,37 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
102
129
|
const element = container.querySelector('.test');
|
103
130
|
expect(element).toBeInTheDocument();
|
104
131
|
});
|
132
|
+
it('should show loading state if triggered', () => {
|
133
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true }));
|
134
|
+
expect(react_2.screen.getByRole('dialog', { name: /Loading chatbot conversation history/i })).toBeTruthy();
|
135
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
136
|
+
});
|
137
|
+
it('should pass alternative aria label to loading state', () => {
|
138
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, loadingState: { screenreaderText: 'I am a test' } }));
|
139
|
+
expect(react_2.screen.getByRole('dialog', { name: /I am a test/i })).toBeTruthy();
|
140
|
+
});
|
141
|
+
it('should accept errorState', () => {
|
142
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR }));
|
143
|
+
expect(react_2.screen.getByRole('dialog', {
|
144
|
+
name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team . Loading... Reload/i
|
145
|
+
})).toBeTruthy();
|
146
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
147
|
+
expect(react_2.screen.getByRole('button', { name: /Loading... Reload/i })).toBeTruthy();
|
148
|
+
expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
149
|
+
expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
150
|
+
});
|
151
|
+
it('should accept errorState without button', () => {
|
152
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR_WITHOUT_BUTTON }));
|
153
|
+
expect(react_2.screen.getByRole('dialog', {
|
154
|
+
name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team ./i
|
155
|
+
})).toBeTruthy();
|
156
|
+
expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
|
157
|
+
expect(react_2.screen.queryByRole('button', { name: /Loading... Reload/i })).toBeFalsy();
|
158
|
+
expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
|
159
|
+
expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
|
160
|
+
});
|
161
|
+
it('should show loading state over error state if both are supplied', () => {
|
162
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, errorState: ERROR }));
|
163
|
+
expect(react_2.screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
|
164
|
+
});
|
105
165
|
});
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { EmptyStateProps } from '@patternfly/react-core';
|
2
|
+
import React from 'react';
|
3
|
+
export interface HistoryEmptyStateProps extends EmptyStateProps {
|
4
|
+
onClick?: () => void;
|
5
|
+
bodyText?: string | React.ReactNode;
|
6
|
+
buttonText?: string;
|
7
|
+
buttonIcon?: React.ReactNode;
|
8
|
+
hasButton?: boolean;
|
9
|
+
}
|
10
|
+
export declare const HistoryEmptyState: React.FunctionComponent<HistoryEmptyStateProps>;
|
11
|
+
export default HistoryEmptyState;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
3
|
+
var t = {};
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
5
|
+
t[p] = s[p];
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
9
|
+
t[p[i]] = s[p[i]];
|
10
|
+
}
|
11
|
+
return t;
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
exports.HistoryEmptyState = void 0;
|
18
|
+
const react_core_1 = require("@patternfly/react-core");
|
19
|
+
const react_1 = __importDefault(require("react"));
|
20
|
+
const HistoryEmptyState = (_a) => {
|
21
|
+
var { bodyText, buttonIcon, buttonText, status, titleText, headingLevel, onClick, hasButton = false } = _a, props = __rest(_a, ["bodyText", "buttonIcon", "buttonText", "status", "titleText", "headingLevel", "onClick", "hasButton"]);
|
22
|
+
return (react_1.default.createElement(react_core_1.EmptyState, Object.assign({ status: status, titleText: titleText, headingLevel: headingLevel }, props),
|
23
|
+
react_1.default.createElement(react_core_1.EmptyStateBody, null, bodyText),
|
24
|
+
hasButton && (react_1.default.createElement(react_core_1.EmptyStateFooter, null,
|
25
|
+
react_1.default.createElement(react_core_1.EmptyStateActions, null,
|
26
|
+
react_1.default.createElement(react_core_1.Button, { icon: buttonIcon, variant: "secondary", onClick: onClick }, buttonText))))));
|
27
|
+
};
|
28
|
+
exports.HistoryEmptyState = HistoryEmptyState;
|
29
|
+
exports.default = exports.HistoryEmptyState;
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
3
|
+
var t = {};
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
5
|
+
t[p] = s[p];
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
9
|
+
t[p[i]] = s[p[i]];
|
10
|
+
}
|
11
|
+
return t;
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
exports.LoadingState = void 0;
|
18
|
+
const react_core_1 = require("@patternfly/react-core");
|
19
|
+
const react_1 = __importDefault(require("react"));
|
20
|
+
const LoadingState = (_a) => {
|
21
|
+
var { screenreaderText } = _a, rest = __rest(_a, ["screenreaderText"]);
|
22
|
+
return (react_1.default.createElement("div", { className: "pf-chatbot__history-loading" },
|
23
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
24
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ screenreaderText: screenreaderText !== null && screenreaderText !== void 0 ? screenreaderText : 'Loading chatbot conversation history', fontSize: "3xl" }, rest))),
|
25
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
26
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
27
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
28
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
29
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
30
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
31
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
32
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
33
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
34
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
35
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
36
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
37
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
38
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
|
39
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
|
40
|
+
react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
|
41
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
|
42
|
+
react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)))));
|
43
|
+
};
|
44
|
+
exports.LoadingState = LoadingState;
|
45
|
+
exports.default = exports.LoadingState;
|
@@ -17,7 +17,7 @@ export interface ChatbotFootnotePopover {
|
|
17
17
|
bannerImage?: ChatbotFootnotePopoverBannerImage;
|
18
18
|
/** Optional CTA button that can be used to trigger an action and close the popover */
|
19
19
|
cta?: ChatbotFootnotePopoverCTA;
|
20
|
-
/** Optional link that can be used to show
|
20
|
+
/** Optional link that can be used to show an external link like **View AI policy** */
|
21
21
|
link?: ChatbotFootnotePopoverLink;
|
22
22
|
/** Props for PF Popover */
|
23
23
|
popoverProps?: PopoverProps;
|
@@ -42,7 +42,7 @@ const ChatbotFootnote = (_a) => {
|
|
42
42
|
var _a;
|
43
43
|
setIsVisible(false);
|
44
44
|
(_a = popover.cta) === null || _a === void 0 ? void 0 : _a.onClick();
|
45
|
-
} }, ((_b = popover.cta) === null || _b === void 0 ? void 0 : _b.label) || '
|
45
|
+
} }, ((_b = popover.cta) === null || _b === void 0 ? void 0 : _b.label) || 'Dismiss')),
|
46
46
|
(popover === null || popover === void 0 ? void 0 : popover.link) && (react_1.default.createElement(react_core_1.Button, { variant: "link", component: "a", href: popover.link.url, target: "_blank", icon: react_1.default.createElement(external_link_alt_icon_1.ExternalLinkAltIcon, null), iconPosition: "end" }, popover.link.label))));
|
47
47
|
return (react_1.default.createElement("div", Object.assign({ className: `pf-chatbot__footnote ${className !== null && className !== void 0 ? className : ''}` }, props),
|
48
48
|
popover && (react_1.default.createElement(ChatbotPopover_1.default, Object.assign({ className: "pf-chatbot__popover--footnote", "aria-label": ((_c = popover.popoverProps) === null || _c === void 0 ? void 0 : _c['aria-label']) || 'More information', isVisible: isVisible, shouldOpen: (_event, _fn) => setIsVisible(true), shouldClose: (_event, _fn) => setIsVisible(false), bodyContent: popoverBodyContent, footerContent: popoverFooterContent, minWidth: ((_d = popover.popoverProps) === null || _d === void 0 ? void 0 : _d.minWidth) || '432', maxWidth: ((_e = popover.popoverProps) === null || _e === void 0 ? void 0 : _e.maxWidth) || '432', distance: ((_f = popover.popoverProps) === null || _f === void 0 ? void 0 : _f.distance) || 16, showClose: false }, popover.popoverProps),
|
@@ -18,16 +18,16 @@ exports.ChatbotHeaderSelectorDropdown = void 0;
|
|
18
18
|
const react_1 = __importDefault(require("react"));
|
19
19
|
const react_core_1 = require("@patternfly/react-core");
|
20
20
|
const ChatbotHeaderSelectorDropdown = (_a) => {
|
21
|
-
var { value, className, children, onSelect, tooltipProps, tooltipContent = '
|
21
|
+
var { value, className, children, onSelect, tooltipProps, tooltipContent = 'Select model', menuToggleAriaLabel } = _a, props = __rest(_a, ["value", "className", "children", "onSelect", "tooltipProps", "tooltipContent", "menuToggleAriaLabel"]);
|
22
22
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = react_1.default.useState(false);
|
23
|
-
const [defaultAriaLabel, setDefaultAriaLabel] = react_1.default.useState('
|
23
|
+
const [defaultAriaLabel, setDefaultAriaLabel] = react_1.default.useState('Select model');
|
24
24
|
const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ className: "pf-chatbot__tooltip", content: tooltipContent, position: "bottom",
|
25
25
|
// prevents VO announcements of both aria label and tooltip
|
26
26
|
aria: "none" }, tooltipProps),
|
27
27
|
react_1.default.createElement(react_core_1.MenuToggle, { variant: "secondary", "aria-label": menuToggleAriaLabel !== null && menuToggleAriaLabel !== void 0 ? menuToggleAriaLabel : defaultAriaLabel, ref: toggleRef, isExpanded: isOptionsMenuOpen, onClick: () => setIsOptionsMenuOpen(!isOptionsMenuOpen) }, value)));
|
28
28
|
return (react_1.default.createElement(react_core_1.Dropdown, Object.assign({ className: `pf-chatbot__selections ${className !== null && className !== void 0 ? className : ''}`, isOpen: isOptionsMenuOpen, onSelect: (e, value) => {
|
29
29
|
onSelect && onSelect(e, value);
|
30
|
-
setDefaultAriaLabel(`
|
30
|
+
setDefaultAriaLabel(`Select model: ${value}`);
|
31
31
|
setIsOptionsMenuOpen(false);
|
32
32
|
}, onOpenChange: (isOpen) => setIsOptionsMenuOpen(isOpen), popperProps: { position: 'right', appendTo: 'inline' }, shouldFocusToggleOnSelect: true, shouldFocusFirstItemOnOpen: true, toggle: toggle }, props), children));
|
33
33
|
};
|
@@ -23,13 +23,13 @@ describe('ChatbotHeaderSelectorDropdown', () => {
|
|
23
23
|
react_1.default.createElement(react_core_1.DropdownItem, null, "Option 3")));
|
24
24
|
it('should render ChatbotHeaderSelectorDropdown', () => {
|
25
25
|
(0, react_2.render)(react_1.default.createElement(ChatbotHeaderSelectorDropdown_1.ChatbotHeaderSelectorDropdown, { value: "Option 1" }, dropdownItems));
|
26
|
-
expect(react_2.screen.getByRole('button', { name:
|
26
|
+
expect(react_2.screen.getByRole('button', { name: /Select model/i })).toBeTruthy();
|
27
27
|
});
|
28
28
|
it('should call onselect handler when a dropdown item is clicked', () => __awaiter(void 0, void 0, void 0, function* () {
|
29
29
|
const onSelect = jest.fn();
|
30
30
|
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotHeaderSelectorDropdown_1.ChatbotHeaderSelectorDropdown, { value: "Option 1", className: "custom-header-selector-dropdown", onSelect: onSelect }, dropdownItems));
|
31
31
|
(0, react_2.act)(() => {
|
32
|
-
react_2.fireEvent.click(react_2.screen.getByRole('button', { name:
|
32
|
+
react_2.fireEvent.click(react_2.screen.getByRole('button', { name: /Select model/i }));
|
33
33
|
});
|
34
34
|
yield (0, react_2.waitFor)(() => {
|
35
35
|
expect(container.querySelector('.custom-header-selector-dropdown')).toBeTruthy();
|
@@ -19,30 +19,38 @@ const ChatbotWelcomePrompt_1 = __importDefault(require("./ChatbotWelcomePrompt")
|
|
19
19
|
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
20
20
|
describe('ChatbotWelcomePrompt', () => {
|
21
21
|
it('should render welcome prompt', () => {
|
22
|
-
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
22
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?" }));
|
23
23
|
expect(container).toMatchSnapshot();
|
24
24
|
});
|
25
25
|
it('should render correctly', () => {
|
26
|
-
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
27
|
-
expect(react_2.screen.getByText('
|
28
|
-
expect(react_2.screen.getByText('How
|
26
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?" }));
|
27
|
+
expect(react_2.screen.getByText('Hi, ChatBot User!')).toBeTruthy();
|
28
|
+
expect(react_2.screen.getByText('How can I help you today?')).toBeTruthy();
|
29
29
|
});
|
30
30
|
it('should render prompts with titles correctly', () => {
|
31
|
-
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
32
|
-
expect(react_2.screen.getByText('
|
31
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?", prompts: [{ title: 'Set up account' }] }));
|
32
|
+
expect(react_2.screen.getByText('Set up account')).toBeTruthy();
|
33
33
|
});
|
34
34
|
it('should render prompts with messages correctly', () => {
|
35
|
-
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
36
|
-
|
35
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?", prompts: [
|
36
|
+
{ title: 'Set up account', message: 'Choose the necessary settings and preferences for your account.' }
|
37
|
+
] }));
|
38
|
+
expect(react_2.screen.getByText('Choose the necessary settings and preferences for your account.')).toBeTruthy();
|
37
39
|
});
|
38
40
|
it('should render prompts with onClick correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
39
41
|
const spy = jest.fn();
|
40
|
-
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
41
|
-
|
42
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?", prompts: [
|
43
|
+
{
|
44
|
+
title: 'Set up account',
|
45
|
+
message: 'Choose the necessary settings and preferences for your account.',
|
46
|
+
onClick: spy
|
47
|
+
}
|
48
|
+
] }));
|
49
|
+
yield user_event_1.default.click(react_2.screen.getByRole('button', { name: /Set up account/i }));
|
42
50
|
expect(spy).toHaveBeenCalled();
|
43
51
|
}));
|
44
52
|
it('should apply className appropriately', () => {
|
45
|
-
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "
|
53
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotWelcomePrompt_1.default, { title: "Hi, ChatBot User!", description: "How can I help you today?", className: "test", testId: "welcome-prompt" }));
|
46
54
|
const element = react_2.screen.getByTestId('welcome-prompt');
|
47
55
|
expect(element).toHaveClass('test');
|
48
56
|
});
|
@@ -88,7 +88,7 @@ describe('ResponseActions', () => {
|
|
88
88
|
}));
|
89
89
|
it('should handle click outside of group of buttons correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
90
90
|
// using message just so we have something outside the group that's rendered
|
91
|
-
(0, react_2.render)(react_1.default.createElement(Message_1.default, { name: "Bot", role: "bot", avatar: "", content: "
|
91
|
+
(0, react_2.render)(react_1.default.createElement(Message_1.default, { name: "Bot", role: "bot", avatar: "", content: "I updated your account with those settings. You're ready to set up your first dashboard!", actions: {
|
92
92
|
positive: {},
|
93
93
|
negative: {}
|
94
94
|
} }));
|
@@ -102,7 +102,7 @@ describe('ResponseActions', () => {
|
|
102
102
|
yield user_event_1.default.click(badBtn);
|
103
103
|
expect(react_2.screen.getByRole('button', { name: 'Response recorded' })).toHaveClass('pf-chatbot__button--response-action-clicked');
|
104
104
|
expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
|
105
|
-
yield user_event_1.default.click(react_2.screen.getByText(
|
105
|
+
yield user_event_1.default.click(react_2.screen.getByText("I updated your account with those settings. You're ready to set up your first dashboard!"));
|
106
106
|
expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
|
107
107
|
expect(badBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
|
108
108
|
}));
|
package/dist/css/main.css
CHANGED
@@ -308,6 +308,20 @@
|
|
308
308
|
border-radius: unset;
|
309
309
|
}
|
310
310
|
|
311
|
+
.pf-chatbot__history-loading {
|
312
|
+
display: flex;
|
313
|
+
padding: var(--pf-t--global--spacer--lg);
|
314
|
+
flex-direction: column;
|
315
|
+
gap: var(--pf-t--global--spacer--lg);
|
316
|
+
}
|
317
|
+
|
318
|
+
.pf-chatbot__history-loading-block {
|
319
|
+
display: flex;
|
320
|
+
flex-direction: column;
|
321
|
+
gap: var(--pf-t--global--spacer--sm);
|
322
|
+
align-self: stretch;
|
323
|
+
}
|
324
|
+
|
311
325
|
.pf-chatbot__footnote {
|
312
326
|
align-self: center;
|
313
327
|
}
|
@@ -1602,13 +1616,13 @@
|
|
1602
1616
|
.pf-chatbot__message-textarea .pf-v6-c-form-control__textarea:focus-visible {
|
1603
1617
|
outline: none;
|
1604
1618
|
}
|
1605
|
-
.pf-chatbot__message-textarea
|
1606
|
-
outline-offset: 0px;
|
1619
|
+
.pf-chatbot__message-textarea textarea {
|
1620
|
+
outline-offset: 0px !important;
|
1607
1621
|
--pf-v6-c-form-control--PaddingBlockStart: 0;
|
1608
1622
|
--pf-v6-c-form-control--PaddingBlockEnd: 0;
|
1609
1623
|
--pf-v6-c-form-control--BorderRadius: 0;
|
1610
1624
|
}
|
1611
|
-
.pf-chatbot__message-textarea
|
1625
|
+
.pf-chatbot__message-textarea textarea:focus-visible {
|
1612
1626
|
outline: none;
|
1613
1627
|
}
|
1614
1628
|
|
package/dist/css/main.css.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ImageMessage/ImageMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/TableMessage/TableMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AC1GF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAGI;AAAA;IACE;IACA;;;ACpBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AAQF;EACE;;AACA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AASF;AAAA;AAAA;EACE;;;
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ImageMessage/ImageMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/TableMessage/TableMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AC1GF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAGI;AAAA;IACE;IACA;;;ACpBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AAQF;EACE;;AACA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AASF;AAAA;AAAA;EACE;;;AAKN;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACvMF;EACE;;AAEA;EACE;EACA;;;ACHJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EAGI;AAAA;IACE;;EACA;AAAA;IACE;;EAGJ;AAAA;IACE;IACA;IACA;;;AASJ;EACE;;;AC5CJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AASJ;EACE;;;AAOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAOJ;EACE;;;AAOJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;ACvIF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;;AAEF;EACE;;;AAOJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAGJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAOJ;EACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAQE;EACE;;;AAQN;EACE;;;ACvFA;EAA0B;;AAMxB;EAAM;;AACN;EAAuB;;AACvB;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACnBN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;;AC3BF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;AC1CN;EACE;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;;AASA;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AClFF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AAEA;EALF;IAMI;;;AAGF;EACE;;AAEA;EAHF;IAII;;;;AAKN;EACE;;AAEA;EACE;;AAGF;EACE;;AAIA;EADF;IAEI;;;;AAIN;EACE;;AAEA;EAHF;IAII;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;;;;ACrEJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;ACvBF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;EAEE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;;AAGF;EACE;;;AAIJ;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAKF;EACE;;;AAMF;AAAA;EACE;;;AC/DJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EANF;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;EACA;;;AAME;EADF;IAEI;IACA;IACA;;EAEA;IACE;;;;AChDR;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AC7FF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AC9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;AD9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AEhFF;EACE;EACA;EACA;EACA;EAGA;;;ADDE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;AE7CN;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAKF;AAAA;EAEE;EACA;EACA;;;ACtBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;ALjBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AMjDN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAKA;EACE;;;AAOF;EACE;;;ACnBJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EAPF;IAQI;;;AAKF;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;AC7BJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AChDF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AC5BR;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AC1CJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;EAEE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC/CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;ACrBR;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;ACxFN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AC9CJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EAVF;IAWI;;;AAGF;EAdF;IAeI;;;;AAIJ;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAGI;AAAA;IACE;IACA;;;ADtCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AEhDJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1BF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;ACrER;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AC9BA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;IACE;IACA;;;;AAKN;AAAA;EAGE;;AAGE;AAAA;EACE;;AAIJ;AAAA;EACE;;;AC5BJ;EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASA;EACA;EAEA;EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EAKA;EAEA;EACA;EACA;EAEA;EAEA;;;AAMF;EACE;EACA;EAEA;EAEA;EACA;;;AAGF;EACE;EACA","file":"main.css"}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { DropdownProps } from '@patternfly/react-core';
|
3
3
|
export interface ChatbotConversationHistoryDropdownProps extends Omit<DropdownProps, 'toggle'> {
|
4
|
-
/** Dropdown items rendered in conversation
|
4
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
5
5
|
menuItems: React.ReactNode;
|
6
|
-
/** Optional classname applied to conversation
|
6
|
+
/** Optional classname applied to conversation settings dropdown */
|
7
7
|
menuClassName?: string;
|
8
|
-
/** Tooltip content and aria-label applied to conversation
|
8
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
9
9
|
label?: string;
|
10
10
|
/** Callback for when user selects item. */
|
11
11
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps } from '@patternfly/react-core';
|
2
|
+
import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps } from '@patternfly/react-core';
|
3
3
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
4
|
+
import { HistoryEmptyStateProps } from './EmptyState';
|
4
5
|
export interface Conversation {
|
5
6
|
/** Conversation id */
|
6
7
|
id: string;
|
@@ -10,11 +11,11 @@ export interface Conversation {
|
|
10
11
|
noIcon?: boolean;
|
11
12
|
/** Conversation */
|
12
13
|
text: string;
|
13
|
-
/** Dropdown items rendered in conversation
|
14
|
+
/** Dropdown items rendered in conversation settings dropdown */
|
14
15
|
menuItems?: React.ReactNode;
|
15
|
-
/** Optional classname applied to conversation
|
16
|
+
/** Optional classname applied to conversation settings dropdown */
|
16
17
|
menuClassName?: string;
|
17
|
-
/** Tooltip content and aria-label applied to conversation
|
18
|
+
/** Tooltip content and aria-label applied to conversation settings dropdown */
|
18
19
|
label?: string;
|
19
20
|
/** Callback for when user selects item. */
|
20
21
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
@@ -69,6 +70,12 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
69
70
|
drawerCloseButtonProps?: DrawerCloseButtonProps;
|
70
71
|
/** Additional props appleid to drawer panel body */
|
71
72
|
drawerPanelBodyProps?: DrawerPanelBodyProps;
|
73
|
+
/** Whether to show drawer loading state */
|
74
|
+
isLoading?: boolean;
|
75
|
+
/** Additional props for loading state */
|
76
|
+
loadingState?: SkeletonProps;
|
77
|
+
/** Content to show in error state. Error state will appear once content is passed in. */
|
78
|
+
errorState?: HistoryEmptyStateProps;
|
72
79
|
}
|
73
80
|
export declare const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps>;
|
74
81
|
export default ChatbotConversationHistoryNav;
|