@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,4 +1,4 @@
1
- import React from 'react';
1
+ import { Fragment } from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import '@testing-library/jest-dom';
4
4
  import Message from './Message';
@@ -12,6 +12,7 @@ const ALL_ACTIONS = [
12
12
  { label: /Good response/i },
13
13
  { label: /Bad response/i },
14
14
  { label: /Copy/i },
15
+ { label: /Edit/i },
15
16
  { label: /Share/i },
16
17
  { label: /Listen/i }
17
18
  ];
@@ -142,18 +143,20 @@ const EMPTY_TABLE = `
142
143
 
143
144
  const IMAGE = `![Multi-colored wavy lines on a black background](https://cdn.dribbble.com/userupload/10651749/file/original-8a07b8e39d9e8bf002358c66fce1223e.gif)`;
144
145
 
146
+ const INLINE_IMAGE = `inline text ![Multi-colored wavy lines on a black background](https://cdn.dribbble.com/userupload/10651749/file/original-8a07b8e39d9e8bf002358c66fce1223e.gif)`;
147
+
145
148
  const ERROR = {
146
149
  title: 'Could not load chat',
147
150
  children: 'Wait a few minutes and check your network settings. If the issue persists: ',
148
151
  actionLinks: (
149
- <React.Fragment>
152
+ <Fragment>
150
153
  <AlertActionLink component="a" href="#">
151
154
  Start a new chat
152
155
  </AlertActionLink>
153
156
  <AlertActionLink component="a" href="#">
154
157
  Contact support
155
158
  </AlertActionLink>
156
- </React.Fragment>
159
+ </Fragment>
157
160
  )
158
161
  };
159
162
  const checkListItemsRendered = () => {
@@ -424,8 +427,12 @@ describe('Message', () => {
424
427
  // eslint-disable-next-line no-console
425
428
  copy: { onClick: () => console.log('Copy') },
426
429
  // eslint-disable-next-line no-console
430
+ edit: { onClick: () => console.log('Edit') },
431
+ // eslint-disable-next-line no-console
427
432
  share: { onClick: () => console.log('Share') },
428
433
  // eslint-disable-next-line no-console
434
+ download: { onClick: () => console.log('Download') },
435
+ // eslint-disable-next-line no-console
429
436
  listen: { onClick: () => console.log('Listen') }
430
437
  }}
431
438
  />
@@ -450,8 +457,12 @@ describe('Message', () => {
450
457
  // eslint-disable-next-line no-console
451
458
  copy: { onClick: () => console.log('Copy') },
452
459
  // eslint-disable-next-line no-console
460
+ edit: { onClick: () => console.log('Edit') },
461
+ // eslint-disable-next-line no-console
453
462
  share: { onClick: () => console.log('Share') },
454
463
  // eslint-disable-next-line no-console
464
+ download: { onClick: () => console.log('Download') },
465
+ // eslint-disable-next-line no-console
455
466
  listen: { onClick: () => console.log('Listen') }
456
467
  }}
457
468
  />
@@ -461,6 +472,36 @@ describe('Message', () => {
461
472
  expect(screen.queryByRole('button', { name: label })).toBeFalsy();
462
473
  });
463
474
  });
