@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertesia/ui",
3
- "version": "1.0.0-dev.20260128.144200",
3
+ "version": "1.0.0-dev.20260225.024852Z",
4
4
  "description": "Vertesia UI components and and hooks",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -39,12 +39,12 @@
39
39
  "cmdk": "^1.1.1",
40
40
  "dayjs": "^1.11.19",
41
41
  "debounce": "^2.2.0",
42
- "fast-xml-parser": "^5.2.3",
42
+ "dompurify": "^3.3.1",
43
+ "fast-xml-parser": "^5.3.6",
43
44
  "firebase": "^10.12.2",
44
45
  "framer-motion": "^12.23.12",
45
- "html-to-image": "^1.11.13",
46
- "json-schema": "^0.4.0",
47
46
  "jwt-decode": "^4.0.0",
47
+ "katex": "^0.16.28",
48
48
  "lodash-es": "^4.17.23",
49
49
  "lucide-react": "^0.562.0",
50
50
  "mermaid": "^11.4.0",
@@ -60,18 +60,23 @@
60
60
  "react-pdf": "^10.2.0",
61
61
  "react-resizable-panels": "^3.0.6",
62
62
  "react-vega": "^8.0.0",
63
- "recharts": "^3.5.0",
63
+ "rehype-katex": "^7.0.1",
64
+ "remark-definition-list": "^2.0.0",
65
+ "remark-directive": "^4.0.0",
64
66
  "remark-gfm": "^4.0.1",
67
+ "remark-github-blockquote-alert": "^2.0.0",
68
+ "remark-math": "^6.0.0",
69
+ "remark-supersub": "^1.0.0",
65
70
  "tailwind-merge": "^3.4.0",
66
71
  "ts-md5": "^1.3.1",
67
72
  "unist-util-visit": "^5.0.0",
68
73
  "vega": "^6.2.0",
69
74
  "vega-embed": "^7.1.0",
70
75
  "vega-lite": "^6.4.1",
71
- "@vertesia/client": "1.0.0-dev.20260128.144200",
72
- "@vertesia/common": "1.0.0-dev.20260128.144200",
73
- "@vertesia/json": "1.0.0-dev.20260128.144200",
74
- "@vertesia/fusion-ux": "1.0.0-dev.20260128.144200"
76
+ "@vertesia/fusion-ux": "1.0.0-dev.20260225.024852Z",
77
+ "@vertesia/client": "1.0.0-dev.20260225.024852Z",
78
+ "@vertesia/json": "1.0.0-dev.20260225.024852Z",
79
+ "@vertesia/common": "1.0.0-dev.20260225.024852Z"
75
80
  },
