@patternfly/chatbot 6.3.0-prerelease.9 → 6.4.0-prerelease.2

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 (595) 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 +12 -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 +1 -2
  8. package/dist/cjs/Chatbot/Chatbot.js +4 -9
  9. package/dist/cjs/Chatbot/Chatbot.test.js +11 -11
  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 +7 -3
  20. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +17 -34
  21. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +73 -64
  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 +3 -3
  27. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -15
  28. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +7 -7
  29. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +28 -28
  30. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  31. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +10 -23
  32. package/dist/cjs/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  33. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +2 -7
  34. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +5 -5
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.js +2 -5
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +5 -5
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -10
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +7 -10
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +2 -5
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +5 -5
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
  46. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +7 -10
  47. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
  48. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  49. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +19 -21
  50. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
  51. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -12
  52. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +17 -19
  53. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  54. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +2 -5
  55. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +23 -23
  56. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +2 -2
  57. package/dist/cjs/ChatbotModal/ChatbotModal.js +3 -9
  58. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +4 -16
  59. package/dist/cjs/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  60. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +2 -8
  61. package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  62. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +8 -13
  63. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +25 -25
  64. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
  65. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -20
  66. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +16 -16
  67. package/dist/cjs/CodeModal/CodeModal.d.ts +8 -2
  68. package/dist/cjs/CodeModal/CodeModal.js +8 -20
  69. package/dist/cjs/CodeModal/CodeModal.test.js +23 -4
  70. package/dist/cjs/Compare/Compare.d.ts +2 -2
  71. package/dist/cjs/Compare/Compare.js +7 -16
  72. package/dist/cjs/Compare/Compare.test.js +7 -9
  73. package/dist/cjs/FileDetails/FileDetails.d.ts +2 -2
  74. package/dist/cjs/FileDetails/FileDetails.js +2 -15
  75. package/dist/cjs/FileDetails/FileDetails.test.js +10 -10
  76. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  77. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.js +2 -5
  78. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +21 -21
  79. package/dist/cjs/FileDropZone/FileDropZone.d.ts +23 -3
  80. package/dist/cjs/FileDropZone/FileDropZone.js +11 -9
  81. package/dist/cjs/FileDropZone/FileDropZone.test.js +86 -5
  82. package/dist/cjs/LoadingMessage/LoadingMessage.d.ts +2 -2
  83. package/dist/cjs/LoadingMessage/LoadingMessage.js +2 -10
  84. package/dist/cjs/LoadingMessage/LoadingMessage.test.js +6 -6
  85. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  86. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +30 -21
  87. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  88. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -8
  89. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +1 -2
  90. package/dist/cjs/Message/ImageMessage/ImageMessage.js +2 -8
  91. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +1 -2
  92. package/dist/cjs/Message/LinkMessage/LinkMessage.js +6 -9
  93. package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +1 -2
  94. package/dist/cjs/Message/ListMessage/ListItemMessage.js +2 -8
  95. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  96. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -9
  97. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  98. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -9
  99. package/dist/cjs/Message/Message.d.ts +28 -10
  100. package/dist/cjs/Message/Message.js +50 -72
  101. package/dist/cjs/Message/Message.test.js +138 -82
  102. package/dist/cjs/Message/MessageInput.d.ts +4 -2
  103. package/dist/cjs/Message/MessageInput.js +6 -15
  104. package/dist/cjs/Message/MessageLoading.d.ts +1 -2
  105. package/dist/cjs/Message/MessageLoading.js +3 -8
  106. package/dist/cjs/Message/Plugins/index.d.ts +1 -0
  107. package/dist/cjs/Message/Plugins/index.js +5 -0
  108. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  109. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.js +24 -0
  110. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  111. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
  112. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -2
  113. package/dist/cjs/Message/QuickResponse/QuickResponse.js +7 -9
  114. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +2 -2
  115. package/dist/cjs/Message/QuickStarts/FallbackImg.js +5 -27
  116. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -2
  117. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +7 -43
  118. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  119. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +9 -38
  120. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +16 -16
  121. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  122. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +2 -26
  123. package/dist/cjs/Message/QuickStarts/types.d.ts +4 -3
  124. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +1 -2
  125. package/dist/cjs/Message/TableMessage/TableMessage.js +8 -10
  126. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +2 -3
  127. package/dist/cjs/Message/TableMessage/TbodyMessage.js +7 -9
  128. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +1 -2
  129. package/dist/cjs/Message/TableMessage/TdMessage.js +2 -8
  130. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +1 -2
  131. package/dist/cjs/Message/TableMessage/ThMessage.js +2 -8
  132. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +1 -2
  133. package/dist/cjs/Message/TableMessage/TheadMessage.js +2 -8
  134. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +2 -3
  135. package/dist/cjs/Message/TableMessage/TrMessage.js +8 -10
  136. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +1 -2
  137. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -9
  138. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +2 -2
  139. package/dist/cjs/Message/UserFeedback/CloseButton.js +2 -8
  140. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +2 -2
  141. package/dist/cjs/Message/UserFeedback/UserFeedback.js +12 -23
  142. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +53 -53
  143. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  144. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  145. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +81 -91
  146. package/dist/cjs/Message/index.d.ts +1 -0
  147. package/dist/cjs/Message/index.js +3 -1
  148. package/dist/cjs/MessageBar/AttachButton.d.ts +26 -3
  149. package/dist/cjs/MessageBar/AttachButton.js +10 -20
  150. package/dist/cjs/MessageBar/AttachButton.test.js +102 -24
  151. package/dist/cjs/MessageBar/MessageBar.d.ts +32 -4
  152. package/dist/cjs/MessageBar/MessageBar.js +30 -32
  153. package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
  154. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +2 -2
  155. package/dist/cjs/MessageBar/MicrophoneButton.js +7 -14
  156. package/dist/cjs/MessageBar/SendButton.d.ts +3 -2
  157. package/dist/cjs/MessageBar/SendButton.js +3 -11
  158. package/dist/cjs/MessageBar/SendButton.test.js +15 -15
  159. package/dist/cjs/MessageBar/StopButton.d.ts +3 -2
  160. package/dist/cjs/MessageBar/StopButton.js +3 -12
  161. package/dist/cjs/MessageBar/StopButton.test.js +15 -15
  162. package/dist/cjs/MessageBox/JumpButton.d.ts +2 -2
  163. package/dist/cjs/MessageBox/JumpButton.js +2 -10
  164. package/dist/cjs/MessageBox/JumpButton.test.js +10 -10
  165. package/dist/cjs/MessageBox/MessageBox.d.ts +21 -5
  166. package/dist/cjs/MessageBox/MessageBox.js +170 -45
  167. package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
  168. package/dist/cjs/MessageDivider/MessageDivider.d.ts +9 -0
  169. package/dist/cjs/MessageDivider/MessageDivider.js +23 -0
  170. package/dist/cjs/MessageDivider/MessageDivider.test.d.ts +1 -0
  171. package/dist/cjs/MessageDivider/MessageDivider.test.js +29 -0
  172. package/dist/cjs/MessageDivider/index.d.ts +2 -0
  173. package/dist/cjs/MessageDivider/index.js +23 -0
  174. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  175. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +3 -6
  176. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  177. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +34 -12
  178. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +5 -5
  179. package/dist/cjs/ResponseActions/ResponseActionButton.js +5 -8
  180. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +19 -19
  181. package/dist/cjs/ResponseActions/ResponseActions.d.ts +8 -3
  182. package/dist/cjs/ResponseActions/ResponseActions.js +39 -18
  183. package/dist/cjs/ResponseActions/ResponseActions.test.js +125 -41
  184. package/dist/cjs/Settings/SettingsForm.d.ts +2 -2
  185. package/dist/cjs/Settings/SettingsForm.js +2 -8
  186. package/dist/cjs/Settings/SettingsForm.test.js +9 -12
  187. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  188. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
  189. package/dist/cjs/SourcesCard/SourcesCard.d.ts +12 -3
  190. package/dist/cjs/SourcesCard/SourcesCard.js +17 -42
  191. package/dist/cjs/SourcesCard/SourcesCard.test.js +70 -60
  192. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +3 -3
  193. package/dist/cjs/TermsOfUse/TermsOfUse.js +4 -16
  194. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
  195. package/dist/cjs/index.d.ts +2 -0
  196. package/dist/cjs/index.js +4 -1
  197. package/dist/css/main.css +71 -62
  198. package/dist/css/main.css.map +1 -1
  199. package/dist/dynamic/MessageDivider/package.json +1 -0
  200. package/dist/esm/AttachMenu/AttachMenu.d.ts +2 -2
  201. package/dist/esm/AttachMenu/AttachMenu.js +2 -9
  202. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +12 -2
  203. package/dist/esm/AttachmentEdit/AttachmentEdit.js +3 -6
  204. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  205. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +30 -5
  206. package/dist/esm/Chatbot/Chatbot.d.ts +1 -2
  207. package/dist/esm/Chatbot/Chatbot.js +4 -6
  208. package/dist/esm/Chatbot/Chatbot.test.js +6 -6
  209. package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  210. package/dist/esm/ChatbotAlert/ChatbotAlert.js +4 -5
  211. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +4 -4
  212. package/dist/esm/ChatbotContent/ChatbotContent.d.ts +3 -3
  213. package/dist/esm/ChatbotContent/ChatbotContent.js +2 -5
  214. package/dist/esm/ChatbotContent/ChatbotContent.test.js +3 -3
  215. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  216. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  217. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +8 -10
  218. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +7 -3
  219. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +19 -36
  220. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +43 -34
  221. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  222. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +2 -6
  223. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  224. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +2 -22
  225. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +3 -3
  226. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -12
  227. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +4 -4
  228. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +5 -5
  229. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  230. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +10 -23
  231. package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  232. package/dist/esm/ChatbotHeader/ChatbotHeader.js +2 -4
  233. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +3 -3
  234. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  235. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +2 -2
  236. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +3 -3
  237. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
  238. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -7
  239. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +4 -4
  240. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  241. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +2 -2
  242. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +3 -3
  243. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
  244. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
  245. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +4 -4
  246. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
  247. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  248. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +9 -8
  249. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
  250. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
  251. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +9 -8
  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 +2 -2
  256. package/dist/esm/ChatbotModal/ChatbotModal.js +3 -6
  257. package/dist/esm/ChatbotModal/ChatbotModal.test.js +2 -14
  258. package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  259. package/dist/esm/ChatbotPopover/ChatbotPopover.js +2 -5
  260. package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  261. package/dist/esm/ChatbotToggle/ChatbotToggle.js +8 -13
  262. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +8 -8
  263. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
  264. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -17
  265. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +8 -8
  266. package/dist/esm/CodeModal/CodeModal.d.ts +8 -2
  267. package/dist/esm/CodeModal/CodeModal.js +8 -20
  268. package/dist/esm/CodeModal/CodeModal.test.js +22 -3
  269. package/dist/esm/Compare/Compare.d.ts +2 -2
  270. package/dist/esm/Compare/Compare.js +7 -13
  271. package/dist/esm/Compare/Compare.test.js +4 -6
  272. package/dist/esm/FileDetails/FileDetails.d.ts +2 -2
  273. package/dist/esm/FileDetails/FileDetails.js +2 -15
  274. package/dist/esm/FileDetails/FileDetails.test.js +4 -4
  275. package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  276. package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +2 -5
  277. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +9 -9
  278. package/dist/esm/FileDropZone/FileDropZone.d.ts +23 -3
  279. package/dist/esm/FileDropZone/FileDropZone.js +11 -6
  280. package/dist/esm/FileDropZone/FileDropZone.test.js +84 -3
  281. package/dist/esm/LoadingMessage/LoadingMessage.d.ts +2 -2
  282. package/dist/esm/LoadingMessage/LoadingMessage.js +2 -10
  283. package/dist/esm/LoadingMessage/LoadingMessage.test.js +3 -3
  284. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  285. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +31 -19
  286. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  287. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +5 -5
  288. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +1 -2
  289. package/dist/esm/Message/ImageMessage/ImageMessage.js +2 -5
  290. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +1 -2
  291. package/dist/esm/Message/LinkMessage/LinkMessage.js +6 -6
  292. package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +1 -2
  293. package/dist/esm/Message/ListMessage/ListItemMessage.js +2 -5
  294. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  295. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -6
  296. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  297. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -6
  298. package/dist/esm/Message/Message.d.ts +28 -10
  299. package/dist/esm/Message/Message.js +50 -72
  300. package/dist/esm/Message/Message.test.js +138 -82
  301. package/dist/esm/Message/MessageInput.d.ts +4 -2
  302. package/dist/esm/Message/MessageInput.js +6 -12
  303. package/dist/esm/Message/MessageLoading.d.ts +1 -2
  304. package/dist/esm/Message/MessageLoading.js +2 -4
  305. package/dist/esm/Message/Plugins/index.d.ts +1 -0
  306. package/dist/esm/Message/Plugins/index.js +1 -0
  307. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  308. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.js +20 -0
  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 +2 -2
  312. package/dist/esm/Message/QuickResponse/QuickResponse.js +7 -6
  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 +2 -2
  316. package/dist/esm/Message/QuickStarts/QuickStartTile.js +7 -20
  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 +12 -23
  341. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +21 -21
  342. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  343. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  344. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +26 -36
  345. package/dist/esm/Message/index.d.ts +1 -0
  346. package/dist/esm/Message/index.js +1 -0
  347. package/dist/esm/MessageBar/AttachButton.d.ts +26 -3
  348. package/dist/esm/MessageBar/AttachButton.js +10 -17
  349. package/dist/esm/MessageBar/AttachButton.test.js +95 -17
  350. package/dist/esm/MessageBar/MessageBar.d.ts +32 -4
  351. package/dist/esm/MessageBar/MessageBar.js +28 -30
  352. package/dist/esm/MessageBar/MessageBar.test.js +87 -73
  353. package/dist/esm/MessageBar/MicrophoneButton.d.ts +2 -2
  354. package/dist/esm/MessageBar/MicrophoneButton.js +7 -11
  355. package/dist/esm/MessageBar/SendButton.d.ts +3 -2
  356. package/dist/esm/MessageBar/SendButton.js +3 -8
  357. package/dist/esm/MessageBar/SendButton.test.js +9 -9
  358. package/dist/esm/MessageBar/StopButton.d.ts +3 -2
  359. package/dist/esm/MessageBar/StopButton.js +3 -9
  360. package/dist/esm/MessageBar/StopButton.test.js +9 -9
  361. package/dist/esm/MessageBox/JumpButton.d.ts +2 -2
  362. package/dist/esm/MessageBox/JumpButton.js +2 -7
  363. package/dist/esm/MessageBox/JumpButton.test.js +9 -9
  364. package/dist/esm/MessageBox/MessageBox.d.ts +21 -5
  365. package/dist/esm/MessageBox/MessageBox.js +170 -45
  366. package/dist/esm/MessageBox/MessageBox.test.js +220 -7
  367. package/dist/esm/MessageDivider/MessageDivider.d.ts +9 -0
  368. package/dist/esm/MessageDivider/MessageDivider.js +21 -0
  369. package/dist/esm/MessageDivider/MessageDivider.test.d.ts +1 -0
  370. package/dist/esm/MessageDivider/MessageDivider.test.js +24 -0
  371. package/dist/esm/MessageDivider/index.d.ts +2 -0
  372. package/dist/esm/MessageDivider/index.js +2 -0
  373. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  374. package/dist/esm/PreviewAttachment/PreviewAttachment.js +3 -6
  375. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  376. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +30 -5
  377. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +5 -5
  378. package/dist/esm/ResponseActions/ResponseActionButton.js +5 -5
  379. package/dist/esm/ResponseActions/ResponseActionButton.test.js +7 -7
  380. package/dist/esm/ResponseActions/ResponseActions.d.ts +8 -3
  381. package/dist/esm/ResponseActions/ResponseActions.js +40 -19
  382. package/dist/esm/ResponseActions/ResponseActions.test.js +100 -16
  383. package/dist/esm/Settings/SettingsForm.d.ts +2 -2
  384. package/dist/esm/Settings/SettingsForm.js +2 -5
  385. package/dist/esm/Settings/SettingsForm.test.js +6 -6
  386. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  387. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
  388. package/dist/esm/SourcesCard/SourcesCard.d.ts +12 -3
  389. package/dist/esm/SourcesCard/SourcesCard.js +17 -39
  390. package/dist/esm/SourcesCard/SourcesCard.test.js +29 -19
  391. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +3 -3
  392. package/dist/esm/TermsOfUse/TermsOfUse.js +4 -16
  393. package/dist/esm/TermsOfUse/TermsOfUse.test.js +10 -12
  394. package/dist/esm/index.d.ts +2 -0
  395. package/dist/esm/index.js +2 -0
  396. package/dist/tsconfig.tsbuildinfo +1 -1
  397. package/package.json +9 -8
  398. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +10 -0
  399. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +51 -0
  400. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +9 -9
  401. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +5 -5
  402. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  403. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -20
  404. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +2 -2
  405. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +9 -9
  406. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +4 -4
  407. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +7 -7
  408. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithClickedResponseActions.tsx +25 -0
  409. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +3 -12
  410. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithDividers.tsx +24 -0
  411. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +4 -4
  412. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
  413. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +2 -2
  414. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  415. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +3 -3
  416. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +3 -3
  417. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +33 -0
  418. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +5 -5
  419. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +61 -18
  420. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +4 -4
  421. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +59 -36
  422. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +2 -2
  423. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  424. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +10 -13
  425. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +19 -10
  426. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +5 -5
  427. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +5 -5
  428. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +6 -6
  429. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithPin.tsx +196 -0
  430. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +7 -7
  431. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +59 -34
  432. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +2 -2
  433. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +9 -9
  434. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarDisabled.tsx +3 -3
  435. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarLanguage.tsx +2 -2
  436. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +2 -2
  437. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +74 -37
  438. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +3 -3
  439. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +8 -8
  440. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
  441. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +16 -23
  442. package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +3 -3
  443. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +16 -23
  444. package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +5 -5
  445. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +3 -3
  446. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +91 -48
  447. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +82 -39
  448. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +12 -1
  449. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
  450. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +34 -1
  451. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +19 -25
  452. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +42 -15
  453. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +15 -14
  454. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +19 -25
  455. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotDisplayMode.tsx +486 -0
  456. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +17 -22
  457. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
  458. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotTranscripts.tsx +565 -0
  459. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +17 -22
  460. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +13 -13
  461. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +7 -7
  462. package/patternfly-docs/content/extensions/chatbot/img/quick-response-confirmation.svg +67 -0
  463. package/src/AttachMenu/AttachMenu.tsx +2 -2
  464. package/src/AttachmentEdit/AttachmentEdit.test.tsx +46 -2
  465. package/src/AttachmentEdit/AttachmentEdit.tsx +25 -7
  466. package/src/Chatbot/Chatbot.scss +1 -1
  467. package/src/Chatbot/Chatbot.test.tsx +0 -1
  468. package/src/Chatbot/Chatbot.tsx +5 -3
  469. package/src/ChatbotAlert/ChatbotAlert.test.tsx +0 -1
  470. package/src/ChatbotAlert/ChatbotAlert.tsx +2 -2
  471. package/src/ChatbotContent/ChatbotContent.scss +1 -1
  472. package/src/ChatbotContent/ChatbotContent.test.tsx +0 -1
  473. package/src/ChatbotContent/ChatbotContent.tsx +3 -3
  474. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +0 -1
  475. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +6 -4
  476. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +14 -2
  477. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +61 -3
  478. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +37 -18
  479. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
  480. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
  481. package/src/ChatbotFooter/ChatbotFooter.scss +1 -1
  482. package/src/ChatbotFooter/ChatbotFooter.test.tsx +0 -1
  483. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -3
  484. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
  485. package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
  486. package/src/ChatbotHeader/ChatbotHeader.scss +3 -3
  487. package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
  488. package/src/ChatbotHeader/ChatbotHeader.tsx +3 -6
  489. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
  490. package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
  491. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +0 -1
  492. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +5 -4
  493. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
  494. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +2 -2
  495. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +0 -1
  496. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -7
  497. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +9 -1
  498. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +12 -5
  499. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +9 -1
  500. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +26 -6
  501. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
  502. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
  503. package/src/ChatbotModal/ChatbotModal.test.tsx +0 -1
  504. package/src/ChatbotModal/ChatbotModal.tsx +2 -2
  505. package/src/ChatbotPopover/ChatbotPopover.tsx +3 -3
  506. package/src/ChatbotToggle/ChatbotToggle.scss +2 -2
  507. package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
  508. package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
  509. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +0 -1
  510. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +2 -2
  511. package/src/CodeModal/CodeModal.test.tsx +29 -2
  512. package/src/CodeModal/CodeModal.tsx +18 -8
  513. package/src/Compare/Compare.test.tsx +0 -1
  514. package/src/Compare/Compare.tsx +7 -6
  515. package/src/FileDetails/FileDetails.test.tsx +0 -1
  516. package/src/FileDetails/FileDetails.tsx +1 -1
  517. package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
  518. package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
  519. package/src/FileDropZone/FileDropZone.test.tsx +112 -1
  520. package/src/FileDropZone/FileDropZone.tsx +45 -5
  521. package/src/LoadingMessage/LoadingMessage.test.tsx +0 -1
  522. package/src/LoadingMessage/LoadingMessage.tsx +2 -2
  523. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +7 -0
  524. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +104 -20
  525. package/src/Message/ErrorMessage/ErrorMessage.tsx +0 -1
  526. package/src/Message/ImageMessage/ImageMessage.tsx +1 -2
  527. package/src/Message/LinkMessage/LinkMessage.tsx +0 -1
  528. package/src/Message/ListMessage/ListItemMessage.tsx +0 -1
  529. package/src/Message/ListMessage/OrderedListMessage.tsx +0 -1
  530. package/src/Message/ListMessage/UnorderedListMessage.tsx +0 -1
  531. package/src/Message/Message.scss +9 -7
  532. package/src/Message/Message.test.tsx +84 -6
  533. package/src/Message/Message.tsx +39 -18
  534. package/src/Message/MessageInput.tsx +9 -5
  535. package/src/Message/MessageLoading.tsx +0 -2
  536. package/src/Message/Plugins/index.ts +1 -0
  537. package/src/Message/Plugins/rehypeCodeBlockToggle.ts +24 -0
  538. package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
  539. package/src/Message/QuickResponse/QuickResponse.tsx +4 -3
  540. package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
  541. package/src/Message/QuickStarts/QuickStartTile.tsx +3 -3
  542. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +0 -1
  543. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +4 -3
  544. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +2 -2
  545. package/src/Message/QuickStarts/types.ts +4 -3
  546. package/src/Message/TableMessage/TableMessage.tsx +4 -4
  547. package/src/Message/TableMessage/TbodyMessage.tsx +3 -3
  548. package/src/Message/TableMessage/TdMessage.tsx +1 -2
  549. package/src/Message/TableMessage/ThMessage.tsx +1 -2
  550. package/src/Message/TableMessage/TheadMessage.tsx +3 -2
  551. package/src/Message/TableMessage/TrMessage.tsx +4 -4
  552. package/src/Message/TextMessage/TextMessage.scss +2 -5
  553. package/src/Message/TextMessage/TextMessage.tsx +1 -2
  554. package/src/Message/UserFeedback/CloseButton.tsx +2 -2
  555. package/src/Message/UserFeedback/UserFeedback.test.tsx +0 -1
  556. package/src/Message/UserFeedback/UserFeedback.tsx +8 -6
  557. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +0 -1
  558. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +16 -14
  559. package/src/Message/index.ts +1 -0
  560. package/src/MessageBar/AttachButton.test.tsx +127 -8
  561. package/src/MessageBar/AttachButton.tsx +50 -7
  562. package/src/MessageBar/MessageBar.test.tsx +81 -30
  563. package/src/MessageBar/MessageBar.tsx +86 -20
  564. package/src/MessageBar/MicrophoneButton.tsx +10 -7
  565. package/src/MessageBar/SendButton.scss +3 -3
  566. package/src/MessageBar/SendButton.test.tsx +5 -6
  567. package/src/MessageBar/SendButton.tsx +4 -3
  568. package/src/MessageBar/StopButton.test.tsx +5 -6
  569. package/src/MessageBar/StopButton.tsx +4 -3
  570. package/src/MessageBox/JumpButton.scss +1 -1
  571. package/src/MessageBox/JumpButton.test.tsx +4 -5
  572. package/src/MessageBox/JumpButton.tsx +3 -3
  573. package/src/MessageBox/MessageBox.test.tsx +295 -5
  574. package/src/MessageBox/MessageBox.tsx +301 -84
  575. package/src/MessageDivider/MessageDivider.scss +45 -0
  576. package/src/MessageDivider/MessageDivider.test.tsx +24 -0
  577. package/src/MessageDivider/MessageDivider.tsx +35 -0
  578. package/src/MessageDivider/index.ts +3 -0
  579. package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
  580. package/src/PreviewAttachment/PreviewAttachment.tsx +24 -6
  581. package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
  582. package/src/ResponseActions/ResponseActionButton.tsx +6 -5
  583. package/src/ResponseActions/ResponseActions.test.tsx +126 -4
  584. package/src/ResponseActions/ResponseActions.tsx +92 -12
  585. package/src/Settings/SettingsForm.test.tsx +0 -1
  586. package/src/Settings/SettingsForm.tsx +2 -7
  587. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
  588. package/src/SourcesCard/SourcesCard.test.tsx +14 -1
  589. package/src/SourcesCard/SourcesCard.tsx +19 -7
  590. package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
  591. package/src/TermsOfUse/TermsOfUse.tsx +6 -5
  592. package/src/index.ts +3 -0
  593. package/src/main.scss +1 -52
  594. package/tsconfig.cjs.json +0 -1
  595. 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,5 +1,7 @@
