@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
@@ -1,4 +1,5 @@
1
1
  import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
2
3
  import '@testing-library/jest-dom';
3
4
  import ToolResponse from './ToolResponse';
4
5
 
@@ -105,4 +106,122 @@ describe('ToolResponse', () => {
105
106
  const { container } = render(<ToolResponse {...defaultProps} cardBody={undefined} />);
106
107
  expect(container.querySelector('.pf-v6-c-divider')).toBeFalsy();
107
108
  });
109
+
110
+ it('Renders expanded by default', () => {
111
+ render(<ToolResponse {...defaultProps} />);
112
+
113
+ expect(screen.getByRole('button', { name: defaultProps.toggleContent })).toHaveAttribute('aria-expanded', 'true');
114
+ expect(screen.getByText(defaultProps.cardTitle)).toBeVisible();
115
+ expect(screen.getByText(defaultProps.cardBody)).toBeVisible();
116
+ });
117
+
118
+ it('Renders collapsed when isDefaultExpanded is false', () => {
119
+ render(<ToolResponse isDefaultExpanded={false} {...defaultProps} />);
120
+
121
+ expect(screen.getByRole('button', { name: defaultProps.toggleContent })).toHaveAttribute('aria-expanded', 'false');
122
+ expect(screen.getByText(defaultProps.cardTitle)).not.toBeVisible();
123
+ expect(screen.getByText(defaultProps.cardBody)).not.toBeVisible();
124
+ });
125
+
126
+ it('expandableSectionProps.isExpanded overrides isDefaultExpanded', () => {
127
+ render(<ToolResponse {...defaultProps} isDefaultExpanded={false} expandableSectionProps={{ isExpanded: true }} />);
128
+
129
+ expect(screen.getByRole('button', { name: defaultProps.toggleContent })).toHaveAttribute('aria-expanded', 'true');
130
+ expect(screen.getByText(defaultProps.cardTitle)).toBeVisible();
131
+ expect(screen.getByText(defaultProps.cardBody)).toBeVisible();
132
+ });
133
+
134
+ it('expandableSectionProps.onToggle overrides internal onToggle behavior', async () => {
135
+ const user = userEvent.setup();
136
+ const customOnToggle = jest.fn();
137
+
138
+ render(
139
+ <ToolResponse {...defaultProps} isDefaultExpanded={false} expandableSectionProps={{ onToggle: customOnToggle }} />
140
+ );
141
+
142
+ const toggleButton = screen.getByRole('button', { name: defaultProps.toggleContent });
143
+ expect(toggleButton).toHaveAttribute('aria-expanded', 'false');
144
+
145
+ await user.click(toggleButton);
146
+
147
+ expect(customOnToggle).toHaveBeenCalledTimes(1);
148
+ expect(toggleButton).toHaveAttribute('aria-expanded', 'false');
149
+ expect(screen.getByText(defaultProps.cardTitle)).not.toBeVisible();
150
+ expect(screen.getByText(defaultProps.cardBody)).not.toBeVisible();
151
+ });
152
+
153
+ it('should render toggleContent as markdown when isToggleContentMarkdown is true', () => {
154
+ const toggleContent = '**Bold toggle**';
155
+ const { container } = render(
156
+ <ToolResponse {...defaultProps} toggleContent={toggleContent} isToggleContentMarkdown />
157
+ );
158
+ expect(container.querySelector('strong')).toBeTruthy();
159
+ expect(screen.getByText('Bold toggle')).toBeTruthy();
160
+ });
161
+
162
+ it('should not render toggleContent as markdown when isToggleContentMarkdown is false', () => {
163
+ const toggleContent = '**Bold toggle**';
164
+ render(<ToolResponse {...defaultProps} toggleContent={toggleContent} />);
165
+ expect(screen.getByText('**Bold toggle**')).toBeTruthy();
166
+ });
167
+
168
+ it('should render subheading as markdown when isSubheadingMarkdown is true', () => {
169
+ const subheading = '**Bold subheading**';
170
+ const { container } = render(<ToolResponse {...defaultProps} subheading={subheading} isSubheadingMarkdown />);
171
+ expect(container.querySelector('strong')).toBeTruthy();
172
+ expect(screen.getByText('Bold subheading')).toBeTruthy();
173
+ });
174
+
175
+ it('should not render subheading as markdown when isSubheadingMarkdown is false', () => {
176
+ const subheading = '**Bold subheading**';
177
+ render(<ToolResponse {...defaultProps} subheading={subheading} />);
178
+ expect(screen.getByText('**Bold subheading**')).toBeTruthy();
179
+ });
180
+
181
+ it('should render body as markdown when isBodyMarkdown is true', () => {
182
+ const body = '**Bold body**';
183
+ const { container } = render(<ToolResponse {...defaultProps} body={body} isBodyMarkdown />);
184
+ expect(container.querySelector('strong')).toBeTruthy();
185
+ expect(screen.getByText('Bold body')).toBeTruthy();
186
+ });
187
+
188
+ it('should not render body as markdown when isBodyMarkdown is false', () => {
189
+ const body = '**Bold body**';
190
+ render(<ToolResponse {...defaultProps} body={body} />);
191
+ expect(screen.getByText('**Bold body**')).toBeTruthy();
192
+ });
193
+
194
+ it('should render cardTitle as markdown when isCardTitleMarkdown is true', () => {
195
+ const cardTitle = '**Bold card title**';
196
+ const { container } = render(<ToolResponse {...defaultProps} cardTitle={cardTitle} isCardTitleMarkdown />);
197
+ expect(container.querySelector('strong')).toBeTruthy();
198
+ expect(screen.getByText('Bold card title')).toBeTruthy();
199
+ });
200
+
201
+ it('should not render cardTitle as markdown when isCardTitleMarkdown is false', () => {
202
+ const cardTitle = '**Bold card title**';
203
+ render(<ToolResponse {...defaultProps} cardTitle={cardTitle} />);
204
+ expect(screen.getByText('**Bold card title**')).toBeTruthy();
205
+ });
206
+
207
+ it('should render cardBody as markdown when isCardBodyMarkdown is true', () => {
208
+ const cardBody = '**Bold card body**';
209
+ const { container } = render(<ToolResponse {...defaultProps} cardBody={cardBody} isCardBodyMarkdown />);
210
+ expect(container.querySelector('strong')).toBeTruthy();
211
+ expect(screen.getByText('Bold card body')).toBeTruthy();
212
+ });
213
+
214
+ it('should not render cardBody as markdown when isCardBodyMarkdown is false', () => {
215
+ const cardBody = '**Bold card body**';
216
+ render(<ToolResponse {...defaultProps} cardBody={cardBody} />);
217
+ expect(screen.getByText('**Bold card body**')).toBeTruthy();
218
+ });
219
+
220
+ it('should pass markdownContentProps to MarkdownContent component', () => {
221
+ const body = '**Bold body**';
222
+ const { container } = render(
223
+ <ToolResponse {...defaultProps} body={body} isBodyMarkdown markdownContentProps={{ isPrimary: true }} />
224
+ );
225
+ expect(container.querySelector('.pf-m-primary')).toBeTruthy();
226
+ });
108
227
  });
