@patternfly/chatbot 2.2.0-prerelease.15 → 2.2.0-prerelease.17

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 (110) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +52 -0
  3. package/dist/cjs/Chatbot/Chatbot.test.d.ts +1 -0
  4. package/dist/cjs/Chatbot/Chatbot.test.js +28 -0
  5. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  6. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +27 -0
  7. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  8. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +18 -0
  9. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  10. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
  11. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  12. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
  13. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  14. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
  15. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  16. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
  17. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  18. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
  19. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  20. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
  21. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  22. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
  23. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  24. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
  25. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +47 -0
  29. package/dist/cjs/Message/Message.js +13 -3
  30. package/dist/cjs/Message/Message.test.js +38 -3
  31. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
  32. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  33. package/dist/cjs/MessageBar/MessageBar.test.js +4 -4
  34. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  35. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  36. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  37. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  38. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  39. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  40. package/dist/css/main.css +30 -41
  41. package/dist/css/main.css.map +1 -1
  42. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  43. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  44. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  45. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  46. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  47. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  48. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  49. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  50. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  51. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  52. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  53. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  54. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  55. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  56. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  57. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  58. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  59. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  60. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  61. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  62. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  63. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  64. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  65. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  66. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  67. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  68. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  69. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
  70. package/dist/esm/Message/Message.js +14 -4
  71. package/dist/esm/Message/Message.test.js +38 -3
  72. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  73. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  74. package/dist/esm/MessageBar/MessageBar.test.js +4 -4
  75. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  76. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  77. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  78. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  79. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  80. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +1 -1
  83. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +142 -13
  84. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +182 -12
  85. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  86. package/src/Chatbot/Chatbot.test.tsx +31 -0
  87. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  88. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  89. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  90. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  91. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  92. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  93. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  94. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  95. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  96. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  97. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  98. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
  99. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +3 -3
  100. package/src/Message/ListMessage/ListMessage.scss +5 -5
  101. package/src/Message/Message.scss +3 -11
  102. package/src/Message/Message.test.tsx +40 -3
  103. package/src/Message/Message.tsx +23 -4
  104. package/src/Message/MessageLoading.scss +2 -2
  105. package/src/Message/TextMessage/TextMessage.scss +8 -11
  106. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  107. package/src/MessageBar/MessageBar.test.tsx +4 -4
  108. package/src/MessageBox/MessageBox.test.tsx +26 -0
  109. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  110. package/src/Settings/SettingsForm.test.tsx +28 -0
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { ChatbotHeaderCloseButton } from './ChatbotHeaderCloseButton';
4
+ describe('ChatbotHeaderCloseButton', () => {
5
+ it('should render ChatbotHeaderCloseButton', () => {
6
+ const { container } = render(React.createElement(ChatbotHeaderCloseButton, { className: "custom-header-close-button", onClick: jest.fn() }));
7
+ expect(container.querySelector('.custom-header-close-button')).toBeTruthy();
8
+ });
9
+ it('should call onClick handler when close button is pressed', () => {
10
+ const onClick = jest.fn();
11
+ render(React.createElement(ChatbotHeaderCloseButton, { className: "custom-header-close-button", onClick: onClick }));
12
+ fireEvent.click(screen.getByRole('button', { name: 'Close' }));
13
+ expect(onClick).toHaveBeenCalled();
14
+ });
15
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotHeaderMain from './ChatbotHeaderMain';
4
+ describe('ChatbotHeaderMain', () => {
5
+ it('should render ChatbotHeaderMain with children', () => {
6
+ render(React.createElement(ChatbotHeaderMain, null, "Chatbot Header Main"));
7
+ expect(screen.getByText('Chatbot Header Main')).toBeTruthy();
8
+ });
9
+ it('should render ChatbotHeaderMain with custom classname', () => {
10
+ const { container } = render(React.createElement(ChatbotHeaderMain, { className: "custom-header-class" }, "Chatbot Content"));
11
+ expect(container.querySelector('.custom-header-class')).toBeTruthy();
12
+ });
13
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { ChatbotHeaderMenu } from './ChatbotHeaderMenu';
4
+ describe('ChatbotHeaderMenu', () => {
5
+ it('should render ChatbotHeaderMenu with custom class', () => {
6
+ const { container } = render(React.createElement(ChatbotHeaderMenu, { className: "custom-header-menu", onMenuToggle: jest.fn() }));
7
+ expect(container.querySelector('.custom-header-menu')).toBeTruthy();
8
+ });
9
+ it('should call onMenuToggle when ChatbotHeaderMenu button is clicked', () => {
10
+ const onMenuToggle = jest.fn();
11
+ render(React.createElement(ChatbotHeaderMenu, { className: "custom-header-menu", onMenuToggle: onMenuToggle }));
12
+ fireEvent.click(screen.getByRole('button', { name: 'Toggle menu' }));
13
+ expect(onMenuToggle).toHaveBeenCalled();
14
+ });
15
+ });
@@ -0,0 +1,38 @@
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 React from 'react';
11
+ import { DropdownItem } from '@patternfly/react-core';
12
+ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
13
+ import { ChatbotHeaderOptionsDropdown } from './ChatbotHeaderOptionsDropdown';
14
+ describe('ChatbotHeaderOptionsDropdown', () => {
15
+ const dropdownItems = (React.createElement(React.Fragment, null,
16
+ React.createElement(DropdownItem, null, "Option 1"),
17
+ React.createElement(DropdownItem, null, "Option 2"),
18
+ React.createElement(DropdownItem, null, "Option 3")));
19
+ it('should render ChatbotHeaderOptionsDropdown', () => {
20
+ render(React.createElement(ChatbotHeaderOptionsDropdown, null, dropdownItems));
21
+ expect(screen.getByRole('button', { name: 'Chatbot options' })).toBeTruthy();
22
+ });
23
+ it('should call onselect handler when a dropdown item is clicked', () => __awaiter(void 0, void 0, void 0, function* () {
24
+ const onSelect = jest.fn();
25
+ const { container } = render(React.createElement(ChatbotHeaderOptionsDropdown, { className: "custom-header-options-dropdown", onSelect: onSelect }, dropdownItems));
26
+ act(() => {
27
+ fireEvent.click(screen.getByRole('button', { name: 'Chatbot options' }));
28
+ });
29
+ yield waitFor(() => {
30
+ expect(container.querySelector('.custom-header-options-dropdown')).toBeTruthy();
31
+ expect(screen.getByText('Option 1'));
32
+ expect(screen.getByText('Option 2'));
33
+ expect(screen.getByText('Option 3'));
34
+ fireEvent.click(screen.getByText('Option 3'));
35
+ expect(onSelect).toHaveBeenCalled();
36
+ });
37
+ }));
38
+ });
@@ -0,0 +1,36 @@
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 React from 'react';
11
+ import { DropdownItem } from '@patternfly/react-core';
12
+ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
13
+ import { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
14
+ describe('ChatbotHeaderSelectorDropdown', () => {
15
+ const dropdownItems = (React.createElement(React.Fragment, null,
16
+ React.createElement(DropdownItem, null, "Option 1"),
17
+ React.createElement(DropdownItem, null, "Option 2"),
18
+ React.createElement(DropdownItem, null, "Option 3")));
19
+ it('should render ChatbotHeaderSelectorDropdown', () => {
20
+ render(React.createElement(ChatbotHeaderSelectorDropdown, { value: "Option 1" }, dropdownItems));
21
+ expect(screen.getByRole('button', { name: 'Chatbot selector' })).toBeTruthy();
22
+ });
23
+ it('should call onselect handler when a dropdown item is clicked', () => __awaiter(void 0, void 0, void 0, function* () {
24
+ const onSelect = jest.fn();
25
+ const { container } = render(React.createElement(ChatbotHeaderSelectorDropdown, { value: "Option 1", className: "custom-header-selector-dropdown", onSelect: onSelect }, dropdownItems));
26
+ act(() => {
27
+ fireEvent.click(screen.getByRole('button', { name: 'Chatbot selector' }));
28
+ });
29
+ yield waitFor(() => {
30
+ expect(container.querySelector('.custom-header-selector-dropdown')).toBeTruthy();
31
+ expect(screen.getByText('Option 3'));
32
+ fireEvent.click(screen.getByText('Option 3'));
33
+ expect(onSelect).toHaveBeenCalled();
34
+ });
35
+ }));
36
+ });
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
4
+ import ChatbotHeaderTitle from './ChatbotHeaderTitle';
5
+ describe('ChatbotHeaderTitle', () => {
6
+ it('should render ChatbotHeaderTitle with children', () => {
7
+ render(React.createElement(ChatbotHeaderTitle, null, "Chatbot Header Title"));
8
+ expect(screen.getByText('Chatbot Header Title')).toBeTruthy();
9
+ });
10
+ it('should render ChatbotHeaderTitle with custom classname', () => {
11
+ const { container } = render(React.createElement(ChatbotHeaderTitle, { className: "custom-header-class" }, "Chatbot Header Title"));
12
+ expect(container.querySelector('.custom-header-class')).toBeTruthy();
13
+ });
14
+ it('should render title for default display mode', () => {
15
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.default, showOnDefault: 'Default header title' }));
16
+ expect(screen.getByText('Default header title')).toBeTruthy();
17
+ });
18
+ it('should render title for docked display mode', () => {
19
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDocked: 'Docked header title' }));
20
+ expect(screen.getByText('Docked header title')).toBeTruthy();
21
+ });
22
+ it('should fallback to default title when docked display mode title is not configured', () => {
23
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDefault: 'Default header title' }));
24
+ expect(screen.getByText('Default header title')).toBeTruthy();
25
+ });
26
+ it('should render title for embedded display mode', () => {
27
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnEmbedded: 'Embedded header title' }));
28
+ expect(screen.getByText('Embedded header title')).toBeTruthy();
29
+ });
30
+ it('should fallback to default title when embedded display mode title is not configured', () => {
31
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnDefault: 'Default header title' }));
32
+ expect(screen.getByText('Default header title')).toBeTruthy();
33
+ });
34
+ it('should render title for fullscreen display mode', () => {
35
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnFullScreen: 'Fullscreen header title', className: "custom-header-class" }));
36
+ expect(screen.getByText('Fullscreen header title')).toBeTruthy();
37
+ });
38
+ it('should fallback to default title when fullscreen display mode title is not configured', () => {
39
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnDefault: 'Default header title' }));
40
+ expect(screen.getByText('Default header title')).toBeTruthy();
41
+ });
42
+ });
@@ -15,7 +15,7 @@ var __rest = (this && this.__rest) || function (s, e) {
15
15
  import React from 'react';
16
16
  import Markdown from 'react-markdown';
17
17
  import remarkGfm from 'remark-gfm';
18
- import { Avatar, Label, Timestamp, Truncate } from '@patternfly/react-core';
18
+ import { Avatar, ContentVariants, Label, Timestamp, Truncate } from '@patternfly/react-core';
19
19
  import MessageLoading from './MessageLoading';
20
20
  import CodeBlockMessage from './CodeBlockMessage/CodeBlockMessage';
21
21
  import TextMessage from './TextMessage/TextMessage';
@@ -51,11 +51,21 @@ export const MessageBase = (_a) => {
51
51
  React.createElement("div", { className: "pf-chatbot__message-response" },
52
52
  React.createElement("div", { className: "pf-chatbot__message-and-actions" },
53
53
  isLoading ? (React.createElement(MessageLoading, { loadingWord: loadingWord })) : (React.createElement(Markdown, { components: {
54
- p: TextMessage,
55
- code: ({ children }) => React.createElement(CodeBlockMessage, Object.assign({}, codeBlockProps), children),
54
+ p: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.p }, props)),
55
+ code: (_a) => {
56
+ var { children } = _a, props = __rest(_a, ["children"]);
57
+ return (React.createElement(CodeBlockMessage, Object.assign({}, props, codeBlockProps), children));
58
+ },
56
59
  ul: UnorderedListMessage,
57
60
  ol: (props) => React.createElement(OrderedListMessage, Object.assign({}, props)),
58
- li: ListItemMessage
61
+ li: ListItemMessage,
62
+ h1: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h1 }, props)),
63
+ h2: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h2 }, props)),
64
+ h3: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h3 }, props)),
65
+ h4: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h4 }, props)),
66
+ h5: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h5 }, props)),
67
+ h6: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h6 }, props)),
68
+ blockquote: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.blockquote }, props))
59
69
  }, remarkPlugins: [remarkGfm] }, content)),
