@vertesia/ui 0.66.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 (288) 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 +10 -4
  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 +13 -2
  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 +5 -6
  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/layout/FullHeightLayout.js +2 -4
  98. package/lib/esm/layout/FullHeightLayout.js.map +1 -1
  99. package/lib/esm/router/HistoryNavigator.js +2 -2
  100. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  101. package/lib/esm/shell/SplashScreen.js +19 -0
  102. package/lib/esm/shell/SplashScreen.js.map +1 -0
  103. package/lib/esm/shell/VertesiaShell.js +10 -0
  104. package/lib/esm/shell/VertesiaShell.js.map +1 -0
  105. package/lib/esm/shell/index.js +7 -0
  106. package/lib/esm/shell/index.js.map +1 -0
  107. package/lib/esm/shell/login/EnterpriseSigninButton.js +81 -0
  108. package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -0
  109. package/lib/esm/shell/login/GitHubSignInButton.js +24 -0
  110. package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -0
  111. package/lib/esm/shell/login/GoogleSignInButton.js +25 -0
  112. package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -0
  113. package/lib/esm/shell/login/InviteAcceptModal.js +45 -0
  114. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -0
  115. package/lib/esm/shell/login/MicrosoftSigninButton.js +19 -0
  116. package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -0
  117. package/lib/esm/shell/login/PreviewIcon.js +23 -0
  118. package/lib/esm/shell/login/PreviewIcon.js.map +1 -0
  119. package/lib/esm/shell/login/SignInModal.js +9 -0
  120. package/lib/esm/shell/login/SignInModal.js.map +1 -0
  121. package/lib/esm/shell/login/SigninScreen.js +64 -0
  122. package/lib/esm/shell/login/SigninScreen.js.map +1 -0
  123. package/lib/esm/shell/login/SignupForm.js +91 -0
  124. package/lib/esm/shell/login/SignupForm.js.map +1 -0
  125. package/lib/esm/shell/login/TerminalLogin.js +179 -0
  126. package/lib/esm/shell/login/TerminalLogin.js.map +1 -0
  127. package/lib/esm/shell/login/UserInfo.js +40 -0
  128. package/lib/esm/shell/login/UserInfo.js.map +1 -0
  129. package/lib/esm/shell/login/UserSessionMenu.js +31 -0
  130. package/lib/esm/shell/login/UserSessionMenu.js.map +1 -0
  131. package/lib/esm/shell/utils.js +6 -0
  132. package/lib/esm/shell/utils.js.map +1 -0
  133. package/lib/esm/widgets/SvgIcon.js +36 -0
  134. package/lib/esm/widgets/SvgIcon.js.map +1 -0
  135. package/lib/esm/widgets/index.js +7 -6
  136. package/lib/esm/widgets/index.js.map +1 -1
  137. package/lib/esm/widgets/upload/UploadSummary.js +1 -1
  138. package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
  139. package/lib/tsconfig.tsbuildinfo +1 -1
  140. package/lib/types/core/components/FormItem.d.ts +2 -1
  141. package/lib/types/core/components/shadcn/dialog.d.ts +2 -1
  142. package/lib/types/core/components/shadcn/filters/DynamicLabel.d.ts +1 -1
  143. package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts +5 -0
  144. package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts +8 -0
  145. package/lib/types/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts +5 -0
  146. package/lib/types/core/components/shadcn/filters/comboBox/TextCombobox.d.ts +5 -0
  147. package/lib/types/core/components/shadcn/filters/comboBox/comboBox.d.ts +4 -0
  148. package/lib/types/core/components/shadcn/filters/{selectFilter.d.ts → filter/SelectFilter.d.ts} +2 -2
  149. package/lib/types/core/components/shadcn/filters/{stringListFilter.d.ts → filter/StringListFilter.d.ts} +1 -1
  150. package/lib/types/core/components/shadcn/filters/{textFilter.d.ts → filter/TextFilter.d.ts} +1 -1
  151. package/lib/types/core/components/shadcn/filters/{dateFilter.d.ts → filter/dateFilter.d.ts} +1 -1
  152. package/lib/types/core/components/shadcn/filters/filter-styles.d.ts +1 -0
  153. package/lib/types/core/components/shadcn/filters/filterBar.d.ts +14 -4
  154. package/lib/types/core/components/shadcn/filters/index.d.ts +1 -1
  155. package/lib/types/core/components/shadcn/filters/types.d.ts +2 -0
  156. package/lib/types/features/agent/PayloadBuilder.d.ts +17 -8
  157. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +2 -1
  158. package/lib/types/features/facets/DocumentsFacetsNav.d.ts +16 -0
  159. package/lib/types/features/facets/RunsFacetsNav.d.ts +18 -0
  160. package/lib/types/features/facets/VFacetsNav.d.ts +1 -1
  161. package/lib/types/features/facets/VStringFacet.d.ts +6 -2
  162. package/lib/types/features/facets/VTypeFacet.d.ts +3 -1
  163. package/lib/types/features/facets/WorkflowExecutionsFacetsNav.d.ts +13 -0
  164. package/lib/types/features/facets/index.d.ts +3 -2
  165. package/lib/types/shell/SplashScreen.d.ts +4 -0
  166. package/lib/types/shell/VertesiaShell.d.ts +7 -0
  167. package/lib/types/shell/index.d.ts +6 -0
  168. package/lib/types/shell/login/EnterpriseSigninButton.d.ts +5 -0
  169. package/lib/types/shell/login/GitHubSignInButton.d.ts +5 -0
  170. package/lib/types/shell/login/GoogleSignInButton.d.ts +5 -0
  171. package/lib/types/shell/login/InviteAcceptModal.d.ts +1 -0
  172. package/lib/types/shell/login/MicrosoftSigninButton.d.ts +5 -0
  173. package/lib/types/shell/login/PreviewIcon.d.ts +5 -0
  174. package/lib/types/shell/login/SignInModal.d.ts +6 -0
  175. package/lib/types/shell/login/SigninScreen.d.ts +8 -0
  176. package/lib/types/shell/login/SignupForm.d.ts +7 -0
  177. package/lib/types/shell/login/TerminalLogin.d.ts +1 -0
  178. package/lib/types/shell/login/UserInfo.d.ts +5 -0
  179. package/lib/types/shell/login/UserSessionMenu.d.ts +8 -0
  180. package/lib/types/shell/utils.d.ts +1 -0
  181. package/lib/types/widgets/SvgIcon.d.ts +6 -0
  182. package/lib/types/widgets/index.d.ts +7 -6
  183. package/lib/vertesia-ui-core.js +1 -1
  184. package/lib/vertesia-ui-core.js.map +1 -1
  185. package/lib/vertesia-ui-features.js +1 -1
  186. package/lib/vertesia-ui-features.js.map +1 -1
  187. package/lib/vertesia-ui-layout.js +1 -1
  188. package/lib/vertesia-ui-layout.js.map +1 -1
  189. package/lib/vertesia-ui-router.js +1 -1
  190. package/lib/vertesia-ui-router.js.map +1 -1
  191. package/lib/vertesia-ui-shell.js +2 -0
  192. package/lib/vertesia-ui-shell.js.map +1 -0
  193. package/lib/vertesia-ui-widgets.js +1 -1
  194. package/lib/vertesia-ui-widgets.js.map +1 -1
  195. package/package.json +14 -6
  196. package/src/core/components/Badge.tsx +12 -8
  197. package/src/core/components/FormItem.tsx +4 -3
  198. package/src/core/components/InputList.tsx +21 -17
  199. package/src/core/components/shadcn/checkbox.tsx +2 -2
  200. package/src/core/components/shadcn/command.tsx +1 -1
  201. package/src/core/components/shadcn/dialog.tsx +18 -9
  202. package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -2
  203. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +211 -0
  204. package/src/core/components/shadcn/filters/{comboBox.tsx → comboBox/SelectCombobox.tsx} +8 -192
  205. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +76 -0
  206. package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +81 -0
  207. package/src/core/components/shadcn/filters/comboBox/comboBox.tsx +4 -0
  208. package/src/core/components/shadcn/filters/filter/SelectFilter.tsx +161 -0
  209. package/src/core/components/shadcn/filters/{stringListFilter.tsx → filter/StringListFilter.tsx} +7 -7
  210. package/src/core/components/shadcn/filters/{textFilter.tsx → filter/TextFilter.tsx} +17 -11
  211. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +256 -0
  212. package/src/core/components/shadcn/filters/filter-styles.ts +87 -0
  213. package/src/core/components/shadcn/filters/filterBar.tsx +208 -152
  214. package/src/core/components/shadcn/filters/filters.tsx +7 -5
  215. package/src/core/components/shadcn/filters/index.ts +1 -1
  216. package/src/core/components/shadcn/filters/types.ts +2 -0
  217. package/src/core/components/toast/NotificationPanel.tsx +38 -22
  218. package/src/features/agent/PayloadBuilder.tsx +56 -31
  219. package/src/features/agent/chat/ModernAgentConversation.tsx +645 -639
  220. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +7 -6
  221. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +13 -2
  222. package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -1
  223. package/src/features/agent/chat/ModernAgentOutput/utils.ts +12 -4
  224. package/src/features/facets/DocumentsFacetsNav.tsx +171 -0
  225. package/src/features/facets/RunsFacetsNav.tsx +166 -0
  226. package/src/features/facets/VFacetsNav.tsx +10 -126
  227. package/src/features/facets/VStringFacet.tsx +10 -4
  228. package/src/features/facets/VTypeFacet.tsx +6 -5
  229. package/src/features/facets/VUserFacet.tsx +5 -3
  230. package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +132 -0
  231. package/src/features/facets/index.ts +5 -2
  232. package/src/features/store/collections/CollectionsTable.tsx +3 -2
  233. package/src/features/store/collections/CreateCollection.tsx +17 -15
  234. package/src/features/store/collections/EditCollectionView.tsx +19 -16
  235. package/src/features/store/collections/SelectCollection.tsx +1 -1
  236. package/src/features/store/objects/DocumentPreviewPanel.tsx +0 -1
  237. package/src/features/store/objects/DocumentSearchResults.tsx +80 -11
  238. package/src/features/store/objects/components/ContentOverview.tsx +7 -7
  239. package/src/features/store/objects/components/SelectDocument.tsx +2 -2
  240. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  241. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +40 -19
  242. package/src/features/store/objects/upload/DocumentUploadModal.tsx +160 -214
  243. package/src/features/store/types/ObjectSchemaEditor.tsx +15 -0
  244. package/src/features/user/UserInfo.tsx +17 -14
  245. package/src/layout/FullHeightLayout.tsx +2 -2
  246. package/src/router/HistoryNavigator.ts +2 -2
  247. package/src/shell/SplashScreen.tsx +41 -0
  248. package/src/shell/VertesiaShell.tsx +27 -0
  249. package/src/shell/index.tsx +6 -0
  250. package/src/shell/login/EnterpriseSigninButton.tsx +106 -0
  251. package/src/shell/login/GitHubSignInButton.tsx +40 -0
  252. package/src/shell/login/GoogleSignInButton.tsx +36 -0
  253. package/src/shell/login/InviteAcceptModal.tsx +78 -0
  254. package/src/shell/login/MicrosoftSigninButton.tsx +30 -0
  255. package/src/shell/login/PreviewIcon.tsx +29 -0
  256. package/src/shell/login/SignInModal.tsx +28 -0
  257. package/src/shell/login/SigninScreen.tsx +162 -0
  258. package/src/shell/login/SignupForm.tsx +178 -0
  259. package/src/shell/login/TerminalLogin.tsx +299 -0
  260. package/src/shell/login/UserInfo.tsx +76 -0
  261. package/src/shell/login/UserSessionMenu.tsx +81 -0
  262. package/src/shell/utils.tsx +7 -0
  263. package/src/widgets/SvgIcon.tsx +44 -0
  264. package/src/widgets/index.ts +7 -6
  265. package/src/widgets/upload/UploadSummary.tsx +3 -4
  266. package/lib/esm/core/components/shadcn/filters/comboBox.js +0 -101
  267. package/lib/esm/core/components/shadcn/filters/comboBox.js.map +0 -1
  268. package/lib/esm/core/components/shadcn/filters/dateFilter.js +0 -36
  269. package/lib/esm/core/components/shadcn/filters/dateFilter.js.map +0 -1
  270. package/lib/esm/core/components/shadcn/filters/selectFilter.js +0 -67
  271. package/lib/esm/core/components/shadcn/filters/selectFilter.js.map +0 -1
  272. package/lib/esm/core/components/shadcn/filters/stringListFilter.js.map +0 -1
  273. package/lib/esm/core/components/shadcn/filters/textFilter.js.map +0 -1
  274. package/lib/esm/features/facets/InteractionFacet.js +0 -39
  275. package/lib/esm/features/facets/InteractionFacet.js.map +0 -1
  276. package/lib/esm/features/facets/TypeOptions.js +0 -19
  277. package/lib/esm/features/facets/TypeOptions.js.map +0 -1
  278. package/lib/esm/features/facets/UserFacet.js +0 -33
  279. package/lib/esm/features/facets/UserFacet.js.map +0 -1
  280. package/lib/types/core/components/shadcn/filters/comboBox.d.ts +0 -22
  281. package/lib/types/features/facets/InteractionFacet.d.ts +0 -9
  282. package/lib/types/features/facets/TypeOptions.d.ts +0 -3
  283. package/lib/types/features/facets/UserFacet.d.ts +0 -11
  284. package/src/core/components/shadcn/filters/dateFilter.tsx +0 -82
  285. package/src/core/components/shadcn/filters/selectFilter.tsx +0 -110
  286. package/src/features/facets/InteractionFacet.tsx +0 -53
  287. package/src/features/facets/TypeOptions.tsx +0 -22
  288. 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.66.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.66.0",
60
- "@vertesia/common": "0.66.0",
61
- "@vertesia/json": "0.66.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
+ };