@patternfly/chatbot 6.8.0-prerelease.7 → 6.8.0-prerelease.9

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 (321) hide show
  1. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
  2. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +125 -16
  3. package/dist/cjs/CodeModal/CodeModal.js +5 -0
  4. package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +26 -7
  5. package/dist/cjs/MarkdownContent/MarkdownContent.js +79 -166
  6. package/dist/cjs/MarkdownContent/MarkdownRenderer.d.ts +6 -0
  7. package/dist/cjs/MarkdownContent/MarkdownRenderer.js +187 -0
  8. package/dist/cjs/Message/Message.d.ts +3 -4
  9. package/dist/cjs/Message/Message.js +0 -2
  10. package/dist/cjs/MessageBox/MessageBox.d.ts +2 -0
  11. package/dist/cjs/MessageBox/MessageBox.js +7 -2
  12. package/dist/cjs/index.d.ts +0 -8
  13. package/dist/cjs/index.js +1 -13
  14. package/dist/css/main.css +77 -10
  15. package/dist/css/main.css.map +1 -1
  16. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
  17. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +128 -19
  18. package/dist/esm/CodeModal/CodeModal.js +5 -0
  19. package/dist/esm/MarkdownContent/MarkdownContent.d.ts +26 -7
  20. package/dist/esm/MarkdownContent/MarkdownContent.js +52 -165
  21. package/dist/esm/MarkdownContent/MarkdownRenderer.d.ts +6 -0
  22. package/dist/esm/MarkdownContent/MarkdownRenderer.js +182 -0
  23. package/dist/esm/Message/Message.d.ts +3 -4
  24. package/dist/esm/Message/Message.js +0 -2
  25. package/dist/esm/MessageBox/MessageBox.d.ts +2 -0
  26. package/dist/esm/MessageBox/MessageBox.js +7 -2
  27. package/dist/esm/index.d.ts +0 -8
  28. package/dist/esm/index.js +0 -8
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/generate-index.js +41 -16
  31. package/generate-index.test.js +68 -0
  32. package/monaco-environment.js +45 -0
  33. package/package.json +20 -2
  34. package/patternfly-docs/content/extensions/chatbot/chatbot.md +1 -0
  35. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +1 -1
  36. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  37. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +2 -2
  38. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +1 -1
  39. package/patternfly-docs/content/extensions/chatbot/examples/Messages/monitor-sampleapp-quickstart.ts +1 -0
  40. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithExpandableGroups.tsx +104 -0
  41. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +12 -1
  42. package/patternfly-docs/content/extensions/chatbot/tree-shaking.md +124 -0
  43. package/patternfly-docs/monaco-environment.js +45 -0
  44. package/patternfly-docs/patternfly-docs.css.js +6 -0
  45. package/src/Chatbot/Chatbot.scss +4 -0
  46. package/src/ChatbotContent/ChatbotContent.scss +1 -1
  47. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +52 -6
  48. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +551 -3
  49. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +350 -49
  50. package/src/ChatbotFooter/ChatbotFooter.scss +2 -2
  51. package/src/ChatbotHeader/ChatbotHeader.scss +4 -0
  52. package/src/ChatbotModal/ChatbotModal.scss +10 -0
  53. package/src/ChatbotToggle/ChatbotToggle.scss +6 -0
  54. package/src/CodeModal/CodeModal.tsx +6 -0
  55. package/src/DeepThinking/DeepThinking.test.tsx +10 -12
  56. package/src/MarkdownContent/MarkdownContent.test.tsx +52 -5
  57. package/src/MarkdownContent/MarkdownContent.tsx +77 -220
  58. package/src/MarkdownContent/MarkdownRenderer.tsx +235 -0
  59. package/src/Message/Message.scss +5 -0
  60. package/src/Message/Message.test.tsx +5 -0
  61. package/src/Message/Message.tsx +3 -5
  62. package/src/MessageBox/MessageBox.scss +15 -1
  63. package/src/MessageBox/MessageBox.tsx +23 -2
  64. package/src/ResponseActions/ResponseActions.test.tsx +42 -48
  65. package/src/ToolCall/ToolCall.test.tsx +6 -9
  66. package/src/ToolResponse/ToolResponse.test.tsx +16 -22
  67. package/src/index.ts +0 -12
  68. package/src/test-utils/markdownTestUtils.ts +21 -0
  69. package/tsconfig.json +6 -1
  70. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
  71. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +0 -77
  72. package/dist/cjs/Chatbot/Chatbot.test.d.ts +0 -1
  73. package/dist/cjs/Chatbot/Chatbot.test.js +0 -32
  74. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
  75. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +0 -27
  76. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +0 -1
  77. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +0 -22
  78. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
  79. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -75
  80. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
  81. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -277
  82. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
  83. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +0 -27
  84. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
  85. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +0 -87
  86. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
  87. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +0 -18
  88. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
  89. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +0 -18
  90. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
  91. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -22
  92. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
  93. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +0 -18
  94. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
  95. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -22
  96. package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
  97. package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -22
  98. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
  99. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -46
  100. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
  101. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -44
  102. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
  103. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -55
  104. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +0 -1
  105. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +0 -16
  106. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
  107. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +0 -64
  108. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
  109. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -61
  110. package/dist/cjs/CodeModal/CodeModal.test.d.ts +0 -1
  111. package/dist/cjs/CodeModal/CodeModal.test.js +0 -34
  112. package/dist/cjs/Compare/Compare.test.d.ts +0 -1
  113. package/dist/cjs/Compare/Compare.test.js +0 -18
  114. package/dist/cjs/DeepThinking/DeepThinking.test.d.ts +0 -1
  115. package/dist/cjs/DeepThinking/DeepThinking.test.js +0 -146
  116. package/dist/cjs/FileDetails/FileDetails.test.d.ts +0 -1
  117. package/dist/cjs/FileDetails/FileDetails.test.js +0 -42
  118. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
  119. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +0 -79
  120. package/dist/cjs/FileDropZone/FileDropZone.test.d.ts +0 -1
  121. package/dist/cjs/FileDropZone/FileDropZone.test.js +0 -100
  122. package/dist/cjs/FilePreview/FilePreview.test.d.ts +0 -1
  123. package/dist/cjs/FilePreview/FilePreview.test.js +0 -97
  124. package/dist/cjs/ImagePreview/ImagePreview.test.d.ts +0 -1
  125. package/dist/cjs/ImagePreview/ImagePreview.test.js +0 -225
  126. package/dist/cjs/MarkdownContent/MarkdownContent.test.d.ts +0 -1
  127. package/dist/cjs/MarkdownContent/MarkdownContent.test.js +0 -192
  128. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
  129. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -131
  130. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
  131. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +0 -30
  132. package/dist/cjs/Message/Message.test.d.ts +0 -1
  133. package/dist/cjs/Message/Message.test.js +0 -1128
  134. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
  135. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +0 -25
  136. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
  137. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -25
  138. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
  139. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -25
  140. package/dist/cjs/Message/MessageLoading.test.d.ts +0 -1
  141. package/dist/cjs/Message/MessageLoading.test.js +0 -25
  142. package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
  143. package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +0 -109
  144. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
  145. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +0 -76
  146. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
  147. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +0 -181
  148. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
  149. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +0 -243
  150. package/dist/cjs/MessageBar/AttachButton.test.d.ts +0 -1
  151. package/dist/cjs/MessageBar/AttachButton.test.js +0 -152
  152. package/dist/cjs/MessageBar/MessageBar.test.d.ts +0 -1
  153. package/dist/cjs/MessageBar/MessageBar.test.js +0 -338
  154. package/dist/cjs/MessageBar/SendButton.test.d.ts +0 -1
  155. package/dist/cjs/MessageBar/SendButton.test.js +0 -58
  156. package/dist/cjs/MessageBar/StopButton.test.d.ts +0 -1
  157. package/dist/cjs/MessageBar/StopButton.test.js +0 -58
  158. package/dist/cjs/MessageBox/JumpButton.test.d.ts +0 -1
  159. package/dist/cjs/MessageBox/JumpButton.test.js +0 -39
  160. package/dist/cjs/MessageBox/MessageBox.test.d.ts +0 -1
  161. package/dist/cjs/MessageBox/MessageBox.test.js +0 -294
  162. package/dist/cjs/MessageDivider/MessageDivider.test.d.ts +0 -1
  163. package/dist/cjs/MessageDivider/MessageDivider.test.js +0 -29
  164. package/dist/cjs/Onboarding/Onboarding.test.d.ts +0 -1
  165. package/dist/cjs/Onboarding/Onboarding.test.js +0 -80
  166. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
  167. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +0 -50
  168. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +0 -1
  169. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +0 -54
  170. package/dist/cjs/ResponseActions/ResponseActions.test.d.ts +0 -1
  171. package/dist/cjs/ResponseActions/ResponseActions.test.js +0 -455
  172. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
  173. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +0 -25
  174. package/dist/cjs/Settings/SettingsForm.test.d.ts +0 -1
  175. package/dist/cjs/Settings/SettingsForm.test.js +0 -35
  176. package/dist/cjs/SourcesCard/SourcesCard.test.d.ts +0 -1
  177. package/dist/cjs/SourcesCard/SourcesCard.test.js +0 -39
  178. package/dist/cjs/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
  179. package/dist/cjs/SourcesCardBase/SourcesCardBase.test.js +0 -199
  180. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +0 -1
  181. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +0 -77
  182. package/dist/cjs/ToolCall/ToolCall.test.d.ts +0 -1
  183. package/dist/cjs/ToolCall/ToolCall.test.js +0 -201
  184. package/dist/cjs/ToolResponse/ToolResponse.test.d.ts +0 -1
  185. package/dist/cjs/ToolResponse/ToolResponse.test.js +0 -184
  186. package/dist/cjs/__mocks__/monaco-editor.d.ts +0 -11
  187. package/dist/cjs/__mocks__/monaco-editor.js +0 -18
  188. package/dist/cjs/__mocks__/rehype-external-links.d.ts +0 -2
  189. package/dist/cjs/__mocks__/rehype-external-links.js +0 -4
  190. package/dist/cjs/__mocks__/rehype-highlight.d.ts +0 -2
  191. package/dist/cjs/__mocks__/rehype-highlight.js +0 -4
  192. package/dist/cjs/__mocks__/rehype-sanitize.d.ts +0 -2
  193. package/dist/cjs/__mocks__/rehype-sanitize.js +0 -4
  194. package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +0 -2
  195. package/dist/cjs/__mocks__/rehype-unwrap-images.js +0 -4
  196. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +0 -72
  198. package/dist/esm/Chatbot/Chatbot.test.d.ts +0 -1
  199. package/dist/esm/Chatbot/Chatbot.test.js +0 -27
  200. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
  201. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +0 -22
  202. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +0 -1
  203. package/dist/esm/ChatbotContent/ChatbotContent.test.js +0 -17
  204. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
  205. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -70
  206. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
  207. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -272
  208. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
  209. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +0 -22
  210. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
  211. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +0 -82
  212. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
  213. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +0 -13
  214. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
  215. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +0 -13
  216. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
  217. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -20
  218. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
  219. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +0 -13
  220. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
  221. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -20
  222. package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
  223. package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -20
  224. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
  225. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -44
  226. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
  227. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -42
  228. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
  229. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -50
  230. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +0 -1
  231. package/dist/esm/ChatbotModal/ChatbotModal.test.js +0 -11
  232. package/dist/esm/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
  233. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +0 -59
  234. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
  235. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -56
  236. package/dist/esm/CodeModal/CodeModal.test.d.ts +0 -1
  237. package/dist/esm/CodeModal/CodeModal.test.js +0 -29
  238. package/dist/esm/Compare/Compare.test.d.ts +0 -1
  239. package/dist/esm/Compare/Compare.test.js +0 -13
  240. package/dist/esm/DeepThinking/DeepThinking.test.d.ts +0 -1
  241. package/dist/esm/DeepThinking/DeepThinking.test.js +0 -141
  242. package/dist/esm/FileDetails/FileDetails.test.d.ts +0 -1
  243. package/dist/esm/FileDetails/FileDetails.test.js +0 -37
  244. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
  245. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +0 -74
  246. package/dist/esm/FileDropZone/FileDropZone.test.d.ts +0 -1
  247. package/dist/esm/FileDropZone/FileDropZone.test.js +0 -95
  248. package/dist/esm/FilePreview/FilePreview.test.d.ts +0 -1
  249. package/dist/esm/FilePreview/FilePreview.test.js +0 -92
  250. package/dist/esm/ImagePreview/ImagePreview.test.d.ts +0 -1
  251. package/dist/esm/ImagePreview/ImagePreview.test.js +0 -220
  252. package/dist/esm/MarkdownContent/MarkdownContent.test.d.ts +0 -1
  253. package/dist/esm/MarkdownContent/MarkdownContent.test.js +0 -187
  254. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
  255. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -126
  256. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
  257. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +0 -25
  258. package/dist/esm/Message/Message.test.d.ts +0 -1
  259. package/dist/esm/Message/Message.test.js +0 -1123
  260. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
  261. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +0 -20
  262. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
  263. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -20
  264. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
  265. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -20
  266. package/dist/esm/Message/MessageLoading.test.d.ts +0 -1
  267. package/dist/esm/Message/MessageLoading.test.js +0 -20
  268. package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
  269. package/dist/esm/Message/QuickResponse/QuickResponse.test.js +0 -104
  270. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
  271. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +0 -48
  272. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
  273. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +0 -176
  274. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
  275. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +0 -238
  276. package/dist/esm/MessageBar/AttachButton.test.d.ts +0 -1
  277. package/dist/esm/MessageBar/AttachButton.test.js +0 -147
  278. package/dist/esm/MessageBar/MessageBar.test.d.ts +0 -1
  279. package/dist/esm/MessageBar/MessageBar.test.js +0 -333
  280. package/dist/esm/MessageBar/SendButton.test.d.ts +0 -1
  281. package/dist/esm/MessageBar/SendButton.test.js +0 -53
  282. package/dist/esm/MessageBar/StopButton.test.d.ts +0 -1
  283. package/dist/esm/MessageBar/StopButton.test.js +0 -53
  284. package/dist/esm/MessageBox/JumpButton.test.d.ts +0 -1
  285. package/dist/esm/MessageBox/JumpButton.test.js +0 -34
  286. package/dist/esm/MessageBox/MessageBox.test.d.ts +0 -1
  287. package/dist/esm/MessageBox/MessageBox.test.js +0 -289
  288. package/dist/esm/MessageDivider/MessageDivider.test.d.ts +0 -1
  289. package/dist/esm/MessageDivider/MessageDivider.test.js +0 -24
  290. package/dist/esm/Onboarding/Onboarding.test.d.ts +0 -1
  291. package/dist/esm/Onboarding/Onboarding.test.js +0 -75
  292. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
  293. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +0 -48
  294. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +0 -1
  295. package/dist/esm/ResponseActions/ResponseActionButton.test.js +0 -49
  296. package/dist/esm/ResponseActions/ResponseActions.test.d.ts +0 -1
  297. package/dist/esm/ResponseActions/ResponseActions.test.js +0 -450
  298. package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
  299. package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +0 -20
  300. package/dist/esm/Settings/SettingsForm.test.d.ts +0 -1
  301. package/dist/esm/Settings/SettingsForm.test.js +0 -33
  302. package/dist/esm/SourcesCard/SourcesCard.test.d.ts +0 -1
  303. package/dist/esm/SourcesCard/SourcesCard.test.js +0 -34
  304. package/dist/esm/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
  305. package/dist/esm/SourcesCardBase/SourcesCardBase.test.js +0 -194
  306. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +0 -1
  307. package/dist/esm/TermsOfUse/TermsOfUse.test.js +0 -72
  308. package/dist/esm/ToolCall/ToolCall.test.d.ts +0 -1
  309. package/dist/esm/ToolCall/ToolCall.test.js +0 -196
  310. package/dist/esm/ToolResponse/ToolResponse.test.d.ts +0 -1
  311. package/dist/esm/ToolResponse/ToolResponse.test.js +0 -179
  312. package/dist/esm/__mocks__/monaco-editor.d.ts +0 -11
  313. package/dist/esm/__mocks__/monaco-editor.js +0 -18
  314. package/dist/esm/__mocks__/rehype-external-links.d.ts +0 -2
  315. package/dist/esm/__mocks__/rehype-external-links.js +0 -2
  316. package/dist/esm/__mocks__/rehype-highlight.d.ts +0 -2
  317. package/dist/esm/__mocks__/rehype-highlight.js +0 -2
  318. package/dist/esm/__mocks__/rehype-sanitize.d.ts +0 -2
  319. package/dist/esm/__mocks__/rehype-sanitize.js +0 -2
  320. package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +0 -2
  321. package/dist/esm/__mocks__/rehype-unwrap-images.js +0 -2
