@patternfly/chatbot 6.3.0-prerelease.8 → 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 +181 -44
  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 +181 -44
  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 -82
  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,4 +1,5 @@
1
- import React from 'react';
1
+ import type { FunctionComponent, Ref } from 'react';
2
+ import { useState } from 'react';
2
3
 
3
4
  import {
4
5
  Tooltip,
@@ -7,7 +8,8 @@ import {
7
8
  DropdownProps,
8
9
  MenuToggle,
9
10
  MenuToggleElement,
10
- Icon
11
+ Icon,
12
+ MenuToggleProps
11
13
  } from '@patternfly/react-core';
12
14
  import EllipsisIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
13
15
 
@@ -20,21 +22,25 @@ export interface ChatbotHeaderOptionsDropdownProps extends Omit<DropdownProps, '
20
22
  tooltipProps?: TooltipProps;
21
23
  /** Aria label for menu toggle */
22
24
  menuToggleAriaLabel?: string;
25
+ /** Sets menu to compact styling. */
23
26
  isCompact?: boolean;
27
+ /** Additional props passed to toggle */
28
+ toggleProps?: MenuToggleProps;
24
29
  }
25
30
 
26
- export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeaderOptionsDropdownProps> = ({
31
+ export const ChatbotHeaderOptionsDropdown: FunctionComponent<ChatbotHeaderOptionsDropdownProps> = ({
27
32
  className,
28
33
  children,
29
34
  onSelect,
30
35
  tooltipProps,
31
36
  menuToggleAriaLabel = 'Chatbot options',
32
37
  isCompact,
38
+ toggleProps,
33
39
  ...props
34
40
  }: ChatbotHeaderOptionsDropdownProps) => {
35
- const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
41
+ const [isOptionsMenuOpen, setIsOptionsMenuOpen] = useState(false);
36
42
 
37
- const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
43
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
38
44
  <Tooltip
39
45
  className="pf-chatbot__tooltip"
40
46
  content="Chatbot options"
@@ -56,6 +62,7 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
56
62
  isExpanded={isOptionsMenuOpen}
57
63
  onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
58
64
  size={isCompact ? 'sm' : undefined}
65
+ {...toggleProps}
59
66
  />
60
67
  </Tooltip>
61
68
  );
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { DropdownItem } from '@patternfly/react-core';
3
2
  import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
4
3
  import { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
@@ -50,4 +49,13 @@ describe('ChatbotHeaderSelectorDropdown', () => {
50
49
  );
51
50
  expect(screen.getByRole('button', { name: /Select model/i })).toHaveClass('pf-m-compact');
52
51
  });
52
+
53
+ it('should handle toggleProps', () => {
54
+ render(
55
+ <ChatbotHeaderSelectorDropdown value="Option 1" toggleProps={{ isDisabled: true }}>
56
+ {dropdownItems}
57
+ </ChatbotHeaderSelectorDropdown>
58
+ );
59
+ expect(screen.getByRole('button', { name: /Select model/i })).toBeDisabled();
60
+ });
53
61
  });
@@ -1,6 +1,15 @@
1
- import React from 'react';
1
+ import type { FunctionComponent, Ref } from 'react';
2
+ import { useState } from 'react';
2
3
 