@@ -14,10 +14,14 @@ import {
14
14
  ExpandableSectionProps
15
15
  } from '@patternfly/react-core';
16
16
  import { useState, type FunctionComponent } from 'react';
17
+ import MarkdownContent from '../MarkdownContent';
18
+ import type { MarkdownContentProps } from '../MarkdownContent';
17
19
 
18
20
  export interface ToolResponseProps {
19
21
  /** Toggle content shown for expandable section */
20
22
  toggleContent: React.ReactNode;
23
+ /** Flag indicating whether the expandable content is expanded by default. */
24
+ isDefaultExpanded?: boolean;
21
25
  /** Additional props passed to expandable section */
22
26
  expandableSectionProps?: Omit<ExpandableSectionProps, 'ref'>;
23
27
  /** Subheading rendered inside expandable section */
@@ -40,6 +44,20 @@ export interface ToolResponseProps {
40
44
  toolResponseCardDividerProps?: DividerProps;
41
45
  /** Additional props passed to tool response card title */
42
46
  toolResponseCardTitleProps?: CardTitleProps;
47
+ /** Whether to enable markdown rendering for toggleContent. When true and toggleContent is a string, it will be parsed as markdown. */
48
+ isToggleContentMarkdown?: boolean;
49
+ /** Whether to enable markdown rendering for subheading. When true, subheading will be parsed as markdown. */
50
+ isSubheadingMarkdown?: boolean;
51
+ /** Whether to enable markdown rendering for body. When true and body is a string, it will be parsed as markdown. */
52
+ isBodyMarkdown?: boolean;
53
+ /** Whether to enable markdown rendering for cardBody. When true and cardBody is a string, it will be parsed as markdown. */
54
+ isCardBodyMarkdown?: boolean;
55
+ /** Whether to enable markdown rendering for cardTitle. When true and cardTitle is a string, it will be parsed as markdown. */
56
+ isCardTitleMarkdown?: boolean;
57
+ /** Props passed to MarkdownContent component when markdown is enabled */
58
+ markdownContentProps?: Omit<MarkdownContentProps, 'content'>;
59
+ /** Whether to retain styles in the MarkdownContent component. Defaults to false. */
60
+ shouldRetainStyles?: boolean;
43
61
  }
44
62
 
45
63
  export const ToolResponse: FunctionComponent<ToolResponseProps> = ({
@@ -51,22 +69,79 @@ export const ToolResponse: FunctionComponent<ToolResponseProps> = ({
51
69
  cardTitle,
52
70
  cardBodyProps,
53
71
  toggleContent,
72
+ isDefaultExpanded = true,
54
73
  toolResponseCardBodyProps,
55
74
  toolResponseCardDividerProps,
56
75
  toolResponseCardProps,
57
- toolResponseCardTitleProps
76
+ toolResponseCardTitleProps,
77
+ isToggleContentMarkdown,
78
+ isSubheadingMarkdown,
79
+ isBodyMarkdown,
80
+ isCardBodyMarkdown,
81
+ isCardTitleMarkdown,
82
+ markdownContentProps,
83
+ shouldRetainStyles = false
58
84
  }: ToolResponseProps) => {
59
- const [isExpanded, setIsExpanded] = useState(true);
85
+ const [isExpanded, setIsExpanded] = useState(isDefaultExpanded);
60
86
 
61
87
  const onToggle = (_event: React.MouseEvent, isExpanded: boolean) => {
62
88
  setIsExpanded(isExpanded);
63
89
  };
64
90
 
91
+ const renderToggleContent = () => {
92
+ if (isToggleContentMarkdown && typeof toggleContent === 'string') {
93
+ return (
94
+ <MarkdownContent shouldRetainStyles={shouldRetainStyles} content={toggleContent} {...markdownContentProps} />
95
+ );
96
+ }
97
+ return toggleContent;
98
+ };
99
+
100
+ const renderSubheading = () => {
101
+ if (!subheading) {
102
+ return null;
103
+ }
104
+ if (isSubheadingMarkdown) {
105
+ return <MarkdownContent shouldRetainStyles={shouldRetainStyles} content={subheading} {...markdownContentProps} />;
106
+ }
107
+ return subheading;
108
+ };
109
+
110
+ const renderBody = () => {
111
+ if (!body) {
112
+ return null;
113
+ }
114
+ if (isBodyMarkdown && typeof body === 'string') {
115
+ return <MarkdownContent shouldRetainStyles={shouldRetainStyles} content={body} {...markdownContentProps} />;
116
+ }
117
+ return body;
118
+ };
119
+
120
+ const renderCardTitle = () => {
121
+ if (!cardTitle) {
122
+ return null;
123
+ }
124
+ if (isCardTitleMarkdown && typeof cardTitle === 'string') {
125
+ return <MarkdownContent shouldRetainStyles={shouldRetainStyles} content={cardTitle} {...markdownContentProps} />;
126
+ }
127
+ return cardTitle;
128
+ };
129
+
130
+ const renderCardBody = () => {
131
+ if (!cardBody) {
132
+ return null;
133
+ }
134
+ if (isCardBodyMarkdown && typeof cardBody === 'string') {
135
+ return <MarkdownContent shouldRetainStyles={shouldRetainStyles} content={cardBody} {...markdownContentProps} />;
136
+ }
137
+ return cardBody;
138
+ };
139
+
65
140
  return (
66
141
  <Card isCompact className="pf-chatbot__tool-response" {...cardProps}>
67
142
  <CardBody {...cardBodyProps}>
68
143
  <ExpandableSection
69
- toggleContent={toggleContent}
144
+ toggleContent={renderToggleContent()}
70
145
  onToggle={onToggle}
71
146
  isExpanded={isExpanded}
72
147
  isIndented
@@ -76,15 +151,15 @@ export const ToolResponse: FunctionComponent<ToolResponseProps> = ({
76
151
  <div className="pf-chatbot__tool-response-section">
77
152
  {subheading && (
78
153
  <div className="pf-chatbot__tool-response-subheading">
79
- <span>{subheading}</span>
154
+ <span>{renderSubheading()}</span>
80
155
  </div>
81
156
  )}
82
- {body && <div className="pf-chatbot__tool-response-body">{body}</div>}
157
+ {body && <div className="pf-chatbot__tool-response-body">{renderBody()}</div>}
83
158
  {(cardTitle || cardBody) && (
84
159
  <Card isCompact className="pf-chatbot__tool-response-card" {...toolResponseCardProps}>
85
- {cardTitle && <CardTitle {...toolResponseCardTitleProps}>{cardTitle}</CardTitle>}
160
+ {cardTitle && <CardTitle {...toolResponseCardTitleProps}>{renderCardTitle()}</CardTitle>}
86
161
  {cardTitle && cardBody && <Divider {...toolResponseCardDividerProps} />}
87
- {cardBody && <CardBody {...toolResponseCardBodyProps}>{cardBody}</CardBody>}
162
+ {cardBody && <CardBody {...toolResponseCardBodyProps}>{renderCardBody()}</CardBody>}
88
163
  </Card>
89
164
  )}
90
165
  </div>
package/src/index.ts CHANGED
@@ -63,6 +63,9 @@ export * from './ImagePreview';
63
63
  export { default as LoadingMessage } from './LoadingMessage';
64
64
  export * from './LoadingMessage';
65
65
 
66
+ export { default as MarkdownContent } from './MarkdownContent';
67
+ export * from './MarkdownContent';
68
+
66
69
  export { default as Message } from './Message';
67
70
  export * from './Message';
68
71
 
@@ -75,6 +78,9 @@ export * from './MessageBox';
75
78
  export { default as MessageDivider } from './MessageDivider';
76
79
  export * from './MessageDivider';
77
80
 
81
+ export { default as Onboarding } from './Onboarding';
82
+ export * from './Onboarding';
83
+
78
84
  export { default as PreviewAttachment } from './PreviewAttachment';
79
85
  export * from './PreviewAttachment';
80
86
 
package/src/main.scss CHANGED
@@ -20,6 +20,7 @@
20
20
  @import './Message/Message';
21
21
  @import './Message/CodeBlockMessage/CodeBlockMessage';
22
22
  @import './Message/ImageMessage/ImageMessage';
23
+ @import './Message/LinkMessage/LinkMessage';
23
24
  @import './Message/TextMessage/TextMessage';
24
25
  @import './Message/ListMessage/ListMessage';
25
26
  @import './Message/TableMessage/TableMessage';
@@ -31,6 +32,7 @@
31
32
  @import './MessageBox/MessageBox';
32
33
  @import './MessageDivider/MessageDivider';
33
34
  @import './MessageBox/JumpButton';
35
+ @import './Onboarding/Onboarding';
34
36
  @import './ResponseActions/ResponseActions';
35
37
  @import './Settings/Settings';
36
38
  @import './SourcesCard/SourcesCard.scss';
package/tsconfig.json CHANGED
@@ -5,7 +5,7 @@
5
5
  /* Basic Options */
6
6
  // "incremental": true, /* Enable incremental compilation */
7
7
  "target": "es2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */,
8
- "module": "es2015" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
8
+ "module": "es2020" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
9
9
  // "lib": [], /* Specify library files to be included in the compilation. */
10
10
  // "allowJs": true, /* Allow javascript files to be compiled. */
11
11
  // "checkJs": true, /* Report errors in .js files. */
@@ -1,44 +0,0 @@
1
- ---
2
- section: PatternFly-AI
3
- subsection: ChatBot
4
- id: Overview
5
- sortValue: 1
6
- source: About
7
- ---
8
-
9
- **Note:** The PatternFly ChatBot extension lives in its own package [`@patternfly/chatbot`](https://www.npmjs.com/package/@patternfly/chatbot)
10
-
11
- It is important to leverage AI in a way that improves the experiences of your users. In alignment with our [AI principles](/patternfly-ai/about-ai#ai-principles) and [ethical design guidelines,](/patternfly-ai/ai-guidelines) we've created this ChatBot extension. The PatternFly ChatBot contains a React implementation of an AI ChatBot, to provide your users with access to convenient and persistent help.
12
-
13
- _Only use this ChatBot when it adds value to your users' experiences._ Don't use it simply for the sake of novelty&mdash;your users will only be excited to interact with a new ChatBot feature if it directly helps them reach their goals.
14
-
15
- ## ChatBot demos
16
-
17
- To illustrate the capabilities of the ChatBot, including more complex interaction patterns, we've created these demos:
18
- - [Basic ChatBot](/patternfly-ai/chatbot/overview/demo#basic-chatbot)
19
- - [Embedded ChatBot](/patternfly-ai/chatbot/overview/demo#embedded-chatbot)
20
- - [Comparing ChatBots](/patternfly-ai/chatbot/overview/demo/#comparing-chatbots)
21
- - [Message feedback](/patternfly-ai/chatbot/messages/demo#message-feedback)
22
- - [ChatBot attachments via file upload](/patternfly-ai/chatbot/messages/demo#attach-via-upload-button-in-message-bar)
23
- - [ChatBot attachments via built-in menu](/patternfly-ai/chatbot/messages/demo#attach-via-menu-of-options-in-message-bar)
24
-
25
- To learn how to write for ChatBot experiences, refer to our [conversation design guidelines](/patternfly-ai/conversation-design/#writing-for-chatbots).
26
-
27
- To learn how to design ChatBot experiences, [refer to the design guidelines](/patternfly-ai/chatbot/overview/design-guidelines).
28
-
29
- Explore our documentation, which covers both ChatBot UI components and message-related components:
30
- - UI
31
- - [Structural elements](/patternfly-ai/chatbot/ui#structure)
32
- - [Toggle](/patternfly-ai/chatbot/ui#toggle)
33
- - [Header](/patternfly-ai/chatbot/ui#header)
34
- - [Footer](/patternfly-ai/chatbot/ui#footer)
35
- - [Navigation](/patternfly-ai/chatbot/ui#navigation)
36
- - [Modals](/patternfly-ai/chatbot/ui#modals)
37
- - Messages
38
- - [Bot and user messages](/patternfly-ai/chatbot/messages)
39
- - [File attachments](/patternfly-ai/chatbot/messages#attachments)
40
- - Analytics support
41
- - [Overview](/patternfly-ai/chatbot/analytics)
42
-
43
-
44
- We will continue to grow and evolve our ChatBot. If you notice a bug or have any suggestions, feel free to file an issue in our [GitHub repository!](https://github.com/patternfly/chatbot/issues) Make sure to check if there is already a pre-existing issue before creating a new one.