@vertesia/ui 0.67.0 → 0.68.0

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 (283) hide show
  1. package/lib/esm/core/components/Badge.js +1 -1
  2. package/lib/esm/core/components/Badge.js.map +1 -1
  3. package/lib/esm/core/components/FormItem.js +2 -2
  4. package/lib/esm/core/components/FormItem.js.map +1 -1
  5. package/lib/esm/core/components/InputList.js +2 -2
  6. package/lib/esm/core/components/InputList.js.map +1 -1
  7. package/lib/esm/core/components/shadcn/checkbox.js +1 -1
  8. package/lib/esm/core/components/shadcn/checkbox.js.map +1 -1
  9. package/lib/esm/core/components/shadcn/command.js +1 -1
  10. package/lib/esm/core/components/shadcn/command.js.map +1 -1
  11. package/lib/esm/core/components/shadcn/dialog.js +6 -6
  12. package/lib/esm/core/components/shadcn/dialog.js.map +1 -1
  13. package/lib/esm/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
  14. package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +129 -0
  15. package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -0
  16. package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js +46 -0
  17. package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -0
  18. package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js +23 -0
  19. package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -0
  20. package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js +28 -0
  21. package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js.map +1 -0
  22. package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js +5 -0
  23. package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js.map +1 -0
  24. package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js +101 -0
  25. package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js.map +1 -0
  26. package/lib/esm/core/components/shadcn/filters/{stringListFilter.js → filter/StringListFilter.js} +3 -3
  27. package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js.map +1 -0
  28. package/lib/esm/core/components/shadcn/filters/{textFilter.js → filter/TextFilter.js} +4 -4
  29. package/lib/esm/core/components/shadcn/filters/filter/TextFilter.js.map +1 -0
  30. package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js +161 -0
  31. package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js.map +1 -0
  32. package/lib/esm/core/components/shadcn/filters/filter-styles.js +88 -0
  33. package/lib/esm/core/components/shadcn/filters/filter-styles.js.map +1 -0
  34. package/lib/esm/core/components/shadcn/filters/filterBar.js +128 -87
  35. package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
  36. package/lib/esm/core/components/shadcn/filters/filters.js +7 -6
  37. package/lib/esm/core/components/shadcn/filters/filters.js.map +1 -1
  38. package/lib/esm/core/components/shadcn/filters/index.js +1 -1
  39. package/lib/esm/core/components/shadcn/filters/index.js.map +1 -1
  40. package/lib/esm/core/components/shadcn/filters/types.js.map +1 -1
  41. package/lib/esm/core/components/toast/NotificationPanel.js +24 -18
  42. package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
  43. package/lib/esm/features/agent/PayloadBuilder.js +47 -27
  44. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  45. package/lib/esm/features/agent/chat/ModernAgentConversation.js +9 -3
  46. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  47. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +7 -6
  48. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  49. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +12 -1
  50. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  51. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js +2 -1
  52. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
  53. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +10 -4
  54. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  55. package/lib/esm/features/facets/DocumentsFacetsNav.js +133 -0
  56. package/lib/esm/features/facets/DocumentsFacetsNav.js.map +1 -0
  57. package/lib/esm/features/facets/RunsFacetsNav.js +125 -0
  58. package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -0
  59. package/lib/esm/features/facets/VFacetsNav.js +4 -113
  60. package/lib/esm/features/facets/VFacetsNav.js.map +1 -1
  61. package/lib/esm/features/facets/VStringFacet.js +6 -4
  62. package/lib/esm/features/facets/VStringFacet.js.map +1 -1
  63. package/lib/esm/features/facets/VTypeFacet.js +4 -5
  64. package/lib/esm/features/facets/VTypeFacet.js.map +1 -1
  65. package/lib/esm/features/facets/VUserFacet.js +1 -1
  66. package/lib/esm/features/facets/VUserFacet.js.map +1 -1
  67. package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js +98 -0
  68. package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -0
  69. package/lib/esm/features/facets/index.js +3 -2
  70. package/lib/esm/features/facets/index.js.map +1 -1
  71. package/lib/esm/features/store/collections/CollectionsTable.js +1 -1
  72. package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
  73. package/lib/esm/features/store/collections/CreateCollection.js +10 -9
  74. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  75. package/lib/esm/features/store/collections/EditCollectionView.js +10 -9
  76. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  77. package/lib/esm/features/store/collections/SelectCollection.js +1 -1
  78. package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
  79. package/lib/esm/features/store/objects/DocumentPreviewPanel.js +0 -1
  80. package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  81. package/lib/esm/features/store/objects/DocumentSearchResults.js +37 -2
  82. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  83. package/lib/esm/features/store/objects/components/ContentOverview.js +0 -2
  84. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  85. package/lib/esm/features/store/objects/components/SelectDocument.js +2 -2
  86. package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
  87. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
  88. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  89. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +16 -4
  90. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  91. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +72 -37
  92. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  93. package/lib/esm/features/store/types/ObjectSchemaEditor.js +15 -0
  94. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  95. package/lib/esm/features/user/UserInfo.js +8 -8
  96. package/lib/esm/features/user/UserInfo.js.map +1 -1
  97. package/lib/esm/router/HistoryNavigator.js +2 -2
  98. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  99. package/lib/esm/shell/SplashScreen.js +19 -0
  100. package/lib/esm/shell/SplashScreen.js.map +1 -0
  101. package/lib/esm/shell/VertesiaShell.js +10 -0
  102. package/lib/esm/shell/VertesiaShell.js.map +1 -0
  103. package/lib/esm/shell/index.js +7 -0
  104. package/lib/esm/shell/index.js.map +1 -0
  105. package/lib/esm/shell/login/EnterpriseSigninButton.js +81 -0
  106. package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -0
  107. package/lib/esm/shell/login/GitHubSignInButton.js +24 -0
  108. package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -0
  109. package/lib/esm/shell/login/GoogleSignInButton.js +25 -0
  110. package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -0
  111. package/lib/esm/shell/login/InviteAcceptModal.js +45 -0
  112. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -0
  113. package/lib/esm/shell/login/MicrosoftSigninButton.js +19 -0
  114. package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -0
  115. package/lib/esm/shell/login/PreviewIcon.js +23 -0
  116. package/lib/esm/shell/login/PreviewIcon.js.map +1 -0
  117. package/lib/esm/shell/login/SignInModal.js +9 -0
  118. package/lib/esm/shell/login/SignInModal.js.map +1 -0
  119. package/lib/esm/shell/login/SigninScreen.js +64 -0
  120. package/lib/esm/shell/login/SigninScreen.js.map +1 -0
  121. package/lib/esm/shell/login/SignupForm.js +91 -0
  122. package/lib/esm/shell/login/SignupForm.js.map +1 -0
  123. package/lib/esm/shell/login/TerminalLogin.js +179 -0
  124. package/lib/esm/shell/login/TerminalLogin.js.map +1 -0
  125. package/lib/esm/shell/login/UserInfo.js +40 -0
  126. package/lib/esm/shell/login/UserInfo.js.map +1 -0
  127. package/lib/esm/shell/login/UserSessionMenu.js +31 -0
  128. package/lib/esm/shell/login/UserSessionMenu.js.map +1 -0
  129. package/lib/esm/shell/utils.js +6 -0
  130. package/lib/esm/shell/utils.js.map +1 -0
  131. package/lib/esm/widgets/SvgIcon.js +36 -0
  132. package/lib/esm/widgets/SvgIcon.js.map +1 -0
  133. package/lib/esm/widgets/index.js +7 -6
  134. package/lib/esm/widgets/index.js.map +1 -1
  135. package/lib/esm/widgets/upload/UploadSummary.js +1 -1
  136. package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
  137. package/lib/tsconfig.tsbuildinfo +1 -1
  138. package/lib/types/core/components/FormItem.d.ts +2 -1
  139. package/lib/types/core/components/shadcn/dialog.d.ts +2 -1
  140. package/lib/types/core/components/shadcn/filters/DynamicLabel.d.ts +1 -1
  141. package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts +5 -0
  142. package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts +8 -0
  143. package/lib/types/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts +5 -0
  144. package/lib/types/core/components/shadcn/filters/comboBox/TextCombobox.d.ts +5 -0
  145. package/lib/types/core/components/shadcn/filters/comboBox/comboBox.d.ts +4 -0
  146. package/lib/types/core/components/shadcn/filters/{selectFilter.d.ts → filter/SelectFilter.d.ts} +2 -2
  147. package/lib/types/core/components/shadcn/filters/{stringListFilter.d.ts → filter/StringListFilter.d.ts} +1 -1
  148. package/lib/types/core/components/shadcn/filters/{textFilter.d.ts → filter/TextFilter.d.ts} +1 -1
  149. package/lib/types/core/components/shadcn/filters/{dateFilter.d.ts → filter/dateFilter.d.ts} +1 -1
  150. package/lib/types/core/components/shadcn/filters/filter-styles.d.ts +1 -0
  151. package/lib/types/core/components/shadcn/filters/filterBar.d.ts +14 -4
  152. package/lib/types/core/components/shadcn/filters/index.d.ts +1 -1
  153. package/lib/types/core/components/shadcn/filters/types.d.ts +2 -0
  154. package/lib/types/features/agent/PayloadBuilder.d.ts +17 -8
  155. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +2 -1
  156. package/lib/types/features/facets/DocumentsFacetsNav.d.ts +16 -0
  157. package/lib/types/features/facets/RunsFacetsNav.d.ts +18 -0
  158. package/lib/types/features/facets/VFacetsNav.d.ts +1 -1
  159. package/lib/types/features/facets/VStringFacet.d.ts +6 -2
  160. package/lib/types/features/facets/VTypeFacet.d.ts +3 -1
  161. package/lib/types/features/facets/WorkflowExecutionsFacetsNav.d.ts +13 -0
  162. package/lib/types/features/facets/index.d.ts +3 -2
  163. package/lib/types/shell/SplashScreen.d.ts +4 -0
  164. package/lib/types/shell/VertesiaShell.d.ts +7 -0
  165. package/lib/types/shell/index.d.ts +6 -0
  166. package/lib/types/shell/login/EnterpriseSigninButton.d.ts +5 -0
  167. package/lib/types/shell/login/GitHubSignInButton.d.ts +5 -0
  168. package/lib/types/shell/login/GoogleSignInButton.d.ts +5 -0
  169. package/lib/types/shell/login/InviteAcceptModal.d.ts +1 -0
  170. package/lib/types/shell/login/MicrosoftSigninButton.d.ts +5 -0
  171. package/lib/types/shell/login/PreviewIcon.d.ts +5 -0
  172. package/lib/types/shell/login/SignInModal.d.ts +6 -0
  173. package/lib/types/shell/login/SigninScreen.d.ts +8 -0
  174. package/lib/types/shell/login/SignupForm.d.ts +7 -0
  175. package/lib/types/shell/login/TerminalLogin.d.ts +1 -0
  176. package/lib/types/shell/login/UserInfo.d.ts +5 -0
  177. package/lib/types/shell/login/UserSessionMenu.d.ts +8 -0
  178. package/lib/types/shell/utils.d.ts +1 -0
  179. package/lib/types/widgets/SvgIcon.d.ts +6 -0
  180. package/lib/types/widgets/index.d.ts +7 -6
  181. package/lib/vertesia-ui-core.js +1 -1
  182. package/lib/vertesia-ui-core.js.map +1 -1
  183. package/lib/vertesia-ui-features.js +1 -1
  184. package/lib/vertesia-ui-features.js.map +1 -1
  185. package/lib/vertesia-ui-router.js +1 -1
  186. package/lib/vertesia-ui-router.js.map +1 -1
  187. package/lib/vertesia-ui-shell.js +2 -0
  188. package/lib/vertesia-ui-shell.js.map +1 -0
  189. package/lib/vertesia-ui-widgets.js +1 -1
  190. package/lib/vertesia-ui-widgets.js.map +1 -1
  191. package/package.json +14 -6
  192. package/src/core/components/Badge.tsx +12 -8
  193. package/src/core/components/FormItem.tsx +4 -3
  194. package/src/core/components/InputList.tsx +21 -17
  195. package/src/core/components/shadcn/checkbox.tsx +2 -2
  196. package/src/core/components/shadcn/command.tsx +1 -1
  197. package/src/core/components/shadcn/dialog.tsx +18 -9
  198. package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -2
  199. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +211 -0
  200. package/src/core/components/shadcn/filters/{comboBox.tsx → comboBox/SelectCombobox.tsx} +8 -192
  201. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +76 -0
  202. package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +81 -0
  203. package/src/core/components/shadcn/filters/comboBox/comboBox.tsx +4 -0
  204. package/src/core/components/shadcn/filters/filter/SelectFilter.tsx +161 -0
  205. package/src/core/components/shadcn/filters/{stringListFilter.tsx → filter/StringListFilter.tsx} +7 -7
  206. package/src/core/components/shadcn/filters/{textFilter.tsx → filter/TextFilter.tsx} +17 -11
  207. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +256 -0
  208. package/src/core/components/shadcn/filters/filter-styles.ts +87 -0
  209. package/src/core/components/shadcn/filters/filterBar.tsx +208 -152
  210. package/src/core/components/shadcn/filters/filters.tsx +7 -5
  211. package/src/core/components/shadcn/filters/index.ts +1 -1
  212. package/src/core/components/shadcn/filters/types.ts +2 -0
  213. package/src/core/components/toast/NotificationPanel.tsx +38 -22
  214. package/src/features/agent/PayloadBuilder.tsx +56 -31
  215. package/src/features/agent/chat/ModernAgentConversation.tsx +10 -4
  216. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +7 -6
  217. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +12 -1
  218. package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -1
  219. package/src/features/agent/chat/ModernAgentOutput/utils.ts +12 -4
  220. package/src/features/facets/DocumentsFacetsNav.tsx +171 -0
  221. package/src/features/facets/RunsFacetsNav.tsx +166 -0
  222. package/src/features/facets/VFacetsNav.tsx +10 -126
  223. package/src/features/facets/VStringFacet.tsx +10 -4
  224. package/src/features/facets/VTypeFacet.tsx +6 -5
  225. package/src/features/facets/VUserFacet.tsx +5 -3
  226. package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +132 -0
  227. package/src/features/facets/index.ts +5 -2
  228. package/src/features/store/collections/CollectionsTable.tsx +3 -2
  229. package/src/features/store/collections/CreateCollection.tsx +17 -15
  230. package/src/features/store/collections/EditCollectionView.tsx +19 -16
  231. package/src/features/store/collections/SelectCollection.tsx +1 -1
  232. package/src/features/store/objects/DocumentPreviewPanel.tsx +0 -1
  233. package/src/features/store/objects/DocumentSearchResults.tsx +80 -11
  234. package/src/features/store/objects/components/ContentOverview.tsx +0 -2
  235. package/src/features/store/objects/components/SelectDocument.tsx +2 -2
  236. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  237. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +40 -19
  238. package/src/features/store/objects/upload/DocumentUploadModal.tsx +160 -214
  239. package/src/features/store/types/ObjectSchemaEditor.tsx +15 -0
  240. package/src/features/user/UserInfo.tsx +17 -14
  241. package/src/router/HistoryNavigator.ts +2 -2
  242. package/src/shell/SplashScreen.tsx +41 -0
  243. package/src/shell/VertesiaShell.tsx +27 -0
  244. package/src/shell/index.tsx +6 -0
  245. package/src/shell/login/EnterpriseSigninButton.tsx +106 -0
  246. package/src/shell/login/GitHubSignInButton.tsx +40 -0
  247. package/src/shell/login/GoogleSignInButton.tsx +36 -0
  248. package/src/shell/login/InviteAcceptModal.tsx +78 -0
  249. package/src/shell/login/MicrosoftSigninButton.tsx +30 -0
  250. package/src/shell/login/PreviewIcon.tsx +29 -0
  251. package/src/shell/login/SignInModal.tsx +28 -0
  252. package/src/shell/login/SigninScreen.tsx +162 -0
  253. package/src/shell/login/SignupForm.tsx +178 -0
  254. package/src/shell/login/TerminalLogin.tsx +299 -0
  255. package/src/shell/login/UserInfo.tsx +76 -0
  256. package/src/shell/login/UserSessionMenu.tsx +81 -0
  257. package/src/shell/utils.tsx +7 -0
  258. package/src/widgets/SvgIcon.tsx +44 -0
  259. package/src/widgets/index.ts +7 -6
  260. package/src/widgets/upload/UploadSummary.tsx +3 -4
  261. package/lib/esm/core/components/shadcn/filters/comboBox.js +0 -101
  262. package/lib/esm/core/components/shadcn/filters/comboBox.js.map +0 -1
  263. package/lib/esm/core/components/shadcn/filters/dateFilter.js +0 -36
  264. package/lib/esm/core/components/shadcn/filters/dateFilter.js.map +0 -1
  265. package/lib/esm/core/components/shadcn/filters/selectFilter.js +0 -67
  266. package/lib/esm/core/components/shadcn/filters/selectFilter.js.map +0 -1
  267. package/lib/esm/core/components/shadcn/filters/stringListFilter.js.map +0 -1
  268. package/lib/esm/core/components/shadcn/filters/textFilter.js.map +0 -1
  269. package/lib/esm/features/facets/InteractionFacet.js +0 -39
  270. package/lib/esm/features/facets/InteractionFacet.js.map +0 -1
  271. package/lib/esm/features/facets/TypeOptions.js +0 -19
  272. package/lib/esm/features/facets/TypeOptions.js.map +0 -1
  273. package/lib/esm/features/facets/UserFacet.js +0 -33
  274. package/lib/esm/features/facets/UserFacet.js.map +0 -1
  275. package/lib/types/core/components/shadcn/filters/comboBox.d.ts +0 -22
  276. package/lib/types/features/facets/InteractionFacet.d.ts +0 -9
  277. package/lib/types/features/facets/TypeOptions.d.ts +0 -3
  278. package/lib/types/features/facets/UserFacet.d.ts +0 -11
  279. package/src/core/components/shadcn/filters/dateFilter.tsx +0 -82
  280. package/src/core/components/shadcn/filters/selectFilter.tsx +0 -110
  281. package/src/features/facets/InteractionFacet.tsx +0 -53
  282. package/src/features/facets/TypeOptions.tsx +0 -22
  283. package/src/features/facets/UserFacet.tsx +0 -61
