@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertesia/ui",
3
- "version": "0.67.0",
3
+ "version": "0.68.0",
4
4
  "description": "Vertesia UI components and and hooks",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -42,12 +42,14 @@
42
42
  "debounce": "^2.2.0",
43
43
  "fast-xml-parser": "^5.2.3",
44
44
  "firebase": "^10.12.2",
45
+ "json-schema": "^0.4.0",
45
46
  "jwt-decode": "^4.0.0",
46
47
  "lodash-es": "^4.17.21",
47
48
  "lucide-react": "^0.511.0",
48
49
  "monaco-editor": "^0.52.2",
49
50
  "motion": "^12.12.1",
50
51
  "react": "^19.1.0",
52
+ "react-calendar": "^6.0.0",
51
53
  "react-date-picker": "^11.0.0",
52
54
  "react-dom": "^19.1.0",
53
55
  "react-error-boundary": "^6.0.0",
@@ -55,21 +57,20 @@
55
57
  "remark-gfm": "^4.0.1",
56
58
  "tailwind-merge": "^3.3.0",
57
59
  "ts-md5": "^1.3.1",
58
- "json-schema": "^0.4.0",
59
- "@vertesia/client": "0.67.0",
60
- "@vertesia/common": "0.67.0",
61
- "@vertesia/json": "0.67.0"
60
+ "@vertesia/client": "0.68.0",
61
+ "@vertesia/common": "0.68.0",
62
+ "@vertesia/json": "0.68.0"
62
63
  },
63
64
  "devDependencies": {
64
65
  "@eslint/js": "^9.27.0",
65
66
  "@rollup/plugin-commonjs": "^28.0.3",
66
67
  "@rollup/plugin-json": "^6.1.0",
67
68
  "@rollup/plugin-node-resolve": "^16.0.1",
69
+ "@types/json-schema": "^7.0.15",
68
70
  "@types/lodash-es": "^4.17.12",
69
71
  "@types/node": "^22.15.21",
70
72
  "@types/react": "^19.1.0",
71
73
  "@types/react-dom": "^19.1.1",
72
- "@types/json-schema": "^7.0.15",
73
74
  "eslint": "^9.27.0",
74
75
  "eslint-import-resolver-typescript": "^4.3.5",
75
76
  "eslint-plugin-import": "^2.31.0",
@@ -118,6 +119,10 @@
118
119
  "./features": {
119
120
  "types": "./lib/types/features/index.d.ts",
120
121
  "default": "./lib/esm/features/index.js"
122
+ },
123
+ "./shell": {
124
+ "types": "./lib/types/shell/index.d.ts",
125
+ "default": "./lib/esm/shell/index.js"
121
126
  }
122
127
  },
123
128
  "types": "./lib/index.d.ts",
@@ -149,6 +154,9 @@
149
154
  ],
150
155
  "form": [
151
156
  "./lib/types/form/index.d.ts"
157
+ ],
158
+ "shell": [
159
+ "./lib/types/shell/index.d.ts"
152
160
  ]
153
161
  }
154
162
  },
@@ -101,14 +101,18 @@ export function DotBadge({
101
101
  className={cn(dotBadgeVariants({ variant }), className)}
102
102
  {...props}
103
103
  >
104
- <svg
105
- className={cn(dotVariants({ variant }), dotClassName)}
106
- viewBox="0 0 6 6"
107
- aria-hidden="true"
108
- >
109
- <circle cx={3} cy={3} r={3} />
110
- </svg>
111
- {children}
104
+ <div className="flex-shrink-0">
105
+ <svg
106
+ className={cn(dotVariants({ variant }), dotClassName)}
107
+ viewBox="0 0 6 6"
108
+ aria-hidden="true"
109
+ >
110
+ <circle cx={3} cy={3} r={3} />
111
+ </svg>
112
+ </div>
113
+ <span className="truncate">
114
+ {children}
115
+ </span>
112
116
  </span>
113
117
  );
114
118
  }
@@ -11,12 +11,13 @@ interface FormItemProps {
11
11
  description?: ReactNode;
12
12
  required?: boolean;
13
13
  direction?: "row" | "column";
14
+ disabled?: boolean;
14
15
  }
