@vertesia/ui 1.5.0-dev.20260717.131047Z → 1.5.0-dev.20260722.120446Z

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 (329) hide show
  1. package/lib/core/components/SidePanel.js +1 -1
  2. package/lib/core/components/SidePanel.js.map +1 -1
  3. package/lib/core/components/shadcn/button.d.ts +10 -3
  4. package/lib/core/components/shadcn/button.d.ts.map +1 -1
  5. package/lib/core/components/shadcn/button.js +41 -9
  6. package/lib/core/components/shadcn/button.js.map +1 -1
  7. package/lib/core/components/shadcn/modal/dialog.js +1 -1
  8. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  9. package/lib/core/components/shadcn/theme/ThemeSwitcher.js +1 -1
  10. package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  11. package/lib/features/agent/chat/AgentChatPlaybackControls.d.ts.map +1 -1
  12. package/lib/features/agent/chat/AgentChatPlaybackControls.js +2 -2
  13. package/lib/features/agent/chat/AgentChatPlaybackControls.js.map +1 -1
  14. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
  15. package/lib/features/agent/chat/AgentRequestInputOverlay.js +2 -2
  16. package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
  17. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  18. package/lib/features/agent/chat/ArtifactsTab.js +5 -2
  19. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  20. package/lib/features/agent/chat/ImageLightbox.d.ts.map +1 -1
  21. package/lib/features/agent/chat/ImageLightbox.js +1 -1
  22. package/lib/features/agent/chat/ImageLightbox.js.map +1 -1
  23. package/lib/features/agent/chat/ModernAgentConversation.js +1 -1
  24. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  25. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  26. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +5 -5
  27. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  28. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  29. package/lib/features/agent/chat/ModernAgentOutput/Header.js +4 -2
  30. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  31. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  32. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
  33. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  34. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  35. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +2 -1
  36. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  37. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +6 -0
  38. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  39. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +15 -1
  40. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  41. package/lib/features/environment/SelectEnvironment.d.ts +28 -0
  42. package/lib/features/environment/SelectEnvironment.d.ts.map +1 -0
  43. package/lib/features/environment/SelectEnvironment.js +97 -0
  44. package/lib/features/environment/SelectEnvironment.js.map +1 -0
  45. package/lib/features/environment/index.d.ts +2 -0
  46. package/lib/features/environment/index.d.ts.map +1 -0
  47. package/lib/features/environment/index.js +2 -0
  48. package/lib/features/environment/index.js.map +1 -0
  49. package/lib/features/index.d.ts +2 -0
  50. package/lib/features/index.d.ts.map +1 -1
  51. package/lib/features/index.js +2 -0
  52. package/lib/features/index.js.map +1 -1
  53. package/lib/features/magic-pdf/AnnotatedImageSlider.js +12 -12
  54. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  55. package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  56. package/lib/features/magic-pdf/DownloadPopover.js +3 -17
  57. package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
  58. package/lib/features/magic-pdf/ExtractedContentView.js +2 -6
  59. package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
  60. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +25 -0
  61. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +1 -0
  62. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +42 -0
  63. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +1 -0
  64. package/lib/features/magic-pdf/GroundedExtractionView.d.ts +27 -0
  65. package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -0
  66. package/lib/features/magic-pdf/GroundedExtractionView.js +377 -0
  67. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -0
  68. package/lib/features/magic-pdf/MagicPdfProvider.d.ts +0 -2
  69. package/lib/features/magic-pdf/MagicPdfProvider.d.ts.map +1 -1
  70. package/lib/features/magic-pdf/MagicPdfProvider.js +15 -42
  71. package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
  72. package/lib/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
  73. package/lib/features/magic-pdf/MagicPdfView.js +2 -19
  74. package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
  75. package/lib/features/magic-pdf/index.d.ts +1 -0
  76. package/lib/features/magic-pdf/index.d.ts.map +1 -1
  77. package/lib/features/magic-pdf/index.js +1 -0
  78. package/lib/features/magic-pdf/index.js.map +1 -1
  79. package/lib/features/magic-pdf/types.d.ts +1 -1
  80. package/lib/features/magic-pdf/types.d.ts.map +1 -1
  81. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  82. package/lib/features/oauth/McpConnectionsButton.js +2 -2
  83. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  84. package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
  85. package/lib/features/oauth/McpConnectionsDialog.js +1 -1
  86. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  87. package/lib/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -1
  88. package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
  89. package/lib/features/oauth/RemoteMcpConnectionButton.js.map +1 -1
  90. package/lib/features/pdf-viewer/PdfPageSlider.js +2 -2
  91. package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  92. package/lib/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
  93. package/lib/features/pdf-viewer/SimplePdfViewer.js +3 -3
  94. package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  95. package/lib/features/permissions/UserPermissionsProvider.js +1 -1
  96. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  97. package/lib/features/store/objects/DocumentQuickFilter.d.ts.map +1 -1
  98. package/lib/features/store/objects/DocumentQuickFilter.js +5 -5
  99. package/lib/features/store/objects/DocumentQuickFilter.js.map +1 -1
  100. package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
  101. package/lib/features/store/objects/DocumentSearchResults.js +2 -2
  102. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  103. package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
  104. package/lib/features/store/objects/components/ContentDispositionButton.js +1 -1
  105. package/lib/features/store/objects/components/ContentDispositionButton.js.map +1 -1
  106. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  107. package/lib/features/store/objects/components/ContentOverview.js +78 -21
  108. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  109. package/lib/features/store/objects/components/DocumentIcon.js +1 -1
  110. package/lib/features/store/objects/components/VectorSearchWidget.js +1 -1
  111. package/lib/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  112. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +1 -2
  113. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  114. package/lib/features/store/objects/components/useContentPanelHooks.js +4 -8
  115. package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  116. package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
  117. package/lib/features/store/objects/layout/renderers.js +2 -2
  118. package/lib/features/store/objects/layout/renderers.js.map +1 -1
  119. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  120. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  121. package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  122. package/lib/features/store/types/ContentObjectTypesTable.js +4 -4
  123. package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
  124. package/lib/features/store/types/IntakePolicyEditor.d.ts +15 -0
  125. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -0
  126. package/lib/features/store/types/IntakePolicyEditor.js +455 -0
  127. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -0
  128. package/lib/features/store/types/IntakePolicyForm.d.ts +11 -0
  129. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -0
  130. package/lib/features/store/types/IntakePolicyForm.js +91 -0
  131. package/lib/features/store/types/IntakePolicyForm.js.map +1 -0
  132. package/lib/features/store/types/SelectContentTypeModal.js +1 -1
  133. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  134. package/lib/features/store/types/index.d.ts +2 -0
  135. package/lib/features/store/types/index.d.ts.map +1 -1
  136. package/lib/features/store/types/index.js +2 -0
  137. package/lib/features/store/types/index.js.map +1 -1
  138. package/lib/features/store/types/intake-policy-editor.logic.d.ts +7 -0
  139. package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -0
  140. package/lib/features/store/types/intake-policy-editor.logic.js +60 -0
  141. package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -0
  142. package/lib/features/store/types/typeCatalogCache.d.ts +5 -0
  143. package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -0
  144. package/lib/features/store/types/typeCatalogCache.js +40 -0
  145. package/lib/features/store/types/typeCatalogCache.js.map +1 -0
  146. package/lib/features/user/UserInfo.js +7 -3
  147. package/lib/features/user/UserInfo.js.map +1 -1
  148. package/lib/features/views/ViewExperience.d.ts +20 -0
  149. package/lib/features/views/ViewExperience.d.ts.map +1 -0
  150. package/lib/features/views/ViewExperience.js +188 -0
  151. package/lib/features/views/ViewExperience.js.map +1 -0
  152. package/lib/features/views/ViewNavigation.d.ts +3 -0
  153. package/lib/features/views/ViewNavigation.d.ts.map +1 -0
  154. package/lib/features/views/ViewNavigation.js +36 -0
  155. package/lib/features/views/ViewNavigation.js.map +1 -0
  156. package/lib/features/views/ViewResults.d.ts +9 -0
  157. package/lib/features/views/ViewResults.d.ts.map +1 -0
  158. package/lib/features/views/ViewResults.js +229 -0
  159. package/lib/features/views/ViewResults.js.map +1 -0
  160. package/lib/features/views/ViewSearch.d.ts +3 -0
  161. package/lib/features/views/ViewSearch.d.ts.map +1 -0
  162. package/lib/features/views/ViewSearch.js +74 -0
  163. package/lib/features/views/ViewSearch.js.map +1 -0
  164. package/lib/features/views/index.d.ts +7 -0
  165. package/lib/features/views/index.d.ts.map +1 -0
  166. package/lib/features/views/index.js +7 -0
  167. package/lib/features/views/index.js.map +1 -0
  168. package/lib/features/views/types.d.ts +39 -0
  169. package/lib/features/views/types.d.ts.map +1 -0
  170. package/lib/features/views/types.js +2 -0
  171. package/lib/features/views/types.js.map +1 -0
  172. package/lib/features/views/viewState.d.ts +14 -0
  173. package/lib/features/views/viewState.d.ts.map +1 -0
  174. package/lib/features/views/viewState.js +117 -0
  175. package/lib/features/views/viewState.js.map +1 -0
  176. package/lib/i18n/locales/ar.json +16 -0
  177. package/lib/i18n/locales/de.json +12 -0
  178. package/lib/i18n/locales/en.json +245 -33
  179. package/lib/i18n/locales/es.json +13 -0
  180. package/lib/i18n/locales/fr.json +13 -0
  181. package/lib/i18n/locales/it.json +13 -0
  182. package/lib/i18n/locales/ja.json +11 -0
  183. package/lib/i18n/locales/ko.json +11 -0
  184. package/lib/i18n/locales/pt.json +13 -0
  185. package/lib/i18n/locales/ru.json +14 -0
  186. package/lib/i18n/locales/tr.json +12 -0
  187. package/lib/i18n/locales/zh-TW.json +11 -0
  188. package/lib/i18n/locales/zh.json +11 -0
  189. package/lib/router/HistoryNavigator.d.ts.map +1 -1
  190. package/lib/router/HistoryNavigator.js +23 -13
  191. package/lib/router/HistoryNavigator.js.map +1 -1
  192. package/lib/router/Nav.d.ts.map +1 -1
  193. package/lib/router/Nav.js +15 -6
  194. package/lib/router/Nav.js.map +1 -1
  195. package/lib/session/UserSession.d.ts.map +1 -1
  196. package/lib/session/UserSession.js +5 -3
  197. package/lib/session/UserSession.js.map +1 -1
  198. package/lib/vertesia-ui-core.js +4 -4
  199. package/lib/vertesia-ui-core.js.map +1 -1
  200. package/lib/vertesia-ui-features.js +34 -27
  201. package/lib/vertesia-ui-features.js.map +1 -1
  202. package/lib/vertesia-ui-i18n.js +15 -15
  203. package/lib/vertesia-ui-i18n.js.map +1 -1
  204. package/lib/vertesia-ui-router.js +1 -1
  205. package/lib/vertesia-ui-router.js.map +1 -1
  206. package/lib/vertesia-ui-session.js +1 -1
  207. package/lib/vertesia-ui-session.js.map +1 -1
  208. package/lib/vertesia-ui-shell.js +1 -1
  209. package/lib/vertesia-ui-shell.js.map +1 -1
  210. package/lib/vertesia-ui-widgets.js +7 -7
  211. package/lib/vertesia-ui-widgets.js.map +1 -1
  212. package/lib/widgets/form/Form.js +1 -1
  213. package/lib/widgets/form/Form.js.map +1 -1
  214. package/lib/widgets/json-view/JSONSwitcher.js +1 -1
  215. package/lib/widgets/json-view/JSONSwitcher.js.map +1 -1
  216. package/lib/widgets/json-view/JSONView.js +6 -6
  217. package/lib/widgets/json-view/JSONView.js.map +1 -1
  218. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  219. package/lib/widgets/monacoEditor/MonacoEditor.js +29 -0
  220. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  221. package/lib/widgets/schema-editor/ManagedSchema.d.ts +8 -0
  222. package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  223. package/lib/widgets/schema-editor/ManagedSchema.js +16 -0
  224. package/lib/widgets/schema-editor/ManagedSchema.js.map +1 -1
  225. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts +2 -0
  226. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts.map +1 -1
  227. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js +1 -0
  228. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js.map +1 -1
  229. package/lib/widgets/schema-editor/editor/PropertyViewer.d.ts.map +1 -1
  230. package/lib/widgets/schema-editor/editor/PropertyViewer.js +4 -1
  231. package/lib/widgets/schema-editor/editor/PropertyViewer.js.map +1 -1
  232. package/lib/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
  233. package/lib/widgets/schema-editor/editor/SchemaEditor.js +22 -11
  234. package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  235. package/package.json +32 -32
  236. package/src/__tests__/a11y.test.tsx +73 -0
  237. package/src/core/components/SidePanel.tsx +1 -1
  238. package/src/core/components/shadcn/button.tsx +67 -12
  239. package/src/core/components/shadcn/modal/dialog.tsx +1 -1
  240. package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +1 -1
  241. package/src/features/agent/chat/AgentChatPlaybackControls.tsx +0 -5
  242. package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +31 -0
  243. package/src/features/agent/chat/AgentRequestInputOverlay.tsx +6 -2
  244. package/src/features/agent/chat/ArtifactsTab.tsx +19 -9
  245. package/src/features/agent/chat/ImageLightbox.tsx +0 -1
  246. package/src/features/agent/chat/ModernAgentConversation.test.tsx +48 -0
  247. package/src/features/agent/chat/ModernAgentConversation.tsx +0 -2
  248. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +6 -1
  249. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +21 -15
  250. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +3 -3
  251. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +0 -2
  252. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +4 -1
  253. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +80 -0
  254. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +21 -1
  255. package/src/features/environment/SelectEnvironment.tsx +186 -0
  256. package/src/features/environment/index.ts +1 -0
  257. package/src/features/index.ts +2 -0
  258. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +62 -66
  259. package/src/features/magic-pdf/DownloadPopover.tsx +5 -48
  260. package/src/features/magic-pdf/ExtractedContentView.tsx +2 -14
  261. package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +86 -0
  262. package/src/features/magic-pdf/GroundedExtractionView.test.tsx +65 -0
  263. package/src/features/magic-pdf/GroundedExtractionView.tsx +1055 -0
  264. package/src/features/magic-pdf/MagicPdfProvider.tsx +17 -47
  265. package/src/features/magic-pdf/MagicPdfView.tsx +3 -51
  266. package/src/features/magic-pdf/index.ts +1 -0
  267. package/src/features/magic-pdf/types.ts +1 -1
  268. package/src/features/oauth/McpConnectionsButton.tsx +0 -2
  269. package/src/features/oauth/McpConnectionsDialog.tsx +0 -1
  270. package/src/features/oauth/RemoteMcpConnectionButton.tsx +0 -1
  271. package/src/features/pdf-viewer/PdfPageSlider.tsx +5 -5
  272. package/src/features/pdf-viewer/SimplePdfViewer.tsx +11 -12
  273. package/src/features/permissions/UserPermissionsProvider.tsx +1 -1
  274. package/src/features/store/objects/DocumentQuickFilter.tsx +13 -15
  275. package/src/features/store/objects/DocumentSearchResults.tsx +3 -6
  276. package/src/features/store/objects/components/ContentDispositionButton.tsx +5 -1
  277. package/src/features/store/objects/components/ContentOverview.tsx +144 -44
  278. package/src/features/store/objects/components/DocumentIcon.tsx +1 -1
  279. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  280. package/src/features/store/objects/components/useContentPanelHooks.ts +3 -15
  281. package/src/features/store/objects/layout/renderers.tsx +1 -2
  282. package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
  283. package/src/features/store/types/ContentObjectTypesTable.tsx +12 -14
  284. package/src/features/store/types/IntakePolicyEditor.tsx +679 -0
  285. package/src/features/store/types/IntakePolicyForm.tsx +838 -0
  286. package/src/features/store/types/SelectContentTypeModal.tsx +2 -2
  287. package/src/features/store/types/index.ts +2 -0
  288. package/src/features/store/types/intake-policy-editor.logic.test.ts +109 -0
  289. package/src/features/store/types/intake-policy-editor.logic.ts +87 -0
  290. package/src/features/store/types/typeCatalogCache.ts +45 -0
  291. package/src/features/user/UserInfo.tsx +7 -7
  292. package/src/features/views/ViewExperience.test.tsx +273 -0
  293. package/src/features/views/ViewExperience.tsx +408 -0
  294. package/src/features/views/ViewNavigation.test.tsx +86 -0
  295. package/src/features/views/ViewNavigation.tsx +187 -0
  296. package/src/features/views/ViewResults.test.ts +82 -0
  297. package/src/features/views/ViewResults.tsx +609 -0
  298. package/src/features/views/ViewSearch.test.tsx +147 -0
  299. package/src/features/views/ViewSearch.tsx +205 -0
  300. package/src/features/views/index.ts +6 -0
  301. package/src/features/views/types.ts +57 -0
  302. package/src/features/views/viewState.test.ts +111 -0
  303. package/src/features/views/viewState.ts +132 -0
  304. package/src/i18n/locales/ar.json +16 -0
  305. package/src/i18n/locales/de.json +12 -0
  306. package/src/i18n/locales/en.json +965 -753
  307. package/src/i18n/locales/es.json +13 -0
  308. package/src/i18n/locales/fr.json +13 -0
  309. package/src/i18n/locales/it.json +13 -0
  310. package/src/i18n/locales/ja.json +11 -0
  311. package/src/i18n/locales/ko.json +11 -0
  312. package/src/i18n/locales/pt.json +13 -0
  313. package/src/i18n/locales/ru.json +14 -0
  314. package/src/i18n/locales/tr.json +12 -0
  315. package/src/i18n/locales/zh-TW.json +11 -0
  316. package/src/i18n/locales/zh.json +11 -0
  317. package/src/router/HistoryNavigator.test.ts +48 -0
  318. package/src/router/HistoryNavigator.ts +24 -13
  319. package/src/router/Nav.tsx +18 -8
  320. package/src/session/UserSession.test.ts +39 -0
  321. package/src/session/UserSession.ts +5 -3
  322. package/src/widgets/form/Form.tsx +1 -1
  323. package/src/widgets/json-view/JSONSwitcher.tsx +2 -2
  324. package/src/widgets/json-view/JSONView.tsx +7 -7
  325. package/src/widgets/monacoEditor/MonacoEditor.tsx +29 -0
  326. package/src/widgets/schema-editor/ManagedSchema.ts +22 -0
  327. package/src/widgets/schema-editor/editor/EditableSchemaProperty.tsx +3 -0
  328. package/src/widgets/schema-editor/editor/PropertyViewer.tsx +14 -3
  329. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +80 -29
