@beyondcorp/beyond-ui 1.0.6 → 1.0.9

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 (280) hide show
  1. package/README.md +233 -89
  2. package/dist/_virtual/jsx-runtime.js +6 -0
  3. package/dist/_virtual/jsx-runtime.js.map +1 -0
  4. package/dist/_virtual/jsx-runtime2.js +4 -0
  5. package/dist/_virtual/jsx-runtime2.js.map +1 -0
  6. package/dist/_virtual/react-jsx-runtime.development.js +4 -0
  7. package/dist/_virtual/react-jsx-runtime.development.js.map +1 -0
  8. package/dist/_virtual/react-jsx-runtime.production.min.js +4 -0
  9. package/dist/_virtual/react-jsx-runtime.production.min.js.map +1 -0
  10. package/dist/components/Alert/Alert.d.ts +11 -0
  11. package/dist/components/Alert/Alert.js +28 -0
  12. package/dist/components/Alert/Alert.js.map +1 -0
  13. package/dist/components/Alert/index.d.ts +1 -0
  14. package/dist/components/Alert/index.js +2 -0
  15. package/dist/components/Alert/index.js.map +1 -0
  16. package/dist/components/Avatar/Avatar.d.ts +11 -0
  17. package/dist/components/Avatar/Avatar.js +27 -0
  18. package/dist/components/Avatar/Avatar.js.map +1 -0
  19. package/dist/components/Avatar/index.d.ts +1 -0
  20. package/dist/components/Avatar/index.js +2 -0
  21. package/dist/components/Avatar/index.js.map +1 -0
  22. package/dist/components/Badge/Badge.d.ts +9 -0
  23. package/dist/components/Badge/Badge.js +25 -0
  24. package/dist/components/Badge/Badge.js.map +1 -0
  25. package/dist/components/Badge/index.d.ts +1 -0
  26. package/dist/components/Badge/index.js +2 -0
  27. package/dist/components/Badge/index.js.map +1 -0
  28. package/dist/components/Button/Button.d.ts +11 -0
  29. package/dist/components/Button/Button.js +38 -0
  30. package/dist/components/Button/Button.js.map +1 -0
  31. package/dist/components/Button/index.d.ts +1 -0
  32. package/dist/components/Button/index.js +2 -0
  33. package/dist/components/Button/index.js.map +1 -0
  34. package/dist/components/Card/Card.d.ts +15 -0
  35. package/dist/components/Card/Card.js +39 -0
  36. package/dist/components/Card/Card.js.map +1 -0
  37. package/dist/components/Card/index.d.ts +1 -0
  38. package/dist/components/Card/index.js +2 -0
  39. package/dist/components/Card/index.js.map +1 -0
  40. package/dist/components/Checkbox/Checkbox.d.ts +9 -0
  41. package/dist/components/Checkbox/Checkbox.js +25 -0
  42. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  43. package/dist/components/Checkbox/index.d.ts +1 -0
  44. package/dist/components/Checkbox/index.js +2 -0
  45. package/dist/components/Checkbox/index.js.map +1 -0
  46. package/dist/components/ComponentShowcase/ComponentShowcase.d.ts +6 -0
  47. package/dist/components/ComponentShowcase/ComponentShowcase.js +540 -0
  48. package/dist/components/ComponentShowcase/ComponentShowcase.js.map +1 -0
  49. package/dist/components/ComponentShowcase/index.d.ts +1 -0
  50. package/dist/components/ComponentShowcase/index.js +2 -0
  51. package/dist/components/ComponentShowcase/index.js.map +1 -0
  52. package/dist/components/DashboardGrid/DashboardGrid.d.ts +16 -0
  53. package/dist/components/DashboardGrid/DashboardGrid.js +54 -0
  54. package/dist/components/DashboardGrid/DashboardGrid.js.map +1 -0
  55. package/dist/components/DashboardGrid/index.d.ts +1 -0
  56. package/dist/components/DashboardGrid/index.js +2 -0
  57. package/dist/components/DashboardGrid/index.js.map +1 -0
  58. package/dist/components/DashboardHeader/DashboardHeader.d.ts +16 -0
  59. package/dist/components/DashboardHeader/DashboardHeader.js +25 -0
  60. package/dist/components/DashboardHeader/DashboardHeader.js.map +1 -0
  61. package/dist/components/DashboardHeader/index.d.ts +1 -0
  62. package/dist/components/DashboardHeader/index.js +2 -0
  63. package/dist/components/DashboardHeader/index.js.map +1 -0
  64. package/dist/components/DashboardLayout/DashboardLayout.d.ts +18 -0
  65. package/dist/components/DashboardLayout/DashboardLayout.js +19 -0
  66. package/dist/components/DashboardLayout/DashboardLayout.js.map +1 -0
  67. package/dist/components/DashboardLayout/index.d.ts +1 -0
  68. package/dist/components/DashboardLayout/index.js +2 -0
  69. package/dist/components/DashboardLayout/index.js.map +1 -0
  70. package/dist/components/DataTable/DataTable.d.ts +5 -0
  71. package/dist/components/DataTable/DataTable.js +246 -0
  72. package/dist/components/DataTable/DataTable.js.map +1 -0
  73. package/dist/components/DataTable/DataTable.types.d.ts +70 -0
  74. package/dist/components/DataTable/DataTableShowcase.d.ts +2 -0
  75. package/dist/components/DataTable/DataTableShowcase.js +348 -0
  76. package/dist/components/DataTable/DataTableShowcase.js.map +1 -0
  77. package/dist/components/DataTable/index.d.ts +2 -0
  78. package/dist/components/DataTable/index.js +2 -0
  79. package/dist/components/DataTable/index.js.map +1 -0
  80. package/dist/components/Input/Input.d.ts +10 -0
  81. package/dist/components/Input/Input.js +30 -0
  82. package/dist/components/Input/Input.js.map +1 -0
  83. package/dist/components/Input/index.d.ts +1 -0
  84. package/dist/components/Input/index.js +2 -0
  85. package/dist/components/Input/index.js.map +1 -0
  86. package/dist/components/Modal/Modal.d.ts +17 -0
  87. package/dist/components/Modal/Modal.js +35 -0
  88. package/dist/components/Modal/Modal.js.map +1 -0
  89. package/dist/components/Modal/index.d.ts +1 -0
  90. package/dist/components/Modal/index.js +2 -0
  91. package/dist/components/Modal/index.js.map +1 -0
  92. package/dist/components/Navbar/Navbar.d.ts +13 -0
  93. package/dist/components/Navbar/Navbar.js +35 -0
  94. package/dist/components/Navbar/Navbar.js.map +1 -0
  95. package/dist/components/Navbar/index.d.ts +1 -0
  96. package/dist/components/Navbar/index.js +2 -0
  97. package/dist/components/Navbar/index.js.map +1 -0
  98. package/dist/components/Sidebar/Sidebar.d.ts +22 -0
  99. package/dist/components/Sidebar/Sidebar.js +129 -0
  100. package/dist/components/Sidebar/Sidebar.js.map +1 -0
  101. package/dist/components/Sidebar/index.d.ts +1 -0
  102. package/dist/components/Sidebar/index.js +2 -0
  103. package/dist/components/Sidebar/index.js.map +1 -0
  104. package/dist/components/Skeleton/Skeleton.d.ts +9 -0
  105. package/dist/components/Skeleton/Skeleton.js +23 -0
  106. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  107. package/dist/components/Skeleton/index.d.ts +1 -0
  108. package/dist/components/Skeleton/index.js +2 -0
  109. package/dist/components/Skeleton/index.js.map +1 -0
  110. package/dist/components/Spinner/Spinner.d.ts +10 -0
  111. package/dist/components/Spinner/Spinner.js +32 -0
  112. package/dist/components/Spinner/Spinner.js.map +1 -0
  113. package/dist/components/Spinner/index.d.ts +1 -0
  114. package/dist/components/Spinner/index.js +2 -0
  115. package/dist/components/Spinner/index.js.map +1 -0
  116. package/dist/components/StatsCard/StatsCard.d.ts +19 -0
  117. package/dist/components/StatsCard/StatsCard.js +56 -0
  118. package/dist/components/StatsCard/StatsCard.js.map +1 -0
  119. package/dist/components/StatsCard/index.d.ts +1 -0
  120. package/dist/components/StatsCard/index.js +2 -0
  121. package/dist/components/StatsCard/index.js.map +1 -0
  122. package/dist/components/Switch/Switch.d.ts +11 -0
  123. package/dist/components/Switch/Switch.js +39 -0
  124. package/dist/components/Switch/Switch.js.map +1 -0
  125. package/dist/components/Switch/index.d.ts +1 -0
  126. package/dist/components/Switch/index.js +2 -0
  127. package/dist/components/Switch/index.js.map +1 -0
  128. package/dist/components/Tabs/Tabs.d.ts +25 -0
  129. package/dist/components/Tabs/Tabs.js +60 -0
  130. package/dist/components/Tabs/Tabs.js.map +1 -0
  131. package/dist/components/Tabs/index.d.ts +1 -0
  132. package/dist/components/Tabs/index.js +2 -0
  133. package/dist/components/Tabs/index.js.map +1 -0
  134. package/dist/components/Textarea/Textarea.d.ts +9 -0
  135. package/dist/components/Textarea/Textarea.js +24 -0
  136. package/dist/components/Textarea/Textarea.js.map +1 -0
  137. package/dist/components/Textarea/index.d.ts +1 -0
  138. package/dist/components/Textarea/index.js +2 -0
  139. package/dist/components/Textarea/index.js.map +1 -0
  140. package/dist/components/Toast/Toast.d.ts +18 -0
  141. package/dist/components/Toast/Toast.js +75 -0
  142. package/dist/components/Toast/Toast.js.map +1 -0
  143. package/dist/components/Toast/index.d.ts +1 -0
  144. package/dist/components/Toast/index.js +2 -0
  145. package/dist/components/Toast/index.js.map +1 -0
  146. package/dist/hooks/useBreakpoint.d.ts +14 -0
  147. package/dist/hooks/useBreakpoint.js +40 -0
  148. package/dist/hooks/useBreakpoint.js.map +1 -0
  149. package/dist/hooks/useDarkMode.d.ts +4 -0
  150. package/dist/hooks/useDarkMode.js +29 -0
  151. package/dist/hooks/useDarkMode.js.map +1 -0
  152. package/dist/hooks/useDebounce.d.ts +1 -0
  153. package/dist/hooks/useDebounce.js +17 -0
  154. package/dist/hooks/useDebounce.js.map +1 -0
  155. package/dist/hooks/useLocalStorage.d.ts +1 -0
  156. package/dist/hooks/useLocalStorage.js +44 -0
  157. package/dist/hooks/useLocalStorage.js.map +1 -0
  158. package/dist/hooks/useToggle.d.ts +1 -0
  159. package/dist/hooks/useToggle.js +11 -0
  160. package/dist/hooks/useToggle.js.map +1 -0
  161. package/dist/index.d.ts +29 -424
  162. package/dist/index.js +30 -3375
  163. package/dist/index.js.map +1 -0
  164. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +37 -0
  165. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -0
  166. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +91 -0
  167. package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  168. package/dist/node_modules/goober/dist/goober.modern.js +4 -0
  169. package/dist/node_modules/goober/dist/goober.modern.js.map +1 -0
  170. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +48 -0
  171. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +1 -0
  172. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +21 -0
  173. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +1 -0
  174. package/dist/node_modules/lucide-react/dist/esm/icons/alert-circle.js +18 -0
  175. package/dist/node_modules/lucide-react/dist/esm/icons/alert-circle.js.map +1 -0
  176. package/dist/node_modules/lucide-react/dist/esm/icons/alert-triangle.js +24 -0
  177. package/dist/node_modules/lucide-react/dist/esm/icons/alert-triangle.js.map +1 -0
  178. package/dist/node_modules/lucide-react/dist/esm/icons/bar-chart-3.js +19 -0
  179. package/dist/node_modules/lucide-react/dist/esm/icons/bar-chart-3.js.map +1 -0
  180. package/dist/node_modules/lucide-react/dist/esm/icons/bell.js +17 -0
  181. package/dist/node_modules/lucide-react/dist/esm/icons/bell.js.map +1 -0
  182. package/dist/node_modules/lucide-react/dist/esm/icons/book.js +16 -0
  183. package/dist/node_modules/lucide-react/dist/esm/icons/book.js.map +1 -0
  184. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js +19 -0
  185. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js.map +1 -0
  186. package/dist/node_modules/lucide-react/dist/esm/icons/check-circle.js +17 -0
  187. package/dist/node_modules/lucide-react/dist/esm/icons/check-circle.js.map +1 -0
  188. package/dist/node_modules/lucide-react/dist/esm/icons/check.js +14 -0
  189. package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +1 -0
  190. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +16 -0
  191. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +1 -0
  192. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js +16 -0
  193. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js.map +1 -0
  194. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +16 -0
  195. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +1 -0
  196. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +14 -0
  197. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
  198. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.js +17 -0
  199. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.js.map +1 -0
  200. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.js +17 -0
  201. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.js.map +1 -0
  202. package/dist/node_modules/lucide-react/dist/esm/icons/code.js +17 -0
  203. package/dist/node_modules/lucide-react/dist/esm/icons/code.js.map +1 -0
  204. package/dist/node_modules/lucide-react/dist/esm/icons/copy.js +17 -0
  205. package/dist/node_modules/lucide-react/dist/esm/icons/copy.js.map +1 -0
  206. package/dist/node_modules/lucide-react/dist/esm/icons/dollar-sign.js +17 -0
  207. package/dist/node_modules/lucide-react/dist/esm/icons/dollar-sign.js.map +1 -0
  208. package/dist/node_modules/lucide-react/dist/esm/icons/download.js +18 -0
  209. package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
  210. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +17 -0
  211. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +1 -0
  212. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +20 -0
  213. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
  214. package/dist/node_modules/lucide-react/dist/esm/icons/filter.js +16 -0
  215. package/dist/node_modules/lucide-react/dist/esm/icons/filter.js.map +1 -0
  216. package/dist/node_modules/lucide-react/dist/esm/icons/home.js +17 -0
  217. package/dist/node_modules/lucide-react/dist/esm/icons/home.js.map +1 -0
  218. package/dist/node_modules/lucide-react/dist/esm/icons/info.js +18 -0
  219. package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
  220. package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js +18 -0
  221. package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js.map +1 -0
  222. package/dist/node_modules/lucide-react/dist/esm/icons/mail.js +17 -0
  223. package/dist/node_modules/lucide-react/dist/esm/icons/mail.js.map +1 -0
  224. package/dist/node_modules/lucide-react/dist/esm/icons/menu.js +18 -0
  225. package/dist/node_modules/lucide-react/dist/esm/icons/menu.js.map +1 -0
  226. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +14 -0
  227. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +1 -0
  228. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +18 -0
  229. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
  230. package/dist/node_modules/lucide-react/dist/esm/icons/moon.js +16 -0
  231. package/dist/node_modules/lucide-react/dist/esm/icons/moon.js.map +1 -0
  232. package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer.js +17 -0
  233. package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer.js.map +1 -0
  234. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +26 -0
  235. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
  236. package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +18 -0
  237. package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +1 -0
  238. package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +17 -0
  239. package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +1 -0
  240. package/dist/node_modules/lucide-react/dist/esm/icons/search.js +17 -0
  241. package/dist/node_modules/lucide-react/dist/esm/icons/search.js.map +1 -0
  242. package/dist/node_modules/lucide-react/dist/esm/icons/settings.js +23 -0
  243. package/dist/node_modules/lucide-react/dist/esm/icons/settings.js.map +1 -0
  244. package/dist/node_modules/lucide-react/dist/esm/icons/smartphone.js +17 -0
  245. package/dist/node_modules/lucide-react/dist/esm/icons/smartphone.js.map +1 -0
  246. package/dist/node_modules/lucide-react/dist/esm/icons/square-pen.js +17 -0
  247. package/dist/node_modules/lucide-react/dist/esm/icons/square-pen.js.map +1 -0
  248. package/dist/node_modules/lucide-react/dist/esm/icons/sun.js +24 -0
  249. package/dist/node_modules/lucide-react/dist/esm/icons/sun.js.map +1 -0
  250. package/dist/node_modules/lucide-react/dist/esm/icons/tablet.js +17 -0
  251. package/dist/node_modules/lucide-react/dist/esm/icons/tablet.js.map +1 -0
  252. package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js +20 -0
  253. package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js.map +1 -0
  254. package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js +17 -0
  255. package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js.map +1 -0
  256. package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js +17 -0
  257. package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js.map +1 -0
  258. package/dist/node_modules/lucide-react/dist/esm/icons/user.js +17 -0
  259. package/dist/node_modules/lucide-react/dist/esm/icons/user.js.map +1 -0
  260. package/dist/node_modules/lucide-react/dist/esm/icons/users.js +19 -0
  261. package/dist/node_modules/lucide-react/dist/esm/icons/users.js.map +1 -0
  262. package/dist/node_modules/lucide-react/dist/esm/icons/x.js +17 -0
  263. package/dist/node_modules/lucide-react/dist/esm/icons/x.js.map +1 -0
  264. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +1326 -0
  265. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  266. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +25 -0
  267. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
  268. package/dist/node_modules/react/jsx-runtime.js +20 -0
  269. package/dist/node_modules/react/jsx-runtime.js.map +1 -0
  270. package/dist/node_modules/react-hot-toast/dist/index.js +184 -0
  271. package/dist/node_modules/react-hot-toast/dist/index.js.map +1 -0
  272. package/dist/theme/default.d.ts +69 -0
  273. package/dist/theme/default.js +72 -0
  274. package/dist/theme/default.js.map +1 -0
  275. package/dist/utils/cn.d.ts +2 -0
  276. package/dist/utils/cn.js +9 -0
  277. package/dist/utils/cn.js.map +1 -0
  278. package/package.json +8 -4
  279. package/dist/index.cjs +0 -3467
  280. package/dist/index.d.cts +0 -424
