@patternfly/chatbot 6.5.0-prerelease.27 → 6.5.0-prerelease.29

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 (151) hide show
  1. package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +7 -2
  2. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
  3. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -3
  4. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  5. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +30 -0
  6. package/dist/cjs/Message/Message.d.ts +2 -0
  7. package/dist/cjs/Message/Message.js +5 -5
  8. package/dist/cjs/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
  9. package/dist/cjs/Message/MessageAndActions/MessageAndActions.js +22 -0
  10. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
  11. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +25 -0
  12. package/dist/cjs/Message/MessageAndActions/index.d.ts +1 -0
  13. package/dist/cjs/Message/MessageAndActions/index.js +17 -0
  14. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
  15. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.js +22 -0
  16. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
  17. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +25 -0
  18. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
  19. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.js +22 -0
  20. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
  21. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +25 -0
  22. package/dist/cjs/Message/MessageAttachments/index.d.ts +2 -0
  23. package/dist/cjs/Message/MessageAttachments/index.js +18 -0
  24. package/dist/cjs/Message/MessageInput.d.ts +1 -1
  25. package/dist/cjs/Message/MessageInput.js +3 -1
  26. package/dist/cjs/Message/MessageLoading.d.ts +13 -4
  27. package/dist/cjs/Message/MessageLoading.js +19 -5
  28. package/dist/cjs/Message/MessageLoading.test.d.ts +1 -0
  29. package/dist/cjs/Message/MessageLoading.test.js +25 -0
  30. package/dist/cjs/Message/QuickResponse/QuickResponse.js +3 -2
  31. package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
  32. package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +109 -0
  33. package/dist/cjs/Message/QuickResponse/index.d.ts +1 -0
  34. package/dist/cjs/Message/QuickResponse/index.js +17 -0
  35. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +1 -1
  36. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +3 -2
  37. package/dist/cjs/Message/QuickStarts/index.d.ts +2 -0
  38. package/dist/cjs/Message/QuickStarts/index.js +18 -0
  39. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +1 -1
  40. package/dist/cjs/Message/UserFeedback/UserFeedback.js +3 -1
  41. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
  42. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +3 -2
  43. package/dist/cjs/Message/UserFeedback/index.d.ts +2 -0
  44. package/dist/cjs/Message/UserFeedback/index.js +18 -0
  45. package/dist/cjs/Message/index.d.ts +8 -0
  46. package/dist/cjs/Message/index.js +8 -0
  47. package/dist/cjs/MessageBar/MessageBar.d.ts +6 -0
  48. package/dist/cjs/MessageBar/MessageBar.js +24 -12
  49. package/dist/cjs/MessageBar/MessageBar.test.js +12 -0
  50. package/dist/cjs/ResponseActions/ResponseActions.d.ts +4 -0
  51. package/dist/cjs/ResponseActions/ResponseActionsGroups.d.ts +13 -0
  52. package/dist/cjs/ResponseActions/ResponseActionsGroups.js +22 -0
  53. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
  54. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +25 -0
  55. package/dist/cjs/ResponseActions/index.d.ts +1 -0
  56. package/dist/cjs/ResponseActions/index.js +1 -0
  57. package/dist/css/main.css +13 -1
  58. package/dist/css/main.css.map +1 -1
  59. package/dist/esm/MarkdownContent/MarkdownContent.d.ts +7 -2
  60. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
  61. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +3 -3
  62. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  63. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +25 -0
  64. package/dist/esm/Message/Message.d.ts +2 -0
  65. package/dist/esm/Message/Message.js +5 -5
  66. package/dist/esm/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
  67. package/dist/esm/Message/MessageAndActions/MessageAndActions.js +18 -0
  68. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
  69. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +20 -0
  70. package/dist/esm/Message/MessageAndActions/index.d.ts +1 -0
  71. package/dist/esm/Message/MessageAndActions/index.js +1 -0
  72. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
  73. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.js +18 -0
  74. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
  75. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +20 -0
  76. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
  77. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.js +18 -0
  78. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
  79. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +20 -0
  80. package/dist/esm/Message/MessageAttachments/index.d.ts +2 -0
  81. package/dist/esm/Message/MessageAttachments/index.js +2 -0
  82. package/dist/esm/Message/MessageInput.d.ts +1 -1
  83. package/dist/esm/Message/MessageInput.js +1 -1
  84. package/dist/esm/Message/MessageLoading.d.ts +13 -4
  85. package/dist/esm/Message/MessageLoading.js +16 -4
  86. package/dist/esm/Message/MessageLoading.test.d.ts +1 -0
  87. package/dist/esm/Message/MessageLoading.test.js +20 -0
  88. package/dist/esm/Message/QuickResponse/QuickResponse.js +3 -2
  89. package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
  90. package/dist/esm/Message/QuickResponse/QuickResponse.test.js +104 -0
  91. package/dist/esm/Message/QuickResponse/index.d.ts +1 -0
  92. package/dist/esm/Message/QuickResponse/index.js +1 -0
  93. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +1 -1
  94. package/dist/esm/Message/QuickStarts/QuickStartTile.js +1 -1
  95. package/dist/esm/Message/QuickStarts/index.d.ts +2 -0
  96. package/dist/esm/Message/QuickStarts/index.js +2 -0
  97. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +1 -1
  98. package/dist/esm/Message/UserFeedback/UserFeedback.js +1 -1
  99. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
  100. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +1 -2
  101. package/dist/esm/Message/UserFeedback/index.d.ts +2 -0
  102. package/dist/esm/Message/UserFeedback/index.js +2 -0
  103. package/dist/esm/Message/index.d.ts +8 -0
  104. package/dist/esm/Message/index.js +8 -0
  105. package/dist/esm/MessageBar/MessageBar.d.ts +6 -0
  106. package/dist/esm/MessageBar/MessageBar.js +24 -12
  107. package/dist/esm/MessageBar/MessageBar.test.js +12 -0
  108. package/dist/esm/ResponseActions/ResponseActions.d.ts +4 -0
  109. package/dist/esm/ResponseActions/ResponseActionsGroups.d.ts +13 -0
  110. package/dist/esm/ResponseActions/ResponseActionsGroups.js +18 -0
  111. package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
  112. package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +20 -0
  113. package/dist/esm/ResponseActions/index.d.ts +1 -0
  114. package/dist/esm/ResponseActions/index.js +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/package.json +1 -1
  117. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomStructure.tsx +102 -0
  118. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +55 -10
  119. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarCustomActions.tsx +190 -0
  120. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +15 -2
  121. package/src/MarkdownContent/MarkdownContent.tsx +7 -2
  122. package/src/Message/ErrorMessage/ErrorMessage.test.tsx +38 -0
  123. package/src/Message/ErrorMessage/ErrorMessage.tsx +17 -2
  124. package/src/Message/Message.tsx +75 -64
  125. package/src/Message/MessageAndActions/MessageAndActions.test.tsx +23 -0
  126. package/src/Message/MessageAndActions/MessageAndActions.tsx +22 -0
  127. package/src/Message/MessageAndActions/index.ts +1 -0
  128. package/src/Message/MessageAttachments/MessageAttachmentItem.test.tsx +23 -0
  129. package/src/Message/MessageAttachments/MessageAttachmentItem.tsx +25 -0
  130. package/src/Message/MessageAttachments/MessageAttachmentsContainer.test.tsx +23 -0
  131. package/src/Message/MessageAttachments/MessageAttachmentsContainer.tsx +25 -0
  132. package/src/Message/MessageAttachments/index.ts +2 -0
  133. package/src/Message/MessageInput.tsx +1 -1
  134. package/src/Message/MessageLoading.test.tsx +23 -0
  135. package/src/Message/MessageLoading.tsx +17 -2
  136. package/src/Message/QuickResponse/QuickResponse.test.tsx +131 -0
  137. package/src/Message/QuickResponse/QuickResponse.tsx +3 -2
  138. package/src/Message/QuickResponse/index.ts +1 -0
  139. package/src/Message/QuickStarts/QuickStartTile.tsx +1 -1
  140. package/src/Message/QuickStarts/index.ts +2 -0
  141. package/src/Message/UserFeedback/UserFeedback.tsx +1 -1
  142. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +1 -4
  143. package/src/Message/UserFeedback/index.ts +2 -0
  144. package/src/Message/index.ts +8 -0
  145. package/src/MessageBar/MessageBar.scss +15 -1
  146. package/src/MessageBar/MessageBar.test.tsx +27 -0
  147. package/src/MessageBar/MessageBar.tsx +86 -50
  148. package/src/ResponseActions/ResponseActions.tsx +6 -0
  149. package/src/ResponseActions/ResponseActionsGroups.test.tsx +23 -0
  150. package/src/ResponseActions/ResponseActionsGroups.tsx +28 -0
  151. package/src/ResponseActions/index.ts +1 -0