@@ -1,34 +1,76 @@
1
1
  // ============================================================================
2
2
  // Markdown Content - Shared component for rendering markdown
3
3
  // ============================================================================
4
- import { type FunctionComponent, ReactNode } from 'react';
5
- import Markdown, { Options } from 'react-markdown';
6
- import remarkGfm from 'remark-gfm';
4
+ import {
5
+ createContext,
6
+ useContext,
7
+ useSyncExternalStore,
8
+ type ComponentType,
9
+ type FunctionComponent,
10
+ type ReactNode
11
+ } from 'react';
12
+ import type { Options } from 'react-markdown';
7
13
  import { ContentVariants } from '@patternfly/react-core';
8
- import CodeBlockMessage, { CodeBlockMessageProps } from '../Message/CodeBlockMessage/CodeBlockMessage';
14
+ import type { CodeBlockMessageProps } from '../Message/CodeBlockMessage/CodeBlockMessage';
15
+ import type { TableProps } from '@patternfly/react-table';
16
+ import type { PluggableList } from 'unified';
17
+ import type { ButtonProps } from '@patternfly/react-core';
9
18
  import TextMessage from '../Message/TextMessage/TextMessage';
10
- import ListItemMessage from '../Message/ListMessage/ListItemMessage';
11
- import UnorderedListMessage from '../Message/ListMessage/UnorderedListMessage';
12
- import OrderedListMessage from '../Message/ListMessage/OrderedListMessage';
13
- import TableMessage from '../Message/TableMessage/TableMessage';
14
- import TrMessage from '../Message/TableMessage/TrMessage';
15
- import TdMessage from '../Message/TableMessage/TdMessage';
16
- import TbodyMessage from '../Message/TableMessage/TbodyMessage';
17
- import TheadMessage from '../Message/TableMessage/TheadMessage';
18
- import ThMessage from '../Message/TableMessage/ThMessage';
19
- import { TableProps } from '@patternfly/react-table';
20
- import ImageMessage from '../Message/ImageMessage/ImageMessage';
21
- import rehypeUnwrapImages from 'rehype-unwrap-images';
22
- import rehypeExternalLinks from 'rehype-external-links';
23
- import rehypeSanitize from 'rehype-sanitize';
24
- import rehypeHighlight from 'rehype-highlight';
25
- import 'highlight.js/styles/vs2015.css';
26
- import { PluggableList } from 'unified';
27
- import LinkMessage from '../Message/LinkMessage/LinkMessage';
28
- import { rehypeMoveImagesOutOfParagraphs } from '../Message/Plugins/rehypeMoveImagesOutOfParagraphs';
29
- import SuperscriptMessage from '../Message/SuperscriptMessage/SuperscriptMessage';
30
- import { ButtonProps } from '@patternfly/react-core';
31
- import { css } from '@patternfly/react-styles';
19
+
20
+ type MarkdownRendererModule = typeof import('./MarkdownRenderer');
21
+
22
+ let markdownRendererPromise: Promise<MarkdownRendererModule> | null = null;
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ let ResolvedMarkdownRenderer: ComponentType<any> | null = null;
25
+ const markdownRendererListeners = new Set<() => void>();
26
+
27
+ const importMarkdownRenderer = () => {
28
+ if (!markdownRendererPromise) {
29
+ markdownRendererPromise = import('./MarkdownRenderer').then((module) => {
30
+ ResolvedMarkdownRenderer = module.default;
31
+ markdownRendererListeners.forEach((listener) => listener());
32
+ return module;
33
+ });
34
+ }
35
+
36
+ return markdownRendererPromise;
37
+ };
38
+
39
+ const subscribeToMarkdownRendererReady = (listener: () => void) => {
40
+ markdownRendererListeners.add(listener);
41
+ void importMarkdownRenderer();
42
+ return () => markdownRendererListeners.delete(listener);
43
+ };
44
+
45
+ /**
46
+ * Whether the lazy-loaded markdown renderer chunk has finished loading.
47
+ */
48
+ export const useIsMarkdownRendererReady = (): boolean =>
49
+ useSyncExternalStore(
50
+ subscribeToMarkdownRendererReady,
51
+ () => ResolvedMarkdownRenderer !== null,
52
+ () => true
53
+ );
54
+
55
+ /**
56
+ * When provided by `MessageBox`, defers markdown rendering until the shared chunk is ready
57
+ * so existing messages don't each flash an individual loading state.
58
+ */
59
+ export const MarkdownRendererReadyContext = createContext<boolean | null>(null);
60
+
61
+ /**
62
+ * Eagerly fetches the markdown renderer chunk so the first rendered message
63
+ * doesn't flash a loading state while the chunk downloads. Safe to call repeatedly
64
+ * (the dynamic import is cached).
65
+ */
66
+ export const preloadMarkdownRenderer = (): void => {
67
+ void importMarkdownRenderer();
68
+ };
69
+
70
+ /**
71
+ * Resolves when the markdown renderer chunk has loaded.
72
+ */
73
+ export const whenMarkdownRendererReady = (): Promise<MarkdownRendererModule> => importMarkdownRenderer();
32
74
 
