eidos-ui 2.0.0 → 3.0.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 (263) hide show
  1. package/README.md +66 -16
  2. package/dist/Avatar.types-BY-C09Ke.d.cts +23 -0
  3. package/dist/Avatar.types-BY-C09Ke.d.ts +23 -0
  4. package/dist/{Header.types-BZi80bWz.d.cts → Header.types-B3QtuiL-.d.cts} +7 -3
  5. package/dist/{Header.types-DJt-q01P.d.ts → Header.types-C6w0FBY8.d.ts} +7 -3
  6. package/dist/{Table.types-Cl5gR8r9.d.cts → Table.types-CPj-udMc.d.cts} +95 -0
  7. package/dist/{Table.types-jhPb7JNU.d.ts → Table.types-CZZ7QWAI.d.ts} +95 -0
  8. package/dist/ThemeProvider.types-DgXN0gEH.d.cts +88 -0
  9. package/dist/ThemeProvider.types-DgXN0gEH.d.ts +88 -0
  10. package/dist/Toolbar.types-DSk8z2iy.d.cts +38 -0
  11. package/dist/Toolbar.types-RN0klQzu.d.ts +38 -0
  12. package/dist/alert/index.cjs +4 -4
  13. package/dist/alert/index.d.cts +2 -1
  14. package/dist/alert/index.d.ts +2 -1
  15. package/dist/alert/index.js +3 -3
  16. package/dist/avatar/index.d.cts +3 -21
  17. package/dist/avatar/index.d.ts +3 -21
  18. package/dist/button/index.cjs +3 -3
  19. package/dist/button/index.js +2 -2
  20. package/dist/chip/index.cjs +3 -3
  21. package/dist/chip/index.js +2 -2
  22. package/dist/chunk-2ZY7M72Q.js +521 -0
  23. package/dist/chunk-2ZY7M72Q.js.map +1 -0
  24. package/dist/{chunk-KIXFSXIN.cjs → chunk-3E7TKBQI.cjs} +5 -3
  25. package/dist/chunk-3E7TKBQI.cjs.map +1 -0
  26. package/dist/{chunk-ZBKJ3EMK.cjs → chunk-442U3W6R.cjs} +3 -3
  27. package/dist/{chunk-ZBKJ3EMK.cjs.map → chunk-442U3W6R.cjs.map} +1 -1
  28. package/dist/{chunk-W6IKHJ76.cjs → chunk-5BX4Q76D.cjs} +134 -126
  29. package/dist/chunk-5BX4Q76D.cjs.map +1 -0
  30. package/dist/{chunk-YQLCPKGV.js → chunk-5HUZYY54.js} +6 -4
  31. package/dist/chunk-5HUZYY54.js.map +1 -0
  32. package/dist/{chunk-G5IGADJI.cjs → chunk-5VM2256W.cjs} +7 -11
  33. package/dist/chunk-5VM2256W.cjs.map +1 -0
  34. package/dist/{chunk-Z4ZY7L7W.js → chunk-5ZL6PYU3.js} +3 -3
  35. package/dist/{chunk-A3NE2C7C.js → chunk-67RFMV6K.js} +2 -2
  36. package/dist/{chunk-2U7UJOOB.cjs → chunk-6HUHH6Y4.cjs} +17 -15
  37. package/dist/chunk-6HUHH6Y4.cjs.map +1 -0
  38. package/dist/{chunk-5WROPW7Z.js → chunk-A7WQINIG.js} +3 -3
  39. package/dist/{chunk-DKZTDYH5.cjs → chunk-AAA6TR5I.cjs} +3 -3
  40. package/dist/{chunk-DKZTDYH5.cjs.map → chunk-AAA6TR5I.cjs.map} +1 -1
  41. package/dist/{chunk-A7Z2QAFZ.cjs → chunk-APK5OQRV.cjs} +5 -5
  42. package/dist/{chunk-A7Z2QAFZ.cjs.map → chunk-APK5OQRV.cjs.map} +1 -1
  43. package/dist/{chunk-ISABZ2VX.cjs → chunk-AXBYJ2OY.cjs} +9 -9
  44. package/dist/{chunk-ISABZ2VX.cjs.map → chunk-AXBYJ2OY.cjs.map} +1 -1
  45. package/dist/{chunk-6RGJAQCU.cjs → chunk-B5G5XVFJ.cjs} +5 -5
  46. package/dist/{chunk-6RGJAQCU.cjs.map → chunk-B5G5XVFJ.cjs.map} +1 -1
  47. package/dist/{chunk-MW2S7PZ7.cjs → chunk-D5IY2HUV.cjs} +5 -5
  48. package/dist/{chunk-MW2S7PZ7.cjs.map → chunk-D5IY2HUV.cjs.map} +1 -1
  49. package/dist/{chunk-FMPXSF3H.cjs → chunk-DAXZRNNO.cjs} +4 -4
  50. package/dist/{chunk-FMPXSF3H.cjs.map → chunk-DAXZRNNO.cjs.map} +1 -1
  51. package/dist/{chunk-AJZTVCST.js → chunk-EXITZVB2.js} +24 -9
  52. package/dist/chunk-EXITZVB2.js.map +1 -0
  53. package/dist/{chunk-AYMD4D4M.cjs → chunk-EZME5CLK.cjs} +3 -3
  54. package/dist/{chunk-AYMD4D4M.cjs.map → chunk-EZME5CLK.cjs.map} +1 -1
  55. package/dist/{chunk-IV4LM3MB.js → chunk-F26VIKNF.js} +9 -11
  56. package/dist/chunk-F26VIKNF.js.map +1 -0
  57. package/dist/{chunk-WPTMMOA6.cjs → chunk-G77YR73R.cjs} +10 -13
  58. package/dist/chunk-G77YR73R.cjs.map +1 -0
  59. package/dist/chunk-GEHL4LKK.cjs +32 -0
  60. package/dist/chunk-GEHL4LKK.cjs.map +1 -0
  61. package/dist/chunk-GGSII6Y2.cjs +921 -0
  62. package/dist/chunk-GGSII6Y2.cjs.map +1 -0
  63. package/dist/{chunk-3VRMTWUS.js → chunk-GHQ6SQPI.js} +7 -10
  64. package/dist/chunk-GHQ6SQPI.js.map +1 -0
  65. package/dist/{chunk-56B6RLOE.js → chunk-GI6VJYOS.js} +4 -4
  66. package/dist/{chunk-56B6RLOE.js.map → chunk-GI6VJYOS.js.map} +1 -1
  67. package/dist/{chunk-UGMONQGH.cjs → chunk-GR2PMCVN.cjs} +10 -12
  68. package/dist/chunk-GR2PMCVN.cjs.map +1 -0
  69. package/dist/{chunk-7AHZTHXR.cjs → chunk-GT22EGJP.cjs} +5 -5
  70. package/dist/{chunk-7AHZTHXR.cjs.map → chunk-GT22EGJP.cjs.map} +1 -1
  71. package/dist/chunk-H5HWFOWZ.js +390 -0
  72. package/dist/chunk-H5HWFOWZ.js.map +1 -0
  73. package/dist/{chunk-ALGX5X4N.js → chunk-IFVT5UCY.js} +3 -3
  74. package/dist/{chunk-5CLC3FJO.js → chunk-KBG77JHC.js} +13 -2
  75. package/dist/chunk-KBG77JHC.js.map +1 -0
  76. package/dist/{chunk-HLNKIAE5.cjs → chunk-KJZUYC4X.cjs} +5 -5
  77. package/dist/{chunk-HLNKIAE5.cjs.map → chunk-KJZUYC4X.cjs.map} +1 -1
  78. package/dist/{chunk-JV7Z3D3U.js → chunk-LEMCJW57.js} +134 -126
  79. package/dist/chunk-LEMCJW57.js.map +1 -0
  80. package/dist/{chunk-4BQM5F76.cjs → chunk-LFWPQYWX.cjs} +3 -3
  81. package/dist/{chunk-4BQM5F76.cjs.map → chunk-LFWPQYWX.cjs.map} +1 -1
  82. package/dist/{chunk-XVSODE4K.cjs → chunk-LIFUHQH5.cjs} +35 -20
  83. package/dist/chunk-LIFUHQH5.cjs.map +1 -0
  84. package/dist/{chunk-PJC7NZUV.cjs → chunk-LUL6RZ4M.cjs} +3 -3
  85. package/dist/{chunk-PJC7NZUV.cjs.map → chunk-LUL6RZ4M.cjs.map} +1 -1
  86. package/dist/{chunk-4UJ7LG4W.cjs → chunk-N2IGZIEX.cjs} +3 -3
  87. package/dist/{chunk-4UJ7LG4W.cjs.map → chunk-N2IGZIEX.cjs.map} +1 -1
  88. package/dist/{chunk-3LHQUOGP.js → chunk-NGVOXM7P.js} +3 -3
  89. package/dist/{chunk-WTXASLBB.js → chunk-O5WEKLNF.js} +2 -2
  90. package/dist/{chunk-BOB5JJ7F.js → chunk-P7IQY5YH.js} +2 -2
  91. package/dist/{chunk-VZYLJSV5.js → chunk-R4PU2TBM.js} +2 -2
  92. package/dist/{chunk-P2GCAVUZ.js → chunk-RAZRQ57B.js} +2 -2
  93. package/dist/{chunk-K7IFNKMN.js → chunk-REVK7IGN.js} +2 -2
  94. package/dist/{chunk-6U2H26A4.cjs → chunk-RHOT7AEI.cjs} +3 -3
  95. package/dist/{chunk-6U2H26A4.cjs.map → chunk-RHOT7AEI.cjs.map} +1 -1
  96. package/dist/{chunk-MH2CD2QT.js → chunk-RKA2OJRT.js} +207 -102
  97. package/dist/chunk-RKA2OJRT.js.map +1 -0
  98. package/dist/{chunk-JC4WLVBG.js → chunk-RWOX2NJN.js} +2 -2
  99. package/dist/{chunk-4LM33LDV.js → chunk-S3CT536K.js} +2 -2
  100. package/dist/chunk-SE7MWOC7.cjs +390 -0
  101. package/dist/chunk-SE7MWOC7.cjs.map +1 -0
  102. package/dist/{chunk-4M3LZLOH.js → chunk-SHYSLWQG.js} +2 -2
  103. package/dist/{chunk-EQEV7GPT.cjs → chunk-SKEWTQJ7.cjs} +5 -5
  104. package/dist/{chunk-EQEV7GPT.cjs.map → chunk-SKEWTQJ7.cjs.map} +1 -1
  105. package/dist/{chunk-2ZENLZEQ.cjs → chunk-SKTDGCWJ.cjs} +232 -127
  106. package/dist/chunk-SKTDGCWJ.cjs.map +1 -0
  107. package/dist/{chunk-2BXCIWL7.js → chunk-SN6EWQDJ.js} +3 -3
  108. package/dist/{chunk-DW2YDWGN.js → chunk-TEJIPPZR.js} +2 -2
  109. package/dist/{chunk-OGKD5PLS.cjs → chunk-TRLBYA5G.cjs} +4 -4
  110. package/dist/{chunk-OGKD5PLS.cjs.map → chunk-TRLBYA5G.cjs.map} +1 -1
  111. package/dist/chunk-U5FHQ73U.cjs +521 -0
  112. package/dist/chunk-U5FHQ73U.cjs.map +1 -0
  113. package/dist/{chunk-WE5FTQGD.js → chunk-VHMOKXUT.js} +3 -7
  114. package/dist/chunk-VHMOKXUT.js.map +1 -0
  115. package/dist/{chunk-S77GR5YQ.cjs → chunk-VHQTDITV.cjs} +3 -3
  116. package/dist/{chunk-S77GR5YQ.cjs.map → chunk-VHQTDITV.cjs.map} +1 -1
  117. package/dist/{chunk-3HMKE2GJ.js → chunk-VSTQEHVZ.js} +6 -4
  118. package/dist/chunk-VSTQEHVZ.js.map +1 -0
  119. package/dist/{chunk-HNUTV3HR.cjs → chunk-WUBQJVB7.cjs} +3 -3
  120. package/dist/{chunk-HNUTV3HR.cjs.map → chunk-WUBQJVB7.cjs.map} +1 -1
  121. package/dist/{chunk-S7TWEVC3.js → chunk-Y53HCLGW.js} +2 -2
  122. package/dist/{chunk-WIE7HDIM.js → chunk-YJXZR7RL.js} +2 -2
  123. package/dist/{chunk-IJYYHBZC.cjs → chunk-Z4SLV6WG.cjs} +3 -3
  124. package/dist/{chunk-IJYYHBZC.cjs.map → chunk-Z4SLV6WG.cjs.map} +1 -1
  125. package/dist/chunk-ZEZK664O.js +921 -0
  126. package/dist/chunk-ZEZK664O.js.map +1 -0
  127. package/dist/{chunk-JMD3P4CY.js → chunk-ZHFPV43D.js} +2 -2
  128. package/dist/color-picker/index.cjs +2 -2
  129. package/dist/color-picker/index.js +1 -1
  130. package/dist/combobox/index.cjs +4 -4
  131. package/dist/combobox/index.js +3 -3
  132. package/dist/context-menu/index.cjs +4 -4
  133. package/dist/context-menu/index.js +3 -3
  134. package/dist/data-grid/index.cjs +13 -13
  135. package/dist/data-grid/index.d.cts +49 -3
  136. package/dist/data-grid/index.d.ts +49 -3
  137. package/dist/data-grid/index.js +12 -12
  138. package/dist/date-picker/index.cjs +6 -6
  139. package/dist/date-picker/index.js +5 -5
  140. package/dist/drawer/index.cjs +4 -4
  141. package/dist/drawer/index.d.cts +2 -1
  142. package/dist/drawer/index.d.ts +2 -1
  143. package/dist/drawer/index.js +3 -3
  144. package/dist/empty-state/index.d.cts +2 -2
  145. package/dist/empty-state/index.d.ts +2 -2
  146. package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
  147. package/dist/fonts/Plus-Jakarta-Sans-OFL.txt +93 -0
  148. package/dist/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  149. package/dist/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  150. package/dist/fonts/plus-jakarta-sans-latin-ext-wght-normal.woff2 +0 -0
  151. package/dist/fonts/plus-jakarta-sans-latin-wght-normal.woff2 +0 -0
  152. package/dist/fonts.css +32 -0
  153. package/dist/fonts.css.d.ts +2 -0
  154. package/dist/header/index.cjs +4 -4
  155. package/dist/header/index.d.cts +2 -2
  156. package/dist/header/index.d.ts +2 -2
  157. package/dist/header/index.js +3 -3
  158. package/dist/index.cjs +59 -33
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.css +625 -174
  161. package/dist/index.d.cts +8 -4
  162. package/dist/index.d.ts +8 -4
  163. package/dist/index.js +62 -36
  164. package/dist/inline-edit/index.cjs +4 -4
  165. package/dist/inline-edit/index.js +3 -3
  166. package/dist/input/index.cjs +3 -3
  167. package/dist/input/index.js +2 -2
  168. package/dist/menu/index.cjs +3 -3
  169. package/dist/menu/index.js +2 -2
  170. package/dist/modal/index.cjs +4 -4
  171. package/dist/modal/index.d.cts +2 -1
  172. package/dist/modal/index.d.ts +2 -1
  173. package/dist/modal/index.js +3 -3
  174. package/dist/navigation/index.cjs +4 -4
  175. package/dist/navigation/index.js +3 -3
  176. package/dist/page-layout/index.cjs +8 -8
  177. package/dist/page-layout/index.d.cts +3 -2
  178. package/dist/page-layout/index.d.ts +3 -2
  179. package/dist/page-layout/index.js +7 -7
  180. package/dist/pagination/index.cjs +6 -6
  181. package/dist/pagination/index.js +5 -5
  182. package/dist/popover/index.cjs +2 -2
  183. package/dist/popover/index.d.cts +2 -2
  184. package/dist/popover/index.d.ts +2 -2
  185. package/dist/popover/index.js +1 -1
  186. package/dist/segmented-control/index.cjs +3 -3
  187. package/dist/segmented-control/index.js +2 -2
  188. package/dist/select/index.cjs +4 -4
  189. package/dist/select/index.js +3 -3
  190. package/dist/snackbar/index.cjs +4 -4
  191. package/dist/snackbar/index.js +3 -3
  192. package/dist/split-button/index.cjs +4 -4
  193. package/dist/split-button/index.js +3 -3
  194. package/dist/table/index.cjs +11 -11
  195. package/dist/table/index.d.cts +3 -3
  196. package/dist/table/index.d.ts +3 -3
  197. package/dist/table/index.js +10 -10
  198. package/dist/tabs/index.cjs +3 -3
  199. package/dist/tabs/index.js +2 -2
  200. package/dist/tag-input/index.cjs +4 -4
  201. package/dist/tag-input/index.js +3 -3
  202. package/dist/textarea/index.cjs +3 -3
  203. package/dist/textarea/index.js +2 -2
  204. package/dist/theme-editor/index.cjs +22 -0
  205. package/dist/theme-editor/index.cjs.map +1 -0
  206. package/dist/theme-editor/index.d.cts +65 -0
  207. package/dist/theme-editor/index.d.ts +65 -0
  208. package/dist/theme-editor/index.js +22 -0
  209. package/dist/theme-editor/index.js.map +1 -0
  210. package/dist/theme-provider/index.cjs +27 -0
  211. package/dist/theme-provider/index.cjs.map +1 -0
  212. package/dist/theme-provider/index.d.cts +123 -0
  213. package/dist/theme-provider/index.d.ts +123 -0
  214. package/dist/theme-provider/index.js +27 -0
  215. package/dist/theme-provider/index.js.map +1 -0
  216. package/dist/toolbar/index.cjs +5 -5
  217. package/dist/toolbar/index.d.cts +3 -2
  218. package/dist/toolbar/index.d.ts +3 -2
  219. package/dist/toolbar/index.js +4 -4
  220. package/package.json +17 -6
  221. package/dist/Toolbar.types-BGD57Uhm.d.ts +0 -22
  222. package/dist/Toolbar.types-tQkLmPIu.d.cts +0 -22
  223. package/dist/chunk-2U7UJOOB.cjs.map +0 -1
  224. package/dist/chunk-2ZENLZEQ.cjs.map +0 -1
  225. package/dist/chunk-3HMKE2GJ.js.map +0 -1
  226. package/dist/chunk-3VRMTWUS.js.map +0 -1
  227. package/dist/chunk-5CLC3FJO.js.map +0 -1
  228. package/dist/chunk-AJZTVCST.js.map +0 -1
  229. package/dist/chunk-G5IGADJI.cjs.map +0 -1
  230. package/dist/chunk-GOR642KK.cjs +0 -21
  231. package/dist/chunk-GOR642KK.cjs.map +0 -1
  232. package/dist/chunk-IV4LM3MB.js.map +0 -1
  233. package/dist/chunk-JV7Z3D3U.js.map +0 -1
  234. package/dist/chunk-KIXFSXIN.cjs.map +0 -1
  235. package/dist/chunk-MH2CD2QT.js.map +0 -1
  236. package/dist/chunk-QONDJ5VM.cjs +0 -744
  237. package/dist/chunk-QONDJ5VM.cjs.map +0 -1
  238. package/dist/chunk-UGMONQGH.cjs.map +0 -1
  239. package/dist/chunk-VSFKM7FE.js +0 -744
  240. package/dist/chunk-VSFKM7FE.js.map +0 -1
  241. package/dist/chunk-W6IKHJ76.cjs.map +0 -1
  242. package/dist/chunk-WE5FTQGD.js.map +0 -1
  243. package/dist/chunk-WPTMMOA6.cjs.map +0 -1
  244. package/dist/chunk-XVSODE4K.cjs.map +0 -1
  245. package/dist/chunk-YQLCPKGV.js.map +0 -1
  246. /package/dist/{chunk-Z4ZY7L7W.js.map → chunk-5ZL6PYU3.js.map} +0 -0
  247. /package/dist/{chunk-A3NE2C7C.js.map → chunk-67RFMV6K.js.map} +0 -0
  248. /package/dist/{chunk-5WROPW7Z.js.map → chunk-A7WQINIG.js.map} +0 -0
  249. /package/dist/{chunk-ALGX5X4N.js.map → chunk-IFVT5UCY.js.map} +0 -0
  250. /package/dist/{chunk-3LHQUOGP.js.map → chunk-NGVOXM7P.js.map} +0 -0
  251. /package/dist/{chunk-WTXASLBB.js.map → chunk-O5WEKLNF.js.map} +0 -0
  252. /package/dist/{chunk-BOB5JJ7F.js.map → chunk-P7IQY5YH.js.map} +0 -0
  253. /package/dist/{chunk-VZYLJSV5.js.map → chunk-R4PU2TBM.js.map} +0 -0
  254. /package/dist/{chunk-P2GCAVUZ.js.map → chunk-RAZRQ57B.js.map} +0 -0
  255. /package/dist/{chunk-K7IFNKMN.js.map → chunk-REVK7IGN.js.map} +0 -0
  256. /package/dist/{chunk-JC4WLVBG.js.map → chunk-RWOX2NJN.js.map} +0 -0
  257. /package/dist/{chunk-4LM33LDV.js.map → chunk-S3CT536K.js.map} +0 -0
  258. /package/dist/{chunk-4M3LZLOH.js.map → chunk-SHYSLWQG.js.map} +0 -0
  259. /package/dist/{chunk-2BXCIWL7.js.map → chunk-SN6EWQDJ.js.map} +0 -0
  260. /package/dist/{chunk-DW2YDWGN.js.map → chunk-TEJIPPZR.js.map} +0 -0
  261. /package/dist/{chunk-S7TWEVC3.js.map → chunk-Y53HCLGW.js.map} +0 -0
  262. /package/dist/{chunk-WIE7HDIM.js.map → chunk-YJXZR7RL.js.map} +0 -0
  263. /package/dist/{chunk-JMD3P4CY.js.map → chunk-ZHFPV43D.js.map} +0 -0