1
- import React from 'react';
2
- import { ButtonProps, DropEvent, TextArea, TextAreaProps, TooltipProps } from '@patternfly/react-core';
1
+ import type { ChangeEvent, FunctionComponent, KeyboardEvent as ReactKeyboardEvent, Ref } from 'react';
2
+ import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
3
+ import { Accept, DropEvent, DropzoneOptions, FileError, FileRejection } from 'react-dropzone';
4
+ import { ButtonProps, TextArea, TextAreaProps, TooltipProps } from '@patternfly/react-core';
3
5
 
4
6
  // Import Chatbot components
5
7
  import SendButton from './SendButton';
@@ -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 */
@@ -51,6 +53,28 @@ export interface MessageBarProps extends TextAreaProps {
51
53
  handleStopButton?: (event: React.MouseEvent<HTMLButtonElement>) => void;
52
54
  /** Callback function for when attach button is used to upload a file */
53
55
  handleAttach?: (data: File[], event: DropEvent) => void;
56
+ /** Specifies the file types accepted by the attachment upload component.
57
+ * Files that don't match the accepted types will be disabled in the file picker.
58
+ * For example,
59
+ * allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
60
+ **/
61
+ allowedFileTypes?: Accept;
62
+ /** Minimum file size allowed */
63
+ minSize?: number;
64
+ /** Max file size allowed */
65
+ maxSize?: number;
66
+ /** Max number of files allowed */
67
+ maxFiles?: number;
68
+ /** Whether attachments are disabled */
69
+ isAttachmentDisabled?: boolean;
70
+ /** Callback when file(s) are attached */
71
+ onAttach?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
72
+ /** Callback function for AttachButton when an attachment fails */
73
+ onAttachRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
74
+ /** Validator for files; see https://react-dropzone.js.org/#!/Custom%20validation for more information */
75
+ validator?: <T extends File>(file: T) => FileError | readonly FileError[] | null;
76
+ /** Additional props passed to react-dropzone */
77
+ dropzoneProps?: DropzoneOptions;
54
78
  /** Props to enable a menu that opens when the Attach button is clicked, instead of the attachment window */
55
79
  attachMenuProps?: MessageBarWithAttachMenuProps;
56
80
  /** Flag to provide manual control over whether send button is disabled */
@@ -76,10 +100,13 @@ export interface MessageBarProps extends TextAreaProps {
76
100
  onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>, value: string | number) => void;
77
101
  /** Display mode of chatbot, if you want to message bar to resize when the display mode changes */
78
102
  displayMode?: ChatbotDisplayMode;
103
+ /** Whether message bar is compact */
79
104
  isCompact?: boolean;
105
+ /** Ref applied to message bar textarea, for use with focus or other custom behaviors */
106
+ innerRef?: React.Ref<HTMLTextAreaElement>;
80
107
  }
