@patternfly/chatbot 2.2.1 → 6.3.0-prerelease.10

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 (310) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +2 -2
  3. package/dist/cjs/Chatbot/Chatbot.d.ts +2 -0
  4. package/dist/cjs/Chatbot/Chatbot.js +2 -2
  5. package/dist/cjs/Chatbot/Chatbot.test.js +4 -0
  6. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
  7. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
  8. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
  9. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  10. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -2
  11. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  12. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +5 -0
  13. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +1 -1
  14. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
  15. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
  16. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  17. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
  18. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +1 -1
  19. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  20. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  21. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  22. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  23. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  24. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  25. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  31. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +3 -0
  32. package/dist/cjs/ChatbotModal/ChatbotModal.js +2 -2
  33. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  34. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +28 -0
  35. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +1 -1
  36. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  37. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  38. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  39. package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
  40. package/dist/cjs/CodeModal/CodeModal.js +3 -3
  41. package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
  42. package/dist/cjs/CodeModal/CodeModal.test.js +15 -0
  43. package/dist/cjs/FileDetails/FileDetails.js +1 -1
  44. package/dist/cjs/Message/Message.d.ts +19 -1
  45. package/dist/cjs/Message/Message.js +58 -39
  46. package/dist/cjs/Message/Message.test.js +64 -0
  47. package/dist/cjs/Message/MessageInput.d.ts +18 -0
  48. package/dist/cjs/Message/MessageInput.js +34 -0
  49. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -0
  50. package/dist/cjs/Message/QuickResponse/QuickResponse.js +2 -2
  51. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -0
  52. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +2 -2
  53. package/dist/cjs/Message/UserFeedback/UserFeedback.js +4 -4
  54. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +4 -0
  55. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  56. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  57. package/dist/cjs/MessageBar/AttachButton.d.ts +1 -0
  58. package/dist/cjs/MessageBar/AttachButton.js +3 -3
  59. package/dist/cjs/MessageBar/AttachButton.test.js +4 -0
  60. package/dist/cjs/MessageBar/MessageBar.d.ts +5 -0
  61. package/dist/cjs/MessageBar/MessageBar.js +14 -13
  62. package/dist/cjs/MessageBar/MessageBar.test.js +13 -0
  63. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -0
  64. package/dist/cjs/MessageBar/MicrophoneButton.js +4 -4
  65. package/dist/cjs/MessageBar/SendButton.d.ts +1 -0
  66. package/dist/cjs/MessageBar/SendButton.js +3 -3
  67. package/dist/cjs/MessageBar/SendButton.test.js +4 -0
  68. package/dist/cjs/MessageBar/StopButton.d.ts +1 -0
  69. package/dist/cjs/MessageBar/StopButton.js +3 -3
  70. package/dist/cjs/MessageBar/StopButton.test.js +4 -0
  71. package/dist/cjs/MessageBox/MessageBox.d.ts +4 -0
  72. package/dist/cjs/MessageBox/MessageBox.js +21 -7
  73. package/dist/cjs/MessageBox/MessageBox.test.js +43 -0
  74. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  75. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +2 -2
  76. package/dist/cjs/Settings/SettingsForm.d.ts +2 -0
  77. package/dist/cjs/Settings/SettingsForm.js +2 -2
  78. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -1
  79. package/dist/cjs/Settings/SettingsForm.test.js +12 -0
  80. package/dist/cjs/SourcesCard/SourcesCard.d.ts +7 -1
  81. package/dist/cjs/SourcesCard/SourcesCard.js +17 -11
  82. package/dist/cjs/SourcesCard/SourcesCard.test.js +25 -15
  83. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +2 -0
  84. package/dist/cjs/TermsOfUse/TermsOfUse.js +5 -5
  85. package/dist/cjs/tracking/console_tracking_provider.d.ts +4 -5
  86. package/dist/cjs/tracking/console_tracking_provider.js +22 -15
  87. package/dist/cjs/tracking/posthog_tracking_provider.d.ts +2 -2
  88. package/dist/cjs/tracking/posthog_tracking_provider.js +21 -12
  89. package/dist/cjs/tracking/segment_tracking_provider.d.ts +2 -2
  90. package/dist/cjs/tracking/segment_tracking_provider.js +21 -12
  91. package/dist/cjs/tracking/trackingProviderProxy.d.ts +1 -1
  92. package/dist/cjs/tracking/trackingProviderProxy.js +2 -2
  93. package/dist/cjs/tracking/tracking_api.d.ts +1 -1
  94. package/dist/cjs/tracking/tracking_registry.js +46 -12
  95. package/dist/cjs/tracking/tracking_spi.d.ts +15 -5
  96. package/dist/cjs/tracking/tracking_spi.js +9 -0
  97. package/dist/cjs/tracking/umami_tracking_provider.d.ts +6 -2
  98. package/dist/cjs/tracking/umami_tracking_provider.js +66 -22
  99. package/dist/css/main.css +225 -22
  100. package/dist/css/main.css.map +1 -1
  101. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  102. package/dist/esm/AttachmentEdit/AttachmentEdit.js +2 -2
  103. package/dist/esm/Chatbot/Chatbot.d.ts +2 -0
  104. package/dist/esm/Chatbot/Chatbot.js +2 -2
  105. package/dist/esm/Chatbot/Chatbot.test.js +4 -0
  106. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
  107. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
  108. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
  109. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  110. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -2
  111. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  112. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +5 -0
  113. package/dist/esm/ChatbotHeader/ChatbotHeader.js +1 -1
  114. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
  115. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
  116. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  117. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
  118. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +1 -1
  119. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  120. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  121. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  122. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  123. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  124. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  125. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  126. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  127. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  128. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  129. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  130. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  131. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +3 -0
  132. package/dist/esm/ChatbotModal/ChatbotModal.js +2 -2
  133. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  134. package/dist/esm/ChatbotModal/ChatbotModal.test.js +23 -0
  135. package/dist/esm/ChatbotPopover/ChatbotPopover.js +1 -1
  136. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  137. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  138. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  139. package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
  140. package/dist/esm/CodeModal/CodeModal.js +3 -3
  141. package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
  142. package/dist/esm/CodeModal/CodeModal.test.js +10 -0
  143. package/dist/esm/FileDetails/FileDetails.js +1 -1
  144. package/dist/esm/Message/Message.d.ts +19 -1
  145. package/dist/esm/Message/Message.js +58 -39
  146. package/dist/esm/Message/Message.test.js +64 -0
  147. package/dist/esm/Message/MessageInput.d.ts +18 -0
  148. package/dist/esm/Message/MessageInput.js +29 -0
  149. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -0
  150. package/dist/esm/Message/QuickResponse/QuickResponse.js +2 -2
  151. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -0
  152. package/dist/esm/Message/QuickStarts/QuickStartTile.js +2 -2
  153. package/dist/esm/Message/UserFeedback/UserFeedback.js +4 -4
  154. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +4 -0
  155. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  156. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  157. package/dist/esm/MessageBar/AttachButton.d.ts +1 -0
  158. package/dist/esm/MessageBar/AttachButton.js +3 -3
  159. package/dist/esm/MessageBar/AttachButton.test.js +4 -0
  160. package/dist/esm/MessageBar/MessageBar.d.ts +5 -0
  161. package/dist/esm/MessageBar/MessageBar.js +14 -13
  162. package/dist/esm/MessageBar/MessageBar.test.js +13 -0
  163. package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -0
  164. package/dist/esm/MessageBar/MicrophoneButton.js +4 -4
  165. package/dist/esm/MessageBar/SendButton.d.ts +1 -0
  166. package/dist/esm/MessageBar/SendButton.js +3 -3
  167. package/dist/esm/MessageBar/SendButton.test.js +4 -0
  168. package/dist/esm/MessageBar/StopButton.d.ts +1 -0
  169. package/dist/esm/MessageBar/StopButton.js +3 -3
  170. package/dist/esm/MessageBar/StopButton.test.js +4 -0
  171. package/dist/esm/MessageBox/MessageBox.d.ts +4 -0
  172. package/dist/esm/MessageBox/MessageBox.js +21 -7
  173. package/dist/esm/MessageBox/MessageBox.test.js +44 -1
  174. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  175. package/dist/esm/PreviewAttachment/PreviewAttachment.js +2 -2
  176. package/dist/esm/Settings/SettingsForm.d.ts +2 -0
  177. package/dist/esm/Settings/SettingsForm.js +2 -2
  178. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -1
  179. package/dist/esm/Settings/SettingsForm.test.js +12 -0
  180. package/dist/esm/SourcesCard/SourcesCard.d.ts +7 -1
  181. package/dist/esm/SourcesCard/SourcesCard.js +18 -12
  182. package/dist/esm/SourcesCard/SourcesCard.test.js +25 -15
  183. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +2 -0
  184. package/dist/esm/TermsOfUse/TermsOfUse.js +5 -5
  185. package/dist/esm/tracking/console_tracking_provider.d.ts +4 -5
  186. package/dist/esm/tracking/console_tracking_provider.js +22 -15
  187. package/dist/esm/tracking/posthog_tracking_provider.d.ts +2 -2
  188. package/dist/esm/tracking/posthog_tracking_provider.js +21 -12
  189. package/dist/esm/tracking/segment_tracking_provider.d.ts +2 -2
  190. package/dist/esm/tracking/segment_tracking_provider.js +21 -12
  191. package/dist/esm/tracking/trackingProviderProxy.d.ts +1 -1
  192. package/dist/esm/tracking/trackingProviderProxy.js +2 -2
  193. package/dist/esm/tracking/tracking_api.d.ts +1 -1
  194. package/dist/esm/tracking/tracking_registry.js +46 -12
  195. package/dist/esm/tracking/tracking_spi.d.ts +15 -5
  196. package/dist/esm/tracking/tracking_spi.js +8 -1
  197. package/dist/esm/tracking/umami_tracking_provider.d.ts +6 -2
  198. package/dist/esm/tracking/umami_tracking_provider.js +66 -22
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +1 -1
  201. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +18 -14
  202. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +10 -1
  203. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +74 -104
  204. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +48 -37
  205. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +33 -0
  206. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +34 -0
  207. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +11 -0
  208. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +71 -13
  209. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +3 -1
  210. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +10 -1
  211. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +80 -104
  212. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +44 -2
  213. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +13 -2
  214. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +9 -0
  215. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +11 -2
  216. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +289 -0
  217. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +136 -0
  218. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +15 -1
  219. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +8 -1
  220. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +6 -3
  221. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +2 -0
  222. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -0
  223. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +481 -0
  224. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +2 -0
  225. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -0
  226. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +62 -57
  227. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +2 -0
  228. package/src/AttachmentEdit/AttachmentEdit.tsx +5 -1
  229. package/src/Chatbot/Chatbot.scss +7 -0
  230. package/src/Chatbot/Chatbot.test.tsx +9 -0
  231. package/src/Chatbot/Chatbot.tsx +4 -1
  232. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +38 -3
  233. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +71 -0
  234. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +23 -2
  235. package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
  236. package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -0
  237. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -1
  238. package/src/ChatbotHeader/ChatbotHeader.scss +25 -0
  239. package/src/ChatbotHeader/ChatbotHeader.tsx +1 -1
  240. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +6 -0
  241. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +12 -6
  242. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +3 -1
  243. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -0
  244. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +10 -5
  245. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +6 -0
  246. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +5 -2
  247. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +10 -0
  248. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +4 -0
  249. package/src/ChatbotModal/ChatbotModal.scss +15 -4
  250. package/src/ChatbotModal/ChatbotModal.test.tsx +59 -0
  251. package/src/ChatbotModal/ChatbotModal.tsx +5 -1
  252. package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
  253. package/src/ChatbotPopover/ChatbotPopover.tsx +1 -1
  254. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
  255. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -0
  256. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +13 -2
  257. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
  258. package/src/CodeModal/CodeModal.scss +11 -3
  259. package/src/CodeModal/CodeModal.test.tsx +24 -0
  260. package/src/CodeModal/CodeModal.tsx +6 -2
  261. package/src/FileDetails/FileDetails.tsx +1 -1
  262. package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
  263. package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
  264. package/src/Message/Message.scss +31 -0
  265. package/src/Message/Message.test.tsx +83 -0
  266. package/src/Message/Message.tsx +121 -56
  267. package/src/Message/MessageInput.tsx +59 -0
  268. package/src/Message/QuickResponse/QuickResponse.tsx +5 -1
  269. package/src/Message/QuickStarts/QuickStartTile.tsx +5 -1
  270. package/src/Message/TextMessage/TextMessage.scss +25 -0
  271. package/src/Message/UserFeedback/UserFeedback.scss +24 -3
  272. package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -0
  273. package/src/Message/UserFeedback/UserFeedback.tsx +4 -2
  274. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -0
  275. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +10 -2
  276. package/src/MessageBar/AttachButton.scss +10 -0
  277. package/src/MessageBar/AttachButton.test.tsx +4 -0
  278. package/src/MessageBar/AttachButton.tsx +5 -2
  279. package/src/MessageBar/MessageBar.scss +17 -0
  280. package/src/MessageBar/MessageBar.test.tsx +13 -0
  281. package/src/MessageBar/MessageBar.tsx +23 -8
  282. package/src/MessageBar/MicrophoneButton.scss +10 -0
  283. package/src/MessageBar/MicrophoneButton.tsx +6 -3
  284. package/src/MessageBar/SendButton.scss +10 -0
  285. package/src/MessageBar/SendButton.test.tsx +5 -1
  286. package/src/MessageBar/SendButton.tsx +5 -2
  287. package/src/MessageBar/StopButton.scss +10 -0
  288. package/src/MessageBar/StopButton.test.tsx +5 -1
  289. package/src/MessageBar/StopButton.tsx +5 -2
  290. package/src/MessageBox/MessageBox.scss +6 -0
  291. package/src/MessageBox/MessageBox.test.tsx +45 -1
  292. package/src/MessageBox/MessageBox.tsx +16 -6
  293. package/src/PreviewAttachment/PreviewAttachment.tsx +5 -1
  294. package/src/Settings/Settings.scss +11 -0
  295. package/src/Settings/SettingsForm.test.tsx +17 -0
  296. package/src/Settings/SettingsForm.tsx +12 -2
  297. package/src/SourcesCard/SourcesCard.scss +11 -7
  298. package/src/SourcesCard/SourcesCard.test.tsx +30 -22
  299. package/src/SourcesCard/SourcesCard.tsx +56 -13
  300. package/src/TermsOfUse/TermsOfUse.scss +20 -0
  301. package/src/TermsOfUse/TermsOfUse.tsx +9 -4
  302. package/src/tracking/console_tracking_provider.ts +21 -17
  303. package/src/tracking/posthog_tracking_provider.ts +20 -13
  304. package/src/tracking/segment_tracking_provider.ts +20 -13
  305. package/src/tracking/trackingProviderProxy.ts +2 -2
  306. package/src/tracking/tracking_api.ts +1 -1
  307. package/src/tracking/tracking_registry.ts +46 -13
  308. package/src/tracking/tracking_spi.ts +18 -7
  309. package/src/tracking/umami_tracking_provider.ts +76 -20
  310. package/src/SourcesCard/__snapshots__/SourcesCard.test.tsx.snap +0 -34
