@vertesia/ui 1.5.0-dev.20260901.052906Z → 1.5.0-dev.20260910.051115Z

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 (563) 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/AgentRightPanel.d.ts +2 -3
  61. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  62. package/lib/features/agent/chat/AgentRightPanel.js +3 -3
  63. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  64. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  65. package/lib/features/agent/chat/AskUserWidget.js +13 -13
  66. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  67. package/lib/features/agent/chat/DocumentPanel.d.ts +7 -7
  68. package/lib/features/agent/chat/DocumentPanel.d.ts.map +1 -1
  69. package/lib/features/agent/chat/DocumentPanel.js +6 -12
  70. package/lib/features/agent/chat/DocumentPanel.js.map +1 -1
  71. package/lib/features/agent/chat/DocumentsTab.d.ts +15 -0
  72. package/lib/features/agent/chat/DocumentsTab.d.ts.map +1 -0
  73. package/lib/features/agent/chat/DocumentsTab.js +33 -0
  74. package/lib/features/agent/chat/DocumentsTab.js.map +1 -0
  75. package/lib/features/agent/chat/JumpingDots.js +1 -1
  76. package/lib/features/agent/chat/JumpingDots.js.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentConversation.js +3 -3
  78. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  79. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  80. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +22 -9
  81. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -5
  83. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  85. package/lib/features/agent/chat/ModernAgentOutput/Header.js +16 -11
  86. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  87. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js +1 -1
  88. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js.map +1 -1
  89. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +1 -1
  90. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  91. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  92. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +7 -7
  93. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  94. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js +1 -1
  95. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js.map +1 -1
  96. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  97. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +10 -10
  98. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  99. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
  100. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js.map +1 -1
  101. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.d.ts.map +1 -1
  102. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js +1 -1
  103. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
  104. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +17 -17
  105. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  106. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
  107. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  108. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
  109. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +14 -2
  110. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
  111. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  112. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +15 -15
  113. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  114. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  115. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +18 -0
  116. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  117. package/lib/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
  118. package/lib/features/agent/chat/SlidingThinkingIndicator.js +5 -2
  119. package/lib/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
  120. package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  121. package/lib/features/agent/chat/VegaLiteChart.js +6 -2
  122. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  123. package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts +2 -2
  124. package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
  125. package/lib/features/agent/chat/hooks/useDocumentPanel.js +0 -18
  126. package/lib/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
  127. package/lib/features/errors/RowErrorBoundary.js +1 -1
  128. package/lib/features/errors/RowErrorBoundary.js.map +1 -1
  129. package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
  130. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  131. package/lib/features/facets/utils/VInteractionFacet.d.ts +3 -5
  132. package/lib/features/facets/utils/VInteractionFacet.d.ts.map +1 -1
  133. package/lib/features/facets/utils/VInteractionFacet.js +10 -23
  134. package/lib/features/facets/utils/VInteractionFacet.js.map +1 -1
  135. package/lib/features/facets/utils/VUserFacet.js +1 -1
  136. package/lib/features/facets/utils/VUserFacet.js.map +1 -1
  137. package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  138. package/lib/features/layout/GenericPageNavHeader.js +4 -1
  139. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  140. package/lib/features/layout/NotFoundView.js +1 -1
  141. package/lib/features/layout/NotFoundView.js.map +1 -1
  142. package/lib/features/magic-pdf/AnnotatedImageSlider.js +4 -12
  143. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  144. package/lib/features/magic-pdf/ExtractedContentView.js +4 -4
  145. package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
  146. package/lib/features/magic-pdf/MagicPdfView.js +1 -1
  147. package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
  148. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  149. package/lib/features/oauth/McpConnectionsButton.js +4 -1
  150. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  151. package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
  152. package/lib/features/oauth/McpConnectionsDialog.js +3 -2
  153. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  154. package/lib/features/oauth/useMcpConnections.d.ts +6 -7
  155. package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
  156. package/lib/features/oauth/useMcpConnections.js +27 -20
  157. package/lib/features/oauth/useMcpConnections.js.map +1 -1
  158. package/lib/features/pdf-viewer/PdfPageRenderer.js +2 -2
  159. package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
  160. package/lib/features/pdf-viewer/PdfPageSlider.js +3 -3
  161. package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  162. package/lib/features/pdf-viewer/SimplePdfViewer.js +1 -1
  163. package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  164. package/lib/features/permissions/UserPermissionsProvider.d.ts +2 -1
  165. package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  166. package/lib/features/permissions/UserPermissionsProvider.js +35 -22
  167. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  168. package/lib/features/permissions/useRoleMappings.d.ts +19 -0
  169. package/lib/features/permissions/useRoleMappings.d.ts.map +1 -0
  170. package/lib/features/permissions/useRoleMappings.js +87 -0
  171. package/lib/features/permissions/useRoleMappings.js.map +1 -0
  172. package/lib/features/store/collections/SelectCollection.js +1 -1
  173. package/lib/features/store/collections/SelectCollection.js.map +1 -1
  174. package/lib/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
  175. package/lib/features/store/objects/DocumentPreviewPanel.js +9 -9
  176. package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  177. package/lib/features/store/objects/DocumentTable.js +1 -1
  178. package/lib/features/store/objects/DocumentTable.js.map +1 -1
  179. package/lib/features/store/objects/components/DocumentIcon.js +2 -2
  180. package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
  181. package/lib/features/store/objects/components/DocumentInput.js +1 -1
  182. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  183. package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
  184. package/lib/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  185. package/lib/features/store/objects/components/SaveVersionConfirmModal.js +1 -1
  186. package/lib/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
  187. package/lib/features/store/objects/layout/documentLayout.d.ts.map +1 -1
  188. package/lib/features/store/objects/layout/documentLayout.js +2 -2
  189. package/lib/features/store/objects/layout/documentLayout.js.map +1 -1
  190. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  191. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  192. package/lib/features/store/types/IntakePolicyEditor.d.ts +10 -1
  193. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  194. package/lib/features/store/types/IntakePolicyEditor.js +29 -19
  195. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  196. package/lib/features/store/types/IntakePolicyForm.d.ts +1 -1
  197. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  198. package/lib/features/store/types/IntakePolicyForm.js +5 -3
  199. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  200. package/lib/features/store/types/SelectContentTypeModal.js +1 -1
  201. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  202. package/lib/features/store/types/TypeRegistry.d.ts +10 -5
  203. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  204. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +10 -5
  205. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  206. package/lib/features/user/UserAvatar.js +2 -2
  207. package/lib/features/user/UserAvatar.js.map +1 -1
  208. package/lib/features/user/UserInfo.d.ts.map +1 -1
  209. package/lib/features/user/UserInfo.js +7 -7
  210. package/lib/features/user/UserInfo.js.map +1 -1
  211. package/lib/features/utils/index.d.ts +1 -0
  212. package/lib/features/utils/index.d.ts.map +1 -1
  213. package/lib/features/utils/index.js +1 -0
  214. package/lib/features/utils/index.js.map +1 -1
  215. package/lib/features/utils/interaction.d.ts +55 -0
  216. package/lib/features/utils/interaction.d.ts.map +1 -0
  217. package/lib/features/utils/interaction.js +77 -0
  218. package/lib/features/utils/interaction.js.map +1 -0
  219. package/lib/features/views/ViewResults.js +2 -2
  220. package/lib/features/views/ViewResults.js.map +1 -1
  221. package/lib/i18n/locales/ar.json +17 -1
  222. package/lib/i18n/locales/de.json +13 -1
  223. package/lib/i18n/locales/en.json +13 -1
  224. package/lib/i18n/locales/es.json +13 -1
  225. package/lib/i18n/locales/fr.json +13 -1
  226. package/lib/i18n/locales/it.json +13 -1
  227. package/lib/i18n/locales/ja.json +13 -1
  228. package/lib/i18n/locales/ko.json +13 -1
  229. package/lib/i18n/locales/pt.json +13 -1
  230. package/lib/i18n/locales/ru.json +15 -1
  231. package/lib/i18n/locales/tr.json +13 -1
  232. package/lib/i18n/locales/zh-TW.json +13 -1
  233. package/lib/i18n/locales/zh.json +13 -1
  234. package/lib/layout/FullHeightLayout.js +2 -2
  235. package/lib/layout/FullHeightLayout.js.map +1 -1
  236. package/lib/layout/Navbar.js +4 -4
  237. package/lib/layout/Navbar.js.map +1 -1
  238. package/lib/layout/Sidebar.js +1 -1
  239. package/lib/layout/Sidebar.js.map +1 -1
  240. package/lib/router/NestedNavigationContext.d.ts +3 -1
  241. package/lib/router/NestedNavigationContext.d.ts.map +1 -1
  242. package/lib/router/NestedNavigationContext.js +2 -2
  243. package/lib/router/NestedNavigationContext.js.map +1 -1
  244. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  245. package/lib/session/UserSessionProvider.js +2 -13
  246. package/lib/session/UserSessionProvider.js.map +1 -1
  247. package/lib/session/auth/authState.d.ts +13 -0
  248. package/lib/session/auth/authState.d.ts.map +1 -0
  249. package/lib/session/auth/authState.js +37 -0
  250. package/lib/session/auth/authState.js.map +1 -0
  251. package/lib/session/auth/domainRouting.d.ts +39 -0
  252. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  253. package/lib/session/auth/domainRouting.js +85 -0
  254. package/lib/session/auth/domainRouting.js.map +1 -1
  255. package/lib/session/auth/useAuthState.d.ts +4 -7
  256. package/lib/session/auth/useAuthState.d.ts.map +1 -1
  257. package/lib/session/auth/useAuthState.js +5 -41
  258. package/lib/session/auth/useAuthState.js.map +1 -1
  259. package/lib/session/index.d.ts +1 -0
  260. package/lib/session/index.d.ts.map +1 -1
  261. package/lib/session/index.js +2 -0
  262. package/lib/session/index.js.map +1 -1
  263. package/lib/shell/SplashScreen.d.ts +1 -1
  264. package/lib/shell/SplashScreen.d.ts.map +1 -1
  265. package/lib/shell/SplashScreen.js +6 -2
  266. package/lib/shell/SplashScreen.js.map +1 -1
  267. package/lib/shell/VertesiaShell.js +1 -1
  268. package/lib/shell/VertesiaShell.js.map +1 -1
  269. package/lib/shell/apps/AppProjectSelector.js +1 -1
  270. package/lib/shell/apps/AppProjectSelector.js.map +1 -1
  271. package/lib/shell/apps/StandaloneApp.js +2 -2
  272. package/lib/shell/apps/StandaloneApp.js.map +1 -1
  273. package/lib/shell/login/SignInPrimitives.js +2 -2
  274. package/lib/shell/login/SignInPrimitives.js.map +1 -1
  275. package/lib/shell/login/SigninScreen.js +1 -1
  276. package/lib/shell/login/SigninScreen.js.map +1 -1
  277. package/lib/shell/login/SignupForm.js +1 -1
  278. package/lib/shell/login/SignupForm.js.map +1 -1
  279. package/lib/shell/login/TerminalLogin.js +2 -2
  280. package/lib/shell/login/TerminalLogin.js.map +1 -1
  281. package/lib/shell/login/UserInfo.d.ts.map +1 -1
  282. package/lib/shell/login/UserInfo.js +1 -1
  283. package/lib/shell/login/UserInfo.js.map +1 -1
  284. package/lib/shell/login/UserSessionMenu.js +1 -1
  285. package/lib/shell/login/UserSessionMenu.js.map +1 -1
  286. package/lib/vertesia-ui-core.js +7 -7
  287. package/lib/vertesia-ui-core.js.map +1 -1
  288. package/lib/vertesia-ui-features.js +179 -182
  289. package/lib/vertesia-ui-features.js.map +1 -1
  290. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +5 -0
  291. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +1 -0
  292. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +5 -0
  293. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +1 -0
  294. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +5 -0
  295. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +1 -0
  296. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +5 -0
  297. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +1 -0
  298. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +5 -0
  299. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +1 -0
  300. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +5 -0
  301. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +1 -0
  302. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +5 -0
  303. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +1 -0
  304. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +5 -0
  305. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +1 -0
  306. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +5 -0
  307. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +1 -0
  308. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +5 -0
  309. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +1 -0
  310. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +5 -0
  311. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +1 -0
  312. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +5 -0
  313. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +1 -0
  314. package/lib/vertesia-ui-i18n.js +2 -2
  315. package/lib/vertesia-ui-layout.js +1 -1
  316. package/lib/vertesia-ui-layout.js.map +1 -1
  317. package/lib/vertesia-ui-rich-text.js +24 -24
  318. package/lib/vertesia-ui-rich-text.js.map +1 -1
  319. package/lib/vertesia-ui-router.js +1 -1
  320. package/lib/vertesia-ui-router.js.map +1 -1
  321. package/lib/vertesia-ui-session.js +1 -1
  322. package/lib/vertesia-ui-session.js.map +1 -1
  323. package/lib/vertesia-ui-shell.js +3 -3
  324. package/lib/vertesia-ui-shell.js.map +1 -1
  325. package/lib/vertesia-ui-widgets.js +54 -54
  326. package/lib/vertesia-ui-widgets.js.map +1 -1
  327. package/lib/widgets/Progress.js +1 -1
  328. package/lib/widgets/Progress.js.map +1 -1
  329. package/lib/widgets/form/Form.js +2 -2
  330. package/lib/widgets/form/Form.js.map +1 -1
  331. package/lib/widgets/form/fields.js +2 -2
  332. package/lib/widgets/form/fields.js.map +1 -1
  333. package/lib/widgets/json-view/JSONView.js +1 -1
  334. package/lib/widgets/json-view/JSONView.js.map +1 -1
  335. package/lib/widgets/markdown/MermaidDiagram.js +1 -1
  336. package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
  337. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts +7 -2
  338. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
  339. package/lib/widgets/markdown/remarkDirectiveHandler.js +19 -4
  340. package/lib/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
  341. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  342. package/lib/widgets/monacoEditor/MonacoEditor.js +4 -2
  343. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  344. package/lib/widgets/monacoEditor/index.d.ts +1 -0
  345. package/lib/widgets/monacoEditor/index.d.ts.map +1 -1
  346. package/lib/widgets/monacoEditor/index.js +1 -0
  347. package/lib/widgets/monacoEditor/index.js.map +1 -1
  348. package/lib/widgets/monacoEditor/loadMonaco.d.ts +45 -0
  349. package/lib/widgets/monacoEditor/loadMonaco.d.ts.map +1 -0
  350. package/lib/widgets/monacoEditor/loadMonaco.js +62 -0
  351. package/lib/widgets/monacoEditor/loadMonaco.js.map +1 -0
  352. package/lib/widgets/properties/PropertiesView.js +1 -1
  353. package/lib/widgets/properties/PropertiesView.js.map +1 -1
  354. package/lib/widgets/schema-editor/editor/Editable.js +2 -2
  355. package/lib/widgets/schema-editor/editor/Editable.js.map +1 -1
  356. package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
  357. package/lib/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  358. package/lib/widgets/schema-editor/editor/SchemaEditor.js +2 -2
  359. package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  360. package/lib/widgets/upload/DropZone.js +1 -1
  361. package/lib/widgets/upload/DropZone.js.map +1 -1
  362. package/lib/widgets/upload/UploadResultCategory.d.ts +1 -1
  363. package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  364. package/lib/widgets/upload/UploadResultCategory.js +3 -3
  365. package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
  366. package/lib/widgets/upload/UploadSummary.js +1 -1
  367. package/lib/widgets/upload/UploadSummary.js.map +1 -1
  368. package/lib/widgets/xml-viewer/components/XMLViewer.d.ts.map +1 -1
  369. package/lib/widgets/xml-viewer/components/XMLViewer.js +7 -3
  370. package/lib/widgets/xml-viewer/components/XMLViewer.js.map +1 -1
  371. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  372. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +11 -13
  373. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  374. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +41 -14
  375. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  376. package/package.json +7 -7
  377. package/src/__tests__/contrast.test.ts +1 -0
  378. package/src/core/components/Avatar.tsx +3 -3
  379. package/src/core/components/ComboBox.tsx +1 -1
  380. package/src/core/components/FileUpload.tsx +4 -4
  381. package/src/core/components/Link.tsx +1 -1
  382. package/src/core/components/SelectList.tsx +1 -1
  383. package/src/core/components/SidePanel.tsx +1 -1
  384. package/src/core/components/Spinner.tsx +1 -1
  385. package/src/core/components/TagsInput.tsx +8 -8
  386. package/src/core/components/shadcn/MessageBox.tsx +1 -1
  387. package/src/core/components/shadcn/button.tsx +1 -1
  388. package/src/core/components/shadcn/card.tsx +1 -3
  389. package/src/core/components/shadcn/command.tsx +5 -5
  390. package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -1
  391. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -3
  392. package/src/core/components/shadcn/input.tsx +3 -3
  393. package/src/core/components/shadcn/modal/ConfirmModal.tsx +3 -3
  394. package/src/core/components/shadcn/modal/dialog.tsx +2 -4
  395. package/src/core/components/shadcn/overflowTabs.tsx +2 -2
  396. package/src/core/components/shadcn/popover.tsx +1 -1
  397. package/src/core/components/shadcn/radioGroup.tsx +5 -7
  398. package/src/core/components/shadcn/selectBox.tsx +1 -1
  399. package/src/core/components/shadcn/tabs.tsx +4 -2
  400. package/src/core/components/styles.ts +1 -1
  401. package/src/core/components/table/index.tsx +1 -1
  402. package/src/core/hooks/useFetch.test.ts +20 -0
  403. package/src/core/hooks/useFetch.ts +2 -0
  404. package/src/css/base.css +1 -1
  405. package/src/css/color.css +4 -0
  406. package/src/css/theme.css +1 -0
  407. package/src/css/typography.css +2 -2
  408. package/src/features/activity-doc/ActivityDoc.tsx +11 -11
  409. package/src/features/agent/chat/AgentChart.tsx +1 -1
  410. package/src/features/agent/chat/AgentRightPanel.tsx +4 -8
  411. package/src/features/agent/chat/AskUserWidget.tsx +19 -23
  412. package/src/features/agent/chat/DocumentPanel.tsx +39 -48
  413. package/src/features/agent/chat/DocumentsTab.test.tsx +87 -0
  414. package/src/features/agent/chat/DocumentsTab.tsx +124 -0
  415. package/src/features/agent/chat/JumpingDots.tsx +3 -3
  416. package/src/features/agent/chat/ModernAgentConversation.test.tsx +0 -1
  417. package/src/features/agent/chat/ModernAgentConversation.tsx +3 -5
  418. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +60 -1
  419. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +44 -24
  420. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +12 -12
  421. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +28 -15
  422. package/src/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.tsx +4 -4
  423. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +2 -2
  424. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +7 -12
  425. package/src/features/agent/chat/ModernAgentOutput/MessagesContainer.tsx +1 -1
  426. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +16 -22
  427. package/src/features/agent/chat/ModernAgentOutput/SlideInPanel.tsx +4 -4
  428. package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -4
  429. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +21 -21
  430. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +4 -4
  431. package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +16 -1
  432. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +19 -40
  433. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +41 -0
  434. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +19 -0
  435. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +93 -0
  436. package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -2
  437. package/src/features/agent/chat/VegaLiteChart.tsx +6 -2
  438. package/src/features/agent/chat/hooks/useDocumentPanel.test.tsx +33 -0
  439. package/src/features/agent/chat/hooks/useDocumentPanel.ts +3 -20
  440. package/src/features/errors/RowErrorBoundary.tsx +1 -1
  441. package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
  442. package/src/features/facets/utils/VInteractionFacet.tsx +22 -34
  443. package/src/features/facets/utils/VUserFacet.tsx +1 -1
  444. package/src/features/layout/GenericPageNavHeader.tsx +9 -1
  445. package/src/features/layout/NotFoundView.tsx +1 -1
  446. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +8 -16
  447. package/src/features/magic-pdf/ExtractedContentView.tsx +4 -4
  448. package/src/features/magic-pdf/MagicPdfView.tsx +1 -1
  449. package/src/features/oauth/McpConnectionsButton.test.tsx +79 -8
  450. package/src/features/oauth/McpConnectionsButton.tsx +6 -3
  451. package/src/features/oauth/McpConnectionsDialog.tsx +9 -3
  452. package/src/features/oauth/useMcpConnections.ts +33 -27
  453. package/src/features/pdf-viewer/PdfPageRenderer.tsx +2 -2
  454. package/src/features/pdf-viewer/PdfPageSlider.tsx +4 -4
  455. package/src/features/pdf-viewer/SimplePdfViewer.tsx +1 -1
  456. package/src/features/permissions/UserPermissionsProvider.test.tsx +172 -0
  457. package/src/features/permissions/UserPermissionsProvider.tsx +68 -21
  458. package/src/features/permissions/useRoleMappings.ts +105 -0
  459. package/src/features/store/collections/SelectCollection.tsx +1 -1
  460. package/src/features/store/objects/DocumentPreviewPanel.tsx +43 -53
  461. package/src/features/store/objects/DocumentTable.tsx +2 -2
  462. package/src/features/store/objects/components/DocumentIcon.tsx +4 -4
  463. package/src/features/store/objects/components/DocumentInput.tsx +3 -3
  464. package/src/features/store/objects/components/PropertiesEditorModal.tsx +2 -2
  465. package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +2 -2
  466. package/src/features/store/objects/layout/documentLayout.tsx +2 -4
  467. package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
  468. package/src/features/store/types/IntakePolicyEditor.tsx +70 -36
  469. package/src/features/store/types/IntakePolicyForm.tsx +11 -3
  470. package/src/features/store/types/SelectContentTypeModal.tsx +1 -1
  471. package/src/features/user/UserAvatar.tsx +3 -3
  472. package/src/features/user/UserInfo.tsx +11 -16
  473. package/src/features/utils/index.ts +1 -0
  474. package/src/features/utils/interaction.test.tsx +93 -0
  475. package/src/features/utils/interaction.tsx +125 -0
  476. package/src/features/views/ViewResults.tsx +3 -3
  477. package/src/i18n/locales/ar.json +17 -1
  478. package/src/i18n/locales/de.json +13 -1
  479. package/src/i18n/locales/en.json +13 -1
  480. package/src/i18n/locales/es.json +13 -1
  481. package/src/i18n/locales/fr.json +13 -1
  482. package/src/i18n/locales/it.json +13 -1
  483. package/src/i18n/locales/ja.json +13 -1
  484. package/src/i18n/locales/ko.json +13 -1
  485. package/src/i18n/locales/pt.json +13 -1
  486. package/src/i18n/locales/ru.json +15 -1
  487. package/src/i18n/locales/tr.json +13 -1
  488. package/src/i18n/locales/zh-TW.json +13 -1
  489. package/src/i18n/locales/zh.json +13 -1
  490. package/src/layout/FullHeightLayout.tsx +2 -2
  491. package/src/layout/Navbar.tsx +5 -5
  492. package/src/layout/Sidebar.tsx +1 -1
  493. package/src/router/NestedNavigationContext.test.tsx +54 -0
  494. package/src/router/NestedNavigationContext.tsx +9 -2
  495. package/src/session/UserSessionProvider.tsx +2 -15
  496. package/src/session/auth/authState.test.ts +35 -0
  497. package/src/session/auth/authState.ts +42 -0
  498. package/src/session/auth/domainRouting.test.ts +169 -1
  499. package/src/session/auth/domainRouting.ts +89 -0
  500. package/src/session/auth/useAuthState.ts +5 -49
  501. package/src/session/index.ts +6 -0
  502. package/src/shell/SplashScreen.test.tsx +22 -0
  503. package/src/shell/SplashScreen.tsx +6 -2
  504. package/src/shell/VertesiaShell.tsx +1 -1
  505. package/src/shell/apps/AppProjectSelector.tsx +1 -1
  506. package/src/shell/apps/StandaloneApp.tsx +9 -9
  507. package/src/shell/login/SignInPrimitives.tsx +2 -2
  508. package/src/shell/login/SigninScreen.tsx +1 -1
  509. package/src/shell/login/SignupForm.tsx +2 -2
  510. package/src/shell/login/TerminalLogin.tsx +5 -5
  511. package/src/shell/login/UserInfo.tsx +2 -5
  512. package/src/shell/login/UserSessionMenu.tsx +2 -2
  513. package/src/widgets/Progress.tsx +2 -2
  514. package/src/widgets/form/Form.tsx +4 -4
  515. package/src/widgets/form/fields.tsx +2 -2
  516. package/src/widgets/json-view/JSONView.tsx +1 -6
  517. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +33 -29
  518. package/src/widgets/markdown/MarkdownRenderer.test.tsx +52 -0
  519. package/src/widgets/markdown/MermaidDiagram.tsx +2 -2
  520. package/src/widgets/markdown/remarkDirectiveHandler.ts +21 -5
  521. package/src/widgets/monacoEditor/MonacoEditor.tsx +4 -2
  522. package/src/widgets/monacoEditor/index.ts +1 -0
  523. package/src/widgets/monacoEditor/loadMonaco.test.ts +63 -0
  524. package/src/widgets/monacoEditor/loadMonaco.ts +70 -0
  525. package/src/widgets/properties/PropertiesView.tsx +1 -1
  526. package/src/widgets/schema-editor/editor/Editable.tsx +2 -2
  527. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +1 -1
  528. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +2 -2
  529. package/src/widgets/upload/DropZone.tsx +1 -1
  530. package/src/widgets/upload/UploadResultCategory.tsx +7 -7
  531. package/src/widgets/upload/UploadSummary.tsx +4 -4
  532. package/src/widgets/xml-viewer/components/XMLViewer.tsx +7 -3
  533. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +60 -7
  534. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +70 -16
  535. package/lib/features/agent/chat/DocumentTabBar.d.ts +0 -9
  536. package/lib/features/agent/chat/DocumentTabBar.d.ts.map +0 -1
  537. package/lib/features/agent/chat/DocumentTabBar.js +0 -9
  538. package/lib/features/agent/chat/DocumentTabBar.js.map +0 -1
  539. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js +0 -5
  540. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js.map +0 -1
  541. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js +0 -5
  542. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js.map +0 -1
  543. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js +0 -5
  544. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js.map +0 -1
  545. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js +0 -5
  546. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js.map +0 -1
  547. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js +0 -5
  548. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js.map +0 -1
  549. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js +0 -5
  550. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js.map +0 -1
  551. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js +0 -5
  552. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js.map +0 -1
  553. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js +0 -5
  554. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js.map +0 -1
  555. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js +0 -5
  556. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js.map +0 -1
  557. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js +0 -5
  558. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js.map +0 -1
  559. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js +0 -5
  560. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js.map +0 -1
  561. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js +0 -5
  562. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js.map +0 -1
  563. package/src/features/agent/chat/DocumentTabBar.tsx +0 -41
