@patternfly/chatbot 6.3.0-prerelease.9 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. package/dist/cjs/AttachMenu/AttachMenu.d.ts +2 -2
  2. package/dist/cjs/AttachMenu/AttachMenu.js +2 -12
  3. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +12 -2
  4. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +3 -6
  5. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  6. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +33 -8
  7. package/dist/cjs/Chatbot/Chatbot.d.ts +1 -2
  8. package/dist/cjs/Chatbot/Chatbot.js +4 -9
  9. package/dist/cjs/Chatbot/Chatbot.test.js +11 -11
  10. package/dist/cjs/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  11. package/dist/cjs/ChatbotAlert/ChatbotAlert.js +4 -8
  12. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +10 -10
  13. package/dist/cjs/ChatbotContent/ChatbotContent.d.ts +3 -3
  14. package/dist/cjs/ChatbotContent/ChatbotContent.js +2 -8
  15. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +5 -5
  16. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  17. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  18. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +31 -33
  19. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -2
  20. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
  21. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +56 -64
  22. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  23. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +2 -9
  24. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  25. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +2 -25
  26. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +3 -3
  27. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -15
  28. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +7 -7
  29. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +28 -28
  30. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  31. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +10 -23
  32. package/dist/cjs/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  33. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +2 -7
  34. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +5 -5
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.js +2 -5
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +5 -5
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -10
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +7 -10
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +2 -5
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +5 -5
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
  46. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +7 -10
  47. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
  48. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  49. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +19 -21
  50. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
  51. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -12
  52. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +17 -19
  53. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  54. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +2 -5
  55. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +23 -23
  56. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +2 -2
  57. package/dist/cjs/ChatbotModal/ChatbotModal.js +3 -9
  58. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +4 -16
  59. package/dist/cjs/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  60. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +2 -8
  61. package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  62. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +8 -13
  63. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +25 -25
  64. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
  65. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -20
  66. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +16 -16
  67. package/dist/cjs/CodeModal/CodeModal.d.ts +8 -2
  68. package/dist/cjs/CodeModal/CodeModal.js +8 -20
  69. package/dist/cjs/CodeModal/CodeModal.test.js +23 -4
  70. package/dist/cjs/Compare/Compare.d.ts +2 -2
  71. package/dist/cjs/Compare/Compare.js +7 -16
  72. package/dist/cjs/Compare/Compare.test.js +7 -9
  73. package/dist/cjs/FileDetails/FileDetails.d.ts +2 -2
  74. package/dist/cjs/FileDetails/FileDetails.js +2 -15
  75. package/dist/cjs/FileDetails/FileDetails.test.js +10 -10
  76. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  77. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.js +2 -5
  78. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +21 -21
  79. package/dist/cjs/FileDropZone/FileDropZone.d.ts +23 -2
  80. package/dist/cjs/FileDropZone/FileDropZone.js +11 -9
  81. package/dist/cjs/FileDropZone/FileDropZone.test.js +86 -5
  82. package/dist/cjs/LoadingMessage/LoadingMessage.d.ts +2 -2
  83. package/dist/cjs/LoadingMessage/LoadingMessage.js +2 -10
  84. package/dist/cjs/LoadingMessage/LoadingMessage.test.js +6 -6
  85. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  86. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +34 -16
  87. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  88. package/dist/cjs/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +139 -0
  89. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  90. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -8
  91. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +1 -2
  92. package/dist/cjs/Message/ImageMessage/ImageMessage.js +2 -8
  93. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +1 -2
  94. package/dist/cjs/Message/LinkMessage/LinkMessage.js +6 -9
  95. package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +1 -2
  96. package/dist/cjs/Message/ListMessage/ListItemMessage.js +2 -8
  97. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  98. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -9
  99. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  100. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -9
  101. package/dist/cjs/Message/Message.d.ts +24 -8
  102. package/dist/cjs/Message/Message.js +49 -71
  103. package/dist/cjs/Message/Message.test.js +112 -82
  104. package/dist/cjs/Message/MessageInput.d.ts +2 -2
  105. package/dist/cjs/Message/MessageInput.js +5 -14
  106. package/dist/cjs/Message/MessageLoading.d.ts +1 -2
  107. package/dist/cjs/Message/MessageLoading.js +3 -8
  108. package/dist/cjs/Message/Plugins/index.d.ts +1 -0
  109. package/dist/cjs/Message/Plugins/index.js +5 -0
  110. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  111. package/dist/cjs/Message/Plugins/rehypeCodeBlockToggle.js +24 -0
  112. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  113. package/dist/cjs/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +47 -0
  114. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -2
  115. package/dist/cjs/Message/QuickResponse/QuickResponse.js +7 -9
  116. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +2 -2
  117. package/dist/cjs/Message/QuickStarts/FallbackImg.js +5 -27
  118. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -2
  119. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +7 -43
  120. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  121. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +9 -38
  122. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +16 -16
  123. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  124. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +2 -26
  125. package/dist/cjs/Message/QuickStarts/types.d.ts +4 -3
  126. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +1 -2
  127. package/dist/cjs/Message/TableMessage/TableMessage.js +8 -10
  128. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +2 -3
  129. package/dist/cjs/Message/TableMessage/TbodyMessage.js +7 -9
  130. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +1 -2
  131. package/dist/cjs/Message/TableMessage/TdMessage.js +2 -8
  132. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +1 -2
  133. package/dist/cjs/Message/TableMessage/ThMessage.js +2 -8
  134. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +1 -2
  135. package/dist/cjs/Message/TableMessage/TheadMessage.js +2 -8
  136. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +2 -3
  137. package/dist/cjs/Message/TableMessage/TrMessage.js +8 -10
  138. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +1 -2
  139. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -9
  140. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +2 -2
  141. package/dist/cjs/Message/UserFeedback/CloseButton.js +2 -8
  142. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +2 -2
  143. package/dist/cjs/Message/UserFeedback/UserFeedback.js +12 -23
  144. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +53 -53
  145. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  146. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  147. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +81 -91
  148. package/dist/cjs/Message/index.d.ts +1 -0
  149. package/dist/cjs/Message/index.js +3 -1
  150. package/dist/cjs/MessageBar/AttachButton.d.ts +25 -2
  151. package/dist/cjs/MessageBar/AttachButton.js +10 -20
  152. package/dist/cjs/MessageBar/AttachButton.test.js +102 -24
  153. package/dist/cjs/MessageBar/MessageBar.d.ts +31 -3
  154. package/dist/cjs/MessageBar/MessageBar.js +30 -32
  155. package/dist/cjs/MessageBar/MessageBar.test.js +122 -108
  156. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +2 -2
  157. package/dist/cjs/MessageBar/MicrophoneButton.js +7 -14
  158. package/dist/cjs/MessageBar/SendButton.d.ts +3 -2
  159. package/dist/cjs/MessageBar/SendButton.js +3 -11
  160. package/dist/cjs/MessageBar/SendButton.test.js +15 -15
  161. package/dist/cjs/MessageBar/StopButton.d.ts +3 -2
  162. package/dist/cjs/MessageBar/StopButton.js +3 -12
  163. package/dist/cjs/MessageBar/StopButton.test.js +15 -15
  164. package/dist/cjs/MessageBox/JumpButton.d.ts +2 -2
  165. package/dist/cjs/MessageBox/JumpButton.js +2 -10
  166. package/dist/cjs/MessageBox/JumpButton.test.js +10 -10
  167. package/dist/cjs/MessageBox/MessageBox.d.ts +21 -5
  168. package/dist/cjs/MessageBox/MessageBox.js +170 -45
  169. package/dist/cjs/MessageBox/MessageBox.test.js +219 -6
  170. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  171. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +3 -6
  172. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  173. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +34 -12
  174. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +5 -5
  175. package/dist/cjs/ResponseActions/ResponseActionButton.js +5 -8
  176. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +19 -19
  177. package/dist/cjs/ResponseActions/ResponseActions.d.ts +7 -3
  178. package/dist/cjs/ResponseActions/ResponseActions.js +39 -18
  179. package/dist/cjs/ResponseActions/ResponseActions.test.js +120 -41
  180. package/dist/cjs/Settings/SettingsForm.d.ts +2 -2
  181. package/dist/cjs/Settings/SettingsForm.js +2 -8
  182. package/dist/cjs/Settings/SettingsForm.test.js +9 -12
  183. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  184. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -11
  185. package/dist/cjs/SourcesCard/SourcesCard.d.ts +12 -3
  186. package/dist/cjs/SourcesCard/SourcesCard.js +17 -42
  187. package/dist/cjs/SourcesCard/SourcesCard.test.js +70 -60
  188. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +3 -3
  189. package/dist/cjs/TermsOfUse/TermsOfUse.js +4 -16
  190. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +31 -33
  191. package/dist/css/main.css +15 -7
  192. package/dist/css/main.css.map +1 -1
  193. package/dist/esm/AttachMenu/AttachMenu.d.ts +2 -2
  194. package/dist/esm/AttachMenu/AttachMenu.js +2 -9
  195. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +12 -2
  196. package/dist/esm/AttachmentEdit/AttachmentEdit.js +3 -6
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -1
  198. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +30 -5
  199. package/dist/esm/Chatbot/Chatbot.d.ts +1 -2
  200. package/dist/esm/Chatbot/Chatbot.js +4 -6
  201. package/dist/esm/Chatbot/Chatbot.test.js +6 -6
  202. package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +2 -2
  203. package/dist/esm/ChatbotAlert/ChatbotAlert.js +4 -5
  204. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +4 -4
  205. package/dist/esm/ChatbotContent/ChatbotContent.d.ts +3 -3
  206. package/dist/esm/ChatbotContent/ChatbotContent.js +2 -5
  207. package/dist/esm/ChatbotContent/ChatbotContent.test.js +3 -3
  208. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +2 -2
  209. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +7 -11
  210. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +8 -10
  211. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +2 -2
  212. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +16 -33
  213. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +26 -34
  214. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +2 -2
  215. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +2 -6
  216. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +2 -2
  217. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +2 -22
  218. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +3 -3
  219. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -12
  220. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +4 -4
  221. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +5 -5
  222. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +3 -3
  223. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +10 -23
  224. package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +3 -3
  225. package/dist/esm/ChatbotHeader/ChatbotHeader.js +2 -4
  226. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +3 -3
  227. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +2 -2
  228. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +2 -2
  229. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +3 -3
  230. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +1 -2
  231. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +5 -7
  232. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +4 -4
  233. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +2 -2
  234. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +2 -2
  235. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +3 -3
  236. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -2
  237. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +5 -7
  238. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +4 -4
  239. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +6 -3
  240. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +8 -9
  241. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +9 -8
  242. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +8 -3
  243. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +11 -9
  244. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +9 -8
  245. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +2 -2
  246. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +2 -2
  247. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +12 -12
  248. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +2 -2
  249. package/dist/esm/ChatbotModal/ChatbotModal.js +3 -6
  250. package/dist/esm/ChatbotModal/ChatbotModal.test.js +2 -14
  251. package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +2 -2
  252. package/dist/esm/ChatbotPopover/ChatbotPopover.js +2 -5
  253. package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +1 -2
  254. package/dist/esm/ChatbotToggle/ChatbotToggle.js +8 -13
  255. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +8 -8
  256. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +2 -2
  257. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +6 -17
  258. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +8 -8
  259. package/dist/esm/CodeModal/CodeModal.d.ts +8 -2
  260. package/dist/esm/CodeModal/CodeModal.js +8 -20
  261. package/dist/esm/CodeModal/CodeModal.test.js +22 -3
  262. package/dist/esm/Compare/Compare.d.ts +2 -2
  263. package/dist/esm/Compare/Compare.js +7 -13
  264. package/dist/esm/Compare/Compare.test.js +4 -6
  265. package/dist/esm/FileDetails/FileDetails.d.ts +2 -2
  266. package/dist/esm/FileDetails/FileDetails.js +2 -15
  267. package/dist/esm/FileDetails/FileDetails.test.js +4 -4
  268. package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +2 -2
  269. package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +2 -5
  270. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +9 -9
  271. package/dist/esm/FileDropZone/FileDropZone.d.ts +23 -2
  272. package/dist/esm/FileDropZone/FileDropZone.js +11 -6
  273. package/dist/esm/FileDropZone/FileDropZone.test.js +84 -3
  274. package/dist/esm/LoadingMessage/LoadingMessage.d.ts +2 -2
  275. package/dist/esm/LoadingMessage/LoadingMessage.js +2 -10
  276. package/dist/esm/LoadingMessage/LoadingMessage.test.js +3 -3
  277. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +20 -3
  278. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +35 -17
  279. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.d.ts +62 -0
  280. package/dist/esm/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.js +133 -0
  281. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +1 -2
  282. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +5 -5
  283. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +1 -2
  284. package/dist/esm/Message/ImageMessage/ImageMessage.js +2 -5
  285. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +1 -2
  286. package/dist/esm/Message/LinkMessage/LinkMessage.js +6 -6
  287. package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +1 -2
  288. package/dist/esm/Message/ListMessage/ListItemMessage.js +2 -5
  289. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -2
  290. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -6
  291. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +1 -2
  292. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -6
  293. package/dist/esm/Message/Message.d.ts +24 -8
  294. package/dist/esm/Message/Message.js +49 -71
  295. package/dist/esm/Message/Message.test.js +112 -82
  296. package/dist/esm/Message/MessageInput.d.ts +2 -2
  297. package/dist/esm/Message/MessageInput.js +5 -11
  298. package/dist/esm/Message/MessageLoading.d.ts +1 -2
  299. package/dist/esm/Message/MessageLoading.js +2 -4
  300. package/dist/esm/Message/Plugins/index.d.ts +1 -0
  301. package/dist/esm/Message/Plugins/index.js +1 -0
  302. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.d.ts +2 -0
  303. package/dist/esm/Message/Plugins/rehypeCodeBlockToggle.js +20 -0
  304. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.d.ts +2 -0
  305. package/dist/esm/Message/Plugins/rehypeMoveImagesOutOfParagraphs.js +43 -0
  306. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -2
  307. package/dist/esm/Message/QuickResponse/QuickResponse.js +7 -6
  308. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +2 -2
  309. package/dist/esm/Message/QuickStarts/FallbackImg.js +5 -4
  310. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -2
  311. package/dist/esm/Message/QuickStarts/QuickStartTile.js +7 -20
  312. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +2 -2
  313. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +9 -15
  314. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +5 -5
  315. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +2 -2
  316. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +2 -3
  317. package/dist/esm/Message/QuickStarts/types.d.ts +4 -3
  318. package/dist/esm/Message/TableMessage/TableMessage.d.ts +1 -2
  319. package/dist/esm/Message/TableMessage/TableMessage.js +8 -7
  320. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +2 -3
  321. package/dist/esm/Message/TableMessage/TbodyMessage.js +7 -6
  322. package/dist/esm/Message/TableMessage/TdMessage.d.ts +1 -2
  323. package/dist/esm/Message/TableMessage/TdMessage.js +2 -5
  324. package/dist/esm/Message/TableMessage/ThMessage.d.ts +1 -2
  325. package/dist/esm/Message/TableMessage/ThMessage.js +2 -5
  326. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +1 -2
  327. package/dist/esm/Message/TableMessage/TheadMessage.js +2 -5
  328. package/dist/esm/Message/TableMessage/TrMessage.d.ts +2 -3
  329. package/dist/esm/Message/TableMessage/TrMessage.js +8 -7
  330. package/dist/esm/Message/TextMessage/TextMessage.d.ts +1 -2
  331. package/dist/esm/Message/TextMessage/TextMessage.js +2 -6
  332. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +2 -2
  333. package/dist/esm/Message/UserFeedback/CloseButton.js +2 -5
  334. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +2 -2
  335. package/dist/esm/Message/UserFeedback/UserFeedback.js +12 -23
  336. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +21 -21
  337. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +2 -2
  338. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +20 -44
  339. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +26 -36
  340. package/dist/esm/Message/index.d.ts +1 -0
  341. package/dist/esm/Message/index.js +1 -0
  342. package/dist/esm/MessageBar/AttachButton.d.ts +25 -2
  343. package/dist/esm/MessageBar/AttachButton.js +10 -17
  344. package/dist/esm/MessageBar/AttachButton.test.js +95 -17
  345. package/dist/esm/MessageBar/MessageBar.d.ts +31 -3
  346. package/dist/esm/MessageBar/MessageBar.js +28 -30
  347. package/dist/esm/MessageBar/MessageBar.test.js +87 -73
  348. package/dist/esm/MessageBar/MicrophoneButton.d.ts +2 -2
  349. package/dist/esm/MessageBar/MicrophoneButton.js +7 -11
  350. package/dist/esm/MessageBar/SendButton.d.ts +3 -2
  351. package/dist/esm/MessageBar/SendButton.js +3 -8
  352. package/dist/esm/MessageBar/SendButton.test.js +9 -9
  353. package/dist/esm/MessageBar/StopButton.d.ts +3 -2
  354. package/dist/esm/MessageBar/StopButton.js +3 -9
  355. package/dist/esm/MessageBar/StopButton.test.js +9 -9
  356. package/dist/esm/MessageBox/JumpButton.d.ts +2 -2
  357. package/dist/esm/MessageBox/JumpButton.js +2 -7
  358. package/dist/esm/MessageBox/JumpButton.test.js +9 -9
  359. package/dist/esm/MessageBox/MessageBox.d.ts +21 -5
  360. package/dist/esm/MessageBox/MessageBox.js +170 -45
  361. package/dist/esm/MessageBox/MessageBox.test.js +220 -7
  362. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +12 -2
  363. package/dist/esm/PreviewAttachment/PreviewAttachment.js +3 -6
  364. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -1
  365. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +30 -5
  366. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +5 -5
  367. package/dist/esm/ResponseActions/ResponseActionButton.js +5 -5
  368. package/dist/esm/ResponseActions/ResponseActionButton.test.js +7 -7
  369. package/dist/esm/ResponseActions/ResponseActions.d.ts +7 -3
  370. package/dist/esm/ResponseActions/ResponseActions.js +40 -19
  371. package/dist/esm/ResponseActions/ResponseActions.test.js +95 -16
  372. package/dist/esm/Settings/SettingsForm.d.ts +2 -2
  373. package/dist/esm/Settings/SettingsForm.js +2 -5
  374. package/dist/esm/Settings/SettingsForm.test.js +6 -6
  375. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +2 -2
  376. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +2 -8
  377. package/dist/esm/SourcesCard/SourcesCard.d.ts +12 -3
  378. package/dist/esm/SourcesCard/SourcesCard.js +17 -39
  379. package/dist/esm/SourcesCard/SourcesCard.test.js +29 -19
  380. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +3 -3
  381. package/dist/esm/TermsOfUse/TermsOfUse.js +4 -16
  382. package/dist/esm/TermsOfUse/TermsOfUse.test.js +10 -12
  383. package/dist/tsconfig.tsbuildinfo +1 -1
  384. package/package.json +5 -6
  385. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +10 -0
  386. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +51 -0
  387. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +9 -9
  388. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +5 -5
  389. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  390. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -20
  391. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +2 -2
  392. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +9 -9
  393. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +4 -4
  394. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +7 -7
  395. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithClickedResponseActions.tsx +25 -0
  396. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +3 -12
  397. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +4 -4
  398. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +3 -3
  399. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +2 -2
  400. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  401. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +3 -3
  402. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +3 -3
  403. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +19 -0
  404. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +5 -5
  405. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +25 -14
  406. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +4 -4
  407. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +59 -36
  408. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +2 -2
  409. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  410. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +10 -13
  411. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +10 -10
  412. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +5 -5
  413. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +5 -5
  414. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +6 -6
  415. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +7 -7
  416. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +59 -34
  417. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +2 -2
  418. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +9 -9
  419. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarDisabled.tsx +3 -3
  420. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarLanguage.tsx +2 -2
  421. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +2 -2
  422. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +74 -37
  423. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +3 -3
  424. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +8 -8
  425. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +3 -3
  426. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +16 -23
  427. package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +3 -3
  428. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +16 -23
  429. package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +5 -5
  430. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +3 -3
  431. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +91 -48
  432. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +82 -39
  433. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +3 -0
  434. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +37 -0
  435. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +1 -0
  436. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +19 -25
  437. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +42 -15
  438. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +15 -14
  439. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +19 -25
  440. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +17 -22
  441. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotScrolling.tsx +536 -0
  442. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +17 -22
  443. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +13 -13
  444. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +7 -7
  445. package/patternfly-docs/content/extensions/chatbot/img/quick-response-confirmation.svg +67 -0
  446. package/src/AttachMenu/AttachMenu.tsx +2 -2
  447. package/src/AttachmentEdit/AttachmentEdit.test.tsx +46 -2
  448. package/src/AttachmentEdit/AttachmentEdit.tsx +25 -7
  449. package/src/Chatbot/Chatbot.test.tsx +0 -1
  450. package/src/Chatbot/Chatbot.tsx +5 -3
  451. package/src/ChatbotAlert/ChatbotAlert.test.tsx +0 -1
  452. package/src/ChatbotAlert/ChatbotAlert.tsx +2 -2
  453. package/src/ChatbotContent/ChatbotContent.test.tsx +0 -1
  454. package/src/ChatbotContent/ChatbotContent.tsx +3 -3
  455. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx +0 -1
  456. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +6 -4
  457. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +3 -3
  458. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +8 -6
  459. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +2 -2
  460. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +2 -2
  461. package/src/ChatbotFooter/ChatbotFooter.test.tsx +0 -1
  462. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -3
  463. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +0 -1
  464. package/src/ChatbotFooter/ChatbotFootnote.tsx +6 -4
  465. package/src/ChatbotHeader/ChatbotHeader.test.tsx +0 -1
  466. package/src/ChatbotHeader/ChatbotHeader.tsx +3 -6
  467. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +0 -1
  468. package/src/ChatbotHeader/ChatbotHeaderActions.tsx +2 -2
  469. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +0 -1
  470. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +5 -4
  471. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +0 -1
  472. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +2 -2
  473. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +0 -1
  474. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -7
  475. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +9 -1
  476. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +12 -5
  477. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +9 -1
  478. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +26 -6
  479. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +0 -1
  480. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +2 -2
  481. package/src/ChatbotModal/ChatbotModal.test.tsx +0 -1
  482. package/src/ChatbotModal/ChatbotModal.tsx +2 -2
  483. package/src/ChatbotPopover/ChatbotPopover.tsx +3 -3
  484. package/src/ChatbotToggle/ChatbotToggle.test.tsx +0 -1
  485. package/src/ChatbotToggle/ChatbotToggle.tsx +5 -3
  486. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +0 -1
  487. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +2 -2
  488. package/src/CodeModal/CodeModal.test.tsx +29 -2
  489. package/src/CodeModal/CodeModal.tsx +18 -8
  490. package/src/Compare/Compare.test.tsx +0 -1
  491. package/src/Compare/Compare.tsx +7 -6
  492. package/src/FileDetails/FileDetails.test.tsx +0 -1
  493. package/src/FileDetails/FileDetails.tsx +1 -1
  494. package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +0 -1
  495. package/src/FileDetailsLabel/FileDetailsLabel.tsx +1 -1
  496. package/src/FileDropZone/FileDropZone.test.tsx +112 -1
  497. package/src/FileDropZone/FileDropZone.tsx +44 -4
  498. package/src/LoadingMessage/LoadingMessage.test.tsx +0 -1
  499. package/src/LoadingMessage/LoadingMessage.tsx +2 -2
  500. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +7 -0
  501. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +126 -18
  502. package/src/Message/CodeBlockMessage/ExpandableSectionForSyntaxHighlighter.tsx +223 -0
  503. package/src/Message/ErrorMessage/ErrorMessage.tsx +0 -1
  504. package/src/Message/ImageMessage/ImageMessage.tsx +1 -2
  505. package/src/Message/LinkMessage/LinkMessage.tsx +0 -1
  506. package/src/Message/ListMessage/ListItemMessage.tsx +0 -1
  507. package/src/Message/ListMessage/OrderedListMessage.tsx +0 -1
  508. package/src/Message/ListMessage/UnorderedListMessage.tsx +0 -1
  509. package/src/Message/Message.test.tsx +49 -6
  510. package/src/Message/Message.tsx +31 -14
  511. package/src/Message/MessageInput.tsx +5 -5
  512. package/src/Message/MessageLoading.tsx +0 -2
  513. package/src/Message/Plugins/index.ts +1 -0
  514. package/src/Message/Plugins/rehypeCodeBlockToggle.ts +24 -0
  515. package/src/Message/Plugins/rehypeMoveImagesOutOfParagraphs.ts +53 -0
  516. package/src/Message/QuickResponse/QuickResponse.tsx +4 -3
  517. package/src/Message/QuickStarts/FallbackImg.tsx +4 -3
  518. package/src/Message/QuickStarts/QuickStartTile.tsx +3 -3
  519. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +0 -1
  520. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +4 -3
  521. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +2 -2
  522. package/src/Message/QuickStarts/types.ts +4 -3
  523. package/src/Message/TableMessage/TableMessage.tsx +4 -4
  524. package/src/Message/TableMessage/TbodyMessage.tsx +3 -3
  525. package/src/Message/TableMessage/TdMessage.tsx +1 -2
  526. package/src/Message/TableMessage/ThMessage.tsx +1 -2
  527. package/src/Message/TableMessage/TheadMessage.tsx +3 -2
  528. package/src/Message/TableMessage/TrMessage.tsx +4 -4
  529. package/src/Message/TextMessage/TextMessage.scss +2 -5
  530. package/src/Message/TextMessage/TextMessage.tsx +1 -2
  531. package/src/Message/UserFeedback/CloseButton.tsx +2 -2
  532. package/src/Message/UserFeedback/UserFeedback.test.tsx +0 -1
  533. package/src/Message/UserFeedback/UserFeedback.tsx +8 -6
  534. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +0 -1
  535. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +16 -14
  536. package/src/Message/index.ts +1 -0
  537. package/src/MessageBar/AttachButton.test.tsx +127 -8
  538. package/src/MessageBar/AttachButton.tsx +49 -6
  539. package/src/MessageBar/MessageBar.test.tsx +81 -30
  540. package/src/MessageBar/MessageBar.tsx +85 -19
  541. package/src/MessageBar/MicrophoneButton.tsx +10 -7
  542. package/src/MessageBar/SendButton.test.tsx +5 -6
  543. package/src/MessageBar/SendButton.tsx +4 -3
  544. package/src/MessageBar/StopButton.test.tsx +5 -6
  545. package/src/MessageBar/StopButton.tsx +4 -3
  546. package/src/MessageBox/JumpButton.test.tsx +4 -5
  547. package/src/MessageBox/JumpButton.tsx +3 -3
  548. package/src/MessageBox/MessageBox.test.tsx +295 -5
  549. package/src/MessageBox/MessageBox.tsx +301 -84
  550. package/src/PreviewAttachment/PreviewAttachment.test.tsx +44 -2
  551. package/src/PreviewAttachment/PreviewAttachment.tsx +24 -6
  552. package/src/ResponseActions/ResponseActionButton.test.tsx +0 -1
  553. package/src/ResponseActions/ResponseActionButton.tsx +6 -5
  554. package/src/ResponseActions/ResponseActions.test.tsx +121 -4
  555. package/src/ResponseActions/ResponseActions.tsx +71 -12
  556. package/src/Settings/SettingsForm.test.tsx +0 -1
  557. package/src/Settings/SettingsForm.tsx +2 -7
  558. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +2 -2
  559. package/src/SourcesCard/SourcesCard.test.tsx +14 -1
  560. package/src/SourcesCard/SourcesCard.tsx +19 -7
  561. package/src/TermsOfUse/TermsOfUse.test.tsx +0 -1
  562. package/src/TermsOfUse/TermsOfUse.tsx +6 -5
  563. package/tsconfig.cjs.json +0 -1
  564. package/tsconfig.json +3 -3
