@vertesia/ui 1.5.0-dev.20260905.011013Z → 1.5.0-dev.20260910.052912Z

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 (508) hide show
  1. package/lib/core/components/Avatar.d.ts.map +1 -1
  2. package/lib/core/components/Avatar.js +3 -3
  3. package/lib/core/components/Avatar.js.map +1 -1
  4. package/lib/core/components/ComboBox.js +1 -1
  5. package/lib/core/components/ComboBox.js.map +1 -1
  6. package/lib/core/components/FileUpload.js +1 -1
  7. package/lib/core/components/FileUpload.js.map +1 -1
  8. package/lib/core/components/Link.js +1 -1
  9. package/lib/core/components/Link.js.map +1 -1
  10. package/lib/core/components/SelectList.js +1 -1
  11. package/lib/core/components/SelectList.js.map +1 -1
  12. package/lib/core/components/SidePanel.js +1 -1
  13. package/lib/core/components/SidePanel.js.map +1 -1
  14. package/lib/core/components/Spinner.js +1 -1
  15. package/lib/core/components/Spinner.js.map +1 -1
  16. package/lib/core/components/TagsInput.js +8 -8
  17. package/lib/core/components/TagsInput.js.map +1 -1
  18. package/lib/core/components/shadcn/MessageBox.js +1 -1
  19. package/lib/core/components/shadcn/MessageBox.js.map +1 -1
  20. package/lib/core/components/shadcn/button.js +1 -1
  21. package/lib/core/components/shadcn/button.js.map +1 -1
  22. package/lib/core/components/shadcn/card.d.ts.map +1 -1
  23. package/lib/core/components/shadcn/card.js +1 -1
  24. package/lib/core/components/shadcn/card.js.map +1 -1
  25. package/lib/core/components/shadcn/command.js +5 -5
  26. package/lib/core/components/shadcn/command.js.map +1 -1
  27. package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
  28. package/lib/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
  29. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -3
  30. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  31. package/lib/core/components/shadcn/input.js +3 -3
  32. package/lib/core/components/shadcn/input.js.map +1 -1
  33. package/lib/core/components/shadcn/modal/ConfirmModal.js +1 -1
  34. package/lib/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
  35. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  36. package/lib/core/components/shadcn/modal/dialog.js +2 -2
  37. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  38. package/lib/core/components/shadcn/overflowTabs.js +2 -2
  39. package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
  40. package/lib/core/components/shadcn/popover.js +1 -1
  41. package/lib/core/components/shadcn/popover.js.map +1 -1
  42. package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
  43. package/lib/core/components/shadcn/radioGroup.js +3 -3
  44. package/lib/core/components/shadcn/radioGroup.js.map +1 -1
  45. package/lib/core/components/shadcn/selectBox.js +1 -1
  46. package/lib/core/components/shadcn/selectBox.js.map +1 -1
  47. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  48. package/lib/core/components/shadcn/tabs.js +5 -2
  49. package/lib/core/components/shadcn/tabs.js.map +1 -1
  50. package/lib/core/components/styles.js +1 -1
  51. package/lib/core/components/styles.js.map +1 -1
  52. package/lib/core/components/table/index.js +1 -1
  53. package/lib/core/hooks/useFetch.d.ts.map +1 -1
  54. package/lib/core/hooks/useFetch.js +2 -0
  55. package/lib/core/hooks/useFetch.js.map +1 -1
  56. package/lib/features/activity-doc/ActivityDoc.js +8 -8
  57. package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
  58. package/lib/features/agent/chat/AgentChart.js +1 -1
  59. package/lib/features/agent/chat/AgentChart.js.map +1 -1
  60. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  61. package/lib/features/agent/chat/AskUserWidget.js +13 -13
  62. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  63. package/lib/features/agent/chat/JumpingDots.js +1 -1
  64. package/lib/features/agent/chat/JumpingDots.js.map +1 -1
  65. package/lib/features/agent/chat/ModernAgentConversation.js +1 -1
  66. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  68. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +22 -9
  69. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -5
  71. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  72. package/lib/features/agent/chat/ModernAgentOutput/Header.js +1 -1
  73. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  74. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js +1 -1
  75. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js.map +1 -1
  76. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +1 -1
  77. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  78. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  79. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +7 -7
  80. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  81. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js.map +1 -1
  83. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +10 -10
  85. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  86. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
  87. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js.map +1 -1
  88. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.d.ts.map +1 -1
  89. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js +1 -1
  90. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
  91. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +17 -17
  92. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  93. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
  94. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  95. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
  96. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +14 -2
  97. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
  98. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  99. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +15 -15
  100. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  101. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  102. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +18 -0
  103. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  104. package/lib/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
  105. package/lib/features/agent/chat/SlidingThinkingIndicator.js +5 -2
  106. package/lib/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
  107. package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  108. package/lib/features/agent/chat/VegaLiteChart.js +6 -2
  109. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  110. package/lib/features/errors/RowErrorBoundary.js +1 -1
  111. package/lib/features/errors/RowErrorBoundary.js.map +1 -1
  112. package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
  113. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  114. package/lib/features/facets/utils/VInteractionFacet.d.ts +3 -5
  115. package/lib/features/facets/utils/VInteractionFacet.d.ts.map +1 -1
  116. package/lib/features/facets/utils/VInteractionFacet.js +10 -23
  117. package/lib/features/facets/utils/VInteractionFacet.js.map +1 -1
  118. package/lib/features/facets/utils/VUserFacet.js +1 -1
  119. package/lib/features/facets/utils/VUserFacet.js.map +1 -1
  120. package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  121. package/lib/features/layout/GenericPageNavHeader.js +4 -1
  122. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  123. package/lib/features/layout/NotFoundView.js +1 -1
  124. package/lib/features/layout/NotFoundView.js.map +1 -1
  125. package/lib/features/magic-pdf/AnnotatedImageSlider.js +4 -12
  126. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  127. package/lib/features/magic-pdf/ExtractedContentView.js +4 -4
  128. package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
  129. package/lib/features/magic-pdf/MagicPdfView.js +1 -1
  130. package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
  131. package/lib/features/pdf-viewer/PdfPageRenderer.js +2 -2
  132. package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
  133. package/lib/features/pdf-viewer/PdfPageSlider.js +3 -3
  134. package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  135. package/lib/features/pdf-viewer/SimplePdfViewer.js +1 -1
  136. package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  137. package/lib/features/permissions/UserPermissionsProvider.d.ts +2 -1
  138. package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  139. package/lib/features/permissions/UserPermissionsProvider.js +35 -22
  140. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  141. package/lib/features/permissions/useRoleMappings.d.ts +19 -0
  142. package/lib/features/permissions/useRoleMappings.d.ts.map +1 -0
  143. package/lib/features/permissions/useRoleMappings.js +87 -0
  144. package/lib/features/permissions/useRoleMappings.js.map +1 -0
  145. package/lib/features/store/collections/SelectCollection.js +1 -1
  146. package/lib/features/store/collections/SelectCollection.js.map +1 -1
  147. package/lib/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
  148. package/lib/features/store/objects/DocumentPreviewPanel.js +9 -9
  149. package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  150. package/lib/features/store/objects/DocumentTable.js +1 -1
  151. package/lib/features/store/objects/DocumentTable.js.map +1 -1
  152. package/lib/features/store/objects/components/DocumentIcon.js +2 -2
  153. package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
  154. package/lib/features/store/objects/components/DocumentInput.js +1 -1
  155. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  156. package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
  157. package/lib/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  158. package/lib/features/store/objects/components/SaveVersionConfirmModal.js +1 -1
  159. package/lib/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
  160. package/lib/features/store/objects/layout/documentLayout.d.ts.map +1 -1
  161. package/lib/features/store/objects/layout/documentLayout.js +2 -2
  162. package/lib/features/store/objects/layout/documentLayout.js.map +1 -1
  163. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  164. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  165. package/lib/features/store/types/IntakePolicyEditor.d.ts +10 -1
  166. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  167. package/lib/features/store/types/IntakePolicyEditor.js +29 -19
  168. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  169. package/lib/features/store/types/IntakePolicyForm.d.ts +1 -1
  170. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  171. package/lib/features/store/types/IntakePolicyForm.js +5 -3
  172. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  173. package/lib/features/store/types/SelectContentTypeModal.js +1 -1
  174. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  175. package/lib/features/user/UserAvatar.js +2 -2
  176. package/lib/features/user/UserAvatar.js.map +1 -1
  177. package/lib/features/user/UserInfo.d.ts.map +1 -1
  178. package/lib/features/user/UserInfo.js +7 -7
  179. package/lib/features/user/UserInfo.js.map +1 -1
  180. package/lib/features/utils/index.d.ts +1 -0
  181. package/lib/features/utils/index.d.ts.map +1 -1
  182. package/lib/features/utils/index.js +1 -0
  183. package/lib/features/utils/index.js.map +1 -1
  184. package/lib/features/utils/interaction.d.ts +55 -0
  185. package/lib/features/utils/interaction.d.ts.map +1 -0
  186. package/lib/features/utils/interaction.js +77 -0
  187. package/lib/features/utils/interaction.js.map +1 -0
  188. package/lib/features/views/ViewResults.js +2 -2
  189. package/lib/features/views/ViewResults.js.map +1 -1
  190. package/lib/i18n/locales/ar.json +7 -1
  191. package/lib/i18n/locales/de.json +7 -1
  192. package/lib/i18n/locales/en.json +7 -1
  193. package/lib/i18n/locales/es.json +7 -1
  194. package/lib/i18n/locales/fr.json +7 -1
  195. package/lib/i18n/locales/it.json +7 -1
  196. package/lib/i18n/locales/ja.json +7 -1
  197. package/lib/i18n/locales/ko.json +7 -1
  198. package/lib/i18n/locales/pt.json +7 -1
  199. package/lib/i18n/locales/ru.json +7 -1
  200. package/lib/i18n/locales/tr.json +7 -1
  201. package/lib/i18n/locales/zh-TW.json +7 -1
  202. package/lib/i18n/locales/zh.json +7 -1
  203. package/lib/layout/FullHeightLayout.js +2 -2
  204. package/lib/layout/FullHeightLayout.js.map +1 -1
  205. package/lib/layout/Navbar.js +4 -4
  206. package/lib/layout/Navbar.js.map +1 -1
  207. package/lib/layout/Sidebar.js +1 -1
  208. package/lib/layout/Sidebar.js.map +1 -1
  209. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  210. package/lib/session/UserSessionProvider.js +2 -13
  211. package/lib/session/UserSessionProvider.js.map +1 -1
  212. package/lib/session/auth/authState.d.ts +13 -0
  213. package/lib/session/auth/authState.d.ts.map +1 -0
  214. package/lib/session/auth/authState.js +37 -0
  215. package/lib/session/auth/authState.js.map +1 -0
  216. package/lib/session/auth/domainRouting.d.ts +39 -0
  217. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  218. package/lib/session/auth/domainRouting.js +85 -0
  219. package/lib/session/auth/domainRouting.js.map +1 -1
  220. package/lib/session/auth/useAuthState.d.ts +4 -7
  221. package/lib/session/auth/useAuthState.d.ts.map +1 -1
  222. package/lib/session/auth/useAuthState.js +5 -41
  223. package/lib/session/auth/useAuthState.js.map +1 -1
  224. package/lib/session/index.d.ts +1 -0
  225. package/lib/session/index.d.ts.map +1 -1
  226. package/lib/session/index.js +2 -0
  227. package/lib/session/index.js.map +1 -1
  228. package/lib/shell/SplashScreen.d.ts +1 -1
  229. package/lib/shell/SplashScreen.d.ts.map +1 -1
  230. package/lib/shell/SplashScreen.js +6 -2
  231. package/lib/shell/SplashScreen.js.map +1 -1
  232. package/lib/shell/VertesiaShell.js +1 -1
  233. package/lib/shell/VertesiaShell.js.map +1 -1
  234. package/lib/shell/apps/AppProjectSelector.js +1 -1
  235. package/lib/shell/apps/AppProjectSelector.js.map +1 -1
  236. package/lib/shell/apps/StandaloneApp.js +2 -2
  237. package/lib/shell/apps/StandaloneApp.js.map +1 -1
  238. package/lib/shell/login/SignInPrimitives.js +2 -2
  239. package/lib/shell/login/SignInPrimitives.js.map +1 -1
  240. package/lib/shell/login/SigninScreen.js +1 -1
  241. package/lib/shell/login/SigninScreen.js.map +1 -1
  242. package/lib/shell/login/SignupForm.js +1 -1
  243. package/lib/shell/login/SignupForm.js.map +1 -1
  244. package/lib/shell/login/TerminalLogin.js +2 -2
  245. package/lib/shell/login/TerminalLogin.js.map +1 -1
  246. package/lib/shell/login/UserInfo.d.ts.map +1 -1
  247. package/lib/shell/login/UserInfo.js +1 -1
  248. package/lib/shell/login/UserInfo.js.map +1 -1
  249. package/lib/shell/login/UserSessionMenu.js +1 -1
  250. package/lib/shell/login/UserSessionMenu.js.map +1 -1
  251. package/lib/vertesia-ui-core.js +7 -7
  252. package/lib/vertesia-ui-core.js.map +1 -1
  253. package/lib/vertesia-ui-features.js +179 -182
  254. package/lib/vertesia-ui-features.js.map +1 -1
  255. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +5 -0
  256. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +1 -0
  257. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +5 -0
  258. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +1 -0
  259. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +5 -0
  260. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +1 -0
  261. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +5 -0
  262. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +1 -0
  263. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +5 -0
  264. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +1 -0
  265. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +5 -0
  266. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +1 -0
  267. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +5 -0
  268. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +1 -0
  269. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +5 -0
  270. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +1 -0
  271. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +5 -0
  272. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +1 -0
  273. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +5 -0
  274. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +1 -0
  275. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +5 -0
  276. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +1 -0
  277. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +5 -0
  278. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +1 -0
  279. package/lib/vertesia-ui-i18n.js +2 -2
  280. package/lib/vertesia-ui-layout.js +1 -1
  281. package/lib/vertesia-ui-layout.js.map +1 -1
  282. package/lib/vertesia-ui-rich-text.js +24 -24
  283. package/lib/vertesia-ui-rich-text.js.map +1 -1
  284. package/lib/vertesia-ui-session.js +1 -1
  285. package/lib/vertesia-ui-session.js.map +1 -1
  286. package/lib/vertesia-ui-shell.js +3 -3
  287. package/lib/vertesia-ui-shell.js.map +1 -1
  288. package/lib/vertesia-ui-widgets.js +54 -54
  289. package/lib/vertesia-ui-widgets.js.map +1 -1
  290. package/lib/widgets/Progress.js +1 -1
  291. package/lib/widgets/Progress.js.map +1 -1
  292. package/lib/widgets/form/Form.js +2 -2
  293. package/lib/widgets/form/Form.js.map +1 -1
  294. package/lib/widgets/form/fields.js +2 -2
  295. package/lib/widgets/form/fields.js.map +1 -1
  296. package/lib/widgets/json-view/JSONView.js +1 -1
  297. package/lib/widgets/json-view/JSONView.js.map +1 -1
  298. package/lib/widgets/markdown/MermaidDiagram.js +1 -1
  299. package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
  300. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts +7 -2
  301. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
  302. package/lib/widgets/markdown/remarkDirectiveHandler.js +19 -4
  303. package/lib/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
  304. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  305. package/lib/widgets/monacoEditor/MonacoEditor.js +4 -2
  306. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  307. package/lib/widgets/monacoEditor/index.d.ts +1 -0
  308. package/lib/widgets/monacoEditor/index.d.ts.map +1 -1
  309. package/lib/widgets/monacoEditor/index.js +1 -0
  310. package/lib/widgets/monacoEditor/index.js.map +1 -1
  311. package/lib/widgets/monacoEditor/loadMonaco.d.ts +45 -0
  312. package/lib/widgets/monacoEditor/loadMonaco.d.ts.map +1 -0
  313. package/lib/widgets/monacoEditor/loadMonaco.js +62 -0
  314. package/lib/widgets/monacoEditor/loadMonaco.js.map +1 -0
  315. package/lib/widgets/properties/PropertiesView.js +1 -1
  316. package/lib/widgets/properties/PropertiesView.js.map +1 -1
  317. package/lib/widgets/schema-editor/editor/Editable.js +2 -2
  318. package/lib/widgets/schema-editor/editor/Editable.js.map +1 -1
  319. package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
  320. package/lib/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  321. package/lib/widgets/schema-editor/editor/SchemaEditor.js +2 -2
  322. package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  323. package/lib/widgets/upload/DropZone.js +1 -1
  324. package/lib/widgets/upload/DropZone.js.map +1 -1
  325. package/lib/widgets/upload/UploadResultCategory.d.ts +1 -1
  326. package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  327. package/lib/widgets/upload/UploadResultCategory.js +3 -3
  328. package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
  329. package/lib/widgets/upload/UploadSummary.js +1 -1
  330. package/lib/widgets/upload/UploadSummary.js.map +1 -1
  331. package/lib/widgets/xml-viewer/components/XMLViewer.d.ts.map +1 -1
  332. package/lib/widgets/xml-viewer/components/XMLViewer.js +7 -3
  333. package/lib/widgets/xml-viewer/components/XMLViewer.js.map +1 -1
  334. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  335. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +11 -13
  336. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  337. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +41 -14
  338. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  339. package/package.json +7 -7
  340. package/src/__tests__/contrast.test.ts +1 -0
  341. package/src/core/components/Avatar.tsx +3 -3
  342. package/src/core/components/ComboBox.tsx +1 -1
  343. package/src/core/components/FileUpload.tsx +4 -4
  344. package/src/core/components/Link.tsx +1 -1
  345. package/src/core/components/SelectList.tsx +1 -1
  346. package/src/core/components/SidePanel.tsx +1 -1
  347. package/src/core/components/Spinner.tsx +1 -1
  348. package/src/core/components/TagsInput.tsx +8 -8
  349. package/src/core/components/shadcn/MessageBox.tsx +1 -1
  350. package/src/core/components/shadcn/button.tsx +1 -1
  351. package/src/core/components/shadcn/card.tsx +1 -3
  352. package/src/core/components/shadcn/command.tsx +5 -5
  353. package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -1
  354. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -3
  355. package/src/core/components/shadcn/input.tsx +3 -3
  356. package/src/core/components/shadcn/modal/ConfirmModal.tsx +3 -3
  357. package/src/core/components/shadcn/modal/dialog.tsx +2 -4
  358. package/src/core/components/shadcn/overflowTabs.tsx +2 -2
  359. package/src/core/components/shadcn/popover.tsx +1 -1
  360. package/src/core/components/shadcn/radioGroup.tsx +5 -7
  361. package/src/core/components/shadcn/selectBox.tsx +1 -1
  362. package/src/core/components/shadcn/tabs.tsx +4 -2
  363. package/src/core/components/styles.ts +1 -1
  364. package/src/core/components/table/index.tsx +1 -1
  365. package/src/core/hooks/useFetch.test.ts +20 -0
  366. package/src/core/hooks/useFetch.ts +2 -0
  367. package/src/css/base.css +1 -1
  368. package/src/css/color.css +4 -0
  369. package/src/css/theme.css +1 -0
  370. package/src/css/typography.css +2 -2
  371. package/src/features/activity-doc/ActivityDoc.tsx +11 -11
  372. package/src/features/agent/chat/AgentChart.tsx +1 -1
  373. package/src/features/agent/chat/AskUserWidget.tsx +19 -23
  374. package/src/features/agent/chat/JumpingDots.tsx +3 -3
  375. package/src/features/agent/chat/ModernAgentConversation.tsx +3 -3
  376. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +60 -1
  377. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +44 -24
  378. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +12 -12
  379. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +1 -1
  380. package/src/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.tsx +4 -4
  381. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +2 -2
  382. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +7 -12
  383. package/src/features/agent/chat/ModernAgentOutput/MessagesContainer.tsx +1 -1
  384. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +16 -22
  385. package/src/features/agent/chat/ModernAgentOutput/SlideInPanel.tsx +4 -4
  386. package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -4
  387. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +21 -21
  388. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +4 -4
  389. package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +16 -1
  390. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +19 -40
  391. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +41 -0
  392. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +19 -0
  393. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +93 -0
  394. package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -2
  395. package/src/features/agent/chat/VegaLiteChart.tsx +6 -2
  396. package/src/features/errors/RowErrorBoundary.tsx +1 -1
  397. package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
  398. package/src/features/facets/utils/VInteractionFacet.tsx +22 -34
  399. package/src/features/facets/utils/VUserFacet.tsx +1 -1
  400. package/src/features/layout/GenericPageNavHeader.tsx +9 -1
  401. package/src/features/layout/NotFoundView.tsx +1 -1
  402. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +8 -16
  403. package/src/features/magic-pdf/ExtractedContentView.tsx +4 -4
  404. package/src/features/magic-pdf/MagicPdfView.tsx +1 -1
  405. package/src/features/pdf-viewer/PdfPageRenderer.tsx +2 -2
  406. package/src/features/pdf-viewer/PdfPageSlider.tsx +4 -4
  407. package/src/features/pdf-viewer/SimplePdfViewer.tsx +1 -1
  408. package/src/features/permissions/UserPermissionsProvider.test.tsx +172 -0
  409. package/src/features/permissions/UserPermissionsProvider.tsx +68 -21
  410. package/src/features/permissions/useRoleMappings.ts +105 -0
  411. package/src/features/store/collections/SelectCollection.tsx +1 -1
  412. package/src/features/store/objects/DocumentPreviewPanel.tsx +43 -53
  413. package/src/features/store/objects/DocumentTable.tsx +2 -2
  414. package/src/features/store/objects/components/DocumentIcon.tsx +4 -4
  415. package/src/features/store/objects/components/DocumentInput.tsx +3 -3
  416. package/src/features/store/objects/components/PropertiesEditorModal.tsx +2 -2
  417. package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +2 -2
  418. package/src/features/store/objects/layout/documentLayout.tsx +2 -4
  419. package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
  420. package/src/features/store/types/IntakePolicyEditor.tsx +70 -36
  421. package/src/features/store/types/IntakePolicyForm.tsx +11 -3
  422. package/src/features/store/types/SelectContentTypeModal.tsx +1 -1
  423. package/src/features/user/UserAvatar.tsx +3 -3
  424. package/src/features/user/UserInfo.tsx +11 -16
  425. package/src/features/utils/index.ts +1 -0
  426. package/src/features/utils/interaction.test.tsx +93 -0
  427. package/src/features/utils/interaction.tsx +125 -0
  428. package/src/features/views/ViewResults.tsx +3 -3
  429. package/src/i18n/locales/ar.json +7 -1
  430. package/src/i18n/locales/de.json +7 -1
  431. package/src/i18n/locales/en.json +7 -1
  432. package/src/i18n/locales/es.json +7 -1
  433. package/src/i18n/locales/fr.json +7 -1
  434. package/src/i18n/locales/it.json +7 -1
  435. package/src/i18n/locales/ja.json +7 -1
  436. package/src/i18n/locales/ko.json +7 -1
  437. package/src/i18n/locales/pt.json +7 -1
  438. package/src/i18n/locales/ru.json +7 -1
  439. package/src/i18n/locales/tr.json +7 -1
  440. package/src/i18n/locales/zh-TW.json +7 -1
  441. package/src/i18n/locales/zh.json +7 -1
  442. package/src/layout/FullHeightLayout.tsx +2 -2
  443. package/src/layout/Navbar.tsx +5 -5
  444. package/src/layout/Sidebar.tsx +1 -1
  445. package/src/session/UserSessionProvider.tsx +2 -15
  446. package/src/session/auth/authState.test.ts +35 -0
  447. package/src/session/auth/authState.ts +42 -0
  448. package/src/session/auth/domainRouting.test.ts +169 -1
  449. package/src/session/auth/domainRouting.ts +89 -0
  450. package/src/session/auth/useAuthState.ts +5 -49
  451. package/src/session/index.ts +6 -0
  452. package/src/shell/SplashScreen.test.tsx +22 -0
  453. package/src/shell/SplashScreen.tsx +6 -2
  454. package/src/shell/VertesiaShell.tsx +1 -1
  455. package/src/shell/apps/AppProjectSelector.tsx +1 -1
  456. package/src/shell/apps/StandaloneApp.tsx +9 -9
  457. package/src/shell/login/SignInPrimitives.tsx +2 -2
  458. package/src/shell/login/SigninScreen.tsx +1 -1
  459. package/src/shell/login/SignupForm.tsx +2 -2
  460. package/src/shell/login/TerminalLogin.tsx +5 -5
  461. package/src/shell/login/UserInfo.tsx +2 -5
  462. package/src/shell/login/UserSessionMenu.tsx +2 -2
  463. package/src/widgets/Progress.tsx +2 -2
  464. package/src/widgets/form/Form.tsx +4 -4
  465. package/src/widgets/form/fields.tsx +2 -2
  466. package/src/widgets/json-view/JSONView.tsx +1 -6
  467. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +33 -29
  468. package/src/widgets/markdown/MarkdownRenderer.test.tsx +52 -0
  469. package/src/widgets/markdown/MermaidDiagram.tsx +2 -2
  470. package/src/widgets/markdown/remarkDirectiveHandler.ts +21 -5
  471. package/src/widgets/monacoEditor/MonacoEditor.tsx +4 -2
  472. package/src/widgets/monacoEditor/index.ts +1 -0
  473. package/src/widgets/monacoEditor/loadMonaco.test.ts +63 -0
  474. package/src/widgets/monacoEditor/loadMonaco.ts +70 -0
  475. package/src/widgets/properties/PropertiesView.tsx +1 -1
  476. package/src/widgets/schema-editor/editor/Editable.tsx +2 -2
  477. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +1 -1
  478. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +2 -2
  479. package/src/widgets/upload/DropZone.tsx +1 -1
  480. package/src/widgets/upload/UploadResultCategory.tsx +7 -7
  481. package/src/widgets/upload/UploadSummary.tsx +4 -4
  482. package/src/widgets/xml-viewer/components/XMLViewer.tsx +7 -3
  483. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +60 -7
  484. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +70 -16
  485. package/lib/vertesia-ui-i18n.3yHWompP.chunk.js +0 -5
  486. package/lib/vertesia-ui-i18n.3yHWompP.chunk.js.map +0 -1
  487. package/lib/vertesia-ui-i18n.4XKCcnL0.chunk.js +0 -5
  488. package/lib/vertesia-ui-i18n.4XKCcnL0.chunk.js.map +0 -1
  489. package/lib/vertesia-ui-i18n.78KG4J25.chunk.js +0 -5
  490. package/lib/vertesia-ui-i18n.78KG4J25.chunk.js.map +0 -1
  491. package/lib/vertesia-ui-i18n.BN06mpp1.chunk.js +0 -5
  492. package/lib/vertesia-ui-i18n.BN06mpp1.chunk.js.map +0 -1
  493. package/lib/vertesia-ui-i18n.CSzKLlHJ.chunk.js +0 -5
  494. package/lib/vertesia-ui-i18n.CSzKLlHJ.chunk.js.map +0 -1
  495. package/lib/vertesia-ui-i18n.Ccus7aRh.chunk.js +0 -5
  496. package/lib/vertesia-ui-i18n.Ccus7aRh.chunk.js.map +0 -1
  497. package/lib/vertesia-ui-i18n.D9j3c6gI.chunk.js +0 -5
  498. package/lib/vertesia-ui-i18n.D9j3c6gI.chunk.js.map +0 -1
  499. package/lib/vertesia-ui-i18n.DAUg4rrI.chunk.js +0 -5
  500. package/lib/vertesia-ui-i18n.DAUg4rrI.chunk.js.map +0 -1
  501. package/lib/vertesia-ui-i18n.DSxVZKXy.chunk.js +0 -5
  502. package/lib/vertesia-ui-i18n.DSxVZKXy.chunk.js.map +0 -1
  503. package/lib/vertesia-ui-i18n.aahVhHvR.chunk.js +0 -5
  504. package/lib/vertesia-ui-i18n.aahVhHvR.chunk.js.map +0 -1
  505. package/lib/vertesia-ui-i18n.nZ3xJ26v.chunk.js +0 -5
  506. package/lib/vertesia-ui-i18n.nZ3xJ26v.chunk.js.map +0 -1
  507. package/lib/vertesia-ui-i18n.xPYbuFzT.chunk.js +0 -5
  508. package/lib/vertesia-ui-i18n.xPYbuFzT.chunk.js.map +0 -1
