@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
@@ -2,17 +2,16 @@
2
2
  // Chatbot Main - Message
3
3
  // ============================================================================
4
4
 
5
- import React from 'react';
5
+ import React, { ReactNode } from 'react';
6
6
 
7
7
  import Markdown from 'react-markdown';
8
8
  import remarkGfm from 'remark-gfm';
9
9
  import {
10
10
  Avatar,
11
11
  AvatarProps,
12
+ ContentVariants,
12
13
  Label,
13
- LabelGroup,
14
14
  LabelGroupProps,
15
- LabelProps,
16
15
  Timestamp,
17
16
  Truncate
18
17
  } from '@patternfly/react-core';
@@ -25,12 +24,25 @@ import SourcesCard, { SourcesCardProps } from '../SourcesCard';
25
24
  import ListItemMessage from './ListMessage/ListItemMessage';
26
25
  import UnorderedListMessage from './ListMessage/UnorderedListMessage';
27
26
  import OrderedListMessage from './ListMessage/OrderedListMessage';
27
+ import QuickStartTile from './QuickStarts/QuickStartTile';
28
+ import { QuickStart, QuickstartAction } from './QuickStarts/types';
29
+ import QuickResponse from './QuickResponse/QuickResponse';
30
+ import UserFeedback, { UserFeedbackProps } from './UserFeedback/UserFeedback';
31
+ import UserFeedbackComplete, { UserFeedbackCompleteProps } from './UserFeedback/UserFeedbackComplete';
32
+ import TableMessage from './TableMessage/TableMessage';
33
+ import TrMessage from './TableMessage/TrMessage';
34
+ import TdMessage from './TableMessage/TdMessage';
35
+ import TbodyMessage from './TableMessage/TbodyMessage';
36
+ import TheadMessage from './TableMessage/TheadMessage';
37
+ import ThMessage from './TableMessage/ThMessage';
38
+ import { TableProps } from '@patternfly/react-table';
39
+ import ImageMessage from './ImageMessage/ImageMessage';
40
+ import rehypeUnwrapImages from 'rehype-unwrap-images';
41
+ import rehypeExternalLinks from 'rehype-external-links';
42
+ import rehypeSanitize from 'rehype-sanitize';
43
+ import { PluggableList } from 'react-markdown/lib';
44
+ import LinkMessage from './LinkMessage/LinkMessage';
28
45
 