@@ -1,15 +1,35 @@
1
- import React from 'react';
2
- import { Button, Checkbox, FormGroup, Radio, SkipToContent } from '@patternfly/react-core';
1
+ import {
2
+ useRef,
3
+ useState,
4
+ FunctionComponent,
5
+ MouseEvent,
6
+ CSSProperties,
7
+ Ref,
8
+ MouseEvent as ReactMouseEvent
9
+ } from 'react';
10
+ import {
11
+ Button,
12
+ Checkbox,
13
+ SkipToContent,
14
+ MenuToggle,
15
+ MenuToggleElement,
16
+ Select,
17
+ SelectList,
18
+ SelectOption,
19
+ Stack
20
+ } from '@patternfly/react-core';
3
21
  import TermsOfUse from '@patternfly/chatbot/dist/dynamic/TermsOfUse';
4
22
  import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
5
23
  import termsAndConditionsHeader from './PF-TermsAndConditionsHeader.svg';
6
24
 
7
- export const TermsOfUseExample: React.FunctionComponent = () => {
8
- const [isModalOpen, setIsModalOpen] = React.useState(true);
9
- const [displayMode, setDisplayMode] = React.useState(ChatbotDisplayMode.default);
10
- const [hasImage, setHasImage] = React.useState(true);
11
- const chatbotRef = React.useRef<HTMLDivElement>(null);
12
- const termsRef = React.useRef<HTMLDivElement>(null);
25
+ export const TermsOfUseExample: FunctionComponent = () => {
26
+ const [isModalOpen, setIsModalOpen] = useState(true);
27
+ const [displayMode, setDisplayMode] = useState(ChatbotDisplayMode.default);
28
+ const [hasImage, setHasImage] = useState(true);
29
+ const chatbotRef = useRef<HTMLDivElement>(null);
30
+ const termsRef = useRef<HTMLDivElement>(null);
31
+ const [isOpen, setIsOpen] = useState(false);
32
+ const [selected, setSelected] = useState<string>('Select display mode');
13
33
 
14
34
  const handleSkipToContent = (e) => {
15
35
  e.preventDefault();
@@ -21,7 +41,7 @@ export const TermsOfUseExample: React.FunctionComponent = () => {
21
41
  }
22
42
  };
23
43
 
24
- const handleModalToggle = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
44
+ const handleModalToggle = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
25
45
  setIsModalOpen(!isModalOpen);
26
46
  };
27
47
 
@@ -34,6 +54,41 @@ export const TermsOfUseExample: React.FunctionComponent = () => {
34
54
  // eslint-disable-next-line no-console
35
55
  console.log('Clicked secondary action');
36
56
  };
57
+ const onSelect = (_event: ReactMouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
58
+ setSelected(value as string);
59
+ setIsOpen(false);
60
+ if (value === 'Default') {
61
+ setDisplayMode(ChatbotDisplayMode.default);
62
+ }
63
+ if (value === 'Docked') {
64
+ setDisplayMode(ChatbotDisplayMode.docked);
65
+ }
66
+ if (value === 'Fullscreen') {
67
+ setDisplayMode(ChatbotDisplayMode.fullscreen);
68
+ }
69
+ if (value === 'Embedded') {
70
+ setDisplayMode(ChatbotDisplayMode.embedded);
71
+ }
72
+ };
73
+
74
+ const onToggleClick = () => {
75
+ setIsOpen(!isOpen);
76
+ };
77
+
78
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
79
+ <MenuToggle
80
+ ref={toggleRef}
81
+ onClick={onToggleClick}
82
+ isExpanded={isOpen}
83
+ style={
84
+ {
85
+ width: '200px'
86
+ } as CSSProperties
87
+ }
88
+ >
89
+ {selected}
90
+ </MenuToggle>
91
+ );
37
92
 
