@k3-universe/react-kit 0.0.27 → 0.0.29

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 (422) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.ts +18 -10
  3. package/biome.json +10 -0
  4. package/dist/index.js +2319 -1227
  5. package/dist/kit/builder/auth/AuthProvider.d.ts +36 -0
  6. package/dist/kit/builder/auth/AuthProvider.d.ts.map +1 -0
  7. package/dist/kit/builder/auth/adapter.d.ts +14 -0
  8. package/dist/kit/builder/auth/adapter.d.ts.map +1 -0
  9. package/dist/kit/builder/auth/client-adapters.d.ts +149 -0
  10. package/dist/kit/builder/auth/client-adapters.d.ts.map +1 -0
  11. package/dist/kit/builder/auth/components.d.ts +119 -0
  12. package/dist/kit/builder/auth/components.d.ts.map +1 -0
  13. package/dist/kit/builder/auth/hooks.d.ts +158 -0
  14. package/dist/kit/builder/auth/hooks.d.ts.map +1 -0
  15. package/dist/kit/builder/auth/index.d.ts +11 -0
  16. package/dist/kit/builder/auth/index.d.ts.map +1 -0
  17. package/dist/kit/builder/auth/permission-checker.d.ts +31 -0
  18. package/dist/kit/builder/auth/permission-checker.d.ts.map +1 -0
  19. package/dist/kit/builder/auth/storage.d.ts +17 -0
  20. package/dist/kit/builder/auth/storage.d.ts.map +1 -0
  21. package/dist/kit/builder/auth/token-manager.d.ts +9 -0
  22. package/dist/kit/builder/auth/token-manager.d.ts.map +1 -0
  23. package/dist/kit/builder/auth/types.d.ts +183 -0
  24. package/dist/kit/builder/auth/types.d.ts.map +1 -0
  25. package/dist/kit/builder/data-table/components/DataTable.d.ts +2 -1
  26. package/dist/kit/builder/data-table/components/DataTable.d.ts.map +1 -1
  27. package/dist/kit/builder/data-table/components/DataTableColumnHeader.d.ts +2 -2
  28. package/dist/kit/builder/data-table/components/DataTableColumnHeader.d.ts.map +1 -1
  29. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts +2 -1
  30. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts.map +1 -1
  31. package/dist/kit/builder/data-table/components/DataTableViewOptions.d.ts +1 -1
  32. package/dist/kit/builder/data-table/components/DataTableViewOptions.d.ts.map +1 -1
  33. package/dist/kit/builder/data-table/types.d.ts.map +1 -1
  34. package/dist/kit/builder/dialog/index.d.ts +1 -1
  35. package/dist/kit/builder/dialog/index.d.ts.map +1 -1
  36. package/dist/kit/builder/dialog/provider.d.ts +0 -1
  37. package/dist/kit/builder/dialog/provider.d.ts.map +1 -1
  38. package/dist/kit/builder/form/components/FormBuilder.d.ts.map +1 -1
  39. package/dist/kit/builder/form/components/FormBuilderActions.d.ts.map +1 -1
  40. package/dist/kit/builder/form/components/FormBuilderContext.d.ts.map +1 -1
  41. package/dist/kit/builder/form/components/FormBuilderField.d.ts +1 -1
  42. package/dist/kit/builder/form/components/FormBuilderField.d.ts.map +1 -1
  43. package/dist/kit/builder/form/components/fields/ArrayField.d.ts +1 -1
  44. package/dist/kit/builder/form/components/fields/ArrayField.d.ts.map +1 -1
  45. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts +1 -1
  46. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts.map +1 -1
  47. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts +1 -1
  48. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts.map +1 -1
  49. package/dist/kit/builder/form/components/fields/DateField.d.ts +1 -1
  50. package/dist/kit/builder/form/components/fields/DateField.d.ts.map +1 -1
  51. package/dist/kit/builder/form/components/fields/DatePickerField.d.ts +1 -1
  52. package/dist/kit/builder/form/components/fields/DatePickerField.d.ts.map +1 -1
  53. package/dist/kit/builder/form/components/fields/DateRangePickerField.d.ts +1 -1
  54. package/dist/kit/builder/form/components/fields/DateRangePickerField.d.ts.map +1 -1
  55. package/dist/kit/builder/form/components/fields/DateTimePickerField.d.ts +1 -1
  56. package/dist/kit/builder/form/components/fields/DateTimePickerField.d.ts.map +1 -1
  57. package/dist/kit/builder/form/components/fields/DateTimeRangePickerField.d.ts +1 -1
  58. package/dist/kit/builder/form/components/fields/DateTimeRangePickerField.d.ts.map +1 -1
  59. package/dist/kit/builder/form/components/fields/FileField.d.ts +1 -1
  60. package/dist/kit/builder/form/components/fields/FileField.d.ts.map +1 -1
  61. package/dist/kit/builder/form/components/fields/MonthPickerField.d.ts +1 -1
  62. package/dist/kit/builder/form/components/fields/MonthPickerField.d.ts.map +1 -1
  63. package/dist/kit/builder/form/components/fields/MonthRangePickerField.d.ts +1 -1
  64. package/dist/kit/builder/form/components/fields/MonthRangePickerField.d.ts.map +1 -1
  65. package/dist/kit/builder/form/components/fields/NumberField.d.ts +1 -1
  66. package/dist/kit/builder/form/components/fields/NumberField.d.ts.map +1 -1
  67. package/dist/kit/builder/form/components/fields/ObjectField.d.ts.map +1 -1
  68. package/dist/kit/builder/form/components/fields/RadioField.d.ts +1 -1
  69. package/dist/kit/builder/form/components/fields/RadioField.d.ts.map +1 -1
  70. package/dist/kit/builder/form/components/fields/SelectField.d.ts +1 -1
  71. package/dist/kit/builder/form/components/fields/SelectField.d.ts.map +1 -1
  72. package/dist/kit/builder/form/components/fields/SwitchField.d.ts +1 -1
  73. package/dist/kit/builder/form/components/fields/SwitchField.d.ts.map +1 -1
  74. package/dist/kit/builder/form/components/fields/TextField.d.ts +1 -1
  75. package/dist/kit/builder/form/components/fields/TextField.d.ts.map +1 -1
  76. package/dist/kit/builder/form/components/fields/TextareaField.d.ts +1 -1
  77. package/dist/kit/builder/form/components/fields/TextareaField.d.ts.map +1 -1
  78. package/dist/kit/builder/form/components/fields/TimePickerField.d.ts +1 -1
  79. package/dist/kit/builder/form/components/fields/TimePickerField.d.ts.map +1 -1
  80. package/dist/kit/builder/form/components/fields/TimeRangePickerField.d.ts +1 -1
  81. package/dist/kit/builder/form/components/fields/TimeRangePickerField.d.ts.map +1 -1
  82. package/dist/kit/builder/form/components/fields/index.d.ts.map +1 -1
  83. package/dist/kit/builder/form/components/fields/types.d.ts.map +1 -1
  84. package/dist/kit/builder/form/components/sectionNodes.d.ts.map +1 -1
  85. package/dist/kit/builder/form/hooks/useFormBuilder.d.ts.map +1 -1
  86. package/dist/kit/builder/form/types.d.ts.map +1 -1
  87. package/dist/kit/builder/form/utils/section-factories.d.ts.map +1 -1
  88. package/dist/kit/builder/page/Page.d.ts.map +1 -1
  89. package/dist/kit/builder/page/index.d.ts.map +1 -1
  90. package/dist/kit/builder/section/SectionBuilder.d.ts +1 -1
  91. package/dist/kit/builder/section/SectionBuilder.d.ts.map +1 -1
  92. package/dist/kit/builder/section/SectionContainer.d.ts +14 -0
  93. package/dist/kit/builder/section/SectionContainer.d.ts.map +1 -0
  94. package/dist/kit/builder/stack-dialog/context.d.ts.map +1 -1
  95. package/dist/kit/builder/stack-dialog/hooks.d.ts.map +1 -1
  96. package/dist/kit/builder/stack-dialog/index.d.ts +3 -3
  97. package/dist/kit/builder/stack-dialog/index.d.ts.map +1 -1
  98. package/dist/kit/builder/stack-dialog/provider.d.ts.map +1 -1
  99. package/dist/kit/builder/stack-dialog/renderer.d.ts.map +1 -1
  100. package/dist/kit/builder/stack-dialog/types.d.ts +1 -1
  101. package/dist/kit/builder/stack-dialog/types.d.ts.map +1 -1
  102. package/dist/kit/components/autocomplete/Autocomplete.d.ts +1 -1
  103. package/dist/kit/components/autocomplete/Autocomplete.d.ts.map +1 -1
  104. package/dist/kit/components/autocomplete/types.d.ts.map +1 -1
  105. package/dist/kit/components/datepicker/DatePicker.d.ts.map +1 -1
  106. package/dist/kit/components/datepicker/DateRangePicker.d.ts.map +1 -1
  107. package/dist/kit/components/datetimepicker/DateTimePicker.d.ts.map +1 -1
  108. package/dist/kit/components/datetimepicker/DateTimeRangePicker.d.ts.map +1 -1
  109. package/dist/kit/components/datetimepicker/index.d.ts.map +1 -1
  110. package/dist/kit/components/fileuploader/FileUploader.d.ts.map +1 -1
  111. package/dist/kit/components/fileuploader/types.d.ts +2 -2
  112. package/dist/kit/components/forminfo/FormInfoError.d.ts.map +1 -1
  113. package/dist/kit/components/login/Login.d.ts +1 -1
  114. package/dist/kit/components/login/Login.d.ts.map +1 -1
  115. package/dist/kit/components/monthpicker/MonthInput.d.ts.map +1 -1
  116. package/dist/kit/components/monthpicker/MonthPicker.d.ts.map +1 -1
  117. package/dist/kit/components/monthpicker/MonthRangeInput.d.ts.map +1 -1
  118. package/dist/kit/components/monthpicker/MonthRangePicker.d.ts.map +1 -1
  119. package/dist/kit/components/timepicker/TimePicker.d.ts.map +1 -1
  120. package/dist/kit/components/timepicker/TimeRangePicker.d.ts.map +1 -1
  121. package/dist/kit/components/timepicker/index.d.ts.map +1 -1
  122. package/dist/kit/layouts/admin/components/AdminLayout.d.ts.map +1 -1
  123. package/dist/kit/layouts/admin/components/ThemeToggle.d.ts.map +1 -1
  124. package/dist/kit/layouts/admin/hooks/menu.d.ts.map +1 -1
  125. package/dist/kit/layouts/admin/providers/AdminMenuProvider.d.ts +1 -1
  126. package/dist/kit/layouts/admin/providers/AdminMenuProvider.d.ts.map +1 -1
  127. package/dist/shadcn/hooks/use-mobile.d.ts.map +1 -1
  128. package/dist/shadcn/ui/accordion.d.ts +2 -2
  129. package/dist/shadcn/ui/accordion.d.ts.map +1 -1
  130. package/dist/shadcn/ui/alert-dialog.d.ts +4 -4
  131. package/dist/shadcn/ui/alert-dialog.d.ts.map +1 -1
  132. package/dist/shadcn/ui/alert.d.ts +4 -4
  133. package/dist/shadcn/ui/alert.d.ts.map +1 -1
  134. package/dist/shadcn/ui/aspect-ratio.d.ts +1 -1
  135. package/dist/shadcn/ui/aspect-ratio.d.ts.map +1 -1
  136. package/dist/shadcn/ui/avatar.d.ts +2 -2
  137. package/dist/shadcn/ui/avatar.d.ts.map +1 -1
  138. package/dist/shadcn/ui/badge.d.ts +2 -2
  139. package/dist/shadcn/ui/badge.d.ts.map +1 -1
  140. package/dist/shadcn/ui/breadcrumb.d.ts +8 -8
  141. package/dist/shadcn/ui/breadcrumb.d.ts.map +1 -1
  142. package/dist/shadcn/ui/button.d.ts +2 -2
  143. package/dist/shadcn/ui/button.d.ts.map +1 -1
  144. package/dist/shadcn/ui/calendar.d.ts +2 -2
  145. package/dist/shadcn/ui/calendar.d.ts.map +1 -1
  146. package/dist/shadcn/ui/card.d.ts +8 -8
  147. package/dist/shadcn/ui/card.d.ts.map +1 -1
  148. package/dist/shadcn/ui/carousel.d.ts +5 -5
  149. package/dist/shadcn/ui/carousel.d.ts.map +1 -1
  150. package/dist/shadcn/ui/chart.d.ts +7 -7
  151. package/dist/shadcn/ui/chart.d.ts.map +1 -1
  152. package/dist/shadcn/ui/checkbox.d.ts +2 -2
  153. package/dist/shadcn/ui/checkbox.d.ts.map +1 -1
  154. package/dist/shadcn/ui/collapsible.d.ts +1 -1
  155. package/dist/shadcn/ui/collapsible.d.ts.map +1 -1
  156. package/dist/shadcn/ui/command.d.ts +2 -2
  157. package/dist/shadcn/ui/command.d.ts.map +1 -1
  158. package/dist/shadcn/ui/context-menu.d.ts +4 -4
  159. package/dist/shadcn/ui/context-menu.d.ts.map +1 -1
  160. package/dist/shadcn/ui/dialog.d.ts +4 -4
  161. package/dist/shadcn/ui/dialog.d.ts.map +1 -1
  162. package/dist/shadcn/ui/drawer.d.ts +3 -3
  163. package/dist/shadcn/ui/drawer.d.ts.map +1 -1
  164. package/dist/shadcn/ui/dropdown-menu.d.ts +4 -4
  165. package/dist/shadcn/ui/dropdown-menu.d.ts.map +1 -1
  166. package/dist/shadcn/ui/form.d.ts +5 -5
  167. package/dist/shadcn/ui/form.d.ts.map +1 -1
  168. package/dist/shadcn/ui/hover-card.d.ts +2 -2
  169. package/dist/shadcn/ui/hover-card.d.ts.map +1 -1
  170. package/dist/shadcn/ui/input-otp.d.ts +4 -4
  171. package/dist/shadcn/ui/input-otp.d.ts.map +1 -1
  172. package/dist/shadcn/ui/input.d.ts +2 -2
  173. package/dist/shadcn/ui/input.d.ts.map +1 -1
  174. package/dist/shadcn/ui/label.d.ts +2 -2
  175. package/dist/shadcn/ui/label.d.ts.map +1 -1
  176. package/dist/shadcn/ui/menubar.d.ts +4 -4
  177. package/dist/shadcn/ui/menubar.d.ts.map +1 -1
  178. package/dist/shadcn/ui/navigation-menu.d.ts +2 -2
  179. package/dist/shadcn/ui/navigation-menu.d.ts.map +1 -1
  180. package/dist/shadcn/ui/pagination.d.ts +6 -6
  181. package/dist/shadcn/ui/pagination.d.ts.map +1 -1
  182. package/dist/shadcn/ui/popover.d.ts +2 -2
  183. package/dist/shadcn/ui/popover.d.ts.map +1 -1
  184. package/dist/shadcn/ui/progress.d.ts +2 -2
  185. package/dist/shadcn/ui/progress.d.ts.map +1 -1
  186. package/dist/shadcn/ui/radio-group.d.ts +2 -2
  187. package/dist/shadcn/ui/radio-group.d.ts.map +1 -1
  188. package/dist/shadcn/ui/resizable.d.ts +2 -2
  189. package/dist/shadcn/ui/resizable.d.ts.map +1 -1
  190. package/dist/shadcn/ui/scroll-area.d.ts +2 -2
  191. package/dist/shadcn/ui/scroll-area.d.ts.map +1 -1
  192. package/dist/shadcn/ui/select.d.ts +3 -3
  193. package/dist/shadcn/ui/select.d.ts.map +1 -1
  194. package/dist/shadcn/ui/separator.d.ts +2 -2
  195. package/dist/shadcn/ui/separator.d.ts.map +1 -1
  196. package/dist/shadcn/ui/sheet.d.ts +5 -5
  197. package/dist/shadcn/ui/sheet.d.ts.map +1 -1
  198. package/dist/shadcn/ui/sidebar.d.ts +26 -26
  199. package/dist/shadcn/ui/sidebar.d.ts.map +1 -1
  200. package/dist/shadcn/ui/skeleton.d.ts +1 -1
  201. package/dist/shadcn/ui/skeleton.d.ts.map +1 -1
  202. package/dist/shadcn/ui/slider.d.ts +2 -2
  203. package/dist/shadcn/ui/slider.d.ts.map +1 -1
  204. package/dist/shadcn/ui/sonner.d.ts.map +1 -1
  205. package/dist/shadcn/ui/switch.d.ts +2 -2
  206. package/dist/shadcn/ui/switch.d.ts.map +1 -1
  207. package/dist/shadcn/ui/table.d.ts +9 -9
  208. package/dist/shadcn/ui/table.d.ts.map +1 -1
  209. package/dist/shadcn/ui/tabs.d.ts +2 -2
  210. package/dist/shadcn/ui/tabs.d.ts.map +1 -1
  211. package/dist/shadcn/ui/textarea.d.ts +2 -2
  212. package/dist/shadcn/ui/textarea.d.ts.map +1 -1
  213. package/dist/shadcn/ui/toggle-group.d.ts +2 -2
  214. package/dist/shadcn/ui/toggle-group.d.ts.map +1 -1
  215. package/dist/shadcn/ui/toggle.d.ts +2 -2
  216. package/dist/shadcn/ui/toggle.d.ts.map +1 -1
  217. package/dist/shadcn/ui/tooltip.d.ts +2 -2
  218. package/dist/shadcn/ui/tooltip.d.ts.map +1 -1
  219. package/package.json +2 -2
  220. package/src/index.ts +1 -1
  221. package/src/kit/builder/auth/AuthProvider.tsx +131 -0
  222. package/src/kit/builder/auth/adapter.ts +436 -0
  223. package/src/kit/builder/auth/client-adapters.ts +398 -0
  224. package/src/kit/builder/auth/components.tsx +221 -0
  225. package/src/kit/builder/auth/hooks.ts +237 -0
  226. package/src/kit/builder/auth/index.ts +134 -0
  227. package/src/kit/builder/auth/permission-checker.ts +150 -0
  228. package/src/kit/builder/auth/storage.ts +366 -0
  229. package/src/kit/builder/auth/token-manager.ts +55 -0
  230. package/src/kit/builder/auth/types.ts +393 -0
  231. package/src/kit/builder/data-table/components/DataTable.tsx +216 -82
  232. package/src/kit/builder/data-table/components/DataTableColumnHeader.tsx +9 -5
  233. package/src/kit/builder/data-table/components/DataTablePagination.tsx +49 -27
  234. package/src/kit/builder/data-table/components/DataTableViewOptions.tsx +13 -4
  235. package/src/kit/builder/data-table/types.ts +18 -3
  236. package/src/kit/builder/dialog/index.ts +5 -1
  237. package/src/kit/builder/dialog/provider.tsx +56 -27
  238. package/src/kit/builder/form/components/FormBuilder.tsx +10 -14
  239. package/src/kit/builder/form/components/FormBuilderActions.tsx +1 -1
  240. package/src/kit/builder/form/components/FormBuilderContext.tsx +13 -6
  241. package/src/kit/builder/form/components/FormBuilderField.tsx +70 -20
  242. package/src/kit/builder/form/components/fields/ArrayField.tsx +148 -62
  243. package/src/kit/builder/form/components/fields/AutocompleteField.tsx +53 -18
  244. package/src/kit/builder/form/components/fields/CheckboxField.tsx +20 -11
  245. package/src/kit/builder/form/components/fields/DateField.tsx +17 -6
  246. package/src/kit/builder/form/components/fields/DatePickerField.tsx +15 -10
  247. package/src/kit/builder/form/components/fields/DateRangePickerField.tsx +20 -15
  248. package/src/kit/builder/form/components/fields/DateTimePickerField.tsx +16 -11
  249. package/src/kit/builder/form/components/fields/DateTimeRangePickerField.tsx +23 -17
  250. package/src/kit/builder/form/components/fields/FileField.tsx +10 -5
  251. package/src/kit/builder/form/components/fields/MonthPickerField.tsx +18 -11
  252. package/src/kit/builder/form/components/fields/MonthRangePickerField.tsx +23 -17
  253. package/src/kit/builder/form/components/fields/NumberField.tsx +9 -4
  254. package/src/kit/builder/form/components/fields/ObjectField.tsx +12 -7
  255. package/src/kit/builder/form/components/fields/RadioField.tsx +32 -14
  256. package/src/kit/builder/form/components/fields/SelectField.tsx +26 -11
  257. package/src/kit/builder/form/components/fields/SwitchField.tsx +20 -11
  258. package/src/kit/builder/form/components/fields/TextField.tsx +11 -5
  259. package/src/kit/builder/form/components/fields/TextareaField.tsx +9 -4
  260. package/src/kit/builder/form/components/fields/TimePickerField.tsx +16 -11
  261. package/src/kit/builder/form/components/fields/TimeRangePickerField.tsx +23 -17
  262. package/src/kit/builder/form/components/fields/index.ts +21 -21
  263. package/src/kit/builder/form/components/fields/types.ts +15 -11
  264. package/src/kit/builder/form/components/sectionNodes.tsx +63 -40
  265. package/src/kit/builder/form/hooks/useFormBuilder.ts +83 -34
  266. package/src/kit/builder/form/types.ts +173 -148
  267. package/src/kit/builder/form/utils/section-factories.ts +4 -1
  268. package/src/kit/builder/form/utils/transformers.ts +4 -4
  269. package/src/kit/builder/form/utils/validations.ts +1 -1
  270. package/src/kit/builder/page/Page.tsx +26 -6
  271. package/src/kit/builder/page/index.ts +1 -1
  272. package/src/kit/builder/section/SectionBuilder.tsx +252 -127
  273. package/src/kit/builder/section/SectionContainer.tsx +85 -0
  274. package/src/kit/builder/stack-dialog/context.ts +10 -4
  275. package/src/kit/builder/stack-dialog/hooks.ts +4 -3
  276. package/src/kit/builder/stack-dialog/index.ts +5 -11
  277. package/src/kit/builder/stack-dialog/provider.tsx +11 -11
  278. package/src/kit/builder/stack-dialog/renderer.tsx +23 -26
  279. package/src/kit/builder/stack-dialog/types.ts +18 -18
  280. package/src/kit/components/autocomplete/Autocomplete.tsx +631 -549
  281. package/src/kit/components/autocomplete/types.ts +17 -17
  282. package/src/kit/components/datepicker/DatePicker.tsx +33 -9
  283. package/src/kit/components/datepicker/DateRangePicker.tsx +159 -87
  284. package/src/kit/components/datetimepicker/DateTimePicker.tsx +136 -30
  285. package/src/kit/components/datetimepicker/DateTimeRangePicker.tsx +257 -67
  286. package/src/kit/components/datetimepicker/index.ts +3 -3
  287. package/src/kit/components/fileuploader/FileUploader.tsx +315 -180
  288. package/src/kit/components/fileuploader/index.ts +3 -3
  289. package/src/kit/components/fileuploader/types.ts +3 -3
  290. package/src/kit/components/forminfo/FormInfoError.tsx +26 -11
  291. package/src/kit/components/login/Login.tsx +13 -4
  292. package/src/kit/components/monthpicker/MonthInput.tsx +13 -4
  293. package/src/kit/components/monthpicker/MonthPicker.tsx +12 -11
  294. package/src/kit/components/monthpicker/MonthRangeInput.tsx +29 -8
  295. package/src/kit/components/monthpicker/MonthRangePicker.tsx +23 -21
  296. package/src/kit/components/timepicker/TimePicker.tsx +19 -11
  297. package/src/kit/components/timepicker/TimeRangePicker.tsx +106 -29
  298. package/src/kit/components/timepicker/index.ts +3 -3
  299. package/src/kit/layouts/admin/components/AdminLayout.tsx +53 -24
  300. package/src/kit/layouts/admin/components/ThemeToggle.tsx +3 -9
  301. package/src/kit/layouts/admin/hooks/menu.ts +11 -5
  302. package/src/kit/layouts/admin/providers/AdminMenuProvider.tsx +59 -39
  303. package/src/kit/layouts/admin/types/index.ts +1 -1
  304. package/src/kit/themes/base.css +1 -1
  305. package/src/kit/themes/clean-slate.css +40 -32
  306. package/src/kit/themes/default.css +34 -24
  307. package/src/kit/themes/minimal-modern.css +37 -29
  308. package/src/kit/themes/spotify.css +56 -39
  309. package/src/shadcn/hooks/use-mobile.ts +13 -11
  310. package/src/shadcn/lib/utils.ts +2 -2
  311. package/src/shadcn/ui/accordion.tsx +14 -14
  312. package/src/shadcn/ui/alert-dialog.tsx +29 -29
  313. package/src/shadcn/ui/alert.tsx +20 -20
  314. package/src/shadcn/ui/aspect-ratio.tsx +4 -4
  315. package/src/shadcn/ui/avatar.tsx +13 -13
  316. package/src/shadcn/ui/badge.tsx +16 -16
  317. package/src/shadcn/ui/breadcrumb.tsx +28 -28
  318. package/src/shadcn/ui/button.tsx +23 -23
  319. package/src/shadcn/ui/calendar.tsx +82 -78
  320. package/src/shadcn/ui/card.tsx +27 -27
  321. package/src/shadcn/ui/carousel.tsx +93 -93
  322. package/src/shadcn/ui/chart.tsx +103 -103
  323. package/src/shadcn/ui/checkbox.tsx +9 -9
  324. package/src/shadcn/ui/collapsible.tsx +6 -6
  325. package/src/shadcn/ui/command.tsx +36 -36
  326. package/src/shadcn/ui/context-menu.tsx +40 -40
  327. package/src/shadcn/ui/dialog.tsx +28 -28
  328. package/src/shadcn/ui/drawer.tsx +30 -30
  329. package/src/shadcn/ui/dropdown-menu.tsx +41 -41
  330. package/src/shadcn/ui/form.tsx +48 -47
  331. package/src/shadcn/ui/hover-card.tsx +11 -11
  332. package/src/shadcn/ui/input-otp.tsx +23 -23
  333. package/src/shadcn/ui/input.tsx +9 -9
  334. package/src/shadcn/ui/label.tsx +8 -8
  335. package/src/shadcn/ui/menubar.tsx +47 -47
  336. package/src/shadcn/ui/navigation-menu.tsx +33 -33
  337. package/src/shadcn/ui/pagination.tsx +28 -28
  338. package/src/shadcn/ui/popover.tsx +12 -12
  339. package/src/shadcn/ui/progress.tsx +8 -8
  340. package/src/shadcn/ui/radio-group.tsx +11 -11
  341. package/src/shadcn/ui/resizable.tsx +14 -14
  342. package/src/shadcn/ui/scroll-area.tsx +15 -15
  343. package/src/shadcn/ui/select.tsx +34 -34
  344. package/src/shadcn/ui/separator.tsx +9 -9
  345. package/src/shadcn/ui/sheet.tsx +36 -36
  346. package/src/shadcn/ui/sidebar.tsx +227 -227
  347. package/src/shadcn/ui/skeleton.tsx +5 -5
  348. package/src/shadcn/ui/slider.tsx +12 -12
  349. package/src/shadcn/ui/sonner.tsx +11 -11
  350. package/src/shadcn/ui/switch.tsx +9 -9
  351. package/src/shadcn/ui/table.tsx +32 -32
  352. package/src/shadcn/ui/tabs.tsx +14 -14
  353. package/src/shadcn/ui/textarea.tsx +7 -7
  354. package/src/shadcn/ui/toggle-group.tsx +17 -17
  355. package/src/shadcn/ui/toggle.tsx +16 -16
  356. package/src/shadcn/ui/tooltip.tsx +11 -11
  357. package/src/stories/FileUploader.stories.tsx +23 -4
  358. package/src/stories/kit/builder/DataTable.Basic.stories.tsx +14 -4
  359. package/src/stories/kit/builder/DataTable.Filters.stories.tsx +36 -14
  360. package/src/stories/kit/builder/DataTable.Pagination.stories.tsx +3 -2
  361. package/src/stories/kit/builder/DataTable.SelectionAndActions.stories.tsx +18 -4
  362. package/src/stories/kit/builder/DataTable.Sorting.stories.tsx +18 -7
  363. package/src/stories/kit/builder/Dialog.stories.tsx +19 -13
  364. package/src/stories/kit/builder/Form.ArrayLayouts.stories.tsx +40 -16
  365. package/src/stories/kit/builder/Form.Autocomplete.stories.tsx +34 -22
  366. package/src/stories/kit/builder/Form.Basic.stories.tsx +38 -6
  367. package/src/stories/kit/builder/Form.Complex.stories.tsx +356 -111
  368. package/src/stories/kit/builder/Form.DateTime.stories.tsx +12 -8
  369. package/src/stories/kit/builder/Form.Dynamic.stories.tsx +695 -132
  370. package/src/stories/kit/builder/Form.Files.stories.tsx +37 -26
  371. package/src/stories/kit/builder/Form.MultipleFormBuilder.stories.tsx +46 -42
  372. package/src/stories/kit/builder/Form.Pickers.stories.tsx +12 -8
  373. package/src/stories/kit/builder/Form.Simple.stories.tsx +15 -6
  374. package/src/stories/kit/builder/Form.Time.stories.tsx +12 -8
  375. package/src/stories/kit/builder/Page.stories.tsx +32 -6
  376. package/src/stories/kit/builder/Section.stories.tsx +58 -11
  377. package/src/stories/kit/components/Autocomplete.stories.tsx +55 -22
  378. package/src/stories/kit/components/DatePicker.stories.tsx +80 -13
  379. package/src/stories/kit/components/DateRangePicker.stories.tsx +52 -11
  380. package/src/stories/kit/components/Login.stories.tsx +8 -2
  381. package/src/stories/kit/components/MonthPicker.stories.tsx +26 -6
  382. package/src/stories/kit/components/MonthRangePicker.stories.tsx +24 -5
  383. package/src/stories/kit/components/TimePicker.stories.tsx +18 -16
  384. package/src/stories/kit/components/TimeRangePicker.stories.tsx +18 -12
  385. package/src/stories/kit/layouts/admin/AdminLayout.Basic.stories.tsx +29 -6
  386. package/src/stories/kit/layouts/admin/AdminLayout.Collapsible.stories.tsx +26 -5
  387. package/src/stories/kit/layouts/admin/AdminLayout.Complex.stories.tsx +101 -18
  388. package/src/stories/kit/layouts/admin/AdminLayout.CustomSidebarHeaderComponent.stories.tsx +18 -4
  389. package/src/stories/kit/layouts/admin/AdminLayout.CustomSidebarTitleAndIcon.stories.tsx +17 -4
  390. package/src/stories/kit/layouts/admin/AdminLayout.HeaderSlots.stories.tsx +28 -6
  391. package/src/stories/shadcn/ui/Accordion.stories.tsx +33 -10
  392. package/src/stories/shadcn/ui/AlertDialog.stories.tsx +3 -1
  393. package/src/stories/shadcn/ui/Button.stories.tsx +3 -1
  394. package/src/stories/shadcn/ui/Calendar.stories.tsx +6 -1
  395. package/src/stories/shadcn/ui/Card.stories.tsx +11 -2
  396. package/src/stories/shadcn/ui/Checkbox.stories.tsx +11 -3
  397. package/src/stories/shadcn/ui/Collapsible.stories.tsx +12 -5
  398. package/src/stories/shadcn/ui/ContextMenu.stories.tsx +12 -4
  399. package/src/stories/shadcn/ui/Dialog.stories.tsx +15 -3
  400. package/src/stories/shadcn/ui/Drawer.stories.tsx +5 -2
  401. package/src/stories/shadcn/ui/DropdownMenu.stories.tsx +15 -5
  402. package/src/stories/shadcn/ui/Form.stories.tsx +5 -2
  403. package/src/stories/shadcn/ui/HoverCard.stories.tsx +8 -2
  404. package/src/stories/shadcn/ui/Input.stories.tsx +3 -1
  405. package/src/stories/shadcn/ui/InputOtp.stories.tsx +9 -2
  406. package/src/stories/shadcn/ui/Menubar.stories.tsx +21 -7
  407. package/src/stories/shadcn/ui/NavigationMenu.stories.tsx +30 -5
  408. package/src/stories/shadcn/ui/Popover.stories.tsx +8 -2
  409. package/src/stories/shadcn/ui/Resizable.stories.tsx +17 -5
  410. package/src/stories/shadcn/ui/ScrollArea.stories.tsx +54 -2
  411. package/src/stories/shadcn/ui/Select.stories.tsx +7 -1
  412. package/src/stories/shadcn/ui/Sheet.stories.tsx +2 -1
  413. package/src/stories/shadcn/ui/Sidebar.stories.tsx +13 -2
  414. package/src/stories/shadcn/ui/Sonner.stories.tsx +12 -2
  415. package/src/stories/shadcn/ui/Table.stories.tsx +86 -27
  416. package/src/stories/shadcn/ui/Tabs.stories.tsx +9 -2
  417. package/src/stories/shadcn/ui/Textarea.stories.tsx +3 -1
  418. package/src/stories/shadcn/ui/Toggle.stories.tsx +10 -2
  419. package/src/stories/shadcn/ui/Tooltip.stories.tsx +6 -1
  420. package/tsconfig.json +1 -5
  421. package/tsconfig.tsbuildinfo +1 -0
  422. package/eslint.config.mjs +0 -19