60
70
  !isLoading && sources && React.createElement(SourcesCard, Object.assign({}, sources)),
61
71
  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 })),
@@ -72,6 +72,22 @@ const ORDERED_LIST_WITH_CODE = `
72
72
 
73
73
  3. Item 3
74
74
  `;
75
+ const HEADING = `
76
+ # h1 Heading
77
+
78
+ ## h2 Heading
79
+
80
+ ### h3 Heading
81
+
82
+ #### h4 Heading
83
+
84
+ ##### h5 Heading
85
+
86
+ ###### h6 Heading
87
+ `;
88
+ const BLOCK_QUOTES = `> Blockquotes can also be nested...
89
+ >> ...by using additional greater-than signs (>) right next to each other...
90
+ > > > ...or with spaces between each sign.`;
75
91
  const checkListItemsRendered = () => {
76
92
  const items = ['Item 1', 'Item 2', 'Item 3'];
77
93
  expect(screen.getAllByRole('listitem')).toHaveLength(3);
@@ -307,12 +323,16 @@ describe('Message', () => {
307
323
  render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: CODE_MESSAGE }));
308
324
  expect(screen.getByText('Here is some YAML code:')).toBeTruthy();
309
325
  expect(screen.getByRole('button', { name: 'Copy code button' })).toBeTruthy();
