@patternfly/chatbot 2.2.0-prerelease.20 → 2.2.0-prerelease.22
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/Message/Message.d.ts +3 -0
- package/dist/cjs/Message/Message.js +22 -5
- package/dist/cjs/Message/Message.test.js +94 -0
- package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
- package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
- package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
- package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
- package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
- package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
- package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
- package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
- package/dist/cjs/MessageBar/MessageBar.d.ts +4 -1
- package/dist/cjs/MessageBar/MessageBar.js +125 -39
- package/dist/css/main.css +59 -17
- package/dist/css/main.css.map +1 -1
- package/dist/esm/Message/Message.d.ts +3 -0
- package/dist/esm/Message/Message.js +22 -5
- package/dist/esm/Message/Message.test.js +94 -0
- package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
- package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
- package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
- package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
- package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
- package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
- package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
- package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
- package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
- package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
- package/dist/esm/MessageBar/MessageBar.d.ts +4 -1
- package/dist/esm/MessageBar/MessageBar.js +125 -39
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +27 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +27 -1
- package/src/Message/Message.test.tsx +99 -0
- package/src/Message/Message.tsx +25 -4
- package/src/Message/TableMessage/TableMessage.scss +23 -0
- package/src/Message/TableMessage/TableMessage.tsx +83 -0
- package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
- package/src/Message/TableMessage/TdMessage.tsx +11 -0
- package/src/Message/TableMessage/ThMessage.tsx +11 -0
- package/src/Message/TableMessage/TheadMessage.tsx +11 -0
- package/src/Message/TableMessage/TrMessage.tsx +27 -0
- package/src/Message/TextMessage/TextMessage.scss +5 -0
- package/src/MessageBar/MessageBar.scss +35 -18
- package/src/MessageBar/MessageBar.tsx +144 -53
- package/src/main.scss +1 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ExtraProps } from 'react-markdown';
|
3
|
+
import { TbodyProps } from '@patternfly/react-table';
|
4
|
+
declare const TbodyProps: ({ children, ...props }: TbodyProps & ExtraProps & {
|
5
|
+
extraHeaders?: string[];
|
6
|
+
}) => React.JSX.Element;
|
7
|
+
export default TbodyProps;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// ============================================================================
|
2
|
+
// Chatbot Main - Message - Content - Table
|
3
|
+
// ============================================================================
|
4
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
5
|
+
var t = {};
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
7
|
+
t[p] = s[p];
|
8
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
9
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
11
|
+
t[p[i]] = s[p[i]];
|
12
|
+
}
|
13
|
+
return t;
|
14
|
+
};
|
15
|
+
import React from 'react';
|
16
|
+
import { Tbody } from '@patternfly/react-table';
|
17
|
+
const TbodyProps = (_a) => {
|
18
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
19
|
+
// passthrough so we can place dataLabel on tds
|
20
|
+
const modifyChildren = (children) => {
|
21
|
+
if (children && props.extraHeaders) {
|
22
|
+
return React.Children.map(children, (child) => React.cloneElement(child, { extraHeaders: props.extraHeaders }));
|
23
|
+
}
|
24
|
+
return children;
|
25
|
+
};
|
26
|
+
return React.createElement(Tbody, Object.assign({}, props), modifyChildren(children));
|
27
|
+
};
|
28
|
+
export default TbodyProps;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// ============================================================================
|
2
|
+
// Chatbot Main - Message - Content - Table
|
3
|
+
// ============================================================================
|
4
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
5
|
+
var t = {};
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
7
|
+
t[p] = s[p];
|
8
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
9
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
11
|
+
t[p[i]] = s[p[i]];
|
12
|
+
}
|
13
|
+
return t;
|
14
|
+
};
|
15
|
+
import React from 'react';
|
16
|
+
import { Td } from '@patternfly/react-table';
|
17
|
+
const TdMessage = (_a) => {
|
18
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
19
|
+
return React.createElement(Td, Object.assign({}, props), children);
|
20
|
+
};
|
21
|
+
export default TdMessage;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// ============================================================================
|
2
|
+
// Chatbot Main - Message - Content - Table
|
3
|
+
// ============================================================================
|
4
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
5
|
+
var t = {};
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
7
|
+
t[p] = s[p];
|
8
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
9
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
11
|
+
t[p[i]] = s[p[i]];
|
12
|
+
}
|
13
|
+
return t;
|
14
|
+
};
|
15
|
+
import React from 'react';
|
16
|
+
import { Th } from '@patternfly/react-table';
|
17
|
+
const ThMessage = (_a) => {
|
18
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
19
|
+
return React.createElement(Th, Object.assign({}, props), children);
|
20
|
+
};
|
21
|
+
export default ThMessage;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// ============================================================================
|
2
|
+
// Chatbot Main - Message - Content - Table
|
3
|
+
// ============================================================================
|
4
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
5
|
+
var t = {};
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
7
|
+
t[p] = s[p];
|
8
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
9
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
11
|
+
t[p[i]] = s[p[i]];
|
12
|
+
}
|
13
|
+
return t;
|
14
|
+
};
|
15
|
+
import React from 'react';
|
16
|
+
import { Thead } from '@patternfly/react-table';
|
17
|
+
const TheadMessage = (_a) => {
|
18
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
19
|
+
return React.createElement(Thead, Object.assign({}, props), children);
|
20
|
+
};
|
21
|
+
export default TheadMessage;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ExtraProps } from 'react-markdown';
|
3
|
+
import { TrProps } from '@patternfly/react-table';
|
4
|
+
declare const TrMessage: ({ children, ...props }: TrProps & ExtraProps & {
|
5
|
+
extraHeaders?: string[];
|
6
|
+
}) => React.JSX.Element;
|
7
|
+
export default TrMessage;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
// ============================================================================
|
2
|
+
// Chatbot Main - Message - Content - Table
|
3
|
+
// ============================================================================
|
4
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
5
|
+
var t = {};
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
7
|
+
t[p] = s[p];
|
8
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
9
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
11
|
+
t[p[i]] = s[p[i]];
|
12
|
+
}
|
13
|
+
return t;
|
14
|
+
};
|
15
|
+
import React from 'react';
|
16
|
+
import { Tr } from '@patternfly/react-table';
|
17
|
+
const TrMessage = (_a) => {
|
18
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
19
|
+
let tdIndex = 0;
|
20
|
+
// passthrough so we can place dataLabel on tds
|
21
|
+
// places column name on correct child
|
22
|
+
const modifyChildren = (children) => React.Children.map(children, (child) => {
|
23
|
+
if (child.type.name === 'td' && props.extraHeaders) {
|
24
|
+
const clonedChild = React.cloneElement(child, { dataLabel: props.extraHeaders[tdIndex] });
|
25
|
+
tdIndex = tdIndex + 1;
|
26
|
+
return clonedChild;
|
27
|
+
}
|
28
|
+
return child;
|
29
|
+
});
|
30
|
+
return React.createElement(Tr, Object.assign({}, props), modifyChildren(children));
|
31
|
+
};
|
32
|
+
export default TrMessage;
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { ButtonProps, DropEvent } from '@patternfly/react-core';
|
3
|
+
import { ChatbotDisplayMode } from '../Chatbot';
|
3
4
|
export interface MessageBarWithAttachMenuProps {
|
4
5
|
/** Flag to enable whether attach menu is open */
|
5
6
|
isAttachMenuOpen: boolean;
|
@@ -66,7 +67,9 @@ export interface MessageBarProps {
|
|
66
67
|
};
|
67
68
|
};
|
68
69
|
/** A callback for when the text area value changes. */
|
69
|
-
onChange?: (event: React.ChangeEvent<
|
70
|
+
onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => void;
|
71
|
+
/** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
|
72
|
+
displayMode?: ChatbotDisplayMode;
|
70
73
|
}
|
71
74
|
export declare const MessageBar: React.FunctionComponent<MessageBarProps>;
|
72
75
|
export default MessageBar;
|
@@ -10,52 +10,144 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
10
10
|
return t;
|
11
11
|
};
|
12
12
|
import React from 'react';
|
13
|
+
import { TextArea } from '@patternfly/react-core';
|
13
14
|
// Import Chatbot components
|
14
15
|
import SendButton from './SendButton';
|
15
16
|
import MicrophoneButton from './MicrophoneButton';
|
16
17
|
import { AttachButton } from './AttachButton';
|
17
18
|
import AttachMenu from '../AttachMenu';
|
18
19
|
import StopButton from './StopButton';
|
19
|
-
import DOMPurify from 'dompurify';
|
20
20
|
export const MessageBar = (_a) => {
|
21
|
-
var { onSendMessage, className, alwayShowSendButton, hasAttachButton = true, hasMicrophoneButton, handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "hasAttachButton", "hasMicrophoneButton", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange"]);
|
21
|
+
var { onSendMessage, className, alwayShowSendButton, hasAttachButton = true, hasMicrophoneButton, handleAttach, attachMenuProps, isSendButtonDisabled, handleStopButton, hasStopButton, buttonProps, onChange, displayMode } = _a, props = __rest(_a, ["onSendMessage", "className", "alwayShowSendButton", "hasAttachButton", "hasMicrophoneButton", "handleAttach", "attachMenuProps", "isSendButtonDisabled", "handleStopButton", "hasStopButton", "buttonProps", "onChange", "displayMode"]);
|
22
22
|
// Text Input
|
23
23
|
// --------------------------------------------------------------------------
|
24
24
|
const [message, setMessage] = React.useState('');
|
25
25
|
const [isListeningMessage, setIsListeningMessage] = React.useState(false);
|
26
|
-
const [
|
26
|
+
const [hasSentMessage, setHasSentMessage] = React.useState(false);
|
27
27
|
const textareaRef = React.useRef(null);
|
28
28
|
const attachButtonRef = React.useRef(null);
|
29
|
-
const
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
const setInitialLineHeight = (field) => {
|
30
|
+
field.style.setProperty('line-height', '1rem');
|
31
|
+
const parent = field.parentElement;
|
32
|
+
if (parent) {
|
33
|
+
parent.style.setProperty('margin-top', `1rem`);
|
34
|
+
parent.style.setProperty('margin-bottom', `0rem`);
|
35
|
+
parent.style.setProperty('height', 'inherit');
|
36
|
+
const grandparent = parent.parentElement;
|
37
|
+
if (grandparent) {
|
38
|
+
grandparent.style.setProperty('flex-basis', 'auto');
|
39
|
+
}
|
37
40
|
}
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
};
|
42
|
+
const setAutoHeight = (field) => {
|
43
|
+
const parent = field.parentElement;
|
44
|
+
if (parent) {
|
45
|
+
parent.style.setProperty('height', 'inherit');
|
46
|
+
const computed = window.getComputedStyle(field);
|
47
|
+
// Calculate the height
|
48
|
+
const height = parseInt(computed.getPropertyValue('border-top-width')) +
|
49
|
+
parseInt(computed.getPropertyValue('padding-top')) +
|
50
|
+
field.scrollHeight +
|
51
|
+
parseInt(computed.getPropertyValue('padding-bottom')) +
|
52
|
+
parseInt(computed.getPropertyValue('border-bottom-width'));
|
53
|
+
parent.style.setProperty('height', `${height}px`);
|
54
|
+
if (height > 32 || window.innerWidth <= 507) {
|
55
|
+
parent.style.setProperty('margin-bottom', `1rem`);
|
56
|
+
parent.style.setProperty('margin-top', `1rem`);
|
44
57
|
}
|
45
|
-
setMessage(newMessage);
|
46
|
-
onChange && onChange(event, newMessage);
|
47
58
|
}
|
48
59
|
};
|
49
|
-
|
50
|
-
|
51
|
-
|
60
|
+
const textIsLongerThan2Lines = (field) => {
|
61
|
+
const lineHeight = parseFloat(window.getComputedStyle(field).lineHeight);
|
62
|
+
const lines = field.scrollHeight / lineHeight;
|
63
|
+
return lines > 2;
|
64
|
+
};
|
65
|
+
const setAutoWidth = (field) => {
|
66
|
+
const parent = field.parentElement;
|
67
|
+
if (parent) {
|
68
|
+
const grandparent = parent.parentElement;
|
69
|
+
if (textIsLongerThan2Lines(field) && grandparent) {
|
70
|
+
grandparent.style.setProperty('flex-basis', `100%`);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
};
|
74
|
+
const handleNewLine = (field) => {
|
75
|
+
const parent = field.parentElement;
|
76
|
+
if (parent) {
|
77
|
+
parent.style.setProperty('margin-bottom', `1rem`);
|
78
|
+
parent.style.setProperty('margin-top', `1rem`);
|
79
|
+
}
|
80
|
+
};
|
81
|
+
React.useEffect(() => {
|
82
|
+
const field = textareaRef.current;
|
83
|
+
if (field) {
|
84
|
+
if (field.value === '') {
|
85
|
+
if (window.innerWidth > 507) {
|
86
|
+
setInitialLineHeight(field);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
setAutoHeight(field);
|
91
|
+
setAutoWidth(field);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
const resetHeight = () => {
|
95
|
+
if (field) {
|
96
|
+
if (field.value === '') {
|
97
|
+
if (window.innerWidth > 507) {
|
98
|
+
setInitialLineHeight(field);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
else {
|
102
|
+
setAutoHeight(field);
|
103
|
+
setAutoWidth(field);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
};
|
107
|
+
window.addEventListener('resize', resetHeight);
|
108
|
+
return () => {
|
109
|
+
window.removeEventListener('resize', resetHeight);
|
110
|
+
};
|
111
|
+
}, []);
|
112
|
+
React.useEffect(() => {
|
113
|
+
const field = textareaRef.current;
|
114
|
+
if (field) {
|
115
|
+
if (field.value === '') {
|
116
|
+
setInitialLineHeight(textareaRef.current);
|
117
|
+
}
|
118
|
+
else {
|
119
|
+
setAutoHeight(textareaRef.current);
|
120
|
+
setAutoWidth(field);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}, [displayMode, message]);
|
124
|
+
React.useEffect(() => {
|
125
|
+
const field = textareaRef.current;
|
126
|
+
if (field) {
|
127
|
+
setInitialLineHeight(field);
|
128
|
+
setHasSentMessage(false);
|
129
|
+
}
|
130
|
+
}, [hasSentMessage]);
|
131
|
+
const handleChange = React.useCallback((event) => {
|
132
|
+
onChange && onChange(event, event.target.value);
|
52
133
|
if (textareaRef.current) {
|
53
|
-
|
54
|
-
|
55
|
-
|
134
|
+
if (event.target.value === '') {
|
135
|
+
setInitialLineHeight(textareaRef.current);
|
136
|
+
}
|
137
|
+
else {
|
138
|
+
setAutoHeight(textareaRef.current);
|
139
|
+
}
|
56
140
|
}
|
57
|
-
setMessage(
|
58
|
-
}, [
|
141
|
+
setMessage(event.target.value);
|
142
|
+
}, []);
|
143
|
+
// Handle sending message
|
144
|
+
const handleSend = React.useCallback(() => {
|
145
|
+
setMessage((m) => {
|
146
|
+
onSendMessage(m);
|
147
|
+
setHasSentMessage(true);
|
148
|
+
return '';
|
149
|
+
});
|
150
|
+
}, [onSendMessage]);
|
59
151
|
const handleKeyDown = React.useCallback((event) => {
|
60
152
|
if (event.key === 'Enter' && !event.shiftKey) {
|
61
153
|
event.preventDefault();
|
@@ -63,6 +155,11 @@ export const MessageBar = (_a) => {
|
|
63
155
|
handleSend();
|
64
156
|
}
|
65
157
|
}
|
158
|
+
if (event.key === 'Enter' && event.shiftKey) {
|
159
|
+
if (textareaRef.current) {
|
160
|
+
handleNewLine(textareaRef.current);
|
161
|
+
}
|
162
|
+
}
|
66
163
|
}, [handleSend, isSendButtonDisabled, handleStopButton]);
|
67
164
|
const handleAttachMenuToggle = () => {
|
68
165
|
(attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.setIsAttachMenuOpen) && (attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.setIsAttachMenuOpen(!(attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.isAttachMenuOpen)));
|
@@ -70,11 +167,6 @@ export const MessageBar = (_a) => {
|
|
70
167
|
};
|
71
168
|
const handleSpeechRecognition = (message) => {
|
72
169
|
setMessage(message);
|
73
|
-
const textarea = textareaRef.current;
|
74
|
-
if (textarea) {
|
75
|
-
textarea.focus();
|
76
|
-
textarea.textContent = DOMPurify.sanitize(message);
|
77
|
-
}
|
78
170
|
onChange && onChange({}, message);
|
79
171
|
};
|
80
172
|
const renderButtons = () => {
|
@@ -88,15 +180,9 @@ export const MessageBar = (_a) => {
|
|
88
180
|
hasMicrophoneButton && (React.createElement(MicrophoneButton, Object.assign({ isListening: isListeningMessage, onIsListeningChange: setIsListeningMessage, onSpeechRecognition: handleSpeechRecognition, tooltipContent: (_h = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _h === void 0 ? void 0 : _h.tooltipContent, language: (_j = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _j === void 0 ? void 0 : _j.language }, (_k = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.microphone) === null || _k === void 0 ? void 0 : _k.props))),
|
89
181
|
(alwayShowSendButton || message) && (React.createElement(SendButton, Object.assign({ value: message, onClick: handleSend, isDisabled: isSendButtonDisabled, tooltipContent: (_l = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _l === void 0 ? void 0 : _l.tooltipContent }, (_m = buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.send) === null || _m === void 0 ? void 0 : _m.props)))));
|
90
182
|
};
|
91
|
-
const placeholder = isListeningMessage ? 'Listening' : 'Send a message...';
|
92
183
|
const messageBarContents = (React.createElement(React.Fragment, null,
|
93
184
|
React.createElement("div", { className: "pf-chatbot__message-bar-input" },
|
94
|
-
|
95
|
-
React.createElement("div", Object.assign({ contentEditable: true, suppressContentEditableWarning: true, role: "textbox", "aria-multiline": "false", className: "pf-chatbot__message-textarea", onInput: handleInput, onFocus: () => setShowPlaceholder(false), onBlur: () => {
|
96
|
-
if (message === '') {
|
97
|
-
setShowPlaceholder(!showPlaceholder);
|
98
|
-
}
|
99
|
-
}, "aria-label": placeholder, ref: textareaRef, onKeyDown: handleKeyDown }, props))),
|
185
|
+
React.createElement(TextArea, Object.assign({ className: "pf-chatbot__message-textarea", value: message, onChange: handleChange, "aria-label": isListeningMessage ? 'Listening' : 'Send a message...', placeholder: isListeningMessage ? 'Listening' : 'Send a message...', ref: textareaRef, onKeyDown: handleKeyDown }, props))),
|
100
186
|
React.createElement("div", { className: "pf-chatbot__message-bar-actions" }, renderButtons())));
|
101
187
|
if (attachMenuProps) {
|
102
188
|
return (React.createElement(AttachMenu, Object.assign({ toggle: (toggleRef) => (React.createElement("div", { ref: toggleRef, className: `pf-chatbot__message-bar ${className !== null && className !== void 0 ? className : ''}` }, messageBarContents)), filteredItems: attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.attachMenuItems }, (attachMenuProps && { isOpen: attachMenuProps.isAttachMenuOpen }), { onOpenChange: (isAttachMenuOpen) => {
|
@@ -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/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"}
|
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/TableMessage/TableMessage.tsx","../src/Message/TableMessage/TbodyMessage.tsx","../src/Message/TableMessage/TdMessage.tsx","../src/Message/TableMessage/ThMessage.tsx","../src/Message/TableMessage/TheadMessage.tsx","../src/Message/TableMessage/TrMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/Message/UserFeedback/CloseButton.tsx","../src/Message/UserFeedback/UserFeedback.test.tsx","../src/Message/UserFeedback/UserFeedback.tsx","../src/Message/UserFeedback/UserFeedbackComplete.test.tsx","../src/Message/UserFeedback/UserFeedbackComplete.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.test.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.test.tsx","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.test.tsx","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/Settings/SettingsForm.test.tsx","../src/Settings/SettingsForm.tsx","../src/Settings/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts"],"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.
|
3
|
+
"version": "2.2.0-prerelease.22",
|
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",
|
@@ -28,6 +28,8 @@ export const BotMessageExample: React.FunctionComponent = () => {
|
|
28
28
|
return inlineCode;
|
29
29
|
case 'link':
|
30
30
|
return link;
|
31
|
+
case 'table':
|
32
|
+
return table;
|
31
33
|
default:
|
32
34
|
return;
|
33
35
|
}
|
@@ -125,6 +127,15 @@ _Italic text, formatted with single underscores_
|
|
125
127
|
|
126
128
|
const inlineCode = `Here is an inline code - \`() => void\``;
|
127
129
|
|
130
|
+
const table = `To customize your table, you can use [PatternFly TableProps](/components/table#table)
|
131
|
+
|
132
|
+
| Version | GA date | User role
|
133
|
+
|-|-|-|
|
134
|
+
| 2.5 | September 30, 2024 | Administrator |
|
135
|
+
| 2.5 | June 27, 2023 | Editor |
|
136
|
+
| 3.0 | April 1, 2025 | Administrator
|
137
|
+
`;
|
138
|
+
|
128
139
|
return (
|
129
140
|
<>
|
130
141
|
<Message name="Bot" role="bot" avatar={patternflyAvatar} content={`Text-based message from a bot named "Bot"`} />
|
@@ -216,9 +227,24 @@ _Italic text, formatted with single underscores_
|
|
216
227
|
label="More complex list"
|
217
228
|
id="more-complex-list"
|
218
229
|
/>
|
230
|
+
<Radio
|
231
|
+
isChecked={variant === 'table'}
|
232
|
+
onChange={() => setVariant('table')}
|
233
|
+
name="bot-message-type"
|
234
|
+
label="Table"
|
235
|
+
id="table"
|
236
|
+
/>
|
219
237
|
</FormGroup>
|
220
238
|
</Form>
|
221
|
-
<Message
|
239
|
+
<Message
|
240
|
+
name="Bot"
|
241
|
+
role="bot"
|
242
|
+
avatar={patternflyAvatar}
|
243
|
+
content={renderContent()}
|
244
|
+
tableProps={
|
245
|
+
variant === 'table' ? { 'aria-label': 'App information and user roles for bot messages' } : undefined
|
246
|
+
}
|
247
|
+
/>
|
222
248
|
</>
|
223
249
|
);
|
224
250
|
};
|
@@ -28,6 +28,8 @@ export const UserMessageExample: React.FunctionComponent = () => {
|
|
28
28
|
return moreComplexList;
|
29
29
|
case 'link':
|
30
30
|
return link;
|
31
|
+
case 'table':
|
32
|
+
return table;
|
31
33
|
default:
|
32
34
|
return;
|
33
35
|
}
|
@@ -125,6 +127,15 @@ _Italic text, formatted with single underscores_
|
|
125
127
|
|
126
128
|
const inlineCode = `Here is an inline code - \`() => void\``;
|
127
129
|
|
130
|
+
const table = `To customize your table, you can use [PatternFly TableProps](/components/table#table)
|
131
|
+
|
132
|
+
| Version | GA date | User role
|
133
|
+
|-|-|-|
|
134
|
+
| 2.5 | September 30, 2024 | Administrator |
|
135
|
+
| 2.5 | June 27, 2023 | Editor |
|
136
|
+
| 3.0 | April 1, 2025 | Administrator
|
137
|
+
`;
|
138
|
+
|
128
139
|
return (
|
129
140
|
<>
|
130
141
|
<Message
|
@@ -206,9 +217,24 @@ _Italic text, formatted with single underscores_
|
|
206
217
|
label="More complex list"
|
207
218
|
id="user-more-complex-list"
|
208
219
|
/>
|
220
|
+
<Radio
|
221
|
+
isChecked={variant === 'table'}
|
222
|
+
onChange={() => setVariant('table')}
|
223
|
+
name="user-message-type"
|
224
|
+
label="Table"
|
225
|
+
id="user-table"
|
226
|
+
/>
|
209
227
|
</FormGroup>
|
210
228
|
</Form>
|
211
|
-
<Message
|
229
|
+
<Message
|
230
|
+
name="User"
|
231
|
+
role="user"
|
232
|
+
content={renderContent()}
|
233
|
+
avatar={userAvatar}
|
234
|
+
tableProps={
|
235
|
+
variant === 'table' ? { 'aria-label': 'App information and user roles for user messages' } : undefined
|
236
|
+
}
|
237
|
+
/>
|
212
238
|
</>
|
213
239
|
);
|
214
240
|
};
|