@patternfly/chatbot 6.5.0-prerelease.9 → 6.5.0

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 (314) 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 +4 -0
  77. package/dist/cjs/MessageBar/MessageBar.js +20 -5
  78. package/dist/cjs/MessageBar/MessageBar.test.js +8 -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 +264 -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 +4 -0
  182. package/dist/esm/MessageBar/MessageBar.js +20 -5
  183. package/dist/esm/MessageBar/MessageBar.test.js +8 -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/ChatbotMessageBarIndicatorThinking.tsx +15 -0
  229. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactOnboarding.tsx +141 -0
  230. package/patternfly-docs/content/extensions/chatbot/examples/UI/Onboarding.tsx +151 -0
  231. package/patternfly-docs/content/extensions/chatbot/examples/UI/RH-Hat-Image.svg +9 -0
  232. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +67 -29
  233. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +18 -18
  234. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +33 -19
  235. package/patternfly-docs/patternfly-docs.config.js +1 -1
  236. package/patternfly-docs/patternfly-docs.source.js +1 -1
  237. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +43 -0
  238. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +95 -0
  239. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +51 -15
  240. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +56 -14
  241. package/src/ChatbotModal/ChatbotModal.scss +3 -0
  242. package/src/CodeModal/CodeModal.tsx +71 -26
  243. package/src/DeepThinking/DeepThinking.scss +1 -1
  244. package/src/DeepThinking/DeepThinking.test.tsx +109 -0
  245. package/src/DeepThinking/DeepThinking.tsx +54 -5
  246. package/src/MarkdownContent/MarkdownContent.test.tsx +207 -0
  247. package/src/MarkdownContent/MarkdownContent.tsx +269 -0
  248. package/src/MarkdownContent/index.ts +2 -0
  249. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +13 -0
  250. package/src/Message/CodeBlockMessage/CodeBlockMessage.test.tsx +171 -0
  251. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +17 -4
  252. package/src/Message/ErrorMessage/ErrorMessage.test.tsx +38 -0
  253. package/src/Message/ErrorMessage/ErrorMessage.tsx +17 -2
  254. package/src/Message/LinkMessage/LinkMessage.scss +5 -0
  255. package/src/Message/LinkMessage/LinkMessage.tsx +24 -2
  256. package/src/Message/ListMessage/ListMessage.scss +8 -0
  257. package/src/Message/ListMessage/OrderedListMessage.tsx +16 -2
  258. package/src/Message/ListMessage/UnorderedListMessage.tsx +12 -2
  259. package/src/Message/Message.scss +11 -7
  260. package/src/Message/Message.test.tsx +202 -2
  261. package/src/Message/Message.tsx +129 -241
  262. package/src/Message/MessageAndActions/MessageAndActions.test.tsx +23 -0
  263. package/src/Message/MessageAndActions/MessageAndActions.tsx +22 -0
  264. package/src/Message/MessageAndActions/index.ts +1 -0
  265. package/src/Message/MessageAttachments/MessageAttachmentItem.test.tsx +23 -0
  266. package/src/Message/MessageAttachments/MessageAttachmentItem.tsx +25 -0
  267. package/src/Message/MessageAttachments/MessageAttachmentsContainer.test.tsx +23 -0
  268. package/src/Message/MessageAttachments/MessageAttachmentsContainer.tsx +25 -0
  269. package/src/Message/MessageAttachments/index.ts +2 -0
  270. package/src/Message/MessageInput.tsx +1 -1
  271. package/src/Message/MessageLoading.test.tsx +23 -0
  272. package/src/Message/MessageLoading.tsx +17 -2
  273. package/src/Message/QuickResponse/QuickResponse.scss +3 -1
  274. package/src/Message/QuickResponse/QuickResponse.test.tsx +131 -0
  275. package/src/Message/QuickResponse/QuickResponse.tsx +3 -2
  276. package/src/Message/QuickResponse/index.ts +1 -0
  277. package/src/Message/QuickStarts/QuickStartTile.tsx +1 -1
  278. package/src/Message/QuickStarts/index.ts +2 -0
  279. package/src/Message/TableMessage/TableMessage.scss +13 -1
  280. package/src/Message/TableMessage/TableMessage.tsx +18 -2
  281. package/src/Message/TextMessage/TextMessage.scss +12 -0
  282. package/src/Message/TextMessage/TextMessage.tsx +29 -2
  283. package/src/Message/UserFeedback/UserFeedback.scss +28 -1
  284. package/src/Message/UserFeedback/UserFeedback.tsx +23 -13
  285. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +1 -4
  286. package/src/Message/UserFeedback/index.ts +2 -0
  287. package/src/Message/index.ts +8 -0
  288. package/src/MessageBar/AttachButton.scss +0 -1
  289. package/src/MessageBar/MessageBar.scss +48 -6
  290. package/src/MessageBar/MessageBar.test.tsx +12 -0
  291. package/src/MessageBar/MessageBar.tsx +38 -4
  292. package/src/MessageBar/MicrophoneButton.scss +0 -1
  293. package/src/MessageBar/SendButton.scss +0 -1
  294. package/src/MessageBar/StopButton.scss +0 -1
  295. package/src/Onboarding/Onboarding.scss +101 -0
  296. package/src/Onboarding/Onboarding.test.tsx +148 -0
  297. package/src/Onboarding/Onboarding.tsx +126 -0
  298. package/src/Onboarding/index.ts +3 -0
  299. package/src/ResponseActions/ResponseActions.scss +12 -1
  300. package/src/ResponseActions/ResponseActions.test.tsx +111 -12
  301. package/src/ResponseActions/ResponseActions.tsx +44 -10
  302. package/src/ResponseActions/ResponseActionsGroups.test.tsx +23 -0
  303. package/src/ResponseActions/ResponseActionsGroups.tsx +28 -0
  304. package/src/ResponseActions/index.ts +1 -0
  305. package/src/ToolCall/ToolCall.scss +1 -1
  306. package/src/ToolCall/ToolCall.test.tsx +91 -0
  307. package/src/ToolCall/ToolCall.tsx +49 -4
  308. package/src/ToolResponse/ToolResponse.scss +13 -3
  309. package/src/ToolResponse/ToolResponse.test.tsx +119 -0
  310. package/src/ToolResponse/ToolResponse.tsx +82 -7
  311. package/src/index.ts +6 -0
  312. package/src/main.scss +2 -0
  313. package/tsconfig.json +1 -1
  314. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +0 -44