310
- expect(screen.getByText(/apiVersion: helm.openshift.io\/v1beta1/i)).toBeTruthy();
326
+ expect(screen.getByText(/yaml/)).toBeTruthy();
327
+ expect(screen.getByText(/apiVersion:/i)).toBeTruthy();
328
+ expect(screen.getByText(/helm.openshift.io\/v1beta1/i)).toBeTruthy();
311
329
  expect(screen.getByText(/metadata:/i)).toBeTruthy();
312
- expect(screen.getByText(/name: azure-sample-repo0oooo00ooo/i)).toBeTruthy();
330
+ expect(screen.getByText(/name:/i)).toBeTruthy();
331
+ expect(screen.getByText(/azure-sample-repo0oooo00ooo/i)).toBeTruthy();
313
332
  expect(screen.getByText(/spec/i)).toBeTruthy();
314
333
  expect(screen.getByText(/connectionConfig:/i)).toBeTruthy();
315
- expect(screen.getByText(/url: https:\/\/raw.githubusercontent.com\/Azure-Samples\/helm-charts\/master\/docs/i)).toBeTruthy();
334
+ expect(screen.getByText(/url:/i)).toBeTruthy();
335
+ expect(screen.getByText(/https:\/\/raw.githubusercontent.com\/Azure-Samples\/helm-charts\/master\/docs/i)).toBeTruthy();
316
336
  });