@@ -0,0 +1,166 @@
1
+ import { Filter as BaseFilter, FilterProvider, FilterBtn, FilterBar, FilterClear, FilterGroup } from '@vertesia/ui/core';
2
+ import { useState } from 'react';
3
+ import { VEnvironmentFacet } from './VEnvironmentFacet';
4
+ import { VInteractionFacet } from './VInteractionFacet';
5
+ import { VStringFacet } from './VStringFacet';
6
+ import { VUserFacet } from './VUserFacet';
7
+ import { SearchInterface } from './VFacetsNav';
8
+
9
+ interface RunsFacetsNavProps {
10
+ facets: {
11
+ type?: any[];
12
+ interactions?: any[];
13
+ environments?: any[];
14
+ models?: any[];
15
+ statuses?: any[];
16
+ finish_reason?: any[];
17
+ created_by?: any[];
18
+ };
19
+ search: SearchInterface;
20
+ }
21
+
22
+ // Hook to create filter groups for runs
23
+ export function useRunsFilterGroups(facets: RunsFacetsNavProps['facets']): FilterGroup[] {
24
+ const customFilterGroups: FilterGroup[] = [];
25
+
26
+ if (facets.interactions) {
27
+ const interactionFilterGroup = VInteractionFacet({
28
+ buckets: facets.interactions || [],
29
+ name: 'interaction',
30
+ placeholder: 'Interactions',
31
+ });
32
+ customFilterGroups.push(interactionFilterGroup);
33
+ }
34
+
35
+ if (facets.environments) {
36
+ const environmentFilterGroup = VEnvironmentFacet({
37
+ buckets: facets.environments || [],
38
+ name: 'Environments'
39
+ });
40
+ customFilterGroups.push(environmentFilterGroup);
41
+ }
42
+
43
+ if (facets.models) {
44
+ const modelFilterGroup = VStringFacet({
45
+ search: null as any, // This will be provided by the search context
46
+ buckets: facets.models || [],
47
+ name: 'Model'
48
+ });
49
+ customFilterGroups.push(modelFilterGroup);
50
+ }
51
+
52
+ if (facets.statuses) {
53
+ const statusFilterGroup = VStringFacet({
54
+ search: null as any, // This will be provided by the search context
55
+ buckets: facets.statuses || [],
56
+ name: 'Status'
57
+ });
58
+ customFilterGroups.push(statusFilterGroup);
59
+ }
60
+
61
+ if (facets.finish_reason) {
62
+ const processedFinishReason = facets.finish_reason.map((bucket: any) => ({
63
+ ...bucket,
64
+ _id: bucket._id === null ? 'none' : bucket._id
65
+ }));
66
+
67
+ const finishReasonFilterGroup = VStringFacet({
68
+ search: null as any, // This will be provided by the search context
69
+ buckets: processedFinishReason,
70
+ name: 'finish_reason',
71
+ placeholder: 'Finish Reason'
72
+ });
73
+ customFilterGroups.push(finishReasonFilterGroup);
74
+ }
75
+
76
+ if (facets.created_by) {
77
+ const createdByFilterGroup = VUserFacet({
78
+ buckets: facets.created_by || [],
79
+ name: 'created_by',
80
+ placeholder: 'Created By'
81
+ });
82
+ customFilterGroups.push(createdByFilterGroup);
83
+ }
84
+
85
+ const dateAfterFilterGroup = {
86
+ name: 'start',
87
+ placeholder: 'Date After',
88
+ type: 'date' as const,
89
+ multiple: false
90
+ };
91
+ customFilterGroups.push(dateAfterFilterGroup);
92
+
93
+ const dateBeforeFilterGroup = {
94
+ name: 'end',
95
+ placeholder: 'Date Before',
96
+ type: 'date' as const,
97
+ multiple: false
98
+ };
99
+ customFilterGroups.push(dateBeforeFilterGroup);
100
+
101
+ return customFilterGroups;
102
+ }
103
+
104
+ // Hook to create filter change handler for runs
105
+ export function useRunsFilterHandler(search: SearchInterface) {
106
+ return (newFilters: BaseFilter[]) => {
107
+ if (newFilters.length === 0) {
108
+ search.clearFilters();
109
+ return;
110
+ }
111
+
112
+ search.clearFilters(false);
113
+
114
+ newFilters.forEach(filter => {
115
+ if (filter.value && filter.value.length > 0) {
116
+ const filterName = filter.name;
117
+ let filterValue;
118
+ if (filter.type === 'stringList') {
119
+ filterValue = filter.value.map(v => typeof v === 'string' ? v : v.value);
120
+ } else if (filter.multiple) {
121
+ filterValue = Array.isArray(filter.value)
122
+ ? filter.value.map((v: any) => typeof v === 'object' && v.value ? v.value : v)
123
+ : [typeof filter.value === 'object' && (filter.value as any).value ? (filter.value as any).value : filter.value];
124
+ } else {
125
+ // Single value - don't wrap in array
126
+ filterValue = Array.isArray(filter.value) && filter.value[0] && typeof filter.value[0] === 'object'
127
+ ? (filter.value[0] as any).value
128
+ : Array.isArray(filter.value) && filter.value[0]
129
+ ? filter.value[0]
130
+ : filter.value;
131
+ }
132
+
133
+ search.query[filterName] = filterValue;
134
+ }
135
+ });
136
+
137
+ search.search();
138
+ };
139
+ }
140
+
141
+ // Legacy component for backward compatibility
142
+ export function RunsFacetsNav({ facets, search }: RunsFacetsNavProps) {
143
+ const [filters, setFilters] = useState<BaseFilter[]>([]);
144
+ const filterGroups = useRunsFilterGroups(facets);
145
+ const handleFilterLogic = useRunsFilterHandler(search);
146
+
147
+ const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
148
+ const newFilters = typeof value === 'function' ? value(filters) : value;
149
+ setFilters(newFilters);
150
+ handleFilterLogic(newFilters);
151
+ };
152
+
153
+ return (
154
+ <FilterProvider
155
+ filterGroups={filterGroups}
156
+ filters={filters}
157
+ setFilters={handleFilterChange}
158
+ >
159
+ <div className="flex gap-2 items-center">
160
+ <FilterBtn />
161
+ <FilterBar />
162
+ <FilterClear />
163
+ </div>
164
+ </FilterProvider>
165
+ );
166
+ }
@@ -1,11 +1,5 @@
1
- import { Filter as BaseFilter, FilterBar, FilterGroup } from '@vertesia/ui/core';
2
- import { useUserSession } from '@vertesia/ui/session';
1
+ import { Filter as BaseFilter, FilterProvider, FilterBtn, FilterBar, FilterClear, FilterGroup } from '@vertesia/ui/core';
3
2
  import { useState } from 'react';
