@m5kdev/web-ui 0.7.0 → 0.8.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 (377) hide show
  1. package/dist/src/animations/card.motion.d.ts +7 -2
  2. package/dist/src/animations/card.motion.js +25 -6
  3. package/dist/src/animations/card.motion.js.map +1 -0
  4. package/dist/src/components/AvatarUpload.d.ts +14 -5
  5. package/dist/src/components/AvatarUpload.js +105 -63
  6. package/dist/src/components/AvatarUpload.js.map +1 -0
  7. package/dist/src/components/Button.d.ts +14 -4
  8. package/dist/src/components/Button.js +13 -4
  9. package/dist/src/components/Button.js.map +1 -0
  10. package/dist/src/components/Calendar.d.ts +33 -31
  11. package/dist/src/components/Calendar.js +14 -6
  12. package/dist/src/components/Calendar.js.map +1 -0
  13. package/dist/src/components/{Calendar.css → Calendar2.css} +757 -684
  14. package/dist/src/components/CardsSelect.d.ts +25 -21
  15. package/dist/src/components/CardsSelect.js +75 -42
  16. package/dist/src/components/CardsSelect.js.map +1 -0
  17. package/dist/src/components/CollapsibleSidebarMenuItem.d.ts +22 -9
  18. package/dist/src/components/CollapsibleSidebarMenuItem.js +31 -8
  19. package/dist/src/components/CollapsibleSidebarMenuItem.js.map +1 -0
  20. package/dist/src/components/ColorPicker.d.ts +15 -4
  21. package/dist/src/components/ColorPicker.js +46 -16
  22. package/dist/src/components/ColorPicker.js.map +1 -0
  23. package/dist/src/components/CopyButton.d.ts +18 -6
  24. package/dist/src/components/CopyButton.js +28 -19
  25. package/dist/src/components/CopyButton.js.map +1 -0
  26. package/dist/src/components/CropDialog.d.ts +20 -8
  27. package/dist/src/components/CropDialog.js +108 -62
  28. package/dist/src/components/CropDialog.js.map +1 -0
  29. package/dist/src/components/DialogProvider.d.ts +22 -14
  30. package/dist/src/components/DialogProvider.js +67 -45
  31. package/dist/src/components/DialogProvider.js.map +1 -0
  32. package/dist/src/components/ErrorFallback.d.ts +13 -4
  33. package/dist/src/components/ErrorFallback.js +29 -4
  34. package/dist/src/components/ErrorFallback.js.map +1 -0
  35. package/dist/src/components/FileDropzone.d.ts +12 -4
  36. package/dist/src/components/FileDropzone.js +98 -60
  37. package/dist/src/components/FileDropzone.js.map +1 -0
  38. package/dist/src/components/MultiSelectDropdown.d.ts +25 -22
  39. package/dist/src/components/MultiSelectDropdown.js +99 -49
  40. package/dist/src/components/MultiSelectDropdown.js.map +1 -0
  41. package/dist/src/components/Orb.d.ts +17 -6
  42. package/dist/src/components/Orb.js +263 -255
  43. package/dist/src/components/Orb.js.map +1 -0
  44. package/dist/src/components/PageAlert.d.ts +20 -15
  45. package/dist/src/components/PageAlert.js +67 -39
  46. package/dist/src/components/PageAlert.js.map +1 -0
  47. package/dist/src/components/SelectChips.d.ts +21 -10
  48. package/dist/src/components/SelectChips.js +21 -9
  49. package/dist/src/components/SelectChips.js.map +1 -0
  50. package/dist/src/components/SidebarItem.d.ts +18 -7
  51. package/dist/src/components/SidebarItem.js +16 -4
  52. package/dist/src/components/SidebarItem.js.map +1 -0
  53. package/dist/src/components/Steps.d.ts +21 -16
  54. package/dist/src/components/Steps.js +193 -27
  55. package/dist/src/components/Steps.js.map +1 -0
  56. package/dist/src/components/TablerIconPicker.d.ts +13 -2
  57. package/dist/src/components/TablerIconPicker.js +4254 -4234
  58. package/dist/src/components/TablerIconPicker.js.map +1 -0
  59. package/dist/src/components/app-header.d.ts +14 -6
  60. package/dist/src/components/app-header.js +27 -6
  61. package/dist/src/components/app-header.js.map +1 -0
  62. package/dist/src/components/blur-card.d.ts +25 -11
  63. package/dist/src/components/blur-card.js +134 -31
  64. package/dist/src/components/blur-card.js.map +1 -0
  65. package/dist/src/components/features-section-demo-1.d.ts +22 -6
  66. package/dist/src/components/features-section-demo-1.js +119 -47
  67. package/dist/src/components/features-section-demo-1.js.map +1 -0
  68. package/dist/src/components/features-section-demo-2.d.ts +7 -1
  69. package/dist/src/components/features-section-demo-2.js +80 -49
  70. package/dist/src/components/features-section-demo-2.js.map +1 -0
  71. package/dist/src/components/features-section-demo-3.d.ts +16 -8
  72. package/dist/src/components/features-section-demo-3.js +239 -103
  73. package/dist/src/components/features-section-demo-3.js.map +1 -0
  74. package/dist/src/components/mode-toggle.d.ts +7 -1
  75. package/dist/src/components/mode-toggle.js +42 -7
  76. package/dist/src/components/mode-toggle.js.map +1 -0
  77. package/dist/src/components/nav-main.d.ts +20 -12
  78. package/dist/src/components/nav-main.js +31 -5
  79. package/dist/src/components/nav-main.js.map +1 -0
  80. package/dist/src/components/pricing-cards.d.ts +7 -1
  81. package/dist/src/components/pricing-cards.js +125 -24
  82. package/dist/src/components/pricing-cards.js.map +1 -0
  83. package/dist/src/components/shared/ButtonCopy.d.ts +17 -6
  84. package/dist/src/components/shared/ButtonCopy.js +31 -20
  85. package/dist/src/components/shared/ButtonCopy.js.map +1 -0
  86. package/dist/src/components/team-switcher.d.ts +16 -8
  87. package/dist/src/components/team-switcher.js +70 -8
  88. package/dist/src/components/team-switcher.js.map +1 -0
  89. package/dist/src/components/theme-provider.d.ts +18 -8
  90. package/dist/src/components/theme-provider.js +42 -38
  91. package/dist/src/components/theme-provider.js.map +1 -0
  92. package/dist/src/components/typewriter.d.ts +35 -14
  93. package/dist/src/components/typewriter.js +45 -36
  94. package/dist/src/components/typewriter.js.map +1 -0
  95. package/dist/src/components/ui/alert-dialog.d.ts +48 -13
  96. package/dist/src/components/ui/alert-dialog.js +58 -15
  97. package/dist/src/components/ui/alert-dialog.js.map +1 -0
  98. package/dist/src/components/ui/alert.d.ts +24 -8
  99. package/dist/src/components/ui/alert.js +28 -15
  100. package/dist/src/components/ui/alert.js.map +1 -0
  101. package/dist/src/components/ui/avatar.d.ts +9 -5
  102. package/dist/src/components/ui/avatar.js +23 -7
  103. package/dist/src/components/ui/avatar.js.map +1 -0
  104. package/dist/src/components/ui/badge.d.ts +17 -8
  105. package/dist/src/components/ui/badge.js +17 -14
  106. package/dist/src/components/ui/badge.js.map +1 -0
  107. package/dist/src/components/ui/bento-grid.d.ts +26 -11
  108. package/dist/src/components/ui/bento-grid.js +30 -6
  109. package/dist/src/components/ui/bento-grid.js.map +1 -0
  110. package/dist/src/components/ui/bento-grid2.d.ts +30 -14
  111. package/dist/src/components/ui/bento-grid2.js +45 -9
  112. package/dist/src/components/ui/bento-grid2.js.map +1 -0
  113. package/dist/src/components/ui/breadcrumb.d.ts +27 -15
  114. package/dist/src/components/ui/breadcrumb.js +54 -14
  115. package/dist/src/components/ui/breadcrumb.js.map +1 -0
  116. package/dist/src/components/ui/button.d.ts +14 -9
  117. package/dist/src/components/ui/button.js +37 -26
  118. package/dist/src/components/ui/button.js.map +1 -0
  119. package/dist/src/components/ui/card.d.ts +12 -8
  120. package/dist/src/components/ui/card.js +38 -10
  121. package/dist/src/components/ui/card.js.map +1 -0
  122. package/dist/src/components/ui/checkbox.d.ts +6 -2
  123. package/dist/src/components/ui/checkbox.js +17 -5
  124. package/dist/src/components/ui/checkbox.js.map +1 -0
  125. package/dist/src/components/ui/collapsible.d.ts +9 -4
  126. package/dist/src/components/ui/collapsible.js +5 -1
  127. package/dist/src/components/ui/collapsible.js.map +1 -0
  128. package/dist/src/components/ui/dialog.d.ts +44 -12
  129. package/dist/src/components/ui/dialog.js +64 -14
  130. package/dist/src/components/ui/dialog.js.map +1 -0
  131. package/dist/src/components/ui/dropdown-menu.d.ts +32 -24
  132. package/dist/src/components/ui/dropdown-menu.js +64 -14
  133. package/dist/src/components/ui/dropdown-menu.js.map +1 -0
  134. package/dist/src/components/ui/floating-navbar.d.ts +18 -9
  135. package/dist/src/components/ui/floating-navbar.js +49 -35
  136. package/dist/src/components/ui/floating-navbar.js.map +1 -0
  137. package/dist/src/components/ui/form.d.ts +30 -21
  138. package/dist/src/components/ui/form.js +76 -44
  139. package/dist/src/components/ui/form.js.map +1 -0
  140. package/dist/src/components/ui/image.d.ts +6 -2
  141. package/dist/src/components/ui/image.js +51 -11
  142. package/dist/src/components/ui/image.js.map +1 -0
  143. package/dist/src/components/ui/input.d.ts +6 -2
  144. package/dist/src/components/ui/input.js +14 -5
  145. package/dist/src/components/ui/input.js.map +1 -0
  146. package/dist/src/components/ui/label.d.ts +8 -3
  147. package/dist/src/components/ui/label.js +13 -5
  148. package/dist/src/components/ui/label.js.map +1 -0
  149. package/dist/src/components/ui/pagination.d.ts +39 -12
  150. package/dist/src/components/ui/pagination.js +64 -14
  151. package/dist/src/components/ui/pagination.js.map +1 -0
  152. package/dist/src/components/ui/progress.d.ts +6 -2
  153. package/dist/src/components/ui/progress.js +16 -4
  154. package/dist/src/components/ui/progress.js.map +1 -0
  155. package/dist/src/components/ui/resizable-navbar.d.ts +84 -43
  156. package/dist/src/components/ui/resizable-navbar.js +126 -74
  157. package/dist/src/components/ui/resizable-navbar.js.map +1 -0
  158. package/dist/src/components/ui/segment-control.d.ts +10 -7
  159. package/dist/src/components/ui/segment-control.js +83 -38
  160. package/dist/src/components/ui/segment-control.js.map +1 -0
  161. package/dist/src/components/ui/select.d.ts +16 -12
  162. package/dist/src/components/ui/select.js +63 -14
  163. package/dist/src/components/ui/select.js.map +1 -0
  164. package/dist/src/components/ui/separator.d.ts +6 -2
  165. package/dist/src/components/ui/separator.js +14 -4
  166. package/dist/src/components/ui/separator.js.map +1 -0
  167. package/dist/src/components/ui/sheet.d.ts +30 -19
  168. package/dist/src/components/ui/sheet.js +52 -23
  169. package/dist/src/components/ui/sheet.js.map +1 -0
  170. package/dist/src/components/ui/sidebar.d.ts +69 -62
  171. package/dist/src/components/ui/sidebar.js +326 -171
  172. package/dist/src/components/ui/sidebar.js.map +1 -0
  173. package/dist/src/components/ui/skeleton.d.ts +9 -1
  174. package/dist/src/components/ui/skeleton.js +10 -3
  175. package/dist/src/components/ui/skeleton.js.map +1 -0
  176. package/dist/src/components/ui/slider.d.ts +6 -2
  177. package/dist/src/components/ui/slider.js +16 -4
  178. package/dist/src/components/ui/slider.js.map +1 -0
  179. package/dist/src/components/ui/sonner.d.ts +10 -3
  180. package/dist/src/components/ui/sonner.js +18 -11
  181. package/dist/src/components/ui/sonner.js.map +1 -0
  182. package/dist/src/components/ui/spinner.d.ts +21 -10
  183. package/dist/src/components/ui/spinner.js +24 -24
  184. package/dist/src/components/ui/spinner.js.map +1 -0
  185. package/dist/src/components/ui/switch.d.ts +6 -2
  186. package/dist/src/components/ui/switch.js +13 -4
  187. package/dist/src/components/ui/switch.js.map +1 -0
  188. package/dist/src/components/ui/table.d.ts +39 -10
  189. package/dist/src/components/ui/table.js +51 -11
  190. package/dist/src/components/ui/table.js.map +1 -0
  191. package/dist/src/components/ui/tabs.d.ts +23 -6
  192. package/dist/src/components/ui/tabs.js +27 -7
  193. package/dist/src/components/ui/tabs.js.map +1 -0
  194. package/dist/src/components/ui/textarea.d.ts +10 -2
  195. package/dist/src/components/ui/textarea.js +11 -3
  196. package/dist/src/components/ui/textarea.js.map +1 -0
  197. package/dist/src/components/ui/timeline.d.ts +16 -9
  198. package/dist/src/components/ui/timeline.js +87 -24
  199. package/dist/src/components/ui/timeline.js.map +1 -0
  200. package/dist/src/components/ui/toast.d.ts +19 -14
  201. package/dist/src/components/ui/toast.js +48 -22
  202. package/dist/src/components/ui/toast.js.map +1 -0
  203. package/dist/src/components/ui/tooltip.d.ts +23 -6
  204. package/dist/src/components/ui/tooltip.js +27 -7
  205. package/dist/src/components/ui/tooltip.js.map +1 -0
  206. package/dist/src/components/ui/typewriter-effect.d.ts +28 -14
  207. package/dist/src/components/ui/typewriter-effect.js +102 -72
  208. package/dist/src/components/ui/typewriter-effect.js.map +1 -0
  209. package/dist/src/hooks/use-mobile.d.ts +5 -1
  210. package/dist/src/hooks/use-mobile.js +18 -13
  211. package/dist/src/hooks/use-mobile.js.map +1 -0
  212. package/dist/src/hooks/useDialog.d.ts +8 -4
  213. package/dist/src/hooks/useDialog.js +24 -20
  214. package/dist/src/hooks/useDialog.js.map +1 -0
  215. package/dist/src/icons/GoogleIcon.d.ts +9 -5
  216. package/dist/src/icons/GoogleIcon.js +32 -3
  217. package/dist/src/icons/GoogleIcon.js.map +1 -0
  218. package/dist/src/icons/LinkedInIcon.d.ts +9 -5
  219. package/dist/src/icons/LinkedInIcon.js +27 -3
  220. package/dist/src/icons/LinkedInIcon.js.map +1 -0
  221. package/dist/src/icons/MicrosoftIcon.d.ts +9 -5
  222. package/dist/src/icons/MicrosoftIcon.js +31 -3
  223. package/dist/src/icons/MicrosoftIcon.js.map +1 -0
  224. package/dist/src/lib/chatwoot.d.ts +19 -10
  225. package/dist/src/lib/chatwoot.js +25 -27
  226. package/dist/src/lib/chatwoot.js.map +1 -0
  227. package/dist/src/lib/utils.d.ts +7 -2
  228. package/dist/src/lib/utils.js +7 -2
  229. package/dist/src/lib/utils.js.map +1 -0
  230. package/dist/src/modules/app/components/AppLoader.d.ts +8 -2
  231. package/dist/src/modules/app/components/AppLoader.js +14 -3
  232. package/dist/src/modules/app/components/AppLoader.js.map +1 -0
  233. package/dist/src/modules/app/components/AppShell.d.ts +15 -6
  234. package/dist/src/modules/app/components/AppShell.js +14 -5
  235. package/dist/src/modules/app/components/AppShell.js.map +1 -0
  236. package/dist/src/modules/app/components/AppSidebar.d.ts +16 -6
  237. package/dist/src/modules/app/components/AppSidebar.js +17 -4
  238. package/dist/src/modules/app/components/AppSidebar.js.map +1 -0
  239. package/dist/src/modules/app/components/AppSidebarContent.d.ts +22 -13
  240. package/dist/src/modules/app/components/AppSidebarContent.js +34 -5
  241. package/dist/src/modules/app/components/AppSidebarContent.js.map +1 -0
  242. package/dist/src/modules/app/components/AppSidebarHeader.d.ts +18 -8
  243. package/dist/src/modules/app/components/AppSidebarHeader.js +37 -6
  244. package/dist/src/modules/app/components/AppSidebarHeader.js.map +1 -0
  245. package/dist/src/modules/app/components/AppSidebarInvites.d.ts +11 -3
  246. package/dist/src/modules/app/components/AppSidebarInvites.js +39 -8
  247. package/dist/src/modules/app/components/AppSidebarInvites.js.map +1 -0
  248. package/dist/src/modules/app/components/AppSidebarUser.d.ts +20 -10
  249. package/dist/src/modules/app/components/AppSidebarUser.js +121 -12
  250. package/dist/src/modules/app/components/AppSidebarUser.js.map +1 -0
  251. package/dist/src/modules/auth/components/AdminUserManagement.d.ts +11 -4
  252. package/dist/src/modules/auth/components/AdminUserManagement.js +970 -418
  253. package/dist/src/modules/auth/components/AdminUserManagement.js.map +1 -0
  254. package/dist/src/modules/auth/components/AdminWaitlist.d.ts +11 -4
  255. package/dist/src/modules/auth/components/AdminWaitlist.js +284 -115
  256. package/dist/src/modules/auth/components/AdminWaitlist.js.map +1 -0
  257. package/dist/src/modules/auth/components/AuthLayout.d.ts +12 -4
  258. package/dist/src/modules/auth/components/AuthLayout.js +17 -3
  259. package/dist/src/modules/auth/components/AuthLayout.js.map +1 -0
  260. package/dist/src/modules/auth/components/AuthProviders.d.ts +17 -6
  261. package/dist/src/modules/auth/components/AuthProviders.js +80 -41
  262. package/dist/src/modules/auth/components/AuthProviders.js.map +1 -0
  263. package/dist/src/modules/auth/components/AuthRouter.d.ts +16 -7
  264. package/dist/src/modules/auth/components/AuthRouter.js +46 -10
  265. package/dist/src/modules/auth/components/AuthRouter.js.map +1 -0
  266. package/dist/src/modules/auth/components/ClaimAccountRoute.d.ts +12 -4
  267. package/dist/src/modules/auth/components/ClaimAccountRoute.js +202 -139
  268. package/dist/src/modules/auth/components/ClaimAccountRoute.js.map +1 -0
  269. package/dist/src/modules/auth/components/ErrorAuthRoute.d.ts +7 -1
  270. package/dist/src/modules/auth/components/ErrorAuthRoute.js +125 -89
  271. package/dist/src/modules/auth/components/ErrorAuthRoute.js.map +1 -0
  272. package/dist/src/modules/auth/components/ForgotPasswordForm.d.ts +7 -1
  273. package/dist/src/modules/auth/components/ForgotPasswordForm.js +49 -23
  274. package/dist/src/modules/auth/components/ForgotPasswordForm.js.map +1 -0
  275. package/dist/src/modules/auth/components/ForgotPasswordRoute.d.ts +7 -1
  276. package/dist/src/modules/auth/components/ForgotPasswordRoute.js +34 -6
  277. package/dist/src/modules/auth/components/ForgotPasswordRoute.js.map +1 -0
  278. package/dist/src/modules/auth/components/InviteFriends.d.ts +12 -4
  279. package/dist/src/modules/auth/components/InviteFriends.js +275 -69
  280. package/dist/src/modules/auth/components/InviteFriends.js.map +1 -0
  281. package/dist/src/modules/auth/components/LastUsedBadge.d.ts +17 -5
  282. package/dist/src/modules/auth/components/LastUsedBadge.js +16 -6
  283. package/dist/src/modules/auth/components/LastUsedBadge.js.map +1 -0
  284. package/dist/src/modules/auth/components/LoginForm.d.ts +11 -3
  285. package/dist/src/modules/auth/components/LoginForm.js +107 -40
  286. package/dist/src/modules/auth/components/LoginForm.js.map +1 -0
  287. package/dist/src/modules/auth/components/LoginRoute.d.ts +11 -3
  288. package/dist/src/modules/auth/components/LoginRoute.js +41 -8
  289. package/dist/src/modules/auth/components/LoginRoute.js.map +1 -0
  290. package/dist/src/modules/auth/components/LogoutRoute.d.ts +7 -1
  291. package/dist/src/modules/auth/components/LogoutRoute.js +18 -12
  292. package/dist/src/modules/auth/components/LogoutRoute.js.map +1 -0
  293. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.d.ts +21 -8
  294. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.js +107 -97
  295. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.js.map +1 -0
  296. package/dist/src/modules/auth/components/OrganizationMembersRoute.d.ts +58 -48
  297. package/dist/src/modules/auth/components/OrganizationMembersRoute.js +448 -349
  298. package/dist/src/modules/auth/components/OrganizationMembersRoute.js.map +1 -0
  299. package/dist/src/modules/auth/components/OrganizationPreferences.d.ts +27 -16
  300. package/dist/src/modules/auth/components/OrganizationPreferences.js +129 -124
  301. package/dist/src/modules/auth/components/OrganizationPreferences.js.map +1 -0
  302. package/dist/src/modules/auth/components/OrganizationSettingsRoute.d.ts +27 -18
  303. package/dist/src/modules/auth/components/OrganizationSettingsRoute.js +184 -144
  304. package/dist/src/modules/auth/components/OrganizationSettingsRoute.js.map +1 -0
  305. package/dist/src/modules/auth/components/OrganizationSwitcher.d.ts +17 -6
  306. package/dist/src/modules/auth/components/OrganizationSwitcher.js +91 -69
  307. package/dist/src/modules/auth/components/OrganizationSwitcher.js.map +1 -0
  308. package/dist/src/modules/auth/components/PreferencesEditor.d.ts +44 -33
  309. package/dist/src/modules/auth/components/PreferencesEditor.js +82 -58
  310. package/dist/src/modules/auth/components/PreferencesEditor.js.map +1 -0
  311. package/dist/src/modules/auth/components/ProfileRoute.d.ts +7 -1
  312. package/dist/src/modules/auth/components/ProfileRoute.js +79 -36
  313. package/dist/src/modules/auth/components/ProfileRoute.js.map +1 -0
  314. package/dist/src/modules/auth/components/RangeNuqsDatePicker.d.ts +44 -30
  315. package/dist/src/modules/auth/components/RangeNuqsDatePicker.js +234 -242
  316. package/dist/src/modules/auth/components/RangeNuqsDatePicker.js.map +1 -0
  317. package/dist/src/modules/auth/components/ResetPasswordForm.d.ts +7 -1
  318. package/dist/src/modules/auth/components/ResetPasswordForm.js +97 -35
  319. package/dist/src/modules/auth/components/ResetPasswordForm.js.map +1 -0
  320. package/dist/src/modules/auth/components/ResetPasswordRoute.d.ts +7 -1
  321. package/dist/src/modules/auth/components/ResetPasswordRoute.js +34 -6
  322. package/dist/src/modules/auth/components/ResetPasswordRoute.js.map +1 -0
  323. package/dist/src/modules/auth/components/SignupFormRoute.d.ts +15 -5
  324. package/dist/src/modules/auth/components/SignupFormRoute.js +142 -99
  325. package/dist/src/modules/auth/components/SignupFormRoute.js.map +1 -0
  326. package/dist/src/modules/auth/components/SignupRoute.d.ts +13 -5
  327. package/dist/src/modules/auth/components/SignupRoute.js +59 -13
  328. package/dist/src/modules/auth/components/SignupRoute.js.map +1 -0
  329. package/dist/src/modules/auth/components/UserPreferences.d.ts +22 -11
  330. package/dist/src/modules/auth/components/UserPreferences.js +24 -12
  331. package/dist/src/modules/auth/components/UserPreferences.js.map +1 -0
  332. package/dist/src/modules/auth/components/WaitlistCard.d.ts +11 -4
  333. package/dist/src/modules/auth/components/WaitlistCard.js +63 -28
  334. package/dist/src/modules/auth/components/WaitlistCard.js.map +1 -0
  335. package/dist/src/modules/auth/components/WaitlistCodeValidation.d.ts +13 -5
  336. package/dist/src/modules/auth/components/WaitlistCodeValidation.js +42 -40
  337. package/dist/src/modules/auth/components/WaitlistCodeValidation.js.map +1 -0
  338. package/dist/src/modules/billing/components/BillingBetaPage.d.ts +15 -6
  339. package/dist/src/modules/billing/components/BillingBetaPage.js +155 -8
  340. package/dist/src/modules/billing/components/BillingBetaPage.js.map +1 -0
  341. package/dist/src/modules/billing/components/BillingInvoicePage.d.ts +13 -5
  342. package/dist/src/modules/billing/components/BillingInvoicePage.js +160 -30
  343. package/dist/src/modules/billing/components/BillingInvoicePage.js.map +1 -0
  344. package/dist/src/modules/billing/components/BillingPlanSelect.d.ts +11 -4
  345. package/dist/src/modules/billing/components/BillingPlanSelect.js +10 -7
  346. package/dist/src/modules/billing/components/BillingPlanSelect.js.map +1 -0
  347. package/dist/src/modules/billing/components/BillingRouter.d.ts +15 -7
  348. package/dist/src/modules/billing/components/BillingRouter.js +19 -6
  349. package/dist/src/modules/billing/components/BillingRouter.js.map +1 -0
  350. package/dist/src/modules/billing/components/BillingSinglePlanSelect.d.ts +17 -7
  351. package/dist/src/modules/billing/components/BillingSinglePlanSelect.js +163 -42
  352. package/dist/src/modules/billing/components/BillingSinglePlanSelect.js.map +1 -0
  353. package/dist/src/modules/table/components/ColumnOrderAndVisibility.d.ts +18 -8
  354. package/dist/src/modules/table/components/ColumnOrderAndVisibility.js +81 -38
  355. package/dist/src/modules/table/components/ColumnOrderAndVisibility.js.map +1 -0
  356. package/dist/src/modules/table/components/NuqsTable.d.ts +33 -21
  357. package/dist/src/modules/table/components/NuqsTable.js +295 -221
  358. package/dist/src/modules/table/components/NuqsTable.js.map +1 -0
  359. package/dist/src/modules/table/components/TableFiltering.d.ts +33 -21
  360. package/dist/src/modules/table/components/TableFiltering.js +408 -226
  361. package/dist/src/modules/table/components/TableFiltering.js.map +1 -0
  362. package/dist/src/modules/table/components/TableGroupBy.d.ts +18 -8
  363. package/dist/src/modules/table/components/TableGroupBy.js +56 -16
  364. package/dist/src/modules/table/components/TableGroupBy.js.map +1 -0
  365. package/dist/src/modules/table/components/TablePagination.d.ts +17 -7
  366. package/dist/src/modules/table/components/TablePagination.js +64 -32
  367. package/dist/src/modules/table/components/TablePagination.js.map +1 -0
  368. package/dist/src/modules/table/components/table.types.d.ts +15 -10
  369. package/dist/src/modules/table/components/table.types.js +0 -1
  370. package/dist/src/modules/table/filterTransformers.d.ts +35 -30
  371. package/dist/src/modules/table/filterTransformers.js +198 -261
  372. package/dist/src/modules/table/filterTransformers.js.map +1 -0
  373. package/dist/src/types.d.ts +8 -3
  374. package/dist/src/types.js +0 -1
  375. package/package.json +8 -6
  376. package/dist/translations/en/web-ui.json +0 -209
  377. package/dist/tsconfig.lib.tsbuildinfo +0 -1
