@patternfly/chatbot 6.3.0-prerelease.2 → 6.3.0-prerelease.20

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 (586) hide show
  1. package/dist/cjs/AttachMenu/AttachMenu.d.ts +2 -2
  2. package/dist/cjs/AttachMenu/AttachMenu.js +2 -12
  3. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +14 -2
  4. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +3 -6
  5. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  6. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +33 -8
  7. package/dist/cjs/Chatbot/Chatbot.d.ts +3 -2
  8. package/dist/cjs/Chatbot/Chatbot.js +5 -10
  9. package/dist/cjs/Chatbot/Chatbot.test.js +13 -9
  10. package/dist/cjs/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  11. package/dist/cjs/ChatbotAlert/ChatbotAlert.js +4 -8
  12. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +10 -10
  13. package/dist/cjs/ChatbotContent/ChatbotContent.d.ts +3 -3
  14. package/dist/cjs/ChatbotContent/ChatbotContent.js +2 -8
  15. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +5 -5
  16. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  17. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  18. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +31 -33
  19. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +4 -2
  20. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -34
  21. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +58 -62
  22. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  23. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +2 -9
  24. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  25. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +2 -25
  26. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +4 -3
  27. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +3 -16
  28. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  29. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +10 -5
  30. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +28 -28
  31. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  32. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +10 -23
  33. package/dist/cjs/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  34. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +2 -7
  35. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +5 -5
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.js +2 -5
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +5 -5
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +5 -4
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +19 -10
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +10 -8
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +2 -5
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +5 -5
  46. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +5 -4
  47. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -8
  48. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  49. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +10 -8
  50. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +7 -3
  51. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  52. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  53. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +22 -19
  54. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +9 -3
  55. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -12
  56. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  57. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +20 -17
  58. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  59. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +2 -5
  60. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +23 -23
  61. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +5 -2
  62. package/dist/cjs/ChatbotModal/ChatbotModal.js +4 -10
  63. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  64. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +16 -0
  65. package/dist/cjs/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  66. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +2 -8
  67. package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  68. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +8 -13
  69. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +25 -25
  70. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +3 -2
  71. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +7 -21
  72. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +18 -14
  73. package/dist/cjs/CodeModal/CodeModal.d.ts +10 -2
  74. package/dist/cjs/CodeModal/CodeModal.js +8 -20
  75. package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
  76. package/dist/cjs/CodeModal/CodeModal.test.js +34 -0
  77. package/dist/cjs/Compare/Compare.d.ts +2 -2
  78. package/dist/cjs/Compare/Compare.js +7 -16
  79. package/dist/cjs/Compare/Compare.test.js +7 -9
  80. package/dist/cjs/FileDetails/FileDetails.d.ts +2 -2
  81. package/dist/cjs/FileDetails/FileDetails.js +2 -15
  82. package/dist/cjs/FileDetails/FileDetails.test.js +10 -10
  83. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  84. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.js +2 -5
  85. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +21 -21
  86. package/dist/cjs/FileDropZone/FileDropZone.d.ts +9 -2
  87. package/dist/cjs/FileDropZone/FileDropZone.js +6 -9
  88. package/dist/cjs/FileDropZone/FileDropZone.test.js +31 -5
  89. package/dist/cjs/LoadingMessage/LoadingMessage.d.ts +2 -2
  90. package/dist/cjs/LoadingMessage/LoadingMessage.js +2 -10
  91. package/dist/cjs/LoadingMessage/LoadingMessage.test.js +6 -6
  92. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  93. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +22 -16
  94. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  95. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +136 -0
  96. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  97. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -8
  98. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +1 -2
  99. package/dist/cjs/Message/ImageMessage/ImageMessage.js +2 -8
  100. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +1 -2
  101. package/dist/cjs/Message/LinkMessage/LinkMessage.js +6 -9
  102. package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +1 -2
  103. package/dist/cjs/Message/ListMessage/ListItemMessage.js +2 -8
  104. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  105. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -9
  106. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  107. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -9
  108. package/dist/cjs/Message/Message.d.ts +26 -8
  109. package/dist/cjs/Message/Message.js +50 -72
  110. package/dist/cjs/Message/Message.test.js +119 -81
  111. package/dist/cjs/Message/MessageInput.d.ts +2 -2
  112. package/dist/cjs/Message/MessageInput.js +5 -14
  113. package/dist/cjs/Message/MessageLoading.d.ts +1 -2
  114. package/dist/cjs/Message/MessageLoading.js +3 -8
  115. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  116. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
  117. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +4 -2
  118. package/dist/cjs/Message/QuickResponse/QuickResponse.js +8 -10
  119. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +2 -2
  120. package/dist/cjs/Message/QuickStarts/FallbackImg.js +5 -27
  121. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +4 -2
  122. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +8 -44
  123. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  124. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +9 -38
  125. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +16 -16
  126. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  127. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +2 -26
  128. package/dist/cjs/Message/QuickStarts/types.d.ts +4 -3
  129. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +1 -2
  130. package/dist/cjs/Message/TableMessage/TableMessage.js +8 -10
  131. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +2 -3
  132. package/dist/cjs/Message/TableMessage/TbodyMessage.js +7 -9
  133. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +1 -2
  134. package/dist/cjs/Message/TableMessage/TdMessage.js +2 -8
  135. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +1 -2
  136. package/dist/cjs/Message/TableMessage/ThMessage.js +2 -8
  137. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +1 -2
  138. package/dist/cjs/Message/TableMessage/TheadMessage.js +2 -8
  139. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +2 -3
  140. package/dist/cjs/Message/TableMessage/TrMessage.js +8 -10
  141. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +1 -2
  142. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -9
  143. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +2 -2
  144. package/dist/cjs/Message/UserFeedback/CloseButton.js +2 -8
  145. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +2 -2
  146. package/dist/cjs/Message/UserFeedback/UserFeedback.js +13 -24
  147. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +55 -51
  148. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  149. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +21 -45
  150. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +83 -89
  151. package/dist/cjs/MessageBar/AttachButton.d.ts +9 -2
  152. package/dist/cjs/MessageBar/AttachButton.js +9 -17
  153. package/dist/cjs/MessageBar/AttachButton.test.js +50 -22
  154. package/dist/cjs/MessageBar/MessageBar.d.ts +16 -3
  155. package/dist/cjs/MessageBar/MessageBar.js +36 -37
  156. package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
  157. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +3 -2
  158. package/dist/cjs/MessageBar/MicrophoneButton.js +8 -15
  159. package/dist/cjs/MessageBar/SendButton.d.ts +4 -2
  160. package/dist/cjs/MessageBar/SendButton.js +4 -12
  161. package/dist/cjs/MessageBar/SendButton.test.js +18 -14
  162. package/dist/cjs/MessageBar/StopButton.d.ts +4 -2
  163. package/dist/cjs/MessageBar/StopButton.js +4 -13
  164. package/dist/cjs/MessageBar/StopButton.test.js +18 -14
  165. package/dist/cjs/MessageBox/JumpButton.d.ts +2 -2
  166. package/dist/cjs/MessageBox/JumpButton.js +2 -10
  167. package/dist/cjs/MessageBox/JumpButton.test.js +10 -10
  168. package/dist/cjs/MessageBox/MessageBox.d.ts +21 -5
  169. package/dist/cjs/MessageBox/MessageBox.js +181 -44
  170. package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
  171. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +14 -2
  172. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +3 -6
  173. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  174. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +34 -12
  175. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +5 -5
  176. package/dist/cjs/ResponseActions/ResponseActionButton.js +5 -8
  177. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +19 -19
  178. package/dist/cjs/ResponseActions/ResponseActions.d.ts +6 -3
  179. package/dist/cjs/ResponseActions/ResponseActions.js +10 -14
  180. package/dist/cjs/ResponseActions/ResponseActions.test.js +55 -40
  181. package/dist/cjs/Settings/SettingsForm.d.ts +4 -2
  182. package/dist/cjs/Settings/SettingsForm.js +3 -9
  183. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -1
  184. package/dist/cjs/Settings/SettingsForm.test.js +18 -9
  185. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  186. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
  187. package/dist/cjs/SourcesCard/SourcesCard.d.ts +2 -2
  188. package/dist/cjs/SourcesCard/SourcesCard.js +17 -43
  189. package/dist/cjs/SourcesCard/SourcesCard.test.js +60 -60
  190. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +5 -3
  191. package/dist/cjs/TermsOfUse/TermsOfUse.js +5 -17
  192. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
  193. package/dist/css/main.css +228 -15
  194. package/dist/css/main.css.map +1 -1
  195. package/dist/esm/AttachMenu/AttachMenu.d.ts +2 -2
  196. package/dist/esm/AttachMenu/AttachMenu.js +2 -9
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +14 -2
  198. package/dist/esm/AttachmentEdit/AttachmentEdit.js +3 -6
  199. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  200. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +30 -5
  201. package/dist/esm/Chatbot/Chatbot.d.ts +3 -2
  202. package/dist/esm/Chatbot/Chatbot.js +5 -7
  203. package/dist/esm/Chatbot/Chatbot.test.js +9 -5
  204. package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  205. package/dist/esm/ChatbotAlert/ChatbotAlert.js +4 -5
  206. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +4 -4
  207. package/dist/esm/ChatbotContent/ChatbotContent.d.ts +3 -3
  208. package/dist/esm/ChatbotContent/ChatbotContent.js +2 -5
  209. package/dist/esm/ChatbotContent/ChatbotContent.test.js +3 -3
  210. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  211. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  212. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +8 -10
  213. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +4 -2
  214. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -34
  215. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +29 -33
  216. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  217. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +2 -6
  218. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  219. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +2 -22
  220. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +4 -3
  221. package/dist/esm/ChatbotFooter/ChatbotFooter.js +3 -13
  222. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  223. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +8 -3
  224. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +5 -5
  225. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  226. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +10 -23
  227. package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  228. package/dist/esm/ChatbotHeader/ChatbotHeader.js +2 -4
  229. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +3 -3
  230. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  231. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +2 -2
  232. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +3 -3
  233. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +5 -4
  234. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -8
  235. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  236. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +8 -3
  237. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  238. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +2 -2
  239. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +3 -3
  240. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +5 -4
  241. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -8
  242. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  243. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +8 -3
  244. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +7 -3
  245. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  246. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  247. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +13 -7
  248. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +9 -3
  249. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
  250. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  251. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +13 -7
  252. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  253. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +2 -2
  254. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +12 -12
  255. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +5 -2
  256. package/dist/esm/ChatbotModal/ChatbotModal.js +4 -7
  257. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  258. package/dist/esm/ChatbotModal/ChatbotModal.test.js +11 -0
  259. package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  260. package/dist/esm/ChatbotPopover/ChatbotPopover.js +2 -5
  261. package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  262. package/dist/esm/ChatbotToggle/ChatbotToggle.js +8 -13
  263. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +8 -8
  264. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +3 -2
  265. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +7 -18
  266. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +11 -7
  267. package/dist/esm/CodeModal/CodeModal.d.ts +10 -2
  268. package/dist/esm/CodeModal/CodeModal.js +8 -20
  269. package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
  270. package/dist/esm/CodeModal/CodeModal.test.js +29 -0
  271. package/dist/esm/Compare/Compare.d.ts +2 -2
  272. package/dist/esm/Compare/Compare.js +7 -13
  273. package/dist/esm/Compare/Compare.test.js +4 -6
  274. package/dist/esm/FileDetails/FileDetails.d.ts +2 -2
  275. package/dist/esm/FileDetails/FileDetails.js +2 -15
  276. package/dist/esm/FileDetails/FileDetails.test.js +4 -4
  277. package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  278. package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +2 -5
  279. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +9 -9
  280. package/dist/esm/FileDropZone/FileDropZone.d.ts +9 -2
  281. package/dist/esm/FileDropZone/FileDropZone.js +6 -6
  282. package/dist/esm/FileDropZone/FileDropZone.test.js +29 -3
  283. package/dist/esm/LoadingMessage/LoadingMessage.d.ts +2 -2
  284. package/dist/esm/LoadingMessage/LoadingMessage.js +2 -10
  285. package/dist/esm/LoadingMessage/LoadingMessage.test.js +3 -3
  286. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  287. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +23 -17
  288. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  289. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +130 -0
  290. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  291. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +5 -5
  292. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +1 -2
  293. package/dist/esm/Message/ImageMessage/ImageMessage.js +2 -5
  294. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +1 -2
  295. package/dist/esm/Message/LinkMessage/LinkMessage.js +6 -6
  296. package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +1 -2
  297. package/dist/esm/Message/ListMessage/ListItemMessage.js +2 -5
  298. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  299. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -6
  300. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  301. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -6
  302. package/dist/esm/Message/Message.d.ts +26 -8
  303. package/dist/esm/Message/Message.js +50 -72
  304. package/dist/esm/Message/Message.test.js +119 -81
  305. package/dist/esm/Message/MessageInput.d.ts +2 -2
  306. package/dist/esm/Message/MessageInput.js +5 -11
  307. package/dist/esm/Message/MessageLoading.d.ts +1 -2
  308. package/dist/esm/Message/MessageLoading.js +2 -4
  309. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  310. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +43 -0
  311. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +4 -2
  312. package/dist/esm/Message/QuickResponse/QuickResponse.js +8 -7
  313. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +2 -2
  314. package/dist/esm/Message/QuickStarts/FallbackImg.js +5 -4
  315. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +4 -2
  316. package/dist/esm/Message/QuickStarts/QuickStartTile.js +8 -21
  317. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  318. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +9 -15
  319. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +5 -5
  320. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  321. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +2 -3
  322. package/dist/esm/Message/QuickStarts/types.d.ts +4 -3
  323. package/dist/esm/Message/TableMessage/TableMessage.d.ts +1 -2
  324. package/dist/esm/Message/TableMessage/TableMessage.js +8 -7
  325. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +2 -3
  326. package/dist/esm/Message/TableMessage/TbodyMessage.js +7 -6
  327. package/dist/esm/Message/TableMessage/TdMessage.d.ts +1 -2
  328. package/dist/esm/Message/TableMessage/TdMessage.js +2 -5
  329. package/dist/esm/Message/TableMessage/ThMessage.d.ts +1 -2
  330. package/dist/esm/Message/TableMessage/ThMessage.js +2 -5
  331. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +1 -2
  332. package/dist/esm/Message/TableMessage/TheadMessage.js +2 -5
  333. package/dist/esm/Message/TableMessage/TrMessage.d.ts +2 -3
  334. package/dist/esm/Message/TableMessage/TrMessage.js +8 -7
  335. package/dist/esm/Message/TextMessage/TextMessage.d.ts +1 -2
  336. package/dist/esm/Message/TextMessage/TextMessage.js +2 -6
  337. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +2 -2
  338. package/dist/esm/Message/UserFeedback/CloseButton.js +2 -5
  339. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +2 -2
  340. package/dist/esm/Message/UserFeedback/UserFeedback.js +13 -24
  341. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +24 -20
  342. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  343. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +21 -45
  344. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +29 -35
  345. package/dist/esm/MessageBar/AttachButton.d.ts +9 -2
  346. package/dist/esm/MessageBar/AttachButton.js +9 -14
  347. package/dist/esm/MessageBar/AttachButton.test.js +44 -16
  348. package/dist/esm/MessageBar/MessageBar.d.ts +16 -3
  349. package/dist/esm/MessageBar/MessageBar.js +34 -35
  350. package/dist/esm/MessageBar/MessageBar.test.js +87 -73
  351. package/dist/esm/MessageBar/MicrophoneButton.d.ts +3 -2
  352. package/dist/esm/MessageBar/MicrophoneButton.js +8 -12
  353. package/dist/esm/MessageBar/SendButton.d.ts +4 -2
  354. package/dist/esm/MessageBar/SendButton.js +4 -9
  355. package/dist/esm/MessageBar/SendButton.test.js +13 -9
  356. package/dist/esm/MessageBar/StopButton.d.ts +4 -2
  357. package/dist/esm/MessageBar/StopButton.js +4 -10
  358. package/dist/esm/MessageBar/StopButton.test.js +13 -9
  359. package/dist/esm/MessageBox/JumpButton.d.ts +2 -2
  360. package/dist/esm/MessageBox/JumpButton.js +2 -7
  361. package/dist/esm/MessageBox/JumpButton.test.js +9 -9
  362. package/dist/esm/MessageBox/MessageBox.d.ts +21 -5
  363. package/dist/esm/MessageBox/MessageBox.js +181 -44
  364. package/dist/esm/MessageBox/MessageBox.test.js +220 -7
  365. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +14 -2
  366. package/dist/esm/PreviewAttachment/PreviewAttachment.js +3 -6
  367. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  368. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +30 -5
  369. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +5 -5
  370. package/dist/esm/ResponseActions/ResponseActionButton.js +5 -5
  371. package/dist/esm/ResponseActions/ResponseActionButton.test.js +7 -7
  372. package/dist/esm/ResponseActions/ResponseActions.d.ts +6 -3
  373. package/dist/esm/ResponseActions/ResponseActions.js +10 -14
  374. package/dist/esm/ResponseActions/ResponseActions.test.js +30 -15
  375. package/dist/esm/Settings/SettingsForm.d.ts +4 -2
  376. package/dist/esm/Settings/SettingsForm.js +3 -6
  377. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -1
  378. package/dist/esm/Settings/SettingsForm.test.js +16 -4
  379. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  380. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
  381. package/dist/esm/SourcesCard/SourcesCard.d.ts +2 -2
  382. package/dist/esm/SourcesCard/SourcesCard.js +17 -40
  383. package/dist/esm/SourcesCard/SourcesCard.test.js +19 -19
  384. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +5 -3
  385. package/dist/esm/TermsOfUse/TermsOfUse.js +5 -17
  386. package/dist/esm/TermsOfUse/TermsOfUse.test.js +10 -12
  387. package/dist/tsconfig.tsbuildinfo +1 -1
  388. package/package.json +5 -6
  389. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +10 -0
  390. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +51 -0
  391. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +9 -9
  392. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +14 -5
  393. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  394. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +19 -12
  395. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +2 -2
  396. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +9 -9
  397. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +4 -4
  398. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +7 -7
  399. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +2 -2
  400. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +37 -4
  401. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
  402. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +26 -2
  403. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +13 -2
  404. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +2 -2
  405. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +24 -3
  406. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +1 -0
  407. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +14 -5
  408. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +20 -14
  409. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +4 -4
  410. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +59 -36
  411. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +2 -2
  412. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  413. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +10 -13
  414. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +18 -9
  415. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +5 -5
  416. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +5 -5
  417. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +12 -3
  418. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +15 -6
  419. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +59 -34
  420. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +2 -2
  421. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +9 -9
  422. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarDisabled.tsx +3 -3
  423. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarLanguage.tsx +2 -2
  424. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +2 -2
  425. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +74 -37
  426. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +3 -3
  427. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +7 -7
  428. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
  429. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +282 -0
  430. package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +3 -3
  431. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +16 -23
  432. package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +5 -5
  433. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +3 -3
  434. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +91 -48
  435. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +179 -0
  436. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +17 -0
  437. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
  438. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +9 -1
  439. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +17 -23
  440. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +23 -14
  441. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +14 -14
  442. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +475 -0
  443. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +15 -20
  444. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
  445. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +15 -20
  446. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +12 -12
  447. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +7 -7
  448. package/patternfly-docs/content/extensions/chatbot/img/quick-response-confirmation.svg +67 -0
  449. package/src/AttachMenu/AttachMenu.tsx +2 -2
  450. package/src/AttachmentEdit/AttachmentEdit.test.tsx +46 -2
  451. package/src/AttachmentEdit/AttachmentEdit.tsx +29 -7
  452. package/src/Chatbot/Chatbot.scss +7 -0
  453. package/src/Chatbot/Chatbot.test.tsx +9 -1
  454. package/src/Chatbot/Chatbot.tsx +9 -4
  455. package/src/ChatbotAlert/ChatbotAlert.test.tsx +0 -1
  456. package/src/ChatbotAlert/ChatbotAlert.tsx +2 -2
  457. package/src/ChatbotContent/ChatbotContent.test.tsx +0 -1
  458. package/src/ChatbotContent/ChatbotContent.tsx +3 -3
  459. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +0 -1
  460. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +6 -4
  461. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +38 -3
  462. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +21 -3
  463. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +17 -8
  464. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
  465. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
  466. package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
  467. package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -1
  468. package/src/ChatbotFooter/ChatbotFooter.tsx +6 -4
  469. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
  470. package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
  471. package/src/ChatbotHeader/ChatbotHeader.scss +25 -0
  472. package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
  473. package/src/ChatbotHeader/ChatbotHeader.tsx +4 -7
  474. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
  475. package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
  476. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +6 -1
  477. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +17 -10
  478. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
  479. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +5 -3
  480. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -1
  481. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +17 -12
  482. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +15 -1
  483. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +17 -7
  484. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +19 -1
  485. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +30 -6
  486. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
  487. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
  488. package/src/ChatbotModal/ChatbotModal.scss +15 -4
  489. package/src/ChatbotModal/ChatbotModal.test.tsx +58 -0
  490. package/src/ChatbotModal/ChatbotModal.tsx +7 -3
  491. package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
  492. package/src/ChatbotPopover/ChatbotPopover.tsx +2 -2
  493. package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
  494. package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
  495. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
  496. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -1
  497. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +15 -4
  498. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
  499. package/src/CodeModal/CodeModal.scss +11 -3
  500. package/src/CodeModal/CodeModal.test.tsx +51 -0
  501. package/src/CodeModal/CodeModal.tsx +24 -10
  502. package/src/Compare/Compare.test.tsx +0 -1
  503. package/src/Compare/Compare.tsx +7 -6
  504. package/src/FileDetails/FileDetails.test.tsx +0 -1
  505. package/src/FileDetails/FileDetails.tsx +2 -2
  506. package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
  507. package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
  508. package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
  509. package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
  510. package/src/FileDropZone/FileDropZone.test.tsx +29 -1
  511. package/src/FileDropZone/FileDropZone.tsx +13 -3
  512. package/src/LoadingMessage/LoadingMessage.test.tsx +0 -1
  513. package/src/LoadingMessage/LoadingMessage.tsx +2 -2
  514. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +7 -0
  515. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +105 -18
  516. package/src/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.tsx +220 -0
  517. package/src/Message/ErrorMessage/ErrorMessage.tsx +0 -1
  518. package/src/Message/ImageMessage/ImageMessage.tsx +1 -2
  519. package/src/Message/LinkMessage/LinkMessage.tsx +0 -1
  520. package/src/Message/ListMessage/ListItemMessage.tsx +0 -1
  521. package/src/Message/ListMessage/OrderedListMessage.tsx +0 -1
  522. package/src/Message/ListMessage/UnorderedListMessage.tsx +0 -1
  523. package/src/Message/Message.scss +27 -0
  524. package/src/Message/Message.test.tsx +66 -6
  525. package/src/Message/Message.tsx +41 -17
  526. package/src/Message/MessageInput.tsx +5 -5
  527. package/src/Message/MessageLoading.tsx +0 -2
  528. package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
  529. package/src/Message/QuickResponse/QuickResponse.tsx +9 -4
  530. package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
  531. package/src/Message/QuickStarts/QuickStartTile.tsx +8 -4
  532. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +0 -1
  533. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +4 -3
  534. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +2 -2
  535. package/src/Message/QuickStarts/types.ts +4 -3
  536. package/src/Message/TableMessage/TableMessage.tsx +4 -4
  537. package/src/Message/TableMessage/TbodyMessage.tsx +3 -3
  538. package/src/Message/TableMessage/TdMessage.tsx +1 -2
  539. package/src/Message/TableMessage/ThMessage.tsx +1 -2
  540. package/src/Message/TableMessage/TheadMessage.tsx +3 -2
  541. package/src/Message/TableMessage/TrMessage.tsx +4 -4
  542. package/src/Message/TextMessage/TextMessage.scss +25 -0
  543. package/src/Message/TextMessage/TextMessage.tsx +1 -2
  544. package/src/Message/UserFeedback/CloseButton.tsx +2 -2
  545. package/src/Message/UserFeedback/UserFeedback.scss +24 -3
  546. package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -1
  547. package/src/Message/UserFeedback/UserFeedback.tsx +12 -8
  548. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -1
  549. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +26 -16
  550. package/src/MessageBar/AttachButton.scss +10 -0
  551. package/src/MessageBar/AttachButton.test.tsx +56 -8
  552. package/src/MessageBar/AttachButton.tsx +21 -8
  553. package/src/MessageBar/MessageBar.scss +17 -0
  554. package/src/MessageBar/MessageBar.test.tsx +81 -30
  555. package/src/MessageBar/MessageBar.tsx +60 -25
  556. package/src/MessageBar/MicrophoneButton.scss +10 -0
  557. package/src/MessageBar/MicrophoneButton.tsx +15 -9
  558. package/src/MessageBar/SendButton.scss +10 -0
  559. package/src/MessageBar/SendButton.test.tsx +10 -7
  560. package/src/MessageBar/SendButton.tsx +9 -5
  561. package/src/MessageBar/StopButton.scss +10 -0
  562. package/src/MessageBar/StopButton.test.tsx +10 -7
  563. package/src/MessageBar/StopButton.tsx +9 -5
  564. package/src/MessageBox/JumpButton.test.tsx +4 -5
  565. package/src/MessageBox/JumpButton.tsx +3 -3
  566. package/src/MessageBox/MessageBox.scss +6 -0
  567. package/src/MessageBox/MessageBox.test.tsx +295 -5
  568. package/src/MessageBox/MessageBox.tsx +301 -82
  569. package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
  570. package/src/PreviewAttachment/PreviewAttachment.tsx +29 -7
  571. package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
  572. package/src/ResponseActions/ResponseActionButton.tsx +6 -5
  573. package/src/ResponseActions/ResponseActions.test.tsx +18 -2
  574. package/src/ResponseActions/ResponseActions.tsx +18 -8
  575. package/src/Settings/Settings.scss +11 -0
  576. package/src/Settings/SettingsForm.test.tsx +17 -1
  577. package/src/Settings/SettingsForm.tsx +8 -3
  578. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
  579. package/src/SourcesCard/SourcesCard.scss +8 -0
  580. package/src/SourcesCard/SourcesCard.test.tsx +0 -1
  581. package/src/SourcesCard/SourcesCard.tsx +9 -8
  582. package/src/TermsOfUse/TermsOfUse.scss +20 -0
  583. package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
  584. package/src/TermsOfUse/TermsOfUse.tsx +15 -9
  585. package/tsconfig.cjs.json +0 -1
  586. package/tsconfig.json +3 -3
