@patternfly/chatbot 2.2.0-prerelease.2 → 2.2.0-prerelease.21

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 (401) 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.js +3 -1
  10. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
  11. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
  12. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  13. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  14. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
  15. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  16. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
  17. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  18. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
  19. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  20. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
  21. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  22. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +16 -0
  23. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  24. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
  25. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
  31. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  32. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  33. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
  34. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -1
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +47 -0
  39. package/dist/cjs/ChatbotHeader/index.d.ts +1 -0
  40. package/dist/cjs/ChatbotHeader/index.js +1 -0
  41. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
  42. package/dist/cjs/CodeModal/CodeModal.js +2 -12
  43. package/dist/cjs/Compare/Compare.d.ts +17 -0
  44. package/dist/cjs/Compare/Compare.js +50 -0
  45. package/dist/cjs/Compare/Compare.test.d.ts +1 -0
  46. package/dist/cjs/Compare/Compare.test.js +20 -0
  47. package/dist/cjs/Compare/index.d.ts +2 -0
  48. package/dist/cjs/Compare/index.js +23 -0
  49. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  50. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
  51. package/dist/cjs/Message/Message.d.ts +31 -7
  52. package/dist/cjs/Message/Message.js +47 -15
  53. package/dist/cjs/Message/Message.test.js +183 -3
  54. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
  55. package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -0
  56. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +13 -0
  57. package/dist/cjs/Message/QuickStarts/FallbackImg.js +34 -0
  58. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  59. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +82 -0
  60. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  61. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +64 -0
  62. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  63. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +76 -0
  64. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  65. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +30 -0
  66. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  67. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +77 -0
  68. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  69. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.js +77 -0
  70. package/dist/cjs/Message/QuickStarts/types.d.ts +132 -0
  71. package/dist/cjs/Message/QuickStarts/types.js +17 -0
  72. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
  73. package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
  74. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
  75. package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
  76. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
  77. package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
  78. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
  79. package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
  80. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
  81. package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
  82. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
  83. package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
  84. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
  85. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  86. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
  87. package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
  88. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
  89. package/dist/cjs/Message/UserFeedback/UserFeedback.js +55 -0
  90. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  91. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +146 -0
  92. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  93. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
  94. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  95. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
  96. package/dist/cjs/MessageBar/AttachButton.js +4 -2
  97. package/dist/cjs/MessageBar/MessageBar.js +9 -12
  98. package/dist/cjs/MessageBar/MessageBar.test.js +4 -4
  99. package/dist/cjs/MessageBar/SendButton.js +3 -1
  100. package/dist/cjs/MessageBar/StopButton.js +3 -1
  101. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  102. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  103. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  104. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  105. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +10 -1
  106. package/dist/cjs/ResponseActions/ResponseActionButton.js +28 -5
  107. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  108. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
  109. package/dist/cjs/ResponseActions/ResponseActions.d.ts +12 -2
  110. package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
  111. package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
  112. package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
  113. package/dist/cjs/Settings/SettingsForm.js +27 -0
  114. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  115. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  116. package/dist/cjs/Settings/index.d.ts +2 -0
  117. package/dist/cjs/Settings/index.js +23 -0
  118. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
  119. package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
  120. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  121. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
  122. package/dist/cjs/TermsOfUse/index.d.ts +2 -0
  123. package/dist/cjs/TermsOfUse/index.js +23 -0
  124. package/dist/cjs/index.d.ts +6 -0
  125. package/dist/cjs/index.js +10 -1
  126. package/dist/css/main.css +400 -102
  127. package/dist/css/main.css.map +1 -1
  128. package/dist/dynamic/Compare/package.json +1 -0
  129. package/dist/dynamic/Settings/package.json +1 -0
  130. package/dist/dynamic/TermsOfUse/package.json +1 -0
  131. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  132. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  133. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  134. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  135. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  136. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  137. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  138. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  139. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  140. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
  141. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
  142. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  143. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  144. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  145. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  146. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  147. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  148. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  149. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  150. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  151. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  152. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +10 -0
  153. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  154. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  155. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  156. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  157. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  158. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  159. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  160. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  161. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  162. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  163. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  164. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -1
  165. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  166. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  167. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  168. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
  169. package/dist/esm/ChatbotHeader/index.d.ts +1 -0
  170. package/dist/esm/ChatbotHeader/index.js +1 -0
  171. package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
  172. package/dist/esm/CodeModal/CodeModal.js +2 -12
  173. package/dist/esm/Compare/Compare.d.ts +17 -0
  174. package/dist/esm/Compare/Compare.js +43 -0
  175. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  176. package/dist/esm/Compare/Compare.test.js +15 -0
  177. package/dist/esm/Compare/index.d.ts +2 -0
  178. package/dist/esm/Compare/index.js +2 -0
  179. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  180. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
  181. package/dist/esm/Message/Message.d.ts +31 -7
  182. package/dist/esm/Message/Message.js +45 -13
  183. package/dist/esm/Message/Message.test.js +183 -3
  184. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
  185. package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
  186. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
  187. package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
  188. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  189. package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
  190. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  191. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
  192. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  193. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
  194. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  195. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
  196. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  197. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
  198. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  199. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
  200. package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
  201. package/dist/esm/Message/QuickStarts/types.js +14 -0
  202. package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
  203. package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
  204. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
  205. package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
  206. package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
  207. package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
  208. package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
  209. package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
  210. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
  211. package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
  212. package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
  213. package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
  214. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  215. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  216. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
  217. package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
  218. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
  219. package/dist/esm/Message/UserFeedback/UserFeedback.js +50 -0
  220. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  221. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +141 -0
  222. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  223. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
  224. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  225. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
  226. package/dist/esm/MessageBar/AttachButton.js +4 -2
  227. package/dist/esm/MessageBar/MessageBar.js +9 -12
  228. package/dist/esm/MessageBar/MessageBar.test.js +4 -4
  229. package/dist/esm/MessageBar/SendButton.js +3 -1
  230. package/dist/esm/MessageBar/StopButton.js +3 -1
  231. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  232. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  233. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  234. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  235. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +10 -1
  236. package/dist/esm/ResponseActions/ResponseActionButton.js +25 -2
  237. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  238. package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
  239. package/dist/esm/ResponseActions/ResponseActions.d.ts +12 -2
  240. package/dist/esm/ResponseActions/ResponseActions.js +26 -9
  241. package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
  242. package/dist/esm/Settings/SettingsForm.d.ts +13 -0
  243. package/dist/esm/Settings/SettingsForm.js +20 -0
  244. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  245. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  246. package/dist/esm/Settings/index.d.ts +2 -0
  247. package/dist/esm/Settings/index.js +2 -0
  248. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
  249. package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
  250. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  251. package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
  252. package/dist/esm/TermsOfUse/index.d.ts +2 -0
  253. package/dist/esm/TermsOfUse/index.js +2 -0
  254. package/dist/esm/index.d.ts +6 -0
  255. package/dist/esm/index.js +6 -0
  256. package/dist/tsconfig.tsbuildinfo +1 -1
  257. package/package.json +7 -13
  258. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +5 -2
  259. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +41 -4
  260. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +168 -13
  261. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +4 -0
  262. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
  263. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
  264. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
  265. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +63 -11
  266. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +208 -12
  267. package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
  268. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  269. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  270. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +2 -2
  271. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  272. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  273. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
  274. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
  275. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
  276. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
  277. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
  278. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +49 -6
  279. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
  280. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
  281. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +2 -2
  282. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +20 -19
  283. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -2
  284. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -2
  285. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  286. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
  287. package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
  288. package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
  289. package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -57
  290. package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +5 -5
  291. package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
  292. package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
  293. package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
  294. package/patternfly-docs/content/extensions/chatbot/img/docked.svg +68 -49
  295. package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
  296. package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
  297. package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
  298. package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
  299. package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +85 -142
  300. package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +52 -36
  301. package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
  302. package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
  303. package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
  304. package/src/AttachMenu/AttachMenu.scss +1 -1
  305. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  306. package/src/Chatbot/Chatbot.test.tsx +31 -0
  307. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  308. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  309. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +7 -1
  310. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +8 -1
  311. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +112 -3
  312. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +41 -8
  313. package/src/ChatbotFooter/ChatbotFooter.scss +2 -6
  314. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  315. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  316. package/src/ChatbotHeader/ChatbotHeader.scss +2 -5
  317. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  318. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  319. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  320. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +57 -0
  321. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  322. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  323. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +11 -2
  324. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  325. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
  326. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  327. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +8 -1
  328. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
  329. package/src/ChatbotHeader/index.ts +1 -0
  330. package/src/ChatbotModal/ChatbotModal.scss +1 -1
  331. package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
  332. package/src/CodeModal/CodeModal.scss +9 -1
  333. package/src/CodeModal/CodeModal.tsx +2 -13
  334. package/src/Compare/Compare.scss +72 -0
  335. package/src/Compare/Compare.test.tsx +31 -0
  336. package/src/Compare/Compare.tsx +98 -0
  337. package/src/Compare/index.ts +2 -0
  338. package/src/FileDetails/FileDetails.scss +1 -1
  339. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
  340. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
  341. package/src/Message/ListMessage/ListMessage.scss +5 -5
  342. package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
  343. package/src/Message/Message.scss +4 -26
  344. package/src/Message/Message.test.tsx +215 -3
  345. package/src/Message/Message.tsx +94 -23
  346. package/src/Message/MessageLoading.scss +2 -2
  347. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  348. package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
  349. package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
  350. package/src/Message/QuickStarts/QuickStartTile.scss +24 -0
  351. package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
  352. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
  353. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
  354. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
  355. package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
  356. package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
  357. package/src/Message/QuickStarts/types.ts +154 -0
  358. package/src/Message/TableMessage/TableMessage.scss +23 -0
  359. package/src/Message/TableMessage/TableMessage.tsx +83 -0
  360. package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
  361. package/src/Message/TableMessage/TdMessage.tsx +11 -0
  362. package/src/Message/TableMessage/ThMessage.tsx +11 -0
  363. package/src/Message/TableMessage/TheadMessage.tsx +11 -0
  364. package/src/Message/TableMessage/TrMessage.tsx +27 -0
  365. package/src/Message/TextMessage/TextMessage.scss +13 -11
  366. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  367. package/src/Message/UserFeedback/CloseButton.tsx +21 -0
  368. package/src/Message/UserFeedback/UserFeedback.scss +53 -0
  369. package/src/Message/UserFeedback/UserFeedback.test.tsx +257 -0
  370. package/src/Message/UserFeedback/UserFeedback.tsx +132 -0
  371. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
  372. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
  373. package/src/MessageBar/AttachButton.scss +19 -3
  374. package/src/MessageBar/AttachButton.tsx +3 -1
  375. package/src/MessageBar/MessageBar.scss +3 -2
  376. package/src/MessageBar/MessageBar.test.tsx +4 -4
  377. package/src/MessageBar/MessageBar.tsx +9 -12
  378. package/src/MessageBar/MicrophoneButton.scss +8 -8
  379. package/src/MessageBar/SendButton.tsx +2 -0
  380. package/src/MessageBar/StopButton.scss +17 -3
  381. package/src/MessageBar/StopButton.tsx +2 -0
  382. package/src/MessageBox/JumpButton.scss +6 -6
  383. package/src/MessageBox/MessageBox.test.tsx +26 -0
  384. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  385. package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
  386. package/src/ResponseActions/ResponseActionButton.tsx +59 -28
  387. package/src/ResponseActions/ResponseActions.scss +11 -9
  388. package/src/ResponseActions/ResponseActions.test.tsx +103 -5
  389. package/src/ResponseActions/ResponseActions.tsx +80 -9
  390. package/src/Settings/Settings.scss +34 -0
  391. package/src/Settings/SettingsForm.test.tsx +28 -0
  392. package/src/Settings/SettingsForm.tsx +25 -0
  393. package/src/Settings/index.ts +3 -0
  394. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +1 -1
  395. package/src/SourcesCard/SourcesCard.scss +2 -2
  396. package/src/TermsOfUse/TermsOfUse.scss +66 -0
  397. package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
  398. package/src/TermsOfUse/TermsOfUse.tsx +117 -0
  399. package/src/TermsOfUse/index.ts +3 -0
  400. package/src/index.ts +9 -0
  401. package/src/main.scss +7 -4
