@patternfly/chatbot 6.3.0-prerelease.9 → 6.3.0

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 (564) 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 +2 -2
  20. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
  21. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +56 -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 -2
  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 +34 -16
  87. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  88. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +139 -0
  89. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  90. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -8
  91. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +1 -2
  92. package/dist/cjs/Message/ImageMessage/ImageMessage.js +2 -8
  93. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +1 -2
  94. package/dist/cjs/Message/LinkMessage/LinkMessage.js +6 -9
  95. package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +1 -2
  96. package/dist/cjs/Message/ListMessage/ListItemMessage.js +2 -8
  97. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  98. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -9
  99. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  100. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -9
  101. package/dist/cjs/Message/Message.d.ts +24 -8
  102. package/dist/cjs/Message/Message.js +49 -71
  103. package/dist/cjs/Message/Message.test.js +112 -82
  104. package/dist/cjs/Message/MessageInput.d.ts +2 -2
  105. package/dist/cjs/Message/MessageInput.js +5 -14
  106. package/dist/cjs/Message/MessageLoading.d.ts +1 -2
  107. package/dist/cjs/Message/MessageLoading.js +3 -8
  108. package/dist/cjs/Message/Plugins/index.d.ts +1 -0
  109. package/dist/cjs/Message/Plugins/index.js +5 -0
  110. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  111. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.js +24 -0
  112. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  113. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
  114. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -2
  115. package/dist/cjs/Message/QuickResponse/QuickResponse.js +7 -9
  116. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +2 -2
  117. package/dist/cjs/Message/QuickStarts/FallbackImg.js +5 -27
  118. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -2
  119. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +7 -43
  120. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  121. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +9 -38
  122. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +16 -16
  123. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  124. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +2 -26
  125. package/dist/cjs/Message/QuickStarts/types.d.ts +4 -3
  126. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +1 -2
  127. package/dist/cjs/Message/TableMessage/TableMessage.js +8 -10
  128. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +2 -3
  129. package/dist/cjs/Message/TableMessage/TbodyMessage.js +7 -9
  130. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +1 -2
  131. package/dist/cjs/Message/TableMessage/TdMessage.js +2 -8
  132. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +1 -2
  133. package/dist/cjs/Message/TableMessage/ThMessage.js +2 -8
  134. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +1 -2
  135. package/dist/cjs/Message/TableMessage/TheadMessage.js +2 -8
  136. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +2 -3
  137. package/dist/cjs/Message/TableMessage/TrMessage.js +8 -10
  138. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +1 -2
  139. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -9
  140. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +2 -2
  141. package/dist/cjs/Message/UserFeedback/CloseButton.js +2 -8
  142. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +2 -2
  143. package/dist/cjs/Message/UserFeedback/UserFeedback.js +12 -23
  144. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +53 -53
  145. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  146. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  147. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +81 -91
  148. package/dist/cjs/Message/index.d.ts +1 -0
  149. package/dist/cjs/Message/index.js +3 -1
  150. package/dist/cjs/MessageBar/AttachButton.d.ts +25 -2
  151. package/dist/cjs/MessageBar/AttachButton.js +10 -20
  152. package/dist/cjs/MessageBar/AttachButton.test.js +102 -24
  153. package/dist/cjs/MessageBar/MessageBar.d.ts +31 -3
  154. package/dist/cjs/MessageBar/MessageBar.js +30 -32
  155. package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
  156. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +2 -2
  157. package/dist/cjs/MessageBar/MicrophoneButton.js +7 -14
  158. package/dist/cjs/MessageBar/SendButton.d.ts +3 -2
  159. package/dist/cjs/MessageBar/SendButton.js +3 -11
  160. package/dist/cjs/MessageBar/SendButton.test.js +15 -15
  161. package/dist/cjs/MessageBar/StopButton.d.ts +3 -2
  162. package/dist/cjs/MessageBar/StopButton.js +3 -12
  163. package/dist/cjs/MessageBar/StopButton.test.js +15 -15
  164. package/dist/cjs/MessageBox/JumpButton.d.ts +2 -2
  165. package/dist/cjs/MessageBox/JumpButton.js +2 -10
  166. package/dist/cjs/MessageBox/JumpButton.test.js +10 -10
  167. package/dist/cjs/MessageBox/MessageBox.d.ts +21 -5
  168. package/dist/cjs/MessageBox/MessageBox.js +170 -45
  169. package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
  170. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  171. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +3 -6
  172. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  173. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +34 -12
  174. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +5 -5
  175. package/dist/cjs/ResponseActions/ResponseActionButton.js +5 -8
  176. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +19 -19
  177. package/dist/cjs/ResponseActions/ResponseActions.d.ts +7 -3
  178. package/dist/cjs/ResponseActions/ResponseActions.js +39 -18
  179. package/dist/cjs/ResponseActions/ResponseActions.test.js +120 -41
  180. package/dist/cjs/Settings/SettingsForm.d.ts +2 -2
  181. package/dist/cjs/Settings/SettingsForm.js +2 -8
  182. package/dist/cjs/Settings/SettingsForm.test.js +9 -12
  183. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  184. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
  185. package/dist/cjs/SourcesCard/SourcesCard.d.ts +12 -3
  186. package/dist/cjs/SourcesCard/SourcesCard.js +17 -42
  187. package/dist/cjs/SourcesCard/SourcesCard.test.js +70 -60
  188. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +3 -3
  189. package/dist/cjs/TermsOfUse/TermsOfUse.js +4 -16
  190. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
  191. package/dist/css/main.css +15 -7
  192. package/dist/css/main.css.map +1 -1
  193. package/dist/esm/AttachMenu/AttachMenu.d.ts +2 -2
  194. package/dist/esm/AttachMenu/AttachMenu.js +2 -9
  195. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +12 -2
  196. package/dist/esm/AttachmentEdit/AttachmentEdit.js +3 -6
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  198. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +30 -5
  199. package/dist/esm/Chatbot/Chatbot.d.ts +1 -2
  200. package/dist/esm/Chatbot/Chatbot.js +4 -6
  201. package/dist/esm/Chatbot/Chatbot.test.js +6 -6
  202. package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  203. package/dist/esm/ChatbotAlert/ChatbotAlert.js +4 -5
  204. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +4 -4
  205. package/dist/esm/ChatbotContent/ChatbotContent.d.ts +3 -3
  206. package/dist/esm/ChatbotContent/ChatbotContent.js +2 -5
  207. package/dist/esm/ChatbotContent/ChatbotContent.test.js +3 -3
  208. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  209. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  210. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +8 -10
  211. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -2
  212. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
  213. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +26 -34
  214. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  215. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +2 -6
  216. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  217. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +2 -22
  218. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +3 -3
  219. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -12
  220. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +4 -4
  221. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +5 -5
  222. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  223. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +10 -23
  224. package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  225. package/dist/esm/ChatbotHeader/ChatbotHeader.js +2 -4
  226. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +3 -3
  227. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  228. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +2 -2
  229. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +3 -3
  230. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
  231. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -7
  232. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +4 -4
  233. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  234. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +2 -2
  235. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +3 -3
  236. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
  237. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
  238. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +4 -4
  239. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
  240. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  241. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +9 -8
  242. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
  243. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
  244. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +9 -8
  245. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  246. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +2 -2
  247. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +12 -12
  248. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +2 -2
  249. package/dist/esm/ChatbotModal/ChatbotModal.js +3 -6
  250. package/dist/esm/ChatbotModal/ChatbotModal.test.js +2 -14
  251. package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  252. package/dist/esm/ChatbotPopover/ChatbotPopover.js +2 -5
  253. package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  254. package/dist/esm/ChatbotToggle/ChatbotToggle.js +8 -13
  255. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +8 -8
  256. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
  257. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -17
  258. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +8 -8
  259. package/dist/esm/CodeModal/CodeModal.d.ts +8 -2
  260. package/dist/esm/CodeModal/CodeModal.js +8 -20
  261. package/dist/esm/CodeModal/CodeModal.test.js +22 -3
  262. package/dist/esm/Compare/Compare.d.ts +2 -2
  263. package/dist/esm/Compare/Compare.js +7 -13
  264. package/dist/esm/Compare/Compare.test.js +4 -6
  265. package/dist/esm/FileDetails/FileDetails.d.ts +2 -2
  266. package/dist/esm/FileDetails/FileDetails.js +2 -15
  267. package/dist/esm/FileDetails/FileDetails.test.js +4 -4
  268. package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  269. package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +2 -5
  270. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +9 -9
  271. package/dist/esm/FileDropZone/FileDropZone.d.ts +23 -2
  272. package/dist/esm/FileDropZone/FileDropZone.js +11 -6
  273. package/dist/esm/FileDropZone/FileDropZone.test.js +84 -3
  274. package/dist/esm/LoadingMessage/LoadingMessage.d.ts +2 -2
  275. package/dist/esm/LoadingMessage/LoadingMessage.js +2 -10
  276. package/dist/esm/LoadingMessage/LoadingMessage.test.js +3 -3
  277. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  278. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +35 -17
  279. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  280. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +133 -0
  281. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  282. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +5 -5
  283. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +1 -2
  284. package/dist/esm/Message/ImageMessage/ImageMessage.js +2 -5
  285. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +1 -2
  286. package/dist/esm/Message/LinkMessage/LinkMessage.js +6 -6
  287. package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +1 -2
  288. package/dist/esm/Message/ListMessage/ListItemMessage.js +2 -5
  289. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  290. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -6
  291. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  292. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -6
  293. package/dist/esm/Message/Message.d.ts +24 -8
  294. package/dist/esm/Message/Message.js +49 -71
  295. package/dist/esm/Message/Message.test.js +112 -82
  296. package/dist/esm/Message/MessageInput.d.ts +2 -2
  297. package/dist/esm/Message/MessageInput.js +5 -11
  298. package/dist/esm/Message/MessageLoading.d.ts +1 -2
  299. package/dist/esm/Message/MessageLoading.js +2 -4
  300. package/dist/esm/Message/Plugins/index.d.ts +1 -0
  301. package/dist/esm/Message/Plugins/index.js +1 -0
  302. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  303. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.js +20 -0
  304. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  305. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +43 -0
  306. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -2
  307. package/dist/esm/Message/QuickResponse/QuickResponse.js +7 -6
  308. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +2 -2
  309. package/dist/esm/Message/QuickStarts/FallbackImg.js +5 -4
  310. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -2
  311. package/dist/esm/Message/QuickStarts/QuickStartTile.js +7 -20
  312. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  313. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +9 -15
  314. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +5 -5
  315. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  316. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +2 -3
  317. package/dist/esm/Message/QuickStarts/types.d.ts +4 -3
  318. package/dist/esm/Message/TableMessage/TableMessage.d.ts +1 -2
  319. package/dist/esm/Message/TableMessage/TableMessage.js +8 -7
  320. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +2 -3
  321. package/dist/esm/Message/TableMessage/TbodyMessage.js +7 -6
  322. package/dist/esm/Message/TableMessage/TdMessage.d.ts +1 -2
  323. package/dist/esm/Message/TableMessage/TdMessage.js +2 -5
  324. package/dist/esm/Message/TableMessage/ThMessage.d.ts +1 -2
  325. package/dist/esm/Message/TableMessage/ThMessage.js +2 -5
  326. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +1 -2
  327. package/dist/esm/Message/TableMessage/TheadMessage.js +2 -5
  328. package/dist/esm/Message/TableMessage/TrMessage.d.ts +2 -3
  329. package/dist/esm/Message/TableMessage/TrMessage.js +8 -7
  330. package/dist/esm/Message/TextMessage/TextMessage.d.ts +1 -2
  331. package/dist/esm/Message/TextMessage/TextMessage.js +2 -6
  332. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +2 -2
  333. package/dist/esm/Message/UserFeedback/CloseButton.js +2 -5
  334. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +2 -2
  335. package/dist/esm/Message/UserFeedback/UserFeedback.js +12 -23
  336. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +21 -21
  337. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  338. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  339. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +26 -36
  340. package/dist/esm/Message/index.d.ts +1 -0
  341. package/dist/esm/Message/index.js +1 -0
  342. package/dist/esm/MessageBar/AttachButton.d.ts +25 -2
  343. package/dist/esm/MessageBar/AttachButton.js +10 -17
  344. package/dist/esm/MessageBar/AttachButton.test.js +95 -17
  345. package/dist/esm/MessageBar/MessageBar.d.ts +31 -3
  346. package/dist/esm/MessageBar/MessageBar.js +28 -30
  347. package/dist/esm/MessageBar/MessageBar.test.js +87 -73
  348. package/dist/esm/MessageBar/MicrophoneButton.d.ts +2 -2
  349. package/dist/esm/MessageBar/MicrophoneButton.js +7 -11
  350. package/dist/esm/MessageBar/SendButton.d.ts +3 -2
  351. package/dist/esm/MessageBar/SendButton.js +3 -8
  352. package/dist/esm/MessageBar/SendButton.test.js +9 -9
  353. package/dist/esm/MessageBar/StopButton.d.ts +3 -2
  354. package/dist/esm/MessageBar/StopButton.js +3 -9
  355. package/dist/esm/MessageBar/StopButton.test.js +9 -9
  356. package/dist/esm/MessageBox/JumpButton.d.ts +2 -2
  357. package/dist/esm/MessageBox/JumpButton.js +2 -7
  358. package/dist/esm/MessageBox/JumpButton.test.js +9 -9
  359. package/dist/esm/MessageBox/MessageBox.d.ts +21 -5
  360. package/dist/esm/MessageBox/MessageBox.js +170 -45
  361. package/dist/esm/MessageBox/MessageBox.test.js +220 -7
  362. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  363. package/dist/esm/PreviewAttachment/PreviewAttachment.js +3 -6
  364. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  365. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +30 -5
  366. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +5 -5
  367. package/dist/esm/ResponseActions/ResponseActionButton.js +5 -5
  368. package/dist/esm/ResponseActions/ResponseActionButton.test.js +7 -7
  369. package/dist/esm/ResponseActions/ResponseActions.d.ts +7 -3
  370. package/dist/esm/ResponseActions/ResponseActions.js +40 -19
  371. package/dist/esm/ResponseActions/ResponseActions.test.js +95 -16
  372. package/dist/esm/Settings/SettingsForm.d.ts +2 -2
  373. package/dist/esm/Settings/SettingsForm.js +2 -5
  374. package/dist/esm/Settings/SettingsForm.test.js +6 -6
  375. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  376. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
  377. package/dist/esm/SourcesCard/SourcesCard.d.ts +12 -3
  378. package/dist/esm/SourcesCard/SourcesCard.js +17 -39
  379. package/dist/esm/SourcesCard/SourcesCard.test.js +29 -19
  380. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +3 -3
  381. package/dist/esm/TermsOfUse/TermsOfUse.js +4 -16
  382. package/dist/esm/TermsOfUse/TermsOfUse.test.js +10 -12
  383. package/dist/tsconfig.tsbuildinfo +1 -1
  384. package/package.json +5 -6
  385. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +10 -0
  386. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +51 -0
  387. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +9 -9
  388. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +5 -5
  389. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  390. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -20
  391. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +2 -2
  392. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +9 -9
  393. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +4 -4
  394. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +7 -7
  395. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithClickedResponseActions.tsx +25 -0
  396. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +3 -12
  397. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +4 -4
  398. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
  399. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +2 -2
  400. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  401. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +3 -3
  402. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +3 -3
  403. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +19 -0
  404. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +5 -5
  405. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +25 -14
  406. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +4 -4
  407. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +59 -36
  408. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +2 -2
  409. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  410. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +10 -13
  411. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +10 -10
  412. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +5 -5
  413. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +5 -5
  414. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +6 -6
  415. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +7 -7
  416. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +59 -34
  417. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +2 -2
  418. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +9 -9
  419. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarDisabled.tsx +3 -3
  420. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarLanguage.tsx +2 -2
  421. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +2 -2
  422. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +74 -37
  423. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +3 -3
  424. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +8 -8
  425. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
  426. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +16 -23
  427. package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +3 -3
  428. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +16 -23
  429. package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +5 -5
  430. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +3 -3
  431. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +91 -48
  432. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +82 -39
  433. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +3 -0
  434. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
  435. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +1 -0
  436. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +19 -25
  437. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +42 -15
  438. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +15 -14
  439. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +19 -25
  440. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +17 -22
  441. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
  442. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +17 -22
  443. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +13 -13
  444. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +7 -7
  445. package/patternfly-docs/content/extensions/chatbot/img/quick-response-confirmation.svg +67 -0
  446. package/src/AttachMenu/AttachMenu.tsx +2 -2
  447. package/src/AttachmentEdit/AttachmentEdit.test.tsx +46 -2
  448. package/src/AttachmentEdit/AttachmentEdit.tsx +25 -7
  449. package/src/Chatbot/Chatbot.test.tsx +0 -1
  450. package/src/Chatbot/Chatbot.tsx +5 -3
  451. package/src/ChatbotAlert/ChatbotAlert.test.tsx +0 -1
  452. package/src/ChatbotAlert/ChatbotAlert.tsx +2 -2
  453. package/src/ChatbotContent/ChatbotContent.test.tsx +0 -1
  454. package/src/ChatbotContent/ChatbotContent.tsx +3 -3
  455. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +0 -1
  456. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +6 -4
  457. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +3 -3
  458. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +8 -6
  459. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
  460. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
  461. package/src/ChatbotFooter/ChatbotFooter.test.tsx +0 -1
  462. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -3
  463. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
  464. package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
  465. package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
  466. package/src/ChatbotHeader/ChatbotHeader.tsx +3 -6
  467. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
  468. package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
  469. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +0 -1
  470. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +5 -4
  471. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
  472. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +2 -2
  473. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +0 -1
  474. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -7
  475. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +9 -1
  476. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +12 -5
  477. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +9 -1
  478. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +26 -6
  479. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
  480. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
  481. package/src/ChatbotModal/ChatbotModal.test.tsx +0 -1
  482. package/src/ChatbotModal/ChatbotModal.tsx +2 -2
  483. package/src/ChatbotPopover/ChatbotPopover.tsx +3 -3
  484. package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
  485. package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
  486. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +0 -1
  487. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +2 -2
  488. package/src/CodeModal/CodeModal.test.tsx +29 -2
  489. package/src/CodeModal/CodeModal.tsx +18 -8
  490. package/src/Compare/Compare.test.tsx +0 -1
  491. package/src/Compare/Compare.tsx +7 -6
  492. package/src/FileDetails/FileDetails.test.tsx +0 -1
  493. package/src/FileDetails/FileDetails.tsx +1 -1
  494. package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
  495. package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
  496. package/src/FileDropZone/FileDropZone.test.tsx +112 -1
  497. package/src/FileDropZone/FileDropZone.tsx +44 -4
  498. package/src/LoadingMessage/LoadingMessage.test.tsx +0 -1
  499. package/src/LoadingMessage/LoadingMessage.tsx +2 -2
  500. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +7 -0
  501. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +126 -18
  502. package/src/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.tsx +223 -0
  503. package/src/Message/ErrorMessage/ErrorMessage.tsx +0 -1
  504. package/src/Message/ImageMessage/ImageMessage.tsx +1 -2
  505. package/src/Message/LinkMessage/LinkMessage.tsx +0 -1
  506. package/src/Message/ListMessage/ListItemMessage.tsx +0 -1
  507. package/src/Message/ListMessage/OrderedListMessage.tsx +0 -1
  508. package/src/Message/ListMessage/UnorderedListMessage.tsx +0 -1
  509. package/src/Message/Message.test.tsx +49 -6
  510. package/src/Message/Message.tsx +31 -14
  511. package/src/Message/MessageInput.tsx +5 -5
  512. package/src/Message/MessageLoading.tsx +0 -2
  513. package/src/Message/Plugins/index.ts +1 -0
  514. package/src/Message/Plugins/rehypeCodeBlockToggle.ts +24 -0
  515. package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
  516. package/src/Message/QuickResponse/QuickResponse.tsx +4 -3
  517. package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
  518. package/src/Message/QuickStarts/QuickStartTile.tsx +3 -3
  519. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +0 -1
  520. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +4 -3
  521. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +2 -2
  522. package/src/Message/QuickStarts/types.ts +4 -3
  523. package/src/Message/TableMessage/TableMessage.tsx +4 -4
  524. package/src/Message/TableMessage/TbodyMessage.tsx +3 -3
  525. package/src/Message/TableMessage/TdMessage.tsx +1 -2
  526. package/src/Message/TableMessage/ThMessage.tsx +1 -2
  527. package/src/Message/TableMessage/TheadMessage.tsx +3 -2
  528. package/src/Message/TableMessage/TrMessage.tsx +4 -4
  529. package/src/Message/TextMessage/TextMessage.scss +2 -5
  530. package/src/Message/TextMessage/TextMessage.tsx +1 -2
  531. package/src/Message/UserFeedback/CloseButton.tsx +2 -2
  532. package/src/Message/UserFeedback/UserFeedback.test.tsx +0 -1
  533. package/src/Message/UserFeedback/UserFeedback.tsx +8 -6
  534. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +0 -1
  535. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +16 -14
  536. package/src/Message/index.ts +1 -0
  537. package/src/MessageBar/AttachButton.test.tsx +127 -8
  538. package/src/MessageBar/AttachButton.tsx +49 -6
  539. package/src/MessageBar/MessageBar.test.tsx +81 -30
  540. package/src/MessageBar/MessageBar.tsx +85 -19
  541. package/src/MessageBar/MicrophoneButton.tsx +10 -7
  542. package/src/MessageBar/SendButton.test.tsx +5 -6
  543. package/src/MessageBar/SendButton.tsx +4 -3
  544. package/src/MessageBar/StopButton.test.tsx +5 -6
  545. package/src/MessageBar/StopButton.tsx +4 -3
  546. package/src/MessageBox/JumpButton.test.tsx +4 -5
  547. package/src/MessageBox/JumpButton.tsx +3 -3
  548. package/src/MessageBox/MessageBox.test.tsx +295 -5
  549. package/src/MessageBox/MessageBox.tsx +301 -84
  550. package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
  551. package/src/PreviewAttachment/PreviewAttachment.tsx +24 -6
  552. package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
  553. package/src/ResponseActions/ResponseActionButton.tsx +6 -5
  554. package/src/ResponseActions/ResponseActions.test.tsx +121 -4
  555. package/src/ResponseActions/ResponseActions.tsx +71 -12
  556. package/src/Settings/SettingsForm.test.tsx +0 -1
  557. package/src/Settings/SettingsForm.tsx +2 -7
  558. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
  559. package/src/SourcesCard/SourcesCard.test.tsx +14 -1
  560. package/src/SourcesCard/SourcesCard.tsx +19 -7
  561. package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
  562. package/src/TermsOfUse/TermsOfUse.tsx +6 -5
  563. package/tsconfig.cjs.json +0 -1
  564. package/tsconfig.json +3 -3
