@patternfly/chatbot 6.3.0-prerelease.3 → 6.3.0-prerelease.5

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 (82) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +2 -2
  3. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -0
  4. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +2 -2
  5. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +4 -0
  6. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +3 -0
  7. package/dist/cjs/ChatbotModal/ChatbotModal.js +2 -2
  8. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  9. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +28 -0
  10. package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
  11. package/dist/cjs/CodeModal/CodeModal.js +3 -3
  12. package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
  13. package/dist/cjs/CodeModal/CodeModal.test.js +15 -0
  14. package/dist/cjs/FileDetails/FileDetails.js +1 -1
  15. package/dist/cjs/Message/Message.d.ts +2 -0
  16. package/dist/cjs/Message/Message.js +4 -4
  17. package/dist/cjs/Message/Message.test.js +12 -0
  18. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -0
  19. package/dist/cjs/Message/QuickResponse/QuickResponse.js +2 -2
  20. package/dist/cjs/Message/UserFeedback/UserFeedback.js +4 -4
  21. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +4 -0
  22. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  23. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  24. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  25. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +2 -2
  26. package/dist/css/main.css +51 -13
  27. package/dist/css/main.css.map +1 -1
  28. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  29. package/dist/esm/AttachmentEdit/AttachmentEdit.js +2 -2
  30. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -0
  31. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +2 -2
  32. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +4 -0
  33. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +3 -0
  34. package/dist/esm/ChatbotModal/ChatbotModal.js +2 -2
  35. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  36. package/dist/esm/ChatbotModal/ChatbotModal.test.js +23 -0
  37. package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
  38. package/dist/esm/CodeModal/CodeModal.js +3 -3
  39. package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
  40. package/dist/esm/CodeModal/CodeModal.test.js +10 -0
  41. package/dist/esm/FileDetails/FileDetails.js +1 -1
  42. package/dist/esm/Message/Message.d.ts +2 -0
  43. package/dist/esm/Message/Message.js +4 -4
  44. package/dist/esm/Message/Message.test.js +12 -0
  45. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -0
  46. package/dist/esm/Message/QuickResponse/QuickResponse.js +2 -2
  47. package/dist/esm/Message/UserFeedback/UserFeedback.js +4 -4
  48. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +4 -0
  49. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  50. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  51. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  52. package/dist/esm/PreviewAttachment/PreviewAttachment.js +2 -2
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +1 -1
  55. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +10 -1
  56. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +33 -0
  57. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +10 -1
  58. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +9 -0
  59. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +9 -0
  60. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +11 -2
  61. package/src/AttachmentEdit/AttachmentEdit.tsx +5 -1
  62. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +28 -2
  63. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +18 -0
  64. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +4 -1
  65. package/src/ChatbotModal/ChatbotModal.scss +15 -4
  66. package/src/ChatbotModal/ChatbotModal.test.tsx +59 -0
  67. package/src/ChatbotModal/ChatbotModal.tsx +5 -1
  68. package/src/CodeModal/CodeModal.scss +11 -3
  69. package/src/CodeModal/CodeModal.test.tsx +24 -0
  70. package/src/CodeModal/CodeModal.tsx +6 -2
  71. package/src/FileDetails/FileDetails.tsx +1 -1
  72. package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
  73. package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
  74. package/src/Message/Message.test.tsx +21 -0
  75. package/src/Message/Message.tsx +8 -2
  76. package/src/Message/QuickResponse/QuickResponse.tsx +5 -1
  77. package/src/Message/UserFeedback/UserFeedback.scss +24 -3
  78. package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -0
  79. package/src/Message/UserFeedback/UserFeedback.tsx +4 -2
  80. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -0
  81. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +10 -2
  82. package/src/PreviewAttachment/PreviewAttachment.tsx +5 -1
@@ -17,6 +17,8 @@ export interface AttachmentEditProps {
17
17
  title?: string;
18
18
  /** Display mode for the Chatbot parent; this influences the styles applied */
19
19
  displayMode?: ChatbotDisplayMode;
20
+ /** Sets modal to compact styling. */
21
+ isCompact?: boolean;
20
22
  }
21
23
  export declare const AttachmentEdit: React.FunctionComponent<AttachmentEditProps>;
22
24
  export default AttachmentEdit;
@@ -4,7 +4,7 @@
4
4
  import React from 'react';
5
5
  import CodeModal from '../CodeModal';
6
6
  import { ChatbotDisplayMode } from '../Chatbot';
7
- export const AttachmentEdit = ({ fileName, code, handleModalToggle, isModalOpen, onCancel, onSave, title = 'Edit attachment', displayMode = ChatbotDisplayMode.default }) => {
7
+ export const AttachmentEdit = ({ fileName, code, handleModalToggle, isModalOpen, onCancel, onSave, title = 'Edit attachment', displayMode = ChatbotDisplayMode.default, isCompact }) => {
8
8
  const handleSave = (_event, code) => {
9
9
  handleModalToggle(_event);
10
10
  onSave(_event, code);
@@ -13,6 +13,6 @@ export const AttachmentEdit = ({ fileName, code, handleModalToggle, isModalOpen,
13
13
  handleModalToggle(_event);
14
14
  onCancel(_event);
15
15
  };
16
- return (React.createElement(CodeModal, { code: code, fileName: fileName, handleModalToggle: handleModalToggle, isModalOpen: isModalOpen, onPrimaryAction: handleSave, onSecondaryAction: handleCancel, primaryActionBtn: "Save", secondaryActionBtn: "Cancel", title: title, displayMode: displayMode }));
16
+ return (React.createElement(CodeModal, { code: code, fileName: fileName, handleModalToggle: handleModalToggle, isModalOpen: isModalOpen, onPrimaryAction: handleSave, onSecondaryAction: handleCancel, primaryActionBtn: "Save", secondaryActionBtn: "Cancel", title: title, displayMode: displayMode, isCompact: isCompact }));
17
17
  };
18
18
  export default AttachmentEdit;
@@ -80,6 +80,8 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
80
80
  emptyState?: HistoryEmptyStateProps;
81
81
  /** Content to show in no results state. No results state will appear once content is passed in. */
82
82
  noResultsState?: HistoryEmptyStateProps;
83
+ /** Sets drawer to compact styling. */
84
+ isCompact?: boolean;
83
85
  }
84
86
  export declare const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps>;
85
87
  export default ChatbotConversationHistoryNav;
@@ -21,7 +21,7 @@ import ConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
21
21
  import LoadingState from './LoadingState';
22
22
  import HistoryEmptyState from './EmptyState';
23
23
  export const ChatbotConversationHistoryNav = (_a) => {
24
- var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState, emptyState, noResultsState } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState", "emptyState", "noResultsState"]);
24
+ var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState, emptyState, noResultsState, isCompact } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState", "emptyState", "noResultsState", "isCompact"]);
25
25
  const drawerRef = React.useRef(null);
26
26
  const onExpand = () => {
27
27
  drawerRef.current && drawerRef.current.focus();
@@ -84,7 +84,7 @@ export const ChatbotConversationHistoryNav = (_a) => {
84
84
  }
85
85
  }
86
86
  };
