@patternfly/chatbot 6.3.0-prerelease.7 → 6.3.0-prerelease.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/cjs/Chatbot/Chatbot.test.js +4 -0
  2. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
  3. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  4. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -2
  5. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  6. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +5 -0
  7. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  8. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  9. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  10. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  11. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  12. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  13. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  14. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  15. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  16. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  17. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  18. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  19. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +1 -1
  20. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  21. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  22. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  23. package/dist/cjs/MessageBar/AttachButton.d.ts +1 -0
  24. package/dist/cjs/MessageBar/AttachButton.js +3 -3
  25. package/dist/cjs/MessageBar/AttachButton.test.js +4 -0
  26. package/dist/cjs/MessageBar/MessageBar.d.ts +1 -0
  27. package/dist/cjs/MessageBar/MessageBar.js +13 -12
  28. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -0
  29. package/dist/cjs/MessageBar/MicrophoneButton.js +3 -3
  30. package/dist/cjs/MessageBar/SendButton.d.ts +1 -0
  31. package/dist/cjs/MessageBar/SendButton.js +3 -3
  32. package/dist/cjs/MessageBar/SendButton.test.js +4 -0
  33. package/dist/cjs/MessageBar/StopButton.d.ts +1 -0
  34. package/dist/cjs/MessageBar/StopButton.js +3 -3
  35. package/dist/cjs/MessageBar/StopButton.test.js +4 -0
  36. package/dist/cjs/MessageBox/MessageBox.js +14 -2
  37. package/dist/css/main.css +128 -2
  38. package/dist/css/main.css.map +1 -1
  39. package/dist/esm/Chatbot/Chatbot.test.js +4 -0
  40. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
  41. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  42. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -2
  43. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  44. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +5 -0
  45. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  46. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  47. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  48. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  49. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  50. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  51. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  52. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  53. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  54. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  55. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  56. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  57. package/dist/esm/ChatbotPopover/ChatbotPopover.js +1 -1
  58. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  59. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  60. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  61. package/dist/esm/MessageBar/AttachButton.d.ts +1 -0
  62. package/dist/esm/MessageBar/AttachButton.js +3 -3
  63. package/dist/esm/MessageBar/AttachButton.test.js +4 -0
  64. package/dist/esm/MessageBar/MessageBar.d.ts +1 -0
  65. package/dist/esm/MessageBar/MessageBar.js +13 -12
  66. package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -0
  67. package/dist/esm/MessageBar/MicrophoneButton.js +3 -3
  68. package/dist/esm/MessageBar/SendButton.d.ts +1 -0
  69. package/dist/esm/MessageBar/SendButton.js +3 -3
  70. package/dist/esm/MessageBar/SendButton.test.js +4 -0
  71. package/dist/esm/MessageBar/StopButton.d.ts +1 -0
  72. package/dist/esm/MessageBar/StopButton.js +3 -3
  73. package/dist/esm/MessageBar/StopButton.test.js +4 -0
  74. package/dist/esm/MessageBox/MessageBox.js +14 -2
  75. package/package.json +1 -1
  76. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +8 -1
  77. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +481 -0
  78. package/src/Chatbot/Chatbot.test.tsx +9 -0
  79. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +10 -1
  80. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +5 -1
  81. package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
  82. package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -0
  83. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -1
  84. package/src/ChatbotHeader/ChatbotHeader.scss +17 -0
  85. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -0
  86. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +10 -5
  87. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +6 -0
  88. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +5 -2
  89. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +10 -0
  90. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +4 -0
  91. package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
  92. package/src/ChatbotPopover/ChatbotPopover.tsx +1 -1
  93. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
  94. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -0
  95. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +13 -2
  96. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
  97. package/src/Message/Message.scss +27 -0
  98. package/src/Message/TextMessage/TextMessage.scss +25 -0
  99. package/src/MessageBar/AttachButton.scss +10 -0
  100. package/src/MessageBar/AttachButton.test.tsx +4 -0
  101. package/src/MessageBar/AttachButton.tsx +5 -2
  102. package/src/MessageBar/MessageBar.scss +17 -0
  103. package/src/MessageBar/MessageBar.tsx +15 -6
  104. package/src/MessageBar/MicrophoneButton.scss +10 -0
  105. package/src/MessageBar/MicrophoneButton.tsx +5 -2
  106. package/src/MessageBar/SendButton.scss +10 -0
  107. package/src/MessageBar/SendButton.test.tsx +5 -1
  108. package/src/MessageBar/SendButton.tsx +5 -2
  109. package/src/MessageBar/StopButton.scss +10 -0
  110. package/src/MessageBar/StopButton.test.tsx +5 -1
  111. package/src/MessageBar/StopButton.tsx +5 -2
  112. package/src/MessageBox/MessageBox.scss +6 -0
  113. package/src/MessageBox/MessageBox.tsx +3 -1