@@ -0,0 +1,104 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { render, screen } from '@testing-library/react';
12
+ import userEvent from '@testing-library/user-event';
13
+ import '@testing-library/jest-dom';
14
+ import QuickResponse from './QuickResponse';
15
+ test('Renders with quick responses', () => {
16
+ const quickResponses = [
17
+ { id: '1', content: 'Response 1' },
18
+ { id: '2', content: 'Response 2' },
19
+ { id: '3', content: 'Response 3' }
20
+ ];
21
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
22
+ expect(screen.getByText('Response 1')).toBeVisible();
23
+ expect(screen.getByText('Response 2')).toBeVisible();
24
+ expect(screen.getByText('Response 3')).toBeVisible();
25
+ });
26
+ test('Renders with compact styling', () => {
27
+ const quickResponses = [{ id: '1', content: 'Compact response' }];
28
+ render(_jsx(QuickResponse, { quickResponses: quickResponses, isCompact: true }));
29
+ expect(screen.getByText('Compact response').closest('.pf-v6-c-label')).toHaveClass('pf-m-compact');
30
+ });
31
+ test('Renders with custom className on response', () => {
32
+ const quickResponses = [{ id: '1', content: 'Custom class response', className: 'custom-response-class' }];
33
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
34
+ expect(screen.getByText('Custom class response').closest('.pf-v6-c-label')).toHaveClass('custom-response-class');
35
+ });
36
+ test('Renders with custom container className', () => {
37
+ const quickResponses = [
38
+ { id: '1', content: 'Response 1' },
39
+ { id: '2', content: 'Response 2' }
40
+ ];
41
+ render(_jsx(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: { className: 'custom-container-class' } }));
42
+ expect(screen.getByText('Response 1').closest('.pf-v6-c-label-group')).toHaveClass('custom-container-class');
43
+ });
44
+ test('Spreads additional custom container props', () => {
45
+ const quickResponses = [
46
+ { id: '1', content: 'Response 1' },
47
+ { id: '2', content: 'Response 2' }
48
+ ];
49
+ render(_jsx(QuickResponse, { quickResponses: quickResponses, quickResponseContainerProps: { id: 'custom-container-id' } }));
50
+ expect(screen.getByText('Response 1').closest('.pf-v6-c-label-group__list')).toHaveAttribute('id', 'custom-container-id');
51
+ });
52
+ test('Renders with pf-chatbot__message-quick-response--selected class after click', () => __awaiter(void 0, void 0, void 0, function* () {
53
+ const user = userEvent.setup();
54
+ const quickResponses = [
55
+ { id: '1', content: 'Response 1' },
56
+ { id: '2', content: 'Response 2' }
57
+ ];
58
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
59
+ yield user.click(screen.getByText('Response 1'));
60
+ expect(screen.getByText('Response 1').closest('.pf-v6-c-label')).toHaveClass('pf-chatbot__message-quick-response--selected');
61
+ }));
62
+ test('Does not calls onClick handler when not passed', () => __awaiter(void 0, void 0, void 0, function* () {
63
+ const user = userEvent.setup();
64
+ const handleClick = jest.fn();
65
+ const quickResponses = [{ id: '1', content: 'Clickable response' }];
66
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
67
+ yield user.click(screen.getByText('Clickable response'));
68
+ expect(handleClick).not.toHaveBeenCalled();
69
+ }));
70
+ test('Calls onClick handler when passed', () => __awaiter(void 0, void 0, void 0, function* () {
71
+ const user = userEvent.setup();
72
+ const handleClick = jest.fn();
73
+ const quickResponses = [{ id: '1', content: 'Clickable response', onClick: handleClick }];
74
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
75
+ yield user.click(screen.getByText('Clickable response'));
76
+ expect(handleClick).toHaveBeenCalled();
77
+ }));
78
+ test('Does not call onSelect when not passed', () => __awaiter(void 0, void 0, void 0, function* () {
79
+ const user = userEvent.setup();
80
+ const handleSelect = jest.fn();
81
+ const quickResponses = [
82
+ { id: '1', content: 'Response 1' },
83
+ { id: '2', content: 'Response 2' }
84
+ ];
85
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
86
+ yield user.click(screen.getByText('Response 2'));
87
+ expect(handleSelect).not.toHaveBeenCalled();
88
+ }));
89
+ test('Calls onSelect when passed', () => __awaiter(void 0, void 0, void 0, function* () {
90
+ const user = userEvent.setup();
91
+ const handleSelect = jest.fn();
92
+ const quickResponses = [
93
+ { id: '1', content: 'Response 1' },
94
+ { id: '2', content: 'Response 2' }
95
+ ];
96
+ render(_jsx(QuickResponse, { quickResponses: quickResponses, onSelect: handleSelect }));
97
+ yield user.click(screen.getByText('Response 2'));
98
+ expect(handleSelect).toHaveBeenCalledWith('2');
99
+ }));
100
+ test('Spreads additional response props', () => {
101
+ const quickResponses = [{ id: '1', content: 'Response with props', isCompact: true, 'aria-label': 'Test label' }];
102
+ render(_jsx(QuickResponse, { quickResponses: quickResponses }));
103
+ expect(screen.getByText('Response with props').closest('.pf-v6-c-label')).toHaveAttribute('aria-label', 'Test label');
104
+ });
@@ -0,0 +1 @@
1
+ export * from './QuickResponse';
@@ -0,0 +1 @@
1
+ export * from './QuickResponse';
@@ -25,5 +25,5 @@ export interface QuickStartTileProps {
25
25
  /** Sets the tile to compact styling */
26
26
  isCompact?: boolean;
27
27
  }
