@vertesia/ui 1.5.0-dev.20260807.073259Z → 1.5.0-dev.20260901.005903Z

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 (502) hide show
  1. package/README.md +1 -7
  2. package/lib/core/components/FormItem.d.ts.map +1 -1
  3. package/lib/core/components/FormItem.js +2 -3
  4. package/lib/core/components/FormItem.js.map +1 -1
  5. package/lib/core/components/InfoTip.d.ts +20 -0
  6. package/lib/core/components/InfoTip.d.ts.map +1 -0
  7. package/lib/core/components/InfoTip.js +18 -0
  8. package/lib/core/components/InfoTip.js.map +1 -0
  9. package/lib/core/components/index.d.ts +1 -0
  10. package/lib/core/components/index.d.ts.map +1 -1
  11. package/lib/core/components/index.js +1 -0
  12. package/lib/core/components/index.js.map +1 -1
  13. package/lib/core/components/shadcn/Panel.d.ts.map +1 -1
  14. package/lib/core/components/shadcn/Panel.js +3 -3
  15. package/lib/core/components/shadcn/Panel.js.map +1 -1
  16. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +1 -1
  17. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  18. package/lib/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
  19. package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
  20. package/lib/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
  21. package/lib/core/components/shadcn/filters/filters.d.ts.map +1 -1
  22. package/lib/core/components/shadcn/filters/filters.js +1 -1
  23. package/lib/core/components/shadcn/filters/filters.js.map +1 -1
  24. package/lib/core/components/shadcn/index.d.ts +1 -0
  25. package/lib/core/components/shadcn/index.d.ts.map +1 -1
  26. package/lib/core/components/shadcn/index.js +1 -0
  27. package/lib/core/components/shadcn/index.js.map +1 -1
  28. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  29. package/lib/core/components/shadcn/modal/dialog.js +1 -3
  30. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  31. package/lib/core/components/shadcn/overflowTabs.d.ts +59 -0
  32. package/lib/core/components/shadcn/overflowTabs.d.ts.map +1 -0
  33. package/lib/core/components/shadcn/overflowTabs.js +173 -0
  34. package/lib/core/components/shadcn/overflowTabs.js.map +1 -0
  35. package/lib/core/components/shadcn/selectBox.js +2 -2
  36. package/lib/core/components/shadcn/selectBox.js.map +1 -1
  37. package/lib/core/components/shadcn/theme/ThemeProvider.d.ts +3 -1
  38. package/lib/core/components/shadcn/theme/ThemeProvider.d.ts.map +1 -1
  39. package/lib/core/components/shadcn/theme/ThemeProvider.js +8 -9
  40. package/lib/core/components/shadcn/theme/ThemeProvider.js.map +1 -1
  41. package/lib/core/utils/dayjs.d.ts +12 -0
  42. package/lib/core/utils/dayjs.d.ts.map +1 -0
  43. package/lib/core/utils/dayjs.js +16 -0
  44. package/lib/core/utils/dayjs.js.map +1 -0
  45. package/lib/env/index.d.ts +17 -0
  46. package/lib/env/index.d.ts.map +1 -1
  47. package/lib/env/index.js +18 -1
  48. package/lib/env/index.js.map +1 -1
  49. package/lib/features/agent/PayloadBuilder.d.ts +1 -0
  50. package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
  51. package/lib/features/agent/PayloadBuilder.js +22 -5
  52. package/lib/features/agent/PayloadBuilder.js.map +1 -1
  53. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  54. package/lib/features/agent/chat/AgentRightPanel.js +3 -135
  55. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  56. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  57. package/lib/features/agent/chat/ArtifactsTab.js +1 -1
  58. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  59. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  60. package/lib/features/agent/chat/AskUserWidget.js +19 -4
  61. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  62. package/lib/features/agent/chat/ModernAgentConversation.d.ts +6 -0
  63. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  64. package/lib/features/agent/chat/ModernAgentConversation.js +99 -29
  65. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  66. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +10 -9
  68. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +5 -8
  71. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  72. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  73. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +45 -4
  74. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  75. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +1 -1
  76. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  78. package/lib/features/agent/chat/ModernAgentOutput/Header.js +3 -3
  79. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  80. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  81. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  83. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
  85. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  86. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +1 -1
  87. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  88. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  89. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -121
  90. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  91. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +6 -0
  92. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  93. package/lib/features/agent/chat/ModernAgentOutput/utils.js +19 -11
  94. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  95. package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  96. package/lib/features/agent/chat/VegaLiteChart.js +11 -3
  97. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  98. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  99. package/lib/features/agent/chat/hooks/useAgentStream.js +3 -0
  100. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  101. package/lib/features/document-viewer/UniversalDocumentViewer.d.ts.map +1 -1
  102. package/lib/features/document-viewer/UniversalDocumentViewer.js +1 -1
  103. package/lib/features/document-viewer/UniversalDocumentViewer.js.map +1 -1
  104. package/lib/features/facets/AgentRunnerFacetsNav.d.ts +14 -2
  105. package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  106. package/lib/features/facets/AgentRunnerFacetsNav.js +20 -2
  107. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  108. package/lib/features/facets/CollectionsFacetsNav.d.ts +3 -3
  109. package/lib/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
  110. package/lib/features/facets/CollectionsFacetsNav.js +6 -1
  111. package/lib/features/facets/CollectionsFacetsNav.js.map +1 -1
  112. package/lib/features/facets/DocumentsFacetsNav.d.ts +3 -3
  113. package/lib/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
  114. package/lib/features/facets/DocumentsFacetsNav.js +20 -8
  115. package/lib/features/facets/DocumentsFacetsNav.js.map +1 -1
  116. package/lib/features/facets/InteractionsFacetsNav.d.ts +3 -3
  117. package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
  118. package/lib/features/facets/InteractionsFacetsNav.js +11 -1
  119. package/lib/features/facets/InteractionsFacetsNav.js.map +1 -1
  120. package/lib/features/facets/PromptsFacetsNav.d.ts +3 -3
  121. package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
  122. package/lib/features/facets/PromptsFacetsNav.js +6 -1
  123. package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
  124. package/lib/features/facets/RunsFacetsNav.d.ts +4 -14
  125. package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
  126. package/lib/features/facets/RunsFacetsNav.js +26 -15
  127. package/lib/features/facets/RunsFacetsNav.js.map +1 -1
  128. package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts +4 -3
  129. package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts.map +1 -1
  130. package/lib/features/facets/WorkflowExecutionsFacetsNav.js +18 -10
  131. package/lib/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -1
  132. package/lib/features/facets/index.d.ts +1 -1
  133. package/lib/features/facets/index.d.ts.map +1 -1
  134. package/lib/features/facets/index.js.map +1 -1
  135. package/lib/features/facets/utils/SearchInterface.d.ts +4 -3
  136. package/lib/features/facets/utils/SearchInterface.d.ts.map +1 -1
  137. package/lib/features/facets/utils/SearchInterface.js +4 -0
  138. package/lib/features/facets/utils/SearchInterface.js.map +1 -1
  139. package/lib/features/layout/GenericPageNavHeader.d.ts +8 -1
  140. package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  141. package/lib/features/layout/GenericPageNavHeader.js +9 -1
  142. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  143. package/lib/features/magic-pdf/DownloadPopover.d.ts +3 -2
  144. package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  145. package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
  146. package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -1
  147. package/lib/features/magic-pdf/GroundedExtractionView.js +51 -64
  148. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
  149. package/lib/features/oauth/McpConnectionsButton.d.ts +1 -1
  150. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  151. package/lib/features/oauth/McpConnectionsButton.js +2 -2
  152. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  153. package/lib/features/oauth/McpConnectionsDialog.d.ts +1 -1
  154. package/lib/features/oauth/McpConnectionsDialog.js +2 -2
  155. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  156. package/lib/features/oauth/useMcpConnections.d.ts +4 -5
  157. package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
  158. package/lib/features/oauth/useMcpConnections.js +20 -4
  159. package/lib/features/oauth/useMcpConnections.js.map +1 -1
  160. package/lib/features/pdf-viewer/PdfPageRenderer.d.ts.map +1 -1
  161. package/lib/features/pdf-viewer/PdfPageRenderer.js +9 -11
  162. package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
  163. package/lib/features/pdf-viewer/lazyReactPdf.d.ts +10 -0
  164. package/lib/features/pdf-viewer/lazyReactPdf.d.ts.map +1 -0
  165. package/lib/features/pdf-viewer/lazyReactPdf.js +25 -0
  166. package/lib/features/pdf-viewer/lazyReactPdf.js.map +1 -0
  167. package/lib/features/store/collections/CollectionsTable.d.ts.map +1 -1
  168. package/lib/features/store/collections/CollectionsTable.js +1 -3
  169. package/lib/features/store/collections/CollectionsTable.js.map +1 -1
  170. package/lib/features/store/collections/EditCollectionView.js +1 -1
  171. package/lib/features/store/collections/EditCollectionView.js.map +1 -1
  172. package/lib/features/store/objects/ExportPropertiesModal.d.ts +3 -1
  173. package/lib/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  174. package/lib/features/store/objects/ExportPropertiesModal.js +5 -5
  175. package/lib/features/store/objects/ExportPropertiesModal.js.map +1 -1
  176. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  177. package/lib/features/store/objects/components/ContentOverview.js +4 -10
  178. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  179. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  180. package/lib/features/store/objects/components/TextEditorPanel.js +8 -3
  181. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  182. package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
  183. package/lib/features/store/objects/layout/renderers.js +1 -5
  184. package/lib/features/store/objects/layout/renderers.js.map +1 -1
  185. package/lib/features/store/objects/search/DocumentSearchContext.d.ts +44 -62
  186. package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  187. package/lib/features/store/objects/search/DocumentSearchContext.js +47 -2
  188. package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  189. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
  190. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +5 -0
  191. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
  192. package/lib/features/store/objects/upload/DocumentUploadModal.d.ts +6 -1
  193. package/lib/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
  194. package/lib/features/store/objects/upload/DocumentUploadModal.js +4 -3
  195. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  196. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  197. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js +2 -2
  198. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  199. package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  200. package/lib/features/store/types/ContentObjectTypesTable.js +1 -3
  201. package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
  202. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  203. package/lib/features/store/types/IntakePolicyEditor.js +12 -2
  204. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  205. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  206. package/lib/features/store/types/IntakePolicyForm.js +15 -15
  207. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  208. package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  209. package/lib/features/store/types/ObjectSchemaEditor.js +6 -2
  210. package/lib/features/store/types/ObjectSchemaEditor.js.map +1 -1
  211. package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  212. package/lib/features/store/types/TableLayoutEditor.js +2 -0
  213. package/lib/features/store/types/TableLayoutEditor.js.map +1 -1
  214. package/lib/features/store/types/TypeRegistry.d.ts +282 -0
  215. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  216. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +281 -0
  217. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  218. package/lib/features/user/UserInfo.d.ts.map +1 -1
  219. package/lib/features/user/UserInfo.js +2 -4
  220. package/lib/features/user/UserInfo.js.map +1 -1
  221. package/lib/features/views/ViewActions.d.ts +32 -0
  222. package/lib/features/views/ViewActions.d.ts.map +1 -0
  223. package/lib/features/views/ViewActions.js +186 -0
  224. package/lib/features/views/ViewActions.js.map +1 -0
  225. package/lib/features/views/ViewDropTarget.d.ts +15 -0
  226. package/lib/features/views/ViewDropTarget.d.ts.map +1 -0
  227. package/lib/features/views/ViewDropTarget.js +79 -0
  228. package/lib/features/views/ViewDropTarget.js.map +1 -0
  229. package/lib/features/views/ViewExperience.d.ts +3 -2
  230. package/lib/features/views/ViewExperience.d.ts.map +1 -1
  231. package/lib/features/views/ViewExperience.js +103 -12
  232. package/lib/features/views/ViewExperience.js.map +1 -1
  233. package/lib/features/views/ViewNavigation.d.ts +1 -1
  234. package/lib/features/views/ViewNavigation.d.ts.map +1 -1
  235. package/lib/features/views/ViewNavigation.js +14 -5
  236. package/lib/features/views/ViewNavigation.js.map +1 -1
  237. package/lib/features/views/ViewResults.d.ts +1 -1
  238. package/lib/features/views/ViewResults.d.ts.map +1 -1
  239. package/lib/features/views/ViewResults.js +124 -34
  240. package/lib/features/views/ViewResults.js.map +1 -1
  241. package/lib/features/views/index.d.ts +1 -0
  242. package/lib/features/views/index.d.ts.map +1 -1
  243. package/lib/features/views/index.js +1 -0
  244. package/lib/features/views/index.js.map +1 -1
  245. package/lib/features/views/types.d.ts +46 -1
  246. package/lib/features/views/types.d.ts.map +1 -1
  247. package/lib/features/views/viewState.d.ts.map +1 -1
  248. package/lib/features/views/viewState.js +34 -0
  249. package/lib/features/views/viewState.js.map +1 -1
  250. package/lib/i18n/LanguageProvider.d.ts +3 -1
  251. package/lib/i18n/LanguageProvider.d.ts.map +1 -1
  252. package/lib/i18n/LanguageProvider.js +9 -7
  253. package/lib/i18n/LanguageProvider.js.map +1 -1
  254. package/lib/i18n/instance.d.ts +2 -0
  255. package/lib/i18n/instance.d.ts.map +1 -1
  256. package/lib/i18n/instance.js +45 -26
  257. package/lib/i18n/instance.js.map +1 -1
  258. package/lib/i18n/locales/ar.json +296 -15
  259. package/lib/i18n/locales/de.json +294 -13
  260. package/lib/i18n/locales/en.json +65 -4
  261. package/lib/i18n/locales/es.json +295 -14
  262. package/lib/i18n/locales/fr.json +294 -13
  263. package/lib/i18n/locales/it.json +294 -13
  264. package/lib/i18n/locales/ja.json +292 -10
  265. package/lib/i18n/locales/ko.json +292 -10
  266. package/lib/i18n/locales/pt.json +294 -13
  267. package/lib/i18n/locales/ru.json +291 -10
  268. package/lib/i18n/locales/tr.json +291 -10
  269. package/lib/i18n/locales/zh-TW.json +292 -10
  270. package/lib/i18n/locales/zh.json +292 -10
  271. package/lib/router/RouteComponent.d.ts +8 -0
  272. package/lib/router/RouteComponent.d.ts.map +1 -1
  273. package/lib/router/RouteComponent.js +41 -9
  274. package/lib/router/RouteComponent.js.map +1 -1
  275. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  276. package/lib/session/UserSessionProvider.js +20 -29
  277. package/lib/session/UserSessionProvider.js.map +1 -1
  278. package/lib/session/auth/composable.d.ts.map +1 -1
  279. package/lib/session/auth/composable.js +25 -19
  280. package/lib/session/auth/composable.js.map +1 -1
  281. package/lib/session/auth/domainRouting.d.ts +11 -0
  282. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  283. package/lib/session/auth/domainRouting.js +13 -0
  284. package/lib/session/auth/domainRouting.js.map +1 -1
  285. package/lib/session/auth/firebase.js +1 -1
  286. package/lib/session/auth/firebase.js.map +1 -1
  287. package/lib/session/useUXTracking.d.ts.map +1 -1
  288. package/lib/session/useUXTracking.js +6 -1
  289. package/lib/session/useUXTracking.js.map +1 -1
  290. package/lib/shell/VertesiaShell.d.ts.map +1 -1
  291. package/lib/shell/VertesiaShell.js +2 -1
  292. package/lib/shell/VertesiaShell.js.map +1 -1
  293. package/lib/shell/apps/AppInstallationProvider.d.ts +4 -2
  294. package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
  295. package/lib/shell/apps/IframeAppContextSync.d.ts +3 -0
  296. package/lib/shell/apps/IframeAppContextSync.d.ts.map +1 -0
  297. package/lib/shell/apps/IframeAppContextSync.js +95 -0
  298. package/lib/shell/apps/IframeAppContextSync.js.map +1 -0
  299. package/lib/shell/apps/iframe-auth.d.ts +55 -0
  300. package/lib/shell/apps/iframe-auth.d.ts.map +1 -0
  301. package/lib/shell/apps/iframe-auth.js +154 -0
  302. package/lib/shell/apps/iframe-auth.js.map +1 -0
  303. package/lib/shell/apps/index.d.ts +2 -0
  304. package/lib/shell/apps/index.d.ts.map +1 -1
  305. package/lib/shell/apps/index.js +2 -0
  306. package/lib/shell/apps/index.js.map +1 -1
  307. package/lib/vertesia-ui-core.js +199 -4
  308. package/lib/vertesia-ui-core.js.map +1 -1
  309. package/lib/vertesia-ui-env.js +1 -1
  310. package/lib/vertesia-ui-env.js.map +1 -1
  311. package/lib/vertesia-ui-features.js +975 -35
  312. package/lib/vertesia-ui-features.js.map +1 -1
  313. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js +5 -0
  314. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js.map +1 -0
  315. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js +5 -0
  316. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js.map +1 -0
  317. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js +5 -0
  318. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js.map +1 -0
  319. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js +5 -0
  320. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js.map +1 -0
  321. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js +5 -0
  322. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js.map +1 -0
  323. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js +5 -0
  324. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js.map +1 -0
  325. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js +5 -0
  326. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js.map +1 -0
  327. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js +5 -0
  328. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js.map +1 -0
  329. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js +5 -0
  330. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js.map +1 -0
  331. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js +5 -0
  332. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js.map +1 -0
  333. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js +5 -0
  334. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js.map +1 -0
  335. package/lib/vertesia-ui-i18n.js +2 -38
  336. package/lib/vertesia-ui-i18n.js.map +1 -1
  337. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js +5 -0
  338. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js.map +1 -0
  339. package/lib/vertesia-ui-layout.js +80 -1
  340. package/lib/vertesia-ui-layout.js.map +1 -1
  341. package/lib/vertesia-ui-rich-text.js +278 -4
  342. package/lib/vertesia-ui-rich-text.js.map +1 -1
  343. package/lib/vertesia-ui-router.js +1 -1
  344. package/lib/vertesia-ui-router.js.map +1 -1
  345. package/lib/vertesia-ui-session.js +1 -1
  346. package/lib/vertesia-ui-session.js.map +1 -1
  347. package/lib/vertesia-ui-shell.js +118 -1
  348. package/lib/vertesia-ui-shell.js.map +1 -1
  349. package/lib/vertesia-ui-widgets.js +336 -20
  350. package/lib/vertesia-ui-widgets.js.map +1 -1
  351. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  352. package/lib/widgets/markdown/MarkdownRenderer.js +43 -2
  353. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  354. package/lib/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
  355. package/lib/widgets/markdown/MermaidDiagram.js +35 -22
  356. package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
  357. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  358. package/lib/widgets/monacoEditor/MonacoEditor.js +14 -10
  359. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  360. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  361. package/package.json +24 -29
  362. package/src/core/components/FormItem.tsx +2 -5
  363. package/src/core/components/InfoTip.test.tsx +33 -0
  364. package/src/core/components/InfoTip.tsx +32 -0
  365. package/src/core/components/index.ts +1 -0
  366. package/src/core/components/shadcn/Panel.tsx +3 -7
  367. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +1 -1
  368. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +1 -1
  369. package/src/core/components/shadcn/filters/filters.tsx +1 -1
  370. package/src/core/components/shadcn/index.ts +1 -0
  371. package/src/core/components/shadcn/modal/dialog.test.tsx +35 -0
  372. package/src/core/components/shadcn/modal/dialog.tsx +0 -4
  373. package/src/core/components/shadcn/overflowTabs.tsx +320 -0
  374. package/src/core/components/shadcn/selectBox.tsx +2 -2
  375. package/src/core/components/shadcn/theme/ThemeProvider.tsx +10 -9
  376. package/src/core/utils/dayjs.ts +17 -0
  377. package/src/css/base.css +78 -0
  378. package/src/env/index.test.ts +94 -0
  379. package/src/env/index.ts +36 -1
  380. package/src/features/agent/PayloadBuilder.test.ts +68 -0
  381. package/src/features/agent/PayloadBuilder.tsx +28 -4
  382. package/src/features/agent/chat/AgentRightPanel.tsx +2 -252
  383. package/src/features/agent/chat/ArtifactsTab.tsx +1 -0
  384. package/src/features/agent/chat/AskUserWidget.test.tsx +20 -1
  385. package/src/features/agent/chat/AskUserWidget.tsx +22 -6
  386. package/src/features/agent/chat/ModernAgentConversation.test.tsx +160 -0
  387. package/src/features/agent/chat/ModernAgentConversation.tsx +111 -31
  388. package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +86 -67
  389. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +90 -7
  390. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +4 -6
  391. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.test.ts +103 -1
  392. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +50 -4
  393. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +1 -1
  394. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +18 -1
  395. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +1 -1
  396. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +1 -1
  397. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +1 -1
  398. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +37 -167
  399. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +94 -0
  400. package/src/features/agent/chat/ModernAgentOutput/utils.ts +19 -10
  401. package/src/features/agent/chat/VegaLiteChart.tsx +32 -14
  402. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +18 -0
  403. package/src/features/agent/chat/hooks/useAgentStream.ts +3 -0
  404. package/src/features/document-viewer/UniversalDocumentViewer.tsx +1 -1
  405. package/src/features/facets/AgentRunnerFacetsNav.tsx +44 -4
  406. package/src/features/facets/CollectionsFacetsNav.tsx +15 -4
  407. package/src/features/facets/DocumentsFacetsNav.tsx +25 -8
  408. package/src/features/facets/FacetQueryHandlers.test.ts +84 -0
  409. package/src/features/facets/InteractionsFacetsNav.tsx +20 -4
  410. package/src/features/facets/PromptsFacetsNav.tsx +15 -4
  411. package/src/features/facets/RunsFacetsNav.test.ts +59 -0
  412. package/src/features/facets/RunsFacetsNav.tsx +40 -30
  413. package/src/features/facets/WorkflowExecutionsFacetsNav.test.ts +57 -0
  414. package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +36 -16
  415. package/src/features/facets/index.ts +1 -0
  416. package/src/features/facets/utils/SearchInterface.tsx +12 -3
  417. package/src/features/layout/GenericPageNavHeader.tsx +16 -0
  418. package/src/features/magic-pdf/DownloadPopover.tsx +1 -2
  419. package/src/features/magic-pdf/GroundedExtractionView.test.tsx +7 -1
  420. package/src/features/magic-pdf/GroundedExtractionView.tsx +162 -242
  421. package/src/features/oauth/McpConnectionsButton.test.tsx +18 -1
  422. package/src/features/oauth/McpConnectionsButton.tsx +6 -2
  423. package/src/features/oauth/McpConnectionsDialog.tsx +3 -3
  424. package/src/features/oauth/useMcpConnections.test.ts +1 -0
  425. package/src/features/oauth/useMcpConnections.ts +24 -7
  426. package/src/features/pdf-viewer/PdfPageRenderer.tsx +76 -71
  427. package/src/features/pdf-viewer/lazyReactPdf.ts +33 -0
  428. package/src/features/store/collections/CollectionsTable.tsx +1 -4
  429. package/src/features/store/collections/EditCollectionView.tsx +1 -1
  430. package/src/features/store/objects/ExportPropertiesModal.tsx +25 -16
  431. package/src/features/store/objects/components/ContentOverview.tsx +2 -28
  432. package/src/features/store/objects/components/TextEditorPanel.tsx +13 -3
  433. package/src/features/store/objects/layout/renderers.tsx +1 -6
  434. package/src/features/store/objects/search/DocumentSearchContext.test.ts +45 -0
  435. package/src/features/store/objects/search/DocumentSearchContext.ts +54 -4
  436. package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +5 -0
  437. package/src/features/store/objects/upload/DocumentUploadModal.tsx +10 -3
  438. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +15 -6
  439. package/src/features/store/types/ContentObjectTypesTable.tsx +1 -4
  440. package/src/features/store/types/IntakePolicyEditor.tsx +14 -5
  441. package/src/features/store/types/IntakePolicyForm.tsx +120 -20
  442. package/src/features/store/types/ObjectSchemaEditor.tsx +6 -2
  443. package/src/features/store/types/TableLayoutEditor.tsx +2 -0
  444. package/src/features/user/UserInfo.test.tsx +10 -0
  445. package/src/features/user/UserInfo.tsx +2 -7
  446. package/src/features/views/ViewActions.test.tsx +80 -0
  447. package/src/features/views/ViewActions.tsx +352 -0
  448. package/src/features/views/ViewDropTarget.test.tsx +150 -0
  449. package/src/features/views/ViewDropTarget.tsx +140 -0
  450. package/src/features/views/ViewExperience.test.tsx +72 -0
  451. package/src/features/views/ViewExperience.tsx +189 -22
  452. package/src/features/views/ViewMedia.test.tsx +180 -0
  453. package/src/features/views/ViewNavigation.test.tsx +42 -0
  454. package/src/features/views/ViewNavigation.tsx +43 -5
  455. package/src/features/views/ViewResults.tsx +243 -26
  456. package/src/features/views/index.ts +1 -0
  457. package/src/features/views/types.ts +50 -0
  458. package/src/features/views/viewState.test.ts +7 -1
  459. package/src/features/views/viewState.ts +32 -0
  460. package/src/i18n/LanguageProvider.tsx +15 -8
  461. package/src/i18n/instance.test.ts +30 -0
  462. package/src/i18n/instance.ts +67 -40
  463. package/src/i18n/locales/ar.json +1192 -911
  464. package/src/i18n/locales/de.json +1148 -867
  465. package/src/i18n/locales/en.json +65 -4
  466. package/src/i18n/locales/es.json +1159 -878
  467. package/src/i18n/locales/fr.json +1159 -878
  468. package/src/i18n/locales/it.json +1159 -878
  469. package/src/i18n/locales/ja.json +1148 -866
  470. package/src/i18n/locales/ko.json +1148 -866
  471. package/src/i18n/locales/pt.json +1159 -878
  472. package/src/i18n/locales/ru.json +1170 -889
  473. package/src/i18n/locales/tr.json +1148 -867
  474. package/src/i18n/locales/zh-TW.json +1148 -866
  475. package/src/i18n/locales/zh.json +1148 -866
  476. package/src/i18n/rtl.test.ts +16 -7
  477. package/src/rich-text/VertesiaRichTextEditor.test.tsx +33 -1
  478. package/src/router/RouteComponent.test.tsx +139 -0
  479. package/src/router/RouteComponent.tsx +54 -9
  480. package/src/session/UserSessionProvider.tsx +20 -31
  481. package/src/session/auth/composable.scope.test.ts +1 -1
  482. package/src/session/auth/composable.test.ts +61 -1
  483. package/src/session/auth/composable.ts +29 -23
  484. package/src/session/auth/domainRouting.test.ts +24 -1
  485. package/src/session/auth/domainRouting.ts +29 -0
  486. package/src/session/auth/firebase.ts +1 -1
  487. package/src/session/useUXTracking.tsx +6 -1
  488. package/src/shell/VertesiaShell.tsx +2 -0
  489. package/src/shell/apps/IframeAppContextSync.test.tsx +196 -0
  490. package/src/shell/apps/IframeAppContextSync.tsx +101 -0
  491. package/src/shell/apps/iframe-auth.test.ts +118 -0
  492. package/src/shell/apps/iframe-auth.ts +193 -0
  493. package/src/shell/apps/index.ts +2 -0
  494. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +12 -3
  495. package/src/widgets/markdown/MarkdownRenderer.tsx +50 -2
  496. package/src/widgets/markdown/MermaidDiagram.tsx +38 -22
  497. package/src/widgets/monacoEditor/MonacoEditor.tsx +27 -20
  498. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +0 -25
  499. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +0 -1
  500. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +0 -42
  501. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +0 -1
  502. package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +0 -86