@@ -23,113 +23,230 @@ export const MessageWithToolResponseExample: FunctionComponent = () => {
23
23
  };
24
24
 
25
25
  return (
26
- <Message
27
- name="Bot"
28
- role="bot"
29
- avatar={patternflyAvatar}
30
- content="This example has a body description that's within the recommended limit of 2 lines:"
31
- toolResponse={{
32
- toggleContent: 'Tool response: toolName',
33
- subheading: 'Thought for 3 seconds',
34
- body: "Here's the summary for your toolName response:",
35
- cardTitle: (
36
- <Flex alignItems={{ default: 'alignItemsCenter' }} justifyContent={{ default: 'justifyContentSpaceBetween' }}>
37
- <FlexItem>
38
- <Flex direction={{ default: 'column' }} gap={{ default: 'gapXs' }}>
39
- <FlexItem grow={{ default: 'grow' }}>
40
- <Flex gap={{ default: 'gapXs' }}>
41
- <FlexItem>
42
- <WrenchIcon style={{ color: 'var(--pf-t--global--icon--color--brand--default' }} />
43
- </FlexItem>
44
- <FlexItem>toolName</FlexItem>
45
- </Flex>
46
- </FlexItem>
47
- <FlexItem>
48
- <Flex gap={{ default: 'gapSm' }} style={{ fontSize: '12px', fontWeight: '400' }}>
49
- <FlexItem>Execution time:</FlexItem>
50
- <FlexItem>0.12 seconds</FlexItem>
51
- </Flex>
52
- </FlexItem>
53
- </Flex>
54
- </FlexItem>
55
- <FlexItem>
56
- <Button
57
- variant="plain"
58
- aria-label="Copy tool response to clipboard"
59
- icon={<CopyIcon style={{ color: 'var(--pf-t--global--icon--color--subtle)' }} />}
60
- ></Button>
61
- </FlexItem>
62
- </Flex>
63
- ),
64
- cardBody: (
65
- <>
66
- <DescriptionList
67
- style={{ '--pf-v6-c-description-list--RowGap': 'var(--pf-t--global--spacer--md)' } as any}
68
- aria-label="Tool response"
26
+ <>
27
+ <Message
28
+ name="Bot"
29
+ role="bot"
30
+ avatar={patternflyAvatar}
31
+ content="This message has a body description that's within the recommended limit of 2 lines:"
32
+ toolResponse={{
33
+ toggleContent: 'Tool response: toolName',
34
+ subheading: 'Thought for 3 seconds',
35
+ body: "Here's the summary for your toolName response:",
36
+ cardTitle: (
37
+ <Flex
38
+ alignItems={{ default: 'alignItemsCenter' }}
39
+ justifyContent={{ default: 'justifyContentSpaceBetween' }}
69
40
  >
70
- <DescriptionListGroup
71
- style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
41
+ <FlexItem>
42
+ <Flex direction={{ default: 'column' }} gap={{ default: 'gapXs' }}>
43
+ <FlexItem grow={{ default: 'grow' }}>
44
+ <Flex gap={{ default: 'gapXs' }}>
45
+ <FlexItem>
46
+ <WrenchIcon style={{ color: 'var(--pf-t--global--icon--color--brand--default' }} />
47
+ </FlexItem>
48
+ <FlexItem>toolName</FlexItem>
49
+ </Flex>
50
+ </FlexItem>
51
+ <FlexItem>
52
+ <Flex gap={{ default: 'gapSm' }} style={{ fontSize: '12px', fontWeight: '400' }}>
53
+ <FlexItem>Execution time:</FlexItem>
54
+ <FlexItem>0.12 seconds</FlexItem>
55
+ </Flex>
56
+ </FlexItem>
57
+ </Flex>
58
+ </FlexItem>
59
+ <FlexItem>
60
+ <Button
61
+ variant="plain"
62
+ aria-label="Copy tool response to clipboard"
63
+ icon={<CopyIcon style={{ color: 'var(--pf-t--global--icon--color--subtle)' }} />}
64
+ ></Button>
65
+ </FlexItem>
66
+ </Flex>
67
+ ),
68
+ cardBody: (
69
+ <>
70
+ <DescriptionList
71
+ style={{ '--pf-v6-c-description-list--RowGap': 'var(--pf-t--global--spacer--md)' } as any}
72
+ aria-label="Tool response"
72
73
  >
73
- <DescriptionListTerm>Parameters</DescriptionListTerm>
74
- <DescriptionListDescription>
75
- <Flex direction={{ default: 'column' }}>
76
- <FlexItem>Optional description text for parameters.</FlexItem>
77
- <FlexItem>
78
- <Flex gap={{ default: 'gapSm' }}>
79
- <FlexItem>
80
- <Label variant="outline" color="blue">
81
- type
82
- </Label>
83
- </FlexItem>
84
- <FlexItem>
85
- <Label variant="outline" color="blue">
86
- properties
87
- </Label>
88
- </FlexItem>
89
- <FlexItem>
90
- <Label variant="outline" color="blue">
91
- label
92
- </Label>
93
- </FlexItem>
94
- <FlexItem>
95
- <Label variant="outline" color="blue">
96
- label
97
- </Label>
98
- </FlexItem>
99
- </Flex>
100
- </FlexItem>
101
- </Flex>
102
- </DescriptionListDescription>
103
- </DescriptionListGroup>
104
- <DescriptionListGroup
105
- style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
74
+ <DescriptionListGroup
75
+ style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
76
+ >
77
+ <DescriptionListTerm>Parameters</DescriptionListTerm>
78
+ <DescriptionListDescription>
79
+ <Flex direction={{ default: 'column' }}>
80
+ <FlexItem>Optional description text for parameters.</FlexItem>
81
+ <FlexItem>
82
+ <Flex gap={{ default: 'gapSm' }}>
83
+ <FlexItem>
84
+ <Label variant="outline" color="blue">
85
+ type
86
+ </Label>
87
+ </FlexItem>
88
+ <FlexItem>
89
+ <Label variant="outline" color="blue">
90
+ properties
91
+ </Label>
92
+ </FlexItem>
93
+ <FlexItem>
94
+ <Label variant="outline" color="blue">
95
+ label
96
+ </Label>
97
+ </FlexItem>
98
+ <FlexItem>
99
+ <Label variant="outline" color="blue">
100
+ label
101
+ </Label>
102
+ </FlexItem>
103
+ </Flex>
104
+ </FlexItem>
105
+ </Flex>
106
+ </DescriptionListDescription>
107
+ </DescriptionListGroup>
108
+ <DescriptionListGroup
109
+ style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
110
+ >
111
+ <DescriptionListTerm>Response</DescriptionListTerm>
112
+ <DescriptionListDescription>
113
+ <ExpandableSection
114
+ variant={ExpandableSectionVariant.truncate}
115
+ toggleTextExpanded="show less of response"
116
+ toggleTextCollapsed="show more of response"
117
+ onToggle={onToggle}
118
+ isExpanded={isExpanded}
119
+ style={
120
+ {
121
+ '--pf-v6-c-expandable-section__content--Opacity': '1',
122
+ '--pf-v6-c-expandable-section__content--PaddingInlineStart': 0,
123
+ '--pf-v6-c-expandable-section__content--TranslateY': 0,
124
+ '--pf-v6-c-expandable-section--m-expand-top__content--TranslateY': 0
125
+ } as any
126
+ }
127
+ >
128
+ Descriptive text about the tool response, including completion status, details on the data that
129
+ was processed, or anything else relevant to the use case.
130
+ </ExpandableSection>
131
+ </DescriptionListDescription>
132
+ </DescriptionListGroup>
133
+ </DescriptionList>
134
+ </>
135
+ )
136
+ }}
137
+ />
138
+ <Message
139
+ name="Bot"
140
+ role="bot"
141
+ avatar={patternflyAvatar}
142
+ content="This message has a tool response that is collapsed by default:"
143
+ toolResponse={{
144
+ isDefaultExpanded: false,
145
+ toggleContent: 'Tool response: toolName',
146
+ subheading: 'Thought for 3 seconds',
147
+ body: "Here's the summary for your toolName response:",
148
+ cardTitle: (
149
+ <Flex
150
+ alignItems={{ default: 'alignItemsCenter' }}
151
+ justifyContent={{ default: 'justifyContentSpaceBetween' }}
152
+ >
153
+ <FlexItem>
154
+ <Flex direction={{ default: 'column' }} gap={{ default: 'gapXs' }}>
155
+ <FlexItem grow={{ default: 'grow' }}>
156
+ <Flex gap={{ default: 'gapXs' }}>
157
+ <FlexItem>
158
+ <WrenchIcon style={{ color: 'var(--pf-t--global--icon--color--brand--default' }} />
159
+ </FlexItem>
160
+ <FlexItem>toolName</FlexItem>
161
+ </Flex>
162
+ </FlexItem>
163
+ <FlexItem>
164
+ <Flex gap={{ default: 'gapSm' }} style={{ fontSize: '12px', fontWeight: '400' }}>
165
+ <FlexItem>Execution time:</FlexItem>
166
+ <FlexItem>0.12 seconds</FlexItem>
167
+ </Flex>
168
+ </FlexItem>
169
+ </Flex>
170
+ </FlexItem>
171
+ <FlexItem>
172
+ <Button
173
+ variant="plain"
174
+ aria-label="Copy tool response to clipboard"
175
+ icon={<CopyIcon style={{ color: 'var(--pf-t--global--icon--color--subtle)' }} />}
176
+ ></Button>
177
+ </FlexItem>
178
+ </Flex>
179
+ ),
180
+ cardBody: (
181
+ <>
182
+ <DescriptionList
183
+ style={{ '--pf-v6-c-description-list--RowGap': 'var(--pf-t--global--spacer--md)' } as any}
184
+ aria-label="Tool response"
106
185
  >
107
- <DescriptionListTerm>Response</DescriptionListTerm>
108
- <DescriptionListDescription>
109
- <ExpandableSection
110
- variant={ExpandableSectionVariant.truncate}
111
- toggleTextExpanded="show less of response"
112
- toggleTextCollapsed="show more of response"
113
- onToggle={onToggle}
114
- isExpanded={isExpanded}
115
- style={
116
- {
117
- '--pf-v6-c-expandable-section__content--Opacity': '1',
118
- '--pf-v6-c-expandable-section__content--PaddingInlineStart': 0,
119
- '--pf-v6-c-expandable-section__content--TranslateY': 0,
120
- '--pf-v6-c-expandable-section--m-expand-top__content--TranslateY': 0
121
- } as any
122
- }
123
- >
124
- Descriptive text about the tool response, including completion status, details on the data that was
125
- processed, or anything else relevant to the use case.
126
- </ExpandableSection>
127
- </DescriptionListDescription>
128
- </DescriptionListGroup>
129
- </DescriptionList>
130
- </>
131
- )
132
- }}
133
- />
186
+ <DescriptionListGroup
187
+ style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
188
+ >
189
+ <DescriptionListTerm>Parameters</DescriptionListTerm>
190
+ <DescriptionListDescription>
191
+ <Flex direction={{ default: 'column' }}>
192
+ <FlexItem>Optional description text for parameters.</FlexItem>
193
+ <FlexItem>
194
+ <Flex gap={{ default: 'gapSm' }}>
195
+ <FlexItem>
196
+ <Label variant="outline" color="blue">
197
+ type
198
+ </Label>
199
+ </FlexItem>
200
+ <FlexItem>
201
+ <Label variant="outline" color="blue">
202
+ properties
203
+ </Label>
204
+ </FlexItem>
205
+ <FlexItem>
206
+ <Label variant="outline" color="blue">
207
+ label
208
+ </Label>
209
+ </FlexItem>
210
+ <FlexItem>
211
+ <Label variant="outline" color="blue">
212
+ label
213
+ </Label>
214
+ </FlexItem>
215
+ </Flex>
216
+ </FlexItem>
217
+ </Flex>
218
+ </DescriptionListDescription>
219
+ </DescriptionListGroup>
220
+ <DescriptionListGroup
221
+ style={{ '--pf-v6-c-description-list__group--RowGap': 'var(--pf-t--global--spacer--xs)' } as any}
222
+ >
223
+ <DescriptionListTerm>Response</DescriptionListTerm>
224
+ <DescriptionListDescription>
225
+ <ExpandableSection
226
+ variant={ExpandableSectionVariant.truncate}
227
+ toggleTextExpanded="show less of response"
228
+ toggleTextCollapsed="show more of response"
229
+ onToggle={onToggle}
230
+ isExpanded={isExpanded}
231
+ style={
232
+ {
233
+ '--pf-v6-c-expandable-section__content--Opacity': '1',
234
+ '--pf-v6-c-expandable-section__content--PaddingInlineStart': 0,
235
+ '--pf-v6-c-expandable-section__content--TranslateY': 0,
236
+ '--pf-v6-c-expandable-section--m-expand-top__content--TranslateY': 0
237
+ } as any
238
+ }
239
+ >
240
+ Descriptive text about the tool response, including completion status, details on the data that
241
+ was processed, or anything else relevant to the use case.
242
+ </ExpandableSection>
243
+ </DescriptionListDescription>
244
+ </DescriptionListGroup>
245
+ </DescriptionList>
246
+ </>
247
+ )
248
+ }}
249
+ />
250
+ </>
134
251
  );