@@ -1,744 +0,0 @@
1
- import {
2
- CSS,
3
- DndContext,
4
- KeyboardSensor,
5
- PointerSensor,
6
- SortableContext,
7
- TableFiltersDropdown,
8
- arrayMove,
9
- horizontalListSortingStrategy,
10
- sortableKeyboardCoordinates,
11
- useSensor,
12
- useSensors,
13
- useSortable
14
- } from "./chunk-AJZTVCST.js";
15
- import {
16
- Spinner
17
- } from "./chunk-6ZAT5CGB.js";
18
- import {
19
- SplitButton
20
- } from "./chunk-3LHQUOGP.js";
21
- import {
22
- Pagination
23
- } from "./chunk-56B6RLOE.js";
24
- import {
25
- EmptyState
26
- } from "./chunk-3TUCQAYL.js";
27
- import {
28
- Checkbox
29
- } from "./chunk-H6CWTMAH.js";
30
- import {
31
- Dropdown
32
- } from "./chunk-4BKTBV2I.js";
33
- import {
34
- Button
35
- } from "./chunk-WIE7HDIM.js";
36
-
37
- // src/components/Table/Table.component.tsx
38
- import { useState, useMemo, useLayoutEffect, useRef } from "react";
39
- import {
40
- ChevronsUpDown,
41
- ArrowUp,
42
- ArrowDown,
43
- X,
44
- Check,
45
- Download,
46
- Columns3,
47
- AlignJustify,
48
- GripVertical,
49
- FolderOpen,
50
- SearchX
51
- } from "lucide-react";
52
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
53
- var DENSITY_OPTIONS = [
54
- { value: "compact", label: "Compact" },
55
- { value: "comfortable", label: "Comfortable" },
56
- { value: "spacious", label: "Spacious" }
57
- ];
58
- function escapeCsvValue(value) {
59
- if (value.includes(",") || value.includes("\n") || value.includes('"')) {
60
- return `"${value.replace(/"/g, '""')}"`;
61
- }
62
- return value;
63
- }
64
- function SortableColumnHeader({
65
- id,
66
- column,
67
- isSortable,
68
- isCurrentlySorted,
69
- sortDirection,
70
- alignment,
71
- columnType,
72
- columnWidth,
73
- pinnedClass,
74
- stickyStyle,
75
- onSortClick
76
- }) {
77
- const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
78
- id
79
- });
80
- const transformStr = CSS.Transform.toString(transform);
81
- const thClassName = [
82
- "eidos-table-header-cell",
83
- `eidos-table-header-cell-${columnType}`,
84
- isSortable ? "eidos-table-sortable" : "",
85
- isCurrentlySorted ? "eidos-table-sorted" : "",
86
- `eidos-table-align-${alignment}`,
87
- pinnedClass
88
- ].filter(Boolean).join(" ");
89
- return /* @__PURE__ */ jsxs(
90
- "th",
91
- {
92
- ref: setNodeRef,
93
- className: thClassName,
94
- style: {
95
- width: columnWidth,
96
- ...stickyStyle,
97
- ...transformStr ? { transform: transformStr } : {},
98
- transition: transition ?? void 0,
99
- opacity: isDragging ? 0.5 : 1
100
- },
101
- "data-col-key": id,
102
- onClick: () => isSortable && onSortClick(),
103
- ...attributes,
104
- children: [
105
- /* @__PURE__ */ jsx(
106
- "span",
107
- {
108
- className: "eidos-table-drag-handle",
109
- ...listeners,
110
- onClick: (e) => e.stopPropagation(),
111
- title: "Drag to reorder",
112
- children: /* @__PURE__ */ jsx(GripVertical, { size: 12 })
113
- }
114
- ),
115
- /* @__PURE__ */ jsxs("div", { className: `eidos-table-header-content eidos-table-align-${alignment}`, children: [
116
- /* @__PURE__ */ jsx("span", { className: "eidos-table-header-label", children: column.label }),
117
- isSortable && /* @__PURE__ */ jsxs("div", { className: "eidos-table-sort-indicator", children: [
118
- sortDirection === "asc" && /* @__PURE__ */ jsx(ArrowUp, { size: 14 }),
119
- sortDirection === "desc" && /* @__PURE__ */ jsx(ArrowDown, { size: 14 }),
120
- !sortDirection && /* @__PURE__ */ jsx(ChevronsUpDown, { size: 14 })
121
- ] })
122
- ] })
123
- ]
124
- }
125
- );
126
- }
127
- var Table = ({
128
- data,
129
- columns,
130
- loading = false,
131
- emptyMessage = "No data available",
132
- onRowClick,
133
- className,
134
- showFooter = false,
135
- totalItems,
136
- showPagination = false,
137
- pageSize = 25,
138
- pageSizeOptions = [10, 25, 50, 100],
139
- onSortChange,
140
- currentSort,
141
- filters = {},
142
- onFiltersChange,
143
- defaultFilters,
144
- showFilters = false,
145
- // Selection
146
- selectable = false,
147
- rowKey,
148
- selectedRows: controlledSelected,
149
- defaultSelectedRows = [],
150
- onSelectionChange,
151
- bulkActions = [],
152
- // New features
153
- density = "comfortable",
154
- showDensity = false,
155
- showColumnVisibility = false,
156
- showExport = false,
157
- draggableColumns = false,
158
- onColumnReorder
159
- }) => {
160
- const [columnOrder, setColumnOrder] = useState(() => columns.map((c) => String(c.key)));
161
- const columnKeysSignature = columns.map((c) => String(c.key)).join("\0");
162
- const prevKeysRef = useRef(columnKeysSignature);
163
- if (prevKeysRef.current !== columnKeysSignature) {
164
- prevKeysRef.current = columnKeysSignature;
165
- setColumnOrder(columns.map((c) => String(c.key)));
166
- }
167
- const orderedColumns = useMemo(() => {
168
- const orderMap = new Map(columnOrder.map((key, idx) => [key, idx]));
169
- return [...columns].sort((a, b) => {
170
- const ai = orderMap.get(String(a.key)) ?? Infinity;
171
- const bi = orderMap.get(String(b.key)) ?? Infinity;
172
- return ai - bi;
173
- });
174
- }, [columns, columnOrder]);
175
- const [internalDensity, setInternalDensity] = useState(density);
176
- const effectiveDensity = showDensity ? internalDensity : density;
177
- const [hiddenColumnKeys, setHiddenColumnKeys] = useState(() => /* @__PURE__ */ new Set());
178
- const visibleColumns = useMemo(
179
- () => orderedColumns.filter((c) => !hiddenColumnKeys.has(String(c.key))),
180
- [orderedColumns, hiddenColumnKeys]
181
- );
182
- const theadRef = useRef(null);
183
- const [pinnedOffsets, setPinnedOffsets] = useState(/* @__PURE__ */ new Map());
184
- useLayoutEffect(() => {
185
- const hasPinned = visibleColumns.some((c) => c.pin);
186
- if (!hasPinned || !theadRef.current) {
187
- setPinnedOffsets(/* @__PURE__ */ new Map());
188
- return;
189
- }
190
- const headerRow = theadRef.current.querySelector("tr");
191
- if (!headerRow) return;
192
- const cells = Array.from(headerRow.querySelectorAll("th[data-col-key]"));
193
- const newOffsets = /* @__PURE__ */ new Map();
194
- let leftAccum = 0;
195
- for (const cell of cells) {
196
- const key = cell.dataset.colKey;
197
- if (key === "__checkbox__") {
198
- newOffsets.set(key, { side: "left", offset: leftAccum });
199
- leftAccum += cell.offsetWidth;
200
- } else {
201
- const col = visibleColumns.find((c) => String(c.key) === key);
202
- if (col?.pin === "left") {
203
- newOffsets.set(key, { side: "left", offset: leftAccum });
204
- leftAccum += cell.offsetWidth;
205
- }
206
- }
207
- }
208
- let rightAccum = 0;
209
- for (let i = cells.length - 1; i >= 0; i--) {
210
- const cell = cells[i];
211
- const key = cell.dataset.colKey;
212
- const col = visibleColumns.find((c) => String(c.key) === key);
213
- if (col?.pin === "right") {
214
- newOffsets.set(key, { side: "right", offset: rightAccum });
215
- rightAccum += cell.offsetWidth;
216
- }
217
- }
218
- setPinnedOffsets(newOffsets);
219
- }, [visibleColumns, selectable]);
220
- const isControlledSelection = controlledSelected !== void 0;
221
- const [internalSelected, setInternalSelected] = useState(defaultSelectedRows);
222
- const selectedSet = useMemo(
223
- () => new Set(isControlledSelection ? controlledSelected : internalSelected),
224
- [isControlledSelection, controlledSelected, internalSelected]
225
- );
226
- const getRowKey = (item, index) => {
227
- if (rowKey) return String(item[rowKey]);
228
- if ("id" in item) return String(item.id);
229
- return String(index);
230
- };
231
- const commitSelection = (keys) => {
232
- if (!isControlledSelection) setInternalSelected(keys);
233
- const rows = data.filter((item, idx) => keys.includes(getRowKey(item, idx)));
234
- onSelectionChange?.(keys, rows);
235
- };
236
- const toggleRow = (key) => {
237
- const next = selectedSet.has(key) ? [...selectedSet].filter((k) => k !== key) : [...selectedSet, key];
238
- commitSelection(next);
239
- };
240
- const allKeys = useMemo(
241
- () => data.map((item, idx) => getRowKey(item, idx)),
242
- // eslint-disable-next-line react-hooks/exhaustive-deps
243
- [data, rowKey]
244
- );
245
- const allSelected = allKeys.length > 0 && allKeys.every((k) => selectedSet.has(k));
246
- const someSelected = !allSelected && allKeys.some((k) => selectedSet.has(k));
247
- const toggleAll = () => {
248
- commitSelection(allSelected ? [] : allKeys);
249
- };
250
- const clearSelection = () => commitSelection([]);
251
- const [currentPage, setCurrentPage] = useState(1);
252
- const [currentPageSize, setCurrentPageSize] = useState(pageSize);
253
- const displayData = useMemo(() => {
254
- if (!showPagination) return data;
255
- const startIndex = (currentPage - 1) * currentPageSize;
256
- return data.slice(startIndex, startIndex + currentPageSize);
257
- }, [data, showPagination, currentPage, currentPageSize]);
258
- const totalPages = Math.ceil(data.length / currentPageSize);
259
- const handleSort = (key) => {
260
- const newDirection = currentSort?.key === key && currentSort?.direction === "asc" ? "desc" : "asc";
261
- onSortChange?.(key, newDirection);
262
- };
263
- const handlePageChange = (page) => setCurrentPage(page);
264
- const handlePageSizeChange = (newPageSize) => {
265
- setCurrentPageSize(newPageSize);
266
- setCurrentPage(1);
267
- };
268
- const hasSelection = selectedSet.size > 0;
269
- const showToolbar = showFilters && !!onFiltersChange || showColumnVisibility || showExport || showDensity || selectable && hasSelection;
270
- const selectedItems = useMemo(
271
- () => data.filter((item, idx) => selectedSet.has(getRowKey(item, idx))),
272
- // eslint-disable-next-line react-hooks/exhaustive-deps
273
- [data, selectedSet, rowKey]
274
- );
275
- const getRawValue = (item, column) => {
276
- const value = typeof column.key === "string" && column.key.includes(".") ? column.key.split(".").reduce(
277
- (obj, k) => obj?.[k],
278
- item
279
- ) : item[column.key];
280
- return String(value ?? "");
281
- };
282
- const handleExportCsv = () => {
283
- const headers = visibleColumns.map((c) => escapeCsvValue(c.label)).join(",");
284
- const rows = data.map(
285
- (item) => visibleColumns.map((col) => escapeCsvValue(getRawValue(item, col))).join(",")
286
- );
287
- const csv = [headers, ...rows].join("\n");
288
- const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
289
- const url = URL.createObjectURL(blob);
290
- const link = document.createElement("a");
291
- link.href = url;
292
- link.download = "export.csv";
293
- document.body.appendChild(link);
294
- link.click();
295
- document.body.removeChild(link);
296
- URL.revokeObjectURL(url);
297
- };
298
- const sensors = useSensors(
299
- useSensor(PointerSensor),
300
- useSensor(KeyboardSensor, {
301
- coordinateGetter: sortableKeyboardCoordinates
302
- })
303
- );
304
- const handleDragEnd = (event) => {
305
- const { active, over } = event;
306
- if (!over || active.id === over.id) return;
307
- const activeId = String(active.id);
308
- const overId = String(over.id);
309
- const oldIndex = columnOrder.indexOf(activeId);
310
- const newIndex = columnOrder.indexOf(overId);
311
- if (oldIndex === -1 || newIndex === -1) return;
312
- const newOrder = arrayMove(columnOrder, oldIndex, newIndex);
313
- setColumnOrder(newOrder);
314
- if (onColumnReorder) {
315
- const orderMap = new Map(newOrder.map((key, idx) => [key, idx]));
316
- const reordered = [...columns].sort((a, b) => {
317
- const ai = orderMap.get(String(a.key)) ?? Infinity;
318
- const bi = orderMap.get(String(b.key)) ?? Infinity;
319
- return ai - bi;
320
- });
321
- onColumnReorder(reordered);
322
- }
323
- };
324
- const getCellPinnedProps = (colKey) => {
325
- const pinInfo = pinnedOffsets.get(colKey);
326
- if (!pinInfo) return { style: {}, className: "" };
327
- return {
328
- style: {
329
- position: "sticky",
330
- [pinInfo.side]: pinInfo.offset,
331
- zIndex: 1
332
- },
333
- className: pinInfo.side === "left" ? "eidos-table-cell--pinned-left" : "eidos-table-cell--pinned-right"
334
- };
335
- };
336
- const getHeaderPinnedProps = (colKey) => {
337
- const pinInfo = pinnedOffsets.get(colKey);
338
- if (!pinInfo) return { style: {}, className: "" };
339
- return {
340
- style: {
341
- position: "sticky",
342
- [pinInfo.side]: pinInfo.offset,
343
- zIndex: 3
344
- },
345
- className: pinInfo.side === "left" ? "eidos-table-header-cell--pinned-left" : "eidos-table-header-cell--pinned-right"
346
- };
347
- };
348
- const densityClass = effectiveDensity !== "comfortable" ? `eidos-table--${effectiveDensity}` : "";
349
- if (loading) {
350
- return /* @__PURE__ */ jsx("div", { className: `eidos-table-container ${className || ""}`, children: /* @__PURE__ */ jsxs("div", { className: "eidos-table-loading", children: [
351
- /* @__PURE__ */ jsx(Spinner, { size: "md" }),
352
- /* @__PURE__ */ jsx("p", { children: "Loading..." })
353
- ] }) });
354
- }
355
- const densityPanel = /* @__PURE__ */ jsx("div", { className: "eidos-table-menu-panel", children: DENSITY_OPTIONS.map((option) => /* @__PURE__ */ jsxs(
356
- "button",
357
- {
358
- className: [
359
- "eidos-table-menu-item",
360
- effectiveDensity === option.value ? "eidos-table-menu-item--active" : ""
361
- ].filter(Boolean).join(" "),
362
- onClick: () => setInternalDensity(option.value),
363
- children: [
364
- /* @__PURE__ */ jsx("span", { className: "eidos-table-menu-item-check", children: effectiveDensity === option.value && /* @__PURE__ */ jsx(Check, { size: 14 }) }),
365
- /* @__PURE__ */ jsx("span", { children: option.label })
366
- ]
367
- },
368
- option.value
369
- )) });
370
- const columnVisibilityPanel = /* @__PURE__ */ jsx("div", { className: "eidos-table-menu-panel", children: orderedColumns.map((col) => {
371
- const key = String(col.key);
372
- const isVisible = !hiddenColumnKeys.has(key);
373
- const isLastVisible = visibleColumns.length === 1 && isVisible;
374
- return /* @__PURE__ */ jsxs(
375
- "button",
376
- {
377
- className: ["eidos-table-menu-item", isVisible ? "eidos-table-menu-item--active" : ""].filter(Boolean).join(" "),
378
- disabled: isLastVisible,
379
- onClick: () => {
380
- setHiddenColumnKeys((prev) => {
381
- const next = new Set(prev);
382
- if (next.has(key)) next.delete(key);
383
- else next.add(key);
384
- return next;
385
- });
386
- },
387
- children: [
388
- /* @__PURE__ */ jsx(
389
- Checkbox,
390
- {
391
- checked: isVisible,
392
- disabled: isLastVisible,
393
- size: "sm",
394
- onChange: () => {
395
- }
396
- }
397
- ),
398
- /* @__PURE__ */ jsx("span", { children: col.label })
399
- ]
400
- },
401
- key
402
- );
403
- }) });
404
- const sortableItems = visibleColumns.map((c) => String(c.key));
405
- const tableContent = /* @__PURE__ */ jsxs("div", { className: `eidos-table-container ${className || ""}`, children: [
406
- showToolbar && /* @__PURE__ */ jsxs("div", { className: "eidos-table-toolbar", children: [
407
- /* @__PURE__ */ jsx("div", { className: "eidos-table-toolbar-left", children: selectable && hasSelection && /* @__PURE__ */ jsxs(Fragment, { children: [
408
- /* @__PURE__ */ jsxs("span", { className: "eidos-table-selection-count", children: [
409
- selectedSet.size,
410
- " selected"
411
- ] }),
412
- bulkActions.length > 0 && /* @__PURE__ */ jsx("div", { className: "eidos-table-bulk-actions", children: bulkActions.map((action) => {
413
- const isDisabled = typeof action.disabled === "function" ? action.disabled(selectedItems) : action.disabled ?? false;
414
- if (action.type === "split-button") {
415
- return /* @__PURE__ */ jsx(
416
- SplitButton,
417
- {
418
- size: "sm",
419
- variant: action.variant ?? "outlined",
420
- color: action.color ?? "secondary",
421
- preIcon: action.icon,
422
- disabled: isDisabled,
423
- label: action.label,
424
- onClick: () => action.onClick(selectedItems),
425
- options: action.options.map((option) => ({
426
- id: option.id,
427
- label: option.label,
428
- icon: option.icon,
429
- disabled: option.disabled,
430
- onClick: () => option.onClick(selectedItems)
431
- }))
432
- },
433
- action.id
434
- );
435
- }
436
- return action.label ? /* @__PURE__ */ jsx(
437
- Button,
438
- {
439
- size: "sm",
440
- variant: action.variant ?? "outlined",
441
- color: action.color ?? "secondary",
442
- preIcon: action.icon,
443
- posIcon: action.posIcon,
444
- disabled: isDisabled,
445
- onClick: () => action.onClick(selectedItems),
446
- children: action.label
447
- },
448
- action.id
449
- ) : action.icon ? /* @__PURE__ */ jsx(
450
- Button,
451
- {
452
- size: "sm",
453
- variant: action.variant ?? "outlined",
454
- color: action.color ?? "secondary",
455
- icon: action.icon,
456
- disabled: isDisabled,
457
- onClick: () => action.onClick(selectedItems)
458
- },
459
- action.id
460
- ) : null;
461
- }) }),
462
- /* @__PURE__ */ jsx(
463
- "button",
464
- {
465
- className: "eidos-table-clear-selection",
466
- onClick: clearSelection,
467
- "aria-label": "Clear selection",
468
- children: /* @__PURE__ */ jsx(X, { size: 14 })
469
- }
470
- )
471
- ] }) }),
472
- /* @__PURE__ */ jsxs("div", { className: "eidos-table-toolbar-right", children: [
473
- showDensity && /* @__PURE__ */ jsx(
474
- Dropdown,
475
- {
476
- placement: "bottom",
477
- align: "end",
478
- autoWidth: false,
479
- trigger: /* @__PURE__ */ jsx(Button, { variant: "text", size: "sm", preIcon: AlignJustify, children: "Density" }),
480
- content: densityPanel
481
- }
482
- ),
483
- showColumnVisibility && /* @__PURE__ */ jsx(
484
- Dropdown,
485
- {
486
- placement: "bottom",
487
- align: "end",
488
- autoWidth: false,
489
- trigger: /* @__PURE__ */ jsx(Button, { variant: "text", size: "sm", preIcon: Columns3, children: "Columns" }),
490
- content: columnVisibilityPanel
491
- }
492
- ),
493
- showExport && /* @__PURE__ */ jsx(
494
- Button,
495
- {
496
- variant: "text",
497
- size: "sm",
498
- icon: Download,
499
- onClick: handleExportCsv,
500
- tooltip: "Export CSV"
501
- }
502
- ),
503
- showFilters && onFiltersChange && /* @__PURE__ */ jsx(
504
- TableFiltersDropdown,
505
- {
506
- columns,
507
- filters,
508
- onFiltersChange,
509
- defaultFilters
510
- }
511
- )
512
- ] })
513
- ] }),
514
- /* @__PURE__ */ jsx("div", { className: "eidos-table-scroll", children: /* @__PURE__ */ jsxs(
515
- "table",
516
- {
517
- className: [
518
- "eidos-table",
519
- densityClass,
520
- draggableColumns ? "eidos-table--draggable-columns" : ""
521
- ].filter(Boolean).join(" "),
522
- children: [
523
- /* @__PURE__ */ jsx("thead", { ref: theadRef, children: /* @__PURE__ */ jsxs("tr", { children: [
524
- selectable && /* @__PURE__ */ jsx(
525
- "th",
526
- {
527
- className: [
528
- "eidos-table-header-cell",
529
- "eidos-table-checkbox-cell",
530
- getHeaderPinnedProps("__checkbox__").className
531
- ].filter(Boolean).join(" "),
532
- style: getHeaderPinnedProps("__checkbox__").style,
533
- "data-col-key": "__checkbox__",
534
- children: /* @__PURE__ */ jsx(
535
- Checkbox,
536
- {
537
- size: "sm",
538
- checked: allSelected,
539
- indeterminate: someSelected,
540
- onChange: toggleAll,
541
- "aria-label": "Select all rows"
542
- }
543
- )
544
- }
545
- ),
546
- draggableColumns ? visibleColumns.map((column) => {
547
- const colKey = String(column.key);
548
- const columnType = column.type || "data";
549
- const columnWidth = column.type === "icon" ? "var(--component-size-lg)" : column.width;
550
- const isSortable = !!column.sortable;
551
- const isCurrentlySorted = currentSort?.key === colKey;
552
- const sortDirection = isCurrentlySorted ? currentSort.direction : null;
553
- const alignment = column.align || "left";
554
- const { style: pinnedStyle, className: pinnedClass } = getHeaderPinnedProps(colKey);
555
- return /* @__PURE__ */ jsx(
556
- SortableColumnHeader,
557
- {
558
- id: colKey,
559
- column,
560
- isSortable,
561
- isCurrentlySorted: !!isCurrentlySorted,
562
- sortDirection,
563
- alignment,
564
- columnType,
565
- columnWidth,
566
- pinnedClass,
567
- stickyStyle: pinnedStyle,
568
- onSortClick: () => handleSort(colKey)
569
- },
570
- colKey
571
- );
572
- }) : visibleColumns.map((column, index) => {
573
- const colKey = String(column.key);
574
- const columnType = column.type || "data";
575
- const columnWidth = column.type === "icon" ? "var(--component-size-lg)" : column.width;
576
- const isSortable = column.sortable;
577
- const isCurrentlySorted = currentSort?.key === colKey;
578
- const sortDirection = isCurrentlySorted ? currentSort.direction : null;
579
- const alignment = column.align || "left";
580
- const alignmentClass = `eidos-table-align-${alignment}`;
581
- const { style: pinnedStyle, className: pinnedClass } = getHeaderPinnedProps(colKey);
582
- return /* @__PURE__ */ jsx(
583
- "th",
584
- {
585
- className: [
586
- "eidos-table-header-cell",
587
- `eidos-table-header-cell-${columnType}`,
588
- isSortable ? "eidos-table-sortable" : "",
589
- isCurrentlySorted ? "eidos-table-sorted" : "",
590
- alignmentClass,
591
- pinnedClass
592
- ].filter(Boolean).join(" "),
593
- style: { width: columnWidth, ...pinnedStyle },
594
- "data-col-key": colKey,
595
- onClick: () => isSortable && handleSort(colKey),
596
- children: /* @__PURE__ */ jsxs("div", { className: `eidos-table-header-content ${alignmentClass}`, children: [
597
- /* @__PURE__ */ jsx("span", { children: column.label }),
598
- isSortable && /* @__PURE__ */ jsxs("div", { className: "eidos-table-sort-indicator", children: [
599
- sortDirection === "asc" && /* @__PURE__ */ jsx(ArrowUp, { size: 14 }),
600
- sortDirection === "desc" && /* @__PURE__ */ jsx(ArrowDown, { size: 14 }),
601
- !sortDirection && /* @__PURE__ */ jsx(ChevronsUpDown, { size: 14 })
602
- ] })
603
- ] })
604
- },
605
- index
606
- );
607
- })
608
- ] }) }),
609
- /* @__PURE__ */ jsx("tbody", { children: displayData.length > 0 ? displayData.map((item, rowIndex) => {
610
- const globalIndex = showPagination ? (currentPage - 1) * currentPageSize + rowIndex : rowIndex;
611
- const key = getRowKey(item, globalIndex);
612
- const isSelected = selectedSet.has(key);
613
- return /* @__PURE__ */ jsxs(
614
- "tr",
615
- {
616
- className: [
617
- "eidos-table-row",
618
- onRowClick ? "eidos-table-clickable" : "",
619
- isSelected ? "eidos-table-row--selected" : ""
620
- ].filter(Boolean).join(" "),
621
- onClick: () => onRowClick?.(item),
622
- children: [
623
- selectable && /* @__PURE__ */ jsx(
624
- "td",
625
- {
626
- className: [
627
- "eidos-table-cell",
628
- "eidos-table-checkbox-cell",
629
- getCellPinnedProps("__checkbox__").className
630
- ].filter(Boolean).join(" "),
631
- style: getCellPinnedProps("__checkbox__").style,
632
- onClick: (e) => {
633
- e.stopPropagation();
634
- toggleRow(key);
635
- },
636
- children: /* @__PURE__ */ jsx("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(
637
- Checkbox,
638
- {
639
- size: "sm",
640
- checked: isSelected,
641
- onChange: () => toggleRow(key),
642
- "aria-label": `Select row ${globalIndex + 1}`
643
- }
644
- ) })
645
- }
646
- ),
647
- visibleColumns.map((column, colIndex) => {
648
- const colKey = String(column.key);
649
- const value = typeof column.key === "string" && column.key.includes(".") ? column.key.split(".").reduce(
650
- (obj, k) => obj?.[k],
651
- item
652
- ) : item[column.key];
653
- const columnType = column.type || "data";
654
- const columnWidth = column.type === "icon" ? "var(--component-size-lg)" : column.width;
655
- const alignment = column.align || "left";
656
- const alignmentClass = `eidos-table-align-${alignment}`;
657
- const { style: pinnedStyle, className: pinnedClass } = getCellPinnedProps(colKey);
658
- return /* @__PURE__ */ jsx(
659
- "td",
660
- {
661
- className: [
662
- "eidos-table-cell",
663
- `eidos-table-cell-${columnType}`,
664
- alignmentClass,
665
- pinnedClass
666
- ].filter(Boolean).join(" "),
667
- style: { width: columnWidth, ...pinnedStyle },
668
- onClick: columnType === "action" ? (e) => e.stopPropagation() : void 0,
669
- children: column.render ? column.render(value, item) : String(value ?? "")
670
- },
671
- colIndex
672
- );
673
- })
674
- ]
675
- },
676
- key
677
- );
678
- }) : /* @__PURE__ */ jsx("tr", { className: "eidos-table-empty-row", children: /* @__PURE__ */ jsx(
679
- "td",
680
- {
681
- colSpan: selectable ? visibleColumns.length + 1 : visibleColumns.length,
682
- className: "eidos-table-cell eidos-table-empty-cell",
683
- children: Object.keys(filters).length > 0 ? /* @__PURE__ */ jsx(
684
- EmptyState,
685
- {
686
- icon: /* @__PURE__ */ jsx(SearchX, {}),
687
- title: "No results found",
688
- description: "Try adjusting your filters or search terms.",
689
- action: onFiltersChange ? /* @__PURE__ */ jsx(
690
- Button,
691
- {
692
- size: "sm",
693
- variant: "outlined",
694
- color: "primary",
695
- onClick: () => onFiltersChange({}),
696
- children: "Clear filters"
697
- }
698
- ) : void 0,
699
- size: "sm"
700
- }
701
- ) : /* @__PURE__ */ jsx(
702
- EmptyState,
703
- {
704
- icon: /* @__PURE__ */ jsx(FolderOpen, {}),
705
- title: emptyMessage,
706
- description: "There are no records to display.",
707
- size: "sm"
708
- }
709
- )
710
- }
711
- ) }) })
712
- ]
713
- }
714
- ) }),
715
- showFooter && /* @__PURE__ */ jsx("div", { className: "eidos-table-footer", children: /* @__PURE__ */ jsx("div", { className: "eidos-table-footer-content", children: showPagination && data.length > 0 ? /* @__PURE__ */ jsx(
716
- Pagination,
717
- {
718
- page: currentPage,
719
- totalPages,
720
- onChange: handlePageChange,
721
- totalItems: totalItems ?? data.length,
722
- pageSize: currentPageSize,
723
- onPageSizeChange: handlePageSizeChange,
724
- pageSizeOptions,
725
- size: "sm"
726
- }
727
- ) : /* @__PURE__ */ jsxs("span", { className: "eidos-table-results-info", children: [
728
- "Showing ",
729
- data.length,
730
- " of ",
731
- totalItems ?? data.length,
732
- " results"
733
- ] }) }) })
734
- ] });
735
- if (draggableColumns) {
736
- return /* @__PURE__ */ jsx(DndContext, { sensors, onDragEnd: handleDragEnd, children: /* @__PURE__ */ jsx(SortableContext, { items: sortableItems, strategy: horizontalListSortingStrategy, children: tableContent }) });
737
- }
738
- return tableContent;
739
- };
740
-
741
- export {
742
- Table
743
- };
744
- //# sourceMappingURL=chunk-VSFKM7FE.js.map