@patternfly/chatbot 6.5.0-prerelease.9 → 6.6.0-prerelease.1

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 (315) hide show
  1. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +9 -1
  2. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -2
  3. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +38 -0
  4. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +29 -2
  5. package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
  6. package/dist/cjs/CodeModal/CodeModal.js +53 -12
  7. package/dist/cjs/DeepThinking/DeepThinking.d.ts +13 -0
  8. package/dist/cjs/DeepThinking/DeepThinking.js +31 -3
  9. package/dist/cjs/DeepThinking/DeepThinking.test.js +80 -0
  10. package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +44 -0
  11. package/dist/cjs/MarkdownContent/MarkdownContent.js +181 -0
  12. package/dist/cjs/MarkdownContent/MarkdownContent.test.d.ts +1 -0
  13. package/dist/cjs/MarkdownContent/MarkdownContent.test.js +192 -0
  14. package/dist/cjs/MarkdownContent/index.d.ts +2 -0
  15. package/dist/cjs/MarkdownContent/index.js +23 -0
  16. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +3 -1
  17. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +15 -4
  18. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +1 -0
  19. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.js +131 -0
  20. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
  21. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +5 -3
  22. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  23. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +30 -0
  24. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +5 -1
  25. package/dist/cjs/Message/LinkMessage/LinkMessage.js +4 -3
  26. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +9 -1
  27. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -1
  28. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +7 -1
  29. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +2 -1
  30. package/dist/cjs/Message/Message.d.ts +20 -3
  31. package/dist/cjs/Message/Message.js +7 -160
  32. package/dist/cjs/Message/Message.test.js +129 -2
  33. package/dist/cjs/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
  34. package/dist/cjs/Message/MessageAndActions/MessageAndActions.js +22 -0
  35. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
  36. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +25 -0
  37. package/dist/cjs/Message/MessageAndActions/index.d.ts +1 -0
  38. package/dist/cjs/Message/MessageAndActions/index.js +17 -0
  39. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
  40. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.js +22 -0
  41. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
  42. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +25 -0
  43. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
  44. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.js +22 -0
  45. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
  46. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +25 -0
  47. package/dist/cjs/Message/MessageAttachments/index.d.ts +2 -0
  48. package/dist/cjs/Message/MessageAttachments/index.js +18 -0
  49. package/dist/cjs/Message/MessageInput.d.ts +1 -1
  50. package/dist/cjs/Message/MessageInput.js +3 -1
  51. package/dist/cjs/Message/MessageLoading.d.ts +13 -4
  52. package/dist/cjs/Message/MessageLoading.js +19 -5
  53. package/dist/cjs/Message/MessageLoading.test.d.ts +1 -0
  54. package/dist/cjs/Message/MessageLoading.test.js +25 -0
  55. package/dist/cjs/Message/QuickResponse/QuickResponse.js +3 -2
  56. package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
  57. package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +109 -0
  58. package/dist/cjs/Message/QuickResponse/index.d.ts +1 -0
  59. package/dist/cjs/Message/QuickResponse/index.js +17 -0
  60. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +1 -1
  61. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +3 -2
  62. package/dist/cjs/Message/QuickStarts/index.d.ts +2 -0
  63. package/dist/cjs/Message/QuickStarts/index.js +18 -0
  64. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +6 -1
  65. package/dist/cjs/Message/TableMessage/TableMessage.js +3 -2
  66. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +8 -1
  67. package/dist/cjs/Message/TextMessage/TextMessage.js +3 -2
  68. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +3 -1
  69. package/dist/cjs/Message/UserFeedback/UserFeedback.js +8 -6
  70. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
  71. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +3 -2
  72. package/dist/cjs/Message/UserFeedback/index.d.ts +2 -0
  73. package/dist/cjs/Message/UserFeedback/index.js +18 -0
  74. package/dist/cjs/Message/index.d.ts +8 -0
  75. package/dist/cjs/Message/index.js +8 -0
  76. package/dist/cjs/MessageBar/MessageBar.d.ts +10 -0
  77. package/dist/cjs/MessageBar/MessageBar.js +42 -10
  78. package/dist/cjs/MessageBar/MessageBar.test.js +20 -0
  79. package/dist/cjs/Onboarding/Onboarding.d.ts +36 -0
  80. package/dist/cjs/Onboarding/Onboarding.js +37 -0
  81. package/dist/cjs/Onboarding/Onboarding.test.d.ts +1 -0
  82. package/dist/cjs/Onboarding/Onboarding.test.js +80 -0
  83. package/dist/cjs/Onboarding/index.d.ts +2 -0
  84. package/dist/cjs/Onboarding/index.js +23 -0
  85. package/dist/cjs/ResponseActions/ResponseActions.d.ts +7 -0
  86. package/dist/cjs/ResponseActions/ResponseActions.js +28 -7
  87. package/dist/cjs/ResponseActions/ResponseActions.test.js +67 -12
  88. package/dist/cjs/ResponseActions/ResponseActionsGroups.d.ts +13 -0
  89. package/dist/cjs/ResponseActions/ResponseActionsGroups.js +22 -0
  90. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
  91. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +25 -0
  92. package/dist/cjs/ResponseActions/index.d.ts +1 -0
  93. package/dist/cjs/ResponseActions/index.js +1 -0
  94. package/dist/cjs/ToolCall/ToolCall.d.ts +11 -0
  95. package/dist/cjs/ToolCall/ToolCall.js +24 -3
  96. package/dist/cjs/ToolCall/ToolCall.test.js +57 -0
  97. package/dist/cjs/ToolResponse/ToolResponse.d.ts +17 -0
  98. package/dist/cjs/ToolResponse/ToolResponse.js +49 -3
  99. package/dist/cjs/ToolResponse/ToolResponse.test.js +100 -0
  100. package/dist/cjs/index.d.ts +4 -0
  101. package/dist/cjs/index.js +7 -1
  102. package/dist/css/main.css +276 -30
  103. package/dist/css/main.css.map +1 -1
  104. package/dist/dynamic/MarkdownContent/package.json +1 -0
  105. package/dist/dynamic/Onboarding/package.json +1 -0
  106. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +9 -1
  107. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +10 -3
  108. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +38 -0
  109. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +30 -3
  110. package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
  111. package/dist/esm/CodeModal/CodeModal.js +54 -13
  112. package/dist/esm/DeepThinking/DeepThinking.d.ts +13 -0
  113. package/dist/esm/DeepThinking/DeepThinking.js +28 -3
  114. package/dist/esm/DeepThinking/DeepThinking.test.js +80 -0
  115. package/dist/esm/MarkdownContent/MarkdownContent.d.ts +44 -0
  116. package/dist/esm/MarkdownContent/MarkdownContent.js +174 -0
  117. package/dist/esm/MarkdownContent/MarkdownContent.test.d.ts +1 -0
  118. package/dist/esm/MarkdownContent/MarkdownContent.test.js +187 -0
  119. package/dist/esm/MarkdownContent/index.d.ts +2 -0
  120. package/dist/esm/MarkdownContent/index.js +2 -0
  121. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +3 -1
  122. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +15 -4
  123. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +1 -0
  124. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.js +126 -0
  125. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +15 -1
  126. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +3 -3
  127. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  128. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +25 -0
  129. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +5 -1
  130. package/dist/esm/Message/LinkMessage/LinkMessage.js +4 -3
  131. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +9 -1
  132. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -1
  133. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +7 -1
  134. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +2 -1
  135. package/dist/esm/Message/Message.d.ts +20 -3
  136. package/dist/esm/Message/Message.js +8 -161
  137. package/dist/esm/Message/Message.test.js +129 -2
  138. package/dist/esm/Message/MessageAndActions/MessageAndActions.d.ts +14 -0
  139. package/dist/esm/Message/MessageAndActions/MessageAndActions.js +18 -0
  140. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +1 -0
  141. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +20 -0
  142. package/dist/esm/Message/MessageAndActions/index.d.ts +1 -0
  143. package/dist/esm/Message/MessageAndActions/index.js +1 -0
  144. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.d.ts +13 -0
  145. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.js +18 -0
  146. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +1 -0
  147. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +20 -0
  148. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.d.ts +13 -0
  149. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.js +18 -0
  150. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +1 -0
  151. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +20 -0
  152. package/dist/esm/Message/MessageAttachments/index.d.ts +2 -0
  153. package/dist/esm/Message/MessageAttachments/index.js +2 -0
  154. package/dist/esm/Message/MessageInput.d.ts +1 -1
  155. package/dist/esm/Message/MessageInput.js +1 -1
  156. package/dist/esm/Message/MessageLoading.d.ts +13 -4
  157. package/dist/esm/Message/MessageLoading.js +16 -4
  158. package/dist/esm/Message/MessageLoading.test.d.ts +1 -0
  159. package/dist/esm/Message/MessageLoading.test.js +20 -0
  160. package/dist/esm/Message/QuickResponse/QuickResponse.js +3 -2
  161. package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +1 -0
  162. package/dist/esm/Message/QuickResponse/QuickResponse.test.js +104 -0
  163. package/dist/esm/Message/QuickResponse/index.d.ts +1 -0
  164. package/dist/esm/Message/QuickResponse/index.js +1 -0
  165. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +1 -1
  166. package/dist/esm/Message/QuickStarts/QuickStartTile.js +1 -1
  167. package/dist/esm/Message/QuickStarts/index.d.ts +2 -0
  168. package/dist/esm/Message/QuickStarts/index.js +2 -0
  169. package/dist/esm/Message/TableMessage/TableMessage.d.ts +6 -1
  170. package/dist/esm/Message/TableMessage/TableMessage.js +3 -2
  171. package/dist/esm/Message/TextMessage/TextMessage.d.ts +8 -1
  172. package/dist/esm/Message/TextMessage/TextMessage.js +3 -2
  173. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +3 -1
  174. package/dist/esm/Message/UserFeedback/UserFeedback.js +7 -7
  175. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +1 -1
  176. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +1 -2
  177. package/dist/esm/Message/UserFeedback/index.d.ts +2 -0
  178. package/dist/esm/Message/UserFeedback/index.js +2 -0
  179. package/dist/esm/Message/index.d.ts +8 -0
  180. package/dist/esm/Message/index.js +8 -0
  181. package/dist/esm/MessageBar/MessageBar.d.ts +10 -0
  182. package/dist/esm/MessageBar/MessageBar.js +42 -10
  183. package/dist/esm/MessageBar/MessageBar.test.js +20 -0
  184. package/dist/esm/Onboarding/Onboarding.d.ts +36 -0
  185. package/dist/esm/Onboarding/Onboarding.js +30 -0
  186. package/dist/esm/Onboarding/Onboarding.test.d.ts +1 -0
  187. package/dist/esm/Onboarding/Onboarding.test.js +75 -0
  188. package/dist/esm/Onboarding/index.d.ts +2 -0
  189. package/dist/esm/Onboarding/index.js +2 -0
  190. package/dist/esm/ResponseActions/ResponseActions.d.ts +7 -0
  191. package/dist/esm/ResponseActions/ResponseActions.js +28 -7
  192. package/dist/esm/ResponseActions/ResponseActions.test.js +67 -12
  193. package/dist/esm/ResponseActions/ResponseActionsGroups.d.ts +13 -0
  194. package/dist/esm/ResponseActions/ResponseActionsGroups.js +18 -0
  195. package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +1 -0
  196. package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +20 -0
  197. package/dist/esm/ResponseActions/index.d.ts +1 -0
  198. package/dist/esm/ResponseActions/index.js +1 -0
  199. package/dist/esm/ToolCall/ToolCall.d.ts +11 -0
  200. package/dist/esm/ToolCall/ToolCall.js +21 -3
  201. package/dist/esm/ToolCall/ToolCall.test.js +57 -0
  202. package/dist/esm/ToolResponse/ToolResponse.d.ts +17 -0
  203. package/dist/esm/ToolResponse/ToolResponse.js +46 -3
  204. package/dist/esm/ToolResponse/ToolResponse.test.js +100 -0
  205. package/dist/esm/index.d.ts +4 -0
  206. package/dist/esm/index.js +4 -0
  207. package/dist/tsconfig.tsbuildinfo +1 -1
  208. package/package.json +13 -3
  209. package/patternfly-docs/content/extensions/chatbot/chatbot.md +57 -0
  210. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +12 -12
  211. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +1 -1
  212. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +1 -1
  213. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +1 -0
  214. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomStructure.tsx +102 -0
  215. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithDeepThinking.tsx +25 -11
  216. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +14 -1
  217. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownDeepThinking.tsx +26 -0
  218. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownToolCall.tsx +29 -0
  219. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMarkdownToolResponse.tsx +200 -0
  220. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithMultipleActionGroups.tsx +61 -0
  221. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithPersistedActions.tsx +22 -0
  222. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +11 -0
  223. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithToolCall.tsx +14 -1
  224. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithToolResponse.tsx +222 -105
  225. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +123 -14
  226. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +1 -0
  227. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSearchActions.tsx +198 -0
  228. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarCustomActions.tsx +190 -0
  229. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarIndicatorThinking.tsx +15 -0
  230. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactOnboarding.tsx +141 -0
  231. package/patternfly-docs/content/extensions/chatbot/examples/UI/Onboarding.tsx +151 -0
  232. package/patternfly-docs/content/extensions/chatbot/examples/UI/RH-Hat-Image.svg +9 -0
  233. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +81 -30
  234. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +18 -18
  235. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +33 -19
  236. package/patternfly-docs/patternfly-docs.config.js +1 -1
  237. package/patternfly-docs/patternfly-docs.source.js +1 -1
  238. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +43 -0
  239. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +95 -0
  240. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +51 -15
  241. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +56 -14
  242. package/src/ChatbotModal/ChatbotModal.scss +3 -0
  243. package/src/CodeModal/CodeModal.tsx +71 -26
  244. package/src/DeepThinking/DeepThinking.scss +1 -1
  245. package/src/DeepThinking/DeepThinking.test.tsx +109 -0
  246. package/src/DeepThinking/DeepThinking.tsx +54 -5
  247. package/src/MarkdownContent/MarkdownContent.test.tsx +207 -0
  248. package/src/MarkdownContent/MarkdownContent.tsx +269 -0
  249. package/src/MarkdownContent/index.ts +2 -0
  250. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +13 -0
  251. package/src/Message/CodeBlockMessage/CodeBlockMessage.test.tsx +171 -0
  252. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +17 -4
  253. package/src/Message/ErrorMessage/ErrorMessage.test.tsx +38 -0
  254. package/src/Message/ErrorMessage/ErrorMessage.tsx +17 -2
  255. package/src/Message/LinkMessage/LinkMessage.scss +5 -0
  256. package/src/Message/LinkMessage/LinkMessage.tsx +24 -2
  257. package/src/Message/ListMessage/ListMessage.scss +8 -0
  258. package/src/Message/ListMessage/OrderedListMessage.tsx +16 -2
  259. package/src/Message/ListMessage/UnorderedListMessage.tsx +12 -2
  260. package/src/Message/Message.scss +11 -7
  261. package/src/Message/Message.test.tsx +202 -2
  262. package/src/Message/Message.tsx +129 -241
  263. package/src/Message/MessageAndActions/MessageAndActions.test.tsx +23 -0
  264. package/src/Message/MessageAndActions/MessageAndActions.tsx +22 -0
  265. package/src/Message/MessageAndActions/index.ts +1 -0
  266. package/src/Message/MessageAttachments/MessageAttachmentItem.test.tsx +23 -0
  267. package/src/Message/MessageAttachments/MessageAttachmentItem.tsx +25 -0
  268. package/src/Message/MessageAttachments/MessageAttachmentsContainer.test.tsx +23 -0
  269. package/src/Message/MessageAttachments/MessageAttachmentsContainer.tsx +25 -0
  270. package/src/Message/MessageAttachments/index.ts +2 -0
  271. package/src/Message/MessageInput.tsx +1 -1
  272. package/src/Message/MessageLoading.test.tsx +23 -0
  273. package/src/Message/MessageLoading.tsx +17 -2
  274. package/src/Message/QuickResponse/QuickResponse.scss +3 -1
  275. package/src/Message/QuickResponse/QuickResponse.test.tsx +131 -0
  276. package/src/Message/QuickResponse/QuickResponse.tsx +3 -2
  277. package/src/Message/QuickResponse/index.ts +1 -0
  278. package/src/Message/QuickStarts/QuickStartTile.tsx +1 -1
  279. package/src/Message/QuickStarts/index.ts +2 -0
  280. package/src/Message/TableMessage/TableMessage.scss +13 -1
  281. package/src/Message/TableMessage/TableMessage.tsx +18 -2
  282. package/src/Message/TextMessage/TextMessage.scss +12 -0
  283. package/src/Message/TextMessage/TextMessage.tsx +29 -2
  284. package/src/Message/UserFeedback/UserFeedback.scss +28 -1
  285. package/src/Message/UserFeedback/UserFeedback.tsx +23 -13
  286. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +1 -4
  287. package/src/Message/UserFeedback/index.ts +2 -0
  288. package/src/Message/index.ts +8 -0
  289. package/src/MessageBar/AttachButton.scss +0 -1
  290. package/src/MessageBar/MessageBar.scss +63 -7
  291. package/src/MessageBar/MessageBar.test.tsx +39 -0
  292. package/src/MessageBar/MessageBar.tsx +124 -48
  293. package/src/MessageBar/MicrophoneButton.scss +0 -1
  294. package/src/MessageBar/SendButton.scss +0 -1
  295. package/src/MessageBar/StopButton.scss +0 -1
  296. package/src/Onboarding/Onboarding.scss +101 -0
  297. package/src/Onboarding/Onboarding.test.tsx +148 -0
  298. package/src/Onboarding/Onboarding.tsx +126 -0
  299. package/src/Onboarding/index.ts +3 -0
  300. package/src/ResponseActions/ResponseActions.scss +12 -1
  301. package/src/ResponseActions/ResponseActions.test.tsx +111 -12
  302. package/src/ResponseActions/ResponseActions.tsx +44 -10
  303. package/src/ResponseActions/ResponseActionsGroups.test.tsx +23 -0
  304. package/src/ResponseActions/ResponseActionsGroups.tsx +28 -0
  305. package/src/ResponseActions/index.ts +1 -0
  306. package/src/ToolCall/ToolCall.scss +1 -1
  307. package/src/ToolCall/ToolCall.test.tsx +91 -0
  308. package/src/ToolCall/ToolCall.tsx +49 -4
  309. package/src/ToolResponse/ToolResponse.scss +13 -3
  310. package/src/ToolResponse/ToolResponse.test.tsx +119 -0
  311. package/src/ToolResponse/ToolResponse.tsx +82 -7
  312. package/src/index.ts +6 -0
  313. package/src/main.scss +2 -0
  314. package/tsconfig.json +1 -1
  315. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +0 -44
