@patternfly/chatbot 2.2.0-prerelease.3 → 2.2.0-prerelease.30

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 (464) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +52 -0
  3. package/dist/cjs/Chatbot/Chatbot.test.d.ts +1 -0
  4. package/dist/cjs/Chatbot/Chatbot.test.js +28 -0
  5. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  6. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +27 -0
  7. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  8. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +18 -0
  9. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
  10. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  11. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
  12. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +23 -11
  13. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
  14. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
  15. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +29 -0
  16. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
  17. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +45 -0
  18. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  19. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
  20. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  21. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
  22. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
  23. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +1 -1
  24. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  25. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +16 -0
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  31. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
  32. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  33. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
  34. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +47 -0
  46. package/dist/cjs/ChatbotHeader/index.d.ts +1 -0
  47. package/dist/cjs/ChatbotHeader/index.js +1 -0
  48. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
  49. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
  50. package/dist/cjs/CodeModal/CodeModal.js +2 -12
  51. package/dist/cjs/Compare/Compare.d.ts +17 -0
  52. package/dist/cjs/Compare/Compare.js +50 -0
  53. package/dist/cjs/Compare/Compare.test.d.ts +1 -0
  54. package/dist/cjs/Compare/Compare.test.js +20 -0
  55. package/dist/cjs/Compare/index.d.ts +2 -0
  56. package/dist/cjs/Compare/index.js +23 -0
  57. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +4 -0
  58. package/dist/cjs/Message/ImageMessage/ImageMessage.js +25 -0
  59. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +4 -0
  60. package/dist/cjs/Message/LinkMessage/LinkMessage.js +30 -0
  61. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  62. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
  63. package/dist/cjs/Message/Message.d.ts +47 -8
  64. package/dist/cjs/Message/Message.js +69 -18
  65. package/dist/cjs/Message/Message.test.js +265 -3
  66. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
  67. package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -0
  68. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +13 -0
  69. package/dist/cjs/Message/QuickStarts/FallbackImg.js +34 -0
  70. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  71. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +82 -0
  72. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  73. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +64 -0
  74. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  75. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +76 -0
  76. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  77. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +30 -0
  78. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  79. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +77 -0
  80. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  81. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.js +77 -0
  82. package/dist/cjs/Message/QuickStarts/types.d.ts +132 -0
  83. package/dist/cjs/Message/QuickStarts/types.js +17 -0
  84. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
  85. package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
  86. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
  87. package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
  88. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
  89. package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
  90. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
  91. package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
  92. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
  93. package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
  94. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
  95. package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
  96. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
  97. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  98. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
  99. package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
  100. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
  101. package/dist/cjs/Message/UserFeedback/UserFeedback.js +55 -0
  102. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  103. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +146 -0
  104. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  105. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
  106. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  107. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
  108. package/dist/cjs/MessageBar/AttachButton.js +4 -2
  109. package/dist/cjs/MessageBar/MessageBar.d.ts +11 -4
  110. package/dist/cjs/MessageBar/MessageBar.js +122 -39
  111. package/dist/cjs/MessageBar/MessageBar.test.js +12 -4
  112. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -1
  113. package/dist/cjs/MessageBar/SendButton.js +3 -1
  114. package/dist/cjs/MessageBar/StopButton.js +3 -1
  115. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  116. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  117. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  118. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  119. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +10 -1
  120. package/dist/cjs/ResponseActions/ResponseActionButton.js +28 -5
  121. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  122. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
  123. package/dist/cjs/ResponseActions/ResponseActions.d.ts +12 -2
  124. package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
  125. package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
  126. package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
  127. package/dist/cjs/Settings/SettingsForm.js +27 -0
  128. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  129. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  130. package/dist/cjs/Settings/index.d.ts +2 -0
  131. package/dist/cjs/Settings/index.js +23 -0
  132. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
  133. package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
  134. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  135. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
  136. package/dist/cjs/TermsOfUse/index.d.ts +2 -0
  137. package/dist/cjs/TermsOfUse/index.js +23 -0
  138. package/dist/cjs/__mocks__/rehype-external-links.d.ts +2 -0
  139. package/dist/cjs/__mocks__/rehype-external-links.js +4 -0
  140. package/dist/cjs/__mocks__/rehype-sanitize.d.ts +2 -0
  141. package/dist/cjs/__mocks__/rehype-sanitize.js +4 -0
  142. package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +2 -0
  143. package/dist/cjs/__mocks__/rehype-unwrap-images.js +4 -0
  144. package/dist/cjs/index.d.ts +6 -0
  145. package/dist/cjs/index.js +10 -1
  146. package/dist/css/main.css +467 -123
  147. package/dist/css/main.css.map +1 -1
  148. package/dist/dynamic/Compare/package.json +1 -0
  149. package/dist/dynamic/Settings/package.json +1 -0
  150. package/dist/dynamic/TermsOfUse/package.json +1 -0
  151. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  152. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  153. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  154. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  155. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  156. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  157. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  158. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  159. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
  160. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  161. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
  162. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +23 -11
  163. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
  164. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
  165. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +22 -0
  166. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
  167. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +38 -0
  168. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  169. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  170. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  171. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  172. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
  173. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +1 -1
  174. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  175. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  176. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  177. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  178. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  179. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +10 -0
  180. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  181. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  182. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  183. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  184. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  185. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  186. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  187. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  188. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  189. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  190. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  191. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
  192. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  193. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  194. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  195. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
  196. package/dist/esm/ChatbotHeader/index.d.ts +1 -0
  197. package/dist/esm/ChatbotHeader/index.js +1 -0
  198. package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
  199. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
  200. package/dist/esm/CodeModal/CodeModal.js +2 -12
  201. package/dist/esm/Compare/Compare.d.ts +17 -0
  202. package/dist/esm/Compare/Compare.js +43 -0
  203. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  204. package/dist/esm/Compare/Compare.test.js +15 -0
  205. package/dist/esm/Compare/index.d.ts +2 -0
  206. package/dist/esm/Compare/index.js +2 -0
  207. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +4 -0
  208. package/dist/esm/Message/ImageMessage/ImageMessage.js +20 -0
  209. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +4 -0
  210. package/dist/esm/Message/LinkMessage/LinkMessage.js +25 -0
  211. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  212. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
  213. package/dist/esm/Message/Message.d.ts +47 -8
  214. package/dist/esm/Message/Message.js +67 -16
  215. package/dist/esm/Message/Message.test.js +265 -3
  216. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
  217. package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
  218. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
  219. package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
  220. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  221. package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
  222. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  223. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
  224. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  225. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
  226. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  227. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
  228. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  229. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
  230. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  231. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
  232. package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
  233. package/dist/esm/Message/QuickStarts/types.js +14 -0
  234. package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
  235. package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
  236. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
  237. package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
  238. package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
  239. package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
  240. package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
  241. package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
  242. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
  243. package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
  244. package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
  245. package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
  246. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  247. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  248. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
  249. package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
  250. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
  251. package/dist/esm/Message/UserFeedback/UserFeedback.js +50 -0
  252. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  253. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +141 -0
  254. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  255. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
  256. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  257. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
  258. package/dist/esm/MessageBar/AttachButton.js +4 -2
  259. package/dist/esm/MessageBar/MessageBar.d.ts +11 -4
  260. package/dist/esm/MessageBar/MessageBar.js +122 -39
  261. package/dist/esm/MessageBar/MessageBar.test.js +12 -4
  262. package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -1
  263. package/dist/esm/MessageBar/SendButton.js +3 -1
  264. package/dist/esm/MessageBar/StopButton.js +3 -1
  265. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  266. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  267. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  268. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  269. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +10 -1
  270. package/dist/esm/ResponseActions/ResponseActionButton.js +25 -2
  271. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  272. package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
  273. package/dist/esm/ResponseActions/ResponseActions.d.ts +12 -2
  274. package/dist/esm/ResponseActions/ResponseActions.js +26 -9
  275. package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
  276. package/dist/esm/Settings/SettingsForm.d.ts +13 -0
  277. package/dist/esm/Settings/SettingsForm.js +20 -0
  278. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  279. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  280. package/dist/esm/Settings/index.d.ts +2 -0
  281. package/dist/esm/Settings/index.js +2 -0
  282. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
  283. package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
  284. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  285. package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
  286. package/dist/esm/TermsOfUse/index.d.ts +2 -0
  287. package/dist/esm/TermsOfUse/index.js +2 -0
  288. package/dist/esm/__mocks__/rehype-external-links.d.ts +2 -0
  289. package/dist/esm/__mocks__/rehype-external-links.js +2 -0
  290. package/dist/esm/__mocks__/rehype-sanitize.d.ts +2 -0
  291. package/dist/esm/__mocks__/rehype-sanitize.js +2 -0
  292. package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +2 -0
  293. package/dist/esm/__mocks__/rehype-unwrap-images.js +2 -0
  294. package/dist/esm/index.d.ts +6 -0
  295. package/dist/esm/index.js +6 -0
  296. package/dist/tsconfig.tsbuildinfo +1 -1
  297. package/package.json +10 -13
  298. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +5 -2
  299. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +41 -4
  300. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  301. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +191 -12
  302. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +2 -1
  303. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +2 -2
  304. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +5 -1
  305. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
  306. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
  307. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +1 -1
  308. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
  309. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +1 -1
  310. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +1 -1
  311. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +74 -11
  312. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +221 -14
  313. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +54 -0
  314. package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
  315. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  316. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +5 -5
  317. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +1 -1
  318. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +36 -3
  319. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  320. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  321. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
  322. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +1 -1
  323. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +7 -7
  324. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
  325. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
  326. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
  327. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
  328. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +49 -6
  329. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
  330. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
  331. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +11 -11
  332. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +21 -20
  333. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +3 -3
  334. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +11 -11
  335. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  336. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
  337. package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
  338. package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
  339. package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -57
  340. package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +5 -5
  341. package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
  342. package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
  343. package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
  344. package/patternfly-docs/content/extensions/chatbot/img/docked.svg +68 -49
  345. package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
  346. package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
  347. package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
  348. package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
  349. package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +85 -142
  350. package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +52 -36
  351. package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
  352. package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
  353. package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
  354. package/src/AttachMenu/AttachMenu.scss +1 -1
  355. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  356. package/src/Chatbot/Chatbot.scss +1 -1
  357. package/src/Chatbot/Chatbot.test.tsx +31 -0
  358. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  359. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  360. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +10 -4
  361. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +22 -1
  362. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +242 -3
  363. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +93 -25
  364. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +44 -0
  365. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +38 -0
  366. package/src/ChatbotFooter/ChatbotFooter.scss +0 -5
  367. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  368. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  369. package/src/ChatbotFooter/ChatbotFootnote.tsx +2 -2
  370. package/src/ChatbotHeader/ChatbotHeader.scss +2 -5
  371. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  372. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  373. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  374. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +57 -0
  375. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  376. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  377. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +11 -2
  378. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  379. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
  380. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  381. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +11 -4
  382. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
  383. package/src/ChatbotHeader/index.ts +1 -0
  384. package/src/ChatbotModal/ChatbotModal.scss +1 -1
  385. package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
  386. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +26 -18
  387. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +2 -2
  388. package/src/CodeModal/CodeModal.scss +9 -1
  389. package/src/CodeModal/CodeModal.tsx +2 -13
  390. package/src/Compare/Compare.scss +72 -0
  391. package/src/Compare/Compare.test.tsx +31 -0
  392. package/src/Compare/Compare.tsx +98 -0
  393. package/src/Compare/index.ts +2 -0
  394. package/src/FileDetails/FileDetails.scss +1 -1
  395. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
  396. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
  397. package/src/Message/ImageMessage/ImageMessage.scss +9 -0
  398. package/src/Message/ImageMessage/ImageMessage.tsx +14 -0
  399. package/src/Message/LinkMessage/LinkMessage.tsx +34 -0
  400. package/src/Message/ListMessage/ListMessage.scss +6 -6
  401. package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
  402. package/src/Message/Message.scss +4 -26
  403. package/src/Message/Message.test.tsx +357 -3
  404. package/src/Message/Message.tsx +148 -31
  405. package/src/Message/MessageLoading.scss +2 -2
  406. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  407. package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
  408. package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
  409. package/src/Message/QuickStarts/QuickStartTile.scss +24 -0
  410. package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
  411. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
  412. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
  413. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
  414. package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
  415. package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
  416. package/src/Message/QuickStarts/types.ts +154 -0
  417. package/src/Message/TableMessage/TableMessage.scss +23 -0
  418. package/src/Message/TableMessage/TableMessage.tsx +83 -0
  419. package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
  420. package/src/Message/TableMessage/TdMessage.tsx +11 -0
  421. package/src/Message/TableMessage/ThMessage.tsx +11 -0
  422. package/src/Message/TableMessage/TheadMessage.tsx +11 -0
  423. package/src/Message/TableMessage/TrMessage.tsx +27 -0
  424. package/src/Message/TextMessage/TextMessage.scss +21 -12
  425. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  426. package/src/Message/UserFeedback/CloseButton.tsx +21 -0
  427. package/src/Message/UserFeedback/UserFeedback.scss +53 -0
  428. package/src/Message/UserFeedback/UserFeedback.test.tsx +257 -0
  429. package/src/Message/UserFeedback/UserFeedback.tsx +132 -0
  430. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
  431. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
  432. package/src/MessageBar/AttachButton.scss +19 -3
  433. package/src/MessageBar/AttachButton.tsx +3 -1
  434. package/src/MessageBar/MessageBar.scss +38 -20
  435. package/src/MessageBar/MessageBar.test.tsx +12 -4
  436. package/src/MessageBar/MessageBar.tsx +153 -58
  437. package/src/MessageBar/MicrophoneButton.scss +8 -8
  438. package/src/MessageBar/MicrophoneButton.tsx +1 -1
  439. package/src/MessageBar/SendButton.tsx +2 -0
  440. package/src/MessageBar/StopButton.scss +17 -3
  441. package/src/MessageBar/StopButton.tsx +2 -0
  442. package/src/MessageBox/JumpButton.scss +6 -6
  443. package/src/MessageBox/MessageBox.test.tsx +26 -0
  444. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  445. package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
  446. package/src/ResponseActions/ResponseActionButton.tsx +59 -28
  447. package/src/ResponseActions/ResponseActions.scss +11 -9
  448. package/src/ResponseActions/ResponseActions.test.tsx +105 -5
  449. package/src/ResponseActions/ResponseActions.tsx +80 -9
  450. package/src/Settings/Settings.scss +34 -0
  451. package/src/Settings/SettingsForm.test.tsx +28 -0
  452. package/src/Settings/SettingsForm.tsx +25 -0
  453. package/src/Settings/index.ts +3 -0
  454. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +1 -1
  455. package/src/SourcesCard/SourcesCard.scss +2 -2
  456. package/src/TermsOfUse/TermsOfUse.scss +66 -0
  457. package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
  458. package/src/TermsOfUse/TermsOfUse.tsx +117 -0
  459. package/src/TermsOfUse/index.ts +3 -0
  460. package/src/__mocks__/rehype-external-links.ts +3 -0
  461. package/src/__mocks__/rehype-sanitize.ts +3 -0
  462. package/src/__mocks__/rehype-unwrap-images.tsx +3 -0
  463. package/src/index.ts +9 -0
  464. package/src/main.scss +8 -6
