@vertesia/ui 1.0.0-dev.20260128.144200 → 1.0.0-dev.20260225.024852Z

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 (500) hide show
  1. package/lib/esm/core/components/InputList.js +1 -1
  2. package/lib/esm/core/components/InputList.js.map +1 -1
  3. package/lib/esm/core/components/Overlay.js +1 -1
  4. package/lib/esm/core/components/Overlay.js.map +1 -1
  5. package/lib/esm/core/components/SidePanel.js +8 -2
  6. package/lib/esm/core/components/SidePanel.js.map +1 -1
  7. package/lib/esm/core/components/Switch.js +1 -1
  8. package/lib/esm/core/components/Switch.js.map +1 -1
  9. package/lib/esm/core/components/index.js +0 -8
  10. package/lib/esm/core/components/index.js.map +1 -1
  11. package/lib/esm/core/components/shadcn/MessageBox.js.map +1 -0
  12. package/lib/esm/core/components/shadcn/Panel.js +13 -0
  13. package/lib/esm/core/components/shadcn/Panel.js.map +1 -0
  14. package/lib/esm/core/components/{Badge.js → shadcn/badge.js} +2 -2
  15. package/lib/esm/core/components/shadcn/badge.js.map +1 -0
  16. package/lib/esm/core/components/shadcn/command.js +1 -1
  17. package/lib/esm/core/components/shadcn/command.js.map +1 -1
  18. package/lib/esm/core/components/shadcn/filters/filterBar.js +73 -83
  19. package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
  20. package/lib/esm/core/components/shadcn/index.js +4 -2
  21. package/lib/esm/core/components/shadcn/index.js.map +1 -1
  22. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js +10 -0
  23. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js.map +1 -0
  24. package/lib/esm/core/components/{DeleteModal.js → shadcn/modal/DeleteModal.js} +1 -1
  25. package/lib/esm/core/components/shadcn/modal/DeleteModal.js.map +1 -0
  26. package/lib/esm/core/components/shadcn/{dialog.js → modal/dialog.js} +19 -15
  27. package/lib/esm/core/components/shadcn/modal/dialog.js.map +1 -0
  28. package/lib/esm/core/components/shadcn/modal/index.js +4 -0
  29. package/lib/esm/core/components/shadcn/modal/index.js.map +1 -0
  30. package/lib/esm/core/components/shadcn/popover.js +4 -2
  31. package/lib/esm/core/components/shadcn/popover.js.map +1 -1
  32. package/lib/esm/core/components/shadcn/selectBox.js +19 -15
  33. package/lib/esm/core/components/shadcn/selectBox.js.map +1 -1
  34. package/lib/esm/core/components/shadcn/tabs.js +16 -14
  35. package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
  36. package/lib/esm/core/components/shadcn/textarea.js +30 -2
  37. package/lib/esm/core/components/shadcn/textarea.js.map +1 -1
  38. package/lib/esm/core/components/shadcn/tooltip.js +5 -1
  39. package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
  40. package/lib/esm/features/agent/PayloadBuilder.js +45 -0
  41. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  42. package/lib/esm/features/agent/chat/AgentChart.js +12 -232
  43. package/lib/esm/features/agent/chat/AgentChart.js.map +1 -1
  44. package/lib/esm/features/agent/chat/AskUserWidget.js +2 -1
  45. package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
  46. package/lib/esm/features/agent/chat/DocumentPanel.js +46 -0
  47. package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -0
  48. package/lib/esm/features/agent/chat/DocumentTabBar.js +17 -0
  49. package/lib/esm/features/agent/chat/DocumentTabBar.js.map +1 -0
  50. package/lib/esm/features/agent/chat/ModernAgentConversation.js +159 -402
  51. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  52. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +99 -57
  53. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  54. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +4 -4
  55. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  56. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +4 -4
  57. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  58. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +3 -3
  59. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  60. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +25 -22
  61. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  62. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +110 -55
  63. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  64. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +2 -2
  65. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  66. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +146 -55
  67. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  68. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +5 -6
  69. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  70. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +110 -2
  71. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  72. package/lib/esm/features/agent/chat/SkillWidgetProvider.js +28 -15
  73. package/lib/esm/features/agent/chat/SkillWidgetProvider.js.map +1 -1
  74. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +146 -0
  75. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -0
  76. package/lib/esm/features/agent/chat/hooks/useAgentStream.js +180 -0
  77. package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -0
  78. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +100 -0
  79. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -0
  80. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +90 -0
  81. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -0
  82. package/lib/esm/features/agent/chat/index.js +6 -5
  83. package/lib/esm/features/agent/chat/index.js.map +1 -1
  84. package/lib/esm/features/agent/chat/types/document.js +2 -0
  85. package/lib/esm/features/agent/chat/types/document.js.map +1 -0
  86. package/lib/esm/features/agent/index.js +0 -2
  87. package/lib/esm/features/agent/index.js.map +1 -1
  88. package/lib/esm/features/store/collections/BrowseCollectionView.js +4 -6
  89. package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
  90. package/lib/esm/features/store/collections/CreateCollection.js +4 -4
  91. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  92. package/lib/esm/features/store/collections/EditCollectionView.js +1 -1
  93. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  94. package/lib/esm/features/store/objects/DocumentSearchResults.js +5 -5
  95. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  96. package/lib/esm/features/store/objects/ExportPropertiesModal.js +3 -3
  97. package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
  98. package/lib/esm/features/store/objects/components/ContentOverview.js +19 -120
  99. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  100. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +1 -1
  101. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  102. package/lib/esm/features/store/objects/components/SelectDocumentModal.js +2 -2
  103. package/lib/esm/features/store/objects/components/SelectDocumentModal.js.map +1 -1
  104. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
  105. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  106. package/lib/esm/features/store/objects/components/index.js +1 -1
  107. package/lib/esm/features/store/objects/components/index.js.map +1 -1
  108. package/lib/esm/features/store/objects/components/useDownloadFile.js +192 -0
  109. package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -0
  110. package/lib/esm/features/store/objects/search/DocumentSearchContext.js +1 -2
  111. package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  112. package/lib/esm/features/store/objects/selection/SelectionActions.js +5 -8
  113. package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
  114. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +4 -4
  115. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  116. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +2 -2
  117. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
  118. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +1 -1
  119. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
  120. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +3 -3
  121. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
  122. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +13 -13
  123. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  124. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +15 -8
  125. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  126. package/lib/esm/features/store/types/ObjectSchemaEditor.js +6 -5
  127. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  128. package/lib/esm/features/store/types/SelectContentType.js +3 -3
  129. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  130. package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -4
  131. package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
  132. package/lib/esm/features/store/types/TableLayoutEditor.js +4 -4
  133. package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
  134. package/lib/esm/features/user/UserInfo.js +73 -9
  135. package/lib/esm/features/user/UserInfo.js.map +1 -1
  136. package/lib/esm/features/utils/print.js +0 -1
  137. package/lib/esm/features/utils/print.js.map +1 -1
  138. package/lib/esm/layout/AppLayout.js +3 -4
  139. package/lib/esm/layout/AppLayout.js.map +1 -1
  140. package/lib/esm/layout/Sidebar.js +5 -5
  141. package/lib/esm/layout/Sidebar.js.map +1 -1
  142. package/lib/esm/router/HistoryNavigator.js +7 -1
  143. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  144. package/lib/esm/router/Nav.js +2 -2
  145. package/lib/esm/router/Nav.js.map +1 -1
  146. package/lib/esm/session/UserSession.js +35 -9
  147. package/lib/esm/session/UserSession.js.map +1 -1
  148. package/lib/esm/session/UserSessionProvider.js +3 -2
  149. package/lib/esm/session/UserSessionProvider.js.map +1 -1
  150. package/lib/esm/shell/apps/AppProjectSelector.js +2 -2
  151. package/lib/esm/shell/apps/AppProjectSelector.js.map +1 -1
  152. package/lib/esm/shell/apps/StandaloneApp.js +2 -2
  153. package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
  154. package/lib/esm/shell/login/InviteAcceptModal.js +2 -2
  155. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
  156. package/lib/esm/shell/login/SignInModal.js +1 -1
  157. package/lib/esm/shell/login/SignInModal.js.map +1 -1
  158. package/lib/esm/shell/login/SignupForm.js +2 -2
  159. package/lib/esm/shell/login/SignupForm.js.map +1 -1
  160. package/lib/esm/shell/login/UserInfo.js +2 -2
  161. package/lib/esm/shell/login/UserInfo.js.map +1 -1
  162. package/lib/esm/widgets/json-view/JSONCode.js +1 -1
  163. package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
  164. package/lib/esm/widgets/json-view/JSONDisplay.js +1 -1
  165. package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
  166. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +84 -13
  167. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  168. package/lib/esm/widgets/markdown/MarkdownFigure.js +40 -0
  169. package/lib/esm/widgets/markdown/MarkdownFigure.js.map +1 -0
  170. package/lib/esm/widgets/markdown/MarkdownRenderer.js +42 -7
  171. package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
  172. package/lib/esm/widgets/markdown/MermaidDiagram.js +80 -5
  173. package/lib/esm/widgets/markdown/MermaidDiagram.js.map +1 -1
  174. package/lib/esm/widgets/markdown/codeBlockHandlers.js +33 -33
  175. package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
  176. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js +2 -29
  177. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js.map +1 -1
  178. package/lib/esm/widgets/markdown/index.js +1 -0
  179. package/lib/esm/widgets/markdown/index.js.map +1 -1
  180. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js +77 -0
  181. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -0
  182. package/lib/esm/widgets/markdown/normalizeDirectives.js +45 -0
  183. package/lib/esm/widgets/markdown/normalizeDirectives.js.map +1 -0
  184. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +96 -0
  185. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -0
  186. package/lib/esm/widgets/monacoEditor/MonacoEditor.js +8 -14
  187. package/lib/esm/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  188. package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
  189. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +3 -3
  190. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  191. package/lib/esm/widgets/schema-editor/json-schema4-utils.js.map +1 -1
  192. package/lib/tsconfig.tsbuildinfo +1 -1
  193. package/lib/types/core/components/SidePanel.d.ts +4 -1
  194. package/lib/types/core/components/SidePanel.d.ts.map +1 -1
  195. package/lib/types/core/components/index.d.ts +0 -8
  196. package/lib/types/core/components/index.d.ts.map +1 -1
  197. package/lib/types/core/components/shadcn/MessageBox.d.ts.map +1 -0
  198. package/lib/types/core/components/{Panel.d.ts → shadcn/Panel.d.ts} +3 -1
  199. package/lib/types/core/components/shadcn/Panel.d.ts.map +1 -0
  200. package/lib/types/core/components/{Badge.d.ts → shadcn/badge.d.ts} +4 -4
  201. package/lib/types/core/components/shadcn/badge.d.ts.map +1 -0
  202. package/lib/types/core/components/shadcn/button.d.ts +1 -1
  203. package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  204. package/lib/types/core/components/shadcn/index.d.ts +4 -2
  205. package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
  206. package/lib/types/core/components/shadcn/input.d.ts +1 -1
  207. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -0
  208. package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -0
  209. package/lib/types/core/components/shadcn/{dialog.d.ts → modal/dialog.d.ts} +7 -4
  210. package/lib/types/core/components/shadcn/modal/dialog.d.ts.map +1 -0
  211. package/lib/types/core/components/shadcn/modal/index.d.ts +4 -0
  212. package/lib/types/core/components/shadcn/modal/index.d.ts.map +1 -0
  213. package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
  214. package/lib/types/core/components/shadcn/selectBox.d.ts +9 -5
  215. package/lib/types/core/components/shadcn/selectBox.d.ts.map +1 -1
  216. package/lib/types/core/components/shadcn/tabs.d.ts +14 -5
  217. package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
  218. package/lib/types/core/components/shadcn/textarea.d.ts +6 -2
  219. package/lib/types/core/components/shadcn/textarea.d.ts.map +1 -1
  220. package/lib/types/core/components/shadcn/tooltip.d.ts.map +1 -1
  221. package/lib/types/features/agent/PayloadBuilder.d.ts +22 -4
  222. package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
  223. package/lib/types/features/agent/chat/AgentChart.d.ts +3 -44
  224. package/lib/types/features/agent/chat/AgentChart.d.ts.map +1 -1
  225. package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  226. package/lib/types/features/agent/chat/DocumentPanel.d.ts +16 -0
  227. package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -0
  228. package/lib/types/features/agent/chat/DocumentTabBar.d.ts +10 -0
  229. package/lib/types/features/agent/chat/DocumentTabBar.d.ts.map +1 -0
  230. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +69 -1
  231. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  232. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +36 -1
  233. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  234. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts +18 -2
  235. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  236. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +4 -7
  237. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  238. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
  239. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  240. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +35 -7
  241. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  242. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +11 -1
  243. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  244. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +20 -2
  245. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  246. package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  247. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +18 -1
  248. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  249. package/lib/types/features/agent/chat/SkillWidgetProvider.d.ts.map +1 -1
  250. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts +22 -0
  251. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -0
  252. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +42 -0
  253. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -0
  254. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts +22 -0
  255. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -0
  256. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +27 -0
  257. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -0
  258. package/lib/types/features/agent/chat/index.d.ts +12 -8
  259. package/lib/types/features/agent/chat/index.d.ts.map +1 -1
  260. package/lib/types/features/agent/chat/types/document.d.ts +5 -0
  261. package/lib/types/features/agent/chat/types/document.d.ts.map +1 -0
  262. package/lib/types/features/agent/index.d.ts +0 -2
  263. package/lib/types/features/agent/index.d.ts.map +1 -1
  264. package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
  265. package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  266. package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  267. package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
  268. package/lib/types/features/store/objects/components/index.d.ts +1 -1
  269. package/lib/types/features/store/objects/components/index.d.ts.map +1 -1
  270. package/lib/types/features/store/objects/components/useDownloadFile.d.ts +35 -0
  271. package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -0
  272. package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  273. package/lib/types/features/store/objects/selection/SelectionActions.d.ts +1 -1
  274. package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  275. package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
  276. package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
  277. package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  278. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts +2 -1
  279. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  280. package/lib/types/features/store/types/SelectContentTypeModal.d.ts +1 -1
  281. package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  282. package/lib/types/features/store/types/TableLayoutEditor.d.ts +2 -1
  283. package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  284. package/lib/types/features/user/UserInfo.d.ts +12 -1
  285. package/lib/types/features/user/UserInfo.d.ts.map +1 -1
  286. package/lib/types/features/utils/print.d.ts.map +1 -1
  287. package/lib/types/layout/AppLayout.d.ts.map +1 -1
  288. package/lib/types/layout/Sidebar.d.ts +4 -2
  289. package/lib/types/layout/Sidebar.d.ts.map +1 -1
  290. package/lib/types/router/HistoryNavigator.d.ts.map +1 -1
  291. package/lib/types/router/Nav.d.ts +6 -1
  292. package/lib/types/router/Nav.d.ts.map +1 -1
  293. package/lib/types/session/UserSession.d.ts.map +1 -1
  294. package/lib/types/session/UserSessionProvider.d.ts +1 -0
  295. package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
  296. package/lib/types/widgets/json-view/JSONCode.d.ts.map +1 -1
  297. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts +10 -1
  298. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  299. package/lib/types/widgets/markdown/MarkdownFigure.d.ts +15 -0
  300. package/lib/types/widgets/markdown/MarkdownFigure.d.ts.map +1 -0
  301. package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  302. package/lib/types/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
  303. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +5 -2
  304. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
  305. package/lib/types/widgets/markdown/index.d.ts +1 -0
  306. package/lib/types/widgets/markdown/index.d.ts.map +1 -1
  307. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts +9 -0
  308. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -0
  309. package/lib/types/widgets/markdown/normalizeDirectives.d.ts +20 -0
  310. package/lib/types/widgets/markdown/normalizeDirectives.d.ts.map +1 -0
  311. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts +2 -0
  312. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -0
  313. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts +1 -3
  314. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  315. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
  316. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  317. package/lib/vertesia-ui-core.js +1 -1
  318. package/lib/vertesia-ui-core.js.map +1 -1
  319. package/lib/vertesia-ui-features.js +1 -1
  320. package/lib/vertesia-ui-features.js.map +1 -1
  321. package/lib/vertesia-ui-layout.js +1 -1
  322. package/lib/vertesia-ui-layout.js.map +1 -1
  323. package/lib/vertesia-ui-router.js +1 -1
  324. package/lib/vertesia-ui-router.js.map +1 -1
  325. package/lib/vertesia-ui-session.js +1 -1
  326. package/lib/vertesia-ui-session.js.map +1 -1
  327. package/lib/vertesia-ui-shell.js +1 -1
  328. package/lib/vertesia-ui-shell.js.map +1 -1
  329. package/lib/vertesia-ui-widgets.js +1 -1
  330. package/lib/vertesia-ui-widgets.js.map +1 -1
  331. package/package.json +14 -10
  332. package/src/core/components/InputList.tsx +1 -1
  333. package/src/core/components/Overlay.tsx +1 -1
  334. package/src/core/components/SidePanel.tsx +29 -15
  335. package/src/core/components/Switch.tsx +1 -1
  336. package/src/core/components/index.ts +0 -8
  337. package/src/core/components/shadcn/Panel.tsx +50 -0
  338. package/src/core/components/{Badge.tsx → shadcn/badge.tsx} +3 -3
  339. package/src/core/components/shadcn/command.tsx +1 -1
  340. package/src/core/components/shadcn/filters/filterBar.tsx +76 -87
  341. package/src/core/components/shadcn/index.ts +5 -3
  342. package/src/core/components/{ConfirmModal.tsx → shadcn/modal/ConfirmModal.tsx} +8 -8
  343. package/src/core/components/{DeleteModal.tsx → shadcn/modal/DeleteModal.tsx} +1 -1
  344. package/src/core/components/shadcn/{dialog.tsx → modal/dialog.tsx} +43 -32
  345. package/src/core/components/shadcn/modal/index.ts +3 -0
  346. package/src/core/components/shadcn/popover.tsx +4 -2
  347. package/src/core/components/shadcn/selectBox.tsx +71 -52
  348. package/src/core/components/shadcn/tabs.tsx +36 -19
  349. package/src/core/components/shadcn/textarea.tsx +43 -2
  350. package/src/core/components/shadcn/tooltip.tsx +23 -17
  351. package/src/features/agent/PayloadBuilder.tsx +70 -9
  352. package/src/features/agent/chat/AgentChart.tsx +46 -678
  353. package/src/features/agent/chat/AskUserWidget.tsx +4 -3
  354. package/src/features/agent/chat/DocumentPanel.tsx +120 -0
  355. package/src/features/agent/chat/DocumentTabBar.tsx +49 -0
  356. package/src/features/agent/chat/ModernAgentConversation.tsx +403 -549
  357. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +162 -55
  358. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +40 -10
  359. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +12 -16
  360. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +3 -3
  361. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +68 -75
  362. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +206 -94
  363. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +22 -5
  364. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +295 -113
  365. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +11 -8
  366. package/src/features/agent/chat/ModernAgentOutput/utils.ts +133 -4
  367. package/src/features/agent/chat/SkillWidgetProvider.tsx +32 -15
  368. package/src/features/agent/chat/hooks/useAgentPlans.ts +190 -0
  369. package/src/features/agent/chat/hooks/useAgentStream.ts +239 -0
  370. package/src/features/agent/chat/hooks/useDocumentPanel.ts +118 -0
  371. package/src/features/agent/chat/hooks/useFileProcessing.ts +126 -0
  372. package/src/features/agent/chat/index.ts +18 -17
  373. package/src/features/agent/chat/types/document.ts +4 -0
  374. package/src/features/agent/index.ts +0 -2
  375. package/src/features/store/collections/BrowseCollectionView.tsx +5 -8
  376. package/src/features/store/collections/CreateCollection.tsx +8 -8
  377. package/src/features/store/collections/EditCollectionView.tsx +1 -1
  378. package/src/features/store/objects/DocumentSearchResults.tsx +9 -13
  379. package/src/features/store/objects/ExportPropertiesModal.tsx +9 -7
  380. package/src/features/store/objects/components/ContentOverview.tsx +29 -155
  381. package/src/features/store/objects/components/PropertiesEditorModal.tsx +0 -1
  382. package/src/features/store/objects/components/SelectDocumentModal.tsx +6 -6
  383. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  384. package/src/features/store/objects/components/index.ts +1 -1
  385. package/src/features/store/objects/components/useDownloadFile.ts +237 -0
  386. package/src/features/store/objects/search/DocumentSearchContext.ts +1 -2
  387. package/src/features/store/objects/selection/SelectionActions.tsx +0 -4
  388. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +13 -13
  389. package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +2 -6
  390. package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +1 -3
  391. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +8 -8
  392. package/src/features/store/objects/upload/DocumentUploadModal.tsx +25 -25
  393. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +16 -10
  394. package/src/features/store/types/ObjectSchemaEditor.tsx +32 -29
  395. package/src/features/store/types/SelectContentType.tsx +3 -3
  396. package/src/features/store/types/SelectContentTypeModal.tsx +17 -30
  397. package/src/features/store/types/TableLayoutEditor.tsx +14 -18
  398. package/src/features/user/UserInfo.tsx +176 -10
  399. package/src/features/utils/print.ts +0 -1
  400. package/src/layout/AppLayout.tsx +16 -44
  401. package/src/layout/Sidebar.tsx +7 -5
  402. package/src/router/HistoryNavigator.ts +9 -1
  403. package/src/router/Nav.tsx +7 -2
  404. package/src/session/UserSession.ts +38 -9
  405. package/src/session/UserSessionProvider.tsx +3 -2
  406. package/src/shell/apps/AppProjectSelector.tsx +2 -2
  407. package/src/shell/apps/StandaloneApp.tsx +3 -3
  408. package/src/shell/login/InviteAcceptModal.tsx +6 -6
  409. package/src/shell/login/SignInModal.tsx +1 -1
  410. package/src/shell/login/SignupForm.tsx +3 -3
  411. package/src/shell/login/UserInfo.tsx +5 -5
  412. package/src/widgets/json-view/JSONCode.tsx +1 -3
  413. package/src/widgets/json-view/JSONDisplay.tsx +1 -1
  414. package/src/widgets/markdown/ArtifactContentRenderer.tsx +115 -14
  415. package/src/widgets/markdown/MarkdownFigure.tsx +100 -0
  416. package/src/widgets/markdown/MarkdownRenderer.tsx +62 -9
  417. package/src/widgets/markdown/MermaidDiagram.tsx +97 -5
  418. package/src/widgets/markdown/codeBlockHandlers.test.tsx +3 -34
  419. package/src/widgets/markdown/codeBlockHandlers.tsx +47 -42
  420. package/src/widgets/markdown/index.ts +1 -0
  421. package/src/widgets/markdown/markdown.css +192 -0
  422. package/src/widgets/markdown/normalizeCustomSchemeLinks.test.ts +86 -0
  423. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +91 -0
  424. package/src/widgets/markdown/normalizeDirectives.ts +50 -0
  425. package/src/widgets/markdown/remarkDirectiveHandler.ts +119 -0
  426. package/src/widgets/monacoEditor/MonacoEditor.tsx +8 -22
  427. package/src/widgets/schema-editor/ManagedSchema.ts +1 -1
  428. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +5 -5
  429. package/src/widgets/schema-editor/json-schema4-utils.ts +1 -1
  430. package/lib/esm/core/components/Badge.js.map +0 -1
  431. package/lib/esm/core/components/Button.js +0 -32
  432. package/lib/esm/core/components/Button.js.map +0 -1
  433. package/lib/esm/core/components/ConfirmModal.js +0 -10
  434. package/lib/esm/core/components/ConfirmModal.js.map +0 -1
  435. package/lib/esm/core/components/DeleteModal.js.map +0 -1
  436. package/lib/esm/core/components/MessageBox.js.map +0 -1
  437. package/lib/esm/core/components/Modal.js +0 -26
  438. package/lib/esm/core/components/Modal.js.map +0 -1
  439. package/lib/esm/core/components/Panel.js +0 -8
  440. package/lib/esm/core/components/Panel.js.map +0 -1
  441. package/lib/esm/core/components/SelectBox.js +0 -67
  442. package/lib/esm/core/components/SelectBox.js.map +0 -1
  443. package/lib/esm/core/components/shadcn/dialog.js.map +0 -1
  444. package/lib/esm/core/components/tabs/Tabs.js +0 -78
  445. package/lib/esm/core/components/tabs/Tabs.js.map +0 -1
  446. package/lib/esm/core/components/tabs/TabsContext.js +0 -7
  447. package/lib/esm/core/components/tabs/TabsContext.js.map +0 -1
  448. package/lib/esm/core/components/tabs/index.js +0 -3
  449. package/lib/esm/core/components/tabs/index.js.map +0 -1
  450. package/lib/esm/features/agent/createChartTool.js +0 -632
  451. package/lib/esm/features/agent/createChartTool.js.map +0 -1
  452. package/lib/esm/features/agent/examples.js +0 -295
  453. package/lib/esm/features/agent/examples.js.map +0 -1
  454. package/lib/esm/features/agent/visualization.js +0 -165
  455. package/lib/esm/features/agent/visualization.js.map +0 -1
  456. package/lib/esm/features/store/objects/components/useDownloadObject.js +0 -21
  457. package/lib/esm/features/store/objects/components/useDownloadObject.js.map +0 -1
  458. package/lib/types/core/components/Badge.d.ts.map +0 -1
  459. package/lib/types/core/components/Button.d.ts +0 -14
  460. package/lib/types/core/components/Button.d.ts.map +0 -1
  461. package/lib/types/core/components/ConfirmModal.d.ts.map +0 -1
  462. package/lib/types/core/components/DeleteModal.d.ts.map +0 -1
  463. package/lib/types/core/components/MessageBox.d.ts.map +0 -1
  464. package/lib/types/core/components/Modal.d.ts +0 -30
  465. package/lib/types/core/components/Modal.d.ts.map +0 -1
  466. package/lib/types/core/components/Panel.d.ts.map +0 -1
  467. package/lib/types/core/components/SelectBox.d.ts +0 -36
  468. package/lib/types/core/components/SelectBox.d.ts.map +0 -1
  469. package/lib/types/core/components/shadcn/dialog.d.ts.map +0 -1
  470. package/lib/types/core/components/tabs/Tabs.d.ts +0 -25
  471. package/lib/types/core/components/tabs/Tabs.d.ts.map +0 -1
  472. package/lib/types/core/components/tabs/TabsContext.d.ts +0 -17
  473. package/lib/types/core/components/tabs/TabsContext.d.ts.map +0 -1
  474. package/lib/types/core/components/tabs/index.d.ts +0 -3
  475. package/lib/types/core/components/tabs/index.d.ts.map +0 -1
  476. package/lib/types/features/agent/createChartTool.d.ts +0 -178
  477. package/lib/types/features/agent/createChartTool.d.ts.map +0 -1
  478. package/lib/types/features/agent/examples.d.ts +0 -59
  479. package/lib/types/features/agent/examples.d.ts.map +0 -1
  480. package/lib/types/features/agent/visualization.d.ts +0 -95
  481. package/lib/types/features/agent/visualization.d.ts.map +0 -1
  482. package/lib/types/features/store/objects/components/useDownloadObject.d.ts +0 -4
  483. package/lib/types/features/store/objects/components/useDownloadObject.d.ts.map +0 -1
  484. package/src/core/components/Button.tsx +0 -63
  485. package/src/core/components/Modal.tsx +0 -144
  486. package/src/core/components/Panel.tsx +0 -34
  487. package/src/core/components/SelectBox.tsx +0 -188
  488. package/src/core/components/tabs/Tabs.tsx +0 -132
  489. package/src/core/components/tabs/TabsContext.ts +0 -25
  490. package/src/core/components/tabs/index.ts +0 -2
  491. package/src/features/agent/CHART_INSTRUCTIONS.md +0 -228
  492. package/src/features/agent/createChartTool.ts +0 -643
  493. package/src/features/agent/examples.ts +0 -321
  494. package/src/features/agent/visualization.ts +0 -227
  495. package/src/features/store/objects/components/useDownloadObject.ts +0 -29
  496. /package/lib/esm/core/components/{MessageBox.js → shadcn/MessageBox.js} +0 -0
  497. /package/lib/types/core/components/{MessageBox.d.ts → shadcn/MessageBox.d.ts} +0 -0
  498. /package/lib/types/core/components/{ConfirmModal.d.ts → shadcn/modal/ConfirmModal.d.ts} +0 -0
  499. /package/lib/types/core/components/{DeleteModal.d.ts → shadcn/modal/DeleteModal.d.ts} +0 -0
  500. /package/src/core/components/{MessageBox.tsx → shadcn/MessageBox.tsx} +0 -0
