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

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 (432) hide show
  1. package/README.md +1 -7
  2. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +1 -1
  3. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  4. package/lib/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
  5. package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
  6. package/lib/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
  7. package/lib/core/components/shadcn/filters/filters.d.ts.map +1 -1
  8. package/lib/core/components/shadcn/filters/filters.js +1 -1
  9. package/lib/core/components/shadcn/filters/filters.js.map +1 -1
  10. package/lib/core/components/shadcn/index.d.ts +1 -0
  11. package/lib/core/components/shadcn/index.d.ts.map +1 -1
  12. package/lib/core/components/shadcn/index.js +1 -0
  13. package/lib/core/components/shadcn/index.js.map +1 -1
  14. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  15. package/lib/core/components/shadcn/modal/dialog.js +1 -3
  16. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  17. package/lib/core/components/shadcn/overflowTabs.d.ts +59 -0
  18. package/lib/core/components/shadcn/overflowTabs.d.ts.map +1 -0
  19. package/lib/core/components/shadcn/overflowTabs.js +173 -0
  20. package/lib/core/components/shadcn/overflowTabs.js.map +1 -0
  21. package/lib/core/components/shadcn/selectBox.js +2 -2
  22. package/lib/core/components/shadcn/selectBox.js.map +1 -1
  23. package/lib/core/components/shadcn/theme/ThemeProvider.d.ts +3 -1
  24. package/lib/core/components/shadcn/theme/ThemeProvider.d.ts.map +1 -1
  25. package/lib/core/components/shadcn/theme/ThemeProvider.js +8 -9
  26. package/lib/core/components/shadcn/theme/ThemeProvider.js.map +1 -1
  27. package/lib/core/utils/dayjs.d.ts +12 -0
  28. package/lib/core/utils/dayjs.d.ts.map +1 -0
  29. package/lib/core/utils/dayjs.js +16 -0
  30. package/lib/core/utils/dayjs.js.map +1 -0
  31. package/lib/env/index.d.ts +17 -0
  32. package/lib/env/index.d.ts.map +1 -1
  33. package/lib/env/index.js +18 -1
  34. package/lib/env/index.js.map +1 -1
  35. package/lib/features/agent/PayloadBuilder.d.ts +1 -0
  36. package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
  37. package/lib/features/agent/PayloadBuilder.js +22 -5
  38. package/lib/features/agent/PayloadBuilder.js.map +1 -1
  39. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  40. package/lib/features/agent/chat/AgentRightPanel.js +3 -135
  41. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  42. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  43. package/lib/features/agent/chat/ArtifactsTab.js +1 -1
  44. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  45. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  46. package/lib/features/agent/chat/AskUserWidget.js +19 -4
  47. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  48. package/lib/features/agent/chat/ModernAgentConversation.d.ts +6 -0
  49. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  50. package/lib/features/agent/chat/ModernAgentConversation.js +99 -29
  51. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  52. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
  53. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +10 -9
  54. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
  55. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  56. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +5 -8
  57. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  58. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  59. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +45 -4
  60. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  61. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +1 -1
  62. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  63. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  64. package/lib/features/agent/chat/ModernAgentOutput/Header.js +3 -3
  65. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  66. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +1 -1
  68. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
  71. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  72. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +1 -1
  73. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  74. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  75. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -121
  76. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +6 -0
  78. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  79. package/lib/features/agent/chat/ModernAgentOutput/utils.js +19 -11
  80. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  81. package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  82. package/lib/features/agent/chat/VegaLiteChart.js +11 -3
  83. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  84. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  85. package/lib/features/agent/chat/hooks/useAgentStream.js +3 -0
  86. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  87. package/lib/features/document-viewer/UniversalDocumentViewer.d.ts.map +1 -1
  88. package/lib/features/document-viewer/UniversalDocumentViewer.js +1 -1
  89. package/lib/features/document-viewer/UniversalDocumentViewer.js.map +1 -1
  90. package/lib/features/facets/AgentRunnerFacetsNav.d.ts +14 -2
  91. package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  92. package/lib/features/facets/AgentRunnerFacetsNav.js +20 -2
  93. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  94. package/lib/features/facets/CollectionsFacetsNav.d.ts +3 -3
  95. package/lib/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
  96. package/lib/features/facets/CollectionsFacetsNav.js +6 -1
  97. package/lib/features/facets/CollectionsFacetsNav.js.map +1 -1
  98. package/lib/features/facets/DocumentsFacetsNav.d.ts +3 -3
  99. package/lib/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
  100. package/lib/features/facets/DocumentsFacetsNav.js +20 -8
  101. package/lib/features/facets/DocumentsFacetsNav.js.map +1 -1
  102. package/lib/features/facets/InteractionsFacetsNav.d.ts +3 -3
  103. package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
  104. package/lib/features/facets/InteractionsFacetsNav.js +11 -1
  105. package/lib/features/facets/InteractionsFacetsNav.js.map +1 -1
  106. package/lib/features/facets/PromptsFacetsNav.d.ts +3 -3
  107. package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
  108. package/lib/features/facets/PromptsFacetsNav.js +6 -1
  109. package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
  110. package/lib/features/facets/RunsFacetsNav.d.ts +4 -14
  111. package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
  112. package/lib/features/facets/RunsFacetsNav.js +26 -15
  113. package/lib/features/facets/RunsFacetsNav.js.map +1 -1
  114. package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts +4 -3
  115. package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts.map +1 -1
  116. package/lib/features/facets/WorkflowExecutionsFacetsNav.js +18 -10
  117. package/lib/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -1
  118. package/lib/features/facets/index.d.ts +1 -1
  119. package/lib/features/facets/index.d.ts.map +1 -1
  120. package/lib/features/facets/index.js.map +1 -1
  121. package/lib/features/facets/utils/SearchInterface.d.ts +4 -3
  122. package/lib/features/facets/utils/SearchInterface.d.ts.map +1 -1
  123. package/lib/features/facets/utils/SearchInterface.js +4 -0
  124. package/lib/features/facets/utils/SearchInterface.js.map +1 -1
  125. package/lib/features/layout/GenericPageNavHeader.d.ts +8 -1
  126. package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  127. package/lib/features/layout/GenericPageNavHeader.js +9 -1
  128. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  129. package/lib/features/magic-pdf/DownloadPopover.d.ts +3 -2
  130. package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  131. package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
  132. package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -1
  133. package/lib/features/magic-pdf/GroundedExtractionView.js +51 -64
  134. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
  135. package/lib/features/oauth/McpConnectionsButton.d.ts +1 -1
  136. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  137. package/lib/features/oauth/McpConnectionsButton.js +2 -2
  138. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  139. package/lib/features/oauth/McpConnectionsDialog.d.ts +1 -1
  140. package/lib/features/oauth/McpConnectionsDialog.js +2 -2
  141. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  142. package/lib/features/oauth/useMcpConnections.d.ts +4 -5
  143. package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
  144. package/lib/features/oauth/useMcpConnections.js +20 -4
  145. package/lib/features/oauth/useMcpConnections.js.map +1 -1
  146. package/lib/features/pdf-viewer/PdfPageRenderer.d.ts.map +1 -1
  147. package/lib/features/pdf-viewer/PdfPageRenderer.js +9 -11
  148. package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
  149. package/lib/features/pdf-viewer/lazyReactPdf.d.ts +10 -0
  150. package/lib/features/pdf-viewer/lazyReactPdf.d.ts.map +1 -0
  151. package/lib/features/pdf-viewer/lazyReactPdf.js +25 -0
  152. package/lib/features/pdf-viewer/lazyReactPdf.js.map +1 -0
  153. package/lib/features/store/collections/CollectionsTable.d.ts.map +1 -1
  154. package/lib/features/store/collections/CollectionsTable.js +1 -3
  155. package/lib/features/store/collections/CollectionsTable.js.map +1 -1
  156. package/lib/features/store/collections/EditCollectionView.js +1 -1
  157. package/lib/features/store/collections/EditCollectionView.js.map +1 -1
  158. package/lib/features/store/objects/ExportPropertiesModal.d.ts +3 -1
  159. package/lib/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  160. package/lib/features/store/objects/ExportPropertiesModal.js +5 -5
  161. package/lib/features/store/objects/ExportPropertiesModal.js.map +1 -1
  162. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  163. package/lib/features/store/objects/components/ContentOverview.js +4 -10
  164. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  165. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  166. package/lib/features/store/objects/components/TextEditorPanel.js +8 -3
  167. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  168. package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
  169. package/lib/features/store/objects/layout/renderers.js +1 -5
  170. package/lib/features/store/objects/layout/renderers.js.map +1 -1
  171. package/lib/features/store/objects/search/DocumentSearchContext.d.ts +29 -62
  172. package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  173. package/lib/features/store/objects/search/DocumentSearchContext.js +2 -0
  174. package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  175. package/lib/features/store/objects/upload/DocumentUploadModal.d.ts +6 -1
  176. package/lib/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
  177. package/lib/features/store/objects/upload/DocumentUploadModal.js +4 -3
  178. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  179. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  180. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js +2 -2
  181. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  182. package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  183. package/lib/features/store/types/ContentObjectTypesTable.js +1 -3
  184. package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
  185. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  186. package/lib/features/store/types/IntakePolicyEditor.js +11 -1
  187. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  188. package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  189. package/lib/features/store/types/ObjectSchemaEditor.js +6 -2
  190. package/lib/features/store/types/ObjectSchemaEditor.js.map +1 -1
  191. package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  192. package/lib/features/store/types/TableLayoutEditor.js +2 -0
  193. package/lib/features/store/types/TableLayoutEditor.js.map +1 -1
  194. package/lib/features/store/types/TypeRegistry.d.ts +272 -0
  195. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  196. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +271 -0
  197. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  198. package/lib/features/user/UserInfo.d.ts.map +1 -1
  199. package/lib/features/user/UserInfo.js +2 -4
  200. package/lib/features/user/UserInfo.js.map +1 -1
  201. package/lib/features/views/ViewActions.d.ts +32 -0
  202. package/lib/features/views/ViewActions.d.ts.map +1 -0
  203. package/lib/features/views/ViewActions.js +186 -0
  204. package/lib/features/views/ViewActions.js.map +1 -0
  205. package/lib/features/views/ViewDropTarget.d.ts +15 -0
  206. package/lib/features/views/ViewDropTarget.d.ts.map +1 -0
  207. package/lib/features/views/ViewDropTarget.js +79 -0
  208. package/lib/features/views/ViewDropTarget.js.map +1 -0
  209. package/lib/features/views/ViewExperience.d.ts +3 -2
  210. package/lib/features/views/ViewExperience.d.ts.map +1 -1
  211. package/lib/features/views/ViewExperience.js +103 -12
  212. package/lib/features/views/ViewExperience.js.map +1 -1
  213. package/lib/features/views/ViewNavigation.d.ts +1 -1
  214. package/lib/features/views/ViewNavigation.d.ts.map +1 -1
  215. package/lib/features/views/ViewNavigation.js +14 -5
  216. package/lib/features/views/ViewNavigation.js.map +1 -1
  217. package/lib/features/views/ViewResults.d.ts +1 -1
  218. package/lib/features/views/ViewResults.d.ts.map +1 -1
  219. package/lib/features/views/ViewResults.js +124 -34
  220. package/lib/features/views/ViewResults.js.map +1 -1
  221. package/lib/features/views/index.d.ts +1 -0
  222. package/lib/features/views/index.d.ts.map +1 -1
  223. package/lib/features/views/index.js +1 -0
  224. package/lib/features/views/index.js.map +1 -1
  225. package/lib/features/views/types.d.ts +46 -1
  226. package/lib/features/views/types.d.ts.map +1 -1
  227. package/lib/features/views/viewState.d.ts.map +1 -1
  228. package/lib/features/views/viewState.js +34 -0
  229. package/lib/features/views/viewState.js.map +1 -1
  230. package/lib/i18n/LanguageProvider.d.ts +3 -1
  231. package/lib/i18n/LanguageProvider.d.ts.map +1 -1
  232. package/lib/i18n/LanguageProvider.js +9 -7
  233. package/lib/i18n/LanguageProvider.js.map +1 -1
  234. package/lib/i18n/instance.d.ts +2 -0
  235. package/lib/i18n/instance.d.ts.map +1 -1
  236. package/lib/i18n/instance.js +45 -26
  237. package/lib/i18n/instance.js.map +1 -1
  238. package/lib/i18n/locales/ar.json +261 -15
  239. package/lib/i18n/locales/de.json +259 -13
  240. package/lib/i18n/locales/en.json +30 -4
  241. package/lib/i18n/locales/es.json +260 -14
  242. package/lib/i18n/locales/fr.json +259 -13
  243. package/lib/i18n/locales/it.json +259 -13
  244. package/lib/i18n/locales/ja.json +257 -10
  245. package/lib/i18n/locales/ko.json +257 -10
  246. package/lib/i18n/locales/pt.json +259 -13
  247. package/lib/i18n/locales/ru.json +256 -10
  248. package/lib/i18n/locales/tr.json +256 -10
  249. package/lib/i18n/locales/zh-TW.json +257 -10
  250. package/lib/i18n/locales/zh.json +257 -10
  251. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  252. package/lib/session/UserSessionProvider.js +8 -16
  253. package/lib/session/UserSessionProvider.js.map +1 -1
  254. package/lib/session/auth/composable.d.ts.map +1 -1
  255. package/lib/session/auth/composable.js +25 -19
  256. package/lib/session/auth/composable.js.map +1 -1
  257. package/lib/session/auth/firebase.js +1 -1
  258. package/lib/session/auth/firebase.js.map +1 -1
  259. package/lib/shell/VertesiaShell.d.ts.map +1 -1
  260. package/lib/shell/VertesiaShell.js +2 -1
  261. package/lib/shell/VertesiaShell.js.map +1 -1
  262. package/lib/shell/apps/AppInstallationProvider.d.ts +4 -2
  263. package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
  264. package/lib/shell/apps/IframeAppContextSync.d.ts +3 -0
  265. package/lib/shell/apps/IframeAppContextSync.d.ts.map +1 -0
  266. package/lib/shell/apps/IframeAppContextSync.js +95 -0
  267. package/lib/shell/apps/IframeAppContextSync.js.map +1 -0
  268. package/lib/shell/apps/iframe-auth.d.ts +55 -0
  269. package/lib/shell/apps/iframe-auth.d.ts.map +1 -0
  270. package/lib/shell/apps/iframe-auth.js +154 -0
  271. package/lib/shell/apps/iframe-auth.js.map +1 -0
  272. package/lib/shell/apps/index.d.ts +2 -0
  273. package/lib/shell/apps/index.d.ts.map +1 -1
  274. package/lib/shell/apps/index.js +2 -0
  275. package/lib/shell/apps/index.js.map +1 -1
  276. package/lib/vertesia-ui-core.js +4 -4
  277. package/lib/vertesia-ui-core.js.map +1 -1
  278. package/lib/vertesia-ui-env.js +1 -1
  279. package/lib/vertesia-ui-env.js.map +1 -1
  280. package/lib/vertesia-ui-features.js +32 -34
  281. package/lib/vertesia-ui-features.js.map +1 -1
  282. package/lib/vertesia-ui-i18n.js +16 -16
  283. package/lib/vertesia-ui-i18n.js.map +1 -1
  284. package/lib/vertesia-ui-rich-text.js +4 -4
  285. package/lib/vertesia-ui-rich-text.js.map +1 -1
  286. package/lib/vertesia-ui-router.js +1 -1
  287. package/lib/vertesia-ui-router.js.map +1 -1
  288. package/lib/vertesia-ui-session.js +1 -1
  289. package/lib/vertesia-ui-session.js.map +1 -1
  290. package/lib/vertesia-ui-shell.js +1 -1
  291. package/lib/vertesia-ui-shell.js.map +1 -1
  292. package/lib/vertesia-ui-widgets.js +20 -20
  293. package/lib/vertesia-ui-widgets.js.map +1 -1
  294. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  295. package/lib/widgets/markdown/MarkdownRenderer.js +43 -2
  296. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  297. package/lib/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
  298. package/lib/widgets/markdown/MermaidDiagram.js +35 -22
  299. package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
  300. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  301. package/lib/widgets/monacoEditor/MonacoEditor.js +14 -10
  302. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  303. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  304. package/package.json +24 -29
  305. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +1 -1
  306. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +1 -1
  307. package/src/core/components/shadcn/filters/filters.tsx +1 -1
  308. package/src/core/components/shadcn/index.ts +1 -0
  309. package/src/core/components/shadcn/modal/dialog.test.tsx +35 -0
  310. package/src/core/components/shadcn/modal/dialog.tsx +0 -4
  311. package/src/core/components/shadcn/overflowTabs.tsx +320 -0
  312. package/src/core/components/shadcn/selectBox.tsx +2 -2
  313. package/src/core/components/shadcn/theme/ThemeProvider.tsx +10 -9
  314. package/src/core/utils/dayjs.ts +17 -0
  315. package/src/css/base.css +78 -0
  316. package/src/env/index.test.ts +94 -0
  317. package/src/env/index.ts +36 -1
  318. package/src/features/agent/PayloadBuilder.test.ts +68 -0
  319. package/src/features/agent/PayloadBuilder.tsx +28 -4
  320. package/src/features/agent/chat/AgentRightPanel.tsx +2 -252
  321. package/src/features/agent/chat/ArtifactsTab.tsx +1 -0
  322. package/src/features/agent/chat/AskUserWidget.test.tsx +20 -1
  323. package/src/features/agent/chat/AskUserWidget.tsx +22 -6
  324. package/src/features/agent/chat/ModernAgentConversation.test.tsx +160 -0
  325. package/src/features/agent/chat/ModernAgentConversation.tsx +111 -31
  326. package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +86 -67
  327. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +90 -7
  328. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +4 -6
  329. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.test.ts +103 -1
  330. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +50 -4
  331. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +1 -1
  332. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +18 -1
  333. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +1 -1
  334. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +1 -1
  335. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +1 -1
  336. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +37 -167
  337. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +94 -0
  338. package/src/features/agent/chat/ModernAgentOutput/utils.ts +19 -10
  339. package/src/features/agent/chat/VegaLiteChart.tsx +32 -14
  340. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +18 -0
  341. package/src/features/agent/chat/hooks/useAgentStream.ts +3 -0
  342. package/src/features/document-viewer/UniversalDocumentViewer.tsx +1 -1
  343. package/src/features/facets/AgentRunnerFacetsNav.tsx +44 -4
  344. package/src/features/facets/CollectionsFacetsNav.tsx +15 -4
  345. package/src/features/facets/DocumentsFacetsNav.tsx +25 -8
  346. package/src/features/facets/FacetQueryHandlers.test.ts +84 -0
  347. package/src/features/facets/InteractionsFacetsNav.tsx +20 -4
  348. package/src/features/facets/PromptsFacetsNav.tsx +15 -4
  349. package/src/features/facets/RunsFacetsNav.test.ts +59 -0
  350. package/src/features/facets/RunsFacetsNav.tsx +40 -30
  351. package/src/features/facets/WorkflowExecutionsFacetsNav.test.ts +57 -0
  352. package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +36 -16
  353. package/src/features/facets/index.ts +1 -0
  354. package/src/features/facets/utils/SearchInterface.tsx +12 -3
  355. package/src/features/layout/GenericPageNavHeader.tsx +16 -0
  356. package/src/features/magic-pdf/DownloadPopover.tsx +1 -2
  357. package/src/features/magic-pdf/GroundedExtractionView.test.tsx +7 -1
  358. package/src/features/magic-pdf/GroundedExtractionView.tsx +162 -242
  359. package/src/features/oauth/McpConnectionsButton.test.tsx +18 -1
  360. package/src/features/oauth/McpConnectionsButton.tsx +6 -2
  361. package/src/features/oauth/McpConnectionsDialog.tsx +3 -3
  362. package/src/features/oauth/useMcpConnections.test.ts +1 -0
  363. package/src/features/oauth/useMcpConnections.ts +24 -7
  364. package/src/features/pdf-viewer/PdfPageRenderer.tsx +76 -71
  365. package/src/features/pdf-viewer/lazyReactPdf.ts +33 -0
  366. package/src/features/store/collections/CollectionsTable.tsx +1 -4
  367. package/src/features/store/collections/EditCollectionView.tsx +1 -1
  368. package/src/features/store/objects/ExportPropertiesModal.tsx +25 -16
  369. package/src/features/store/objects/components/ContentOverview.tsx +2 -28
  370. package/src/features/store/objects/components/TextEditorPanel.tsx +13 -3
  371. package/src/features/store/objects/layout/renderers.tsx +1 -6
  372. package/src/features/store/objects/search/DocumentSearchContext.ts +4 -2
  373. package/src/features/store/objects/upload/DocumentUploadModal.tsx +10 -3
  374. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +15 -6
  375. package/src/features/store/types/ContentObjectTypesTable.tsx +1 -4
  376. package/src/features/store/types/IntakePolicyEditor.tsx +11 -1
  377. package/src/features/store/types/ObjectSchemaEditor.tsx +6 -2
  378. package/src/features/store/types/TableLayoutEditor.tsx +2 -0
  379. package/src/features/user/UserInfo.test.tsx +10 -0
  380. package/src/features/user/UserInfo.tsx +2 -7
  381. package/src/features/views/ViewActions.test.tsx +80 -0
  382. package/src/features/views/ViewActions.tsx +352 -0
  383. package/src/features/views/ViewDropTarget.test.tsx +150 -0
  384. package/src/features/views/ViewDropTarget.tsx +140 -0
  385. package/src/features/views/ViewExperience.test.tsx +72 -0
  386. package/src/features/views/ViewExperience.tsx +189 -22
  387. package/src/features/views/ViewMedia.test.tsx +180 -0
  388. package/src/features/views/ViewNavigation.test.tsx +42 -0
  389. package/src/features/views/ViewNavigation.tsx +43 -5
  390. package/src/features/views/ViewResults.tsx +243 -26
  391. package/src/features/views/index.ts +1 -0
  392. package/src/features/views/types.ts +50 -0
  393. package/src/features/views/viewState.test.ts +7 -1
  394. package/src/features/views/viewState.ts +32 -0
  395. package/src/i18n/LanguageProvider.tsx +15 -8
  396. package/src/i18n/instance.test.ts +30 -0
  397. package/src/i18n/instance.ts +67 -40
  398. package/src/i18n/locales/ar.json +1157 -911
  399. package/src/i18n/locales/de.json +1113 -867
  400. package/src/i18n/locales/en.json +30 -4
  401. package/src/i18n/locales/es.json +1124 -878
  402. package/src/i18n/locales/fr.json +1124 -878
  403. package/src/i18n/locales/it.json +1124 -878
  404. package/src/i18n/locales/ja.json +1113 -866
  405. package/src/i18n/locales/ko.json +1113 -866
  406. package/src/i18n/locales/pt.json +1124 -878
  407. package/src/i18n/locales/ru.json +1135 -889
  408. package/src/i18n/locales/tr.json +1113 -867
  409. package/src/i18n/locales/zh-TW.json +1113 -866
  410. package/src/i18n/locales/zh.json +1113 -866
  411. package/src/i18n/rtl.test.ts +16 -7
  412. package/src/rich-text/VertesiaRichTextEditor.test.tsx +33 -1
  413. package/src/session/UserSessionProvider.tsx +8 -20
  414. package/src/session/auth/composable.scope.test.ts +1 -1
  415. package/src/session/auth/composable.test.ts +61 -1
  416. package/src/session/auth/composable.ts +29 -23
  417. package/src/session/auth/firebase.ts +1 -1
  418. package/src/shell/VertesiaShell.tsx +2 -0
  419. package/src/shell/apps/IframeAppContextSync.test.tsx +196 -0
  420. package/src/shell/apps/IframeAppContextSync.tsx +101 -0
  421. package/src/shell/apps/iframe-auth.test.ts +118 -0
  422. package/src/shell/apps/iframe-auth.ts +193 -0
  423. package/src/shell/apps/index.ts +2 -0
  424. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +12 -3
  425. package/src/widgets/markdown/MarkdownRenderer.tsx +50 -2
  426. package/src/widgets/markdown/MermaidDiagram.tsx +38 -22
  427. package/src/widgets/monacoEditor/MonacoEditor.tsx +27 -20
  428. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +0 -25
  429. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +0 -1
  430. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +0 -42
  431. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +0 -1
  432. package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +0 -86