29
- export interface QuickResponse extends Omit<LabelProps, 'children'> {
30
- content: string;
31
- id: string;
32
- onClick: () => void;
33
- }
34
46
  export interface MessageAttachment {
35
47
  /** Name of file attached to the message */
36
48
  name: string;
@@ -50,6 +62,17 @@ export interface MessageAttachment {
50
62
  spinnerTestId?: string;
51
63
  }
52
64
 
65
+ export interface MessageExtraContent {
66
+ /** Content to display before the main content */
67
+ beforeMainContent?: ReactNode;
68
+
69
+ /** Content to display after the main content */
70
+ afterMainContent?: ReactNode;
71
+
72
+ /** Content to display at the end */
73
+ endContent?: ReactNode;
74
+ }
75
+
53
76
  export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'role'> {
54
77
  /** Unique id for message */
55
78
  id?: string;
@@ -57,6 +80,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
57
80
  role: 'user' | 'bot';
58
81
  /** Message content */
59
82
  content?: string;
83
+ /** Extra Message content */
84
+ extraContent?: MessageExtraContent;
60
85
  /** Name of the user */
61
86
  name?: string;
62
87
  /** Avatar src for the user */
@@ -85,15 +110,43 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
85
110
  quickResponses?: QuickResponse[];
86
111
  /** Props for quick responses container */
87
112
  quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
113
+ /** Props for user feedback card */
114
+ userFeedbackForm?: Omit<UserFeedbackProps, 'ref'>;
115
+ /** Props for user feedback response */
116
+ userFeedbackComplete?: Omit<UserFeedbackCompleteProps, 'ref'>;
88
117
  /** Whether avatar is round */
89
118
  hasRoundAvatar?: boolean;
90
119
  /** Any additional props applied to the avatar, for additional customization */
91
120
  avatarProps?: Omit<AvatarProps, 'alt'>;
121
+ /** Props for QuickStart card */
122
+ quickStarts?: {
123
+ quickStart: QuickStart;
124
+ onSelectQuickStart: (id?: string) => void;
125
+ minuteWord?: string;
126
+ minuteWordPlural?: string;
127
+ prerequisiteWord?: string;
128
+ prerequisiteWordPlural?: string;
129
+ quickStartButtonAriaLabel?: string;
130
+ className?: string;
131
+ onClick?: () => void;
132
+ action?: QuickstartAction;
133
+ };
134
+ /** Turns the container into a live region so that changes to content within the Message, such as appending a feedback card, are reliably announced to assistive technology. */
135
+ isLiveRegion?: boolean;
136
+ /** Ref applied to message */
137
+ innerRef?: React.Ref<HTMLDivElement>;
138
+ /** Props for table message. It is important to include a detailed aria-label that describes the purpose of the table. */
139
+ tableProps?: Required<Pick<TableProps, 'aria-label'>> & TableProps;
140
+ /** Additional rehype plugins passed from the consumer */
141
+ additionalRehypePlugins?: PluggableList;
142
+ /** Whether to open links in message in new tab. */
143
+ openLinkInNewTab?: boolean;
92
144
  }
93
145
 
94
- export const Message: React.FunctionComponent<MessageProps> = ({
146
+ export const MessageBase: React.FunctionComponent<MessageProps> = ({
95
147
  role,
96
148
  content,
149
+ extraContent,
97
150
  name,
98
151
  avatar,
99
152
  timestamp,
@@ -108,8 +161,24 @@ export const Message: React.FunctionComponent<MessageProps> = ({
108
161
  attachments,
109
162
  hasRoundAvatar = true,
110
163
  avatarProps,
164
+ quickStarts,
165
+ userFeedbackForm,
166
+ userFeedbackComplete,
167
+ isLiveRegion = true,
168
+ innerRef,
169
+ tableProps,
170
+ openLinkInNewTab = true,
171
+ additionalRehypePlugins = [],
111
172
  ...props
112
173
  }: MessageProps) => {
174
+ const { beforeMainContent, afterMainContent, endContent } = extraContent || {};
175
+ let rehypePlugins: PluggableList = [rehypeUnwrapImages];
176
+ if (openLinkInNewTab) {
177
+ rehypePlugins = rehypePlugins.concat([[rehypeExternalLinks, { target: '_blank' }, rehypeSanitize]]);
178
+ }
179
+ if (additionalRehypePlugins) {
180
+ rehypePlugins.push(...additionalRehypePlugins);
181
+ }
113
182
  let avatarClassName;
114
183
  if (avatarProps && 'className' in avatarProps) {
115
184
  const { className, ...rest } = avatarProps;
@@ -123,6 +192,9 @@ export const Message: React.FunctionComponent<MessageProps> = ({
123
192
  <section
124
193
  aria-label={`Message from ${role} - ${dateString}`}
125
194
  className={`pf-chatbot__message pf-chatbot__message--${role}`}
195
+ aria-live={isLiveRegion ? 'polite' : undefined}
196
+ aria-atomic={isLiveRegion ? false : undefined}
197
+ ref={innerRef}
126
198
  {...props}
127
199
  >
128
200
  {/* We are using an empty alt tag intentionally in order to reduce noise on screen readers */}
@@ -151,32 +223,72 @@ export const Message: React.FunctionComponent<MessageProps> = ({
151
223
  {isLoading ? (
152
224
  <MessageLoading loadingWord={loadingWord} />
153
225
  ) : (
154
- <Markdown
155
- components={{
156
- p: TextMessage,
157
- code: ({ children }) => <CodeBlockMessage {...codeBlockProps}>{children}</CodeBlockMessage>,
158
- ul: UnorderedListMessage,
159
- ol: OrderedListMessage,
160
- li: ListItemMessage
161
- }}
162
- remarkPlugins={[remarkGfm]}
163
- >
164
- {content}
165
- </Markdown>
226
+ <>
227
+ {beforeMainContent && <>{beforeMainContent}</>}
228
+ <Markdown
229
+ components={{
230
+ p: (props) => <TextMessage component={ContentVariants.p} {...props} />,
231
+ code: ({ children, ...props }) => (
232
+ <CodeBlockMessage {...props} {...codeBlockProps}>
233
+ {children}
234
+ </CodeBlockMessage>
235
+ ),
236
+ h1: (props) => <TextMessage component={ContentVariants.h1} {...props} />,
237
+ h2: (props) => <TextMessage component={ContentVariants.h2} {...props} />,
238
+ h3: (props) => <TextMessage component={ContentVariants.h3} {...props} />,
239
+ h4: (props) => <TextMessage component={ContentVariants.h4} {...props} />,
240
+ h5: (props) => <TextMessage component={ContentVariants.h5} {...props} />,
241
+ h6: (props) => <TextMessage component={ContentVariants.h6} {...props} />,
242
+ blockquote: (props) => <TextMessage component={ContentVariants.blockquote} {...props} />,
243
+ ul: (props) => <UnorderedListMessage {...props} />,
244
+ ol: (props) => <OrderedListMessage {...props} />,
245
+ li: (props) => <ListItemMessage {...props} />,
246
+ table: (props) => <TableMessage {...props} {...tableProps} />,
247
+ tbody: (props) => <TbodyMessage {...props} />,
248
+ thead: (props) => <TheadMessage {...props} />,
249
+ tr: (props) => <TrMessage {...props} />,
250
+ td: (props) => {
251
+ // Conflicts with Td type
252
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
253
+ const { width, ...rest } = props;
254
+ return <TdMessage {...rest} />;
255
+ },
256
+ th: (props) => <ThMessage {...props} />,
257
+ img: (props) => <ImageMessage {...props} />,
258
+ a: (props) => (
259
+ <LinkMessage href={props.href} rel={props.rel} target={props.target}>
260
+ {props.children}
261
+ </LinkMessage>
262
+ )
263
+ }}
264
+ remarkPlugins={[remarkGfm]}
265
+ rehypePlugins={rehypePlugins}
266
+ >
267
+ {content}
268
+ </Markdown>
269
+ {afterMainContent && <>{afterMainContent}</>}
270
+ </>
166
271
  )}
167
272
  {!isLoading && sources && <SourcesCard {...sources} />}
273
+ {quickStarts && quickStarts.quickStart && (
274
+ <QuickStartTile
275
+ quickStart={quickStarts.quickStart}
276
+ onSelectQuickStart={quickStarts.onSelectQuickStart}
277
+ minuteWord={quickStarts.minuteWord}
278
+ minuteWordPlural={quickStarts.minuteWordPlural}
279
+ prerequisiteWord={quickStarts.prerequisiteWord}
280
+ prerequisiteWordPlural={quickStarts.prerequisiteWordPlural}
281
+ quickStartButtonAriaLabel={quickStarts.quickStartButtonAriaLabel}
282
+ />
283
+ )}
168
284
  {!isLoading && actions && <ResponseActions actions={actions} />}
285
+ {userFeedbackForm && <UserFeedback {...userFeedbackForm} timestamp={dateString} />}
286
+ {userFeedbackComplete && <UserFeedbackComplete {...userFeedbackComplete} timestamp={dateString} />}
169
287
  {!isLoading && quickResponses && (
170
- <LabelGroup
171
- className={`pf-chatbot__message-quick-response ${quickResponseContainerProps?.className}`}
172
- {...quickResponseContainerProps}
173
- >
174
- {quickResponses.map(({ id, onClick, content, ...props }: QuickResponse) => (
175
- <Label variant="outline" color="blue" key={id} onClick={onClick} {...props}>
176
- {content}
177
- </Label>
178
- ))}
179
- </LabelGroup>
288
+ <QuickResponse
289
+ quickResponses={quickResponses}
290
+ quickResponseContainerProps={quickResponseContainerProps}
291
+ />
180
292
  )}
181
293
  </div>
182
294
  {attachments && (
@@ -197,10 +309,15 @@ export const Message: React.FunctionComponent<MessageProps> = ({
197
309
  ))}
198
310
  </div>
199
311
  )}
312
+ {!isLoading && endContent && <>{endContent}</>}
200
313
  </div>
201
314
  </div>
202
315
  </section>
203
316
  );
204
317
  };
205
318
 
319
+ const Message = React.forwardRef((props: MessageProps, ref: React.Ref<HTMLDivElement>) => (
320
+ <MessageBase innerRef={ref} {...props} />
321
+ ));
322
+
206
323
  export default Message;
@@ -3,9 +3,9 @@
3
3
  // ============================================================================
4
4
  .pf-chatbot__message-loading {
5
5
  width: 36px;
6
- padding: var(--pf-t--chatbot-message--type--padding);
6
+ padding: var(--pf-t--global--spacer--sm);
7
7
  background-color: var(--pf-t--global--background--color--tertiary--default);
8
- border-radius: var(--pf-t--chatbot-message--type--border--radius);
8
+ border-radius: var(--pf-t--global--border--radius--small);
9
9
 
10
10
  &-dots {
11
11
  position: relative;
@@ -0,0 +1,33 @@
1
+ .pf-chatbot__message-quick-response {
2
+ .pf-v6-c-label {
3
+ --pf-v6-c-label--FontSize: var(--pf-t--global--font--size--md);
4
+
5
+ @media screen and (min-width: 401px) and (max-width: 600px) {
6
+ --pf-v6-c-label__text--MaxWidth: 20ch;
7
+ }
8
+
9
+ @media screen and (max-width: 400px) {
10
+ --pf-v6-c-label__text--MaxWidth: 15ch;
11
+ }
12
+ }
13
+
14
+ .pf-chatbot__message-quick-response--selected {
15
+ .pf-v6-c-label__content:is(:hover, :focus) {
16
+ --pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
17
+ --pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
18
+ }
19
+ }
20
+
21
+ .pf-chatbot__message-quick-response--selected:hover,
22
+ .pf-chatbot__message-quick-response--selected:focus {
23
+ --pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
24
+ --pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
25
+ }
26
+
27
+ // active state right before selection
28
+ .pf-v6-c-label.pf-m-blue.pf-m-clickable .pf-v6-c-label__content:is(:active) {
29
+ --pf-v6-c-label--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
30
+ --pf-v6-c-label--m-clickable--hover--BackgroundColor: var(--pf-v6-c-label--m-blue--BackgroundColor);
31
+ --pf-v6-c-label--m-clickable--hover--BorderWidth: 0;
32
+ }
33
+ }
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { Label, LabelGroup, LabelGroupProps, LabelProps } from '@patternfly/react-core';
3
+ import { CheckIcon } from '@patternfly/react-icons';
4
+
5
+ export interface QuickResponse extends Omit<LabelProps, 'children'> {
6
+ content: string;
7
+ id: string;
8
+ onClick?: () => void;
9
+ }
10
+
11
+ export interface QuickResponseProps {
12
+ /** Props for quick responses */
13
+ quickResponses: QuickResponse[];
14
+ /** Props for quick responses container */
15
+ quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
16
+ /** Callback when a response is clicked; used in feedback cards */
17
+ onSelect?: (id: string) => void;
18
+ }
19
+
20
+ export const QuickResponse: React.FunctionComponent<QuickResponseProps> = ({
21
+ quickResponses,
22
+ quickResponseContainerProps = { numLabels: 5 },
23
+ onSelect
24
+ }: QuickResponseProps) => {
25
+ const [selectedQuickResponse, setSelectedQuickResponse] = React.useState<string>();
26
+
27
+ const handleQuickResponseClick = (id: string, onClick?: () => void) => {
28
+ setSelectedQuickResponse(id);
29
+ onClick && onClick();
30
+ onSelect && onSelect(id);
31
+ };
32
+ return (
33
+ <LabelGroup
34
+ className={`pf-chatbot__message-quick-response ${quickResponseContainerProps?.className}`}
35
+ {...quickResponseContainerProps}
36
+ >
37
+ {quickResponses.map(({ id, onClick, content, className, ...props }: QuickResponse) => (
38
+ <Label
39
+ variant={id === selectedQuickResponse ? undefined : 'outline'}
40
+ icon={id === selectedQuickResponse ? <CheckIcon /> : undefined}
41
+ color="blue"
42
+ key={id}
43
+ onClick={() => handleQuickResponseClick(id, onClick)}
44
+ className={`${id === selectedQuickResponse ? 'pf-chatbot__message-quick-response--selected' : ''} ${className ? className : ''}`}
45
+ {...props}
46
+ >
47
+ {content}
48
+ </Label>
49
+ ))}
50
+ </LabelGroup>
51
+ );
52
+ };
53
+
54
+ export default QuickResponse;
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+
3
+ interface FallbackImgProps {
4
+ /** Image source */
5
+ src: string;
6
+ /** Alt text for image */
7
+ alt?: string;
8
+ /** ClassName applied to image */
9
+ className?: string;
10
+ /** Fallback */
11
+ fallback?: React.ReactNode;
12
+ }
13
+
14
+ const FallbackImg: React.FC<FallbackImgProps> = ({ src, alt, className, fallback }) => {
15
+ const [isSrcValid, setIsSrcValid] = React.useState<boolean>(true);
16
+
17
+ if (src && isSrcValid) {
18
+ return <img className={className} src={src} alt={alt} onError={() => setIsSrcValid(false)} />;
19
+ }
20
+
21
+ return <>{fallback}</>;
22
+ };
23
+
24
+ export default FallbackImg;
@@ -0,0 +1,24 @@
1
+ .pf-chatbot__quickstarts-tile {
2
+ max-width: 650px;
3
+ width: 100%;
4
+
5
+ @media screen and (max-width: 700px) {
6
+ max-width: 100%;
7
+ min-width: initial;
8
+ }
9
+ // some icons provided to catalog tiles might have no defined height/width. Without this style, in those cases
10
+ // the icons would have a height and width of 0.
11
+ .pf-v6-c-card__header-main {
12
+ .pf-v6-c-icon__content {
13
+ display: contents;
14
+ }
15
+ }
16
+ }
17
+
18
+ .pf-v6-theme-dark {
19
+ .pf-chatbot__quickstarts-tile {
20
+ .pfext-catalog-item-icon__img {
21
+ filter: brightness(1.5) invert(1) hue-rotate(180deg) saturate(4);
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,147 @@
1
+ import * as React from 'react';
2
+ import RocketIcon from '@patternfly/react-icons/dist/js/icons/rocket-icon';
3
+ import OutlinedBookmarkIcon from '@patternfly/react-icons/dist/js/icons/outlined-bookmark-icon';
4
+ import {
5
+ Card,
6
+ CardBody,
7
+ CardHeader,
8
+ CardFooter,
9
+ CardTitle,
10
+ Icon,
11
+ Button,
12
+ Flex,
13
+ Stack,
14
+ Label,
15
+ pluralize
16
+ } from '@patternfly/react-core';
17
+ import OutlinedClockIcon from '@patternfly/react-icons/dist/js/icons/outlined-clock-icon';
18
+ import QuickStartTileHeader from './QuickStartTileHeader';
19
+ import QuickStartTileDescription from './QuickStartTileDescription';
20
+ import { QuickStart, QuickstartAction } from './types';
21
+ import FallbackImg from './FallbackImg';
22
+
23
+ export const camelize = (str: string) =>
24
+ str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) {
25
+ if (+match === 0) {
26
+ return '';
27
+ } // or if (/\s+/.test(match)) for white spaces
28
+ return index === 0 ? match.toLowerCase() : match.toUpperCase();
29
+ });
30
+
31
+ export interface QuickStartTileProps {
32
+ /** ClassName applied to the card */
33
+ className?: string;
34
+ /** The quickstart object triggered by this tile */
35
+ quickStart: QuickStart;
36
+ /** Event handler attached to the tile */
37
+ onClick?: () => void;
38
+ /** Action config for button rendered next to title */
39
+ action?: QuickstartAction;
40
+ /** Callback that returns active quick start value when clicked */
41
+ onSelectQuickStart: (id?: string) => void;
42
+ /** Label for the English word "minute". */
43
+ minuteWord?: string;
44
+ /** Label for the English word "minutes". */
45
+ minuteWordPlural?: string;
46
+ /** Label for the English word "Prerequisite" */
47
+ prerequisiteWord?: string;
48
+ /** Label for the English word "Prerequisites" */
49
+ prerequisiteWordPlural?: string;
50
+ /** Aria-label for the quick start description button */
51
+ quickStartButtonAriaLabel?: string;
52
+ }
53
+
54
+ const QuickStartTile: React.FC<QuickStartTileProps> = ({
55
+ className,
56
+ quickStart,
57
+ onClick,
58
+ onSelectQuickStart,
59
+ minuteWord = 'minute',
60
+ minuteWordPlural = 'minutes',
61
+ prerequisiteWord,
62
+ prerequisiteWordPlural,
63
+ quickStartButtonAriaLabel,
64
+ action
65
+ }) => {
66
+ const {
67
+ metadata: { name: id },
68
+ spec: { icon, displayName, description, durationMinutes, prerequisites, link, type }
69
+ } = quickStart;
70
+
71
+ let quickStartIcon: React.ReactNode;
72
+ if (typeof icon === 'object') {
73
+ quickStartIcon = <Icon size="2xl">{icon}</Icon>;
74
+ } else {
75
+ quickStartIcon = (
76
+ <Icon size="2xl">
77
+ <FallbackImg src={icon as string} alt="" className="pfext-catalog-item-icon__img" fallback={<RocketIcon />} />
78
+ </Icon>
79
+ );
80
+ }
81
+
82
+ const onSelect = () => {
83
+ if (!link) {
84
+ onSelectQuickStart(id);
85
+ } else {
86
+ window.open(link.href, '_blank', 'noopener,noreferrer');
87
+ }
88
+ onClick && onClick();
89
+ };
90
+
91
+ const ActionIcon = action?.icon || OutlinedBookmarkIcon;
92
+ const additionalAction = action ? (
93
+ <Button
94
+ aria-label={action['aria-label']}
95
+ icon={<ActionIcon />}
96
+ variant="plain"
97
+ onClick={action.onClick}
98
+ {...action.buttonProps}
99
+ />
100
+ ) : undefined;
101
+
102
+ return (
103
+ <Card
104
+ className={`pf-chatbot__quickstarts-tile ${className ? className : ''}`}
105
+ id={`${id}-chatbot-qs-tile`}
106
+ style={{ height: '100%' }}
107
+ data-testid={`chatbot-qs-card-${camelize(displayName)}`}
108
+ >
109
+ <CardHeader
110
+ {...(action && {
111
+ actions: { actions: additionalAction }
112
+ })}
113
+ >
114
+ {quickStartIcon}
115
+ </CardHeader>
116
+ <CardTitle>
117
+ <QuickStartTileHeader name={displayName} onSelect={onSelect} quickStartId={id} />
118
+ </CardTitle>
119
+ <CardBody>
120
+ <Stack hasGutter>
121
+ <Flex spaceItems={{ default: 'spaceItemsSm' }}>
122
+ {type && <Label color={type.color}>{type.text}</Label>}
123
+ {durationMinutes && (
124
+ <Label variant="outline" data-test="duration" icon={<OutlinedClockIcon />}>
125
+ {pluralize(durationMinutes, minuteWord, minuteWordPlural)}
126
+ </Label>
127
+ )}
128
+ </Flex>
129
+ <QuickStartTileDescription
130
+ description={description}
131
+ prerequisites={prerequisites}
132
+ prerequisiteWord={prerequisiteWord}
133
+ prerequisiteWordPlural={prerequisiteWordPlural}
134
+ quickStartButtonAriaLabel={quickStartButtonAriaLabel}
135
+ />
136
+ </Stack>
137
+ </CardBody>
138
+ <CardFooter>
139
+ <Button variant="link" isInline onClick={onSelect}>
140
+ <span className="pf-v6-c-button__text">Start</span>
141
+ </Button>
142
+ </CardFooter>
143
+ </Card>
144
+ );
145
+ };
146
+
147
+ export default QuickStartTile;
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import userEvent from '@testing-library/user-event';
5
+ import { monitorSampleAppQuickStart } from './monitor-sampleapp-quickstart';
6
+ import QuickStartTileDescription, { pluralizeWord } from './QuickStartTileDescription';
7
+
8
+ describe('pluralizeWord function', () => {
9
+ it('should render no plural correctly', () => {
10
+ expect(pluralizeWord(2, 'pizza')).toBe('pizzas');
11
+ });
12
+ });
13
+
14
+ describe('QuickStart tile description', () => {
15
+ it('should render no prereqs correctly', () => {
16
+ render(<QuickStartTileDescription description={monitorSampleAppQuickStart.spec.description} />);
17
+ expect(screen.queryByRole('heading')).toBeFalsy();
18
+ });
19
+ it('should render singular prereq correctly', () => {
20
+ render(
21
+ <QuickStartTileDescription
22
+ description={monitorSampleAppQuickStart.spec.description}
23
+ prerequisites={[`You completed the "Getting started with a sample" quick start.`]}
24
+ />
25
+ );
26
+ expect(screen.getByRole('heading', { name: /1 Prerequisite/i })).toBeTruthy();
27
+ expect(screen.getByRole('button', { name: /Show prerequisite/i })).toBeTruthy();
28
+ });
29
+ it('should render plural prereq correctly', () => {
30
+ render(
31
+ <QuickStartTileDescription
32
+ description={monitorSampleAppQuickStart.spec.description}
33
+ prerequisites={[
34
+ `You completed the "Getting started with a sample" quick start.`,
35
+ `You completed the app quick start`
36
+ ]}
37
+ />
38
+ );
39
+ expect(screen.getByRole('heading', { name: /2 Prerequisites/i })).toBeTruthy();
40
+ expect(screen.getByRole('button', { name: /Show prerequisites/i })).toBeTruthy();
41
+ });
42
+ it('should be able to click prereqs link', async () => {
43
+ render(
44
+ <QuickStartTileDescription
45
+ description={monitorSampleAppQuickStart.spec.description}
46
+ prerequisites={[`You completed the "Getting started with a sample" quick start.`]}
47
+ />
48
+ );
49
+ const button = screen.getByRole('button', { name: /Show prerequisites/i });
50
+ expect(screen.queryByRole('dialog', { name: /Prerequisite/i })).toBeFalsy();
51
+ await userEvent.click(button);
52
+
53
+ expect(screen.getByRole('dialog', { name: /Prerequisite/i })).toBeTruthy();
54
+ expect(screen.getByRole('button', { name: /Close/i })).toBeTruthy();
55
+ expect(screen.getByText(/You completed the "Getting started with a sample" quick start./i)).toBeTruthy();
56
+ });
57
+ });