135
252
  };
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  # Sidenav top-level section
3
3
  # should be the same for all markdown files
4
- section: PatternFly-AI
4
+ section: extensions
5
5
  subsection: ChatBot
6
6
  # Sidenav secondary level section
7
7
  # should be the same for all markdown files
@@ -14,24 +14,40 @@ propComponents:
14
14
  [
15
15
  'AttachMenu',
16
16
  'AttachmentEdit',
17
- 'FileDetailsProps',
18
- 'FileDetailsLabelProps',
19
17
  'FileDropZone',
20
- 'PreviewAttachment',
21
18
  'Message',
22
- 'MessageExtraContent',
23
- 'PreviewAttachment',
19
+ 'ErrorMessage',
20
+ 'MessageLoadingProps',
21
+ 'MessageInputProps',
22
+ 'MessageAndActionsProps',
23
+ 'MarkdownContent',
24
+ 'QuickResponseProps',
25
+ 'QuickStartTileProps',
26
+ 'UserFeedback',
27
+ 'UserFeedbackComplete',
28
+ 'DeepThinking',
29
+ 'ToolCall',
30
+ 'ToolResponse',
31
+ 'SourcesCard',
32
+ 'ResponseActionsGroupsProps',
33
+ 'ResponseActionProps',
24
34
  'ActionProps',
25
- 'SourcesCardProps',
26
- 'UserFeedbackProps',
27
- 'UserFeedbackCompleteProps',
28
- 'QuickResponseProps'
35
+ 'MessageAttachmentsContainerProps',
36
+ 'MessageAttachmentItemProps',
37
+ 'FileDetailsProps',
38
+ 'FileDetailsLabelProps',
39
+ 'MessageExtraContent',
40
+ 'PreviewAttachment'
29
41
  ]
