@patternfly/chatbot 6.4.0-prerelease.14 → 6.4.0-prerelease.15
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.js +1 -1
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +6 -6
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +13 -12
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -5
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +24 -20
- package/dist/css/main.css +26 -30
- package/dist/css/main.css.map +1 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +1 -1
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +6 -6
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +13 -12
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +18 -6
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +24 -20
- package/package.json +1 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +6 -6
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +1 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +28 -36
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +32 -18
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +74 -60
|
@@ -13,7 +13,7 @@ const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, onSelect
|
|
|
13
13
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
14
14
|
const toggle = (toggleRef) => ((0, jsx_runtime_1.jsx)(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom",
|
|
15
15
|
// prevents VO announcements of both aria label and tooltip
|
|
16
|
-
aria: "none", children: (0, jsx_runtime_1.jsx)(react_core_1.MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), id: id, children: (0, jsx_runtime_1.jsx)(ellipsis_v_icon_1.default, {}) }) }));
|
|
16
|
+
aria: "none", children: (0, jsx_runtime_1.jsx)(react_core_1.MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), id: id, role: "menuitem", children: (0, jsx_runtime_1.jsx)(ellipsis_v_icon_1.default, {}) }) }));
|
|
17
17
|
return ((0, jsx_runtime_1.jsx)(react_core_1.Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
|
|
18
18
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(props);
|
|
19
19
|
setIsOpen((prev) => !prev);
|
|
@@ -22,11 +22,11 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
22
22
|
const menuItems = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_core_1.DropdownItem, { children: "Rename" }), (0, jsx_runtime_1.jsx)(react_core_1.DropdownItem, { children: "Delete" })] }));
|
|
23
23
|
it('should render the dropdown', () => {
|
|
24
24
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, menuClassName: "custom-class" }));
|
|
25
|
-
expect(react_1.screen.queryByRole('
|
|
25
|
+
expect(react_1.screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
|
26
26
|
});
|
|
27
27
|
it('should display the dropdown menuItems', () => {
|
|
28
28
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems }));
|
|
29
|
-
const toggle = react_1.screen.queryByRole('
|
|
29
|
+
const toggle = react_1.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
30
30
|
expect(toggle).toBeInTheDocument();
|
|
31
31
|
react_1.fireEvent.click(toggle);
|
|
32
32
|
(0, react_1.waitFor)(() => {
|
|
@@ -36,14 +36,14 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
36
36
|
});
|
|
37
37
|
it('should invoke onSelect callback when menuitem is clicked', () => {
|
|
38
38
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
|
39
|
-
const toggle = react_1.screen.queryByRole('
|
|
39
|
+
const toggle = react_1.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
40
40
|
react_1.fireEvent.click(toggle);
|
|
41
41
|
react_1.fireEvent.click(react_1.screen.getByText('Rename'));
|
|
42
42
|
expect(onSelect).toHaveBeenCalled();
|
|
43
43
|
});
|
|
44
44
|
it('should toggle the dropdown when menuitem is clicked', () => {
|
|
45
45
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
|
46
|
-
const toggle = react_1.screen.queryByRole('
|
|
46
|
+
const toggle = react_1.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
47
47
|
react_1.fireEvent.click(toggle);
|
|
48
48
|
react_1.fireEvent.click(react_1.screen.getByText('Delete'));
|
|
49
49
|
expect(onSelect).toHaveBeenCalled();
|
|
@@ -51,7 +51,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
51
51
|
});
|
|
52
52
|
it('should close the dropdown when user clicks outside', () => {
|
|
53
53
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, onSelect: onSelect }));
|
|
54
|
-
const toggle = react_1.screen.queryByRole('
|
|
54
|
+
const toggle = react_1.screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
55
55
|
react_1.fireEvent.click(toggle);
|
|
56
56
|
expect(react_1.screen.queryByText('Delete')).toBeInTheDocument();
|
|
57
57
|
react_1.fireEvent.click(toggle.parentElement);
|
|
@@ -59,7 +59,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
59
59
|
});
|
|
60
60
|
it('should show the tooltip when the user hovers over the toggle button', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
61
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuItems: menuItems, label: "Actions dropdown" }));
|
|
62
|
-
const toggle = react_1.screen.queryByRole('
|
|
62
|
+
const toggle = react_1.screen.queryByRole('menuitem', { name: /Actions dropdown/i });
|
|
63
63
|
(0, react_1.fireEvent)(toggle, new MouseEvent('mouseenter', {
|
|
64
64
|
bubbles: false,
|
|
65
65
|
cancelable: false
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { FunctionComponent } from 'react';
|
|
2
|
-
import { ButtonProps, DrawerProps,
|
|
3
|
-
TitleProps, ListProps, SearchInputProps } from '@patternfly/react-core';
|
|
2
|
+
import { ButtonProps, DrawerProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps, MenuProps, TitleProps, MenuListProps, SearchInputProps, MenuItemProps, MenuGroupProps, MenuContentProps } from '@patternfly/react-core';
|
|
4
3
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
|
5
4
|
import { HistoryEmptyStateProps } from './EmptyState';
|
|
6
5
|
export interface Conversation {
|
|
@@ -20,10 +19,8 @@ export interface Conversation {
|
|
|
20
19
|
label?: string;
|
|
21
20
|
/** Callback for when user selects item. */
|
|
22
21
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
|
23
|
-
/** Additional props passed to
|
|
24
|
-
additionalProps?:
|
|
25
|
-
/** Additional props passed to conversation list item */
|
|
26
|
-
listItemProps?: Omit<ListItemProps, 'children'>;
|
|
22
|
+
/** Additional props passed to menu item */
|
|
23
|
+
additionalProps?: MenuItemProps;
|
|
27
24
|
/** Custom dropdown ID to ensure uniqueness across demo instances */
|
|
28
25
|
dropdownId?: string;
|
|
29
26
|
}
|
|
@@ -43,11 +40,13 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
43
40
|
};
|
|
44
41
|
/** Additional button props for new chat button. */
|
|
45
42
|
newChatButtonProps?: ButtonProps;
|
|
46
|
-
/** Additional props applied to
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
/** Additional props applied to conversation menu group. If conversations is an object, you should pass an object of MenuGroupProps for each group. */
|
|
44
|
+
menuGroupProps?: MenuGroupProps | {
|
|
45
|
+
[key: string]: MenuGroupProps;
|
|
46
|
+
};
|
|
47
|
+
/** Additional props applied to conversation list. If conversations is an object, you should pass an object of MenuListProps for each group. */
|
|
48
|
+
menuListProps?: Omit<MenuListProps, 'children'> | {
|
|
49
|
+
[key: string]: Omit<MenuListProps, 'children'>;
|
|
51
50
|
};
|
|
52
51
|
/** Text shown in blue button */
|
|
53
52
|
newChatButtonText?: string;
|
|
@@ -69,7 +68,7 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
69
68
|
reverseButtonOrder?: boolean;
|
|
70
69
|
/** Custom test id for the drawer actions */
|
|
71
70
|
drawerActionsTestId?: string;
|
|
72
|
-
/**
|
|
71
|
+
/** Additional props applied to menu */
|
|
73
72
|
menuProps?: MenuProps;
|
|
74
73
|
/** Additional props applied to panel */
|
|
75
74
|
drawerPanelContentProps?: DrawerPanelContentProps;
|
|
@@ -105,6 +104,8 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
105
104
|
navTitleProps?: Partial<TitleProps>;
|
|
106
105
|
/** Visually hidden text that gets announced by assistive technologies. Should be used to convey the result count when the search input value changes. */
|
|
107
106
|
searchInputScreenReaderText?: string;
|
|
107
|
+
/** Additional props passed to MenuContent */
|
|
108
|
+
menuContentProps?: Omit<MenuContentProps, 'ref'>;
|
|
108
109
|
}
|
|
109
110
|
export declare const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversationHistoryNavProps>;
|
|
110
111
|
export default ChatbotConversationHistoryNav;
|
|
@@ -25,21 +25,33 @@ const ChatbotConversationHistoryDropdown_1 = __importDefault(require("./ChatbotC
|
|
|
25
25
|
const LoadingState_1 = __importDefault(require("./LoadingState"));
|
|
26
26
|
const EmptyState_1 = __importDefault(require("./EmptyState"));
|
|
27
27
|
const ChatbotConversationHistoryNav = (_a) => {
|
|
28
|
-
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations,
|
|
28
|
+
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, menuListProps, newChatButtonText = 'New chat', drawerContent, onNewChat, newChatButtonProps, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Search previous conversations', searchInputProps, handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState, emptyState, noResultsState, isCompact, title = 'Chat history', navTitleProps, navTitleIcon = (0, jsx_runtime_1.jsx)(react_icons_1.OutlinedClockIcon, {}), searchInputScreenReaderText, menuProps, menuGroupProps, menuContentProps } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "menuListProps", "newChatButtonText", "drawerContent", "onNewChat", "newChatButtonProps", "searchInputPlaceholder", "searchInputAriaLabel", "searchInputProps", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState", "emptyState", "noResultsState", "isCompact", "title", "navTitleProps", "navTitleIcon", "searchInputScreenReaderText", "menuProps", "menuGroupProps", "menuContentProps"]);
|
|
29
29
|
const drawerRef = (0, react_1.useRef)(null);
|
|
30
30
|
const onExpand = () => {
|
|
31
31
|
drawerRef.current && drawerRef.current.focus();
|
|
32
32
|
};
|
|
33
|
+
const isConversation = (item) => item && typeof item === 'object' && 'id' in item && 'text' in item;
|
|
33
34
|
const getNavItem = (conversation) => {
|
|
34
35
|
var _a;
|
|
35
|
-
return ((0, jsx_runtime_1.jsx)(react_core_1.
|
|
36
|
+
return ((0, jsx_runtime_1.jsx)(react_core_1.MenuItem, Object.assign({ className: `pf-chatbot__menu-item ${activeItemId && activeItemId === conversation.id ? 'pf-chatbot__menu-item--active' : ''}`, itemId: conversation.id }, (conversation.noIcon ? {} : { icon: (_a = conversation.icon) !== null && _a !== void 0 ? _a : (0, jsx_runtime_1.jsx)(react_icons_1.OutlinedCommentAltIcon, {}) }), (conversation.menuItems
|
|
37
|
+
? {
|
|
38
|
+
actions: ((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryDropdown_1.default, { menuClassName: conversation.menuClassName, onSelect: conversation.onSelect, menuItems: conversation.menuItems, label: conversation.label }))
|
|
39
|
+
}
|
|
40
|
+
: {}), conversation.additionalProps, { children: conversation.text })));
|
|
36
41
|
};
|
|
37
42
|
const buildConversations = () => {
|
|
38
43
|
if (Array.isArray(conversations)) {
|
|
39
|
-
return ((0, jsx_runtime_1.jsx)(react_core_1.
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(react_core_1.MenuList, Object.assign({}, menuListProps, { children: conversations.map((conversation) => {
|
|
45
|
+
if (isConversation(conversation)) {
|
|
46
|
+
return (0, jsx_runtime_1.jsx)(react_1.Fragment, { children: getNavItem(conversation) }, conversation.id);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return conversation;
|
|
50
|
+
}
|
|
51
|
+
}) })));
|
|
40
52
|
}
|
|
41
53
|
else {
|
|
42
|
-
return ((0, jsx_runtime_1.jsx)(
|
|
54
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: Object.keys(conversations).map((navGroup) => ((0, jsx_runtime_1.jsx)(react_core_1.MenuGroup, Object.assign({ className: "pf-chatbot__menu-item-header", label: navGroup, labelHeadingLevel: "h3" }, menuGroupProps === null || menuGroupProps === void 0 ? void 0 : menuGroupProps[navGroup], { children: (0, jsx_runtime_1.jsx)(react_core_1.MenuList, Object.assign({}, menuListProps === null || menuListProps === void 0 ? void 0 : menuListProps[navGroup], { children: conversations[navGroup].map((conversation) => ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: getNavItem(conversation) }, conversation.id))) })) }), navGroup))) }));
|
|
43
55
|
}
|
|
44
56
|
};
|
|
45
57
|
// Menu Content
|
|
@@ -55,7 +67,7 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
|
55
67
|
if (noResultsState) {
|
|
56
68
|
return (0, jsx_runtime_1.jsx)(EmptyState_1.default, Object.assign({}, noResultsState));
|
|
57
69
|
}
|
|
58
|
-
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.
|
|
70
|
+
return ((0, jsx_runtime_1.jsx)(react_core_1.Menu, Object.assign({ isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId }, menuProps, { children: (0, jsx_runtime_1.jsx)(react_core_1.MenuContent, Object.assign({}, menuContentProps, { children: buildConversations() })) })));
|
|
59
71
|
};
|
|
60
72
|
const renderDrawerContent = () => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(react_core_1.DrawerPanelBody, Object.assign({}, drawerPanelBodyProps, { children: renderMenuContent() })) }));
|
|
61
73
|
const renderPanelContent = () => {
|
|
@@ -198,26 +198,30 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
|
198
198
|
const iconElement = container.querySelector('.pf-chatbot__title-icon');
|
|
199
199
|
expect(iconElement).toBeInTheDocument();
|
|
200
200
|
});
|
|
201
|
-
it('Passes
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
expect(react_1.screen.getByRole('
|
|
209
|
-
});
|
|
210
|
-
it('Passes
|
|
211
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations,
|
|
212
|
-
expect(react_1.screen.getByRole('
|
|
213
|
-
});
|
|
214
|
-
it('Passes
|
|
215
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations },
|
|
216
|
-
expect(react_1.screen.getByRole('
|
|
217
|
-
});
|
|
218
|
-
it('Passes
|
|
219
|
-
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations:
|
|
220
|
-
expect(react_1.screen.getByRole('
|
|
201
|
+
it('Passes menuProps to Menu', () => {
|
|
202
|
+
var _a;
|
|
203
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuProps: { className: 'test' } }));
|
|
204
|
+
expect((_a = react_1.screen.getByRole('menu').parentElement) === null || _a === void 0 ? void 0 : _a.parentElement).toHaveClass('test');
|
|
205
|
+
});
|
|
206
|
+
it('Passes menuContentProps to MenuContent', () => {
|
|
207
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuContentProps: { className: 'test' } }));
|
|
208
|
+
expect(react_1.screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
209
|
+
});
|
|
210
|
+
it('Passes menuListProps to MenuList when conversations is an array', () => {
|
|
211
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuListProps: { className: 'test' } }));
|
|
212
|
+
expect(react_1.screen.getByRole('menu')).toHaveClass('test');
|
|
213
|
+
});
|
|
214
|
+
it('Passes menuListProps to MenuList when conversations is an object', () => {
|
|
215
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations }, menuListProps: { Today: { className: 'test' } } }));
|
|
216
|
+
expect(react_1.screen.getByRole('menu')).toHaveClass('test');
|
|
217
|
+
});
|
|
218
|
+
it('Passes menuGroupProps to MenuGroup when conversations is an object', () => {
|
|
219
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations }, menuGroupProps: { Today: { className: 'test' } } }));
|
|
220
|
+
expect(react_1.screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
221
|
+
});
|
|
222
|
+
it('Passes additionalProps to MenuItem', () => {
|
|
223
|
+
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: [{ id: '1', text: 'ChatBot documentation', additionalProps: { className: 'test' } }] }));
|
|
224
|
+
expect(react_1.screen.getByRole('menuitem')).toHaveClass('test');
|
|
221
225
|
});
|
|
222
226
|
it('should be able to spread search input props when searchInputProps is passed', () => {
|
|
223
227
|
(0, react_1.render)((0, jsx_runtime_1.jsx)(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, handleTextInputChange: jest.fn(), searchInputProps: { value: 'I am a sample search' } }));
|
package/dist/css/main.css
CHANGED
|
@@ -230,51 +230,47 @@
|
|
|
230
230
|
justify-content: flex-start;
|
|
231
231
|
gap: var(--pf-t--global--spacer--gap--text-to-element--default);
|
|
232
232
|
}
|
|
233
|
-
.pf-chatbot__history .pf-
|
|
234
|
-
--pf-v6-c-
|
|
235
|
-
|
|
236
|
-
|
|
233
|
+
.pf-chatbot__history .pf-v6-c-menu {
|
|
234
|
+
--pf-v6-c-menu--PaddingBlockStart: 0;
|
|
235
|
+
--pf-v6-c-menu--BackgroundColor: var(--pf-t--global--background--color--floating--default);
|
|
236
|
+
overflow: initial;
|
|
237
|
+
position: relative;
|
|
238
|
+
}
|
|
239
|
+
.pf-chatbot__history .pf-v6-c-menu__item-main {
|
|
240
|
+
--pf-v6-c-menu__item-main--ColumnGap: var(--pf-t--global--spacer--md);
|
|
237
241
|
}
|
|
238
|
-
.pf-chatbot__history .pf-
|
|
242
|
+
.pf-chatbot__history .pf-chatbot__menu-item-header > .pf-v6-c-menu__group-title {
|
|
239
243
|
color: var(--pf-t--global--text--color--subtle);
|
|
240
244
|
font-weight: var(--pf-t--global--font--weight--body--bold);
|
|
241
245
|
font-size: var(--pf-t--global--icon--size--font--sm);
|
|
242
|
-
|
|
243
|
-
|
|
246
|
+
--pf-v6-c-menu__group-title--PaddingInlineStart: var(--pf-t--global--spacer--sm);
|
|
247
|
+
--pf-v6-c-menu__group-title--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
|
|
244
248
|
position: -webkit-sticky;
|
|
245
249
|
position: sticky;
|
|
246
250
|
top: 0;
|
|
247
251
|
background-color: var(--pf-t--global--background--color--floating--default);
|
|
248
252
|
z-index: var(--pf-t--global--z-index--md);
|
|
249
253
|
}
|
|
250
|
-
.pf-chatbot__history .pf-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
--pf-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
--pf-v6-c-button--m-link--m-clicked--Color: var(--pf-t--global--text--color--regular--clicked);
|
|
262
|
-
--pf-v6-c-button--m-link--m-clicked__icon--Color: var(--pf-t--global--icon--color--regular);
|
|
263
|
-
column-gap: var(--pf-t--global--spacer--md);
|
|
264
|
-
flex-basis: 100%;
|
|
265
|
-
}
|
|
266
|
-
.pf-chatbot__history .pf-chatbot__conversation-list-item .pf-chatbot__conversation-history-item .pf-v6-c-button__text {
|
|
254
|
+
.pf-chatbot__history .pf-chatbot__menu-item {
|
|
255
|
+
--pf-v6-c-menu__item--PaddingInlineStart: var(--pf-t--global--spacer--sm);
|
|
256
|
+
--pf-v6-c-menu__item--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
|
|
257
|
+
padding-block-start: var(--pf-t--global--spacer--xs);
|
|
258
|
+
padding-block-end: var(--pf-t--global--spacer--xs);
|
|
259
|
+
color: var(--pf-t--global--text--color--regular);
|
|
260
|
+
font-size: var(--pf-t--global--font--size--body--lg);
|
|
261
|
+
font-weight: var(--pf-t--global--font--weight--body--default);
|
|
262
|
+
border-radius: var(--pf-t--global--border--radius--small);
|
|
263
|
+
}
|
|
264
|
+
.pf-chatbot__history .pf-v6-c-menu__list-item.pf-chatbot__menu-item {
|
|
267
265
|
overflow: hidden;
|
|
268
|
-
text-overflow: ellipsis;
|
|
269
|
-
white-space: nowrap;
|
|
270
266
|
}
|
|
271
267
|
.pf-chatbot__history .pf-chatbot__history-actions {
|
|
272
268
|
transform: rotate(90deg);
|
|
273
269
|
}
|
|
274
|
-
.pf-chatbot__history .pf-
|
|
270
|
+
.pf-chatbot__history .pf-chatbot__menu-item--active {
|
|
275
271
|
background-color: var(--pf-t--global--background--color--action--plain--clicked);
|
|
276
272
|
}
|
|
277
|
-
.pf-chatbot__history button.pf-
|
|
273
|
+
.pf-chatbot__history button.pf-chatbot__menu-item--active {
|
|
278
274
|
background-color: initial;
|
|
279
275
|
}
|
|
280
276
|
|
|
@@ -391,8 +387,8 @@
|
|
|
391
387
|
--pf-v6-c-drawer__panel__body--PaddingInlineStart: var(--pf-t--global--spacer--md);
|
|
392
388
|
--pf-v6-c-drawer__panel__body--PaddingInlineEnd: var(--pf-t--global--spacer--md);
|
|
393
389
|
}
|
|
394
|
-
.pf-chatbot__history.pf-m-compact .pf-
|
|
395
|
-
|
|
390
|
+
.pf-chatbot__history.pf-m-compact .pf-chatbot__menu-item {
|
|
391
|
+
font-size: var(--pf-t--global--font--size--body--md);
|
|
396
392
|
}
|
|
397
393
|
.pf-chatbot__history.pf-m-compact .pf-v6-c-drawer__head {
|
|
398
394
|
--pf-v6-c-drawer__head--PaddingInlineStart: var(--pf-t--global--spacer--lg);
|
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/MessageDivider/MessageDivider.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;EACA,YACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;;AAKF;EA9BF;IA+BI;IACA;;;AAIF;EApCF;IAqCI;;;;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;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAOJ;EACE;;;AC3IF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAII;AAAA;AAAA;IACE;IACA;;;ACnBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACE;EACA;EACA;;AAKN;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;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AASF;AAAA;EACE;;AACA;AAAA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AAUF;AAAA;AAAA;AAAA;EACE;;;AAKN;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKE;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AChRN;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;;;AAQF;EACE;;;AAIJ;EACE;EACA;;;AC3DF;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;EACA;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AAUJ;AAAA;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;;;AAOA;EACE;EACA;;AAGF;EACE;EACA;;;AAIJ;AAAA;EAEE;EACA;;;AAGF;EACE;;;AClKF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;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;;;AAOA;EACE;;AAGF;EACE;EACA;;;ACjGF;EACE;;AAMA;EACE;;AAEF;EACE;;AAEF;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACxBN;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;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;ACpDN;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;AAAA;AAAA;EAGA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAGA;EACE;;;AAUF;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AC5FJ;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;EAQA;EACA;;AAIF;EACE;EACA;;AAIF;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AAGF;EACE;;;ACnGF;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;;;AAIA;EACE;EACA;;;AClFJ;EACE;;AAGE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAWF;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AHmCJ;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AEjIJ;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;;;AAIA;EACE;EACA;;;AEtFJ;EACE;EACA;EACA;EACA;EAGA;;;ADHF;EACE;;AAGE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAWF;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AE1EN;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;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAKF;EACE;;AAGF;EACE;;AAIA;EACE;;;ACnEN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AASR;EACE;EACA;EACA;EACA;;;ACzCF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AAOJ;EACE;EACA;EACA;EACA;;;ACrDF;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;;;AAOJ;EACE;EACA;EACA;EACA;;;AC1DF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;AASR;EACE;EACA;EACA;EACA;;;AClCF;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;EACA;;AAEF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;AAQN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;;AC1HJ;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;EAII;AAAA;AAAA;IACE;IACA;;;AAMJ;EACE;;;AC/CJ;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EAEA;;AAGF;EACE;;AAKF;AAAA;EAEE;;;AFrCN;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;;;;AGhDJ;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;;;AAIA;EACE;EACA;;;AAIJ;EACE;;;AC3CF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;AAON;EACE;EACA;;;AChFJ;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;;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AC/CJ;EACE;EACA","file":"main.css"}
|
|
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/MessageDivider/MessageDivider.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;EACA,YACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;;AAKF;EA9BF;IA+BI;IACA;;;AAIF;EApCF;IAqCI;;;;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;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAOJ;EACE;;;AC3IF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAII;AAAA;AAAA;IACE;IACA;;;ACnBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;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;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AASF;AAAA;EACE;;AACA;AAAA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AAUF;AAAA;AAAA;AAAA;EACE;;;AAKN;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKE;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACxQN;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;;;AAQF;EACE;;;AAIJ;EACE;EACA;;;AC3DF;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;EACA;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AAUJ;AAAA;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;;;AAOA;EACE;EACA;;AAGF;EACE;EACA;;;AAIJ;AAAA;EAEE;EACA;;;AAGF;EACE;;;AClKF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;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;;;AAOA;EACE;;AAGF;EACE;EACA;;;ACjGF;EACE;;AAMA;EACE;;AAEF;EACE;;AAEF;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACxBN;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;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;ACpDN;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;AAAA;AAAA;EAGA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAGA;EACE;;;AAUF;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AC5FJ;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;EAQA;EACA;;AAIF;EACE;EACA;;AAIF;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AAGF;EACE;;;ACnGF;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;;;AAIA;EACE;EACA;;;AClFJ;EACE;;AAGE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAWF;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AHmCJ;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AEjIJ;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;;;AAIA;EACE;EACA;;;AEtFJ;EACE;EACA;EACA;EACA;EAGA;;;ADHF;EACE;;AAGE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAWF;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AE1EN;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;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAKF;EACE;;AAGF;EACE;;AAIA;EACE;;;ACnEN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AASR;EACE;EACA;EACA;EACA;;;ACzCF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AAOJ;EACE;EACA;EACA;EACA;;;ACrDF;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;;;AAOJ;EACE;EACA;EACA;EACA;;;AC1DF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;AASR;EACE;EACA;EACA;EACA;;;AClCF;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;EACA;;AAEF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;AAQN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;;AC1HJ;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;EAII;AAAA;AAAA;IACE;IACA;;;AAMJ;EACE;;;AC/CJ;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EAEA;;AAGF;EACE;;AAKF;AAAA;EAEE;;;AFrCN;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;;;;AGhDJ;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;;;AAIA;EACE;EACA;;;AAIJ;EACE;;;AC3CF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;AAON;EACE;EACA;;;AChFJ;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;;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AC/CJ;EACE;EACA","file":"main.css"}
|
|
@@ -7,7 +7,7 @@ export const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, o
|
|
|
7
7
|
const [isOpen, setIsOpen] = useState(false);
|
|
8
8
|
const toggle = (toggleRef) => (_jsx(Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom",
|
|
9
9
|
// prevents VO announcements of both aria label and tooltip
|
|
10
|
-
aria: "none", children: _jsx(MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), id: id, children: _jsx(EllipsisIcon, {}) }) }));
|
|
10
|
+
aria: "none", children: _jsx(MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), id: id, role: "menuitem", children: _jsx(EllipsisIcon, {}) }) }));
|
|
11
11
|
return (_jsx(Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
|
|
12
12
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(props);
|
|
13
13
|
setIsOpen((prev) => !prev);
|
|
@@ -17,11 +17,11 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
17
17
|
const menuItems = (_jsxs(_Fragment, { children: [_jsx(DropdownItem, { children: "Rename" }), _jsx(DropdownItem, { children: "Delete" })] }));
|
|
18
18
|
it('should render the dropdown', () => {
|
|
19
19
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems, menuClassName: "custom-class" }));
|
|
20
|
-
expect(screen.queryByRole('
|
|
20
|
+
expect(screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
|
21
21
|
});
|
|
22
22
|
it('should display the dropdown menuItems', () => {
|
|
23
23
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems }));
|
|
24
|
-
const toggle = screen.queryByRole('
|
|
24
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
25
25
|
expect(toggle).toBeInTheDocument();
|
|
26
26
|
fireEvent.click(toggle);
|
|
27
27
|
waitFor(() => {
|
|
@@ -31,14 +31,14 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
31
31
|
});
|
|
32
32
|
it('should invoke onSelect callback when menuitem is clicked', () => {
|
|
33
33
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
|
34
|
-
const toggle = screen.queryByRole('
|
|
34
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
35
35
|
fireEvent.click(toggle);
|
|
36
36
|
fireEvent.click(screen.getByText('Rename'));
|
|
37
37
|
expect(onSelect).toHaveBeenCalled();
|
|
38
38
|
});
|
|
39
39
|
it('should toggle the dropdown when menuitem is clicked', () => {
|
|
40
40
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
|
41
|
-
const toggle = screen.queryByRole('
|
|
41
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
42
42
|
fireEvent.click(toggle);
|
|
43
43
|
fireEvent.click(screen.getByText('Delete'));
|
|
44
44
|
expect(onSelect).toHaveBeenCalled();
|
|
@@ -46,7 +46,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
46
46
|
});
|
|
47
47
|
it('should close the dropdown when user clicks outside', () => {
|
|
48
48
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems, onSelect: onSelect }));
|
|
49
|
-
const toggle = screen.queryByRole('
|
|
49
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i });
|
|
50
50
|
fireEvent.click(toggle);
|
|
51
51
|
expect(screen.queryByText('Delete')).toBeInTheDocument();
|
|
52
52
|
fireEvent.click(toggle.parentElement);
|
|
@@ -54,7 +54,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
54
54
|
});
|
|
55
55
|
it('should show the tooltip when the user hovers over the toggle button', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
56
|
render(_jsx(ChatbotConversationHistoryDropdown, { menuItems: menuItems, label: "Actions dropdown" }));
|
|
57
|
-
const toggle = screen.queryByRole('
|
|
57
|
+
const toggle = screen.queryByRole('menuitem', { name: /Actions dropdown/i });
|
|
58
58
|
fireEvent(toggle, new MouseEvent('mouseenter', {
|
|
59
59
|
bubbles: false,
|
|
60
60
|
cancelable: false
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { FunctionComponent } from 'react';
|
|
2
|
-
import { ButtonProps, DrawerProps,
|
|
3
|
-
TitleProps, ListProps, SearchInputProps } from '@patternfly/react-core';
|
|
2
|
+
import { ButtonProps, DrawerProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps, MenuProps, TitleProps, MenuListProps, SearchInputProps, MenuItemProps, MenuGroupProps, MenuContentProps } from '@patternfly/react-core';
|
|
4
3
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
|
5
4
|
import { HistoryEmptyStateProps } from './EmptyState';
|
|
6
5
|
export interface Conversation {
|
|
@@ -20,10 +19,8 @@ export interface Conversation {
|
|
|
20
19
|
label?: string;
|
|
21
20
|
/** Callback for when user selects item. */
|
|
22
21
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
|
23
|
-
/** Additional props passed to
|
|
24
|
-
additionalProps?:
|
|
25
|
-
/** Additional props passed to conversation list item */
|
|
26
|
-
listItemProps?: Omit<ListItemProps, 'children'>;
|
|
22
|
+
/** Additional props passed to menu item */
|
|
23
|
+
additionalProps?: MenuItemProps;
|
|
27
24
|
/** Custom dropdown ID to ensure uniqueness across demo instances */
|
|
28
25
|
dropdownId?: string;
|
|
29
26
|
}
|
|
@@ -43,11 +40,13 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
43
40
|
};
|
|
44
41
|
/** Additional button props for new chat button. */
|
|
45
42
|
newChatButtonProps?: ButtonProps;
|
|
46
|
-
/** Additional props applied to
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
/** Additional props applied to conversation menu group. If conversations is an object, you should pass an object of MenuGroupProps for each group. */
|
|
44
|
+
menuGroupProps?: MenuGroupProps | {
|
|
45
|
+
[key: string]: MenuGroupProps;
|
|
46
|
+
};
|
|
47
|
+
/** Additional props applied to conversation list. If conversations is an object, you should pass an object of MenuListProps for each group. */
|
|
48
|
+
menuListProps?: Omit<MenuListProps, 'children'> | {
|
|
49
|
+
[key: string]: Omit<MenuListProps, 'children'>;
|
|
51
50
|
};
|
|
52
51
|
/** Text shown in blue button */
|
|
53
52
|
newChatButtonText?: string;
|
|
@@ -69,7 +68,7 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
69
68
|
reverseButtonOrder?: boolean;
|
|
70
69
|
/** Custom test id for the drawer actions */
|
|
71
70
|
drawerActionsTestId?: string;
|
|
72
|
-
/**
|
|
71
|
+
/** Additional props applied to menu */
|
|
73
72
|
menuProps?: MenuProps;
|
|
74
73
|
/** Additional props applied to panel */
|
|
75
74
|
drawerPanelContentProps?: DrawerPanelContentProps;
|
|
@@ -105,6 +104,8 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
105
104
|
navTitleProps?: Partial<TitleProps>;
|
|
106
105
|
/** Visually hidden text that gets announced by assistive technologies. Should be used to convey the result count when the search input value changes. */
|
|
107
106
|
searchInputScreenReaderText?: string;
|
|
107
|
+
/** Additional props passed to MenuContent */
|
|
108
|
+
menuContentProps?: Omit<MenuContentProps, 'ref'>;
|
|
108
109
|
}
|
|
109
110
|
export declare const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversationHistoryNavProps>;
|
|
110
111
|
export default ChatbotConversationHistoryNav;
|
|
@@ -12,28 +12,40 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { useRef, Fragment } from 'react';
|
|
14
14
|
// Import PatternFly components
|
|
15
|
-
import { Button, Drawer, DrawerPanelContent, DrawerContent, DrawerPanelBody, DrawerHead, DrawerActions, DrawerCloseButton, DrawerContentBody, SearchInput,
|
|
15
|
+
import { Button, Drawer, DrawerPanelContent, DrawerContent, DrawerPanelBody, DrawerHead, DrawerActions, DrawerCloseButton, DrawerContentBody, SearchInput, Title, Icon, MenuList, MenuGroup, MenuItem, Menu, MenuContent } from '@patternfly/react-core';
|
|
16
16
|
import { OutlinedClockIcon, OutlinedCommentAltIcon, PenToSquareIcon } from '@patternfly/react-icons';
|
|
17
17
|
import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
|
|
18
18
|
import ConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
|
|
19
19
|
import LoadingState from './LoadingState';
|
|
20
20
|
import HistoryEmptyState from './EmptyState';
|
|
21
21
|
export const ChatbotConversationHistoryNav = (_a) => {
|
|
22
|
-
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations,
|
|
22
|
+
var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, menuListProps, newChatButtonText = 'New chat', drawerContent, onNewChat, newChatButtonProps, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Search previous conversations', searchInputProps, handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState, emptyState, noResultsState, isCompact, title = 'Chat history', navTitleProps, navTitleIcon = _jsx(OutlinedClockIcon, {}), searchInputScreenReaderText, menuProps, menuGroupProps, menuContentProps } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "menuListProps", "newChatButtonText", "drawerContent", "onNewChat", "newChatButtonProps", "searchInputPlaceholder", "searchInputAriaLabel", "searchInputProps", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState", "emptyState", "noResultsState", "isCompact", "title", "navTitleProps", "navTitleIcon", "searchInputScreenReaderText", "menuProps", "menuGroupProps", "menuContentProps"]);
|
|
23
23
|
const drawerRef = useRef(null);
|
|
24
24
|
const onExpand = () => {
|
|
25
25
|
drawerRef.current && drawerRef.current.focus();
|
|
26
26
|
};
|
|
27
|
+
const isConversation = (item) => item && typeof item === 'object' && 'id' in item && 'text' in item;
|
|
27
28
|
const getNavItem = (conversation) => {
|
|
28
29
|
var _a;
|
|
29
|
-
return (_jsx(
|
|
30
|
+
return (_jsx(MenuItem, Object.assign({ className: `pf-chatbot__menu-item ${activeItemId && activeItemId === conversation.id ? 'pf-chatbot__menu-item--active' : ''}`, itemId: conversation.id }, (conversation.noIcon ? {} : { icon: (_a = conversation.icon) !== null && _a !== void 0 ? _a : _jsx(OutlinedCommentAltIcon, {}) }), (conversation.menuItems
|
|
31
|
+
? {
|
|
32
|
+
actions: (_jsx(ConversationHistoryDropdown, { menuClassName: conversation.menuClassName, onSelect: conversation.onSelect, menuItems: conversation.menuItems, label: conversation.label }))
|
|
33
|
+
}
|
|
34
|
+
: {}), conversation.additionalProps, { children: conversation.text })));
|
|
30
35
|
};
|
|
31
36
|
const buildConversations = () => {
|
|
32
37
|
if (Array.isArray(conversations)) {
|
|
33
|
-
return (_jsx(
|
|
38
|
+
return (_jsx(MenuList, Object.assign({}, menuListProps, { children: conversations.map((conversation) => {
|
|
39
|
+
if (isConversation(conversation)) {
|
|
40
|
+
return _jsx(Fragment, { children: getNavItem(conversation) }, conversation.id);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return conversation;
|
|
44
|
+
}
|
|
45
|
+
}) })));
|
|
34
46
|
}
|
|
35
47
|
else {
|
|
36
|
-
return (_jsx(
|
|
48
|
+
return (_jsx(_Fragment, { children: Object.keys(conversations).map((navGroup) => (_jsx(MenuGroup, Object.assign({ className: "pf-chatbot__menu-item-header", label: navGroup, labelHeadingLevel: "h3" }, menuGroupProps === null || menuGroupProps === void 0 ? void 0 : menuGroupProps[navGroup], { children: _jsx(MenuList, Object.assign({}, menuListProps === null || menuListProps === void 0 ? void 0 : menuListProps[navGroup], { children: conversations[navGroup].map((conversation) => (_jsx(Fragment, { children: getNavItem(conversation) }, conversation.id))) })) }), navGroup))) }));
|
|
37
49
|
}
|
|
38
50
|
};
|
|
39
51
|
// Menu Content
|
|
@@ -49,7 +61,7 @@ export const ChatbotConversationHistoryNav = (_a) => {
|
|
|
49
61
|
if (noResultsState) {
|
|
50
62
|
return _jsx(HistoryEmptyState, Object.assign({}, noResultsState));
|
|
51
63
|
}
|
|
52
|
-
return _jsx(
|
|
64
|
+
return (_jsx(Menu, Object.assign({ isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId }, menuProps, { children: _jsx(MenuContent, Object.assign({}, menuContentProps, { children: buildConversations() })) })));
|
|
53
65
|
};
|
|
54
66
|
const renderDrawerContent = () => (_jsx(_Fragment, { children: _jsx(DrawerPanelBody, Object.assign({}, drawerPanelBodyProps, { children: renderMenuContent() })) }));
|
|
55
67
|
const renderPanelContent = () => {
|
|
@@ -193,26 +193,30 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
|
193
193
|
const iconElement = container.querySelector('.pf-chatbot__title-icon');
|
|
194
194
|
expect(iconElement).toBeInTheDocument();
|
|
195
195
|
});
|
|
196
|
-
it('Passes
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
expect(screen.getByRole('
|
|
204
|
-
});
|
|
205
|
-
it('Passes
|
|
206
|
-
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations,
|
|
207
|
-
expect(screen.getByRole('
|
|
208
|
-
});
|
|
209
|
-
it('Passes
|
|
210
|
-
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations },
|
|
211
|
-
expect(screen.getByRole('
|
|
212
|
-
});
|
|
213
|
-
it('Passes
|
|
214
|
-
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations:
|
|
215
|
-
expect(screen.getByRole('
|
|
196
|
+
it('Passes menuProps to Menu', () => {
|
|
197
|
+
var _a;
|
|
198
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuProps: { className: 'test' } }));
|
|
199
|
+
expect((_a = screen.getByRole('menu').parentElement) === null || _a === void 0 ? void 0 : _a.parentElement).toHaveClass('test');
|
|
200
|
+
});
|
|
201
|
+
it('Passes menuContentProps to MenuContent', () => {
|
|
202
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuContentProps: { className: 'test' } }));
|
|
203
|
+
expect(screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
204
|
+
});
|
|
205
|
+
it('Passes menuListProps to MenuList when conversations is an array', () => {
|
|
206
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, menuListProps: { className: 'test' } }));
|
|
207
|
+
expect(screen.getByRole('menu')).toHaveClass('test');
|
|
208
|
+
});
|
|
209
|
+
it('Passes menuListProps to MenuList when conversations is an object', () => {
|
|
210
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations }, menuListProps: { Today: { className: 'test' } } }));
|
|
211
|
+
expect(screen.getByRole('menu')).toHaveClass('test');
|
|
212
|
+
});
|
|
213
|
+
it('Passes menuGroupProps to MenuGroup when conversations is an object', () => {
|
|
214
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: { Today: initialConversations }, menuGroupProps: { Today: { className: 'test' } } }));
|
|
215
|
+
expect(screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
216
|
+
});
|
|
217
|
+
it('Passes additionalProps to MenuItem', () => {
|
|
218
|
+
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: [{ id: '1', text: 'ChatBot documentation', additionalProps: { className: 'test' } }] }));
|
|
219
|
+
expect(screen.getByRole('menuitem')).toHaveClass('test');
|
|
216
220
|
});
|
|
217
221
|
it('should be able to spread search input props when searchInputProps is passed', () => {
|
|
218
222
|
render(_jsx(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, handleTextInputChange: jest.fn(), searchInputProps: { value: 'I am a sample search' } }));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/chatbot",
|
|
3
|
-
"version": "6.4.0-prerelease.
|
|
3
|
+
"version": "6.4.0-prerelease.15",
|
|
4
4
|
"description": "This library provides React components based on PatternFly 6 that can be used to build chatbots.",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -14,13 +14,13 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
14
14
|
|
|
15
15
|
it('should render the dropdown', () => {
|
|
16
16
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} menuClassName="custom-class" />);
|
|
17
|
-
expect(screen.queryByRole('
|
|
17
|
+
expect(screen.queryByRole('menuitem', { name: /Conversation options/i })).toBeInTheDocument();
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
it('should display the dropdown menuItems', () => {
|
|
21
21
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} />);
|
|
22
22
|
|
|
23
|
-
const toggle = screen.queryByRole('
|
|
23
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
|
24
24
|
|
|
25
25
|
expect(toggle).toBeInTheDocument();
|
|
26
26
|
fireEvent.click(toggle);
|
|
@@ -33,7 +33,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
33
33
|
|
|
34
34
|
it('should invoke onSelect callback when menuitem is clicked', () => {
|
|
35
35
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
|
36
|
-
const toggle = screen.queryByRole('
|
|
36
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
|
37
37
|
fireEvent.click(toggle);
|
|
38
38
|
fireEvent.click(screen.getByText('Rename'));
|
|
39
39
|
|
|
@@ -42,7 +42,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
42
42
|
|
|
43
43
|
it('should toggle the dropdown when menuitem is clicked', () => {
|
|
44
44
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
|
45
|
-
const toggle = screen.queryByRole('
|
|
45
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
|
46
46
|
fireEvent.click(toggle);
|
|
47
47
|
fireEvent.click(screen.getByText('Delete'));
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
53
53
|
|
|
54
54
|
it('should close the dropdown when user clicks outside', () => {
|
|
55
55
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} onSelect={onSelect} />);
|
|
56
|
-
const toggle = screen.queryByRole('
|
|
56
|
+
const toggle = screen.queryByRole('menuitem', { name: /Conversation options/i })!;
|
|
57
57
|
fireEvent.click(toggle);
|
|
58
58
|
|
|
59
59
|
expect(screen.queryByText('Delete')).toBeInTheDocument();
|
|
@@ -64,7 +64,7 @@ describe('ChatbotConversationHistoryDropdown', () => {
|
|
|
64
64
|
|
|
65
65
|
it('should show the tooltip when the user hovers over the toggle button', async () => {
|
|
66
66
|
render(<ChatbotConversationHistoryDropdown menuItems={menuItems} label="Actions dropdown" />);
|
|
67
|
-
const toggle = screen.queryByRole('
|
|
67
|
+
const toggle = screen.queryByRole('menuitem', { name: /Actions dropdown/i })!;
|
|
68
68
|
|
|
69
69
|
fireEvent(
|
|
70
70
|
toggle,
|
|
@@ -42,61 +42,53 @@
|
|
|
42
42
|
}
|
|
43
43
|
// Drawer menu
|
|
44
44
|
// ----------------------------------------------------------------------------
|
|
45
|
-
.pf-
|
|
46
|
-
--pf-v6-c-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
.pf-v6-c-menu {
|
|
46
|
+
--pf-v6-c-menu--PaddingBlockStart: 0;
|
|
47
|
+
--pf-v6-c-menu--BackgroundColor: var(--pf-t--global--background--color--floating--default);
|
|
48
|
+
overflow: initial;
|
|
49
|
+
position: relative;
|
|
50
|
+
}
|
|
51
|
+
.pf-v6-c-menu__item-main {
|
|
52
|
+
--pf-v6-c-menu__item-main--ColumnGap: var(--pf-t--global--spacer--md);
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
.pf-
|
|
55
|
+
.pf-chatbot__menu-item-header > .pf-v6-c-menu__group-title {
|
|
53
56
|
color: var(--pf-t--global--text--color--subtle);
|
|
54
57
|
font-weight: var(--pf-t--global--font--weight--body--bold);
|
|
55
58
|
font-size: var(--pf-t--global--icon--size--font--sm);
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
--pf-v6-c-menu__group-title--PaddingInlineStart: var(--pf-t--global--spacer--sm);
|
|
60
|
+
--pf-v6-c-menu__group-title--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
|
|
58
61
|
position: -webkit-sticky;
|
|
59
62
|
position: sticky;
|
|
60
63
|
top: 0;
|
|
61
64
|
background-color: var(--pf-t--global--background--color--floating--default);
|
|
62
65
|
z-index: var(--pf-t--global--z-index--md);
|
|
63
66
|
}
|
|
64
|
-
.pf-chatbot__conversation-list-item {
|
|
65
|
-
& > span {
|
|
66
|
-
display: flex;
|
|
67
|
-
column-gap: var(--pf-t--global--spacer--sm);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
& .pf-chatbot__conversation-history-item {
|
|
71
|
-
--pf-v6-c-button--JustifyContent: flex-start;
|
|
72
|
-
--pf-v6-c-button--FontSize: var(--pf-t--global--font--size--body--lg);
|
|
73
|
-
--pf-v6-c-button--m-link--Color: var(--pf-t--global--text--color--regular);
|
|
74
|
-
--pf-v6-c-button--m-link__icon--Color: var(--pf-t--global--icon--color--regular);
|
|
75
|
-
--pf-v6-c-button--m-link--hover--Color: var(--pf-t--global--text--color--regular--hover);
|
|
76
|
-
--pf-v6-c-button--m-link--hover__icon--Color: var(--pf-t--global--icon--color--regular);
|
|
77
|
-
--pf-v6-c-button--m-link--m-clicked--Color: var(--pf-t--global--text--color--regular--clicked);
|
|
78
|
-
--pf-v6-c-button--m-link--m-clicked__icon--Color: var(--pf-t--global--icon--color--regular);
|
|
79
67
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
68
|
+
.pf-chatbot__menu-item {
|
|
69
|
+
--pf-v6-c-menu__item--PaddingInlineStart: var(--pf-t--global--spacer--sm);
|
|
70
|
+
--pf-v6-c-menu__item--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
|
|
71
|
+
padding-block-start: var(--pf-t--global--spacer--xs);
|
|
72
|
+
padding-block-end: var(--pf-t--global--spacer--xs);
|
|
73
|
+
color: var(--pf-t--global--text--color--regular);
|
|
74
|
+
font-size: var(--pf-t--global--font--size--body--lg);
|
|
75
|
+
font-weight: var(--pf-t--global--font--weight--body--default);
|
|
76
|
+
border-radius: var(--pf-t--global--border--radius--small);
|
|
77
|
+
}
|
|
78
|
+
// allows focus state to have border radius
|
|
79
|
+
.pf-v6-c-menu__list-item.pf-chatbot__menu-item {
|
|
80
|
+
overflow: hidden;
|
|
89
81
|
}
|
|
90
82
|
|
|
91
83
|
.pf-chatbot__history-actions {
|
|
92
84
|
transform: rotate(90deg);
|
|
93
85
|
}
|
|
94
86
|
|
|
95
|
-
.pf-
|
|
87
|
+
.pf-chatbot__menu-item--active {
|
|
96
88
|
background-color: var(--pf-t--global--background--color--action--plain--clicked);
|
|
97
89
|
}
|
|
98
90
|
|
|
99
|
-
button.pf-
|
|
91
|
+
button.pf-chatbot__menu-item--active {
|
|
100
92
|
background-color: initial;
|
|
101
93
|
}
|
|
102
94
|
}
|
|
@@ -259,8 +251,8 @@
|
|
|
259
251
|
}
|
|
260
252
|
}
|
|
261
253
|
|
|
262
|
-
.pf-
|
|
263
|
-
|
|
254
|
+
.pf-chatbot__menu-item {
|
|
255
|
+
font-size: var(--pf-t--global--font--size--body--md);
|
|
264
256
|
}
|
|
265
257
|
|
|
266
258
|
.pf-v6-c-drawer__head {
|
|
@@ -492,36 +492,36 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
|
492
492
|
expect(iconElement).toBeInTheDocument();
|
|
493
493
|
});
|
|
494
494
|
|
|
495
|
-
it('Passes
|
|
495
|
+
it('Passes menuProps to Menu', () => {
|
|
496
496
|
render(
|
|
497
497
|
<ChatbotConversationHistoryNav
|
|
498
498
|
onDrawerToggle={onDrawerToggle}
|
|
499
499
|
isDrawerOpen={true}
|
|
500
500
|
displayMode={ChatbotDisplayMode.fullscreen}
|
|
501
501
|
setIsDrawerOpen={jest.fn()}
|
|
502
|
-
conversations={
|
|
503
|
-
|
|
502
|
+
conversations={initialConversations}
|
|
503
|
+
menuProps={{ className: 'test' }}
|
|
504
504
|
/>
|
|
505
505
|
);
|
|
506
|
-
|
|
506
|
+
|
|
507
|
+
expect(screen.getByRole('menu').parentElement?.parentElement).toHaveClass('test');
|
|
507
508
|
});
|
|
508
509
|
|
|
509
|
-
it('
|
|
510
|
+
it('Passes menuContentProps to MenuContent', () => {
|
|
510
511
|
render(
|
|
511
512
|
<ChatbotConversationHistoryNav
|
|
512
513
|
onDrawerToggle={onDrawerToggle}
|
|
513
514
|
isDrawerOpen={true}
|
|
514
515
|
displayMode={ChatbotDisplayMode.fullscreen}
|
|
515
516
|
setIsDrawerOpen={jest.fn()}
|
|
516
|
-
conversations={
|
|
517
|
-
|
|
517
|
+
conversations={initialConversations}
|
|
518
|
+
menuContentProps={{ className: 'test' }}
|
|
518
519
|
/>
|
|
519
520
|
);
|
|
520
|
-
expect(screen.
|
|
521
|
-
expect(screen.getByRole('heading', { name: /Today/i, level: 2 })).toBeInTheDocument();
|
|
521
|
+
expect(screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
522
522
|
});
|
|
523
523
|
|
|
524
|
-
it('Passes
|
|
524
|
+
it('Passes menuListProps to MenuList when conversations is an array', () => {
|
|
525
525
|
render(
|
|
526
526
|
<ChatbotConversationHistoryNav
|
|
527
527
|
onDrawerToggle={onDrawerToggle}
|
|
@@ -529,13 +529,27 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
|
529
529
|
displayMode={ChatbotDisplayMode.fullscreen}
|
|
530
530
|
setIsDrawerOpen={jest.fn()}
|
|
531
531
|
conversations={initialConversations}
|
|
532
|
-
|
|
532
|
+
menuListProps={{ className: 'test' }}
|
|
533
|
+
/>
|
|
534
|
+
);
|
|
535
|
+
expect(screen.getByRole('menu')).toHaveClass('test');
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
it('Passes menuListProps to MenuList when conversations is an object', () => {
|
|
539
|
+
render(
|
|
540
|
+
<ChatbotConversationHistoryNav
|
|
541
|
+
onDrawerToggle={onDrawerToggle}
|
|
542
|
+
isDrawerOpen={true}
|
|
543
|
+
displayMode={ChatbotDisplayMode.fullscreen}
|
|
544
|
+
setIsDrawerOpen={jest.fn()}
|
|
545
|
+
conversations={{ Today: initialConversations }}
|
|
546
|
+
menuListProps={{ Today: { className: 'test' } }}
|
|
533
547
|
/>
|
|
534
548
|
);
|
|
535
|
-
expect(screen.getByRole('
|
|
549
|
+
expect(screen.getByRole('menu')).toHaveClass('test');
|
|
536
550
|
});
|
|
537
551
|
|
|
538
|
-
it('Passes
|
|
552
|
+
it('Passes menuGroupProps to MenuGroup when conversations is an object', () => {
|
|
539
553
|
render(
|
|
540
554
|
<ChatbotConversationHistoryNav
|
|
541
555
|
onDrawerToggle={onDrawerToggle}
|
|
@@ -543,23 +557,23 @@ describe('ChatbotConversationHistoryNav', () => {
|
|
|
543
557
|
displayMode={ChatbotDisplayMode.fullscreen}
|
|
544
558
|
setIsDrawerOpen={jest.fn()}
|
|
545
559
|
conversations={{ Today: initialConversations }}
|
|
546
|
-
|
|
560
|
+
menuGroupProps={{ Today: { className: 'test' } }}
|
|
547
561
|
/>
|
|
548
562
|
);
|
|
549
|
-
expect(screen.getByRole('
|
|
563
|
+
expect(screen.getByRole('menu').parentElement).toHaveClass('test');
|
|
550
564
|
});
|
|
551
565
|
|
|
552
|
-
it('Passes
|
|
566
|
+
it('Passes additionalProps to MenuItem', () => {
|
|
553
567
|
render(
|
|
554
568
|
<ChatbotConversationHistoryNav
|
|
555
569
|
onDrawerToggle={onDrawerToggle}
|
|
556
570
|
isDrawerOpen={true}
|
|
557
571
|
displayMode={ChatbotDisplayMode.fullscreen}
|
|
558
572
|
setIsDrawerOpen={jest.fn()}
|
|
559
|
-
conversations={[{ id: '1', text: 'ChatBot documentation',
|
|
573
|
+
conversations={[{ id: '1', text: 'ChatBot documentation', additionalProps: { className: 'test' } }]}
|
|
560
574
|
/>
|
|
561
575
|
);
|
|
562
|
-
expect(screen.getByRole('
|
|
576
|
+
expect(screen.getByRole('menuitem')).toHaveClass('test');
|
|
563
577
|
});
|
|
564
578
|
|
|
565
579
|
it('should be able to spread search input props when searchInputProps is passed', () => {
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Chatbot Header - Chatbot Conversation History Nav
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import type { KeyboardEvent, FunctionComponent } from 'react';
|
|
5
|
-
|
|
6
5
|
import { useRef, Fragment } from 'react';
|
|
7
6
|
|
|
8
7
|
// Import PatternFly components
|
|
@@ -19,9 +18,6 @@ import {
|
|
|
19
18
|
DrawerCloseButton,
|
|
20
19
|
DrawerContentBody,
|
|
21
20
|
SearchInput,
|
|
22
|
-
List,
|
|
23
|
-
ListItem,
|
|
24
|
-
ListItemProps,
|
|
25
21
|
Title,
|
|
26
22
|
DrawerPanelContentProps,
|
|
27
23
|
DrawerContentProps,
|
|
@@ -32,10 +28,18 @@ import {
|
|
|
32
28
|
DrawerPanelBodyProps,
|
|
33
29
|
SkeletonProps,
|
|
34
30
|
Icon,
|
|
35
|
-
MenuProps,
|
|
31
|
+
MenuProps,
|
|
36
32
|
TitleProps,
|
|
37
|
-
|
|
38
|
-
SearchInputProps
|
|
33
|
+
MenuListProps,
|
|
34
|
+
SearchInputProps,
|
|
35
|
+
MenuList,
|
|
36
|
+
MenuGroup,
|
|
37
|
+
MenuItem,
|
|
38
|
+
Menu,
|
|
39
|
+
MenuContent,
|
|
40
|
+
MenuItemProps,
|
|
41
|
+
MenuGroupProps,
|
|
42
|
+
MenuContentProps
|
|
39
43
|
} from '@patternfly/react-core';
|
|
40
44
|
|
|
41
45
|
import { OutlinedClockIcon, OutlinedCommentAltIcon, PenToSquareIcon } from '@patternfly/react-icons';
|
|
@@ -61,10 +65,8 @@ export interface Conversation {
|
|
|
61
65
|
label?: string;
|
|
62
66
|
/** Callback for when user selects item. */
|
|
63
67
|
onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
|
|
64
|
-
/** Additional props passed to
|
|
65
|
-
additionalProps?:
|
|
66
|
-
/** Additional props passed to conversation list item */
|
|
67
|
-
listItemProps?: Omit<ListItemProps, 'children'>;
|
|
68
|
+
/** Additional props passed to menu item */
|
|
69
|
+
additionalProps?: MenuItemProps;
|
|
68
70
|
/** Custom dropdown ID to ensure uniqueness across demo instances */
|
|
69
71
|
dropdownId?: string;
|
|
70
72
|
}
|
|
@@ -83,10 +85,10 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
83
85
|
conversations: Conversation[] | { [key: string]: Conversation[] };
|
|
84
86
|
/** Additional button props for new chat button. */
|
|
85
87
|
newChatButtonProps?: ButtonProps;
|
|
86
|
-
/** Additional props applied to
|
|
87
|
-
|
|
88
|
-
/** Additional props applied to conversation list. If conversations is an object, you should pass an object of
|
|
89
|
-
|
|
88
|
+
/** Additional props applied to conversation menu group. If conversations is an object, you should pass an object of MenuGroupProps for each group. */
|
|
89
|
+
menuGroupProps?: MenuGroupProps | { [key: string]: MenuGroupProps };
|
|
90
|
+
/** Additional props applied to conversation list. If conversations is an object, you should pass an object of MenuListProps for each group. */
|
|
91
|
+
menuListProps?: Omit<MenuListProps, 'children'> | { [key: string]: Omit<MenuListProps, 'children'> };
|
|
90
92
|
/** Text shown in blue button */
|
|
91
93
|
newChatButtonText?: string;
|
|
92
94
|
/** Callback function for when blue button is clicked. Omit to hide blue "new chat button" */
|
|
@@ -107,7 +109,7 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
107
109
|
reverseButtonOrder?: boolean;
|
|
108
110
|
/** Custom test id for the drawer actions */
|
|
109
111
|
drawerActionsTestId?: string;
|
|
110
|
-
/**
|
|
112
|
+
/** Additional props applied to menu */
|
|
111
113
|
menuProps?: MenuProps;
|
|
112
114
|
/** Additional props applied to panel */
|
|
113
115
|
drawerPanelContentProps?: DrawerPanelContentProps;
|
|
@@ -143,6 +145,8 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
|
|
|
143
145
|
navTitleProps?: Partial<TitleProps>;
|
|
144
146
|
/** Visually hidden text that gets announced by assistive technologies. Should be used to convey the result count when the search input value changes. */
|
|
145
147
|
searchInputScreenReaderText?: string;
|
|
148
|
+
/** Additional props passed to MenuContent */
|
|
149
|
+
menuContentProps?: Omit<MenuContentProps, 'ref'>;
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
export const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversationHistoryNavProps> = ({
|
|
@@ -152,8 +156,7 @@ export const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversatio
|
|
|
152
156
|
activeItemId,
|
|
153
157
|
onSelectActiveItem,
|
|
154
158
|
conversations,
|
|
155
|
-
|
|
156
|
-
listProps,
|
|
159
|
+
menuListProps,
|
|
157
160
|
newChatButtonText = 'New chat',
|
|
158
161
|
drawerContent,
|
|
159
162
|
onNewChat,
|
|
@@ -182,6 +185,9 @@ export const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversatio
|
|
|
182
185
|
navTitleProps,
|
|
183
186
|
navTitleIcon = <OutlinedClockIcon />,
|
|
184
187
|
searchInputScreenReaderText,
|
|
188
|
+
menuProps,
|
|
189
|
+
menuGroupProps,
|
|
190
|
+
menuContentProps,
|
|
185
191
|
...props
|
|
186
192
|
}: ChatbotConversationHistoryNavProps) => {
|
|
187
193
|
const drawerRef = useRef<HTMLDivElement>(null);
|
|
@@ -190,61 +196,65 @@ export const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversatio
|
|
|
190
196
|
drawerRef.current && drawerRef.current.focus();
|
|
191
197
|
};
|
|
192
198
|
|
|
199
|
+
const isConversation = (item: any): item is Conversation =>
|
|
200
|
+
item && typeof item === 'object' && 'id' in item && 'text' in item;
|
|
201
|
+
|
|
193
202
|
const getNavItem = (conversation: Conversation) => (
|
|
194
|
-
<
|
|
195
|
-
className={`pf-
|
|
196
|
-
|
|
197
|
-
{...conversation.
|
|
198
|
-
/* eslint-
|
|
203
|
+
<MenuItem
|
|
204
|
+
className={`pf-chatbot__menu-item ${activeItemId && activeItemId === conversation.id ? 'pf-chatbot__menu-item--active' : ''}`}
|
|
205
|
+
itemId={conversation.id}
|
|
206
|
+
{...(conversation.noIcon ? {} : { icon: conversation.icon ?? <OutlinedCommentAltIcon /> })}
|
|
207
|
+
/* eslint-disable indent */
|
|
208
|
+
{...(conversation.menuItems
|
|
209
|
+
? {
|
|
210
|
+
actions: (
|
|
211
|
+
<ConversationHistoryDropdown
|
|
212
|
+
menuClassName={conversation.menuClassName}
|
|
213
|
+
onSelect={conversation.onSelect}
|
|
214
|
+
menuItems={conversation.menuItems}
|
|
215
|
+
label={conversation.label}
|
|
216
|
+
/>
|
|
217
|
+
)
|
|
218
|
+
}
|
|
219
|
+
: {})}
|
|
220
|
+
{...conversation.additionalProps}
|
|
199
221
|
>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
className="pf-chatbot__conversation-history-item"
|
|
203
|
-
variant="link"
|
|
204
|
-
{...conversation.additionalProps}
|
|
205
|
-
{...(conversation.noIcon ? {} : { icon: conversation.icon ?? <OutlinedCommentAltIcon /> })}
|
|
206
|
-
onClick={(event) => onSelectActiveItem?.(event, conversation.id)}
|
|
207
|
-
>
|
|
208
|
-
{conversation.text}
|
|
209
|
-
</Button>
|
|
210
|
-
{conversation.menuItems && (
|
|
211
|
-
<ConversationHistoryDropdown
|
|
212
|
-
menuClassName={conversation.menuClassName}
|
|
213
|
-
onSelect={conversation.onSelect}
|
|
214
|
-
menuItems={conversation.menuItems}
|
|
215
|
-
label={conversation.label}
|
|
216
|
-
id={conversation.dropdownId}
|
|
217
|
-
/>
|
|
218
|
-
)}
|
|
219
|
-
</>
|
|
220
|
-
</ListItem>
|
|
222
|
+
{conversation.text}
|
|
223
|
+
</MenuItem>
|
|
221
224
|
);
|
|
222
225
|
|
|
223
226
|
const buildConversations = () => {
|
|
224
227
|
if (Array.isArray(conversations)) {
|
|
225
228
|
return (
|
|
226
|
-
<
|
|
227
|
-
{conversations.map((conversation) =>
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
229
|
+
<MenuList {...menuListProps}>
|
|
230
|
+
{conversations.map((conversation) => {
|
|
231
|
+
if (isConversation(conversation)) {
|
|
232
|
+
return <Fragment key={conversation.id}>{getNavItem(conversation)}</Fragment>;
|
|
233
|
+
} else {
|
|
234
|
+
return conversation;
|
|
235
|
+
}
|
|
236
|
+
})}
|
|
237
|
+
</MenuList>
|
|
231
238
|
);
|
|
232
239
|
} else {
|
|
233
240
|
return (
|
|
234
|
-
|
|
241
|
+
<>
|
|
235
242
|
{Object.keys(conversations).map((navGroup) => (
|
|
236
|
-
<
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
243
|
+
<MenuGroup
|
|
244
|
+
className="pf-chatbot__menu-item-header"
|
|
245
|
+
label={navGroup}
|
|
246
|
+
key={navGroup}
|
|
247
|
+
labelHeadingLevel="h3"
|
|
248
|
+
{...menuGroupProps?.[navGroup]}
|
|
249
|
+
>
|
|
250
|
+
<MenuList {...menuListProps?.[navGroup]}>
|
|
251
|
+
{conversations[navGroup].map((conversation: Conversation) => (
|
|
242
252
|
<Fragment key={conversation.id}>{getNavItem(conversation)}</Fragment>
|
|
243
253
|
))}
|
|
244
|
-
</
|
|
245
|
-
</
|
|
254
|
+
</MenuList>
|
|
255
|
+
</MenuGroup>
|
|
246
256
|
))}
|
|
247
|
-
|
|
257
|
+
</>
|
|
248
258
|
);
|
|
249
259
|
}
|
|
250
260
|
};
|
|
@@ -264,7 +274,11 @@ export const ChatbotConversationHistoryNav: FunctionComponent<ChatbotConversatio
|
|
|
264
274
|
if (noResultsState) {
|
|
265
275
|
return <HistoryEmptyState {...noResultsState} />;
|
|
266
276
|
}
|
|
267
|
-
return
|
|
277
|
+
return (
|
|
278
|
+
<Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId} {...menuProps}>
|
|
279
|
+
<MenuContent {...menuContentProps}>{buildConversations()}</MenuContent>
|
|
280
|
+
</Menu>
|
|
281
|
+
);
|
|
268
282
|
};
|
|
269
283
|
|
|
270
284
|
const renderDrawerContent = () => (
|