@@ -125,3 +125,10 @@
125
125
  border-radius: var(--pf-t--global--border--radius--sharp);
126
126
  }
127
127
  }
128
+
129
+ // ============================================================================
130
+ // Information density styles
131
+ // ============================================================================
132
+ .pf-chatbot.pf-m-compact {
133
+ font-size: var(--pf-t--global--font--size--sm);
134
+ }
@@ -28,4 +28,13 @@ describe('Chatbot', () => {
28
28
  render(<Chatbot isVisible={false}>Chatbot Content</Chatbot>);
29
29
  expect(screen.queryByLabelText('Chatbot')).toBeFalsy();
30
30
  });
31
+
32
+ it('should handle isCompact', () => {
33
+ render(
34
+ <Chatbot data-testid="chatbot" isVisible={true} isCompact>
35
+ Chatbot Content
36
+ </Chatbot>
37
+ );
38
+ expect(screen.getByTestId('chatbot')).toHaveClass('pf-m-compact');
39
+ });
31
40
  });
@@ -17,6 +17,8 @@ export interface ChatbotProps {
17
17
  innerRef?: React.Ref<HTMLDivElement>;
18
18
  /** Custom aria label applied to focusable container */
19
19
  ariaLabel?: string;
20
+ /** Density of information within the ChatBot */
21
+ isCompact?: boolean;
20
22
  }