38
93
  const introduction = (
39
94
  <>
@@ -89,45 +144,33 @@ export const TermsOfUseExample: React.FunctionComponent = () => {
89
144
  boxShadow: 'var(--pf-t--global--box-shadow--lg)'
90
145
  }}
91
146
  >
92
- <FormGroup role="radiogroup" isInline fieldId="basic-form-radio-group" label="Display mode">
93
- <Radio
94
- isChecked={displayMode === ChatbotDisplayMode.default}
95
- onChange={() => setDisplayMode(ChatbotDisplayMode.default)}
96
- name="basic-inline-radio"
97
- label="Default"
98
- id="default"
99
- />
100
- <Radio
101
- isChecked={displayMode === ChatbotDisplayMode.docked}
102
- onChange={() => setDisplayMode(ChatbotDisplayMode.docked)}
103
- name="basic-inline-radio"
104
- label="Docked"
105
- id="docked"
106
- />
107
- <Radio
108
- isChecked={displayMode === ChatbotDisplayMode.fullscreen}
109
- onChange={() => setDisplayMode(ChatbotDisplayMode.fullscreen)}
110
- name="basic-inline-radio"
111
- label="Fullscreen"
112
- id="fullscreen"
113
- />
114
- <Radio
115
- isChecked={displayMode === ChatbotDisplayMode.embedded}
116
- onChange={() => setDisplayMode(ChatbotDisplayMode.embedded)}
117
- name="basic-inline-radio"
118
- label="Embedded"
119
- id="embedded"
120
- />
121
- </FormGroup>
122
- <Checkbox
123
- isChecked={hasImage}
124
- aria-label="Toggle whether terms and conditions has a header image"
125
- id="toggle-header-image"
126
- name="toggle-header-image"
127
- label="Has image in header"
128
- onChange={(_event, checked) => setHasImage(checked)}
129
- ></Checkbox>
130
- <Button onClick={handleModalToggle}>Launch modal</Button>
147
+ <Stack hasGutter>
148
+ <Select
149
+ id="single-select"
150
+ isOpen={isOpen}
151
+ selected={selected}
152
+ onSelect={onSelect}
153
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
154
+ toggle={toggle}
155
+ shouldFocusToggleOnSelect
156
+ >
157
+ <SelectList>
158
+ <SelectOption value="Default">Default</SelectOption>
159
+ <SelectOption value="Docked">Docked</SelectOption>
160
+ <SelectOption value="Fullscreen">Fullscreen</SelectOption>
161
+ <SelectOption value="Embedded">Embedded</SelectOption>
162
+ </SelectList>
163
+ </Select>
164
+ <Checkbox
165
+ isChecked={hasImage}
166
+ aria-label="Toggle whether terms and conditions has a header image"
167
+ id="toggle-header-image"
168
+ name="toggle-header-image"
169
+ label="Has image in header"
170
+ onChange={(_event, checked) => setHasImage(checked)}
171
+ ></Checkbox>
172
+ <Button onClick={handleModalToggle}>Launch modal</Button>
173
+ </Stack>
131
174
  </div>