28
- declare const QuickStartTile: FC<QuickStartTileProps>;
28
+ export declare const QuickStartTile: FC<QuickStartTileProps>;
29
29
  export default QuickStartTile;
@@ -12,7 +12,7 @@ export const camelize = (str) => str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function
12
12
  } // or if (/\s+/.test(match)) for white spaces
13
13
  return index === 0 ? match.toLowerCase() : match.toUpperCase();
14
14
  });
15
- const QuickStartTile = ({ className, quickStart, onClick, onSelectQuickStart, minuteWord = 'minute', minuteWordPlural = 'minutes', prerequisiteWord, prerequisiteWordPlural, quickStartButtonAriaLabel, action, isCompact }) => {
15
+ export const QuickStartTile = ({ className, quickStart, onClick, onSelectQuickStart, minuteWord = 'minute', minuteWordPlural = 'minutes', prerequisiteWord, prerequisiteWordPlural, quickStartButtonAriaLabel, action, isCompact }) => {
16
16
  const { metadata: { name: id }, spec: { icon, displayName, description, durationMinutes, prerequisites, link, type } } = quickStart;
17
17
  let quickStartIcon;
18
18
  if (typeof icon === 'object') {
@@ -0,0 +1,2 @@
1
+ export * from './QuickStartTile';
2
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ export * from './QuickStartTile';
2
+ export * from './types';
@@ -51,5 +51,5 @@ export interface UserFeedbackProps extends Omit<CardProps, 'onSubmit'>, OUIAProp
51
51
  /** Optional privacy statement text displayed under text area */
52
52
  privacyStatement?: string;
53
53
  }
54
- declare const UserFeedback: FunctionComponent<UserFeedbackProps>;
54
+ export declare const UserFeedback: FunctionComponent<UserFeedbackProps>;
55
55
  export default UserFeedback;
@@ -15,7 +15,7 @@ import { useState, useRef, useEffect } from 'react';
15
15
  import { ActionGroup, Button, Card, CardBody, CardHeader, Form, TextArea } from '@patternfly/react-core';
16
16
  import QuickResponse from '../QuickResponse/QuickResponse';
17
17
  import CloseButton from './CloseButton';
18
- const UserFeedback = (_a) => {
18
+ export const UserFeedback = (_a) => {
19
19
  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, children, cardHeaderProps, cardBodyProps, headingLevelProps, formProps, textAreaProps, actionGroupProps, submitButtonProps, privacyStatement } = _a, props = __rest(_a, ["className", "timestamp", "title", "hasTextArea", "textAreaAriaLabel", "textAreaPlaceholder", "onTextAreaChange", "submitWord", "quickResponses", "quickResponseContainerProps", "onSubmit", "onClose", "closeButtonAriaLabel", "id", "headingLevel", "focusOnLoad", "isCompact", "children", "cardHeaderProps", "cardBodyProps", "headingLevelProps", "formProps", "textAreaProps", "actionGroupProps", "submitButtonProps", "privacyStatement"]);
20
20
  const [selectedResponse, setSelectedResponse] = useState();
21
21
  const [value, setValue] = useState('');
@@ -38,5 +38,5 @@ export interface UserFeedbackCompleteProps extends Omit<CardProps, 'ref'>, OUIAP
38
38
  /** Timestamp passed in by Message for more context in aria announcements */
39
39
  timestamp?: string;
40
40
  }
41
- declare const UserFeedbackComplete: FunctionComponent<UserFeedbackCompleteProps>;
41
+ export declare const UserFeedbackComplete: FunctionComponent<UserFeedbackCompleteProps>;
42
42
  export default UserFeedbackComplete;
@@ -11,10 +11,9 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import { useState, useRef, useEffect } from 'react';
14
- // Import PatternFly components
15
14
  import { Card, CardBody, CardHeader, CardTitle, useOUIAProps } from '@patternfly/react-core';
16
15
  import CloseButton from './CloseButton';
17
- const UserFeedbackComplete = (_a) => {
16
+ export const UserFeedbackComplete = (_a) => {
18
17
  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"]);
19
18
  const [timedOut, setTimedOut] = useState(false);
20
19
  const [timedOutAnimation, setTimedOutAnimation] = useState(true);
@@ -0,0 +1,2 @@
1
+ export * from './UserFeedback';
2
+ export * from './UserFeedbackComplete';
@@ -0,0 +1,2 @@
1
+ export * from './UserFeedback';
2
+ export * from './UserFeedbackComplete';
@@ -1,3 +1,11 @@
1
1
  export { default } from './Message';
2
2
  export { rehypeCodeBlockToggle } from './Plugins/rehypeCodeBlockToggle';
3
+ export * from './ErrorMessage/ErrorMessage';
4
+ export * from './MessageAndActions';
5
+ export * from './MessageAttachments';
3
6
  export * from './Message';
7
+ export * from './MessageLoading';
8
+ export * from './MessageInput';
9
+ export * from './QuickResponse';
10
+ export * from './QuickStarts';
11
+ export * from './UserFeedback';
@@ -1,3 +1,11 @@
1
1
  export { default } from './Message';
2
2
  export { rehypeCodeBlockToggle } from './Plugins/rehypeCodeBlockToggle';
3
+ export * from './ErrorMessage/ErrorMessage';
4
+ export * from './MessageAndActions';
5
+ export * from './MessageAttachments';
3
6
  export * from './Message';
7
+ export * from './MessageLoading';
8
+ export * from './MessageInput';
9
+ export * from './QuickResponse';
10
+ export * from './QuickStarts';
11
+ export * from './UserFeedback';
@@ -40,6 +40,8 @@ export interface MessageBarProps extends Omit<TextAreaProps, 'innerRef'> {
40
40
  placeholder?: string;
41
41
  /** Flag to disable/enable the Attach button */
42
42
  hasAttachButton?: boolean;
43
+ /** Whether the attach button is rendered before or after the message input. */
44
+ attachButtonPosition?: 'start' | 'end';
43
45
  /** Flag to enable the Microphone button */
44
46
  hasMicrophoneButton?: boolean;
45
47
  /** Placeholder text when listening */
@@ -111,6 +113,10 @@ export interface MessageBarProps extends Omit<TextAreaProps, 'innerRef'> {
111
113
  innerRef?: React.Ref<HTMLTextAreaElement>;
112
114
  /** Sets background color to primary */
113
115
  isPrimary?: boolean;
116
+ /** Additional actions to render for the message bar. This will force a multiline layout, and the actions will render at the start of the container. */
117
+ additionalActions?: React.ReactNode;
118
+ /** Flag indicating whether a multiline layout for the message input and actions should be forced. This can be used to always render actions below the message input. */
119
+ forceMultilineLayout?: boolean;
114
120
  /** @beta Flag indicating whether the message bar has an AI indicator border. */
115
121
  hasAiIndicator?: boolean;
116
122
  /** @beta Flag indicating whether the chatbot is thinking in response to a query, adding an animation to the message bar. */
@@ -21,14 +21,15 @@ import AttachMenu from '../AttachMenu';
21
21
  import StopButton from './StopButton';
22
22
  export const MessageBarBase = (_a) => {
23
23
  var _b;
24
- var { onSendMessage, className, alwayShowSendButton, placeholder = 'Send a message...', hasAttachButton = true, hasMicrophoneButton, listeningText = 'Listening', handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange, displayMode, value, isCompact = false, allowedFileTypes, minSize, maxSize, maxFiles, isAttachmentDisabled, onAttach, onAttachRejected, validator, dropzoneProps, innerRef, isPrimary, hasAiIndicator, isThinking } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "placeholder", "hasAttachButton", "hasMicrophoneButton", "listeningText", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange", "displayMode", "value", "isCompact", "allowedFileTypes", "minSize", "maxSize", "maxFiles", "isAttachmentDisabled", "onAttach", "onAttachRejected", "validator", "dropzoneProps", "innerRef", "isPrimary", "hasAiIndicator", "isThinking"]);
24
+ var { onSendMessage, className, alwayShowSendButton, placeholder = 'Send a message...', hasAttachButton = true, attachButtonPosition = 'end', hasMicrophoneButton, listeningText = 'Listening', handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange, displayMode, value, isCompact = false, allowedFileTypes, minSize, maxSize, maxFiles, isAttachmentDisabled, onAttach, onAttachRejected, validator, dropzoneProps, innerRef, isPrimary, additionalActions, forceMultilineLayout = false, hasAiIndicator, isThinking } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "placeholder", "hasAttachButton", "attachButtonPosition", "hasMicrophoneButton", "listeningText", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange", "displayMode", "value", "isCompact", "allowedFileTypes", "minSize", "maxSize", "maxFiles", "isAttachmentDisabled", "onAttach", "onAttachRejected", "validator", "dropzoneProps", "innerRef", "isPrimary", "additionalActions", "forceMultilineLayout", "hasAiIndicator", "isThinking"]);
25
25
  // Text Input
26
26
  // --------------------------------------------------------------------------
27
27
  const [message, setMessage] = useState(value !== null && value !== void 0 ? value : '');
28
28
  const [isListeningMessage, setIsListeningMessage] = useState(false);
29
29
  const [hasSentMessage, setHasSentMessage] = useState(false);
30
30
  const [isComposing, setIsComposing] = useState(false);
31
- const [isMultiline, setIsMultiline] = useState(false);
31
+ const shouldForceMultiline = forceMultilineLayout || additionalActions;
32
+ const [isMultiline, setIsMultiline] = useState(shouldForceMultiline);
32
33
  const inputRef = useRef(null);
33
34
  const textareaRef = (_b = innerRef) !== null && _b !== void 0 ? _b : inputRef;
34
35
  const attachButtonRef = useRef(null);
@@ -42,7 +43,7 @@ export const MessageBarBase = (_a) => {
42
43
  parent.style.setProperty('height', 'inherit');
43
44
  const grandparent = parent.parentElement;
44
45
  if (grandparent) {
45
- grandparent.style.setProperty('flex-basis', 'auto');
46
+ grandparent.style.setProperty('flex-basis', shouldForceMultiline ? '100%' : 'auto');
46
47
  }
47
48
  }
48
49
  };
@@ -82,7 +83,7 @@ export const MessageBarBase = (_a) => {
82
83
  const parent = field.parentElement;
83
84
  if (parent) {
84
85
  const grandparent = parent.parentElement;
85
- if (textIsLongerThan2Lines(field) && grandparent) {
86
+ if ((textIsLongerThan2Lines(field) || shouldForceMultiline) && grandparent) {
86
87
  grandparent.style.setProperty('flex-basis', `100%`);
87
88
  }
88
89
  }
@@ -130,15 +131,15 @@ export const MessageBarBase = (_a) => {
130
131
  if (field) {
131
132
  if (field.value === '') {
132
133
  setInitialLineHeight(field);
133
- setIsMultiline(false);
134
+ !shouldForceMultiline && setIsMultiline(false);
134
135
  }
135
136
  else {
136
137
  setAutoHeight(field);
137
138
  setAutoWidth(field);
138
- checkIfMultiline(field);
139
+ !shouldForceMultiline && checkIfMultiline(field);
139
140
  }
140
141
  }
141
- }, [displayMode, message, setAutoWidth, checkIfMultiline]);
142
+ }, [displayMode, message, setAutoWidth, shouldForceMultiline, checkIfMultiline]);
142
143
  useEffect(() => {
143
144
  const field = textareaRef.current;
144
145
  if (field) {
@@ -151,11 +152,11 @@ export const MessageBarBase = (_a) => {
151
152
  if (textareaRef.current) {
152
153
  if (event.target.value === '') {
153
154
  setInitialLineHeight(textareaRef.current);
154
- setIsMultiline(false);
155
+ !shouldForceMultiline && setIsMultiline(false);
155
156
  }
156
157
  else {
157
158
  setAutoHeight(textareaRef.current);
158
- checkIfMultiline(textareaRef.current);
159
+ !shouldForceMultiline && checkIfMultiline(textareaRef.current);
159
160
  }
160
161
  }
161
162
  setMessage(event.target.value);
@@ -201,14 +202,25 @@ export const MessageBarBase = (_a) => {
201
202
  setMessage(message);
202
203
  onChange && onChange({}, message);
203
204
  };
205
+ const renderAttachButton = () => {
206
+ var _a, _b, _c, _d, _e, _f;
207
+ if (!attachMenuProps && hasAttachButton) {
208
+ return (_jsx(AttachButton, Object.assign({ onAttachAccepted: handleAttach, isDisabled: isListeningMessage, tooltipContent: (_a = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _a === void 0 ? void 0 : _a.tooltipContent, inputTestId: (_b = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _b === void 0 ? void 0 : _b.inputTestId, isCompact: isCompact, tooltipProps: (_c = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _c === void 0 ? void 0 : _c.tooltipProps, allowedFileTypes: allowedFileTypes, minSize: minSize, maxSize: maxSize, maxFiles: maxFiles, isAttachmentDisabled: isAttachmentDisabled, onAttach: onAttach, onAttachRejected: onAttachRejected, validator: validator, dropzoneProps: dropzoneProps }, buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach, (_d = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _d === void 0 ? void 0 : _d.props)));
209
+ }
210
+ if (attachMenuProps) {
211
+ return (_jsx(AttachButton, Object.assign({ ref: attachButtonRef, onClick: handleAttachMenuToggle, isDisabled: isListeningMessage, tooltipContent: (_e = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _e === void 0 ? void 0 : _e.tooltipContent, isCompact: isCompact, tooltipProps: (_f = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _f === void 0 ? void 0 : _f.tooltipProps, allowedFileTypes: allowedFileTypes, minSize: minSize, maxSize: maxSize, maxFiles: maxFiles, isAttachmentDisabled: isAttachmentDisabled, onAttach: onAttach, onAttachRejected: onAttachRejected, validator: validator, dropzoneProps: dropzoneProps }, buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach)));
212
+ }
213
+ };
214
+ const isAttachButtonAtStart = attachButtonPosition === 'start';
204
215
  const renderButtons = () => {
205
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
216
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
206
217
  if (hasStopButton && handleStopButton) {
207
218
  return (_jsx(StopButton, 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, tooltipProps: (_b = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _b === void 0 ? void 0 : _b.tooltipProps }, (_c = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.stop) === null || _c === void 0 ? void 0 : _c.props)));
208
219
  }
209
- return (_jsxs(_Fragment, { children: [attachMenuProps && (_jsx(AttachButton, Object.assign({ ref: attachButtonRef, onClick: handleAttachMenuToggle, isDisabled: isListeningMessage, tooltipContent: (_d = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _d === void 0 ? void 0 : _d.tooltipContent, isCompact: isCompact, tooltipProps: (_e = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _e === void 0 ? void 0 : _e.tooltipProps, allowedFileTypes: allowedFileTypes, minSize: minSize, maxSize: maxSize, maxFiles: maxFiles, isAttachmentDisabled: isAttachmentDisabled, onAttach: onAttach, onAttachRejected: onAttachRejected, validator: validator, dropzoneProps: dropzoneProps }, buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach))), !attachMenuProps && hasAttachButton && (_jsx(AttachButton, Object.assign({ onAttachAccepted: handleAttach, isDisabled: isListeningMessage, tooltipContent: (_f = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _f === void 0 ? void 0 : _f.tooltipContent, inputTestId: (_g = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _g === void 0 ? void 0 : _g.inputTestId, isCompact: isCompact, tooltipProps: (_h = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _h === void 0 ? void 0 : _h.tooltipProps, allowedFileTypes: allowedFileTypes, minSize: minSize, maxSize: maxSize, maxFiles: maxFiles, isAttachmentDisabled: isAttachmentDisabled, onAttach: onAttach, onAttachRejected: onAttachRejected, validator: validator, dropzoneProps: dropzoneProps }, buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach, (_j = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.attach) === null || _j === void 0 ? void 0 : _j.props))), hasMicrophoneButton && (_jsx(MicrophoneButton, Object.assign({ isListening: isListeningMessage, onIsListeningChange: setIsListeningMessage, onSpeechRecognition: handleSpeechRecognition, tooltipContent: (_k = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _k === void 0 ? void 0 : _k.tooltipContent, language: (_l = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _l === void 0 ? void 0 : _l.language, isCompact: isCompact, tooltipProps: (_m = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _m === void 0 ? void 0 : _m.tooltipProps }, (_o = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _o === void 0 ? void 0 : _o.props))), (alwayShowSendButton || message) && (_jsx(SendButton, Object.assign({ value: message, onClick: () => handleSend(message), isDisabled: isSendButtonDisabled, tooltipContent: (_p = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _p === void 0 ? void 0 : _p.tooltipContent, isCompact: isCompact, tooltipProps: (_q = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _q === void 0 ? void 0 : _q.tooltipProps }, (_r = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _r === void 0 ? void 0 : _r.props)))] }));
220
+ return (_jsxs(_Fragment, { children: [!isAttachButtonAtStart && renderAttachButton(), hasMicrophoneButton && (_jsx(MicrophoneButton, Object.assign({ isListening: isListeningMessage, onIsListeningChange: setIsListeningMessage, onSpeechRecognition: handleSpeechRecognition, tooltipContent: (_d = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _d === void 0 ? void 0 : _d.tooltipContent, language: (_e = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _e === void 0 ? void 0 : _e.language, isCompact: isCompact, tooltipProps: (_f = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _f === void 0 ? void 0 : _f.tooltipProps }, (_g = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _g === void 0 ? void 0 : _g.props))), (alwayShowSendButton || message) && (_jsx(SendButton, Object.assign({ value: message, onClick: () => handleSend(message), isDisabled: isSendButtonDisabled, tooltipContent: (_h = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _h === void 0 ? void 0 : _h.tooltipContent, isCompact: isCompact, tooltipProps: (_j = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _j === void 0 ? void 0 : _j.tooltipProps }, (_k = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _k === void 0 ? void 0 : _k.props)))] }));
210
221
  };
211
- const messageBarContents = (_jsxs(_Fragment, { children: [_jsx("div", { className: `pf-chatbot__message-bar-input ${isCompact ? 'pf-m-compact' : ''}`, children: _jsx(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, onCompositionStart: handleCompositionStart, onCompositionEnd: handleCompositionEnd }, props)) }), _jsx("div", { className: "pf-chatbot__message-bar-actions", children: renderButtons() })] }));
222
+ const hasGroupedActions = additionalActions || (isAttachButtonAtStart && isMultiline);
223
+ const messageBarContents = (_jsxs(_Fragment, { children: [isAttachButtonAtStart && !isMultiline && (_jsx("div", { className: "pf-chatbot__message-bar-actions test", children: renderAttachButton() })), _jsx("div", { className: `pf-chatbot__message-bar-input ${isCompact ? 'pf-m-compact' : ''}`, children: _jsx(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, onCompositionStart: handleCompositionStart, onCompositionEnd: handleCompositionEnd }, props)) }), _jsx("div", { className: css('pf-chatbot__message-bar-actions', hasGroupedActions && 'pf-m-grouped'), children: hasGroupedActions ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: css('pf-chatbot__message-bar-actions-group'), children: [isAttachButtonAtStart && renderAttachButton(), additionalActions] }), _jsx("div", { className: css('pf-chatbot__message-bar-actions-group'), children: renderButtons() })] })) : (renderButtons()) })] }));
212
224
  if (attachMenuProps) {
213
225
  return (_jsx(AttachMenu, Object.assign({ toggle: (toggleRef) => (_jsx("div", { ref: toggleRef, className: css('pf-chatbot__message-bar', isMultiline && 'pf-m-multiline', className), children: messageBarContents })), filteredItems: attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.attachMenuItems }, (attachMenuProps && { isOpen: attachMenuProps.isAttachMenuOpen }), { onOpenChange: (isAttachMenuOpen) => {
214
226
  var _a;
@@ -326,4 +326,16 @@ describe('Message bar', () => {
326
326
  render(_jsx(MessageBar, { onSendMessage: jest.fn, isThinking: true }));
327
327
  expect(screen.getByRole('textbox').closest('.pf-chatbot__message-bar')).toHaveClass('pf-v6-m-thinking');
328
328
  });
329
+ it('Renders with flex-basis of auto by default', () => {
330
+ render(_jsx(MessageBar, { onSendMessage: jest.fn }));
331
+ expect(screen.getByRole('textbox').closest('.pf-chatbot__message-bar-input')).toHaveAttribute('style', 'flex-basis: auto;');
332
+ });
333
+ it('Renders with flex-basis of 100% when forceMultilineLayout is true', () => {
334
+ render(_jsx(MessageBar, { forceMultilineLayout: true, onSendMessage: jest.fn }));
335
+ expect(screen.getByRole('textbox').closest('.pf-chatbot__message-bar-input')).toHaveAttribute('style', 'flex-basis: 100%;');
336
+ });
337
+ it('Renders with flex-basis of 100% when additionalActions is truthy', () => {
338
+ render(_jsx(MessageBar, { additionalActions: "actions", onSendMessage: jest.fn }));
339
+ expect(screen.getByRole('textbox').closest('.pf-chatbot__message-bar-input')).toHaveAttribute('style', 'flex-basis: 100%;');
340
+ });
329
341
  });
@@ -29,6 +29,10 @@ export interface ActionProps extends Omit<ButtonProps, 'ref'> {
29
29
  type ExtendedActionProps = ActionProps & {
30
30
  [key: string]: any;
31
31
  };
32
+ /**
33
+ * The various actions that can be attached to a bot message for users to interact with.
34
+ * Use this component when passing children to Message to customize its structure.
35
+ */
32
36
  export interface ResponseActionProps {
33
37
  /** Props for message actions, such as feedback (positive or negative), copy button, share, and listen */
34
38
  actions: Record<string, ExtendedActionProps | undefined> & {
@@ -0,0 +1,13 @@
1
+ import { FunctionComponent, HTMLProps, ReactNode } from 'react';
2
+ /**
3
+ * The container for grouping multiple related ResponseActions components, typically used for having different persistence states amongst groups.
4
+ * Use this component when passing children to Message to customize its structure.
5
+ */
6
+ export interface ResponseActionsGroupsProps extends HTMLProps<HTMLDivElement> {
7
+ /** Content to render inside the response actions groups container */
8
+ children: ReactNode;
9
+ /** Additional classes applied to the response actions groups container. */
10
+ className?: string;
11
+ }
12
+ export declare const ResponseActionsGroups: FunctionComponent<ResponseActionsGroupsProps>;
13
+ export default ResponseActionsGroups;
@@ -0,0 +1,18 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { css } from '@patternfly/react-styles';
14
+ export const ResponseActionsGroups = (_a) => {
15
+ var { children, className } = _a, props = __rest(_a, ["children", "className"]);
16
+ return (_jsx("div", Object.assign({ className: css('pf-chatbot__response-actions-groups', className) }, props, { children: children })));
17
+ };
18
+ export default ResponseActionsGroups;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@testing-library/jest-dom';
3
+ import { render, screen } from '@testing-library/react';
4
+ import ResponseActionsGroups from './ResponseActionsGroups';
5
+ test('Renders with children', () => {
6
+ render(_jsx(ResponseActionsGroups, { children: "Test content" }));
7
+ expect(screen.getByText('Test content')).toBeInTheDocument();
8
+ });
9
+ test('Renders with pf-chatbot__response-actions-groups class by default', () => {
10
+ render(_jsx(ResponseActionsGroups, { children: "Test content" }));
11
+ expect(screen.getByText('Test content')).toHaveClass('pf-chatbot__response-actions-groups', { exact: true });
12
+ });
13
+ test('Renders with custom className', () => {
14
+ render(_jsx(ResponseActionsGroups, { className: "custom-class", children: "Test content" }));
15
+ expect(screen.getByText('Test content')).toHaveClass('custom-class');
16
+ });
17
+ test('Spreads additional props', () => {
18
+ render(_jsx(ResponseActionsGroups, { id: "test-id", children: "Test content" }));
19
+ expect(screen.getByText('Test content')).toHaveAttribute('id', 'test-id');
20
+ });
@@ -1,2 +1,3 @@
1
1
  export { default } from './ResponseActions';
2
2
  export * from './ResponseActions';
3
+ export * from './ResponseActionsGroups';
@@ -1,2 +1,3 @@
1
1
  export { default } from './ResponseActions';
2
2
  export * from './ResponseActions';
3
+ export * from './ResponseActionsGroups';
@@ -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/ChatbotHeaderNewChatButton.test.tsx","../src/ChatbotHeader/ChatbotHeaderNewChatButton.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/DeepThinking/DeepThinking.test.tsx","../src/DeepThinking/DeepThinking.tsx","../src/DeepThinking/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/FilePreview/FilePreview.test.tsx","../src/FilePreview/FilePreview.tsx","../src/FilePreview/index.ts","../src/ImagePreview/ImagePreview.test.tsx","../src/ImagePreview/ImagePreview.tsx","../src/ImagePreview/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/MarkdownContent/MarkdownContent.test.tsx","../src/MarkdownContent/MarkdownContent.tsx","../src/MarkdownContent/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.test.tsx","../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/Plugins/index.ts","../src/Message/Plugins/rehypeCodeBlockToggle.ts","../src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts","../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/SuperscriptMessage/SuperscriptMessage.tsx","../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/MessageDivider/MessageDivider.test.tsx","../src/MessageDivider/MessageDivider.tsx","../src/MessageDivider/index.ts","../src/Onboarding/Onboarding.test.tsx","../src/Onboarding/Onboarding.tsx","../src/Onboarding/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/SourcesCardBase/SourcesCardBase.test.tsx","../src/SourcesCardBase/SourcesCardBase.tsx","../src/SourcesCardBase/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts","../src/ToolCall/ToolCall.test.tsx","../src/ToolCall/ToolCall.tsx","../src/ToolCall/index.ts","../src/ToolResponse/ToolResponse.test.tsx","../src/ToolResponse/ToolResponse.tsx","../src/ToolResponse/index.ts","../src/__mocks__/monaco-editor.ts","../src/__mocks__/rehype-external-links.ts","../src/__mocks__/rehype-highlight.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/ChatbotHeaderNewChatButton.test.tsx","../src/ChatbotHeader/ChatbotHeaderNewChatButton.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/DeepThinking/DeepThinking.test.tsx","../src/DeepThinking/DeepThinking.tsx","../src/DeepThinking/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/FilePreview/FilePreview.test.tsx","../src/FilePreview/FilePreview.tsx","../src/FilePreview/index.ts","../src/ImagePreview/ImagePreview.test.tsx","../src/ImagePreview/ImagePreview.tsx","../src/ImagePreview/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/MarkdownContent/MarkdownContent.test.tsx","../src/MarkdownContent/MarkdownContent.tsx","../src/MarkdownContent/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageInput.tsx","../src/Message/MessageLoading.test.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.test.tsx","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ErrorMessage/ErrorMessage.test.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/MessageAndActions/MessageAndActions.test.tsx","../src/Message/MessageAndActions/MessageAndActions.tsx","../src/Message/MessageAndActions/index.ts","../src/Message/MessageAttachments/MessageAttachmentItem.test.tsx","../src/Message/MessageAttachments/MessageAttachmentItem.tsx","../src/Message/MessageAttachments/MessageAttachmentsContainer.test.tsx","../src/Message/MessageAttachments/MessageAttachmentsContainer.tsx","../src/Message/MessageAttachments/index.ts","../src/Message/Plugins/index.ts","../src/Message/Plugins/rehypeCodeBlockToggle.ts","../src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts","../src/Message/QuickResponse/QuickResponse.test.tsx","../src/Message/QuickResponse/QuickResponse.tsx","../src/Message/QuickResponse/index.ts","../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/index.ts","../src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts","../src/Message/QuickStarts/monitor-sampleapp-quickstart.ts","../src/Message/QuickStarts/types.ts","../src/Message/SuperscriptMessage/SuperscriptMessage.tsx","../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/Message/UserFeedback/index.ts","../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/MessageDivider/MessageDivider.test.tsx","../src/MessageDivider/MessageDivider.tsx","../src/MessageDivider/index.ts","../src/Onboarding/Onboarding.test.tsx","../src/Onboarding/Onboarding.tsx","../src/Onboarding/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/ResponseActionsGroups.test.tsx","../src/ResponseActions/ResponseActionsGroups.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/SourcesCardBase/SourcesCardBase.test.tsx","../src/SourcesCardBase/SourcesCardBase.tsx","../src/SourcesCardBase/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts","../src/ToolCall/ToolCall.test.tsx","../src/ToolCall/ToolCall.tsx","../src/ToolCall/index.ts","../src/ToolResponse/ToolResponse.test.tsx","../src/ToolResponse/ToolResponse.tsx","../src/ToolResponse/index.ts","../src/__mocks__/monaco-editor.ts","../src/__mocks__/rehype-external-links.ts","../src/__mocks__/rehype-highlight.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.5.0-prerelease.27",
3
+ "version": "6.5.0-prerelease.29",
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",