@@ -1,10 +1,10 @@
1
- import { AgentMessage, AgentMessageType, AskUserMessageDetails } from "@vertesia/common";
2
- import { Badge, Button, useToast } from "@vertesia/ui/core";
1
+ import { AgentMessage, AgentMessageType, AskUserMessageDetails, MarkdownRenditionFormat } from "@vertesia/common";
2
+ import { Badge, Button, cn, Dropdown, MenuItem, useToast } from "@vertesia/ui/core";
3
3
  import { NavLink } from "@vertesia/ui/router";
4
4
  import { useUserSession } from "@vertesia/ui/session";
5
5
  import { MarkdownRenderer } from "@vertesia/ui/widgets";
6
6
  import dayjs from "dayjs";
7
- import { AlertCircle, Bot, CheckCircle, Clock, CopyIcon, Info, Layers, MessageSquare, User } from "lucide-react";
7
+ import { AlertCircle, Bot, CheckCircle, Clock, CopyIcon, Download, Info, Layers, type LucideIcon, MessageSquare, User } from "lucide-react";
8
8
  import React, { useEffect, useState, useMemo, memo, useRef } from "react";
9
9
  import { PulsatingCircle } from "../AnimatedThinkingDots";
10
10
  import { AskUserWidget } from "../AskUserWidget";