@@ -4,7 +4,17 @@ import type {
4
4
  IntakeVisionDetail,
5
5
  InteractionExecutionConfiguration,
6
6
  } from '@vertesia/common';
7
- import { Button, FormItem, Input, NumberInput, SelectBox, TagsInput, Textarea, VTooltip } from '@vertesia/ui/core';
7
+ import {
8
+ Button,
9
+ FormItem,
10
+ InfoTip,
11
+ Input,
12
+ NumberInput,
13
+ SelectBox,
14
+ TagsInput,
15
+ Textarea,
16
+ VTooltip,
17
+ } from '@vertesia/ui/core';
8
18
  import { useUITranslation } from '@vertesia/ui/i18n';
9
19
  import { Plus, Trash2 } from 'lucide-react';
10
20
  import type { ReactNode } from 'react';
@@ -38,7 +48,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
38
48
  if (section === 'overview') {
39
49
  return (
40
50
  <FormSurface>
41
- <FormSection title={t('intakePolicy.section.classification')}>
51
+ <FormSection
52
+ title={t('intakePolicy.section.classification')}
53
+ description={t('intakePolicy.help.section.classification')}
54
+ >
42
55
  <div className="grid gap-4 md:grid-cols-2">
43
56
  <SelectField
44
57
  label={t('intakePolicy.field.mode')}
@@ -65,6 +78,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
65
78
  />
66
79
  <TextAreaField
67
80
  label={t('intakePolicy.field.distinguishFrom')}
81
+ description={t('intakePolicy.help.distinguishFrom')}
68
82
  value={policy.identification?.distinguish_from}
69
83
  onChange={(value) => setValue(['identification', 'distinguish_from'], value)}
70
84
  readonly={readonly}
@@ -86,7 +100,11 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
86
100
  </FormItem>
87
101
  </FormSection>
88
102
 
89
- <FormSection title={t('intakePolicy.section.locate')} last>
103
+ <FormSection
104
+ title={t('intakePolicy.section.locate')}
105
+ description={t('intakePolicy.help.section.locate')}
106
+ last
107
+ >
90
108
  <TextAreaField
91
109
  label={t('intakePolicy.field.locateInstructions')}
92
110
  description={t('intakePolicy.help.locateInstructions')}
@@ -99,6 +117,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
99
117
  <div className="grid gap-4 md:grid-cols-2">
100
118
  <SelectField
101
119
  label={t('intakePolicy.field.contactSheetDetail')}
120
+ description={t('intakePolicy.help.contactSheetDetail')}
102
121
  value={policy.locate?.detail}
103
122
  options={[
104
123
  { value: 8, label: t('intakePolicy.option.pagesPerSheet', { count: 8 }) },
@@ -109,6 +128,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
109
128
  />
110
129
  <NumberField
111
130
  label={t('intakePolicy.field.locateMinPages')}
131
+ description={t('intakePolicy.help.locateMinPages')}
112
132
  value={policy.locate?.min_pages}
113
133
  min={0}
114
134
  onChange={(value) => setValue(['locate', 'min_pages'], value)}
@@ -123,7 +143,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
123
143
  if (section === 'conversion') {
124
144
  return (
125
145
  <FormSurface>
126
- <FormSection title={t('intakePolicy.section.conversion')}>
146
+ <FormSection
147
+ title={t('intakePolicy.section.conversion')}
148
+ description={t('intakePolicy.help.section.conversion')}
149
+ >
127
150
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
128
151
  <TriStateField
129
152
  label={t('intakePolicy.field.enabled')}
@@ -133,6 +156,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
133
156
  />
134
157
  <SelectField
135
158
  label={t('intakePolicy.field.method')}
159
+ description={t('intakePolicy.help.method')}
136
160
  value={policy.text_conversion?.method}
137
161
  options={options(t, ['auto', 'basic', 'llm', 'custom'])}
138
162
  onChange={(value) => setValue(['text_conversion', 'method'], value)}
@@ -147,6 +171,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
147
171
  />
148
172
  <SelectField
149
173
  label={t('intakePolicy.field.pageScope')}
174
+ description={t('intakePolicy.help.pageScope')}
150
175
  value={policy.text_conversion?.scope}
151
176
  options={options(t, ['all', 'located'])}
152
177
  onChange={(value) => setValue(['text_conversion', 'scope'], value)}
@@ -154,6 +179,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
154
179
  />
155
180
  <NumberField
156
181
  label={t('intakePolicy.field.renderDpi')}
182
+ description={t('intakePolicy.help.renderDpi')}
157
183
  value={policy.text_conversion?.render_dpi}
158
184
  min={72}
159
185
  onChange={(value) => setValue(['text_conversion', 'render_dpi'], value)}
@@ -168,7 +194,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
168
194
  />
169
195
  </FormSection>
170
196
 
171
- <FormSection title={t('intakePolicy.section.conversionModel')}>
197
+ <FormSection
198
+ title={t('intakePolicy.section.conversionModel')}
199
+ description={t('intakePolicy.help.section.conversionModel')}
200
+ >
172
201
  <ModelConfigFields
173
202
  title={t('intakePolicy.field.model')}
174
203
  config={policy.text_conversion?.config}
@@ -178,7 +207,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
178
207
  </FormSection>
179
208
 
180
209
  {policy.text_conversion?.method === 'custom' && (
181
- <FormSection title={t('intakePolicy.section.customConversion')}>
210
+ <FormSection
211
+ title={t('intakePolicy.section.customConversion')}
212
+ description={t('intakePolicy.help.section.customConversion')}
213
+ >
182
214
  <div className="grid gap-4 md:grid-cols-2">
183
215
  <InputField
184
216
  label={t('intakePolicy.field.interaction')}
@@ -196,7 +228,11 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
196
228
  </FormSection>
197
229
  )}
198
230
 
199
- <FormSection title={t('intakePolicy.section.pageRanges')} last>
231
+ <FormSection
232
+ title={t('intakePolicy.section.pageRanges')}
233
+ description={t('intakePolicy.help.section.pageRanges')}
234
+ last
235
+ >
200
236
  <PageRangesField
201
237
  value={policy.text_conversion?.page_ranges}
202
238
  onChange={(value) => setValue(['text_conversion', 'page_ranges'], value)}
@@ -210,7 +246,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
210
246
  if (section === 'extraction') {
211
247
  return (
212
248
  <FormSurface>
213
- <FormSection title={t('intakePolicy.section.extraction')}>
249
+ <FormSection
250
+ title={t('intakePolicy.section.extraction')}
251
+ description={t('intakePolicy.help.section.extraction')}
252
+ >
214
253
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
215
254
  <TriStateField
216
255
  label={t('intakePolicy.field.enabled')}
@@ -220,6 +259,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
220
259
  />
221
260
  <SelectField
222
261
  label={t('intakePolicy.field.source')}
262
+ description={t('intakePolicy.help.extractionSource')}
223
263
  value={policy.extraction?.source}
224
264
  options={options(t, ['auto', 'text', 'vision', 'mixed'])}
225
265
  onChange={(value) => setValue(['extraction', 'source'], value)}
@@ -227,6 +267,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
227
267
  />
228
268
  <SelectField
229
269
  label={t('intakePolicy.field.pageScope')}
270
+ description={t('intakePolicy.help.pageScope')}
230
271
  value={policy.extraction?.scope}
231
272
  options={options(t, ['all', 'located'])}
232
273
  onChange={(value) => setValue(['extraction', 'scope'], value)}
@@ -234,6 +275,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
234
275
  />
235
276
  <NumberField
236
277
  label={t('intakePolicy.field.maxPages')}
278
+ description={t('intakePolicy.help.extractionMaxPages')}
237
279
  value={policy.extraction?.max_pages}
238
280
  min={1}
239
281
  onChange={(value) => setValue(['extraction', 'max_pages'], value)}
@@ -242,6 +284,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
242
284
  </div>
243
285
  <InputField
244
286
  label={t('intakePolicy.field.interaction')}
287
+ description={t('intakePolicy.help.extractionInteraction')}
245
288
  value={policy.extraction?.interaction}
246
289
  onChange={(value) => setValue(['extraction', 'interaction'], value)}
247
290
  readonly={readonly}
@@ -259,7 +302,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
259
302
  />
260
303
  </FormSection>
261
304
 
262
- <FormSection title={t('intakePolicy.section.extractionModel')}>
305
+ <FormSection
306
+ title={t('intakePolicy.section.extractionModel')}
307
+ description={t('intakePolicy.help.section.extractionModel')}
308
+ >
263
309
  <ModelConfigFields
264
310
  title={t('intakePolicy.field.model')}
265
311
  config={policy.extraction?.config}
@@ -268,22 +314,28 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
268
314
  />
269
315
  </FormSection>
270
316
 
271
- <FormSection title={t('intakePolicy.section.visionBudget')}>
317
+ <FormSection
318
+ title={t('intakePolicy.section.visionBudget')}
319
+ description={t('intakePolicy.help.section.visionBudget')}
320
+ >
272
321
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
273
322
  <SelectField
274
323
  label={t('intakePolicy.field.defaultDetail')}
324
+ description={t('intakePolicy.help.visionDetail')}
275
325
  value={policy.extraction?.vision?.default_detail}
276
326
  options={options(t, ['low', 'standard', 'high'])}
277
327
  onChange={(value) => setValue(['extraction', 'vision', 'default_detail'], value)}
278
328
  readonly={readonly}
279
329
  />
280
330
  <VisionDetailsField
331
+ description={t('intakePolicy.help.visionDetail')}
281
332
  value={policy.extraction?.vision?.allowed_details}
282
333
  onChange={(value) => setValue(['extraction', 'vision', 'allowed_details'], value)}
283
334
  readonly={readonly}
284
335
  />
285
336
  <NumberField
286
337
  label={t('intakePolicy.field.maxImageTokens')}
338
+ description={t('intakePolicy.help.maxImageTokens')}
287
339
  value={policy.extraction?.vision?.max_image_tokens}
288
340
  min={1}
289
341
  onChange={(value) => setValue(['extraction', 'vision', 'max_image_tokens'], value)}
@@ -291,6 +343,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
291
343
  />
292
344
  <NumberField
293
345
  label={t('intakePolicy.field.maxPayloadMb')}
346
+ description={t('intakePolicy.help.maxPayloadMb')}
294
347
  value={policy.extraction?.vision?.max_payload_mb}
295
348
  min={1}
296
349
  onChange={(value) => setValue(['extraction', 'vision', 'max_payload_mb'], value)}
@@ -366,7 +419,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
366
419
  const review = grounding?.review;
367
420
  return (
368
421
  <FormSurface>
369
- <FormSection title={t('intakePolicy.section.grounding')}>
422
+ <FormSection
423
+ title={t('intakePolicy.section.grounding')}
424
+ description={t('intakePolicy.help.section.grounding')}
425
+ >
370
426
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
371
427
  <TriStateField
372
428
  label={t('intakePolicy.field.enabled')}
@@ -383,6 +439,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
383
439
  />
384
440
  <NumberField
385
441
  label={t('intakePolicy.field.windowPages')}
442
+ description={t('intakePolicy.help.windowPages')}
386
443
  value={grounding?.window_pages}
387
444
  min={1}
388
445
  onChange={(value) => setValue(['extraction', 'grounding', 'window_pages'], value)}
@@ -398,30 +455,35 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
398
455
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
399
456
  <TriStateField
400
457
  label={t('intakePolicy.field.useVision')}
458
+ description={t('intakePolicy.help.useVision')}
401
459
  value={grounding?.use_vision}
402
460
  onChange={(value) => setValue(['extraction', 'grounding', 'use_vision'], value)}
403
461
  readonly={readonly}
404
462
  />
405
463
  <TriStateField
406
464
  label={t('intakePolicy.field.forceOcr')}
465
+ description={t('intakePolicy.help.forceOcr')}
407
466
  value={grounding?.force_ocr}
408
467
  onChange={(value) => setValue(['extraction', 'grounding', 'force_ocr'], value)}
409
468
  readonly={readonly}
410
469
  />
411
470
  <TriStateField
412
471
  label={t('intakePolicy.field.refreshOcr')}
472
+ description={t('intakePolicy.help.refreshOcr')}
413
473
  value={grounding?.refresh_ocr}
414
474
  onChange={(value) => setValue(['extraction', 'grounding', 'refresh_ocr'], value)}
415
475
  readonly={readonly}
416
476
  />
417
477
  <TriStateField
418
478
  label={t('intakePolicy.field.omitBlockBoxes')}
479
+ description={t('intakePolicy.help.omitBlockBoxes')}
419
480
  value={grounding?.omit_block_boxes}
420
481
  onChange={(value) => setValue(['extraction', 'grounding', 'omit_block_boxes'], value)}
421
482
  readonly={readonly}
422
483
  />
423
484
  <TriStateField
424
485
  label={t('intakePolicy.field.updateProperties')}
486
+ description={t('intakePolicy.help.updateProperties')}
425
487
  value={grounding?.update_properties}
426
488
  onChange={(value) => setValue(['extraction', 'grounding', 'update_properties'], value)}
427
489
  readonly={readonly}
@@ -429,7 +491,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
429
491
  </div>
430
492
  </FormSection>
431
493
 
432
- <FormSection title={t('intakePolicy.section.models')}>
494
+ <FormSection
495
+ title={t('intakePolicy.section.models')}
496
+ description={t('intakePolicy.help.section.models')}
497
+ >
433
498
  <ModelConfigFields
434
499
  title={t('intakePolicy.field.primaryModel')}
435
500
  config={grounding?.config}
@@ -445,6 +510,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
445
510
  <div className="grid gap-4 md:grid-cols-2">
446
511
  <NumberField
447
512
  label={t('intakePolicy.field.hardnessThreshold')}
513
+ description={t('intakePolicy.help.hardnessThreshold')}
448
514
  value={grounding?.hardness_threshold}
449
515
  min={0}
450
516
  max={1}
@@ -454,6 +520,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
454
520
  />
455
521
  <NumberField
456
522
  label={t('intakePolicy.field.minCitationDensity')}
523
+ description={t('intakePolicy.help.minCitationDensity')}
457
524
  value={grounding?.min_citation_density}
458
525
  min={0}
459
526
  max={1}
@@ -464,7 +531,11 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
464
531
  </div>
465
532
  </FormSection>
466
533
 
467
- <FormSection title={t('intakePolicy.section.review')} last>
534
+ <FormSection
535
+ title={t('intakePolicy.section.review')}
536
+ description={t('intakePolicy.help.section.review')}
537
+ last
538
+ >
468
539
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
469
540
  <TriStateField
470
541
  label={t('intakePolicy.field.enabled')}
@@ -474,6 +545,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
474
545
  />
475
546
  <TriStateField
476
547
  label={t('intakePolicy.field.forceReview')}
548
+ description={t('intakePolicy.help.forceReview')}
477
549
  value={review?.force}
478
550
  onChange={(value) => setValue(['extraction', 'grounding', 'review', 'force'], value)}
479
551
  readonly={readonly}
@@ -489,6 +561,7 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
489
561
  />
490
562
  <NumberField
491
563
  label={t('intakePolicy.field.coverageThreshold')}
564
+ description={t('intakePolicy.help.coverageThreshold')}
492
565
  value={review?.coverage_threshold}
493
566
  min={0}
494
567
  max={1}
@@ -512,7 +585,10 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
512
585
 
513
586
  return (
514
587
  <FormSurface>
515
- <FormSection title={t('intakePolicy.section.rendering')}>
588
+ <FormSection
589
+ title={t('intakePolicy.section.rendering')}
590
+ description={t('intakePolicy.help.section.rendering')}
591
+ >
516
592
  <TextAreaField
517
593
  label={t('intakePolicy.field.renderingTemplate')}
518
594
  description={t('intakePolicy.help.renderingTemplate')}
@@ -523,7 +599,11 @@ export function IntakePolicyForm({ policy, section, onChange, readonly = false }
523
599
  minLines={8}
524
600
  />
525
601
  </FormSection>
526
- <FormSection title={t('intakePolicy.section.embeddings')} last>
602
+ <FormSection
603
+ title={t('intakePolicy.section.embeddings')}
604
+ description={t('intakePolicy.help.section.embeddings')}
605
+ last
606
+ >
527
607
  <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
528
608
  <TriStateField
529
609
  label={t('intakePolicy.field.textEmbedding')}
@@ -559,10 +639,24 @@ function FormSurface({ children }: { children: ReactNode }) {
559
639
  return <div className="mx-auto w-full max-w-6xl px-1 py-4">{children}</div>;
560
640
  }
561
641
 
562
- function FormSection({ title, children, last = false }: { title: string; children: ReactNode; last?: boolean }) {
642
+ function FormSection({
643
+ title,
644
+ description,
645
+ children,
646
+ last = false,
647
+ }: {
648
+ title: string;
649
+ /** Tooltip on an Info icon beside the heading. Hover-only, like every `InfoTip`. */
650
+ description?: ReactNode;
651
+ children: ReactNode;
652
+ last?: boolean;
653
+ }) {
563
654
  return (
564
655
  <section className={last ? 'pb-3' : 'mb-6 border-b pb-6'}>
565
- <h3 className="mb-4 text-sm font-semibold">{title}</h3>
656
+ <div className="mb-4 flex items-center gap-2">
657
+ <h3 className="text-sm font-semibold">{title}</h3>
658
+ <InfoTip description={description} />
659
+ </div>
566
660
  <div className="space-y-4">{children}</div>
567
661
  </section>
568
662
  );
@@ -621,6 +715,7 @@ function TextAreaField({
621
715
 
622
716
  function NumberField({
623
717
  label,
718
+ description,
624
719
  value,
625
720
  onChange,
626
721
  readonly,
@@ -629,6 +724,7 @@ function NumberField({
629
724
  step,
630
725
  }: {
631
726
  label: string;
727
+ description?: string;
632
728
  value?: number;
633
729
  onChange: (value: number | undefined) => void;
634
730
  readonly: boolean;
@@ -637,7 +733,7 @@ function NumberField({
637
733
  step?: number;
638
734
  }) {
639
735
  return (
640
- <FormItem label={label}>
736
+ <FormItem label={label} description={description}>
641
737
  <NumberInput
642
738
  value={value}
643
739
  onChange={(value) => onChange(value === undefined || Number.isFinite(value) ? value : undefined)}
@@ -688,11 +784,13 @@ function SelectField<T extends string | number>({
688
784
 
689
785
  function TriStateField({
690
786
  label,
787
+ description,
691
788
  value,
692
789
  onChange,
693
790
  readonly,
694
791
  }: {
695
792
  label: string;
793
+ description?: string;
696
794
  value?: boolean;
697
795
  onChange: (value: boolean | undefined) => void;
698
796
  readonly: boolean;
@@ -705,7 +803,7 @@ function TriStateField({
705
803
  ] as const;
706
804
  const selectedValue = value === undefined ? 'inherit' : value ? 'enabled' : 'disabled';
707
805
  return (
708
- <FormItem label={label}>
806
+ <FormItem label={label} description={description}>
709
807
  <SelectBox
710
808
  options={[...choices]}
711
809
  value={choices.find((option) => option.value === selectedValue)}
@@ -719,10 +817,12 @@ function TriStateField({
719
817
  }
720
818
 
721
819
  function VisionDetailsField({
820
+ description,
722
821
  value,
723
822
  onChange,
724
823
  readonly,
725
824
  }: {
825
+ description?: string;
726
826
  value?: IntakeVisionDetail[];
727
827
  onChange: (value: IntakeVisionDetail[] | undefined) => void;
728
828
  readonly: boolean;
@@ -730,7 +830,7 @@ function VisionDetailsField({
730
830
  const { t } = useUITranslation();
731
831
  const choices = options(t, ['low', 'standard', 'high'] as const);
732
832
  return (
733
- <FormItem label={t('intakePolicy.field.allowedDetails')}>
833
+ <FormItem label={t('intakePolicy.field.allowedDetails')} description={description}>
734
834
  <SelectBox<SelectOption<IntakeVisionDetail>>
735
835
  multiple
736
836
  options={choices}
@@ -35,8 +35,12 @@ export function ObjectSchemaEditor({ objectType, onSchemaUpdate, readonly = fals
35
35
 
36
36
  setUpdating(true);
37
37
  store.types
38
- .update(objectType.id, { object_schema: schema.schema })
39
- .then(() => {
38
+ .update(objectType.id, {
39
+ object_schema: schema.schema,
40
+ ...(objectType.edit_revision === undefined ? {} : { expected_edit_revision: objectType.edit_revision }),
41
+ })
42
+ .then((response) => {
43
+ objectType.edit_revision = response.edit_revision;
40
44
  onSchemaUpdate(schema);
41
45
  toast({
42
46
  status: 'success',
@@ -62,9 +62,11 @@ export function TableLayoutEditor({ objectType, onLayoutUpdate, readonly = false
62
62
  setUpdating(true);
63
63
  store.types
64
64
  .update(objectType.id, {
65
+ ...(objectType.edit_revision === undefined ? {} : { expected_edit_revision: objectType.edit_revision }),
65
66
  table_layout,
66
67
  })
67
68
  .then((response) => {
69
+ objectType.edit_revision = response.edit_revision;
68
70
  toast({
69
71
  status: 'success',
70
72
  title: t('store.tableLayoutUpdated'),
@@ -68,6 +68,16 @@ describe('UserInfo', () => {
68
68
  expect(retrieveUser).toHaveBeenCalledTimes(1);
69
69
  });
70
70
 
71
+ it('renders a service account title from a ref that has no nested type', async () => {
72
+ render(
73
+ <I18nProvider lng="en">
74
+ <UserInfo userRef="service_account:66b27abd91cf39f93cdc1335" showTitle />
75
+ </I18nProvider>,
76
+ );
77
+
78
+ expect(await screen.findByText(/~dc1335/)).toBeDefined();
79
+ });
80
+
71
81
  it('renders a missing group as an unknown principal and caches the 404', async () => {
72
82
  const error = Object.assign(new Error('Not Found'), { status: 404 });
73
83
  retrieveGroup.mockRejectedValueOnce(error);
@@ -104,16 +104,11 @@ interface ServiceInfoProps extends InfoProps {
104
104
  }
105
105
  function ServiceAccountAvatar({ accountId, showTitle = false, size = 'md' }: ServiceInfoProps) {
106
106
  const { t } = useUITranslation();
107
- const _type = accountId.split(':')[0];
108
- const _accountId = accountId.split(':')[1];
109
107
  const description = (
110
108
  <>
111
109
  <div>{t('user.serviceAccountDescription')}</div>
112
110
  <div className="text-muted text-sm">
113
- <span className="font-semibold">Type:</span> {_type}
114
- </div>
115
- <div className="text-muted text-sm">
116
- <span className="font-semibold">ID:</span> {_accountId}
111
+ <span className="font-semibold">ID:</span> {accountId}
117
112
  </div>
118
113
  </>
119
114
  );
@@ -124,7 +119,7 @@ function ServiceAccountAvatar({ accountId, showTitle = false, size = 'md' }: Ser
124
119
  <Avatar src="/cloud.svg" name="SA" color="bg-amber-500" className="px-[5px] text-white" size={size} />
125
120
  {showTitle && (
126
121
  <div className="text-sm font-semibold ps-2 truncate">
127
- {t('user.serviceAccount')} : ~{_accountId.slice(-6)}
122
+ {t('user.serviceAccount')} : ~{accountId.slice(-6)}
128
123
  </div>
129
124
  )}
130
125
  </div>
@@ -0,0 +1,80 @@
1
+ import { cleanup, screen } from '@testing-library/react';
2
+ import type { VertesiaClient } from '@vertesia/client';
3
+ import { ContentObjectStatus, type ViewExecutionResult, type ViewHit } from '@vertesia/common';
4
+ import { afterEach, describe, expect, it, vi } from 'vitest';
5
+ import { renderWithProviders } from '../../__tests__/test-utils.js';
6
+ import type { ViewSelectionController } from './types.js';
7
+ import { ViewActionsProvider, ViewActionsToolbar } from './ViewActions.js';
8
+
9
+ const hit: ViewHit = {
10
+ id: 'document-1',
11
+ document: {
12
+ id: 'document-1',
13
+ name: 'Invoice',
14
+ created_at: '2026-01-01T00:00:00.000Z',
15
+ created_by: 'user-1',
16
+ updated_at: '2026-01-01T00:00:00.000Z',
17
+ updated_by: 'user-1',
18
+ location: '/Invoices',
19
+ status: ContentObjectStatus.completed,
20
+ properties: {},
21
+ revision: { root: 'document-1', head: true },
22
+ },
23
+ };
24
+
25
+ const result: ViewExecutionResult = {
26
+ view: 'invoices',
27
+ revision: 1,
28
+ definition: {
29
+ name: 'Invoices',
30
+ results: {
31
+ default_display: 'list',
32
+ selection: { mode: 'multiple' },
33
+ actions: { include_defaults: true },
34
+ displays: [{ id: 'list', label: 'List', type: 'list', title: { field: 'name' } }],
35
+ },
36
+ },
37
+ display: 'list',
38
+ search: { requested_mode: 'browse', applied_mode: 'browse', warnings: [] },
39
+ hits: [hit],
40
+ total: 1,
41
+ navigation: {},
42
+ took: 1,
43
+ };
44
+
45
+ const selection: ViewSelectionController = {
46
+ mode: 'multiple',
47
+ selectAll: false,
48
+ selectedIds: [hit.id],
49
+ selectedHits: [hit],
50
+ isSelected: (id) => id === hit.id,
51
+ toggle: vi.fn(),
52
+ togglePage: vi.fn(),
53
+ clear: vi.fn(),
54
+ };
55
+
56
+ describe('ViewActionsProvider', () => {
57
+ afterEach(() => {
58
+ cleanup();
59
+ vi.clearAllMocks();
60
+ });
61
+
62
+ it('enables the standard export and permission-gated delete actions', () => {
63
+ renderWithProviders(
64
+ <ViewActionsProvider
65
+ definition={result.definition}
66
+ request={{}}
67
+ result={result}
68
+ selection={selection}
69
+ client={{} as VertesiaClient}
70
+ canDelete
71
+ refresh={vi.fn()}
72
+ >
73
+ <ViewActionsToolbar selection={selection} page={result.hits} />
74
+ </ViewActionsProvider>,
75
+ );
76
+
77
+ expect(screen.getByRole('button', { name: /export/i })).not.toBeNull();
78
+ expect(screen.getByRole('button', { name: /delete/i })).not.toBeNull();
79
+ });
80
+ });