@@ -1,234 +1,308 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Button as Button$1 } from "../../../components/ui/button.js";
2
+ import { Table as Table$1, TableBody as TableBody$1, TableCell as TableCell$1, TableHead, TableHeader as TableHeader$1, TableRow as TableRow$1 } from "../../../components/ui/table.js";
3
+ import { ColumnOrderAndVisibility } from "./ColumnOrderAndVisibility.js";
4
+ import { TableFiltering } from "./TableFiltering.js";
5
+ import { TableGroupBy } from "./TableGroupBy.js";
6
+ import { TablePagination } from "./TablePagination.js";
7
+ import { useEffect, useMemo, useState } from "react";
2
8
  import { Checkbox, Popover, PopoverContent, PopoverTrigger } from "@heroui/react";
3
- import { flexRender, getCoreRowModel, getExpandedRowModel, getGroupedRowModel, getPaginationRowModel, useReactTable, } from "@tanstack/react-table";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
10
  import { ChevronDown, ChevronRight, ChevronUp } from "lucide-react";
5
- import { useEffect, useMemo, useState } from "react";
6
- import { Button } from "../../../components/ui/button";
7
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "../../../components/ui/table";
8
- import { ColumnOrderAndVisibility } from "./ColumnOrderAndVisibility";
9
- import { TableFiltering } from "./TableFiltering";
10
- import { TableGroupBy } from "./TableGroupBy";
11
- import { TablePagination } from "./TablePagination";
11
+ import { flexRender, getCoreRowModel, getExpandedRowModel, getGroupedRowModel, getPaginationRowModel, useReactTable } from "@tanstack/react-table";
12
+ //#region src/modules/table/components/NuqsTable.tsx
12
13
  function getStorageKey(columnIds) {
13
- const sortedIds = [...columnIds].sort().join(",");
14
- return `table-column-layout-${sortedIds}`;
14
+ return `table-column-layout-${[...columnIds].sort().join(",")}`;
15
15
  }