@@ -0,0 +1,246 @@
1
+ import { j as jsxRuntimeExports } from '../../_virtual/jsx-runtime.js';
2
+ import { useState, useCallback, useMemo } from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../../utils/cn.js';
5
+ import { Button } from '../Button/Button.js';
6
+ import { Input } from '../Input/Input.js';
7
+ import { Checkbox } from '../Checkbox/Checkbox.js';
8
+ import { Skeleton } from '../Skeleton/Skeleton.js';
9
+ import ChevronUp from '../../node_modules/lucide-react/dist/esm/icons/chevron-up.js';
10
+ import ChevronDown from '../../node_modules/lucide-react/dist/esm/icons/chevron-down.js';
11
+ import Filter from '../../node_modules/lucide-react/dist/esm/icons/filter.js';
12
+ import ChevronsLeft from '../../node_modules/lucide-react/dist/esm/icons/chevrons-left.js';
13
+ import ChevronLeft from '../../node_modules/lucide-react/dist/esm/icons/chevron-left.js';
14
+ import ChevronRight from '../../node_modules/lucide-react/dist/esm/icons/chevron-right.js';
15
+ import ChevronsRight from '../../node_modules/lucide-react/dist/esm/icons/chevrons-right.js';
16
+
17
+ const tableVariants = cva("w-full border-collapse bg-white", {
18
+ variants: {
19
+ size: {
20
+ small: "text-xs",
21
+ middle: "text-sm",
22
+ large: "text-base",
23
+ },
24
+ bordered: {
25
+ true: "border border-gray-200",
26
+ false: "",
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ size: "middle",
31
+ bordered: false,
32
+ },
33
+ });
34
+ const cellVariants = cva("border-b border-gray-200 transition-colors", {
35
+ variants: {
36
+ size: {
37
+ small: "px-2 py-1",
38
+ middle: "px-4 py-3",
39
+ large: "px-6 py-4",
40
+ },
41
+ align: {
42
+ left: "text-left",
43
+ center: "text-center",
44
+ right: "text-right",
45
+ },
46
+ type: {
47
+ header: "bg-gray-50 font-semibold text-gray-900 border-b-2 border-gray-200",
48
+ body: "text-gray-700 hover:bg-gray-50",
49
+ },
50
+ },
51
+ defaultVariants: {
52
+ size: "middle",
53
+ align: "left",
54
+ type: "body",
55
+ },
56
+ });
57
+ // Filter component for individual columns
58
+ const ColumnFilter = ({ column, value, onChange, }) => {
59
+ const [isOpen, setIsOpen] = useState(false);
60
+ const [tempValue, setTempValue] = useState(value || '');
61
+ const handleApply = () => {
62
+ onChange(tempValue);
63
+ setIsOpen(false);
64
+ };
65
+ const handleClear = () => {
66
+ setTempValue('');
67
+ onChange('');
68
+ setIsOpen(false);
69
+ };
70
+ if (!column.filterable)
71
+ return null;
72
+ return (jsxRuntimeExports.jsxs("div", { className: "relative inline-block", children: [jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: () => setIsOpen(!isOpen), className: cn("p-1 h-6 w-6", value && "text-primary-600"), children: jsxRuntimeExports.jsx(Filter, { className: "h-3 w-3" }) }), isOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }), jsxRuntimeExports.jsxs("div", { className: "absolute top-full left-0 z-20 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg p-3 min-w-[200px]", children: [column.filterType === 'select' && column.filterOptions ? (jsxRuntimeExports.jsx("div", { className: "space-y-2", children: column.filterOptions.map((option) => (jsxRuntimeExports.jsxs("label", { className: "flex items-center space-x-2", children: [jsxRuntimeExports.jsx(Checkbox, { checked: tempValue === option.value, onChange: () => setTempValue(tempValue === option.value ? '' : option.value) }), jsxRuntimeExports.jsx("span", { className: "text-sm", children: option.label })] }, option.value))) })) : (jsxRuntimeExports.jsx(Input, { placeholder: `Filter ${column.title}`, value: tempValue, onChange: (e) => setTempValue(e.target.value), className: "mb-2" })), jsxRuntimeExports.jsxs("div", { className: "flex justify-end space-x-2 mt-3", children: [jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: handleClear, children: "Clear" }), jsxRuntimeExports.jsx(Button, { variant: "primary", size: "sm", onClick: handleApply, children: "Apply" })] })] })] }))] }));
73
+ };
74
+ // Pagination component
75
+ const TablePagination = ({ pagination, onChange }) => {
76
+ const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;
77
+ const totalPages = Math.ceil(total / pageSize);
78
+ const startRecord = (current - 1) * pageSize + 1;
79
+ const endRecord = Math.min(current * pageSize, total);
80
+ const getPageNumbers = () => {
81
+ const pages = [];
82
+ const maxVisible = 5;
83
+ if (totalPages <= maxVisible) {
84
+ for (let i = 1; i <= totalPages; i++) {
85
+ pages.push(i);
86
+ }
87
+ }
88
+ else {
89
+ const start = Math.max(1, current - 2);
90
+ const end = Math.min(totalPages, start + maxVisible - 1);
91
+ for (let i = start; i <= end; i++) {
92
+ pages.push(i);
93
+ }
94
+ }
95
+ return pages;
96
+ };
97
+ return (jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-white border-t border-gray-200", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-4", children: [jsxRuntimeExports.jsxs("span", { className: "text-sm text-gray-700", children: ["Showing ", startRecord, " to ", endRecord, " of ", total, " results"] }), showSizeChanger && (jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-2", children: [jsxRuntimeExports.jsx("span", { className: "text-sm text-gray-700", children: "Show" }), jsxRuntimeExports.jsx("select", { value: pageSize, onChange: (e) => onChange(1, Number(e.target.value)), className: "border border-gray-300 rounded px-2 py-1 text-sm", children: pageSizeOptions.map(size => (jsxRuntimeExports.jsx("option", { value: size, children: size }, size))) }), jsxRuntimeExports.jsx("span", { className: "text-sm text-gray-700", children: "per page" })] }))] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-1", children: [jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(1, pageSize), disabled: current === 1, children: jsxRuntimeExports.jsx(ChevronsLeft, { className: "h-4 w-4" }) }), jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(current - 1, pageSize), disabled: current === 1, children: jsxRuntimeExports.jsx(ChevronLeft, { className: "h-4 w-4" }) }), getPageNumbers().map(page => (jsxRuntimeExports.jsx(Button, { variant: current === page ? "primary" : "ghost", size: "sm", onClick: () => onChange(page, pageSize), className: "min-w-[32px]", children: page }, page))), jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(current + 1, pageSize), disabled: current === totalPages, children: jsxRuntimeExports.jsx(ChevronRight, { className: "h-4 w-4" }) }), jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "sm", onClick: () => onChange(totalPages, pageSize), disabled: current === totalPages, children: jsxRuntimeExports.jsx(ChevronsRight, { className: "h-4 w-4" }) })] })] }));
98
+ };
99
+ const DataTable = ({ columns, dataSource, loading = false, rowKey = 'id', pagination = { current: 1, pageSize: 10, total: 0 }, rowSelection, size = 'middle', bordered = false, showHeader = true, title, footer, className, onSort, onFilter, onChange, ...props }) => {
100
+ const [sortConfig, setSortConfig] = useState({ key: '', direction: null });
101
+ const [filters, setFilters] = useState({});
102
+ const [selectedRowKeys, setSelectedRowKeys] = useState(rowSelection?.selectedRowKeys || []);
103
+ // Get row key function
104
+ const getRowKey = useCallback((record, index) => {
105
+ if (typeof rowKey === 'function') {
106
+ return rowKey(record);
107
+ }
108
+ return record[rowKey] || index;
109
+ }, [rowKey]);
110
+ // Handle sorting
111
+ const handleSort = useCallback((columnKey) => {
112
+ let newDirection;
113
+ if (sortConfig.key !== columnKey) {
114
+ newDirection = 'asc';
115
+ }
116
+ else if (sortConfig.direction === 'asc') {
117
+ newDirection = 'desc';
118
+ }
119
+ else if (sortConfig.direction === 'desc') {
120
+ newDirection = null;
121
+ }
122
+ else {
123
+ newDirection = 'asc';
124
+ }
125
+ const newSortConfig = { key: columnKey, direction: newDirection };
126
+ setSortConfig(newSortConfig);
127
+ onSort?.(newSortConfig);
128
+ onChange?.(pagination, filters, newSortConfig);
129
+ }, [sortConfig, pagination, filters, onSort, onChange]);
130
+ // Handle filtering
131
+ const handleFilter = useCallback((columnKey, value) => {
132
+ const newFilters = { ...filters };
133
+ if (value === '' || value === null || value === undefined) {
134
+ delete newFilters[columnKey];
135
+ }
136
+ else {
137
+ newFilters[columnKey] = value;
138
+ }
139
+ setFilters(newFilters);
140
+ onFilter?.(newFilters);
141
+ onChange?.(pagination, newFilters, sortConfig);
142
+ }, [filters, pagination, sortConfig, onFilter, onChange]);
143
+ // Handle row selection
144
+ const handleRowSelect = useCallback((record, selected) => {
145
+ const key = getRowKey(record, 0);
146
+ let newSelectedKeys;
147
+ if (rowSelection?.type === 'radio') {
148
+ newSelectedKeys = selected ? [key] : [];
149
+ }
150
+ else {
151
+ newSelectedKeys = selected
152
+ ? [...selectedRowKeys, key]
153
+ : selectedRowKeys.filter(k => k !== key);
154
+ }
155
+ setSelectedRowKeys(newSelectedKeys);
156
+ const selectedRows = dataSource.filter(item => newSelectedKeys.includes(getRowKey(item, 0)));
157
+ rowSelection?.onChange?.(newSelectedKeys, selectedRows);
158
+ rowSelection?.onSelect?.(record, selected, selectedRows, {});
159
+ }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);
160
+ // Handle select all
161
+ const handleSelectAll = useCallback((selected) => {
162
+ const newSelectedKeys = selected
163
+ ? dataSource.map((item, index) => getRowKey(item, index))
164
+ : [];
165
+ setSelectedRowKeys(newSelectedKeys);
166
+ const selectedRows = selected ? dataSource : [];
167
+ rowSelection?.onChange?.(newSelectedKeys, selectedRows);
168
+ rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);
169
+ }, [dataSource, rowSelection, getRowKey]);
170
+ // Filter and sort data
171
+ const processedData = useMemo(() => {
172
+ let result = [...dataSource];
173
+ // Apply filters
174
+ Object.entries(filters).forEach(([key, value]) => {
175
+ if (value !== '' && value !== null && value !== undefined) {
176
+ result = result.filter(item => {
177
+ const itemValue = item[key];
178
+ if (typeof itemValue === 'string') {
179
+ return itemValue.toLowerCase().includes(String(value).toLowerCase());
180
+ }
181
+ return itemValue === value;
182
+ });
183
+ }
184
+ });
185
+ // Apply sorting
186
+ if (sortConfig.key && sortConfig.direction) {
187
+ result.sort((a, b) => {
188
+ const aValue = a[sortConfig.key];
189
+ const bValue = b[sortConfig.key];
190
+ if (aValue === bValue)
191
+ return 0;
192
+ const comparison = aValue < bValue ? -1 : 1;
193
+ return sortConfig.direction === 'asc' ? comparison : -comparison;
194
+ });
195
+ }
196
+ return result;
197
+ }, [dataSource, filters, sortConfig]);
198
+ // Pagination logic
199
+ const paginatedData = useMemo(() => {
200
+ if (!pagination)
201
+ return processedData;
202
+ const { current, pageSize } = pagination;
203
+ const startIndex = (current - 1) * pageSize;
204
+ return processedData.slice(startIndex, startIndex + pageSize);
205
+ }, [processedData, pagination]);
206
+ // Update pagination total
207
+ const currentPagination = useMemo(() => {
208
+ if (!pagination)
209
+ return false;
210
+ return {
211
+ ...pagination,
212
+ total: processedData.length,
213
+ };
214
+ }, [pagination, processedData.length]);
215
+ // Selection state
216
+ const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;
217
+ const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;
218
+ if (loading) {
219
+ return (jsxRuntimeExports.jsxs("div", { className: cn("w-full", className), children: [title && jsxRuntimeExports.jsx("div", { className: "mb-4", children: title() }), jsxRuntimeExports.jsx("div", { className: "border border-gray-200 rounded-lg overflow-hidden", children: jsxRuntimeExports.jsx("div", { className: "p-4 space-y-3", children: Array.from({ length: 5 }).map((_, i) => (jsxRuntimeExports.jsxs("div", { className: "flex space-x-4", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-8" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-4 flex-1" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-24" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-16" })] }, i))) }) })] }));
220
+ }
221
+ return (jsxRuntimeExports.jsxs("div", { className: cn("w-full", className), children: [title && jsxRuntimeExports.jsx("div", { className: "mb-4", children: title() }), jsxRuntimeExports.jsxs("div", { className: "border border-gray-200 rounded-lg overflow-hidden", children: [jsxRuntimeExports.jsx("div", { className: "overflow-x-auto", children: jsxRuntimeExports.jsxs("table", { className: cn(tableVariants({ size, bordered })), children: [showHeader && (jsxRuntimeExports.jsx("thead", { children: jsxRuntimeExports.jsxs("tr", { children: [rowSelection && (jsxRuntimeExports.jsx("th", { className: cn(cellVariants({ size, type: "header" }), "w-12"), children: rowSelection.type !== 'radio' && (jsxRuntimeExports.jsx(Checkbox, { checked: isAllSelected, onChange: (e) => handleSelectAll(e.target.checked), className: cn(isIndeterminate && "indeterminate") })) })), columns.map((column) => (jsxRuntimeExports.jsx("th", { className: cn(cellVariants({
222
+ size,
223
+ align: column.align,
224
+ type: "header"
225
+ }), column.width && `w-[${column.width}]`), children: jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-2", children: [jsxRuntimeExports.jsx("span", { children: column.title }), column.sortable && (jsxRuntimeExports.jsxs("button", { onClick: () => handleSort(column.key), className: "flex flex-col items-center hover:text-primary-600", children: [jsxRuntimeExports.jsx(ChevronUp, { className: cn("h-3 w-3", sortConfig.key === column.key && sortConfig.direction === 'asc'
226
+ ? "text-primary-600"
227
+ : "text-gray-400") }), jsxRuntimeExports.jsx(ChevronDown, { className: cn("h-3 w-3 -mt-1", sortConfig.key === column.key && sortConfig.direction === 'desc'
228
+ ? "text-primary-600"
229
+ : "text-gray-400") })] }))] }), jsxRuntimeExports.jsx(ColumnFilter, { column: column, value: filters[column.key], onChange: (value) => handleFilter(column.key, value) })] }) }, column.key)))] }) })), jsxRuntimeExports.jsx("tbody", { children: paginatedData.length === 0 ? (jsxRuntimeExports.jsx("tr", { children: jsxRuntimeExports.jsx("td", { colSpan: columns.length + (rowSelection ? 1 : 0), className: cn(cellVariants({ size, align: "center" }), "py-8"), children: jsxRuntimeExports.jsxs("div", { className: "text-gray-500", children: [jsxRuntimeExports.jsx("div", { className: "text-4xl mb-2", children: "\uD83D\uDCCB" }), jsxRuntimeExports.jsx("div", { children: "No data available" })] }) }) })) : (paginatedData.map((record, index) => {
230
+ const key = getRowKey(record, index);
231
+ const isSelected = selectedRowKeys.includes(key);
232
+ return (jsxRuntimeExports.jsxs("tr", { className: cn("hover:bg-gray-50 transition-colors", isSelected && "bg-primary-50"), ...(props.onRow?.(record, index) ?? {}), children: [rowSelection && (jsxRuntimeExports.jsx("td", { className: cn(cellVariants({ size })), children: jsxRuntimeExports.jsx(Checkbox, { checked: isSelected, onChange: (e) => handleRowSelect(record, e.target.checked), ...rowSelection.getCheckboxProps?.(record) }) })), columns.map((column) => (jsxRuntimeExports.jsx("td", { className: cn(cellVariants({
233
+ size,
234
+ align: column.align
235
+ })), children: column.render
236
+ ? column.render(record[column.dataIndex], record, index)
237
+ : String(record[column.dataIndex] || '') }, column.key)))] }, key));
238
+ })) })] }) }), currentPagination && (jsxRuntimeExports.jsx(TablePagination, { pagination: currentPagination, onChange: (page, pageSize) => {
239
+ const newPagination = { ...currentPagination, current: page, pageSize };
240
+ onChange?.(newPagination, filters, sortConfig);
241
+ } }))] }), footer && jsxRuntimeExports.jsx("div", { className: "mt-4", children: footer() })] }));
242
+ };
243
+ DataTable.displayName = "DataTable";
244
+
245
+ export { DataTable };
246
+ //# sourceMappingURL=DataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useState, useMemo, useCallback } from \"react\";\nimport { \n ChevronUp, \n ChevronDown, \n Search, \n Filter, \n ChevronLeft, \n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n Check,\n Minus\n} from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../Button\";\nimport { Input } from \"../Input\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Badge } from \"../Badge\";\nimport { Spinner } from \"../Spinner\";\nimport { Skeleton } from \"../Skeleton\";\nimport type { \n DataTableProps, \n Column, \n FilterValue, \n SortConfig, \n PaginationConfig,\n RowSelection \n} from \"./DataTable.types\";\n\nconst tableVariants = cva(\n \"w-full border-collapse bg-white\",\n {\n variants: {\n size: {\n small: \"text-xs\",\n middle: \"text-sm\",\n large: \"text-base\",\n },\n bordered: {\n true: \"border border-gray-200\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n bordered: false,\n },\n }\n);\n\nconst cellVariants = cva(\n \"border-b border-gray-200 transition-colors\",\n {\n variants: {\n size: {\n small: \"px-2 py-1\",\n middle: \"px-4 py-3\",\n large: \"px-6 py-4\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n type: {\n header: \"bg-gray-50 font-semibold text-gray-900 border-b-2 border-gray-200\",\n body: \"text-gray-700 hover:bg-gray-50\",\n },\n },\n defaultVariants: {\n size: \"middle\",\n align: \"left\",\n type: \"body\",\n },\n }\n);\n\n// Filter component for individual columns\nconst ColumnFilter = <T extends Record<string, any>>({\n column,\n value,\n onChange,\n}: {\n column: Column<T>;\n value: any;\n onChange: (value: any) => void;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [tempValue, setTempValue] = useState(value || '');\n\n const handleApply = () => {\n onChange(tempValue);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setTempValue('');\n onChange('');\n setIsOpen(false);\n };\n\n if (!column.filterable) return null;\n\n return (\n <div className=\"relative inline-block\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"p-1 h-6 w-6\",\n value && \"text-primary-600\"\n )}\n >\n <Filter className=\"h-3 w-3\" />\n </Button>\n \n {isOpen && (\n <>\n <div \n className=\"fixed inset-0 z-10\" \n onClick={() => setIsOpen(false)}\n />\n <div className=\"absolute top-full left-0 z-20 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg p-3 min-w-[200px]\">\n {column.filterType === 'select' && column.filterOptions ? (\n <div className=\"space-y-2\">\n {column.filterOptions.map((option) => (\n <label key={option.value} className=\"flex items-center space-x-2\">\n <Checkbox\n checked={tempValue === option.value}\n onChange={() => setTempValue(\n tempValue === option.value ? '' : option.value\n )}\n />\n <span className=\"text-sm\">{option.label}</span>\n </label>\n ))}\n </div>\n ) : (\n <Input\n placeholder={`Filter ${column.title}`}\n value={tempValue}\n onChange={(e) => setTempValue(e.target.value)}\n className=\"mb-2\"\n />\n )}\n \n <div className=\"flex justify-end space-x-2 mt-3\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\n Clear\n </Button>\n <Button variant=\"primary\" size=\"sm\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n </div>\n </>\n )}\n </div>\n );\n};\n\n// Pagination component\nconst TablePagination: React.FC<{\n pagination: PaginationConfig;\n onChange: (page: number, pageSize: number) => void;\n}> = ({ pagination, onChange }) => {\n const { current, pageSize, total, showSizeChanger = true, pageSizeOptions = [10, 20, 50, 100] } = pagination;\n const totalPages = Math.ceil(total / pageSize);\n const startRecord = (current - 1) * pageSize + 1;\n const endRecord = Math.min(current * pageSize, total);\n\n const getPageNumbers = () => {\n const pages = [];\n const maxVisible = 5;\n \n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n const start = Math.max(1, current - 2);\n const end = Math.min(totalPages, start + maxVisible - 1);\n \n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n \n return pages;\n };\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 bg-white border-t border-gray-200\">\n <div className=\"flex items-center space-x-4\">\n <span className=\"text-sm text-gray-700\">\n Showing {startRecord} to {endRecord} of {total} results\n </span>\n \n {showSizeChanger && (\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-sm text-gray-700\">Show</span>\n <select\n value={pageSize}\n onChange={(e) => onChange(1, Number(e.target.value))}\n className=\"border border-gray-300 rounded px-2 py-1 text-sm\"\n >\n {pageSizeOptions.map(size => (\n <option key={size} value={size}>{size}</option>\n ))}\n </select>\n <span className=\"text-sm text-gray-700\">per page</span>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center space-x-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(1, pageSize)}\n disabled={current === 1}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current - 1, pageSize)}\n disabled={current === 1}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n \n {getPageNumbers().map(page => (\n <Button\n key={page}\n variant={current === page ? \"primary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => onChange(page, pageSize)}\n className=\"min-w-[32px]\"\n >\n {page}\n </Button>\n ))}\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(current + 1, pageSize)}\n disabled={current === totalPages}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(totalPages, pageSize)}\n disabled={current === totalPages}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n};\n\nexport const DataTable = <T extends Record<string, any>>({\n columns,\n dataSource,\n loading = false,\n rowKey = 'id',\n pagination = { current: 1, pageSize: 10, total: 0 },\n rowSelection,\n size = 'middle',\n bordered = false,\n showHeader = true,\n title,\n footer,\n className,\n onSort,\n onFilter,\n onChange,\n ...props\n}: DataTableProps<T>) => {\n const [sortConfig, setSortConfig] = useState<SortConfig>({ key: '', direction: null });\n const [filters, setFilters] = useState<FilterValue>({});\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n );\n\n // Get row key function\n const getRowKey = useCallback((record: T, index: number): React.Key => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || index;\n }, [rowKey]);\n\n // Handle sorting\n const handleSort = useCallback((columnKey: string) => {\n let newDirection: 'asc' | 'desc' | null;\n if (sortConfig.key !== columnKey) {\n newDirection = 'asc';\n } else if (sortConfig.direction === 'asc') {\n newDirection = 'desc';\n } else if (sortConfig.direction === 'desc') {\n newDirection = null;\n } else {\n newDirection = 'asc';\n }\n const newSortConfig: SortConfig = { key: columnKey, direction: newDirection };\n setSortConfig(newSortConfig);\n onSort?.(newSortConfig);\n onChange?.(pagination as PaginationConfig, filters, newSortConfig);\n }, [sortConfig, pagination, filters, onSort, onChange]);\n\n // Handle filtering\n const handleFilter = useCallback((columnKey: string, value: any) => {\n const newFilters = { ...filters };\n if (value === '' || value === null || value === undefined) {\n delete newFilters[columnKey];\n } else {\n newFilters[columnKey] = value;\n }\n \n setFilters(newFilters);\n onFilter?.(newFilters);\n onChange?.(pagination as PaginationConfig, newFilters, sortConfig);\n }, [filters, pagination, sortConfig, onFilter, onChange]);\n\n // Handle row selection\n const handleRowSelect = useCallback((record: T, selected: boolean) => {\n const key = getRowKey(record, 0);\n let newSelectedKeys: React.Key[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedKeys = selected ? [key] : [];\n } else {\n newSelectedKeys = selected \n ? [...selectedRowKeys, key]\n : selectedRowKeys.filter(k => k !== key);\n }\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = dataSource.filter(item => \n newSelectedKeys.includes(getRowKey(item, 0))\n );\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, {} as Event);\n }, [selectedRowKeys, rowSelection, dataSource, getRowKey]);\n\n // Handle select all\n const handleSelectAll = useCallback((selected: boolean) => {\n const newSelectedKeys = selected \n ? dataSource.map((item, index) => getRowKey(item, index))\n : [];\n \n setSelectedRowKeys(newSelectedKeys);\n const selectedRows = selected ? dataSource : [];\n \n rowSelection?.onChange?.(newSelectedKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, dataSource);\n }, [dataSource, rowSelection, getRowKey]);\n\n // Filter and sort data\n const processedData = useMemo(() => {\n let result = [...dataSource];\n \n // Apply filters\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== '' && value !== null && value !== undefined) {\n result = result.filter(item => {\n const itemValue = item[key];\n if (typeof itemValue === 'string') {\n return itemValue.toLowerCase().includes(String(value).toLowerCase());\n }\n return itemValue === value;\n });\n }\n });\n \n // Apply sorting\n if (sortConfig.key && sortConfig.direction) {\n result.sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n \n if (aValue === bValue) return 0;\n \n const comparison = aValue < bValue ? -1 : 1;\n return sortConfig.direction === 'asc' ? comparison : -comparison;\n });\n }\n \n return result;\n }, [dataSource, filters, sortConfig]);\n\n // Pagination logic\n const paginatedData = useMemo(() => {\n if (!pagination) return processedData;\n \n const { current, pageSize } = pagination;\n const startIndex = (current - 1) * pageSize;\n return processedData.slice(startIndex, startIndex + pageSize);\n }, [processedData, pagination]);\n\n // Update pagination total\n const currentPagination = useMemo(() => {\n if (!pagination) return false;\n return {\n ...pagination,\n total: processedData.length,\n };\n }, [pagination, processedData.length]);\n\n // Selection state\n const isAllSelected = selectedRowKeys.length === dataSource.length && dataSource.length > 0;\n const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;\n\n if (loading) {\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex space-x-4\">\n <Skeleton className=\"h-4 w-8\" />\n <Skeleton className=\"h-4 flex-1\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 w-16\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"w-full\", className)}>\n {title && <div className=\"mb-4\">{title()}</div>}\n \n <div className=\"border border-gray-200 rounded-lg overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className={cn(tableVariants({ size, bordered }))}>\n {showHeader && (\n <thead>\n <tr>\n {rowSelection && (\n <th className={cn(cellVariants({ size, type: \"header\" }), \"w-12\")}>\n {rowSelection.type !== 'radio' && (\n <Checkbox\n checked={isAllSelected}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className={cn(isIndeterminate && \"indeterminate\")}\n />\n )}\n </th>\n )}\n \n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellVariants({ \n size, \n align: column.align, \n type: \"header\" \n }),\n column.width && `w-[${column.width}]`\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-2\">\n <span>{column.title}</span>\n {column.sortable && (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex flex-col items-center hover:text-primary-600\"\n >\n <ChevronUp \n className={cn(\n \"h-3 w-3\",\n sortConfig.key === column.key && sortConfig.direction === 'asc'\n ? \"text-primary-600\" \n : \"text-gray-400\"\n )}\n />\n <ChevronDown \n className={cn(\n \"h-3 w-3 -mt-1\",\n sortConfig.key === column.key && sortConfig.direction === 'desc'\n ? \"text-primary-600\" \n : \"text-gray-400\"\n )}\n />\n </button>\n )}\n </div>\n \n <ColumnFilter\n column={column}\n value={filters[column.key]}\n onChange={(value) => handleFilter(column.key, value)}\n />\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n \n <tbody>\n {paginatedData.length === 0 ? (\n <tr>\n <td \n colSpan={columns.length + (rowSelection ? 1 : 0)}\n className={cn(cellVariants({ size, align: \"center\" }), \"py-8\")}\n >\n <div className=\"text-gray-500\">\n <div className=\"text-4xl mb-2\">📋</div>\n <div>No data available</div>\n </div>\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const key = getRowKey(record, index);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <tr\n key={key}\n className={cn(\n \"hover:bg-gray-50 transition-colors\",\n isSelected && \"bg-primary-50\"\n )}\n {...(props.onRow?.(record, index) ?? {})}\n >\n {rowSelection && (\n <td className={cn(cellVariants({ size }))}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n {...rowSelection.getCheckboxProps?.(record)}\n />\n </td>\n )}\n \n {columns.map((column) => (\n <td\n key={column.key}\n className={cn(cellVariants({ \n size, \n align: column.align \n }))}\n >\n {column.render \n ? column.render(record[column.dataIndex], record, index)\n : String(record[column.dataIndex] || '')\n }\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n \n {currentPagination && (\n <TablePagination\n pagination={currentPagination}\n onChange={(page, pageSize) => {\n const newPagination = { ...currentPagination, current: page, pageSize };\n onChange?.(newPagination, filters, sortConfig);\n }}\n />\n )}\n </div>\n \n {footer && <div className=\"mt-4\">{footer()}</div>}\n </div>\n );\n};\n\nDataTable.displayName = \"DataTable\";"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ export interface Column<T = any> {
2
+ key: string;
3
+ title: string;
4
+ dataIndex: keyof T;
5
+ width?: number | string;
6
+ sortable?: boolean;
7
+ filterable?: boolean;
8
+ filterType?: 'text' | 'select' | 'date' | 'number';
9
+ filterOptions?: Array<{
10
+ label: string;
11
+ value: any;
12
+ }>;
13
+ render?: (value: any, record: T, index: number) => React.ReactNode;
14
+ align?: 'left' | 'center' | 'right';
15
+ }
16
+ export interface FilterValue {
17
+ [key: string]: any;
18
+ }
19
+ export interface SortConfig {
20
+ key: string;
21
+ direction: 'asc' | 'desc' | null;
22
+ }
23
+ export interface PaginationConfig {
24
+ current: number;
25
+ pageSize: number;
26
+ total: number;
27
+ showSizeChanger?: boolean;
28
+ pageSizeOptions?: number[];
29
+ showQuickJumper?: boolean;
30
+ }
31
+ export interface RowSelection<T = any> {
32
+ type?: 'checkbox' | 'radio';
33
+ selectedRowKeys?: React.Key[];
34
+ onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void;
35
+ getCheckboxProps?: (record: T) => {
36
+ disabled?: boolean;
37
+ };
38
+ onSelect?: (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;
39
+ onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;
40
+ }
41
+ export interface DataTableProps<T = any> {
42
+ columns: Column<T>[];
43
+ dataSource: T[];
44
+ loading?: boolean;
45
+ rowKey?: string | ((record: T) => React.Key);
46
+ pagination?: PaginationConfig | false;
47
+ rowSelection?: RowSelection<T>;
48
+ scroll?: {
49
+ x?: number | string;
50
+ y?: number | string;
51
+ };
52
+ size?: 'small' | 'middle' | 'large';
53
+ bordered?: boolean;
54
+ showHeader?: boolean;
55
+ title?: () => React.ReactNode;
56
+ footer?: () => React.ReactNode;
57
+ expandable?: {
58
+ expandedRowRender?: (record: T, index: number) => React.ReactNode;
59
+ rowExpandable?: (record: T) => boolean;
60
+ };
61
+ onRow?: (record: T, index?: number) => React.HTMLAttributes<HTMLTableRowElement>;
62
+ className?: string;
63
+ onSort?: (sortConfig: SortConfig) => void;
64
+ onFilter?: (filters: FilterValue) => void;
65
+ onChange?: (pagination: PaginationConfig, filters: FilterValue, sorter: SortConfig) => void;
66
+ }
67
+ export interface TableContextValue {
68
+ prefixCls: string;
69
+ size: 'small' | 'middle' | 'large';
70
+ }
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ export declare const DataTableShowcase: React.FC;