@@ -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"
@@ -0,0 +1,43 @@
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 { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
5
+
6
+ describe('ChatbotHeaderSelectorDropdown', () => {
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 ChatbotHeaderSelectorDropdown', () => {
16
+ render(<ChatbotHeaderSelectorDropdown value="Option 1">{dropdownItems}</ChatbotHeaderSelectorDropdown>);
17
+
18
+ expect(screen.getByRole('button', { name: 'Chatbot selector' })).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
+ <ChatbotHeaderSelectorDropdown value="Option 1" className="custom-header-selector-dropdown" onSelect={onSelect}>
25
+ {dropdownItems}
26
+ </ChatbotHeaderSelectorDropdown>
27
+ );
28
+
29
+ act(() => {
30
+ fireEvent.click(screen.getByRole('button', { name: 'Chatbot selector' }));
31
+ });
32
+
33
+ await waitFor(() => {
34
+ expect(container.querySelector('.custom-header-selector-dropdown')).toBeTruthy();
35
+
36
+ expect(screen.getByText('Option 3'));
37
+
38
+ fireEvent.click(screen.getByText('Option 3'));
39
+
40
+ expect(onSelect).toHaveBeenCalled();
41
+ });
42
+ });
43
+ });
@@ -31,7 +31,14 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
31
31
  const [defaultAriaLabel, setDefaultAriaLabel] = React.useState('Chatbot selector');