15
- export function FormItem({ description, required, label, className, direction = "column", children }: FormItemProps) {
16
+ export function FormItem({ description, required, label, className, direction = "column", children, disabled = false }: FormItemProps) {
16
17
  return (
17
- <div className={clsx("flex w-full space-y-1", className, direction === "row" ? "flex-row justify-between" : "flex-col")}>
18
+ <div className={clsx("flex w-full space-y-1", className, direction === "row" ? "flex-row justify-between items-center gap-2" : "flex-col")}>
18
19
  <div className='flex items-center gap-1'>
19
- <label className="text-sm font-medium mb-1">
20
+ <label className={`text-sm font-medium mb-1 ${disabled ? "text-muted" : ""}`}>
20
21
  {label}{required ? <span className='text-destructive -mt-4 ml-1'>*</span> : ""}
21
22
  </label>
22
23
  {
@@ -50,29 +50,33 @@ export function InputList({ value = [], onChange, className, delimiters = ", ",
50
50
  };
51
51
 
52
52
  return (
53
- <div className={clsx(className, 'w-full space-x-1 space-y-1 p-2', Styles.INPUT)}>
53
+ <div className={clsx(className, 'w-full flex flex-wrap items-center gap-1 p-2', Styles.INPUT)}>
54
54
  {
55
55
  value && value.length > 0 &&
56
56
  (value.map((v, index) =>
57
- <Badge variant={"secondary"} key={index} onClick={() => _onClick(index)} style={{ whiteSpace: 'nowrap' }} className='cursor-pointer'>
58
- {v}
57
+ <Badge
58
+ variant={"secondary"}
59
+ key={index}
60
+ onClick={() => _onClick(index)}
61
+ className='cursor-pointer'
62
+ title={v}
63
+ >
64
+ <span className='break-all'>{v}</span>
59
65
  </Badge>
60
66
  ))
61
67
  }
62
- <div>
63
- <Input
64
- clearable={false}
65
- className='placeholder:text-muted-foreground px-1'
66
- variant='unstyled'
67
- type='text'
68
- value={text}
69
- onBlur={onBlur}
70
- onKeyDown={onKeyDown}
71
- onChange={setText}
72
- placeholder={!value || value.length === 0 ? placeholder : ''}
73
- autoFocus={autoFocus}
74
- />
75
- </div>
68
+ <Input
69
+ clearable={false}
70
+ className='placeholder:text-muted-foreground px-1 min-w-0 flex-shrink-0 min-w-[120px]'
71
+ variant='unstyled'
72
+ type='text'
73
+ value={text}
74
+ onBlur={onBlur}
75
+ onKeyDown={onKeyDown}
76
+ onChange={setText}
77
+ placeholder={!value || value.length === 0 ? placeholder : ''}
78
+ autoFocus={autoFocus}
79
+ />
76
80
  </div>
77
81
  )
78
82
  }
@@ -11,7 +11,7 @@ const Checkbox = React.forwardRef<
11
11
  <CheckboxPrimitive.Root
12
12
  ref={ref}
13
13
  className={cn(
14
- "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
14
+ "peer size-4 shrink-0 rounded-sm border border-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-white",
15
15
  className,
16
16
  )}
17
17
  {...props}
@@ -19,7 +19,7 @@ const Checkbox = React.forwardRef<
19
19
  <CheckboxPrimitive.Indicator
20
20
  className={cn("flex items-center justify-center text-current")}
21
21
  >
22
- <Check className="h-4 w-4" />
22
+ <Check className="size-4" />
23
23
  </CheckboxPrimitive.Indicator>
24
24
  </CheckboxPrimitive.Root>
25
25
  ))
@@ -59,7 +59,7 @@ const CommandList = React.forwardRef<
59
59
  >(({ className, ...props }, ref) => (
60
60
  <CommandPrimitive.List
61
61
  ref={ref}
62
- className={cn("max-h-[200px] overflow-y-auto overflow-x-hidden", className)}
62
+ className={cn("overflow-y-auto overflow-x-hidden", className)}
63
63
  {...props}
64
64
  />
65
65
  ))
@@ -84,22 +84,31 @@ export const VModalTitle = ({
84
84
  children,
85
85
  show = true,
86
86
  className,
87
+ description,
87
88
  ...props
88
- }: React.HTMLAttributes<HTMLHeadingElement> & { show?: boolean }) => {
89
+ }: React.HTMLAttributes<HTMLHeadingElement> & { show?: boolean; description?: string }) => {
89
90
  if (!show) {
90
91
  return (
91
92
  <VisuallyHidden>
92
93
  <DialogTitle>{children}</DialogTitle>
94
+ {description && <DialogDescription>{description}</DialogDescription>}
93
95
  </VisuallyHidden>
94
96
  )
95
97
  }
96
98
  return (
97
- <DialogTitle
98
- className={cn("text-lg font-semibold leading-6 tracking-tight py-2", className)}
99
- {...props}
100
- >
101
- {children}
102
- </DialogTitle>
99
+ <>
100
+ <DialogTitle
101
+ className={cn("text-lg font-semibold leading-6 tracking-tight", { 'py-2': !description }, className)}
102
+ {...props}
103
+ >
104
+ {children}
105
+ {description && (
106
+ <DialogDescription className="text-sm !font-normal text-muted-foreground pb-2">
107
+ {description}
108
+ </DialogDescription>
109
+ )}
110
+ </DialogTitle>
111
+ </>
103
112
  );
104
113
  };
105
114
 
@@ -177,7 +186,7 @@ const DialogContent = React.forwardRef<
177
186
  event.preventDefault();
178
187
  }}