30
42
  sortValue: 3
31
43
  ---
32
44
 
33
- import Message from '@patternfly/chatbot/dist/dynamic/Message';
45
+ import Message, { ErrorMessage, MessageAndActions, MessageLoading, MessageAttachmentItem, MessageAttachmentsContainer } from '@patternfly/chatbot/dist/dynamic/Message';
46
+ import MarkdownContent from '@patternfly/chatbot/dist/dynamic/MarkdownContent';
34
47
  import MessageDivider from '@patternfly/chatbot/dist/dynamic/MessageDivider';
48
+ import ToolCall from '@patternfly/chatbot/dist/dynamic/ToolCall';
49
+ import ResponseActions, { ResponseActionsGroups } from '@patternfly/chatbot/dist/dynamic/ResponseActions';
50
+ import ToolResponse from '@patternfly/chatbot/dist/dynamic/ToolResponse';
35
51
  import { rehypeCodeBlockToggle } from '@patternfly/chatbot/dist/esm/Message/Plugins/rehypeCodeBlockToggle';
36
52
  import SourcesCard from '@patternfly/chatbot/dist/dynamic/SourcesCard';
37
53
  import { ArrowCircleDownIcon, ArrowRightIcon, CheckCircleIcon, CopyIcon, CubeIcon, CubesIcon, DownloadIcon, InfoCircleIcon, OutlinedQuestionCircleIcon, RedoIcon, RobotIcon, WrenchIcon } from '@patternfly/react-icons';
