@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,7 +1,8 @@
1
- import React from 'react';
2
- import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
1
+ import type { FunctionComponent, MouseEvent, Ref } from 'react';
2
+ import { forwardRef } from 'react';
3
+ import { Button, ButtonProps, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
3
4
 
4
- export interface ResponseActionButtonProps {
5
+ export interface ResponseActionButtonProps extends ButtonProps {
5
6
  /** Aria-label for the button. Defaults to the value of the tooltipContent if none provided */
6
7
  ariaLabel?: string;
7
8
  /** Aria-label for the button, shown when the button is clicked. Defaults to the value of ariaLabel or tooltipContent if not provided. */
@@ -26,7 +27,7 @@ export interface ResponseActionButtonProps {
26
27
  innerRef?: React.Ref<HTMLButtonElement>;
27
28
  }
28
29
 
29
- export const ResponseActionButtonBase: React.FunctionComponent<ResponseActionButtonProps> = ({
30
+ export const ResponseActionButtonBase: FunctionComponent<ResponseActionButtonProps> = ({
30
31
  ariaLabel,
31
32
  clickedAriaLabel = ariaLabel,
32
33
  className,
@@ -80,7 +81,7 @@ export const ResponseActionButtonBase: React.FunctionComponent<ResponseActionBut
80
81
  );
81
82
  };
82
83
 
83
- const ResponseActionButton = React.forwardRef((props: ResponseActionButtonProps, ref: React.Ref<HTMLButtonElement>) => (
84
+ const ResponseActionButton = forwardRef((props: ResponseActionButtonProps, ref: Ref<HTMLButtonElement>) => (
84
85
  <ResponseActionButtonBase innerRef={ref} {...props} />
85
86
  ));
86
87
 
@@ -1,7 +1,6 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
- import ResponseActions from './ResponseActions';
3
+ import ResponseActions, { ActionProps } from './ResponseActions';
5
4
  import userEvent from '@testing-library/user-event';
6
5
  import { DownloadIcon, InfoCircleIcon, RedoIcon } from '@patternfly/react-icons';
7
6
  import Message from '../Message';
@@ -10,6 +9,7 @@ const ALL_ACTIONS = [
10
9
  { type: 'positive', label: 'Good response', clickedLabel: 'Response recorded' },
11
10
  { type: 'negative', label: 'Bad response', clickedLabel: 'Response recorded' },
12
11
  { type: 'copy', label: 'Copy', clickedLabel: 'Copied' },
12
+ { type: 'edit', label: 'Edit', clickedLabel: 'Editing' },
13
13
  { type: 'share', label: 'Share', clickedLabel: 'Shared' },
14
14
  { type: 'listen', label: 'Listen', clickedLabel: 'Listening' }
15
15
  ];
@@ -41,6 +41,16 @@ const CUSTOM_ACTIONS = [
41
41
  }
42
42
  ];
43
43
 
44
+ const ALL_ACTIONS_DATA_TEST = [
45
+ { type: 'positive', label: 'Good response', dataTestId: 'positive' },
46
+ { type: 'negative', label: 'Bad response', dataTestId: 'negative' },
47
+ { type: 'copy', label: 'Copy', dataTestId: 'copy' },
48
+ { type: 'edit', label: 'Edit', dataTestId: 'edit' },
49
+ { type: 'share', label: 'Share', dataTestId: 'share' },
50
+ { type: 'download', label: 'Download', dataTestId: 'download' },
51
+ { type: 'listen', label: 'Listen', dataTestId: 'listen' }
52
+ ];
53
+
44
54
  describe('ResponseActions', () => {
45
55
  afterEach(() => {
46
56
  jest.clearAllMocks();
@@ -52,7 +62,9 @@ describe('ResponseActions', () => {
52
62
  positive: { onClick: jest.fn() },
53
63
  negative: { onClick: jest.fn() },
54
64
  copy: { onClick: jest.fn() },
65
+ edit: { onClick: jest.fn() },
55
66
  share: { onClick: jest.fn() },
67
+ download: { onClick: jest.fn() },
56
68
  listen: { onClick: jest.fn() }
57
69
  }}
58
70
  />
@@ -60,9 +72,11 @@ describe('ResponseActions', () => {
60
72
  const goodBtn = screen.getByRole('button', { name: 'Good response' });
61
73
  const badBtn = screen.getByRole('button', { name: 'Bad response' });
62
74
  const copyBtn = screen.getByRole('button', { name: 'Copy' });
75
+ const editBtn = screen.getByRole('button', { name: 'Edit' });
63
76
  const shareBtn = screen.getByRole('button', { name: 'Share' });
77
+ const downloadBtn = screen.getByRole('button', { name: 'Download' });
64
78
  const listenBtn = screen.getByRole('button', { name: 'Listen' });
65
- const buttons = [goodBtn, badBtn, copyBtn, shareBtn, listenBtn];
79
+ const buttons = [goodBtn, badBtn, copyBtn, editBtn, shareBtn, downloadBtn, listenBtn];
66
80
  buttons.forEach((button) => {
67
81
  expect(button).toBeTruthy();
68
82
  });
@@ -119,6 +133,103 @@ describe('ResponseActions', () => {
119
133
  expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
120
134
  expect(badBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
121
135
  });
136
+
137
+ it('should handle isClicked prop within group of buttons correctly', async () => {
138
+ render(
139
+ <ResponseActions
140
+ actions={
141
+ {
142
+ positive: { 'data-testid': 'positive-btn', onClick: jest.fn(), isClicked: true },
143
+ negative: { 'data-testid': 'negative-btn', onClick: jest.fn() }
144
+ } as Record<string, ActionProps>
145
+ }
146
+ />
147
+ );
148
+
149
+ expect(screen.getByTestId('positive-btn')).toHaveClass('pf-chatbot__button--response-action-clicked');
150
+ expect(screen.getByTestId('negative-btn')).not.toHaveClass('pf-chatbot__button--response-action-clicked');
151
+ });
152
+
153
+ it('should set "listen" button as active if its `isClicked` is true', async () => {
154
+ render(
155
+ <ResponseActions
156
+ actions={
157
+ {
158
+ positive: { 'data-testid': 'positive-btn', onClick: jest.fn(), isClicked: false },
159
+ negative: { 'data-testid': 'negative-btn', onClick: jest.fn(), isClicked: false },
160
+ listen: { 'data-testid': 'listen-btn', onClick: jest.fn(), isClicked: true }
161
+ } as Record<string, ActionProps>
162
+ }
163
+ />
164
+ );
165
+ expect(screen.getByTestId('listen-btn')).toHaveClass('pf-chatbot__button--response-action-clicked');
166
+
167
+ expect(screen.getByTestId('positive-btn')).not.toHaveClass('pf-chatbot__button--response-action-clicked');
168
+ expect(screen.getByTestId('negative-btn')).not.toHaveClass('pf-chatbot__button--response-action-clicked');
169
+ });
170
+
171
+ it('should prioritize "positive" when both "positive" and "negative" are set to clicked', async () => {
172
+ render(
173
+ <ResponseActions
174
+ actions={
175
+ {
176
+ positive: { 'data-testid': 'positive-btn', onClick: jest.fn(), isClicked: true },
177
+ negative: { 'data-testid': 'negative-btn', onClick: jest.fn(), isClicked: true }
178
+ } as Record<string, ActionProps>
179
+ }
180
+ />
181
+ );
182
+ // Positive button should take precendence
183
+ expect(screen.getByTestId('positive-btn')).toHaveClass('pf-chatbot__button--response-action-clicked');
184
+ expect(screen.getByTestId('negative-btn')).not.toHaveClass('pf-chatbot__button--response-action-clicked');
185
+ });
186
+
187
+ it('should set an additional action button as active if it is initially clicked and no predefined are clicked', async () => {
188
+ const [additionalActions] = CUSTOM_ACTIONS;
189
+ const customActions = {
190
+ positive: { 'data-testid': 'positive', onClick: jest.fn(), isClicked: false },
191
+ negative: { 'data-testid': 'negative', onClick: jest.fn(), isClicked: false },
192
+ ...Object.keys(additionalActions).reduce((acc, actionKey) => {
193
+ acc[actionKey] = {
194
+ ...additionalActions[actionKey],
195
+ 'data-testid': actionKey,
196
+ isClicked: actionKey === 'regenerate'
197
+ };
198
+ return acc;
199
+ }, {})
200
+ };
201
+ render(<ResponseActions actions={customActions} />);
202
+
203
+ Object.keys(customActions).forEach((actionKey) => {
204
+ if (actionKey === 'regenerate') {
205
+ expect(screen.getByTestId(actionKey)).toHaveClass('pf-chatbot__button--response-action-clicked');
206
+ } else {
207
+ // Other actions should not have clicked class
208
+ expect(screen.getByTestId(actionKey)).not.toHaveClass('pf-chatbot__button--response-action-clicked');
209
+ }
210
+ });
211
+ });
212
+
213
+ it('should activate the clicked button and deactivate any previously active button', async () => {
214
+ const actions = {
215
+ positive: { 'data-testid': 'positive', onClick: jest.fn(), isClicked: false },
216
+ negative: { 'data-testid': 'negative', onClick: jest.fn(), isClicked: true }
217
+ };
218
+ render(<ResponseActions actions={actions} />);
219
+
220
+ const negativeBtn = screen.getByTestId('negative');
221
+ const positiveBtn = screen.getByTestId('positive');
222
+ // negative button is initially clicked
223
+ expect(negativeBtn).toHaveClass('pf-chatbot__button--response-action-clicked');
224
+ expect(positiveBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
225
+
226
+ await userEvent.click(positiveBtn);
227
+
228
+ // positive button should now have the clicked class
229
+ expect(positiveBtn).toHaveClass('pf-chatbot__button--response-action-clicked');
230
+ expect(negativeBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
231
+ });
232
+
122
233
  it('should render buttons correctly', () => {
123
234
  ALL_ACTIONS.forEach(({ type, label }) => {
124
235
  render(<ResponseActions actions={{ [type]: { onClick: jest.fn() } }} />);
@@ -158,7 +269,9 @@ describe('ResponseActions', () => {
158
269
  { type: 'positive', ariaLabel: 'Thumbs up' },
159
270
  { type: 'negative', ariaLabel: 'Thumbs down' },
160
271
  { type: 'copy', ariaLabel: 'Copy the message' },
272
+ { type: 'edit', ariaLabel: 'Edit this message' },
161
273
  { type: 'share', ariaLabel: 'Share it with friends' },
274
+ { type: 'download', ariaLabel: 'Download your cool message' },
162
275
  { type: 'listen', ariaLabel: 'Listen up' }
163
276
  ];
164
277
  actions.forEach(({ type, ariaLabel }) => {
@@ -181,6 +294,13 @@ describe('ResponseActions', () => {
181
294
  });
182
295
  });
183
296
 
297
+ it('should be able to add custom attributes to buttons', () => {
298
+ ALL_ACTIONS_DATA_TEST.forEach(({ type, dataTestId }) => {
299
+ render(<ResponseActions actions={{ [type]: { onClick: jest.fn(), 'data-testid': dataTestId } }} />);
300
+ expect(screen.getByTestId(dataTestId)).toBeTruthy();
301
+ });
302
+ });
303
+
184
304
  it('should be able to add custom actions', () => {
185
305
  CUSTOM_ACTIONS.forEach((action) => {
186
306
  const key = Object.keys(action)[0];
@@ -192,12 +312,14 @@ describe('ResponseActions', () => {
192
312
  onClick: action[key].onClick,
193
313
  // doing this just because it's easier to test without a regex for the button name
194
314
  ariaLabel: action[key].ariaLabel.toLowerCase(),
195
- icon: action[key].icon
315
+ icon: action[key].icon,
316
+ 'data-testid': action[key]
196
317
  }
197
318
  }}
198
319
  />
199
320
  );
200
321
  expect(screen.getByRole('button', { name: key })).toBeTruthy();
322
+ expect(screen.getByTestId(action[key])).toBeTruthy();
201
323
  });
202
324
  });
203
325
  });
@@ -1,10 +1,13 @@
1
- import React from 'react';
1
+ import type { FunctionComponent, MouseEvent } from 'react';
2
+ import { useEffect, useRef, useState } from 'react';
2
3
  import {
3
4
  ExternalLinkAltIcon,
4
5
  VolumeUpIcon,
5
6
  OutlinedThumbsUpIcon,
6
7
  OutlinedThumbsDownIcon,
7
- OutlinedCopyIcon
8
+ OutlinedCopyIcon,
9
+ DownloadIcon,
10
+ PencilAltIcon
8
11
  } from '@patternfly/react-icons';
9
12
  import ResponseActionButton from './ResponseActionButton';
10
13
  import { ButtonProps, TooltipProps } from '@patternfly/react-core';
@@ -36,25 +39,58 @@ export interface ActionProps extends Omit<ButtonProps, 'ref'> {
36
39
  'aria-controls'?: string;
37
40
  }
38
41
 
42
+ type ExtendedActionProps = ActionProps & {
43
+ [key: string]: any;
44
+ };
39
45
  export interface ResponseActionProps {
40
46
  /** Props for message actions, such as feedback (positive or negative), copy button, share, and listen */
41
- actions: Record<string, ActionProps | undefined> & {
47
+ actions: Record<string, ExtendedActionProps | undefined> & {
42
48
  positive?: ActionProps;
43
49
  negative?: ActionProps;
44
50
  copy?: ActionProps;
45
51
  share?: ActionProps;
52
+ download?: ActionProps;
46
53
  listen?: ActionProps;
54
+ edit?: ActionProps;
47
55
  };
48
56
  }
49
57
 
50
- export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({ actions }) => {
51
- const [activeButton, setActiveButton] = React.useState<string>();
52
- const { positive, negative, copy, share, listen, ...additionalActions } = actions;
53
- const responseActions = React.useRef<HTMLDivElement>(null);
58
+ export const ResponseActions: FunctionComponent<ResponseActionProps> = ({ actions }) => {
59
+ const [activeButton, setActiveButton] = useState<string>();
60
+ const [clickStatePersisted, setClickStatePersisted] = useState<boolean>(false);
61
+ useEffect(() => {
62
+ // Define the order of precedence for checking initial `isClicked`
63
+ const actionPrecedence = ['positive', 'negative', 'copy', 'edit', 'share', 'download', 'listen'];
64
+ let initialActive: string | undefined;
65
+
66
+ // Check predefined actions first based on precedence
67
+ for (const actionName of actionPrecedence) {
68
+ const actionProp = actions[actionName as keyof typeof actions];
69
+ if (actionProp?.isClicked) {
70
+ initialActive = actionName;
71
+ break;
72
+ }
73
+ }
74
+ // If no predefined action was initially clicked, check additionalActions
75
+ if (!initialActive) {
76
+ const clickedActionName = Object.keys(additionalActions).find(
77
+ (actionName) => !actionPrecedence.includes(actionName) && additionalActions[actionName]?.isClicked
78
+ );
79
+ initialActive = clickedActionName;
80
+ }
81
+ if (initialActive) {
82
+ // Click state is explicitly controlled by consumer.
83
+ setClickStatePersisted(true);
84
+ }
85
+ setActiveButton(initialActive);
86
+ }, [actions]);
87
+
88
+ const { positive, negative, copy, edit, share, download, listen, ...additionalActions } = actions;
89
+ const responseActions = useRef<HTMLDivElement>(null);
54
90
 
55
- React.useEffect(() => {
91
+ useEffect(() => {
56
92
  const handleClickOutside = (e) => {
57
- if (responseActions.current && !responseActions.current.contains(e.target)) {
93
+ if (responseActions.current && !responseActions.current.contains(e.target) && !clickStatePersisted) {
58
94
  setActiveButton(undefined);
59
95
  }
60
96
  };
@@ -63,13 +99,14 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
63
99
  return () => {
64
100
  window.removeEventListener('click', handleClickOutside);
65
101
  };
66
- }, []);
102
+ }, [clickStatePersisted]);
67
103
 
68
104
  const handleClick = (
69
- e: MouseEvent | React.MouseEvent<Element, MouseEvent> | KeyboardEvent,
105
+ e: MouseEvent | MouseEvent<Element, MouseEvent> | KeyboardEvent,
70
106
  id: string,
71
- onClick?: (event: MouseEvent | React.MouseEvent<Element, MouseEvent> | KeyboardEvent) => void
107
+ onClick?: (event: MouseEvent | MouseEvent<Element, MouseEvent> | KeyboardEvent) => void
72
108
  ) => {
109
+ setClickStatePersisted(false);
73
110
  setActiveButton(id);
74
111
  onClick && onClick(e);
75
112
  };
@@ -78,6 +115,7 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
78
115
  <div ref={responseActions} className="pf-chatbot__response-actions">
79
116
  {positive && (
80
117
  <ResponseActionButton
118
+ {...positive}
81
119
  ariaLabel={positive.ariaLabel ?? 'Good response'}
82
120
  clickedAriaLabel={positive.ariaLabel ?? 'Response recorded'}
83
121
  onClick={(e) => handleClick(e, 'positive', positive.onClick)}
@@ -95,6 +133,7 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
95
133
  )}
96
134
  {negative && (
97
135
  <ResponseActionButton
136
+ {...negative}
98
137
  ariaLabel={negative.ariaLabel ?? 'Bad response'}
99
138
  clickedAriaLabel={negative.ariaLabel ?? 'Response recorded'}
100
139
  onClick={(e) => handleClick(e, 'negative', negative.onClick)}
@@ -112,6 +151,7 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
112
151
  )}
113
152
  {copy && (
114
153
  <ResponseActionButton
154
+ {...copy}
115
155
  ariaLabel={copy.ariaLabel ?? 'Copy'}
116
156
  clickedAriaLabel={copy.ariaLabel ?? 'Copied'}
117
157
  onClick={(e) => handleClick(e, 'copy', copy.onClick)}
@@ -127,8 +167,27 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
127
167
  aria-controls={copy['aria-controls']}
128
168
  ></ResponseActionButton>
129
169
  )}
170
+ {edit && (
171
+ <ResponseActionButton
172
+ {...edit}
173
+ ariaLabel={edit.ariaLabel ?? 'Edit'}
174
+ clickedAriaLabel={edit.ariaLabel ?? 'Editing'}
175
+ onClick={(e) => handleClick(e, 'edit', edit.onClick)}
176
+ className={edit.className}
177
+ isDisabled={edit.isDisabled}
178
+ tooltipContent={edit.tooltipContent ?? 'Edit '}
179
+ clickedTooltipContent={edit.clickedTooltipContent ?? 'Editing'}
180
+ tooltipProps={edit.tooltipProps}
181
+ icon={<PencilAltIcon />}
182
+ isClicked={activeButton === 'edit'}
183
+ ref={edit.ref}
184
+ aria-expanded={edit['aria-expanded']}
185
+ aria-controls={edit['aria-controls']}
186
+ ></ResponseActionButton>
187
+ )}
130
188
  {share && (
131
189
  <ResponseActionButton
190
+ {...share}
132
191
  ariaLabel={share.ariaLabel ?? 'Share'}
133
192
  clickedAriaLabel={share.ariaLabel ?? 'Shared'}
134
193
  onClick={(e) => handleClick(e, 'share', share.onClick)}
@@ -144,8 +203,27 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
144
203
  aria-controls={share['aria-controls']}
145
204
  ></ResponseActionButton>
146
205
  )}
206
+ {download && (
207
+ <ResponseActionButton
208
+ {...download}
209
+ ariaLabel={download.ariaLabel ?? 'Download'}
210
+ clickedAriaLabel={download.ariaLabel ?? 'Downloaded'}
211
+ onClick={(e) => handleClick(e, 'download', download.onClick)}
212
+ className={download.className}
213
+ isDisabled={download.isDisabled}
214
+ tooltipContent={download.tooltipContent ?? 'Download'}
215
+ clickedTooltipContent={download.clickedTooltipContent ?? 'Downloaded'}
216
+ tooltipProps={download.tooltipProps}
217
+ icon={<DownloadIcon />}
218
+ isClicked={activeButton === 'download'}
219
+ ref={download.ref}
220
+ aria-expanded={download['aria-expanded']}
221
+ aria-controls={download['aria-controls']}
222
+ ></ResponseActionButton>
223
+ )}
147
224
  {listen && (
148
225
  <ResponseActionButton
226
+ {...listen}
149
227
  ariaLabel={listen.ariaLabel ?? 'Listen'}
150
228
  clickedAriaLabel={listen.ariaLabel ?? 'Listening'}
151
229
  onClick={(e) => handleClick(e, 'listen', listen.onClick)}
@@ -161,8 +239,10 @@ export const ResponseActions: React.FunctionComponent<ResponseActionProps> = ({
161
239
  aria-controls={listen['aria-controls']}
162
240
  ></ResponseActionButton>
163
241
  )}
242
+
164
243
  {Object.keys(additionalActions).map((action) => (
165
244
  <ResponseActionButton
245
+ {...additionalActions[action]}
166
246
  key={action}
167
247
  ariaLabel={additionalActions[action]?.ariaLabel}
168
248
  clickedAriaLabel={additionalActions[action]?.clickedAriaLabel}
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { Button } from '@patternfly/react-core';
3
2
  import { render, screen } from '@testing-library/react';
4
3
  import { SettingsForm } from './SettingsForm';
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type { FunctionComponent } from 'react';
2
2
 
3
3
  export interface SettingsFormProps {
4
4
  /** Class applied to form container */
@@ -9,12 +9,7 @@ export interface SettingsFormProps {
9
9
  isCompact?: boolean;
10
10
  }
11
11
 
12
- export const SettingsForm: React.FunctionComponent<SettingsFormProps> = ({
13
- className,
14
- fields = [],
15
- isCompact,
16
- ...props
17
- }) => (
12
+ export const SettingsForm: FunctionComponent<SettingsFormProps> = ({ className, fields = [], isCompact, ...props }) => (
18
13
  <div
19
14
  className={`pf-chatbot__settings-form-container ${isCompact ? 'pf-m-compact' : ''} ${className ? ` ${className}` : ''}`}
20
15
  {...props}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type { FunctionComponent } from 'react';
2
2
  import { Icon, Flex, Stack, StackItem } from '@patternfly/react-core';
3
3
 
4
4
  export interface SourceDetailsMenuItemProps extends React.HTMLProps<HTMLDivElement> {
@@ -10,7 +10,7 @@ export interface SourceDetailsMenuItemProps extends React.HTMLProps<HTMLDivEleme
10
10
  type?: string;
11
11
  }
12
12
 
13
- export const SourceDetailsMenuItem: React.FunctionComponent<SourceDetailsMenuItemProps> = ({
13
+ export const SourceDetailsMenuItem: FunctionComponent<SourceDetailsMenuItemProps> = ({
14
14
  icon,
15
15
  name,
16
16
  type,
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import userEvent from '@testing-library/user-event';
4
3
  import '@testing-library/jest-dom';
@@ -243,4 +242,18 @@ describe('SourcesCard', () => {
243
242
  );
244
243
  expect(screen.getByRole('region')).toHaveAttribute('class', 'pf-v6-c-expandable-section__content');
245
244
  });
245
+
246
+ it('should call onClick appropriately', async () => {
247
+ const spy = jest.fn();
248
+ render(<SourcesCard sources={[{ title: 'How to make an apple pie', link: '', onClick: spy }]} />);
249
+ await userEvent.click(screen.getByRole('link', { name: /How to make an apple pie/i }));
250
+ expect(spy).toHaveBeenCalled();
251
+ });
252
+
253
+ it('should apply titleProps appropriately', () => {
254
+ render(
255
+ <SourcesCard sources={[{ title: 'How to make an apple pie', link: '', titleProps: { className: 'test' } }]} />
256
+ );
257
+ expect(screen.getByRole('link', { name: /How to make an apple pie/i })).toHaveClass('test');
258
+ });
246
259
  });
@@ -1,11 +1,12 @@
1
1
  // ============================================================================
2
2
  // Chatbot Main - Messages - Sources Card
3
3
  // ============================================================================
4
- import React from 'react';
5
-
4
+ import type { FunctionComponent, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyboardEvent } from 'react';
5
+ import { useState } from 'react';
6
6
  // Import PatternFly components
7
7
  import {
8
8
  Button,
9
+ ButtonProps,
9
10
  ButtonVariant,
10
11
  Card,
11
12
  CardBody,
@@ -31,11 +32,20 @@ export interface SourcesCardProps extends CardProps {
31
32
  paginationAriaLabel?: string;
32
33
  /** Content rendered inside the paginated card */
33
34
  sources: {
35
+ /** Title of sources card */
34
36
  title?: string;
37
+ /** Link to source */
35
38
  link: string;
39
+ /** Body of sources card */
36
40
  body?: React.ReactNode | string;
41
+ /** Whether link is external */
37
42
  isExternal?: boolean;
43
+ /** Whether sources card is expandable */
38
44
  hasShowMore?: boolean;
45
+ /** onClick event applied to the title of the Sources card */
46
+ onClick?: React.MouseEventHandler<HTMLButtonElement>;
47
+ /** Any additional props applied to the title of the Sources card */
48
+ titleProps?: ButtonProps;
39
49
  }[];
40
50
  /** Label for the English word "source" */
41
51
  sourceWord?: string;
@@ -57,7 +67,7 @@ export interface SourcesCardProps extends CardProps {
57
67
  showLessWords?: string;
58
68
  }
59
69
 
60
- const SourcesCard: React.FunctionComponent<SourcesCardProps> = ({
70
+ const SourcesCard: FunctionComponent<SourcesCardProps> = ({
61
71
  className,
62
72
  isDisabled,
63
73
  paginationAriaLabel = 'Pagination',
@@ -74,14 +84,14 @@ const SourcesCard: React.FunctionComponent<SourcesCardProps> = ({
74
84
  isCompact,
75
85
  ...props
76
86
  }: SourcesCardProps) => {
77
- const [page, setPage] = React.useState(1);
78
- const [isExpanded, setIsExpanded] = React.useState(false);
87
+ const [page, setPage] = useState(1);
88
+ const [isExpanded, setIsExpanded] = useState(false);
79
89
 
80
- const onToggle = (_event: React.MouseEvent, isExpanded: boolean) => {
90
+ const onToggle = (_event: ReactMouseEvent, isExpanded: boolean) => {
81
91
  setIsExpanded(isExpanded);
82
92
  };
83
93
 
84
- const handleNewPage = (_evt: React.MouseEvent | React.KeyboardEvent | MouseEvent, newPage: number) => {
94
+ const handleNewPage = (_evt: ReactMouseEvent | ReactKeyboardEvent | MouseEvent, newPage: number) => {
85
95
  setPage(newPage);
86
96
  onSetPage && onSetPage(_evt, newPage);
87
97
  };
@@ -107,6 +117,8 @@ const SourcesCard: React.FunctionComponent<SourcesCardProps> = ({
107
117
  isInline
108
118
  rel={sources[page - 1].isExternal ? 'noreferrer' : undefined}
109
119
  target={sources[page - 1].isExternal ? '_blank' : undefined}
120
+ onClick={sources[page - 1].onClick ?? undefined}
121
+ {...sources[page - 1].titleProps}
110
122
  >
111
123
  {renderTitle(sources[page - 1].title)}
112
124
  </Button>
@@ -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';
@@ -1,7 +1,8 @@
1
1
  // ============================================================================
2
2
  // Terms of Use Modal - Chatbot Modal Extension
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent, MouseEvent as ReactMouseEvent, Ref } from 'react';
5
+ import { forwardRef } from 'react';
5
6
  import { Button, Content, ModalBody, ModalFooter, ModalHeader, ModalProps } from '@patternfly/react-core';
6
7
  import { ChatbotDisplayMode } from '../Chatbot';
7
8
  import ChatbotModal from '../ChatbotModal/ChatbotModal';
@@ -37,7 +38,7 @@ export interface TermsOfUseProps extends ModalProps {
37
38
  isCompact?: boolean;
38
39
  }
39
40
 
40
- export const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps> = ({
41
+ export const TermsOfUseBase: FunctionComponent<TermsOfUseProps> = ({
41
42
  handleModalToggle,
42
43
  isModalOpen,
43
44
  onPrimaryAction,
@@ -55,12 +56,12 @@ export const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps> = ({
55
56
  isCompact,
56
57
  ...props
57
58
  }: TermsOfUseProps) => {
58
- const handlePrimaryAction = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
59
+ const handlePrimaryAction = (_event: ReactMouseEvent | MouseEvent | KeyboardEvent) => {
59
60
  handleModalToggle(_event);
60
61
  onPrimaryAction && onPrimaryAction(_event);
61
62
  };
62
63
 
63
- const handleSecondaryAction = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
64
+ const handleSecondaryAction = (_event: ReactMouseEvent | MouseEvent | KeyboardEvent) => {
64
65
  onSecondaryAction(_event);
65
66
  };
66
67
 
@@ -115,7 +116,7 @@ export const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps> = ({
115
116
  return modal;
116
117
  };
117
118
 
118
- const TermsOfUse = React.forwardRef((props: TermsOfUseProps, ref: React.Ref<HTMLDivElement>) => (
119
+ const TermsOfUse = forwardRef((props: TermsOfUseProps, ref: Ref<HTMLDivElement>) => (
119
120
  <TermsOfUseBase innerRef={ref} {...props} />
120
121
  ));
121
122
 
package/src/index.ts CHANGED
@@ -63,6 +63,9 @@ export * from './MessageBar';
63
63
  export { default as MessageBox } from './MessageBox';
64
64
  export * from './MessageBox';
65
65
 
66
+ export { default as MessageDivider } from './MessageDivider';
67
+ export * from './MessageDivider';
68
+
66
69
  export { default as PreviewAttachment } from './PreviewAttachment';
67
70
  export * from './PreviewAttachment';
68
71