@vertesia/ui 0.67.0 → 0.69.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
@@ -128,8 +128,24 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
128
128
  onChange={(e) => setField("description", e.target.value)}
129
129
  />
130
130
  </FormItem>
131
+ {
132
+ !collection.dynamic &&
133
+ <FormItem label="Allowed Content Types" description="Select which content types can be added to the collection. If not set, then all content types are allowed.">
134
+ <SelectContentType
135
+ defaultValue={metadata.allowed_types || null}
136
+ onChange={(v) => {
137
+ if (Array.isArray(v)) {
138
+ setField("allowed_types", v.map(type => type.id));
139
+ } else {
140
+ setField("allowed_types", v ? [v.id] : []);
141
+ }
142
+ }}
143
+ isClearable multiple
144
+ />
145
+ </FormItem>
146
+ }
131
147
  {collection.dynamic && (
132
- <FormItem label="Query" description="Define the query to fetch dynamic content for this collection.">
148
+ <FormItem label="Query" description="Define the query to dynamically fetch content for the collection.">
133
149
  <textarea
134
150
  className={Styles.INPUT}
135
151
  value={metadata.query}
@@ -137,11 +153,11 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
137
153
  />
138
154
  </FormItem>
139
155
  )}
140
- <FormItem label="Table Layout" description="Define how the collection should be displayed in tables.">
156
+ <FormItem label="Table Layout" description="Define a custom layout for displaying the collection in tables.">
141
157
  <CodeMirrorEditor className="border-1 rounded-md border-border"
142
158
  value={tableLayoutValue} extensions={extensions} editorRef={tableLayoutRef} />
143
159
  </FormItem>
144
- <FormItem label="Type">
160
+ <FormItem label="Type" description="Select a content type to assign custom properties and data to the collection.">
145
161
  <SelectContentType
146
162
  defaultValue={metadata.type || null}
