@patternfly/chatbot 2.1.0-prerelease.17 → 2.1.0-prerelease.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +7 -1
- package/dist/cjs/ChatbotToggle/ChatbotToggle.js +4 -4
- package/dist/cjs/ChatbotToggle/ChatbotToggle.test.d.ts +1 -0
- package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +60 -0
- package/dist/cjs/Message/Message.d.ts +5 -1
- package/dist/cjs/Message/Message.js +8 -2
- package/dist/cjs/Message/Message.test.js +100 -4
- package/dist/cjs/ResponseActions/ResponseActions.test.js +38 -0
- package/dist/css/main.css +19 -12
- package/dist/css/main.css.map +1 -1
- package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +7 -1
- package/dist/esm/ChatbotToggle/ChatbotToggle.js +4 -4
- package/dist/esm/ChatbotToggle/ChatbotToggle.test.d.ts +1 -0
- package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +55 -0
- package/dist/esm/Message/Message.d.ts +5 -1
- package/dist/esm/Message/Message.js +8 -2
- package/dist/esm/Message/Message.test.js +100 -4
- package/dist/esm/ResponseActions/ResponseActions.test.js +38 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +8 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +8 -2
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/PF-social-color-square.svg +19 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/PF-social-dark-square.svg +19 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +8 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/user_avatar.svg +18 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +3 -2
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +14 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +9 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +6 -4
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +3 -2
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +4 -3
- package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +5 -3
- package/src/ChatbotToggle/ChatbotToggle.scss +11 -5
- package/src/ChatbotToggle/ChatbotToggle.test.tsx +47 -0
- package/src/ChatbotToggle/ChatbotToggle.tsx +15 -6
- package/src/Message/Message.scss +15 -9
- package/src/Message/Message.test.tsx +141 -4
- package/src/Message/Message.tsx +28 -3
- package/src/MessageBox/MessageBox.scss +2 -2
- package/src/ResponseActions/ResponseActions.test.tsx +44 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/user_avatar.jpg +0 -0
@@ -69,7 +69,12 @@ describe('Message', () => {
|
|
69
69
|
expect(screen.getByText('User')).toBeTruthy();
|
70
70
|
expect(screen.getByText('Hi')).toBeTruthy();
|
71
71
|
const date = new Date();
|
72
|
-
|
72
|
+
const formattedDate = date.toLocaleDateString();
|
73
|
+
expect(screen.getByText((content, element) => {
|
74
|
+
const hasText = content.includes(formattedDate);
|
75
|
+
const isVisible = (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'script' && (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'style';
|
76
|
+
return hasText && isVisible;
|
77
|
+
})).toBeInTheDocument();
|
73
78
|
expect(screen.queryByText('Loading message')).toBeFalsy();
|
74
79
|
expect(screen.getByRole('img')).toHaveAttribute('src', './img');
|
75
80
|
});
|
@@ -79,7 +84,12 @@ describe('Message', () => {
|
|
79
84
|
expect(screen.getByText('AI')).toBeTruthy();
|
80
85
|
expect(screen.getByText('Hi')).toBeTruthy();
|
81
86
|
const date = new Date();
|
82
|
-
|
87
|
+
const formattedDate = date.toLocaleDateString();
|
88
|
+
expect(screen.getByText((content, element) => {
|
89
|
+
const hasText = content.includes(formattedDate);
|
90
|
+
const isVisible = (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'script' && (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'style';
|
91
|
+
return hasText && isVisible;
|
92
|
+
})).toBeInTheDocument();
|
83
93
|
});
|
84
94
|
it('should render avatar correctly', () => {
|
85
95
|
render(React.createElement(Message, { avatar: "./testImg", role: "bot", name: "Bot", content: "Hi" }));
|
@@ -99,7 +109,12 @@ describe('Message', () => {
|
|
99
109
|
expect(screen.getByText('Hi')).toBeTruthy();
|
100
110
|
expect(screen.getByText('2 hours ago')).toBeTruthy();
|
101
111
|
const date = new Date();
|
102
|
-
|
112
|
+
const formattedDate = date.toLocaleDateString();
|
113
|
+
expect(screen.queryByText((content, element) => {
|
114
|
+
const hasText = content.includes(formattedDate);
|
115
|
+
const isVisible = (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'script' && (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'style';
|
116
|
+
return hasText && isVisible;
|
117
|
+
})).not.toBeInTheDocument();
|
103
118
|
});
|
104
119
|
it('should render attachments', () => {
|
105
120
|
render(React.createElement(Message, { avatar: "./img", role: "user", content: "Hi", attachments: [{ name: 'testAttachment' }] }));
|
@@ -129,7 +144,12 @@ describe('Message', () => {
|
|
129
144
|
expect(screen.getByText('AI')).toBeTruthy();
|
130
145
|
expect(screen.queryByText('Hi')).toBeFalsy();
|
131
146
|
const date = new Date();
|
132
|
-
|
147
|
+
const formattedDate = date.toLocaleDateString();
|
148
|
+
expect(screen.getByText((content, element) => {
|
149
|
+
const hasText = content.includes(formattedDate);
|
150
|
+
const isVisible = (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'script' && (element === null || element === void 0 ? void 0 : element.tagName.toLowerCase()) !== 'style';
|
151
|
+
return hasText && isVisible;
|
152
|
+
})).toBeInTheDocument();
|
133
153
|
expect(screen.getByText('Loading message')).toBeTruthy();
|
134
154
|
});
|
135
155
|
it('should be able to show sources', () => __awaiter(void 0, void 0, void 0, function* () {
|
@@ -157,6 +177,59 @@ describe('Message', () => {
|
|
157
177
|
expect(screen.getByText('Loading message')).toBeTruthy();
|
158
178
|
expect(screen.queryByText('Getting started with Red Hat OpenShift')).toBeFalsy();
|
159
179
|
});
|
180
|
+
it('should be able to show quick response', () => __awaiter(void 0, void 0, void 0, function* () {
|
181
|
+
const spy = jest.fn();
|
182
|
+
render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", quickResponses: [
|
183
|
+
{
|
184
|
+
id: '1',
|
185
|
+
content: 'Yes',
|
186
|
+
onClick: spy,
|
187
|
+
className: 'test'
|
188
|
+
}
|
189
|
+
] }));
|
190
|
+
const quickResponse = screen.getByRole('button', { name: /Yes/i });
|
191
|
+
expect(quickResponse).toBeTruthy();
|
192
|
+
yield userEvent.click(quickResponse);
|
193
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
194
|
+
}));
|
195
|
+
it('should be able to show more than 1 quick response', () => __awaiter(void 0, void 0, void 0, function* () {
|
196
|
+
const spy = jest.fn();
|
197
|
+
render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", quickResponses: [
|
198
|
+
{
|
199
|
+
id: '1',
|
200
|
+
content: 'Yes',
|
201
|
+
onClick: spy
|
202
|
+
},
|
203
|
+
{
|
204
|
+
id: '2',
|
205
|
+
content: 'No',
|
206
|
+
onClick: spy
|
207
|
+
}
|
208
|
+
] }));
|
209
|
+
expect(screen.getByRole('button', { name: /Yes/i })).toBeTruthy();
|
210
|
+
expect(screen.getByRole('button', { name: /No/i })).toBeTruthy();
|
211
|
+
}));
|
212
|
+
it('should be able to spread quickResponseContainerProps', () => __awaiter(void 0, void 0, void 0, function* () {
|
213
|
+
const spy = jest.fn();
|
214
|
+
render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", quickResponses: [
|
215
|
+
{
|
216
|
+
id: '1',
|
217
|
+
content: 'Yes',
|
218
|
+
onClick: spy
|
219
|
+
},
|
220
|
+
{
|
221
|
+
id: '2',
|
222
|
+
content: 'No',
|
223
|
+
onClick: spy
|
224
|
+
}
|
225
|
+
],
|
226
|
+
// this is a LabelGroup prop that changes the default number shown
|
227
|
+
// to be different than what we use in ChatBot
|
228
|
+
quickResponseContainerProps: { numLabels: 1 } }));
|
229
|
+
expect(screen.getByRole('button', { name: /Yes/i })).toBeTruthy();
|
230
|
+
expect(screen.queryByRole('button', { name: /No/i })).toBeFalsy();
|
231
|
+
expect(screen.getByRole('button', { name: /1 more/i }));
|
232
|
+
}));
|
160
233
|
it('should be able to show actions', () => __awaiter(void 0, void 0, void 0, function* () {
|
161
234
|
render(React.createElement(Message, { avatar: "./img", role: "bot", name: "Bot", content: "Hi", actions: {
|
162
235
|
// eslint-disable-next-line no-console
|
@@ -231,4 +304,27 @@ describe('Message', () => {
|
|
231
304
|
render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: CODE_MESSAGE, codeBlockProps: { 'aria-label': 'test' } }));
|
232
305
|
expect(screen.getByRole('button', { name: 'test' })).toBeTruthy();
|
233
306
|
});
|
307
|
+
it('should handle hasRoundAvatar correctly when it is true', () => {
|
308
|
+
render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: "Hi", hasRoundAvatar: true }));
|
309
|
+
expect(screen.getByRole('img')).toBeTruthy();
|
310
|
+
expect(screen.getByRole('img')).toHaveClass('pf-chatbot__message-avatar');
|
311
|
+
expect(screen.getByRole('img')).toHaveClass('pf-chatbot__message-avatar--round');
|
312
|
+
});
|
313
|
+
it('should handle hasRoundAvatar correctly when it is false', () => {
|
314
|
+
render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: "Hi", hasRoundAvatar: false }));
|
315
|
+
expect(screen.getByRole('img')).toBeTruthy();
|
316
|
+
expect(screen.getByRole('img')).toHaveClass('pf-chatbot__message-avatar');
|
317
|
+
expect(screen.getByRole('img')).not.toHaveClass('pf-chatbot__message-avatar--round');
|
318
|
+
});
|
319
|
+
it('should handle avatarProps correctly by spreading it onto the Message Avatar', () => {
|
320
|
+
render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: "Hi", avatarProps: { className: 'test' } }));
|
321
|
+
expect(screen.getByRole('img')).toBeTruthy();
|
322
|
+
expect(screen.getByRole('img')).toHaveClass('test');
|
323
|
+
});
|
324
|
+
it('should handle avatarProps and hasRoundAvatar correctly', () => {
|
325
|
+
render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: "Hi", avatarProps: { className: 'test' }, hasRoundAvatar: false }));
|
326
|
+
expect(screen.getByRole('img')).toBeTruthy();
|
327
|
+
expect(screen.getByRole('img')).toHaveClass('test');
|
328
|
+
expect(screen.getByRole('img')).toHaveClass('pf-chatbot__message-avatar');
|
329
|
+
});
|
234
330
|
});
|
@@ -12,6 +12,7 @@ import { render, screen } from '@testing-library/react';
|
|
12
12
|
import '@testing-library/jest-dom';
|
13
13
|
import ResponseActions from './ResponseActions';
|
14
14
|
import userEvent from '@testing-library/user-event';
|
15
|
+
import { DownloadIcon, InfoCircleIcon, RedoIcon } from '@patternfly/react-icons';
|
15
16
|
const ALL_ACTIONS = [
|
16
17
|
{ type: 'positive', label: 'Good response' },
|
17
18
|
{ type: 'negative', label: 'Bad response' },
|
@@ -19,6 +20,28 @@ const ALL_ACTIONS = [
|
|
19
20
|
{ type: 'share', label: 'Share' },
|
20
21
|
{ type: 'listen', label: 'Listen' }
|
21
22
|
];
|
23
|
+
const CUSTOM_ACTIONS = [
|
24
|
+
{
|
25
|
+
regenerate: {
|
26
|
+
ariaLabel: 'Regenerate',
|
27
|
+
onClick: jest.fn(),
|
28
|
+
tooltipContent: 'Regenerate',
|
29
|
+
icon: React.createElement(RedoIcon, null)
|
30
|
+
},
|
31
|
+
download: {
|
32
|
+
ariaLabel: 'Download',
|
33
|
+
onClick: jest.fn(),
|
34
|
+
tooltipContent: 'Download',
|
35
|
+
icon: React.createElement(DownloadIcon, null)
|
36
|
+
},
|
37
|
+
info: {
|
38
|
+
ariaLabel: 'Info',
|
39
|
+
onClick: jest.fn(),
|
40
|
+
tooltipContent: 'Info',
|
41
|
+
icon: React.createElement(InfoCircleIcon, null)
|
42
|
+
}
|
43
|
+
}
|
44
|
+
];
|
22
45
|
describe('ResponseActions', () => {
|
23
46
|
it('should render buttons correctly', () => {
|
24
47
|
ALL_ACTIONS.forEach(({ type, label }) => {
|
@@ -59,4 +82,19 @@ describe('ResponseActions', () => {
|
|
59
82
|
expect(screen.getByRole('button', { name: label })).toHaveClass('test');
|
60
83
|
});
|
61
84
|
});
|
85
|
+
it('should be able to add custom actions', () => {
|
86
|
+
CUSTOM_ACTIONS.forEach((action) => {
|
87
|
+
const key = Object.keys(action)[0];
|
88
|
+
render(React.createElement(ResponseActions, { actions: {
|
89
|
+
[key]: {
|
90
|
+
tooltipContent: action[key].tooltipContent,
|
91
|
+
onClick: action[key].onClick,
|
92
|
+
// doing this just because it's easier to test without a regex for the button name
|
93
|
+
ariaLabel: action[key].ariaLabel.toLowerCase(),
|
94
|
+
icon: action[key].icon
|
95
|
+
}
|
96
|
+
} }));
|
97
|
+
expect(screen.getByRole('button', { name: key })).toBeTruthy();
|
98
|
+
});
|
99
|
+
});
|
62
100
|
});
|
@@ -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.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/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.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/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/TextMessage/TextMessage.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.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts"],"version":"5.6.3"}
|
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.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/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/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/TextMessage/TextMessage.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.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts"],"version":"5.6.3"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@patternfly/chatbot",
|
3
|
-
"version": "2.1.0-prerelease.
|
3
|
+
"version": "2.1.0-prerelease.19",
|
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",
|
@@ -75,5 +75,9 @@
|
|
75
75
|
"victory-cursor-container": "^37.1.1",
|
76
76
|
"victory-tooltip": "^37.1.1",
|
77
77
|
"victory-bar": "^37.1.1"
|
78
|
+
},
|
79
|
+
"overrides": {
|
80
|
+
"puppeteer": "^23.6.1",
|
81
|
+
"puppeteer-cluster": "^0.24.0"
|
78
82
|
}
|
79
83
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import Message from '@patternfly/chatbot/dist/dynamic/Message';
|
3
3
|
import patternflyAvatar from './patternfly_avatar.jpg';
|
4
|
+
import squareImg from './PF-social-color-square.svg';
|
4
5
|
|
5
6
|
export const BotMessageExample: React.FunctionComponent = () => {
|
6
7
|
const markdown = `
|
@@ -82,6 +83,13 @@ export default MessageLoading;
|
|
82
83
|
avatar={patternflyAvatar}
|
83
84
|
content="Text-based message, where the bot's name is truncated"
|
84
85
|
/>
|
86
|
+
<Message
|
87
|
+
name="Bot"
|
88
|
+
role="bot"
|
89
|
+
avatar={squareImg}
|
90
|
+
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
|
+
hasRoundAvatar={false}
|
92
|
+
/>
|
85
93
|
</>
|
86
94
|
);
|
87
95
|
};
|
package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx
CHANGED
@@ -3,7 +3,7 @@ import React from 'react';
|
|
3
3
|
import Message from '@patternfly/chatbot/dist/dynamic/Message';
|
4
4
|
import PreviewAttachment from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';
|
5
5
|
import AttachmentEdit from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';
|
6
|
-
import userAvatar from './user_avatar.
|
6
|
+
import userAvatar from './user_avatar.svg';
|
7
7
|
|
8
8
|
interface ModalData {
|
9
9
|
code: string;
|
@@ -33,7 +33,6 @@ import InfoCircleIcon from '@patternfly/react-icons/dist/esm/icons/info-circle-i
|
|
33
33
|
import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon';
|
34
34
|
import RedoIcon from '@patternfly/react-icons/dist/esm/icons/redo-icon';
|
35
35
|
import patternflyAvatar from './patternfly_avatar.jpg';
|
36
|
-
import userAvatar from './user_avatar.jpg';
|
37
36
|
import AttachmentEdit from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';
|
38
37
|
import FileDetails from '@patternfly/chatbot/dist/dynamic/FileDetails';
|
39
38
|
import FileDetailsLabel from '@patternfly/chatbot/dist/dynamic/FileDetailsLabel';
|
@@ -41,6 +40,9 @@ import FileDropZone from '@patternfly/chatbot/dist/dynamic/FileDropZone';
|
|
41
40
|
import { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';
|
42
41
|
import ChatbotAlert from '@patternfly/chatbot/dist/dynamic/ChatbotAlert';
|
43
42
|
|
43
|
+
import userAvatar from './user_avatar.svg';
|
44
|
+
import squareImg from './PF-social-color-square.svg';
|
45
|
+
|
44
46
|
The `content` prop of the `<Message>` component is passed to a `<Markdown>` component (from [react-markdown](https://remarkjs.github.io/react-markdown/)), which is configured to translate plain text strings into PatternFly [`<Content>` components](/components/content) and code blocks into PatternFly [`<CodeBlock>` components.](/components/code-block)
|
45
47
|
|
46
48
|
## Messages
|
@@ -53,6 +55,10 @@ Messages from the chatbot will be marked with an "AI" label to clearly communica
|
|
53
55
|
|
54
56
|
By default, a date and timestamp is displayed with each message. We recommend using the `timestamp` prop in real chatbots, since it will allow you to set persistent dates and times on messages, even if the messages re-render. You can update `timestamp` with a different [date and time format](/ux-writing/numerics) as needed.
|
55
57
|
|
58
|
+
<br />
|
59
|
+
|
60
|
+
You can further customize the avatar by applying an additional class or passing [PatternFly avatar props](/components/avatar) to the `<Message>` component via `avatarProps`.
|
61
|
+
|
56
62
|
```js file="./BotMessage.tsx"
|
57
63
|
|
58
64
|
```
|
@@ -101,7 +107,7 @@ The API for a source requires a link at minimum, but we strongly recommend provi
|
|
101
107
|
|
102
108
|
### User messages
|
103
109
|
|
104
|
-
Messages from users have a different background color to differentiate them from bot messages. You can also display a custom avatar that is uploaded by the user.
|
110
|
+
Messages from users have a different background color to differentiate them from bot messages. You can also display a custom avatar that is uploaded by the user. You can further customize the avatar by applying an additional class or passing [PatternFly avatar props](/components/avatar) to the `<Message>` component via `avatarProps`.
|
105
111
|
|
106
112
|
```js file="./UserMessage.tsx"
|
107
113
|
|
package/patternfly-docs/content/extensions/chatbot/examples/Messages/PF-social-color-square.svg
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<svg width="228px" height="228px" viewBox="0 0 228 228" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
+
<title>PF-social-color-square </title>
|
4
|
+
<defs>
|
5
|
+
<linearGradient x1="100%" y1="1.31838984e-13%" x2="40.4021492%" y2="59.4473677%" id="linearGradient-1">
|
6
|
+
<stop stop-color="#FFFFFF" offset="0%"></stop>
|
7
|
+
<stop stop-color="#FFFFFF" stop-opacity="0.498497596" offset="100%"></stop>
|
8
|
+
</linearGradient>
|
9
|
+
</defs>
|
10
|
+
<g id="PF-social-color-square" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
11
|
+
<g id="Group-2">
|
12
|
+
<rect id="Rectangle" fill="#0066CC" x="0" y="0" width="228" height="228" rx="8"></rect>
|
13
|
+
<g id="Group" transform="translate(27, 27)">
|
14
|
+
<path d="M69,0 L175,0 L175,106 C116.457817,106 69,58.5421835 69,0 L69,0 L69,0 Z" id="Rectangle-Copy-15" fill="#FFFFFF" opacity="0.4"></path>
|
15
|
+
<path d="M175,2.04658255 L175,152.848101 C175,165.082257 165.082257,175 152.848101,175 L73.5063044,175 L175,2.04658255 Z M172.953417,4.68958206e-13 L1.98951966e-13,101.493696 L1.98951966e-13,22.1518987 C1.98951966e-13,9.91774288 9.91774288,4.68958206e-13 22.1518987,4.54747351e-13 L172.953417,4.68958206e-13 Z" id="Combined-Shape-Copy-4" fill="url(#linearGradient-1)"></path>
|
16
|
+
</g>
|
17
|
+
</g>
|
18
|
+
</g>
|
19
|
+
</svg>
|
package/patternfly-docs/content/extensions/chatbot/examples/Messages/PF-social-dark-square.svg
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<svg width="228px" height="228px" viewBox="0 0 228 228" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3
|
+
<title>PF-social-dark-square </title>
|
4
|
+
<defs>
|
5
|
+
<linearGradient x1="100%" y1="1.31838984e-13%" x2="40.4021492%" y2="59.4473677%" id="linearGradient-1">
|
6
|
+
<stop stop-color="#FFFFFF" offset="0%"></stop>
|
7
|
+
<stop stop-color="#FFFFFF" stop-opacity="0.498497596" offset="100%"></stop>
|
8
|
+
</linearGradient>
|
9
|
+
</defs>
|
10
|
+
<g id="PF-social-dark-square" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
11
|
+
<g id="Group-2">
|
12
|
+
<rect id="Rectangle" fill="#212427" x="0" y="0" width="228" height="228" rx="8"></rect>
|
13
|
+
<g id="Group" transform="translate(27, 27)">
|
14
|
+
<path d="M69,0 L175,0 L175,106 C116.457817,106 69,58.5421835 69,0 L69,0 L69,0 Z" id="Rectangle-Copy-15" fill="#FFFFFF" opacity="0.4"></path>
|
15
|
+
<path d="M175,2.04658255 L175,152.848101 C175,165.082257 165.082257,175 152.848101,175 L73.5063044,175 L175,2.04658255 Z M172.953417,1.42108547e-14 L1.98951966e-13,101.493696 L1.98951966e-13,22.1518987 C1.98951966e-13,9.91774288 9.91774288,1.42108547e-14 22.1518987,0 L172.953417,1.42108547e-14 Z" id="Combined-Shape-Copy-4" fill="url(#linearGradient-1)"></path>
|
16
|
+
</g>
|
17
|
+
</g>
|
18
|
+
</g>
|
19
|
+
</svg>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
3
|
import Message from '@patternfly/chatbot/dist/dynamic/Message';
|
4
|
-
import userAvatar from './user_avatar.
|
4
|
+
import userAvatar from './user_avatar.svg';
|
5
5
|
|
6
6
|
export const UserMessageExample: React.FunctionComponent = () => {
|
7
7
|
const markdown = `A paragraph with *emphasis* and **strong importance**.
|
@@ -32,6 +32,13 @@ Here is an unordered list:
|
|
32
32
|
avatar={userAvatar}
|
33
33
|
/>
|
34
34
|
<Message name="User" role="user" content={markdown} avatar={userAvatar} />
|
35
|
+
<Message
|
36
|
+
name="User"
|
37
|
+
role="user"
|
38
|
+
content="Example user message with `avatarProps` set to add a border"
|
39
|
+
avatar={userAvatar}
|
40
|
+
avatarProps={{ isBordered: true }}
|
41
|
+
/>
|
35
42
|
</>
|
36
43
|
);
|
37
44
|
};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4
|
+
viewBox="0 0 36 36" style="enable-background:new 0 0 36 36;" xml:space="preserve">
|
5
|
+
<style type="text/css">
|
6
|
+
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#F0F0F0;}
|
7
|
+
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#D2D2D2;}
|
8
|
+
.st2{fill:#B8BBBE;}
|
9
|
+
.st3{fill:#D2D2D2;}
|
10
|
+
</style>
|
11
|
+
<rect class="st0" width="36" height="36"/>
|
12
|
+
<path class="st1" d="M17.7,20.1c-3.5,0-6.4-2.9-6.4-6.4s2.9-6.4,6.4-6.4s6.4,2.9,6.4,6.4S21.3,20.1,17.7,20.1z"/>
|
13
|
+
<path class="st2" d="M13.3,36l0-6.7c-2,0.4-2.9,1.4-3.1,3.5L10.1,36H13.3z"/>
|
14
|
+
<path class="st3" d="M10.1,36l0.1-3.2c0.2-2.1,1.1-3.1,3.1-3.5l0,6.7h9.4l0-6.7c2,0.4,2.9,1.4,3.1,3.5l0.1,3.2h4.7
|
15
|
+
c-0.4-3.9-1.3-9-2.9-11c-1.1-1.4-2.3-2.2-3.5-2.6s-1.8-0.6-6.3-0.6s-6.1,0.7-6.1,0.7c-1.2,0.4-2.4,1.2-3.4,2.6
|
16
|
+
C6.7,27,5.8,32.2,5.4,36H10.1z"/>
|
17
|
+
<path class="st2" d="M25.9,36l-0.1-3.2c-0.2-2.1-1.1-3.1-3.1-3.5l0,6.7H25.9z"/>
|
18
|
+
</svg>
|
@@ -5,7 +5,7 @@ export const BasicDemo: React.FunctionComponent = () => {
|
|
5
5
|
const [chatbotVisible, setChatbotVisible] = React.useState<boolean>(false);
|
6
6
|
return (
|
7
7
|
<ChatbotToggle
|
8
|
-
|
8
|
+
tooltipLabel="Chatbot"
|
9
9
|
isChatbotVisible={chatbotVisible}
|
10
10
|
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
11
11
|
/>
|
package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx
CHANGED
@@ -7,7 +7,7 @@ import ChatbotFooter from '@patternfly/chatbot/dist/dynamic/ChatbotFooter';
|
|
7
7
|
import MessageBar from '@patternfly/chatbot/dist/dynamic/MessageBar';
|
8
8
|
import MessageBox from '@patternfly/chatbot/dist/dynamic/MessageBox';
|
9
9
|
import Message, { MessageProps } from '@patternfly/chatbot/dist/dynamic/Message';
|
10
|
-
import userAvatar from '../Messages/user_avatar.
|
10
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
11
11
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
12
12
|
import { FormGroup, Radio } from '@patternfly/react-core';
|
13
13
|
|
@@ -41,7 +41,8 @@ export const ChatbotWelcomeInteractionDemo: React.FunctionComponent = () => {
|
|
41
41
|
content: message,
|
42
42
|
name: 'User',
|
43
43
|
avatar: userAvatar,
|
44
|
-
timestamp: date.toLocaleString()
|
44
|
+
timestamp: date.toLocaleString(),
|
45
|
+
avatarProps: { isBordered: true }
|
45
46
|
});
|
46
47
|
newMessages.push({
|
47
48
|
id: generateId(),
|
@@ -80,7 +80,7 @@ export const BasicDemo: React.FunctionComponent = () => {
|
|
80
80
|
|
81
81
|
return (
|
82
82
|
<ChatbotToggle
|
83
|
-
|
83
|
+
tooltipLabel="Virtual assistant"
|
84
84
|
isChatbotVisible={chatbotVisible}
|
85
85
|
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
86
86
|
closedToggleIcon={closedToggleIcon}
|
@@ -26,7 +26,7 @@ export const ChatbotDemo: React.FunctionComponent = () => {
|
|
26
26
|
Skip to chatbot
|
27
27
|
</SkipToContent>
|
28
28
|
<ChatbotToggle
|
29
|
-
|
29
|
+
tooltipLabel="Chatbot"
|
30
30
|
isChatbotVisible={chatbotVisible}
|
31
31
|
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
32
32
|
id="chatbot-toggle"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import ChatbotToggle from '@patternfly/virtual-assistant/dist/dynamic/ChatbotToggle';
|
3
|
+
|
4
|
+
export const SquareChatbotToggle: React.FunctionComponent = () => {
|
5
|
+
const [chatbotVisible, setChatbotVisible] = React.useState<boolean>(false);
|
6
|
+
return (
|
7
|
+
<ChatbotToggle
|
8
|
+
tooltipLabel="Chatbot"
|
9
|
+
isChatbotVisible={chatbotVisible}
|
10
|
+
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
11
|
+
isRound={false}
|
12
|
+
/>
|
13
|
+
);
|
14
|
+
};
|
@@ -76,7 +76,7 @@ import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon';
|
|
76
76
|
import OpenDrawerRightIcon from '@patternfly/react-icons/dist/esm/icons/open-drawer-right-icon';
|
77
77
|
import PFHorizontalLogoColor from './PF-HorizontalLogo-Color.svg';
|
78
78
|
import PFHorizontalLogoReverse from './PF-HorizontalLogo-Reverse.svg';
|
79
|
-
import userAvatar from '../Messages/user_avatar.
|
79
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
80
80
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
81
81
|
|
82
82
|
## Structure
|
@@ -164,6 +164,14 @@ A custom icon can be passed to the toggle. To ensure the icon is visible in both
|
|
164
164
|
|
165
165
|
```
|
166
166
|
|
167
|
+
### Custom toggle shape
|
168
|
+
|
169
|
+
A custom shape can be set for the toggle. To override the default circle shape, set `isRound` to `false`. This will set the toggle to a square shape, but you can pass in additional classes to further customize the shape.
|
170
|
+
|
171
|
+
```js file="./SquareChatbotToggle.tsx" isFullscreen
|
172
|
+
|
173
|
+
```
|
174
|
+
|
167
175
|
## Header
|
168
176
|
|
169
177
|
### Header sections
|
@@ -42,7 +42,7 @@ import OpenDrawerRightIcon from '@patternfly/react-icons/dist/esm/icons/open-dra
|
|
42
42
|
import OutlinedWindowRestoreIcon from '@patternfly/react-icons/dist/esm/icons/outlined-window-restore-icon';
|
43
43
|
import PFIconLogoColor from '../UI/PF-IconLogo-Color.svg';
|
44
44
|
import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
|
45
|
-
import userAvatar from '../Messages/user_avatar.
|
45
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
46
46
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
47
47
|
|
48
48
|
## Demos
|
@@ -53,7 +53,7 @@ import PFHorizontalLogoColor from '../UI/PF-HorizontalLogo-Color.svg';
|
|
53
53
|
import PFHorizontalLogoReverse from '../UI/PF-HorizontalLogo-Reverse.svg';
|
54
54
|
import PFIconLogoColor from '../UI/PF-IconLogo-Color.svg';
|
55
55
|
import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
|
56
|
-
import userAvatar from '../Messages/user_avatar.
|
56
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
57
57
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
58
58
|
|
59
59
|
### Basic chatbot
|
@@ -30,7 +30,7 @@ import PFHorizontalLogoColor from '../UI/PF-HorizontalLogo-Color.svg';
|
|
30
30
|
import PFHorizontalLogoReverse from '../UI/PF-HorizontalLogo-Reverse.svg';
|
31
31
|
import PFIconLogoColor from '../UI/PF-IconLogo-Color.svg';
|
32
32
|
import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
|
33
|
-
import userAvatar from '../Messages/user_avatar.
|
33
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
34
34
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
35
35
|
|
36
36
|
const footnoteProps = {
|
@@ -102,7 +102,8 @@ const initialMessages: MessageProps[] = [
|
|
102
102
|
content: 'Hello, can you give me an example of what you can do?',
|
103
103
|
name: 'User',
|
104
104
|
avatar: userAvatar,
|
105
|
-
timestamp: date.toLocaleString()
|
105
|
+
timestamp: date.toLocaleString(),
|
106
|
+
avatarProps: { isBordered: true }
|
106
107
|
},
|
107
108
|
{
|
108
109
|
id: '2',
|
@@ -222,7 +223,8 @@ export const ChatbotDemo: React.FunctionComponent = () => {
|
|
222
223
|
content: message,
|
223
224
|
name: 'User',
|
224
225
|
avatar: userAvatar,
|
225
|
-
timestamp: date.toLocaleString()
|
226
|
+
timestamp: date.toLocaleString(),
|
227
|
+
avatarProps: { isBordered: true }
|
226
228
|
});
|
227
229
|
newMessages.push({
|
228
230
|
id: generateId(),
|
@@ -335,7 +337,7 @@ export const ChatbotDemo: React.FunctionComponent = () => {
|
|
335
337
|
Skip to chatbot
|
336
338
|
</SkipToContent>
|
337
339
|
<ChatbotToggle
|
338
|
-
|
340
|
+
tooltipLabel="Chatbot"
|
339
341
|
isChatbotVisible={chatbotVisible}
|
340
342
|
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
341
343
|
id="chatbot-toggle"
|
@@ -27,7 +27,7 @@ import PFHorizontalLogoColor from '../UI/PF-HorizontalLogo-Color.svg';
|
|
27
27
|
import PFHorizontalLogoReverse from '../UI/PF-HorizontalLogo-Reverse.svg';
|
28
28
|
import PFIconLogoColor from '../UI/PF-IconLogo-Color.svg';
|
29
29
|
import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
|
30
|
-
import userAvatar from '../Messages/user_avatar.
|
30
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
31
31
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
32
32
|
|
33
33
|
interface ModalData {
|
@@ -54,6 +54,7 @@ export const BasicDemo: React.FunctionComponent = () => {
|
|
54
54
|
content: "I'm referring to this attachment for added context in our conversation.",
|
55
55
|
name: 'User',
|
56
56
|
avatar: userAvatar,
|
57
|
+
avatarProps: { isBordered: true },
|
57
58
|
attachmentName: 'auth-operator.yml',
|
58
59
|
attachmentId: '1',
|
59
60
|
onAttachmentClose,
|
@@ -167,7 +168,7 @@ export const BasicDemo: React.FunctionComponent = () => {
|
|
167
168
|
return (
|
168
169
|
<>
|
169
170
|
<ChatbotToggle
|
170
|
-
|
171
|
+
tooltipLabel="Chatbot"
|
171
172
|
isChatbotVisible={chatbotVisible}
|
172
173
|
onToggleChatbot={() => {
|
173
174
|
setChatbotVisible(!chatbotVisible);
|
@@ -14,7 +14,7 @@ import { Divider, DropdownGroup, DropdownItem, DropdownList, DropEvent } from '@
|
|
14
14
|
import FileDetailsLabel from '@patternfly/chatbot/dist/dynamic/FileDetailsLabel';
|
15
15
|
import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon, UploadIcon } from '@patternfly/react-icons';
|
16
16
|
import { useDropzone } from 'react-dropzone';
|
17
|
-
import userAvatar from '../Messages/user_avatar.
|
17
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
18
18
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
19
19
|
|
20
20
|
const initialMenuItems = [
|
@@ -71,7 +71,8 @@ const messages: MessageProps[] = [
|
|
71
71
|
role: 'user',
|
72
72
|
content: 'Hello, can you give me an example of what you can do?',
|
73
73
|
name: 'User',
|
74
|
-
avatar: userAvatar
|
74
|
+
avatar: userAvatar,
|
75
|
+
avatarProps: { isBordered: true }
|
75
76
|
},
|
76
77
|
{
|
77
78
|
role: 'bot',
|
@@ -210,7 +211,7 @@ export const AttachmentMenuDemo: React.FunctionComponent = () => {
|
|
210
211
|
{/* this is required for react-dropzone to work in Safari and Firefox */}
|
211
212
|
<input {...getInputProps()} />
|
212
213
|
<ChatbotToggle
|
213
|
-
|
214
|
+
tooltipLabel="Chatbot"
|
214
215
|
isChatbotVisible={chatbotVisible}
|
215
216
|
onToggleChatbot={() => setChatbotVisible(!chatbotVisible)}
|
216
217
|
/>
|
@@ -38,7 +38,7 @@ import ChatbotHeader, {
|
|
38
38
|
import PFHorizontalLogoColor from '../UI/PF-HorizontalLogo-Color.svg';
|
39
39
|
import PFHorizontalLogoReverse from '../UI/PF-HorizontalLogo-Reverse.svg';
|
40
40
|
import { BarsIcon } from '@patternfly/react-icons';
|
41
|
-
import userAvatar from '../Messages/user_avatar.
|
41
|
+
import userAvatar from '../Messages/user_avatar.svg';
|
42
42
|
import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
|
43
43
|
|
44
44
|
const footnoteProps = {
|
@@ -110,7 +110,8 @@ const initialMessages: MessageProps[] = [
|
|
110
110
|
content: 'Hello, can you give me an example of what you can do?',
|
111
111
|
name: 'User',
|
112
112
|
avatar: userAvatar,
|
113
|
-
timestamp: date.toLocaleString()
|
113
|
+
timestamp: date.toLocaleString(),
|
114
|
+
avatarProps: { isBordered: true }
|
114
115
|
},
|
115
116
|
{
|
116
117
|
id: '2',
|
@@ -221,7 +222,8 @@ export const EmbeddedChatbotDemo: React.FunctionComponent = () => {
|
|
221
222
|
content: message,
|
222
223
|
name: 'User',
|
223
224
|
avatar: userAvatar,
|
224
|
-
timestamp: date.toLocaleString()
|
225
|
+
timestamp: date.toLocaleString(),
|
226
|
+
avatarProps: { isBordered: true }
|
225
227
|
});
|
226
228
|
newMessages.push({
|
227
229
|
id: generateId(),
|