@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.
Files changed (53) hide show
  1. package/dist/cjs/Message/Message.d.ts +3 -0
  2. package/dist/cjs/Message/Message.js +22 -5
  3. package/dist/cjs/Message/Message.test.js +94 -0
  4. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
  5. package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
  6. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
  7. package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
  8. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
  9. package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
  10. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
  11. package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
  12. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
  13. package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
  14. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
  15. package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
  16. package/dist/cjs/MessageBar/MessageBar.d.ts +4 -1
  17. package/dist/cjs/MessageBar/MessageBar.js +125 -39
  18. package/dist/css/main.css +59 -17
  19. package/dist/css/main.css.map +1 -1
  20. package/dist/esm/Message/Message.d.ts +3 -0
  21. package/dist/esm/Message/Message.js +22 -5
  22. package/dist/esm/Message/Message.test.js +94 -0
  23. package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
  24. package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
  25. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
  26. package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
  27. package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
  28. package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
  29. package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
  30. package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
  31. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
  32. package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
  33. package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
  34. package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
  35. package/dist/esm/MessageBar/MessageBar.d.ts +4 -1
  36. package/dist/esm/MessageBar/MessageBar.js +125 -39
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +1 -1
  39. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +27 -1
  40. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +27 -1
  41. package/src/Message/Message.test.tsx +99 -0
  42. package/src/Message/Message.tsx +25 -4
  43. package/src/Message/TableMessage/TableMessage.scss +23 -0
  44. package/src/Message/TableMessage/TableMessage.tsx +83 -0
  45. package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
  46. package/src/Message/TableMessage/TdMessage.tsx +11 -0
  47. package/src/Message/TableMessage/ThMessage.tsx +11 -0
  48. package/src/Message/TableMessage/TheadMessage.tsx +11 -0
  49. package/src/Message/TableMessage/TrMessage.tsx +27 -0
  50. package/src/Message/TextMessage/TextMessage.scss +5 -0
  51. package/src/MessageBar/MessageBar.scss +35 -18
  52. package/src/MessageBar/MessageBar.tsx +144 -53
  53. package/src/main.scss +1 -0
@@ -16,52 +16,144 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.MessageBar = void 0;
18
18
  const react_1 = __importDefault(require("react"));
19
+ const react_core_1 = require("@patternfly/react-core");
19
20
  // Import Chatbot components
20
21
  const SendButton_1 = __importDefault(require("./SendButton"));
21
22
  const MicrophoneButton_1 = __importDefault(require("./MicrophoneButton"));
22
23
  const AttachButton_1 = require("./AttachButton");
23
24
  const AttachMenu_1 = __importDefault(require("../AttachMenu"));
24
25
  const StopButton_1 = __importDefault(require("./StopButton"));
