@vertesia/ui 1.0.0-dev.20260128.144200 → 1.0.0-dev.20260225.024852Z

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 (500) hide show
  1. package/lib/esm/core/components/InputList.js +1 -1
  2. package/lib/esm/core/components/InputList.js.map +1 -1
  3. package/lib/esm/core/components/Overlay.js +1 -1
  4. package/lib/esm/core/components/Overlay.js.map +1 -1
  5. package/lib/esm/core/components/SidePanel.js +8 -2
  6. package/lib/esm/core/components/SidePanel.js.map +1 -1
  7. package/lib/esm/core/components/Switch.js +1 -1
  8. package/lib/esm/core/components/Switch.js.map +1 -1
  9. package/lib/esm/core/components/index.js +0 -8
  10. package/lib/esm/core/components/index.js.map +1 -1
  11. package/lib/esm/core/components/shadcn/MessageBox.js.map +1 -0
  12. package/lib/esm/core/components/shadcn/Panel.js +13 -0
  13. package/lib/esm/core/components/shadcn/Panel.js.map +1 -0
  14. package/lib/esm/core/components/{Badge.js → shadcn/badge.js} +2 -2
  15. package/lib/esm/core/components/shadcn/badge.js.map +1 -0
  16. package/lib/esm/core/components/shadcn/command.js +1 -1
  17. package/lib/esm/core/components/shadcn/command.js.map +1 -1
  18. package/lib/esm/core/components/shadcn/filters/filterBar.js +73 -83
  19. package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
  20. package/lib/esm/core/components/shadcn/index.js +4 -2
  21. package/lib/esm/core/components/shadcn/index.js.map +1 -1
  22. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js +10 -0
  23. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js.map +1 -0
  24. package/lib/esm/core/components/{DeleteModal.js → shadcn/modal/DeleteModal.js} +1 -1
  25. package/lib/esm/core/components/shadcn/modal/DeleteModal.js.map +1 -0
  26. package/lib/esm/core/components/shadcn/{dialog.js → modal/dialog.js} +19 -15
  27. package/lib/esm/core/components/shadcn/modal/dialog.js.map +1 -0
  28. package/lib/esm/core/components/shadcn/modal/index.js +4 -0
  29. package/lib/esm/core/components/shadcn/modal/index.js.map +1 -0
  30. package/lib/esm/core/components/shadcn/popover.js +4 -2
  31. package/lib/esm/core/components/shadcn/popover.js.map +1 -1
  32. package/lib/esm/core/components/shadcn/selectBox.js +19 -15
  33. package/lib/esm/core/components/shadcn/selectBox.js.map +1 -1
  34. package/lib/esm/core/components/shadcn/tabs.js +16 -14
  35. package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
  36. package/lib/esm/core/components/shadcn/textarea.js +30 -2
  37. package/lib/esm/core/components/shadcn/textarea.js.map +1 -1
  38. package/lib/esm/core/components/shadcn/tooltip.js +5 -1
  39. package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
  40. package/lib/esm/features/agent/PayloadBuilder.js +45 -0
  41. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  42. package/lib/esm/features/agent/chat/AgentChart.js +12 -232
  43. package/lib/esm/features/agent/chat/AgentChart.js.map +1 -1
  44. package/lib/esm/features/agent/chat/AskUserWidget.js +2 -1
  45. package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
  46. package/lib/esm/features/agent/chat/DocumentPanel.js +46 -0
  47. package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -0
  48. package/lib/esm/features/agent/chat/DocumentTabBar.js +17 -0
  49. package/lib/esm/features/agent/chat/DocumentTabBar.js.map +1 -0
  50. package/lib/esm/features/agent/chat/ModernAgentConversation.js +159 -402
  51. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  52. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +99 -57
  53. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  54. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +4 -4
  55. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  56. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +4 -4
  57. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  58. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +3 -3
  59. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  60. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +25 -22
  61. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  62. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +110 -55
  63. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  64. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +2 -2
  65. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  66. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +146 -55
  67. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  68. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +5 -6
  69. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  70. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +110 -2
  71. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  72. package/lib/esm/features/agent/chat/SkillWidgetProvider.js +28 -15
  73. package/lib/esm/features/agent/chat/SkillWidgetProvider.js.map +1 -1
  74. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +146 -0
  75. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -0
  76. package/lib/esm/features/agent/chat/hooks/useAgentStream.js +180 -0
  77. package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -0
  78. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +100 -0
  79. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -0
  80. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +90 -0
  81. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -0
  82. package/lib/esm/features/agent/chat/index.js +6 -5
  83. package/lib/esm/features/agent/chat/index.js.map +1 -1
  84. package/lib/esm/features/agent/chat/types/document.js +2 -0
  85. package/lib/esm/features/agent/chat/types/document.js.map +1 -0
  86. package/lib/esm/features/agent/index.js +0 -2
  87. package/lib/esm/features/agent/index.js.map +1 -1
  88. package/lib/esm/features/store/collections/BrowseCollectionView.js +4 -6
  89. package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
  90. package/lib/esm/features/store/collections/CreateCollection.js +4 -4
  91. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  92. package/lib/esm/features/store/collections/EditCollectionView.js +1 -1
  93. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  94. package/lib/esm/features/store/objects/DocumentSearchResults.js +5 -5
  95. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  96. package/lib/esm/features/store/objects/ExportPropertiesModal.js +3 -3
  97. package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
  98. package/lib/esm/features/store/objects/components/ContentOverview.js +19 -120
  99. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  100. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +1 -1
  101. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  102. package/lib/esm/features/store/objects/components/SelectDocumentModal.js +2 -2
  103. package/lib/esm/features/store/objects/components/SelectDocumentModal.js.map +1 -1
  104. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
  105. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  106. package/lib/esm/features/store/objects/components/index.js +1 -1
  107. package/lib/esm/features/store/objects/components/index.js.map +1 -1
  108. package/lib/esm/features/store/objects/components/useDownloadFile.js +192 -0
  109. package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -0
  110. package/lib/esm/features/store/objects/search/DocumentSearchContext.js +1 -2
  111. package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  112. package/lib/esm/features/store/objects/selection/SelectionActions.js +5 -8
  113. package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
  114. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +4 -4
  115. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  116. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +2 -2
  117. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
  118. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +1 -1
  119. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
  120. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +3 -3
  121. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
  122. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +13 -13
  123. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  124. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +15 -8
  125. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  126. package/lib/esm/features/store/types/ObjectSchemaEditor.js +6 -5
  127. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  128. package/lib/esm/features/store/types/SelectContentType.js +3 -3
  129. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  130. package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -4
  131. package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
  132. package/lib/esm/features/store/types/TableLayoutEditor.js +4 -4
  133. package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
  134. package/lib/esm/features/user/UserInfo.js +73 -9
  135. package/lib/esm/features/user/UserInfo.js.map +1 -1
  136. package/lib/esm/features/utils/print.js +0 -1
  137. package/lib/esm/features/utils/print.js.map +1 -1
  138. package/lib/esm/layout/AppLayout.js +3 -4
  139. package/lib/esm/layout/AppLayout.js.map +1 -1
  140. package/lib/esm/layout/Sidebar.js +5 -5
  141. package/lib/esm/layout/Sidebar.js.map +1 -1
  142. package/lib/esm/router/HistoryNavigator.js +7 -1
  143. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  144. package/lib/esm/router/Nav.js +2 -2
  145. package/lib/esm/router/Nav.js.map +1 -1
  146. package/lib/esm/session/UserSession.js +35 -9
  147. package/lib/esm/session/UserSession.js.map +1 -1
  148. package/lib/esm/session/UserSessionProvider.js +3 -2
  149. package/lib/esm/session/UserSessionProvider.js.map +1 -1
  150. package/lib/esm/shell/apps/AppProjectSelector.js +2 -2
  151. package/lib/esm/shell/apps/AppProjectSelector.js.map +1 -1
  152. package/lib/esm/shell/apps/StandaloneApp.js +2 -2
  153. package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
  154. package/lib/esm/shell/login/InviteAcceptModal.js +2 -2
  155. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
  156. package/lib/esm/shell/login/SignInModal.js +1 -1
  157. package/lib/esm/shell/login/SignInModal.js.map +1 -1
  158. package/lib/esm/shell/login/SignupForm.js +2 -2
  159. package/lib/esm/shell/login/SignupForm.js.map +1 -1
  160. package/lib/esm/shell/login/UserInfo.js +2 -2
  161. package/lib/esm/shell/login/UserInfo.js.map +1 -1
  162. package/lib/esm/widgets/json-view/JSONCode.js +1 -1
  163. package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
  164. package/lib/esm/widgets/json-view/JSONDisplay.js +1 -1
  165. package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
  166. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +84 -13
  167. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  168. package/lib/esm/widgets/markdown/MarkdownFigure.js +40 -0
  169. package/lib/esm/widgets/markdown/MarkdownFigure.js.map +1 -0
  170. package/lib/esm/widgets/markdown/MarkdownRenderer.js +42 -7
  171. package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
  172. package/lib/esm/widgets/markdown/MermaidDiagram.js +80 -5
  173. package/lib/esm/widgets/markdown/MermaidDiagram.js.map +1 -1
  174. package/lib/esm/widgets/markdown/codeBlockHandlers.js +33 -33
  175. package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
  176. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js +2 -29
  177. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js.map +1 -1
  178. package/lib/esm/widgets/markdown/index.js +1 -0
  179. package/lib/esm/widgets/markdown/index.js.map +1 -1
  180. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js +77 -0
  181. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -0
  182. package/lib/esm/widgets/markdown/normalizeDirectives.js +45 -0
  183. package/lib/esm/widgets/markdown/normalizeDirectives.js.map +1 -0
  184. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +96 -0
  185. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -0
  186. package/lib/esm/widgets/monacoEditor/MonacoEditor.js +8 -14
  187. package/lib/esm/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  188. package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
  189. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +3 -3
  190. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  191. package/lib/esm/widgets/schema-editor/json-schema4-utils.js.map +1 -1
  192. package/lib/tsconfig.tsbuildinfo +1 -1
  193. package/lib/types/core/components/SidePanel.d.ts +4 -1
  194. package/lib/types/core/components/SidePanel.d.ts.map +1 -1
  195. package/lib/types/core/components/index.d.ts +0 -8
  196. package/lib/types/core/components/index.d.ts.map +1 -1
  197. package/lib/types/core/components/shadcn/MessageBox.d.ts.map +1 -0
  198. package/lib/types/core/components/{Panel.d.ts → shadcn/Panel.d.ts} +3 -1
  199. package/lib/types/core/components/shadcn/Panel.d.ts.map +1 -0
  200. package/lib/types/core/components/{Badge.d.ts → shadcn/badge.d.ts} +4 -4
  201. package/lib/types/core/components/shadcn/badge.d.ts.map +1 -0
  202. package/lib/types/core/components/shadcn/button.d.ts +1 -1
  203. package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  204. package/lib/types/core/components/shadcn/index.d.ts +4 -2
  205. package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
  206. package/lib/types/core/components/shadcn/input.d.ts +1 -1
  207. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -0
  208. package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -0
  209. package/lib/types/core/components/shadcn/{dialog.d.ts → modal/dialog.d.ts} +7 -4
  210. package/lib/types/core/components/shadcn/modal/dialog.d.ts.map +1 -0
  211. package/lib/types/core/components/shadcn/modal/index.d.ts +4 -0
  212. package/lib/types/core/components/shadcn/modal/index.d.ts.map +1 -0
  213. package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
  214. package/lib/types/core/components/shadcn/selectBox.d.ts +9 -5
  215. package/lib/types/core/components/shadcn/selectBox.d.ts.map +1 -1
  216. package/lib/types/core/components/shadcn/tabs.d.ts +14 -5
  217. package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
  218. package/lib/types/core/components/shadcn/textarea.d.ts +6 -2
  219. package/lib/types/core/components/shadcn/textarea.d.ts.map +1 -1
  220. package/lib/types/core/components/shadcn/tooltip.d.ts.map +1 -1
  221. package/lib/types/features/agent/PayloadBuilder.d.ts +22 -4
  222. package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
  223. package/lib/types/features/agent/chat/AgentChart.d.ts +3 -44
  224. package/lib/types/features/agent/chat/AgentChart.d.ts.map +1 -1
  225. package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  226. package/lib/types/features/agent/chat/DocumentPanel.d.ts +16 -0
  227. package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -0
  228. package/lib/types/features/agent/chat/DocumentTabBar.d.ts +10 -0
  229. package/lib/types/features/agent/chat/DocumentTabBar.d.ts.map +1 -0
  230. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +69 -1
  231. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  232. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +36 -1
  233. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  234. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts +18 -2
  235. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  236. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +4 -7
  237. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  238. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
  239. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  240. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +35 -7
  241. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  242. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +11 -1
  243. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  244. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +20 -2
  245. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  246. package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  247. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +18 -1
  248. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  249. package/lib/types/features/agent/chat/SkillWidgetProvider.d.ts.map +1 -1
  250. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts +22 -0
  251. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -0
  252. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +42 -0
  253. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -0
  254. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts +22 -0
  255. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -0
  256. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +27 -0
  257. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -0
  258. package/lib/types/features/agent/chat/index.d.ts +12 -8
  259. package/lib/types/features/agent/chat/index.d.ts.map +1 -1
  260. package/lib/types/features/agent/chat/types/document.d.ts +5 -0
  261. package/lib/types/features/agent/chat/types/document.d.ts.map +1 -0
  262. package/lib/types/features/agent/index.d.ts +0 -2
  263. package/lib/types/features/agent/index.d.ts.map +1 -1
  264. package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
  265. package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  266. package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  267. package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
  268. package/lib/types/features/store/objects/components/index.d.ts +1 -1
  269. package/lib/types/features/store/objects/components/index.d.ts.map +1 -1
  270. package/lib/types/features/store/objects/components/useDownloadFile.d.ts +35 -0
  271. package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -0
  272. package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  273. package/lib/types/features/store/objects/selection/SelectionActions.d.ts +1 -1
  274. package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  275. package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
  276. package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
  277. package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  278. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts +2 -1
  279. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  280. package/lib/types/features/store/types/SelectContentTypeModal.d.ts +1 -1
  281. package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  282. package/lib/types/features/store/types/TableLayoutEditor.d.ts +2 -1
  283. package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  284. package/lib/types/features/user/UserInfo.d.ts +12 -1
  285. package/lib/types/features/user/UserInfo.d.ts.map +1 -1
  286. package/lib/types/features/utils/print.d.ts.map +1 -1
  287. package/lib/types/layout/AppLayout.d.ts.map +1 -1
  288. package/lib/types/layout/Sidebar.d.ts +4 -2
  289. package/lib/types/layout/Sidebar.d.ts.map +1 -1
  290. package/lib/types/router/HistoryNavigator.d.ts.map +1 -1
  291. package/lib/types/router/Nav.d.ts +6 -1
  292. package/lib/types/router/Nav.d.ts.map +1 -1
  293. package/lib/types/session/UserSession.d.ts.map +1 -1
  294. package/lib/types/session/UserSessionProvider.d.ts +1 -0
  295. package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
  296. package/lib/types/widgets/json-view/JSONCode.d.ts.map +1 -1
  297. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts +10 -1
  298. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  299. package/lib/types/widgets/markdown/MarkdownFigure.d.ts +15 -0
  300. package/lib/types/widgets/markdown/MarkdownFigure.d.ts.map +1 -0
  301. package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  302. package/lib/types/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
  303. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +5 -2
  304. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
  305. package/lib/types/widgets/markdown/index.d.ts +1 -0
  306. package/lib/types/widgets/markdown/index.d.ts.map +1 -1
  307. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts +9 -0
  308. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -0
  309. package/lib/types/widgets/markdown/normalizeDirectives.d.ts +20 -0
  310. package/lib/types/widgets/markdown/normalizeDirectives.d.ts.map +1 -0
  311. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts +2 -0
  312. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -0
  313. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts +1 -3
  314. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  315. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
  316. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  317. package/lib/vertesia-ui-core.js +1 -1
  318. package/lib/vertesia-ui-core.js.map +1 -1
  319. package/lib/vertesia-ui-features.js +1 -1
  320. package/lib/vertesia-ui-features.js.map +1 -1
  321. package/lib/vertesia-ui-layout.js +1 -1
  322. package/lib/vertesia-ui-layout.js.map +1 -1
  323. package/lib/vertesia-ui-router.js +1 -1
  324. package/lib/vertesia-ui-router.js.map +1 -1
  325. package/lib/vertesia-ui-session.js +1 -1
  326. package/lib/vertesia-ui-session.js.map +1 -1
  327. package/lib/vertesia-ui-shell.js +1 -1
  328. package/lib/vertesia-ui-shell.js.map +1 -1
  329. package/lib/vertesia-ui-widgets.js +1 -1
  330. package/lib/vertesia-ui-widgets.js.map +1 -1
  331. package/package.json +14 -10
  332. package/src/core/components/InputList.tsx +1 -1
  333. package/src/core/components/Overlay.tsx +1 -1
  334. package/src/core/components/SidePanel.tsx +29 -15
  335. package/src/core/components/Switch.tsx +1 -1
  336. package/src/core/components/index.ts +0 -8
  337. package/src/core/components/shadcn/Panel.tsx +50 -0
  338. package/src/core/components/{Badge.tsx → shadcn/badge.tsx} +3 -3
  339. package/src/core/components/shadcn/command.tsx +1 -1
  340. package/src/core/components/shadcn/filters/filterBar.tsx +76 -87
  341. package/src/core/components/shadcn/index.ts +5 -3
  342. package/src/core/components/{ConfirmModal.tsx → shadcn/modal/ConfirmModal.tsx} +8 -8
  343. package/src/core/components/{DeleteModal.tsx → shadcn/modal/DeleteModal.tsx} +1 -1
  344. package/src/core/components/shadcn/{dialog.tsx → modal/dialog.tsx} +43 -32
  345. package/src/core/components/shadcn/modal/index.ts +3 -0
  346. package/src/core/components/shadcn/popover.tsx +4 -2
  347. package/src/core/components/shadcn/selectBox.tsx +71 -52
  348. package/src/core/components/shadcn/tabs.tsx +36 -19
  349. package/src/core/components/shadcn/textarea.tsx +43 -2
  350. package/src/core/components/shadcn/tooltip.tsx +23 -17
  351. package/src/features/agent/PayloadBuilder.tsx +70 -9
  352. package/src/features/agent/chat/AgentChart.tsx +46 -678
  353. package/src/features/agent/chat/AskUserWidget.tsx +4 -3
  354. package/src/features/agent/chat/DocumentPanel.tsx +120 -0
  355. package/src/features/agent/chat/DocumentTabBar.tsx +49 -0
  356. package/src/features/agent/chat/ModernAgentConversation.tsx +403 -549
  357. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +162 -55
  358. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +40 -10
  359. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +12 -16
  360. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +3 -3
  361. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +68 -75
  362. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +206 -94
  363. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +22 -5
  364. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +295 -113
  365. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +11 -8
  366. package/src/features/agent/chat/ModernAgentOutput/utils.ts +133 -4
  367. package/src/features/agent/chat/SkillWidgetProvider.tsx +32 -15
  368. package/src/features/agent/chat/hooks/useAgentPlans.ts +190 -0
  369. package/src/features/agent/chat/hooks/useAgentStream.ts +239 -0
  370. package/src/features/agent/chat/hooks/useDocumentPanel.ts +118 -0
  371. package/src/features/agent/chat/hooks/useFileProcessing.ts +126 -0
  372. package/src/features/agent/chat/index.ts +18 -17
  373. package/src/features/agent/chat/types/document.ts +4 -0
  374. package/src/features/agent/index.ts +0 -2
  375. package/src/features/store/collections/BrowseCollectionView.tsx +5 -8
  376. package/src/features/store/collections/CreateCollection.tsx +8 -8
  377. package/src/features/store/collections/EditCollectionView.tsx +1 -1
  378. package/src/features/store/objects/DocumentSearchResults.tsx +9 -13
  379. package/src/features/store/objects/ExportPropertiesModal.tsx +9 -7
  380. package/src/features/store/objects/components/ContentOverview.tsx +29 -155
  381. package/src/features/store/objects/components/PropertiesEditorModal.tsx +0 -1
  382. package/src/features/store/objects/components/SelectDocumentModal.tsx +6 -6
  383. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  384. package/src/features/store/objects/components/index.ts +1 -1
  385. package/src/features/store/objects/components/useDownloadFile.ts +237 -0
  386. package/src/features/store/objects/search/DocumentSearchContext.ts +1 -2
  387. package/src/features/store/objects/selection/SelectionActions.tsx +0 -4
  388. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +13 -13
  389. package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +2 -6
  390. package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +1 -3
  391. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +8 -8
  392. package/src/features/store/objects/upload/DocumentUploadModal.tsx +25 -25
  393. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +16 -10
  394. package/src/features/store/types/ObjectSchemaEditor.tsx +32 -29
  395. package/src/features/store/types/SelectContentType.tsx +3 -3
  396. package/src/features/store/types/SelectContentTypeModal.tsx +17 -30
  397. package/src/features/store/types/TableLayoutEditor.tsx +14 -18
  398. package/src/features/user/UserInfo.tsx +176 -10
  399. package/src/features/utils/print.ts +0 -1
  400. package/src/layout/AppLayout.tsx +16 -44
  401. package/src/layout/Sidebar.tsx +7 -5
  402. package/src/router/HistoryNavigator.ts +9 -1
  403. package/src/router/Nav.tsx +7 -2
  404. package/src/session/UserSession.ts +38 -9
  405. package/src/session/UserSessionProvider.tsx +3 -2
  406. package/src/shell/apps/AppProjectSelector.tsx +2 -2
  407. package/src/shell/apps/StandaloneApp.tsx +3 -3
  408. package/src/shell/login/InviteAcceptModal.tsx +6 -6
  409. package/src/shell/login/SignInModal.tsx +1 -1
  410. package/src/shell/login/SignupForm.tsx +3 -3
  411. package/src/shell/login/UserInfo.tsx +5 -5
  412. package/src/widgets/json-view/JSONCode.tsx +1 -3
  413. package/src/widgets/json-view/JSONDisplay.tsx +1 -1
  414. package/src/widgets/markdown/ArtifactContentRenderer.tsx +115 -14
  415. package/src/widgets/markdown/MarkdownFigure.tsx +100 -0
  416. package/src/widgets/markdown/MarkdownRenderer.tsx +62 -9
  417. package/src/widgets/markdown/MermaidDiagram.tsx +97 -5
  418. package/src/widgets/markdown/codeBlockHandlers.test.tsx +3 -34
  419. package/src/widgets/markdown/codeBlockHandlers.tsx +47 -42
  420. package/src/widgets/markdown/index.ts +1 -0
  421. package/src/widgets/markdown/markdown.css +192 -0
  422. package/src/widgets/markdown/normalizeCustomSchemeLinks.test.ts +86 -0
  423. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +91 -0
  424. package/src/widgets/markdown/normalizeDirectives.ts +50 -0
  425. package/src/widgets/markdown/remarkDirectiveHandler.ts +119 -0
  426. package/src/widgets/monacoEditor/MonacoEditor.tsx +8 -22
  427. package/src/widgets/schema-editor/ManagedSchema.ts +1 -1
  428. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +5 -5
  429. package/src/widgets/schema-editor/json-schema4-utils.ts +1 -1
  430. package/lib/esm/core/components/Badge.js.map +0 -1
  431. package/lib/esm/core/components/Button.js +0 -32
  432. package/lib/esm/core/components/Button.js.map +0 -1
  433. package/lib/esm/core/components/ConfirmModal.js +0 -10
  434. package/lib/esm/core/components/ConfirmModal.js.map +0 -1
  435. package/lib/esm/core/components/DeleteModal.js.map +0 -1
  436. package/lib/esm/core/components/MessageBox.js.map +0 -1
  437. package/lib/esm/core/components/Modal.js +0 -26
  438. package/lib/esm/core/components/Modal.js.map +0 -1
  439. package/lib/esm/core/components/Panel.js +0 -8
  440. package/lib/esm/core/components/Panel.js.map +0 -1
  441. package/lib/esm/core/components/SelectBox.js +0 -67
  442. package/lib/esm/core/components/SelectBox.js.map +0 -1
  443. package/lib/esm/core/components/shadcn/dialog.js.map +0 -1
  444. package/lib/esm/core/components/tabs/Tabs.js +0 -78
  445. package/lib/esm/core/components/tabs/Tabs.js.map +0 -1
  446. package/lib/esm/core/components/tabs/TabsContext.js +0 -7
  447. package/lib/esm/core/components/tabs/TabsContext.js.map +0 -1
  448. package/lib/esm/core/components/tabs/index.js +0 -3
  449. package/lib/esm/core/components/tabs/index.js.map +0 -1
  450. package/lib/esm/features/agent/createChartTool.js +0 -632
  451. package/lib/esm/features/agent/createChartTool.js.map +0 -1
  452. package/lib/esm/features/agent/examples.js +0 -295
  453. package/lib/esm/features/agent/examples.js.map +0 -1
  454. package/lib/esm/features/agent/visualization.js +0 -165
  455. package/lib/esm/features/agent/visualization.js.map +0 -1
  456. package/lib/esm/features/store/objects/components/useDownloadObject.js +0 -21
  457. package/lib/esm/features/store/objects/components/useDownloadObject.js.map +0 -1
  458. package/lib/types/core/components/Badge.d.ts.map +0 -1
  459. package/lib/types/core/components/Button.d.ts +0 -14
  460. package/lib/types/core/components/Button.d.ts.map +0 -1
  461. package/lib/types/core/components/ConfirmModal.d.ts.map +0 -1
  462. package/lib/types/core/components/DeleteModal.d.ts.map +0 -1
  463. package/lib/types/core/components/MessageBox.d.ts.map +0 -1
  464. package/lib/types/core/components/Modal.d.ts +0 -30
  465. package/lib/types/core/components/Modal.d.ts.map +0 -1
  466. package/lib/types/core/components/Panel.d.ts.map +0 -1
  467. package/lib/types/core/components/SelectBox.d.ts +0 -36
  468. package/lib/types/core/components/SelectBox.d.ts.map +0 -1
  469. package/lib/types/core/components/shadcn/dialog.d.ts.map +0 -1
  470. package/lib/types/core/components/tabs/Tabs.d.ts +0 -25
  471. package/lib/types/core/components/tabs/Tabs.d.ts.map +0 -1
  472. package/lib/types/core/components/tabs/TabsContext.d.ts +0 -17
  473. package/lib/types/core/components/tabs/TabsContext.d.ts.map +0 -1
  474. package/lib/types/core/components/tabs/index.d.ts +0 -3
  475. package/lib/types/core/components/tabs/index.d.ts.map +0 -1
  476. package/lib/types/features/agent/createChartTool.d.ts +0 -178
  477. package/lib/types/features/agent/createChartTool.d.ts.map +0 -1
  478. package/lib/types/features/agent/examples.d.ts +0 -59
  479. package/lib/types/features/agent/examples.d.ts.map +0 -1
  480. package/lib/types/features/agent/visualization.d.ts +0 -95
  481. package/lib/types/features/agent/visualization.d.ts.map +0 -1
  482. package/lib/types/features/store/objects/components/useDownloadObject.d.ts +0 -4
  483. package/lib/types/features/store/objects/components/useDownloadObject.d.ts.map +0 -1
  484. package/src/core/components/Button.tsx +0 -63
  485. package/src/core/components/Modal.tsx +0 -144
  486. package/src/core/components/Panel.tsx +0 -34
  487. package/src/core/components/SelectBox.tsx +0 -188
  488. package/src/core/components/tabs/Tabs.tsx +0 -132
  489. package/src/core/components/tabs/TabsContext.ts +0 -25
  490. package/src/core/components/tabs/index.ts +0 -2
  491. package/src/features/agent/CHART_INSTRUCTIONS.md +0 -228
  492. package/src/features/agent/createChartTool.ts +0 -643
  493. package/src/features/agent/examples.ts +0 -321
  494. package/src/features/agent/visualization.ts +0 -227
  495. package/src/features/store/objects/components/useDownloadObject.ts +0 -29
  496. /package/lib/esm/core/components/{MessageBox.js → shadcn/MessageBox.js} +0 -0
  497. /package/lib/types/core/components/{MessageBox.d.ts → shadcn/MessageBox.d.ts} +0 -0
  498. /package/lib/types/core/components/{ConfirmModal.d.ts → shadcn/modal/ConfirmModal.d.ts} +0 -0
  499. /package/lib/types/core/components/{DeleteModal.d.ts → shadcn/modal/DeleteModal.d.ts} +0 -0
  500. /package/src/core/components/{MessageBox.tsx → shadcn/MessageBox.tsx} +0 -0