@@ -3,28 +3,25 @@ import { useUITranslation } from '@vertesia/ui/i18n';
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
- import { ExternalLinkIcon, FileTextIcon, Loader2Icon, X } from 'lucide-react';
6
+ import { ArrowLeftIcon, ExternalLinkIcon, FileTextIcon, Loader2Icon } from 'lucide-react';
7
7
  import React, { useCallback, useEffect, useState } from 'react';
8
- import { DocumentTabBar } from './DocumentTabBar.js';
9
- import type { OpenDocument } from './types/document.js';
10
8
 
11
9
  interface DocumentPanelProps {
12
- isOpen: boolean;
13
- documents: OpenDocument[];
14
- activeDocumentId: string | null;
15
- onSelectDocument: (id: string) => void;
16
- onCloseDocument: (id: string) => void;
10
+ /** Document currently displayed. */
11
+ documentId: string;
12
+ /** Title known by the list, shown until the document itself is loaded. */
13
+ title?: string;
14
+ /** Return to the document list. */
15
+ onBack: () => void;
17
16
  onUpdateDocumentTitle?: (id: string, title: string) => void;
18
17
  refreshKey: number;
19
18
  runId?: string;
20
19
  }
21
20
 
22
21
  function DocumentPanelComponent({
23
- isOpen,
24
- documents,
25
- activeDocumentId,
26
- onSelectDocument,
27
- onCloseDocument,
22
+ documentId,
23
+ title,
24
+ onBack,
28
25
  onUpdateDocumentTitle,
29
26
  refreshKey,
30
27
  runId,
@@ -60,48 +57,42 @@ function DocumentPanelComponent({
60
57
  [client, onUpdateDocumentTitle, t],
61
58
  );
62
59
 
63
- // Fetch content when active document changes or refreshKey bumps
60
+ // Fetch content when the displayed document changes or refreshKey bumps
64
61
  useEffect(() => {
65
62
  void refreshKey;
66
- if (activeDocumentId && isOpen) {
67
- void fetchContent(activeDocumentId);
68
- }
69
- }, [activeDocumentId, refreshKey, isOpen, fetchContent]);
70
-
71
- if (!isOpen || documents.length === 0) {
72
- return null;
73
- }
63
+ void fetchContent(documentId);
64
+ }, [documentId, refreshKey, fetchContent]);
74
65
 
75
66
  return (
76
- <div className="h-full shadow-xl border border-muted/20 overflow-hidden flex flex-col">
67
+ <div className="h-full overflow-hidden flex flex-col">
77
68
  {/* Header */}
78
- <div className="flex items-center justify-between px-3 py-2 border-b border-muted/20 shrink-0">
79
- <div className="flex items-center gap-2 min-w-0">
69
+ <div className="flex items-center justify-between gap-1 px-2 py-1 border-b border-border/60 shrink-0">
70
+ <Button
71
+ variant="ghost"
72
+ size="sm"
73
+ className="size-8 shrink-0 rounded-md p-0"
74
+ onClick={onBack}
75
+ aria-label={t('agent.backToDocuments')}
76
+ title={t('agent.backToDocuments')}
77
+ >
78
+ <ArrowLeftIcon className="size-4 cn-rtl-flip" />
79
+ </Button>
80
+ <div className="flex items-center gap-1.5 min-w-0 flex-1">
80
81
  <FileTextIcon className="size-4 text-muted shrink-0" />
81
- <h3 className="font-bold text-sm truncate">{docName || t('agent.document')}</h3>
82
- </div>
83
- <div className="flex items-center gap-1">
84
- <DocumentTabBar documents={documents} activeId={activeDocumentId} onSelect={onSelectDocument} />
85
- {activeDocumentId && (
86
- <NavLink
87
- href={`/store/objects/${activeDocumentId}#overview`}
88
- topLevelNav
89
- className="inline-flex items-center justify-center rounded-md text-sm font-medium h-8 w-8 hover:bg-muted/20 text-muted hover:text-foreground"
90
- >
91
- <VTooltip description={t('agent.openDocument')} placement="top" size="xs">
92
- <ExternalLinkIcon className="size-4" />
93
- </VTooltip>
94
- </NavLink>
95
- )}
96
- <Button
97
- variant="ghost"
98
- size="sm"
99
- onClick={() => activeDocumentId && onCloseDocument(activeDocumentId)}
100
- title={t('agent.close')}
101
- >
102
- <X className="size-4" />
103
- </Button>
82
+ <span className="truncate text-sm font-medium" title={docName || title}>
83
+ {docName || title || t('agent.document')}
84
+ </span>
104
85
  </div>
86
+ <NavLink
87
+ href={`/store/objects/${documentId}#overview`}
88
+ topLevelNav
89
+ className="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted hover:bg-muted/20 hover:text-foreground"
90
+ >
91
+ <VTooltip description={t('agent.openDocument')} placement="top" size="xs" asChild>
92
+ <ExternalLinkIcon className="size-4" aria-hidden="true" />
93
+ </VTooltip>
94
+ <span className="sr-only">{t('agent.openDocument')}</span>
95
+ </NavLink>
105
96
  </div>
106
97
 
107
98
  {/* Content area */}
@@ -0,0 +1,87 @@
1
+ /** @vitest-environment jsdom */
2
+
3
+ import { cleanup, fireEvent, render, screen } from '@testing-library/react';
4
+ import type { ComponentProps } from 'react';
5
+ import { afterEach, describe, expect, it, vi } from 'vitest';
6
+ import { I18nProvider } from '../../../i18n/index.js';
7
+ import { DocumentsTab } from './DocumentsTab.js';
8
+
9
+ vi.mock('@vertesia/ui/session', () => ({
10
+ useUserSession: () => ({
11
+ client: {
12
+ store: {
13
+ objects: {
14
+ getObjectText: vi.fn().mockResolvedValue({ text: 'Brief body' }),
15
+ retrieve: vi.fn().mockResolvedValue({ name: 'Brief' }),
16
+ },
17
+ },
18
+ },
19
+ }),
20
+ }));
21
+
22
+ vi.mock('@vertesia/ui/router', () => ({
23
+ NavLink: ({ href, children }: { href: string; children: React.ReactNode }) => <a href={href}>{children}</a>,
24
+ }));
25
+
26
+ vi.mock('@vertesia/ui/widgets', () => ({
27
+ MarkdownRenderer: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
28
+ }));
29
+
30
+ afterEach(cleanup);
31
+
32
+ const documents = [
33
+ { id: 'doc-1', title: 'Brief' },
34
+ { id: 'doc-2', title: 'Summary' },
35
+ ];
36
+
37
+ function renderDocumentsTab(props?: Partial<ComponentProps<typeof DocumentsTab>>) {
38
+ const onSelectDocument = vi.fn();
39
+ render(
40
+ <I18nProvider lng="en">
41
+ <DocumentsTab
42
+ documents={documents}
43
+ activeDocumentId={null}
44
+ onSelectDocument={onSelectDocument}
45
+ refreshKey={0}
46
+ {...props}
47
+ />
48
+ </I18nProvider>,
49
+ );
50
+ return { onSelectDocument };
51
+ }
52
+
53
+ describe('DocumentsTab', () => {
54
+ it('lists the open documents when none is selected', () => {
55
+ renderDocumentsTab();
56
+
57
+ expect(screen.getByText('2 documents')).toBeTruthy();
58
+ expect(screen.getByRole('button', { name: 'Brief' })).toBeTruthy();
59
+ expect(screen.getByRole('button', { name: 'Summary' })).toBeTruthy();
60
+ });
61
+
62
+ it('links each list entry to its document page', () => {
63
+ renderDocumentsTab();
64
+
65
+ const links = screen.getAllByRole('link', { name: 'Open document' });
66
+ expect(links.map((link) => link.getAttribute('href'))).toEqual([
67
+ '/store/objects/doc-1#overview',
68
+ '/store/objects/doc-2#overview',
69
+ ]);
70
+ });
71
+
72
+ it('selects a document when its list entry is clicked', () => {
73
+ const { onSelectDocument } = renderDocumentsTab();
74
+
75
+ fireEvent.click(screen.getByRole('button', { name: 'Brief' }));
76
+
77
+ expect(onSelectDocument).toHaveBeenCalledWith('doc-1');
78
+ });
79
+
80
+ it('goes back to the list from the selected document', () => {
81
+ const { onSelectDocument } = renderDocumentsTab({ activeDocumentId: 'doc-1' });
82
+
83
+ fireEvent.click(screen.getByRole('button', { name: 'Back to documents' }));
84
+
85
+ expect(onSelectDocument).toHaveBeenCalledWith(null);
86
+ });
87
+ });
@@ -0,0 +1,124 @@
1
+ import { Button, Input, VTooltip } from '@vertesia/ui/core';
2
+ import { useUITranslation } from '@vertesia/ui/i18n';
3
+ import { NavLink } from '@vertesia/ui/router';
4
+ import { ExternalLinkIcon, FileTextIcon } from 'lucide-react';
5
+ import React, { useCallback, useId, useMemo, useState } from 'react';
6
+ import { DocumentPanel } from './DocumentPanel.js';
7
+ import type { OpenDocument } from './types/document.js';
8
+
9
+ /** Below this many documents the list is short enough that a filter box is just noise. */
10
+ const FILTER_VISIBILITY_THRESHOLD = 5;
11
+
12
+ interface DocumentsTabProps {
13
+ documents: OpenDocument[];
14
+ /** Document shown in the detail view; `null` shows the list. */
15
+ activeDocumentId: string | null;
16
+ onSelectDocument: (id: string | null) => void;
17
+ onUpdateDocumentTitle?: (id: string, title: string) => void;
18
+ refreshKey: number;
19
+ runId?: string;
20
+ }
21
+
22
+ function DocumentsTabComponent({
23
+ documents,
24
+ activeDocumentId,
25
+ onSelectDocument,
26
+ onUpdateDocumentTitle,
27
+ refreshKey,
28
+ runId,
29
+ }: DocumentsTabProps) {
30
+ const { t } = useUITranslation();
31
+ const [filterValue, setFilterValue] = useState('');
32
+ const filterInputId = useId();
33
+
34
+ const normalizedFilterValue = filterValue.trim().toLocaleLowerCase();
35
+ const filteredDocuments = useMemo(() => {
36
+ if (!normalizedFilterValue) return documents;
37
+ return documents.filter((doc) => doc.title.toLocaleLowerCase().includes(normalizedFilterValue));
38
+ }, [documents, normalizedFilterValue]);
39
+
40
+ const handleBack = useCallback(() => onSelectDocument(null), [onSelectDocument]);
41
+
42
+ const activeDocument = activeDocumentId ? documents.find((doc) => doc.id === activeDocumentId) : undefined;
43
+
44
+ if (activeDocumentId) {
45
+ return (
46
+ <DocumentPanel
47
+ documentId={activeDocumentId}
48
+ title={activeDocument?.title}
49
+ onBack={handleBack}
50
+ onUpdateDocumentTitle={onUpdateDocumentTitle}
51
+ refreshKey={refreshKey}
52
+ runId={runId}
53
+ />
54
+ );
55
+ }
56
+
57
+ return (
58
+ <div className="flex flex-col h-full">
59
+ {/* Top bar */}
60
+ <div className="flex shrink-0 flex-col gap-2 border-b px-3 py-2">
61
+ <span className="text-xs text-muted">
62
+ {normalizedFilterValue
63
+ ? t('agent.documentsFiltered', {
64
+ visible: filteredDocuments.length,
65
+ total: documents.length,
66
+ })
67
+ : t('agent.documentCount', { count: documents.length })}
68
+ </span>
69
+ {documents.length > FILTER_VISIBILITY_THRESHOLD && (
70
+ <>
71
+ <label htmlFor={filterInputId} className="sr-only">
72
+ {t('form.filter')}
73
+ </label>
74
+ <Input
75
+ id={filterInputId}
76
+ type="text"
77
+ role="searchbox"
78
+ autoComplete="off"
79
+ placeholder={t('store.searchPlaceholder')}
80
+ value={filterValue}
81
+ onChange={setFilterValue}
82
+ clearable={true}
83
+ />
84
+ </>
85
+ )}
86
+ </div>
87
+
88
+ {/* List */}
89
+ <div className="flex-1 overflow-y-auto px-3 py-2">
90
+ {filteredDocuments.length > 0 ? (
91
+ <div className="min-w-0">
92
+ {filteredDocuments.map((doc) => (
93
+ <div key={doc.id} className="flex min-w-0 items-center gap-1">
94
+ <Button
95
+ variant="unstyled"
96
+ className="flex min-w-0 flex-1 items-center justify-start gap-1.5 rounded px-1 py-1 text-start text-sm hover:bg-muted/30"
97
+ onClick={() => onSelectDocument(doc.id)}
98
+ title={doc.title}
99
+ >
100
+ <FileTextIcon className="size-4 shrink-0 text-muted" />
101
+ <span className="min-w-0 truncate">{doc.title}</span>
102
+ </Button>
103
+ <NavLink
104
+ href={`/store/objects/${doc.id}#overview`}
105
+ topLevelNav
106
+ className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted hover:bg-muted/20 hover:text-foreground"
107
+ >
108
+ <VTooltip description={t('agent.openDocument')} placement="top" size="xs" asChild>
109
+ <ExternalLinkIcon className="size-3.5" aria-hidden="true" />
110
+ </VTooltip>
111
+ <span className="sr-only">{t('agent.openDocument')}</span>
112
+ </NavLink>
113
+ </div>
114
+ ))}
115
+ </div>
116
+ ) : (
117
+ <div className="px-1 py-6 text-sm text-muted">{t('agent.noMatchingDocuments')}</div>
118
+ )}
119
+ </div>
120
+ </div>
121
+ );
122
+ }
123
+
124
+ export const DocumentsTab = React.memo(DocumentsTabComponent);
@@ -9,15 +9,15 @@ export function JumpingDots({ className, inline = false }: JumpingDotsProps) {
9
9
  return (
10
10
  <div className={cn('flex items-center gap-1', inline ? 'inline-flex' : '', className)}>
11
11
  <div
12
- className="w-2 h-2 bg-blue-500 rounded-full animate-[jumping_1s_infinite_ease-in-out] hover:bg-blue-600"
12
+ className="w-2 h-2 bg-primary rounded-full animate-[jumping_1s_infinite_ease-in-out] hover:bg-primary"
13
13
  style={{ transform: 'translateY(0)', animationRange: '0px -8px' }}
14
14
  />
15
15
  <div
16
- className="w-2 h-2 bg-blue-500 rounded-full animate-[jumping_1s_0.3s_infinite_ease-in-out] hover:bg-blue-600"
16
+ className="w-2 h-2 bg-primary rounded-full animate-[jumping_1s_0.3s_infinite_ease-in-out] hover:bg-primary"
17
17
  style={{ transform: 'translateY(0)', animationRange: '0px -8px' }}
18
18
  />
19
19
  <div
20
- className="w-2 h-2 bg-blue-500 rounded-full animate-[jumping_1s_0.6s_infinite_ease-in-out] hover:bg-blue-600"
20
+ className="w-2 h-2 bg-primary rounded-full animate-[jumping_1s_0.6s_infinite_ease-in-out] hover:bg-primary"
21
21
  style={{ transform: 'translateY(0)', animationRange: '0px -8px' }}
22
22
  />
23
23
  </div>
@@ -282,7 +282,6 @@ describe('ModernAgentConversation send handling', () => {
282
282
  isDocPanelOpen: false,
283
283
  docRefreshKey: 0,
284
284
  closeDocPanel: vi.fn(),
285
- closeDocument: vi.fn(),
286
285
  selectDocument: vi.fn(),
287
286
  openDocInPanel: vi.fn(),
288
287
  updateDocumentTitle: vi.fn(),
@@ -1561,7 +1561,6 @@ function ModernAgentConversationInner({
1561
1561
  isDocPanelOpen,
1562
1562
  docRefreshKey,
1563
1563
  closeDocPanel: handleCloseDocPanel,
1564
- closeDocument: handleCloseDocument,
1565
1564
  selectDocument,
1566
1565
  openDocInPanel,
1567
1566
  updateDocumentTitle,
@@ -2971,7 +2970,7 @@ function ModernAgentConversationInner({
2971
2970
  ref={conversationLayoutRef}
2972
2971
  className={cn(
2973
2972
  'flex flex-col lg:flex-row gap-2 w-full h-full relative overflow-hidden',
2974
- canUploadFiles && isDragOver && 'ring-2 ring-blue-400 ring-inset',
2973
+ canUploadFiles && isDragOver && 'ring-2 ring-info ring-inset',
2975
2974
  className,
2976
2975
  )}
2977
2976
  onDragEnter={canUploadFiles ? handleDragEnter : undefined}
@@ -2981,8 +2980,8 @@ function ModernAgentConversationInner({
2981
2980
  >
2982
2981
  {/* Drag overlay for full-panel file drop */}
2983
2982
  {canUploadFiles && isDragOver && (
2984
- <div className="absolute inset-0 flex items-center justify-center bg-blue-100/80 dark:bg-blue-900/40 z-50 pointer-events-none rounded-lg">
2985
- <div className="text-blue-600 dark:text-blue-400 font-medium flex items-center gap-2 text-lg">
2983
+ <div className="absolute inset-0 flex items-center justify-center bg-info/80 dark:bg-info/40 z-50 pointer-events-none rounded-lg">
2984
+ <div className="text-info font-medium flex items-center gap-2 text-lg">
2986
2985
  <UploadIcon className="size-6" />
2987
2986
  Drop files to upload
2988
2987
  </div>
@@ -3062,7 +3061,6 @@ function ModernAgentConversationInner({
3062
3061
  openDocuments={openDocuments}
3063
3062
  activeDocumentId={activeDocumentId}
3064
3063
  onSelectDocument={selectDocument}
3065
- onCloseDocument={handleCloseDocument}
3066
3064
  onUpdateDocumentTitle={updateDocumentTitle}
3067
3065
  docRefreshKey={docRefreshKey}
3068
3066
  runId={agentRunId}
@@ -133,6 +133,41 @@ describe('AllMessagesMixed summary view', () => {
133
133
  vi.useRealTimers();
134
134
  });
135
135
 
136
+ it('keeps the draft accompanying ask_user visible outside collapsed work', () => {
137
+ renderSummary([
138
+ makeMessage({
139
+ timestamp: 1000,
140
+ message: '## Draft agenda\n9:00 Welcome\n9:15 Platform foundations',
141
+ details: {
142
+ event_class: 'activity',
143
+ display_role: 'tool_preamble',
144
+ tools: ['ask_user'],
145
+ activity_group_id: 'review-1',
146
+ streamed: true,
147
+ },
148
+ }),
149
+ makeMessage({
150
+ timestamp: 2000,
151
+ message: 'Waiting for review...',
152
+ details: {
153
+ tool: 'ask_user',
154
+ tool_status: 'running',
155
+ activity_group_id: 'review-1',
156
+ },
157
+ }),
158
+ makeMessage({
159
+ timestamp: 3000,
160
+ type: AgentMessageType.REQUEST_INPUT,
161
+ message: 'Does this agenda work?',
162
+ details: { tool: 'ask_user', request_id: 'ask-1' },
163
+ }),
164
+ ]);
165
+
166
+ expect(screen.getByRole('heading', { name: 'Draft agenda' })).not.toBeNull();
167
+ expect(screen.getByText('Does this agenda work?')).not.toBeNull();
168
+ expect(screen.getByRole('button', { name: /Worked\s*for/ }).getAttribute('aria-expanded')).toBe('false');
169
+ });
170
+
136
171
  it('renders delivery status on user bubbles in summary view', () => {
137
172
  renderSummary([
138
173
  makeMessage({
@@ -1109,7 +1144,9 @@ describe('AllMessagesMixed summary view', () => {
1109
1144
 
1110
1145
  const columns = Array.from(screen.getByRole('table').querySelectorAll('col'));
1111
1146
  const contentWidths = [columns[0], columns[2]].map((column) =>
1112
- Number.parseFloat(column.style.getPropertyValue('--agent-markdown-table-column-width')),
1147
+ Number.parseFloat(
1148
+ column.style.getPropertyValue('--agent-markdown-table-column-width').replace('calc(', ''),
1149
+ ),
1113
1150
  );
1114
1151
 
1115
1152
  expect(columns).toHaveLength(3);
@@ -1117,6 +1154,28 @@ describe('AllMessagesMixed summary view', () => {
1117
1154
  expect(contentWidths[1]).toBeGreaterThan(contentWidths[0]);
1118
1155
  });
1119
1156
 
1157
+ it('reserves readable widths for agenda columns beside long descriptions', () => {
1158
+ renderSummary([
1159
+ makeMessage({
1160
+ type: AgentMessageType.ANSWER,
1161
+ message: [
1162
+ '| Time | Duration | Topic | Facilitator |',
1163
+ '| --- | --- | --- | --- |',
1164
+ '| 9:15 a.m. | 90 min | Advanced capabilities: sub-agents, workstreams, skills, tools and human review | Vertesia |',
1165
+ '| 10:45 a.m. | 15 min | Break | All |',
1166
+ ].join('\n'),
1167
+ }),
1168
+ ]);
1169
+
1170
+ const table = screen.getByRole('table');
1171
+ const widths = Array.from(table.querySelectorAll('col')).map((column) =>
1172
+ column.style.getPropertyValue('--agent-markdown-table-column-width'),
1173
+ );
1174
+ expect(widths).toEqual(['8rem', '8rem', 'calc(100.000% - 24.000rem)', '8rem']);
1175
+ expect(table.style.minWidth).toBe('32rem');
1176
+ expect(table.parentElement?.classList.contains('overflow-x-auto')).toBe(true);
1177
+ });
1178
+
1120
1179
  it('merges legacy activity progress rows with different tool run ids', () => {
1121
1180
  renderSummary(
1122
1181
  [
@@ -475,11 +475,15 @@ function getTableColumnLayouts(node?: Element): AgentMarkdownTableColumnLayout[]
475
475
  return clampNumber(avgLength * 0.7 + maxLength * 0.25 + longestTokenLength * 0.45, 18, 90);
476
476
  });
477
477
 
478
- const totalWeight = weights.reduce((sum, weight) => sum + weight, 0);
478
+ const totalWeight = weights.reduce((sum, weight, index) => sum + (compactColumns.has(index) ? 0 : weight), 0);
479
479
  if (totalWeight <= 0) return [];
480
480
 
481
481
  return weights.map((weight, columnIndex) => {
482
- const width = `${((weight / totalWeight) * 100).toFixed(3)}%`;
482
+ const share = weight / totalWeight;
483
+ // Reserve actual space for short values and headers before distributing prose columns.
484
+ const width = compactColumns.has(columnIndex)
485
+ ? '8rem'
486
+ : `calc(${(share * 100).toFixed(3)}% - ${(compactColumns.size * 8 * share).toFixed(3)}rem)`;
483
487
  return {
484
488
  key: `agent-markdown-table-column-${columnIndex}`,
485
489
  compact: compactColumns.has(columnIndex),
@@ -500,24 +504,30 @@ function AgentMarkdownTable({
500
504
  const columnLayouts = getTableColumnLayouts(node);
501
505
 
502
506
  return (
503
- <table {...props} className={className}>
504
- {columnLayouts.length > 0 ? (
505
- <colgroup>
506
- {columnLayouts.map((columnLayout) => (
507
- <col
508
- key={columnLayout.key}
509
- className={columnLayout.compact ? 'agent-markdown-table-compact-col' : undefined}
510
- style={
511
- {
512
- '--agent-markdown-table-column-width': columnLayout.width,
513
- } as React.CSSProperties
514
- }
515
- />
516
- ))}
517
- </colgroup>
518
- ) : null}
519
- {children}
520
- </table>
507
+ <div className="overflow-x-auto">
508
+ <table
509
+ {...props}
510
+ className={className}
511
+ style={{ minWidth: `${columnLayouts.length * 8}rem`, ...props.style }}
512
+ >
513
+ {columnLayouts.length > 0 ? (
514
+ <colgroup>
515
+ {columnLayouts.map((columnLayout) => (
516
+ <col
517
+ key={columnLayout.key}
518
+ className={columnLayout.compact ? 'agent-markdown-table-compact-col' : undefined}
519
+ style={
520
+ {
521
+ '--agent-markdown-table-column-width': columnLayout.width,
522
+ } as React.CSSProperties
523
+ }
524
+ />
525
+ ))}
526
+ </colgroup>
527
+ ) : null}
528
+ {children}
529
+ </table>
530
+ </div>
521
531
  );
522
532
  }
523
533
 
@@ -1210,6 +1220,15 @@ function getToolTarget(details: Record<string, unknown>): string | undefined {
1210
1220
  return undefined;
1211
1221
  }
1212
1222
 
1223
+ /**
1224
+ * An approval decision that stopped the tool from running — a denial, a timeout, or a cancellation
1225
+ * — as opposed to one that released it. Unknown decisions count as blocking: every decision the
1226
+ * agent has ever emitted except `auto_approved` is one, so that is the safer default.
1227
+ */
1228
+ function isBlockingApprovalDecision(decision: unknown): boolean {
1229
+ return typeof decision === 'string' && decision !== 'auto_approved';
1230
+ }
1231
+
1213
1232
  function getApprovalDecisionLabel(decision: unknown, toolLabel: string): string | undefined {
1214
1233
  switch (decision) {
1215
1234
  case 'denied':
@@ -1221,6 +1240,8 @@ function getApprovalDecisionLabel(decision: unknown, toolLabel: string): string
1221
1240
  return `Approval reviewer denied ${toolLabel}.`;
1222
1241
  case 'cancelled_after_denial':
1223
1242
  return `Cancelled ${toolLabel} after another tool was denied.`;
1243
+ case 'auto_approved':
1244
+ return `Approval no longer required for ${toolLabel}.`;
1224
1245
  default:
1225
1246
  return undefined;
1226
1247
  }
@@ -1237,6 +1258,8 @@ function getApprovalDecisionStatusText(decision: unknown): string | undefined {
1237
1258
  return 'Denied by reviewer';
1238
1259
  case 'cancelled_after_denial':
1239
1260
  return 'Cancelled after denial';
1261
+ case 'auto_approved':
1262
+ return 'Approved without asking';
1240
1263
  default:
1241
1264
  return undefined;
1242
1265
  }
@@ -1467,7 +1490,7 @@ function getToolDetailSections(message: AgentMessage): SummaryToolDetailSection[
1467
1490
  addSection(
1468
1491
  'Output',
1469
1492
  ['output', 'stdout', 'result', 'results', 'content', 'result_summary', 'observation', 'display_message'],
1470
- typeof details.approval_decision === 'string' ? 'error' : undefined,
1493
+ isBlockingApprovalDecision(details.approval_decision) ? 'error' : undefined,
1471
1494
  );
1472
1495
  addSection('Files', ['files', 'outputFiles']);
1473
1496
  addSection('Error', ['error', 'stderr'], 'error');
@@ -3322,9 +3345,6 @@ function AllMessagesMixedComponent({
3322
3345
  .agent-markdown col {
3323
3346
  width: var(--agent-markdown-table-column-width);
3324
3347
  }
3325
- .agent-markdown .agent-markdown-table-compact-col {
3326
- width: clamp(4.75rem, var(--agent-markdown-table-column-width), 7rem);
3327
- }
3328
3348
  .agent-markdown tr:last-child td {
3329
3349
  border-bottom: 0;
3330
3350
  }