25
- const dompurify_1 = __importDefault(require("dompurify"));
26
26
  const MessageBar = (_a) => {
27
- 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"]);
27
+ 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"]);
28
28
  // Text Input
29
29
  // --------------------------------------------------------------------------
30
30
  const [message, setMessage] = react_1.default.useState('');
31
31
  const [isListeningMessage, setIsListeningMessage] = react_1.default.useState(false);
32
- const [showPlaceholder, setShowPlaceholder] = react_1.default.useState(true);
32
+ const [hasSentMessage, setHasSentMessage] = react_1.default.useState(false);
33
33
  const textareaRef = react_1.default.useRef(null);
34
34
  const attachButtonRef = react_1.default.useRef(null);
35
- const handleInput = (event) => {
36
- // newMessage === '' doesn't work unless we trim, which causes other problems
37
- // textContent seems to work, but doesn't allow for markdown, so we need both
38
- const messageText = dompurify_1.default.sanitize(event.target.textContent);
39
- if (messageText === '') {
40
- setShowPlaceholder(true);
41
- setMessage('');
42
- onChange && onChange(event, '');
35
+ const setInitialLineHeight = (field) => {
36
+ field.style.setProperty('line-height', '1rem');
37
+ const parent = field.parentElement;
38
+ if (parent) {
39
+ parent.style.setProperty('margin-top', `1rem`);
40
+ parent.style.setProperty('margin-bottom', `0rem`);
41
+ parent.style.setProperty('height', 'inherit');
42
+ const grandparent = parent.parentElement;
43
+ if (grandparent) {
44
+ grandparent.style.setProperty('flex-basis', 'auto');
45
+ }
43
46
  }
44
- else {
45
- setShowPlaceholder(false);
46
- // this is so that tests work; RTL doesn't seem to like event.target.innerText, but browsers don't pick up markdown without it
47
- let newMessage = messageText;
48
- if (event.target.innerText) {
49
- newMessage = dompurify_1.default.sanitize(event.target.innerText);
47
+ };
48
+ const setAutoHeight = (field) => {
49
+ const parent = field.parentElement;
50
+ if (parent) {
51
+ parent.style.setProperty('height', 'inherit');
52
+ const computed = window.getComputedStyle(field);
53
+ // Calculate the height
54
+ const height = parseInt(computed.getPropertyValue('border-top-width')) +
55
+ parseInt(computed.getPropertyValue('padding-top')) +
56
+ field.scrollHeight +
57
+ parseInt(computed.getPropertyValue('padding-bottom')) +
58
+ parseInt(computed.getPropertyValue('border-bottom-width'));
59
+ parent.style.setProperty('height', `${height}px`);
60
+ if (height > 32 || window.innerWidth <= 507) {
61
+ parent.style.setProperty('margin-bottom', `1rem`);
62
+ parent.style.setProperty('margin-top', `1rem`);
50
63
  }
51
- setMessage(newMessage);
52
- onChange && onChange(event, newMessage);
53
64
  }
54
65
  };
55
- // Handle sending message
56
- const handleSend = react_1.default.useCallback(() => {
57
- onSendMessage(message);
66
+ const textIsLongerThan2Lines = (field) => {
67
+ const lineHeight = parseFloat(window.getComputedStyle(field).lineHeight);
68
+ const lines = field.scrollHeight / lineHeight;
69
+ return lines > 2;
70
+ };
71
+ const setAutoWidth = (field) => {
72
+ const parent = field.parentElement;
73
+ if (parent) {
74
+ const grandparent = parent.parentElement;
75
+ if (textIsLongerThan2Lines(field) && grandparent) {
76
+ grandparent.style.setProperty('flex-basis', `100%`);
77
+ }
78
+ }
79
+ };
80
+ const handleNewLine = (field) => {
81
+ const parent = field.parentElement;
82
+ if (parent) {
83
+ parent.style.setProperty('margin-bottom', `1rem`);
84
+ parent.style.setProperty('margin-top', `1rem`);
85
+ }
86
+ };
87
+ react_1.default.useEffect(() => {
88
+ const field = textareaRef.current;
89
+ if (field) {
90
+ if (field.value === '') {
91
+ if (window.innerWidth > 507) {
92
+ setInitialLineHeight(field);
93
+ }
94
+ }
95
+ else {
96
+ setAutoHeight(field);
97
+ setAutoWidth(field);
98
+ }
99
+ }
100
+ const resetHeight = () => {
101
+ if (field) {
102
+ if (field.value === '') {
103
+ if (window.innerWidth > 507) {
104
+ setInitialLineHeight(field);
105
+ }
106
+ }
107
+ else {
108
+ setAutoHeight(field);
109
+ setAutoWidth(field);
110
+ }
111
+ }
112
+ };
113
+ window.addEventListener('resize', resetHeight);
114
+ return () => {
115
+ window.removeEventListener('resize', resetHeight);
116
+ };
117
+ }, []);
118
+ react_1.default.useEffect(() => {
119
+ const field = textareaRef.current;
120
+ if (field) {
121
+ if (field.value === '') {
122
+ setInitialLineHeight(textareaRef.current);
123
+ }
124
+ else {
125
+ setAutoHeight(textareaRef.current);
126
+ setAutoWidth(field);
127
+ }
128
+ }
129
+ }, [displayMode, message]);
130
+ react_1.default.useEffect(() => {
131
+ const field = textareaRef.current;
132
+ if (field) {
133
+ setInitialLineHeight(field);
134
+ setHasSentMessage(false);
135
+ }
136
+ }, [hasSentMessage]);
137
+ const handleChange = react_1.default.useCallback((event) => {
138
+ onChange && onChange(event, event.target.value);
58
139
  if (textareaRef.current) {
59
- textareaRef.current.innerText = '';
60
- setShowPlaceholder(true);
61
- textareaRef.current.blur();
140
+ if (event.target.value === '') {
141
+ setInitialLineHeight(textareaRef.current);
142
+ }
143
+ else {
144
+ setAutoHeight(textareaRef.current);
145
+ }
62
146
  }
63
- setMessage('');
64
- }, [onSendMessage, message]);
147
+ setMessage(event.target.value);
148
+ }, []);
149
+ // Handle sending message
150
+ const handleSend = react_1.default.useCallback(() => {
151
+ setMessage((m) => {
152
+ onSendMessage(m);
153
+ setHasSentMessage(true);
154
+ return '';
155
+ });
156
+ }, [onSendMessage]);
65
157
  const handleKeyDown = react_1.default.useCallback((event) => {
66
158
  if (event.key === 'Enter' && !event.shiftKey) {
67
159
  event.preventDefault();
@@ -69,6 +161,11 @@ const MessageBar = (_a) => {
69
161
  handleSend();
70
162
  }
71
163
  }
164
+ if (event.key === 'Enter' && event.shiftKey) {
165
+ if (textareaRef.current) {
166
+ handleNewLine(textareaRef.current);
167
+ }
168
+ }
72
169
  }, [handleSend, isSendButtonDisabled, handleStopButton]);
73
170
  const handleAttachMenuToggle = () => {
74
171
  (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)));
@@ -76,11 +173,6 @@ const MessageBar = (_a) => {
76
173
  };
77
174
  const handleSpeechRecognition = (message) => {
78
175
  setMessage(message);
79
- const textarea = textareaRef.current;
80
- if (textarea) {
81
- textarea.focus();
82
- textarea.textContent = dompurify_1.default.sanitize(message);
83
- }
84
176
  onChange && onChange({}, message);
85
177
  };
86
178
  const renderButtons = () => {
@@ -94,15 +186,9 @@ const MessageBar = (_a) => {
94
186
  hasMicrophoneButton && (react_1.default.createElement(MicrophoneButton_1.default, 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))),
95
187
  (alwayShowSendButton || message) && (react_1.default.createElement(SendButton_1.default, 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)))));
96
188
  };
97
- const placeholder = isListeningMessage ? 'Listening' : 'Send a message...';
98
189
  const messageBarContents = (react_1.default.createElement(react_1.default.Fragment, null,
99
190
  react_1.default.createElement("div", { className: "pf-chatbot__message-bar-input" },
100
- (showPlaceholder || message === '') && (react_1.default.createElement("div", { className: "pf-chatbot__message-bar-placeholder" }, placeholder)),
101
- react_1.default.createElement("div", Object.assign({ contentEditable: true, suppressContentEditableWarning: true, role: "textbox", "aria-multiline": "false", className: "pf-chatbot__message-textarea", onInput: handleInput, onFocus: () => setShowPlaceholder(false), onBlur: () => {
102
- if (message === '') {
103
- setShowPlaceholder(!showPlaceholder);
104
- }
105
- }, "aria-label": placeholder, ref: textareaRef, onKeyDown: handleKeyDown }, props))),
191
+ react_1.default.createElement(react_core_1.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))),
106
192
  react_1.default.createElement("div", { className: "pf-chatbot__message-bar-actions" }, renderButtons())));