179
188
  className={cn(
180
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-2 border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
189
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
181
190
  className
182
191
  )}
183
192
  {...props}
@@ -194,7 +203,7 @@ const DialogDescription = React.forwardRef<
194
203
  >(({ className, ...props }, ref) => (
195
204
  <DialogPrimitive.Description
196
205
  ref={ref}
197
- className={cn("text-sm text-muted-foreground", className)}
206
+ className={cn("text-sm text-muted", className)}
198
207
  {...props}
199
208
  />
200
209
  ))
@@ -5,8 +5,7 @@ interface DynamicLabelProps {
5
5
  labelRenderer?: (value: string) => React.ReactNode | Promise<React.ReactNode>;
6
6
  fallbackLabel?: React.ReactNode;
7
7
  }
8
-
9
- export function DynamicLabel({ value, labelRenderer, fallbackLabel }: DynamicLabelProps) {
8
+ export function DynamicLabel({ value, labelRenderer, fallbackLabel }: Readonly<DynamicLabelProps>) {
10
9
  const [label, setLabel] = useState<React.ReactNode>(fallbackLabel || value);
11
10
  const [isLoading, setIsLoading] = useState(false);
12
11
 
@@ -0,0 +1,211 @@
1
+ import { useState, useEffect } from "react";
2
+ import dayjs from "dayjs";
3
+ import ReactCalendar from "react-calendar";
4
+ import { Button } from "../../button";
5
+ import { Popover, PopoverContent, PopoverTrigger } from "../../popover";
6
+ import { calendarStyles } from "../filter-styles";
7
+
8
+ export const DateCombobox = ({
9
+ filterValues,
10
+ setFilterValues,
11
+ isRange = false,
12
+ }: {
13
+ filterValues: string[];
14
+ setFilterValues: (values: string[]) => void;
15
+ isRange?: boolean;
16
+ }) => {
17
+ const [open, setOpen] = useState(false);
18
+ const [localDateRange, setLocalDateRange] = useState<[Date | null, Date | null]>([null, null]);
19
+
20
+ // For single date
21
+ const selectedDate = filterValues[0] ? new Date(filterValues[0]) : undefined;
22
+
23
+ // For date range - use local state for immediate feedback, fall back to filter values
24
+ const dateRange: [Date | null, Date | null] = isRange ? [
25
+ localDateRange[0] || (filterValues[0] ? new Date(filterValues[0]) : null),
26
+ localDateRange[1] || (filterValues[1] ? new Date(filterValues[1]) : null)
27
+ ] : [null, null];
28
+
29
+ // Update local state when filter values change
30
+ useEffect(() => {
31
+ if (isRange) {
32
+ setLocalDateRange([
33
+ filterValues[0] ? new Date(filterValues[0]) : null,
34
+ filterValues[1] ? new Date(filterValues[1]) : null
35
+ ]);
36
+ }
37
+ }, [filterValues, isRange]);
38
+
39
+ const getDisplayText = () => {
40
+ if (isRange) {
41
+ if (dateRange[0] && dateRange[1]) {
42
+ return (
43
+ <span className="flex items-center gap-1.5">
44
+ <span className="font-medium">{dayjs(dateRange[0]).format("MMMM DD, YYYY")}</span>
45
+ <span className="text-xs text-muted-foreground">-</span>
46
+ <span className="font-medium">{dayjs(dateRange[1]).format("MMMM DD, YYYY")}</span>
47
+ </span>
48
+ );
49
+ } else if (dateRange[0]) {
50
+ return (
51
+ <span className="flex items-center gap-1.5">
52
+ <span className="font-medium">{dayjs(dateRange[0]).format("MMMM DD, YYYY")}</span>
53
+ <span className="text-xs text-muted-foreground">- Select end</span>
54
+ </span>
55
+ );
56
+ } else {
57
+ return <span className="text-muted-foreground">Select range</span>;
58
+ }
59
+ } else {
60
+ return selectedDate ? dayjs(selectedDate).format("MMMM DD, YYYY") : "Pick a date";
61
+ }
62
+ };
63
+
64
+ const handleDateChange = (date: any) => {
65
+ if (isRange) {
66
+ // Update local state immediately for visual feedback
67
+ if (Array.isArray(date)) {
68
+ setLocalDateRange([date[0], date[1]]);
69
+
70
+ // Update filter values
71
+ if (date[0] && date[1]) {
72
+ setFilterValues([
73
+ dayjs(date[0]).format("YYYY-MM-DD"),
74
+ dayjs(date[1]).format("YYYY-MM-DD")
75
+ ]);
76
+ } else if (date[0]) {
77
+ setFilterValues([dayjs(date[0]).format("YYYY-MM-DD")]);
78
+ }
79
+ }
80
+ } else {
81
+ if (date) {
82
+ const actualDate = Array.isArray(date) ? date[0] : date;
83
+ if (actualDate) {
84
+ setFilterValues([dayjs(actualDate).format("YYYY-MM-DD")]);
85
+ setOpen(false);
86
+ }
87
+ }
88
+ }
89
+ };
90
+
91
+ return (
92
+ <Popover _open={open} onOpenChange={setOpen}>
93
+ <PopoverTrigger
94
+ className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition"
95
+ >
96
+ <div className="flex gap-1.5 items-center min-h-[20px]">
97
+ {getDisplayText()}
98
+ </div>
99
+ </PopoverTrigger>
100
+ <PopoverContent className="w-auto p-0" align="start" side="bottom" alignOffset={-4} sideOffset={6}>
101
+ <div className="p-2">
102
+ {isRange ? (
103
+ <>
104
+ <div className="calendar-wrapper">
105
+ <style>{calendarStyles}</style>
106
+ <ReactCalendar
107
+ value={dateRange}
108
+ onChange={handleDateChange}
109
+ selectRange={true}
110
+ returnValue="range"
111
+ maxDate={(() => {
112
+ const maxDate = new Date();
113
+ maxDate.setHours(23, 59, 59, 999);
114
+ return maxDate;
115
+ })()}
116
+ className="mb-2 border-0"
117
+ tileClassName={({ date, view }) => {
118
+ if (view === 'month') {
119
+ const currentDate = date.getTime();
120
+ const today = new Date();
121
+ today.setHours(23, 59, 59, 999);
122
+
123
+ // Check if date is disabled (future date)
124
+ if (currentDate > today.getTime()) {
125
+ return 'text-muted/20 cursor-not-allowed';
126
+ }
127
+
128
+ // Handle selected date styling
129
+ if (dateRange[0]) {
130
+ const startDate = dateRange[0].getTime();
131
+
132
+ if (dateRange[1]) {
133
+ // Both dates selected
134
+ const endDate = dateRange[1].getTime();
135
+
136
+ if (currentDate === startDate) {
137
+ return 'bg-primary text-primary-foreground rounded-l-md font-semibold';
138
+ }
139
+ if (currentDate === endDate) {
140
+ return 'bg-primary text-primary-foreground rounded-r-md font-semibold';
141
+ }
142
+ if (currentDate > startDate && currentDate < endDate) {
143
+ return 'bg-primary/20 text-primary font-medium';
144
+ }
145
+ } else {
146
+ // Only start date selected
147
+ if (currentDate === startDate) {
148
+ return 'bg-primary text-primary-foreground rounded-md font-semibold';
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return '';
154
+ }}
155
+ />
156
+ </div>
157
+ {dateRange[0] && dateRange[1] && (
158
+ <div className="border-t pt-2">
159
+ <div className="flex gap-2 justify-end">
160
+ <Button variant="ghost" size="sm" onClick={() => setOpen(false)}>
161
+ Cancel
162
+ </Button>
163
+ <Button
164
+ size="sm"
165
+ onClick={() => setOpen(false)}
166
+ >
167
+ Apply
168
+ </Button>
169
+ </div>
170
+ </div>
171
+ )}
172
+ </>
173
+ ) : (
174
+ <div className="calendar-wrapper">
175
+ <style>{calendarStyles}</style>
176
+ <ReactCalendar
177
+ value={selectedDate}
178
+ onChange={handleDateChange}
179
+ selectRange={false}
180
+ maxDate={(() => {
181
+ const maxDate = new Date();
182
+ maxDate.setHours(23, 59, 59, 999);
183
+ return maxDate;
184
+ })()}
185
+ className="mb-2 border-0"
186
+ tileClassName={({ date, view }) => {
187
+ if (view === 'month') {
188
+ const currentDate = date.getTime();
189
+ const today = new Date();
190
+ today.setHours(23, 59, 59, 999);
191
+
192
+ // Check if date is disabled (future date)
193
+ if (currentDate > today.getTime()) {
194
+ return 'text-muted/20 cursor-not-allowed';
195
+ }
196
+
197
+ // Handle selected date styling
198
+ if (selectedDate && currentDate === selectedDate.getTime()) {
199
+ return 'bg-primary text-primary-foreground rounded-md font-semibold';
200
+ }
201
+ }
202
+ return '';
203
+ }}
204
+ />
205
+ </div>
206
+ )}
207
+ </div>
208
+ </PopoverContent>
209
+ </Popover>
210
+ );
211
+ };