@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
@@ -1,14 +1,15 @@
1
1
  import { useMemo, useRef, useState } from 'react';
2
2
  import { ColumnLayout, ContentObjectType } from '@vertesia/common';
3
- import { Button, useToast, useTheme } from '@vertesia/ui/core';
3
+ import { Button, useToast, useTheme, Panel } from '@vertesia/ui/core';
4
4
  import { useUserSession } from '@vertesia/ui/session';
5
5
  import { MonacoEditor, EditorApi } from '@vertesia/ui/widgets';
6
6
 
7
7
  interface TableLayoutEditorProps {
8
8
  objectType: ContentObjectType;
9
9
  onLayoutUpdate: (value: ColumnLayout[] | undefined) => void;
10
+ readonly?: boolean;
10
11
  }
11
- export function TableLayoutEditor({ objectType, onLayoutUpdate }: TableLayoutEditorProps) {
12
+ export function TableLayoutEditor({ objectType, onLayoutUpdate, readonly = false }: TableLayoutEditorProps) {
12
13
  const toast = useToast();
13
14
  const { theme } = useTheme();
14
15
 
@@ -78,22 +79,17 @@ export function TableLayoutEditor({ objectType, onLayoutUpdate }: TableLayoutEdi
78
79
 
79
80
 
80
81
  return (
81
- <div className="mx-2 my-2 rounded-2xl border border-solid shadow-xs">
82
- <div className="flex items-center rounded-t-md border-b gap-x-2 py-2 pl-4 pr-2">
83
- <div className="text-base font-semibold ">Table Layout Editor</div>
84
- <div className="ml-auto flex gap-x-2">
85
- <Button isLoading={isUpdating} variant="outline" size="sm" onClick={onSave}>Save Changes</Button>
86
- </div>
87
- </div>
88
- <div className="px-4 py-2">
89
- <MonacoEditor
90
- value={value}
91
- language="json"
92
- editorRef={editorRef}
93
- theme={theme === 'dark' ? 'vs-dark' : 'vs'}
94
- />
95
- </div>
96
- </div>
82
+ <Panel title="Table Layout Editor" className="bg-background! h-[calc(100vh-197px)]" action={
83
+ !readonly ? <Button isLoading={isUpdating} variant="outline" size="sm" onClick={onSave}>Save Changes</Button> : undefined
84
+ }>
85
+ <MonacoEditor
86
+ value={value}
87
+ language="json"
88
+ editorRef={editorRef}
89
+ theme={theme === 'dark' ? 'vs-dark' : 'vs'}
90
+ options={{ readOnly: readonly }}
91
+ />
92
+ </Panel>
97
93
  )
98
94
  }
99
95
 
@@ -1,12 +1,13 @@
1
- import { useUserSession } from "@vertesia/ui/session";
2
1
  import { ApiKey, PrincipalType, User, UserGroup } from "@vertesia/common";
3
- import { Avatar, Table, Popover, PopoverContent, PopoverTrigger, useFetch } from "@vertesia/ui/core";
4
- import { ReactNode } from "react";
2
+ import { Avatar, Popover, PopoverContent, PopoverTrigger, Table, useFetch } from "@vertesia/ui/core";
3
+ import { useUserSession } from "@vertesia/ui/session";
5
4
  import { Users } from "lucide-react";
5
+ import { ReactNode } from "react";
6
6
 
7
7
  //TODO use a real cache
8
8
  const USER_CACHE: Record<string, Promise<User>> = {};
9
9
  const GROUP_CACHE: Record<string, Promise<UserGroup>> = {};
10
+ const APIKEY_CACHE: Record<string, Promise<ApiKey>> = {};
10
11
 
11
12
  /**
12
13
  * Fetch the user information given a user reference.
@@ -47,6 +48,25 @@ export function useFetchGroupInfo(groupId: string) {
47
48
  }, [groupId]);
48
49
  }
49
50
 
51
+ /**
52
+ * Fetch the API key information given a key ID.
53
+ * @param keyId
54
+ */
55
+ export function useFetchApiKeyInfo(keyId: string) {
56
+ const { client } = useUserSession();
57
+
58
+ return useFetch(() => {
59
+ let apikey: Promise<ApiKey> | undefined = APIKEY_CACHE[keyId];
60
+ if (!apikey) {
61
+ apikey = client.apikeys.retrieve(keyId).then(apikey => {
62
+ return apikey;
63
+ });
64
+ APIKEY_CACHE[keyId] = apikey;
65
+ }
66
+ return apikey;
67
+ }, [keyId]);
68
+ }
69
+
50
70
  function AvatarPlaceholder() {
51
71
  return <div className='size-8' />
52
72
  }
@@ -87,6 +107,97 @@ function ServiceAccountAvatar({ accountId, showTitle = false, size = "md" }: Ser
87
107
  );
88
108
  }
89
109
 
110
+ interface AgentAvatarProps extends InfoProps {
111
+ agentId: string; // Format: accountId:projectId:timestamp
112
+ onBehalfOfType?: string;
113
+ onBehalfOfId?: string;
114
+ isScheduleAgent?: boolean;
115
+ }
116
+ function AgentAvatar({ agentId, onBehalfOfType, onBehalfOfId, showTitle = false, size = "md", isScheduleAgent = false }: AgentAvatarProps) {
117
+ // Fetch user info - must call hooks unconditionally per React rules
118
+ const shouldFetchUser = onBehalfOfType === 'user' && onBehalfOfId;
119
+ const shouldFetchApiKey = onBehalfOfType === 'apikey' && onBehalfOfId;
120
+
121
+ const userResult = useFetchUserInfo(onBehalfOfId || '');
122
+ const apiKeyResult = useFetchApiKeyInfo(onBehalfOfId || '');
123
+
124
+ // Only use the data if we should fetch it
125
+ const user = shouldFetchUser ? userResult.data : undefined;
126
+ const apiKey = shouldFetchApiKey ? apiKeyResult.data : undefined;
127
+
128
+ // Determine title and description
129
+ const title = user ? "Agent on behalf of" : apiKey ? "Agent on behalf of API key" : "Service Account";
130
+ const _title = isScheduleAgent ? `Schedule ${title}` : title;
131
+
132
+ const description = (
133
+ <div className="space-y-2">
134
+ {user && (
135
+ <>
136
+ <div className="flex items-center gap-2">
137
+ <Avatar src={user.picture} name={user.name} size="sm" />
138
+ <div>
139
+ <div className="font-medium">{user.name || user.email}</div>
140
+ {user.email && user.name && <div className="text-xs text-muted-foreground">{user.email}</div>}
141
+ </div>
142
+ </div>
143
+ </>
144
+ )}
145
+ {apiKey && (
146
+ <>
147
+ <div>
148
+ <div className="font-medium">{apiKey.name}</div>
149
+ <div className="text-xs text-muted-foreground">Key ID: {apiKey.id}</div>
150
+ </div>
151
+ </>
152
+ )}
153
+ {!user && !apiKey && (
154
+ <>
155
+ <div>This user is used by robots like workflow workers.</div>
156
+ <div className="text-gray-800 dark:text-gray-500 text-sm">
157
+ <span className="font-semibold">ID:</span> {agentId}
158
+ </div>
159
+ </>
160
+ )}
161
+ </div>
162
+ );
163
+
164
+ return (
165
+ <UserPopoverPanel title={_title} description={description}>
166
+ <div className="flex items-center gap-2">
167
+ <div className="flex items-center -space-x-2">
168
+ <Avatar
169
+ src="/cloud.svg"
170
+ color="bg-amber-500"
171
+ className="px-[5px] text-white border-2 border-white dark:border-gray-800"
172
+ size={size}
173
+ />
174
+ {user && (
175
+ <Avatar
176
+ src={user.picture}
177
+ name={user.name}
178
+ size={size}
179
+ className="border-2 border-white dark:border-gray-800"
180
+ />
181
+ )}
182
+ {apiKey && (
183
+ <Avatar
184
+ name="API"
185
+ color="bg-gray-400"
186
+ size={size}
187
+ className="border-2 border-white dark:border-gray-800"
188
+ />
189
+ )}
190
+ </div>
191
+ {showTitle && (
192
+ <div className="text-sm font-semibold truncate">
193
+ {user ? `Agent (${user.name || user.email})` : apiKey ? `Agent (${apiKey.name})` : title}
194
+ </div>
195
+ )}
196
+ </div>
197
+ </UserPopoverPanel>
198
+ );
199
+ }
200
+
90
201
  interface ErrorInfoProps extends InfoProps {
91
202
  title?: string;
92
203
  error: Error | string;
@@ -115,20 +226,75 @@ export function UserInfo({ userRef, showTitle = false, size = "md" }: UserInfoPr
115
226
  return <UnknownAvatar title="Unknown User" message="User information is not available." showTitle={showTitle} size={size} />
116
227
  }
117
228
 
118
- const [type, id] = userRef ? userRef.split(':') : ["unknown"];
229
+ const parts = userRef.split(':');
230
+ const type = parts[0];
231
+
119
232
  switch (type) {
120
233
  case PrincipalType.User:
121
- return <UserAvatar userId={id} showTitle={showTitle} size={size} />
234
+ return <UserAvatar userId={parts[1]} showTitle={showTitle} size={size} />
235
+
122
236
  case PrincipalType.Group:
123
- return <GroupAvatar userId={id} showTitle={showTitle} size={size} />
237
+ return <GroupAvatar userId={parts[1]} showTitle={showTitle} size={size} />
238
+
124
239
  case "system":
125
240
  return <SystemAvatar showTitle={showTitle} size={size} />
241
+
126
242
  case PrincipalType.ServiceAccount:
127
- return <ServiceAccountAvatar accountId={id} showTitle={showTitle} size={size} />
128
- case PrincipalType.Agent:
129
- return <ServiceAccountAvatar accountId={id} showTitle={showTitle} size={size} />
243
+ return <ServiceAccountAvatar accountId={parts.slice(1).join(':')} showTitle={showTitle} size={size} />
244
+
245
+ case PrincipalType.Agent: {
246
+ // Parse agent format: agent:accountId:projectId:timestamp[:on_behalf_type:on_behalf_id]
247
+ // Handle legacy formats:
248
+ // - agent:agent:accountId:projectId:timestamp (old bug)
249
+ // - agent:accountId:projectId:timestamp (fixed, no on_behalf_of)
250
+ // - agent:accountId:projectId:timestamp:user:userId (new format)
251
+
252
+ let agentId: string;
253
+ let onBehalfOfType: string | undefined;
254
+ let onBehalfOfId: string | undefined;
255
+
256
+ // Check for old buggy format with double "agent"
257
+ if (parts[1] === 'agent') {
258
+ // Old format: agent:agent:accountId:projectId:timestamp
259
+ agentId = parts.slice(2, 5).join(':');
260
+ // Check if there's on_behalf_of info (unlikely but handle it)
261
+ onBehalfOfType = parts[5];
262
+ onBehalfOfId = parts[6];
263
+ } else {
264
+ // New format: agent:accountId:projectId:timestamp[:type:id]
265
+ agentId = parts.slice(1, 4).join(':');
266
+ onBehalfOfType = parts[4];
267
+ onBehalfOfId = parts[5];
268
+ }
269
+
270
+ return <AgentAvatar
271
+ agentId={agentId}
272
+ onBehalfOfType={onBehalfOfType}
273
+ onBehalfOfId={onBehalfOfId}
274
+ showTitle={showTitle}
275
+ size={size}
276
+ />
277
+ }
278
+
279
+ case PrincipalType.Schedule: {
280
+ // format: schedule:agentId:user:userId
281
+ const agentId = parts[1];
282
+ const onBehalfOfType = parts[2];
283
+ const onBehalfOfId = parts[3];
284
+
285
+ return <AgentAvatar
286
+ agentId={agentId}
287
+ onBehalfOfType={onBehalfOfType}
288
+ onBehalfOfId={onBehalfOfId}
289
+ showTitle={showTitle}
290
+ size={size}
291
+ isScheduleAgent={true}
292
+ />
293
+ }
294
+
130
295
  case PrincipalType.ApiKey:
131
- return <ApiKeyAvatar keyId={id} size={size} showTitle={showTitle} />
296
+ return <ApiKeyAvatar keyId={parts[1]} size={size} showTitle={showTitle} />
297
+
132
298
  default:
133
299
  return <ErrorAvatar title="Unknown User" error={`Invalid user ref type: ${type}`} showTitle={showTitle} size={size} />
134
300
  }
@@ -105,7 +105,6 @@ const PRINT_STYLES = `
105
105
  .vprose blockquote,
106
106
  .vprose figure,
107
107
  .vprose img,
108
- .recharts-wrapper,
109
108
  [class*="chart"],
110
109
  [class*="Chart"] {
111
110
  break-inside: avoid;
@@ -1,7 +1,6 @@
1
- import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react'
2
- import { X } from 'lucide-react'
3
1
  import clsx from 'clsx'
4
- import { Fragment, useEffect, useState } from 'react'
2
+ import { useEffect, useState } from 'react'
3
+ import { SidePanel } from '@vertesia/ui/core'
5
4
  // import { FullHeightLayout } from './FullHeightLayout.js'
6
5
  import { Navbar } from './Navbar.js'
7
6
  import { Sidebar } from './Sidebar.js'
@@ -66,47 +65,20 @@ export function AppLayout({ sidebarClassName, className, title, children, logo,
66
65
 
67
66
  <div className='flex h-full overflow-y-auto w-full'>
68
67
 
69
- <Transition show={sidebarOpen} as={Fragment}>
70
- <Dialog as="div" className="relative z-50 lg:hidden" onClose={setSidebarOpen}>
71
- {/* Backdrop layer for the semi-transparent */}
72
- <TransitionChild
73
- as={Fragment}
74
- enter="transition-opacity ease-linear duration-300"
75
- enterFrom="opacity-0"
76
- enterTo="opacity-100"
77
- leave="transition-opacity ease-linear duration-300"
78
- leaveFrom="opacity-100"
79
- leaveTo="opacity-0"
80
- >
81
- <div className="fixed inset-0 bg-gray-900/80" />
82
- </TransitionChild>
83
-
84
- <div className="fixed inset-0 flex">
85
- <TransitionChild
86
- as={Fragment}
87
- enter="transition ease-in-out duration-300 transform"
88
- enterFrom="-translate-x-full"
89
- enterTo="translate-x-0"
90
- leave="transition ease-in-out duration-300 transform"
91
- leaveFrom="translate-x-0"
92
- leaveTo="-translate-x-full"
93
- >
94
- <DialogPanel className="relative flex w-full max-w-xs flex-1">
95
- {/* Sidebar component, swap this element with another sidebar if you like */}
96
- <Sidebar logo={logo} className={sidebarClassName}>{sidebar}</Sidebar>
97
-
98
- {/* close button */}
99
- <div className="flex w-16 justify-center pt-5 items-start">
100
- <button type="button" className="-m-2.5 p-2.5" onClick={() => setSidebarOpen(false)}>
101
- <span className="sr-only">Close sidebar</span>
102
- <X className="size-6 text-white" aria-hidden="true" />
103
- </button>
104
- </div>
105
- </DialogPanel>
106
- </TransitionChild>
107
- </div>
108
- </Dialog>
109
- </Transition>
68
+ {/* Mobile sidebar */}
69
+ <div className="lg:hidden">
70
+ <SidePanel
71
+ className='bg-sidebar'
72
+ isOpen={sidebarOpen}
73
+ onClose={() => setSidebarOpen(false)}
74
+ side="left"
75
+ panelWidth={288}
76
+ resizable={false}
77
+ backdrop={true}
78
+ >
79
+ <Sidebar logo={logo} className={sidebarClassName}>{sidebar}</Sidebar>
80
+ </SidePanel>
81
+ </div>
110
82
 
111
83
  {/* Static sidebar for desktop */}
112
84
  <div className={`hidden lg:block relative transition-all duration-300 ${desktopSidebarOpen ? 'w-72' : 'w-12'}`}>
@@ -21,7 +21,7 @@ export function Sidebar({ children, logo, className }: SidebarProps) {
21
21
  {logo}
22
22
  </div>
23
23
  }
24
- <div className="flex-1 min-h-0 overflow-hidden px-2">
24
+ <div className="flex-1 min-h-0 overflow-hidden px-0 lg:px-2">
25
25
  <nav className="h-full flex flex-col">
26
26
  <ul role="list" className="flex flex-col gap-y-2 overflow-y-auto h-full">
27
27
  {children}
@@ -37,8 +37,9 @@ interface SidebarSectionProps {
37
37
  title?: React.ReactNode
38
38
  action?: React.ReactNode
39
39
  isFooter?: boolean
40
+ className?: string
40
41
  }
41
- export function SidebarSection({ children, title, action, isFooter = false }: SidebarSectionProps) {
42
+ export function SidebarSection({ children, title, action, isFooter = false, className }: SidebarSectionProps) {
42
43
  const { isOpen } = useSidebarToggle();
43
44
 
44
45
  let header = isOpen ? <>
@@ -51,7 +52,7 @@ export function SidebarSection({ children, title, action, isFooter = false }: Si
51
52
  {title && <div className="text-xs font-medium h-8 flex items-center gap-x-2 px-2 text-sidebar-foreground/70">
52
53
  {header}
53
54
  </div>}
54
- <ul data-sidebar="menu" className="flex w-full min-w-0 flex-col gap-1">
55
+ <ul data-sidebar="menu" className={clsx("flex w-full min-w-0 flex-col gap-1", className)}>
55
56
  {children}
56
57
  </ul>
57
58
  </li>
@@ -85,8 +86,9 @@ export interface SidebarItemProps {
85
86
  className?: string;
86
87
  id?: string; //HTML ID of the element
87
88
  external?: boolean; //If true, the link will open in a new tab
89
+ replace?: boolean; //If true, navigation replaces the current history entry instead of pushing
88
90
  }
89
- export function SidebarItem({ external, className, tools, children, icon: Icon, href, current, onClick }: SidebarItemProps) {
91
+ export function SidebarItem({ external, className, tools, children, icon: Icon, href, current, onClick, replace }: SidebarItemProps) {
90
92
  const { toggleMobile } = useSidebarToggle();
91
93
  const _closeSideBar = () => {
92
94
  setTimeout(() => {
@@ -104,7 +106,7 @@ export function SidebarItem({ external, className, tools, children, icon: Icon,
104
106
  }
105
107
  return (
106
108
  <li>
107
- <Nav onClick={_closeSideBar}>
109
+ <Nav onClick={_closeSideBar} replace={replace}>
108
110
  <SidebarTooltip text={children as string}>
109
111
  <a
110
112
  href={href}
@@ -213,7 +213,15 @@ export class HistoryNavigator {
213
213
  this.fireLocationChange(new AfterLocationChangeEvent(type, to, state));
214
214
  }
215
215
  const _linkNavListener = (ev: MouseEvent) => {
216
- const url = getElementHrefAsUrl(ev.target as HTMLElement)
216
+ const target = ev.target as HTMLElement;
217
+ // Skip anchors with download attribute or blob: URLs - they are file downloads, not navigation
218
+ if (target.tagName.toLowerCase() === 'a' && (
219
+ (target as HTMLAnchorElement).hasAttribute('download') ||
220
+ (target as HTMLAnchorElement).href?.startsWith('blob:')
221
+ )) {
222
+ return;
223
+ }
224
+ const url = getElementHrefAsUrl(target)
217
225
  if (url && url.origin === window.location.origin) {
218
226
  ev.preventDefault();
219
227
  const to = new URL(this.addStickyParams(url.href));
@@ -12,15 +12,20 @@ interface NavProps {
12
12
  * @returns
13
13
  */
14
14
  onClick?: (ev: SyntheticEvent) => void;
15
+ /**
16
+ * If true, use replaceState instead of pushState (no new browser history entry).
17
+ * Defaults to true for backward compatibility.
18
+ */
19
+ replace?: boolean;
15
20
  }
16
- export function Nav({ children, onClick }: NavProps) {
21
+ export function Nav({ children, onClick, replace = true }: NavProps) {
17
22
  const navigate = useNavigate();
18
23
  const _onClick = (ev: SyntheticEvent) => {
19
24
  const link = (ev.target as HTMLElement).closest('a');
20
25
  if (link && link.href) {
21
26
  ev.stopPropagation();
22
27
  ev.preventDefault();
23
- navigate(link.href, { replace: true });
28
+ navigate(link.href, { replace });
24
29
  onClick?.(ev);
25
30
  }
26
31
  }
@@ -12,6 +12,8 @@ import { TypeRegistry } from './TypeRegistry';
12
12
  import { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY } from './constants';
13
13
  export { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY };
14
14
 
15
+ const CENTRAL_AUTH_REDIRECT = "https://internal-auth.vertesia.app/";
16
+
15
17
 
16
18
  class UserSession {
17
19
 
@@ -117,15 +119,41 @@ class UserSession {
117
119
 
118
120
  logout() {
119
121
  console.log('Logging out');
120
- if (this.authToken) {
121
- getFirebaseAuth().signOut();
122
+
123
+ // Check if we should use central auth for logout
124
+ const devDomains = [".composable.sh", ".vertesia.dev", "vertesia.app"];
125
+ const shouldUseCentralAuth = Env.isDocker || devDomains.some((domain) => window.location.hostname.endsWith(domain));
126
+
127
+ if (shouldUseCentralAuth) {
128
+ // Redirect to central auth for logout
129
+ // Central auth will handle Firebase logout
130
+ console.log('Using central auth logout');
131
+ this.authError = undefined;
132
+ this.isLoading = false;
133
+ this.authToken = undefined;
134
+ this.typeRegistry = undefined;
135
+ this.setSession = undefined;
136
+ this.client.withAuthCallback(undefined);
137
+
138
+ const logoutUrl = new URL(CENTRAL_AUTH_REDIRECT);
139
+ const currentUrl = new URL(window.location.href);
140
+ currentUrl.hash = "";
141
+ logoutUrl.pathname = "/logout";
142
+ logoutUrl.searchParams.set("redirect_uri", currentUrl.toString());
143
+ location.replace(logoutUrl.toString());
144
+ } else {
145
+ // Use Firebase logout directly
146
+ console.log('Using Firebase logout');
147
+ if (this.authToken) {
148
+ getFirebaseAuth().signOut();
149
+ }
150
+ this.authError = undefined;
151
+ this.isLoading = false;
152
+ this.authToken = undefined;
153
+ this.typeRegistry = undefined;
154
+ this.setSession = undefined;
155
+ this.client.withAuthCallback(undefined);
122
156
  }
123
- this.authError = undefined;
124
- this.isLoading = false;
125
- this.authToken = undefined;
126
- this.typeRegistry = undefined;
127
- this.setSession = undefined;
128
- this.client.withAuthCallback(undefined);
129
157
  }
130
158
 
131
159
  async switchAccount(targetAccountId: string) {
@@ -151,7 +179,8 @@ class UserSession {
151
179
 
152
180
  async _loadTypes() {
153
181
  if (this.project) {
154
- return this.store.types.list({}, { layout: true }).then(types => this.typeRegistry = new TypeRegistry(types)).catch(err => {
182
+ return this.store.types.catalog.list({ layout: true }).then(types => this.typeRegistry = new TypeRegistry(types)).catch(err => {
183
+ //return this.store.types.list({}, { layout: true }).then(types => this.typeRegistry = new TypeRegistry(types)).catch(err => {
155
184
  console.error('Failed to fetch object types', err);
156
185
  throw err;
157
186
  })
@@ -1,15 +1,15 @@
1
+ import { Env } from "@vertesia/ui/env";
1
2
  import { onAuthStateChanged } from "firebase/auth";
2
3
  import { ReactNode, useEffect, useRef, useState } from "react";
3
4
  import { UserNotFoundError, getComposableToken } from "./auth/composable";
4
5
  import { getFirebaseAuth } from "./auth/firebase";
5
6
  import { useAuthState } from "./auth/useAuthState";
6
- import { Env } from "@vertesia/ui/env";
7
7
  import { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, UserSession, UserSessionContext } from "./UserSession";
8
8
 
9
9
  const devDomains = [".composable.sh", ".vertesia.dev", "vertesia.app"];
10
10
  const CENTRAL_AUTH_REDIRECT = "https://internal-auth.vertesia.app/";
11
11
 
12
- function shouldRedirectToCentralAuth() {
12
+ export function shouldRedirectToCentralAuth() {
13
13
  // Authentication is not supported in Docker environment.
14
14
  // See https://github.com/vertesia/studio/wiki/Composable-UI-Hosting-Options
15
15
  if (Env.isDocker) {
@@ -129,6 +129,7 @@ export function UserSessionProvider({ children }: UserSessionProviderProps) {
129
129
  },
130
130
  });
131
131
  redirectToCentralAuth();
132
+ return; // Don't register onAuthStateChanged listener when redirecting
132
133
  } else {
133
134
  console.log("Auth: not on dev domain");
134
135
  Env.logger.info("Not on dev domain", {
@@ -1,5 +1,5 @@
1
1
  import { ProjectRef, RequireAtLeastOne } from "@vertesia/common";
2
- import { VSelectBox, useFetch } from "@vertesia/ui/core";
2
+ import { SelectBox, useFetch } from "@vertesia/ui/core";
3
3
  import { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from "@vertesia/ui/session";
4
4
  import { useState } from "react";
5
5
 
@@ -47,7 +47,7 @@ function SelectProject({ initialValue, projects, onChange, placeholder = "Select
47
47
  }
48
48
  let actualValue = !value && initialValue ? projects.find(p => p.id === initialValue) : value;
49
49
  return (
50
- <VSelectBox
50
+ <SelectBox
51
51
  by="id"
52
52
  value={actualValue}
53
53
  options={projects}
@@ -1,5 +1,5 @@
1
1
  import { AppInstallationWithManifest, ProjectRef } from "@vertesia/common";
2
- import { Center, useFetch, VSelectBox } from "@vertesia/ui/core";
2
+ import { Center, useFetch, SelectBox } from "@vertesia/ui/core";
3
3
  import { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from "@vertesia/ui/session";
4
4
  import { LockIcon } from "lucide-react";
5
5
  import { ComponentType, ReactNode, useEffect, useMemo, useState } from "react";
@@ -131,7 +131,7 @@ function AccessDeniedMessage({ name }: AccessDeniedMessageProps) {
131
131
  {orgOptions.length > 1 && (
132
132
  <div>
133
133
  <div className="text-sm text-gray-500 mb-2">Organization</div>
134
- <VSelectBox
134
+ <SelectBox
135
135
  by="id"
136
136
  value={selectedOrg}
137
137
  options={orgOptions}
@@ -143,7 +143,7 @@ function AccessDeniedMessage({ name }: AccessDeniedMessageProps) {
143
143
  )}
144
144
  <div>
145
145
  {orgOptions.length > 1 && <div className="text-sm text-gray-500 mb-2">Project</div>}
146
- <VSelectBox
146
+ <SelectBox
147
147
  by="id"
148
148
  value={undefined}
149
149
  options={filteredProjects}
@@ -1,5 +1,5 @@
1
1
  import { TransientToken, UserInviteTokenData } from "@vertesia/common"
2
- import { Button, VModal, VModalBody, VModalTitle } from "@vertesia/ui/core"
2
+ import { Button, Modal, ModalBody, ModalTitle } from "@vertesia/ui/core"
3
3
  import { useEffect, useState } from "react"
4
4
  import { useUserSession } from "@vertesia/ui/session"
5
5
 
@@ -78,16 +78,16 @@ export function InviteAcceptModal() {
78
78
 
79
79
  return (
80
80
  <div>
81
- <VModal isOpen={showModal} onClose={closeModal}>
82
- <VModalTitle>Review Invites</VModalTitle>
83
- <VModalBody>
81
+ <Modal isOpen={showModal} onClose={closeModal}>
82
+ <ModalTitle>Review Invites</ModalTitle>
83
+ <ModalBody>
84
84
  <div className="text-sm pb-4">
85
85
  You have received the following invites to join other accounts.
86
86
  Please review and accept or declined them.
87
87
  </div>
88
88
  {inviteList}
89
- </VModalBody>
90
- </VModal>
89
+ </ModalBody>
90
+ </Modal>
91
91
  </div>
92
92
  )
93
93
 
@@ -19,7 +19,7 @@ export default function SignInModal({ isOpen, onClose }: SignInModalProps) {
19
19
  <GitHubSignInButton />
20
20
  <MicrosoftSignInButton />
21
21
  </ModalBody>
22
- <ModalFooter justify="end">
22
+ <ModalFooter align="right">
23
23
  <Button variant="ghost" onClick={onClose}>Cancel</Button>
24
24
  </ModalFooter>
25
25
  </Modal>
@@ -1,5 +1,5 @@
1
1
  import { SignupData } from "@vertesia/common";
2
- import { Button, Input, VSelectBox, SelectStack } from "@vertesia/ui/core";
2
+ import { Button, Input, SelectBox, SelectStack } from "@vertesia/ui/core";
3
3
  import { User } from "firebase/auth";
4
4
  import { useEffect, useState } from "react";
5
5
  import { getFirebaseAuth } from "@vertesia/ui/session";
@@ -130,7 +130,7 @@ export default function SignupForm({ onSignup, goBack }: SignupFormProps) {
130
130
  {isCompany &&
131
131
  <>
132
132
  <FormItem label="Company Size">
133
- <VSelectBox className="w-full border border-accent bg-muted"
133
+ <SelectBox className="w-full border border-accent bg-muted"
134
134
  value={companySize}
135
135
  options={companySizeOptions}
136
136
  onChange={setCompanySize}
@@ -147,7 +147,7 @@ export default function SignupForm({ onSignup, goBack }: SignupFormProps) {
147
147
  </>
148
148
  }
149
149
  <FormItem label="Project Maturity">
150
- <VSelectBox className="w-full border border-accent bg-muted"
150
+ <SelectBox className="w-full border border-accent bg-muted"
151
151
  options={projectMaturityOptions}
152
152
  value={projectMaturityOptions.find((option) => option.id === projectMaturity)}
153
153
  optionLabel={(option) => option?.label}