107
193
  if (attachMenuProps) {
108
194
  return (react_1.default.createElement(AttachMenu_1.default, Object.assign({ toggle: (toggleRef) => (react_1.default.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) => {
package/dist/css/main.css CHANGED
@@ -1091,6 +1091,10 @@
1091
1091
  display: inline-block;
1092
1092
  }
1093
1093
 
1094
+ .pf-chatbot__message-and-actions:has(.pf-chatbot__message-table) {
1095
+ width: 100%;
1096
+ }
1097
+
1094
1098
  .pf-chatbot__message-text {
1095
1099
  width: fit-content;
1096
1100
  padding: var(--pf-t--global--spacer--sm) 0 var(--pf-t--global--spacer--sm) 0;
@@ -1192,6 +1196,10 @@
1192
1196
  display: inline-block;
1193
1197
  }
1194
1198
 
1199
+ .pf-chatbot__message-and-actions:has(.pf-chatbot__message-table) {
1200
+ width: 100%;
1201
+ }
1202
+
1195
1203
  .pf-chatbot__message-text {
1196
1204
  width: fit-content;
1197
1205
  padding: var(--pf-t--global--spacer--sm) 0 var(--pf-t--global--spacer--sm) 0;
@@ -1245,6 +1253,26 @@
1245
1253
  padding: var(--pf-t--global--spacer--sm);
1246
1254
  }
1247
1255
 
1256
+ .pf-chatbot__message-table {
1257
+ border-radius: var(--pf-t--global--border--radius--small);
1258
+ --pf-v6-c-table--BackgroundColor: var(--pf-t--global--background--color--tertiary--default);
1259
+ --pf-v6-c-table--BorderColor: var(--pf-t--global--border--color--default);
1260
+ padding: 0 var(--pf-t--global--spacer--lg) 0 var(--pf-t--global--spacer--lg);
1261
+ }
1262
+ .pf-chatbot__message-table.pf-m-grid.pf-v6-c-table tbody:where(.pf-v6-c-table__tbody):first-of-type {
1263
+ border-block-start: 0;
1264
+ }
1265
+ .pf-chatbot__message-table tbody {
1266
+ border-radius: var(--pf-t--global--border--radius--small);
1267
+ }
1268
+ .pf-chatbot__message-table tr {
1269
+ --pf-v6-c-table__tr--responsive--PaddingInlineEnd: 0;
1270
+ --pf-v6-c-table__tr--responsive--PaddingInlineStart: 0;
1271
+ }
1272
+ .pf-chatbot__message-table .pf-v6-c-table__tr:last-of-type {
1273
+ border-block-end: 0;
1274
+ }
1275
+
1248
1276
  .pf-chatbot__message-loading {
1249
1277
  width: 36px;
1250
1278
  padding: var(--pf-t--global--spacer--sm);
@@ -1543,25 +1571,15 @@
1543
1571
  }
1544
1572
  .pf-chatbot__message-bar-input {
1545
1573
  flex: 1 1 auto;
1546
- padding-block-start: var(--pf-chatbot__message-bar-child--PaddingBlockStart);
1547
- padding-block-end: var(--pf-chatbot__message-bar-child--PaddingBlockEnd);
1548
- overflow: hidden;
1549
- position: relative;
1550
- }
1551
- .pf-chatbot__message-bar-placeholder {
1552
- position: absolute;
1553
- top: 20px;
1554
- left: 16px;
1555
- color: var(--pf-t--global--text--color--placeholder);
1556
- pointer-events: none;
1557
- font-size: var(--pf-t--chatbot--font-size);
1574
+ padding-block-start: var(--pf-t--global--spacer--sm);
1575
+ padding-block-end: var(--pf-t--global--spacer--sm);
1558
1576
  }
1559
1577
 
1560
1578
  .pf-chatbot__message-textarea {
1561
- padding-block-start: var(--pf-t--global--spacer--md);
1562
- padding-block-end: var(--pf-t--global--spacer--md);
1563
- padding-inline-start: var(--pf-t--global--spacer--md);
1564
- padding-inline-end: var(--pf-t--global--spacer--md);
1579
+ --pf-v6-c-form-control--before--BorderStyle: none;
1580
+ --pf-v6-c-form-control--after--BorderStyle: none;
1581
+ resize: none;
1582
+ background-color: transparent;
1565
1583
  font-size: var(--pf-t--global--font--size--md);
1566
1584
  line-height: 1.5rem;
1567
1585
  max-height: 12rem;
@@ -1572,7 +1590,31 @@
1572
1590
  height: 100%;
1573
1591
  width: 100%;
1574
1592
  display: block !important;
1575
- position: relative;
1593
+ }
1594
+ .pf-chatbot__message-textarea .pf-v6-c-form-control__textarea:focus-visible {
1595
+ outline: none;
1596
+ }
1597
+ .pf-chatbot__message-textarea textarea {
1598
+ outline-offset: 0px;
1599
+ --pf-v6-c-form-control--PaddingBlockStart: 0;
1600
+ --pf-v6-c-form-control--PaddingBlockEnd: 0;
1601
+ --pf-v6-c-form-control--BorderRadius: 0;
1602
+ }
1603
+ .pf-chatbot__message-textarea textarea:focus-visible {
1604
+ outline: none;
1605
+ }
1606
+
1607
+ @media screen and (max-width: 359px) {
1608
+ .pf-chatbot__message-textarea {
1609
+ margin-top: var(--pf-t--global--spacer--md) !important;
1610
+ margin-bottom: var(--pf-t--global--spacer--md) !important;
1611
+ }
1612
+ }
1613
+ @media screen and (max-width: 415px) {
1614
+ .pf-chatbot--embedded .pf-chatbot__message-textarea {
1615
+ margin-top: var(--pf-t--global--spacer--md) !important;
1616
+ margin-bottom: var(--pf-t--global--spacer--md) !important;
1617
+ }
1576
1618
  }
1577
1619
 
1578
1620
  .pf-chatbot__jump {
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AC1GF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAGI;AAAA;IACE;IACA;;;ACpBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AAQF;EACE;;AACA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AASF;AAAA;AAAA;EACE;;;ACvLN;EACE;;AAEA;EACE;EACA;;;ACHJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EAGI;AAAA;IACE;;EACA;AAAA;IACE;;EAGJ;AAAA;IACE;IACA;IACA;;;AASJ;EACE;;;AC5CJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AASJ;EACE;;;AAOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAOJ;EACE;;;AAOJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;ACvIF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;;AAEF;EACE;;;AAOJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAGJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAOJ;EACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAQE;EACE;;;AAQN;EACE;;;ACvFA;EAA0B;;AAMxB;EAAM;;AACN;EAAuB;;AACvB;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACnBN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;;AC3BF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;AC1CN;EACE;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;;AASA;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AClFF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AAEA;EALF;IAMI;;;AAGF;EACE;;AAEA;EAHF;IAII;;;;AAKN;EACE;;AAEA;EACE;;AAGF;EACE;;AAIA;EADF;IAEI;;;;AAIN;EACE;;AAEA;EAHF;IAII;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;;;;ACrEJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;ACvBF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;EAEE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;;AAGF;EACE;;;AAIJ;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAKF;EACE;;;AAMF;AAAA;EACE;;;AC/DJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EANF;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;EACA;;;AAME;EADF;IAEI;IACA;IACA;;EAEA;IACE;;;;AChDR;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AC7FF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AC9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;ADzCN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;ACxCN;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAKF;AAAA;EAEE;EACA;EACA;;;AHnBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AIjDN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAKA;EACE;;;AAOF;EACE;;;ACnBJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EAPF;IAQI;;;AAKF;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;AC7BJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AChDF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AC5BR;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AC1CJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;EAEE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC/CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;ACrBR;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACzEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AC9CJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EAVF;IAWI;;;AAGF;EAdF;IAeI;;;;AAIJ;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAGI;AAAA;IACE;IACA;;;ADtCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AEhDJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1BF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;ACrER;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AC9BA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;IACE;IACA;;;;AAKN;AAAA;EAGE;;AAGE;AAAA;EACE;;AAIJ;AAAA;EACE;;;AC9BJ;EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASA;EACA;EAEA;EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EAKA;EAEA;EACA;EACA;EAEA;EAEA;;;AAMF;EACE;EACA;EAEA;EAEA;EACA;;;AAGF;EACE;EACA","file":"main.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/TableMessage/TableMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AC1GF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAGI;AAAA;IACE;IACA;;;ACpBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AAQF;EACE;;AACA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AASF;AAAA;AAAA;EACE;;;ACvLN;EACE;;AAEA;EACE;EACA;;;ACHJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EAGI;AAAA;IACE;;EACA;AAAA;IACE;;EAGJ;AAAA;IACE;IACA;IACA;;;AASJ;EACE;;;AC5CJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AASJ;EACE;;;AAOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAOJ;EACE;;;AAOJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;ACvIF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;;AAEF;EACE;;;AAOJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAGJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAOJ;EACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAQE;EACE;;;AAQN;EACE;;;ACvFA;EAA0B;;AAMxB;EAAM;;AACN;EAAuB;;AACvB;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACnBN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;;AC3BF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;AC1CN;EACE;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;;AASA;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AClFF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AAEA;EALF;IAMI;;;AAGF;EACE;;AAEA;EAHF;IAII;;;;AAKN;EACE;;AAEA;EACE;;AAGF;EACE;;AAIA;EADF;IAEI;;;;AAIN;EACE;;AAEA;EAHF;IAII;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;;;;ACrEJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;ACvBF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;EAEE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;;AAGF;EACE;;;AAIJ;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAKF;EACE;;;AAMF;AAAA;EACE;;;AC/DJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EANF;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;EACA;;;AAME;EADF;IAEI;IACA;IACA;;EAEA;IACE;;;;AChDR;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AC7FF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AC9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;AD9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;AC7CN;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAKF;AAAA;EAEE;EACA;EACA;;;ACtBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AJjBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AKjDN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAKA;EACE;;;AAOF;EACE;;;ACnBJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EAPF;IAQI;;;AAKF;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;AC7BJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AChDF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AC5BR;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AC1CJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;EAEE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC/CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;ACrBR;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;ACxFN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AC9CJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EAVF;IAWI;;;AAGF;EAdF;IAeI;;;;AAIJ;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAGI;AAAA;IACE;IACA;;;ADtCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AEhDJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1BF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;ACrER;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AC9BA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;IACE;IACA;;;;AAKN;AAAA;EAGE;;AAGE;AAAA;EACE;;AAIJ;AAAA;EACE;;;AC7BJ;EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASA;EACA;EAEA;EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EAKA;EAEA;EACA;EACA;EAEA;EAEA;;;AAMF;EACE;EACA;EAEA;EAEA;EACA;;;AAGF;EACE;EACA","file":"main.css"}
@@ -6,6 +6,7 @@ import { QuickStart, QuickstartAction } from './QuickStarts/types';
6
6
  import QuickResponse from './QuickResponse/QuickResponse';
7
7
  import { UserFeedbackProps } from './UserFeedback/UserFeedback';
8
8
  import { UserFeedbackCompleteProps } from './UserFeedback/UserFeedbackComplete';
9
+ import { TableProps } from '@patternfly/react-table';
9
10
  export interface MessageAttachment {
10
11
  /** Name of file attached to the message */
11
12
  name: string;
@@ -84,6 +85,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
84
85
  isLiveRegion?: boolean;
85
86
  /** Ref applied to message */
86
87
  innerRef?: React.Ref<HTMLDivElement>;
88
+ /** Props for table message. It is important to include a detailed aria-label that describes the purpose of the table. */
89
+ tableProps?: Required<Pick<TableProps, 'aria-label'>> & TableProps;
87
90
  }
88
91
  export declare const MessageBase: React.FunctionComponent<MessageProps>;
89
92
  declare const Message: React.ForwardRefExoticComponent<Omit<MessageProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -29,8 +29,14 @@ import QuickStartTile from './QuickStarts/QuickStartTile';
29
29
  import QuickResponse from './QuickResponse/QuickResponse';
30
30
  import UserFeedback from './UserFeedback/UserFeedback';
31
31
  import UserFeedbackComplete from './UserFeedback/UserFeedbackComplete';
32
+ import TableMessage from './TableMessage/TableMessage';
33
+ import TrMessage from './TableMessage/TrMessage';
34
+ import TdMessage from './TableMessage/TdMessage';
35
+ import TbodyMessage from './TableMessage/TbodyMessage';
36
+ import TheadMessage from './TableMessage/TheadMessage';
37
+ import ThMessage from './TableMessage/ThMessage';
32
38
  export const MessageBase = (_a) => {
33
- var { role, content, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef } = _a, props = __rest(_a, ["role", "content", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef"]);
39
+ var { role, content, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef, tableProps } = _a, props = __rest(_a, ["role", "content", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef", "tableProps"]);
34
40
  let avatarClassName;
35
41
  if (avatarProps && 'className' in avatarProps) {
36
42
  const { className } = avatarProps, rest = __rest(avatarProps, ["className"]);
@@ -56,16 +62,27 @@ export const MessageBase = (_a) => {
56
62
  var { children } = _a, props = __rest(_a, ["children"]);
57
63
  return (React.createElement(CodeBlockMessage, Object.assign({}, props, codeBlockProps), children));
58
64
  },
59
- ul: UnorderedListMessage,
60
- ol: (props) => React.createElement(OrderedListMessage, Object.assign({}, props)),
61
- li: ListItemMessage,
62
65
  h1: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h1 }, props)),
63
66
  h2: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h2 }, props)),
64
67
  h3: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h3 }, props)),
65
68
  h4: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h4 }, props)),