@@ -108,6 +124,38 @@ Once the component has rendered, user interactions will take precedence over the
108
124
 
109
125
  ```
110
126
 
127
+ ### Message actions persistent selections
128
+
129
+ By default, message actions will automatically deselect when you click outside the component or on a different action button. To persist the selection instead, set `persistActionSelection` to `true`.
130
+
131
+ When `persistActionSelection` is `true`:
132
+
133
+ - The selected action will remain selected even when you click outside the component.
134
+ - Clicking a different button will still switch the selection to that button.
135
+ - Clicking the same action button again will toggle the selection off, though you will have to move your focus elsewhere to see the visual state change.
136
+
137
+ ```js file="./MessageWithPersistedActions.tsx"
138
+
139
+ ```
140
+
141
+ ### Multiple messsage action groups
142
+
143
+ To maintain finer control over message action selection behavior, you can create groups of actions by passing an array of objects to the `actions` prop. This allows you to separate actions into conceptually or functionally different groups and implement different behavior for each group as needed. For example, you could separate feedback actions (thumbs up/down) form utility actions (copy and download), and have different selection behaviors for each group.
144
+
145
+ To provide flexibility for your use case, there are 2 approaches you can take to pass an array of objects to `actions`:
146
+
147
+ 1. Pass an array of objects, where each object contains:
148
+
149
+ - `actions`: An `action` object containing the actions for that group (the same format as a single `action` object)
150
+
151
+ - `persistActionSelection` (optional): A boolean to control whether selections persists for this specific group
152
+
153
+ 2. Pass an array of `action` objects (the same format as a single `action` object) and (optionally) a value for the `persistActionSelection` property that will apply to all groups.
154
+
155
+ ```js file="./MessageWithMultipleActionGroups.tsx"
156
+
157
+ ```
158
+
111
159
  ### Custom message actions
112
160
 
113
161
  Beyond the standard message actions (good response, bad response, copy, share, or listen), you can add custom actions to a bot message by passing an `actions` object to the `<Message>` component. This object can contain the following customizations:
@@ -130,9 +178,9 @@ You can apply a `clickedAriaLabel` and `clickedTooltipContent` once a button is
130
178
 
131
179
  ### Message feedback
132
180
 
133
- When a user selects a positive or negative [message action](#message-actions), you can display a message feedback card that acknowledges their response and provides space for additional written feedback. These cards can be manually dismissed via the close button and the thank-you card can be [configured to time out automatically](/patternfly-ai/chatbot/messages#message-feedback-with-timeouts).
181
+ When a user selects a positive or negative [message action](#message-actions), you can display a message feedback card that acknowledges their response and provides space for additional written feedback. These cards can be manually dismissed via the close button and the thank-you card can be [configured to time out automatically](/extensions/chatbot/messages#message-feedback-with-timeouts).
134
182
 
135
- You can see the full feedback flow [in the message demos](/patternfly-ai/chatbot/messages/demo#message-feedback).
183
+ You can see the full feedback flow [in the message demos](/extensions/chatbot/messages/demo#message-feedback).
136
184
 
137
185
  The message feedback cards will immediately receive focus by default, but you can remove this behavior by passing `focusOnLoad: false` to the `<Message>` (as shown in the following examples). For better usability, you should generally keep the default focus behavior.
138
186
 
@@ -239,11 +287,40 @@ You can add custom content to specific parts of a `<Message>` via the `extraCont
239
287
 