33
75
  /**
34
76
  * MarkdownContent renders content either as plain text or with content with markdown support.
@@ -69,31 +111,13 @@ export interface MarkdownContentProps {
69
111
  export const MarkdownContent: FunctionComponent<MarkdownContentProps> = ({
70
112
  content,
71
113
  isMarkdownDisabled,
72
- codeBlockProps,
73
- tableProps,
74
- openLinkInNewTab = true,
75
- additionalRehypePlugins = [],
76
- additionalRemarkPlugins = [],
77
- linkProps,
78
- reactMarkdownProps,
79
- remarkGfmProps,
80
- hasNoImages = false,
81
114
  isPrimary,
82
115
  textComponent,
83
- shouldRetainStyles
116
+ ...markdownProps
84
117
  }: MarkdownContentProps) => {
85
- let rehypePlugins: PluggableList = [rehypeUnwrapImages, rehypeMoveImagesOutOfParagraphs, rehypeHighlight];
86
- if (openLinkInNewTab) {
87
- rehypePlugins = rehypePlugins.concat([[rehypeExternalLinks, { target: '_blank' }, rehypeSanitize]]);
88
- }
89
- if (additionalRehypePlugins) {
90
- rehypePlugins.push(...additionalRehypePlugins);
91
- }
92
-
93
- const disallowedElements = hasNoImages ? ['img'] : [];
94
- if (reactMarkdownProps && reactMarkdownProps.disallowedElements) {
95
- disallowedElements.push(...reactMarkdownProps.disallowedElements);
96
- }
118
+ const contextReady = useContext(MarkdownRendererReadyContext);
119
+ const storeReady = useIsMarkdownRendererReady();
120
+ const isMarkdownRendererReady = contextReady ?? storeReady;
97
121
 
98
122
  if (isMarkdownDisabled) {
99
123
  if (textComponent) {
@@ -106,178 +130,11 @@ export const MarkdownContent: FunctionComponent<MarkdownContentProps> = ({
106
130
  );
107
131
  }
108
132
 
109
- return (
110
- <Markdown
111
- components={{
112
- section: (props) => {
113
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
- const { node, ...rest } = props;
115
- return (
116
- <section
117
- {...rest}
118
- className={css('pf-chatbot__message-text', shouldRetainStyles && 'pf-m-markdown', rest?.className)}
119
- />
120
- );
121
- },
122
- p: (props) => {
123
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
124
- const { node, ...rest } = props;
125
- return (
126
- <TextMessage
127
- shouldRetainStyles={shouldRetainStyles}
128
- component={ContentVariants.p}
129
- {...rest}
130
- isPrimary={isPrimary}
131
- />
132
- );
133
- },
134
- code: ({ children, ...props }) => {
135
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
136
- const { node, ...codeProps } = props;
137
- return (
138
- <CodeBlockMessage
139
- {...codeProps}
140
- {...codeBlockProps}
141
- isPrimary={isPrimary}
142
- shouldRetainStyles={shouldRetainStyles}
143
- >
144
- {children}
145
- </CodeBlockMessage>
146
- );
147
- },
148
- h1: (props) => {
149
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
150
- const { node, ...rest } = props;
151
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h1} {...rest} />;
152
- },
153
- h2: (props) => {
154
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
- const { node, ...rest } = props;
156
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h2} {...rest} />;
157
- },
158
- h3: (props) => {
159
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
160
- const { node, ...rest } = props;
161
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h3} {...rest} />;
162
- },
163
- h4: (props) => {
164
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
165
- const { node, ...rest } = props;
166
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h4} {...rest} />;
167
- },
168
- h5: (props) => {
169
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
170
- const { node, ...rest } = props;
171
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h5} {...rest} />;
172
- },
173
- h6: (props) => {
174
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
175
- const { node, ...rest } = props;
176
- return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h6} {...rest} />;
177
- },
178
- blockquote: (props) => {
179
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
180
- const { node, ...rest } = props;
181
- return (
182
- <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.blockquote} {...rest} />
183
- );
184
- },
185
- ul: (props) => {
186
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
187
- const { node, ...rest } = props;
188
- return <UnorderedListMessage shouldRetainStyles={shouldRetainStyles} {...rest} />;
189
- },
190
- ol: (props) => {
191
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
192
- const { node, ...rest } = props;
193
- return <OrderedListMessage shouldRetainStyles={shouldRetainStyles} {...rest} />;
194
- },
195
- li: (props) => {
196
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
197
- const { node, ...rest } = props;
198
- return <ListItemMessage {...rest} />;
199
- },
200
- // table requires node attribute for calculating headers for mobile breakpoint
201
- table: (props) => (
202
- <TableMessage shouldRetainStyles={shouldRetainStyles} {...props} {...tableProps} isPrimary={isPrimary} />
203
- ),
204
- tbody: (props) => {
205
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
206
- const { node, ...rest } = props;
207
- return <TbodyMessage {...rest} />;
208
- },
209
- thead: (props) => {
210
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
211
- const { node, ...rest } = props;
212
- return <TheadMessage {...rest} />;
213
- },
214
- tr: (props) => {
215
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
216
- const { node, ...rest } = props;
217
- return <TrMessage {...rest} />;
218
- },
219
- td: (props) => {
220
- // Conflicts with Td type
221
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
222
- const { node, width, ...rest } = props;
223
- return <TdMessage {...rest} />;
224
- },
225
- th: (props) => {
226
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
227
- const { node, ...rest } = props;
228
- return <ThMessage {...rest} />;
229
- },
230
- img: (props) => {
231
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
232
- const { node, ...rest } = props;
233
- return <ImageMessage {...rest} />;
234
- },
235
- a: (props) => {
236
- // node is just the details of the document structure - not needed
237
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
238
- const { node, ...rest } = props;
239
- return (
240
- // some a types conflict with ButtonProps, but it's ok because we are using an a tag
241
- // there are too many to handle manually
242
- <LinkMessage shouldRetainStyles={shouldRetainStyles} {...(rest as any)} {...linkProps}>
243
- {props.children}
244
- </LinkMessage>
245
- );
246
- },
247
- // used for footnotes
248
- sup: (props) => {
249
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
250
- const { node, ...rest } = props;
251
- return <SuperscriptMessage {...rest} />;
252
- }
253
- }}
254
- remarkPlugins={[[remarkGfm, { ...remarkGfmProps }], ...additionalRemarkPlugins]}
255
- rehypePlugins={rehypePlugins}
256
- {...reactMarkdownProps}
257
- remarkRehypeOptions={{
258
- // removes sr-only class from footnote labels applied by default
259
- footnoteLabelProperties: { className: [''] },
260
- // omit default ↩ text; backref icon is rendered in LinkMessage
261
- footnoteBackContent: (_referenceIndex, rereferenceIndex) => {
262
- if (rereferenceIndex > 1) {
263
- return [
264
- {
265
- type: 'element',
266
- tagName: 'sup',
267
- properties: {},
268
- children: [{ type: 'text', value: String(rereferenceIndex) }]
269
- }
270
- ];
271
- }
272
- return [];
273
- },
274
- ...reactMarkdownProps?.remarkRehypeOptions
275
- }}
276
- disallowedElements={disallowedElements}
277
- >
278
- {content}
279
- </Markdown>
280
- );
133
+ if (!isMarkdownRendererReady || !ResolvedMarkdownRenderer) {
134
+ return null;
135
+ }
136
+
137
+ return <ResolvedMarkdownRenderer {...markdownProps} content={content} isPrimary={isPrimary} />;
281
138
  };
282
139
 
283
140
  export default MarkdownContent;
@@ -0,0 +1,235 @@
1
+ // ============================================================================
2
+ // Markdown Renderer - Heavy markdown pipeline (dynamically imported)
3
+ // ============================================================================
4
+ import { type FunctionComponent } from 'react';
5
+ import Markdown from 'react-markdown';
6
+ import remarkGfm from 'remark-gfm';
7
+ import { ContentVariants } from '@patternfly/react-core';
8
+ import CodeBlockMessage from '../Message/CodeBlockMessage/CodeBlockMessage';
9
+ import TextMessage from '../Message/TextMessage/TextMessage';
10
+ import ListItemMessage from '../Message/ListMessage/ListItemMessage';
11
+ import UnorderedListMessage from '../Message/ListMessage/UnorderedListMessage';
12
+ import OrderedListMessage from '../Message/ListMessage/OrderedListMessage';
13
+ import TableMessage from '../Message/TableMessage/TableMessage';
14
+ import TrMessage from '../Message/TableMessage/TrMessage';
15
+ import TdMessage from '../Message/TableMessage/TdMessage';
16
+ import TbodyMessage from '../Message/TableMessage/TbodyMessage';
17
+ import TheadMessage from '../Message/TableMessage/TheadMessage';
18
+ import ThMessage from '../Message/TableMessage/ThMessage';
19
+ import ImageMessage from '../Message/ImageMessage/ImageMessage';
20
+ import rehypeUnwrapImages from 'rehype-unwrap-images';
21
+ import rehypeExternalLinks from 'rehype-external-links';
22
+ import rehypeSanitize from 'rehype-sanitize';
23
+ import rehypeHighlight from 'rehype-highlight';
24
+ import 'highlight.js/styles/vs2015.css';
25
+ import type { PluggableList } from 'unified';
26
+ import LinkMessage from '../Message/LinkMessage/LinkMessage';
27
+ import { rehypeMoveImagesOutOfParagraphs } from '../Message/Plugins/rehypeMoveImagesOutOfParagraphs';
28
+ import SuperscriptMessage from '../Message/SuperscriptMessage/SuperscriptMessage';
29
+ import { css } from '@patternfly/react-styles';
30
+ import type { MarkdownContentProps } from './MarkdownContent';
31
+
32
+ export type MarkdownRendererProps = Omit<MarkdownContentProps, 'isMarkdownDisabled' | 'textComponent'>;
33
+
34
+ const MarkdownRenderer: FunctionComponent<MarkdownRendererProps> = ({
35
+ content,
36
+ codeBlockProps,
37
+ tableProps,
38
+ openLinkInNewTab = true,
39
+ additionalRehypePlugins = [],
40
+ additionalRemarkPlugins = [],
41
+ linkProps,
42
+ reactMarkdownProps,
43
+ remarkGfmProps,
44
+ hasNoImages = false,
45
+ isPrimary,
46
+ shouldRetainStyles
47
+ }) => {
48
+ let rehypePlugins: PluggableList = [rehypeUnwrapImages, rehypeMoveImagesOutOfParagraphs, rehypeHighlight];
49
+ if (openLinkInNewTab) {
50
+ rehypePlugins = rehypePlugins.concat([[rehypeExternalLinks, { target: '_blank' }, rehypeSanitize]]);
51
+ }
52
+ if (additionalRehypePlugins) {
53
+ rehypePlugins.push(...additionalRehypePlugins);
54
+ }
55
+
56
+ const disallowedElements = hasNoImages ? ['img'] : [];
57
+ if (reactMarkdownProps && reactMarkdownProps.disallowedElements) {
58
+ disallowedElements.push(...reactMarkdownProps.disallowedElements);
59
+ }
60
+
61
+ return (
62
+ <Markdown
63
+ components={{
64
+ section: (props) => {
65
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
66
+ const { node, ...rest } = props;
67
+ return (
68
+ <section
69
+ {...rest}
70
+ className={css('pf-chatbot__message-text', shouldRetainStyles && 'pf-m-markdown', rest?.className)}
71
+ />
72
+ );
73
+ },
74
+ p: (props) => {
75
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
76
+ const { node, ...rest } = props;
77
+ return (
78
+ <TextMessage
79
+ shouldRetainStyles={shouldRetainStyles}
80
+ component={ContentVariants.p}
81
+ {...rest}
82
+ isPrimary={isPrimary}
83
+ />
84
+ );
85
+ },
86
+ code: ({ children, ...props }) => {
87
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
88
+ const { node, ...codeProps } = props;
89
+ return (
90
+ <CodeBlockMessage
91
+ {...codeProps}
92
+ {...codeBlockProps}
93
+ isPrimary={isPrimary}
94
+ shouldRetainStyles={shouldRetainStyles}
95
+ >
96
+ {children}
97
+ </CodeBlockMessage>
98
+ );
99
+ },
100
+ h1: (props) => {
101
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
102
+ const { node, ...rest } = props;
103
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h1} {...rest} />;
104
+ },
105
+ h2: (props) => {
106
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
107
+ const { node, ...rest } = props;
108
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h2} {...rest} />;
109
+ },
110
+ h3: (props) => {
111
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
+ const { node, ...rest } = props;
113
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h3} {...rest} />;
114
+ },
115
+ h4: (props) => {
116
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
117
+ const { node, ...rest } = props;
118
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h4} {...rest} />;
119
+ },
120
+ h5: (props) => {
121
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
122
+ const { node, ...rest } = props;
123
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h5} {...rest} />;
124
+ },
125
+ h6: (props) => {
126
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
127
+ const { node, ...rest } = props;
128
+ return <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.h6} {...rest} />;
129
+ },
130
+ blockquote: (props) => {
131
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
132
+ const { node, ...rest } = props;
133
+ return (
134
+ <TextMessage shouldRetainStyles={shouldRetainStyles} component={ContentVariants.blockquote} {...rest} />
135
+ );
136
+ },
137
+ ul: (props) => {
138
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
139
+ const { node, ...rest } = props;
140
+ return <UnorderedListMessage shouldRetainStyles={shouldRetainStyles} {...rest} />;
141
+ },
142
+ ol: (props) => {
143
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
144
+ const { node, ...rest } = props;
145
+ return <OrderedListMessage shouldRetainStyles={shouldRetainStyles} {...rest} />;
146
+ },
147
+ li: (props) => {
148
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
149
+ const { node, ...rest } = props;
150
+ return <ListItemMessage {...rest} />;
151
+ },
152
+ // table requires node attribute for calculating headers for mobile breakpoint
153
+ table: (props) => (
154
+ <TableMessage shouldRetainStyles={shouldRetainStyles} {...props} {...tableProps} isPrimary={isPrimary} />
155
+ ),
156
+ tbody: (props) => {
157
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
158
+ const { node, ...rest } = props;
159
+ return <TbodyMessage {...rest} />;
160
+ },
161
+ thead: (props) => {
162
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
163
+ const { node, ...rest } = props;
164
+ return <TheadMessage {...rest} />;
165
+ },
166
+ tr: (props) => {
167
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
168
+ const { node, ...rest } = props;
169
+ return <TrMessage {...rest} />;
170
+ },
171
+ td: (props) => {
172
+ // Conflicts with Td type
173
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
174
+ const { node, width, ...rest } = props;
175
+ return <TdMessage {...rest} />;
176
+ },
177
+ th: (props) => {
178
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
179
+ const { node, ...rest } = props;
180
+ return <ThMessage {...rest} />;
181
+ },
182
+ img: (props) => {
183
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
184
+ const { node, ...rest } = props;
185
+ return <ImageMessage {...rest} />;
186
+ },
187
+ a: (props) => {
188
+ // node is just the details of the document structure - not needed
189
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
190
+ const { node, ...rest } = props;
191
+ return (
192
+ // some a types conflict with ButtonProps, but it's ok because we are using an a tag
193
+ // there are too many to handle manually
194
+ <LinkMessage shouldRetainStyles={shouldRetainStyles} {...(rest as any)} {...linkProps}>
195
+ {props.children}
196
+ </LinkMessage>
197
+ );
198
+ },
199
+ // used for footnotes
200
+ sup: (props) => {
201
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
202
+ const { node, ...rest } = props;
203
+ return <SuperscriptMessage {...rest} />;
204
+ }
205
+ }}
206
+ remarkPlugins={[[remarkGfm, { ...remarkGfmProps }], ...additionalRemarkPlugins]}
207
+ rehypePlugins={rehypePlugins}
208
+ {...reactMarkdownProps}
209
+ remarkRehypeOptions={{
210
+ // removes sr-only class from footnote labels applied by default
211
+ footnoteLabelProperties: { className: [''] },
212
+ // omit default ↩ text; backref icon is rendered in LinkMessage
213
+ footnoteBackContent: (_referenceIndex, rereferenceIndex) => {
214
+ if (rereferenceIndex > 1) {
215
+ return [
216
+ {
217
+ type: 'element',
218
+ tagName: 'sup',
219
+ properties: {},
220
+ children: [{ type: 'text', value: String(rereferenceIndex) }]
221
+ }
222
+ ];
223
+ }
224
+ return [];
225
+ },
226
+ ...reactMarkdownProps?.remarkRehypeOptions
227
+ }}
228
+ disallowedElements={disallowedElements}
229
+ >
230
+ {content}
231
+ </Markdown>
232
+ );
233
+ };
234
+
235
+ export default MarkdownRenderer;
@@ -200,6 +200,11 @@
200
200
  &:not(.pf-m-xl, .pf-m-lg, .pf-m-md, .pf-m-sm) {
201
201
  --pf-v6-c-avatar--Width: 1.5rem;
202
202
  --pf-v6-c-avatar--Height: 1.5rem;
203
+
204
+ .pf-v6-svg {
205
+ width: 1rem;
206
+ height: 1rem;
207
+ }
203
208
  }
204
209
  }
205
210
 
@@ -8,6 +8,7 @@ import { monitorSampleAppQuickStartWithImage } from './QuickStarts/monitor-sampl
8
8
  import rehypeExternalLinks from '../__mocks__/rehype-external-links';
9
9
  import { AlertActionLink, Button, CodeBlockAction } from '@patternfly/react-core';
10
10
  import { DeepThinkingProps } from '../DeepThinking';
11
+ import { warmupMarkdownRenderer } from '../test-utils/markdownTestUtils';
11
12
 
12
13
  // Mock the icon components
13
14
  jest.mock('@patternfly/react-icons', () => ({
@@ -222,6 +223,10 @@ const checkListItemsRendered = () => {
222
223
  };
223
224
 
224
225
  describe('Message', () => {
226
+ beforeAll(async () => {
227
+ await warmupMarkdownRenderer();
228
+ });
229
+
225
230
  beforeEach(() => {
226
231
  jest.clearAllMocks();
227
232
  });
@@ -3,7 +3,7 @@
3
3
  // ============================================================================
4
4
  import { forwardRef, ReactNode, useEffect, useState } from 'react';
5
5
  import type { FunctionComponent, HTMLProps, MouseEvent as ReactMouseEvent, Ref } from 'react';
6
- import { Options } from 'react-markdown';
6
+ import type { Options } from 'react-markdown';
7
7
  import {
8
8
  AlertProps,
9
9
  Avatar,
@@ -25,10 +25,8 @@ import { QuickStart, QuickstartAction } from './QuickStarts/types';
25
25
  import QuickResponse from './QuickResponse/QuickResponse';
26
26
  import UserFeedback, { UserFeedbackProps } from './UserFeedback/UserFeedback';
27
27
  import UserFeedbackComplete, { UserFeedbackCompleteProps } from './UserFeedback/UserFeedbackComplete';
28
- import { TableProps } from '@patternfly/react-table';
29
- // see the full list of styles here: https://highlightjs.org/examples
30
- import 'highlight.js/styles/vs2015.css';
31
- import { PluggableList } from 'unified';
28
+ import type { TableProps } from '@patternfly/react-table';
29
+ import type { PluggableList } from 'unified';
32
30
  import ErrorMessage from './ErrorMessage/ErrorMessage';
33
31
  import MessageInput from './MessageInput';
34
32
  import ToolResponse, { ToolResponseProps } from '../ToolResponse';
@@ -24,7 +24,6 @@
24
24
  }
25
25
 
26
26
  @media screen and (min-width: 64rem) {
27
- .pf-chatbot--embedded,
28
27
  .pf-chatbot--drawer,
29
28
  .pf-chatbot--fullscreen {
30
29
  .pf-chatbot__messagebox {
@@ -32,6 +31,21 @@
32
31
  width: 100%;
33
32
  }
34
33
  }
34
+
35
+ /*
36
+ * Moves the scrollbar; see https://github.com/opendatahub-io/odh-dashboard/pull/8199
37
+ */
38
+ .pf-chatbot--embedded .pf-chatbot__messagebox.pf-chatbot__messagebox--outer-scroll {
39
+ width: 100%;
40
+ max-width: unset;
41
+ align-items: center;
42
+ }
43
+
44
+ .pf-chatbot--embedded .pf-chatbot__messagebox.pf-chatbot__messagebox--outer-scroll > *:not(.pf-chatbot__messagebox-announcement) {
45
+ max-width: 60rem;
46
+ width: 100%;
47
+ }
48
+
35
49
  }
36
50
 
37
51
  .pf-chatbot.pf-m-compact {