32
32
 
33
33
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
34
- <Tooltip className="pf-chatbot__tooltip" content={tooltipContent} position="bottom" {...tooltipProps}>
34
+ <Tooltip
35
+ className="pf-chatbot__tooltip"
36
+ content={tooltipContent}
37
+ position="bottom"
38
+ // prevents VO announcements of both aria label and tooltip
39
+ aria="none"
40
+ {...tooltipProps}
41
+ >
35
42
  <MenuToggle
36
43
  variant="secondary"
37
44
  aria-label={menuToggleAriaLabel ?? defaultAriaLabel}
@@ -0,0 +1,59 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
4
+ import ChatbotHeaderTitle from './ChatbotHeaderTitle';
5
+
6
+ describe('ChatbotHeaderTitle', () => {
7
+ it('should render ChatbotHeaderTitle with children', () => {
8
+ render(<ChatbotHeaderTitle>Chatbot Header Title</ChatbotHeaderTitle>);
9
+ expect(screen.getByText('Chatbot Header Title')).toBeTruthy();
10
+ });
11
+
12
+ it('should render ChatbotHeaderTitle with custom classname', () => {
13
+ const { container } = render(
14
+ <ChatbotHeaderTitle className="custom-header-class">Chatbot Header Title</ChatbotHeaderTitle>
15
+ );
16
+ expect(container.querySelector('.custom-header-class')).toBeTruthy();
17
+ });
18
+
19
+ it('should render title for default display mode', () => {
20
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.default} showOnDefault={'Default header title'} />);
21
+ expect(screen.getByText('Default header title')).toBeTruthy();
22
+ });
23
+
24
+ it('should render title for docked display mode', () => {
25
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.docked} showOnDocked={'Docked header title'} />);
26
+ expect(screen.getByText('Docked header title')).toBeTruthy();
27
+ });
28
+
29
+ it('should fallback to default title when docked display mode title is not configured', () => {
30
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.docked} showOnDefault={'Default header title'} />);
31
+ expect(screen.getByText('Default header title')).toBeTruthy();
32
+ });
33
+
34
+ it('should render title for embedded display mode', () => {
35
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.embedded} showOnEmbedded={'Embedded header title'} />);
36
+ expect(screen.getByText('Embedded header title')).toBeTruthy();
37
+ });
38
+
39
+ it('should fallback to default title when embedded display mode title is not configured', () => {
40
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.embedded} showOnDefault={'Default header title'} />);
41
+ expect(screen.getByText('Default header title')).toBeTruthy();
42
+ });
43
+
44
+ it('should render title for fullscreen display mode', () => {
45
+ render(
46
+ <ChatbotHeaderTitle
47
+ displayMode={ChatbotDisplayMode.fullscreen}
48
+ showOnFullScreen={'Fullscreen header title'}
49
+ className="custom-header-class"
50
+ />
51
+ );
52
+ expect(screen.getByText('Fullscreen header title')).toBeTruthy();
53
+ });
54
+
55
+ it('should fallback to default title when fullscreen display mode title is not configured', () => {
56
+ render(<ChatbotHeaderTitle displayMode={ChatbotDisplayMode.fullscreen} showOnDefault={'Default header title'} />);
57
+ expect(screen.getByText('Default header title')).toBeTruthy();
58
+ });
59
+ });
@@ -7,3 +7,4 @@ export * from './ChatbotHeaderMenu';
7
7
  export * from './ChatbotHeaderTitle';