4
- import { VEnvironmentFacet } from './VEnvironmentFacet';
5
- import { VInteractionFacet } from './VInteractionFacet';
6
- import { VStringFacet } from './VStringFacet';
7
- import { VTypeFacet } from './VTypeFacet';
8
- import { VUserFacet } from './VUserFacet';
9
3
 
10
4
  export interface SearchInterface {
11
5
  getFilterValue(name: string): any;
@@ -21,10 +15,9 @@ interface FacetsNavProps {
21
15
  search: SearchInterface;
22
16
  textSearch?: string;
23
17
  }
24
- export function VFacetsNav({ facets, search, textSearch = '' }: FacetsNavProps) {
18
+ export function VFacetsNav({ search, textSearch = '' }: FacetsNavProps) {
25
19
  const [filters, setFilters] = useState<BaseFilter[]>([]);
26
20
  const customFilterGroups: FilterGroup[] = [];
27
- const { typeRegistry } = useUserSession();
28
21
 
29
22
  if (textSearch) {
30
23
  customFilterGroups.push({
@@ -35,121 +28,6 @@ export function VFacetsNav({ facets, search, textSearch = '' }: FacetsNavProps)
35
28
  });
36
29
  }
37
30
 
38
- if (facets.type) {
39
- const typeFilterGroup = VTypeFacet({
40
- buckets: facets.type || [],
41
- typeRegistry: typeRegistry,
42
- });
43
- customFilterGroups.push(typeFilterGroup);
44
- }
45
-
46
- if (facets.status) {
47
- const statusFilterGroup = VStringFacet({
48
- search,
49
- buckets: facets.status || [],
50
- name: 'Status'
51
- });
52
- customFilterGroups.push(statusFilterGroup);
53
- }
54
-
55
- if (facets.role) {
56
- const roleFilterGroup = VStringFacet({
57
- search,
58
- buckets: facets.role || [],
59
- name: 'Role'
60
- });
61
- customFilterGroups.push(roleFilterGroup);
62
- }
63
-
64
- if (facets.location) {
65
- const locationFilterGroup = VStringFacet({
66
- search,
67
- buckets: facets.location || [],
68
- name: 'Location'
69
- });
70
- customFilterGroups.push(locationFilterGroup);
71
- }
72
-
73
- if (facets.initiated_by) {
74
- const initiatedByFilterGroup = VUserFacet({
75
- buckets: facets.initiated_by || [],
76
- name: 'User'
77
- });
78
- customFilterGroups.push(initiatedByFilterGroup);
79
- }
80
-
81
- /** Run table */
82
- if (facets.interactions) {
83
- const interactionFilterGroup = VInteractionFacet({
84
- buckets: facets.interactions || [],
85
- name: 'interaction',
86
- placeholder: 'Interactions',
87
- });
88
- customFilterGroups.push(interactionFilterGroup);
89
- }
90
-
91
- if (facets.environments) {
92
- const environmentFilterGroup = VEnvironmentFacet({
93
- buckets: facets.environments || [],
94
- name: 'Environments'
95
- });
96
- customFilterGroups.push(environmentFilterGroup);
97
- }
98
-
99
- if (facets.models) {
100
- const modelFilterGroup = VStringFacet({
101
- search,
102
- buckets: facets.models || [],
103
- name: 'Model'
104
- });
105
- customFilterGroups.push(modelFilterGroup);
106
- }
107
-
108
- if (facets.statuses) {
109
- const statusFilterGroup = VStringFacet({
110
- search,
111
- buckets: facets.statuses || [],
112
- name: 'Status'
113
- });
114
- customFilterGroups.push(statusFilterGroup);
115
- }
116
-
117
- if (facets.finish_reason) {
118
- const processedFinishReason = facets.finish_reason.map((bucket: any) => ({
119
- ...bucket,
120
- _id: bucket._id === null ? 'none' : bucket._id
121
- }));
122
-
123
- const finishReasonFilterGroup = VStringFacet({
124
- search,
125
- buckets: processedFinishReason,
126
- name: 'finish_reason',
127
- placeholder: 'Finish Reason'
128
- });
129
- customFilterGroups.push(finishReasonFilterGroup);
130
- }
131
-
132
- if (facets.created_by) {
133
- const createdByFilterGroup = VUserFacet({
134
- buckets: facets.created_by || [],
135
- name: 'created_by',
136
- placeholder: 'Created By'
137
- });
138
- customFilterGroups.push(createdByFilterGroup);
139
- }
140
-
141
- if (facets.tags) {
142
- customFilterGroups.push({
143
- name: 'Tags',
144
- type: 'stringList',
145
- options: facets.tags.map((tag: string) => ({
146
- label: tag,
147
- value: tag
148
- }))
149
- });
150
- }
151
- /** Run table */
152
-
153
31
  const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
154
32
 
155
33
  const newFilters = typeof value === 'function' ? value(filters) : value;
@@ -188,10 +66,16 @@ export function VFacetsNav({ facets, search, textSearch = '' }: FacetsNavProps)
188
66
  };
189
67
 
190
68
  return (
191
- <FilterBar
69
+ <FilterProvider
192
70
  filterGroups={customFilterGroups}
193
71
  filters={filters}
194
72
  setFilters={handleFilterChange}
195
- />
73
+ >
74
+ <div className="flex gap-2 items-center">
75
+ <FilterBtn />
76
+ <FilterBar />
77
+ <FilterClear />
78
+ </div>
79
+ </FilterProvider>
196
80
  )
197
81
  }
@@ -6,9 +6,11 @@ interface StringFacetProps {
6
6
  buckets: FacetBucket[];
7
7
  name: string;
8
8
  placeholder?: string;
9
+ type?: 'select';
10
+ multiple?: boolean;
9
11
  }
10
12
 
11
- export function createStringFilterGroup({ buckets, name, placeholder }: StringFacetProps): FilterGroup {
13
+ export function createStringFilterGroup({ buckets, name, placeholder, type = 'select', multiple = false }: StringFacetProps): FilterGroup {
12
14
  const options = buckets.map((bucket) => ({
13
15
  label: facetOptionLabel(bucket),
14
16
  value: bucket._id
@@ -17,19 +19,23 @@ export function createStringFilterGroup({ buckets, name, placeholder }: StringFa
17
19
  const filterGroup: FilterGroup = {
18
20
  name: name,
19
21
  options: options,
20
- type: "select",
22
+ type: type,
23
+ multiple: multiple,
21
24
  placeholder: `${placeholder ?? `${name.charAt(0).toUpperCase() + name.slice(1)}`}`,
25
+ ...({ allowCreate: false })
22
26
  };
23
27
 
24
28
  return filterGroup;
25
29
  }
26
30
 
27
- export function VStringFacet({ buckets, name, placeholder}: {
31
+ export function VStringFacet({ buckets, name, placeholder, type, multiple }: {
28
32
  search: any;
29
33
  buckets: FacetBucket[];
30
34
  name: string;
31
35
  placeholder?: string;
32
36
  className?: string;
37
+ type?: 'select';
38
+ multiple?: boolean;
33
39
  }) {
34
- return createStringFilterGroup({ buckets, name, placeholder });
40
+ return createStringFilterGroup({ buckets, name, placeholder, type, multiple });
35
41
  }
@@ -4,9 +4,11 @@ import { FilterGroup } from "@vertesia/ui/core";
4
4
  interface VTypeFacetProps {
5
5
  buckets: FacetBucket[];
6
6
  typeRegistry: any;
7
+ type?: 'select';
8
+ multiple?: boolean;
7
9
  }
8
10
 
9
- export function VTypeFacet({ buckets, typeRegistry }: VTypeFacetProps) {
11
+ export function VTypeFacet({ buckets, typeRegistry, type = 'select', multiple = false }: VTypeFacetProps) {
10
12
  // Create a map for quick lookups of type names and counts
11
13
  const typeDataMap = new Map();
12
14
  buckets.forEach((bucket) => {
@@ -30,19 +32,18 @@ export function VTypeFacet({ buckets, typeRegistry }: VTypeFacetProps) {
30
32
  });
31
33
  });
32
34
 
33
- // Create options with just raw values
34
35
  const options = buckets.map((bucket) => {
35
36
  const typeId = bucket._id || "Document";
36
37
  return {
37
38
  value: typeId,
38
- // Store count as simple fallback label
39
39
  label: `(${bucket.count})`
40
40
  };
41
41
  });
42
42
 
43
43
  const customFilterGroups: FilterGroup = {
44
- name: 'Type',
45
- type: 'select',
44
+ name: 'Types',
45
+ type: type,
46
+ multiple: multiple,
46
47
  options: options,
47
48
  labelRenderer: (typeId: string) => {
48
49
  const typeData = typeDataMap.get(typeId);
@@ -32,9 +32,11 @@ export function createUserFilterGroup({ buckets, name, placeholder }: UserFacetP
32
32
  // For known users, render UserInfo with count
33
33
  const bucket = buckets.find(b => b._id === userRef);
34
34
  return (
35
- <div className="flex items-center justify-between w-full">
36
- <UserInfo userRef={userRef} showTitle={true} size="sm" />
37
- <span className="text-muted-foreground ml-2">({bucket?.count || 0})</span>
35
+ <div className="flex items-center w-full gap-2">
36
+ <div className="flex-1 min-w-0 flex items-center truncate">
37
+ <UserInfo userRef={userRef} showTitle={true} size="sm" />
38
+ </div>
39
+ <span className="text-muted-foreground flex-shrink-0">({bucket?.count || 0})</span>
38
40
  </div>
39
41
  );
40
42
  },
@@ -0,0 +1,132 @@
1
+ import { Filter as BaseFilter, FilterProvider, FilterBtn, FilterBar, FilterClear, FilterGroup } from '@vertesia/ui/core';
2
+ import { useState } from 'react';
3
+ import { VStringFacet } from './VStringFacet';
4
+ import { VUserFacet } from './VUserFacet';
5
+ import { SearchInterface } from './VFacetsNav';
6
+
7
+ interface WorkflowExecutionsFacetsNavProps {
8
+ facets: {
9
+ status?: any[];
10
+ initiated_by?: any[];
11
+ };
12
+ search: SearchInterface;
13
+ }
14
+
15
+ // Hook to create filter groups for workflow executions
16
+ export function useWorkflowExecutionsFilterGroups(facets: WorkflowExecutionsFacetsNavProps['facets']): FilterGroup[] {
17
+ const customFilterGroups: FilterGroup[] = [];
18
+
19
+ customFilterGroups.push({
20
+ placeholder: 'Search by Workflow or Run ID',
21
+ name: 'name',
22
+ type: 'text',
23
+ options: [],
24
+ });
25
+
26
+ if (facets.status) {
27
+ const statusFilterGroup = VStringFacet({
28
+ search: null as any, // This will be provided by the search context
29
+ buckets: facets.status || [],
30
+ name: 'Status'
31
+ });
32
+ customFilterGroups.push(statusFilterGroup);
33
+ }
34
+
35
+ if (facets.initiated_by) {
36
+ const initiatedByFilterGroup = VUserFacet({
37
+ buckets: facets.initiated_by || [],
38
+ name: 'User'
39
+ });
40
+ customFilterGroups.push(initiatedByFilterGroup);
41
+ }
42
+
43
+ const dateAfterFilterGroup = {
44
+ name: 'start',
45
+ placeholder: 'Date After',
46
+ type: 'date' as const,
47
+ multiple: false
48
+ };
49
+ customFilterGroups.push(dateAfterFilterGroup);
50
+
51
+ const dateBeforeFilterGroup = {
52
+ name: 'end',
53
+ placeholder: 'Date Before',
54
+ type: 'date' as const,
55
+ multiple: false
56
+ };
57
+ customFilterGroups.push(dateBeforeFilterGroup);
58
+
59
+ return customFilterGroups;
60
+ }
61
+
62
+ // Hook to create filter change handler for workflow executions
63
+ export function useWorkflowExecutionsFilterHandler(search: SearchInterface) {
64
+ return (newFilters: BaseFilter[]) => {
65
+ if (newFilters.length === 0) {
66
+ search.clearFilters();
67
+ return;
68
+ }
69
+
70
+ search.clearFilters(false);
71
+
72
+ newFilters.forEach(filter => {
73
+ if (filter.value && filter.value.length > 0) {
74
+ const filterName = filter.name;
75
+ let filterValue;
76
+ if (filter.type === 'stringList') {
77
+ filterValue = filter.value.map(v => typeof v === 'string' ? v : v.value);
78
+ } else if (filter.multiple) {
79
+ filterValue = Array.isArray(filter.value)
80
+ ? filter.value.map((v: any) => typeof v === 'object' && v.value ? v.value : v)
81
+ : [typeof filter.value === 'object' && (filter.value as any).value ? (filter.value as any).value : filter.value];
82
+ } else {
83
+ // Single value - don't wrap in array
84
+ filterValue = Array.isArray(filter.value) && filter.value[0] && typeof filter.value[0] === 'object'
85
+ ? (filter.value[0] as any).value
86
+ : Array.isArray(filter.value) && filter.value[0]
87
+ ? filter.value[0]
88
+ : filter.value;
89
+ }
90
+
91
+ if (filterName === 'name') {
92
+ search.query.search_term = filterValue;
93
+ search.query.name = filterValue;
94
+ } else {
95
+ search.query[filterName] = filterValue;
96
+ }
97
+ }
98
+ });
99
+
100
+ search.search();
101
+ };
102
+ }
103
+
104
+ // Legacy component for backward compatibility
105
+ export function WorkflowExecutionsFacetsNav({
106
+ facets,
107
+ search,
108
+ }: WorkflowExecutionsFacetsNavProps) {
109
+ const [filters, setFilters] = useState<BaseFilter[]>([]);
110
+ const filterGroups = useWorkflowExecutionsFilterGroups(facets);
111
+ const handleFilterLogic = useWorkflowExecutionsFilterHandler(search);
112
+
113
+ const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
114
+ const newFilters = typeof value === 'function' ? value(filters) : value;
115
+ setFilters(newFilters);
116
+ handleFilterLogic(newFilters);
117
+ };
118
+
119
+ return (
120
+ <FilterProvider
121
+ filterGroups={filterGroups}
122
+ filters={filters}
123
+ setFilters={handleFilterChange}
124
+ >
125
+ <div className="flex gap-2 items-center">
126
+ <FilterBtn />
127
+ <FilterBar />
128
+ <FilterClear />
129
+ </div>
130
+ </FilterProvider>
131
+ );
132
+ }
@@ -1,11 +1,14 @@
1
1
  export { EnvironmentFacet } from "./EnvironmentFacet";
2
2
  export * from "./FacetsNav";
3
- export { InteractionFacet } from "./InteractionFacet";
4
3
  export { StringFacet } from "./StringFacet";
5
4
  export { StringListFacet } from "./StringListFacet";
6
5
  export { TypeFacet } from "./TypeFacet";
7
- export { UserFacet } from "./UserFacet";
6
+
8
7
  export * from "./VFacetsNav";
9
8
  export { VStringFacet } from "./VStringFacet";
10
9
  export { VTypeFacet } from "./VTypeFacet";
11
10
  export { VUserFacet } from "./VUserFacet";
11
+
12
+ export { RunsFacetsNav, useRunsFilterGroups, useRunsFilterHandler } from "./RunsFacetsNav";
13
+ export { WorkflowExecutionsFacetsNav, useWorkflowExecutionsFilterGroups, useWorkflowExecutionsFilterHandler } from "./WorkflowExecutionsFacetsNav";
14
+ export { DocumentsFacetsNav, useDocumentFilterGroups, useDocumentFilterHandler } from "./DocumentsFacetsNav";
@@ -18,7 +18,7 @@ export function CollectionsTable({ }: CollectionsTableProps) {
18
18
  const [isLoading, setIsLoading] = useState(true);
19
19
  const [isOpen, setOpen] = useState(false);
20
20
 
21
- const { data: collections, error, refetch } = useFetch(() => client.store.collections.list(), []);
21
+ const { data: collections, error, refetch } = useFetch(() => client.store.collections.search({}), []);
22
22
 
23
23
  // Update loading state when data is fetched
24
24
  useEffect(() => {
@@ -57,7 +57,8 @@ export function CollectionsTable({ }: CollectionsTableProps) {
57
57
 
58
58
  return (
59
59
  <>
60
- {collections &&
60
+ {
61
+ collections &&
61
62
  (collections.length > 0 ?
62
63
  (<Table className="w-full">
63
64
  <thead>
@@ -86,10 +86,25 @@ export function CreateCollectionForm({ onClose, redirect = true, onAddToCollecti
86
86
  onChange={(ev) => setPayloadProp("description", ev.target.value)}
87
87
  />
88
88
  </FormItem>
89
- <FormItem label="Dynamic Collection" className="mt-2" direction="row" description="Dynamic Collection is based on a query vs. users manully adding content.">
89
+ <FormItem label="Dynamic Collection" className="mt-2" direction="row" description="Dynamically fetch content for the collection based on a query. If not enabled, then content must be added by users or agents.">
90
90
  <Switch value={payload.dynamic || false} onChange={(value) => setPayloadProp("dynamic", value)} />
91
91
  </FormItem>
92
- <FormItem label="Type" className="mt-2" description="This is optional and drives what properties are used to describe a collection">
92
+ { !payload.dynamic &&
93
+ <FormItem label="Allowed Content Types" className="mt-4" description="Optionally select which content types can be added to the collection. If not set, then all content types are allowed.">
94
+ <SelectContentType
95
+ defaultValue={payload.allowed_types || null}
96
+ onChange={(v) => {
97
+ if (Array.isArray(v)) {
98
+ setPayloadProp("allowed_types", v.map(type => type.id));
99
+ } else {
100
+ setPayloadProp("allowed_types", v ? [v.id] : []);
101
+ }
102
+ }}
103
+ isClearable multiple
104
+ />
105
+ </FormItem>
106
+ }
107
+ <FormItem label="Type" className="mt-2" description="Optionally select a content type to assign custom properties and data to the collection.">
93
108
  <SelectContentType
94
109
  defaultValue={payload.type || null}
95
110
  onChange={(v) => {
@@ -102,19 +117,6 @@ export function CreateCollectionForm({ onClose, redirect = true, onAddToCollecti
102
117
  isClearable
103
118
  />
104
119
  </FormItem>
105
- <FormItem label="Allowed Content Types" className="mt-4">
106
- <SelectContentType
107
- defaultValue={payload.allowed_types || null}
108
- onChange={(v) => {
109
- if (Array.isArray(v)) {
110
- setPayloadProp("allowed_types", v.map(type => type.id));
111
- } else {
112
- setPayloadProp("allowed_types", v ? [v.id] : []);
113
- }
114
- }}
115
- isClearable multiple
116
- />
117
- </FormItem>
118
120
  </VModalBody>
119
121
  <VModalFooter>
120
122
  <Button isDisabled={isProcessing} onClick={onCreate}>