@patternfly/chatbot 6.3.0-prerelease.7 → 6.3.0-prerelease.8
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/Chatbot/Chatbot.test.js +4 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +1 -0
- package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -2
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
- package/dist/cjs/ChatbotPopover/ChatbotPopover.js +1 -1
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
- package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
- package/dist/cjs/MessageBar/AttachButton.d.ts +1 -0
- package/dist/cjs/MessageBar/AttachButton.js +3 -3
- package/dist/cjs/MessageBar/AttachButton.test.js +4 -0
- package/dist/cjs/MessageBar/MessageBar.d.ts +1 -0
- package/dist/cjs/MessageBar/MessageBar.js +13 -12
- package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -0
- package/dist/cjs/MessageBar/MicrophoneButton.js +3 -3
- package/dist/cjs/MessageBar/SendButton.d.ts +1 -0
- package/dist/cjs/MessageBar/SendButton.js +3 -3
- package/dist/cjs/MessageBar/SendButton.test.js +4 -0
- package/dist/cjs/MessageBar/StopButton.d.ts +1 -0
- package/dist/cjs/MessageBar/StopButton.js +3 -3
- package/dist/cjs/MessageBar/StopButton.test.js +4 -0
- package/dist/css/main.css +128 -2
- package/dist/css/main.css.map +1 -1
- package/dist/esm/Chatbot/Chatbot.test.js +4 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +1 -0
- package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -2
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
- package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
- package/dist/esm/ChatbotPopover/ChatbotPopover.js +1 -1
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
- package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
- package/dist/esm/MessageBar/AttachButton.d.ts +1 -0
- package/dist/esm/MessageBar/AttachButton.js +3 -3
- package/dist/esm/MessageBar/AttachButton.test.js +4 -0
- package/dist/esm/MessageBar/MessageBar.d.ts +1 -0
- package/dist/esm/MessageBar/MessageBar.js +13 -12
- package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -0
- package/dist/esm/MessageBar/MicrophoneButton.js +3 -3
- package/dist/esm/MessageBar/SendButton.d.ts +1 -0
- package/dist/esm/MessageBar/SendButton.js +3 -3
- package/dist/esm/MessageBar/SendButton.test.js +4 -0
- package/dist/esm/MessageBar/StopButton.d.ts +1 -0
- package/dist/esm/MessageBar/StopButton.js +3 -3
- package/dist/esm/MessageBar/StopButton.test.js +4 -0
- package/package.json +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +8 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +481 -0
- package/src/Chatbot/Chatbot.test.tsx +9 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +10 -1
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +5 -1
- package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
- package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -0
- package/src/ChatbotFooter/ChatbotFooter.tsx +3 -1
- package/src/ChatbotHeader/ChatbotHeader.scss +17 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -0
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +10 -5
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +6 -0
- package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +5 -2
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +10 -0
- package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +4 -0
- package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
- package/src/ChatbotPopover/ChatbotPopover.tsx +1 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -0
- package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +13 -2
- package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
- package/src/Message/Message.scss +27 -0
- package/src/Message/TextMessage/TextMessage.scss +25 -0
- package/src/MessageBar/AttachButton.scss +10 -0
- package/src/MessageBar/AttachButton.test.tsx +4 -0
- package/src/MessageBar/AttachButton.tsx +5 -2
- package/src/MessageBar/MessageBar.scss +17 -0
- package/src/MessageBar/MessageBar.tsx +15 -6
- package/src/MessageBar/MicrophoneButton.scss +10 -0
- package/src/MessageBar/MicrophoneButton.tsx +5 -2
- package/src/MessageBar/SendButton.scss +10 -0
- package/src/MessageBar/SendButton.test.tsx +5 -1
- package/src/MessageBar/SendButton.tsx +5 -2
- package/src/MessageBar/StopButton.scss +10 -0
- package/src/MessageBar/StopButton.test.tsx +5 -1
- package/src/MessageBar/StopButton.tsx +5 -2
- package/src/MessageBox/MessageBox.scss +6 -0
@@ -25,4 +25,8 @@ describe('Chatbot', () => {
|
|
25
25
|
(0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { isVisible: false }, "Chatbot Content"));
|
26
26
|
expect(react_2.screen.queryByLabelText('Chatbot')).toBeFalsy();
|
27
27
|
});
|
28
|
+
it('should handle isCompact', () => {
|
29
|
+
(0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { "data-testid": "chatbot", isVisible: true, isCompact: true }, "Chatbot Content"));
|
30
|
+
expect(react_2.screen.getByTestId('chatbot')).toHaveClass('pf-m-compact');
|
31
|
+
});
|
28
32
|
});
|
@@ -76,7 +76,7 @@ const ChatbotConversationHistoryNav = (_a) => {
|
|
76
76
|
react_1.default.createElement(react_core_1.DrawerHead, Object.assign({}, drawerHeadProps),
|
77
77
|
react_1.default.createElement(react_core_1.DrawerActions, Object.assign({ "data-testid": drawerActionsTestId, className: reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : '' }, drawerActionsProps),
|
78
78
|
react_1.default.createElement(react_core_1.DrawerCloseButton, Object.assign({ onClick: onDrawerToggle }, drawerCloseButtonProps)),
|
79
|
-
onNewChat && react_1.default.createElement(react_core_1.Button, { onClick: onNewChat }, newChatButtonText))),
|
79
|
+
onNewChat && (react_1.default.createElement(react_core_1.Button, { size: isCompact ? 'sm' : undefined, onClick: onNewChat }, newChatButtonText)))),
|
80
80
|
isLoading ? react_1.default.createElement(LoadingState_1.default, Object.assign({}, loadingState)) : renderDrawerContent()));
|
81
81
|
return (react_1.default.createElement(react_core_1.DrawerPanelContent, Object.assign({ "aria-live": "polite", focusTrap: { enabled: true }, defaultSize: "384px" }, drawerPanelContentProps), drawer));
|
82
82
|
};
|
@@ -4,6 +4,7 @@ export interface ChatbotFooterProps extends React.HTMLProps<HTMLDivElement> {
|
|
4
4
|
children?: React.ReactNode;
|
5
5
|
/** Custom classname for the Footer component */
|
6
6
|
className?: string;
|
7
|
+
isCompact?: boolean;
|
7
8
|
}
|
8
9
|
export declare const ChatbotFooter: React.FunctionComponent<ChatbotFooterProps>;
|
9
10
|
export default ChatbotFooter;
|
@@ -26,8 +26,8 @@ exports.ChatbotFooter = void 0;
|
|
26
26
|
const react_1 = __importDefault(require("react"));
|
27
27
|
const react_core_1 = require("@patternfly/react-core");
|
28
28
|
const ChatbotFooter = (_a) => {
|
29
|
-
var { children, className } = _a, props = __rest(_a, ["children", "className"]);
|
30
|
-
return (react_1.default.createElement("div", Object.assign({ className: `pf-chatbot__footer ${className !== null && className !== void 0 ? className : ''}` }, props),
|
29
|
+
var { children, className, isCompact } = _a, props = __rest(_a, ["children", "className", "isCompact"]);
|
30
|
+
return (react_1.default.createElement("div", Object.assign({ className: `pf-chatbot__footer ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}` }, props),
|
31
31
|
react_1.default.createElement(react_core_1.Divider, null),
|
32
32
|
react_1.default.createElement("div", { className: "pf-chatbot__footer-container" }, children)));
|
33
33
|
};
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
7
7
|
const react_2 = require("@testing-library/react");
|
8
8
|
const ChatbotFooter_1 = __importDefault(require("./ChatbotFooter"));
|
9
|
+
require("@testing-library/jest-dom");
|
9
10
|
describe('ChatbotFooter', () => {
|
10
11
|
it('should render ChatbotFooter with children', () => {
|
11
12
|
(0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, null, "Chatbot Content"));
|
@@ -15,4 +16,8 @@ describe('ChatbotFooter', () => {
|
|
15
16
|
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, { className: "custom-class" }, "Chatbot Content"));
|
16
17
|
expect(container.querySelector('.custom-class')).toBeTruthy();
|
17
18
|
});
|
19
|
+
it('should handle isCompact', () => {
|
20
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, { className: "custom-class", isCompact: true, "data-testid": "footer" }, "Chatbot Content"));
|
21
|
+
expect(react_2.screen.getByTestId('footer')).toHaveClass('pf-m-compact');
|
22
|
+
});
|
18
23
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { TooltipProps } from '@patternfly/react-core';
|
3
|
-
export interface ChatbotHeaderMenuProps {
|
2
|
+
import { ButtonProps, TooltipProps } from '@patternfly/react-core';
|
3
|
+
export interface ChatbotHeaderMenuProps extends ButtonProps {
|
4
4
|
/** Callback function to attach to menu toggle on top right of chatbot header. */
|
5
5
|
onMenuToggle: () => void;
|
6
6
|
/** Custom classname for the header component */
|
@@ -13,5 +13,6 @@ export interface ChatbotHeaderMenuProps {
|
|
13
13
|
innerRef?: React.Ref<HTMLButtonElement>;
|
14
14
|
/** Content used in tooltip */
|
15
15
|
tooltipContent?: string;
|
16
|
+
isCompact?: boolean;
|
16
17
|
}
|
17
18
|
export declare const ChatbotHeaderMenu: React.ForwardRefExoticComponent<ChatbotHeaderMenuProps & React.RefAttributes<HTMLButtonElement>>;
|
@@ -1,4 +1,15 @@
|
|
1
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
|
+
};
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
15
|
};
|
@@ -7,10 +18,13 @@ exports.ChatbotHeaderMenu = void 0;
|
|
7
18
|
const react_1 = __importDefault(require("react"));
|
8
19
|
const react_core_1 = require("@patternfly/react-core");
|
9
20
|
const bars_icon_1 = __importDefault(require("@patternfly/react-icons/dist/esm/icons/bars-icon"));
|
10
|
-
const ChatbotHeaderMenuBase = (
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
21
|
+
const ChatbotHeaderMenuBase = (_a) => {
|
22
|
+
var { className, onMenuToggle, tooltipProps, menuAriaLabel = 'Toggle menu', innerRef, tooltipContent = 'Menu', isCompact } = _a, props = __rest(_a, ["className", "onMenuToggle", "tooltipProps", "menuAriaLabel", "innerRef", "tooltipContent", "isCompact"]);
|
23
|
+
return (react_1.default.createElement("div", { className: `pf-chatbot__menu ${className}` },
|
24
|
+
react_1.default.createElement(react_core_1.Tooltip, Object.assign({ content: tooltipContent, position: "bottom",
|
25
|
+
// prevents VO announcements of both aria label and tooltip
|
26
|
+
aria: "none" }, tooltipProps),
|
27
|
+
react_1.default.createElement(react_core_1.Button, Object.assign({ className: `pf-chatbot__button--toggle-menu ${isCompact ? 'pf-m-compact' : ''}`, variant: "plain", onClick: onMenuToggle, "aria-label": menuAriaLabel, ref: innerRef, icon: react_1.default.createElement(react_core_1.Icon, { size: isCompact ? 'lg' : 'xl', isInline: true },
|
28
|
+
react_1.default.createElement(bars_icon_1.default, null)), size: isCompact ? 'sm' : undefined }, props)))));
|
29
|
+
};
|
16
30
|
exports.ChatbotHeaderMenu = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(ChatbotHeaderMenuBase, Object.assign({ innerRef: ref }, props))));
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
7
7
|
const react_2 = require("@testing-library/react");
|
8
8
|
const ChatbotHeaderMenu_1 = require("./ChatbotHeaderMenu");
|
9
|
+
require("@testing-library/jest-dom");
|
9
10
|
describe('ChatbotHeaderMenu', () => {
|
10
11
|
it('should render ChatbotHeaderMenu with custom class', () => {
|
11
12
|
const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotHeaderMenu_1.ChatbotHeaderMenu, { className: "custom-header-menu", onMenuToggle: jest.fn() }));
|
@@ -17,4 +18,8 @@ describe('ChatbotHeaderMenu', () => {
|
|
17
18
|
react_2.fireEvent.click(react_2.screen.getByRole('button', { name: 'Toggle menu' }));
|
18
19
|
expect(onMenuToggle).toHaveBeenCalled();
|
19
20
|
});
|
21
|
+
it('should handle isCompact', () => {
|
22
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotHeaderMenu_1.ChatbotHeaderMenu, { className: "custom-header-menu", onMenuToggle: jest.fn(), isCompact: true, "data-testid": "button" }));
|
23
|
+
expect(react_2.screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
24
|
+
});
|
20
25
|
});
|
@@ -9,6 +9,7 @@ export interface ChatbotHeaderOptionsDropdownProps extends Omit<DropdownProps, '
|
|
9
9
|
tooltipProps?: TooltipProps;
|
10
10
|
/** Aria label for menu toggle */
|
11
11
|
menuToggleAriaLabel?: string;
|
12
|
+
isCompact?: boolean;
|
12
13
|
}
|
13
14
|
export declare const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeaderOptionsDropdownProps>;
|
14
15
|
export default ChatbotHeaderOptionsDropdown;
|
@@ -19,13 +19,13 @@ const react_1 = __importDefault(require("react"));
|
|
19
19
|
const react_core_1 = require("@patternfly/react-core");
|
20
20
|
const ellipsis_v_icon_1 = __importDefault(require("@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"));
|
21
21
|
const ChatbotHeaderOptionsDropdown = (_a) => {
|
22
|
-
var { className, children, onSelect, tooltipProps, menuToggleAriaLabel = 'Chatbot options' } = _a, props = __rest(_a, ["className", "children", "onSelect", "tooltipProps", "menuToggleAriaLabel"]);
|
22
|
+
var { className, children, onSelect, tooltipProps, menuToggleAriaLabel = 'Chatbot options', isCompact } = _a, props = __rest(_a, ["className", "children", "onSelect", "tooltipProps", "menuToggleAriaLabel", "isCompact"]);
|
23
23
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = react_1.default.useState(false);
|
24
24
|
const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ className: "pf-chatbot__tooltip", content: "Chatbot options", position: "bottom",
|
25
25
|
// prevents VO announcements of both aria label and tooltip
|
26
26
|
aria: "none" }, tooltipProps),
|
27
|
-
react_1.default.createElement(react_core_1.MenuToggle, { className:
|
28
|
-
react_1.default.createElement(ellipsis_v_icon_1.default, null)), isExpanded: isOptionsMenuOpen, onClick: () => setIsOptionsMenuOpen(!isOptionsMenuOpen) })));
|
27
|
+
react_1.default.createElement(react_core_1.MenuToggle, { className: `pf-chatbot__button--toggle-options ${isCompact ? 'pf-m-compact' : ''}`, variant: "plain", "aria-label": menuToggleAriaLabel, ref: toggleRef, icon: react_1.default.createElement(react_core_1.Icon, { size: isCompact ? 'lg' : 'xl', isInline: true },
|
28
|
+
react_1.default.createElement(ellipsis_v_icon_1.default, null)), isExpanded: isOptionsMenuOpen, onClick: () => setIsOptionsMenuOpen(!isOptionsMenuOpen), size: isCompact ? 'sm' : undefined })));
|
29
29
|
return (react_1.default.createElement(react_core_1.Dropdown, Object.assign({ className: `pf-chatbot__options ${className !== null && className !== void 0 ? className : ''}`, isOpen: isOptionsMenuOpen, onSelect: (e, value) => {
|
30
30
|
onSelect && onSelect(e, value);
|
31
31
|
setIsOptionsMenuOpen(false);
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -16,6 +16,7 @@ const react_1 = __importDefault(require("react"));
|
|
16
16
|
const react_core_1 = require("@patternfly/react-core");
|
17
17
|
const react_2 = require("@testing-library/react");
|
18
18
|
const ChatbotHeaderOptionsDropdown_1 = require("./ChatbotHeaderOptionsDropdown");
|
19
|
+
require("@testing-library/jest-dom");
|
19
20
|
describe('ChatbotHeaderOptionsDropdown', () => {
|
20
21
|
const dropdownItems = (react_1.default.createElement(react_1.default.Fragment, null,
|
21
22
|
react_1.default.createElement(react_core_1.DropdownItem, null, "Option 1"),
|
@@ -40,4 +41,8 @@ describe('ChatbotHeaderOptionsDropdown', () => {
|
|
40
41
|
expect(onSelect).toHaveBeenCalled();
|
41
42
|
});
|
42
43
|
}));
|
44
|
+
it('should handle isCompact', () => {
|
45
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotHeaderOptionsDropdown_1.ChatbotHeaderOptionsDropdown, { isCompact: true }, dropdownItems));
|
46
|
+
expect(react_2.screen.getByRole('button', { name: 'Chatbot options' })).toHaveClass('pf-m-compact');
|
47
|
+
});
|
43
48
|
});
|
@@ -13,6 +13,7 @@ export interface ChatbotHeaderSelectorDropdownProps extends Omit<DropdownProps,
|
|
13
13
|
menuToggleAriaLabel?: string;
|
14
14
|
/** Text displayed in Tooltip wrapping the display mode dropdown */
|
15
15
|
tooltipContent?: string;
|
16
|
+
isCompact?: boolean;
|
16
17
|
}
|
17
18
|
export declare const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeaderSelectorDropdownProps>;
|
18
19
|
export default ChatbotHeaderSelectorDropdown;
|
@@ -18,13 +18,13 @@ 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 = 'Select model', menuToggleAriaLabel } = _a, props = __rest(_a, ["value", "className", "children", "onSelect", "tooltipProps", "tooltipContent", "menuToggleAriaLabel"]);
|
21
|
+
var { value, className, children, onSelect, tooltipProps, tooltipContent = 'Select model', menuToggleAriaLabel, isCompact } = _a, props = __rest(_a, ["value", "className", "children", "onSelect", "tooltipProps", "tooltipContent", "menuToggleAriaLabel", "isCompact"]);
|
22
22
|
const [isOptionsMenuOpen, setIsOptionsMenuOpen] = react_1.default.useState(false);
|
23
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
|
-
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)));
|
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), size: isCompact ? 'sm' : undefined, className: `${isCompact ? 'pf-m-compact' : ''}` }, 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
30
|
setDefaultAriaLabel(`Select model: ${value}`);
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
import '@testing-library/jest-dom';
|
@@ -16,6 +16,7 @@ const react_1 = __importDefault(require("react"));
|
|
16
16
|
const react_core_1 = require("@patternfly/react-core");
|
17
17
|
const react_2 = require("@testing-library/react");
|
18
18
|
const ChatbotHeaderSelectorDropdown_1 = require("./ChatbotHeaderSelectorDropdown");
|
19
|
+
require("@testing-library/jest-dom");
|
19
20
|
describe('ChatbotHeaderSelectorDropdown', () => {
|
20
21
|
const dropdownItems = (react_1.default.createElement(react_1.default.Fragment, null,
|
21
22
|
react_1.default.createElement(react_core_1.DropdownItem, null, "Option 1"),
|
@@ -38,4 +39,8 @@ describe('ChatbotHeaderSelectorDropdown', () => {
|
|
38
39
|
expect(onSelect).toHaveBeenCalled();
|
39
40
|
});
|
40
41
|
}));
|
42
|
+
it('should handle isCompact', () => {
|
43
|
+
(0, react_2.render)(react_1.default.createElement(ChatbotHeaderSelectorDropdown_1.ChatbotHeaderSelectorDropdown, { value: "Option 1", isCompact: true }, dropdownItems));
|
44
|
+
expect(react_2.screen.getByRole('button', { name: /Select model/i })).toHaveClass('pf-m-compact');
|
45
|
+
});
|
41
46
|
});
|
@@ -23,7 +23,7 @@ const react_1 = __importDefault(require("react"));
|
|
23
23
|
const react_core_1 = require("@patternfly/react-core");
|
24
24
|
const ChatbotPopover = (_a) => {
|
25
25
|
var { children, className } = _a, props = __rest(_a, ["children", "className"]);
|
26
|
-
return (react_1.default.createElement(react_core_1.Popover, Object.assign({ className: `pf-chatbot__popover
|
26
|
+
return (react_1.default.createElement(react_core_1.Popover, Object.assign({ className: `pf-chatbot__popover ${className !== null && className !== void 0 ? className : ''}`, showClose: false }, props), children));
|
27
27
|
};
|
28
28
|
exports.ChatbotPopover = ChatbotPopover;
|
29
29
|
exports.default = exports.ChatbotPopover;
|
@@ -10,6 +10,7 @@ export interface ChatbotWelcomePromptProps extends React.HTMLProps<HTMLDivElemen
|
|
10
10
|
className?: string;
|
11
11
|
/** Custom test id for the WelcomePrompt component */
|
12
12
|
testId?: string;
|
13
|
+
isCompact?: boolean;
|
13
14
|
}
|
14
15
|
export interface WelcomePrompt {
|
15
16
|
/** Message for the welcome prompt */
|
@@ -21,13 +21,13 @@ exports.ChatbotWelcomePrompt = void 0;
|
|
21
21
|
const react_1 = __importDefault(require("react"));
|
22
22
|
const react_core_1 = require("@patternfly/react-core");
|
23
23
|
const ChatbotWelcomePrompt = (_a) => {
|
24
|
-
var { title, description, prompts, className, testId } = _a, props = __rest(_a, ["title", "description", "prompts", "className", "testId"]);
|
25
|
-
return (react_1.default.createElement("div", Object.assign({ "data-testid": testId, className: `pf-chatbot--layout--welcome ${className !== null && className !== void 0 ? className : ''}` }, props),
|
24
|
+
var { title, description, prompts, className, testId, isCompact = false } = _a, props = __rest(_a, ["title", "description", "prompts", "className", "testId", "isCompact"]);
|
25
|
+
return (react_1.default.createElement("div", Object.assign({ "data-testid": testId, className: `pf-chatbot--layout--welcome ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}` }, props),
|
26
26
|
react_1.default.createElement(react_core_1.Content, { component: react_core_1.ContentVariants.h1 },
|
27
27
|
react_1.default.createElement("span", { className: "pf-chatbot__hello" }, title),
|
28
28
|
react_1.default.createElement("br", null),
|
29
29
|
react_1.default.createElement("span", { className: "pf-chatbot__question" }, description)),
|
30
|
-
prompts && (react_1.default.createElement("div", { className: "pf-chatbot__prompt-suggestions" }, prompts === null || prompts === void 0 ? void 0 : prompts.map((prompt, index) => (react_1.default.createElement(react_core_1.Card, { key: `welcome-prompt-${index}`, className: "pf-chatbot__prompt-suggestion", isClickable: true },
|
30
|
+
prompts && (react_1.default.createElement("div", { className: "pf-chatbot__prompt-suggestions" }, prompts === null || prompts === void 0 ? void 0 : prompts.map((prompt, index) => (react_1.default.createElement(react_core_1.Card, { key: `welcome-prompt-${index}`, className: "pf-chatbot__prompt-suggestion", isClickable: true, isCompact: isCompact },
|
31
31
|
react_1.default.createElement(react_core_1.CardHeader, { selectableActions: {
|
32
32
|
onClickAction: prompt.onClick,
|
33
33
|
selectableActionId: `welcome-prompt-input-${index}`,
|
@@ -54,4 +54,8 @@ describe('ChatbotWelcomePrompt', () => {
|
|
54
54
|
const element = react_2.screen.getByTestId('welcome-prompt');
|
55
55
|
expect(element).toHaveClass('test');
|
56
56
|
});
|
57
|
+
it('should handle isCompact', () => {
|
58
|
+
(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", isCompact: true }));
|
59
|
+
expect(react_2.screen.getByTestId('welcome-prompt')).toHaveClass('pf-m-compact');
|
60
|
+
});
|
57
61
|
});
|
@@ -17,5 +17,6 @@ export interface AttachButtonProps extends ButtonProps {
|
|
17
17
|
tooltipContent?: string;
|
18
18
|
/** Test id applied to input */
|
19
19
|
inputTestId?: string;
|
20
|
+
isCompact?: boolean;
|
20
21
|
}
|
21
22
|
export declare const AttachButton: React.ForwardRefExoticComponent<AttachButtonProps & React.RefAttributes<any>>;
|
@@ -24,7 +24,7 @@ const react_core_1 = require("@patternfly/react-core");
|
|
24
24
|
const react_dropzone_1 = require("react-dropzone");
|
25
25
|
const paperclip_icon_1 = require("@patternfly/react-icons/dist/esm/icons/paperclip-icon");
|
26
26
|
const AttachButtonBase = (_a) => {
|
27
|
-
var { onAttachAccepted, onClick, isDisabled, className, tooltipProps, innerRef, tooltipContent = 'Attach', inputTestId } = _a, props = __rest(_a, ["onAttachAccepted", "onClick", "isDisabled", "className", "tooltipProps", "innerRef", "tooltipContent", "inputTestId"]);
|
27
|
+
var { onAttachAccepted, onClick, isDisabled, className, tooltipProps, innerRef, tooltipContent = 'Attach', inputTestId, isCompact } = _a, props = __rest(_a, ["onAttachAccepted", "onClick", "isDisabled", "className", "tooltipProps", "innerRef", "tooltipContent", "inputTestId", "isCompact"]);
|
28
28
|
const { open, getInputProps } = (0, react_dropzone_1.useDropzone)({
|
29
29
|
multiple: true,
|
30
30
|
onDropAccepted: onAttachAccepted
|
@@ -34,7 +34,7 @@ const AttachButtonBase = (_a) => {
|
|
34
34
|
react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--attach", content: tooltipContent, position: "top", entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
|
35
35
|
// prevents VO announcements of both aria label and tooltip
|
36
36
|
aria: "none" }, tooltipProps),
|
37
|
-
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", ref: innerRef, className: `pf-chatbot__button--attach ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Attach button', isDisabled: isDisabled, onClick: onClick !== null && onClick !== void 0 ? onClick : open, icon: react_1.default.createElement(react_core_1.Icon, { iconSize:
|
38
|
-
react_1.default.createElement(paperclip_icon_1.PaperclipIcon, null)) }, props)))));
|
37
|
+
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", ref: innerRef, className: `pf-chatbot__button--attach ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Attach button', isDisabled: isDisabled, onClick: onClick !== null && onClick !== void 0 ? onClick : open, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: isCompact ? 'lg' : 'xl', isInline: true },
|
38
|
+
react_1.default.createElement(paperclip_icon_1.PaperclipIcon, null)), size: isCompact ? 'sm' : undefined }, props)))));
|
39
39
|
};
|
40
40
|
exports.AttachButton = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(AttachButtonBase, Object.assign({ innerRef: ref }, props))));
|
@@ -63,4 +63,8 @@ describe('Attach button', () => {
|
|
63
63
|
expect(input.files).toHaveLength(1);
|
64
64
|
expect(spy).toHaveBeenCalledTimes(1);
|
65
65
|
}));
|
66
|
+
it('should handle isCompact', () => {
|
67
|
+
(0, react_2.render)(react_1.default.createElement(AttachButton_1.AttachButton, { isCompact: true, "data-testid": "button" }));
|
68
|
+
expect(react_2.screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
69
|
+
});
|
66
70
|
});
|
@@ -78,6 +78,7 @@ export interface MessageBarProps extends TextAreaProps {
|
|
78
78
|
onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string | number) => void;
|
79
79
|
/** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
|
80
80
|
displayMode?: ChatbotDisplayMode;
|
81
|
+
isCompact?: boolean;
|
81
82
|
}
|
82
83
|
export declare const MessageBar: React.FunctionComponent<MessageBarProps>;
|
83
84
|
export default MessageBar;
|
@@ -24,7 +24,7 @@ const AttachButton_1 = require("./AttachButton");
|
|
24
24
|
const AttachMenu_1 = __importDefault(require("../AttachMenu"));
|
25
25
|
const StopButton_1 = __importDefault(require("./StopButton"));
|
26
26
|
const MessageBar = (_a) => {
|
27
|
-
var { onSendMessage, className, alwayShowSendButton, placeholder = 'Send a message...', hasAttachButton = true, hasMicrophoneButton, listeningText = 'Listening', handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange, displayMode, value } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "placeholder", "hasAttachButton", "hasMicrophoneButton", "listeningText", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange", "displayMode", "value"]);
|
27
|
+
var { onSendMessage, className, alwayShowSendButton, placeholder = 'Send a message...', hasAttachButton = true, hasMicrophoneButton, listeningText = 'Listening', handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange, displayMode, value, isCompact = false } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "placeholder", "hasAttachButton", "hasMicrophoneButton", "listeningText", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange", "displayMode", "value", "isCompact"]);
|
28
28
|
// Text Input
|
29
29
|
// --------------------------------------------------------------------------
|
30
30
|
const [message, setMessage] = react_1.default.useState(value !== null && value !== void 0 ? value : '');
|
@@ -32,11 +32,12 @@ const MessageBar = (_a) => {
|
|
32
32
|
const [hasSentMessage, setHasSentMessage] = react_1.default.useState(false);
|
33
33
|
const textareaRef = react_1.default.useRef(null);
|
34
34
|
const attachButtonRef = react_1.default.useRef(null);
|
35
|
+
const topMargin = '1rem';
|
35
36
|
const setInitialLineHeight = (field) => {
|
36
37
|
field.style.setProperty('line-height', '1rem');
|
37
38
|
const parent = field.parentElement;
|
38
39
|
if (parent) {
|
39
|
-
parent.style.setProperty('margin-top',
|
40
|
+
parent.style.setProperty('margin-top', topMargin);
|
40
41
|
parent.style.setProperty('margin-bottom', `0rem`);
|
41
42
|
parent.style.setProperty('height', 'inherit');
|
42
43
|
const grandparent = parent.parentElement;
|
@@ -58,8 +59,8 @@ const MessageBar = (_a) => {
|
|
58
59
|
parseInt(computed.getPropertyValue('border-bottom-width'));
|
59
60
|
parent.style.setProperty('height', `${height}px`);
|
60
61
|
if (height > 32 || window.innerWidth <= 507) {
|
61
|
-
parent.style.setProperty('margin-bottom',
|
62
|
-
parent.style.setProperty('margin-top',
|
62
|
+
parent.style.setProperty('margin-bottom', topMargin);
|
63
|
+
parent.style.setProperty('margin-top', topMargin);
|
63
64
|
}
|
64
65
|
}
|
65
66
|
};
|
@@ -80,8 +81,8 @@ const MessageBar = (_a) => {
|
|
80
81
|
const handleNewLine = (field) => {
|
81
82
|
const parent = field.parentElement;
|
82
83
|
if (parent) {
|
83
|
-
parent.style.setProperty('margin-bottom',
|
84
|
-
parent.style.setProperty('margin-top',
|
84
|
+
parent.style.setProperty('margin-bottom', topMargin);
|
85
|
+
parent.style.setProperty('margin-top', topMargin);
|
85
86
|
}
|
86
87
|
};
|
87
88
|
react_1.default.useEffect(() => {
|
@@ -176,16 +177,16 @@ const MessageBar = (_a) => {
|
|
176
177
|
const renderButtons = () => {
|
177
178
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
178
179
|
if (hasStopButton && handleStopButton) {
|
179
|
-
return (react_1.default.createElement(StopButton_1.default, Object.assign({ onClick: handleStopButton, tooltipContent: (_a = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _a === void 0 ? void 0 : _a.tooltipContent }, (_b = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _b === void 0 ? void 0 : _b.props)));
|
180
|
+
return (react_1.default.createElement(StopButton_1.default, Object.assign({ onClick: handleStopButton, tooltipContent: (_a = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _a === void 0 ? void 0 : _a.tooltipContent, isCompact: isCompact }, (_b = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _b === void 0 ? void 0 : _b.props)));
|
180
181
|
}
|
181
182
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
182
|
-
attachMenuProps && (react_1.default.createElement(AttachButton_1.AttachButton, Object.assign({ ref: attachButtonRef, onClick: handleAttachMenuToggle, isDisabled: isListeningMessage, tooltipContent: (_c = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _c === void 0 ? void 0 : _c.tooltipContent }, (_d = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _d === void 0 ? void 0 : _d.props))),
|
183
|
-
!attachMenuProps && hasAttachButton && (react_1.default.createElement(AttachButton_1.AttachButton, Object.assign({ onAttachAccepted: handleAttach, isDisabled: isListeningMessage, tooltipContent: (_e = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _e === void 0 ? void 0 : _e.tooltipContent, inputTestId: (_f = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _f === void 0 ? void 0 : _f.inputTestId }, (_g = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _g === void 0 ? void 0 : _g.props))),
|
184
|
-
hasMicrophoneButton && (react_1.default.createElement(MicrophoneButton_1.default, Object.assign({ isListening: isListeningMessage, onIsListeningChange: setIsListeningMessage, onSpeechRecognition: handleSpeechRecognition, tooltipContent: (_h = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _h === void 0 ? void 0 : _h.tooltipContent, language: (_j = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _j === void 0 ? void 0 : _j.language }, (_k = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _k === void 0 ? void 0 : _k.props))),
|
185
|
-
(alwayShowSendButton || message) && (react_1.default.createElement(SendButton_1.default, Object.assign({ value: message, onClick: () => handleSend(message), isDisabled: isSendButtonDisabled, tooltipContent: (_l = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _l === void 0 ? void 0 : _l.tooltipContent }, (_m = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _m === void 0 ? void 0 : _m.props)))));
|
183
|
+
attachMenuProps && (react_1.default.createElement(AttachButton_1.AttachButton, Object.assign({ ref: attachButtonRef, onClick: handleAttachMenuToggle, isDisabled: isListeningMessage, tooltipContent: (_c = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _c === void 0 ? void 0 : _c.tooltipContent, isCompact: isCompact }, (_d = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _d === void 0 ? void 0 : _d.props))),
|
184
|
+
!attachMenuProps && hasAttachButton && (react_1.default.createElement(AttachButton_1.AttachButton, Object.assign({ onAttachAccepted: handleAttach, isDisabled: isListeningMessage, tooltipContent: (_e = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _e === void 0 ? void 0 : _e.tooltipContent, inputTestId: (_f = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _f === void 0 ? void 0 : _f.inputTestId, isCompact: isCompact }, (_g = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _g === void 0 ? void 0 : _g.props))),
|
185
|
+
hasMicrophoneButton && (react_1.default.createElement(MicrophoneButton_1.default, Object.assign({ isListening: isListeningMessage, onIsListeningChange: setIsListeningMessage, onSpeechRecognition: handleSpeechRecognition, tooltipContent: (_h = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _h === void 0 ? void 0 : _h.tooltipContent, language: (_j = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _j === void 0 ? void 0 : _j.language, isCompact: isCompact }, (_k = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _k === void 0 ? void 0 : _k.props))),
|
186
|
+
(alwayShowSendButton || message) && (react_1.default.createElement(SendButton_1.default, Object.assign({ value: message, onClick: () => handleSend(message), isDisabled: isSendButtonDisabled, tooltipContent: (_l = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _l === void 0 ? void 0 : _l.tooltipContent, isCompact: isCompact }, (_m = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _m === void 0 ? void 0 : _m.props)))));
|
186
187
|
};
|
187
188
|
const messageBarContents = (react_1.default.createElement(react_1.default.Fragment, null,
|
188
|
-
react_1.default.createElement("div", { className:
|
189
|
+
react_1.default.createElement("div", { className: `pf-chatbot__message-bar-input ${isCompact ? 'pf-m-compact' : ''}` },
|
189
190
|
react_1.default.createElement(react_core_1.TextArea, Object.assign({ className: "pf-chatbot__message-textarea", value: message, onChange: handleChange, "aria-label": isListeningMessage ? listeningText : placeholder, placeholder: isListeningMessage ? listeningText : placeholder, ref: textareaRef, onKeyDown: handleKeyDown }, props))),
|
190
191
|
react_1.default.createElement("div", { className: "pf-chatbot__message-bar-actions" }, renderButtons())));
|
191
192
|
if (attachMenuProps) {
|
@@ -18,6 +18,7 @@ export interface MicrophoneButtonProps extends ButtonProps {
|
|
18
18
|
};
|
19
19
|
/** Locale code for language speech recognition is conducted in. This should be in the format 'en-US', a.k.a. the ISO 639-1 code, a dash, and the ISO_3166-1 code. */
|
20
20
|
language?: string;
|
21
|
+
isCompact?: boolean;
|
21
22
|
}
|
22
23
|
export declare const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps>;
|
23
24
|
export default MicrophoneButton;
|
@@ -24,7 +24,7 @@ const react_core_1 = require("@patternfly/react-core");
|
|
24
24
|
// Import FontAwesome icons
|
25
25
|
const microphone_icon_1 = require("@patternfly/react-icons/dist/esm/icons/microphone-icon");
|
26
26
|
const MicrophoneButton = (_a) => {
|
27
|
-
var { isListening, onIsListeningChange, onSpeechRecognition, className, tooltipProps, tooltipContent = { active: 'Stop listening', inactive: 'Use microphone' }, language = 'en-US' } = _a, props = __rest(_a, ["isListening", "onIsListeningChange", "onSpeechRecognition", "className", "tooltipProps", "tooltipContent", "language"]);
|
27
|
+
var { isListening, onIsListeningChange, onSpeechRecognition, className, tooltipProps, tooltipContent = { active: 'Stop listening', inactive: 'Use microphone' }, language = 'en-US', isCompact } = _a, props = __rest(_a, ["isListening", "onIsListeningChange", "onSpeechRecognition", "className", "tooltipProps", "tooltipContent", "language", "isCompact"]);
|
28
28
|
// Microphone
|
29
29
|
// --------------------------------------------------------------------------
|
30
30
|
const [speechRecognition, setSpeechRecognition] = react_1.default.useState();
|
@@ -69,8 +69,8 @@ const MicrophoneButton = (_a) => {
|
|
69
69
|
return null;
|
70
70
|
}
|
71
71
|
return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ aria: "none", "aria-live": "polite", id: "pf-chatbot__tooltip--use-microphone", content: isListening ? tooltipContent.active : tooltipContent.inactive, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0 }, tooltipProps),
|
72
|
-
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Microphone button', onClick: isListening ? stopListening : startListening, icon: react_1.default.createElement(react_core_1.Icon, { iconSize:
|
73
|
-
react_1.default.createElement(microphone_icon_1.MicrophoneIcon, null)) }, props))));
|
72
|
+
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Microphone button', onClick: isListening ? stopListening : startListening, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: isCompact ? 'lg' : 'xl', isInline: true },
|
73
|
+
react_1.default.createElement(microphone_icon_1.MicrophoneIcon, null)), size: isCompact ? 'sm' : undefined }, props))));
|
74
74
|
};
|
75
75
|
exports.MicrophoneButton = MicrophoneButton;
|
76
76
|
exports.default = exports.MicrophoneButton;
|
@@ -9,6 +9,7 @@ export interface SendButtonProps extends ButtonProps {
|
|
9
9
|
tooltipProps?: Omit<TooltipProps, 'content'>;
|
10
10
|
/** English text "Send" used in the tooltip */
|
11
11
|
tooltipContent?: string;
|
12
|
+
isCompact?: boolean;
|
12
13
|
}
|
13
14
|
export declare const SendButton: React.FunctionComponent<SendButtonProps>;
|
14
15
|
export default SendButton;
|
@@ -23,12 +23,12 @@ const react_1 = __importDefault(require("react"));
|
|
23
23
|
const react_core_1 = require("@patternfly/react-core");
|
24
24
|
const paper_plane_icon_1 = require("@patternfly/react-icons/dist/esm/icons/paper-plane-icon");
|
25
25
|
const SendButton = (_a) => {
|
26
|
-
var { className, onClick, tooltipProps, tooltipContent = 'Send' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
|
26
|
+
var { className, onClick, tooltipProps, tooltipContent = 'Send', isCompact } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent", "isCompact"]);
|
27
27
|
return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--send", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
|
28
28
|
// prevents VO announcements of both aria label and tooltip
|
29
29
|
aria: "none" }, tooltipProps),
|
30
|
-
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--send ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Send button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize:
|
31
|
-
react_1.default.createElement(paper_plane_icon_1.PaperPlaneIcon, null)) }, props))));
|
30
|
+
react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--send ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Send button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: isCompact ? 'lg' : 'xl', isInline: true },
|
31
|
+
react_1.default.createElement(paper_plane_icon_1.PaperPlaneIcon, null)), size: isCompact ? 'sm' : undefined }, props))));
|
32
32
|
};
|
33
33
|
exports.SendButton = SendButton;
|
34
34
|
exports.default = exports.SendButton;
|
@@ -51,4 +51,8 @@ describe('Send button', () => {
|
|
51
51
|
yield user_event_1.default.click(react_2.screen.getByRole('button', { name: 'Send button' }));
|
52
52
|
expect(react_2.screen.getByRole('tooltip', { name: 'Send' })).toHaveAttribute('id', 'test');
|
53
53
|
}));
|
54
|
+
it('should handle isCompact', () => {
|
55
|
+
renderSend({ 'data-testid': 'button', isCompact: true });
|
56
|
+
expect(react_2.screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
57
|
+
});
|
54
58
|
});
|
@@ -9,6 +9,7 @@ export interface StopButtonProps extends ButtonProps {
|
|
9
9
|
tooltipProps?: Omit<TooltipProps, 'content'>;
|
10
10
|
/** English text "Stop" used in the tooltip */
|
11
11
|
tooltipContent?: string;
|
12
|
+
isCompact?: boolean;
|
12
13
|
}
|
13
14
|
export declare const StopButton: React.FunctionComponent<StopButtonProps>;
|
14
15
|
export default StopButton;
|
@@ -22,13 +22,13 @@ const react_1 = __importDefault(require("react"));
|
|
22
22
|
// Import PatternFly components
|
23
23
|
const react_core_1 = require("@patternfly/react-core");
|
24
24
|
const StopButton = (_a) => {
|
25
|
-
var { className, onClick, tooltipProps, tooltipContent = 'Stop' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
|
25
|
+
var { className, onClick, tooltipProps, tooltipContent = 'Stop', isCompact } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent", "isCompact"]);
|
26
26
|
return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--stop", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
|
27
27
|
// prevents VO announcements of both aria label and tooltip
|
28
28
|
aria: "none" }, tooltipProps),
|
29
|
-
react_1.default.createElement(react_core_1.Button, Object.assign({ className: `pf-chatbot__button--stop ${className !== null && className !== void 0 ? className : ''}`, variant: "link", "aria-label": props['aria-label'] || 'Stop button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize:
|
29
|
+
react_1.default.createElement(react_core_1.Button, Object.assign({ className: `pf-chatbot__button--stop ${isCompact ? 'pf-m-compact' : ''} ${className !== null && className !== void 0 ? className : ''}`, variant: "link", "aria-label": props['aria-label'] || 'Stop button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: isCompact ? 'lg' : 'xl', isInline: true },
|
30
30
|
react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
31
|
-
react_1.default.createElement("path", { d: "M0.5 3C0.5 1.62109 1.62109 0.5 3 0.5H13C14.3789 0.5 15.5 1.62109 15.5 3V13C15.5 14.3789 14.3789 15.5 13 15.5H3C1.62109 15.5 0.5 14.3789 0.5 13V3Z", fill: "currentColor" }))) }, props))));
|
31
|
+
react_1.default.createElement("path", { d: "M0.5 3C0.5 1.62109 1.62109 0.5 3 0.5H13C14.3789 0.5 15.5 1.62109 15.5 3V13C15.5 14.3789 14.3789 15.5 13 15.5H3C1.62109 15.5 0.5 14.3789 0.5 13V3Z", fill: "currentColor" }))), size: isCompact ? 'sm' : undefined }, props))));
|
32
32
|
};
|
33
33
|
exports.StopButton = StopButton;
|
34
34
|
exports.default = exports.StopButton;
|
@@ -51,4 +51,8 @@ describe('Stop button', () => {
|
|
51
51
|
yield user_event_1.default.click(react_2.screen.getByRole('button', { name: 'Stop button' }));
|
52
52
|
expect(react_2.screen.getByRole('tooltip', { name: 'Stop' })).toHaveAttribute('id', 'test');
|
53
53
|
}));
|
54
|
+
it('should handle isCompact', () => {
|
55
|
+
renderStop({ 'data-testid': 'button', isCompact: true });
|
56
|
+
expect(react_2.screen.getByTestId('button')).toHaveClass('pf-m-compact');
|
57
|
+
});
|
54
58
|
});
|