16
16
  function loadLayoutFromStorage(columnIds) {
17
- if (typeof window === "undefined")
18
- return null;
19
- try {
20
- const key = getStorageKey(columnIds);
21
- const stored = localStorage.getItem(key);
22
- if (!stored)
23
- return null;
24
- const parsed = JSON.parse(stored);
25
- return parsed;
26
- }
27
- catch {
28
- return null;
29
- }
17
+ if (typeof window === "undefined") return null;
18
+ try {
19
+ const key = getStorageKey(columnIds);
20
+ const stored = localStorage.getItem(key);
21
+ if (!stored) return null;
22
+ return JSON.parse(stored);
23
+ } catch {
24
+ return null;
25
+ }
30
26
  }
31
27
  function saveLayoutToStorage(columnIds, order, visibility) {
32
- if (typeof window === "undefined")
33
- return;
34
- try {
35
- const key = getStorageKey(columnIds);
36
- localStorage.setItem(key, JSON.stringify({ order, visibility }));
37
- }
38
- catch {
39
- // Ignore storage errors
40
- }
28
+ if (typeof window === "undefined") return;
29
+ try {
30
+ const key = getStorageKey(columnIds);
31
+ localStorage.setItem(key, JSON.stringify({
32
+ order,
33
+ visibility
34
+ }));
35
+ } catch {}
41
36
  }