@@ -15,7 +15,7 @@ import { useEffect, useRef, useState } from "react";
15
15
  import { useDocumentFilterGroups, useDocumentFilterHandler } from "../../facets/DocumentsFacetsNav";
16
16
  import { ContentDispositionButton } from './components/ContentDispositionButton';
17
17
  import { ContentOverview } from './components/ContentOverview';
18
- import { useDownloadDocument } from './components/useDownloadObject';
18
+ import { useDownloadFile } from './components/useDownloadFile';
19
19
  import { VectorSearchWidget } from './components/VectorSearchWidget';
20
20
  import { DocumentTable } from './DocumentTable';
21
21
  import { ExtendedColumnLayout } from './layout/DocumentTableColumn';
@@ -301,11 +301,11 @@ function Toolsbar(props: ToolsbarProps) {
301
301
  handleFilterChange,
302
302
  handleVectorSearch,
303
303
  handleRefetch,
304
- setIsGridView
304
+ setIsGridView,
305
305
  } = props;
306
306
 
307
307
  return (
308
- <div className="sticky top-0 z-10 bg-background py-2">
308
+ <div className="sticky top-0 z-10 bg-background py-2 flex justify-between items-center">
309
309
  {
310
310
  allowFilter && (
311
311
  <FilterProvider
@@ -320,10 +320,6 @@ function Toolsbar(props: ToolsbarProps) {
320
320
  }
321
321
  <FilterBtn />
322
322
  </div>
323
- <div className="flex gap-1 items-center">
324
- <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
325
- <ContentDispositionButton onUpdate={setIsGridView} />
326
- </div>
327
323
  </div>
328
324
  <div className="flex gap-2 items-center pt-2">
329
325
  <FilterBar />
@@ -340,13 +336,13 @@ function Toolsbar(props: ToolsbarProps) {
340
336
  allowSearch && <VectorSearchWidget onChange={handleVectorSearch} isLoading={isLoading} refresh={refreshTrigger} />
341
337
  }
342
338
  </div>
343
- <div className="flex gap-1 items-center">
344
- <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
345
- <ContentDispositionButton onUpdate={setIsGridView} />
346
- </div>
347
339
  </div>
348
340
  )
349
341
  }
342
+ <div className="flex gap-1 items-center">
343
+ <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
344
+ <ContentDispositionButton onUpdate={setIsGridView} />
345
+ </div>
350
346
  </div>
351
347
  );