@@ -51,7 +51,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
51
51
  <div className="font-medium text-sm">{t('agent.stepByStepPlan')}</div>
52
52
  </div>
53
53
 
54
- <div className="divide-y divide-gray-100 dark:divide-gray-800">
54
+ <div className="divide-y divide-border">
55
55
  {plan.plan && plan.plan.length > 0 ? (
56
56
  plan.plan.map((task, index) => {
57
57
  // Extract task info with null checks
@@ -68,16 +68,16 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
68
68
 
69
69
  // Determine status icon and style
70
70
  let StatusIcon = Circle;
71
- let statusColor = 'text-gray-400';
71
+ let statusColor = 'text-muted';
72
72
  let bgColor = '';
73
73
 
74
74
  if (status === 'in_progress') {
75
75
  StatusIcon = Clock;
76
- statusColor = 'text-blue-500';
77
- bgColor = 'bg-blue-50/50 dark:bg-blue-900/10';
76
+ statusColor = 'text-info';
77
+ bgColor = 'bg-info/50 dark:bg-info/10';
78
78
  } else if (status === 'completed') {
79
79
  StatusIcon = CheckCircle;
80
- statusColor = 'text-green-500';
80
+ statusColor = 'text-success';
81
81
  }
82
82
 
83
83
  return (
@@ -86,18 +86,18 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
86
86
  <StatusIcon className="h-4 w-4" />
87
87
  </div>
88
88
  <div>
89
- <div className="text-sm text-gray-800 dark:text-gray-200">{taskGoal}</div>
89
+ <div className="text-sm text-foreground">{taskGoal}</div>
90
90
  <div className="mt-1">
91
- <span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300">
91
+ <span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-muted text-foreground">
92
92
  {taskId}
93
93
  </span>
94
94
  <span
95
95
  className={`ms-2 text-xs ${
96
96
  status === 'completed'
97
- ? 'text-green-600 dark:text-green-400'
97
+ ? 'text-success'
98
98
  : status === 'in_progress'
99
- ? 'text-blue-600 dark:text-blue-400'
100
- : 'text-gray-500 dark:text-gray-400'
99
+ ? 'text-info'
100
+ : 'text-muted'
101
101
  }`}
102
102
  >
103
103
  {status === 'completed'
@@ -112,8 +112,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
112
112
  );
113
113
  })
114
114
  ) : (
115
- <div className="p-4 text-center text-gray-500 dark:text-gray-400 italic">
116
- <AlertCircle className="h-5 w-5 mx-auto mb-2 text-amber-500" />
115
+ <div className="p-4 text-center text-muted italic">
116
+ <AlertCircle className="h-5 w-5 mx-auto mb-2 text-attention" />
117
117
  <p>{t('agent.noPlanDetected')}</p>
118
118
  <p className="text-xs mt-1">{t('agent.plansWillAppear')}</p>
119
119
  </div>
@@ -123,8 +123,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
123
123
 
124
124
  {/* Workstream Status Summary */}
125
125
  {workstreamStatus.size > 1 && (
126
- <div className="mt-4 rounded-md border border-gray-200 dark:border-gray-800">
127
- <div className="p-3 border-b border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50">
126
+ <div className="mt-4 rounded-md border border-border">
127
+ <div className="p-3 border-b border-border bg-muted">
128
128
  <div className="font-medium text-sm">{t('agent.workstreams')}</div>
129
129
  </div>
130
130
  <div className="p-3">
@@ -147,19 +147,19 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
147
147
  })
148
148
  .map(([id, status]) => {
149
149
  let StatusIcon = Circle;
150
- let statusColor = 'text-gray-400';
151
- let statusBg = 'bg-gray-100 dark:bg-gray-800';
150
+ let statusColor = 'text-muted';
151
+ let statusBg = 'bg-muted';
152
152
  let statusText = t('agent.pending');
153
153
 
154
154
  if (status === 'in_progress') {
155
155
  StatusIcon = Clock;
156
- statusColor = 'text-blue-500';
157
- statusBg = 'bg-blue-100 dark:bg-blue-800/30';
156
+ statusColor = 'text-info';
157
+ statusBg = 'bg-info';
158
158
  statusText = t('agent.inProgress');
159
159
  } else if (status === 'completed') {
160
160
  StatusIcon = CheckCircle;
161
- statusColor = 'text-green-500';
162
- statusBg = 'bg-green-100 dark:bg-green-800/30';
161
+ statusColor = 'text-success';
162
+ statusBg = 'bg-success';
163
163
  statusText = t('agent.completed');
164
164
  }
165
165
 
@@ -172,7 +172,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
172
172
  <StatusIcon className="h-4 w-4" />
173
173
  </div>
174
174
  <div className="flex-1">
175
- <span className="text-sm font-medium text-gray-800 dark:text-gray-300">
175
+ <span className="text-sm font-medium text-foreground">
176
176
  {displayId}
177
177
  </span>
178
178
  </div>
@@ -273,7 +273,7 @@ function StreamingMessageComponent({
273
273
  {/* Card wrapper matching MessageItem structure */}
274
274
  <div
275
275
  className={cn(
276
- 'border-s-4 bg-white dark:bg-gray-900 mb-4 border-s-purple-500 w-full max-w-full overflow-hidden',
276
+ 'border-s-4 bg-white dark:bg-muted mb-4 border-s-done w-full max-w-full overflow-hidden',
277
277
  cardClassName,
278
278
  )}
279
279
  data-workstream-id={workstreamId}
@@ -283,9 +283,9 @@ function StreamingMessageComponent({
283
283
  <div className="flex items-center gap-1.5">
284
284
  <div className={cn('animate-fadeIn', iconClassName)}>
285
285
  {isTyping ? (
286
- <span className="size-2 rounded-full bg-blue-500 animate-pulse inline-block" />
286
+ <span className="size-2 rounded-full bg-primary animate-pulse inline-block" />
287
287
  ) : (
288
- <Bot className="size-4 text-purple-600 dark:text-purple-400" />
288
+ <Bot className="size-4 text-done" />
289
289
  )}
290
290
  </div>
291
291
  <span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
@@ -299,7 +299,7 @@ function StreamingMessageComponent({
299
299
  variant="ghost"
300
300
  size="xs"
301
301
  onClick={copyToClipboard}
302
- className="size-6 p-0 hover:bg-gray-100 dark:hover:bg-gray-800"
302
+ className="size-6 p-0 hover:bg-muted"
303
303
  title={t('agent.copyMessage')}
304
304
  >
305
305
  <CopyIcon className="size-3" />
@@ -133,7 +133,22 @@ export function isSummaryAssistantProseMessage(message: AgentMessage): boolean {
133
133
 
134
134
  if (message.type === AgentMessageType.ANSWER) return true;
135
135
 
136
- if (isToolPreambleMessage(message)) return false;
136
+ if (isToolPreambleMessage(message)) {
137
+ // Text accompanying ask_user can be the draft the question asks the user to review.
138
+ // Keep it visible for both persisted messages and reconstructed streaming messages.
139
+ return (
140
+ message.details?.display_role === 'tool_preamble' &&
141
+ (message.details.tool === 'ask_user' ||
142
+ (Array.isArray(message.details.tools) &&
143
+ message.details.tools.some((tool: unknown) => {
144
+ if (typeof tool === 'string') return tool === 'ask_user';
145
+ if (!tool || typeof tool !== 'object') return false;
146
+ return (
147
+ ('name' in tool && tool.name === 'ask_user') || ('tool' in tool && tool.tool === 'ask_user')
148
+ );
149
+ })))
150
+ );
151
+ }
137
152
 
138
153
  // Streamed thoughts without tool metadata are model-visible prose. They remain
139
154
  // in the conversation unless buildSummaryDisplayMessages classifies them as
@@ -117,13 +117,13 @@ function areMessagesRenderEqual(prevMessage: AgentMessage, nextMessage: AgentMes
117
117
  function statusBadgeClass(status?: ToolExecutionStatus): string {
118
118
  switch (status) {
119
119
  case 'completed':
120
- return 'bg-green-50 dark:bg-green-900/30 text-green-700 dark:text-green-300 border-green-200 dark:border-green-800';
120
+ return 'bg-success text-success border-success';
121
121
  case 'running':
122
- return 'bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 border-blue-200 dark:border-blue-800';
122
+ return 'bg-info text-info border-info';
123
123
  case 'error':
124
- return 'bg-red-50 dark:bg-red-900/30 text-red-700 dark:text-red-300 border-red-200 dark:border-red-800';
124
+ return 'bg-destructive text-destructive border-destructive';
125
125
  case 'warning':
126
- return 'bg-yellow-50 dark:bg-yellow-900/30 text-yellow-700 dark:text-yellow-300 border-yellow-200 dark:border-yellow-800';
126
+ return 'bg-attention text-attention border-attention';
127
127
  default:
128
128
  return '';
129
129
  }
@@ -320,10 +320,9 @@ const getFilesFromDetails = (
320
320
  return Array.isArray(files) ? files : undefined;
321
321
  };
322
322
 
323
- const TOOL_BADGE_CLASS =
324
- 'text-[10px] px-1.5 py-0.5 rounded-md bg-purple-50 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300 border border-purple-200 dark:border-purple-800 font-medium';
323
+ const TOOL_BADGE_CLASS = 'text-[10px] px-1.5 py-0.5 rounded-md bg-done text-done border border-done font-medium';
325
324
  const ASSISTANT_BADGE_CLASS =
326
- 'text-[10px] px-1.5 py-0.5 rounded-md bg-gray-50 dark:bg-gray-800 text-gray-700 dark:text-gray-300 border border-gray-200 dark:border-gray-700 font-medium';
325
+ 'text-[10px] px-1.5 py-0.5 rounded-md bg-muted text-foreground border border-border font-medium';
327
326
 
328
327
  const isToolPreambleMessage = (message: AgentMessage): boolean => {
329
328
  const details = message.details as { display_role?: string } | undefined;
@@ -452,14 +451,14 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
452
451
  };
453
452
 
454
453
  return (
455
- <div className={cn('border-b border-gray-100 dark:border-gray-800 last:border-b-0', classNames.itemClassName)}>
454
+ <div className={cn('border-b border-border last:border-b-0', classNames.itemClassName)}>
456
455
  {/* Collapsed header - always visible */}
457
456
  {/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons (copy); button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
458
457
  <div
459
458
  role="button"
460
459
  tabIndex={0}
461
460
  className={cn(
462
- 'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors',
461
+ 'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-muted transition-colors',
463
462
  classNames.itemHeaderClassName,
464
463
  )}
465
464
  onClick={onToggle}
@@ -518,12 +517,7 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
518
517
  );
519
518
  const progressDetails = getProgressDetails(details as Record<string, unknown> | undefined);
520
519
  return (
521
- <div
522
- className={cn(
523
- 'px-4 py-2 bg-gray-50/50 dark:bg-gray-800/30',
524
- classNames.itemContentClassName,
525
- )}
526
- >
520
+ <div className={cn('px-4 py-2 bg-muted/50 dark:bg-muted/30', classNames.itemContentClassName)}>
527
521
  {/* Badges row: tool name + status + timestamp */}
528
522
  <div className="flex items-center gap-2 mb-2 flex-wrap">
529
523
  <span className={cn(badgeClass, classNames.toolBadgeClassName)}>{toolName}</span>
@@ -769,7 +763,7 @@ function GroupImageDisplay({ messages, artifactRunId }: { messages: AgentMessage
769
763
  if (resolvedImages.length === 0) return null;
770
764
 
771
765
  return (
772
- <div className="px-3 py-1.5 border-b border-gray-100 dark:border-gray-800">
766
+ <div className="px-3 py-1.5 border-b border-border">
773
767
  <FileDisplay files={resolvedImages} />
774
768
  </div>
775
769
  );
@@ -829,7 +823,7 @@ function ToolCallGroupComponent({
829
823
  return <PulsatingCircle size="sm" color="blue" />;
830
824
  }
831
825
  if (toolStatus === 'running') {
832
- return <span className="size-2 rounded-full bg-blue-500 inline-block" />;
826
+ return <span className="size-2 rounded-full bg-primary inline-block" />;
833
827
  }
834
828
  if (toolStatus === 'completed') {
835
829
  return <CheckCircle className="size-4 text-success" />;
@@ -840,7 +834,7 @@ function ToolCallGroupComponent({
840
834
  if (toolStatus === 'warning') {
841
835
  return <AlertTriangle className="size-4 text-attention" />;
842
836
  }
843
- return <Bot className="size-4 text-purple-600 dark:text-purple-400" />;
837
+ return <Bot className="size-4 text-done" />;
844
838
  };
845
839
 
846
840
  // Get border color based on status
@@ -848,7 +842,7 @@ function ToolCallGroupComponent({
848
842
  if (toolStatus === 'completed') return 'border-s-success';
849
843
  if (toolStatus === 'error') return 'border-s-destructive';
850
844
  if (toolStatus === 'warning') return 'border-s-attention';
851
- return 'border-s-purple-500';
845
+ return 'border-s-done';
852
846
  };
853
847
 
854
848
  // Animate new messages when they're added
@@ -914,9 +908,7 @@ function ToolCallGroupComponent({
914
908
  };
915
909
 
916
910
  return (
917
- <div
918
- className={cn('border-s-4 overflow-hidden bg-white dark:bg-gray-900 mb-4', getBorderColor(), rootClassName)}
919
- >
911
+ <div className={cn('border-s-4 overflow-hidden bg-white dark:bg-muted mb-4', getBorderColor(), rootClassName)}>
920
912
  {/* Compact header */}
921
913
  {/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons; button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
922
914
  <div
@@ -924,7 +916,7 @@ function ToolCallGroupComponent({
924
916
  tabIndex={0}
925
917
  aria-expanded={!isCollapsed}
926
918
  className={cn(
927
- 'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors',
919
+ 'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-muted transition-colors',
928
920
  headerClassName,
929
921
  )}
930
922
  onClick={() => setIsCollapsed(!isCollapsed)}
@@ -941,12 +933,7 @@ function ToolCallGroupComponent({
941
933
  ) : (
942
934
  <>
943
935
  <span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
944
- <span
945
- className={cn(
946
- 'text-xs text-purple-600 dark:text-purple-400 font-medium',
947
- toolSummaryClassName,
948
- )}
949
- >
936
+ <span className={cn('text-xs text-done font-medium', toolSummaryClassName)}>
950
937
  {toolSummary}
951
938
  </span>
952
939
  </>
@@ -960,12 +947,7 @@ function ToolCallGroupComponent({
960
947
 
961
948
  <div className="flex items-center gap-1 flex-shrink-0">
962
949
  {preambleText && (
963
- <span
964
- className={cn(
965
- 'text-[10px] text-purple-600 dark:text-purple-400 font-medium',
966
- toolSummaryClassName,
967
- )}
968
- >
950
+ <span className={cn('text-[10px] text-done font-medium', toolSummaryClassName)}>
969
951
  {toolSummary}
970
952
  </span>
971
953
  )}
@@ -1016,10 +998,7 @@ function ToolCallGroupComponent({
1016
998
  return (
1017
999
  <div
1018
1000
  key={itemKey}
1019
- className={cn(
1020
- 'border-b border-gray-100 dark:border-gray-800 last:border-b-0',
1021
- itemClassName,
1022
- )}
1001
+ className={cn('border-b border-border last:border-b-0', itemClassName)}
1023
1002
  style={{
1024
1003
  opacity: isAnimating ? 0 : 1,
1025
1004
  transform: isAnimating ? 'translateX(-10px)' : 'translateX(0)',
@@ -1036,7 +1015,7 @@ function ToolCallGroupComponent({
1036
1015
  tabIndex={0}
1037
1016
  aria-expanded={isItemExpanded}
1038
1017
  className={cn(
1039
- 'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800/50',
1018
+ 'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-muted',
1040
1019
  itemHeaderClassName,
1041
1020
  )}
1042
1021
  onClick={() => toggleItem(itemKey)}
@@ -28,6 +28,29 @@ function makeApprovalRequest(): AgentMessage {
28
28
  } as unknown as AgentMessage;
29
29
  }
30
30
 
31
+ function makeApprovalRequestForToolUse(toolUseId: string): AgentMessage {
32
+ const request = makeApprovalRequest();
33
+ return {
34
+ ...request,
35
+ details: { ...(request.details as Record<string, unknown>), request_id: toolUseId },
36
+ } as unknown as AgentMessage;
37
+ }
38
+
39
+ function makeApprovalReleasedMessage(toolUseId: string, timestamp: number): AgentMessage {
40
+ return {
41
+ timestamp,
42
+ type: AgentMessageType.UPDATE,
43
+ message: 'Approval reviewer allowed Create a new draft interaction.',
44
+ workstream_id: 'main',
45
+ details: {
46
+ request_id: toolUseId,
47
+ approval_decision: 'auto_approved',
48
+ approval_release_reason: 'reviewer_allowed',
49
+ approval_request: { tool_name: 'create_interaction', approval_key: APPROVAL_KEY },
50
+ },
51
+ } as unknown as AgentMessage;
52
+ }
53
+
31
54
  function makeUserAnswer(message: string, metadata?: Record<string, unknown>): AgentMessage {
32
55
  return {
33
56
  timestamp: 2,
@@ -164,6 +187,24 @@ describe('request input correlation', () => {
164
187
  expect(getPendingRequestInputMessage([firstRequest, firstAnswer, secondRequest])).toBe(secondRequest);
165
188
  });
166
189
 
190
+ it('stops asking once the workflow releases the approval without a user answer', () => {
191
+ const request = makeApprovalRequestForToolUse('write-1');
192
+ const released = makeApprovalReleasedMessage('write-1', 3);
193
+
194
+ expect(getPendingRequestInputMessage([request])).toBe(request);
195
+ expect(getPendingRequestInputMessage([request, released])).toBeUndefined();
196
+ });
197
+
198
+ it('keeps asking for a later request that reuses a released approval key', () => {
199
+ // Approval keys are `tool_name:target`, so the same action repeats across turns: a release
200
+ // must resolve the request it answered, not every prompt that shares its key.
201
+ const firstRequest = makeApprovalRequestForToolUse('write-1');
202
+ const released = makeApprovalReleasedMessage('write-1', 3);
203
+ const laterRequest = { ...makeApprovalRequestForToolUse('write-2'), timestamp: 4 };
204
+
205
+ expect(getPendingRequestInputMessage([firstRequest, released, laterRequest])).toBe(laterRequest);
206
+ });
207
+
167
208
  it('reads a request id from response metadata', () => {
168
209
  expect(
169
210
  getRequestInputResponseIdFromMetadata({
@@ -242,6 +242,12 @@ export function getRequestInputResponseIdFromMetadata(metadata?: Record<string,
242
242
  return typeof requestId === 'string' && requestId ? requestId : undefined;
243
243
  }
244
244
 
245
+ /**
246
+ * Prefix marking a resolution that belongs to ONE request rather than to every prompt sharing an
247
+ * approval key. Approval keys are `tool_name:target`, so the same action repeats across turns.
248
+ */
249
+ const RESOLVED_REQUEST_ID_PREFIX = 'request:';
250
+
245
251
  export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<string> {
246
252
  const resolved = new Set<string>();
247
253
 
@@ -251,6 +257,17 @@ export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<strin
251
257
  const approvalKey = approvalRequest?.approval_key;
252
258
  const decision = details?.approval_decision;
253
259
 
260
+ // Released without a user answer (approval mode change, or the reviewer allowed it after the
261
+ // run switched to auto_review). Scoped to the released request: a later prompt for the same
262
+ // action still has to be answered, or the run would wait with nothing on screen.
263
+ if (decision === 'auto_approved') {
264
+ const requestId = details?.request_id;
265
+ if (typeof requestId === 'string' && requestId) {
266
+ resolved.add(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`);
267
+ }
268
+ continue;
269
+ }
270
+
254
271
  if (
255
272
  typeof approvalKey === 'string' &&
256
273
  (decision === 'denied' ||
@@ -321,6 +338,8 @@ export function isRequestInputResolvedByToolApprovalEvent(
321
338
  resolvedToolApprovalKeys: Set<string>,
322
339
  ): boolean {
323
340
  if (message.type !== AgentMessageType.REQUEST_INPUT) return false;
341
+ const requestId = getRequestInputId(message);
342
+ if (requestId && resolvedToolApprovalKeys.has(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`)) return true;
324
343
  const approvalKey = getToolApprovalKey(message);
325
344
  return approvalKey ? resolvedToolApprovalKeys.has(approvalKey) : false;
326
345
  }
@@ -140,6 +140,99 @@ describe('ModernAgentOutput utils - tool preamble behavior', () => {
140
140
  });
141
141
  });
142
142
 
143
+ describe('ModernAgentOutput summary - ask_user review content', () => {
144
+ const draft = '## Draft agenda\n9:00 Welcome\n9:15 Platform foundations';
145
+ const tool = makeMessage({
146
+ timestamp: 3000,
147
+ message: 'Waiting for your review...',
148
+ details: {
149
+ tool: 'ask_user',
150
+ tool_status: 'running',
151
+ tool_run_id: 'ask-1',
152
+ activity_group_id: 'review-1',
153
+ },
154
+ });
155
+ const question = makeMessage({
156
+ timestamp: 4000,
157
+ type: AgentMessageType.REQUEST_INPUT,
158
+ message: 'Does this agenda work?',
159
+ details: { tool: 'ask_user' },
160
+ });
161
+
162
+ it.each([false, true])('keeps persisted review prose visible with streamed=%s', (streamed) => {
163
+ const preamble = makeMessage({
164
+ timestamp: 2000,
165
+ message: draft,
166
+ details: {
167
+ event_class: 'activity',
168
+ display_role: 'tool_preamble',
169
+ tools: ['update_plan', 'ask_user'],
170
+ activity_group_id: 'review-1',
171
+ streamed,
172
+ },
173
+ });
174
+ const items = buildSummaryConversationItems([preamble, tool, question], false);
175
+
176
+ expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
177
+ expect(items[0]).toEqual({ type: 'message', message: preamble });
178
+ expect(items[2]).toEqual({ type: 'message', message: question });
179
+ });
180
+
181
+ it.each([
182
+ { tools: [{ name: 'ask_user' }] },
183
+ { tools: [{ tool: 'ask_user' }] },
184
+ { tool: 'ask_user' },
185
+ { tools: [null, 42, {}, 'search_documents', { name: 'ask_user' }] },
186
+ ])('keeps review prose visible for supported tool metadata: %j', (details) => {
187
+ const preamble = makeMessage({
188
+ timestamp: 2000,
189
+ message: draft,
190
+ // Exercise legacy wire shapes outside the current string[] contract.
191
+ details: { display_role: 'tool_preamble', ...details } as unknown as AgentMessage['details'],
192
+ });
193
+ expect(buildSummaryConversationItems([preamble, tool, question], false)[0]).toEqual({
194
+ type: 'message',
195
+ message: preamble,
196
+ });
197
+ });
198
+
199
+ it.each([
200
+ { display_role: 'tool_preamble', tools: [null, {}, { name: 'search_documents' }] },
201
+ { tool: 'ask_user', tool_status: 'running' },
202
+ { tool: 'think' },
203
+ ])('keeps non-review activity collapsed: %j', (details) => {
204
+ const activity = makeMessage({
205
+ message: 'Working on the draft',
206
+ details: details as unknown as AgentMessage['details'],
207
+ });
208
+ expect(buildSummaryConversationItems([activity, question], false)[0]).toMatchObject({
209
+ type: 'work',
210
+ messages: [activity],
211
+ });
212
+ });
213
+
214
+ it.each([false, true])('keeps reconstructed review streams visible with isComplete=%s', (isComplete) => {
215
+ const messages = buildSummaryDisplayMessages(
216
+ [tool, question],
217
+ new Map([
218
+ [
219
+ 'review-stream',
220
+ {
221
+ text: draft,
222
+ startTimestamp: 2000,
223
+ activityId: 'review-1',
224
+ isComplete,
225
+ },
226
+ ],
227
+ ]),
228
+ );
229
+ const items = buildSummaryConversationItems(messages, false);
230
+
231
+ expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
232
+ expect(items[0]).toMatchObject({ type: 'message', message: { message: draft } });
233
+ });
234
+ });
235
+
143
236
  describe('ModernAgentOutput utils - progress state', () => {
144
237
  it('treats a new user turn after an older idle message as in progress', () => {
145
238
  const idle = makeMessage({
@@ -284,7 +284,7 @@ export function SlidingThinkingIndicator({
284
284
  size="xs"
285
285
  variant="ghost"
286
286
  onClick={() => setShowDetails(!showDetails)}
287
- className="text-slate-500 hover:text-slate-700 flex items-center gap-1 text-xs"
287
+ className="text-muted hover:text-foreground flex items-center gap-1 text-xs"
288
288
  title={showDetails ? t('agent.hideThinkingDetails') : t('agent.showAllMessages')}
289
289
  >
290
290
  {showDetails ? (
@@ -356,10 +356,13 @@ export function SlidingThinkingIndicator({
356
356
  ) : (
357
357
  <div
358
358
  className={cn(
359
- 'py-2 px-3 border-s-2 bg-white dark:bg-slate-800 flex items-center w-full',
359
+ 'py-2 px-3 border-s-2 bg-white dark:bg-muted flex items-center w-full',
360
360
  'transition-all duration-200 ease-in-out rounded-e-md',
361
361
  // Set border color based on message type
362
362
  {
363
+ // Categorical message-type palette, not semantic state:
364
+ // these must stay in step with <PulsingMessageLoader color>
365
+ // in AnimatedThinkingDots, which uses the same hue names.
363
366
  'border-blue-400 dark:border-blue-500':
364
367
  getThinkingColor(message) === 'blue',
365
368
  'border-purple-400 dark:border-purple-500':
@@ -3,7 +3,6 @@ import { Button } from '@vertesia/ui/core';
3
3
  import { useUITranslation } from '@vertesia/ui/i18n';
4
4
  import { useUserSession } from '@vertesia/ui/session';
5
5
  import { Check, Copy, Download, Loader2, Maximize2, Minimize2, X } from 'lucide-react';
6
- import Papa from 'papaparse';
7
6
  import { lazy, memo, Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
7
  import type { View } from 'vega';
9
8
  import type { TopLevelSpec as VisualizationSpec } from 'vega-lite';
@@ -717,7 +716,12 @@ export const VegaLiteChart = memo(
717
716
  let data: unknown[];
718
717
 
719
718
  if (isCsv) {
720
- // Parse CSV to JSON array
719
+ // Parse CSV to JSON array. papaparse is imported here rather than at
720
+ // module scope: it is only ever needed for a chart whose data comes from
721
+ // a .csv artifact, and a static import put it in the widgets bundle's
722
+ // graph (this module is reachable from widgets/markdown), so every
723
+ // application paid for it on first render.
724
+ const { default: Papa } = await import('papaparse');
721
725
  const csvText = await response.text();
722
726
  const parseResult = Papa.parse(csvText, {
723
727
  header: true,
@@ -17,7 +17,7 @@ function RowErrorFallback({ error }: ErrorFallbackComponentProps) {
17
17
  <td colSpan={100}>
18
18
  <span className="text-xs"> Cannot display row</span>
19
19
  <br />
20
- <span className="bg-gray-400">{message}</span>
20
+ <span className="bg-muted">{message}</span>
21
21
  </td>
22
22
  </tr>
23
23
  );
@@ -193,7 +193,7 @@ export function AgentRunnerFacetsNav({
193
193
  <div className="flex justify-end">
194
194
  {!selectionCount && (
195
195
  <div className="flex items-center justify-between px-2 py-1">
196
- <div className="text-sm text-muted-foreground">
196
+ <div className="text-sm text-muted">
197
197
  {search.initialized ? `${search.totalCount} runs` : 'Loading runs...'}
198
198
  </div>
199
199
  </div>