81
108
 
82
- export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
109
+ export const MessageBarBase: FunctionComponent<MessageBarProps> = ({
83
110
  onSendMessage,
84
111
  className,
85
112
  alwayShowSendButton,
@@ -97,15 +124,26 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
97
124
  displayMode,
98
125
  value,
99
126
  isCompact = false,
127
+ allowedFileTypes,
128
+ minSize,
129
+ maxSize,
130
+ maxFiles,
131
+ isAttachmentDisabled,
132
+ onAttach,
133
+ onAttachRejected,
134
+ validator,
135
+ dropzoneProps,
136
+ innerRef,
100
137
  ...props
101
138
  }: MessageBarProps) => {
102
139
  // Text Input
103
140
  // --------------------------------------------------------------------------
104
- const [message, setMessage] = React.useState<string | number>(value ?? '');
105
- const [isListeningMessage, setIsListeningMessage] = React.useState<boolean>(false);
106
- const [hasSentMessage, setHasSentMessage] = React.useState(false);
107
- const textareaRef = React.useRef<HTMLTextAreaElement>(null);
108
- const attachButtonRef = React.useRef<HTMLButtonElement>(null);
141
+ const [message, setMessage] = useState<string | number>(value ?? '');
142
+ const [isListeningMessage, setIsListeningMessage] = useState<boolean>(false);
143
+ const [hasSentMessage, setHasSentMessage] = useState(false);
144
+ const inputRef = useRef<HTMLTextAreaElement>(null);
145
+ const textareaRef = (innerRef as React.RefObject<HTMLTextAreaElement>) ?? inputRef;
146
+ const attachButtonRef = useRef<HTMLButtonElement>(null);
109
147
 
110
148
  const topMargin = '1rem';
111
149
 
@@ -151,7 +189,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
151
189
  return lines > 2;
152
190
  };