352
348
  }
@@ -359,7 +355,7 @@ function OverviewDrawer({ object, onClose }: OverviewDrawerProps) {
359
355
  const { store } = useUserSession();
360
356
  const toast = useToast();
361
357
  const navigate = useNavigate();
362
- const onDownload = useDownloadDocument(store, toast, object?.content?.source, object?.name || object?.content?.name);
358
+ const { downloadFromContentSource } = useDownloadFile({ client: store, toast });
363
359
 
364
360
  return object ? (
365
361
  <SidePanel title={object.properties?.title || object.name} isOpen={true} onClose={onClose}>
@@ -368,7 +364,7 @@ function OverviewDrawer({ object, onClose }: OverviewDrawerProps) {
368
364
  <ExternalLink className="size-4" />
369
365
  </Button>
370
366
  {object.content?.source && (
371
- <Button variant="ghost" size="sm" title="Download" onClick={onDownload}>
367
+ <Button variant="ghost" size="sm" title="Download" onClick={() => downloadFromContentSource(object.content!.source!, object.name || object.content?.name)}>
372
368
  <Download className="size-4" />
373
369
  </Button>
374
370
  )}
@@ -14,14 +14,16 @@ export function ExportPropertiesModal({ isExporting, isOpen, onClose }: ExportPr
14
14
  const title = "Export Object Properties";
15
15
 
16
16
  return (
17
- <Modal onClose={() => onClose(undefined)} isOpen={isOpen} className="relative overflow-visible">
17
+ <Modal onClose={() => onClose(undefined)} isOpen={isOpen}>
18
18
  <ModalTitle>{title}</ModalTitle>
19
- {!isExporting &&
20
- <SelectPanel onClose={onClose} />
21
- }
22
- {isExporting &&
23
- <WaitingPanel />
24
- }
19
+ <ModalBody>
20
+ {!isExporting &&
21
+ <SelectPanel onClose={onClose} />
22
+ }
23
+ {isExporting &&
24
+ <WaitingPanel />
25
+ }
26
+ </ModalBody>
25
27
  </Modal>
26
28
  )
27
29
  }
@@ -1,16 +1,17 @@
1
- import { useEffect, useState, memo, useRef, type RefObject } from "react";
1
+ import { memo, useEffect, useRef, useState, type RefObject } from "react";
2
2
 
3
+ import { AUDIO_RENDITION_NAME, AudioMetadata, ContentNature, ContentObject, ContentObjectStatus, DocAnalyzerProgress, DocProcessorOutputFormat, DocumentMetadata, ImageRenditionFormat, MarkdownRenditionFormat, PDF_RENDITION_NAME, POSTER_RENDITION_NAME, VideoMetadata, WorkflowExecutionStatus } from "@vertesia/common";
4
+ import { Button, Portal, ResizableHandle, ResizablePanel, ResizablePanelGroup, Spinner, useToast } from "@vertesia/ui/core";
5
+ import { NavLink } from "@vertesia/ui/router";
3
6
  import { useUserSession } from "@vertesia/ui/session";
4
- import { Button, Portal, ResizableHandle, ResizablePanel, ResizablePanelGroup, Spinner, useToast, VModal, VModalBody, VModalFooter, VModalTitle } from "@vertesia/ui/core";
5
7
  import { JSONDisplay, MarkdownRenderer, Progress, XMLViewer } from "@vertesia/ui/widgets";
6
- import { ContentNature, ContentObject, ContentObjectStatus, DocAnalyzerProgress, DocProcessorOutputFormat, DocumentMetadata, ImageRenditionFormat, VideoMetadata, AudioMetadata, POSTER_RENDITION_NAME, AUDIO_RENDITION_NAME, WorkflowExecutionStatus, PDF_RENDITION_NAME } from "@vertesia/common";
7
- import { Copy, Download, SquarePen, AlertTriangle, FileSearch } from "lucide-react";
8
- import { isPreviewableAsPdf, printElementToPdf, getWorkflowStatusColor, getWorkflowStatusName } from "../../../utils/index.js";
9
- import { PropertiesEditorModal } from "./PropertiesEditorModal";
10
- import { NavLink } from "@vertesia/ui/router";
8
+ import { AlertTriangle, Copy, Download, FileSearch, SquarePen } from "lucide-react";
11
9
  import { MagicPdfView } from "../../../magic-pdf";
12
10
  import { SimplePdfViewer } from "../../../pdf-viewer";
13
- import { useObjectText, usePdfProcessingStatus, useOfficePdfConversion } from "./useContentPanelHooks.js";
11
+ import { getWorkflowStatusColor, getWorkflowStatusName, isPreviewableAsPdf } from "../../../utils/index.js";
12
+ import { PropertiesEditorModal } from "./PropertiesEditorModal";
13
+ import { useObjectText, useOfficePdfConversion, usePdfProcessingStatus } from "./useContentPanelHooks.js";
14
+ import { useDownloadFile } from "./useDownloadFile.js";
14
15
 
15
16
  // Web-supported image formats for browser display
16
17
  const WEB_SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'];
@@ -533,14 +534,11 @@ function TextActions({
533
534
  text,
534
535
  fullText,
535
536
  handleCopyContent,
536
- textContainerRef,
537
537
  }: TextActionsProps) {
538
538
  const { client } = useUserSession();
539
539
  const toast = useToast();
540
- const [loadingFormat, setLoadingFormat] = useState<"docx" | "pdf" | null>(null);
541
- const [isPdfModalOpen, setIsPdfModalOpen] = useState(false);
542
-
543
540
  const content = object.content;
541
+ const { renderDocument, isDownloading } = useDownloadFile({ client, toast });
544
542
 
545
543
  const isMarkdown =
546
544
  content &&
@@ -550,137 +548,27 @@ function TextActions({
550
548
  // Get content processor type for file extension detection
551
549
  const contentProcessorType = getContentProcessorType(object);
552
550
 
553
- const handleExportDocument = async (format: "docx" | "pdf") => {
551
+ const handleExportDocument = async (format: MarkdownRenditionFormat) => {
554
552
  // Prevent multiple concurrent exports
555
- if (loadingFormat) return;
556
-
557
- setLoadingFormat(format);
553
+ if (isDownloading) return;
558
554
 
559
555
  // Show immediate feedback
560
556
  toast({
561
557
  status: "info",
562
558
  title: `Preparing ${format.toUpperCase()}`,
563
- description: "Fetching your document...",
559
+ description: "Rendering your document...",
564
560
  duration: 2000,
565
561
  });
566
562
 
567
- try {
568
- // Request document rendition from the server
569
- const response = await client.objects.getRendition(object.id, {
570
- format: format as any, // We're extending the format type
571
- generate_if_missing: true,
572
- sign_url: true,
573
- });
574
-
575
- if (response.status === "generating") {
576
- toast({
577
- status: "info",
578
- title: "Generating document",
579
- description: `Please wait while we prepare your ${format.toUpperCase()} file...`,
580
- duration: 5000,
581
- });
582
-
583
- // Poll for completion
584
- setTimeout(() => handleExportDocument(format), 3000);
585
- return;
586
- }
587
-
588
- if (response.status === "failed") {
589
- throw new Error("Document generation failed");
590
- }
591
-
592
- // Download the generated file or open in new window
593
- if (response.renditions && response.renditions.length > 0) {
594
- const downloadUrl = response.renditions[0];
595
-
596
- if (format === 'pdf') {
597
- // Open PDF in new window
598
- window.open(downloadUrl, '_blank');
599
- toast({
600
- status: "success",
601
- title: "PDF opened",
602
- description: "PDF document opened in a new window",
603
- duration: 2000,
604
- });
605
- } else {
606
- // Download DOCX file
607
- const link = document.createElement("a");
608
- link.href = downloadUrl;
609
- link.download = `${object.name || "document"}.${format}`;
610
- document.body.appendChild(link);
611
- link.click();
612
- document.body.removeChild(link);
613
-
614
- toast({
615
- status: "success",
616
- title: "Document exported",
617
- description: `Successfully exported to ${format.toUpperCase()} format`,
618
- duration: 2000,
619
- });
620
- }
621
- }
622
- } catch (err) {
623
- console.error(`Failed to export document as ${format}:`, err);
624
- toast({
625
- status: "error",
626
- title: "Export failed",
627
- description: `Failed to export document to ${format.toUpperCase()} format`,
628
- duration: 5000,
629
- });
630
- } finally {
631
- setLoadingFormat(null);
632
- }
633
- };
634
-
635
- const handleExportDocx = () => handleExportDocument("docx");
636
-
637
- const handleClientPdfExport = () => {
638
- if (!textContainerRef.current) {
639
- toast({
640
- status: "error",
641
- title: "PDF export failed",
642
- description: "No content available to export",
643
- duration: 3000,
644
- });
645
- return;
646
- }
647
- setIsPdfModalOpen(true);
648
- };
649
-
650
- const handleConfirmClientPdfExport = () => {
651
- if (!textContainerRef.current) {
652
- toast({
653
- status: "error",
654
- title: "PDF export failed",
655
- description: "No content available to export",
656
- duration: 3000,
657
- });
658
- return;
659
- }
660
-
661
- const baseName = object.name || object.id;
662
- const pdfTitle = `${baseName || "document"} - content`;
663
- const success = printElementToPdf(textContainerRef.current, pdfTitle);
664
-
665
- if (!success) {
666
- toast({
667
- status: "error",
668
- title: "PDF export failed",
669
- description: "Unable to open print preview",
670
- duration: 4000,
671
- });
672
- return;
673
- }
674
-
675
- toast({
676
- status: "success",
677
- title: "PDF export ready",
678
- description: "Use your browser's Print dialog to save as PDF",
679
- duration: 4000,
563
+ await renderDocument(object.id, {
564
+ format,
565
+ title: object.name || "document",
680
566
  });
681
- setIsPdfModalOpen(false);
682
567
  };
683
568
 
569
+ const handleExportDocx = () => handleExportDocument(MarkdownRenditionFormat.docx);
570
+ const handleExportPdf = () => handleExportDocument(MarkdownRenditionFormat.pdf);
571
+
684
572
  const handleDownloadText = (e: React.MouseEvent) => {
685
573
  e.preventDefault();
686
574
  e.stopPropagation();
@@ -731,10 +619,10 @@ function TextActions({
731
619
  variant="ghost"
732
620
  size="sm"
733
621
  onClick={handleExportDocx}
734
- disabled={loadingFormat !== null}
622
+ disabled={isDownloading}
735
623
  className="flex items-center gap-2"
736
624
  >
737
- {loadingFormat === "docx" ? (
625
+ {isDownloading ? (
738
626
  <Spinner size="sm" />
739
627
  ) : (
740
628
  <Download className="size-4" />
@@ -744,35 +632,21 @@ function TextActions({
744
632
  <Button
745
633
  variant="ghost"
746
634
  size="sm"
747
- onClick={handleClientPdfExport}
635
+ onClick={handleExportPdf}
636
+ disabled={isDownloading}
748
637
  className="flex items-center gap-2"
749
638
  >
750
- <Download className="size-4" />
639
+ {isDownloading ? (
640
+ <Spinner size="sm" />
641
+ ) : (
642
+ <Download className="size-4" />
643
+ )}
751
644
  PDF
752
645
  </Button>
753
646
  </>
754
647
  )}
755
648
  </div>
756
649
  </div>
757
- <VModal isOpen={isPdfModalOpen} onClose={() => setIsPdfModalOpen(false)}>
758
- <VModalTitle>Export document as PDF</VModalTitle>
759
- <VModalBody>
760
- <p className="mb-2">
761
- This will open your browser&apos;s print dialog with the current document content.
762
- </p>
763
- <p className="text-sm text-muted">
764
- To save a PDF, choose &quot;Save as PDF&quot; or a similar option in the print dialog.
765
- </p>
766
- </VModalBody>
767
- <VModalFooter align="right">
768
- <Button variant="ghost" size="sm" onClick={() => setIsPdfModalOpen(false)}>
769
- Cancel
770
- </Button>
771
- <Button size="sm" onClick={handleConfirmClientPdfExport}>
772
- Open print dialog
773
- </Button>
774
- </VModalFooter>
775
- </VModal>
776
650
  </>
777
651
  );
778
652
  }
@@ -911,7 +785,7 @@ function VideoPanel({ object }: { object: ContentObject }) {
911
785
 
912
786
  // Find mp4 or webm rendition by mime type, preferring mp4
913
787
  const webRendition = renditions.find(r => r.content.type === 'video/mp4') ||
914
- renditions.find(r => r.content.type === 'video/webm');
788
+ renditions.find(r => r.content.type === 'video/webm');
915
789
 
916
790
  // Check if original file is web-compatible
917
791
  const isOriginalWebSupported = content?.type && WEB_SUPPORTED_VIDEO_FORMATS.includes(content.type);
@@ -213,7 +213,6 @@ export function PropertiesEditorModal({ isOpen, onClose, object, refetch }: Prop
213
213
  onChange={(update) => handleEditorChange(update.state.doc.toString())}
214
214
  beforeMount={beforeMount}
215
215
  theme={theme === 'dark' ? 'vs-dark' : 'vs'}
216
- minLines={40}
217
216
  />
218
217
  </div>
219
218
  </ModalBody>
@@ -1,5 +1,5 @@
1
1
  import { ContentObjectItem } from "@vertesia/common";
2
- import { VModal, VModalBody, VModalTitle } from "@vertesia/ui/core";
2
+ import { Modal, ModalBody, ModalTitle } from "@vertesia/ui/core";
3
3
  import { SelectDocument } from "./SelectDocument";
4
4
 
5
5
  interface SelectDocumentModalProps {
@@ -10,11 +10,11 @@ interface SelectDocumentModalProps {
10
10
  }
11
11
  export function SelectDocumentModal({ isOpen, onClose }: SelectDocumentModalProps) {
12
12
  return (
13
- <VModal onClose={() => onClose()} isOpen={!!isOpen} className='min-w-[60vw]'>
14
- <VModalTitle>Select Content</VModalTitle>
15
- <VModalBody className='pt-0 overflow-y-auto max-h-[80vh] min-h-[80vh]'>
13
+ <Modal onClose={() => onClose()} isOpen={!!isOpen} className='min-w-[60vw]'>
14
+ <ModalTitle>Select Content</ModalTitle>
15
+ <ModalBody className='pt-0 overflow-y-auto max-h-[80vh] min-h-[80vh]'>
16
16
  {isOpen && <SelectDocument onChange={onClose} />}
17
- </VModalBody>
18
- </VModal>
17
+ </ModalBody>
18
+ </Modal>
19
19
  )
20
20
  }
@@ -103,8 +103,8 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
103
103
  };
104
104
 
105
105
  return (
106
- <div className="flex gap-1 items-center w-1/2">
107
- <Input placeholder="Type what you are looking for, or select a filter" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} />
106
+ <div className="flex gap-1 items-center">
107
+ <Input placeholder="Type what you are looking for, or select a filter" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} className='min-w-[200px]' />
108
108
  <Button variant="ghost" onClick={() => setShowSettings(true)} alt="Semantic search settings" className="ml-1"><Settings size={18} /></Button>
109
109
  <Modal isOpen={showSettings} onClose={() => setShowSettings(false)}>
110
110
  <ModalTitle>Search Types</ModalTitle>
@@ -4,6 +4,6 @@ export * from "./DocumentIcon"
4
4
  export * from "./DocumentInput"
5
5
  export * from "./SelectDocument"
6
6
  export * from "./SelectDocumentModal"
7
- export * from "./useDownloadObject"
7
+ export * from "./useDownloadFile"
8
8
  export * from "./PropertiesEditorModal"
9
9
  export * from "./SaveVersionConfirmModal"
@@ -0,0 +1,237 @@
1
+ import { VertesiaClient, ZenoClient } from "@vertesia/client";
2
+ import { MarkdownRenditionFormat, RenderMarkdownPayload } from "@vertesia/common";
3
+ import { useCallback, useState } from "react";
4
+ import { ToastFn } from "@vertesia/ui/core";
5
+
6
+ export interface UseDownloadFileOptions {
7
+ client: VertesiaClient | ZenoClient;
8
+ toast: ToastFn;
9
+ }
10
+
11
+ export interface RenderAndDownloadOptions {
12
+ /** Format to render to */
13
+ format: MarkdownRenditionFormat;
14
+ /** Title for the document */
15
+ title?: string;
16
+ /** Artifact run ID for resolving artifact URLs in content */
17
+ artifactRunId?: string;
18
+ /** Additional Pandoc options */
19
+ pandocOptions?: string[];
20
+ }
21
+
22
+ export interface UseDownloadFileResult {
23
+ /** Download a file from a content source URI (gs:// or file path) via the files API */
24
+ downloadFromContentSource: (uri: string, filename?: string) => Promise<void>;
25
+ /** Download a file from a direct URL (already signed or public) */
26
+ downloadFromUrl: (url: string, filename?: string) => void;
27
+ /** Render a document by objectId to PDF/DOCX and download the result */
28
+ renderDocument: (objectId: string, options: RenderAndDownloadOptions) => Promise<void>;
29
+ /** Render markdown content to PDF/DOCX and download the result */
30
+ renderContent: (content: string, options: RenderAndDownloadOptions) => Promise<void>;
31
+ /** Whether a download is currently in progress */
32
+ isDownloading: boolean;
33
+ }
34
+
35
+ /**
36
+ * Hook for downloading files from various sources.
37
+ * Handles GCS URIs (via client.files API), direct URLs, and markdown rendering.
38
+ */
39
+ export function useDownloadFile({ client, toast }: UseDownloadFileOptions): UseDownloadFileResult {
40
+ const [isDownloading, setIsDownloading] = useState(false);
41
+
42
+ /**
43
+ * Download a file from a content source URI using the files API to get a signed URL.
44
+ */
45
+ const downloadFromContentSource = useCallback(async (uri: string, filename?: string) => {
46
+ if (!uri) return;
47
+
48
+ setIsDownloading(true);
49
+ try {
50
+ const result = await client.files.getDownloadUrlWithOptions({
51
+ file: uri,
52
+ name: filename
53
+ });
54
+
55
+ // Trigger download
56
+ triggerDownload(result.url, filename);
57
+ } catch (err) {
58
+ toast({
59
+ status: "error",
60
+ title: "Download failed",
61
+ description: err instanceof Error ? err.message : "Failed to get download URL",
62
+ duration: 5000,
63
+ });
64
+ } finally {
65
+ setIsDownloading(false);
66
+ }
67
+ }, [client, toast]);
68
+
69
+ /**
70
+ * Download a file from a direct URL (already signed or public).
71
+ */
72
+ const downloadFromUrl = useCallback((url: string, filename?: string) => {
73
+ if (!url) return;
74
+ triggerDownload(url, filename);
75
+ }, []);
76
+
77
+ /**
78
+ * Internal helper to handle the render result and trigger download.
79
+ */
80
+ const handleRenderResult = useCallback(async (
81
+ payload: RenderMarkdownPayload,
82
+ filename: string
83
+ ) => {
84
+ // Get the store client (ZenoClient has rendering, VertesiaClient has store.rendering)
85
+ const storeClient = 'store' in client ? client.store : client;
86
+
87
+ const rendition = await storeClient.rendering.render(payload);
88
+
89
+ // Use download_url if available (direct signed URL), otherwise fall back to file_uri
90
+ if (rendition.download_url) {
91
+ triggerDownload(rendition.download_url, filename);
92
+ } else if (rendition.file_uri) {
93
+ const result = await client.files.getDownloadUrlWithOptions({
94
+ file: rendition.file_uri,
95
+ name: filename
96
+ });
97
+ triggerDownload(result.url, filename);
98
+ } else {
99
+ throw new Error("No download URL or file URI in response");
100
+ }
101
+ }, [client]);
102
+
103
+ /**
104
+ * Render a document by objectId and download the result.
105
+ */
106
+ const renderDocument = useCallback(async (
107
+ objectId: string,
108
+ options: RenderAndDownloadOptions
109
+ ) => {
110
+ setIsDownloading(true);
111
+ try {
112
+ const filename = `${options.title || "document"}.${options.format}`;
113
+
114
+ await handleRenderResult({
115
+ object_id: objectId,
116
+ format: options.format,
117
+ title: options.title,
118
+ pandoc_options: options.pandocOptions,
119
+ }, filename);
120
+
121
+ toast({
122
+ status: "success",
123
+ title: "Document exported",
124
+ description: `Successfully exported to ${options.format.toUpperCase()}`,
125
+ duration: 2000,
126
+ });
127
+ } catch (err) {
128
+ toast({
129
+ status: "error",
130
+ title: "Export failed",
131
+ description: err instanceof Error ? err.message : "Failed to export document",
132
+ duration: 5000,
133
+ });
134
+ } finally {
135
+ setIsDownloading(false);
136
+ }
137
+ }, [handleRenderResult, toast]);
138
+
139
+ /**
140
+ * Render markdown content and download the result.
141
+ */
142
+ const renderContent = useCallback(async (
143
+ content: string,
144
+ options: RenderAndDownloadOptions
145
+ ) => {
146
+ setIsDownloading(true);
147
+ try {
148
+ const filename = `${options.title || "export"}.${options.format}`;
149
+
150
+ await handleRenderResult({
151
+ content,
152
+ format: options.format,
153
+ title: options.title,
154
+ artifact_run_id: options.artifactRunId,
155
+ pandoc_options: options.pandocOptions,
156
+ }, filename);
157
+
158
+ toast({
159
+ status: "success",
160
+ title: "Content exported",
161
+ description: `Successfully exported to ${options.format.toUpperCase()}`,
162
+ duration: 2000,
163
+ });
164
+ } catch (err) {
165
+ toast({
166
+ status: "error",
167
+ title: "Export failed",
168
+ description: err instanceof Error ? err.message : "Failed to export content",
169
+ duration: 5000,
170
+ });
171
+ } finally {
172
+ setIsDownloading(false);
173
+ }
174
+ }, [handleRenderResult, toast]);
175
+
176
+ return {
177
+ downloadFromContentSource,
178
+ downloadFromUrl,
179
+ renderDocument,
180
+ renderContent,
181
+ isDownloading,
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Trigger a file download in the browser.
187
+ * Attempts to fetch and create a blob for proper filename control.
188
+ * Falls back to direct link if CORS blocks the fetch.
189
+ */
190
+ function triggerDownload(url: string, filename?: string): void {
191
+ // Try to fetch and create blob for proper filename control
192
+ fetch(url)
193
+ .then(response => {
194
+ if (!response.ok) throw new Error(`HTTP ${response.status}`);
195
+ return response.blob();
196
+ })
197
+ .then(blob => {
198
+ const blobUrl = URL.createObjectURL(blob);
199
+ const a = document.createElement("a");
200
+ a.href = blobUrl;
201
+ a.download = filename || getFilenameFromUrl(url);
202
+ a.style.display = "none";
203
+ document.body.appendChild(a);
204
+ a.click();
205
+ setTimeout(() => {
206
+ document.body.removeChild(a);
207
+ URL.revokeObjectURL(blobUrl);
208
+ }, 100);
209
+ })
210
+ .catch(() => {
211
+ // CORS or fetch failed - fall back to direct link download
212
+ const a = document.createElement("a");
213
+ a.href = url;
214
+ a.download = filename || getFilenameFromUrl(url);
215
+ a.target = "_blank";
216
+ a.rel = "noopener noreferrer";
217
+ a.style.display = "none";
218
+ document.body.appendChild(a);
219
+ a.click();
220
+ setTimeout(() => {
221
+ document.body.removeChild(a);
222
+ }, 100);
223
+ });
224
+ }
225
+
226
+ /**
227
+ * Extract filename from URL path.
228
+ */
229
+ function getFilenameFromUrl(url: string): string {
230
+ try {
231
+ const pathname = new URL(url).pathname;
232
+ const segments = pathname.split("/");
233
+ return segments[segments.length - 1] || "download";
234
+ } catch {
235
+ return "download";
236
+ }
237
+ }
@@ -61,7 +61,7 @@ export class DocumentSearch implements SearchInterface {
61
61
 
62
62
  clearFilters(autoSearch: boolean = true) {
63
63
  // Preserve search-related fields when clearing filters
64
- const { parent, full_text, vector, weights, score_aggregation, dynamic_scaling, limit, all_revisions } = this.query;
64
+ const { parent, full_text, vector, weights, score_aggregation, dynamic_scaling, limit } = this.query;
65
65
  this.query = {
66
66
  parent,
67
67
  ...(full_text !== undefined && { full_text }),
@@ -69,7 +69,6 @@ export class DocumentSearch implements SearchInterface {
69
69
  ...(weights !== undefined && { weights }),
70
70
  ...(score_aggregation !== undefined && { score_aggregation }),
71
71
  ...(dynamic_scaling !== undefined && { dynamic_scaling }),
72
- ...(all_revisions !== undefined && { all_revisions }),
73
72
  ...(limit !== undefined && { limit })
74
73
  };
75
74