@@ -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
- export {};
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 = ({ className, onMenuToggle, tooltipProps, menuAriaLabel = 'Toggle menu', innerRef, tooltipContent = 'Menu' }) => (react_1.default.createElement("div", { className: `pf-chatbot__menu ${className}` },
11
- react_1.default.createElement(react_core_1.Tooltip, Object.assign({ content: tooltipContent, position: "bottom",
12
- // prevents VO announcements of both aria label and tooltip
13
- aria: "none" }, tooltipProps),
14
- react_1.default.createElement(react_core_1.Button, { className: "pf-chatbot__button--toggle-menu", variant: "plain", onClick: onMenuToggle, "aria-label": menuAriaLabel, ref: innerRef, icon: react_1.default.createElement(react_core_1.Icon, { size: "xl", isInline: true },
15
- react_1.default.createElement(bars_icon_1.default, null)) }))));
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
- export {};
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: "pf-chatbot__button--toggle-options", variant: "plain", "aria-label": menuToggleAriaLabel, ref: toggleRef, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: "xl", isInline: true },
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
- export {};
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
- export {};
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 ${className !== null && className !== void 0 ? className : ''}`, showClose: false }, props), children));
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: "xl", isInline: true },
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', `1rem`);
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', `1rem`);
62
- parent.style.setProperty('margin-top', `1rem`);
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', `1rem`);
84
- parent.style.setProperty('margin-top', `1rem`);
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: "pf-chatbot__message-bar-input" },
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: "xl", isInline: true },
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: "xl", isInline: true },
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: "xl", isInline: true },
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
  });
@@ -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
  };
@@ -9,7 +20,8 @@ exports.MessageBox = void 0;
9
20
  // ============================================================================
10
21
  const react_1 = __importDefault(require("react"));
11
22
  const JumpButton_1 = __importDefault(require("./JumpButton"));
12
- const MessageBoxBase = ({ announcement, ariaLabel = 'Scrollable message log', children, innerRef, className, position = 'top' }) => {
23
+ const MessageBoxBase = (_a) => {
24
+ var { announcement, ariaLabel = 'Scrollable message log', children, innerRef, className, position = 'top' } = _a, props = __rest(_a, ["announcement", "ariaLabel", "children", "innerRef", "className", "position"]);
13
25
  const [atTop, setAtTop] = react_1.default.useState(false);
14
26
  const [atBottom, setAtBottom] = react_1.default.useState(true);
15
27
  const [isOverflowing, setIsOverflowing] = react_1.default.useState(false);
@@ -65,7 +77,7 @@ const MessageBoxBase = ({ announcement, ariaLabel = 'Scrollable message log', ch
65
77
  }, [checkOverflow, handleScroll, messageBoxRef]);
66
78
  return (react_1.default.createElement(react_1.default.Fragment, null,
67
79
  react_1.default.createElement(JumpButton_1.default, { position: "top", isHidden: isOverflowing && atTop, onClick: scrollToTop }),
68
- react_1.default.createElement("div", { role: "region", tabIndex: 0, "aria-label": ariaLabel, className: `pf-chatbot__messagebox ${position === 'bottom' && 'pf-chatbot__messagebox--bottom'} ${className !== null && className !== void 0 ? className : ''}`, ref: innerRef !== null && innerRef !== void 0 ? innerRef : messageBoxRef },
80
+ react_1.default.createElement("div", Object.assign({ role: "region", tabIndex: 0, "aria-label": ariaLabel, className: `pf-chatbot__messagebox ${position === 'bottom' && 'pf-chatbot__messagebox--bottom'} ${className !== null && className !== void 0 ? className : ''}`, ref: innerRef !== null && innerRef !== void 0 ? innerRef : messageBoxRef }, props),
69
81
  children,
70
82
  react_1.default.createElement("div", { className: "pf-chatbot__messagebox-announcement", "aria-live": "polite" }, announcement)),
71
83
  react_1.default.createElement(JumpButton_1.default, { position: "bottom", isHidden: isOverflowing && atBottom, onClick: scrollToBottom })));