3
- import { Tooltip, TooltipProps, Dropdown, DropdownProps, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
4
+ import {
5
+ Tooltip,
6
+ TooltipProps,
7
+ Dropdown,
8
+ DropdownProps,
9
+ MenuToggle,
10
+ MenuToggleElement,
11
+ MenuToggleProps
12
+ } from '@patternfly/react-core';
4
13
 
5
14
  export interface ChatbotHeaderSelectorDropdownProps extends Omit<DropdownProps, 'toggle'> {
6
15
  /** Value of the selected dropdown item */
@@ -15,10 +24,15 @@ export interface ChatbotHeaderSelectorDropdownProps extends Omit<DropdownProps,
15
24
  menuToggleAriaLabel?: string;
16
25
  /** Text displayed in Tooltip wrapping the display mode dropdown */
17
26
  tooltipContent?: string;
27
+ /** Sets menu to compact styling. */
18
28
  isCompact?: boolean;
29
+ /** Additional props passed to toggle */
30
+ toggleProps?: MenuToggleProps;
31
+ /** Custom width for the dropdown */
32
+ dropdownWidth?: string;
19
33
  }
20
34
 
21
- export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeaderSelectorDropdownProps> = ({
35
+ export const ChatbotHeaderSelectorDropdown: FunctionComponent<ChatbotHeaderSelectorDropdownProps> = ({
22
36
  value,
23
37
  className,
24
38
  children,
@@ -27,12 +41,14 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
27
41
  tooltipContent = 'Select model',
28
42
  menuToggleAriaLabel,
29
43
  isCompact,
44
+ toggleProps,
45
+ dropdownWidth,
30
46
  ...props
31
47
  }: ChatbotHeaderSelectorDropdownProps) => {
32
- const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
33
- const [defaultAriaLabel, setDefaultAriaLabel] = React.useState('Select model');
48
+ const [isOptionsMenuOpen, setIsOptionsMenuOpen] = useState(false);
49
+ const [defaultAriaLabel, setDefaultAriaLabel] = useState('Select model');
34
50
 
35
- const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
51
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
36
52
  <Tooltip
37
53
  className="pf-chatbot__tooltip"
38
54
  content={tooltipContent}
@@ -49,6 +65,10 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
49
65
  onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
50
66
  size={isCompact ? 'sm' : undefined}
51
67
  className={`${isCompact ? 'pf-m-compact' : ''}`}
68
+ {...toggleProps}
69
+ style={{
70
+ width: dropdownWidth
71
+ }}
52
72
  >
53
73
  {value}
54
74
  </MenuToggle>
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
4
3
  import ChatbotHeaderTitle from './ChatbotHeaderTitle';
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type { FunctionComponent } from 'react';
2
2
 
3
3
  import { SplitItem } from '@patternfly/react-core';
4
4
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
@@ -22,7 +22,7 @@ export interface ChatbotHeaderTitleProps {
22
22
  showOnDefault?: React.ReactNode | string;
23
23
  }
24
24
 
25
- export const ChatbotHeaderTitle: React.FunctionComponent<ChatbotHeaderTitleProps> = ({
25
+ export const ChatbotHeaderTitle: FunctionComponent<ChatbotHeaderTitleProps> = ({
26
26
  className,
27
27
  children,
28
28
  displayMode,
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import ChatbotModal from './ChatbotModal';
4
3
  import '@testing-library/jest-dom';
@@ -1,7 +1,7 @@
1
1
  // ============================================================================
2
2
  // Code Modal - Chatbot Modal with Code Editor
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent } from 'react';
5
5
 
6
6
  // Import PatternFly components
7
7
  import { Modal, ModalProps } from '@patternfly/react-core';
@@ -16,7 +16,7 @@ export interface ChatbotModalProps extends Omit<ModalProps, 'ref'> {
16
16
  isCompact?: boolean;
17
17
  }
18
18
 
19
- export const ChatbotModal: React.FunctionComponent<ChatbotModalProps> = ({
19
+ export const ChatbotModal: FunctionComponent<ChatbotModalProps> = ({
20
20
  children,
21
21
  displayMode = ChatbotDisplayMode.default,
22
22
  className,
@@ -1,13 +1,13 @@
1
1
  // ============================================================================
2
2
  // Chatbot Popover
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent } from 'react';
5
5
 
6
6
  // Import PatternFly components
7
7
  import { Popover, PopoverProps } from '@patternfly/react-core';
8
8
 
9
- export const ChatbotPopover: React.FunctionComponent<PopoverProps> = ({ children, className, ...props }) => (
10
- <Popover className={`pf-chatbot__popover ${className ?? ''}`} showClose={false} {...props}>
9
+ export const ChatbotPopover: FunctionComponent<PopoverProps> = ({ children, className, ...props }) => (
10
+ <Popover className={`pf-chatbot__popover ${className ?? ''}`} showClose={false} {...props}>
11
11
  {children}
12
12
  </Popover>
13
13
  );
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
3
  import userEvent from '@testing-library/user-event';
@@ -1,7 +1,9 @@
1
1
  // ============================================================================
2
2
  // Chatbot Toggle
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { Ref, FunctionComponent } from 'react';
5
+
6
+ import { forwardRef } from 'react';
5
7
  import { Button, ButtonProps, Tooltip, TooltipProps, Icon } from '@patternfly/react-core';
6
8
  import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-icon';
7
9
 
@@ -47,7 +49,7 @@ const ChatIcon = () => (
47
49
  </svg>
48
50
  );
49
51
 
50
- const ChatbotToggleBase: React.FunctionComponent<ChatbotToggleProps> = ({
52
+ const ChatbotToggleBase: FunctionComponent<ChatbotToggleProps> = ({
51
53
  tooltipLabel,
52
54
  isChatbotVisible,
53
55
  onToggleChatbot,
@@ -87,7 +89,7 @@ const ChatbotToggleBase: React.FunctionComponent<ChatbotToggleProps> = ({
87
89
  );
88
90
  };
89
91
 
90
- const ChatbotToggle = React.forwardRef((props: ChatbotToggleProps, ref: React.Ref<any>) => (
92
+ const ChatbotToggle = forwardRef((props: ChatbotToggleProps, ref: Ref<any>) => (
91
93
  <ChatbotToggleBase innerRef={ref} {...props} />
92
94
  ));
93
95
 
@@ -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 ChatbotWelcomePrompt from './ChatbotWelcomePrompt';
@@ -1,7 +1,7 @@
1
1
  // ============================================================================
2
2
  // Chatbot Layout - Chat - Welcome
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent } from 'react';
5
5
 
6
6
  import { Content, ContentVariants, Card, CardHeader, CardTitle, CardBody } from '@patternfly/react-core';
7
7
 
@@ -28,7 +28,7 @@ export interface WelcomePrompt {
28
28
  onClick?: () => void;
29
29
  }
30
30
 
31
- export const ChatbotWelcomePrompt: React.FunctionComponent<ChatbotWelcomePromptProps> = ({
31
+ export const ChatbotWelcomePrompt: FunctionComponent<ChatbotWelcomePromptProps> = ({
32
32
  title,
33
33
  description,
34
34
  prompts,
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
1
+ import { render, screen, within } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
3
  import CodeModal from './CodeModal';
5
4
 
@@ -21,4 +20,32 @@ describe('ChatbotModal', () => {
21
20
  );
22
21
  expect(screen.getByRole('dialog')).toHaveClass('pf-m-compact');
23
22
  });
23
+
24
+ it('should render CodeModal with custom classNames', async () => {
25
+ render(
26
+ <CodeModal
27
+ isCompact
28
+ code="Hello world"
29
+ fileName="greetings.txt"
30
+ isModalOpen={true}
31
+ handleModalToggle={jest.fn()}
32
+ onPrimaryAction={jest.fn()}
33
+ onSecondaryAction={jest.fn()}
34
+ title="Preview attachment"
35
+ primaryActionBtn="Submit"
36
+ secondaryActionBtn="Cancel"
37
+ modalHeaderClassName="custom-header-class"
38
+ modalBodyClassName="custom-body-class"
39
+ modalFooterClassName="custom-footer-class"
40
+ ></CodeModal>
41
+ );
42
+
43
+ const modal = screen.getByRole('dialog');
44
+ const modalHeader = within(modal).getByRole('banner');
45
+ expect(modalHeader).toHaveClass('custom-header-class');
46
+ const modalBody = modal.querySelector('#code-modal-body');
47
+ expect(modalBody).toHaveClass('custom-body-class');
48
+ const modalfooter = within(modal).getByRole('contentinfo');
49
+ expect(modalfooter).toHaveClass('custom-footer-class');
50
+ });
24
51
  });
@@ -1,7 +1,8 @@
1
1
  // ============================================================================
2
2
  // Code Modal - Chatbot Modal with Code Editor
3
3
  // ============================================================================
4
- import React from 'react';
4
+ import type { FunctionComponent, MouseEvent } from 'react';
5
+ import { useState } from 'react';
5
6
  import path from 'path-browserify';
6
7
 
7
8
  // Import PatternFly components
@@ -42,9 +43,15 @@ export interface CodeModalProps {
42
43
  displayMode?: ChatbotDisplayMode;
43
44
  /** Sets modal to compact styling. */
44
45
  isCompact?: boolean;
46
+ /** Class applied to modal header */
47
+ modalHeaderClassName?: string;
48
+ /** Class applied to modal body */
49
+ modalBodyClassName?: string;
50
+ /** Class applied to modal footer */
51
+ modalFooterClassName?: string;
45
52
  }
46
53
 
47
- export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
54
+ export const CodeModal: FunctionComponent<CodeModalProps> = ({
48
55
  fileName,
49
56
  code,
50
57
  codeEditorControlClassName: codeEditorClassName,
@@ -60,11 +67,14 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
60
67
  title,
61
68
  displayMode = ChatbotDisplayMode.default,
62
69
  isCompact,
70
+ modalHeaderClassName,
71
+ modalBodyClassName,
72
+ modalFooterClassName,
63
73
  ...props
64
74
  }: CodeModalProps) => {
65
- const [newCode, setNewCode] = React.useState(code);
75
+ const [newCode, setNewCode] = useState(code);
66
76
 
67
- const handlePrimaryAction = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
77
+ const handlePrimaryAction = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
68
78
  handleModalToggle(_event);
69
79
  if (!isReadOnly) {
70
80
  onPrimaryAction(_event, newCode);
@@ -73,7 +83,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
73
83
  }
74
84
  };
75
85
 
76
- const handleSecondaryAction = (_event: React.MouseEvent | MouseEvent | KeyboardEvent) => {
86
+ const handleSecondaryAction = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
77
87
  handleModalToggle(_event);
78
88
  onSecondaryAction(_event);
79
89
  };
@@ -101,8 +111,8 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
101
111
  displayMode={displayMode}
102
112
  isCompact={isCompact}
103
113
  >
104
- <ModalHeader title={title} labelId="code-modal-title" />
105
- <ModalBody id="code-modal-body">
114
+ <ModalHeader className={modalHeaderClassName} title={title} labelId="code-modal-title" />
115
+ <ModalBody className={modalBodyClassName} id="code-modal-body">
106
116
  <Stack className="pf-chatbot__code-modal-body">
107
117
  <StackItem className="pf-chatbot__code-modal-file-details">
108
118
  <FileDetails fileName={fileName} />
@@ -129,7 +139,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
129
139
  </StackItem>
130
140
  </Stack>
131
141
  </ModalBody>
132
- <ModalFooter>
142
+ <ModalFooter className={modalFooterClassName}>
133
143
  <Button isBlock key="code-modal-primary" variant="primary" onClick={handlePrimaryAction} form="code-modal-form">
134
144
  {primaryActionBtn}
135
145
  </Button>
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
3
  import Compare from './Compare';
@@ -1,4 +1,5 @@
1
- import React, { PropsWithChildren } from 'react';
1
+ import type { MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyboardEvent, PropsWithChildren } from 'react';
2
+ import { useEffect, useState } from 'react';
2
3
  import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
4
 
4
5
  interface CompareProps {
@@ -24,11 +25,11 @@ export const Compare = ({
24
25
  onToggleClick,
25
26
  toggleGroupAriaLabel = 'Select which chatbot to display'
26
27
  }: PropsWithChildren<CompareProps>) => {
27
- const [isSelected, setIsSelected] = React.useState('toggle-group-chatbot-1');
28
- const [showFirstChatbot, setShowFirstChatbot] = React.useState(true);
29
- const [showSecondChatbot, setShowSecondChatbot] = React.useState(false);
28
+ const [isSelected, setIsSelected] = useState('toggle-group-chatbot-1');
29
+ const [showFirstChatbot, setShowFirstChatbot] = useState(true);
30
+ const [showSecondChatbot, setShowSecondChatbot] = useState(false);
30
31
 
31
- React.useEffect(() => {
32
+ useEffect(() => {
32
33
  // we want to show the first if we switch to the mobile toggle view
33
34
  // and reset/switch back to normal otherwise
34
35
  const updateChatbotVisibility = () => {
@@ -50,7 +51,7 @@ export const Compare = ({
50
51
 
51
52
  // this only happens on mobile
52
53
  const handleChildToggleClick = (
53
- event: MouseEvent | React.MouseEvent<any, MouseEvent> | React.KeyboardEvent<Element>
54
+ event: MouseEvent | ReactMouseEvent<any, MouseEvent> | ReactKeyboardEvent<Element>
54
55
  ) => {
55
56
  const id = event.currentTarget.id;
56
57
  setIsSelected(id);
@@ -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 FileDetails from './FileDetails';
@@ -1,4 +1,4 @@
1
- import React, { PropsWithChildren } from 'react';
1
+ import { PropsWithChildren } from 'react';
2
2
  import { Flex, Stack, StackItem, Truncate } from '@patternfly/react-core';
3
3
  import path from 'path-browserify';
4
4
  interface FileDetailsProps {
@@ -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 FileDetailsLabel from './FileDetailsLabel';
@@ -1,4 +1,4 @@
1
- import React, { PropsWithChildren } from 'react';
1
+ import { PropsWithChildren } from 'react';
2
2
  import { Button, Label } from '@patternfly/react-core';
3
3
  import FileDetails from '../FileDetails';
4
4
  import { Spinner } from '@patternfly/react-core';
@@ -1,7 +1,7 @@
1
- import React from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import '@testing-library/jest-dom';
4
3
  import FileDropZone from './FileDropZone';
4
+ import userEvent from '@testing-library/user-event';
5
5
 
6
6
  describe('FileDropZone', () => {
7
7
  it('should render file drop zone', () => {
@@ -12,4 +12,115 @@ describe('FileDropZone', () => {
12
12
  render(<FileDropZone onFileDrop={jest.fn()}>Hi</FileDropZone>);
13
13
  expect(screen.getByText('Hi')).toBeTruthy();
14
14
  });
15
+
16
+ it('should call onFileDrop when file type is accepted', async () => {
17
+ const onFileDrop = jest.fn();
18
+ const { container } = render(
19
+ <FileDropZone data-testid="input" allowedFileTypes={{ 'text/plain': ['.txt'] }} onFileDrop={onFileDrop} />
20
+ );
21
+
22
+ const file = new File(['Test'], 'example.text', { type: 'text/plain' });
23
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
24
+
25
+ await userEvent.upload(fileInput, file);
26
+
27
+ expect(onFileDrop).toHaveBeenCalled();
28
+ });
29
+
30
+ it('should not call onFileDrop when file type is not accepted', async () => {
31
+ const onFileDrop = jest.fn();
32
+ const { container } = render(
33
+ <FileDropZone data-testid="input" allowedFileTypes={{ 'text/plain': ['.txt'] }} onFileDrop={onFileDrop} />
34
+ );
35
+
36
+ const file = new File(['[]'], 'example.json', { type: 'application/json' });
37
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
38
+
39
+ await userEvent.upload(fileInput, file);
40
+
41
+ expect(onFileDrop).not.toHaveBeenCalled();
42
+ });
43
+
44
+ it('should respect minSize restriction', async () => {
45
+ const onAttachRejected = jest.fn();
46
+ const { container } = render(
47
+ <FileDropZone onFileDrop={jest.fn()} minSize={1000} onAttachRejected={onAttachRejected} />
48
+ );
49
+
50
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
51
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
52
+
53
+ await userEvent.upload(fileInput, file);
54
+
55
+ expect(onAttachRejected).toHaveBeenCalled();
56
+ });
57
+ it('should respect maxSize restriction', async () => {
58
+ const onAttachRejected = jest.fn();
59
+ const { container } = render(
60
+ <FileDropZone onFileDrop={jest.fn()} maxSize={100} onAttachRejected={onAttachRejected} />
61
+ );
62
+
63
+ const largeContent = 'x'.repeat(200);
64
+ const file = new File([largeContent], 'example.txt', { type: 'text/plain' });
65
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
66
+
67
+ await userEvent.upload(fileInput, file);
68
+
69
+ expect(onAttachRejected).toHaveBeenCalled();
70
+ });
71
+
72
+ it('should respect maxFiles restriction', async () => {
73
+ const onAttachRejected = jest.fn();
74
+ const { container } = render(
75
+ <FileDropZone onFileDrop={jest.fn()} maxFiles={1} onAttachRejected={onAttachRejected} />
76
+ );
77
+
78
+ const files = [
79
+ new File(['Test1'], 'example1.txt', { type: 'text/plain' }),
80
+ new File(['Test2'], 'example2.txt', { type: 'text/plain' })
81
+ ];
82
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
83
+
84
+ await userEvent.upload(fileInput, files);
85
+
86
+ expect(onAttachRejected).toHaveBeenCalled();
87
+ });
88
+
89
+ it('should be disabled when isAttachmentDisabled is true', async () => {
90
+ const onFileDrop = jest.fn();
91
+ const { container } = render(<FileDropZone onFileDrop={onFileDrop} isAttachmentDisabled={true} />);
92
+
93
+ const file = new File(['Test'], 'example.text', { type: 'text/plain' });
94
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
95
+ await userEvent.upload(fileInput, file);
96
+
97
+ expect(onFileDrop).not.toHaveBeenCalled();
98
+ });
99
+
100
+ it('should call onAttach when files are attached', async () => {
101
+ const onAttach = jest.fn();
102
+ const { container } = render(<FileDropZone onFileDrop={jest.fn()} onAttach={onAttach} />);
103
+
104
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
105
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
106
+
107
+ await userEvent.upload(fileInput, file);
108
+
109
+ expect(onAttach).toHaveBeenCalled();
110
+ });
111
+ it('should use custom validator when provided', async () => {
112
+ const validator = jest.fn().mockReturnValue({ message: 'Custom error' });
113
+ const onAttachRejected = jest.fn();
114
+ const onFileDrop = jest.fn();
115
+ const { container } = render(
116
+ <FileDropZone onFileDrop={onFileDrop} validator={validator} onAttachRejected={onAttachRejected} />
117
+ );
118
+
119
+ const file = new File(['Test'], 'example.txt', { type: 'text/plain' });
120
+ const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement;
121
+ await userEvent.upload(fileInput, file);
122
+
123
+ expect(validator).toHaveBeenCalledWith(file);
124
+ expect(onAttachRejected).toHaveBeenCalled();
125
+ });
15
126
  });
@@ -1,7 +1,9 @@
1
1
  import { DropEvent, MultipleFileUpload, MultipleFileUploadMain } from '@patternfly/react-core';
2
- import React from 'react';
2
+ import type { FunctionComponent } from 'react';
3
+ import { useState } from 'react';
3
4
  import { ChatbotDisplayMode } from '../Chatbot';
4
5
  import { UploadIcon } from '@patternfly/react-icons';
6
+ import { Accept, FileError, FileRejection } from 'react-dropzone/.';
5
7
 
6
8
  export interface FileDropZoneProps {
7
9
  /** Content displayed when the drop zone is not currently in use */
@@ -12,19 +14,47 @@ export interface FileDropZoneProps {
12
14
  infoText?: string;
13
15
  /** When files are dropped or uploaded this callback will be called with all accepted files */
14
16
  onFileDrop: (event: DropEvent, data: File[]) => void;
17
+ /** Specifies the file types accepted by the attachment upload component.
18
+ * Files that don't match the accepted types will be disabled in the file picker.
19
+ * For example,
20
+ * allowedFileTypes: { 'application/json': ['.json'], 'text/plain': ['.txt'] }
21
+ **/
22
+ allowedFileTypes?: Accept;
15
23
  /** Display mode for the Chatbot parent; this influences the styles applied */
16
24
  displayMode?: ChatbotDisplayMode;
25
+ /** Minimum file size allowed */
26
+ minSize?: number;
27
+ /** Max file size allowed */
28
+ maxSize?: number;
29
+ /** Max number of files allowed */
30
+ maxFiles?: number;
31
+ /** Whether attachments are disabled */
32
+ isAttachmentDisabled?: boolean;
33
+ /** Callback when file(s) are attached */
34
+ onAttach?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
35
+ /** Callback function for AttachButton when an attachment fails */
36
+ onAttachRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
37
+ /** Validator for files; see https://react-dropzone.js.org/#!/Custom%20validation for more information */
38
+ validator?: <T extends File>(file: T) => FileError | readonly FileError[] | null;
17
39
  }
18
40
 
19
- const FileDropZone: React.FunctionComponent<FileDropZoneProps> = ({
41
+ const FileDropZone: FunctionComponent<FileDropZoneProps> = ({
20
42
  children,
21
43
  className,
22
44
  infoText = 'Maximum file size is 25 MB',
23
45
  onFileDrop,
46
+ allowedFileTypes,
47
+ minSize,
48
+ maxSize,
49
+ maxFiles,
50
+ isAttachmentDisabled,
51
+ onAttach,
52
+ onAttachRejected,
53
+ validator,
24
54
  displayMode = ChatbotDisplayMode.default,
25
55
  ...props
26
56
  }: FileDropZoneProps) => {
27
- const [showDropZone, setShowDropZone] = React.useState(false);
57
+ const [showDropZone, setShowDropZone] = useState(false);
28
58
 
29
59
  const renderDropZone = () => (
30
60
  <>
@@ -40,7 +70,17 @@ const FileDropZone: React.FunctionComponent<FileDropZoneProps> = ({
40
70
  return (
41
71
  <MultipleFileUpload
42
72
  dropzoneProps={{
43
- onDrop: () => setShowDropZone(false),
73
+ accept: allowedFileTypes,
74
+ onDrop: (acceptedFiles, fileRejections: FileRejection[], event: DropEvent) => {
75
+ setShowDropZone(false);
76
+ onAttach && onAttach(acceptedFiles, fileRejections, event);
77
+ },
78
+ minSize,
79
+ maxSize,
80
+ maxFiles,
81
+ disabled: isAttachmentDisabled,
82
+ onDropRejected: onAttachRejected,
83
+ validator,
44
84
  ...props
45
85
  }}
46
86
  onDragEnter={() => setShowDropZone(true)}
@@ -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 LoadingMessage from './LoadingMessage';
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type { FunctionComponent } from 'react';
2
2
  import { Icon, Split, SplitItem } from '@patternfly/react-core';
3
3
 
4
4
  import RobotIcon from '@patternfly/react-icons/dist/js/icons/robot-icon';
@@ -7,7 +7,7 @@ export interface LoadingMessageProps {
7
7
  icon?: React.ComponentType;
8
8
  }
9
9
 
10
- export const LoadingMessage: React.FunctionComponent<LoadingMessageProps> = ({ icon: IconComponent = RobotIcon }) => (
10
+ export const LoadingMessage: FunctionComponent<LoadingMessageProps> = ({ icon: IconComponent = RobotIcon }) => (
11
11
  <Split>
12
12
  <SplitItem>
13
13
  <Icon size="lg" className="pf-v6-u-mr-sm pf-v6-u-pt-md">