317
337
  it('can click copy code button', () => __awaiter(void 0, void 0, void 0, function* () {
318
338
  // need explicit setup since RTL stubs clipboard if you do this
@@ -378,4 +398,19 @@ describe('Message', () => {
378
398
  } }));
379
399
  expect(screen.getAllByRole('img')[1]).toHaveAttribute('src', 'test.png');
380
400
  }));
401
+ it('should handle block quote correctly', () => {
402
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: BLOCK_QUOTES }));
403
+ expect(screen.getByText(/Blockquotes can also be nested.../)).toBeTruthy();
404
+ expect(screen.getByText('...by using additional greater-than signs (>) right next to each other...')).toBeTruthy();
405
+ expect(screen.getByText(/...or with spaces between each sign./)).toBeTruthy();
406
+ });
407
+ it('should handle heading correctly', () => {
408
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: HEADING }));
409
+ expect(screen.getByRole('heading', { name: /h1 Heading/i })).toBeTruthy();
410
+ expect(screen.getByRole('heading', { name: /h2 Heading/i })).toBeTruthy();
411
+ expect(screen.getByRole('heading', { name: /h3 Heading/i })).toBeTruthy();
412
+ expect(screen.getByRole('heading', { name: /h4 Heading/i })).toBeTruthy();
413
+ expect(screen.getByRole('heading', { name: /h5 Heading/i })).toBeTruthy();
414
+ expect(screen.getByRole('heading', { name: /h6 Heading/i })).toBeTruthy();
415
+ });
381
416
  });
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ExtraProps } from 'react-markdown';
3
- declare const TextMessage: ({ children, ...props }: JSX.IntrinsicElements["p"] & ExtraProps) => React.JSX.Element;
3
+ import { ContentProps } from '@patternfly/react-core';
4
+ declare const TextMessage: ({ component, children, ...props }: ContentProps & ExtraProps) => React.JSX.Element;
4
5
  export default TextMessage;