42
37
  function applyOrder(prev, nextOrder) {
43
- const byId = new Map(prev.map((i) => [i.id, i]));
44
- const ordered = nextOrder.map((id) => byId.get(id)).filter(Boolean);
45
- // append any newly added columns (if any appear later)
46
- for (const item of prev)
47
- if (!nextOrder.includes(item.id))
48
- ordered.push(item);
49
- return ordered;
38
+ const byId = new Map(prev.map((i) => [i.id, i]));
39
+ const ordered = nextOrder.map((id) => byId.get(id)).filter(Boolean);
40
+ for (const item of prev) if (!nextOrder.includes(item.id)) ordered.push(item);
41
+ return ordered;
50
42
  }
51
43
  function applyVisibility(prev, visibility) {
52
- return prev.map((column) => ({
53
- ...column,
54
- visibility: visibility[String(column.id)] ?? column.visibility,
55
- }));
44
+ return prev.map((column) => ({
45
+ ...column,
46
+ visibility: visibility[String(column.id)] ?? column.visibility
47
+ }));
56
48
  }
57
- export const NuqsTable = ({ data, total, columns, tableProps, singleFilter = false, filterMethods, }) => {
58
- const columnIds = useMemo(() => columns.map((col) => String(col.id)), [columns]);
59
- console.log("data", data);
60
- // const columnsWithId = useMemo(() => {
61
- // const idColumn: NuqsTableColumn<T> = {
62
- // id: "__row_id",
63
- // accessorKey: "id",
64
- // header: "",
65
- // enableSorting: false,
66
- // enableHiding: false,
67
- // visible: false,
68
- // };
69
- // return [idColumn, ...columns];
70
- // }, [columns]);
71
- const initialLayout = useMemo(() => {
72
- const defaultLayout = columns.map((column) => ({
73
- id: String(column.id),
74
- label: column.header,
75
- visibility: column.visible !== undefined ? column.visible : true,
76
- options: column.options ?? [],
77
- type: column.type ?? undefined,
78
- }));
79
- const saved = loadLayoutFromStorage(columnIds);
80
- if (!saved)
81
- return defaultLayout;
82
- // Merge saved layout with default layout
83
- const savedById = new Map();
84
- saved.order.forEach((id, index) => {
85
- savedById.set(id, { order: index, visibility: saved.visibility[id] ?? true });
86
- });
87
- const merged = [];
88
- const processedIds = new Set();
89
- // Add columns in saved order
90
- saved.order.forEach((id) => {
91
- const defaultCol = defaultLayout.find((col) => col.id === id);
92
- if (defaultCol) {
93
- merged.push({
94
- ...defaultCol,
95
- visibility: saved.visibility[id] ?? defaultCol.visibility,
96
- });
97
- processedIds.add(id);
98
- }
99
- });
100
- // Add any new columns that weren't in saved layout
101
- defaultLayout.forEach((col) => {
102
- if (!processedIds.has(col.id)) {
103
- merged.push(col);
104
- }
105
- });
106
- return merged;
107
- }, [columns, columnIds]);
108
- const [layout, setLayout] = useState(initialLayout);
109
- // Sync layout when columns change
110
- useEffect(() => {
111
- setLayout(initialLayout);
112
- }, [initialLayout]);
113
- // Save to localStorage whenever layout changes
114
- useEffect(() => {
115
- const order = layout.map((col) => col.id);
116
- const visibility = Object.fromEntries(layout.map((col) => [col.id, col.visibility]));
117
- saveLayoutToStorage(columnIds, order, visibility);
118
- }, [layout, columnIds]);
119
- const columnOrder = useMemo(() => layout.map((column) => column.id), [layout]);
120
- const columnVisibility = useMemo(() => Object.fromEntries(layout.map((column) => [column.id, column.visibility])), [layout]);
121
- const { limit = 10, page = 1, sorting, setSorting, setPagination, pagination, rowSelection, setRowSelection, setFilters, filters, grouping, setGrouping, } = tableProps;
122
- const isGrouped = grouping.length > 0;
123
- const [expanded, setExpanded] = useState({});
124
- // Redirect back if we're on an empty page (past the last page)
125
- useEffect(() => {
126
- if (!isGrouped && data.length === 0 && page > 1 && total !== undefined) {
127
- setPagination?.({ pageIndex: page - 2, pageSize: limit });
128
- }
129
- }, [data.length, page, limit, total, setPagination, isGrouped]);
130
- // When grouped, TanStack handles pagination client-side; otherwise use server total
131
- const serverPageCount = total !== undefined
132
- ? Math.ceil(total / limit) || 1
133
- : data.length === limit
134
- ? page + 1
135
- : Math.max(page, Math.ceil(data.length / limit));
136
- const table = useReactTable({
137
- data,
138
- columns,
139
- getRowId: (row) => String(row.id),
140
- manualSorting: true,
141
- manualPagination: !isGrouped,
142
- state: { pagination, sorting, rowSelection, columnOrder, columnVisibility, grouping, expanded },
143
- ...(isGrouped ? {} : { pageCount: serverPageCount }),
144
- manualFiltering: true,
145
- enableGrouping: true,
146
- groupedColumnMode: false,
147
- autoResetExpanded: false,
148
- onSortingChange: setSorting,
149
- onPaginationChange: setPagination,
150
- onRowSelectionChange: setRowSelection,
151
- onGroupingChange: setGrouping,
152
- onExpandedChange: setExpanded,
153
- getCoreRowModel: getCoreRowModel(),
154
- getGroupedRowModel: getGroupedRowModel(),
155
- getExpandedRowModel: getExpandedRowModel(),
156
- getPaginationRowModel: getPaginationRowModel(),
157
- onColumnOrderChange: (updater) => {
158
- setLayout((prev) => applyOrder(prev, typeof updater === "function" ? updater(prev.map((i) => i.id)) : updater));
159
- },
160
- onColumnVisibilityChange: (updater) => {
161
- setLayout((prev) => applyVisibility(prev, typeof updater === "function"
162
- ? updater(Object.fromEntries(prev.map((i) => [i.id, i.visibility])))
163
- : updater));
164
- },
165
- });
166
- const onChangeOrder = (order) => {
167
- setLayout((prev) => applyOrder(prev, order));
168
- };
169
- const onChangeVisibility = (visibility) => {
170
- setLayout((prev) => applyVisibility(prev, visibility));
171
- };
172
- const onFiltersChange = (filters) => {
173
- setFilters?.(filters);
174
- };
175
- const filterableColumns = useMemo(() => {
176
- const baseColumns = columns
177
- .filter((column) => Boolean(column.type))
178
- .map((column) => ({
179
- id: String(column.id),
180
- label: String(column.header),
181
- type: column.type,
182
- options: column.options ?? [],
183
- endColumnId: column.endColumnId,
184
- periodStartColumnId: null,
185
- periodEndColumnId: null,
186
- }));
187
- // Add Period pseudo-columns for date columns with endColumnId
188
- const periodColumns = columns
189
- .filter((column) => column.type === "date" && column.endColumnId)
190
- .map((column) => ({
191
- id: `${String(column.id)}__period`,
192
- label: "Period",
193
- type: "date",
194
- options: [],
195
- endColumnId: null,
196
- periodStartColumnId: String(column.id),
197
- periodEndColumnId: column.endColumnId,
198
- }));
199
- return [...baseColumns, ...periodColumns];
200
- }, [columns]);
201
- const groupableColumns = useMemo(() => columns
202
- .filter((col) => col.groupable)
203
- .map((col) => ({ id: String(col.id), label: String(col.header) })), [columns]);
204
- const hasGrouping = grouping.length > 0;
205
- const [isFiltersOpen, setIsFiltersOpen] = useState(false);
206
- const [isColumnsOpen, setIsColumnsOpen] = useState(false);
207
- const [isGroupByOpen, setIsGroupByOpen] = useState(false);
208
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex w-full items-center gap-2 justify-end", children: [_jsxs(Popover, { placement: "bottom", isOpen: isFiltersOpen, onOpenChange: setIsFiltersOpen, portalContainer: document.body, children: [_jsx(PopoverTrigger, { children: _jsx(Button, { variant: "outline", size: "sm", children: _jsxs("div", { className: "flex items-center gap-2", children: ["Filters", _jsx(ChevronDown, { className: "h-4 w-4" })] }) }) }), _jsx(PopoverContent, { children: _jsx(TableFiltering, { columns: filterableColumns, onFiltersChange: onFiltersChange, filters: filters ?? [], onClose: () => setIsFiltersOpen(false), singleFilter: singleFilter, filterMethods: filterMethods }) })] }), groupableColumns.length > 0 && (_jsxs(Popover, { placement: "bottom", isOpen: isGroupByOpen, onOpenChange: setIsGroupByOpen, portalContainer: document.body, children: [_jsx(PopoverTrigger, { children: _jsx(Button, { variant: hasGrouping ? "secondary" : "outline", size: "sm", children: _jsxs("div", { className: "flex items-center gap-2", children: [hasGrouping
209
- ? `Grouped by: ${grouping.map((id) => groupableColumns.find((c) => c.id === id)?.label ?? id).join(" → ")}`
210
- : "Group by", _jsx(ChevronDown, { className: "h-4 w-4" })] }) }) }), _jsx(PopoverContent, { children: _jsx(TableGroupBy, { columns: groupableColumns, activeGrouping: grouping, onGroupingChange: (columnIds) => {
211
- setGrouping(columnIds);
212
- setExpanded({});
213
- setPagination?.({ pageIndex: 0, pageSize: limit });
214
- }, onClose: () => setIsGroupByOpen(false) }) })] })), _jsxs(Popover, { placement: "bottom", isOpen: isColumnsOpen, onOpenChange: setIsColumnsOpen, portalContainer: document.body, children: [_jsx(PopoverTrigger, { children: _jsx(Button, { variant: "outline", size: "sm", children: _jsxs("div", { className: "flex items-center gap-2", children: ["Columns", _jsx(ChevronDown, { className: "h-4 w-4" })] }) }) }), _jsx(PopoverContent, { children: _jsx(ColumnOrderAndVisibility, { layout: layout, onChangeOrder: onChangeOrder, onChangeVisibility: onChangeVisibility, onClose: () => setIsColumnsOpen(false) }) })] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: _jsx(Checkbox, { isSelected: table.getIsAllRowsSelected(), onValueChange: (checked) => {
215
- table.toggleAllRowsSelected(checked);
216
- } }) }), table.getHeaderGroups()[0].headers.map((header) => (_jsxs(TableHead, { onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined, children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanSort() && (_jsxs(_Fragment, { children: [header.column.getIsSorted() === "asc" && (_jsx(ChevronUp, { className: "h-4 w-4 inline ml-1" })), header.column.getIsSorted() === "desc" && (_jsx(ChevronDown, { className: "h-4 w-4 inline ml-1" }))] }))] }, header.id)))] }) }), _jsx(TableBody, { children: table.getRowModel().rows.map((row) => {
217
- if (row.getIsGrouped()) {
218
- return (_jsxs(TableRow, { className: "bg-muted/40 font-medium cursor-pointer hover:bg-muted/60", onClick: () => row.toggleExpanded(), children: [_jsx(TableCell, {}), row.getVisibleCells().map((cell) => {
219
- if (cell.getIsGrouped()) {
220
- return (_jsx(TableCell, { children: _jsxs("span", { className: "flex items-center gap-1.5", children: [row.getIsExpanded() ? (_jsx(ChevronDown, { className: "h-4 w-4 shrink-0" })) : (_jsx(ChevronRight, { className: "h-4 w-4 shrink-0" })), flexRender(cell.column.columnDef.cell, cell.getContext()), _jsxs("span", { className: "text-muted-foreground font-normal ml-1", children: ["(", row.subRows.length, ")"] })] }) }, cell.id));
221
- }
222
- if (cell.getIsAggregated()) {
223
- return (_jsx(TableCell, { children: flexRender(cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell, cell.getContext()) }, cell.id));
224
- }
225
- return _jsx(TableCell, {}, cell.id);
226
- })] }, row.id));
227
- }
228
- return (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsx(Checkbox, { isSelected: row.getIsSelected(), onValueChange: (checked) => {
229
- row.toggleSelected(checked);
230
- } }) }), row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id)))] }, row.id));
231
- }) })] }), _jsx(TablePagination, { pageCount: isGrouped
232
- ? Math.ceil(table.getPrePaginationRowModel().rows.length / limit) || 1
233
- : serverPageCount, page: isGrouped ? table.getState().pagination.pageIndex + 1 : page, limit: limit, setPagination: setPagination })] }));
49
+ const NuqsTable = ({ data, total, columns, tableProps, singleFilter = false, filterMethods }) => {
50
+ const columnIds = useMemo(() => columns.map((col) => String(col.id)), [columns]);
51
+ console.log("data", data);
52
+ const initialLayout = useMemo(() => {
53
+ const defaultLayout = columns.map((column) => ({
54
+ id: String(column.id),
55
+ label: column.header,
56
+ visibility: column.visible !== void 0 ? column.visible : true,
57
+ options: column.options ?? [],
58
+ type: column.type ?? void 0
59
+ }));
60
+ const saved = loadLayoutFromStorage(columnIds);
61
+ if (!saved) return defaultLayout;
62
+ const savedById = /* @__PURE__ */ new Map();
63
+ saved.order.forEach((id, index) => {
64
+ savedById.set(id, {
65
+ order: index,
66
+ visibility: saved.visibility[id] ?? true
67
+ });
68
+ });
69
+ const merged = [];
70
+ const processedIds = /* @__PURE__ */ new Set();
71
+ saved.order.forEach((id) => {
72
+ const defaultCol = defaultLayout.find((col) => col.id === id);
73
+ if (defaultCol) {
74
+ merged.push({
75
+ ...defaultCol,
76
+ visibility: saved.visibility[id] ?? defaultCol.visibility
77
+ });
78
+ processedIds.add(id);
79
+ }
80
+ });
81
+ defaultLayout.forEach((col) => {
82
+ if (!processedIds.has(col.id)) merged.push(col);
83
+ });
84
+ return merged;
85
+ }, [columns, columnIds]);
86
+ const [layout, setLayout] = useState(initialLayout);
87
+ useEffect(() => {
88
+ setLayout(initialLayout);
89
+ }, [initialLayout]);
90
+ useEffect(() => {
91
+ saveLayoutToStorage(columnIds, layout.map((col) => col.id), Object.fromEntries(layout.map((col) => [col.id, col.visibility])));
92
+ }, [layout, columnIds]);
93
+ const columnOrder = useMemo(() => layout.map((column) => column.id), [layout]);
94
+ const columnVisibility = useMemo(() => Object.fromEntries(layout.map((column) => [column.id, column.visibility])), [layout]);
95
+ const { limit = 10, page = 1, sorting, setSorting, setPagination, pagination, rowSelection, setRowSelection, setFilters, filters, grouping, setGrouping } = tableProps;
96
+ const isGrouped = grouping.length > 0;
97
+ const [expanded, setExpanded] = useState({});
98
+ useEffect(() => {
99
+ if (!isGrouped && data.length === 0 && page > 1 && total !== void 0) setPagination?.({
100
+ pageIndex: page - 2,
101
+ pageSize: limit
102
+ });
103
+ }, [
104
+ data.length,
105
+ page,
106
+ limit,
107
+ total,
108
+ setPagination,
109
+ isGrouped
110
+ ]);
111
+ const serverPageCount = total !== void 0 ? Math.ceil(total / limit) || 1 : data.length === limit ? page + 1 : Math.max(page, Math.ceil(data.length / limit));
112
+ const table = useReactTable({
113
+ data,
114
+ columns,
115
+ getRowId: (row) => String(row.id),
116
+ manualSorting: true,
117
+ manualPagination: !isGrouped,
118
+ state: {
119
+ pagination,
120
+ sorting,
121
+ rowSelection,
122
+ columnOrder,
123
+ columnVisibility,
124
+ grouping,
125
+ expanded
126
+ },
127
+ ...isGrouped ? {} : { pageCount: serverPageCount },
128
+ manualFiltering: true,
129
+ enableGrouping: true,
130
+ groupedColumnMode: false,
131
+ autoResetExpanded: false,
132
+ onSortingChange: setSorting,
133
+ onPaginationChange: setPagination,
134
+ onRowSelectionChange: setRowSelection,
135
+ onGroupingChange: setGrouping,
136
+ onExpandedChange: setExpanded,
137
+ getCoreRowModel: getCoreRowModel(),
138
+ getGroupedRowModel: getGroupedRowModel(),
139
+ getExpandedRowModel: getExpandedRowModel(),
140
+ getPaginationRowModel: getPaginationRowModel(),
141
+ onColumnOrderChange: (updater) => {
142
+ setLayout((prev) => applyOrder(prev, typeof updater === "function" ? updater(prev.map((i) => i.id)) : updater));
143
+ },
144
+ onColumnVisibilityChange: (updater) => {
145
+ setLayout((prev) => applyVisibility(prev, typeof updater === "function" ? updater(Object.fromEntries(prev.map((i) => [i.id, i.visibility]))) : updater));
146
+ }
147
+ });
148
+ const onChangeOrder = (order) => {
149
+ setLayout((prev) => applyOrder(prev, order));
150
+ };
151
+ const onChangeVisibility = (visibility) => {
152
+ setLayout((prev) => applyVisibility(prev, visibility));
153
+ };
154
+ const onFiltersChange = (filters) => {
155
+ setFilters?.(filters);
156
+ };
157
+ const filterableColumns = useMemo(() => {
158
+ const baseColumns = columns.filter((column) => Boolean(column.type)).map((column) => ({
159
+ id: String(column.id),
160
+ label: String(column.header),
161
+ type: column.type,
162
+ options: column.options ?? [],
163
+ endColumnId: column.endColumnId,
164
+ periodStartColumnId: null,
165
+ periodEndColumnId: null
166
+ }));
167
+ const periodColumns = columns.filter((column) => column.type === "date" && column.endColumnId).map((column) => ({
168
+ id: `${String(column.id)}__period`,
169
+ label: "Period",
170
+ type: "date",
171
+ options: [],
172
+ endColumnId: null,
173
+ periodStartColumnId: String(column.id),
174
+ periodEndColumnId: column.endColumnId
175
+ }));
176
+ return [...baseColumns, ...periodColumns];
177
+ }, [columns]);
178
+ const groupableColumns = useMemo(() => columns.filter((col) => col.groupable).map((col) => ({
179
+ id: String(col.id),
180
+ label: String(col.header)
181
+ })), [columns]);
182
+ const hasGrouping = grouping.length > 0;
183
+ const [isFiltersOpen, setIsFiltersOpen] = useState(false);
184
+ const [isColumnsOpen, setIsColumnsOpen] = useState(false);
185
+ const [isGroupByOpen, setIsGroupByOpen] = useState(false);
186
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
187
+ /* @__PURE__ */ jsxs("div", {
188
+ className: "flex w-full items-center gap-2 justify-end",
189
+ children: [
190
+ /* @__PURE__ */ jsxs(Popover, {
191
+ placement: "bottom",
192
+ isOpen: isFiltersOpen,
193
+ onOpenChange: setIsFiltersOpen,
194
+ portalContainer: document.body,
195
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(Button$1, {
196
+ variant: "outline",
197
+ size: "sm",
198
+ children: /* @__PURE__ */ jsxs("div", {
199
+ className: "flex items-center gap-2",
200
+ children: ["Filters", /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })]
201
+ })
202
+ }) }), /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(TableFiltering, {
203
+ columns: filterableColumns,
204
+ onFiltersChange,
205
+ filters: filters ?? [],
206
+ onClose: () => setIsFiltersOpen(false),
207
+ singleFilter,
208
+ filterMethods
209
+ }) })]
210
+ }),
211
+ groupableColumns.length > 0 && /* @__PURE__ */ jsxs(Popover, {
212
+ placement: "bottom",
213
+ isOpen: isGroupByOpen,
214
+ onOpenChange: setIsGroupByOpen,
215
+ portalContainer: document.body,
216
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(Button$1, {
217
+ variant: hasGrouping ? "secondary" : "outline",
218
+ size: "sm",
219
+ children: /* @__PURE__ */ jsxs("div", {
220
+ className: "flex items-center gap-2",
221
+ children: [hasGrouping ? `Grouped by: ${grouping.map((id) => groupableColumns.find((c) => c.id === id)?.label ?? id).join(" → ")}` : "Group by", /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })]
222
+ })
223
+ }) }), /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(TableGroupBy, {
224
+ columns: groupableColumns,
225
+ activeGrouping: grouping,
226
+ onGroupingChange: (columnIds) => {
227
+ setGrouping(columnIds);
228
+ setExpanded({});
229
+ setPagination?.({
230
+ pageIndex: 0,
231
+ pageSize: limit
232
+ });
233
+ },
234
+ onClose: () => setIsGroupByOpen(false)
235
+ }) })]
236
+ }),
237
+ /* @__PURE__ */ jsxs(Popover, {
238
+ placement: "bottom",
239
+ isOpen: isColumnsOpen,
240
+ onOpenChange: setIsColumnsOpen,
241
+ portalContainer: document.body,
242
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(Button$1, {
243
+ variant: "outline",
244
+ size: "sm",
245
+ children: /* @__PURE__ */ jsxs("div", {
246
+ className: "flex items-center gap-2",
247
+ children: ["Columns", /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })]
248
+ })
249
+ }) }), /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(ColumnOrderAndVisibility, {
250
+ layout,
251
+ onChangeOrder,
252
+ onChangeVisibility,
253
+ onClose: () => setIsColumnsOpen(false)
254
+ }) })]
255
+ })
256
+ ]
257
+ }),
258
+ /* @__PURE__ */ jsxs(Table$1, { children: [/* @__PURE__ */ jsx(TableHeader$1, { children: /* @__PURE__ */ jsxs(TableRow$1, { children: [/* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(Checkbox, {
259
+ isSelected: table.getIsAllRowsSelected(),
260
+ onValueChange: (checked) => {
261
+ table.toggleAllRowsSelected(checked);
262
+ }
263
+ }) }), table.getHeaderGroups()[0].headers.map((header) => /* @__PURE__ */ jsxs(TableHead, {
264
+ onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : void 0,
265
+ children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanSort() && /* @__PURE__ */ jsxs(Fragment$1, { children: [header.column.getIsSorted() === "asc" && /* @__PURE__ */ jsx(ChevronUp, { className: "h-4 w-4 inline ml-1" }), header.column.getIsSorted() === "desc" && /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 inline ml-1" })] })]
266
+ }, header.id))] }) }), /* @__PURE__ */ jsx(TableBody$1, { children: table.getRowModel().rows.map((row) => {
267
+ if (row.getIsGrouped()) return /* @__PURE__ */ jsxs(TableRow$1, {
268
+ className: "bg-muted/40 font-medium cursor-pointer hover:bg-muted/60",
269
+ onClick: () => row.toggleExpanded(),
270
+ children: [/* @__PURE__ */ jsx(TableCell$1, {}), row.getVisibleCells().map((cell) => {
271
+ if (cell.getIsGrouped()) return /* @__PURE__ */ jsx(TableCell$1, { children: /* @__PURE__ */ jsxs("span", {
272
+ className: "flex items-center gap-1.5",
273
+ children: [
274
+ row.getIsExpanded() ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4 shrink-0" }),
275
+ flexRender(cell.column.columnDef.cell, cell.getContext()),
276
+ /* @__PURE__ */ jsxs("span", {
277
+ className: "text-muted-foreground font-normal ml-1",
278
+ children: [
279
+ "(",
280
+ row.subRows.length,
281
+ ")"
282
+ ]
283
+ })
284
+ ]
285
+ }) }, cell.id);
286
+ if (cell.getIsAggregated()) return /* @__PURE__ */ jsx(TableCell$1, { children: flexRender(cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell, cell.getContext()) }, cell.id);
287
+ return /* @__PURE__ */ jsx(TableCell$1, {}, cell.id);
288
+ })]
289
+ }, row.id);
290
+ return /* @__PURE__ */ jsxs(TableRow$1, { children: [/* @__PURE__ */ jsx(TableCell$1, { children: /* @__PURE__ */ jsx(Checkbox, {
291
+ isSelected: row.getIsSelected(),
292
+ onValueChange: (checked) => {
293
+ row.toggleSelected(checked);
294
+ }
295
+ }) }), row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx(TableCell$1, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))] }, row.id);
296
+ }) })] }),
297
+ /* @__PURE__ */ jsx(TablePagination, {
298
+ pageCount: isGrouped ? Math.ceil(table.getPrePaginationRowModel().rows.length / limit) || 1 : serverPageCount,
299
+ page: isGrouped ? table.getState().pagination.pageIndex + 1 : page,
300
+ limit,
301
+ setPagination
302
+ })
303
+ ] });
234
304
  };