240
288
  ```
241
289
 
290
+ ### Custom message structure
291
+
292
+ For more advanced use cases, you can build completely custom message structures by passing children directly to `<Message>`. This approach is useful when you need to customize the order or structure of message elements beyond what the standard props allow.
293
+
294
+ When creating custom message structures, you must follow an intended composable structure.
295
+
296
+ 1. **Message content and actions:** Wrap in `<MessageAndActions>`. This includes, but is not limited to:
297
+
298
+ - `<MarkdownContent>`: For rendering markdown or plain text content
299
+ - `<ErrorMessage>`
300
+ - `<MessageLoading>`
301
+ - `<MessageInput>`
302
+ - `<ToolCall>`
303
+ - `<ToolResponse>`
304
+ - `<DeepThinking>`
305
+ - `<QuickResponse>`
306
+ - `<QuickStartTile>`
307
+ - `<UserFeedback>` and `<UserFeedbackComplete>`
308
+ - `<SourcesCard>`
309
+ - `<ResponseActionsGroups>` and `<ResponseActions>`
310
+
311
+ 2. **File attachments:** Placed outside `<MessageAndActions>` and wrapped in attachment containers:
312
+ - `<MessageAttachmentsContainer>`: Container for all attachments
313
+ - `<MessageAttachmentItem>`: Individual attachment wrapper (contains `<FileDetailsLabel>` or other attachment components)
314
+
315
+ ```ts file="./MessageWithCustomStructure.tsx"
316
+
317
+ ```
318
+
242
319
  ## File attachments
243
320
 
244
321
  ### Messages with attachments
245
322
 
246
- When [attachments](/patternfly-ai/chatbot/messages#file-attachments) are shared and displayed in the ChatBot window, users will see a selectable and dismissible message that contains file details in a label. Selecting the file label can open a preview modal, which allows users to view or make edits to the file contents.
323
+ When [attachments](/extensions/chatbot/messages#file-attachments) are shared and displayed in the ChatBot window, users will see a selectable and dismissible message that contains file details in a label. Selecting the file label can open a preview modal, which allows users to view or make edits to the file contents.
247
324
 
248
325
  The `<PreviewAttachment>` component displays a modal with a read-only view of the attached file's contents. Selecting the "edit" button will open the `<AttachmentEdit>` component, which provides an interactive environment where users can make changes to the file.
249
326
 
@@ -317,3 +394,35 @@ An attachment dropzone allows users to upload files via drag and drop.
317
394
  ```js file="./FileDropZone.tsx"