@@ -13,10 +13,10 @@ var __rest = (this && this.__rest) || function (s, e) {
13
13
  return t;
14
14
  };
15
15
  import React from 'react';
16
- import { Content, ContentVariants } from '@patternfly/react-core';
16
+ import { Content } from '@patternfly/react-core';
17
17
  const TextMessage = (_a) => {
18
- var { children } = _a, props = __rest(_a, ["children"]);
18
+ var { component, children } = _a, props = __rest(_a, ["component", "children"]);
19
19
  return (React.createElement("span", { className: "pf-chatbot__message-text" },
20
- React.createElement(Content, Object.assign({ component: ContentVariants.p }, props), children)));
20
+ React.createElement(Content, Object.assign({ component: component }, props), children)));
21
21
  };
22
22
  export default TextMessage;
@@ -7,14 +7,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import '@testing-library/jest-dom';
10
11
  import React from 'react';
12
+ import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
13
+ import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
11
14
  import { render, screen } from '@testing-library/react';
12
- import '@testing-library/jest-dom';
13
15
  import userEvent from '@testing-library/user-event';
14
- import { MessageBar } from './MessageBar';
15
- import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
16
16
  import SourceDetailsMenuItem from '../SourceDetailsMenuItem';
17
- import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
17
+ import { MessageBar } from './MessageBar';
18
18
  const ATTACH_MENU_ITEMS = [
19
19
  React.createElement(DropdownList, { key: "list-1" },
20
20
  React.createElement(DropdownItem, { className: "pf-chatbot-source-details-dropdown-item", value: "auth-operator Pod", id: "0" },
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { MessageBox } from './MessageBox';
4
+ describe('MessageBox', () => {
5
+ it('should render Message box', () => {
6
+ render(React.createElement(MessageBox, null,
7
+ React.createElement(React.Fragment, null, "Chatbot Messages")));
8
+ expect(screen.getByText('Chatbot Messages')).toBeTruthy();
9
+ });
10
+ it('should assign ref to Message box', () => {
11
+ const ref = React.createRef();
12
+ render(React.createElement(MessageBox, { ref: ref },
13
+ React.createElement("div", null, "Test message content")));
14
+ expect(ref.current).not.toBeNull();
15
+ expect(ref.current).toBeInstanceOf(HTMLDivElement);
16
+ });
17
+ });
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { PreviewAttachment } from './PreviewAttachment';
4
+ describe('PreviewAttachment', () => {
5
+ it('should render PreviewAttachment', () => {
6
+ render(React.createElement(PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: jest.fn(), handleModalToggle: jest.fn() }));
7
+ expect(screen.getByText('Preview attachment')).toBeTruthy();
8
+ expect(screen.getByText('greetings')).toBeTruthy();
9
+ expect(screen.getAllByText('TEXT')).toBeTruthy();
10
+ });
11
+ it('should call onEdit handler when edit button is pressed', () => {
12
+ const onEdit = jest.fn();
13
+ render(React.createElement(PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: onEdit, handleModalToggle: jest.fn() }));
14
+ fireEvent.click(screen.getByText('Edit'));
15
+ expect(onEdit).toHaveBeenCalled();
16
+ });
17
+ it('should call onDismiss handler when dismiss button is pressed', () => {
18
+ const onDismiss = jest.fn();
19
+ render(React.createElement(PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: jest.fn(), handleModalToggle: onDismiss }));
20
+ fireEvent.click(screen.getByText('Dismiss'));
21
+ expect(onDismiss).toHaveBeenCalled();
22
+ });
23
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { render, screen } from '@testing-library/react';
4
+ import { SettingsForm } from './SettingsForm';
5
+ describe('SettingsForm', () => {
6
+ it('should render settingsForm with custom classname', () => {
7
+ const { container } = render(React.createElement(SettingsForm, { className: "custom-settings" }));
8
+ expect(container.querySelector('.custom-settings')).toBeTruthy();
9
+ });
10
+ it('should render settingsForm with fields', () => {
11
+ const fields = [
12
+ {
13
+ id: 'archived-chat',
14
+ label: 'Archive chat',
15
+ field: (React.createElement(Button, { id: "archived-chat", variant: "secondary" }, "Archive chat"))
16
+ }
17
+ ];
18
+ render(React.createElement(SettingsForm, { fields: fields }));
19
+ expect(screen.getByRole('button', { name: 'Archive chat' })).toBeTruthy();
20
+ });
21
+ });
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../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/index.ts","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.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/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.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/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.tsx","../src/MessageBox/index.ts","../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.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"],"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/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/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.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/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"],"version":"5.6.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/chatbot",
3
- "version": "2.2.0-prerelease.15",
3
+ "version": "2.2.0-prerelease.17",
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",
@@ -2,9 +2,39 @@ import React from 'react';
2
2
  import Message from '@patternfly/chatbot/dist/dynamic/Message';
3
3
  import patternflyAvatar from './patternfly_avatar.jpg';
4
4
  import squareImg from './PF-social-color-square.svg';
5
+ import { Form, FormGroup, Radio } from '@patternfly/react-core';
5
6
 
6
7
  export const BotMessageExample: React.FunctionComponent = () => {
7
- const markdown = `
8
+ const [variant, setVariant] = React.useState('code');
9
+
10
+ /* eslint-disable indent */
11
+ const renderContent = () => {
12
+ switch (variant) {
13
+ case 'code':
14
+ return code;
15
+ case 'heading':
16
+ return heading;
17
+ case 'emphasis':
18
+ return emphasis;
19
+ case 'blockQuotes':
20
+ return blockQuotes;
21
+ case 'orderedList':
22
+ return orderedList;
23
+ case 'unorderedList':
24
+ return unorderedList;
25
+ case 'moreComplexList':
26
+ return moreComplexList;
27
+ case 'inlineCode':
28
+ return inlineCode;
29
+ case 'link':
30
+ return link;
31
+ default:
32
+ return;
33
+ }
34
+ };
35
+ /* eslint-enable indent */
36
+
37
+ const code = `
8
38
  Here is some YAML code:
9
39
 
10
40
  ~~~yaml
@@ -35,6 +65,36 @@ export default MessageLoading;
35
65
  ~~~
36
66
  `;
37
67
 
68
+ const heading = `
69
+ # h1 Heading
70
+
71
+ ## h2 Heading
72
+
73
+ ### h3 Heading
74
+
75
+ #### h4 Heading
76
+
77
+ ##### h5 Heading
78
+
79
+ ###### h6 Heading
80
+ `;
81
+
82
+ const emphasis = `
83
+ **Bold text, formatted with double asterisks**
84
+
85
+ __Bold text, formatted with double underscores__
86
+
87
+ *Italic text, formatted with single asterisks*
88
+
89
+ _Italic text, formatted with single underscores_
90
+
91
+ ~~Strikethrough~~
92
+ `;
93
+
94
+ const blockQuotes = `> Blockquotes can also be nested...
95
+ >> ...by using additional greater-than signs (>) right next to each other...
96
+ > > > ...or with spaces between each sign.`;
97
+
38
98
  const orderedList = `
39
99
  Here is an ordered list:
40
100
 
@@ -61,21 +121,13 @@ export default MessageLoading;
61
121
  Acquire 1 tablespoon of room temperature \`butter\`. Use \`knife\` to spread butter on \`toast\`. Bon appétit!
62
122
  `;
63
123
 
124
+ const link = `A paragraph with a URL: https://reactjs.org.`;
125
+
126
+ const inlineCode = `Here is an inline code - \`() => void\``;
127
+
64
128
  return (
65
129
  <>
66
130
  <Message name="Bot" role="bot" avatar={patternflyAvatar} content={`Text-based message from a bot named "Bot"`} />
67
- <Message
68
- name="Bot"
69
- role="bot"
70
- avatar={patternflyAvatar}
71
- content={`Text-based message from a bot named "Bot," with updated timestamp`}
72
- timestamp="1 hour ago"
73
- />
74
- <Message name="Bot" role="bot" avatar={patternflyAvatar} content={markdown} />
75
- <Message name="Bot" role="bot" avatar={patternflyAvatar} content={orderedList} />
76
- <Message name="Bot" role="bot" avatar={patternflyAvatar} content={unorderedList} />
77
- <Message name="Bot" role="bot" avatar={patternflyAvatar} content={moreComplexList} />
78
- <Message name="Bot" role="bot" avatar={patternflyAvatar} content="Example content" isLoading />
79
131
  <Message role="bot" avatar={patternflyAvatar} content="Text-based message from a nameless bot" />
80
132
  <Message
81
133
  name="Default Openshift Container Platform Assistant That Can Help With Any Query You Might Need Help With"
@@ -90,6 +142,83 @@ export default MessageLoading;
90
142
  content="Text-based message from a bot with a square avatar. You can further customize the avatar by applying an additional class or passing [PatternFly avatar props](/components/avatar) to the `<Message>` component via `avatarProps`."
91
143
  hasRoundAvatar={false}
92
144
  />
145
+ <Message
146
+ name="Bot"
147
+ role="bot"
148
+ avatar={patternflyAvatar}
149
+ content={`Text-based message from a bot named "Bot," with updated timestamp`}
150
+ timestamp="1 hour ago"
151
+ />
152
+ <Message name="Bot" role="bot" avatar={patternflyAvatar} content="Example content" isLoading />
153
+
154
+ <Form>
155
+ <FormGroup role="radiogroup" isInline fieldId="bot-message-type" label="Message content type">
156
+ <Radio
157
+ isChecked={variant === 'code'}
158
+ onChange={() => setVariant('code')}
159
+ name="bot-message-type"
160
+ label="Code"
161
+ id="code"
162
+ />
163
+ <Radio
164
+ isChecked={variant === 'inlineCode'}
165
+ onChange={() => setVariant('inlineCode')}
166
+ name="bot-message-type"
167
+ label="Inline code"
168
+ id="inline-code"
169
+ />
170
+ <Radio
171
+ isChecked={variant === 'heading'}
172
+ onChange={() => setVariant('heading')}
173
+ name="bot-message-type"
174
+ label="Heading"
175
+ id="heading"
176
+ />
177
+ <Radio
178
+ isChecked={variant === 'blockQuotes'}
179
+ onChange={() => setVariant('blockQuotes')}
180
+ name="bot-message-type"
181
+ label="Block quote"
182
+ id="block-quotes"
183
+ />
184
+ <Radio
185
+ isChecked={variant === 'emphasis'}
186
+ onChange={() => setVariant('emphasis')}
187
+ name="bot-message-type"
188
+ label="Emphasis"
189
+ id="emphasis"
190
+ />
191
+ <Radio
192
+ isChecked={variant === 'link'}
193
+ onChange={() => setVariant('link')}
194
+ name="bot-message-type"
195
+ label="Link"
196
+ id="link"
197
+ />
198
+ <Radio
199
+ isChecked={variant === 'unorderedList'}
200
+ onChange={() => setVariant('unorderedList')}
201
+ name="bot-message-type"
202
+ label="Unordered list"
203
+ id="unordered-list"
204
+ />
205
+ <Radio
206
+ isChecked={variant === 'orderedList'}
207
+ onChange={() => setVariant('orderedList')}
208
+ name="bot-message-type"
209
+ label="Ordered list"
210
+ id="ordered-list"
211
+ />
212
+ <Radio
213
+ isChecked={variant === 'moreComplexList'}
214
+ onChange={() => setVariant('moreComplexList')}
215
+ name="bot-message-type"
216
+ label="More complex list"
217
+ id="more-complex-list"
218
+ />
219
+ </FormGroup>
220
+ </Form>
221
+ <Message name="Bot" role="bot" avatar={patternflyAvatar} content={renderContent()} />
93
222
  </>
94
223
  );
95
224
  };