76
81
  "devDependencies": {
77
82
  "@eslint/js": "^9.27.0",
@@ -79,7 +84,6 @@
79
84
  "@rollup/plugin-json": "^6.1.0",
80
85
  "@rollup/plugin-node-resolve": "^16.0.1",
81
86
  "@types/hast": "^3.0.4",
82
- "@types/json-schema": "^7.0.15",
83
87
  "@types/lodash-es": "^4.17.12",
84
88
  "@types/node": "^22.19.2",
85
89
  "@types/papaparse": "^5.5.2",
@@ -1,7 +1,7 @@
1
1
  import clsx from 'clsx';
2
2
  import React, { useState } from 'react';
3
3
 
4
- import { Badge } from './Badge';
4
+ import { Badge } from './shadcn/badge';
5
5
  import { Input } from './shadcn/input';
6
6
  import { VTooltip } from '@vertesia/ui/core';
7
7
 
@@ -2,7 +2,7 @@ import { motion } from "framer-motion"
2
2
  import { X } from "lucide-react"
3
3
  import { useState, ReactNode } from "react"
4
4
 
5
- import { Button } from "./Button"
5
+ import { Button } from "./shadcn/button"
6
6
 
7
7
  interface OverlayProps {
8
8
  children: ReactNode
@@ -10,8 +10,11 @@ interface SidePanelProps {
10
10
  title?: string;
11
11
  panelWidth?: number;
12
12
  backdrop?: boolean;
13
+ side?: 'left' | 'right';
14
+ resizable?: boolean;
15
+ className?: string;
13
16
  }
14
- export function SidePanel({ isOpen, title, onClose, children, panelWidth = 768, backdrop = false }: SidePanelProps) {
17
+ export function SidePanel({ isOpen, title, onClose, children, panelWidth = 768, backdrop = false, side = 'right', resizable = true, className }: SidePanelProps) {
15
18
  const [_panelWidth, setPanelWidth] = useState(panelWidth);
16
19
 
17
20
  const handleDragStart = (e: React.MouseEvent) => {
@@ -39,6 +42,13 @@ export function SidePanel({ isOpen, title, onClose, children, panelWidth = 768,
39
42
  document.addEventListener('mouseup', handleMouseUp);
40
43
  };
41
44
 
45
+ const isLeft = side === 'left';
46
+ const positionClass = isLeft ? 'left-0' : 'right-0';
47
+ const paddingClass = isLeft ? 'pr-10 sm:pr-16' : 'pl-10 sm:pl-16';
48
+ const borderClass = isLeft ? 'border-r' : 'border-l';
49
+ const dragHandleClass = isLeft ? '-right-1' : '-left-1';
50
+ const initialX = isLeft ? "-100%" : "100%";
51
+
42
52
  return (
43
53
  <AnimatePresence>
44
54
  {isOpen && (
@@ -54,28 +64,31 @@ export function SidePanel({ isOpen, title, onClose, children, panelWidth = 768,
54
64
  />
55
65
  )}
56
66
 
57
- <div className="fixed inset-y-0 right-0 overflow-hidden">
67
+ <div className={`fixed inset-y-0 ${positionClass} overflow-hidden`}>
58
68
  <div className="absolute inset-0 overflow-hidden">
59
- <div className="pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10 sm:pl-16">
69
+ <div className={`pointer-events-none fixed inset-y-0 ${positionClass} flex max-w-full ${paddingClass}`}>
60
70
  <motion.div
61
- className="pointer-events-auto border-l"
71
+ className={`pointer-events-auto ${borderClass}`}
62
72
  style={{ width: `${_panelWidth}px` }}
63
- initial={{ x: "100%" }}
73
+ initial={{ x: initialX }}
64
74
  animate={{ x: 0 }}
65
- exit={{ x: "100%" }}
75
+ exit={{ x: initialX }}
66
76
  transition={{ type: "spring", stiffness: 300, damping: 30 }}
67
77
  >
68
78
  <div className="relative flex h-full">
69
79
  {/* Drag Handle */}
70
- <div
71
- className="absolute -left-1 top-0 bottom-0 w-3 cursor-ew-resize hover:bg-indigo-500 transition-colors flex items-center justify-center"
72
- onMouseDown={handleDragStart}
73
- >
74
- <Minus className="rotate-90 font-semibold" strokeWidth={4} />
75
- </div>
76
- <div className="flex-1 flex flex-col overflow-y-scroll gap-4 bg-background py-2 shadow-xl">
80
+ {resizable && (
81
+ <div
82
+ className={`absolute ${dragHandleClass} top-0 bottom-0 w-3 cursor-ew-resize hover:bg-indigo-500 transition-colors flex items-center justify-center`}
83
+ onMouseDown={handleDragStart}
84
+ >
85
+ <Minus className="rotate-90 font-semibold" strokeWidth={4} />
86
+ </div>
87
+ )}
88
+ <div className={`flex-1 flex flex-col bg-background shadow-xl ${className}`}>
89
+ {/* Sticky header */}
77
90
  {title && (
78
- <div className="px-2 sm:px-4">
91
+ <div className="sticky top-0 z-10 bg-background px-2 sm:px-4 py-2 border-b">
79
92
  <div className="flex items-start justify-between">
80
93
  <h2 className="w-full text-base font-semibold leading-6">
81
94
  <div className="text-2xl">{title ?? ""}</div>
@@ -87,7 +100,8 @@ export function SidePanel({ isOpen, title, onClose, children, panelWidth = 768,
87
100
  </div>
88
101
  )}
89
102
 
90
- <div className="px-2 sm:px-4">
103
+ {/* Scrollable content */}
104
+ <div className="flex-1 overflow-y-auto px-2 sm:px-4 py-4">
91
105
  {children}
92
106
  </div>
93
107
  </div>
@@ -17,7 +17,7 @@ interface SwitchProps {
17
17
  export function Switch({ value, onChange, size = 'md', children, className, disabled }: SwitchProps) {
18
18
  const sizeClass = sizes[size];
19
19
  return (
20
- <UISwitch checked={value} onChange={() => onChange(!value)} className={`flex items-center ${className} ${disabled ? 'cursor-not-allowed opacity-50' : 'hover:cursor-pointer'}`}>
20
+ <UISwitch checked={value} onChange={() => onChange(!value)} disabled={disabled} className={`flex items-center ${className} ${disabled ? 'cursor-not-allowed opacity-50' : 'hover:cursor-pointer'}`}>
21
21
  <div className={`${value ? 'bg-primary' : 'bg-muted/50'} relative inline-flex ${sizeClass[0]} items-center rounded-full border-1`}>
22
22
  <span
23
23
  className={`${value ? sizeClass[2] : 'translate-x-1'
@@ -1,10 +1,7 @@
1
1
 
2
2
  export * from "./Avatar.js";
3
- export * from "./Badge.js";
4
3
  export * from "./Center.js";
5
4
  export * from "./ComboBox.js";
6
- export * from "./ConfirmModal.js";
7
- export * from "./DeleteModal.js";
8
5
  export * from "./Divider.js";
9
6
  export * from "./Dropdown.js";
10
7
  export * from "./DropdownList.js";
@@ -14,15 +11,11 @@ export * from "./FormItem.js";
14
11
  export * from "./InputList.js";
15
12
  export * from "./Link.js";
16
13
  export * from "./MenuList.js";
17
- export * from "./MessageBox.js";
18
- export * from "./Modal.js";
19
14
  export * from "./NumberInput.js";
20
15
  export * from "./Overlay.js";
21
- export * from "./Panel.js";
22
16
  export * from "./popup/index.js";
23
17
  export * from "./Portal.js";
24
18
  export * from "./RadioGroup.js";
25
- export * from "./SelectBox.js";
26
19
  export * from "./SelectList.js";
27
20
  export * from "./SelectStack.js";
28
21
  export * from "./shadcn/index.js";
@@ -31,7 +24,6 @@ export * from "./Spinner.js";
31
24
  export * from "./styles.js";
32
25
  export * from "./Switch.js";
33
26
  export * from "./table/index.js";
34
- export * from "./tabs/index.js";
35
27
  export * from "./TagsInput.js";
36
28
  export * from "./toast/index.js";
37
29
 
@@ -0,0 +1,50 @@
1
+ import { useState } from "react"
2
+ import { VTooltip } from "./tooltip"
3
+ import { ChevronDown, ChevronUp, Info } from "lucide-react"
4
+ import { Button } from "./button"
5
+
6
+ interface PanelProps {
7
+ title: string | React.ReactNode
8
+ description?: React.ReactNode
9
+ action?: React.ReactNode
10
+ children: React.ReactNode
11
+ footer?: string | React.ReactNode
12
+ className?: string
13
+ collapsible?: boolean
14
+ defaultCollapsed?: boolean
15
+ }
16
+
17
+ export function Panel({ children, action, title, description, footer, className, collapsible, defaultCollapsed = false }: PanelProps) {
18
+ const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);
19
+
20
+ return (
21
+ <div className={`p-4 flex flex-col gap-2 rounded-sm border bg-card ${className}`}>
22
+ <div className="flex items-center justify-between">
23
+ <div className="flex items-center gap-2">
24
+ <div className="font-semibold text-lg">
25
+ {title}
26
+ </div>
27
+ {description && <VTooltip description={description}><Info className="size-4 text-muted" /></VTooltip>}
28
+ </div>
29
+ <div className="flex gap-2 items-center">
30
+ {action}
31
+ {
32
+ collapsible && (
33
+ <Button variant="ghost" size="icon" onClick={() => setIsCollapsed(!isCollapsed)}>
34
+ {isCollapsed ?
35
+ <ChevronDown className="size-4" /> :
36
+ <ChevronUp className="size-4" />
37
+ }
38
+ </Button>
39
+ )
40
+ }
41
+ </div>
42
+ </div>
43
+ {!isCollapsed && children}
44
+ {footer &&
45
+ <div className="border-t border-muted flex flex-col-2 text-sm pt-4">
46
+ {footer}
47
+ </div>}
48
+ </div>
49
+ )
50
+ }
@@ -1,6 +1,6 @@
1
- import { cva, type VariantProps } from "class-variance-authority";
2
- import * as React from "react";
3
- import { cn } from "./libs/utils";
1
+ import * as React from "react"
2
+ import { cva, type VariantProps } from "class-variance-authority"
3
+ import { cn } from "../libs/utils"
4
4
 
5
5
  // Base badge variants
6
6
  const badgeVariants = cva(
@@ -4,7 +4,7 @@ import { Command as CommandPrimitive } from "cmdk"
4
4
  import { Search } from "lucide-react"
5
5
 
6
6
  import { cn } from "../libs/utils"
7
- import { Dialog, DialogContent } from "./dialog"
7
+ import { Dialog, DialogContent } from "./modal/dialog"
8
8
 
9
9
  const Command: React.ForwardRefExoticComponent<
10
10
  React.RefAttributes<HTMLDivElement> &
@@ -26,36 +26,38 @@ interface FilterProviderProps {
26
26
  children: React.ReactNode;
27
27
  }
28
28
 
29
+ // Syncs filters ↔ URL. On mount, captures the initial URL param and restores matching filters
30
+ // incrementally as filterGroups loads. URL writes are blocked until the first filterGroups load
31
+ // so the address bar doesn't flicker. Filters not matching any filterGroup are silently dropped
32
+ // (prevents cross-page URL contamination, e.g. a modal inheriting a parent page's filters).
33
+
34
+ // Parse format with array indicators: filterName:value or filterName:[value1,value2]
29
35
  const FilterProvider = ({ filters, setFilters, filterGroups, children }: FilterProviderProps) => {
30
36
  const url = new URL(window.location.href);
31
37
  const searchParams = url.searchParams;
32
- const [hasInitialized, setHasInitialized] = React.useState(false);
38
+ const [initialFiltersParam] = React.useState(() => new URLSearchParams(window.location.search).get('filters'));
39
+ const processedUrlFilters = React.useRef<Set<string>>(new Set());
40
+ const hasRestoredFromUrl = React.useRef(!initialFiltersParam);
33
41
 
34
42
  useEffect(() => {
43
+ if (!hasRestoredFromUrl.current) return;
35
44
  try {
36
45
  const params = new URLSearchParams(searchParams.toString());
37
46
  if (filters.length > 0) {
38
- // Convert filters to format with array indicators: filterName:value,value;filterName2:value
39
- // Arrays are prefixed with []: filterName:[value1,value2]
40
47
  const filterString = filters.map(filter => {
41
48
  let values;
42
49
  if (filter.type === 'stringList' && Array.isArray(filter.value) && typeof filter.value[0] === 'string') {
43
- // Handle stringList with direct string array - always array format
44
50
  values = `[${(filter.value as string[]).map(item => encodeURIComponent(item)).join(',')}]`;
45
51
  } else if (Array.isArray(filter.value)) {
46
52
  if (filter.multiple) {
47
- // Handle multiple filters - always use array format for multiple=true
48
53
  values = `[${filter.value.map((item: any) => encodeURIComponent(item.value || item || '')).join(',')}]`;
49
54
  } else if (filter.value.length > 1) {
50
- // Handle multiple values for non-multiple filters
51
55
  values = `[${filter.value.map((item: any) => encodeURIComponent(item.value || item || '')).join(',')}]`;
52
56
  } else {
53
- // Single value in array for non-multiple filter - don't use array format
54
57
  const firstValue = filter.value[0];
55
58
  if (typeof firstValue === 'string') {
56
59
  values = encodeURIComponent(firstValue);
57
60
  } else if (typeof firstValue === 'object' && firstValue?.value !== undefined) {
58
- // Handle FilterOption object
59
61
  values = encodeURIComponent(String(firstValue.value));
60
62
  } else {
61
63
  values = encodeURIComponent(String(firstValue || ''));
@@ -79,91 +81,78 @@ const FilterProvider = ({ filters, setFilters, filterGroups, children }: FilterP
79
81
  }, [filters]);
80
82
 
81
83
  useEffect(() => {
82
- const filtersParam = searchParams.get('filters');
83
- if (filtersParam && filterGroups.length > 0 && !hasInitialized) {
84
- try {
85
- // Parse format with array indicators: filterName:value or filterName:[value1,value2]
86
- const filterPairs = filtersParam.split(';');
87
- const parsedFilters = filterPairs.map(pair => {
88
- const [encodedName, valuesString] = pair.split(':');
89
- const name = decodeURIComponent(encodedName);
90
-
91
- let values: string[];
92
- // Check if it's an array format [value1,value2]
93
- if (valuesString.startsWith('[') && valuesString.endsWith(']')) {
94
- // Array format - remove brackets and split by comma
95
- const arrayContent = valuesString.slice(1, -1); // Remove [ and ]
96
- values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];
97
- } else {
98
- // Single value format
99
- values = [decodeURIComponent(valuesString)];
100
- }
101
-
102
- const group = filterGroups.find(g => g.name === name);
103
- let filterValue;
84
+ if (!initialFiltersParam || filterGroups.length === 0) return;
85
+ try {
86
+ const filterPairs = initialFiltersParam.split(';');
87
+ const newFilters: Filter[] = [];
88
+
89
+ for (const pair of filterPairs) {
90
+ const [encodedName, valuesString] = pair.split(':');
91
+ const name = decodeURIComponent(encodedName);
92
+
93
+ if (processedUrlFilters.current.has(name)) continue;
94
+
95
+ const group = filterGroups.find(g => g.name === name);
96
+ if (!group) continue;
97
+
98
+ processedUrlFilters.current.add(name);
99
+
100
+ let values: string[];
101
+ if (valuesString.startsWith('[') && valuesString.endsWith(']')) {
102
+ const arrayContent = valuesString.slice(1, -1);
103
+ values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];
104
+ } else {
105
+ values = [decodeURIComponent(valuesString)];
106
+ }
107
+
108
+ let filterValue;
109
+
110
+ if (group.type === 'stringList') {
111
+ filterValue = values;
112
+ } else if (group.type === 'text') {
113
+ filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :
114
+ values.map(value => ({ value, label: value }));
115
+ } else {
116
+ filterValue = values.map(value => {
117
+ const matchingOption = group.options?.find(opt => opt.value === value);
118
+ let label = value;
119
+ if (matchingOption?.label) {
120
+ label = String(matchingOption.label);
121
+ } else if (matchingOption?.labelRenderer) {
122
+ label = String(matchingOption.labelRenderer(value));
123
+ } else if (group.labelRenderer) {
124
+ label = String(group.labelRenderer(value));
125
+ }
126
+ return { value, label };
127
+ });
128
+ }
104
129
 
105
- if (group?.type === 'stringList') {
106
- // For stringList, return direct string array
130
+ if (group.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {
131
+ if (group.type === 'stringList') {
107
132
  filterValue = values;
108
- } else if (group?.type === 'text') {
109
- // For text, return FilterOption array (single value for text inputs)
110
- filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :
111
- values.map(value => ({ value, label: value }));
112
- } else {
113
- // For other types, find options with labels
114
- filterValue = values.map(value => {
115
- const matchingOption = group?.options?.find(opt => opt.value === value);
116
- let label = value;
117
-
118
- if (matchingOption?.label) {
119
- label = String(matchingOption.label);
120
- } else if (matchingOption?.labelRenderer) {
121
- label = String(matchingOption.labelRenderer(value));
122
- } else if (group?.labelRenderer) {
123
- label = String(group.labelRenderer(value));
124
- }
125
-
126
- return {
127
- value,
128
- label
129
- };
130
- });
133
+ } else if (!Array.isArray(filterValue)) {
134
+ filterValue = [filterValue];
131
135
  }
132
-
133
- if (group?.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {
134
- if (group.type === 'stringList') {
135
- filterValue = values;
136
- } else {
137
- if (!Array.isArray(filterValue)) {
138
- filterValue = [filterValue];
139
- }
140
- }
141
- }
142
-
143
- // Fallback: if group not found but we detected array format, assume it should be multiple
144
- const shouldBeMultiple = group?.multiple || (!group && valuesString.startsWith('[') && valuesString.endsWith(']'));
145
-
146
- const filter = {
147
- name,
148
- type: group?.type || 'select',
149
- placeholder: group?.placeholder,
150
- value: filterValue,
151
- multiple: shouldBeMultiple
152
- };
153
-
154
- return filter;
136
+ }
137
+
138
+ newFilters.push({
139
+ name,
140
+ type: group.type,
141
+ placeholder: group.placeholder,
142
+ value: filterValue,
143
+ multiple: group.multiple,
155
144
  });
145
+ }
156
146
 
157
- setFilters(parsedFilters);
158
- setHasInitialized(true);
159
- } catch (error) {
160
- setHasInitialized(true);
147
+ if (newFilters.length > 0) {
148
+ setFilters(prev => [...prev, ...newFilters]);
161
149
  }
162
- } else if (filterGroups.length > 0 && !hasInitialized) {
163
- // No URL params but we have groups - mark as initialized
164
- setHasInitialized(true);
150
+
151
+ hasRestoredFromUrl.current = true;
152
+ } catch (_error) {
153
+ // ignore parse errors
165
154
  }
166
- }, [filterGroups, hasInitialized]);
155
+ }, [filterGroups, initialFiltersParam]);
167
156
 
168
157
  return (
169
158
  <FilterContext.Provider value={{ filters, setFilters, filterGroups }}>
@@ -351,7 +340,7 @@ const FilterBar = ({ className }: { className?: string }) => {
351
340
  );
352
341
  };
353
342
 
354
- const FilterClear = ({ className }: { className?: string}) => {
343
+ const FilterClear = ({ className }: { className?: string }) => {
355
344
  const { filters, setFilters } = React.useContext(FilterContext);
356
345
 
357
346
  const hasActiveFilters = filters.filter((filter) => filter.value?.length > 0).length > 0;
@@ -1,9 +1,10 @@
1
1
  export * from './theme/ThemeSwitcher';
2
2
  export * from './theme/ThemeProvider';
3
3
 
4
+ export * from "./badge"
4
5
  export * from './button';
5
6
  export * from './card';
6
- export * from './dialog';
7
+ export * from './modal';
7
8
  export * from './input';
8
9
  export * from './separator';
9
10
  export * from './selectBox';
@@ -11,7 +12,6 @@ export * from './tabs';
11
12
  export * from './tooltip';
12
13
  export * from './label';
13
14
  export * from './breadcrumb';
14
- export * from './dialog';
15
15
  export * from './button';
16
16
  export * from './filters';
17
17
  export * from './popover';
@@ -20,4 +20,6 @@ export * from './checkbox';
20
20
  export * from './heading';
21
21
  export * from './text';
22
22
  export * from './resizeable';
23
- export * from './textarea';
23
+ export * from './textarea';
24
+ export * from "./MessageBox"
25
+ export * from "./Panel"
@@ -1,7 +1,7 @@
1
1
  import { TriangleAlert } from "lucide-react"
2
2
  import React, { useRef } from "react"
3
- import { VModal, VModalTitle, VModalFooter } from "./shadcn"
4
- import { Button } from "./shadcn/button"
3
+ import { Modal, ModalTitle, ModalFooter } from "./dialog"
4
+ import { Button } from "../button"
5
5
 
6
6
  interface ConfirmModalProps {
7
7
  title: string
@@ -15,15 +15,15 @@ export function ConfirmModal({ title, content, onConfirm, onCancel, isOpen }: Co
15
15
  const cancelButtonRef = useRef(null)
16
16
 
17
17
  return (
18
- <VModal isOpen={isOpen} onClose={onCancel} description="Confirm Modal">
18
+ <Modal isOpen={isOpen} onClose={onCancel} description="Confirm Modal">
19
19
  <div className="sm:flex sm:items-start p-2">
20
20
  <div className="mx-auto flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10">
21
21
  <TriangleAlert className="size-6 text-red-600" aria-hidden="true" />
22
22
  </div>
23
23
  <div className="mt-3 text-center sm:ml-4 sm:mt-0 sm:text-left">
24
- <VModalTitle className="leading-6" show >
24
+ <ModalTitle className="leading-6" show >
25
25
  {title}
26
- </VModalTitle>
26
+ </ModalTitle>
27
27
  <div className="mt-2">
28
28
  <div className="prose text-sm text-gray-500">
29
29
  {content}
@@ -31,7 +31,7 @@ export function ConfirmModal({ title, content, onConfirm, onCancel, isOpen }: Co
31
31
  </div>
32
32
  </div>
33
33
  </div>
34
- <VModalFooter align="right">
34
+ <ModalFooter align="right">
35
35
  <Button
36
36
  variant="destructive"
37
37
  onClick={onConfirm}
@@ -45,7 +45,7 @@ export function ConfirmModal({ title, content, onConfirm, onCancel, isOpen }: Co
45
45
  >
46
46
  Cancel
47
47
  </Button>
48
- </VModalFooter>
49
- </VModal>
48
+ </ModalFooter>
49
+ </Modal>
50
50
  )
51
51
  }
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from "react";
2
2
  import { ConfirmModal } from "./ConfirmModal.js";
3
- import { useToast } from "./toast/index.js";
3
+ import { useToast } from "../../toast/index.js";
4
4
 
5
5
  interface DeleteModalProps {
6
6
  idToDelete?: string;