@@ -21,12 +21,23 @@ import {
21
21
  MenuGroup,
22
22
  MenuItem,
23
23
  MenuContent,
24
- MenuItemProps
24
+ MenuItemProps,
25
+ MenuProps,
26
+ DrawerPanelContentProps,
27
+ DrawerContentProps,
28
+ DrawerContentBodyProps,
29
+ DrawerHeadProps,
30
+ DrawerActionsProps,
31
+ DrawerCloseButtonProps,
32
+ DrawerPanelBodyProps,
33
+ SkeletonProps
25
34
  } from '@patternfly/react-core';
26
35
 
27
36
  import { OutlinedCommentAltIcon } from '@patternfly/react-icons';
28
37
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
29
38
  import ConversationHistoryDropdown from './ChatbotConversationHistoryDropdown';
39
+ import LoadingState from './LoadingState';
40
+ import HistoryEmptyState, { HistoryEmptyStateProps } from './EmptyState';
30
41
 
31
42
  export interface Conversation {
32
43
  /** Conversation id */
@@ -37,11 +48,11 @@ export interface Conversation {
37
48
  noIcon?: boolean;
38
49
  /** Conversation */
39
50
  text: string;
40
- /** Dropdown items rendered in conversation options dropdown */
51
+ /** Dropdown items rendered in conversation settings dropdown */
41
52
  menuItems?: React.ReactNode;
42
- /** Optional classname applied to conversation options dropdown */
53
+ /** Optional classname applied to conversation settings dropdown */
43
54
  menuClassName?: string;
44
- /** Tooltip content and aria-label applied to conversation options dropdown */
55
+ /** Tooltip content and aria-label applied to conversation settings dropdown */
45
56
  label?: string;
46
57
  /** Callback for when user selects item. */
47
58
  onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
@@ -79,6 +90,28 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
79
90
  reverseButtonOrder?: boolean;
80
91
  /** Custom test id for the drawer actions */
81
92
  drawerActionsTestId?: string;
93
+ /** Additional props applied to menu */
94
+ menuProps?: MenuProps;
95
+ /** Additional props applied to panel */
96
+ drawerPanelContentProps?: DrawerPanelContentProps;
97
+ /** Additional props applied to drawer content */
98
+ drawerContentProps?: Omit<DrawerContentProps, 'panelContent'>;
99
+ /** Additional props applied to drawer content body */
100
+ drawerContentBodyProps?: DrawerContentBodyProps;
101
+ /** Additional props applied to drawer head */
102
+ drawerHeadProps?: DrawerHeadProps;
103
+ /** Additional props applied to drawer actions */
104
+ drawerActionsProps?: DrawerActionsProps;
105
+ /** Additional props applied to drawer close button */
106
+ drawerCloseButtonProps?: DrawerCloseButtonProps;
107
+ /** Additional props appleid to drawer panel body */
108
+ drawerPanelBodyProps?: DrawerPanelBodyProps;
109
+ /** Whether to show drawer loading state */
110
+ isLoading?: boolean;
111
+ /** Additional props for loading state */
112
+ loadingState?: SkeletonProps;
113
+ /** Content to show in error state. Error state will appear once content is passed in. */
114
+ errorState?: HistoryEmptyStateProps;
82
115
  }
83
116
 
84
117
  export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps> = ({
@@ -91,12 +124,23 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
91
124
  newChatButtonText = 'New chat',
92
125
  drawerContent,
93
126
  onNewChat,
94
- searchInputPlaceholder = 'Search...',
127
+ searchInputPlaceholder = 'Search previous conversations...',
95
128
  searchInputAriaLabel = 'Filter menu items',
96
129
  handleTextInputChange,
97
130
  displayMode,
98
131
  reverseButtonOrder = false,
99
132
  drawerActionsTestId = 'chatbot-nav-drawer-actions',
133
+ menuProps,
134
+ drawerPanelContentProps,
135
+ drawerContentProps,
136
+ drawerContentBodyProps,
137
+ drawerHeadProps,
138
+ drawerActionsProps,
139
+ drawerCloseButtonProps,
140
+ drawerPanelBodyProps,
141
+ isLoading,
142
+ loadingState,
143
+ errorState,
100
144
  ...props
101
145
  }: ChatbotConversationHistoryNavProps) => {
102
146
  const drawerRef = React.useRef<HTMLDivElement>(null);
@@ -162,23 +206,19 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
162
206
  // Menu Content
163
207
  // - Consumers should pass an array to <Chatbot> of the list of conversations
164
208
  // - Groups could be optional, but items need to be ordered by date
165
- const menuContent = (
166
- <Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId}>
167
- <MenuContent>{buildMenu()}</MenuContent>
168
- </Menu>
169
- );
209
+ const renderMenuContent = () => {
210
+ if (errorState) {
211
+ return <HistoryEmptyState {...errorState} />;
212
+ }
213
+ return (
214
+ <Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId} {...menuProps}>
215
+ <MenuContent>{buildMenu()}</MenuContent>
216
+ </Menu>
217
+ );
218
+ };
170
219
 