@@ -15,13 +15,29 @@ import {
15
15
  import { Loader2, RefreshCw } from 'lucide-react';
16
16
  import * as React from 'react';
17
17
  import { cn } from '../../../../shadcn/lib/utils';
18
- import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../../../../shadcn/ui/accordion';
18
+ import {
19
+ Accordion,
20
+ AccordionContent,
21
+ AccordionItem,
22
+ AccordionTrigger,
23
+ } from '../../../../shadcn/ui/accordion';
19
24
  import { Button } from '../../../../shadcn/ui/button';
20
25
  import { Checkbox } from '../../../../shadcn/ui/checkbox';
21
26
  import { Skeleton } from '../../../../shadcn/ui/skeleton';
22
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../../shadcn/ui/table';
27
+ import {
28
+ Table,
29
+ TableBody,
30
+ TableCell,
31
+ TableHead,
32
+ TableHeader,
33
+ TableRow,
34
+ } from '../../../../shadcn/ui/table';
23
35
  import { FormBuilder, type FormBuilderSectionConfig } from '../../form';
24
- import type { DataTableAction, DataTableBatchAction, DataTableFiltersProp } from '../types';
36
+ import type {
37
+ DataTableAction,
38
+ DataTableBatchAction,
39
+ DataTableFiltersProp,
40
+ } from '../types';
25
41
  import { DataTablePagination } from './DataTablePagination';
26
42
  import { DataTableViewOptions } from './DataTableViewOptions';
27
43
 
@@ -39,6 +55,7 @@ export interface DataTableProps<TData, TValue> {
39
55
  rowCount?: number;
40
56
  pagination?: boolean;
41
57
  paginationState?: PaginationState;
58
+ paginationVariant?: 'full' | 'compact';
42
59
  onPaginationChange?: (newState: PaginationState) => void;
43
60
  columnVisibility?: boolean;
44
61
  columnVisibilityState?: VisibilityState;
@@ -79,6 +96,7 @@ export function DataTable<TData, TValue>({
79
96
  onColumnFiltersChange,
80
97
  rowCount,
81
98
  pagination,
99
+ paginationVariant = 'full',
82
100
  onPaginationChange,
83
101
  paginationState,
84
102
  columnVisibility,
@@ -100,51 +118,68 @@ export function DataTable<TData, TValue>({
100
118
  filterTitle,
101
119
  filterShowActionsSeparator,
102
120
  }: DataTableProps<TData, TValue>) {
103
- const [rowSelection, setRowSelection] = React.useState<Record<string, boolean>>({});
104
- const [internalSortingState, setInternalSortingState] = React.useState<SortingState>([]);
105
- const [internalFiltersState, setInternalFiltersState] = React.useState<ColumnFiltersState>([]);
106
- const [internalPaginationState, setInternalPaginationState] = React.useState<PaginationState>({ pageIndex: 0, pageSize: 10 });
107
- const [internalVisibilityState, setInternalVisibilityState] = React.useState<VisibilityState>({});
121
+ const [rowSelection, setRowSelection] = React.useState<
122
+ Record<string, boolean>
123
+ >({});
124
+ const [internalSortingState, setInternalSortingState] =
125
+ React.useState<SortingState>([]);
126
+ const [internalFiltersState, setInternalFiltersState] =
127
+ React.useState<ColumnFiltersState>([]);
128
+ const [internalPaginationState, setInternalPaginationState] =
129
+ React.useState<PaginationState>({ pageIndex: 0, pageSize: 10 });
130
+ const [internalVisibilityState, setInternalVisibilityState] =
131
+ React.useState<VisibilityState>({});
108
132
 
109
133
  const effectiveSortingState = sortingState ?? internalSortingState;
110
134
  const effectiveFiltersState = columnFiltersState ?? internalFiltersState;
111
- const effectiveVisibilityState = columnVisibilityState ?? internalVisibilityState;
135
+ const effectiveVisibilityState =
136
+ columnVisibilityState ?? internalVisibilityState;
112
137
  const effectivePaginationState = paginationState ?? internalPaginationState;
113
138
 
114
139
  const isPaginationEnabled = pagination;
115
- const isManualPaginationEnabled = paginationState !== undefined && onPaginationChange !== undefined;
140
+ const isManualPaginationEnabled =
141
+ paginationState !== undefined && onPaginationChange !== undefined;
116
142
  const isSortingEnabled = sorting;
117
143
  const isColumnFiltersEnabled = columnFilters;
118
144
  const isColumnVisibilityEnabled = columnVisibility;
119
145
 
120
146
  // Build selection-aware columns by injecting a selection column at the start
121
- const selectionColumn = React.useMemo<ColumnDef<TData, unknown>>(() => ({
122
- id: '__select',
123
- header: ({ table }) => (
124
- <Checkbox
125
- checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}
126
- onCheckedChange={val => table.toggleAllPageRowsSelected(!!val)}
127
- aria-label="Select all"
128
- />
129
- ),
130
- cell: ({ row }) => (
131
- <Checkbox
132
- checked={row.getIsSelected()}
133
- onCheckedChange={val => row.toggleSelected(!!val)}
134
- aria-label="Select row"
135
- onClick={e => e.stopPropagation()}
136
- />
137
- ),
138
- enableSorting: false,
139
- enableHiding: false,
140
- size: 32,
141
- minSize: 32,
142
- maxSize: 32,
143
- }), []);
147
+ const selectionColumn = React.useMemo<ColumnDef<TData, unknown>>(
148
+ () => ({
149
+ id: '__select',
150
+ header: ({ table }) => (
151
+ <Checkbox
152
+ checked={
153
+ table.getIsAllPageRowsSelected() ||
154
+ (table.getIsSomePageRowsSelected() && 'indeterminate')
155
+ }
156
+ onCheckedChange={(val) => table.toggleAllPageRowsSelected(!!val)}
157
+ aria-label="Select all"
158
+ />
159
+ ),
160
+ cell: ({ row }) => (
161
+ <Checkbox
162
+ checked={row.getIsSelected()}
163
+ onCheckedChange={(val) => row.toggleSelected(!!val)}
164
+ aria-label="Select row"
165
+ onClick={(e) => e.stopPropagation()}
166
+ />
167
+ ),
168
+ enableSorting: false,
169
+ enableHiding: false,
170
+ size: 32,
171
+ minSize: 32,
172
+ maxSize: 32,
173
+ }),
174
+ [],
175
+ );
144
176
 
145
177
  const renderedColumns = React.useMemo(
146
- () => (selectable ? [selectionColumn as unknown as ColumnDef<TData, TValue>, ...columns] : columns),
147
- [selectable, selectionColumn, columns]
178
+ () =>
179
+ selectable
180
+ ? [selectionColumn as unknown as ColumnDef<TData, TValue>, ...columns]
181
+ : columns,
182
+ [selectable, selectionColumn, columns],
148
183
  );
149
184
 
150
185
  const table = useReactTable({
@@ -166,23 +201,49 @@ export function DataTable<TData, TValue>({
166
201
  manualPagination: isManualPaginationEnabled,
167
202
  enableSorting: isSortingEnabled,
168
203
  enableColumnFilters: isColumnFiltersEnabled,
169
- onSortingChange: isSortingEnabled ? updater => {
170
- const next = typeof updater === 'function' ? (updater as (old: SortingState) => SortingState)(effectiveSortingState) : updater;
171
- setInternalSortingState(next);
172
- onSortingChange?.(next);
173
- } : undefined,
174
- onColumnFiltersChange: isColumnFiltersEnabled ? updater => {
175
- const next = typeof updater === 'function' ? (updater as (old: ColumnFiltersState) => ColumnFiltersState)(effectiveFiltersState) : updater;
176
- setInternalFiltersState(next);
177
- onColumnFiltersChange?.(next);
178
- } : undefined,
179
- onPaginationChange: isPaginationEnabled ? updater => {
180
- const next = typeof updater === 'function' ? (updater as (old: PaginationState) => PaginationState)(effectivePaginationState) : updater;
181
- setInternalPaginationState(next);
182
- onPaginationChange?.(next);
183
- } : undefined,
184
- onColumnVisibilityChange: updater => {
185
- const next = typeof updater === 'function' ? (updater as (old: VisibilityState) => VisibilityState)(effectiveVisibilityState) : updater;
204
+ onSortingChange: isSortingEnabled
205
+ ? (updater) => {
206
+ const next =
207
+ typeof updater === 'function'
208
+ ? (updater as (old: SortingState) => SortingState)(
209
+ effectiveSortingState,
210
+ )
211
+ : updater;
212
+ setInternalSortingState(next);
213
+ onSortingChange?.(next);
214
+ }
215
+ : undefined,
216
+ onColumnFiltersChange: isColumnFiltersEnabled
217
+ ? (updater) => {
218
+ const next =
219
+ typeof updater === 'function'
220
+ ? (updater as (old: ColumnFiltersState) => ColumnFiltersState)(
221
+ effectiveFiltersState,
222
+ )
223
+ : updater;
224
+ setInternalFiltersState(next);
225
+ onColumnFiltersChange?.(next);
226
+ }
227
+ : undefined,
228
+ onPaginationChange: isPaginationEnabled
229
+ ? (updater) => {
230
+ const next =
231
+ typeof updater === 'function'
232
+ ? (updater as (old: PaginationState) => PaginationState)(
233
+ effectivePaginationState,
234
+ )
235
+ : updater;
236
+ setInternalPaginationState(next);
237
+ onPaginationChange?.(next);
238
+ }
239
+ : undefined,
240
+ onColumnVisibilityChange: (updater) => {
241
+ const next =
242
+ typeof updater === 'function'
243
+ ? (updater as (old: VisibilityState) => VisibilityState)(
244
+ effectiveVisibilityState,
245
+ )
246
+ : updater;
186
247
  setInternalVisibilityState(next);
187
248
  onColumnVisibilityChange?.(next);
188
249
  },
@@ -198,16 +259,25 @@ export function DataTable<TData, TValue>({
198
259
  }, [onTable, table]);
199
260
 
200
261
  // Selected rows convenience
201
- const selectedRows = table.getSelectedRowModel().rows.map(r => r.original as TData);
262
+ const selectedRows = table
263
+ .getSelectedRowModel()
264
+ .rows.map((r) => r.original as TData);
202
265
 
203
266
  // Safe action arrays to avoid array literal defaults in props
204
267
  const safeActions = React.useMemo(() => actions ?? [], [actions]);
205
- const safeBatchActions = React.useMemo(() => batchActions ?? [], [batchActions]);
268
+ const safeBatchActions = React.useMemo(
269
+ () => batchActions ?? [],
270
+ [batchActions],
271
+ );
206
272
 
207
273
  // Skeleton row keys (avoid using array index as key)
208
274
  const skeletonRowKeys = React.useMemo(
209
- () => Array.from({ length: Math.max(3, effectivePaginationState.pageSize ?? 10) }, () => Math.random().toString(36).slice(2)),
210
- [effectivePaginationState.pageSize]
275
+ () =>
276
+ Array.from(
277
+ { length: Math.max(3, effectivePaginationState.pageSize ?? 10) },
278
+ () => Math.random().toString(36).slice(2),
279
+ ),
280
+ [effectivePaginationState.pageSize],
211
281
  );
212
282
 
213
283
  // Standard actions state
@@ -218,10 +288,17 @@ export function DataTable<TData, TValue>({
218
288
 
219
289
  // Render a button from action definition
220
290
  const renderActionButton = (action: DataTableAction, key: React.Key) => {
221
- if (action.element) return <React.Fragment key={key}>{action.element}</React.Fragment>;
291
+ if (action.element)
292
+ return <React.Fragment key={key}>{action.element}</React.Fragment>;
222
293
  const content = (
223
294
  <div className="flex items-center gap-x-2">
224
- {action.icon && <span className={cn(action.iconPosition === 'right' ? 'order-last' : '')}>{action.icon}</span>}
295
+ {action.icon && (
296
+ <span
297
+ className={cn(action.iconPosition === 'right' ? 'order-last' : '')}
298
+ >
299
+ {action.icon}
300
+ </span>
301
+ )}
225
302
  {action.label}
226
303
  </div>
227
304
  );
@@ -239,12 +316,26 @@ export function DataTable<TData, TValue>({
239
316
  );
240
317
  };
241
318
 
242
- const renderBatchButton = (action: DataTableBatchAction<TData>, key: React.Key) => {
243
- if (action.element) return <React.Fragment key={key}>{action.element}</React.Fragment>;
244
- const onClick = () => action.onClick?.({ selectedRows, clearSelection: () => table.resetRowSelection() });
319
+ const renderBatchButton = (
320
+ action: DataTableBatchAction<TData>,
321
+ key: React.Key,
322
+ ) => {
323
+ if (action.element)
324
+ return <React.Fragment key={key}>{action.element}</React.Fragment>;
325
+ const onClick = () =>
326
+ action.onClick?.({
327
+ selectedRows,
328
+ clearSelection: () => table.resetRowSelection(),
329
+ });
245
330
  const content = (
246
331
  <div className="flex items-center gap-x-2">
247
- {action.icon && <span className={cn(action.iconPosition === 'right' ? 'order-last' : '')}>{action.icon}</span>}
332
+ {action.icon && (
333
+ <span
334
+ className={cn(action.iconPosition === 'right' ? 'order-last' : '')}
335
+ >
336
+ {action.icon}
337
+ </span>
338
+ )}
248
339
  {action.label}
249
340
  </div>
250
341
  );
@@ -268,18 +359,27 @@ export function DataTable<TData, TValue>({
268
359
 
269
360
  return (
270
361
  <div className={cn('space-y-3', className)}>
271
- {formFilters && formFilters.length ? (
362
+ {formFilters?.length ? (
272
363
  effectiveFilterWrapper === 'accordion' ? (
273
364
  <div className="rounded-md border border-border">
274
- <Accordion type="single" collapsible className="w-full" defaultValue="filters">
365
+ <Accordion
366
+ type="single"
367
+ collapsible
368
+ className="w-full"
369
+ defaultValue="filters"
370
+ >
275
371
  <AccordionItem value="filters">
276
- <AccordionTrigger className="px-4 py-3 border-b border-border text-md">{effectiveFilterTitle}</AccordionTrigger>
372
+ <AccordionTrigger className="px-4 py-3 border-b border-border text-md">
373
+ {effectiveFilterTitle}
374
+ </AccordionTrigger>
277
375
  <AccordionContent className="px-4 pb-4 pt-5">
278
376
  <FormBuilder
279
377
  key={JSON.stringify(formFilterValues ?? {})}
280
378
  sections={formFilters as FormBuilderSectionConfig[]}
281
379
  defaultValues={formFilterValues}
282
- onSubmit={data => onFormFilterChange?.(data as Record<string, unknown>)}
380
+ onSubmit={(data) =>
381
+ onFormFilterChange?.(data as Record<string, unknown>)
382
+ }
283
383
  onReset={() => onFormFilterChange?.({})}
284
384
  showActions
285
385
  submitLabel="Apply"
@@ -296,7 +396,9 @@ export function DataTable<TData, TValue>({
296
396
  key={JSON.stringify(formFilterValues ?? {})}
297
397
  sections={formFilters as FormBuilderSectionConfig[]}
298
398
  defaultValues={formFilterValues}
299
- onSubmit={data => onFormFilterChange?.(data as Record<string, unknown>)}
399
+ onSubmit={(data) =>
400
+ onFormFilterChange?.(data as Record<string, unknown>)
401
+ }
300
402
  onReset={() => onFormFilterChange?.({})}
301
403
  showActions
302
404
  submitLabel="Apply"
@@ -309,7 +411,9 @@ export function DataTable<TData, TValue>({
309
411
  key={JSON.stringify(formFilterValues ?? {})}
310
412
  sections={formFilters as FormBuilderSectionConfig[]}
311
413
  defaultValues={formFilterValues}
312
- onSubmit={data => onFormFilterChange?.(data as Record<string, unknown>)}
414
+ onSubmit={(data) =>
415
+ onFormFilterChange?.(data as Record<string, unknown>)
416
+ }
313
417
  onReset={() => onFormFilterChange?.({})}
314
418
  showActions
315
419
  submitLabel="Apply"
@@ -319,11 +423,17 @@ export function DataTable<TData, TValue>({
319
423
  )
320
424
  ) : null}
321
425
  {/* Actions Bar */}
322
- {(safeActions.length || showStandardActions || (selectable && table.getSelectedRowModel().rows.length > 0 && safeBatchActions.length)) && (
426
+ {(safeActions.length ||
427
+ showStandardActions ||
428
+ (selectable &&
429
+ table.getSelectedRowModel().rows.length > 0 &&
430
+ safeBatchActions.length)) && (
323
431
  <div className="rounded-md p-2 mt-6">
324
432
  <div className="flex items-center justify-between">
325
433
  <div className="flex items-center gap-2">
326
- {selectable && table.getSelectedRowModel().rows.length > 0 && safeBatchActions.map((a) => renderBatchButton(a, a.key))}
434
+ {selectable &&
435
+ table.getSelectedRowModel().rows.length > 0 &&
436
+ safeBatchActions.map((a) => renderBatchButton(a, a.key))}
327
437
  </div>
328
438
  <div className="flex items-center gap-2">
329
439
  {showStandardActions && onRefresh && (
@@ -335,7 +445,10 @@ export function DataTable<TData, TValue>({
335
445
  className="h-8"
336
446
  title="Refresh"
337
447
  >
338
- <RefreshCw className={cn('h-4 w-4', loading && 'animate-spin')} /> Refresh
448
+ <RefreshCw
449
+ className={cn('h-4 w-4', loading && 'animate-spin')}
450
+ />{' '}
451
+ Refresh
339
452
  </Button>
340
453
  )}
341
454
  {isColumnVisibilityEnabled ? (
@@ -346,7 +459,10 @@ export function DataTable<TData, TValue>({
346
459
  </div>
347
460
  </div>
348
461
  )}
349
- <div className="relative overflow-hidden rounded-md border border-border" aria-busy={loading || undefined}>
462
+ <div
463
+ className="relative overflow-hidden rounded-md border border-border"
464
+ aria-busy={loading || undefined}
465
+ >
350
466
  {loading && (
351
467
  <div className="pointer-events-none absolute inset-0 z-10 flex items-start justify-end p-2">
352
468
  <span className="inline-flex items-center gap-2 rounded bg-background/80 px-2 py-1 text-xs shadow-sm ring-1 ring-border">
@@ -356,13 +472,16 @@ export function DataTable<TData, TValue>({
356
472
  )}
357
473
  <Table>
358
474
  <TableHeader>
359
- {table.getHeaderGroups().map(headerGroup => (
475
+ {table.getHeaderGroups().map((headerGroup) => (
360
476
  <TableRow key={headerGroup.id}>
361
- {headerGroup.headers.map(header => (
477
+ {headerGroup.headers.map((header) => (
362
478
  <TableHead key={header.id}>
363
479
  {header.isPlaceholder
364
480
  ? null
365
- : flexRender(header.column.columnDef.header, header.getContext())}
481
+ : flexRender(
482
+ header.column.columnDef.header,
483
+ header.getContext(),
484
+ )}
366
485
  </TableHead>
367
486
  ))}
368
487
  </TableRow>
@@ -380,23 +499,35 @@ export function DataTable<TData, TValue>({
380
499
  </TableRow>
381
500
  ))
382
501
  ) : table.getRowModel().rows?.length ? (
383
- table.getRowModel().rows.map(row => (
502
+ table.getRowModel().rows.map((row) => (
384
503
  <TableRow
385
504
  key={row.id}
386
505
  data-state={row.getIsSelected() && 'selected'}
387
- className={cn(onRowClick && 'cursor-pointer hover:bg-muted/50')}
388
- onClick={onRowClick ? () => onRowClick(row.original as TData) : undefined}
506
+ className={cn(
507
+ onRowClick && 'cursor-pointer hover:bg-muted/50',
508
+ )}
509
+ onClick={
510
+ onRowClick
511
+ ? () => onRowClick(row.original as TData)
512
+ : undefined
513
+ }
389
514
  >
390
- {row.getVisibleCells().map(cell => (
515
+ {row.getVisibleCells().map((cell) => (
391
516
  <TableCell key={cell.id}>
392
- {flexRender(cell.column.columnDef.cell, cell.getContext())}
517
+ {flexRender(
518
+ cell.column.columnDef.cell,
519
+ cell.getContext(),
520
+ )}
393
521
  </TableCell>
394
522
  ))}
395
523
  </TableRow>
396
524
  ))
397
525
  ) : (
398
526
  <TableRow>
399
- <TableCell colSpan={table.getVisibleLeafColumns().length} className="h-24 text-center">
527
+ <TableCell
528
+ colSpan={table.getVisibleLeafColumns().length}
529
+ className="h-24 text-center"
530
+ >
400
531
  {emptyText}
401
532
  </TableCell>
402
533
  </TableRow>
@@ -406,7 +537,10 @@ export function DataTable<TData, TValue>({
406
537
  </div>
407
538
 
408
539
  {isPaginationEnabled && (
409
- <DataTablePagination table={table} />
540
+ <DataTablePagination
541
+ table={table}
542
+ paginationVariant={paginationVariant}
543
+ />
410
544
  )}
411
545
  </div>
412
546
  );
@@ -1,5 +1,4 @@
1
- import * as React from 'react';
2
- import { type Column } from '@tanstack/react-table';
1
+ import type { Column } from '@tanstack/react-table';
3
2
  import { ArrowDown, ArrowUp, ChevronsUpDown, EyeOff } from 'lucide-react';
4
3
  import { cn } from '../../../../shadcn/lib/utils';
5
4
  import { Button } from '../../../../shadcn/ui/button';
@@ -10,9 +9,10 @@ import {
10
9
  DropdownMenuSeparator,
11
10
  DropdownMenuTrigger,
12
11
  } from '../../../../shadcn/ui/dropdown-menu';
12
+ import type { HTMLAttributes } from 'react';
13
13
 
14
14
  export interface DataTableColumnHeaderProps<TData, TValue>
15
- extends React.HTMLAttributes<HTMLDivElement> {
15
+ extends HTMLAttributes<HTMLDivElement> {
16
16
  column: Column<TData, TValue>;
17
17
  label?: string;
18
18
  }
@@ -23,7 +23,7 @@ export function DataTableColumnHeader<TData, TValue>({
23
23
  className,
24
24
  }: DataTableColumnHeaderProps<TData, TValue>) {
25
25
  label = (column.columnDef.meta as { label?: string })?.label ?? label;
26
-
26
+
27
27
  if (!column.getCanSort()) {
28
28
  return <div className={cn(className)}>{label}</div>;
29
29
  }
@@ -32,7 +32,11 @@ export function DataTableColumnHeader<TData, TValue>({
32
32
  <div className={cn('flex items-center gap-2', className)}>
33
33
  <DropdownMenu>
34
34
  <DropdownMenuTrigger asChild>
35
- <Button variant="ghost" size="sm" className="data-[state=open]:bg-accent -ml-3 h-8">
35
+ <Button
36
+ variant="ghost"
37
+ size="sm"
38
+ className="data-[state=open]:bg-accent -ml-3 h-8"
39
+ >
36
40
  <span>{label}</span>
37
41
  {column.getIsSorted() === 'desc' ? (
38
42
  <ArrowDown className="ml-2 size-4" />
@@ -1,40 +1,62 @@
1
- import { type Table } from '@tanstack/react-table';
2
- import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';
1
+ import type { Table } from '@tanstack/react-table';
2
+ import {
3
+ ChevronLeft,
4
+ ChevronRight,
5
+ ChevronsLeft,
6
+ ChevronsRight,
7
+ } from 'lucide-react';
3
8
  import { Button } from '../../../../shadcn/ui/button';
4
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../../shadcn/ui/select';
9
+ import {
10
+ Select,
11
+ SelectContent,
12
+ SelectItem,
13
+ SelectTrigger,
14
+ SelectValue,
15
+ } from '../../../../shadcn/ui/select';
5
16
 
6
17
  export interface DataTablePaginationProps<TData> {
7
18
  table: Table<TData>;
19
+ paginationVariant?: 'full' | 'compact';
8
20
  }
9
21
 
10
- export function DataTablePagination<TData>({ table }: DataTablePaginationProps<TData>) {
11
- const pagination = table.getState().pagination ?? { pageIndex: 0, pageSize: 10 };
22
+ export function DataTablePagination<TData>({
23
+ table,
24
+ paginationVariant = 'full',
25
+ }: DataTablePaginationProps<TData>) {
26
+ const pagination = table.getState().pagination ?? {
27
+ pageIndex: 0,
28
+ pageSize: 10,
29
+ };
12
30
 
13
31
  return (
14
32
  <div className="flex items-center justify-between px-2">
15
- <div className="text-muted-foreground flex-1 text-sm">
16
- {table.getFilteredSelectedRowModel().rows.length} of{' '}
17
- {table.getFilteredRowModel().rows.length} row(s) selected.
18
- </div>
19
- <div className="flex items-center space-x-6 lg:space-x-8">
20
- <div className="flex items-center space-x-2">
21
- <p className="text-sm font-medium">Rows per page</p>
22
- <Select
23
- value={`${pagination.pageSize}`}
24
- onValueChange={(value) => table.setPageSize(Number(value))}
25
- >
26
- <SelectTrigger className="h-8 w-[70px]">
27
- <SelectValue placeholder={pagination.pageSize} />
28
- </SelectTrigger>
29
- <SelectContent side="top">
30
- {[10, 20, 25, 30, 40, 50].map((pageSize) => (
31
- <SelectItem key={pageSize} value={`${pageSize}`}>
32
- {pageSize}
33
- </SelectItem>
34
- ))}
35
- </SelectContent>
36
- </Select>
33
+ {paginationVariant === 'full' && (
34
+ <div className="text-muted-foreground flex-1 text-sm">
35
+ {table.getFilteredSelectedRowModel().rows.length} of{' '}
36
+ {table.getFilteredRowModel().rows.length} row(s) selected.
37
37
  </div>
38
+ )}
39
+ <div className="flex items-center space-x-6 lg:space-x-8">
40
+ {paginationVariant === 'full' && (
41
+ <div className="flex items-center space-x-2">
42
+ <p className="text-sm font-medium">Rows per page</p>
43
+ <Select
44
+ value={`${pagination.pageSize}`}
45
+ onValueChange={(value) => table.setPageSize(Number(value))}
46
+ >
47
+ <SelectTrigger className="h-8 w-[70px]">
48
+ <SelectValue placeholder={pagination.pageSize} />
49
+ </SelectTrigger>
50
+ <SelectContent side="top">
51
+ {[10, 20, 25, 30, 40, 50].map((pageSize) => (
52
+ <SelectItem key={pageSize} value={`${pageSize}`}>
53
+ {pageSize}
54
+ </SelectItem>
55
+ ))}
56
+ </SelectContent>
57
+ </Select>
58
+ </div>
59
+ )}
38
60
  <div className="flex w-[100px] items-center justify-center text-sm font-medium">
39
61
  Page {pagination.pageIndex + 1} of {table.getPageCount()}
40
62
  </div>
@@ -1,4 +1,4 @@
1
- import { type Table } from '@tanstack/react-table';
1
+ import type { Table } from '@tanstack/react-table';
2
2
  import { Settings2 } from 'lucide-react';
3
3
  import { Button } from '../../../../shadcn/ui/button';
4
4
  import {
@@ -10,11 +10,19 @@ import {
10
10
  DropdownMenuTrigger,
11
11
  } from '../../../../shadcn/ui/dropdown-menu';
12
12
 
13
- export function DataTableViewOptions<TData>({ table }: { table: Table<TData> }) {
13
+ export function DataTableViewOptions<TData>({
14
+ table,
15
+ }: {
16
+ table: Table<TData>;
17
+ }) {
14
18
  return (
15
19
  <DropdownMenu>
16
20
  <DropdownMenuTrigger asChild>
17
- <Button variant="outline" size="sm" className="ml-auto hidden h-8 lg:flex">
21
+ <Button
22
+ variant="outline"
23
+ size="sm"
24
+ className="ml-auto hidden h-8 lg:flex"
25
+ >
18
26
  <Settings2 className="mr-2 size-4" /> View
19
27
  </Button>
20
28
  </DropdownMenuTrigger>
@@ -32,7 +40,8 @@ export function DataTableViewOptions<TData>({ table }: { table: Table<TData> })
32
40
  checked={column.getIsVisible()}
33
41
  onCheckedChange={(value) => column.toggleVisibility(!!value)}
34
42
  >
35
- {(column?.columnDef.meta as { label?: string })?.label ?? column.id}
43
+ {(column?.columnDef.meta as { label?: string })?.label ??
44
+ column.id}
36
45
  </DropdownMenuCheckboxItem>
37
46
  );
38
47
  })}
@@ -9,7 +9,13 @@ export interface DataTableAction {
9
9
  label?: React.ReactNode; // string or component
10
10
  icon?: React.ReactNode;
11
11
  iconPosition?: IconPosition;
12
- variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
12
+ variant?:
13
+ | 'default'
14
+ | 'destructive'
15
+ | 'outline'
16
+ | 'secondary'
17
+ | 'ghost'
18
+ | 'link';
13
19
  disabled?: boolean;
14
20
  onClick?: () => void | Promise<void>;
15
21
  // If provided, this element will be rendered directly instead of constructing a Button
@@ -21,9 +27,18 @@ export interface DataTableBatchAction<TData = unknown> {
21
27
  label?: React.ReactNode;
22
28
  icon?: React.ReactNode;
23
29
  iconPosition?: IconPosition;
24
- variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
30
+ variant?:
31
+ | 'default'
32
+ | 'destructive'
33
+ | 'outline'
34
+ | 'secondary'
35
+ | 'ghost'
36
+ | 'link';
25
37
  disabled?: boolean;
26
38
  // Receives selected rows and helpers
27
- onClick?: (args: { selectedRows: TData[]; clearSelection: () => void }) => void | Promise<void>;
39
+ onClick?: (args: {
40
+ selectedRows: TData[];
41
+ clearSelection: () => void;
42
+ }) => void | Promise<void>;
28
43
  element?: React.ReactNode;
29
44
  }