132
175
  <Chatbot ref={chatbotRef} displayMode={displayMode} isVisible></Chatbot>
133
176
  <TermsOfUse
@@ -1,13 +1,32 @@
1
- import React from 'react';
2
- import { Button, FormGroup, Radio, SkipToContent } from '@patternfly/react-core';
1
+ import {
2
+ useRef,
3
+ useState,
4
+ FunctionComponent,
5
+ MouseEvent,
6
+ CSSProperties,
7
+ Ref,
8
+ MouseEvent as ReactMouseEvent
9
+ } from 'react';
10
+ import {
11
+ Button,
12
+ SkipToContent,
13
+ MenuToggle,
14
+ MenuToggleElement,
15
+ Select,
16
+ SelectList,
17
+ SelectOption,
18
+ Stack
19
+ } from '@patternfly/react-core';
3
20
  import TermsOfUse from '@patternfly/chatbot/dist/dynamic/TermsOfUse';
4
21
  import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
5
22
 
6
- export const TermsOfUseCompactExample: React.FunctionComponent = () => {
7
- const [isModalOpen, setIsModalOpen] = React.useState(true);
8
- const [displayMode, setDisplayMode] = React.useState(ChatbotDisplayMode.default);
9
- const chatbotRef = React.useRef<HTMLDivElement>(null);
10
- const termsRef = React.useRef<HTMLDivElement>(null);
23
+ export const TermsOfUseCompactExample: FunctionComponent = () => {
24
+ const [isModalOpen, setIsModalOpen] = useState(true);
25
+ const [displayMode, setDisplayMode] = useState(ChatbotDisplayMode.default);
26
+ const chatbotRef = useRef<HTMLDivElement>(null);
27
+ const termsRef = useRef<HTMLDivElement>(null);
28
+ const [isOpen, setIsOpen] = useState(false);
29
+ const [selected, setSelected] = useState<string>('Select display mode');
11
30
 
12
31
  const handleSkipToContent = (e) => {
13
32
  e.preventDefault();
@@ -19,7 +38,7 @@ export const TermsOfUseCompactExample: React.FunctionComponent = () => {
19
38
  }
20
39
  };
21
40
 
22
- const handleModalToggle = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
41
+ const handleModalToggle = (_event: ReactMouseEvent | MouseEvent | KeyboardEvent) => {
23
42
  setIsModalOpen(!isModalOpen);
24
43
  };
25
44
 
@@ -33,6 +52,42 @@ export const TermsOfUseCompactExample: React.FunctionComponent = () => {
33
52
  console.log('Clicked secondary action');
34
53
  };
35
54
 
55
+ const onSelect = (_event: ReactMouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
56
+ setSelected(value as string);
57
+ setIsOpen(false);
58
+ if (value === 'Default') {
59
+ setDisplayMode(ChatbotDisplayMode.default);
60
+ }
61
+ if (value === 'Docked') {
62
+ setDisplayMode(ChatbotDisplayMode.docked);
63
+ }
64
+ if (value === 'Fullscreen') {
65
+ setDisplayMode(ChatbotDisplayMode.fullscreen);
66
+ }
67
+ if (value === 'Embedded') {
68
+ setDisplayMode(ChatbotDisplayMode.embedded);
69
+ }
70
+ };
71
+
72
+ const onToggleClick = () => {
73
+ setIsOpen(!isOpen);
74
+ };
75
+
76
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
77
+ <MenuToggle
78
+ ref={toggleRef}
79
+ onClick={onToggleClick}
80
+ isExpanded={isOpen}
81
+ style={
82
+ {
83
+ width: '200px'
84
+ } as CSSProperties
85
+ }
86
+ >
87
+ {selected}
88
+ </MenuToggle>
89
+ );
90
+
36
91
  const introduction = (
37
92
  <>
38
93
  <p>
@@ -87,37 +142,25 @@ export const TermsOfUseCompactExample: React.FunctionComponent = () => {
87
142
  boxShadow: 'var(--pf-t--global--box-shadow--lg)'
88
143
  }}
89
144
  >
90
- <FormGroup role="radiogroup" isInline fieldId="basic-form-radio-group" label="Display mode">
91
- <Radio
92
- isChecked={displayMode === ChatbotDisplayMode.default}
93
- onChange={() => setDisplayMode(ChatbotDisplayMode.default)}
94
- name="basic-inline-radio"
95
- label="Default"
96
- id="default"
97
- />
98
- <Radio
99
- isChecked={displayMode === ChatbotDisplayMode.docked}
100
- onChange={() => setDisplayMode(ChatbotDisplayMode.docked)}
101
- name="basic-inline-radio"
102
- label="Docked"
103
- id="docked"
104
- />
105
- <Radio
106
- isChecked={displayMode === ChatbotDisplayMode.fullscreen}
107
- onChange={() => setDisplayMode(ChatbotDisplayMode.fullscreen)}
108
- name="basic-inline-radio"
109
- label="Fullscreen"
110
- id="fullscreen"
111
- />
112
- <Radio
113
- isChecked={displayMode === ChatbotDisplayMode.embedded}
114
- onChange={() => setDisplayMode(ChatbotDisplayMode.embedded)}
115
- name="basic-inline-radio"
116
- label="Embedded"
117
- id="embedded"
118
- />
119
- </FormGroup>
120
- <Button onClick={handleModalToggle}>Launch modal</Button>
145
+ <Stack hasGutter>
146
+ <Select
147
+ id="single-select"
148
+ isOpen={isOpen}
149
+ selected={selected}
150
+ onSelect={onSelect}
151
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
152
+ toggle={toggle}
153
+ shouldFocusToggleOnSelect
154
+ >
155
+ <SelectList>
156
+ <SelectOption value="Default">Default</SelectOption>
157
+ <SelectOption value="Docked">Docked</SelectOption>
158
+ <SelectOption value="Fullscreen">Fullscreen</SelectOption>
159
+ <SelectOption value="Embedded">Embedded</SelectOption>
160
+ </SelectList>
161
+ </Select>
162
+ <Button onClick={handleModalToggle}>Launch modal</Button>
163
+ </Stack>
121
164
  </div>
122
165
  <Chatbot ref={chatbotRef} displayMode={displayMode} isVisible></Chatbot>
123
166
  <TermsOfUse
@@ -84,6 +84,7 @@ import userAvatar from '../Messages/user_avatar.svg';
84
84
  import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
85
85
  import termsAndConditionsHeader from './PF-TermsAndConditionsHeader.svg';
86
86
  import { CloseIcon, SearchIcon, OutlinedCommentsIcon } from '@patternfly/react-icons';
87
+ import { FunctionComponent, FormEvent, useState, useRef, MouseEvent, isValidElement, cloneElement, Children, ReactNode, Ref, MouseEvent as ReactMouseEvent, CSSProperties} from 'react';
87
88
 
88
89
  ## Structure
89
90
 
@@ -399,6 +400,7 @@ This example also includes an example of how to use [skip to content](/patternfl
399
400
  ### Compact terms of use
400
401
 
401
402
  To apply compact styling to the terms of use modal, pass `isCompact` to `<TermsOfUse>`. This will remove the header image and adjust the spacing of text, so that there is less white space in the modal.
403
+
402
404
  ```js file="./TermsOfUseCompact.tsx" isFullscreen
403
405
 
404
406
  ```
@@ -416,6 +418,7 @@ In this demo, you can toggle the settings page by clicking the "Settings" button
416
418
  ### Compact settings
417
419
 
418
420
  To make the settings menu compact, with less spacing between the menu contents, pass `isCompact` to the `<SettingsForm>`.
421
+
419
422
  ```js file="./CompactSettings.tsx" isFullscreen
420
423
 
421
424
  ```
@@ -44,6 +44,9 @@ import PFIconLogoColor from '../UI/PF-IconLogo-Color.svg';
44
44
  import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
45
45
  import userAvatar from '../Messages/user_avatar.svg';
46
46
  import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
47
+ import { FunctionComponent, useState, useRef, isValidElement, cloneElement, Children, ReactNode, MouseEvent } from 'react';
48
+ import { getTrackingProviders } from "@patternfly/chatbot/dist/dynamic/tracking";
49
+ import ChatbotConversationHistoryNav from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav';
47
50
 
48
51
  ## Demos
49
52
 
@@ -61,6 +64,40 @@ It is also important to announce when new content appears onscreen for accessibi
61
64
 
62
65
  ```
63
66
 
67
+ ### Message auto-scrolling
68
+
69
+ This demo shows auto-scrolling functionality, which automatically scrolls to the bottom of the active chat.
70
+
71
+ To enable auto-scroll behavior pass the `enableSmartScroll` prop to the [`<MessageBox>`](/patternfly-ai/chatbot/ui#message-box) component.
72
+
73
+ When enabled:
74
+
75
+ - Scroll position is automatically managed based on user interaction.
76
+ - Scrolling is _not_ forced to the bottom when new messages arrive, unless explicitly triggered via the `scrollToBottom()` method.
77
+ - If the user scrolls up or interacts with UI controls like "Back to top" or "Back to bottom", the component pauses auto-scroll to respect user intent.
78
+ - Auto-scroll resumes only when the user scrolls back down manually or programmatically via the `scrollToBottom({resumeSmartScroll: true})` method.
79
+
80
+ #### Imperative methods via `ref`
81
+
82
+ When using `ref`, the `<MessageBox>` component exposes the following methods:
83
+
84
+ - `scrollToBottom()`: Scrolls to the bottom of the message container.
85
+ - `scrollToTop()`: Scrolls to the top of the message container.
86
+ - `isSmartScrollActive()`: Returns `true` if smart auto-scroll is currently active.
87
+ - Native `HTMLDivElement` methods like `scrollTo()`.
88
+
89
+ This demo includes broader ChatBot features, including:
90
+
91
+ 1. A [`<ChatbotToggle>`](/patternfly-ai/chatbot/ui#toggle) that controls the [`<Chatbot>`](/patternfly-ai/chatbot/ui#container) container.
92
+ 2. A `<ChatbotContent>` and [`<MessageBox>`](/patternfly-ai/chatbot/ui#content-and-message-box) with:
93
+ - A `<ChatbotWelcomePrompt>`
94
+ - An initial user message and initial bot message
95
+ 3. A [`<ChatbotFooter>`](/patternfly-ai/chatbot/ui#footer) with a [`<ChatbotFootnote>`](/patternfly-ai/chatbot/ui#footnote-with-popover) and a `<MessageBar>`
96
+
97
+ ```js file="./ChatbotScrolling.tsx" isFullscreen
98
+
99
+ ```
100
+
64
101
  ### Attach via upload button in message bar
65
102
 
66
103
  This demo displays unique attachment features, including:
@@ -58,6 +58,7 @@ import PFIconLogoReverse from '../UI/PF-IconLogo-Reverse.svg';
58
58
  import userAvatar from '../Messages/user_avatar.svg';
59
59
  import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
60
60
  import { getTrackingProviders } from "@patternfly/chatbot/dist/dynamic/tracking";
61
+ import { useEffect,useCallback, useRef, useState, FunctionComponent, MouseEvent } from 'react';
61
62
 
62
63
  ### Basic ChatBot
63
64
 
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
-
1
+ import { useEffect, useRef, useState, FunctionComponent, MouseEvent } from 'react';
3
2
  import { Bullseye, Brand, DropdownList, DropdownItem, DropdownGroup, SkipToContent } from '@patternfly/react-core';
4
3
 
5
4
  import ChatbotToggle from '@patternfly/chatbot/dist/dynamic/ChatbotToggle';
@@ -80,8 +79,6 @@ spec:
80
79
  Here is some JavaScript code:
81
80
 
82
81
  ~~~js
83
- import React from 'react';
84
-
85
82
  const MessageLoading = () => (
86
83
  <div className="pf-chatbot__message-loading">
87
84
  <span className="pf-chatbot__message-loading-dots">
@@ -135,7 +132,7 @@ const initialMessages: MessageProps[] = [
135
132
  positive: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Good response' }) },
136
133
  negative: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Bad response' }) },
137
134
  copy: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Copy' }) },
138
- share: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Share' }) },
135
+ download: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Download' }) },
139
136
  listen: { onClick: () => tracking.trackSingleItem(actionEventName, { response: 'Listen' }) }
140
137
  }
141
138
  }
@@ -179,40 +176,37 @@ const initialConversations = {
179
176
  };
180
177
 
181
178
  const actionEvent2 = 'ActionEvent2';
182
- export const ChatbotDemo: React.FunctionComponent = () => {
183
- const [chatbotVisible, setChatbotVisible] = React.useState<boolean>(true);
184
- const [displayMode, setDisplayMode] = React.useState<ChatbotDisplayMode>(ChatbotDisplayMode.default);
185
- const [messages, setMessages] = React.useState<MessageProps[]>(initialMessages);
186
- const [selectedModel, setSelectedModel] = React.useState('Granite 7B');
187
- const [isSendButtonDisabled, setIsSendButtonDisabled] = React.useState(false);
188
- const [isDrawerOpen, setIsDrawerOpen] = React.useState(false);
189
- const [conversations, setConversations] = React.useState<Conversation[] | { [key: string]: Conversation[] }>(
179
+ export const ChatbotDemo: FunctionComponent = () => {
180
+ const [chatbotVisible, setChatbotVisible] = useState<boolean>(true);
181
+ const [displayMode, setDisplayMode] = useState<ChatbotDisplayMode>(ChatbotDisplayMode.default);
182
+ const [messages, setMessages] = useState<MessageProps[]>(initialMessages);
183
+ const [selectedModel, setSelectedModel] = useState('Granite 7B');
184
+ const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);
185
+ const [isDrawerOpen, setIsDrawerOpen] = useState(false);
186
+ const [conversations, setConversations] = useState<Conversation[] | { [key: string]: Conversation[] }>(
190
187
  initialConversations
191
188
  );
192
- const [announcement, setAnnouncement] = React.useState<string>();
193
- const scrollToBottomRef = React.useRef<HTMLDivElement>(null);
194
- const toggleRef = React.useRef<HTMLButtonElement>(null);
195
- const chatbotRef = React.useRef<HTMLDivElement>(null);
196
- const historyRef = React.useRef<HTMLButtonElement>(null);
189
+ const [announcement, setAnnouncement] = useState<string>();
190
+ const scrollToBottomRef = useRef<HTMLDivElement>(null);
191
+ const toggleRef = useRef<HTMLButtonElement>(null);
192
+ const chatbotRef = useRef<HTMLDivElement>(null);
193
+ const historyRef = useRef<HTMLButtonElement>(null);
197
194
 
198
195
  // Auto-scrolls to the latest message
199
- React.useEffect(() => {
196
+ useEffect(() => {
200
197
  // don't scroll the first load - in this demo, we know we start with two messages
201
198
  if (messages.length > 2) {
202
199
  scrollToBottomRef.current?.scrollIntoView({ behavior: 'smooth' });
203
200
  }
204
201
  }, [messages]);
205
202
 
206
- const onSelectModel = (
207
- _event: React.MouseEvent<Element, MouseEvent> | undefined,
208
- value: string | number | undefined
209
- ) => {
203
+ const onSelectModel = (_event: MouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
210
204
  setSelectedModel(value as string);
211
205
  tracking.trackSingleItem('ModelSelected', { model: value });
212
206
  };
213
207
 
214
208
  const onSelectDisplayMode = (
215
- _event: React.MouseEvent<Element, MouseEvent> | undefined,
209
+ _event: MouseEvent<Element, MouseEvent> | undefined,
216
210
  value: string | number | undefined
217
211
  ) => {
218
212
  setDisplayMode(value as ChatbotDisplayMode);
@@ -275,7 +269,7 @@ export const ChatbotDemo: React.FunctionComponent = () => {
275
269
  positive: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Good response' }) },
276
270
  negative: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Bad response' }) },
277
271
  copy: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Copy' }) },
278
- share: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Share' }) },
272
+ download: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Download' }) },
279
273
  listen: { onClick: () => tracking.trackSingleItem(actionEvent2, { response: 'Listen' }) }
280
274
  }
281
275
  });
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import { useState, FunctionComponent, MouseEvent } from 'react';
2
2
  import ChatbotToggle from '@patternfly/chatbot/dist/dynamic/ChatbotToggle';
3
3
  import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
4
4
  import ChatbotContent from '@patternfly/chatbot/dist/dynamic/ChatbotContent';
@@ -37,7 +37,7 @@ interface ModalData {
37
37
  fileName: string;
38
38
  }
39
39
 
40
- export const BasicDemo: React.FunctionComponent = () => {
40
+ export const BasicDemo: FunctionComponent = () => {
41
41
  const onAttachmentClose = (event, name, id) => {
42
42
  const updatedMessages: MessageProps[] = [];
43
43
  messages.map((message) => {
@@ -75,19 +75,19 @@ export const BasicDemo: React.FunctionComponent = () => {
75
75
  }
76
76
  ];
77
77
 
78
- const [error, setError] = React.useState<string>();
79
- const [chatbotVisible, setChatbotVisible] = React.useState<boolean>(true);
80
- const [file, setFile] = React.useState<File>();
81
- const [isLoadingFile, setIsLoadingFile] = React.useState<boolean>(false);
82
- const [messages, setMessages] = React.useState<MessageProps[]>(initialMessages);
83
- const [isPreviewModalOpen, setIsPreviewModalOpen] = React.useState<boolean>(false);
84
- const [isEditModalOpen, setIsEditModalOpen] = React.useState<boolean>(false);
85
- const [currentModalData, setCurrentModalData] = React.useState<ModalData>();
86
- const [showAlert, setShowAlert] = React.useState<boolean>(false);
87
- const [displayMode, setDisplayMode] = React.useState<ChatbotDisplayMode>(ChatbotDisplayMode.default);
78
+ const [error, setError] = useState<string>();
79
+ const [chatbotVisible, setChatbotVisible] = useState<boolean>(true);
80
+ const [file, setFile] = useState<File>();
81
+ const [isLoadingFile, setIsLoadingFile] = useState<boolean>(false);
82
+ const [messages, setMessages] = useState<MessageProps[]>(initialMessages);
83
+ const [isPreviewModalOpen, setIsPreviewModalOpen] = useState<boolean>(false);
84
+ const [isEditModalOpen, setIsEditModalOpen] = useState<boolean>(false);
85
+ const [currentModalData, setCurrentModalData] = useState<ModalData>();
86
+ const [showAlert, setShowAlert] = useState<boolean>(false);
87
+ const [displayMode, setDisplayMode] = useState<ChatbotDisplayMode>(ChatbotDisplayMode.default);
88
88
 
89
89
  const onSelectDisplayMode = (
90
- _event: React.MouseEvent<Element, MouseEvent> | undefined,
90
+ _event: MouseEvent<Element, MouseEvent> | undefined,
91
91
  value: string | number | undefined
92
92
  ) => {
93
93
  setDisplayMode(value as ChatbotDisplayMode);
@@ -138,10 +138,17 @@ export const BasicDemo: React.FunctionComponent = () => {
138
138
  }, 1000);
139
139
  })
140
140
  .catch((error: DOMException) => {
141
+ setShowAlert(true);
141
142
  setError(`Failed to read file: ${error.message}`);
142
143
  });
143
144
  };
144
145
 
146
+ const handleAttachRejected = () => {
147
+ setFile(undefined);
148
+ setShowAlert(true);
149
+ setError('This demo only supports file extensions .txt, .json, .yaml, and .yaml. Please try a different file.');
150
+ };
151
+
145
152
  const handleFileDrop = (event: DropEvent, data: File[]) => {
146
153
  handleFile(data);
147
154
  };
@@ -218,7 +225,17 @@ export const BasicDemo: React.FunctionComponent = () => {
218
225
  </ChatbotHeaderOptionsDropdown>
219
226
  </ChatbotHeaderActions>
220
227
  </ChatbotHeader>
221
- <FileDropZone onFileDrop={handleFileDrop} displayMode={displayMode}>
228
+ <FileDropZone
229
+ onFileDrop={handleFileDrop}
230
+ displayMode={displayMode}
231
+ infoText="Allowed file types are .json, .txt and .yaml and maximum file size is 25 MB."
232
+ allowedFileTypes={{
233
+ 'text/plain': ['.txt'],
234
+ 'application/json': ['.json'],
235
+ 'application/yaml': ['.yaml', '.yml']
236
+ }}
237
+ onAttachRejected={handleAttachRejected}
238
+ >
222
239
  <ChatbotContent>
223
240
  <MessageBox>
224
241
  {showAlert && (
@@ -245,7 +262,17 @@ export const BasicDemo: React.FunctionComponent = () => {
245
262
  <FileDetailsLabel fileName={file.name} isLoading={isLoadingFile} onClose={onClose} />
246
263
  </div>
247
264
  )}
248
- <MessageBar onSendMessage={handleSend} hasAttachButton handleAttach={handleAttach} />
265
+ <MessageBar
266
+ onSendMessage={handleSend}
267
+ hasAttachButton
268
+ handleAttach={handleAttach}
269
+ allowedFileTypes={{
270
+ 'text/plain': ['.txt'],
271
+ 'application/json': ['.json'],
272
+ 'application/yaml': ['.yaml', '.yml']
273
+ }}
274
+ onAttachRejected={handleAttachRejected}
275
+ />
249
276
  <ChatbotFootnote label="ChatBot uses AI. Check for mistakes." />
250
277
  </ChatbotFooter>
251
278
  </FileDropZone>
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import ChatbotToggle from '@patternfly/chatbot/dist/dynamic/ChatbotToggle';
3
2
  import Chatbot from '@patternfly/chatbot/dist/dynamic/Chatbot';
4
3
  import ChatbotContent from '@patternfly/chatbot/dist/dynamic/ChatbotContent';
@@ -18,6 +17,7 @@ import userAvatar from '../Messages/user_avatar.svg';
18
17
  import patternflyAvatar from '../Messages/patternfly_avatar.jpg';
19
18
  import '@patternfly/react-core/dist/styles/base.css';
20
19
  import '@patternfly/chatbot/dist/css/main.css';
20
+ import { cloneElement, FunctionComponent, isValidElement, ReactNode, useState, Children } from 'react';
21
21
 
22
22
  const initialMenuItems = [
23
23
  <DropdownList key="list-1">
@@ -84,14 +84,14 @@ const messages: MessageProps[] = [
84
84
  }
85
85
  ];
86
86
 
87
- export const AttachmentMenuDemo: React.FunctionComponent = () => {
88
- const [chatbotVisible, setChatbotVisible] = React.useState<boolean>(true);
89
- const [file, setFile] = React.useState<File>();
90
- const [isLoadingFile, setIsLoadingFile] = React.useState<boolean>(false);
91
- const [userFacingMenuItems, setUserFacingMenuItems] = React.useState<React.ReactNode>([]);
92
- const [error, setError] = React.useState<string>();
93
- const [showAlert, setShowAlert] = React.useState<boolean>(false);
94
- const [isOpen, setIsOpen] = React.useState<boolean>(false);
87
+ export const AttachmentMenuDemo: FunctionComponent = () => {
88
+ const [chatbotVisible, setChatbotVisible] = useState<boolean>(true);
89
+ const [file, setFile] = useState<File>();
90
+ const [isLoadingFile, setIsLoadingFile] = useState<boolean>(false);
91
+ const [userFacingMenuItems, setUserFacingMenuItems] = useState<ReactNode>([]);
92
+ const [error, setError] = useState<string>();
93
+ const [showAlert, setShowAlert] = useState<boolean>(false);
94
+ const [isOpen, setIsOpen] = useState<boolean>(false);
95
95
 
96
96
  const { open, getInputProps } = useDropzone({
97
97
  onDropAccepted: (files: File[]) => {
@@ -127,6 +127,7 @@ export const AttachmentMenuDemo: React.FunctionComponent = () => {
127
127
  // Attachments
128
128
  // --------------------------------------------------------------------------
129
129
  const handleFileDrop = (event: DropEvent, data: File[]) => {
130
+ setIsOpen(false);
130
131
  setFile(data[0]);
131
132
  setIsLoadingFile(true);
132
133
  setTimeout(() => {
@@ -162,18 +163,18 @@ export const AttachmentMenuDemo: React.FunctionComponent = () => {
162
163
  setUserFacingMenuItems(initialMenuItems.concat(uploadMenuItems));
163
164
  };
164
165
 
165
- const findMatchingElements = (elements: React.ReactNode[], targetValue: string) => {
166
- let matchingElements = [] as React.ReactNode[];
166
+ const findMatchingElements = (elements: ReactNode[], targetValue: string) => {
167
+ let matchingElements = [] as ReactNode[];
167
168
 
168
169
  elements.forEach((element) => {
169
- if (React.isValidElement(element)) {
170
+ if (isValidElement(element)) {
170
171
  // Check if the element's value matches the targetValue
171
172
  if (element.props.value && element.props.value.toLowerCase().includes(targetValue.toLowerCase())) {
172
- matchingElements.push(React.cloneElement(element, { key: element.props.value }));
173
+ matchingElements.push(cloneElement(element, { key: element.props.value }));
173
174
  }
174
175
 
175
176
  // Recursively check the element's children
176
- const children = React.Children.toArray(element.props.children);
177
+ const children = Children.toArray(element.props.children);
177
178
  matchingElements = matchingElements.concat(findMatchingElements(children, targetValue));
178
179
  }
179
180
  });