171
- const panelContent = (
172
- <DrawerPanelContent focusTrap={{ enabled: true }} minSize="384px" maxSize="384px">
173
- <DrawerHead>
174
- <DrawerActions
175
- data-testid={drawerActionsTestId}
176
- className={reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : ''}
177
- >
178
- <DrawerCloseButton onClick={onDrawerToggle} />
179
- {onNewChat && <Button onClick={onNewChat}>{newChatButtonText}</Button>}
180
- </DrawerActions>
181
- </DrawerHead>
220
+ const renderDrawerContent = () => (
221
+ <>
182
222
  {handleTextInputChange && (
183
223
  <div className="pf-chatbot__input">
184
224
  <SearchInput
@@ -188,10 +228,38 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
188
228
  />
189
229
  </div>
190
230
  )}
191
- <DrawerPanelBody>{menuContent}</DrawerPanelBody>
192
- </DrawerPanelContent>
231
+ <DrawerPanelBody {...drawerPanelBodyProps}>{renderMenuContent()}</DrawerPanelBody>
232
+ </>
193
233
  );
194
234
 
235
+ const renderPanelContent = () => {
236
+ const drawer = (
237
+ <>
238
+ <DrawerHead {...drawerHeadProps}>
239
+ <DrawerActions
240
+ data-testid={drawerActionsTestId}
241
+ className={reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : ''}
242
+ {...drawerActionsProps}
243
+ >
244
+ <DrawerCloseButton onClick={onDrawerToggle} {...drawerCloseButtonProps} />
245
+ {onNewChat && <Button onClick={onNewChat}>{newChatButtonText}</Button>}
246
+ </DrawerActions>
247
+ </DrawerHead>
248
+ {isLoading ? <LoadingState {...loadingState} /> : renderDrawerContent()}
249
+ </>
250
+ );
251
+ return (
252
+ <DrawerPanelContent
253
+ aria-live="polite"
254
+ focusTrap={{ enabled: true }}
255
+ defaultSize="384px"
256
+ {...drawerPanelContentProps}
257
+ >
258
+ {drawer}
259
+ </DrawerPanelContent>
260
+ );
261
+ };
262
+
195
263
  // An onKeyDown property must be passed to the Drawer component to handle closing
196
264
  // the drawer panel and deactivating the focus trap via the Escape key.
197
265
  const onEscape = (event: React.KeyboardEvent) => {
@@ -213,8 +281,8 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
213
281
  isInline={displayMode === ChatbotDisplayMode.fullscreen || displayMode === ChatbotDisplayMode.embedded}
214
282
  {...props}
215
283
  >
216
- <DrawerContent panelContent={panelContent}>
217
- <DrawerContentBody>
284
+ <DrawerContent panelContent={renderPanelContent()} {...drawerContentProps}>
285
+ <DrawerContentBody {...drawerContentBodyProps}>
218
286
  <>
219
287
  <div
220
288
  className={`${isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} `}
@@ -0,0 +1,44 @@
1
+ import {
2
+ Button,
3
+ EmptyState,
4
+ EmptyStateActions,
5
+ EmptyStateBody,
6
+ EmptyStateFooter,
7
+ EmptyStateProps
8
+ } from '@patternfly/react-core';
9
+ import React from 'react';
10
+
11
+ export interface HistoryEmptyStateProps extends EmptyStateProps {
12
+ onClick?: () => void;
13
+ bodyText?: string | React.ReactNode;
14
+ buttonText?: string;
15
+ buttonIcon?: React.ReactNode;
16
+ hasButton?: boolean;
17
+ }
18
+
19
+ export const HistoryEmptyState: React.FunctionComponent<HistoryEmptyStateProps> = ({
20
+ bodyText,
21
+ buttonIcon,
22
+ buttonText,
23
+ status,
24
+ titleText,
25
+ headingLevel,
26
+ onClick,
27
+ hasButton = false,
28
+ ...props
29
+ }: HistoryEmptyStateProps) => (
30
+ <EmptyState status={status} titleText={titleText} headingLevel={headingLevel} {...props}>
31
+ <EmptyStateBody>{bodyText}</EmptyStateBody>
32
+ {hasButton && (
33
+ <EmptyStateFooter>
34
+ <EmptyStateActions>
35
+ <Button icon={buttonIcon} variant="secondary" onClick={onClick}>
36
+ {buttonText}
37
+ </Button>
38
+ </EmptyStateActions>
39
+ </EmptyStateFooter>
40
+ )}
41
+ </EmptyState>
42
+ );
43
+
44
+ export default HistoryEmptyState;
@@ -0,0 +1,38 @@
1
+ import { Skeleton, SkeletonProps } from '@patternfly/react-core';
2
+ import React from 'react';
3
+
4
+ export const LoadingState: React.FunctionComponent<SkeletonProps> = ({ screenreaderText, ...rest }: SkeletonProps) => (
5
+ <div className="pf-chatbot__history-loading">
6
+ <div className="pf-chatbot__history-loading-block">
7
+ <Skeleton
8
+ screenreaderText={screenreaderText ?? 'Loading chatbot conversation history'}
9
+ fontSize="3xl"
10
+ {...rest}
11
+ />
12
+ </div>
13
+ <div className="pf-chatbot__history-loading-block">
14
+ <Skeleton fontSize="sm" width="70%" {...rest} />
15
+ <Skeleton fontSize="3xl" {...rest} />
16
+ <Skeleton fontSize="3xl" {...rest} />
17
+ </div>
18
+ <div className="pf-chatbot__history-loading-block">
19
+ <Skeleton fontSize="sm" width="70%" {...rest} />
20
+ <Skeleton fontSize="3xl" {...rest} />
21
+ <Skeleton fontSize="3xl" {...rest} />
22
+ <Skeleton fontSize="3xl" {...rest} />
23
+ </div>
24
+ <div className="pf-chatbot__history-loading-block">
25
+ <Skeleton fontSize="sm" width="70%" {...rest} />
26
+ <Skeleton fontSize="3xl" {...rest} />
27
+ <Skeleton fontSize="3xl" {...rest} />
28
+ <Skeleton fontSize="3xl" {...rest} />
29
+ <Skeleton fontSize="3xl" {...rest} />
30
+ </div>
31
+ <div className="pf-chatbot__history-loading-block">
32
+ <Skeleton fontSize="sm" width="70%" {...rest} />
33
+ <Skeleton fontSize="3xl" {...rest} />
34
+ </div>
35
+ </div>
36
+ );
37
+
38
+ export default LoadingState;
@@ -44,11 +44,6 @@
44
44
  // Chatbot Display Mode - Docked
45
45
  // ============================================================================
46
46
  .pf-chatbot--docked {
47
- .pf-chatbot__footer {
48
- .pf-v6-c-divider {
49
- display: none;
50
- }
51
- }
52
47
  .pf-chatbot__footer-container {
53
48
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
54
49
  }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotFooter from './ChatbotFooter';
4
+
5
+ describe('ChatbotFooter', () => {
6
+ it('should render ChatbotFooter with children', () => {
7
+ render(<ChatbotFooter>Chatbot Content</ChatbotFooter>);
8
+ expect(screen.getByText('Chatbot Content')).toBeTruthy();
9
+ });
10
+
11
+ it('should render ChatbotFooter with custom classname', () => {
12
+ const { container } = render(<ChatbotFooter className="custom-class">Chatbot Content</ChatbotFooter>);
13
+ expect(container.querySelector('.custom-class')).toBeTruthy();
14
+ });
15
+ });
@@ -0,0 +1,84 @@
1
+ import React from 'react';
2
+ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
3
+ import ChatbotFootnote from './ChatbotFootnote';
4
+
5
+ describe('ChatbotFooternote', () => {
6
+ const onClick = jest.fn();
7
+ const popoverProps = {
8
+ title: 'Verify accuracy',
9
+ description: 'description',
10
+ bannerImage: {
11
+ src: 'src',
12
+ alt: 'alt'
13
+ },
14
+ cta: {
15
+ label: 'Got it',
16
+ onClick
17
+ },
18
+ link: {
19
+ label: 'label',
20
+ url: 'url'
21
+ }
22
+ };
23
+
24
+ it('should render ChatbotFooternote', () => {
25
+ render(<ChatbotFootnote label="Chatbot footer" />);
26
+ expect(screen.getByText('Chatbot footer')).toBeTruthy();
27
+ });
28
+
29
+ it('should render ChatbotFooternote with popover', async () => {
30
+ render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
31
+
32
+ // click on the footer button
33
+ act(() => {
34
+ fireEvent.click(screen.getByRole('button'));
35
+ });
36
+
37
+ await waitFor(() => {
38
+ // Check if the popover is visible and click on the cta button
39
+ screen.getByLabelText('More information');
40
+ screen.getByText('Verify accuracy');
41
+ fireEvent.click(screen.getByRole('button', { name: 'Got it' }));
42
+ expect(onClick).toHaveBeenCalled();
43
+ });
44
+ });
45
+ it('should call onClick handler when popover cta button is clicked', async () => {
46
+ render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
47
+
48
+ // click on the footer button
49
+ act(() => {
50
+ fireEvent.click(screen.getByRole('button'));
51
+ });
52
+
53
+ await waitFor(() => {
54
+ // Check if the popover is visible and click on the cta button
55
+ screen.getByLabelText('More information');
56
+ screen.getByText('Verify accuracy');
57
+ fireEvent.click(screen.getByRole('button', { name: 'Got it' }));
58
+ expect(onClick).toHaveBeenCalled();
59
+ });
60
+ });
61
+ it('should close the popover when escape is pressed', async () => {
62
+ render(<ChatbotFootnote label="Chatbot footer" popover={popoverProps} />);
63
+
64
+ // click on the footer button
65
+ act(() => {
66
+ fireEvent.click(screen.getByRole('button'));
67
+ });
68
+
69
+ await waitFor(() => {
70
+ // Check if the popover is visible and click on the cta button
71
+ screen.getByLabelText('More information');
72
+ screen.getByText('Verify accuracy');
73
+ });
74
+
75
+ act(() => {
76
+ // trigger escape to close the popover
77
+ fireEvent.keyDown(document, { key: 'Escape', code: 'Escape' });
78
+ });
79
+
80
+ await waitFor(() => {
81
+ expect(screen.queryByText('Verify accuracy')).toBeFalsy();
82
+ });
83
+ });
84
+ });
@@ -32,7 +32,7 @@ export interface ChatbotFootnotePopover {
32
32
  bannerImage?: ChatbotFootnotePopoverBannerImage;
33
33
  /** Optional CTA button that can be used to trigger an action and close the popover */
34
34
  cta?: ChatbotFootnotePopoverCTA;
35
- /** Optional link that can be used to show and external link like **Learn More** */
35
+ /** Optional link that can be used to show an external link like **View AI policy** */
36
36
  link?: ChatbotFootnotePopoverLink;
37
37
  /** Props for PF Popover */
38
38
  popoverProps?: PopoverProps;
@@ -87,7 +87,7 @@ export const ChatbotFootnote: React.FunctionComponent<ChatbotFootnoteProps> = ({
87
87
  popover.cta?.onClick();
88
88
  }}
89
89
  >
90
- {popover.cta?.label || 'Got it'}
90
+ {popover.cta?.label || 'Dismiss'}
91
91
  </Button>
92
92
  )}
93
93
  {popover?.link && (
@@ -76,9 +76,6 @@
76
76
  .pf-chatbot__header {
77
77
  background-color: var(--pf-t--chatbot--background);
78
78
  }
79
- .pf-chatbot__header__divider {
80
- display: none;
81
- }
82
79
  }
83
80
 
84
81
  // ============================================================================
@@ -95,7 +92,7 @@
95
92
  .pf-v6-c-button__icon,
96
93
  .pf-v6-c-menu-toggle__icon,
97
94
  .pf-v6-c-icon__content {
98
- color: var(--pf-t--chatbot--icon--fill);
95
+ color: var(--pf-t--global--icon--color--subtle);
99
96
  }
100
97
 
101
98
  .pf-v6-c-button__icon,
@@ -111,7 +108,7 @@
111
108
  .pf-v6-c-button__icon,
112
109
  .pf-v6-c-menu-toggle__icon,
113
110
  .pf-v6-c-icon__content {
114
- color: var(--pf-t--chatbot--icon--fill--hover);
111
+ color: var(--pf-t--global--icon--color--regular);
115
112
  }
116
113
  }
117
114
  }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotHeader from './ChatbotHeader';
4
+
5
+ describe('ChatbotHeader', () => {
6
+ it('should render ChatbotHeader with children', () => {
7
+ render(<ChatbotHeader>Chatbot Header</ChatbotHeader>);
8
+ expect(screen.getByText('Chatbot Header')).toBeTruthy();
9
+ });
10
+
11
+ it('should render ChatbotHeader with custom classname', () => {
12
+ const { container } = render(<ChatbotHeader className="custom-header-class">Chatbot Content</ChatbotHeader>);
13
+ expect(container.querySelector('.custom-header-class')).toBeTruthy();
14
+ });
15
+ });
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotHeaderActions from './ChatbotHeaderActions';
4
+
5
+ describe('ChatbotHeaderActions', () => {
6
+ it('should render ChatbotHeaderActions with children', () => {
7
+ render(<ChatbotHeaderActions>Chatbot Header</ChatbotHeaderActions>);
8
+ expect(screen.getByText('Chatbot Header')).toBeTruthy();
9
+ });
10
+
11
+ it('should render ChatbotHeaderActions with custom classname', () => {
12
+ const { container } = render(
13
+ <ChatbotHeaderActions className="custom-header-action-class">Chatbot Content</ChatbotHeaderActions>
14
+ );
15
+ expect(container.querySelector('.custom-header-action-class')).toBeTruthy();
16
+ });
17
+ });
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { ChatbotHeaderCloseButton } from './ChatbotHeaderCloseButton';
4
+
5
+ describe('ChatbotHeaderCloseButton', () => {
6
+ it('should render ChatbotHeaderCloseButton', () => {
7
+ const { container } = render(
8
+ <ChatbotHeaderCloseButton className="custom-header-close-button" onClick={jest.fn()} />
9
+ );
10
+
11
+ expect(container.querySelector('.custom-header-close-button')).toBeTruthy();
12
+ });
13
+
14
+ it('should call onClick handler when close button is pressed', () => {
15
+ const onClick = jest.fn();
16
+ render(<ChatbotHeaderCloseButton className="custom-header-close-button" onClick={onClick} />);
17
+ fireEvent.click(screen.getByRole('button', { name: 'Close' }));
18
+ expect(onClick).toHaveBeenCalled();
19
+ });
20
+ });
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+
3
+ import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
4
+ import { CloseIcon } from '@patternfly/react-icons';
5
+
6
+ export interface ChatbotHeaderCloseButtonProps {
7
+ /** Callback function for when button is clicked */
8
+ onClick: () => void;
9
+ /** Custom classname for the header component */
10
+ className?: string;
11
+ /** Props spread to the PF Tooltip component wrapping the display mode dropdown */
12
+ tooltipProps?: TooltipProps;
13
+ /** Aria label for menu */
14
+ menuAriaLabel?: string;
15
+ /** Ref applied to menu */
16
+ innerRef?: React.Ref<HTMLButtonElement>;
17
+ /** Content used in tooltip */
18
+ tooltipContent?: string;
19
+ }
20
+
21
+ const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseButtonProps> = ({
22
+ className,
23
+ onClick,
24
+ tooltipProps,
25
+ menuAriaLabel = 'Close',
26
+ innerRef,
27
+ tooltipContent = 'Close'
28
+ }: ChatbotHeaderCloseButtonProps) => (
29
+ <div className={`pf-chatbot__menu ${className}`}>
30
+ <Tooltip
31
+ content={tooltipContent}
32
+ position="bottom"
33
+ // prevents VO announcements of both aria label and tooltip
34
+ aria="none"
35
+ {...tooltipProps}
36
+ >
37
+ <Button
38
+ className="pf-chatbot__button--toggle-menu"
39
+ variant="plain"
40
+ onClick={onClick}
41
+ aria-label={menuAriaLabel}
42
+ ref={innerRef}
43
+ icon={
44
+ <Icon size="xl" isInline>
45
+ <CloseIcon />
46
+ </Icon>
47
+ }
48
+ />
49
+ </Tooltip>
50
+ </div>
51
+ );
52
+
53
+ export const ChatbotHeaderCloseButton = React.forwardRef(
54
+ (props: ChatbotHeaderCloseButtonProps, ref: React.Ref<HTMLButtonElement>) => (
55
+ <ChatbotHeaderCloseButtonBase innerRef={ref} {...props} />
56
+ )
57
+ );
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ChatbotHeaderMain from './ChatbotHeaderMain';
4
+
5
+ describe('ChatbotHeaderMain', () => {
6
+ it('should render ChatbotHeaderMain with children', () => {
7
+ render(<ChatbotHeaderMain>Chatbot Header Main</ChatbotHeaderMain>);
8
+ expect(screen.getByText('Chatbot Header Main')).toBeTruthy();
9
+ });
10
+
11
+ it('should render ChatbotHeaderMain with custom classname', () => {
12
+ const { container } = render(
13
+ <ChatbotHeaderMain className="custom-header-class">Chatbot Content</ChatbotHeaderMain>
14
+ );
15
+ expect(container.querySelector('.custom-header-class')).toBeTruthy();
16
+ });
17
+ });
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { fireEvent, render, screen } from '@testing-library/react';
3
+ import { ChatbotHeaderMenu } from './ChatbotHeaderMenu';
4
+
5
+ describe('ChatbotHeaderMenu', () => {
6
+ it('should render ChatbotHeaderMenu with custom class', () => {
7
+ const { container } = render(<ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={jest.fn()} />);
8
+
9
+ expect(container.querySelector('.custom-header-menu')).toBeTruthy();
10
+ });
11
+
12
+ it('should call onMenuToggle when ChatbotHeaderMenu button is clicked', () => {
13
+ const onMenuToggle = jest.fn();
14
+ render(<ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={onMenuToggle} />);
15
+ fireEvent.click(screen.getByRole('button', { name: 'Toggle menu' }));
16
+
17
+ expect(onMenuToggle).toHaveBeenCalled();
18
+ });
19
+ });
@@ -14,6 +14,8 @@ export interface ChatbotHeaderMenuProps {
14
14
  menuAriaLabel?: string;
15
15
  /** Ref applied to menu */
16
16
  innerRef?: React.Ref<HTMLButtonElement>;
17
+ /** Content used in tooltip */
18
+ tooltipContent?: string;
17
19
  }
18
20
 
19
21
  const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = ({
@@ -21,10 +23,17 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
21
23
  onMenuToggle,
22
24
  tooltipProps,
23
25
  menuAriaLabel = 'Toggle menu',
24
- innerRef
26
+ innerRef,
27
+ tooltipContent = 'Menu'
25
28
  }: ChatbotHeaderMenuProps) => (
26
29
  <div className={`pf-chatbot__menu ${className}`}>
27
- <Tooltip content="Menu" position="bottom" {...tooltipProps}>
30
+ <Tooltip
31
+ content={tooltipContent}
32
+ position="bottom"
33
+ // prevents VO announcements of both aria label and tooltip
34
+ aria="none"
35
+ {...tooltipProps}
36
+ >
28
37
  <Button
29
38
  className="pf-chatbot__button--toggle-menu"
30
39
  variant="plain"
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import { DropdownItem } from '@patternfly/react-core';
3
+ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
4
+ import { ChatbotHeaderOptionsDropdown } from './ChatbotHeaderOptionsDropdown';
5
+
6
+ describe('ChatbotHeaderOptionsDropdown', () => {
7
+ const dropdownItems = (
8
+ <>
9
+ <DropdownItem>Option 1</DropdownItem>
10
+ <DropdownItem>Option 2</DropdownItem>
11
+ <DropdownItem>Option 3</DropdownItem>
12
+ </>
13
+ );
14
+
15
+ it('should render ChatbotHeaderOptionsDropdown', () => {
16
+ render(<ChatbotHeaderOptionsDropdown>{dropdownItems}</ChatbotHeaderOptionsDropdown>);
17
+
18
+ expect(screen.getByRole('button', { name: 'Chatbot options' })).toBeTruthy();
19
+ });
20
+
21
+ it('should call onselect handler when a dropdown item is clicked', async () => {
22
+ const onSelect = jest.fn();
23
+ const { container } = render(
24
+ <ChatbotHeaderOptionsDropdown className="custom-header-options-dropdown" onSelect={onSelect}>
25
+ {dropdownItems}
26
+ </ChatbotHeaderOptionsDropdown>
27
+ );
28
+
29
+ act(() => {
30
+ fireEvent.click(screen.getByRole('button', { name: 'Chatbot options' }));
31
+ });
32
+
33
+ await waitFor(() => {
34
+ expect(container.querySelector('.custom-header-options-dropdown')).toBeTruthy();
35
+
36
+ expect(screen.getByText('Option 1'));
37
+ expect(screen.getByText('Option 2'));
38
+ expect(screen.getByText('Option 3'));
39
+
40
+ fireEvent.click(screen.getByText('Option 3'));
41
+
42
+ expect(onSelect).toHaveBeenCalled();
43
+ });
44
+ });
45
+ });
@@ -33,7 +33,14 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
33
33
  const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
34
34
 
35
35
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
36
- <Tooltip className="pf-chatbot__tooltip" content="Chatbot options" position="bottom" {...tooltipProps}>
36
+ <Tooltip
37
+ className="pf-chatbot__tooltip"
38
+ content="Chatbot options"
39
+ position="bottom"
40
+ // prevents VO announcements of both aria label and tooltip
41
+ aria="none"
42
+ {...tooltipProps}
43
+ >
37
44
  <MenuToggle
38
45
  className="pf-chatbot__button--toggle-options"
39
46
  variant="plain"