147
163
  onChange={(v) => {
@@ -154,19 +170,6 @@ export function EditCollectionView({ refetch, collection }: EditCollectionViewPr
154
170
  isClearable
155
171
  />
156
172
  </FormItem>
157
- <FormItem label="Allowed Content Types">
158
- <SelectContentType
159
- defaultValue={metadata.allowed_types || null}
160
- onChange={(v) => {
161
- if (Array.isArray(v)) {
162
- setField("allowed_types", v.map(type => type.id));
163
- } else {
164
- setField("allowed_types", v ? [v.id] : []);
165
- }
166
- }}
167
- isClearable multiple
168
- />
169
- </FormItem>
170
173
  <Button size="lg" className="w-min my-4" isDisabled={isUpdating} onClick={onSubmit}>
171
174
  Save Metadata
172
175
  </Button>
@@ -16,7 +16,7 @@ interface SelectCollectionProps {
16
16
  */
17
17
  export function SelectCollection({ onChange, value, disabled = false, className }: SelectCollectionProps) {
18
18
  const { client } = useUserSession();
19
- const { data: collections, error } = useFetch(() => client.store.collections.list({ dynamic: false }), []);
19
+ const { data: collections, error } = useFetch(() => client.store.collections.search({ dynamic: false }), []);
20
20
 
21
21
  if (error) {
22
22
  return <ErrorBox title='Collection fetch failed'>{error.message}</ErrorBox>
@@ -102,7 +102,6 @@ export function DocumentPreviewPanel({
102
102
  try {
103
103
  // Try to get a rendition first
104
104
  const rendition = await client.objects.getRendition(obj.id, {
105
- max_hw: 1024,
106
105
  format: ImageRenditionFormat.jpeg,
107
106
  generate_if_missing: false,
108
107
  });
@@ -5,7 +5,8 @@ import { Button, Divider, ErrorBox, SidePanel, Spinner, useDebounce, useIntersec
5
5
  import { useNavigate } from "@vertesia/ui/router";
6
6
  import { TypeRegistry, useUserSession } from '@vertesia/ui/session';
7
7
  import { Download, RefreshCw, Eye } from 'lucide-react';
8
- import { VFacetsNav } from "../../facets";
8
+ import { FilterProvider, FilterBtn, FilterBar, FilterClear, Filter as BaseFilter } from '@vertesia/ui/core';
9
+ import { useDocumentFilterGroups, useDocumentFilterHandler } from "../../facets/DocumentsFacetsNav";
9
10
  import { VectorSearchWidget } from './components/VectorSearchWidget';
10
11
 
11
12
  import { ContentDispositionButton } from './components/ContentDispositionButton';
@@ -97,6 +98,7 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
97
98
  const [refreshTrigger, _setRefreshTrigger] = useState(0);
98
99
  const [loaded, setLoaded] = useState(0);
99
100
  const [isGridView, setIsGridView] = useState(localStorage.getItem(ContentDispositionButton.LAST_DISPLAYED_VIEW) === "grid");
101
+ const [filters, setFilters] = useState<BaseFilter[]>([]);
100
102
 
101
103
  const loadMoreRef = useRef<HTMLDivElement>(null);
102
104
  useIntersectionObserver(loadMoreRef, () => {
@@ -148,22 +150,89 @@ export function DocumentSearchResults({ layout, onUpload, allowFilter = true, al
148
150
  search.search().then(() => setIsReady(true));
149
151
  };
150
152
 
153
+ // Use DocumentsFacetsNav hooks for cleaner organization
154
+ const filterGroups = useDocumentFilterGroups(facets);
155
+ const handleFilterLogic = useDocumentFilterHandler(facetSearch);
156
+
157
+ const handleFilterChange: React.Dispatch<React.SetStateAction<BaseFilter[]>> = (value) => {
158
+ const newFilters = typeof value === 'function' ? value(filters) : value;
159
+ setFilters(newFilters);
160
+ handleFilterLogic(newFilters);
161
+ };
162
+
163
+ const url = new URL(window.location.href);
164
+ const filtersParam = url.searchParams.get('filters');
165
+
166
+ if (filtersParam) {
167
+ try {
168
+ const filterPairs = filtersParam.split(';');
169
+ const validFilterPairs = filterPairs.filter(pair => {
170
+ const [encodedName] = pair.split(':');
171
+ const name = decodeURIComponent(encodedName);
172
+ return name !== 'start' && name !== 'end';
173
+ });
174
+
175
+ if (validFilterPairs.length !== filterPairs.length) {
176
+ const newFiltersParam = validFilterPairs.length > 0 ? validFilterPairs.join(';') : '';
177
+ if (newFiltersParam) {
178
+ url.searchParams.set('filters', newFiltersParam);
179
+ } else {
180
+ url.searchParams.delete('filters');
181
+ }
182
+ window.history.replaceState({}, '', url.toString());
183
+ }
184
+ } catch (error) {
185
+ console.error("Failed to clean start/end filters from URL:", error);
186
+ }
187
+ }
188
+
151
189
  return (
152
190
  <div className="flex flex-col gap-y-2">
153
191
  <OverviewDrawer object={selectedObject} onClose={() => setSelectedObject(null)} />
154
192
  {
155
193
  error && <ErrorBox title="Error">{error.message}</ErrorBox>
156
194
  }
157
- <div className="flex flex-row gap-4 items-center justify-between w-full">
158
- {
159
- allowSearch && <VectorSearchWidget onChange={setVQuery} isLoading={isLoading} refresh={refreshTrigger} />
160
- }
161
- <div className="flex gap-1 items-center">
162
- <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
163
- <ContentDispositionButton onUpdate={setIsGridView} />
164
- </div>
165
- </div>
166
- {allowFilter && <VFacetsNav facets={facets} search={facetSearch} textSearch={"Name or ID"} />}
195
+ {
196
+ allowFilter && (
197
+ <FilterProvider
198
+ filterGroups={filterGroups}
199
+ filters={filters}
200
+ setFilters={handleFilterChange}
201
+ >
202
+ <div className="flex flex-row gap-4 items-center justify-between w-full">
203
+ <div className="flex gap-2 items-center w-2/3">
204
+ {
205
+ allowSearch && <VectorSearchWidget onChange={setVQuery} isLoading={isLoading} refresh={refreshTrigger} className="w-wull" />
206
+ }
207
+ <FilterBtn />
208
+ </div>
209
+ <div className="flex gap-1 items-center">
210
+ <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
211
+ <ContentDispositionButton onUpdate={setIsGridView} />
212
+ </div>
213
+ </div>
214
+ <div className="flex gap-2 items-center">
215
+ <FilterBar />
216
+ <FilterClear />
217
+ </div>
218
+ </FilterProvider>
219
+ )
220
+ }
221
+ {
222
+ !allowFilter && (
223
+ <div className="flex flex-row gap-4 items-center justify-between w-full">
224
+ <div className="flex gap-2 items-center w-2/3">
225
+ {
226
+ allowSearch && <VectorSearchWidget onChange={setVQuery} isLoading={isLoading} refresh={refreshTrigger} />
227
+ }
228
+ </div>
229
+ <div className="flex gap-1 items-center">
230
+ <Button variant="outline" onClick={handleRefetch} alt="Refresh"><RefreshCw size={16} /></Button>
231
+ <ContentDispositionButton onUpdate={setIsGridView} />
232
+ </div>
233
+ </div>
234
+ )
235
+ }
167
236
  <DocumentTable
168
237
  objects={objects}
169
238
  isLoading={!objects.length && isLoading}
@@ -83,7 +83,6 @@ export function ContentOverview({
83
83
  // Request document rendition from the server
84
84
  const response = await client.objects.getRendition(object.id, {
85
85
  format: format as any, // We're extending the format type
86
- max_hw: 1024, // Not used for document exports but required by API
87
86
  generate_if_missing: true,
88
87
  sign_url: true,
89
88
  });
@@ -172,7 +171,6 @@ export function ContentOverview({
172
171
  if (isImage) {
173
172
  client.objects
174
173
  .getRendition(object.id, {
175
- max_hw: 1024,
176
174
  format: ImageRenditionFormat.jpeg,
177
175
  generate_if_missing: false,
178
176
  sign_url: true,
@@ -1,7 +1,7 @@
1
1
  import { ColumnLayout, ContentObjectItem } from "@vertesia/common";
2
2
  import { Button, ErrorBox, Spinner, useIntersectionObserver } from "@vertesia/ui/core";
3
3
  import { useEffect, useRef, useState } from "react";
4
- import { VFacetsNav } from "../../../facets";
4
+ import { DocumentsFacetsNav } from "../../../facets";
5
5
  import { DocumentTable } from "../DocumentTable";
6
6
  import { useDocumentSearch, useWatchDocumentSearchFacets, useWatchDocumentSearchResult } from "../search/DocumentSearchContext";
7
7
  import { DocumentSearchProvider } from "../search/DocumentSearchProvider";
@@ -66,7 +66,7 @@ function SelectDocumentImpl({ onRowClick }: SelectDocumentImplProps) {
66
66
  return (
67
67
  <div>
68
68
  <div className="flex justify-between items-center mb-4">
69
- <VFacetsNav facets={facets} search={facetSearch} textSearch="Filter content" />
69
+ <DocumentsFacetsNav facets={facets} search={facetSearch} />
70
70
  <div className="flex items-center gap-2">
71
71
  <Button variant="outline" onClick={handleRefetch} alt="Refresh">
72
72
  <RefreshCw size={16} />
@@ -107,8 +107,8 @@ export function VectorSearchWidget({ onChange, isLoading, refresh }: VectorSearc
107
107
  };
108
108
 
109
109
  return (
110
- <div className="flex gap-1 items-center w-full">
111
- <Input placeholder="Type what you are looking for" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} />
110
+ <div className="flex gap-1 items-center w-1/2">
111
+ <Input placeholder="Type what you are looking for, or select a filter" value={searchText} onChange={setSearchText} onKeyDown={handleKeyPress} />
112
112
  <Button variant="secondary" isLoading={isLoading} onClick={() => fireSearch("text")} isDisabled={!isReady} alt="semantic search">Search</Button>
113
113
  </div>
114
114
  );
@@ -1,4 +1,4 @@
1
- import { Button, Portal, useToast, VModal, VModalBody, VModalFooter, VModalTitle } from "@vertesia/ui/core";
1
+ import { Button, DialogDescription, Heading, Portal, useToast, VModal, VModalBody, VModalFooter, VModalTitle, VTabs, VTabsBar, VTabsPanel } from "@vertesia/ui/core";
2
2
  import { useUserSession } from "@vertesia/ui/session";
3
3
  import { useCallback, useState } from "react";
4
4
  import { CreateCollectionForm, SelectCollection } from "../../../collections";
@@ -42,8 +42,13 @@ interface SelectCollectionModalProps {
42
42
  function SelectCollectionModal({ isOpen, onClose, objectIds }: SelectCollectionModalProps) {
43
43
  return (
44
44
  <VModal isOpen={isOpen} onClose={onClose}>
45
- <VModalTitle>Add to a Collection</VModalTitle>
46
- <AddToCollectionForm onClose={onClose} objectIds={objectIds}/>
45
+ <VModalTitle className="flex flex-col">
46
+ Add to a Collection
47
+ </VModalTitle>
48
+ <DialogDescription>
49
+ Add the selected objects to an existing collection or create a new one.
50
+ </DialogDescription>
51
+ <AddToCollectionForm onClose={onClose} objectIds={objectIds} />
47
52
  </VModal>
48
53
  )
49
54
  }
@@ -82,22 +87,38 @@ function AddToCollectionForm({ onClose, objectIds }: AddToCollectionFormProps) {
82
87
  setSelectedCollectionId(collectionId);
83
88
  };
84
89
 
90
+ const tabs = [
91
+ {
92
+ name: 'select',
93
+ label: 'Select Collection',
94
+ content: (
95
+ <div className="p-4">
96
+ <Heading level={5}>Choose from existing collections</Heading>
97
+ <VModalBody>
98
+ <SelectCollection onChange={onCollectionChange} value={selectedCollectionId} className="mb-4" />
99
+ </VModalBody>
100
+ <VModalFooter>
101
+ <Button isDisabled={!selectedCollectionId} onClick={() => selectedCollectionId && onAddToCollection({ collectionId: selectedCollectionId })}>
102
+ Add to Collection
103
+ </Button>
104
+ </VModalFooter>
105
+ </div>
106
+ )
107
+ },
108
+ {
109
+ name: 'create',
110
+ label: 'Create new',
111
+ content:
112
+ <div className="p-4">
113
+ <CreateCollectionForm onClose={onClose} onAddToCollection={(id: string) => onAddToCollection({ collectionId: id })} redirect={false} />
114
+ </div>
115
+ }
116
+ ];
117
+
85
118
  return (
86
- <>
87
- <VModalBody>
88
- <SelectCollection onChange={onCollectionChange} value={selectedCollectionId} className="mb-4"/>
89
- </VModalBody>
90
- <VModalFooter>
91
- <Button isDisabled={!selectedCollectionId} onClick={() => selectedCollectionId && onAddToCollection({ collectionId: selectedCollectionId })}>
92
- Add to Collection
93
- </Button>
94
- </VModalFooter>
95
- <div className="flex items-center flex-row w-full text-muted">
96
- <hr className="w-full" />
97
- <div className="px-2 text-xs">OR</div>
98
- <hr className="w-full" />
99
- </div>
100
- <CreateCollectionForm onClose={onClose} onAddToCollection={(id: string) => onAddToCollection({ collectionId: id })} redirect={false} />
101
- </>
119
+ <VTabs defaultValue="select" tabs={tabs} fullWidth>
120
+ <VTabsBar />
121
+ <VTabsPanel />
122
+ </VTabs>
102
123
  )
103
124
  }