@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
@@ -0,0 +1,198 @@
1
+ import { FunctionComponent, useState } from 'react';
2
+ import { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
3
+ import ChatbotConversationHistoryNav, {
4
+ Conversation
5
+ } from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav';
6
+ import {
7
+ Button,
8
+ Checkbox,
9
+ MenuToggle,
10
+ MenuToggleElement,
11
+ Select,
12
+ SelectList,
13
+ SelectOption,
14
+ Tooltip
15
+ } from '@patternfly/react-core';
16
+ import { FilterIcon, SortAmountDownIcon } from '@patternfly/react-icons';
17
+
18
+ const initialConversations: { [key: string]: Conversation[] } = {
19
+ Today: [{ id: '1', text: 'Red Hat products and services' }],
20
+ 'This month': [
21
+ {
22
+ id: '2',
23
+ text: 'Enterprise Linux installation and setup'
24
+ },
25
+ { id: '3', text: 'Troubleshoot system crash' }
26
+ ],
27
+ March: [
28
+ { id: '4', text: 'Ansible security and updates' },
29
+ { id: '5', text: 'Red Hat certification' },
30
+ { id: '6', text: 'Lightspeed user documentation' }
31
+ ],
32
+ February: [
33
+ { id: '7', text: 'Crashing pod assistance' },
34
+ { id: '8', text: 'OpenShift AI pipelines' },
35
+ { id: '9', text: 'Updating subscription plan' },
36
+ { id: '10', text: 'Red Hat licensing options' }
37
+ ],
38
+ January: [
39
+ { id: '11', text: 'RHEL system performance' },
40
+ { id: '12', text: 'Manage user accounts' }
41
+ ]
42
+ };
43
+
44
+ export const ChatbotHeaderTitleDemo: FunctionComponent = () => {
45
+ const [isDrawerOpen, setIsDrawerOpen] = useState(true);
46
+ const [hasDrawerHeadDivider, setHasDrawerHeadDivider] = useState(false);
47
+ const [showSearchActionStart, setShowSearchActionStart] = useState(false);
48
+ const [showSearchActionEnd, setShowSearchActionEnd] = useState(false);
49
+ const [isLoading, setIsLoading] = useState(false);
50
+ const [isSortSelectOpen, setIsSortSelectOpen] = useState(false);
51
+ const [selectedSort, setSelectedSort] = useState<string>('newest');
52
+ const [conversations, setConversations] = useState<Conversation[] | { [key: string]: Conversation[] }>(
53
+ initialConversations
54
+ );
55
+ const displayMode = ChatbotDisplayMode.embedded;
56
+
57
+ const sortLabels: { [key: string]: string } = {
58
+ newest: 'Date (newest first)',
59
+ oldest: 'Date (oldest first)',
60
+ 'alphabetical-asc': 'Name (A-Z)',
61
+ 'alphabetical-desc': 'Name (Z-A)'
62
+ };
63
+
64
+ const onSortSelect = (
65
+ _event: React.MouseEvent<Element, MouseEvent> | undefined,
66
+ value: string | number | undefined
67
+ ) => {
68
+ setSelectedSort(value as string);
69
+ setIsSortSelectOpen(false);
70
+ };
71
+
72
+ const findMatchingItems = (targetValue: string) => {
73
+ const filteredConversations = Object.entries(initialConversations).reduce((acc, [key, items]) => {
74
+ const filteredItems = items.filter((item) => item.text.toLowerCase().includes(targetValue.toLowerCase()));
75
+ if (filteredItems.length > 0) {
76
+ acc[key] = filteredItems;
77
+ }
78
+ return acc;
79
+ }, {});
80
+
81
+ return filteredConversations;
82
+ };
83
+
84
+ return (
85
+ <>
86
+ <Checkbox
87
+ label="Display drawer"
88
+ isChecked={isDrawerOpen}
89
+ onChange={() => setIsDrawerOpen(!isDrawerOpen)}
90
+ id="search-actions-drawer-visible"
91
+ name="drawer-visible"
92
+ />
93
+ <Checkbox
94
+ label="Show drawer head divider"
95
+ isChecked={hasDrawerHeadDivider}
96
+ onChange={() => setHasDrawerHeadDivider(!hasDrawerHeadDivider)}
97
+ id="search-actions-drawer-head-divider"
98
+ name="drawer-head-divider"
99
+ />
100
+ <Checkbox
101
+ label="Show search action start"
102
+ isChecked={showSearchActionStart}
103
+ onChange={() => setShowSearchActionStart(!showSearchActionStart)}
104
+ id="search-actions-show-search-action-start"
105
+ name="show-search-action-start"
106
+ />
107
+ <Checkbox
108
+ label="Show search action end"
109
+ isChecked={showSearchActionEnd}
110
+ onChange={() => setShowSearchActionEnd(!showSearchActionEnd)}
111
+ id="search-actions-show-search-action-end"
112
+ name="show-search-action-end"
113
+ />
114
+ <Checkbox
115
+ label="Show loading state"
116
+ isChecked={isLoading}
117
+ onChange={() => setIsLoading(!isLoading)}
118
+ id="search-actions-drawer-is-loading"
119
+ name="drawer-is-loading"
120
+ />
121
+ <ChatbotConversationHistoryNav
122
+ displayMode={displayMode}
123
+ onDrawerToggle={() => setIsDrawerOpen(!isDrawerOpen)}
124
+ isDrawerOpen={isDrawerOpen}
125
+ setIsDrawerOpen={setIsDrawerOpen}
126
+ // eslint-disable-next-line no-console
127
+ onSelectActiveItem={(e, selectedItem) => console.log(`Selected history item with id ${selectedItem}`)}
128
+ conversations={conversations}
129
+ onNewChat={() => {
130
+ setIsDrawerOpen(!isDrawerOpen);
131
+ }}
132
+ handleTextInputChange={(value: string) => {
133
+ if (value === '') {
134
+ setConversations(initialConversations);
135
+ } else {
136
+ const newConversations: { [key: string]: Conversation[] } = findMatchingItems(value);
137
+ setConversations(newConversations);
138
+ }
139
+ }}
140
+ drawerContent={<div>Drawer content</div>}
141
+ hasDrawerHeadDivider={hasDrawerHeadDivider}
142
+ isLoading={isLoading}
143
+ searchActionStart={
144
+ showSearchActionStart ? (
145
+ <Tooltip content="Filter options" aria="none" aria-live="off">
146
+ <Button
147
+ variant="control"
148
+ aria-label="Filter options"
149
+ // eslint-disable-next-line no-console
150
+ onClick={() => console.log('Filter button clicked')}
151
+ icon={<FilterIcon />}
152
+ />
153
+ </Tooltip>
154
+ ) : undefined
155
+ }
156
+ searchActionEnd={
157
+ showSearchActionEnd ? (
158
+ <Select
159
+ id="sort-select"
160
+ isOpen={isSortSelectOpen}
161
+ selected={selectedSort}
162
+ onSelect={onSortSelect}
163
+ shouldFocusToggleOnSelect
164
+ onOpenChange={(isOpen) => setIsSortSelectOpen(isOpen)}
165
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
166
+ <Tooltip aria="none" aria-live="off" content={`Sort - ${sortLabels[selectedSort]}`}>
167
+ <MenuToggle
168
+ ref={toggleRef}
169
+ onClick={() => setIsSortSelectOpen(!isSortSelectOpen)}
170
+ isExpanded={isSortSelectOpen}
171
+ variant="plain"
172
+ aria-label={`${sortLabels[selectedSort]}, Sort conversations`}
173
+ icon={
174
+ <SortAmountDownIcon
175
+ style={{
176
+ transform:
177
+ selectedSort === 'oldest' || selectedSort === 'alphabetical-asc' ? 'scaleY(-1)' : 'none'
178
+ }}
179
+ />
180
+ }
181
+ />
182
+ </Tooltip>
183
+ )}
184
+ >
185
+ <SelectList>
186
+ {Object.keys(sortLabels).map((currentLabel) => (
187
+ <SelectOption key={currentLabel} value={currentLabel}>
188
+ {sortLabels[currentLabel]}
189
+ </SelectOption>
190
+ ))}
191
+ </SelectList>
192
+ </Select>
193
+ ) : undefined
194
+ }
195
+ />
196
+ </>
197
+ );
198
+ };
@@ -0,0 +1,15 @@
1
+ import { FunctionComponent, useState } from 'react';
2
+ import { MessageBar } from '@patternfly/chatbot/dist/dynamic/MessageBar';
3
+
4
+ export const ChatbotMessageBarIndicatorThinking: FunctionComponent = () => {
5
+ const [isThinking, setIsThinking] = useState(false);
6
+ const handleSend = (_message: string | number) => {
7
+ setIsThinking(true);
8
+
9
+ setTimeout(() => {
10
+ setIsThinking(false);
11
+ }, 10000);
12
+ };
13
+
14
+ return <MessageBar onSendMessage={handleSend} hasAiIndicator isThinking={isThinking} />;
15
+ };
@@ -0,0 +1,141 @@
1
+ import {
2
+ useRef,
3
+ useState,
4
+ FunctionComponent,
5
+ MouseEvent,
6
+ CSSProperties,
7
+ Ref,
8
+ MouseEvent as ReactMouseEvent
9
+ } from 'react';
10
+ import {
11
+ Button,
12
+ SkipToContent,
13
+ MenuToggle,
14
+ MenuToggleElement,
15
+ Select,
16
+ SelectList,
17
+ SelectOption,
18
+ Stack
19
+ } from '@patternfly/react-core';
20
+ import Onboarding from '@patternfly/chatbot/dist/dynamic/Onboarding';
21
+ import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
22
+
23
+ export const OnboardingExample: FunctionComponent = () => {
24
+ const [isModalOpen, setIsModalOpen] = useState(true);
25
+ const [displayMode, setDisplayMode] = useState(ChatbotDisplayMode.default);
26
+ const chatbotRef = useRef<HTMLDivElement>(null);
27
+ const termsRef = useRef<HTMLDivElement>(null);
28
+ const [isOpen, setIsOpen] = useState(false);
29
+ const [selected, setSelected] = useState<string>('Select display mode');
30
+
31
+ const handleSkipToContent = (e) => {
32
+ e.preventDefault();
33
+ if (!isModalOpen && chatbotRef.current) {
34
+ chatbotRef.current.focus();
35
+ }
36
+ if (isModalOpen && termsRef.current) {
37
+ termsRef.current.focus();
38
+ }
39
+ };
40
+
41
+ const handleModalToggle = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
42
+ setIsModalOpen(!isModalOpen);
43
+ };
44
+
45
+ const onPrimaryAction = () => {
46
+ // eslint-disable-next-line no-console
47
+ console.log('Clicked primary action');
48
+ };
49
+
50
+ const onSecondaryAction = () => {
51
+ // eslint-disable-next-line no-console
52
+ console.log('Clicked secondary action');
53
+ };
54
+ const onSelect = (_event: ReactMouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
55
+ setSelected(value as string);
56
+ setIsOpen(false);
57
+ if (value === 'Default') {
58
+ setDisplayMode(ChatbotDisplayMode.default);
59
+ }
60
+ if (value === 'Docked') {
61
+ setDisplayMode(ChatbotDisplayMode.docked);
62
+ }
63
+ if (value === 'Fullscreen') {
64
+ setDisplayMode(ChatbotDisplayMode.fullscreen);
65
+ }
66
+ if (value === 'Embedded') {
67
+ setDisplayMode(ChatbotDisplayMode.embedded);
68
+ }
69
+ };
70
+
71
+ const onToggleClick = () => {
72
+ setIsOpen(!isOpen);
73
+ };
74
+
75
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
76
+ <MenuToggle
77
+ ref={toggleRef}
78
+ onClick={onToggleClick}
79
+ isExpanded={isOpen}
80
+ style={
81
+ {
82
+ width: '200px'
83
+ } as CSSProperties
84
+ }
85
+ aria-label={selected === 'Select display mode' ? 'Select display mode' : `Display mode, ${selected}`}
86
+ >
87
+ {selected}
88
+ </MenuToggle>
89
+ );
90
+
91
+ const body = 'Simplify your Red Hat journey with personalized assistance and seamless problem-solving.';
92
+
93
+ return (
94
+ <>
95
+ <SkipToContent style={{ zIndex: '999' }} onClick={handleSkipToContent} href="#">
96
+ Skip to chatbot
97
+ </SkipToContent>
98
+ <div
99
+ style={{
100
+ position: 'fixed',
101
+ padding: 'var(--pf-t--global--spacer--lg)',
102
+ zIndex: '601',
103
+ boxShadow: 'var(--pf-t--global--box-shadow--lg)'
104
+ }}
105
+ >
106
+ <Stack hasGutter>
107
+ <Select
108
+ id="single-select"
109
+ isOpen={isOpen}
110
+ selected={selected}
111
+ onSelect={onSelect}
112
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
113
+ toggle={toggle}
114
+ shouldFocusToggleOnSelect
115
+ >
116
+ <SelectList>
117
+ <SelectOption value="Default">Default</SelectOption>
118
+ <SelectOption value="Docked">Docked</SelectOption>
119
+ <SelectOption value="Fullscreen">Fullscreen</SelectOption>
120
+ <SelectOption value="Embedded">Embedded</SelectOption>
121
+ </SelectList>
122
+ </Select>
123
+ <Button onClick={handleModalToggle}>Toggle modal</Button>
124
+ </Stack>
125
+ </div>
126
+ <Chatbot ref={chatbotRef} displayMode={displayMode} isVisible isCompact></Chatbot>
127
+ <Onboarding
128
+ ref={termsRef}
129
+ displayMode={displayMode}
130
+ isModalOpen={isModalOpen}
131
+ handleModalToggle={handleModalToggle}
132
+ onPrimaryAction={onPrimaryAction}
133
+ onSecondaryAction={onSecondaryAction}
134
+ title="Redefine work in the age of AI"
135
+ isCompact
136
+ >
137
+ {body}
138
+ </Onboarding>
139
+ </>
140
+ );
141
+ };
@@ -0,0 +1,151 @@
1
+ import {
2
+ useRef,
3
+ useState,
4
+ FunctionComponent,
5
+ MouseEvent,
6
+ CSSProperties,
7
+ Ref,
8
+ MouseEvent as ReactMouseEvent
9
+ } from 'react';
10
+ import {
11
+ Button,
12
+ Checkbox,
13
+ SkipToContent,
14
+ MenuToggle,
15
+ MenuToggleElement,
16
+ Select,
17
+ SelectList,
18
+ SelectOption,
19
+ Stack
20
+ } from '@patternfly/react-core';
21
+ import Onboarding from '@patternfly/chatbot/dist/dynamic/Onboarding';
22
+ import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
23
+ import onboardingHeader from './RH-Hat-Image.svg';
24
+
25
+ export const OnboardingExample: FunctionComponent = () => {
26
+ const [isModalOpen, setIsModalOpen] = useState(true);
27
+ const [displayMode, setDisplayMode] = useState(ChatbotDisplayMode.default);
28
+ const [hasImage, setHasImage] = useState(true);
29
+ const chatbotRef = useRef<HTMLDivElement>(null);
30
+ const termsRef = useRef<HTMLDivElement>(null);
31
+ const [isOpen, setIsOpen] = useState(false);
32
+ const [selected, setSelected] = useState<string>('Select display mode');
33
+
34
+ const handleSkipToContent = (e) => {
35
+ e.preventDefault();
36
+ if (!isModalOpen && chatbotRef.current) {
37
+ chatbotRef.current.focus();
38
+ }
39
+ if (isModalOpen && termsRef.current) {
40
+ termsRef.current.focus();
41
+ }
42
+ };
43
+
44
+ const handleModalToggle = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
45
+ setIsModalOpen(!isModalOpen);
46
+ };
47
+
48
+ const onPrimaryAction = () => {
49
+ // eslint-disable-next-line no-console
50
+ console.log('Clicked primary action');
51
+ };
52
+
53
+ const onSecondaryAction = () => {
54
+ // eslint-disable-next-line no-console
55
+ console.log('Clicked secondary action');
56
+ };
57
+ const onSelect = (_event: ReactMouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
58
+ setSelected(value as string);
59
+ setIsOpen(false);
60
+ if (value === 'Default') {
61
+ setDisplayMode(ChatbotDisplayMode.default);
62
+ }
63
+ if (value === 'Docked') {
64
+ setDisplayMode(ChatbotDisplayMode.docked);
65
+ }
66
+ if (value === 'Fullscreen') {
67
+ setDisplayMode(ChatbotDisplayMode.fullscreen);
68
+ }
69
+ if (value === 'Embedded') {
70
+ setDisplayMode(ChatbotDisplayMode.embedded);
71
+ }
72
+ };
73
+
74
+ const onToggleClick = () => {
75
+ setIsOpen(!isOpen);
76
+ };
77
+
78
+ const toggle = (toggleRef: Ref<MenuToggleElement>) => (
79
+ <MenuToggle
80
+ ref={toggleRef}
81
+ onClick={onToggleClick}
82
+ isExpanded={isOpen}
83
+ style={
84
+ {
85
+ width: '200px'
86
+ } as CSSProperties
87
+ }
88
+ aria-label={selected === 'Select display mode' ? 'Select display mode' : `Display mode, ${selected}`}
89
+ >
90
+ {selected}
91
+ </MenuToggle>
92
+ );
93
+
94
+ const body = 'Simplify your Red Hat journey with personalized assistance and seamless problem-solving.';
95
+
96
+ return (
97
+ <>
98
+ <SkipToContent style={{ zIndex: '999' }} onClick={handleSkipToContent} href="#">
99
+ Skip to chatbot
100
+ </SkipToContent>
101
+ <div
102
+ style={{
103
+ position: 'fixed',
104
+ padding: 'var(--pf-t--global--spacer--lg)',
105
+ zIndex: '601',
106
+ boxShadow: 'var(--pf-t--global--box-shadow--lg)'
107
+ }}
108
+ >
109
+ <Stack hasGutter>
110
+ <Select
111
+ id="single-select"
112
+ isOpen={isOpen}
113
+ selected={selected}
114
+ onSelect={onSelect}
115
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
116
+ toggle={toggle}
117
+ shouldFocusToggleOnSelect
118
+ >
119
+ <SelectList>
120
+ <SelectOption value="Default">Default</SelectOption>
121
+ <SelectOption value="Docked">Docked</SelectOption>
122
+ <SelectOption value="Fullscreen">Fullscreen</SelectOption>
123
+ <SelectOption value="Embedded">Embedded</SelectOption>
124
+ </SelectList>
125
+ </Select>
126
+ <Checkbox
127
+ isChecked={hasImage}
128
+ id="toggle-header-image"
129
+ name="toggle-header-image"
130
+ label="Has image in header"
131
+ onChange={(_event, checked) => setHasImage(checked)}
132
+ ></Checkbox>
133
+ <Button onClick={handleModalToggle}>Toggle modal</Button>
134
+ </Stack>
135
+ </div>
136
+ <Chatbot ref={chatbotRef} displayMode={displayMode} isVisible></Chatbot>
137
+ <Onboarding
138
+ ref={termsRef}
139
+ displayMode={displayMode}
140
+ isModalOpen={isModalOpen}
141
+ handleModalToggle={handleModalToggle}
142
+ onPrimaryAction={onPrimaryAction}
143
+ onSecondaryAction={onSecondaryAction}
144
+ headerImage={hasImage ? onboardingHeader : undefined}
145
+ title="Redefine work in the age of AI"
146
+ >
147
+ {body}
148
+ </Onboarding>
149
+ </>
150
+ );
151
+ };