@@ -93,7 +93,7 @@ export function McpConnectionsButton({
93
93
  }
94
94
 
95
95
  /**
96
- * Inline MCP status list for forms. It shows all available OAuth MCP groups
96
+ * Inline MCP status list for forms. It shows all available authenticated MCP groups
97
97
  * without requiring the user to open the management dialog.
98
98
  */
99
99
  export function McpConnectionsInlineList({
@@ -165,7 +165,7 @@ export function McpConnectionsInlineList({
165
165
  >
166
166
  <Spinner className="size-3" />
167
167
  </Button>
168
- ) : (
168
+ ) : group.authType === 'oauth' ? (
169
169
  <RemoteMcpConnectionButton
170
170
  appId={group.appId}
171
171
  collectionId={group.representativeId}
@@ -176,6 +176,10 @@ export function McpConnectionsInlineList({
176
176
  showDisconnect
177
177
  readOnly={readOnly}
178
178
  />
179
+ ) : (
180
+ <Badge variant="outline" className="h-6 w-32 justify-center px-2 text-xs">
181
+ {t('mcpConnections.apiKey')}
182
+ </Badge>
179
183
  )}
180
184
  {onChange && (
181
185
  <div className="flex min-w-24 items-center justify-end gap-2 text-xs">
@@ -25,7 +25,7 @@ export interface McpConnectionsDialogProps {
25
25
 
26
26
  /**
27
27
  * Dialog to manage the MCP servers available to an agent conversation.
28
- * Each server can be connected/disconnected (OAuth) and activated/deactivated for this run.
28
+ * OAuth servers can be connected, and every server can be activated or deactivated for this run.
29
29
  */
30
30
  export function McpConnectionsDialog({
31
31
  isOpen,
@@ -102,7 +102,7 @@ export function McpConnectionsDialog({
102
102
  >
103
103
  <Spinner className="size-3" />
104
104
  </Button>
105
- ) : (
105
+ ) : group.authType === 'oauth' ? (
106
106
  <RemoteMcpConnectionButton
107
107
  appId={group.appId}
108
108
  collectionId={group.representativeId}
@@ -113,7 +113,7 @@ export function McpConnectionsDialog({
113
113
  showDisconnect
114
114
  readOnly={readOnly}
115
115
  />
116
- )}
116
+ ) : null}
117
117
  {onChange && (
118
118
  <Switch
119
119
  size="sm"
@@ -16,6 +16,7 @@ function group(memberIds: string[], authenticated?: boolean, label = 'Server'):
16
16
  representativeId: memberIds[0],
17
17
  memberIds,
18
18
  memberNames: memberIds,
19
+ authType: 'oauth',
19
20
  authStatus:
20
21
  authenticated === undefined
21
22
  ? undefined
@@ -8,8 +8,7 @@ import { useUserSession } from '@vertesia/ui/session';
8
8
  import { useCallback, useEffect, useRef, useState } from 'react';
9
9
 
10
10
  /**
11
- * A group of MCP tool collections that share a single OAuth connection.
12
- * Connection/activation operations act on the whole group.
11
+ * A group of MCP tool collections that share authentication and activation state.
13
12
  */
14
13
  export interface McpConnectionGroup {
15
14
  key: string;
@@ -17,18 +16,18 @@ export interface McpConnectionGroup {
17
16
  appName: string;
18
17
  /** Display label: provider display_name, oauth_app name, or individual collection name */
19
18
  label: string;
20
- /** Representative collection ID used for OAuth operations (all in group share the same OAuth provider) */
19
+ /** Representative collection ID used for status and, for OAuth groups, connection operations. */
21
20
  representativeId: string;
22
21
  /** All collection IDs in this group (used for per-conversation activation toggles) */
23
22
  memberIds: string[];
24
23
  /** Names of all collections in this group (for tooltip when > 1) */
25
24
  memberNames: string[];
25
+ authType: 'oauth' | 'api_key';
26
26
  authStatus?: OAuthAuthStatus;
27
27
  }
28
28
 
29
29
  /**
30
- * Loads the project's installed MCP tool collections that require OAuth, grouped by their
31
- * shared OAuth provider/app, and resolves each group's current connection status.
30
+ * Loads the project's installed authenticated MCP tool collections and resolves their status.
32
31
  *
33
32
  * Shared by the MCP connections button (badge count) and dialog (list) so the data is
34
33
  * fetched once and refreshed together after connect/disconnect.
@@ -56,9 +55,11 @@ export function useMcpConnections() {
56
55
 
57
56
  if (!inst.manifest.tool_collections) continue;
58
57
 
59
- const oauthCollections = inst.manifest.tool_collections
58
+ const mcpCollections = inst.manifest.tool_collections
60
59
  .map((c) => normalizeToolCollection(c))
61
- .filter((c): c is MCPToolCollectionObject => c.type === 'mcp' && oauthIds.includes(c.id));
60
+ .filter((c): c is MCPToolCollectionObject => c.type === 'mcp');
61
+ const oauthCollections = mcpCollections.filter((c) => c.auth !== 'api_key' && oauthIds.includes(c.id));
62
+ const apiKeyCollections = mcpCollections.filter((c) => c.auth === 'api_key');
62
63
 
63
64
  const providerMap = new Map<string, MCPToolCollectionObject[]>();
64
65
  const oauthAppMap = new Map<string, MCPToolCollectionObject[]>();
@@ -87,6 +88,7 @@ export function useMcpConnections() {
87
88
  representativeId: cols[0].id,
88
89
  memberIds: cols.map((c) => c.id),
89
90
  memberNames: cols.map((c) => c.name),
91
+ authType: 'oauth',
90
92
  });
91
93
  }
92
94
 
@@ -99,6 +101,7 @@ export function useMcpConnections() {
99
101
  representativeId: cols[0].id,
100
102
  memberIds: cols.map((c) => c.id),
101
103
  memberNames: cols.map((c) => c.name),
104
+ authType: 'oauth',
102
105
  });
103
106
  }
104
107
 
@@ -111,6 +114,20 @@ export function useMcpConnections() {
111
114
  representativeId: col.id,
112
115
  memberIds: [col.id],
113
116
  memberNames: [col.name],
117
+ authType: 'oauth',
118
+ });
119
+ }
120
+
121
+ for (const col of apiKeyCollections) {
122
+ allGroups.push({
123
+ key: `${inst.id}:api-key:${col.id}`,
124
+ appId: inst.id,
125
+ appName: inst.manifest.title || inst.manifest.name,
126
+ label: col.name,
127
+ representativeId: col.id,
128
+ memberIds: [col.id],
129
+ memberNames: [col.name],
130
+ authType: 'api_key',
114
131
  });
115
132
  }
116
133
  }
@@ -1,9 +1,6 @@
1
1
  import { Loader2 } from 'lucide-react';
2
- import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
3
- import { Document, Page, pdfjs } from 'react-pdf';
4
-
5
- // Configure PDF.js worker - use CDN for the worker
6
- pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
2
+ import { createContext, Suspense, useCallback, useContext, useEffect, useRef, useState } from 'react';
3
+ import { Document, Page } from './lazyReactPdf';
7
4
 
8
5
  // Loading spinner component
9
6
  function LoadingSpinner({ className, size = 'md' }: { className?: string; size?: 'sm' | 'md' | 'lg' }) {
@@ -65,15 +62,17 @@ export function PdfPageRenderer({
65
62
  return (
66
63
  <div className={className}>
67
64
  {loading && <LoadingSpinner className="py-4" size="md" />}
68
- <Document file={pdfUrl} onLoadSuccess={handleLoadSuccess} onLoadError={handleError} loading={null}>
69
- <Page
70
- pageNumber={pageNumber}
71
- width={width}
72
- renderTextLayer={renderTextLayer}
73
- renderAnnotationLayer={renderAnnotationLayer}
74
- loading={<LoadingSpinner className="py-4" size="sm" />}
75
- />
76
- </Document>
65
+ <Suspense fallback={null}>
66
+ <Document file={pdfUrl} onLoadSuccess={handleLoadSuccess} onLoadError={handleError} loading={null}>
67
+ <Page
68
+ pageNumber={pageNumber}
69
+ width={width}
70
+ renderTextLayer={renderTextLayer}
71
+ renderAnnotationLayer={renderAnnotationLayer}
72
+ loading={<LoadingSpinner className="py-4" size="sm" />}
73
+ />
74
+ </Document>
75
+ </Suspense>
77
76
  </div>
78
77
  );
79
78
  }
@@ -174,14 +173,16 @@ export function SharedPdfProvider({ pdfUrl, urlLoading = false, children, onLoad
174
173
  return (
175
174
  <SharedPdfContext.Provider value={value}>
176
175
  {pdfUrl ? (
177
- <Document
178
- file={pdfUrl}
179
- onLoadSuccess={handleLoadSuccess}
180
- onLoadError={handleError}
181
- loading={<LoadingSpinner className="py-4" size="md" />}
182
- >
183
- {children(renderPage)}
184
- </Document>
176
+ <Suspense fallback={<LoadingSpinner className="py-4" size="md" />}>
177
+ <Document
178
+ file={pdfUrl}
179
+ onLoadSuccess={handleLoadSuccess}
180
+ onLoadError={handleError}
181
+ loading={<LoadingSpinner className="py-4" size="md" />}
182
+ >
183
+ {children(renderPage)}
184
+ </Document>
185
+ </Suspense>
185
186
  ) : (
186
187
  <LoadingSpinner className="py-4" size="md" />
187
188
  )}
@@ -480,45 +481,47 @@ export function PdfThumbnailList({
480
481
 
481
482
  return (
482
483
  <div ref={containerRef}>
483
- <Document
484
- file={pdfUrl}
485
- onLoadSuccess={handleLoadSuccess}
486
- onLoadError={handleError}
487
- loading={<LoadingSpinner className="py-4" size="md" />}
488
- >
489
- {hasAspectRatio ? (
490
- <>
491
- {/* Top spacer for pages above visible window */}
492
- {topSpacerHeight > 0 && <div style={{ height: topSpacerHeight }} />}
493
-
494
- {/* Only render pages within the visible window */}
495
- {Array.from({ length: visibleRange.end - visibleRange.start }, (_, index) => {
496
- const pageNumber = visibleRange.start + index + 1;
497
- return (
498
- <div
499
- key={pageNumber}
500
- data-page-index={pageNumber - 1}
501
- style={{ height: itemHeight, overflow: 'hidden' }}
502
- >
503
- <VirtualizedThumbnail
504
- pageNumber={pageNumber}
505
- width={thumbnailWidth}
506
- isSelected={pageNumber === currentPage}
507
- onSelect={() => onPageSelect(pageNumber)}
508
- renderThumbnail={renderThumbnail}
509
- aspectRatio={effectiveAspectRatio}
510
- />
511
- </div>
512
- );
513
- })}
514
-
515
- {/* Bottom spacer for pages below visible window */}
516
- {bottomSpacerHeight > 0 && <div style={{ height: bottomSpacerHeight }} />}
517
- </>
518
- ) : (
519
- <LoadingSpinner className="py-4" size="md" />
520
- )}
521
- </Document>
484
+ <Suspense fallback={<LoadingSpinner className="py-4" size="md" />}>
485
+ <Document
486
+ file={pdfUrl}
487
+ onLoadSuccess={handleLoadSuccess}
488
+ onLoadError={handleError}
489
+ loading={<LoadingSpinner className="py-4" size="md" />}
490
+ >
491
+ {hasAspectRatio ? (
492
+ <>
493
+ {/* Top spacer for pages above visible window */}
494
+ {topSpacerHeight > 0 && <div style={{ height: topSpacerHeight }} />}
495
+
496
+ {/* Only render pages within the visible window */}
497
+ {Array.from({ length: visibleRange.end - visibleRange.start }, (_, index) => {
498
+ const pageNumber = visibleRange.start + index + 1;
499
+ return (
500
+ <div
501
+ key={pageNumber}
502
+ data-page-index={pageNumber - 1}
503
+ style={{ height: itemHeight, overflow: 'hidden' }}
504
+ >
505
+ <VirtualizedThumbnail
506
+ pageNumber={pageNumber}
507
+ width={thumbnailWidth}
508
+ isSelected={pageNumber === currentPage}
509
+ onSelect={() => onPageSelect(pageNumber)}
510
+ renderThumbnail={renderThumbnail}
511
+ aspectRatio={effectiveAspectRatio}
512
+ />
513
+ </div>
514
+ );
515
+ })}
516
+
517
+ {/* Bottom spacer for pages below visible window */}
518
+ {bottomSpacerHeight > 0 && <div style={{ height: bottomSpacerHeight }} />}
519
+ </>
520
+ ) : (
521
+ <LoadingSpinner className="py-4" size="md" />
522
+ )}
523
+ </Document>
524
+ </Suspense>
522
525
  </div>
523
526
  );
524
527
  }
@@ -575,16 +578,18 @@ export function PdfDocumentRenderer({
575
578
  return (
576
579
  <div className={className}>
577
580
  {loading && <LoadingSpinner className="py-8" size="lg" />}
578
- <Document file={pdfUrl} onLoadSuccess={handleLoadSuccess} onLoadError={handleError} loading={null}>
579
- <Page
580
- pageNumber={Math.min(pageNumber, numPages || 1)}
581
- width={width}
582
- height={height}
583
- renderTextLayer={renderTextLayer}
584
- renderAnnotationLayer={renderAnnotationLayer}
585
- loading={<LoadingSpinner className="py-8" size="md" />}
586
- />
587
- </Document>
581
+ <Suspense fallback={null}>
582
+ <Document file={pdfUrl} onLoadSuccess={handleLoadSuccess} onLoadError={handleError} loading={null}>
583
+ <Page
584
+ pageNumber={Math.min(pageNumber, numPages || 1)}
585
+ width={width}
586
+ height={height}
587
+ renderTextLayer={renderTextLayer}
588
+ renderAnnotationLayer={renderAnnotationLayer}
589
+ loading={<LoadingSpinner className="py-8" size="md" />}
590
+ />
591
+ </Document>
592
+ </Suspense>
588
593
  </div>
589
594
  );
590
595
  }
@@ -0,0 +1,33 @@
1
+ import { type LazyExoticComponent, lazy } from 'react';
2
+
3
+ type ReactPdf = typeof import('react-pdf');
4
+
5
+ let reactPdfPromise: Promise<ReactPdf> | undefined;
6
+
7
+ /**
8
+ * react-pdf carries pdf.js with it, which is by far the heaviest dependency of this package and is
9
+ * only needed once a PDF is actually displayed. Loading it on demand keeps it out of the eager
10
+ * bundle of every consuming app. The pdf.js worker (served from a CDN) is configured as part of the
11
+ * same load, since it must be set before the first document is opened.
12
+ */
13
+ function loadReactPdf(): Promise<ReactPdf> {
14
+ if (!reactPdfPromise) {
15
+ reactPdfPromise = import('react-pdf').then((reactPdf) => {
16
+ const { pdfjs } = reactPdf;
17
+ pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
18
+ return reactPdf;
19
+ });
20
+ }
21
+ return reactPdfPromise;
22
+ }
23
+
24
+ /**
25
+ * Drop-in replacements for react-pdf's `Document` and `Page`. Both resolve from the same load, so a
26
+ * single `Suspense` boundary around the `Document` also covers the `Page` elements inside it.
27
+ */
28
+ export const Document: LazyExoticComponent<ReactPdf['Document']> = lazy(() =>
29
+ loadReactPdf().then(({ Document: component }) => ({ default: component })),
30
+ );
31
+ export const Page: LazyExoticComponent<ReactPdf['Page']> = lazy(() =>
32
+ loadReactPdf().then(({ Page: component }) => ({ default: component })),
33
+ );
@@ -14,14 +14,11 @@ import {
14
14
  import { useUITranslation } from '@vertesia/ui/i18n';
15
15
  import { NavLink } from '@vertesia/ui/router';
16
16
  import { useUserSession } from '@vertesia/ui/session';
17
- import dayjs from 'dayjs';
18
- import relativeTime from 'dayjs/plugin/relativeTime';
19
17
  import { FolderClosed, Search, Trash2 } from 'lucide-react';
20
18
  import { useEffect, useState } from 'react';
19
+ import dayjs from '../../../core/utils/dayjs.js';
21
20
  import { CreateCollectionModal } from './CreateCollection';
22
21
 
23
- dayjs.extend(relativeTime);
24
-
25
22
  export function CollectionsTable() {
26
23
  const { client } = useUserSession();
27
24
  const toast = useToast();
@@ -23,8 +23,8 @@ import {
23
23
  import { useUITranslation } from '@vertesia/ui/i18n';
24
24
  import { useUserSession } from '@vertesia/ui/session';
25
25
  import { type EditorApi, GeneratedForm, ManagedObject, MonacoEditor, type Node } from '@vertesia/ui/widgets';
26
- import dayjs from 'dayjs';
27
26
  import { useContext, useMemo, useRef, useState } from 'react';
27
+ import dayjs from '../../../core/utils/dayjs.js';
28
28
  import { UserInfo } from '../../user/UserInfo';
29
29
  import { SearchContext } from '../objects/search/DocumentSearchContext';
30
30
  import { SelectContentType, stringifyTableLayout } from '../types';
@@ -11,15 +11,22 @@ interface ExportPropertiesModalProps {
11
11
  isExporting: boolean;
12
12
  isOpen: boolean;
13
13
  onClose: (exportType?: string | null | undefined, exportAll?: boolean) => void;
14
+ /** Hide the all-objects option when the caller can only export an explicit selection. */
15
+ allowExportAll?: boolean;
14
16
  }
15
- export function ExportPropertiesModal({ isExporting, isOpen, onClose }: ExportPropertiesModalProps) {
17
+ export function ExportPropertiesModal({
18
+ isExporting,
19
+ isOpen,
20
+ onClose,
21
+ allowExportAll = true,
22
+ }: ExportPropertiesModalProps) {
16
23
  const title = 'Export Object Properties';
17
24
 
18
25
  return (
19
26
  <Modal onClose={() => onClose(undefined)} isOpen={isOpen}>
20
27
  <ModalTitle>{title}</ModalTitle>
21
28
  <ModalBody>
22
- {!isExporting && <SelectPanel onClose={onClose} />}
29
+ {!isExporting && <SelectPanel onClose={onClose} allowExportAll={allowExportAll} />}
23
30
  {isExporting && <WaitingPanel />}
24
31
  </ModalBody>
25
32
  </Modal>
@@ -28,13 +35,13 @@ export function ExportPropertiesModal({ isExporting, isOpen, onClose }: ExportPr
28
35
 
29
36
  interface SelectPanelProps {
30
37
  onClose: (exportType?: string | null, exportAll?: boolean) => void;
38
+ allowExportAll: boolean;
31
39
  }
32
- function SelectPanel({ onClose }: SelectPanelProps) {
40
+ function SelectPanel({ onClose, allowExportAll }: SelectPanelProps) {
33
41
  const { t } = useUITranslation();
34
42
  const [exportType, setExportType] = useState<string | undefined>(undefined);
35
- const [exportAll, setExportAll] = useState<string | undefined>(undefined);
36
-
37
43
  const selectionOption: string[] = ['Export selected objects', 'Export all objects'];
44
+ const [exportAll, setExportAll] = useState<string | undefined>(allowExportAll ? undefined : selectionOption[0]);
38
45
 
39
46
  const exportAllBoolean = (option: string | undefined) => {
40
47
  return option === selectionOption[1];
@@ -46,17 +53,19 @@ function SelectPanel({ onClose }: SelectPanelProps) {
46
53
 
47
54
  return (
48
55
  <ModalBody className="min-h-[104px] pt-0 flex flex-col gap-y-4">
49
- <div className="h-1/3">
50
- <SelectBox
51
- options={selectionOption}
52
- value={exportAll}
53
- onChange={setExportAll}
54
- placeholder={t('store.chooseWhatToExport')}
55
- className="h-full w-full text-sm"
56
- filterBy="name"
57
- isClearable
58
- />
59
- </div>
56
+ {allowExportAll && (
57
+ <div className="h-1/3">
58
+ <SelectBox
59
+ options={selectionOption}
60
+ value={exportAll}
61
+ onChange={setExportAll}
62
+ placeholder={t('store.chooseWhatToExport')}
63
+ className="h-full w-full text-sm"
64
+ filterBy="name"
65
+ isClearable
66
+ />
67
+ </div>
68
+ )}
60
69
  <div className="h-1/2 flex flex-col gap-y-8 content-between">
61
70
  <SelectBox
62
71
  options={Object.values(ExportTypes)}
@@ -11,7 +11,6 @@ import {
11
11
  WorkflowExecutionStatus,
12
12
  } from '@vertesia/common';
13
13
  import {
14
- Badge,
15
14
  Button,
16
15
  Dropdown,
17
16
  MenuItem,
@@ -36,11 +35,7 @@ import {
36
35
  UniversalDocumentViewer,
37
36
  } from '../../../document-viewer/UniversalDocumentViewer.js';
38
37
  import { MagicPdfView } from '../../../magic-pdf';
39
- import {
40
- GroundedExtractionView,
41
- useGroundedExtractionAvailable,
42
- useGroundedSummary,
43
- } from '../../../magic-pdf/GroundedExtractionView.js';
38
+ import { GroundedExtractionView, useGroundedExtractionAvailable } from '../../../magic-pdf/GroundedExtractionView.js';
44
39
  import { AudioPanel, ImagePanel, VideoPanel } from '../../../media-viewer';
45
40
  import { SecureButton } from '../../../permissions/SecureButton.js';
46
41
  import { getWorkflowStatusColor, getWorkflowStatusName, isPreviewableAsPdf } from '../../../utils/index.js';
@@ -348,7 +343,6 @@ function PropertiesPanel({
348
343
  const { t } = useUITranslation();
349
344
  const [viewCode, setViewCode] = useState(false);
350
345
  const [isPropertiesModalOpen, setPropertiesModalOpen] = useState(false);
351
- const groundedSummary = useGroundedSummary(object.id);
352
346
 
353
347
  const handleOpenPropertiesModal = () => {
354
348
  setPropertiesModalOpen(true);
@@ -408,26 +402,6 @@ function PropertiesPanel({
408
402
  </div>
409
403
  </div>
410
404
 
411
- {groundedSummary && object.properties && (
412
- <div className="flex items-center gap-2 px-2 pb-2">
413
- {typeof groundedSummary.confidence === 'number' && (
414
- <Badge
415
- variant={groundedSummary.confidence >= 0.95 ? 'success' : 'attention'}
416
- title={t('grounded.confidenceHint')}
417
- >
418
- {t('grounded.confidence', {
419
- percent: Math.floor(groundedSummary.confidence * 100),
420
- })}
421
- </Badge>
422
- )}
423
- <Badge variant={groundedSummary.verified === groundedSummary.total ? 'success' : 'attention'}>
424
- {t('grounded.verifiedOf', {
425
- verified: groundedSummary.verified,
426
- total: groundedSummary.total,
427
- })}
428
- </Badge>
429
- </div>
430
- )}
431
405
  {object.properties ? (
432
406
  <div className="flex-1 min-h-0 px-2">
433
407
  <JSONDisplay value={object.properties} viewCode={viewCode} />
@@ -1229,7 +1203,7 @@ function PdfPreviewPanel({ object }: { object: ContentObject }) {
1229
1203
 
1230
1204
  return (
1231
1205
  <div className="h-full">
1232
- <UniversalDocumentViewer source={source} className="h-full" />
1206
+ <UniversalDocumentViewer source={source} className="h-full" showHeader={false} />
1233
1207
  </div>
1234
1208
  );
1235
1209
  }
@@ -1,14 +1,22 @@
1
1
  import type { ContentObject } from '@vertesia/common';
2
2
  import { Button, errorMessage, useTheme, useToast } from '@vertesia/ui/core';
3
3
  import { useUITranslation } from '@vertesia/ui/i18n';
4
- import { VertesiaMarkdownDocumentEditor } from '@vertesia/ui/rich-text';
5
4
  import { useNavigate } from '@vertesia/ui/router';
6
5
  import { useUserSession } from '@vertesia/ui/session';
7
6
  import { type IEditorApi, MonacoEditor } from '@vertesia/ui/widgets';
8
- import { useCallback, useEffect, useRef, useState } from 'react';
7
+ import { lazy, Suspense, useCallback, useEffect, useRef, useState } from 'react';
9
8
  import { isMarkdownContentType } from './documentEditingRun.js';
10
9
  import { SaveVersionConfirmModal } from './SaveVersionConfirmModal.js';
11
10
 
11
+ /**
12
+ * The rich-text editor carries the whole TipTap stack. Importing it statically here would defeat the
13
+ * lazy boundaries the markdown widgets already use, pulling TipTap into every app that can reach
14
+ * this panel — so it is loaded on demand, like the other consumers do.
15
+ */
16
+ const MarkdownDocumentEditor = lazy(() =>
17
+ import('@vertesia/ui/rich-text').then((module) => ({ default: module.VertesiaMarkdownDocumentEditor })),
18
+ );
19
+
12
20
  interface TextEditorPanelProps {
13
21
  object: ContentObject;
14
22
  text: string;
@@ -139,7 +147,9 @@ export function TextEditorPanel({ object, text, onClose, onSaved }: TextEditorPa
139
147
  </div>
140
148
  <div className="flex-1 min-h-0 border rounded-md overflow-hidden mx-2 mb-2">
141
149
  {isMarkdown ? (
142
- <VertesiaMarkdownDocumentEditor value={editorText} onChange={handleMarkdownChange} />
150
+ <Suspense fallback={<div className="h-full w-full" />}>
151
+ <MarkdownDocumentEditor value={editorText} onChange={handleMarkdownChange} />
152
+ </Suspense>
143
153
  ) : (
144
154
  <MonacoEditor
145
155
  value={text}
@@ -1,14 +1,9 @@
1
1
  import { Button, VTooltip } from '@vertesia/ui/core';
2
- import dayjs from 'dayjs';
3
- import LocalizedFormat from 'dayjs/plugin/localizedFormat';
4
- import RelativeTime from 'dayjs/plugin/relativeTime';
5
2
  import { ExternalLink, Eye } from 'lucide-react';
6
3
  import type { ReactNode } from 'react';
4
+ import dayjs from '../../../../core/utils/dayjs.js';
7
5
  import { shortId } from '../../../utils';
8
6
 
9
- dayjs.extend(RelativeTime);
10
- dayjs.extend(LocalizedFormat);
11
-
12
7
  function isRecord(value: unknown): value is Record<string, unknown> {
13
8
  return typeof value === 'object' && value !== null;
14
9
  }
@@ -118,12 +118,14 @@ export class DocumentSearch implements SearchInterface {
118
118
  }
119
119
 
120
120
  _searchRequest(query: ComplexSearchQuery, limit: number, offset: number, includeFacets: boolean = true) {
121
- const payload: ComplexSearchPayload = {
121
+ // Keep this as `satisfies`: the full-object overload depends on preserving the literal
122
+ // `select?: undefined` shape rather than widening to a generic ComplexSearchPayload.
123
+ const payload = {
122
124
  limit,
123
125
  offset,
124
126
  query,
125
127
  facets: includeFacets ? this.facetSpecs : undefined,
126
- };
128
+ } satisfies ComplexSearchPayload;
127
129
 
128
130
  const request = this.collectionId
129
131
  ? this.client.collections.searchMembers(this.collectionId, payload)