@@ -1,7 +1,9 @@
1
1
  // ============================================================================
2
2
  // Chatbot Main - Messages - Feedback Complete Card
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { MouseEvent as ReactMouseEvent, FunctionComponent } from 'react';
5
+
6
+ import { useState, useRef, useEffect } from 'react';
5
7
 
6
8
  // Import PatternFly components
7
9
  import { Card, CardBody, CardHeader, CardProps, CardTitle, OUIAProps, useOUIAProps } from '@patternfly/react-core';
@@ -46,7 +48,7 @@ export interface UserFeedbackCompleteProps extends Omit<CardProps, 'ref'>, OUIAP
46
48
  timestamp?: string;
47
49
  }
48
50
 
49
- const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> = ({
51
+ const UserFeedbackComplete: FunctionComponent<UserFeedbackCompleteProps> = ({
50
52
  className,
51
53
  title = 'Feedback submitted',
52
54
  body = "We've received your response. Thank you for sharing your feedback!",
@@ -66,21 +68,21 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
66
68
  isCompact,
67
69
  ...props
68
70
  }: UserFeedbackCompleteProps) => {
69
- const [timedOut, setTimedOut] = React.useState(false);
70
- const [timedOutAnimation, setTimedOutAnimation] = React.useState(true);
71
- const [isMouseOver, setIsMouseOver] = React.useState<boolean | undefined>();
72
- const [containsFocus, setContainsFocus] = React.useState<boolean | undefined>();
71
+ const [timedOut, setTimedOut] = useState(false);
72
+ const [timedOutAnimation, setTimedOutAnimation] = useState(true);
73
+ const [isMouseOver, setIsMouseOver] = useState<boolean | undefined>();
74
+ const [containsFocus, setContainsFocus] = useState<boolean | undefined>();
73
75
  const dismissed = timedOut && timedOutAnimation && !isMouseOver && !containsFocus;
74
- const divRef = React.useRef<HTMLDivElement>(null);
76
+ const divRef = useRef<HTMLDivElement>(null);
75
77
  const ouiaProps = useOUIAProps('User Feedback Complete', ouiaId, ouiaSafe);
76
78
 
77
- React.useEffect(() => {
79
+ useEffect(() => {
78
80
  if (focusOnLoad) {
79
81
  divRef.current?.focus();
80
82
  }
81
83
  }, []);
82
84
 
83
- React.useEffect(() => {
85
+ useEffect(() => {
84
86
  const calculatedTimeout = timeout === true ? 8000 : Number(timeout);
85
87
  if (calculatedTimeout > 0) {
86
88
  const timer = setTimeout(() => setTimedOut(true), calculatedTimeout);
@@ -88,7 +90,7 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
88
90
  }
89
91
  }, [timeout]);
90
92
 
91
- React.useEffect(() => {
93
+ useEffect(() => {
92
94
  const onDocumentFocus = () => {
93
95
  if (divRef.current) {
94
96
  if (divRef.current.contains(document.activeElement)) {
@@ -103,14 +105,14 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
103
105
  return () => document.removeEventListener('focus', onDocumentFocus, true);
104
106
  }, [containsFocus]);
105
107
 
106
- React.useEffect(() => {
108
+ useEffect(() => {
107
109
  if (containsFocus === false || isMouseOver === false) {
108
110
  const timer = setTimeout(() => setTimedOutAnimation(true), timeoutAnimation);
109
111
  return () => clearTimeout(timer);
110
112
  }
111
113
  }, [containsFocus, isMouseOver, timeoutAnimation]);
112
114
 
113
- React.useEffect(() => {
115
+ useEffect(() => {
114
116
  dismissed && onTimeout && onTimeout();
115
117
  }, [dismissed, onTimeout]);
116
118
 
@@ -118,13 +120,13 @@ const UserFeedbackComplete: React.FunctionComponent<UserFeedbackCompleteProps> =
118
120
  return null;
119
121
  }
120
122
 
121
- const myOnMouseEnter = (ev: React.MouseEvent<HTMLDivElement>) => {
123
+ const myOnMouseEnter = (ev: ReactMouseEvent<HTMLDivElement>) => {
122
124
  setIsMouseOver(true);
123
125
  setTimedOutAnimation(false);
124
126
  onMouseEnter && onMouseEnter(ev);
125
127
  };
126
128
 
127
- const myOnMouseLeave = (ev: React.MouseEvent<HTMLDivElement>) => {
129
+ const myOnMouseLeave = (ev: ReactMouseEvent<HTMLDivElement>) => {
128
130
  setIsMouseOver(false);
129
131
  onMouseLeave && onMouseLeave(ev);
130
132
  };
@@ -1,3 +1,4 @@
1
1
  export { default } from './Message';
2
+ export { rehypeCodeBlockToggle } from './Plugins/rehypeCodeBlockToggle';
2
3
 
3
4
  export * from './Message';
@@ -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';
@@ -7,11 +6,11 @@ import { AttachButton } from './AttachButton';
7
6
  describe('Attach button', () => {
8
7
  it('should render button correctly', () => {
9
8
  render(<AttachButton />);
10
- expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
9
+ expect(screen.getByRole('button', { name: 'Attach' })).toBeTruthy();
11
10
  });
12
11
  it('should handle isDisabled prop', () => {
13
12
  render(<AttachButton isDisabled />);
14
- expect(screen.getByRole('button', { name: 'Attach button' })).toBeDisabled();
13
+ expect(screen.getByRole('button', { name: 'Attach' })).toBeDisabled();
15
14
  });
16
15
  it('should handle spread props, including aria-label', () => {
17
16
  render(<AttachButton aria-label="test" />);
@@ -20,22 +19,22 @@ describe('Attach button', () => {
20
19
  it('should handle onClick', async () => {
21
20
  const spy = jest.fn();
22
21
  render(<AttachButton onClick={spy} />);
23
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
22
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
24
23
  expect(screen.getByRole('tooltip', { name: 'Attach' })).toBeTruthy();
25
24
  expect(spy).toHaveBeenCalledTimes(1);
26
25
  });
27
26
  it('should handle className prop', () => {
28
27
  render(<AttachButton className="test" />);
29
- expect(screen.getByRole('button', { name: 'Attach button' })).toHaveClass('test');
28
+ expect(screen.getByRole('button', { name: 'Attach' })).toHaveClass('test');
30
29
  });
31
30
  it('should handle custom tooltip correctly', async () => {
32
31
  render(<AttachButton onClick={jest.fn} tooltipContent="Test" />);
33
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
32
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
34
33
  expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
35
34
  });
36
35
  it('should handle tooltipProps prop', async () => {
37
36
  render(<AttachButton tooltipProps={{ id: 'test' }} />);
38
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
37
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
39
38
  expect(screen.getByRole('tooltip', { name: 'Attach' })).toHaveAttribute('id', 'test');
40
39
  });
41
40
  // Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
@@ -43,7 +42,7 @@ describe('Attach button', () => {
43
42
  it('should handle onAttachAccepted prop', async () => {
44
43
  const spy = jest.fn();
45
44
  render(<AttachButton onAttachAccepted={spy} inputTestId="input" />);
46
- await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
45
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
47
46
  const file = new File(['test'], 'test.json');
48
47
  const input = screen.getByTestId('input') as HTMLInputElement;
49
48
  await userEvent.upload(input, file);
@@ -54,4 +53,124 @@ describe('Attach button', () => {
54
53
  render(<AttachButton isCompact data-testid="button" />);
55
54
  expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
56
55
  });
56
+
57
+ it('should set correct accept attribute on file input', async () => {
58
+ render(<AttachButton inputTestId="input" allowedFileTypes={{ 'text/plain': ['.txt'] }} />);
59
+ await userEvent.click(screen.getByRole('button', { name: 'Attach' }));
60
+ const input = screen.getByTestId('input') as HTMLInputElement;
61
+ expect(input).toHaveAttribute('accept', 'text/plain,.txt');
62
+ });
63
+
64
+ it('should call onAttachAccepted when file type is accepted', async () => {
65
+ const onAttachAccepted = jest.fn();
66
+ render(
67
+ <AttachButton
68
+ inputTestId="input"
69
+ allowedFileTypes={{ 'text/plain': ['.txt'] }}
70
+ onAttachAccepted={onAttachAccepted}
71
+ />
72
+ );
73
+
74
+ const file = new File(['hello'], 'example.txt', { type: 'text/plain' });
75
+ const input = screen.getByTestId('input');
76
+
77
+ await userEvent.upload(input, file);
78
+
79
+ expect(onAttachAccepted).toHaveBeenCalled();
80
+ const [attachedFile] = onAttachAccepted.mock.calls[0][0];
81
+ expect(attachedFile).toEqual(file);
82
+ });
83
+
84
+ it('should not call onAttachAccepted when file type is not accepted', async () => {
85
+ const onAttachAccepted = jest.fn();
86
+ render(
87
+ <AttachButton
88
+ inputTestId="input"
89
+ allowedFileTypes={{ 'text/plain': ['.txt'] }}
90
+ onAttachAccepted={onAttachAccepted}
91
+ />
92
+ );
93
+
94
+ const file = new File(['[]'], 'example.json', { type: 'application/json' });
95
+ const input = screen.getByTestId('input');
96
+
97
+ await userEvent.upload(input, file);
98
+
99
+ expect(onAttachAccepted).not.toHaveBeenCalled();
100
+ });
101
+
102
+ it('should respect minSize restriction', async () => {
103
+ const onAttachRejected = jest.fn();
104
+ render(<AttachButton inputTestId="input" minSize={1000} onAttachRejected={onAttachRejected} />);
105
+
106
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
107
+ const input = screen.getByTestId('input');
108
+
109
+ await userEvent.upload(input, file);
110
+
111
+ expect(onAttachRejected).toHaveBeenCalled();
112
+ });
113
+
114
+ it('should respect maxSize restriction', async () => {
115
+ const onAttachRejected = jest.fn();
116
+ render(<AttachButton inputTestId="input" maxSize={100} onAttachRejected={onAttachRejected} />);
117
+
118
+ const largeContent = 'x'.repeat(200);
119
+ const file = new File([largeContent], 'example.txt', { type: 'text/plain' });
120
+ const input = screen.getByTestId('input');
121
+
122
+ await userEvent.upload(input, file);
123
+
124
+ expect(onAttachRejected).toHaveBeenCalled();
125
+ });
126
+
127
+ it('should respect maxFiles restriction', async () => {
128
+ const onAttachRejected = jest.fn();
129
+ render(<AttachButton inputTestId="input" maxFiles={1} onAttachRejected={onAttachRejected} />);
130
+
131
+ const files = [
132
+ new File(['Test1'], 'example1.txt', { type: 'text/plain' }),
133
+ new File(['Test2'], 'example2.txt', { type: 'text/plain' })
134
+ ];
135
+
136
+ const input = screen.getByTestId('input');
137
+ await userEvent.upload(input, files);
138
+
139
+ expect(onAttachRejected).toHaveBeenCalled();
140
+ });
141
+
142
+ it('should be disabled when isAttachmentDisabled is true', async () => {
143
+ const onFileDrop = jest.fn();
144
+ render(<AttachButton inputTestId="input" isAttachmentDisabled={true} />);
145
+
146
+ const file = new File(['Test'], 'example.text', { type: 'text/plain' });
147
+ const input = screen.getByTestId('input');
148
+ await userEvent.upload(input, file);
149
+
150
+ expect(onFileDrop).not.toHaveBeenCalled();
151
+ });
152
+
153
+ it('should call onAttach when files are attached', async () => {
154
+ const onAttach = jest.fn();
155
+ render(<AttachButton inputTestId="input" onAttach={onAttach} />);
156
+
157
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
158
+ const input = screen.getByTestId('input');
159
+
160
+ await userEvent.upload(input, file);
161
+
162
+ expect(onAttach).toHaveBeenCalled();
163
+ });
164
+ it('should use custom validator when provided', async () => {
165
+ const validator = jest.fn().mockReturnValue({ message: 'Custom error' });
166
+ const onAttachRejected = jest.fn();
167
+ render(<AttachButton inputTestId="input" validator={validator} onAttachRejected={onAttachRejected} />);
168
+
169
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
170
+ const input = screen.getByTestId('input');
171
+ await userEvent.upload(input, file);
172
+
173
+ expect(validator).toHaveBeenCalledWith(file);
174
+ expect(onAttachRejected).toHaveBeenCalled();
175
+ });
57
176
  });
@@ -1,11 +1,13 @@
1
1
  // ============================================================================
2
2
  // Chatbot Footer - Message Bar - Attach
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { Ref, FunctionComponent } from 'react';
5
+
6
+ import { forwardRef } from 'react';
5
7
 
6
8
  // Import PatternFly components
7
9
  import { Button, ButtonProps, DropEvent, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
8
- import { useDropzone } from 'react-dropzone';
10
+ import { Accept, DropzoneOptions, FileError, FileRejection, useDropzone } from 'react-dropzone';
9
11
  import { PaperclipIcon } from '@patternfly/react-icons/dist/esm/icons/paperclip-icon';
10
12
 
11
13
  export interface AttachButtonProps extends ButtonProps {
@@ -13,6 +15,12 @@ export interface AttachButtonProps extends ButtonProps {
13
15
  onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
14
16
  /** Callback function for AttachButton when an attachment is made */
15
17
  onAttachAccepted?: (data: File[], event: DropEvent) => void;
18
+ /** Specifies the file types accepted by the attachment upload component.
19
+ * Files that don't match the accepted types will be disabled in the file picker.
20
+ * For example,
21
+ * allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
22
+ **/
23
+ allowedFileTypes?: Accept;
16
24
  /** Class name for AttachButton */
17
25
  className?: string;
18
26
  /** Props to control if the AttachButton should be disabled */
@@ -25,10 +33,27 @@ export interface AttachButtonProps extends ButtonProps {
25
33
  tooltipContent?: string;
26
34
  /** Test id applied to input */
27
35
  inputTestId?: string;
36
+ /** Whether button is compact */
28
37
  isCompact?: boolean;
38
+ /** Minimum file size allowed */
39
+ minSize?: number;
40
+ /** Max file size allowed */
41
+ maxSize?: number;
42
+ /** Max number of files allowed */
43
+ maxFiles?: number;
44
+ /** Whether attachments are disabled */
45
+ isAttachmentDisabled?: boolean;
46
+ /** Callback when file(s) are attached */
47
+ onAttach?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
48
+ /** Callback function for AttachButton when an attachment fails */
49
+ onAttachRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
50
+ /** Validator for files; see https://react-dropzone.js.org/#!/Custom%20validation for more information */
51
+ validator?: <T extends File>(file: T) => FileError | readonly FileError[] | null;
52
+ /** Additional props passed to react-dropzone */
53
+ dropzoneProps?: DropzoneOptions;
29
54
  }
30
55
 
31
- const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
56
+ const AttachButtonBase: FunctionComponent<AttachButtonProps> = ({
32
57
  onAttachAccepted,
33
58
  onClick,
34
59
  isDisabled,
@@ -38,11 +63,29 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
38
63
  tooltipContent = 'Attach',
39
64
  inputTestId,
40
65
  isCompact,
66
+ allowedFileTypes,
67
+ minSize,
68
+ maxSize,
69
+ maxFiles,
70
+ isAttachmentDisabled,
71
+ onAttach,
72
+ onAttachRejected,
73
+ validator,
74
+ dropzoneProps,
41
75
  ...props
42
76
  }: AttachButtonProps) => {
43
77
  const { open, getInputProps } = useDropzone({
44
78
  multiple: true,
45
- onDropAccepted: onAttachAccepted
79
+ onDropAccepted: onAttachAccepted,
80
+ accept: allowedFileTypes,
81
+ minSize,
82
+ maxSize,
83
+ maxFiles,
84
+ disabled: isAttachmentDisabled,
85
+ onDrop: onAttach,
86
+ onDropRejected: onAttachRejected,
87
+ validator,
88
+ ...dropzoneProps
46
89
  });
47
90
 
48
91
  return (
@@ -65,7 +108,7 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
65
108
  variant="plain"
66
109
  ref={innerRef}
67
110
  className={`pf-chatbot__button--attach ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
68
- aria-label={props['aria-label'] || 'Attach button'}
111
+ aria-label={props['aria-label'] || 'Attach'}
69
112
  isDisabled={isDisabled}
70
113
  onClick={onClick ?? open}
71
114
  icon={
@@ -81,6 +124,6 @@ const AttachButtonBase: React.FunctionComponent<AttachButtonProps> = ({
81
124
  );
82
125
  };
83
126
 
84
- export const AttachButton = React.forwardRef((props: AttachButtonProps, ref: React.Ref<any>) => (
127
+ export const AttachButton = forwardRef((props: AttachButtonProps, ref: Ref<any>) => (
85
128
  <AttachButtonBase innerRef={ref} {...props} />
86
129
  ));
@@ -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
  });