@@ -12,6 +12,7 @@ import { useImageLightbox } from "../ImageLightbox";
12
12
  import { ThinkingMessages } from "../WaitingMessages";
13
13
  import { getWorkstreamId } from "./utils";
14
14
  import { useArtifactUrlCache, getArtifactCacheKey } from "../useArtifactUrlCache.js";
15
+ import { useDownloadFile } from "../../../store/index.js";
15
16
 
16
17
  // PERFORMANCE: Move pure function outside component to avoid recreation on every render
17
18
  // Process content to enhance markdown detection for lists and thinking messages
@@ -65,11 +66,8 @@ function processContentForMarkdown(content: string | object, messageType: AgentM
65
66
  return content;
66
67
  }
67
68
 
68
- export interface MessageItemProps {
69
- message: AgentMessage;
70
- showPulsatingCircle?: boolean;
71
- /** Callback when user sends a message (e.g., from proposal selection) */
72
- onSendMessage?: (message: string) => void;
69
+ /** className overrides for MessageItem — single source of truth for all className overrides. */
70
+ export interface MessageItemClassNames {
73
71
  /** Additional className for the outer container */
74
72
  className?: string;
75
73
  /** Additional className for the card wrapper */
@@ -88,31 +86,68 @@ export interface MessageItemProps {
88
86
  detailsClassName?: string;
89
87
  /** Additional className for the artifacts section */
90
88
  artifactsClassName?: string;
89
+ /** Additional className for the prose/markdown wrapper */
90
+ proseClassName?: string;
91
+ }
92
+
93
+ /** Keys of {@link MessageItemClassNames} — drives className merging and memo comparison. */
94
+ const MESSAGE_ITEM_CLASS_NAME_KEYS: (keyof MessageItemClassNames)[] = [
95
+ 'className', 'cardClassName', 'headerClassName', 'contentClassName',
96
+ 'timestampClassName', 'senderClassName', 'iconClassName',
97
+ 'detailsClassName', 'artifactsClassName', 'proseClassName',
98
+ ];
99
+
100
+ /** Merge className slots across base, prop, and override layers with consistent priority. */
101
+ function mergeClassNames(
102
+ base: MessageItemClassNames,
103
+ props: MessageItemClassNames,
104
+ ...overrides: (Partial<MessageItemClassNames> | undefined)[]
105
+ ): MessageItemClassNames {
106
+ const result: Record<string, string | undefined> = {};
107
+ for (const key of MESSAGE_ITEM_CLASS_NAME_KEYS) {
108
+ result[key] = cn(base[key], props[key], ...overrides.map(o => o?.[key]));
109
+ }
110
+ return result as MessageItemClassNames;
91
111
  }
92
112
 
93
- // Consolidated message styling - single source of truth
94
- const MESSAGE_STYLES: Record<AgentMessageType | 'default', {
113
+ /** Per-message-type visual config (border, bg, icon color, sender label, icon component, optional className overrides). */
114
+ export interface MessageStyleConfig extends MessageItemClassNames {
95
115
  borderColor: string;
96
- bgColor: string;
97
116
  iconColor: string;
98
117
  sender: string;
99
- Icon: typeof Bot;
100
- }> = {
101
- [AgentMessageType.ANSWER]: { borderColor: 'border-l-info', bgColor: 'bg-info', iconColor: 'text-info', sender: 'Agent', Icon: Bot },
102
- [AgentMessageType.COMPLETE]: { borderColor: 'border-l-success', bgColor: 'bg-success', iconColor: 'text-success', sender: 'Completed', Icon: CheckCircle },
103
- [AgentMessageType.IDLE]: { borderColor: 'border-l-info', bgColor: 'bg-info/50', iconColor: 'text-info', sender: 'Ready', Icon: Clock },
104
- [AgentMessageType.REQUEST_INPUT]: { borderColor: 'border-l-attention', bgColor: 'bg-attention', iconColor: 'text-attention', sender: 'Input', Icon: User },
105
- [AgentMessageType.QUESTION]: { borderColor: 'border-l-muted', bgColor: 'bg-muted', iconColor: 'text-muted', sender: 'User', Icon: User },
106
- [AgentMessageType.THOUGHT]: { borderColor: 'border-l-purple-500', bgColor: 'bg-purple-50/50 dark:bg-purple-900/10', iconColor: 'text-purple-600 dark:text-purple-400', sender: 'Agent', Icon: Bot },
107
- [AgentMessageType.ERROR]: { borderColor: 'border-l-destructive', bgColor: 'bg-destructive', iconColor: 'text-destructive', sender: 'Error', Icon: AlertCircle },
108
- [AgentMessageType.UPDATE]: { borderColor: 'border-l-success', bgColor: 'bg-success', iconColor: 'text-success', sender: 'Update', Icon: Info },
109
- [AgentMessageType.PLAN]: { borderColor: 'border-l-attention', bgColor: 'bg-attention', iconColor: 'text-attention', sender: 'Plan', Icon: MessageSquare },
110
- [AgentMessageType.TERMINATED]: { borderColor: 'border-l-muted', bgColor: 'bg-muted', iconColor: 'text-muted', sender: 'Terminated', Icon: CheckCircle },
111
- [AgentMessageType.WARNING]: { borderColor: 'border-l-attention', bgColor: 'bg-attention', iconColor: 'text-attention', sender: 'Warning', Icon: AlertCircle },
112
- [AgentMessageType.SYSTEM]: { borderColor: 'border-l-muted', bgColor: 'bg-muted', iconColor: 'text-muted', sender: 'System', Icon: Info },
113
- [AgentMessageType.STREAMING_CHUNK]: { borderColor: 'border-l-info', bgColor: 'bg-info', iconColor: 'text-info', sender: 'Agent', Icon: Bot },
114
- [AgentMessageType.BATCH_PROGRESS]: { borderColor: 'border-l-blue-500', bgColor: 'bg-blue-50/50 dark:bg-blue-900/10', iconColor: 'text-blue-600 dark:text-blue-400', sender: 'Batch', Icon: Layers },
115
- default: { borderColor: 'border-l-muted', bgColor: 'bg-muted', iconColor: 'text-muted', sender: 'Agent', Icon: Bot },
118
+ Icon: LucideIcon;
119
+ }
120
+
121
+ export interface MessageItemProps extends MessageItemClassNames {
122
+ message: AgentMessage;
123
+ showPulsatingCircle?: boolean;
124
+ /** Callback when user sends a message (e.g., from proposal selection) */
125
+ onSendMessage?: (message: string) => void;
126
+ /** Sparse per-type overrides for MESSAGE_STYLES (deep-merged with defaults) */
127
+ messageStyleOverrides?: Partial<Record<AgentMessageType | 'default', Partial<MessageStyleConfig>>>;
128
+ /** Custom component to render store/document links instead of default NavLink navigation */
129
+ StoreLinkComponent?: React.ComponentType<{ href: string; documentId: string; children: React.ReactNode }>;
130
+ /** Custom component to render store/collection links instead of default NavLink navigation */
131
+ CollectionLinkComponent?: React.ComponentType<{ href: string; collectionId: string; children: React.ReactNode }>;
132
+ }
133
+
134
+ // Consolidated Studio/default message styling - single source of truth
135
+ export const MESSAGE_STYLES: Record<AgentMessageType | 'default', MessageStyleConfig> = {
136
+ [AgentMessageType.ANSWER]: { borderColor: 'border-l-info', iconColor: 'text-info', sender: 'Agent', Icon: Bot },
137
+ [AgentMessageType.COMPLETE]: { borderColor: 'border-l-success', iconColor: 'text-success', sender: 'Completed', Icon: CheckCircle },
138
+ [AgentMessageType.IDLE]: { borderColor: 'border-l-info', iconColor: 'text-info', sender: 'Ready', Icon: Clock },
139
+ [AgentMessageType.REQUEST_INPUT]: { borderColor: 'border-l-attention', iconColor: 'text-attention', sender: 'Input', Icon: User },
140
+ [AgentMessageType.QUESTION]: { borderColor: 'border-l-muted', iconColor: 'text-muted', sender: 'User', Icon: User },
141
+ [AgentMessageType.THOUGHT]: { borderColor: 'border-l-purple-500', iconColor: 'text-purple-600 dark:text-purple-400', sender: 'Agent', Icon: Bot },
142
+ [AgentMessageType.ERROR]: { borderColor: 'border-l-destructive', iconColor: 'text-destructive', sender: 'Error', Icon: AlertCircle },
143
+ [AgentMessageType.UPDATE]: { borderColor: 'border-l-success', iconColor: 'text-success', sender: 'Update', Icon: Info },
144
+ [AgentMessageType.PLAN]: { borderColor: 'border-l-attention', iconColor: 'text-attention', sender: 'Plan', Icon: MessageSquare },
145
+ [AgentMessageType.TERMINATED]: { borderColor: 'border-l-muted', iconColor: 'text-muted', sender: 'Terminated', Icon: CheckCircle },
146
+ [AgentMessageType.WARNING]: { borderColor: 'border-l-attention', iconColor: 'text-attention', sender: 'Warning', Icon: AlertCircle },
147
+ [AgentMessageType.SYSTEM]: { borderColor: 'border-l-muted', iconColor: 'text-muted', sender: 'System', Icon: Info },
148
+ [AgentMessageType.STREAMING_CHUNK]: { borderColor: 'border-l-info', iconColor: 'text-info', sender: 'Agent', Icon: Bot },
149
+ [AgentMessageType.BATCH_PROGRESS]: { borderColor: 'border-l-blue-500', iconColor: 'text-blue-600 dark:text-blue-400', sender: 'Batch', Icon: Layers },
150
+ default: { borderColor: 'border-l-muted', iconColor: 'text-muted', sender: 'Agent', Icon: Bot },
116
151
  };
117
152
 
118
153
  function MessageItemComponent({
@@ -128,6 +163,10 @@ function MessageItemComponent({
128
163
  iconClassName,
129
164
  detailsClassName,
130
165
  artifactsClassName,
166
+ proseClassName,
167
+ messageStyleOverrides,
168
+ StoreLinkComponent,
169
+ CollectionLinkComponent,
131
170
  }: MessageItemProps) {
132
171
  const [showDetails, setShowDetails] = useState(false);
133
172
  const { client } = useUserSession();
@@ -139,9 +178,27 @@ function MessageItemComponent({
139
178
  clientRef.current = client;
140
179
  const urlCacheRef = useRef(urlCache);
141
180
  urlCacheRef.current = urlCache;
142
-
143
- // Get styles from consolidated config
144
- const styles = MESSAGE_STYLES[message.type] || MESSAGE_STYLES.default;
181
+ const { renderContent: exportContent, isDownloading: isExportingFile } = useDownloadFile({ client, toast });
182
+
183
+ // Unified style resolution: merge MESSAGE_STYLES base, flat className props, and per-type overrides.
184
+ // Priority (lowest → highest): base MESSAGE_STYLES → flat props → overrides.default → overrides[type]
185
+ const resolvedStyle = useMemo(() => {
186
+ const base = MESSAGE_STYLES[message.type] || MESSAGE_STYLES.default;
187
+ const defaultOverrides = messageStyleOverrides?.default;
188
+ const typeOverrides = messageStyleOverrides?.[message.type];
189
+
190
+ return {
191
+ ...base, ...defaultOverrides, ...typeOverrides,
192
+ ...mergeClassNames(base, {
193
+ className, cardClassName, headerClassName, contentClassName,
194
+ timestampClassName, senderClassName, iconClassName,
195
+ detailsClassName, artifactsClassName, proseClassName,
196
+ }, defaultOverrides, typeOverrides),
197
+ };
198
+ }, [message.type, messageStyleOverrides,
199
+ className, cardClassName, headerClassName, contentClassName,
200
+ timestampClassName, senderClassName, iconClassName,
201
+ detailsClassName, artifactsClassName, proseClassName]);
145
202
 
146
203
  // PERFORMANCE: Memoize message content extraction - only recalculates when message changes
147
204
  const messageContent = useMemo(() => {
@@ -201,12 +258,88 @@ function MessageItemComponent({
201
258
  });
202
259
  };
203
260
 
261
+ // Export message content to PDF or DOCX
262
+ const exportToFormat = async (format: MarkdownRenditionFormat) => {
263
+ const content = typeof messageContent === 'string' ? messageContent : '';
264
+
265
+ if (!content.trim()) {
266
+ toast({
267
+ status: "error",
268
+ title: "No content to export",
269
+ duration: 2000,
270
+ });
271
+ return;
272
+ }
273
+
274
+ const title = `Message ${dayjs(message.timestamp).format("YYYY-MM-DD HH-mm-ss")}`;
275
+ await exportContent(content, {
276
+ format,
277
+ title,
278
+ artifactRunId: runId,
279
+ });
280
+ };
281
+
282
+ // Check if message has exportable content (markdown text)
283
+ const hasExportableContent = typeof messageContent === 'string' && messageContent.trim().length > 0;
284
+
285
+ // PERFORMANCE: Memoize markdown components to prevent MarkdownRenderer remounts
286
+ const markdownComponents = useMemo(() => ({
287
+ a: ({ node, ref, ...props }: { node?: any; ref?: any; href?: string; children?: React.ReactNode }) => {
288
+ const href = props.href || "";
289
+ if (href.includes("/store/objects")) {
290
+ if (StoreLinkComponent) {
291
+ const documentId = href.split("/store/objects/")[1] || "";
292
+ return <StoreLinkComponent href={href} documentId={documentId}>{props.children}</StoreLinkComponent>;
293
+ }
294
+ return (
295
+ <NavLink
296
+ href={href}
297
+ topLevelNav
298
+ >
299
+ {props.children}
300
+ </NavLink>
301
+ );
302
+ }
303
+ if (href.includes("/store/collections")) {
304
+ if (CollectionLinkComponent) {
305
+ const collectionId = href.split("/store/collections/")[1] || "";
306
+ return <CollectionLinkComponent href={href} collectionId={collectionId}>{props.children}</CollectionLinkComponent>;
307
+ }
308
+ return (
309
+ <NavLink
310
+ href={href}
311
+ topLevelNav
312
+ >
313
+ {props.children}
314
+ </NavLink>
315
+ );
316
+ }
317
+ return (
318
+ <a
319
+ {...props}
320
+ target="_blank"
321
+ rel="noopener noreferrer"
322
+ />
323
+ );
324
+ },
325
+ img: ({ node, ref, ...props }: { node?: any; ref?: any; src?: string; alt?: string }) => {
326
+ return (
327
+ <img
328
+ {...props}
329
+ className="max-w-full h-auto rounded-lg shadow-md my-3 cursor-pointer hover:shadow-lg transition-shadow"
330
+ loading="lazy"
331
+ onClick={() => props.src && openImage(props.src, props.alt)}
332
+ />
333
+ );
334
+ },
335
+ }), [openImage, StoreLinkComponent, CollectionLinkComponent]);
336
+
204
337
  // Render content with markdown support - all messages now rendered as markdown
205
338
  const renderContent = (content: string | object) => {
206
339
  // Handle object content (JSON)
207
340
  if (typeof content === "object") {
208
341
  return (
209
- <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-gray-100 dark:bg-gray-800 p-2 rounded text-gray-700 ">
342
+ <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-gray-100 dark:bg-gray-800 p-2 rounded text-gray-700">
210
343
  {JSON.stringify(content, null, 2)}
211
344
  </pre>
212
345
  );
@@ -216,43 +349,12 @@ function MessageItemComponent({
216
349
  const runId = (message as any).workflow_run_id as string | undefined;
217
350
 
218
351
  return (
219
- <div className="vprose prose prose-slate dark:prose-invert prose-p:leading-relaxed prose-p:my-3 prose-headings:font-semibold prose-headings:tracking-normal prose-headings:mt-6 prose-headings:mb-3 prose-h1:text-xl prose-h2:text-lg prose-h3:text-base prose-li:my-1 prose-ul:my-3 prose-ol:my-3 prose-table:my-5 prose-pre:my-4 prose-hr:my-6 max-w-none text-[15px] break-words" style={{ overflowWrap: 'anywhere' }}>
352
+ <div className={cn("vprose prose prose-slate dark:prose-invert prose-p:leading-relaxed prose-p:my-3 prose-headings:font-semibold prose-headings:tracking-normal prose-headings:mt-6 prose-headings:mb-3 prose-h1:text-xl prose-h2:text-lg prose-h3:text-base prose-li:my-1 prose-ul:my-3 prose-ol:my-3 prose-table:my-5 prose-pre:my-4 prose-hr:my-6 max-w-none text-[15px] break-words", resolvedStyle.proseClassName)} style={{ overflowWrap: 'anywhere' }}>
220
353
  <MarkdownRenderer
221
354
  artifactRunId={runId}
222
355
  onProposalSelect={(optionId) => onSendMessage?.(optionId)}
223
356
  onProposalSubmit={(text) => onSendMessage?.(text)}
224
- components={{
225
- a: ({ node, ref, ...props }: { node?: any; ref?: any; href?: string; children?: React.ReactNode }) => {
226
- const href = props.href || "";
227
- if (href.includes("/store/objects")) {
228
- return (
229
- <NavLink
230
- href={href}
231
- topLevelNav
232
- >
233
- {props.children}
234
- </NavLink>
235
- );
236
- }
237
- return (
238
- <a
239
- {...props}
240
- target="_blank"
241
- rel="noopener noreferrer"
242
- />
243
- );
244
- },
245
- img: ({ node, ref, ...props }: { node?: any; ref?: any; src?: string; alt?: string }) => {
246
- return (
247
- <img
248
- {...props}
249
- className="max-w-full h-auto rounded-lg shadow-md my-3 cursor-pointer hover:shadow-lg transition-shadow"
250
- loading="lazy"
251
- onClick={() => props.src && openImage(props.src, props.alt)}
252
- />
253
- );
254
- },
255
- }}
357
+ components={markdownComponents}
256
358
  >
257
359
  {content as string}
258
360
  </MarkdownRenderer>
@@ -287,12 +389,8 @@ function MessageItemComponent({
287
389
  outputFiles.map(async (name: unknown) => {
288
390
  if (typeof name !== "string" || !name.trim()) return null;
289
391
  const trimmed = name.trim();
290
- // execute_shell returns relative paths like "result.csv" or "plots/chart.png"
291
- // canonical artifact name is under out/
292
- const artifactPath =
293
- trimmed.startsWith("out/") || trimmed.startsWith("files/") || trimmed.startsWith("scripts/")
294
- ? trimmed
295
- : `out/${trimmed}`;
392
+ // Strip artifact: protocol prefix to get the artifact-relative path
393
+ const artifactPath = trimmed.startsWith("artifact:") ? trimmed.slice(9) : trimmed;
296
394
 
297
395
  const ext = artifactPath.split(".").pop()?.toLowerCase() || "";
298
396
  const imageExtensions = new Set(["png", "jpg", "jpeg", "gif", "webp", "bmp", "svg"]);
@@ -342,29 +440,29 @@ function MessageItemComponent({
342
440
  }, [runId, outputFilesKey]);
343
441
 
344
442
  const workstreamId = getWorkstreamId(message);
345
- const { Icon } = styles;
443
+ const { Icon } = resolvedStyle;
346
444
 
347
445
  // Render icon - show pulsating animation for active messages
348
446
  const renderIcon = () => {
349
447
  if (showPulsatingCircle) {
350
448
  return <PulsatingCircle size="sm" color="blue" />;
351
449
  }
352
- return <Icon className={`size-4 ${styles.iconColor}`} />;
450
+ return <Icon className={`size-4 ${resolvedStyle.iconColor}`} />;
353
451
  };
354
452
 
355
453
  return (
356
- <div className={`w-full max-w-full ${className || ""}`}>
454
+ <div className={cn("w-full max-w-full", resolvedStyle.className)}>
357
455
  <div
358
- className={`border-l-4 bg-white dark:bg-gray-900 mb-4 w-full max-w-full overflow-hidden ${styles.borderColor} ${cardClassName || ""}`}
456
+ className={cn("border-l-4 bg-white dark:bg-gray-900 mb-4 w-full max-w-full overflow-hidden", resolvedStyle.borderColor, resolvedStyle.cardClassName)}
359
457
  data-workstream-id={workstreamId}
360
458
  >
361
459
  {/* Compact header */}
362
- <div className={`flex items-center justify-between px-4 py-1.5 ${headerClassName || ""}`}>
460
+ <div className={cn("flex items-center justify-between px-4 py-1.5", resolvedStyle.headerClassName)}>
363
461
  <div className="flex items-center gap-1.5">
364
- <div className={`${showPulsatingCircle ? "animate-fadeIn" : ""} ${iconClassName || ""}`}>
462
+ <div className={cn(showPulsatingCircle ? "animate-fadeIn" : "", resolvedStyle.iconClassName)}>
365
463
  {renderIcon()}
366
464
  </div>
367
- <span className={`text-xs font-medium text-muted ${senderClassName || ""}`}>{styles.sender}</span>
465
+ <span className={cn("text-xs font-medium text-muted", resolvedStyle.senderClassName)}>{resolvedStyle.sender}</span>
368
466
  {workstreamId !== "main" && workstreamId !== "all" && (
369
467
  <Badge variant="default" className="text-xs text-muted ml-1">
370
468
  {workstreamId}
@@ -372,7 +470,7 @@ function MessageItemComponent({
372
470
  )}
373
471
  </div>
374
472
  <div className="flex items-center gap-1.5 print:hidden">
375
- <span className={`text-[11px] text-muted/70 ${timestampClassName || ""}`}>
473
+ <span className={cn("text-[11px] text-muted/70", resolvedStyle.timestampClassName)}>
376
474
  {dayjs(message.timestamp).format("HH:mm:ss")}
377
475
  </span>
378
476
  <Button
@@ -383,11 +481,32 @@ function MessageItemComponent({
383
481
  >
384
482
  <CopyIcon className="size-3" />
385
483
  </Button>
484
+ {hasExportableContent && (
485
+ <Dropdown
486
+ trigger={
487
+ <Button
488
+ variant="ghost" size="xs"
489
+ className="text-muted/50 hover:text-muted h-5 w-5 p-0"
490
+ title="Export message"
491
+ disabled={isExportingFile}
492
+ >
493
+ <Download className={`size-3 ${isExportingFile ? 'animate-pulse' : ''}`} />
494
+ </Button>
495
+ }
496
+ >
497
+ <MenuItem onClick={() => exportToFormat(MarkdownRenditionFormat.pdf)}>
498
+ Export as PDF
499
+ </MenuItem>
500
+ <MenuItem onClick={() => exportToFormat(MarkdownRenditionFormat.docx)}>
501
+ Export as Word
502
+ </MenuItem>
503
+ </Dropdown>
504
+ )}
386
505
  </div>
387
506
  </div>
388
507
 
389
508
  {/* Message content */}
390
- <div className={`px-4 pb-3 bg-white dark:bg-gray-900 overflow-hidden ${contentClassName || ""}`}>
509
+ <div className={cn("px-4 pb-3 bg-white dark:bg-gray-900 overflow-hidden", resolvedStyle.contentClassName)}>
391
510
  {/* Check for REQUEST_INPUT with UX config - render AskUserWidget instead of plain text */}
392
511
  {message.type === AgentMessageType.REQUEST_INPUT && (message.details as AskUserMessageDetails)?.ux ? (
393
512
  (() => {
@@ -415,7 +534,7 @@ function MessageItemComponent({
415
534
 
416
535
  {/* Auto-surfaced artifacts from tool details (e.g. execute_shell.outputFiles) */}
417
536
  {artifactLinks.length > 0 && (
418
- <div className={`mt-3 text-xs ${artifactsClassName || ""}`}>
537
+ <div className={cn("mt-3 text-xs", resolvedStyle.artifactsClassName)}>
419
538
  <div className="font-medium text-muted mb-1">Artifacts</div>
420
539
 
421
540
  {/* Inline previews for image artifacts */}
@@ -462,10 +581,10 @@ function MessageItemComponent({
462
581
 
463
582
  {/* Optional details section */}
464
583
  {message.details && (
465
- <div className={`mt-2 print:hidden ${detailsClassName || ""}`}>
584
+ <div className={cn("mt-2 print:hidden", resolvedStyle.detailsClassName)}>
466
585
  <button
467
586
  onClick={() => setShowDetails(!showDetails)}
468
- className="text-xs text-muted flex items-center"
587
+ className="text-[11px] text-muted flex items-center"
469
588
  >
470
589
  {showDetails ? "Hide" : "Show"} details
471
590
  <svg
@@ -480,11 +599,11 @@ function MessageItemComponent({
480
599
  </button>
481
600
 
482
601
  {showDetails && (
483
- <div className="mt-2 p-2 bg-muted border border-mixer-muted/40 rounded text-sm">
602
+ <div className="mt-1 p-1.5 bg-muted border border-mixer-muted/40 rounded text-sm">
484
603
  {typeof message.details === "string" ? (
485
604
  renderContent(message.details)
486
605
  ) : (
487
- <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-muted p-2 rounded text-muted ">
606
+ <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-muted p-2 rounded text-muted">
488
607
  {JSON.stringify(message.details, null, 2)}
489
608
  </pre>
490
609
  )}
@@ -505,15 +624,8 @@ const MessageItem = memo(MessageItemComponent, (prevProps, nextProps) => {
505
624
  prevProps.message.timestamp === nextProps.message.timestamp &&
506
625
  prevProps.showPulsatingCircle === nextProps.showPulsatingCircle &&
507
626
  prevProps.onSendMessage === nextProps.onSendMessage &&
508
- prevProps.className === nextProps.className &&
509
- prevProps.cardClassName === nextProps.cardClassName &&
510
- prevProps.headerClassName === nextProps.headerClassName &&
511
- prevProps.contentClassName === nextProps.contentClassName &&
512
- prevProps.timestampClassName === nextProps.timestampClassName &&
513
- prevProps.senderClassName === nextProps.senderClassName &&
514
- prevProps.iconClassName === nextProps.iconClassName &&
515
- prevProps.detailsClassName === nextProps.detailsClassName &&
516
- prevProps.artifactsClassName === nextProps.artifactsClassName
627
+ prevProps.messageStyleOverrides === nextProps.messageStyleOverrides &&
628
+ MESSAGE_ITEM_CLASS_NAME_KEYS.every(key => prevProps[key] === nextProps[key])
517
629
  );
518
630
  });
519
631
 
@@ -20,12 +20,25 @@ export interface StreamingMessageProps {
20
20
  timestamp?: number | string;
21
21
  /** Additional className for the outer container */
22
22
  className?: string;
23
+ /** Additional className for the card wrapper */
24
+ cardClassName?: string;
23
25
  /** Additional className for the header section */
24
26
  headerClassName?: string;
25
27
  /** Additional className for the content section */
26
28
  contentClassName?: string;
29
+ /** Additional className for the prose/markdown container */
30
+ proseClassName?: string;
31
+ /** Additional className for the sender label */
32
+ senderClassName?: string;
33
+ /** Additional className for the icon wrapper */
34
+ iconClassName?: string;
27
35
  }
28
36
 
37
+ /** className overrides for StreamingMessage — subset of StreamingMessageProps containing only className props. */
38
+ export type StreamingMessageClassNames = Partial<Pick<StreamingMessageProps,
39
+ 'className' | 'cardClassName' | 'headerClassName' | 'contentClassName' |
40
+ 'proseClassName' | 'senderClassName' | 'iconClassName'>>;
41
+
29
42
  /**
30
43
  * Displays a streaming message with adaptive reveal effect.
31
44
  * Automatically adjusts speed to match the model's generation rate,
@@ -38,8 +51,12 @@ function StreamingMessageComponent({
38
51
  isComplete = false,
39
52
  timestamp,
40
53
  className,
54
+ cardClassName,
41
55
  headerClassName,
42
56
  contentClassName,
57
+ proseClassName,
58
+ senderClassName,
59
+ iconClassName,
43
60
  }: StreamingMessageProps) {
44
61
  const [displayedLength, setDisplayedLength] = useState(0);
45
62
  const [throttledText, setThrottledText] = useState("");
@@ -247,20 +264,20 @@ function StreamingMessageComponent({
247
264
  <div className={cn("w-full max-w-full", className)}>
248
265
  {/* Card wrapper matching MessageItem structure */}
249
266
  <div
250
- className="border-l-4 bg-white dark:bg-gray-900 mb-4 border-l-purple-500 w-full max-w-full overflow-hidden"
267
+ className={cn("border-l-4 bg-white dark:bg-gray-900 mb-4 border-l-purple-500 w-full max-w-full overflow-hidden", cardClassName)}
251
268
  data-workstream-id={workstreamId}
252
269
  >
253
270
  {/* Compact header */}
254
271
  <div className={cn("flex items-center justify-between px-4 py-1.5", headerClassName)}>
255
272
  <div className="flex items-center gap-1.5">
256
- <div className="animate-fadeIn">
273
+ <div className={cn("animate-fadeIn", iconClassName)}>
257
274
  {isTyping ? (
258
275
  <span className="size-2 rounded-full bg-blue-500 animate-pulse inline-block" />
259
276
  ) : (
260
277
  <Bot className="size-4 text-purple-600 dark:text-purple-400" />
261
278
  )}
262
279
  </div>
263
- <span className="text-xs font-medium text-muted">Agent</span>
280
+ <span className={cn("text-xs font-medium text-muted", senderClassName)}>Agent</span>
264
281
  {workstreamId && workstreamId !== "main" && (
265
282
  <span className="text-xs text-muted">• Task {workstreamId}</span>
266
283
  )}
@@ -282,12 +299,12 @@ function StreamingMessageComponent({
282
299
  {/* Content - cursor character is appended directly to text (no DOM manipulation) */}
283
300
  <div
284
301
  className={cn(
285
- "px-4 pb-3 streaming-content",
302
+ "px-3 pb-2 streaming-content",
286
303
  isTyping && "streaming-active",
287
304
  contentClassName
288
305
  )}
289
306
  >
290
- <div className="vprose prose prose-slate dark:prose-invert prose-p:leading-relaxed prose-p:my-3 prose-headings:font-semibold prose-headings:tracking-normal prose-headings:mt-6 prose-headings:mb-3 prose-h1:text-xl prose-h2:text-lg prose-h3:text-base prose-li:my-1 prose-ul:my-3 prose-ol:my-3 prose-table:my-5 prose-pre:my-4 prose-hr:my-6 max-w-none text-[15px] break-words" style={{ overflowWrap: 'anywhere' }}>
307
+ <div className={cn("vprose prose prose-slate dark:prose-invert prose-p:leading-relaxed prose-p:my-3 prose-headings:font-semibold prose-headings:tracking-normal prose-headings:mt-6 prose-headings:mb-3 prose-h1:text-xl prose-h2:text-lg prose-h3:text-base prose-li:my-1 prose-ul:my-3 prose-ol:my-3 prose-table:my-5 prose-pre:my-4 prose-hr:my-6 max-w-none text-[15px] break-words", proseClassName)} style={{ overflowWrap: 'anywhere' }}>
291
308
  <MarkdownRenderer>
292
309
  {displayTextWithCursor}
293
310
  </MarkdownRenderer>