66
69
  h5: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h5 }, props)),
67
70
  h6: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.h6 }, props)),
68
- blockquote: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.blockquote }, props))
71
+ blockquote: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.blockquote }, props)),
72
+ ul: (props) => React.createElement(UnorderedListMessage, Object.assign({}, props)),
73
+ ol: (props) => React.createElement(OrderedListMessage, Object.assign({}, props)),
74
+ li: (props) => React.createElement(ListItemMessage, Object.assign({}, props)),
75
+ table: (props) => React.createElement(TableMessage, Object.assign({}, props, tableProps)),
76
+ tbody: (props) => React.createElement(TbodyMessage, Object.assign({}, props)),
77
+ thead: (props) => React.createElement(TheadMessage, Object.assign({}, props)),
78
+ tr: (props) => React.createElement(TrMessage, Object.assign({}, props)),
79
+ td: (props) => {
80
+ // Conflicts with Td type
81
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
82
+ const { width } = props, rest = __rest(props, ["width"]);
83
+ return React.createElement(TdMessage, Object.assign({}, rest));
84
+ },
85
+ th: (props) => React.createElement(ThMessage, Object.assign({}, props))
69
86
  }, remarkPlugins: [remarkGfm] }, content)),
70
87
  !isLoading && sources && React.createElement(SourcesCard, Object.assign({}, sources)),