@@ -2,8 +2,8 @@ import {
2
2
  ContentNature,
3
3
  type ContentObject,
4
4
  ContentObjectStatus,
5
+ type ContentObjectTypeItem,
5
6
  type DocAnalyzerProgress,
6
- type DocProcessorOutputFormat,
7
7
  type DocumentMetadata,
8
8
  MarkdownRenditionFormat,
9
9
  PDF_RENDITION_NAME,
@@ -11,6 +11,7 @@ import {
11
11
  WorkflowExecutionStatus,
12
12
  } from '@vertesia/common';
13
13
  import {
14
+ Badge,
14
15
  Button,
15
16
  Dropdown,
16
17
  MenuItem,
@@ -26,7 +27,7 @@ import { useUITranslation } from '@vertesia/ui/i18n';
26
27
  import { NavLink } from '@vertesia/ui/router';
27
28
  import { useUserSession } from '@vertesia/ui/session';
28
29
  import { JSONDisplay, Progress } from '@vertesia/ui/widgets';
29
- import { AlertTriangle, Copy, Download, FileSearch, SquarePen } from 'lucide-react';
30
+ import { AlertTriangle, Copy, Download, FileSearch, ScanSearch, SquarePen } from 'lucide-react';
30
31
  import { memo, type RefObject, useEffect, useMemo, useRef, useState } from 'react';
31
32
  import {
32
33
  type UniversalDocumentConverter,
@@ -34,9 +35,15 @@ import {
34
35
  UniversalDocumentViewer,
35
36
  } from '../../../document-viewer/UniversalDocumentViewer.js';
36
37
  import { MagicPdfView } from '../../../magic-pdf';
38
+ import {
39
+ GroundedExtractionView,
40
+ useGroundedExtractionAvailable,
41
+ useGroundedSummary,
42
+ } from '../../../magic-pdf/GroundedExtractionView.js';
37
43
  import { AudioPanel, ImagePanel, VideoPanel } from '../../../media-viewer';
38
44
  import { SecureButton } from '../../../permissions/SecureButton.js';
39
45
  import { getWorkflowStatusColor, getWorkflowStatusName, isPreviewableAsPdf } from '../../../utils/index.js';
46
+ import { resolveTypeCached } from '../../types/typeCatalogCache.js';
40
47
  import { PropertiesEditorModal } from './PropertiesEditorModal';
41
48
  import { TextEditorPanel } from './TextEditorPanel.js';
42
49
  import { useObjectText, useOfficePdfConversion, usePdfProcessingStatus } from './useContentPanelHooks.js';
@@ -235,6 +242,7 @@ function PropertiesPanel({
235
242
  const { t } = useUITranslation();
236
243
  const [viewCode, setViewCode] = useState(false);
237
244
  const [isPropertiesModalOpen, setPropertiesModalOpen] = useState(false);
245
+ const groundedSummary = useGroundedSummary(object.id);
238
246
 
239
247
  const handleOpenPropertiesModal = () => {
240
248
  setPropertiesModalOpen(true);
@@ -252,7 +260,7 @@ function PropertiesPanel({
252
260
  <Button
253
261
  variant={`${viewCode ? 'ghost' : 'primary'}`}
254
262
  size="sm"
255
- alt={t('store.previewProperties')}
263
+ title={t('store.previewProperties')}
256
264
  onClick={() => setViewCode(!viewCode)}
257
265
  >
258
266
  Properties
@@ -260,7 +268,7 @@ function PropertiesPanel({
260
268
  <Button
261
269
  variant={`${viewCode ? 'primary' : 'ghost'}`}
262
270
  size="sm"
263
- alt={t('store.viewInJsonFormat')}
271
+ title={t('store.viewInJsonFormat')}
264
272
  onClick={() => setViewCode(!viewCode)}
265
273
  >
266
274
  JSON
@@ -294,6 +302,26 @@ function PropertiesPanel({
294
302
  </div>
295
303
  </div>
296
304
 
305
+ {groundedSummary && object.properties && (
306
+ <div className="flex items-center gap-2 px-2 pb-2">
307
+ {typeof groundedSummary.confidence === 'number' && (
308
+ <Badge
309
+ variant={groundedSummary.confidence >= 0.95 ? 'success' : 'attention'}
310
+ title={t('grounded.confidenceHint')}
311
+ >
312
+ {t('grounded.confidence', {
313
+ percent: Math.floor(groundedSummary.confidence * 100),
314
+ })}
315
+ </Badge>
316
+ )}
317
+ <Badge variant={groundedSummary.verified === groundedSummary.total ? 'success' : 'attention'}>
318
+ {t('grounded.verifiedOf', {
319
+ verified: groundedSummary.verified,
320
+ total: groundedSummary.total,
321
+ })}
322
+ </Badge>
323
+ </div>
324
+ )}
297
325
  {object.properties ? (
298
326
  <div className="flex-1 min-h-0 px-2">
299
327
  <JSONDisplay value={object.properties} viewCode={viewCode} />
@@ -314,17 +342,51 @@ function PropertiesPanel({
314
342
  );
315
343
  }
316
344
 
317
- function DataPanel({
318
- object,
319
- loadText,
320
- handleCopyContent,
321
- refetch,
322
- }: {
345
+ type IntakeDefaultView = NonNullable<NonNullable<ContentObjectTypeItem['intake']>['default_view']>;
346
+
347
+ interface DataPanelProps {
323
348
  object: ContentObject;
324
349
  loadText: boolean;
325
350
  handleCopyContent: (content: string, type: 'text' | 'properties') => Promise<void>;
326
351
  refetch?: () => Promise<unknown>;
327
- }) {
352
+ }
353
+
354
+ /**
355
+ * Resolves the object's content-type intake policy BEFORE the initial panel is chosen so
356
+ * `default_view` can drive it. Renders a spinner until the type is resolved — never the
357
+ * MIME-guessed panel first (no guess-then-flip). Objects without a type render immediately.
358
+ */
359
+ function DataPanel(props: DataPanelProps) {
360
+ const { client } = useUserSession();
361
+ const typeRef = props.object.type;
362
+ const typeId = typeRef?.id;
363
+ // Fast path: single-object reads carry the display hint on the API-enriched type ref.
364
+ const refView = typeRef?.default_view;
365
+ // Fallback (list-fed contexts, older servers): session-cached catalog lookup.
366
+ // null = resolved with no default view; undefined = not resolved yet.
367
+ const { data: fetchedView } = useFetch<IntakeDefaultView | null>(async () => {
368
+ if (!typeId || refView) return null;
369
+ const type = await resolveTypeCached(client, typeId);
370
+ return type?.intake?.default_view ?? null;
371
+ }, [typeId, refView]);
372
+ const defaultView = refView ?? fetchedView;
373
+ if (typeId && !refView && fetchedView === undefined) {
374
+ return (
375
+ <div className="flex h-full items-center justify-center">
376
+ <Spinner size="lg" />
377
+ </div>
378
+ );
379
+ }
380
+ return <DataPanelContent {...props} defaultView={defaultView ?? undefined} />;
381
+ }
382
+
383
+ function DataPanelContent({
384
+ object,
385
+ loadText,
386
+ handleCopyContent,
387
+ refetch,
388
+ defaultView,
389
+ }: DataPanelProps & { defaultView?: IntakeDefaultView }) {
328
390
  const { client } = useUserSession();
329
391
  const { t } = useUITranslation();
330
392
  const isImage = object?.metadata?.type === ContentNature.Image;
@@ -339,14 +401,32 @@ function DataPanel({
339
401
  const metadata = object.metadata as DocumentMetadata;
340
402
  const pdfRendition = metadata?.renditions?.find((r) => r.name === PDF_RENDITION_NAME);
341
403
 
342
- // Determine initial panel view
404
+ // Determine initial panel view: the type's default_view wins when it applies to this
405
+ // object; otherwise fall back to the nature/MIME heuristics.
343
406
  const getInitialView = (): PanelView => {
407
+ switch (defaultView) {
408
+ case 'text':
409
+ return PanelView.Text;
410
+ case 'pdf':
411
+ if (isPdf || isPreviewableAsPdfDoc || pdfRendition) return PanelView.Pdf;
412
+ break;
413
+ case 'image':
414
+ if (isImage) return PanelView.Image;
415
+ break;
416
+ case 'properties':
417
+ // Properties live in the right-hand panel which is always visible; the text
418
+ // panel shows the rendered property card for extraction-only types.
419
+ return PanelView.Text;
420
+ default:
421
+ break;
422
+ }
344
423
  if (isVideo) return PanelView.Video;
345
424
  if (isAudio) return PanelView.Audio;
346
425
  if (isImage) return PanelView.Image;
347
426
  return PanelView.Text;
348
427
  };
349
428
 
429
+ const groundedAvailable = useGroundedExtractionAvailable(object.id);
350
430
  const [currentPanel, setCurrentPanel] = useState<PanelView>(getInitialView());
351
431
  const [hasVisitedPdfPanel, setHasVisitedPdfPanel] = useState(currentPanel === PanelView.Pdf);
352
432
 
@@ -386,7 +466,6 @@ function DataPanel({
386
466
  const {
387
467
  progress: pdfProgress,
388
468
  status: pdfStatus,
389
- outputFormat: pdfOutputFormat,
390
469
  isComplete: processingComplete,
391
470
  } = usePdfProcessingStatus(object.id, shouldPollProgress);
392
471
 
@@ -460,7 +539,7 @@ function DataPanel({
460
539
  <Button
461
540
  variant={currentPanel === PanelView.Image ? 'primary' : 'ghost'}
462
541
  size="sm"
463
- alt={t('store.viewImage')}
542
+ title={t('store.viewImage')}
464
543
  onClick={() => setCurrentPanel(PanelView.Image)}
465
544
  >
466
545
  Image
@@ -470,7 +549,7 @@ function DataPanel({
470
549
  <Button
471
550
  variant={currentPanel === PanelView.Video ? 'primary' : 'ghost'}
472
551
  size="sm"
473
- alt={t('store.viewVideo')}
552
+ title={t('store.viewVideo')}
474
553
  onClick={() => setCurrentPanel(PanelView.Video)}
475
554
  >
476
555
  Video
@@ -480,7 +559,7 @@ function DataPanel({
480
559
  <Button
481
560
  variant={currentPanel === PanelView.Audio ? 'primary' : 'ghost'}
482
561
  size="sm"
483
- alt={t('store.viewAudio')}
562
+ title={t('store.viewAudio')}
484
563
  onClick={() => setCurrentPanel(PanelView.Audio)}
485
564
  >
486
565
  Audio
@@ -490,7 +569,7 @@ function DataPanel({
490
569
  <Button
491
570
  variant={currentPanel === PanelView.Transcript ? 'primary' : 'ghost'}
492
571
  size="sm"
493
- alt={t('store.viewTranscript')}
572
+ title={t('store.viewTranscript')}
494
573
  onClick={() => setCurrentPanel(PanelView.Transcript)}
495
574
  >
496
575
  Transcript
@@ -499,7 +578,7 @@ function DataPanel({
499
578
  <Button
500
579
  variant={currentPanel === PanelView.Text ? 'primary' : 'ghost'}
501
580
  size="sm"
502
- alt={t('store.viewText')}
581
+ title={t('store.viewText')}
503
582
  onClick={() => setCurrentPanel(PanelView.Text)}
504
583
  >
505
584
  Text
@@ -508,7 +587,7 @@ function DataPanel({
508
587
  <Button
509
588
  variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
510
589
  size="sm"
511
- alt={t('store.viewPdf')}
590
+ title={t('store.viewPdf')}
512
591
  onClick={() => setCurrentPanel(PanelView.Pdf)}
513
592
  >
514
593
  PDF
@@ -518,7 +597,7 @@ function DataPanel({
518
597
  <Button
519
598
  variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
520
599
  size="sm"
521
- alt={t('store.viewAsPdf')}
600
+ title={t('store.viewAsPdf')}
522
601
  onClick={() => {
523
602
  setCurrentPanel(PanelView.Pdf);
524
603
  if (!pdfRendition && !officePdfUrl && !officePdfConverting) {
@@ -531,7 +610,10 @@ function DataPanel({
531
610
  </Button>
532
611
  )}
533
612
  </div>
534
- <PdfActions object={object} />
613
+ <div className="flex items-center gap-1">
614
+ <PdfActions object={object} />
615
+ <GroundedActions objectId={object.id} available={groundedAvailable} />
616
+ </div>
535
617
  </div>
536
618
  {currentPanel === PanelView.Text && !showProcessingPanel && !isEditing && (
537
619
  <TextActions
@@ -588,7 +670,7 @@ function DataPanel({
588
670
  )}
589
671
  {showPdfProcessingPanel && (
590
672
  <div className={getPanelVisibility(true)}>
591
- <PdfProcessingPanel progress={pdfProgress} status={pdfStatus} outputFormat={pdfOutputFormat} />
673
+ <PdfProcessingPanel progress={pdfProgress} status={pdfStatus} />
592
674
  </div>
593
675
  )}
594
676
  {currentPanel === PanelView.Text && !showProcessingPanel && !isEditing && isLoadingText && (
@@ -638,9 +720,6 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
638
720
 
639
721
  const isMarkdown = content?.type && content.type === 'text/markdown';
640
722
 
641
- // Get content processor type for file extension detection
642
- const contentProcessorType = getContentProcessorType(object);
643
-
644
723
  const handleExportDocument = async (format: MarkdownRenditionFormat, useDefaultTemplate?: boolean) => {
645
724
  // Prevent multiple concurrent exports
646
725
  if (isDownloading) return;
@@ -675,10 +754,10 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
675
754
  // Determine file extension based on content processor type
676
755
  let ext = 'txt';
677
756
  let mimeType = 'text/plain';
678
- if (contentProcessorType === 'xml') {
757
+ if (content?.type === 'application/xml' || content?.type === 'text/xml') {
679
758
  ext = 'xml';
680
759
  mimeType = 'text/xml';
681
- } else if (contentProcessorType === 'markdown' || isMarkdown) {
760
+ } else if (isMarkdown) {
682
761
  ext = 'md';
683
762
  mimeType = 'text/markdown';
684
763
  }
@@ -726,7 +805,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
726
805
  </>
727
806
  )}
728
807
  {isDownloading ? (
729
- <Button variant="ghost" size="sm" disabled className="flex items-center gap-2" alt="download">
808
+ <Button variant="ghost" size="sm" disabled className="flex items-center gap-2" title="download">
730
809
  <Spinner size="sm" />
731
810
  </Button>
732
811
  ) : (
@@ -737,7 +816,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
737
816
  size="sm"
738
817
  disabled={!text}
739
818
  className="flex items-center gap-2"
740
- alt="download"
819
+ title="download"
741
820
  >
742
821
  <Download className="size-4" />
743
822
  </Button>
@@ -783,12 +862,12 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
783
862
  const TextPanel = memo(({ object, text, isTextCropped, textContainerRef }: TextPanelProps) => {
784
863
  const { t } = useUITranslation();
785
864
  const isCreatedOrProcessing = isCreatedOrProcessingStatus(object?.status);
865
+ const content = object.content;
786
866
  const contentProcessorType = getContentProcessorType(object);
787
- const isXml = contentProcessorType === 'xml';
867
+ const isXml = contentProcessorType === 'xml' || content?.type === 'application/xml' || content?.type === 'text/xml';
788
868
 
789
869
  // Check if content type is markdown or plain text
790
- const isMarkdownOrText =
791
- object.content?.type && (object.content.type === 'text/markdown' || object.content.type === 'text/plain');
870
+ const isMarkdownOrText = content?.type && (content.type === 'text/markdown' || content.type === 'text/plain');
792
871
 
793
872
  // Render as markdown if it's markdown/text type OR if text looks like markdown (but not if XML)
794
873
  const shouldRenderAsMarkdown = !isXml && (isMarkdownOrText || looksLikeMarkdown(text));
@@ -893,9 +972,8 @@ function TranscriptPanel({
893
972
  function PdfActions({ object }: { object: ContentObject }) {
894
973
  const [isPdfPreviewOpen, setPdfPreviewOpen] = useState(false);
895
974
 
896
- // Check if PDF has been processed (content_processor.type is xml or markdown)
897
975
  const contentProcessorType = getContentProcessorType(object);
898
- const hasPdfAnalysis = contentProcessorType === 'xml' || contentProcessorType === 'markdown';
976
+ const hasPdfAnalysis = contentProcessorType === 'markdown';
899
977
 
900
978
  if (!hasPdfAnalysis) return null;
901
979
 
@@ -913,6 +991,32 @@ function PdfActions({ object }: { object: ContentObject }) {
913
991
  );
914
992
  }
915
993
 
994
+ function GroundedActions({ objectId, available }: { objectId: string; available: boolean }) {
995
+ const { t } = useUITranslation();
996
+ const [isGroundedOpen, setGroundedOpen] = useState(false);
997
+
998
+ if (!available) return null;
999
+
1000
+ return (
1001
+ <>
1002
+ <Button
1003
+ variant="ghost"
1004
+ size="sm"
1005
+ onClick={() => setGroundedOpen(true)}
1006
+ title={t('grounded.title')}
1007
+ aria-label={t('grounded.title')}
1008
+ >
1009
+ <ScanSearch className="size-4" />
1010
+ </Button>
1011
+ {isGroundedOpen && (
1012
+ <Portal>
1013
+ <GroundedExtractionView objectId={objectId} onClose={() => setGroundedOpen(false)} />
1014
+ </Portal>
1015
+ )}
1016
+ </>
1017
+ );
1018
+ }
1019
+
916
1020
  function OfficePdfActions({ object, pdfRendition, officePdfUrl }: OfficePdfActionsProps) {
917
1021
  const { client } = useUserSession();
918
1022
  const toast = useToast();
@@ -1057,18 +1161,14 @@ function OfficePdfPreviewPanel({
1057
1161
  function PdfProcessingPanel({
1058
1162
  progress,
1059
1163
  status,
1060
- outputFormat,
1061
1164
  }: {
1062
1165
  progress?: DocAnalyzerProgress;
1063
1166
  status?: WorkflowExecutionStatus;
1064
- outputFormat?: DocProcessorOutputFormat;
1065
1167
  }) {
1066
1168
  const { t } = useUITranslation();
1067
1169
  const statusColor = getWorkflowStatusColor(status);
1068
1170
  const statusName = getWorkflowStatusName(status);
1069
-
1070
- // Show detailed progress (tables, images, visuals) for XML processing
1071
- const isXmlProcessing = outputFormat === 'xml';
1171
+ const isGroundedExtraction = progress?.phase === 'grounded_extraction';
1072
1172
 
1073
1173
  // Ensure percent is a valid number (handle undefined and NaN from division by zero)
1074
1174
  const percent = progress?.percent != null && !Number.isNaN(progress.percent) ? progress.percent : 0;
@@ -1079,14 +1179,14 @@ function PdfProcessingPanel({
1079
1179
  <div className="space-y-2">
1080
1180
  <div className="flex flex-col gap-1">
1081
1181
  <ProgressLine
1082
- name={isXmlProcessing ? 'Analyze Layouts' : 'Analyze Page'}
1182
+ name={isGroundedExtraction ? 'Prepare Evidence' : 'Analyze Page'}
1083
1183
  progress={progress.pages}
1084
1184
  />
1085
- {isXmlProcessing && (
1185
+ {isGroundedExtraction && (
1086
1186
  <>
1087
- <ProgressLine name="Extract Tables" progress={progress.tables} />
1088
- <ProgressLine name="Describe Images" progress={progress.images} />
1089
- <ProgressLine name="Process Visually" progress={progress.visuals} />
1187
+ <ProgressLine name="Run OCR" progress={progress.images} />
1188
+ <ProgressLine name="Extract Grounded Data" progress={progress.tables} />
1189
+ <ProgressLine name="Review and Annotate" progress={progress.visuals} />
1090
1190
  </>
1091
1191
  )}
1092
1192
  </div>
@@ -103,7 +103,7 @@ export function DocumentIcon({
103
103
  <Button
104
104
  variant="ghost"
105
105
  size="sm"
106
- title="Preivew Object"
106
+ title="Preview Object"
107
107
  onClick={(e) => {
108
108
  e.stopPropagation();
109
109
  previewObject?.(document.id);
@@ -141,7 +141,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
141
141
  <Button
142
142
  variant="ghost"
143
143
  onClick={() => setShowSettings(true)}
144
- alt={t('store.semanticSearchSettings')}
144
+ title={t('store.semanticSearchSettings')}
145
145
  className="ms-1"
146
146
  >
147
147
  <Settings size={18} />
@@ -194,7 +194,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
194
194
  isLoading={isLoading}
195
195
  onClick={fireSearch}
196
196
  isDisabled={!isReady}
197
- alt={t('store.semanticSearch')}
197
+ title={t('store.semanticSearch')}
198
198
  >
199
199
  {t('store.search')}
200
200
  </Button>
@@ -1,9 +1,4 @@
1
- import {
2
- type DocAnalyzerProgress,
3
- type DocProcessorOutputFormat,
4
- MarkdownRenditionFormat,
5
- WorkflowExecutionStatus,
6
- } from '@vertesia/common';
1
+ import { type DocAnalyzerProgress, MarkdownRenditionFormat, WorkflowExecutionStatus } from '@vertesia/common';
7
2
  import { i18nInstance, NAMESPACE } from '@vertesia/ui/i18n';
8
3
  import { useUserSession } from '@vertesia/ui/session';
9
4
  import { useCallback, useEffect, useState } from 'react';
@@ -89,7 +84,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
89
84
  const [state, setState] = useState<{
90
85
  progress?: DocAnalyzerProgress;
91
86
  status?: WorkflowExecutionStatus;
92
- outputFormat?: DocProcessorOutputFormat;
93
87
  isComplete: boolean;
94
88
  }>({ isComplete: false });
95
89
 
@@ -102,7 +96,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
102
96
  const updateStateIfChanged = (
103
97
  nextProgress: DocAnalyzerProgress | undefined,
104
98
  nextStatus: WorkflowExecutionStatus | undefined,
105
- nextOutputFormat: DocProcessorOutputFormat | undefined,
106
99
  nextIsComplete: boolean,
107
100
  ) => {
108
101
  setState((prev) => {
@@ -111,7 +104,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
111
104
 
112
105
  if (
113
106
  prev.status === nextStatus &&
114
- prev.outputFormat === nextOutputFormat &&
115
107
  prev.isComplete === nextIsComplete &&
116
108
  prevProgress === nextProgressSignature
117
109
  ) {
@@ -121,7 +113,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
121
113
  return {
122
114
  progress: nextProgress,
123
115
  status: nextStatus,
124
- outputFormat: nextOutputFormat,
125
116
  isComplete: nextIsComplete,
126
117
  };
127
118
  });
@@ -134,17 +125,15 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
134
125
  .analyze(objectId)
135
126
  .getStatus()
136
127
  .then((r) => {
137
- const nextOutputFormat = r.output_format ?? r.progress?.output_format;
138
-
139
128
  if (r.status === WorkflowExecutionStatus.RUNNING) {
140
- updateStateIfChanged(r.progress, r.status, nextOutputFormat, false);
129
+ updateStateIfChanged(r.progress, r.status, false);
141
130
  // Workflow is running, poll every 2 seconds for progress
142
131
  if (!interrupted) {
143
132
  timeoutId = setTimeout(poll, 2000);
144
133
  }
145
134
  } else {
146
135
  // Workflow completed or terminal state
147
- updateStateIfChanged(r.progress, r.status, nextOutputFormat, true);
136
+ updateStateIfChanged(r.progress, r.status, true);
148
137
  }
149
138
  })
150
139
  .catch(() => {
@@ -167,7 +156,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
167
156
  return {
168
157
  progress: state.progress,
169
158
  status: state.status,
170
- outputFormat: state.outputFormat,
171
159
  isComplete: state.isComplete,
172
160
  };
173
161
  }
@@ -156,7 +156,6 @@ const renderers: Record<
156
156
  <td key={index} className="flex justify-start items-center gap-2 group/field">
157
157
  <Button
158
158
  variant="ghost"
159
- aria-label="Preview Object"
160
159
  title="Preview Object"
161
160
  onClick={(e) => {
162
161
  e.stopPropagation();
@@ -213,7 +212,7 @@ const renderers: Record<
213
212
  {displayValue}
214
213
  <Button
215
214
  variant="ghost"
216
- alt="Preview Object"
215
+ title="Preview Object"
217
216
  onClick={(e) => {
218
217
  e.stopPropagation();
219
218
  onClick?.(objectId);
@@ -60,7 +60,7 @@ export function SelectionActions({
60
60
  >
61
61
  {(actions) =>
62
62
  actions.length > 0 ? (
63
- <Button variant="ghost" alt="More action" size="sm">
63
+ <Button variant="ghost" title="More action" size="sm">
64
64
  <EllipsisVertical size={16} />
65
65
  </Button>
66
66
  ) : null
@@ -81,20 +81,18 @@ export function ContentObjectTypesTable({
81
81
  <span className="truncate">{obj.name}</span>
82
82
  <CopyButton content={obj.id} className={ACTION_BTN_CLASS} />
83
83
  {onFilter && (
84
- <VTooltip description={`Filter by ${obj.name}`} asChild size="xs">
85
- <Button
86
- variant="ghost"
87
- size="sm"
88
- aria-label={`Filter by ${obj.name}`}
89
- className={ACTION_BTN_CLASS}
90
- onClick={(e) => {
91
- e.stopPropagation();
92
- onFilter('name', obj.name);
93
- }}
94
- >
95
- <Filter className="size-3" />
96
- </Button>
97
- </VTooltip>
84
+ <Button
85
+ variant="ghost"
86
+ size="sm"
87
+ title={`Filter by ${obj.name}`}
88
+ className={ACTION_BTN_CLASS}
89
+ onClick={(e) => {
90
+ e.stopPropagation();
91
+ onFilter('name', obj.name);
92
+ }}
93
+ >
94
+ <Filter className="size-3" />
95
+ </Button>
98
96
  )}
99
97
  </div>
100
98
  </td>