153
191
 
154
- const setAutoWidth = React.useCallback((field: HTMLTextAreaElement) => {
192
+ const setAutoWidth = useCallback((field: HTMLTextAreaElement) => {
155
193
  const parent = field.parentElement;
156
194
  if (parent) {
157
195
  const grandparent = parent.parentElement;
@@ -169,7 +207,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
169
207
  }
170
208
  };
171
209
 
172
- React.useEffect(() => {
210
+ useEffect(() => {
173
211
  const field = textareaRef.current;
174
212
  if (field) {
175
213
  if (field.value === '') {
@@ -200,19 +238,19 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
200
238
  };
201
239
  }, [setAutoWidth]);
202
240
 
203
- React.useEffect(() => {
241
+ useEffect(() => {
204
242
  const field = textareaRef.current;
205
243
  if (field) {
206
244
  if (field.value === '') {
207
- setInitialLineHeight(textareaRef.current);
245
+ setInitialLineHeight(field);
208
246
  } else {
209
- setAutoHeight(textareaRef.current);
247
+ setAutoHeight(field);
210
248
  setAutoWidth(field);
211
249
  }
212
250
  }
213
251
  }, [displayMode, message, setAutoWidth]);
214
252
 
215
- React.useEffect(() => {
253
+ useEffect(() => {
216
254
  const field = textareaRef.current;
217
255
  if (field) {
218
256
  setInitialLineHeight(field);
@@ -220,7 +258,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
220
258
  }
221
259
  }, [hasSentMessage]);
222
260
 
223
- const handleChange = React.useCallback(
261
+ const handleChange = useCallback(
224
262
  (event) => {
225
263
  onChange && onChange(event, event.target.value);
226
264
  if (textareaRef.current) {
@@ -236,7 +274,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
236
274
  );
237
275
 
238
276
  // Handle sending message
239
- const handleSend = React.useCallback(
277
+ const handleSend = useCallback(
240
278
  (newMessage: string | number) => {
241
279
  onSendMessage(newMessage);
242
280
  setHasSentMessage(true);
@@ -245,8 +283,8 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
245
283
  [onSendMessage]
246
284
  );
247
285
 
248
- const handleKeyDown = React.useCallback(
249
- (event: React.KeyboardEvent) => {
286
+ const handleKeyDown = useCallback(
287
+ (event: ReactKeyboardEvent) => {
250
288
  if (event.key === 'Enter' && !event.shiftKey) {
251
289
  event.preventDefault();
252
290
  if (!isSendButtonDisabled && !hasStopButton) {
@@ -269,7 +307,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
269
307
 
270
308
  const handleSpeechRecognition = (message) => {
271
309
  setMessage(message);
272
- onChange && onChange({} as React.ChangeEvent<HTMLTextAreaElement>, message);
310
+ onChange && onChange({} as ChangeEvent<HTMLTextAreaElement>, message);
273
311
  };
274
312
 
275
313
  const renderButtons = () => {
@@ -279,6 +317,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
279
317
  onClick={handleStopButton}
280
318
  tooltipContent={buttonProps?.stop?.tooltipContent}
281
319
  isCompact={isCompact}
320
+ tooltipProps={buttonProps?.stop?.tooltipProps}
282
321
  {...buttonProps?.stop?.props}
283
322
  />
284
323
  );
@@ -292,6 +331,16 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
292
331
  isDisabled={isListeningMessage}
293
332
  tooltipContent={buttonProps?.attach?.tooltipContent}
294
333
  isCompact={isCompact}
334
+ tooltipProps={buttonProps?.attach?.tooltipProps}
335
+ allowedFileTypes={allowedFileTypes}
336
+ minSize={minSize}
337
+ maxSize={maxSize}
338
+ maxFiles={maxFiles}
339
+ isAttachmentDisabled={isAttachmentDisabled}
340
+ onAttach={onAttach}
341
+ onAttachRejected={onAttachRejected}
342
+ validator={validator}
343
+ dropzoneProps={dropzoneProps}
295
344
  {...buttonProps?.attach?.props}
296
345
  />
297
346
  )}
@@ -302,6 +351,16 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
302
351
  tooltipContent={buttonProps?.attach?.tooltipContent}
303
352
  inputTestId={buttonProps?.attach?.inputTestId}
304
353
  isCompact={isCompact}
354
+ tooltipProps={buttonProps?.attach?.tooltipProps}
355
+ allowedFileTypes={allowedFileTypes}
356
+ minSize={minSize}
357
+ maxSize={maxSize}
358
+ maxFiles={maxFiles}
359
+ isAttachmentDisabled={isAttachmentDisabled}
360
+ onAttach={onAttach}
361
+ onAttachRejected={onAttachRejected}
362
+ validator={validator}
363
+ dropzoneProps={dropzoneProps}
305
364
  {...buttonProps?.attach?.props}
306
365
  />
307
366
  )}
@@ -313,6 +372,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
313
372
  tooltipContent={buttonProps?.microphone?.tooltipContent}
314
373
  language={buttonProps?.microphone?.language}
315
374
  isCompact={isCompact}
375
+ tooltipProps={buttonProps?.microphone?.tooltipProps}
316
376
  {...buttonProps?.microphone?.props}
317
377
  />
318
378
  )}
@@ -323,6 +383,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
323
383
  isDisabled={isSendButtonDisabled}
324
384
  tooltipContent={buttonProps?.send?.tooltipContent}
325
385
  isCompact={isCompact}
386
+ tooltipProps={buttonProps?.send?.tooltipProps}
326
387
  {...buttonProps?.send?.props}
327
388
  />
328
389
  )}
@@ -375,4 +436,9 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
375
436
  return <div className={`pf-chatbot__message-bar ${className ?? ''}`}>{messageBarContents}</div>;
376
437
  };
377
438
 
439
+ const MessageBar = forwardRef((props: MessageBarProps, ref: Ref<HTMLTextAreaElement>) => (
440
+ <MessageBarBase innerRef={ref} {...props} />
441
+ ));
442
+
443
+ export { MessageBar };
378
444
  export default MessageBar;
@@ -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';
@@ -27,7 +29,7 @@ export interface MicrophoneButtonProps extends ButtonProps {
27
29
  isCompact?: boolean;
28
30
  }
29
31
 
30
- export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> = ({
32
+ export const MicrophoneButton: FunctionComponent<MicrophoneButtonProps> = ({
31
33
  isListening,
32
34
  onIsListeningChange,
33
35
  onSpeechRecognition,
@@ -40,10 +42,10 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
40
42
  }: MicrophoneButtonProps) => {
41
43
  // Microphone
42
44
  // --------------------------------------------------------------------------
43
- const [speechRecognition, setSpeechRecognition] = React.useState<SpeechRecognition>();
45
+ const [speechRecognition, setSpeechRecognition] = useState<SpeechRecognition>();
44
46
 
45
47
  // Listen for speech
46
- const startListening = React.useCallback(() => {
48
+ const startListening = useCallback(() => {
47
49
  if (speechRecognition) {
48
50
  speechRecognition.start();
49
51
  onIsListeningChange(true);
@@ -51,7 +53,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
51
53
  }, [onIsListeningChange, speechRecognition]);
52
54
 
53
55
  // Stop listening for speech
54
- const stopListening = React.useCallback(() => {
56
+ const stopListening = useCallback(() => {
55
57
  if (speechRecognition && isListening) {
56
58
  speechRecognition.stop();
57
59
  onIsListeningChange(false);
@@ -59,7 +61,7 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
59
61
  }, [isListening, onIsListeningChange, speechRecognition]);
60
62
 
61
63
  // Detect speech recognition browser support
62
- React.useEffect(() => {
64
+ useEffect(() => {
63
65
  if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
64
66
  // Initialize SpeechRecognition
65
67
  const recognition: SpeechRecognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
@@ -105,7 +107,8 @@ export const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps> =
105
107
  <Button
106
108
  variant="plain"
107
109
  className={`pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
108
- aria-label={props['aria-label'] || 'Microphone button'}
110
+ aria-label={props['aria-label'] || (isListening ? 'Stop listening' : 'Use microphone')}
111
+ aria-pressed={isListening}
109
112
  onClick={isListening ? stopListening : startListening}
110
113
  icon={
111
114
  <Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>
@@ -13,11 +13,11 @@
13
13
 
14
14
  &:hover,
15
15
  &:focus {
16
- background-color: var(--pf-t--chatbot--blue-icon--background--color--hover);
16
+ background-color: rgba(146, 197, 249, 0.25); // --pf-t--global--color--nonstatus--blue--default @ 25%;
17
17
  color: var(--pf-t--global--color--brand--hover);
18
18
 
19
19
  .pf-v6-c-button__icon {
20
- color: var(--pf-t--chatbot--blue-icon--fill--hover);
20
+ color: var(--pf-t--global--color--brand--hover);
21
21
  }
22
22
  }
23
23
  }
@@ -37,7 +37,7 @@
37
37
 
38
38
  .pf-v6-c-button.pf-chatbot__button--send:hover,
39
39
  .pf-v6-c-button.pf-chatbot__button--send:focus {
40
- background-color: var(--pf-t--chatbot--blue-icon--background--color--hover);
40
+ background-color: rgba(146, 197, 249, 0.25); // --pf-t--global--color--nonstatus--blue--default @ 25%;
41
41
  }
42
42
  }
43
43
 
@@ -1,4 +1,3 @@
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';
@@ -12,23 +11,23 @@ const renderSend = (props?: { [key: string]: string | boolean | Omit<TooltipProp
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,7 @@ 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
  });
43
42
  it('should handle isCompact', () => {
@@ -1,7 +1,7 @@
1
1
  // ============================================================================
2
2
  // Chatbot Footer - Message Bar - Send
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent } from 'react';
5
5
 
6
6
  // Import PatternFly components
7
7
  import { Button, ButtonProps, Tooltip, TooltipProps, Icon } from '@patternfly/react-core';
@@ -17,10 +17,11 @@ export interface SendButtonProps extends ButtonProps {
17
17
  tooltipProps?: Omit<TooltipProps, 'content'>;
18
18
  /** English text "Send" used in the tooltip */
19
19
  tooltipContent?: string;
20
+ /** Whether send button has compact styling */
20
21
  isCompact?: boolean;
21
22
  }
22
23
 
23
- export const SendButton: React.FunctionComponent<SendButtonProps> = ({
24
+ export const SendButton: FunctionComponent<SendButtonProps> = ({
24
25
  className,
25
26
  onClick,
26
27
  tooltipProps,
@@ -43,7 +44,7 @@ export const SendButton: React.FunctionComponent<SendButtonProps> = ({
43
44
  <Button
44
45
  variant="plain"
45
46
  className={`pf-chatbot__button--send ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
46
- aria-label={props['aria-label'] || 'Send button'}
47
+ aria-label={props['aria-label'] || 'Send'}
47
48
  onClick={onClick}
48
49
  icon={
49
50
  <Icon iconSize={isCompact ? 'lg' : 'xl'} isInline>