318
395
 
319
396
  ```
397
+
398
+ ## Examples with Markdown
399
+
400
+ The ChatBot supports Markdown formatting in several message components, allowing you to display rich, formatted content. This is particularly useful when you need to include code snippets, lists, emphasis, or other formatted text. The following examples demonstrate different ways you can use Markdown in a few of the ChatBot components, but this is not an exhaustive list of all Markdown customizations you can make.
401
+
402
+ To enable Markdown rendering, use the appropriate Markdown flag prop (such as `isBodyMarkdown`, `isSubheadingMarkdown`, or `isExpandableContentMarkdown`) depending on the component and content you're formatting.
403
+
404
+ **Important:** When using Markdown in these components, set `shouldRetainStyles: true` to retain the styling of the context the Markdown is used in. This ensures that Markdown content maintains the proper font sizes, colors, and other styling properties of its parent component. For example, Markdown passed into a toggle will retain the ChatBot toggle styling, while Markdown in a card body will maintain the appropriate card body styling. Without this prop, the Markdown may override the contextual styles and create inconsistencies with the rest of the ChatBot interface.
405
+
406
+ ### Tool calls with Markdown
407
+
408
+ When displaying tool call information, you can use Markdown in the expandable content to provide formatted details about what the tool is processing. This is useful for showing structured data, code snippets, or formatted lists.
409
+
410
+ ```ts file="./MessageWithMarkdownToolCall.tsx"
411
+
412
+ ```
413
+
414
+ ### Deep thinking with Markdown
415
+
416
+ Deep thinking content can include Markdown formatting in both the subheading and body to better communicate the LLM's reasoning process. This allows you to emphasize key points, structure thought processes with lists, or include other formatting.
417
+
418
+ ```ts file="./MessageWithMarkdownDeepThinking.tsx"
419
+
420
+ ```
421
+
422
+ ### Tool responses with Markdown
423
+
424
+ Tool response cards support Markdown in multiple areas, including the toggle content, subheading, and body. Use `shouldRetainStyles: true` along with the appropriate Markdown flag props to ensure proper formatting and spacing.
425
+
426
+ ```ts file="./MessageWithMarkdownToolResponse.tsx"
427
+
428
+ ```
@@ -333,6 +333,7 @@ _Italic text, formatted with single underscores_
333
333
  avatar={userAvatar}
334
334
  avatarProps={{ isBordered: true }}
335
335
  />
336
+ <Message name="User" role="user" content="This is a user message with no avatar" />
336
337
  <Message
337
338
  name="User"
338
339
  role="user"