8
8
  export * from './ChatbotHeaderOptionsDropdown';
9
9
  export * from './ChatbotHeaderSelectorDropdown';
10
+ export * from './ChatbotHeaderCloseButton';
@@ -16,7 +16,7 @@
16
16
  }
17
17
  .pf-v6-c-button.pf-m-primary.pf-m-block,
18
18
  .pf-v6-c-button.pf-m-link.pf-m-block {
19
- --pf-v6-c-button--FontWeight: 500;
19
+ --pf-v6-c-button--FontWeight: var(--pf-t--global--font--weight--body--bold);
20
20
  }
21
21
  .pf-v6-c-modal-box__footer {
22
22
  padding-block-start: var(--pf-t--global--spacer--xl);
@@ -65,7 +65,12 @@ const ChatbotToggleBase: React.FunctionComponent<ChatbotToggleProps> = ({
65
65
  const icon = isChatbotVisible ? <AngleDownIcon data-testid={openIconTestId} /> : closedIcon;
66
66
 
67
67
  return (
68
- <Tooltip content={tooltipLabel} {...tooltipProps}>
68
+ <Tooltip
69
+ content={tooltipLabel}
70
+ // prevents VO announcements of both aria label and tooltip
71
+ aria="none"
72
+ {...tooltipProps}
73
+ >
69
74
  <Button
70
75
  className={`pf-chatbot__button ${isChatbotVisible ? 'pf-chatbot__button--active' : ''} ${isRound ? 'pf-chatbot__button--round' : ''} ${className ? className : ''}`}
71
76
  variant="plain"
@@ -38,7 +38,7 @@
38
38
  border: none;
39
39
  --pf-v6-c-code-editor__tab--BorderStartEndRadius: 0;
40
40
  border-start-start-radius: var(--pf-t--global--border--radius--small);
41
- --pf-t--global--font--weight--body--default: 500;
41
+ --pf-t--global--font--weight--body--default: var(--pf-t--global--font--weight--body--bold);
42
42
  }
43
43
  .pf-v6-c-code-editor__tab-icon {
44
44
  display: none;
@@ -74,3 +74,11 @@
74
74
  }
75
75
  }
76
76
  }
77
+
78
+ .pf-chatbot__code-modal-body {
79
+ flex: 1;
80
+ }
81
+
82
+ .pf-chatbot__code-modal--fullscreen {
83
+ height: inherit; // override shared modal so code editor works in full screen
84
+ }
@@ -87,17 +87,6 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
87
87
  }