@@ -1,9 +1,9 @@
1
1
  import '@testing-library/jest-dom';
2
- import React from 'react';
3
2
  import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
4
3
  import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
5
4
  import { render, screen } from '@testing-library/react';
6
5
  import userEvent from '@testing-library/user-event';
6
+ import { createRef } from 'react';
7
7
  import SourceDetailsMenuItem from '../SourceDetailsMenuItem';
8
8
  import { MessageBar } from './MessageBar';
9
9
 
@@ -73,9 +73,9 @@ describe('Message bar', () => {
73
73
  });
74
74
  it('should render correctly', () => {
75
75
  render(<MessageBar onSendMessage={jest.fn} />);
76
- expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
77
- expect(screen.queryByRole('button', { name: 'Send button' })).toBeFalsy();
78
- expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
76
+ expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
77
+ expect(screen.queryByRole('button', { name: 'Send' })).toBeFalsy();
78
+ expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
79
79
  expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
80
80
  });
81
81
  it('can send via enter key', async () => {
@@ -110,15 +110,15 @@ describe('Message bar', () => {
110
110
  const input = screen.getByRole('textbox', { name: /Send a message.../i });
111
111
  await userEvent.type(input, 'Hello world');
112
112
  expect(input).toHaveTextContent('Hello world');
113
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
113
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
114
114
  });
115
115
  it('can disable send button shown when text is input', async () => {
116
116
  render(<MessageBar onSendMessage={jest.fn} isSendButtonDisabled />);
117
117
  const input = screen.getByRole('textbox', { name: /Send a message.../i });
118
118
  await userEvent.type(input, 'Hello world');
119
119
  expect(input).toHaveTextContent('Hello world');
120
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
121
- expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
120
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
121
+ expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
122
122
  });
123
123
  it('can click send button', async () => {
124
124
  const spy = jest.fn();
@@ -126,28 +126,39 @@ describe('Message bar', () => {
126
126
  const input = screen.getByRole('textbox', { name: /Send a message.../i });
127
127
  await userEvent.type(input, 'Hello world');
128
128
  expect(input).toHaveTextContent('Hello world');
129
- const sendButton = screen.getByRole('button', { name: 'Send button' });
129
+ const sendButton = screen.getByRole('button', { name: 'Send' });
130
130
  expect(sendButton).toBeTruthy();
131
131
  await userEvent.click(sendButton);
132
132
  expect(spy).toHaveBeenCalledTimes(1);
133
133
  });
134
134
  it('can always show send button', () => {
135
135
  render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton />);
136
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
137
- expect(screen.getByRole('button', { name: 'Send button' })).toBeEnabled();
136
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
137
+ expect(screen.getByRole('button', { name: 'Send' })).toBeEnabled();
138
138
  });
139
139
  it('can disable send button if always showing', () => {
140
140
  render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton isSendButtonDisabled />);
141
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
142
- expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
141
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
142
+ expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
143
143
  });
144
144
  it('can handle buttonProps tooltipContent appropriately for send', async () => {
145
145
  render(
146
146
  <MessageBar onSendMessage={jest.fn} alwayShowSendButton buttonProps={{ send: { tooltipContent: 'Test' } }} />
147
147
  );
148
- await userEvent.click(screen.getByRole('button', { name: 'Send button' }));
148
+ await userEvent.click(screen.getByRole('button', { name: 'Send' }));
149
149
  expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
150
150
  });
151
+ it('can handle buttonProps tooltipProps appropriately for send', () => {
152
+ render(
153
+ <MessageBar
154
+ onSendMessage={jest.fn}
155
+ alwayShowSendButton
156
+ buttonProps={{ send: { tooltipProps: { isVisible: true } } }}
157
+ />
158
+ );
159
+ // isVisible, so no need for click
160
+ expect(screen.getByRole('tooltip', { name: 'Send' })).toBeTruthy();
161
+ });
151
162
  it('can handle buttonProps props appropriately for send', async () => {
152
163
  render(
153
164
  <MessageBar
@@ -203,13 +214,13 @@ describe('Message bar', () => {
203
214
  expect(screen.queryByRole('menuitem', { name: /Logs/i })).toBeFalsy();
204
215
  expect(screen.queryByRole('menuitem', { name: /YAML - Status/i })).toBeFalsy();
205
216
  expect(screen.queryByRole('menuitem', { name: /YAML - All contents/i })).toBeFalsy();
206
- const attachButton = screen.getByRole('button', { name: 'Attach button' });
217
+ const attachButton = screen.getByRole('button', { name: 'Attach' });
207
218
  await userEvent.click(attachButton);
208
219
  expect(attachToggleClickSpy).toHaveBeenCalledTimes(1);
209
220
  });
210
221
  it('can hide attach button', () => {
211
222
  render(<MessageBar onSendMessage={jest.fn} hasAttachButton={false} />);
212
- expect(screen.queryByRole('button', { name: 'Attach button' })).toBeFalsy();
223
+ expect(screen.queryByRole('button', { name: 'Attach' })).toBeFalsy();
213
224
  });
214
225
  // Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
215
226
  // See also https://developer.mozilla.org/en-US/docs/Web/API/File/File for what that file variable is doing
@@ -223,19 +234,30 @@ describe('Message bar', () => {
223
234
  buttonProps={{ attach: { inputTestId: 'input' } }}
224
235
  />
225
236
  );
226
- expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
227
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
237
+ expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
238
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
228
239
  const file = new File(['test'], 'test.json');
229
240
  const input = screen.getByTestId('input') as HTMLInputElement;
230
241
  await userEvent.upload(input, file);
231
242
  expect(input.files).toHaveLength(1);
232
243
  expect(spy).toHaveBeenCalledTimes(1);
233
244
  });
234
- it('can handle buttonProps tooltipContent appropriately for attach', async () => {
245
+ it('can handle buttonProps tooltipContent appropriately for attach', async () => {
235
246
  render(<MessageBar onSendMessage={jest.fn} hasAttachButton buttonProps={{ attach: { tooltipContent: 'Test' } }} />);
236
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
247
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
237
248
  expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
238
249
  });
250
+ it('can handle buttonProps tooltipProps appropriately for attach', () => {
251
+ render(
252
+ <MessageBar
253
+ onSendMessage={jest.fn}
254
+ alwayShowSendButton
255
+ buttonProps={{ attach: { tooltipProps: { isVisible: true } } }}
256
+ />
257
+ );
258
+ // isVisible, so no need for click
259
+ expect(screen.getByRole('tooltip', { name: 'Attach' })).toBeTruthy();
260
+ });
239
261
  it('can handle buttonProps props appropriately for attach', async () => {
240
262
  render(
241
263
  <MessageBar
@@ -251,12 +273,12 @@ describe('Message bar', () => {
251
273
  // --------------------------------------------------------------------------
252
274
  it('can show stop button', () => {
253
275
  render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={jest.fn} />);
254
- expect(screen.getByRole('button', { name: 'Stop button' })).toBeTruthy();
276
+ expect(screen.getByRole('button', { name: 'Stop' })).toBeTruthy();
255
277
  });
256
278
  it('can call handleStopButton', async () => {
257
279
  const spy = jest.fn();
258
280
  render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={spy} />);
259
- await userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
281
+ await userEvent.click(screen.getByRole('button', { name: 'Stop' }));
260
282
  expect(spy).toHaveBeenCalledTimes(1);
261
283
  });
262
284
  it('can handle buttonProps tooltipContent appropriately for stop', async () => {
@@ -268,9 +290,21 @@ describe('Message bar', () => {
268
290
  buttonProps={{ stop: { tooltipContent: 'Test' } }}
269
291
  />
270
292
  );
271
- await userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
293
+ await userEvent.click(screen.getByRole('button', { name: 'Stop' }));
272
294
  expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
273
295
  });
296
+ it('can handle buttonProps tooltipProps appropriately for stop', () => {
297
+ render(
298
+ <MessageBar
299
+ onSendMessage={jest.fn}
300
+ hasStopButton
301
+ handleStopButton={jest.fn}
302
+ buttonProps={{ stop: { tooltipProps: { isVisible: true } } }}
303
+ />
304
+ );
305
+ // isVisible, so no need for click
306
+ expect(screen.getByRole('tooltip', { name: 'Stop' })).toBeTruthy();
307
+ });
274
308
  it('can handle buttonProps props appropriately for stop', async () => {
275
309
  render(
276
310
  <MessageBar
@@ -287,12 +321,12 @@ describe('Message bar', () => {
287
321
  // --------------------------------------------------------------------------
288
322
  it('can hide microphone button when window.SpeechRecognition is not there', () => {
289
323
  render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
290
- expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
324
+ expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
291
325
  });
292
326
  it('can show microphone button', () => {
293
327
  mockSpeechRecognition();
294
328
  render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
295
- expect(screen.getByRole('button', { name: 'Microphone button' })).toBeTruthy();
329
+ expect(screen.getByRole('button', { name: 'Use microphone' })).toBeTruthy();
296
330
  });
297
331
  it('can handle buttonProps appropriately for microphone', async () => {
298
332
  mockSpeechRecognition();
@@ -305,18 +339,29 @@ describe('Message bar', () => {
305
339
  }}
306
340
  />
307
341
  );
308
- await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
342
+ await userEvent.click(screen.getByRole('button', { name: 'Use microphone' }));
309
343
  expect(screen.getByRole('tooltip', { name: 'Currently listening' })).toBeTruthy();
310
- await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
344
+ await userEvent.click(screen.getByRole('button', { name: 'Stop listening' }));
311
345
  expect(screen.getByRole('tooltip', { name: 'Not currently listening' })).toBeTruthy();
312
346
  });
313
347
  it('can customize the listening placeholder', async () => {
314
348
  mockSpeechRecognition();
315
349
  render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton listeningText="I am listening" />);
316
- await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
350
+ await userEvent.click(screen.getByRole('button', { name: 'Use microphone' }));
317
351
  const input = screen.getByRole('textbox', { name: /I am listening/i });
318
352
  expect(input).toBeTruthy();
319
353
  });
354
+ it('can handle buttonProps tooltipProps appropriately for microphone', () => {
355
+ render(
356
+ <MessageBar
357
+ onSendMessage={jest.fn}
358
+ hasMicrophoneButton
359
+ buttonProps={{ microphone: { tooltipProps: { isVisible: true } } }}
360
+ />
361
+ );
362
+ // isVisible, so no need for click
363
+ expect(screen.getByRole('tooltip', { name: 'Use microphone' })).toBeTruthy();
364
+ });
320
365
  it('can handle buttonProps props appropriately for microphone', async () => {
321
366
  mockSpeechRecognition();
322
367
  render(
@@ -330,10 +375,16 @@ describe('Message bar', () => {
330
375
  });
331
376
  it('can be controlled', () => {
332
377
  render(<MessageBar onSendMessage={jest.fn} value="test" />);
333
- expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
334
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
335
- expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
378
+ expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
379
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
380
+ expect(screen.queryByRole('button', { name: 'Use microphone' })).toBeFalsy();
336
381
  expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
337
382
  expect(screen.getByRole('textbox', { name: /Send a message.../i })).toHaveValue('test');
338
383
  });
384
+ it('should focus textarea when using a custom ref', () => {
385
+ const ref = createRef<HTMLTextAreaElement>();
386
+ render(<MessageBar onSendMessage={jest.fn} innerRef={ref} />);
387
+ ref.current?.focus();
388
+ expect(document.activeElement).toBe(screen.getByRole('textbox'));
389
+ });
339
390
  });
@@ -1,4 +1,6 @@
1
- import React from 'react';
1
+ import type { ChangeEvent, FunctionComponent, KeyboardEvent as ReactKeyboardEvent, Ref } from 'react';
2
+ import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
3
+ import { Accept } from 'react-dropzone/.';
2
4
  import { ButtonProps, DropEvent, TextArea, TextAreaProps, TooltipProps } from '@patternfly/react-core';
3
5
 
4
6
  // Import Chatbot components
@@ -30,7 +32,7 @@ export interface MessageBarWithAttachMenuProps {
30
32
  onAttachMenuOpenChange?: (isOpen: boolean) => void;
31
33
  }
32
34
 
33
- export interface MessageBarProps extends TextAreaProps {
35
+ export interface MessageBarProps extends Omit<TextAreaProps, 'innerRef'> {
34
36
  /** Callback to get the value of input message by user */
35
37
  onSendMessage: (message: string | number) => void;
36
38
  /** Class Name for the MessageBar component */
@@ -76,9 +78,19 @@ export interface MessageBarProps extends TextAreaProps {
76
78
  onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string | number) => void;
77
79
  /** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
78
80
  displayMode?: ChatbotDisplayMode;
81
+ /** Whether message bar is compact */
82
+ isCompact?: boolean;
83
+ /** Specifies the file types accepted by the attachment upload component.
84
+ * Files that don't match the accepted types will be disabled in the file picker.
85
+ * For example,
86
+ * allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
87
+ **/
88
+ allowedFileTypes?: Accept;
89
+ /** Ref applied to message bar textarea, for use with focus or other custom behaviors */
90
+ innerRef?: React.Ref<HTMLTextAreaElement>;
79
91
  }
80
92
 
81
- export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
93
+ export const MessageBarBase: FunctionComponent<MessageBarProps> = ({
82
94
  onSendMessage,
83
95
  className,
84
96
  alwayShowSendButton,
@@ -95,21 +107,27 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
95
107
  onChange,
96
108
  displayMode,
97
109
  value,
110
+ isCompact = false,
111
+ allowedFileTypes,
112
+ innerRef,
98
113
  ...props
99
114
  }: MessageBarProps) => {
100
115
  // Text Input
101
116
  // --------------------------------------------------------------------------
102
- const [message, setMessage] = React.useState<string | number>(value ?? '');
103
- const [isListeningMessage, setIsListeningMessage] = React.useState<boolean>(false);
104
- const [hasSentMessage, setHasSentMessage] = React.useState(false);
105
- const textareaRef = React.useRef<HTMLTextAreaElement>(null);
106
- const attachButtonRef = React.useRef<HTMLButtonElement>(null);
117
+ const [message, setMessage] = useState<string | number>(value ?? '');
118
+ const [isListeningMessage, setIsListeningMessage] = useState<boolean>(false);
119
+ const [hasSentMessage, setHasSentMessage] = useState(false);
120
+ const inputRef = useRef<HTMLTextAreaElement>(null);
121
+ const textareaRef = (innerRef as React.RefObject<HTMLTextAreaElement>) ?? inputRef;
122
+ const attachButtonRef = useRef<HTMLButtonElement>(null);
123
+
124
+ const topMargin = '1rem';
107
125
 
108
126
  const setInitialLineHeight = (field: HTMLTextAreaElement) => {
109
127
  field.style.setProperty('line-height', '1rem');
110
128
  const parent = field.parentElement;
111
129
  if (parent) {
112
- parent.style.setProperty('margin-top', `1rem`);
130
+ parent.style.setProperty('margin-top', topMargin);
113
131
  parent.style.setProperty('margin-bottom', `0rem`);
114
132
  parent.style.setProperty('height', 'inherit');
115
133
 
@@ -135,8 +153,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
135
153
  parent.style.setProperty('height', `${height}px`);
136
154
 
137
155
  if (height > 32 || window.innerWidth <= 507) {
138
- parent.style.setProperty('margin-bottom', `1rem`);
139
- parent.style.setProperty('margin-top', `1rem`);
156
+ parent.style.setProperty('margin-bottom', topMargin);
157
+ parent.style.setProperty('margin-top', topMargin);
140
158
  }
141
159
  }
142
160
  };
@@ -147,7 +165,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
147
165
  return lines > 2;
148
166
  };
149
167
 
150
- const setAutoWidth = React.useCallback((field: HTMLTextAreaElement) => {
168
+ const setAutoWidth = useCallback((field: HTMLTextAreaElement) => {
151
169
  const parent = field.parentElement;
152
170
  if (parent) {
153
171
  const grandparent = parent.parentElement;
@@ -160,12 +178,12 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
160
178
  const handleNewLine = (field: HTMLTextAreaElement) => {
161
179
  const parent = field.parentElement;
162
180
  if (parent) {
163
- parent.style.setProperty('margin-bottom', `1rem`);
164
- parent.style.setProperty('margin-top', `1rem`);
181
+ parent.style.setProperty('margin-bottom', topMargin);
182
+ parent.style.setProperty('margin-top', topMargin);
165
183
  }
166
184
  };
167
185
 
168
- React.useEffect(() => {
186
+ useEffect(() => {
169
187
  const field = textareaRef.current;
170
188
  if (field) {
171
189
  if (field.value === '') {
@@ -196,19 +214,19 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
196
214
  };
197
215
  }, [setAutoWidth]);
198
216
 
199
- React.useEffect(() => {
217
+ useEffect(() => {
200
218
  const field = textareaRef.current;
201
219
  if (field) {
202
220
  if (field.value === '') {
203
- setInitialLineHeight(textareaRef.current);
221
+ setInitialLineHeight(field);
204
222
  } else {
205
- setAutoHeight(textareaRef.current);
223
+ setAutoHeight(field);
206
224
  setAutoWidth(field);
207
225
  }
208
226
  }
209
227
  }, [displayMode, message, setAutoWidth]);
210
228
 
211
- React.useEffect(() => {
229
+ useEffect(() => {
212
230
  const field = textareaRef.current;
213
231
  if (field) {
214
232
  setInitialLineHeight(field);
@@ -216,7 +234,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
216
234
  }
217
235
  }, [hasSentMessage]);
218
236
 
219
- const handleChange = React.useCallback(
237
+ const handleChange = useCallback(
220
238
  (event) => {
221
239
  onChange && onChange(event, event.target.value);
222
240
  if (textareaRef.current) {
@@ -232,7 +250,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
232
250
  );
233
251
 
234
252
  // Handle sending message
235
- const handleSend = React.useCallback(
253
+ const handleSend = useCallback(
236
254
  (newMessage: string | number) => {
237
255
  onSendMessage(newMessage);
238
256
  setHasSentMessage(true);
@@ -241,8 +259,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
241
259
  [onSendMessage]
242
260
  );
243
261
 
244
- const handleKeyDown = React.useCallback(
245
- (event: React.KeyboardEvent) => {
262
+ const handleKeyDown = useCallback(
263
+ (event: ReactKeyboardEvent) => {
246
264
  if (event.key === 'Enter' && !event.shiftKey) {
247
265
  event.preventDefault();
248
266
  if (!isSendButtonDisabled && !hasStopButton) {
@@ -265,7 +283,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
265
283
 
266
284
  const handleSpeechRecognition = (message) => {
267
285
  setMessage(message);
268
- onChange && onChange({} as React.ChangeEvent<HTMLTextAreaElement>, message);
286
+ onChange && onChange({} as ChangeEvent<HTMLTextAreaElement>, message);
269
287
  };
270
288
 
271
289
  const renderButtons = () => {
@@ -274,6 +292,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
274
292
  <StopButton
275
293
  onClick={handleStopButton}
276
294
  tooltipContent={buttonProps?.stop?.tooltipContent}
295
+ isCompact={isCompact}
296
+ tooltipProps={buttonProps?.stop?.tooltipProps}
277
297
  {...buttonProps?.stop?.props}
278
298
  />
279
299
  );
@@ -286,6 +306,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
286
306
  onClick={handleAttachMenuToggle}
287
307
  isDisabled={isListeningMessage}
288
308
  tooltipContent={buttonProps?.attach?.tooltipContent}
309
+ isCompact={isCompact}
310
+ tooltipProps={buttonProps?.attach?.tooltipProps}
311
+ allowedFileTypes={allowedFileTypes}
289
312
  {...buttonProps?.attach?.props}
290
313
  />
291
314
  )}
@@ -295,6 +318,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
295
318
  isDisabled={isListeningMessage}
296
319
  tooltipContent={buttonProps?.attach?.tooltipContent}
297
320
  inputTestId={buttonProps?.attach?.inputTestId}
321
+ isCompact={isCompact}
322
+ tooltipProps={buttonProps?.attach?.tooltipProps}
323
+ allowedFileTypes={allowedFileTypes}
298
324
  {...buttonProps?.attach?.props}
299
325
  />
300
326
  )}
@@ -305,6 +331,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
305
331
  onSpeechRecognition={handleSpeechRecognition}
306
332
  tooltipContent={buttonProps?.microphone?.tooltipContent}
307
333
  language={buttonProps?.microphone?.language}
334
+ isCompact={isCompact}
335
+ tooltipProps={buttonProps?.microphone?.tooltipProps}
308
336
  {...buttonProps?.microphone?.props}
309
337
  />
310
338
  )}
@@ -314,6 +342,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
314
342
  onClick={() => handleSend(message)}
315
343
  isDisabled={isSendButtonDisabled}
316
344
  tooltipContent={buttonProps?.send?.tooltipContent}
345
+ isCompact={isCompact}
346
+ tooltipProps={buttonProps?.send?.tooltipProps}
317
347
  {...buttonProps?.send?.props}
318
348
  />
319
349
  )}
@@ -323,7 +353,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
323
353
 
324
354
  const messageBarContents = (
325
355
  <>
326
- <div className="pf-chatbot__message-bar-input">
356
+ <div className={`pf-chatbot__message-bar-input ${isCompact ? 'pf-m-compact' : ''}`}>
327
357
  <TextArea
328
358
  className="pf-chatbot__message-textarea"
329
359
  value={message}
@@ -366,4 +396,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
366
396
  return <div className={`pf-chatbot__message-bar ${className ?? ''}`}>{messageBarContents}</div>;
367
397
  };
368
398
 
399
+ const MessageBar = forwardRef((props: MessageBarProps, ref: Ref<HTMLTextAreaElement>) => (
400
+ <MessageBarBase innerRef={ref} {...props} />
401
+ ));
402
+
403
+ export { MessageBar };
369
404
  export default MessageBar;
@@ -46,3 +46,13 @@
46
46
  box-shadow: 0 0 0 16px rgba(0, 102, 204, 0);
47
47
  }
48
48
  }
49
+
50
+ // ============================================================================
51
+ // Information density styles
52
+ // ============================================================================
53
+ .pf-v6-c-button.pf-chatbot__button--microphone.pf-m-compact {
54
+ width: 1.5rem;
55
+ height: 1.5rem;
56
+ padding: var(--pf-t--global--spacer--sm);
57
+ align-items: center;
58
+ }
@@ -1,7 +1,9 @@
1
1
  // ============================================================================
2
2
  // Chatbot Footer - Message Bar - Microphone
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent } from 'react';
5
+
6
+ import { useState, useCallback, useEffect } from 'react';
5
7
 
6
8
  // Import PatternFly components
7
9
  import { Button, ButtonProps, Tooltip, TooltipProps, Icon } from '@patternfly/react-core';
@@ -24,9 +26,10 @@ export interface MicrophoneButtonProps extends ButtonProps {
24
26
  tooltipContent?: { active?: string; inactive?: string };
25
27
  /** Locale code for language speech recognition is conducted in. This should be in the format 'en-US', a.k.a. the ISO 639-1 code, a dash, and the ISO_3166-1 code. */
26
28
  language?: string;
29
+ isCompact?: boolean;
27
30
  }
28
31
 
29
- export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> = ({
32
+ export const MicrophoneButton: FunctionComponent<MicrophoneButtonProps> = ({
30
33
  isListening,
31
34
  onIsListeningChange,
32
35
  onSpeechRecognition,
@@ -34,14 +37,15 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
34
37
  tooltipProps,
35
38
  tooltipContent = { active: 'Stop listening', inactive: 'Use microphone' },
36
39
  language = 'en-US',
40
+ isCompact,
37
41
  ...props
38
42
  }: MicrophoneButtonProps) => {
39
43
  // Microphone
40
44
  // --------------------------------------------------------------------------
41
- const [speechRecognition, setSpeechRecognition] = React.useState<SpeechRecognition>();
45
+ const [speechRecognition, setSpeechRecognition] = useState<SpeechRecognition>();
42
46
 
43
47
  // Listen for speech
44
- const startListening = React.useCallback(() => {
48
+ const startListening = useCallback(() => {
45
49
  if (speechRecognition) {
46
50
  speechRecognition.start();
47
51
  onIsListeningChange(true);
@@ -49,7 +53,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
49
53
  }, [onIsListeningChange, speechRecognition]);
50
54
 
51
55
  // Stop listening for speech
52
- const stopListening = React.useCallback(() => {
56
+ const stopListening = useCallback(() => {
53
57
  if (speechRecognition && isListening) {
54
58
  speechRecognition.stop();
55
59
  onIsListeningChange(false);
@@ -57,7 +61,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
57
61
  }, [isListening, onIsListeningChange, speechRecognition]);
58
62
 
59
63
  // Detect speech recognition browser support
60
- React.useEffect(() => {
64
+ useEffect(() => {
61
65
  if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
62
66
  // Initialize SpeechRecognition
63
67
  const recognition: SpeechRecognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
@@ -102,14 +106,16 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
102
106
  >
103
107
  <Button
104
108
  variant="plain"
105
- className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${className ?? ''}`}
106
- aria-label={props['aria-label'] || 'Microphone button'}
109
+ className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
110
+ aria-label={props['aria-label'] || (isListening ? 'Stop listening' : 'Use microphone')}
111
+ aria-pressed={isListening}
107
112
  onClick={isListening ? stopListening : startListening}
108
113
  icon={
109
- <Icon iconSize="xl" isInline>
114
+ <Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>
110
115
  <MicrophoneIcon />
111
116
  </Icon>
112
117
  }
118
+ size={isCompact ? 'sm' : undefined}
113
119
  {...props}
114
120
  />
115
121
  </Tooltip>
@@ -51,3 +51,13 @@
51
51
  transform: translate3d(0, 0, 0);
52
52
  }
53
53
  }
54
+
55
+ // ============================================================================
56
+ // Information density styles
57
+ // ============================================================================
58
+ .pf-v6-c-button.pf-chatbot__button--send.pf-m-compact {
59
+ width: 1.5rem;
60
+ height: 1.5rem;
61
+ padding: var(--pf-t--global--spacer--sm);
62
+ align-items: center;
63
+ }
@@ -1,34 +1,33 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
3
  import userEvent from '@testing-library/user-event';
5
4
  import { SendButton } from './SendButton';
6
5
  import { TooltipProps } from '@patternfly/react-core';
7
6
 
8
- const renderSend = (props?: { [key: string]: string | Omit<TooltipProps, 'content'> }) => {
7
+ const renderSend = (props?: { [key: string]: string | boolean | Omit<TooltipProps, 'content'> }) => {
9
8
  const spy = jest.fn();
10
9
  render(<SendButton onClick={spy} {...props} />);
11
10
  };
12
11
  describe('Send button', () => {
13
12
  it('should render button correctly', () => {
14
13
  renderSend();
15
- expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
14
+ expect(screen.getByRole('button', { name: 'Send' })).toBeTruthy();
16
15
  });
17
16
  it('should handle onClick correctly', async () => {
18
17
  const spy = jest.fn();
19
18
  render(<SendButton onClick={spy} />);
20
- await userEvent.click(screen.getByRole('button', { name: 'Send button' }));
19
+ await userEvent.click(screen.getByRole('button', { name: 'Send' }));
21
20
  expect(screen.getByRole('tooltip', { name: 'Send' })).toBeTruthy();
22
21
  expect(spy).toHaveBeenCalledTimes(1);
23
22
  });
24
23
  it('should handle custom tooltip correctly', async () => {
25
24
  render(<SendButton onClick={jest.fn} tooltipContent="Test" />);
26
- await userEvent.click(screen.getByRole('button', { name: 'Send button' }));
25
+ await userEvent.click(screen.getByRole('button', { name: 'Send' }));
27
26
  expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
28
27
  });
29
28
  it('should handle className prop', () => {
30
29
  renderSend({ className: 'test' });
31
- expect(screen.getByRole('button', { name: 'Send button' })).toHaveClass('test');
30
+ expect(screen.getByRole('button', { name: 'Send' })).toHaveClass('test');
32
31
  });
33
32
 
34
33
  it('should handle spread props, including aria-label', () => {
@@ -37,7 +36,11 @@ describe('Send button', () => {
37
36
  });
38
37
  it('should handle tooltipProps prop', async () => {
39
38
  renderSend({ tooltipProps: { id: 'test' } });
40
- await userEvent.click(screen.getByRole('button', { name: 'Send button' }));
39
+ await userEvent.click(screen.getByRole('button', { name: 'Send' }));
41
40
  expect(screen.getByRole('tooltip', { name: 'Send' })).toHaveAttribute('id', 'test');
42
41
  });
42
+ it('should handle isCompact', () => {
43
+ renderSend({ 'data-testid': 'button', isCompact: true });
44
+ expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
45
+ });
43
46
  });