87
- return (React.createElement(Drawer, Object.assign({ className: "pf-chatbot__history", isExpanded: isDrawerOpen, onExpand: onExpand, position: "start", onKeyDown: onEscape, isInline: displayMode === ChatbotDisplayMode.fullscreen || displayMode === ChatbotDisplayMode.embedded }, props),
87
+ return (React.createElement(Drawer, Object.assign({ className: `pf-chatbot__history ${isCompact ? 'pf-m-compact' : ''}`, isExpanded: isDrawerOpen, onExpand: onExpand, position: "start", onKeyDown: onEscape, isInline: displayMode === ChatbotDisplayMode.fullscreen || displayMode === ChatbotDisplayMode.embedded }, props),
88
88
  React.createElement(DrawerContent, Object.assign({ panelContent: renderPanelContent() }, drawerContentProps),
89
89
  React.createElement(DrawerContentBody, Object.assign({}, drawerContentBodyProps),
90
90
  React.createElement(React.Fragment, null,
@@ -180,4 +180,8 @@ describe('ChatbotConversationHistoryNav', () => {
180
180
  name: /No results found Adjust your search query and try again. Check your spelling or try a more general term./i
181
181
  })).toBeTruthy();
182
182
  });
183
+ it('should handle isCompact', () => {
184
+ render(React.createElement(ChatbotConversationHistoryNav, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, noResultsState: NO_RESULTS, isCompact: true, "data-testid": "drawer" }));
185
+ expect(screen.getByTestId('drawer')).toHaveClass('pf-m-compact');
186
+ });
183
187
  });
@@ -4,7 +4,10 @@ import { ChatbotDisplayMode } from '../Chatbot';
4
4
  export interface ChatbotModalProps extends Omit<ModalProps, 'ref'> {
5
5
  /** Display mode for the Chatbot parent; this influences the styles applied */
6
6
  displayMode?: ChatbotDisplayMode;
7
+ /** Additional className applied to modal */
7
8
  className?: string;
9
+ /** Sets modal to compact styling. */
10
+ isCompact?: boolean;
8
11
  }
9
12
  export declare const ChatbotModal: React.FunctionComponent<ChatbotModalProps>;
10
13
  export default ChatbotModal;
@@ -17,8 +17,8 @@ import React from 'react';
17
17
  import { Modal } from '@patternfly/react-core';
18
18
  import { ChatbotDisplayMode } from '../Chatbot';
19
19
  export const ChatbotModal = (_a) => {
20
- var { children, displayMode = ChatbotDisplayMode.default, className, isOpen } = _a, props = __rest(_a, ["children", "displayMode", "className", "isOpen"]);
21
- const modal = (React.createElement(Modal, Object.assign({ isOpen: isOpen, ouiaId: "ChatbotModal", "aria-labelledby": "chatbot-modal-title", "aria-describedby": "chatbot-modal", className: `pf-chatbot__chatbot-modal pf-chatbot__chatbot-modal--${displayMode} ${className}`, backdropClassName: "pf-chatbot__chatbot-modal-backdrop" }, props), children));
20
+ var { children, displayMode = ChatbotDisplayMode.default, className, isOpen, isCompact } = _a, props = __rest(_a, ["children", "displayMode", "className", "isOpen", "isCompact"]);
21
+ const modal = (React.createElement(Modal, Object.assign({ isOpen: isOpen, ouiaId: "ChatbotModal", "aria-labelledby": "chatbot-modal-title", "aria-describedby": "chatbot-modal", className: `pf-chatbot__chatbot-modal pf-chatbot__chatbot-modal--${displayMode} ${isCompact ? 'pf-m-compact' : ''} ${className}`, backdropClassName: "pf-chatbot__chatbot-modal-backdrop" }, props), children));
22
22
  if ((displayMode === ChatbotDisplayMode.fullscreen || displayMode === ChatbotDisplayMode.embedded) && isOpen) {
23
23
  return React.createElement("div", { className: "pf-v6-c-backdrop pf-chatbot__backdrop" }, modal);
24
24
  }
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotModal from './ChatbotModal';
4
+ import '@testing-library/jest-dom';
5
+ import { ModalBody, ModalHeader } from '@patternfly/react-core';
6
+ describe('ChatbotModal', () => {
7
+ it('should render compact modal', () => {
8
+ render(React.createElement(ChatbotModal, { "data-testid": "modal", isCompact: true, isOpen: true },
9
+ React.createElement(ModalHeader, { title: "Modal with description", labelId: "modal-with-description-title", description: "A description is used when you want to provide more info about the modal than the title is able to describe. The content in the description is static and will not scroll with the rest of the modal body." }),
10
+ React.createElement(ModalBody, { tabIndex: 0, id: "modal-box-body-with-description" },
11
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Semper auctor neque vitae tempus. Diam donec adipiscing tristique risus. Augue eget arcu dictum varius duis. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Sit amet mauris commodo quis imperdiet massa tincidunt. Habitant morbi tristique senectus et netus. Fames ac turpis egestas sed tempus urna. Neque laoreet suspendisse interdum consectetur libero id. Volutpat lacus laoreet non curabitur gravida arcu ac tortor. Porta nibh venenatis cras sed felis eget velit. Nullam non nisi est sit amet facilisis. Nunc mi ipsum faucibus vitae. Lorem sed risus ultricies tristique nulla aliquet enim tortor at. Egestas sed tempus urna et pharetra pharetra massa massa ultricies. Lacinia quis vel eros donec ac odio tempor orci. Malesuada fames ac turpis egestas integer eget aliquet.",
12
+ React.createElement("br", null),
13
+ React.createElement("br", null),
14
+ "Neque aliquam vestibulum morbi blandit cursus risus at ultrices. Molestie at elementum eu facilisis sed odio morbi. Elit pellentesque habitant morbi tristique. Consequat nisl vel pretium lectus quam id leo in vitae. Quis varius quam quisque id diam vel quam elementum. Viverra nam libero justo laoreet sit amet cursus. Sollicitudin tempor id eu nisl nunc. Orci nulla pellentesque dignissim enim sit amet venenatis. Dignissim enim sit amet venenatis urna cursus eget. Iaculis at erat pellentesque adipiscing commodo elit. Faucibus pulvinar elementum integer enim neque volutpat. Nullam vehicula ipsum a arcu cursus vitae congue mauris. Nunc mattis enim ut tellus elementum sagittis vitae. Blandit cursus risus at ultrices. Tellus mauris a diam maecenas sed enim. Non diam phasellus vestibulum lorem sed risus ultricies tristique nulla.",
15
+ React.createElement("br", null),
16
+ React.createElement("br", null),
17
+ "Nulla pharetra diam sit amet nisl suscipit adipiscing. Ac tortor vitae purus faucibus ornare suspendisse sed nisi. Sed felis eget velit aliquet sagittis id consectetur purus. Tincidunt tortor aliquam nulla facilisi cras fermentum. Volutpat est velit egestas dui id ornare arcu odio. Pharetra magna ac placerat vestibulum. Ultrices sagittis orci a scelerisque purus semper eget duis at. Nisi est sit amet facilisis magna etiam tempor orci eu. Convallis tellus id interdum velit. Facilisis sed odio morbi quis commodo odio aenean sed.",
18
+ React.createElement("br", null),
19
+ React.createElement("br", null),
20
+ "Eu scelerisque felis imperdiet proin fermentum leo vel orci porta. Facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Magna etiam tempor orci eu lobortis elementum. Quis auctor elit sed vulputate mi sit. Eleifend quam adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus. Erat velit scelerisque in dictum non. Sit amet nulla facilisi morbi tempus iaculis urna. Enim ut tellus elementum sagittis vitae et leo duis ut. Lectus arcu bibendum at varius vel pharetra vel turpis. Morbi tristique senectus et netus et. Eget aliquet nibh praesent tristique magna sit amet purus gravida. Nisl purus in mollis nunc sed id semper risus. Id neque aliquam vestibulum morbi. Mauris a diam maecenas sed enim ut sem. Egestas tellus rutrum tellus pellentesque.")));
21
+ expect(screen.getByTestId('modal')).toHaveClass('pf-m-compact');
22
+ });
23
+ });
@@ -29,6 +29,8 @@ export interface CodeModalProps {
29
29
  title: string;
30
30
  /** Display mode for the Chatbot parent; this influences the styles applied */
31
31
  displayMode?: ChatbotDisplayMode;
32
+ /** Sets modal to compact styling. */
33
+ isCompact?: boolean;
32
34
  }
33
35
  export declare const CodeModal: React.FunctionComponent<CodeModalProps>;
34
36
  export default CodeModal;
@@ -21,7 +21,7 @@ import FileDetails, { extensionToLanguage } from '../FileDetails';
21
21
  import { ChatbotDisplayMode } from '../Chatbot';
22
22
  import ChatbotModal from '../ChatbotModal/ChatbotModal';
23
23
  export const CodeModal = (_a) => {
24
- var { fileName, code, codeEditorControlClassName: codeEditorClassName, handleModalToggle, isCopyEnabled, isLineNumbersVisible, isModalOpen, isReadOnly, onPrimaryAction, onSecondaryAction, primaryActionBtn, secondaryActionBtn, title, displayMode = ChatbotDisplayMode.default } = _a, props = __rest(_a, ["fileName", "code", "codeEditorControlClassName", "handleModalToggle", "isCopyEnabled", "isLineNumbersVisible", "isModalOpen", "isReadOnly", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "displayMode"]);
24
+ var { fileName, code, codeEditorControlClassName: codeEditorClassName, handleModalToggle, isCopyEnabled, isLineNumbersVisible, isModalOpen, isReadOnly, onPrimaryAction, onSecondaryAction, primaryActionBtn, secondaryActionBtn, title, displayMode = ChatbotDisplayMode.default, isCompact } = _a, props = __rest(_a, ["fileName", "code", "codeEditorControlClassName", "handleModalToggle", "isCopyEnabled", "isLineNumbersVisible", "isModalOpen", "isReadOnly", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "displayMode", "isCompact"]);
25
25
  const [newCode, setNewCode] = React.useState(code);
26
26
  const handlePrimaryAction = (_event) => {
27
27
  handleModalToggle(_event);
@@ -46,13 +46,13 @@ export const CodeModal = (_a) => {
46
46
  setNewCode(value);
47
47
  }
48
48
  };
49
- const modal = (React.createElement(ChatbotModal, { isOpen: isModalOpen, onClose: handleModalToggle, ouiaId: "CodeModal", "aria-labelledby": "code-modal-title", "aria-describedby": "code-modal", className: `pf-chatbot__code-modal pf-chatbot__code-modal--${displayMode}`, displayMode: displayMode },
49
+ const modal = (React.createElement(ChatbotModal, { isOpen: isModalOpen, onClose: handleModalToggle, ouiaId: "CodeModal", "aria-labelledby": "code-modal-title", "aria-describedby": "code-modal", className: `pf-chatbot__code-modal ${isCompact ? 'pf-m-compact' : ''} pf-chatbot__code-modal--${displayMode}`, displayMode: displayMode, isCompact: isCompact },
50
50
  React.createElement(ModalHeader, { title: title, labelId: "code-modal-title" }),
51
51
  React.createElement(ModalBody, { id: "code-modal-body" },
52
52
  React.createElement(Stack, { className: "pf-chatbot__code-modal-body" },
53
53
  React.createElement(StackItem, { className: "pf-chatbot__code-modal-file-details" },
54
54
  React.createElement(FileDetails, { fileName: fileName })),
55
- React.createElement(StackItem, { className: "pf-chatbot__code-modal-body" },
55
+ React.createElement(StackItem, { className: "pf-chatbot__code-modal-editor" },
56
56
  React.createElement(CodeEditor, Object.assign({ isDarkTheme: true, isLineNumbersVisible: isLineNumbersVisible, isLanguageLabelVisible: true, isCopyEnabled: isCopyEnabled, isReadOnly: isReadOnly, code: newCode, language: extensionToLanguage[path.extname(fileName).slice(1)], onEditorDidMount: onEditorDidMount, onCodeChange: onCodeChange, className: codeEditorClassName, isFullHeight: true, options: {
57
57
  glyphMargin: false,
58
58
  folding: false
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import CodeModal from './CodeModal';
5
+ describe('ChatbotModal', () => {
6
+ it('should render compact modal', () => {
7
+ render(React.createElement(CodeModal, { isCompact: true, code: "Hello world", fileName: "greetings.txt", isModalOpen: true, handleModalToggle: jest.fn(), onPrimaryAction: jest.fn(), onSecondaryAction: jest.fn(), title: "Preview attachment", primaryActionBtn: "Submit", secondaryActionBtn: "Cancel" }));
8
+ expect(screen.getByRole('dialog')).toHaveClass('pf-m-compact');
9
+ });
10
+ });
@@ -929,7 +929,7 @@ export const extensionToLanguage = {
929
929
  export const FileDetails = ({ className, fileName, fileNameClassName, languageTestId }) => {
930
930
  var _a;
931
931
  const language = (_a = extensionToLanguage[path.extname(fileName).slice(1)]) === null || _a === void 0 ? void 0 : _a.toUpperCase();
932
- return (React.createElement(Flex, { className: `pf-chatbot__file-details ${className}`, gap: { default: 'gapSm' } },
932
+ return (React.createElement(Flex, { className: `pf-chatbot__file-details ${className ? className : ''}`, gap: { default: 'gapSm' } },
933
933
  React.createElement(Flex, { className: "pf-chatbot__code-icon", justifyContent: { default: 'justifyContentCenter' }, alignItems: { default: 'alignItemsCenter' }, alignSelf: { default: 'alignSelfCenter' } },
934
934
  React.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg" },
935
935
  React.createElement("path", { d: "M0 4C0 1.79086 1.79086 0 4 0H20C22.2091 0 24 1.79086 24 4V20C24 22.2091 22.2091 24 20 24H4C1.79086 24 0 22.2091 0 20V4Z", fill: "currentColor" }),
@@ -120,6 +120,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
120
120
  onEditCancel?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
121
121
  /** Props for edit form */
122
122
  editFormProps?: FormProps;
123
+ /** Sets message to compact styling. */
124
+ isCompact?: boolean;
123
125
  }
124
126
  export declare const MessageBase: React.FunctionComponent<MessageProps>;
125
127
  declare const Message: React.ForwardRefExoticComponent<Omit<MessageProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -43,7 +43,7 @@ import LinkMessage from './LinkMessage/LinkMessage';
43
43
  import ErrorMessage from './ErrorMessage/ErrorMessage';
44
44
  import MessageInput from './MessageInput';
45
45
  export const MessageBase = (_a) => {
46
- var { role, content, extraContent, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef, tableProps, openLinkInNewTab = true, additionalRehypePlugins = [], linkProps, error, isEditable, editPlaceholder = 'Edit prompt message...', updateWord = 'Update', cancelWord = 'Cancel', onEditUpdate, onEditCancel, editFormProps } = _a, props = __rest(_a, ["role", "content", "extraContent", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef", "tableProps", "openLinkInNewTab", "additionalRehypePlugins", "linkProps", "error", "isEditable", "editPlaceholder", "updateWord", "cancelWord", "onEditUpdate", "onEditCancel", "editFormProps"]);
46
+ var { role, content, extraContent, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef, tableProps, openLinkInNewTab = true, additionalRehypePlugins = [], linkProps, error, isEditable, editPlaceholder = 'Edit prompt message...', updateWord = 'Update', cancelWord = 'Cancel', onEditUpdate, onEditCancel, editFormProps, isCompact } = _a, props = __rest(_a, ["role", "content", "extraContent", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef", "tableProps", "openLinkInNewTab", "additionalRehypePlugins", "linkProps", "error", "isEditable", "editPlaceholder", "updateWord", "cancelWord", "onEditUpdate", "onEditCancel", "editFormProps", "isCompact"]);
47
47
  const [messageText, setMessageText] = React.useState(content);
48
48
  React.useEffect(() => {
49
49
  setMessageText(content);
@@ -125,9 +125,9 @@ export const MessageBase = (_a) => {
125
125
  !isLoading && sources && React.createElement(SourcesCard, Object.assign({}, sources)),
126
126
  quickStarts && quickStarts.quickStart && (React.createElement(QuickStartTile, { quickStart: quickStarts.quickStart, onSelectQuickStart: quickStarts.onSelectQuickStart, minuteWord: quickStarts.minuteWord, minuteWordPlural: quickStarts.minuteWordPlural, prerequisiteWord: quickStarts.prerequisiteWord, prerequisiteWordPlural: quickStarts.prerequisiteWordPlural, quickStartButtonAriaLabel: quickStarts.quickStartButtonAriaLabel })),
127
127
  !isLoading && actions && React.createElement(ResponseActions, { actions: actions }),
128
- userFeedbackForm && React.createElement(UserFeedback, Object.assign({}, userFeedbackForm, { timestamp: dateString })),
129
- userFeedbackComplete && React.createElement(UserFeedbackComplete, Object.assign({}, userFeedbackComplete, { timestamp: dateString })),
130
- !isLoading && quickResponses && (React.createElement(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: quickResponseContainerProps }))),
128
+ userFeedbackForm && React.createElement(UserFeedback, Object.assign({}, userFeedbackForm, { timestamp: dateString, isCompact: isCompact })),
129
+ userFeedbackComplete && (React.createElement(UserFeedbackComplete, Object.assign({}, userFeedbackComplete, { timestamp: dateString, isCompact: isCompact }))),
130
+ !isLoading && quickResponses && (React.createElement(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: quickResponseContainerProps, isCompact: isCompact }))),
131
131
  attachments && (React.createElement("div", { className: "pf-chatbot__message-attachments-container" }, attachments.map((attachment) => {
132
132
  var _a;
133
133
  return (React.createElement("div", { key: (_a = attachment.id) !== null && _a !== void 0 ? _a : attachment.name, className: "pf-chatbot__message-attachment" },
@@ -282,6 +282,18 @@ describe('Message', () => {
282
282
  yield userEvent.click(quickResponse);
283
283
  expect(spy).toHaveBeenCalledTimes(1);
284
284
  }));
285
+ it('should be able to handle isCompact', () => __awaiter(void 0, void 0, void 0, function* () {
286
+ render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", quickResponses: [
287
+ {
288
+ id: '1',
289
+ content: 'Yes',
290
+ onClick: jest.fn(),
291
+ className: 'test'
292
+ }
293
+ ], isCompact: true }));
294
+ const parent = screen.getByRole('button', { name: /Yes/i }).parentNode;
295
+ expect(parent).toHaveClass('pf-m-compact');
296
+ }));
285
297
  it('should be able to show more than 1 quick response', () => __awaiter(void 0, void 0, void 0, function* () {
286
298
  const spy = jest.fn();
287
299
  render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", quickResponses: [
@@ -12,6 +12,8 @@ export interface QuickResponseProps {
12
12
  quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
13
13
  /** Callback when a response is clicked; used in feedback cards */
14
14
  onSelect?: (id: string) => void;
15
+ /** Sets the quick responses to compact styling */
16
+ isCompact?: boolean;
15
17
  }
16
18
  export declare const QuickResponse: React.FunctionComponent<QuickResponseProps>;
17
19
  export default QuickResponse;
@@ -12,7 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  import React from 'react';
13
13
  import { Label, LabelGroup } from '@patternfly/react-core';
14
14
  import { CheckIcon } from '@patternfly/react-icons';
15
- export const QuickResponse = ({ quickResponses, quickResponseContainerProps = { numLabels: 5 }, onSelect }) => {
15
+ export const QuickResponse = ({ quickResponses, quickResponseContainerProps = { numLabels: 5 }, onSelect, isCompact }) => {
16
16
  const [selectedQuickResponse, setSelectedQuickResponse] = React.useState();
17
17
  const handleQuickResponseClick = (id, onClick) => {
18
18
  setSelectedQuickResponse(id);
@@ -21,7 +21,7 @@ export const QuickResponse = ({ quickResponses, quickResponseContainerProps = {
21
21
  };
22
22
  return (React.createElement(LabelGroup, Object.assign({ className: `pf-chatbot__message-quick-response ${(quickResponseContainerProps === null || quickResponseContainerProps === void 0 ? void 0 : quickResponseContainerProps.className) ? quickResponseContainerProps === null || quickResponseContainerProps === void 0 ? void 0 : quickResponseContainerProps.className : ''}` }, quickResponseContainerProps), quickResponses.map((_a) => {
23
23
  var { id, onClick, content, className } = _a, props = __rest(_a, ["id", "onClick", "content", "className"]);
24
- return (React.createElement(Label, Object.assign({ variant: id === selectedQuickResponse ? undefined : 'outline', icon: id === selectedQuickResponse ? React.createElement(CheckIcon, null) : undefined, color: "blue", key: id, onClick: () => handleQuickResponseClick(id, onClick), className: `${id === selectedQuickResponse ? 'pf-chatbot__message-quick-response--selected' : ''} ${className ? className : ''}` }, props), content));
24
+ return (React.createElement(Label, Object.assign({ variant: id === selectedQuickResponse ? undefined : 'outline', icon: id === selectedQuickResponse ? React.createElement(CheckIcon, null) : undefined, color: "blue", key: id, onClick: () => handleQuickResponseClick(id, onClick), className: `${id === selectedQuickResponse ? 'pf-chatbot__message-quick-response--selected' : ''} ${className ? className : ''}`, isCompact: isCompact }, props), content));
25
25
  })));
26
26
  };
27
27
  export default QuickResponse;
@@ -18,7 +18,7 @@ import { ActionGroup, Button, Card, CardBody, CardHeader, Form, TextArea } from
18
18
  import QuickResponse from '../QuickResponse/QuickResponse';
19
19
  import CloseButton from './CloseButton';
20
20
  const UserFeedback = (_a) => {
21
- var { className, timestamp, title = 'Why did you choose this rating?', hasTextArea, textAreaAriaLabel = `Provide optional additional feedback for message received at ${timestamp}`, textAreaPlaceholder = 'Provide optional additional feedback', onTextAreaChange, submitWord = 'Submit', quickResponses, quickResponseContainerProps = { 'aria-label': `Quick feedback for message received at ${timestamp}` }, onSubmit, onClose, closeButtonAriaLabel = `Close feedback for message received at ${timestamp}`, id, headingLevel: HeadingLevel = 'h1', focusOnLoad = true } = _a, props = __rest(_a, ["className", "timestamp", "title", "hasTextArea", "textAreaAriaLabel", "textAreaPlaceholder", "onTextAreaChange", "submitWord", "quickResponses", "quickResponseContainerProps", "onSubmit", "onClose", "closeButtonAriaLabel", "id", "headingLevel", "focusOnLoad"]);
21
+ var { className, timestamp, title = 'Why did you choose this rating?', hasTextArea, textAreaAriaLabel = `Provide optional additional feedback for message received at ${timestamp}`, textAreaPlaceholder = 'Provide optional additional feedback', onTextAreaChange, submitWord = 'Submit', quickResponses, quickResponseContainerProps = { 'aria-label': `Quick feedback for message received at ${timestamp}` }, onSubmit, onClose, closeButtonAriaLabel = `Close feedback for message received at ${timestamp}`, id, headingLevel: HeadingLevel = 'h1', focusOnLoad = true, isCompact } = _a, props = __rest(_a, ["className", "timestamp", "title", "hasTextArea", "textAreaAriaLabel", "textAreaPlaceholder", "onTextAreaChange", "submitWord", "quickResponses", "quickResponseContainerProps", "onSubmit", "onClose", "closeButtonAriaLabel", "id", "headingLevel", "focusOnLoad", "isCompact"]);
22
22
  const [selectedResponse, setSelectedResponse] = React.useState();
23
23
  const [value, setValue] = React.useState('');
24
24
  const divRef = React.useRef(null);
@@ -31,14 +31,14 @@ const UserFeedback = (_a) => {
31
31
  return (
32
32
  /* card does not have ref forwarding; hence wrapper div */
33
33
  React.createElement("div", { ref: divRef, id: id, tabIndex: 0, "aria-label": title },
34
- React.createElement(Card, Object.assign({ className: `pf-chatbot__feedback-card ${className ? className : ''}` }, props),
34
+ React.createElement(Card, Object.assign({ isCompact: isCompact, className: `pf-chatbot__feedback-card ${className ? className : ''}` }, props),
35
35
  React.createElement(CardHeader, { actions: {
36
36
  actions: React.createElement(CloseButton, { onClose: onClose, ariaLabel: closeButtonAriaLabel })
37
37
  } },
38
38
  React.createElement(HeadingLevel, { className: "pf-chatbot__feedback-card-title" }, title)),
39
39
  React.createElement(CardBody, null,
40
- React.createElement(Form, { className: "pf-chatbot__feedback-card-form" },
41
- quickResponses && (React.createElement(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: quickResponseContainerProps, onSelect: (id) => setSelectedResponse(id) })),
40
+ React.createElement(Form, { className: `pf-chatbot__feedback-card-form ${isCompact ? 'pf-m-compact' : ''}` },
41
+ quickResponses && (React.createElement(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: quickResponseContainerProps, onSelect: (id) => setSelectedResponse(id), isCompact: isCompact })),
42
42
  hasTextArea && (React.createElement(TextArea, { value: value, onChange: (_event, value) => {
43
43
  setValue(value);
44
44
  onTextAreaChange && onTextAreaChange(_event, value);
@@ -125,4 +125,8 @@ describe('UserFeedback', () => {
125
125
  render(React.createElement(UserFeedback, { timestamp: "12/12/12", onClose: jest.fn, onSubmit: jest.fn, quickResponses: MOCK_RESPONSES, "data-testid": "card", focusOnLoad: false }));
126
126
  expect(screen.getByTestId('card').parentElement).not.toHaveFocus();
127
127
  });
128
+ it('should handle isCompact', () => {
129
+ render(React.createElement(UserFeedback, { timestamp: "12/12/12", onClose: jest.fn, onSubmit: jest.fn, quickResponses: MOCK_RESPONSES, "data-testid": "card", isCompact: true }));
130
+ expect(screen.getByTestId('card')).toHaveClass('pf-m-compact');
131
+ });
128
132
  });
@@ -17,7 +17,7 @@ import React from 'react';
17
17
  import { Card, CardBody, CardHeader, CardTitle, useOUIAProps } from '@patternfly/react-core';
18
18
  import CloseButton from './CloseButton';
19
19
  const UserFeedbackComplete = (_a) => {
20
- var { className, title = 'Feedback submitted', body = "We've received your response. Thank you for sharing your feedback!", timestamp, timeout = false, timeoutAnimation = 3000, onTimeout, onClose, closeButtonAriaLabel = `Close feedback for message received at ${timestamp}`, onMouseEnter, onMouseLeave, ouiaId, ouiaSafe, isLiveRegion, id, focusOnLoad = true } = _a, props = __rest(_a, ["className", "title", "body", "timestamp", "timeout", "timeoutAnimation", "onTimeout", "onClose", "closeButtonAriaLabel", "onMouseEnter", "onMouseLeave", "ouiaId", "ouiaSafe", "isLiveRegion", "id", "focusOnLoad"]);
20
+ var { className, title = 'Feedback submitted', body = "We've received your response. Thank you for sharing your feedback!", timestamp, timeout = false, timeoutAnimation = 3000, onTimeout, onClose, closeButtonAriaLabel = `Close feedback for message received at ${timestamp}`, onMouseEnter, onMouseLeave, ouiaId, ouiaSafe, isLiveRegion, id, focusOnLoad = true, isCompact } = _a, props = __rest(_a, ["className", "title", "body", "timestamp", "timeout", "timeoutAnimation", "onTimeout", "onClose", "closeButtonAriaLabel", "onMouseEnter", "onMouseLeave", "ouiaId", "ouiaSafe", "isLiveRegion", "id", "focusOnLoad", "isCompact"]);
21
21
  const [timedOut, setTimedOut] = React.useState(false);
22
22
  const [timedOutAnimation, setTimedOutAnimation] = React.useState(true);
23
23
  const [isMouseOver, setIsMouseOver] = React.useState();
@@ -80,8 +80,8 @@ const UserFeedbackComplete = (_a) => {
80
80
  'aria-live': 'polite',
81
81
  'aria-atomic': 'false'
82
82
  }), { id: id, tabIndex: 0, "aria-label": title }, ouiaProps),
83
- React.createElement(Card, Object.assign({ className: `pf-chatbot__feedback-card ${className ? className : ''}` }, props),
84
- React.createElement(CardHeader, { actions:
83
+ React.createElement(Card, Object.assign({ isCompact: isCompact, className: `pf-chatbot__feedback-card pf-chatbot__feedback-card-complete${className ? ` ${className}` : ''}` }, props),
84
+ React.createElement(CardHeader, { className: onClose ? 'pf-chatbot__feedback-card-complete-header' : 'pf-chatbot__feedback-card-complete-empty-header', actions:
85
85
  /* eslint-disable indent */
86
86
  onClose
87
87
  ? {
@@ -107,6 +107,6 @@ const UserFeedbackComplete = (_a) => {
107
107
  React.createElement("path", { d: "M27.7803 30.1276C27.6098 30.1276 27.4497 30.0614 27.3298 29.9406L22.9465 25.5562C22.8267 25.4364 22.7595 25.2762 22.7595 25.1068C22.7595 24.9374 22.8256 24.7762 22.9465 24.6554L24.2379 23.364C24.3577 23.2442 24.5178 23.177 24.6883 23.177C24.8587 23.177 25.0168 23.2431 25.1377 23.363L27.7803 26.0056L34.861 18.9259C34.9808 18.8061 35.1409 18.7389 35.3103 18.7389C35.4798 18.7389 35.6389 18.8051 35.7597 18.9239L37.0531 20.2173C37.173 20.3361 37.2401 20.4962 37.2401 20.6677C37.2401 20.8392 37.174 20.9983 37.0531 21.1181L28.2317 29.9406C28.1119 30.0604 27.9518 30.1265 27.7823 30.1265L27.7803 30.1276Z", fill: "white" }))),
108
108
  React.createElement("div", { className: "pf-chatbot__feedback-complete-text" },
109
109
  React.createElement(CardTitle, { className: "pf-chatbot__feedback-complete-title" }, title),
110
- React.createElement(CardBody, { className: `pf-chatbot__feedback-complete-body` }, body))))));
110
+ React.createElement(CardBody, { className: `pf-chatbot__feedback-complete-card-body` }, body))))));
111
111
  };
112
112
  export default UserFeedbackComplete;
@@ -241,4 +241,8 @@ describe('UserFeedbackComplete', () => {
241
241
  render(React.createElement(UserFeedbackComplete, { timestamp: "12/12/12", "data-testid": "card", focusOnLoad: false }));
242
242
  expect(screen.getByTestId('card').parentElement).not.toHaveFocus();
243
243
  });
244
+ it('should handle isCompact', () => {
245
+ render(React.createElement(UserFeedbackComplete, { timestamp: "12/12/12", "data-testid": "card", isCompact: true }));
246
+ expect(screen.getByTestId('card')).toHaveClass('pf-m-compact');
247
+ });
244
248
  });
@@ -17,6 +17,8 @@ export interface PreviewAttachmentProps {
17
17
  title?: string;
18
18
  /** Display mode for the Chatbot parent; this influences the styles applied */
19
19
  displayMode?: ChatbotDisplayMode;
20
+ /** Sets modal to compact styling. */
21
+ isCompact?: boolean;
20
22
  }
21
23
  export declare const PreviewAttachment: React.FunctionComponent<PreviewAttachmentProps>;
22
24
  export default PreviewAttachment;
@@ -4,7 +4,7 @@
4
4
  import React from 'react';
5
5
  import CodeModal from '../CodeModal';
6
6
  import { ChatbotDisplayMode } from '../Chatbot';
7
- export const PreviewAttachment = ({ fileName, code, handleModalToggle, isModalOpen, onDismiss = undefined, onEdit, title = 'Preview attachment', displayMode = ChatbotDisplayMode.default }) => {
7
+ export const PreviewAttachment = ({ fileName, code, handleModalToggle, isModalOpen, onDismiss = undefined, onEdit, title = 'Preview attachment', displayMode = ChatbotDisplayMode.default, isCompact }) => {
8
8
  const handleEdit = (_event) => {
9
9
  handleModalToggle(_event);
10
10
  onEdit(_event);
@@ -13,6 +13,6 @@ export const PreviewAttachment = ({ fileName, code, handleModalToggle, isModalOp
13
13
  handleModalToggle(_event);
14
14
  onDismiss && onDismiss(_event);
15
15
  };
16
- return (React.createElement(CodeModal, { codeEditorControlClassName: "pf-chatbot__code-modal--controls", code: code, fileName: fileName, handleModalToggle: handleModalToggle, isCopyEnabled: true, isLineNumbersVisible: false, isModalOpen: isModalOpen, onPrimaryAction: handleEdit, onSecondaryAction: handleDismiss, primaryActionBtn: "Edit", secondaryActionBtn: "Dismiss", title: title, isReadOnly: true, displayMode: displayMode }));
16
+ return (React.createElement(CodeModal, { codeEditorControlClassName: "pf-chatbot__code-modal--controls", code: code, fileName: fileName, handleModalToggle: handleModalToggle, isCopyEnabled: true, isLineNumbersVisible: false, isModalOpen: isModalOpen, onPrimaryAction: handleEdit, onSecondaryAction: handleDismiss, primaryActionBtn: "Edit", secondaryActionBtn: "Dismiss", title: title, isReadOnly: true, displayMode: displayMode, isCompact: isCompact }));
17
17
  };
18
18
  export default PreviewAttachment;
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.test.tsx","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.test.tsx","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.test.tsx","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.test.tsx","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/EmptyState.tsx","../src/ChatbotConversationHistoryNav/LoadingState.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.test.tsx","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFooternote.test.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.test.tsx","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.test.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.tsx","../src/ChatbotHeader/ChatbotHeaderMain.test.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.test.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.test.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/Compare/Compare.test.tsx","../src/Compare/Compare.tsx","../src/Compare/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageInput.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ErrorMessage/ErrorMessage.tsx","../src/Message/ImageMessage/ImageMessage.tsx","../src/Message/LinkMessage/LinkMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/QuickResponse/QuickResponse.tsx","../src/Message/QuickStarts/FallbackImg.tsx","../src/Message/QuickStarts/QuickStartTile.tsx","../src/Message/QuickStarts/QuickStartTileDescription.test.tsx","../src/Message/QuickStarts/QuickStartTileDescription.tsx","../src/Message/QuickStarts/QuickStartTileHeader.tsx","../src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts","../src/Message/QuickStarts/monitor-sampleapp-quickstart.ts","../src/Message/QuickStarts/types.ts","../src/Message/TableMessage/TableMessage.tsx","../src/Message/TableMessage/TbodyMessage.tsx","../src/Message/TableMessage/TdMessage.tsx","../src/Message/TableMessage/ThMessage.tsx","../src/Message/TableMessage/TheadMessage.tsx","../src/Message/TableMessage/TrMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/Message/UserFeedback/CloseButton.tsx","../src/Message/UserFeedback/UserFeedback.test.tsx","../src/Message/UserFeedback/UserFeedback.tsx","../src/Message/UserFeedback/UserFeedbackComplete.test.tsx","../src/Message/UserFeedback/UserFeedbackComplete.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.test.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.test.tsx","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.test.tsx","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/Settings/SettingsForm.test.tsx","../src/Settings/SettingsForm.tsx","../src/Settings/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts","../src/__mocks__/rehype-external-links.ts","../src/__mocks__/rehype-sanitize.ts","../src/__mocks__/rehype-unwrap-images.tsx","../src/tracking/console_tracking_provider.ts","../src/tracking/index.ts","../src/tracking/posthog_tracking_provider.ts","../src/tracking/segment_tracking_provider.ts","../src/tracking/trackingProviderProxy.ts","../src/tracking/tracking_api.ts","../src/tracking/tracking_registry.ts","../src/tracking/tracking_spi.ts","../src/tracking/umami_tracking_provider.ts"],"version":"5.6.3"}
1
+ {"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.test.tsx","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.test.tsx","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.test.tsx","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.test.tsx","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/EmptyState.tsx","../src/ChatbotConversationHistoryNav/LoadingState.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.test.tsx","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFooternote.test.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.test.tsx","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.test.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.tsx","../src/ChatbotHeader/ChatbotHeaderMain.test.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.test.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.test.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.test.tsx","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.test.tsx","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/Compare/Compare.test.tsx","../src/Compare/Compare.tsx","../src/Compare/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageInput.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ErrorMessage/ErrorMessage.tsx","../src/Message/ImageMessage/ImageMessage.tsx","../src/Message/LinkMessage/LinkMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/QuickResponse/QuickResponse.tsx","../src/Message/QuickStarts/FallbackImg.tsx","../src/Message/QuickStarts/QuickStartTile.tsx","../src/Message/QuickStarts/QuickStartTileDescription.test.tsx","../src/Message/QuickStarts/QuickStartTileDescription.tsx","../src/Message/QuickStarts/QuickStartTileHeader.tsx","../src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts","../src/Message/QuickStarts/monitor-sampleapp-quickstart.ts","../src/Message/QuickStarts/types.ts","../src/Message/TableMessage/TableMessage.tsx","../src/Message/TableMessage/TbodyMessage.tsx","../src/Message/TableMessage/TdMessage.tsx","../src/Message/TableMessage/ThMessage.tsx","../src/Message/TableMessage/TheadMessage.tsx","../src/Message/TableMessage/TrMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/Message/UserFeedback/CloseButton.tsx","../src/Message/UserFeedback/UserFeedback.test.tsx","../src/Message/UserFeedback/UserFeedback.tsx","../src/Message/UserFeedback/UserFeedbackComplete.test.tsx","../src/Message/UserFeedback/UserFeedbackComplete.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.test.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.test.tsx","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.test.tsx","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/Settings/SettingsForm.test.tsx","../src/Settings/SettingsForm.tsx","../src/Settings/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts","../src/__mocks__/rehype-external-links.ts","../src/__mocks__/rehype-sanitize.ts","../src/__mocks__/rehype-unwrap-images.tsx","../src/tracking/console_tracking_provider.ts","../src/tracking/index.ts","../src/tracking/posthog_tracking_provider.ts","../src/tracking/segment_tracking_provider.ts","../src/tracking/trackingProviderProxy.ts","../src/tracking/tracking_api.ts","../src/tracking/tracking_registry.ts","../src/tracking/tracking_spi.ts","../src/tracking/umami_tracking_provider.ts"],"version":"5.6.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/chatbot",
3
- "version": "6.3.0-prerelease.3",
3
+ "version": "6.3.0-prerelease.5",
4
4
  "description": "This library provides React components based on PatternFly 6 that can be used to build chatbots.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,9 +1,10 @@
1
1
  import React from 'react';
2
- import { Button } from '@patternfly/react-core';
2
+ import { Button, Checkbox } from '@patternfly/react-core';
3
3
  import { AttachmentEdit } from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';
4
4
 
5
5
  export const AttachmentEditModalExample: React.FunctionComponent = () => {
6
6
  const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+ const [isCompact, setIsCompact] = React.useState(false);
7
8
 
8
9
  const handleModalToggle = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
9
10
  setIsModalOpen(!isModalOpen);
@@ -11,6 +12,13 @@ export const AttachmentEditModalExample: React.FunctionComponent = () => {
11
12
 
12
13
  return (
13
14
  <>
15
+ <Checkbox
16
+ label="Show compact version"
17
+ isChecked={isCompact}
18
+ onChange={() => setIsCompact(!isCompact)}
19
+ id="modal-compact-edit"
20
+ name="modal-compact-edit"
21
+ ></Checkbox>
14
22
  <Button onClick={handleModalToggle}>Launch modal</Button>
15
23
  <AttachmentEdit
16
24
  code="I am a code snippet"
@@ -20,6 +28,7 @@ export const AttachmentEditModalExample: React.FunctionComponent = () => {
20
28
  onCancel={() => null}
21
29
  // eslint-disable-next-line no-console
22
30
  onSave={(_event, code) => console.log(`The new code is "${code}"`)}
31
+ isCompact={isCompact}
23
32
  />
24
33
  </>
25
34
  );
@@ -40,6 +40,26 @@ export const MessageWithFeedbackExample: React.FunctionComponent = () => {
40
40
  focusOnLoad: false
41
41
  }}
42
42
  />
43
+ <Message
44
+ name="Bot"
45
+ role="bot"
46
+ avatar={patternflyAvatar}
47
+ content="This is a compact message with the feedback card:"
48
+ userFeedbackForm={{
49
+ quickResponses: [
50
+ { id: '1', content: 'Helpful information' },
51
+ { id: '2', content: 'Easy to understand' },
52
+ { id: '3', content: 'Resolved my issue' }
53
+ ],
54
+ onSubmit: (quickResponse, additionalFeedback) =>
55
+ alert(`Selected ${quickResponse} and received the additional feedback: ${additionalFeedback}`),
56
+ hasTextArea,
57
+ // eslint-disable-next-line no-console
58
+ onClose: () => console.log('closed feedback form'),
59
+ focusOnLoad: false
60
+ }}
61
+ isCompact
62
+ />
43
63
  </Stack>
44
64
  <Stack hasGutter>
45
65
  <FormGroup role="radiogroup" isInline fieldId="feedback-thank-you" label="Variant">
@@ -65,6 +85,19 @@ export const MessageWithFeedbackExample: React.FunctionComponent = () => {
65
85
  focusOnLoad: false
66
86
  }}
67
87
  />
88
+ <Message
89
+ name="Bot"
90
+ role="bot"
91
+ avatar={patternflyAvatar}
92
+ content="This is a compact thank-you message, which is displayed once the feedback card is submitted:"
93
+ // eslint-disable-next-line no-console
94
+ userFeedbackComplete={{
95
+ // eslint-disable-next-line no-console
96
+ onClose: hasCloseButton ? () => console.log('closed completion message') : undefined,
97
+ focusOnLoad: false
98
+ }}
99
+ isCompact
100
+ />
68
101
  </Stack>
69
102
  </>
70
103
  );
@@ -1,9 +1,10 @@
1
1
  import React from 'react';
2
- import { Button } from '@patternfly/react-core';
2
+ import { Button, Checkbox } from '@patternfly/react-core';
3
3
  import { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';
4
4
 
5
5
  export const PreviewAttachmentExample: React.FunctionComponent = () => {
6
6
  const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+ const [isCompact, setIsCompact] = React.useState(false);
7
8
 
8
9
  const handleModalToggle = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
9
10
  setIsModalOpen(!isModalOpen);
@@ -11,6 +12,13 @@ export const PreviewAttachmentExample: React.FunctionComponent = () => {
11
12
 
12
13
  return (
13
14
  <>
15
+ <Checkbox
16
+ label="Show compact version"
17
+ isChecked={isCompact}
18
+ onChange={() => setIsCompact(!isCompact)}
19
+ id="modal-compact-preview"
20
+ name="modal-compact-preview"
21
+ ></Checkbox>
14
22
  <Button onClick={handleModalToggle}>Launch modal</Button>
15
23
  <PreviewAttachment
16
24
  code="I am a code snippet"
@@ -19,6 +27,7 @@ export const PreviewAttachmentExample: React.FunctionComponent = () => {
19
27
  isModalOpen={isModalOpen}
20
28
  onDismiss={() => null}
21
29
  onEdit={() => null}
30
+ isCompact={isCompact}
22
31
  />
23
32
  </>
24
33
  );