71
88
  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 })),
@@ -88,6 +88,50 @@ const HEADING = `
88
88
  const BLOCK_QUOTES = `> Blockquotes can also be nested...
89
89
  >> ...by using additional greater-than signs (>) right next to each other...
90
90
  > > > ...or with spaces between each sign.`;
91
+ const TABLE = `
92
+
93
+ | Column 1 | Column 2 |
94
+ |-|-|
95
+ | Cell 1 | Cell 2 |
96
+ | Cell 3 | Cell 4 |
97
+
98
+ `;
99
+ const ONE_COLUMN_TABLE = `
100
+
101
+ | Column 1 |
102
+ |-|
103
+ | Cell 1 |
104
+ | Cell 2 |
105
+
106
+ `;
107
+ const ONE_CELL_TABLE = `
108
+
109
+ | Column 1 |
110
+ |-|
111
+ | Cell 1 |
112
+
113
+ `;
114
+ const HEADERLESS_TABLE = `
115
+
116
+ | |
117
+ |-|
118
+ | Cell 1 |
119
+
120
+ `;
121
+ const CHILDLESS_TABLE = `
122
+
123
+ | Column 1 |
124
+ |-|
125
+ | |
126
+
127
+ `;
128
+ const EMPTY_TABLE = `
129
+
130
+ | |
131
+ |-|
132
+ | |
133
+
134
+ `;
91
135
  const checkListItemsRendered = () => {
92
136
  const items = ['Item 1', 'Item 2', 'Item 3'];
93
137
  expect(screen.getAllByRole('listitem')).toHaveLength(3);
@@ -413,4 +457,54 @@ describe('Message', () => {
413
457
  expect(screen.getByRole('heading', { name: /h5 Heading/i })).toBeTruthy();
414
458
  expect(screen.getByRole('heading', { name: /h6 Heading/i })).toBeTruthy();
415
459
  });
460
+ it('should render table correctly', () => {
461
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: TABLE }));
462
+ expect(screen.getByRole('row', { name: /Column 1 Column 2/i })).toBeTruthy();
463
+ expect(screen.getByRole('row', { name: /Cell 1 Cell 2/i })).toBeTruthy();
464
+ expect(screen.getByRole('row', { name: /Cell 3 Cell 4/i })).toBeTruthy();
465
+ expect(screen.getByRole('columnheader', { name: /Column 1/i })).toBeTruthy();
466
+ expect(screen.getByRole('columnheader', { name: /Column 2/i })).toBeTruthy();
467
+ expect(screen.getByRole('cell', { name: /Cell 1/i })).toBeTruthy();
468
+ expect(screen.getByRole('cell', { name: /Cell 2/i })).toBeTruthy();
469
+ expect(screen.getByRole('cell', { name: /Cell 3/i })).toBeTruthy();
470
+ expect(screen.getByRole('cell', { name: /Cell 4/i })).toBeTruthy();
471
+ });
472
+ it('should render table data labels correctly for mobile breakpoint', () => {
473
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: TABLE }));
474
+ expect(screen.getByRole('row', { name: /Cell 1 Cell 2/i })).toHaveAttribute('extraHeaders', 'Column 1,Column 2');
475
+ expect(screen.getByRole('row', { name: /Cell 3 Cell 4/i })).toHaveAttribute('extraHeaders', 'Column 1,Column 2');
476
+ expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
477
+ expect(screen.getByRole('cell', { name: /Cell 2/i })).toHaveAttribute('data-label', 'Column 2');
478
+ expect(screen.getByRole('cell', { name: /Cell 3/i })).toHaveAttribute('data-label', 'Column 1');
479
+ expect(screen.getByRole('cell', { name: /Cell 4/i })).toHaveAttribute('data-label', 'Column 2');
480
+ });
481
+ it('should render table data labels correctly for mobile breakpoint for one column table', () => {
482
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: ONE_COLUMN_TABLE }));
483
+ expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', 'Column 1');
484
+ expect(screen.getByRole('row', { name: /Cell 2/i })).toHaveAttribute('extraHeaders', 'Column 1');
485
+ expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
486
+ expect(screen.getByRole('cell', { name: /Cell 2/i })).toHaveAttribute('data-label', 'Column 1');
487
+ });
488
+ it('should render table data labels correctly for mobile breakpoint for one cell table', () => {
489
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: ONE_CELL_TABLE }));
490
+ expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', 'Column 1');
491
+ expect(screen.getByRole('cell', { name: /Cell 1/i })).toHaveAttribute('data-label', 'Column 1');
492
+ });
493
+ it('should render table data labels correctly for mobile breakpoint for headerless', () => {
494
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: HEADERLESS_TABLE }));
495
+ expect(screen.getByRole('row', { name: /Cell 1/i })).toHaveAttribute('extraHeaders', '');
496
+ expect(screen.getByRole('cell', { name: /Cell 1/i })).not.toHaveAttribute('data-label');
497
+ });
498
+ it('should render table data labels correctly for mobile breakpoint for childless', () => {
499
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: CHILDLESS_TABLE }));
500
+ expect(screen.getByRole('cell')).not.toHaveAttribute('extraHeaders', 'Column 1');
501
+ });
502
+ it('should render table data labels correctly for mobile breakpoint for empty', () => {
503
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: EMPTY_TABLE }));
504
+ expect(screen.getByRole('cell')).not.toHaveAttribute('extraHeaders', '');
505
+ });
506
+ it('should render custom table aria label correctly', () => {
507
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", content: TABLE, tableProps: { 'aria-label': 'Test' } }));
508
+ expect(screen.getByRole('grid', { name: /Test/i })).toBeTruthy();
509
+ });
416
510
  });
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { ExtraProps } from 'react-markdown';
3
+ import { TableProps } from '@patternfly/react-table';
4
+ interface Properties {
5
+ line: number;
6
+ column: number;
7
+ offset: number;
8
+ }
9
+ export interface TableNode {
10
+ children?: TableNode[];
11
+ value?: string;
12
+ position: {
13
+ start: Properties;
14
+ end: Properties;
15
+ };
16
+ tagName: string;
17
+ type: string;
18
+ }
19
+ declare const TableMessage: ({ children, ...props }: TableProps & ExtraProps) => React.JSX.Element;
20
+ export default TableMessage;
@@ -0,0 +1,62 @@
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 { Table } from '@patternfly/react-table';
17
+ const TableMessage = (_a) => {
18
+ var _b;
19
+ var { children } = _a, props = __rest(_a, ["children"]);
20
+ const { className } = props, rest = __rest(props, ["className"]);
21
+ // This allows us to parse the nested data we get back from the 3rd party Markdown parser
22
+ // Open to feedback here if there is a better way to do this
23
+ // This looks for ths and spits them all out so we can filter them later, looking for text values
24
+ const findHeaders = (array) => {
25
+ const headers = [];
26
+ if (!array) {
27
+ return headers;
28
+ }
29
+ const traverse = (items) => {
30
+ for (const item of items) {
31
+ if (item.tagName === 'th') {
32
+ headers.push(item);
33
+ }
34
+ if (item.children) {
35
+ traverse(item.children);
36
+ }
37
+ }
38
+ };
39
+ traverse(array);
40
+ return headers;
41
+ };
42
+ const headers = findHeaders((_b = rest.node) === null || _b === void 0 ? void 0 : _b.children);
43
+ const headerTextValues = headers.map((header) => { var _a, _b; return (_b = (_a = header === null || header === void 0 ? void 0 : header.children) === null || _a === void 0 ? void 0 : _a.filter((c) => (c === null || c === void 0 ? void 0 : c.type) === 'text')[0]) === null || _b === void 0 ? void 0 : _b.value; });
44
+ // We are sending these header text values down to child tds by passing them through children, since mobile view for tables expects a dataLabel prop
45
+ // The data structure does not otherwise know this information at that level
46
+ // This is somewhat opinionated and may break if 3rd party library changes
47
+ // See Tr and Tbody for other usage
48
+ const modifyChildren = (children) => React.Children.map(children, (child) => {
49
+ if (child && (headerTextValues === null || headerTextValues === void 0 ? void 0 : headerTextValues.length) > 0) {
50
+ return React.cloneElement(child, { extraHeaders: headerTextValues });
51
+ }
52
+ return child;
53
+ });
54
+ if (!props['aria-label']) {
55
+ // eslint-disable-next-line no-console
56
+ console.warn('For accessibility reasons an aria-label should be specified for the Table via the <Message /> tableProps prop');
57
+ }
58
+ return (
59
+ // gridBreakPoint is so we show mobile-styled-PF table
60
+ React.createElement(Table, Object.assign({ "aria-label": props['aria-label'], gridBreakPoint: "grid", className: `pf-chatbot__message-table ${className ? className : ''}` }, rest), modifyChildren(children)));
61
+ };
62
+ export default TableMessage;