@@ -19,6 +19,7 @@ import {
19
19
 
20
20
  import { CheckIcon } from '@patternfly/react-icons/dist/esm/icons/check-icon';
21
21
  import { CopyIcon } from '@patternfly/react-icons/dist/esm/icons/copy-icon';
22
+ import { css } from '@patternfly/react-styles';
22
23
 
23
24
  export interface CodeBlockMessageProps {
24
25
  /** Content rendered in code block */
@@ -41,6 +42,8 @@ export interface CodeBlockMessageProps {
41
42
  customActions?: React.ReactNode;
42
43
  /** Sets background colors to be appropriate on primary chatbot background */
43
44
  isPrimary?: boolean;
45
+ /** Flag indicating that the content should retain message styles when using Markdown. */
46
+ shouldRetainStyles?: boolean;
44
47
  }
45
48
 
46
49
  const DEFAULT_EXPANDED_TEXT = 'Show less';
@@ -57,6 +60,7 @@ const CodeBlockMessage = ({
57
60
  collapsedText = DEFAULT_COLLAPSED_TEXT,
58
61
  customActions,
59
62
  isPrimary,
63
+ shouldRetainStyles,
60
64
  ...props
61
65
  }: CodeBlockMessageProps) => {
62
66
  const [copied, setCopied] = useState(false);
@@ -88,13 +92,22 @@ const CodeBlockMessage = ({
88
92
  );
89
93
  }
90
94
 
91
- const onToggle = (isExpanded) => {
95
+ const onToggle = (isExpanded: boolean) => {
92
96
  setIsExpanded(isExpanded);
93
97
  };
94
98
 
95
99
  // Handle clicking copy button
96
- const handleCopy = useCallback((event, text) => {
97
- navigator.clipboard.writeText(text.toString());
100
+ const handleCopy = useCallback((_event: React.MouseEvent, text: React.ReactNode) => {
101
+ let textToCopy = '';
102
+ if (typeof text === 'string') {
103
+ textToCopy = text;
104
+ } else {
105
+ if (codeBlockRef.current) {
106
+ const codeElement = codeBlockRef.current.querySelector('code');
107
+ textToCopy = codeElement?.textContent || '';
108
+ }
109
+ }
110
+ navigator.clipboard.writeText(textToCopy);
98
111
  setCopied(true);
99
112
  }, []);
100
113
 
@@ -138,7 +151,7 @@ const CodeBlockMessage = ({
138
151
  );
139
152
 
140
153
  return (
141
- <div className="pf-chatbot__message-code-block" ref={codeBlockRef}>
154
+ <div className={css('pf-chatbot__message-code-block', shouldRetainStyles && 'pf-m-markdown')} ref={codeBlockRef}>
142
155
  <CodeBlock actions={actions}>
143
156
  <CodeBlockCode>
144
157
  <>
@@ -0,0 +1,38 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import '@testing-library/jest-dom';
3
+ import ErrorMessage from './ErrorMessage';
4
+
5
+ test('Renders with title', () => {
6
+ render(<ErrorMessage title="Error occurred" />);
7
+
8
+ expect(screen.getByText('Error occurred')).toBeVisible();
9
+ });
10
+
11
+ test('Renders with children', () => {
12
+ render(<ErrorMessage title="Error occurred">This is the error message body</ErrorMessage>);
13
+
14
+ expect(screen.getByText('This is the error message body')).toBeVisible();
15
+ });
16
+
17
+ test('Renders with action links', () => {
18
+ const actionLinks = (
19
+ <a href="#retry" data-testid="retry-link">
20
+ Retry action link
21
+ </a>
22
+ );
23
+ render(<ErrorMessage title="Error occurred" actionLinks={actionLinks} />);
24
+
25
+ expect(screen.getByText('Retry action link')).toBeVisible();
26
+ });
27
+
28
+ test('Renders with custom className', () => {
29
+ render(<ErrorMessage title="Error occurred" className="custom-error-class" />);
30
+
31
+ expect(screen.getByText('Error occurred').parentElement).toHaveClass('custom-error-class');
32
+ });
33
+
34
+ test('Renders with spread props', () => {
35
+ render(<ErrorMessage title="Error occurred" id="test-error-id" />);
36
+
37
+ expect(screen.getByText('Error occurred').parentElement).toHaveAttribute('id', 'test-error-id');
38
+ });
@@ -4,8 +4,23 @@
4
4
 
5
5
  import { Alert, AlertProps } from '@patternfly/react-core';
6
6
 
7
- const ErrorMessage = ({ title, actionLinks, children, ...props }: AlertProps) => (
8
- <Alert isInline variant="danger" title={title} actionLinks={actionLinks} {...props}>
7
+ /**
8
+ * ErrorMessage displays an inline danger alert for error states in messages.
9
+ * Use this component when passing children to Message to display error information.
10
+ */
11
+ export interface ErrorMessageProps extends Partial<AlertProps> {
12
+ /** Content to display in the error alert body */
13
+ children?: React.ReactNode;
14
+ /** Additional classes for the error alert */
15
+ className?: string;
16
+ /** Title of the error alert */
17
+ title?: React.ReactNode;
18
+ /** Action links to display in the alert footer */
19
+ actionLinks?: React.ReactNode;
20
+ }
21
+
22
+ export const ErrorMessage = ({ title, actionLinks, children, className, ...props }: ErrorMessageProps) => (
23
+ <Alert isInline variant="danger" title={title} actionLinks={actionLinks} className={className} {...props}>
9
24
  {children}
10
25
  </Alert>
11
26
  );
@@ -0,0 +1,5 @@
1
+ .pf-v6-c-button.pf-m-link.pf-m-inline {
2
+ &.pf-m-markdown {
3
+ font-size: inherit;
4
+ }
5
+ }
@@ -5,8 +5,21 @@
5
5
  import { Button, ButtonProps } from '@patternfly/react-core';
6
6
  import { ExternalLinkSquareAltIcon } from '@patternfly/react-icons';
7
7
  import { ExtraProps } from 'react-markdown';
8
+ import { css } from '@patternfly/react-styles';
8
9
 
9
- const LinkMessage = ({ children, target, href, id, ...props }: ButtonProps & ExtraProps) => {
10
+ export interface LinkMessageProps {
11
+ /** Flag indicating that the content should retain message styles when using Markdown. */
12
+ shouldRetainStyles?: boolean;
13
+ }
14
+
15
+ const LinkMessage = ({
16
+ children,
17
+ target,
18
+ href,
19
+ id,
20
+ shouldRetainStyles,
21
+ ...props
22
+ }: LinkMessageProps & ButtonProps & ExtraProps) => {
10
23
  if (target === '_blank') {
11
24
  return (
12
25
  <Button
@@ -20,6 +33,7 @@ const LinkMessage = ({ children, target, href, id, ...props }: ButtonProps & Ext
20
33
  // need to explicitly call this out or id doesn't seem to get passed - required for footnotes
21
34
  id={id}
22
35
  {...props}
36
+ className={css(shouldRetainStyles && 'pf-m-markdown', props?.className)}
23
37
  >
24
38
  {children}
25
39
  </Button>
@@ -28,7 +42,15 @@ const LinkMessage = ({ children, target, href, id, ...props }: ButtonProps & Ext
28
42
 
29
43
  return (
30
44
  // need to explicitly call this out or id doesn't seem to get passed - required for footnotes
31
- <Button isInline component="a" href={href} variant="link" id={id} {...props}>
45
+ <Button
46
+ isInline
47
+ component="a"
48
+ href={href}
49
+ variant="link"
50
+ id={id}
51
+ {...props}
52
+ className={css(shouldRetainStyles && 'pf-m-markdown', props?.className)}
53
+ >
32
54
  {children}
33
55
  </Button>
34
56
  );
@@ -13,6 +13,14 @@
13
13
  li {
14
14
  font-size: var(--pf-t--global--font--size--md);
15
15
  }
16
+
17
+ &.pf-m-markdown {
18
+ .pf-v6-c-list,
19
+ ul,
20
+ li {
21
+ font-size: inherit;
22
+ }
23
+ }
16
24
  }
17
25
 
18
26
  .pf-chatbot__message--user {
@@ -4,9 +4,23 @@
4
4
 
5
5
  import { ExtraProps } from 'react-markdown';
6
6
  import { List, ListComponent, OrderType } from '@patternfly/react-core';
7
+ import { css } from '@patternfly/react-styles';
7
8
 
8
- const OrderedListMessage = ({ children, start }: JSX.IntrinsicElements['ol'] & ExtraProps) => (
9
- <div className="pf-chatbot__message-ordered-list">
9
+ export interface OrderedListMessageProps {
10
+ /** The ordered list content */
11
+ children?: React.ReactNode;
12
+ /** The number to start the ordered list at. */
13
+ start?: number;
14
+ /** Flag indicating that the content should retain message styles when using Markdown. */
15
+ shouldRetainStyles?: boolean;
16
+ }
17
+
18
+ const OrderedListMessage = ({
19
+ children,
20
+ start,
21
+ shouldRetainStyles
22
+ }: OrderedListMessageProps & JSX.IntrinsicElements['ol'] & ExtraProps) => (
23
+ <div className={css('pf-chatbot__message-ordered-list', shouldRetainStyles && 'pf-m-markdown')}>
10
24
  <List component={ListComponent.ol} type={OrderType.number} start={start}>
11
25
  {children}
12
26
  </List>
@@ -4,9 +4,19 @@
4
4
 
5
5
  import { ExtraProps } from 'react-markdown';
6
6
  import { List } from '@patternfly/react-core';
7
+ import { css } from '@patternfly/react-styles';
8
+ export interface UnrderedListMessageProps {
9
+ /** The ordered list content */
10
+ children?: React.ReactNode;
11
+ /** Flag indicating that the content should retain message styles when using Markdown. */
12
+ shouldRetainStyles?: boolean;
13
+ }
7
14
 
8
- const UnorderedListMessage = ({ children }: JSX.IntrinsicElements['ul'] & ExtraProps) => (
9
- <div className="pf-chatbot__message-unordered-list">
15
+ const UnorderedListMessage = ({
16
+ children,
17
+ shouldRetainStyles
18
+ }: UnrderedListMessageProps & JSX.IntrinsicElements['ul'] & ExtraProps) => (
19
+ <div className={css('pf-chatbot__message-unordered-list', shouldRetainStyles && 'pf-m-markdown')}>
10
20
  <List>{children}</List>
11
21
  </div>
12
22
  );
@@ -5,7 +5,7 @@
5
5
  display: flex;
6
6
  align-items: flex-start;
7
7
  gap: var(--pf-t--global--spacer--lg);
8
- padding-bottom: var(--pf-t--global--spacer--xl);
8
+ padding-bottom: var(--pf-t--global--spacer--lg);
9
9
 
10
10
  // Avatar
11
11
  // --------------------------------------------------------------------------
@@ -18,8 +18,10 @@
18
18
  }
19
19
 
20
20
  &-avatar.pf-chatbot__message-avatar--round.pf-v6-c-avatar {
21
- --pf-v6-c-avatar--Width: 3rem;
22
- --pf-v6-c-avatar--Height: 3rem;
21
+ &:not(.pf-m-xl, .pf-m-lg, .pf-m-md, .pf-m-sm) {
22
+ --pf-v6-c-avatar--Width: 3rem;
23
+ --pf-v6-c-avatar--Height: 3rem;
24
+ }
23
25
  --pf-v6-c-avatar--BorderRadius: var(--pf-t--global--border--radius--pill);
24
26
  }
25
27
 
@@ -156,8 +158,8 @@
156
158
  // ============================================================================
157
159
  .pf-chatbot.pf-m-compact {
158
160
  .pf-chatbot__message {
159
- gap: var(--pf-t--global--spacer--md);
160
- padding-bottom: var(--pf-t--global--spacer--sm);
161
+ gap: var(--pf-t--global--spacer--sm);
162
+ padding-bottom: var(--pf-t--global--spacer--md);
161
163
 
162
164
  .pf-chatbot__message-contents  {
163
165
  gap: var(--pf-t--global--spacer--xs);
@@ -169,8 +171,10 @@
169
171
  }
170
172
 
171
173
  .pf-chatbot__message-avatar.pf-chatbot__message-avatar--round.pf-v6-c-avatar {
172
- --pf-v6-c-avatar--Width: 2rem;
173
- --pf-v6-c-avatar--Height: 2rem;
174
+ &:not(.pf-m-xl, .pf-m-lg, .pf-m-md, .pf-m-sm) {
175
+ --pf-v6-c-avatar--Width: 1.5rem;
176
+ --pf-v6-c-avatar--Height: 1.5rem;
177
+ }
174
178
  }
175
179
 
176
180
  .pf-chatbot__message-contents {
@@ -228,6 +228,10 @@ describe('Message', () => {
228
228
  render(<Message avatar="./testImg" role="bot" name="Bot" content="Hi" />);
229
229
  expect(screen.getByRole('img')).toHaveAttribute('src', './testImg');
230
230
  });
231
+ it('should not render avatar if no avatar prop is passed', () => {
232
+ render(<Message role="bot" name="Bot" content="Hi" />);
233
+ expect(screen.queryByRole('img')).not.toBeInTheDocument();
234
+ });
231
235
  it('should render botWord correctly', () => {
232
236
  render(<Message avatar="./img" role="bot" name="Bot" content="Hi" botWord="人工知能" />);
233
237
  expect(screen.getByText('Bot')).toBeTruthy();
@@ -433,7 +437,7 @@ describe('Message', () => {
433
437
  expect(screen.queryByRole('button', { name: /No/i })).toBeFalsy();
434
438
  expect(screen.getByRole('button', { name: /1 more/i }));
435
439
  });
436
- it('should be able to show actions', async () => {
440
+ it('Renders response actions when a single actions object is passed', async () => {
437
441
  render(
438
442
  <Message
439
443
  avatar="./img"
@@ -459,9 +463,204 @@ describe('Message', () => {
459
463
  />
460
464
  );
461
465
  ALL_ACTIONS.forEach(({ label }) => {
462
- expect(screen.getByRole('button', { name: label })).toBeTruthy();
466
+ expect(screen.getByRole('button', { name: label })).toBeVisible();
467
+ });
468
+ });
469
+ it('Renders response actions when an array of actions objects is passed', async () => {
470
+ render(
471
+ <Message
472
+ avatar="./img"
473
+ role="bot"
474
+ name="Bot"
475
+ content="Hi"
476
+ actions={[
477
+ {
478
+ // eslint-disable-next-line no-console
479
+ positive: { onClick: () => console.log('Good response') },
480
+ // eslint-disable-next-line no-console
481
+ negative: { onClick: () => console.log('Bad response') }
482
+ },
483
+ {
484
+ // eslint-disable-next-line no-console
485
+ copy: { onClick: () => console.log('Copy') },
486
+ // eslint-disable-next-line no-console
487
+ edit: { onClick: () => console.log('Edit') },
488
+ // eslint-disable-next-line no-console
489
+ share: { onClick: () => console.log('Share') },
490
+ // eslint-disable-next-line no-console
491
+ download: { onClick: () => console.log('Download') }
492
+ },
493
+ {
494
+ // eslint-disable-next-line no-console
495
+ listen: { onClick: () => console.log('Listen') }
496
+ }
497
+ ]}
498
+ />
499
+ );
500
+ ALL_ACTIONS.forEach(({ label }) => {
501
+ expect(screen.getByRole('button', { name: label })).toBeVisible();
502
+ });
503
+ });
504
+ it('Renders response actions when an array of objects containing actions objects is passed', async () => {
505
+ render(
506
+ <Message
507
+ avatar="./img"
508
+ role="bot"
509
+ name="Bot"
510
+ content="Hi"
511
+ actions={[
512
+ {
513
+ actions: {
514
+ // eslint-disable-next-line no-console
515
+ positive: { onClick: () => console.log('Good response') },
516
+ // eslint-disable-next-line no-console
517
+ negative: { onClick: () => console.log('Bad response') }
518
+ }
519
+ },
520
+ {
521
+ actions: {
522
+ // eslint-disable-next-line no-console
523
+ copy: { onClick: () => console.log('Copy') },
524
+ // eslint-disable-next-line no-console
525
+ edit: { onClick: () => console.log('Edit') },
526
+ // eslint-disable-next-line no-console
527
+ share: { onClick: () => console.log('Share') },
528
+ // eslint-disable-next-line no-console
529
+ download: { onClick: () => console.log('Download') }
530
+ }
531
+ },
532
+ {
533
+ actions: {
534
+ // eslint-disable-next-line no-console
535
+ listen: { onClick: () => console.log('Listen') }
536
+ }
537
+ }
538
+ ]}
539
+ />
540
+ );
541
+ ALL_ACTIONS.forEach(({ label }) => {
542
+ expect(screen.getByRole('button', { name: label })).toBeVisible();
463
543
  });
464
544
  });
545
+
546
+ it('should handle persistActionSelection correctly when a single actions object is passed', async () => {
547
+ render(
548
+ <Message
549
+ avatar="./img"
550
+ role="bot"
551
+ name="Bot"
552
+ content="Test message"
553
+ persistActionSelection
554
+ actions={{
555
+ positive: { onClick: jest.fn() },
556
+ negative: { onClick: jest.fn() }
557
+ }}
558
+ />
559
+ );
560
+ const goodBtn = screen.getByRole('button', { name: /Good response/i });
561
+ const badBtn = screen.getByRole('button', { name: /Bad response/i });
562
+
563
+ await userEvent.click(goodBtn);
564
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
565
+ 'pf-chatbot__button--response-action-clicked'
566
+ );
567
+
568
+ await userEvent.click(screen.getByText('Test message'));
569
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
570
+ 'pf-chatbot__button--response-action-clicked'
571
+ );
572
+
573
+ await userEvent.click(badBtn);
574
+ expect(screen.getByRole('button', { name: /Bad response recorded/i })).toHaveClass(
575
+ 'pf-chatbot__button--response-action-clicked'
576
+ );
577
+ expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
578
+ });
579
+
580
+ it('should handle persistActionSelection correctly when an array of actions objects is passed', async () => {
581
+ render(
582
+ <Message
583
+ avatar="./img"
584
+ role="bot"
585
+ name="Bot"
586
+ content="Test message"
587
+ persistActionSelection
588
+ actions={[
589
+ {
590
+ positive: { onClick: jest.fn() },
591
+ negative: { onClick: jest.fn() }
592
+ },
593
+ {
594
+ copy: { onClick: jest.fn() }
595
+ }
596
+ ]}
597
+ />
598
+ );
599
+ const goodBtn = screen.getByRole('button', { name: /Good response/i });
600
+ const copyBtn = screen.getByRole('button', { name: /Copy/i });
601
+
602
+ await userEvent.click(goodBtn);
603
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
604
+ 'pf-chatbot__button--response-action-clicked'
605
+ );
606
+
607
+ await userEvent.click(screen.getByText('Test message'));
608
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
609
+ 'pf-chatbot__button--response-action-clicked'
610
+ );
611
+
612
+ await userEvent.click(copyBtn);
613
+ expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
614
+
615
+ await userEvent.click(screen.getByText('Test message'));
616
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
617
+ 'pf-chatbot__button--response-action-clicked'
618
+ );
619
+ expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
620
+ });
621
+
622
+ it('should handle persistActionSelection correctly when an array of objects containing actions objects is passed', async () => {
623
+ render(
624
+ <Message
625
+ avatar="./img"
626
+ role="bot"
627
+ name="Bot"
628
+ content="Test message"
629
+ actions={[
630
+ {
631
+ actions: {
632
+ positive: { onClick: jest.fn() },
633
+ negative: { onClick: jest.fn() }
634
+ },
635
+ persistActionSelection: true
636
+ },
637
+ {
638
+ actions: {
639
+ copy: { onClick: jest.fn() }
640
+ },
641
+ persistActionSelection: false
642
+ }
643
+ ]}
644
+ />
645
+ );
646
+ const goodBtn = screen.getByRole('button', { name: /Good response/i });
647
+ const copyBtn = screen.getByRole('button', { name: /Copy/i });
648
+
649
+ await userEvent.click(goodBtn);
650
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
651
+ 'pf-chatbot__button--response-action-clicked'
652
+ );
653
+
654
+ await userEvent.click(copyBtn);
655
+ expect(screen.getByRole('button', { name: /Copied/i })).toHaveClass('pf-chatbot__button--response-action-clicked');
656
+
657
+ await userEvent.click(screen.getByText('Test message'));
658
+ expect(screen.getByRole('button', { name: /Good response recorded/i })).toHaveClass(
659
+ 'pf-chatbot__button--response-action-clicked'
660
+ );
661
+ expect(copyBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
662
+ });
663
+
465
664
  it('should not show actions if loading', async () => {
466
665
  render(
467
666
  <Message
@@ -523,6 +722,7 @@ describe('Message', () => {
523
722
  expect(screen.queryByRole('button', { name: label })).toBeFalsy();
524
723
  });
525
724
  });
725
+
526
726
  it('should render unordered lists correctly', () => {
527
727
  render(<Message avatar="./img" role="user" name="User" content={UNORDERED_LIST} />);
528
728
  expect(screen.getByText('Here is an unordered list:')).toBeTruthy();