88
88
  };
89
89
 
90
- /* eslint-disable indent */
91
- const getHeight = (displayMode: ChatbotDisplayMode) => {
92
- switch (displayMode) {
93
- case ChatbotDisplayMode.docked:
94
- return '100vh';
95
- default:
96
- return '45vh';
97
- }
98
- };
99
- /* eslint-enable indent */
100
-
101
90
  const modal = (
102
91
  <ChatbotModal
103
92
  isOpen={isModalOpen}
@@ -114,7 +103,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
114
103
  <StackItem className="pf-chatbot__code-modal-file-details">
115
104
  <FileDetails fileName={fileName} />
116
105
  </StackItem>
117
- <StackItem>
106
+ <StackItem className="pf-chatbot__code-modal-body">
118
107
  <CodeEditor
119
108
  isDarkTheme
120
109
  isLineNumbersVisible={isLineNumbersVisible}
@@ -126,7 +115,7 @@ export const CodeModal: React.FunctionComponent<CodeModalProps> = ({
126
115
  onEditorDidMount={onEditorDidMount}
127
116
  onCodeChange={onCodeChange}
128
117
  className={codeEditorClassName}
129
- height={getHeight(displayMode)}
118
+ isFullHeight
130
119
  options={{
131
120
  glyphMargin: false,
132
121
  folding: false
@@ -0,0 +1,72 @@
1
+ .pf-chatbot__compare-container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ position: relative;
5
+ height: 100%;
6
+ }
7
+ .pf-chatbot__compare-toggle {
8
+ width: 100%;
9
+
10
+ .pf-v6-c-toggle-group__button {
11
+ width: 100%;
12
+ display: flex;
13
+ justify-content: center;
14
+ }
15
+ }
16
+ .pf-chatbot__compare {
17
+ display: flex;
18
+ height: 100%;
19
+ width: 100%;
20
+
21
+ @media screen and (max-width: 900px) {
22
+ overflow-y: auto;
23
+ }
24
+
25
+ .pf-chatbot__compare-item:first-of-type {
26
+ border-right: 1px solid var(--pf-t--global--border--color--default);
27
+
28
+ @media screen and (max-width: 900px) {
29
+ border-right: 0px;
30
+ }
31
+ }
32
+ }
33
+
34
+ .pf-chatbot__compare-item {
35
+ flex: 1;
36
+
37
+ .pf-chatbot--embedded .pf-chatbot__messagebox {
38
+ width: 100%;
39
+ }
40
+
41
+ .pf-chatbot__content {
42
+ padding: 0;
43
+ }
44
+
45
+ .pf-chatbot.pf-chatbot--embedded {
46
+ @media screen and (max-width: 900px) {
47
+ height: 100%;
48
+ }
49
+ }
50
+ }
51
+ .pf-chatbot__compare-item-hidden {
52
+ display: block;
53
+
54
+ @media screen and (max-width: 900px) {
55
+ display: none;
56
+ }
57
+ }
58
+
59
+ .pf-chatbot__compare-mobile-controls {
60
+ padding: var(--pf-t--global--spacer--md) var(--pf-t--global--spacer--lg) 0 var(--pf-t--global--spacer--lg);
61
+ display: none;
62
+ background-color: var(--pf-t--global--background--color--secondary--default);
63
+ position: sticky;
64
+ top: 0;
65
+ z-index: 9999;
66
+
67
+ @media screen and (max-width: 900px) {
68
+ display: flex;
69
+ flex-direction: column;
70
+ gap: var(--pf-t--global--spacer--md);
71
+ }
72
+ }
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import Compare from './Compare';
5
+
6
+ const firstChild = (
7
+ <div>
8
+ <h1>Child 1</h1>
9
+ </div>
10
+ );
11
+
12
+ const secondChild = (
13
+ <div>
14
+ <h1>Child 2</h1>
15
+ </div>
16
+ );
17
+
18
+ describe('Compare', () => {
19
+ it('should render compare correctly', () => {
20
+ render(
21
+ <Compare
22
+ firstChildDisplayName="Child 1"
23
+ secondChildDisplayName="Child 2"
24
+ firstChild={firstChild}
25
+ secondChild={secondChild}
26
+ />
27
+ );
28
+ expect(screen.getByRole('heading', { name: /Child 1/i })).toBeTruthy();
29
+ expect(screen.getByRole('heading', { name: /Child 2/i })).toBeTruthy();
30
+ });
31
+ });
@@ -0,0 +1,98 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
+
4
+ interface CompareProps {
5
+ /** First of two children to render */
6
+ firstChild: React.ReactNode;
7
+ /** Second of two children to render */
8
+ secondChild: React.ReactNode;
9
+ /** Display name for first child, used in mobile toggle */
10
+ firstChildDisplayName: string;
11
+ /** Display name for second child, used in mobile toggle */
12
+ secondChildDisplayName: string;
13
+ /** Aria label for mobile toggle group */
14
+ toggleGroupAriaLabel?: string;
15
+ /** Callback for when mobile toggle is used */
16
+ onToggleClick?: (event: MouseEvent | React.MouseEvent<any, MouseEvent> | React.KeyboardEvent<Element>) => void;
17
+ }
18
+
19
+ export const Compare = ({
20
+ firstChild,
21
+ secondChild,
22
+ firstChildDisplayName,
23
+ secondChildDisplayName,
24
+ onToggleClick,
25
+ toggleGroupAriaLabel = 'Select which chatbot to display'
26
+ }: PropsWithChildren<CompareProps>) => {
27
+ const [isSelected, setIsSelected] = React.useState('toggle-group-chatbot-1');
28
+ const [showFirstChatbot, setShowFirstChatbot] = React.useState(true);
29
+ const [showSecondChatbot, setShowSecondChatbot] = React.useState(false);
30
+
31
+ React.useEffect(() => {
32
+ // we want to show the first if we switch to the mobile toggle view
33
+ // and reset/switch back to normal otherwise
34
+ const updateChatbotVisibility = () => {
35
+ if (window.innerWidth >= 901) {
36
+ setShowFirstChatbot(true);
37
+ setShowSecondChatbot(true);
38
+ } else {
39
+ setShowFirstChatbot(true);
40
+ setShowSecondChatbot(false);
41
+ setIsSelected('toggle-group-chatbot-1');
42
+ }
43
+ };
44
+ window.addEventListener('resize', updateChatbotVisibility);
45
+
46
+ return () => {
47
+ window.removeEventListener('resize', updateChatbotVisibility);
48
+ };
49
+ }, []);
50
+
51
+ // this only happens on mobile
52
+ const handleChildToggleClick = (
53
+ event: MouseEvent | React.MouseEvent<any, MouseEvent> | React.KeyboardEvent<Element>
54
+ ) => {
55
+ const id = event.currentTarget.id;
56
+ setIsSelected(id);
57
+ setShowSecondChatbot(!showSecondChatbot);
58
+ setShowFirstChatbot(!showFirstChatbot);
59
+ onToggleClick && onToggleClick(event);
60
+ };
61
+
62
+ return (
63
+ <>
64
+ <div className="pf-chatbot__compare-mobile-controls">
65
+ <ToggleGroup aria-label={toggleGroupAriaLabel}>
66
+ <ToggleGroupItem
67
+ className="pf-chatbot__compare-toggle"
68
+ text={firstChildDisplayName}
69
+ buttonId="toggle-group-chatbot-1"
70
+ isSelected={isSelected === 'toggle-group-chatbot-1'}
71
+ onChange={handleChildToggleClick}
72
+ />
73
+ <ToggleGroupItem
74
+ className="pf-chatbot__compare-toggle"
75
+ text={secondChildDisplayName}
76
+ buttonId="toggle-group-chatbot-2"
77
+ isSelected={isSelected === 'toggle-group-chatbot-2'}
78
+ onChange={handleChildToggleClick}
79
+ />
80
+ </ToggleGroup>
81
+ </div>
82
+ <div className="pf-chatbot__compare">
83
+ <div
84
+ className={`pf-chatbot__compare-item ${!showFirstChatbot ? 'pf-chatbot__compare-item-hidden' : undefined}`}
85
+ >
86
+ {firstChild}
87
+ </div>
88
+ <div
89
+ className={`pf-chatbot__compare-item ${!showSecondChatbot ? 'pf-chatbot__compare-item-hidden' : undefined}`}
90
+ >
91
+ {secondChild}
92
+ </div>
93
+ </div>
94
+ </>
95
+ );
96
+ };
97
+
98
+ export default Compare;
@@ -0,0 +1,2 @@
1
+ export { default } from './Compare';
2
+ export * from './Compare';
@@ -2,7 +2,7 @@
2
2
  color: var(--pf-t--global--text--color--subtle);
3
3
  display: flex; // this is needed for when FileDetailsLabel is clickable
4
4
  font-size: var(--pf-t--global--icon--size--font--xs);
5
- font-weight: 500;
5
+ font-weight: var(--pf-t--global--font--weight--body--bold);
6
6
  }
7
7
 
8
8
  .pf-chatbot__code-icon {
@@ -9,7 +9,7 @@ exports[`FileDropZone should render file drop zone 1`] = `
9
9
  >
10
10
  <input
11
11
  multiple=""
12
- style="display: none;"
12
+ style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
13
13
  tabindex="-1"
14
14
  type="file"
15
15
  />