475
+ it('should not show actions if isEditable is true', async () => {
476
+ render(
477
+ <Message
478
+ avatar="./img"
479
+ role="bot"
480
+ name="Bot"
481
+ content="Hi"
482
+ isEditable
483
+ actions={{
484
+ // eslint-disable-next-line no-console
485
+ positive: { onClick: () => console.log('Good response') },
486
+ // eslint-disable-next-line no-console
487
+ negative: { onClick: () => console.log('Bad response') },
488
+ // eslint-disable-next-line no-console
489
+ copy: { onClick: () => console.log('Copy') },
490
+ // eslint-disable-next-line no-console
491
+ edit: { onClick: () => console.log('Edit') },
492
+ // eslint-disable-next-line no-console
493
+ share: { onClick: () => console.log('Share') },
494
+ // eslint-disable-next-line no-console
495
+ download: { onClick: () => console.log('Download') },
496
+ // eslint-disable-next-line no-console
497
+ listen: { onClick: () => console.log('Listen') }
498
+ }}
499
+ />
500
+ );
501
+ ALL_ACTIONS.forEach(({ label }) => {
502
+ expect(screen.queryByRole('button', { name: label })).toBeFalsy();
503
+ });
504
+ });
464
505
  it('should render unordered lists correctly', () => {
465
506
  render(<Message avatar="./img" role="user" name="User" content={UNORDERED_LIST} />);
466
507
  expect(screen.getByText('Here is an unordered list:')).toBeTruthy();
@@ -485,7 +526,37 @@ describe('Message', () => {
485
526
  it('should render code correctly', () => {
486
527
  render(<Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} />);
487
528
  expect(screen.getByText('Here is some YAML code:')).toBeTruthy();
488
- expect(screen.getByRole('button', { name: 'Copy code button' })).toBeTruthy();
529
+ expect(screen.getByRole('button', { name: 'Copy code' })).toBeTruthy();
530
+ expect(screen.getByText(/yaml/)).toBeTruthy();
531
+ expect(screen.getByText(/apiVersion:/i)).toBeTruthy();
532
+ expect(screen.getByText(/helm.openshift.io\/v1beta1/i)).toBeTruthy();
533
+ expect(screen.getByText(/metadata:/i)).toBeTruthy();
534
+ expect(screen.getByText(/name:/i)).toBeTruthy();
535
+ expect(screen.getByText(/azure-sample-repo0oooo00ooo/i)).toBeTruthy();
536
+ expect(screen.getByText(/spec/i)).toBeTruthy();
537
+ expect(screen.getByText(/connectionConfig:/i)).toBeTruthy();
538
+ expect(screen.getByText(/url:/i)).toBeTruthy();
539
+ expect(
540
+ screen.getByText(/https:\/\/raw.githubusercontent.com\/Azure-Samples\/helm-charts\/master\/docs/i)
541
+ ).toBeTruthy();
542
+ });
543
+ it('should render expandable code correctly', () => {
544
+ render(
545
+ <Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} codeBlockProps={{ isExpandable: true }} />
546
+ );
547
+ expect(screen.getByText('Here is some YAML code:')).toBeTruthy();
548
+ expect(screen.getByRole('button', { name: 'Copy code' })).toBeTruthy();
549
+ expect(screen.getByText(/yaml/)).toBeTruthy();
550
+ expect(screen.getByText(/apiVersion/i)).toBeTruthy();
551
+ expect(screen.getByRole('button', { name: /Show more/i })).toBeTruthy();
552
+ });
553
+ it('should handle click on expandable code correctly', async () => {
554
+ render(
555
+ <Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} codeBlockProps={{ isExpandable: true }} />
556
+ );
557
+ const button = screen.getByRole('button', { name: /Show more/i });
558
+ await userEvent.click(button);
559
+ expect(screen.getByRole('button', { name: /Show less/i })).toBeTruthy();
489
560
  expect(screen.getByText(/yaml/)).toBeTruthy();
490
561
  expect(screen.getByText(/apiVersion:/i)).toBeTruthy();
491
562
  expect(screen.getByText(/helm.openshift.io\/v1beta1/i)).toBeTruthy();
@@ -503,8 +574,8 @@ describe('Message', () => {
503
574
  // need explicit setup since RTL stubs clipboard if you do this
504
575
  const user = userEvent.setup();
505
576
  render(<Message avatar="./img" role="user" name="User" content={CODE_MESSAGE} />);
506
- expect(screen.getByRole('button', { name: 'Copy code button' })).toBeTruthy();
507
- await user.click(screen.getByRole('button', { name: 'Copy code button' }));
577
+ expect(screen.getByRole('button', { name: 'Copy code' })).toBeTruthy();
578
+ await user.click(screen.getByRole('button', { name: 'Copy code' }));
508
579
  const clipboardText = await navigator.clipboard.readText();
509
580
  expect(clipboardText.trim()).toEqual(CODE.trim());
510
581
  });
@@ -787,6 +858,13 @@ describe('Message', () => {
787
858
  render(<Message avatar="./img" role="user" name="User" content={IMAGE} />);
788
859
  expect(screen.getByRole('img', { name: /Multi-colored wavy lines on a black background/i })).toBeTruthy();
789
860
  });
861
+ it('inline image parent should have class pf-chatbot__message-and-actions', () => {
862
+ render(<Message avatar="./img" role="user" name="User" content={INLINE_IMAGE} />);
863
+ expect(screen.getByRole('img', { name: /Multi-colored wavy lines on a black background/i })).toBeTruthy();
864
+ expect(
865
+ screen.getByRole('img', { name: /Multi-colored wavy lines on a black background/i }).parentElement
866
+ ).toHaveClass('pf-chatbot__message-and-actions');
867
+ });
790
868
  it('should handle external links correctly', () => {
791
869
  render(<Message avatar="./img" role="user" name="User" content={`[PatternFly](https://www.patternfly.org/)`} />);
792
870
  // we are mocking rehype libraries, so we can't test target _blank addition on links directly with RTL
@@ -1,9 +1,8 @@
1
1
  // ============================================================================
2
2
  // Chatbot Main - Message
3
3
  // ============================================================================
4
-
5
- import React, { ReactNode } from 'react';
6
-
4
+ import { forwardRef, ReactNode, useEffect, useState } from 'react';
5
+ import type { FunctionComponent, HTMLProps, MouseEvent as ReactMouseEvent, Ref } from 'react';
7
6
  import Markdown from 'react-markdown';
8
7
  import remarkGfm from 'remark-gfm';
9
8
  import {
@@ -12,6 +11,8 @@ import {
12
11
  AvatarProps,
13
12
  ButtonProps,
14
13
  ContentVariants,
14
+ ExpandableSectionProps,
15
+ ExpandableSectionToggleProps,
15
16
  FormProps,
16
17
  Label,
17
18
  LabelGroupProps,
@@ -43,10 +44,11 @@ import ImageMessage from './ImageMessage/ImageMessage';
43
44
  import rehypeUnwrapImages from 'rehype-unwrap-images';
44
45
  import rehypeExternalLinks from 'rehype-external-links';
45
46
  import rehypeSanitize from 'rehype-sanitize';
46
- import { PluggableList } from 'react-markdown/lib';
47
+ import { PluggableList } from 'unified';
47
48
  import LinkMessage from './LinkMessage/LinkMessage';
48
49
  import ErrorMessage from './ErrorMessage/ErrorMessage';
49
50
  import MessageInput from './MessageInput';
51
+ import { rehypeMoveImagesOutOfParagraphs } from './Plugins/rehypeMoveImagesOutOfParagraphs';
50
52
 
51
53
  export interface MessageAttachment {
52
54
  /** Name of file attached to the message */
@@ -78,7 +80,7 @@ export interface MessageExtraContent {
78
80
  endContent?: ReactNode;
79
81
  }
80
82
 
81
- export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'role'> {
83
+ export interface MessageProps extends Omit<HTMLProps<HTMLDivElement>, 'role'> {
82
84
  /** Unique id for message */
83
85
  id?: string;
84
86
  /** Role of the user sending the message */
@@ -97,7 +99,7 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
97
99
  isLoading?: boolean;
98
100
  /** Array of attachments attached to a message */
99
101
  attachments?: MessageAttachment[];
100
- /** Props for message actions, such as feedback (positive or negative), copy button, share, and listen */
102
+ /** Props for message actions, such as feedback (positive or negative), copy button, edit message, share, and listen */
101
103
  actions?: {
102
104
  [key: string]: ActionProps;
103
105
  };
@@ -107,9 +109,24 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
107
109
  botWord?: string;
108
110
  /** Label for the English "Loading message," displayed to screenreaders when loading a message */
109
111
  loadingWord?: string;
112
+ /** Props for code blocks */
110
113
  codeBlockProps?: {
114
+ /** Aria label applied to code blocks */
111
115
  'aria-label'?: string;
116
+ /** Class name applied to code blocks */
112
117
  className?: string;
118
+ /** Whether code blocks are expandable */
119
+ isExpandable?: boolean;
120
+ /** Length of text initially shown in expandable code blocks; defaults to 10 characters */
121
+ maxLength?: number;
122
+ /** Additional props passed to expandable section if isExpandable is applied */
123
+ expandableSectionProps?: Omit<ExpandableSectionProps, 'ref'>;
124
+ /** Additional props passed to expandable toggle if isExpandable is applied */
125
+ expandableSectionToggleProps?: ExpandableSectionToggleProps;
126
+ /** Link text applied to expandable toggle when expanded */
127
+ expandedText?: string;
128
+ /** Link text applied to expandable toggle when collapsed */
129
+ collapsedText?: string;
113
130
  };
114
131
  /** Props for quick responses */
115
132
  quickResponses?: QuickResponse[];
@@ -139,7 +156,7 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
139
156
  /** Turns the container into a live region so that changes to content within the Message, such as appending a feedback card, are reliably announced to assistive technology. */
140
157
  isLiveRegion?: boolean;
141
158
  /** Ref applied to message */
142
- innerRef?: React.Ref<HTMLDivElement>;
159
+ innerRef?: Ref<HTMLDivElement>;
143
160
  /** Props for table message. It is important to include a detailed aria-label that describes the purpose of the table. */
144
161
  tableProps?: Required<Pick<TableProps, 'aria-label'>> & TableProps;
145
162
  /** Additional rehype plugins passed from the consumer */
@@ -159,16 +176,18 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
159
176
  /** Label for the English word "Cancel" used in edit mode. */
160
177
  cancelWord?: string;
161
178
  /** Callback function for when edit mode update button is clicked */
162
- onEditUpdate?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
179
+ onEditUpdate?: (event: ReactMouseEvent<HTMLButtonElement, MouseEvent>) => void;
163
180
  /** Callback functionf or when edit cancel update button is clicked */
164
- onEditCancel?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
181
+ onEditCancel?: (event: ReactMouseEvent<HTMLButtonElement, MouseEvent>) => void;
182
+ /** Ref applied to editable message input */
183
+ inputRef?: Ref<HTMLTextAreaElement>;
165
184
  /** Props for edit form */
166
185
  editFormProps?: FormProps;
167
186
  /** Sets message to compact styling. */
168
187
  isCompact?: boolean;
169
188
  }
170
189
 
171
- export const MessageBase: React.FunctionComponent<MessageProps> = ({
190
+ export const MessageBase: FunctionComponent<MessageProps> = ({
172
191
  role,
173
192
  content,
174
193
  extraContent,
@@ -202,18 +221,19 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
202
221
  cancelWord = 'Cancel',
203
222
  onEditUpdate,
204
223
  onEditCancel,
224
+ inputRef,
205
225
  editFormProps,
206
226
  isCompact,
207
227
  ...props
208
228
  }: MessageProps) => {
209
- const [messageText, setMessageText] = React.useState(content);
229
+ const [messageText, setMessageText] = useState(content);
210
230
 
211
- React.useEffect(() => {
231
+ useEffect(() => {
212
232
  setMessageText(content);
213
233
  }, [content]);
214
234
 
215
235
  const { beforeMainContent, afterMainContent, endContent } = extraContent || {};
216
- let rehypePlugins: PluggableList = [rehypeUnwrapImages];
236
+ let rehypePlugins: PluggableList = [rehypeUnwrapImages, rehypeMoveImagesOutOfParagraphs];
217
237
  if (openLinkInNewTab) {
218
238
  rehypePlugins = rehypePlugins.concat([[rehypeExternalLinks, { target: '_blank' }, rehypeSanitize]]);
219
239
  }
@@ -239,15 +259,16 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
239
259
  <>
240
260
  {beforeMainContent && <>{beforeMainContent}</>}
241
261
  <MessageInput
242
- content={content}
262
+ content={messageText}
243
263
  editPlaceholder={editPlaceholder}
244
264
  updateWord={updateWord}
245
265
  cancelWord={cancelWord}
246
- onEditUpdate={(event, text) => {
266
+ onEditUpdate={(event: ReactMouseEvent<HTMLButtonElement, MouseEvent>, value: string) => {
247
267
  onEditUpdate && onEditUpdate(event);
248
- setMessageText(text);
268
+ setMessageText(value);
249
269
  }}
250
270
  onEditCancel={onEditCancel}
271
+ inputRef={inputRef}
251
272
  {...editFormProps}
252
273
  />
253
274
  </>
@@ -352,7 +373,7 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
352
373
  isCompact={isCompact}
353
374
  />
354
375
  )}
355
- {!isLoading && actions && <ResponseActions actions={actions} />}
376
+ {!isLoading && !isEditable && actions && <ResponseActions actions={actions} />}
356
377
  {userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} isCompact={isCompact} />}
357
378
  {userFeedbackComplete && (
358
379
  <UserFeedbackComplete {...userFeedbackComplete} timestamp={dateString} isCompact={isCompact} />
@@ -390,7 +411,7 @@ export const MessageBase: React.FunctionComponent<MessageProps> = ({
390
411
  );
391
412
  };
392
413
 
393
- const Message = React.forwardRef((props: MessageProps, ref: React.Ref<HTMLDivElement>) => (
414
+ const Message = forwardRef((props: MessageProps, ref: Ref<HTMLDivElement>) => (
394
415
  <MessageBase innerRef={ref} {...props} />
395
416
  ));
396
417
 
@@ -1,8 +1,8 @@
1
1
  // ============================================================================
2
2
  // Chatbot Main - Message Input
3
3
  // ============================================================================
4
-
5
- import React from 'react';
4
+ import type { FormEvent, FunctionComponent, Ref } from 'react';
5
+ import { useState } from 'react';
6
6
  import { ActionGroup, Button, Form, FormProps, TextArea } from '@patternfly/react-core';
7
7
 
8
8
  export interface MessageInputProps extends FormProps {
@@ -16,22 +16,25 @@ export interface MessageInputProps extends FormProps {
16
16
  onEditUpdate?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>, value: string) => void;
17
17
  /** Callback functionf or when edit cancel update button is clicked */
18
18
  onEditCancel?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
19
+ /** Ref applied to editable message input */
20
+ inputRef?: Ref<HTMLTextAreaElement>;
19
21
  /** Message text */
20
22
  content?: string;
21
23
  }
22
24
 
23
- const MessageInput: React.FunctionComponent<MessageInputProps> = ({
25
+ const MessageInput: FunctionComponent<MessageInputProps> = ({
24
26
  editPlaceholder = 'Edit prompt message...',
25
27
  updateWord = 'Update',
26
28
  cancelWord = 'Cancel',
27
29
  onEditUpdate,
28
30
  onEditCancel,
31
+ inputRef,
29
32
  content,
30
33
  ...props
31
34
  }: MessageInputProps) => {
32
- const [messageText, setMessageText] = React.useState(content ?? '');
35
+ const [messageText, setMessageText] = useState(content ?? '');
33
36
 
34
- const onChange = (event: React.FormEvent<HTMLTextAreaElement>, value: string) => {
37
+ const onChange = (_event: FormEvent<HTMLTextAreaElement>, value: string) => {
35
38
  setMessageText(value);
36
39
  };
37
40
 
@@ -43,6 +46,7 @@ const MessageInput: React.FunctionComponent<MessageInputProps> = ({
43
46
  onChange={onChange}
44
47
  aria-label={editPlaceholder}
45
48
  autoResize
49
+ ref={inputRef}
46
50
  />
47
51
  <ActionGroup className="pf-chatbot__message-edit-buttons">
48
52
  <Button variant="primary" onClick={(event) => onEditUpdate && onEditUpdate(event, messageText)}>
@@ -2,8 +2,6 @@
2
2
  // Chatbot Main - Message - Processing
3
3
  // ============================================================================
4
4
 
5
- import React from 'react';
6
-
7
5
  const MessageLoading = ({ loadingWord }) => (
8
6
  <div className="pf-chatbot__message-loading">
9
7
  <span className="pf-chatbot__message-loading-dots">
@@ -0,0 +1 @@
1
+ export { rehypeCodeBlockToggle } from './rehypeCodeBlockToggle';
@@ -0,0 +1,24 @@
1
+ import { visit } from 'unist-util-visit';
2
+ import { Element } from 'hast';
3
+ import { Node } from 'unist';
4
+
5
+ // Rehype plugin to add language information to code block props
6
+ // Per Eric, Ideally any toggle buttons that can be navigated to would have unique accessible names
7
+ // For the purposes of our examples this should suffice, but in a real-world use case they may need to be more unique
8
+ export const rehypeCodeBlockToggle = () => (tree: Node) => {
9
+ visit(tree, 'element', (node: Element) => {
10
+ if (node.tagName === 'code' && node.properties?.className) {
11
+ const className = node.properties.className as string[];
12
+ const languageMatch = className.find((cls) => cls.startsWith('language-'));
13
+
14
+ if (languageMatch) {
15
+ const language = languageMatch.replace('language-', '').toUpperCase();
16
+
17
+ // Add the language and toggle text as data attributes
18
+ node.properties['data-language'] = language;
19
+ node.properties['data-expanded-text'] = `Show less ${language} code`;
20
+ node.properties['data-collapsed-text'] = `Show more ${language} code`;
21
+ }
22
+ }
23
+ });
24
+ };
@@ -0,0 +1,53 @@
1
+ import { visit } from 'unist-util-visit';
2
+ import { Element } from 'hast';
3
+ import { Node } from 'unist';
4
+
5
+ // Rehype plugin to remove images from within p tags and put them as separate block-level elements.
6
+ // This allows us to avoid having a blue background on images - this is something Kayla requested.
7
+ export const rehypeMoveImagesOutOfParagraphs = () => (tree: Node) => {
8
+ const nodesToRemove: { parent: Element; index: number; node: Element }[] = [];
9
+
10
+ visit(tree, 'element', (node: Element, index: number | null, parent: Element | null) => {
11
+ if (node.tagName === 'p' && node.children) {
12
+ const imagesInParagraph: { node: Element; index: number }[] = [];
13
+
14
+ node.children.forEach((child: Node, childIndex: number) => {
15
+ if (child.type === 'element' && (child as Element).tagName === 'img') {
16
+ imagesInParagraph.push({ node: child as Element, index: childIndex });
17
+ }
18
+ });
19
+
20
+ if (imagesInParagraph.length > 0 && parent && index !== null) {
21
+ imagesInParagraph.forEach(({ node: imgNode, index: imgIndex }) => {
22
+ nodesToRemove.push({ parent: node, index: imgIndex, node: imgNode });
23
+ });
24
+
25
+ // To avoid issues with index shifting during removal, we process in reverse
26
+ for (let i = nodesToRemove.length - 1; i >= 0; i--) {
27
+ const { parent: pTag, index: imgIndexToRemove } = nodesToRemove[i];
28
+ if (pTag.children) {
29
+ pTag.children.splice(imgIndexToRemove, 1);
30
+ }
31
+ }
32
+
33
+ // Insert the removed images after the paragraph
34
+ const paragraphIndexInParent = parent.children.indexOf(node);
35
+ if (paragraphIndexInParent !== -1) {
36
+ imagesInParagraph.forEach(({ node: imgNode }) => {
37
+ parent.children.splice(paragraphIndexInParent + 1, 0, imgNode);
38
+ });
39
+ }
40
+
41
+ // Remove paragraph if it's now empty after image removal
42
+ if (node.children.length === 0) {
43
+ const paragraphIndexInParent = parent.children.indexOf(node);
44
+ if (paragraphIndexInParent !== -1) {
45
+ parent.children.splice(paragraphIndexInParent, 1);
46
+ }
47
+ }
48
+
49
+ nodesToRemove.length = 0;
50
+ }
51
+ }
52
+ });
53
+ };
@@ -1,4 +1,5 @@
1
- import React from 'react';
1
+ import type { FunctionComponent } from 'react';
2
+ import { useState } from 'react';
2
3
  import { Label, LabelGroup, LabelGroupProps, LabelProps } from '@patternfly/react-core';
3
4
  import { CheckIcon } from '@patternfly/react-icons';
4
5
 
@@ -19,13 +20,13 @@ export interface QuickResponseProps {
19
20
  isCompact?: boolean;
20
21
  }
21
22
 
22
- export const QuickResponse: React.FunctionComponent<QuickResponseProps> = ({
23
+ export const QuickResponse: FunctionComponent<QuickResponseProps> = ({
23
24
  quickResponses,
24
25
  quickResponseContainerProps = { numLabels: 5 },
25
26
  onSelect,
26
27
  isCompact
27
28
  }: QuickResponseProps) => {
28
- const [selectedQuickResponse, setSelectedQuickResponse] = React.useState<string>();
29
+ const [selectedQuickResponse, setSelectedQuickResponse] = useState<string>();
29
30
 
30
31
  const handleQuickResponseClick = (id: string, onClick?: () => void) => {
31
32
  setSelectedQuickResponse(id);
@@ -1,4 +1,5 @@
1
- import * as React from 'react';
1
+ import type { FC } from 'react';
2
+ import { useState } from 'react';
2
3
 
3
4
  interface FallbackImgProps {
4
5
  /** Image source */
@@ -11,8 +12,8 @@ interface FallbackImgProps {
11
12
  fallback?: React.ReactNode;
12
13
  }
13
14
 
14
- const FallbackImg: React.FC<FallbackImgProps> = ({ src, alt, className, fallback }) => {
15
- const [isSrcValid, setIsSrcValid] = React.useState<boolean>(true);
15
+ const FallbackImg: FC<FallbackImgProps> = ({ src, alt, className, fallback }) => {
16
+ const [isSrcValid, setIsSrcValid] = useState<boolean>(true);
16
17
 
17
18
  if (src && isSrcValid) {
18
19
  return <img className={className} src={src} alt={alt} onError={() => setIsSrcValid(false)} />;
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import type { FC, ReactNode } from 'react';
2
2
  import RocketIcon from '@patternfly/react-icons/dist/js/icons/rocket-icon';
3
3
  import OutlinedBookmarkIcon from '@patternfly/react-icons/dist/js/icons/outlined-bookmark-icon';
4
4
  import {
@@ -53,7 +53,7 @@ export interface QuickStartTileProps {
53
53
  isCompact?: boolean;
54
54
  }
55
55
 
56
- const QuickStartTile: React.FC<QuickStartTileProps> = ({
56
+ const QuickStartTile: FC<QuickStartTileProps> = ({
57
57
  className,
58
58
  quickStart,
59
59
  onClick,
@@ -71,7 +71,7 @@ const QuickStartTile: React.FC<QuickStartTileProps> = ({
71
71
  spec: { icon, displayName, description, durationMinutes, prerequisites, link, type }
72
72
  } = quickStart;
73
73
 
74
- let quickStartIcon: React.ReactNode;
74
+ let quickStartIcon: ReactNode;
75
75
  if (typeof icon === 'object') {
76
76
  quickStartIcon = <Icon size="2xl">{icon}</Icon>;
77
77
  } else {
@@ -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,4 +1,5 @@
1
- import * as React from 'react';
1
+ import type { FC } from 'react';
2
+ import { useRef } from 'react';
2
3
  import { Button, Flex, pluralize, Popover } from '@patternfly/react-core';
3
4
  import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
4
5
 
@@ -29,7 +30,7 @@ export function pluralizeWord(i: number, singular: string, plural?: string) {
29
30
  return `${i === 1 ? singular : plural}`;
30
31
  }
31
32
 
32
- const QuickStartTileDescription: React.FC<QuickStartTileDescriptionProps> = ({
33
+ const QuickStartTileDescription: FC<QuickStartTileDescriptionProps> = ({
33
34
  description,
34
35
  prerequisites,
35
36
  prerequisiteWord = 'Prerequisite',
@@ -37,7 +38,7 @@ const QuickStartTileDescription: React.FC<QuickStartTileDescriptionProps> = ({
37
38
  quickStartButtonAriaLabel = 'Show prerequisites'
38
39
  }) => {
39
40
  const prereqs = prerequisites?.filter((p) => p);
40
- const buttonRef = React.useRef<HTMLButtonElement>(null);
41
+ const buttonRef = useRef<HTMLButtonElement>(null);
41
42
  const pluralizedPrereq = pluralizeWord(prereqs?.length || 0, prerequisiteWord, prerequisiteWordPlural);
42
43
  return (
43
44
  <>
@@ -1,5 +1,5 @@
1
- import * as React from 'react';
2
1
  import { Button, Flex } from '@patternfly/react-core';
2
+ import type { FunctionComponent } from 'react';
3
3
 
4
4
  interface QuickStartTileHeaderProps {
5
5
  /** Name for the header */
@@ -10,7 +10,7 @@ interface QuickStartTileHeaderProps {
10
10
  onSelect: (e: React.FormEvent<HTMLInputElement> | React.MouseEvent<Element, MouseEvent>) => void;
11
11
  }
12
12
 
13
- const QuickStartTileHeader: React.FC<QuickStartTileHeaderProps> = ({ name, quickStartId, onSelect }) => (
13
+ const QuickStartTileHeader: FunctionComponent<QuickStartTileHeaderProps> = ({ name, quickStartId, onSelect }) => (
14
14
  <Flex flexWrap={{ default: 'nowrap' }}>
15
15
  <Button data-test="title" id={quickStartId} variant="link" isInline onClick={onSelect}>
16
16
  {name}
@@ -1,4 +1,5 @@
1
1
  import { ButtonProps } from '@patternfly/react-core';
2
+ import type { ComponentType, ReactNode, SyntheticEvent } from 'react';
2
3
 
3
4
  // These types are all from the QuickStart extension.
4
5
  // We want to ensure parity, so be careful when adjusting these.
@@ -77,9 +78,9 @@ export interface QuickstartAction {
77
78
  /** Screen reader aria label. */
78
79
  'aria-label': string;
79
80
  /** Icon to be rendered as a plain button, by default Bookmark outlined will be used. */
80
- icon?: React.ComponentType<unknown>;
81
+ icon?: ComponentType<unknown>;
81
82
  /** Callback with synthetic event parameter. */
82
- onClick?: (e: React.SyntheticEvent) => void;
83
+ onClick?: (e: SyntheticEvent) => void;
83
84
  /** Additional button props to be rendered as extra props. */
84
85
  buttonProps?: ButtonProps;
85
86
  }
@@ -95,7 +96,7 @@ export interface QuickStartSpec {
95
96
  version?: number;
96
97
  displayName: string;
97
98
  durationMinutes?: number;
98
- icon: React.ReactNode;
99
+ icon: ReactNode;
99
100
  description: string;
100
101
  prerequisites?: string[];
101
102
  introduction?: string;
@@ -2,7 +2,7 @@
2
2
  // Chatbot Main - Message - Content - Table
3
3
  // ============================================================================
4
4
 
5
- import React from 'react';
5
+ import { Children, cloneElement } from 'react';
6
6
  import { ExtraProps } from 'react-markdown';
7
7
  import { Table, TableProps } from '@patternfly/react-table';
8
8
 
@@ -19,7 +19,7 @@ export interface TableNode {
19
19
  type: string;
20
20
  }
21
21
 
22
- const TableMessage = ({ children, ...props }: TableProps & ExtraProps) => {
22
+ const TableMessage = ({ children, ...props }: Omit<TableProps, 'ref'> & ExtraProps) => {
23
23
  const { className, ...rest } = props;
24
24
 
25
25
  // This allows us to parse the nested data we get back from the 3rd party Markdown parser
@@ -53,9 +53,9 @@ const TableMessage = ({ children, ...props }: TableProps & ExtraProps) => {
53
53
  // This is somewhat opinionated and may break if 3rd party library changes
54
54
  // See Tr and Tbody for other usage
55
55
  const modifyChildren = (children) =>
56
- React.Children.map(children, (child) => {
56
+ Children.map(children, (child) => {
57
57
  if (child && headerTextValues?.length > 0) {
58
- return React.cloneElement(child, { extraHeaders: headerTextValues });
58
+ return cloneElement(child, { extraHeaders: headerTextValues });
59
59
  }
60
60
  return child;
61
61
  });
@@ -2,15 +2,15 @@
2
2
  // Chatbot Main - Message - Content - Table
3
3
  // ============================================================================
4
4
 
5
- import React from 'react';
5
+ import { Children, cloneElement } from 'react';
6
6
  import { ExtraProps } from 'react-markdown';
7
7
  import { Tbody, TbodyProps } from '@patternfly/react-table';
8
8
 
9
- const TbodyProps = ({ children, ...props }: TbodyProps & ExtraProps & { extraHeaders?: string[] }) => {
9
+ const TbodyProps = ({ children, ...props }: Omit<TbodyProps, 'ref'> & ExtraProps & { extraHeaders?: string[] }) => {
10
10
  // passthrough so we can place dataLabel on tds
11
11
  const modifyChildren = (children) => {
12
12
  if (children && props.extraHeaders) {
13
- return React.Children.map(children, (child) => React.cloneElement(child, { extraHeaders: props.extraHeaders }));
13
+ return Children.map(children, (child) => cloneElement(child, { extraHeaders: props.extraHeaders }));
14
14
  }
15
15
  return children;
16
16
  };