305
+ //#endregion
306
+ export { NuqsTable };
307
+
308
+ //# sourceMappingURL=NuqsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NuqsTable.js","names":["Button","Table","TableHeader","TableRow","TableBody","TableCell"],"sources":["../../../../../src/modules/table/components/NuqsTable.tsx"],"sourcesContent":["import { Checkbox, Popover, PopoverContent, PopoverTrigger } from \"@heroui/react\";\r\nimport type { QueryFilters } from \"@m5kdev/commons/modules/schemas/query.schema\";\r\nimport type { FilterMethods } from \"@m5kdev/commons/modules/table/filter.types\";\r\nimport type { TableParams } from \"@m5kdev/frontend/modules/table/hooks/useNuqsTable\";\r\nimport type { ColumnDef } from \"@tanstack/react-table\";\r\nimport {\r\n type ColumnOrderState,\r\n type ExpandedState,\r\n flexRender,\r\n getCoreRowModel,\r\n getExpandedRowModel,\r\n getGroupedRowModel,\r\n getPaginationRowModel,\r\n type Table as ReactTable,\r\n useReactTable,\r\n type VisibilityState,\r\n} from \"@tanstack/react-table\";\r\nimport { ChevronDown, ChevronRight, ChevronUp } from \"lucide-react\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { Button } from \"../../../components/ui/button\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"../../../components/ui/table\";\r\nimport { ColumnOrderAndVisibility } from \"./ColumnOrderAndVisibility\";\r\nimport { TableFiltering } from \"./TableFiltering\";\r\nimport { TableGroupBy } from \"./TableGroupBy\";\r\nimport { TablePagination } from \"./TablePagination\";\r\nimport type { ColumnDataType, ColumnItem } from \"./table.types\";\r\n\r\nfunction getStorageKey(columnIds: string[]): string {\r\n const sortedIds = [...columnIds].sort().join(\",\");\r\n return `table-column-layout-${sortedIds}`;\r\n}\r\n\r\nfunction loadLayoutFromStorage(\r\n columnIds: string[]\r\n): { order: string[]; visibility: Record<string, boolean> } | null {\r\n if (typeof window === \"undefined\") return null;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n const stored = localStorage.getItem(key);\r\n if (!stored) return null;\r\n const parsed = JSON.parse(stored) as { order: string[]; visibility: Record<string, boolean> };\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction saveLayoutToStorage(\r\n columnIds: string[],\r\n order: string[],\r\n visibility: Record<string, boolean>\r\n): void {\r\n if (typeof window === \"undefined\") return;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n localStorage.setItem(key, JSON.stringify({ order, visibility }));\r\n } catch {\r\n // Ignore storage errors\r\n }\r\n}\r\n\r\nexport type NuqsTableColumn<T> = ColumnDef<T> & {\r\n visible?: boolean;\r\n type?: ColumnDataType;\r\n options?: { label: string; value: string }[];\r\n endColumnId?: string;\r\n groupable?: boolean;\r\n};\r\n\r\ntype NuqsTableParams<T> = {\r\n data: T[];\r\n total?: number;\r\n columns: NuqsTableColumn<T>[];\r\n tableProps: TableParams;\r\n singleFilter?: boolean;\r\n filterMethods?: Partial<FilterMethods>;\r\n};\r\n\r\nfunction applyOrder(prev: ColumnItem[], nextOrder: string[]): ColumnItem[] {\r\n const byId = new Map(prev.map((i) => [i.id, i]));\r\n const ordered = nextOrder.map((id) => byId.get(id)).filter(Boolean) as ColumnItem[];\r\n // append any newly added columns (if any appear later)\r\n for (const item of prev) if (!nextOrder.includes(item.id)) ordered.push(item);\r\n return ordered;\r\n}\r\n\r\nfunction applyVisibility(prev: ColumnItem[], visibility: VisibilityState): ColumnItem[] {\r\n return prev.map((column) => ({\r\n ...column,\r\n visibility: visibility[String(column.id)] ?? column.visibility,\r\n }));\r\n}\r\n\r\nexport const NuqsTable = <T,>({\r\n data,\r\n total,\r\n columns,\r\n tableProps,\r\n singleFilter = false,\r\n filterMethods,\r\n}: NuqsTableParams<T>) => {\r\n const columnIds = useMemo(() => columns.map((col) => String(col.id)), [columns]);\r\n console.log(\"data\", data);\r\n // const columnsWithId = useMemo(() => {\r\n // const idColumn: NuqsTableColumn<T> = {\r\n // id: \"__row_id\",\r\n // accessorKey: \"id\",\r\n // header: \"\",\r\n // enableSorting: false,\r\n // enableHiding: false,\r\n // visible: false,\r\n // };\r\n // return [idColumn, ...columns];\r\n // }, [columns]);\r\n\r\n const initialLayout = useMemo(() => {\r\n const defaultLayout = columns.map((column) => ({\r\n id: String(column.id),\r\n label: column.header as string,\r\n visibility: column.visible !== undefined ? column.visible : true,\r\n options: column.options ?? [],\r\n type: column.type ?? undefined,\r\n }));\r\n\r\n const saved = loadLayoutFromStorage(columnIds);\r\n if (!saved) return defaultLayout;\r\n\r\n // Merge saved layout with default layout\r\n const savedById = new Map<string, { order: number; visibility: boolean }>();\r\n saved.order.forEach((id, index) => {\r\n savedById.set(id, { order: index, visibility: saved.visibility[id] ?? true });\r\n });\r\n\r\n const merged: ColumnItem[] = [];\r\n const processedIds = new Set<string>();\r\n\r\n // Add columns in saved order\r\n saved.order.forEach((id) => {\r\n const defaultCol = defaultLayout.find((col) => col.id === id);\r\n if (defaultCol) {\r\n merged.push({\r\n ...defaultCol,\r\n visibility: saved.visibility[id] ?? defaultCol.visibility,\r\n });\r\n processedIds.add(id);\r\n }\r\n });\r\n\r\n // Add any new columns that weren't in saved layout\r\n defaultLayout.forEach((col) => {\r\n if (!processedIds.has(col.id)) {\r\n merged.push(col);\r\n }\r\n });\r\n\r\n return merged;\r\n }, [columns, columnIds]);\r\n\r\n const [layout, setLayout] = useState<ColumnItem[]>(initialLayout);\r\n\r\n // Sync layout when columns change\r\n useEffect(() => {\r\n setLayout(initialLayout);\r\n }, [initialLayout]);\r\n\r\n // Save to localStorage whenever layout changes\r\n useEffect(() => {\r\n const order = layout.map((col) => col.id);\r\n const visibility = Object.fromEntries(layout.map((col) => [col.id, col.visibility]));\r\n saveLayoutToStorage(columnIds, order, visibility);\r\n }, [layout, columnIds]);\r\n\r\n const columnOrder = useMemo(() => layout.map((column) => column.id), [layout]);\r\n const columnVisibility = useMemo(\r\n () => Object.fromEntries(layout.map((column) => [column.id, column.visibility])),\r\n [layout]\r\n );\r\n\r\n const {\r\n limit = 10,\r\n page = 1,\r\n sorting,\r\n setSorting,\r\n setPagination,\r\n pagination,\r\n rowSelection,\r\n setRowSelection,\r\n setFilters,\r\n filters,\r\n grouping,\r\n setGrouping,\r\n } = tableProps;\r\n\r\n const isGrouped = grouping.length > 0;\r\n const [expanded, setExpanded] = useState<ExpandedState>({});\r\n\r\n // Redirect back if we're on an empty page (past the last page)\r\n useEffect(() => {\r\n if (!isGrouped && data.length === 0 && page > 1 && total !== undefined) {\r\n setPagination?.({ pageIndex: page - 2, pageSize: limit });\r\n }\r\n }, [data.length, page, limit, total, setPagination, isGrouped]);\r\n\r\n // When grouped, TanStack handles pagination client-side; otherwise use server total\r\n const serverPageCount =\r\n total !== undefined\r\n ? Math.ceil(total / limit) || 1\r\n : data.length === limit\r\n ? page + 1\r\n : Math.max(page, Math.ceil(data.length / limit));\r\n\r\n const table = useReactTable({\r\n data,\r\n columns,\r\n getRowId: (row) => String((row as { id: string | number }).id),\r\n manualSorting: true,\r\n manualPagination: !isGrouped,\r\n state: { pagination, sorting, rowSelection, columnOrder, columnVisibility, grouping, expanded },\r\n ...(isGrouped ? {} : { pageCount: serverPageCount }),\r\n manualFiltering: true,\r\n enableGrouping: true,\r\n groupedColumnMode: false,\r\n autoResetExpanded: false,\r\n onSortingChange: setSorting,\r\n onPaginationChange: setPagination,\r\n onRowSelectionChange: setRowSelection,\r\n onGroupingChange: setGrouping,\r\n onExpandedChange: setExpanded,\r\n getCoreRowModel: getCoreRowModel(),\r\n getGroupedRowModel: getGroupedRowModel(),\r\n getExpandedRowModel: getExpandedRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n onColumnOrderChange: (updater) => {\r\n setLayout((prev) =>\r\n applyOrder(prev, typeof updater === \"function\" ? updater(prev.map((i) => i.id)) : updater)\r\n );\r\n },\r\n onColumnVisibilityChange: (updater) => {\r\n setLayout((prev) =>\r\n applyVisibility(\r\n prev,\r\n typeof updater === \"function\"\r\n ? updater(Object.fromEntries(prev.map((i) => [i.id, i.visibility])))\r\n : updater\r\n )\r\n );\r\n },\r\n }) as ReactTable<T>;\r\n\r\n const onChangeOrder = (order: ColumnOrderState) => {\r\n setLayout((prev) => applyOrder(prev, order));\r\n };\r\n const onChangeVisibility = (visibility: VisibilityState) => {\r\n setLayout((prev) => applyVisibility(prev, visibility));\r\n };\r\n\r\n const onFiltersChange = (filters: QueryFilters) => {\r\n setFilters?.(filters);\r\n };\r\n\r\n const filterableColumns = useMemo(() => {\r\n const baseColumns = columns\r\n .filter((column) => Boolean(column.type))\r\n .map((column) => ({\r\n id: String(column.id),\r\n label: String(column.header),\r\n type: column.type,\r\n options: column.options ?? [],\r\n endColumnId: column.endColumnId,\r\n periodStartColumnId: null,\r\n periodEndColumnId: null,\r\n }));\r\n\r\n // Add Period pseudo-columns for date columns with endColumnId\r\n const periodColumns = columns\r\n .filter((column) => column.type === \"date\" && column.endColumnId)\r\n .map((column) => ({\r\n id: `${String(column.id)}__period`,\r\n label: \"Period\",\r\n type: \"date\" as ColumnDataType,\r\n options: [],\r\n endColumnId: null,\r\n periodStartColumnId: String(column.id),\r\n periodEndColumnId: column.endColumnId,\r\n }));\r\n\r\n return [...baseColumns, ...periodColumns];\r\n }, [columns]);\r\n\r\n const groupableColumns = useMemo(\r\n () =>\r\n columns\r\n .filter((col) => col.groupable)\r\n .map((col) => ({ id: String(col.id), label: String(col.header) })),\r\n [columns]\r\n );\r\n\r\n const hasGrouping = grouping.length > 0;\r\n\r\n const [isFiltersOpen, setIsFiltersOpen] = useState(false);\r\n const [isColumnsOpen, setIsColumnsOpen] = useState(false);\r\n const [isGroupByOpen, setIsGroupByOpen] = useState(false);\r\n\r\n return (\r\n <>\r\n <div className=\"flex w-full items-center gap-2 justify-end\">\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isFiltersOpen}\r\n onOpenChange={setIsFiltersOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Filters\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableFiltering\r\n columns={filterableColumns}\r\n onFiltersChange={onFiltersChange}\r\n filters={filters ?? []}\r\n onClose={() => setIsFiltersOpen(false)}\r\n singleFilter={singleFilter}\r\n filterMethods={filterMethods}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n {groupableColumns.length > 0 && (\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isGroupByOpen}\r\n onOpenChange={setIsGroupByOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant={hasGrouping ? \"secondary\" : \"outline\"} size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n {hasGrouping\r\n ? `Grouped by: ${grouping.map((id) => groupableColumns.find((c) => c.id === id)?.label ?? id).join(\" → \")}`\r\n : \"Group by\"}\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableGroupBy\r\n columns={groupableColumns}\r\n activeGrouping={grouping}\r\n onGroupingChange={(columnIds) => {\r\n setGrouping(columnIds);\r\n setExpanded({});\r\n setPagination?.({ pageIndex: 0, pageSize: limit });\r\n }}\r\n onClose={() => setIsGroupByOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isColumnsOpen}\r\n onOpenChange={setIsColumnsOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Columns\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <ColumnOrderAndVisibility\r\n layout={layout}\r\n onChangeOrder={onChangeOrder}\r\n onChangeVisibility={onChangeVisibility}\r\n onClose={() => setIsColumnsOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n <TableHead>\r\n <Checkbox\r\n isSelected={table.getIsAllRowsSelected()}\r\n onValueChange={(checked) => {\r\n table.toggleAllRowsSelected(checked);\r\n }}\r\n />\r\n </TableHead>\r\n {table.getHeaderGroups()[0].headers.map((header) => (\r\n <TableHead\r\n onClick={\r\n header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined\r\n }\r\n key={header.id}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {header.column.getCanSort() && (\r\n <>\r\n {header.column.getIsSorted() === \"asc\" && (\r\n <ChevronUp className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n {header.column.getIsSorted() === \"desc\" && (\r\n <ChevronDown className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n </>\r\n )}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {table.getRowModel().rows.map((row) => {\r\n if (row.getIsGrouped()) {\r\n return (\r\n <TableRow\r\n key={row.id}\r\n className=\"bg-muted/40 font-medium cursor-pointer hover:bg-muted/60\"\r\n onClick={() => row.toggleExpanded()}\r\n >\r\n <TableCell />\r\n {row.getVisibleCells().map((cell) => {\r\n if (cell.getIsGrouped()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n <span className=\"flex items-center gap-1.5\">\r\n {row.getIsExpanded() ? (\r\n <ChevronDown className=\"h-4 w-4 shrink-0\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 shrink-0\" />\r\n )}\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n <span className=\"text-muted-foreground font-normal ml-1\">\r\n ({row.subRows.length})\r\n </span>\r\n </span>\r\n </TableCell>\r\n );\r\n }\r\n if (cell.getIsAggregated()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n {flexRender(\r\n cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell,\r\n cell.getContext()\r\n )}\r\n </TableCell>\r\n );\r\n }\r\n return <TableCell key={cell.id} />;\r\n })}\r\n </TableRow>\r\n );\r\n }\r\n\r\n return (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n <Checkbox\r\n isSelected={row.getIsSelected()}\r\n onValueChange={(checked) => {\r\n row.toggleSelected(checked);\r\n }}\r\n />\r\n </TableCell>\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell key={cell.id}>\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n <TablePagination\r\n pageCount={\r\n isGrouped\r\n ? Math.ceil(table.getPrePaginationRowModel().rows.length / limit) || 1\r\n : serverPageCount\r\n }\r\n page={isGrouped ? table.getState().pagination.pageIndex + 1 : page}\r\n limit={limit}\r\n setPagination={setPagination}\r\n />\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}