21
23
 
22
24
  export enum ChatbotDisplayMode {
@@ -34,6 +36,7 @@ const ChatbotBase: React.FunctionComponent<ChatbotProps> = ({
34
36
  className,
35
37
  innerRef,
36
38
  ariaLabel,
39
+ isCompact,
37
40
  ...props
38
41
  }: ChatbotProps) => {
39
42
  // Configure animations
@@ -44,7 +47,7 @@ const ChatbotBase: React.FunctionComponent<ChatbotProps> = ({
44
47
 
45
48
  return (
46
49
  <motion.div
47
- className={`pf-chatbot pf-chatbot--${displayMode} ${!isVisible ? 'pf-chatbot--hidden' : ''} ${className ?? ''}`}
50
+ className={`pf-chatbot pf-chatbot--${displayMode} ${!isVisible ? 'pf-chatbot--hidden' : ''} ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`}
48
51
  variants={motionChatbot}
49
52
  initial="hidden"
50
53
  animate={isVisible ? 'visible' : 'hidden'}
@@ -9,8 +9,8 @@
9
9
  // Drawer input
10
10
  // ----------------------------------------------------------------------------
11
11
  .pf-chatbot__input {
12
- padding-inline-start: var(--pf-t--global--spacer--xl);
13
- padding-inline-end: var(--pf-t--global--spacer--xl);
12
+ padding-inline-start: var(--pf-t--global--spacer--lg);
13
+ padding-inline-end: var(--pf-t--global--spacer--lg);
14
14
  }
15
15
 
16
16
  // Drawer menu
@@ -118,7 +118,6 @@
118
118
  border-radius: var(--pf-t--global--border--radius--pill);
119
119
  justify-content: center;
120
120
  align-items: center;
121
- border-radius: var(--pf-t--global--border--radius--small);
122
121
  }
123
122
  }
124
123
 
@@ -205,3 +204,39 @@
205
204
  gap: var(--pf-t--global--spacer--sm);
206
205
  align-self: stretch;
207
206
  }
207
+
208
+ .pf-chatbot__history.pf-m-compact {
209
+ .pf-v6-c-drawer__main {
210
+ .pf-v6-c-drawer__panel {
211
+ --pf-v6-c-drawer__panel--PaddingBlockStart: var(--pf-t--global--spacer--sm);
212
+ --pf-v6-c-drawer__panel--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
213
+ --pf-v6-c-drawer__head--PaddingInlineStart: var(--pf-t--global--spacer--md);
214
+ --pf-v6-c-drawer__head--PaddingInlineEnd: var(--pf-t--global--spacer--md);
215
+ --pf-v6-c-drawer__panel--RowGap: var(--pf-t--global--spacer--md);
216
+ }
217
+
218
+ .pf-v6-c-drawer__body {
219
+ --pf-v6-c-drawer__panel__body--PaddingInlineStart: var(--pf-t--global--spacer--md);
220
+ --pf-v6-c-drawer__panel__body--PaddingInlineEnd: var(--pf-t--global--spacer--md);
221
+ }
222
+ }
223
+
224
+ .pf-chatbot__menu-item {
225
+ font-size: var(--pf-t--global--font--size--body--md);
226
+ }
227
+
228
+ .pf-v6-c-drawer__head {
229
+ --pf-v6-c-drawer__head--PaddingInlineStart: var(--pf-t--global--spacer--lg);
230
+ --pf-v6-c-drawer__head--PaddingInlineEnd: var(--pf-t--global--spacer--lg);
231
+ }
232
+ .pf-v6-c-drawer__close {
233
+ .pf-v6-c-button {
234
+ width: 2rem;
235
+ height: 2rem;
236
+ --pf-v6-c-button--m-plain--PaddingInlineEnd: var(--pf-t--global--spacer--xs);
237
+ --pf-v6-c-button--m-plain--PaddingInlineStart: var(--pf-t--global--spacer--xs);
238
+ --pf-v6-c-button--PaddingBlockStart: var(--pf-t--global--spacer--xs);
239
+ --pf-v6-c-button--PaddingBlockEnd: var(--pf-t--global--spacer--xs);
240
+ }
241
+ }
242
+ }
@@ -5,6 +5,7 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
5
5
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
6
6
  import ChatbotConversationHistoryNav, { Conversation } from './ChatbotConversationHistoryNav';
7
7
  import { EmptyStateStatus, Spinner } from '@patternfly/react-core';
8
+ import { OutlinedCommentsIcon, SearchIcon } from '@patternfly/react-icons';
8
9
 
9
10
  const ERROR = {
10
11
  bodyText: (
@@ -21,6 +22,18 @@ const ERROR = {
21
22
  onClick: () => alert('Clicked Reload')
22
23
  };
23
24
 
25
+ const NO_RESULTS = {
26
+ bodyText: 'Adjust your search query and try again. Check your spelling or try a more general term.',
27
+ titleText: 'No results found',
28
+ icon: SearchIcon
29
+ };
30
+
31
+ const EMPTY_STATE = {
32
+ bodyText: 'Access timely assistance by starting a conversation with an AI model.',
33
+ titleText: 'Start a new chat',
34
+ icon: OutlinedCommentsIcon
35
+ };
36
+
24
37
  const ERROR_WITHOUT_BUTTON = {
25
38
  bodyText: (
26
39
  <>
@@ -362,4 +375,62 @@ describe('ChatbotConversationHistoryNav', () => {
362
375
  );
363
376
  expect(screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
364
377
  });
378
+
379
+ it('should accept emptyState', () => {
380
+ render(
381
+ <ChatbotConversationHistoryNav
382
+ onDrawerToggle={onDrawerToggle}
383
+ isDrawerOpen={true}
384
+ displayMode={ChatbotDisplayMode.fullscreen}
385
+ setIsDrawerOpen={jest.fn()}
386
+ reverseButtonOrder={false}
387
+ handleTextInputChange={jest.fn()}
388
+ conversations={initialConversations}
389
+ emptyState={EMPTY_STATE}
390
+ />
391
+ );
392
+ expect(
393
+ screen.getByRole('dialog', {
394
+ name: /Start a new chat Access timely assistance by starting a conversation with an AI model./i
395
+ })
396
+ ).toBeTruthy();
397
+ });
398
+
399
+ it('should accept no results state', () => {
400
+ render(
401
+ <ChatbotConversationHistoryNav
402
+ onDrawerToggle={onDrawerToggle}
403
+ isDrawerOpen={true}
404
+ displayMode={ChatbotDisplayMode.fullscreen}
405
+ setIsDrawerOpen={jest.fn()}
406
+ reverseButtonOrder={false}
407
+ handleTextInputChange={jest.fn()}
408
+ conversations={initialConversations}
409
+ noResultsState={NO_RESULTS}
410
+ />
411
+ );
412
+ expect(
413
+ screen.getByRole('dialog', {
414
+ name: /No results found Adjust your search query and try again. Check your spelling or try a more general term./i
415
+ })
416
+ ).toBeTruthy();
417
+ });
418
+
419
+ it('should handle isCompact', () => {
420
+ render(
421
+ <ChatbotConversationHistoryNav
422
+ onDrawerToggle={onDrawerToggle}
423
+ isDrawerOpen={true}
424
+ displayMode={ChatbotDisplayMode.fullscreen}
425
+ setIsDrawerOpen={jest.fn()}
426
+ reverseButtonOrder={false}
427
+ handleTextInputChange={jest.fn()}
428
+ conversations={initialConversations}
429
+ noResultsState={NO_RESULTS}
430
+ isCompact
431
+ data-testid="drawer"
432
+ />
433
+ );
434
+ expect(screen.getByTestId('drawer')).toHaveClass('pf-m-compact');
435
+ });
365
436
  });
@@ -112,6 +112,12 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
112
112
  loadingState?: SkeletonProps;
113
113
  /** Content to show in error state. Error state will appear once content is passed in. */
114
114
  errorState?: HistoryEmptyStateProps;
115
+ /** Content to show in empty state. Empty state will appear once content is passed in. */
116
+ emptyState?: HistoryEmptyStateProps;
117
+ /** Content to show in no results state. No results state will appear once content is passed in. */
118
+ noResultsState?: HistoryEmptyStateProps;
119
+ /** Sets drawer to compact styling. */
120
+ isCompact?: boolean;
115
121
  }
116
122
 
117
123
  export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps> = ({
@@ -141,6 +147,9 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
141
147
  isLoading,
142
148
  loadingState,
143
149
  errorState,
150
+ emptyState,
151
+ noResultsState,
152
+ isCompact,
144
153
  ...props
145
154
  }: ChatbotConversationHistoryNavProps) => {
146
155
  const drawerRef = React.useRef<HTMLDivElement>(null);
@@ -210,6 +219,14 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
210
219
  if (errorState) {
211
220
  return <HistoryEmptyState {...errorState} />;
212
221
  }
222
+
223
+ if (emptyState) {
224
+ return <HistoryEmptyState {...emptyState} />;
225
+ }
226
+
227
+ if (noResultsState) {
228
+ return <HistoryEmptyState {...noResultsState} />;
229
+ }
213
230
  return (
214
231
  <Menu isPlain onSelect={onSelectActiveItem} activeItemId={activeItemId} {...menuProps}>
215
232
  <MenuContent>{buildMenu()}</MenuContent>
@@ -242,7 +259,11 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
242
259
  {...drawerActionsProps}
243
260
  >
244
261
  <DrawerCloseButton onClick={onDrawerToggle} {...drawerCloseButtonProps} />
245
- {onNewChat && <Button onClick={onNewChat}>{newChatButtonText}</Button>}
262
+ {onNewChat && (
263
+ <Button size={isCompact ? 'sm' : undefined} onClick={onNewChat}>
264
+ {newChatButtonText}
265
+ </Button>
266
+ )}
246
267
  </DrawerActions>
247
268
  </DrawerHead>
248
269
  {isLoading ? <LoadingState {...loadingState} /> : renderDrawerContent()}
@@ -273,7 +294,7 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
273
294
 
274
295
  return (
275
296
  <Drawer
276
- className="pf-chatbot__history"
297
+ className={`pf-chatbot__history ${isCompact ? 'pf-m-compact' : ''}`}
277
298
  isExpanded={isDrawerOpen}
278
299
  onExpand={onExpand}
279
300
  position="start"
@@ -57,3 +57,8 @@
57
57
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
58
58
  }
59
59
  }
60
+
61
+ .pf-chatbot__footer.pf-m-compact .pf-chatbot__footer-container {
62
+ padding: 0 var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--sm);
63
+ row-gap: var(--pf-t--global--spacer--sm);
64
+ }
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import ChatbotFooter from './ChatbotFooter';
4
+ import '@testing-library/jest-dom';
4
5
 
5
6
  describe('ChatbotFooter', () => {
6
7
  it('should render ChatbotFooter with children', () => {
@@ -12,4 +13,13 @@ describe('ChatbotFooter', () => {
12
13
  const { container } = render(<ChatbotFooter className="custom-class">Chatbot Content</ChatbotFooter>);
13
14
  expect(container.querySelector('.custom-class')).toBeTruthy();
14
15
  });
16
+
17
+ it('should handle isCompact', () => {
18
+ render(
19
+ <ChatbotFooter className="custom-class" isCompact data-testid="footer">
20
+ Chatbot Content
21
+ </ChatbotFooter>
22
+ );
23
+ expect(screen.getByTestId('footer')).toHaveClass('pf-m-compact');
24
+ });
15
25
  });
@@ -17,14 +17,16 @@ export interface ChatbotFooterProps extends React.HTMLProps<HTMLDivElement> {
17
17
  children?: React.ReactNode;
18
18
  /** Custom classname for the Footer component */
19
19
  className?: string;
20
+ isCompact?: boolean;
20
21
  }
21
22
 
22
23
  export const ChatbotFooter: React.FunctionComponent<ChatbotFooterProps> = ({
23
24
  children,
24
25
  className,
26
+ isCompact,
25
27
  ...props
26
28
  }: ChatbotFooterProps) => (
27
- <div className={`pf-chatbot__footer ${className ?? ''}`} {...props}>
29
+ <div className={`pf-chatbot__footer ${isCompact ? 'pf-m-compact' : ''} ${className ?? ''}`} {...props}>
28
30
  <Divider />
29
31
  <div className="pf-chatbot__footer-container">{children}</div>
30
32
  </div>
@@ -137,3 +137,28 @@
137
137
  :where(.pf-v6-theme-dark) .show-dark .pf-m-picture {
138
138
  display: inline-flex;
139
139
  }
140
+
141
+ // ============================================================================
142
+ // Information density styles
143
+ // ============================================================================
144
+ .pf-chatbot.pf-m-compact {
145
+ .pf-chatbot__header {
146
+ gap: var(--pf-t--global--spacer--sm);
147
+ padding: var(--pf-t--global--spacer--sm);
148
+ }
149
+
150
+ .pf-chatbot__header .pf-chatbot__title img {
151
+ max-height: 24px;
152
+ vertical-align: middle;
153
+ }
154
+ }
155
+
156
+ .pf-v6-c-menu-toggle.pf-chatbot__button--toggle-options.pf-m-compact,
157
+ .pf-chatbot__button--toggle-menu.pf-m-compact {
158
+ width: 2rem;
159
+ height: 2rem;
160
+ }
161
+
162
+ .pf-chatbot__header .pf-chatbot__actions .pf-v6-c-menu-toggle.pf-m-secondary.pf-m-compact {
163
+ width: initial;
164
+ }
@@ -14,7 +14,7 @@ export const ChatbotHeader: React.FunctionComponent<ChatbotHeaderProps> = ({
14
14
  children
15
15
  }: ChatbotHeaderProps) => (
16
16
  <div className="pf-chatbot__header-container">
17
- <div className={`pf-chatbot__header ${className ?? ''}`}>{children}</div>
17
+ <div className={`pf-chatbot__header${className ? ` ${className}` : ''}`}>{children}</div>
18
18
  <Divider className="pf-chatbot__header__divider" />
19
19
  </div>
20
20
  );
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { fireEvent, render, screen } from '@testing-library/react';
3
3
  import { ChatbotHeaderCloseButton } from './ChatbotHeaderCloseButton';
4
+ import '@testing-library/jest-dom';
4
5
 
5
6
  describe('ChatbotHeaderCloseButton', () => {
6
7
  it('should render ChatbotHeaderCloseButton', () => {
@@ -17,4 +18,9 @@ describe('ChatbotHeaderCloseButton', () => {
17
18
  fireEvent.click(screen.getByRole('button', { name: 'Close' }));
18
19
  expect(onClick).toHaveBeenCalled();
19
20
  });
21
+
22
+ it('should render button with isCompact', () => {
23
+ render(<ChatbotHeaderCloseButton data-testid="close-button" onClick={jest.fn()} isCompact />);
24
+ expect(screen.getByTestId('close-button')).toHaveClass('pf-m-compact');
25
+ });
20
26
  });
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
 
3
- import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
3
+ import { Button, ButtonProps, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
4
4
  import { CloseIcon } from '@patternfly/react-icons';
5
5
 
6
- export interface ChatbotHeaderCloseButtonProps {
6
+ export interface ChatbotHeaderCloseButtonProps extends ButtonProps {
7
7
  /** Callback function for when button is clicked */
8
8
  onClick: () => void;
9
9
  /** Custom classname for the header component */
@@ -16,6 +16,8 @@ export interface ChatbotHeaderCloseButtonProps {
16
16
  innerRef?: React.Ref<HTMLButtonElement>;
17
17
  /** Content used in tooltip */
18
18
  tooltipContent?: string;
19
+ /** Sets button to compact styling. */
20
+ isCompact?: boolean;
19
21
  }
20
22
 
21
23
  const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseButtonProps> = ({
@@ -24,9 +26,11 @@ const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseBu
24
26
  tooltipProps,
25
27
  menuAriaLabel = 'Close',
26
28
  innerRef,
27
- tooltipContent = 'Close'
29
+ tooltipContent = 'Close',
30
+ isCompact,
31
+ ...props
28
32
  }: ChatbotHeaderCloseButtonProps) => (
29
- <div className={`pf-chatbot__menu ${className}`}>
33
+ <div className={`pf-chatbot__menu${className ? ` ${className}` : ''}`}>
30
34
  <Tooltip
31
35
  content={tooltipContent}
32
36
  position="bottom"
@@ -35,16 +39,18 @@ const ChatbotHeaderCloseButtonBase: React.FunctionComponent<ChatbotHeaderCloseBu
35
39
  {...tooltipProps}
36
40
  >
37
41
  <Button
38
- className="pf-chatbot__button--toggle-menu"
42
+ className={`pf-chatbot__button--toggle-menu ${isCompact ? 'pf-m-compact' : ''}`}
39
43
  variant="plain"
40
44
  onClick={onClick}
41
45
  aria-label={menuAriaLabel}
42
46
  ref={innerRef}
43
47
  icon={
44
- <Icon size="xl" isInline>
48
+ <Icon size={isCompact ? 'lg' : 'xl'} isInline>
45
49
  <CloseIcon />
46
50
  </Icon>
47
51
  }
52
+ size={isCompact ? 'sm' : undefined}
53
+ {...props}
48
54
  />
49
55
  </Tooltip>
50
56
  </div>
@@ -10,6 +10,8 @@ export interface ChatbotHeaderMainProps {
10
10
  export const ChatbotHeaderMain: React.FunctionComponent<ChatbotHeaderMainProps> = ({
11
11
  className,
12
12
  children
13
- }: ChatbotHeaderMainProps) => <div className={`pf-chatbot__header-main ${className}`}>{children}</div>;
13
+ }: ChatbotHeaderMainProps) => (
14
+ <div className={`pf-chatbot__header-main${className ? ` ${className}` : ''}`}>{children}</div>
15
+ );
14
16
 
15
17
  export default ChatbotHeaderMain;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { fireEvent, render, screen } from '@testing-library/react';
3
3
  import { ChatbotHeaderMenu } from './ChatbotHeaderMenu';
4
+ import '@testing-library/jest-dom';
4
5
 
5
6
  describe('ChatbotHeaderMenu', () => {
6
7
  it('should render ChatbotHeaderMenu with custom class', () => {
@@ -16,4 +17,11 @@ describe('ChatbotHeaderMenu', () => {
16
17
 
17
18
  expect(onMenuToggle).toHaveBeenCalled();
18
19
  });
20
+
21
+ it('should handle isCompact', () => {
22
+ render(
23
+ <ChatbotHeaderMenu className="custom-header-menu" onMenuToggle={jest.fn()} isCompact data-testid="button" />
24
+ );
25
+ expect(screen.getByTestId('button')).toHaveClass('pf-m-compact');
26
+ });
19
27
  });
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
 
3
- import { Button, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
3
+ import { Button, ButtonProps, Icon, Tooltip, TooltipProps } from '@patternfly/react-core';
4
4
  import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
5
5
 
6
- export interface ChatbotHeaderMenuProps {
6
+ export interface ChatbotHeaderMenuProps extends ButtonProps {
7
7
  /** Callback function to attach to menu toggle on top right of chatbot header. */
8
8
  onMenuToggle: () => void;
9
9
  /** Custom classname for the header component */
@@ -16,6 +16,7 @@ export interface ChatbotHeaderMenuProps {
16
16
  innerRef?: React.Ref<HTMLButtonElement>;
17
17
  /** Content used in tooltip */
18
18
  tooltipContent?: string;
19
+ isCompact?: boolean;
19
20
  }
20
21
 
21
22
  const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = ({
@@ -24,7 +25,9 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
24
25
  tooltipProps,
25
26
  menuAriaLabel = 'Toggle menu',
26
27
  innerRef,
27
- tooltipContent = 'Menu'
28
+ tooltipContent = 'Menu',
29
+ isCompact,
30
+ ...props
28
31
  }: ChatbotHeaderMenuProps) => (
29
32
  <div className={`pf-chatbot__menu ${className}`}>
30
33
  <Tooltip
@@ -35,16 +38,18 @@ const ChatbotHeaderMenuBase: React.FunctionComponent<ChatbotHeaderMenuProps> = (
35
38
  {...tooltipProps}
36
39
  >
37
40
  <Button
38
- className="pf-chatbot__button--toggle-menu"
41
+ className={`pf-chatbot__button--toggle-menu ${isCompact ? 'pf-m-compact' : ''}`}
39
42
  variant="plain"
40
43
  onClick={onMenuToggle}
41
44
  aria-label={menuAriaLabel}
42
45
  ref={innerRef}
43
46
  icon={
44
- <Icon size="xl" isInline>
47
+ <Icon size={isCompact ? 'lg' : 'xl'} isInline>
45
48
  <BarsIcon />
46
49
  </Icon>
47
50
  }
51
+ size={isCompact ? 'sm' : undefined}
52
+ {...props}
48
53
  />
49
54
  </Tooltip>
50
55
  </div>
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { DropdownItem } from '@patternfly/react-core';
3
3
  import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
4
4
  import { ChatbotHeaderOptionsDropdown } from './ChatbotHeaderOptionsDropdown';
5
+ import '@testing-library/jest-dom';
5
6
 
6
7
  describe('ChatbotHeaderOptionsDropdown', () => {
7
8
  const dropdownItems = (
@@ -42,4 +43,9 @@ describe('ChatbotHeaderOptionsDropdown', () => {
42
43
  expect(onSelect).toHaveBeenCalled();
43
44
  });
44
45
  });
46
+
47
+ it('should handle isCompact', () => {
48
+ render(<ChatbotHeaderOptionsDropdown isCompact>{dropdownItems}</ChatbotHeaderOptionsDropdown>);
49
+ expect(screen.getByRole('button', { name: 'Chatbot options' })).toHaveClass('pf-m-compact');
50
+ });
45
51
  });
@@ -20,6 +20,7 @@ export interface ChatbotHeaderOptionsDropdownProps extends Omit<DropdownProps, '
20
20
  tooltipProps?: TooltipProps;
21
21
  /** Aria label for menu toggle */
22
22
  menuToggleAriaLabel?: string;
23
+ isCompact?: boolean;
23
24
  }
24
25
 
25
26
  export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeaderOptionsDropdownProps> = ({
@@ -28,6 +29,7 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
28
29
  onSelect,
29
30
  tooltipProps,
30
31
  menuToggleAriaLabel = 'Chatbot options',
32
+ isCompact,
31
33
  ...props
32
34
  }: ChatbotHeaderOptionsDropdownProps) => {
33
35
  const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
@@ -42,17 +44,18 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
42
44
  {...tooltipProps}
43
45
  >
44
46
  <MenuToggle
45
- className="pf-chatbot__button--toggle-options"
47
+ className={`pf-chatbot__button--toggle-options ${isCompact ? 'pf-m-compact' : ''}`}
46
48
  variant="plain"
47
49
  aria-label={menuToggleAriaLabel}
48
50
  ref={toggleRef}
49
51
  icon={
50
- <Icon iconSize="xl" isInline>
52
+ <Icon size={isCompact ? 'lg' : 'xl'} isInline>
51
53
  <EllipsisIcon />
52
54
  </Icon>
53
55
  }
54
56
  isExpanded={isOptionsMenuOpen}
55
57
  onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
58
+ size={isCompact ? 'sm' : undefined}
56
59
  />
57
60
  </Tooltip>
58
61
  );
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { DropdownItem } from '@patternfly/react-core';
3
3
  import { act, fireEvent, render, screen, waitFor } from '@testing-library/react';
4
4
  import { ChatbotHeaderSelectorDropdown } from './ChatbotHeaderSelectorDropdown';
5
+ import '@testing-library/jest-dom';
5
6
 
6
7
  describe('ChatbotHeaderSelectorDropdown', () => {
7
8
  const dropdownItems = (
@@ -40,4 +41,13 @@ describe('ChatbotHeaderSelectorDropdown', () => {
40
41
  expect(onSelect).toHaveBeenCalled();
41
42
  });
42
43
  });
44
+
45
+ it('should handle isCompact', () => {
46
+ render(
47
+ <ChatbotHeaderSelectorDropdown value="Option 1" isCompact>
48
+ {dropdownItems}
49
+ </ChatbotHeaderSelectorDropdown>
50
+ );
51
+ expect(screen.getByRole('button', { name: /Select model/i })).toHaveClass('pf-m-compact');
52
+ });
43
53
  });
@@ -15,6 +15,7 @@ export interface ChatbotHeaderSelectorDropdownProps extends Omit<DropdownProps,
15
15
  menuToggleAriaLabel?: string;
16
16
  /** Text displayed in Tooltip wrapping the display mode dropdown */
17
17
  tooltipContent?: string;
18
+ isCompact?: boolean;
18
19
  }
19
20
 
20
21
  export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeaderSelectorDropdownProps> = ({
@@ -25,6 +26,7 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
25
26
  tooltipProps,
26
27
  tooltipContent = 'Select model',
27
28
  menuToggleAriaLabel,
29
+ isCompact,
28
30
  ...props
29
31
  }: ChatbotHeaderSelectorDropdownProps) => {
30
32
  const [isOptionsMenuOpen, setIsOptionsMenuOpen] = React.useState(false);
@@ -45,6 +47,8 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
45
47
  ref={toggleRef}
46
48
  isExpanded={isOptionsMenuOpen}
47
49
  onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}
50
+ size={isCompact ? 'sm' : undefined}
51
+ className={`${isCompact ? 'pf-m-compact' : ''}`}
48
52
  >
49
53
  {value}
50
54
  </MenuToggle>
@@ -14,10 +14,7 @@
14
14
  .pf-v6-c-modal-box__title {
15
15
  --pf-v6-c-modal-box__title--FontSize: var(--pf-t--global--font--size--heading--h3);
16
16
  }
17
- .pf-v6-c-button.pf-m-primary.pf-m-block,
18
- .pf-v6-c-button.pf-m-link.pf-m-block {
19
- --pf-v6-c-button--FontWeight: var(--pf-t--global--font--weight--body--bold);
20
- }
17
+
21
18
  .pf-v6-c-modal-box__footer {
22
19
  padding-block-start: var(--pf-t--global--spacer--xl);
23
20
  padding-block-end: var(--pf-t--global--spacer--xl);
@@ -91,3 +88,17 @@
91
88
  .pf-v6-c-backdrop.pf-chatbot__backdrop {
92
89
  position: absolute;
93
90
  }
91
+
92
+ // ============================================================================
93
+ // Compact
94
+ // ============================================================================
95
+ .pf-chatbot__chatbot-modal.pf-m-compact {
96
+ .pf-v6-c-modal-box__header {
97
+ padding-block-end: 0;
98
+ }
99
+
100
+ .pf-v6-c-modal-box__footer {
101
+ padding-block-start: var(--pf-t--global--spacer--lg);
102
+ padding-block-end: var(--pf-t--global--spacer--lg);
103
+ }
104
+ }