@etus/ui 0.4.0-beta.1 → 0.4.0-beta.3

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 (808) hide show
  1. package/dist/chunk-23BHD62H.js +288 -0
  2. package/dist/chunk-23BHD62H.js.map +1 -0
  3. package/dist/chunk-2D6OFVPN.js +145 -0
  4. package/dist/chunk-2D6OFVPN.js.map +1 -0
  5. package/dist/chunk-2IFYXJ3H.js +107 -0
  6. package/dist/chunk-2IFYXJ3H.js.map +1 -0
  7. package/dist/chunk-2UGDLAYC.js +71 -0
  8. package/dist/chunk-2UGDLAYC.js.map +1 -0
  9. package/dist/chunk-2VHARFMD.js +670 -0
  10. package/dist/chunk-2VHARFMD.js.map +1 -0
  11. package/dist/chunk-2XJWE2XR.js +36 -0
  12. package/dist/chunk-2XJWE2XR.js.map +1 -0
  13. package/dist/chunk-3JIXCWJO.js +182 -0
  14. package/dist/chunk-3JIXCWJO.js.map +1 -0
  15. package/dist/chunk-3L5G7VI2.js +203 -0
  16. package/dist/chunk-3L5G7VI2.js.map +1 -0
  17. package/dist/chunk-3MJNJKAF.js +264 -0
  18. package/dist/chunk-3MJNJKAF.js.map +1 -0
  19. package/dist/chunk-3NFQXZHO.js +199 -0
  20. package/dist/chunk-3NFQXZHO.js.map +1 -0
  21. package/dist/chunk-3RJEA2MM.js +560 -0
  22. package/dist/chunk-3RJEA2MM.js.map +1 -0
  23. package/dist/chunk-3WOGOTOV.js +152 -0
  24. package/dist/chunk-3WOGOTOV.js.map +1 -0
  25. package/dist/chunk-43SINRHH.js +853 -0
  26. package/dist/chunk-43SINRHH.js.map +1 -0
  27. package/dist/chunk-46ESMCEQ.js +80 -0
  28. package/dist/chunk-46ESMCEQ.js.map +1 -0
  29. package/dist/chunk-4HRQX2IA.js +928 -0
  30. package/dist/chunk-4HRQX2IA.js.map +1 -0
  31. package/dist/chunk-4J6DHPYY.js +130 -0
  32. package/dist/chunk-4J6DHPYY.js.map +1 -0
  33. package/dist/chunk-4MQNDQ4O.js +62 -0
  34. package/dist/chunk-4MQNDQ4O.js.map +1 -0
  35. package/dist/chunk-4RSHPKHB.js +268 -0
  36. package/dist/chunk-4RSHPKHB.js.map +1 -0
  37. package/dist/chunk-4Y72SPNL.js +283 -0
  38. package/dist/chunk-4Y72SPNL.js.map +1 -0
  39. package/dist/chunk-53RWD44Z.js +90 -0
  40. package/dist/chunk-53RWD44Z.js.map +1 -0
  41. package/dist/chunk-57KTYE5H.js +273 -0
  42. package/dist/chunk-57KTYE5H.js.map +1 -0
  43. package/dist/chunk-5J5OL4IV.js +529 -0
  44. package/dist/chunk-5J5OL4IV.js.map +1 -0
  45. package/dist/chunk-5KTMPLDK.js +251 -0
  46. package/dist/chunk-5KTMPLDK.js.map +1 -0
  47. package/dist/chunk-5YDFC74M.js +310 -0
  48. package/dist/chunk-5YDFC74M.js.map +1 -0
  49. package/dist/chunk-5ZEYTBTU.js +288 -0
  50. package/dist/chunk-5ZEYTBTU.js.map +1 -0
  51. package/dist/chunk-5ZKKXLPF.js +177 -0
  52. package/dist/chunk-5ZKKXLPF.js.map +1 -0
  53. package/dist/chunk-65YSTUD2.js +206 -0
  54. package/dist/chunk-65YSTUD2.js.map +1 -0
  55. package/dist/chunk-6GWO7JNP.js +438 -0
  56. package/dist/chunk-6GWO7JNP.js.map +1 -0
  57. package/dist/chunk-6SHOL6WR.js +163 -0
  58. package/dist/chunk-6SHOL6WR.js.map +1 -0
  59. package/dist/chunk-6SZRWNPT.js +67 -0
  60. package/dist/chunk-6SZRWNPT.js.map +1 -0
  61. package/dist/chunk-6VCJU6XD.js +19 -0
  62. package/dist/chunk-6VCJU6XD.js.map +1 -0
  63. package/dist/chunk-6XY7QYVR.js +812 -0
  64. package/dist/chunk-6XY7QYVR.js.map +1 -0
  65. package/dist/chunk-6Z73ZQOP.js +3 -0
  66. package/dist/chunk-6Z73ZQOP.js.map +1 -0
  67. package/dist/chunk-6ZAMTPGN.js +309 -0
  68. package/dist/chunk-6ZAMTPGN.js.map +1 -0
  69. package/dist/chunk-75QBUI2P.js +4497 -0
  70. package/dist/chunk-75QBUI2P.js.map +1 -0
  71. package/dist/chunk-7BAL24EU.js +204 -0
  72. package/dist/chunk-7BAL24EU.js.map +1 -0
  73. package/dist/chunk-7I6KK6QE.js +411 -0
  74. package/dist/chunk-7I6KK6QE.js.map +1 -0
  75. package/dist/chunk-7QDWREVG.js +342 -0
  76. package/dist/chunk-7QDWREVG.js.map +1 -0
  77. package/dist/chunk-7RTHGI6E.js +154 -0
  78. package/dist/chunk-7RTHGI6E.js.map +1 -0
  79. package/dist/chunk-7Y2UQMX6.js +524 -0
  80. package/dist/chunk-7Y2UQMX6.js.map +1 -0
  81. package/dist/chunk-7ZJ32KRQ.js +100 -0
  82. package/dist/chunk-7ZJ32KRQ.js.map +1 -0
  83. package/dist/chunk-AEE5GDNA.js +220 -0
  84. package/dist/chunk-AEE5GDNA.js.map +1 -0
  85. package/dist/chunk-AEHYYTFW.js +70 -0
  86. package/dist/chunk-AEHYYTFW.js.map +1 -0
  87. package/dist/chunk-AFCSDND5.js +58 -0
  88. package/dist/chunk-AFCSDND5.js.map +1 -0
  89. package/dist/chunk-AR3OXNPL.js +70 -0
  90. package/dist/chunk-AR3OXNPL.js.map +1 -0
  91. package/dist/chunk-ARNVOHVW.js +103 -0
  92. package/dist/chunk-ARNVOHVW.js.map +1 -0
  93. package/dist/chunk-ATIEGLR2.js +3 -0
  94. package/dist/chunk-ATIEGLR2.js.map +1 -0
  95. package/dist/chunk-AV5YQ2Z4.js +515 -0
  96. package/dist/chunk-AV5YQ2Z4.js.map +1 -0
  97. package/dist/chunk-AWWBBMMY.js +1070 -0
  98. package/dist/chunk-AWWBBMMY.js.map +1 -0
  99. package/dist/chunk-AZANPNLR.js +134 -0
  100. package/dist/chunk-AZANPNLR.js.map +1 -0
  101. package/dist/chunk-B3BDIM4H.js +137 -0
  102. package/dist/chunk-B3BDIM4H.js.map +1 -0
  103. package/dist/chunk-B6KQKQ4S.js +774 -0
  104. package/dist/chunk-B6KQKQ4S.js.map +1 -0
  105. package/dist/chunk-B7ZLPQSO.js +181 -0
  106. package/dist/chunk-B7ZLPQSO.js.map +1 -0
  107. package/dist/chunk-BECPEVUL.js +115 -0
  108. package/dist/chunk-BECPEVUL.js.map +1 -0
  109. package/dist/chunk-BFBGESUI.js +217 -0
  110. package/dist/chunk-BFBGESUI.js.map +1 -0
  111. package/dist/chunk-BITATKTH.js +3 -0
  112. package/dist/chunk-BITATKTH.js.map +1 -0
  113. package/dist/chunk-BIUVOZQG.js +370 -0
  114. package/dist/chunk-BIUVOZQG.js.map +1 -0
  115. package/dist/chunk-BQMQULAC.js +37 -0
  116. package/dist/chunk-BQMQULAC.js.map +1 -0
  117. package/dist/chunk-BWGZKU3I.js +3 -0
  118. package/dist/chunk-BWGZKU3I.js.map +1 -0
  119. package/dist/chunk-CCUCWL6M.js +1203 -0
  120. package/dist/chunk-CCUCWL6M.js.map +1 -0
  121. package/dist/chunk-CKD4UBV6.js +138 -0
  122. package/dist/chunk-CKD4UBV6.js.map +1 -0
  123. package/dist/chunk-CNRV2IGH.js +111 -0
  124. package/dist/chunk-CNRV2IGH.js.map +1 -0
  125. package/dist/chunk-CP2PEDG2.js +383 -0
  126. package/dist/chunk-CP2PEDG2.js.map +1 -0
  127. package/dist/chunk-CSXT7SKR.js +139 -0
  128. package/dist/chunk-CSXT7SKR.js.map +1 -0
  129. package/dist/chunk-CUWQUGGB.js +228 -0
  130. package/dist/chunk-CUWQUGGB.js.map +1 -0
  131. package/dist/chunk-CXHA5D3I.js +170 -0
  132. package/dist/chunk-CXHA5D3I.js.map +1 -0
  133. package/dist/chunk-CYIFWQ5Y.js +197 -0
  134. package/dist/chunk-CYIFWQ5Y.js.map +1 -0
  135. package/dist/chunk-D2V2HKLX.js +249 -0
  136. package/dist/chunk-D2V2HKLX.js.map +1 -0
  137. package/dist/chunk-D5DM6GZB.js +204 -0
  138. package/dist/chunk-D5DM6GZB.js.map +1 -0
  139. package/dist/chunk-DL7D5F7B.js +63 -0
  140. package/dist/chunk-DL7D5F7B.js.map +1 -0
  141. package/dist/chunk-DNAGXK2C.js +91 -0
  142. package/dist/chunk-DNAGXK2C.js.map +1 -0
  143. package/dist/chunk-DYDXGWH2.js +109 -0
  144. package/dist/chunk-DYDXGWH2.js.map +1 -0
  145. package/dist/chunk-DZALMUQD.js +482 -0
  146. package/dist/chunk-DZALMUQD.js.map +1 -0
  147. package/dist/chunk-E27SQ54A.js +122 -0
  148. package/dist/chunk-E27SQ54A.js.map +1 -0
  149. package/dist/chunk-ESLSPRYA.js +875 -0
  150. package/dist/chunk-ESLSPRYA.js.map +1 -0
  151. package/dist/chunk-EVUHEBWX.js +35 -0
  152. package/dist/chunk-EVUHEBWX.js.map +1 -0
  153. package/dist/chunk-F6ZKBK5B.js +265 -0
  154. package/dist/chunk-F6ZKBK5B.js.map +1 -0
  155. package/dist/chunk-F7XARQUW.js +82 -0
  156. package/dist/chunk-F7XARQUW.js.map +1 -0
  157. package/dist/chunk-FCSYPOHF.js +77 -0
  158. package/dist/chunk-FCSYPOHF.js.map +1 -0
  159. package/dist/chunk-FDES5YDF.js +159 -0
  160. package/dist/chunk-FDES5YDF.js.map +1 -0
  161. package/dist/chunk-FPCRGFNY.js +776 -0
  162. package/dist/chunk-FPCRGFNY.js.map +1 -0
  163. package/dist/chunk-FRDYXDAE.js +69 -0
  164. package/dist/chunk-FRDYXDAE.js.map +1 -0
  165. package/dist/chunk-FSMHI7DW.js +291 -0
  166. package/dist/chunk-FSMHI7DW.js.map +1 -0
  167. package/dist/chunk-FUCQNVJL.js +90 -0
  168. package/dist/chunk-FUCQNVJL.js.map +1 -0
  169. package/dist/chunk-FYJHWYPM.js +539 -0
  170. package/dist/chunk-FYJHWYPM.js.map +1 -0
  171. package/dist/chunk-G2V7D7VC.js +371 -0
  172. package/dist/chunk-G2V7D7VC.js.map +1 -0
  173. package/dist/chunk-G5TWK7L3.js +667 -0
  174. package/dist/chunk-G5TWK7L3.js.map +1 -0
  175. package/dist/chunk-G6SIIN2B.js +3 -0
  176. package/dist/chunk-G6SIIN2B.js.map +1 -0
  177. package/dist/chunk-GAP3OZR7.js +223 -0
  178. package/dist/chunk-GAP3OZR7.js.map +1 -0
  179. package/dist/chunk-GBTVAO4V.js +316 -0
  180. package/dist/chunk-GBTVAO4V.js.map +1 -0
  181. package/dist/chunk-GKMR5SVC.js +97 -0
  182. package/dist/chunk-GKMR5SVC.js.map +1 -0
  183. package/dist/chunk-GL56KIFL.js +79 -0
  184. package/dist/chunk-GL56KIFL.js.map +1 -0
  185. package/dist/chunk-GLEKBJLR.js +226 -0
  186. package/dist/chunk-GLEKBJLR.js.map +1 -0
  187. package/dist/chunk-GPW57XOW.js +80 -0
  188. package/dist/chunk-GPW57XOW.js.map +1 -0
  189. package/dist/chunk-H4ANCFZG.js +233 -0
  190. package/dist/chunk-H4ANCFZG.js.map +1 -0
  191. package/dist/chunk-HAEZLC7V.js +122 -0
  192. package/dist/chunk-HAEZLC7V.js.map +1 -0
  193. package/dist/chunk-HIEOL77G.js +460 -0
  194. package/dist/chunk-HIEOL77G.js.map +1 -0
  195. package/dist/chunk-HKXQLWGR.js +335 -0
  196. package/dist/chunk-HKXQLWGR.js.map +1 -0
  197. package/dist/chunk-HNYBLROK.js +469 -0
  198. package/dist/chunk-HNYBLROK.js.map +1 -0
  199. package/dist/chunk-HRNDJU7D.js +5 -5
  200. package/dist/chunk-HRNDJU7D.js.map +1 -1
  201. package/dist/chunk-HXHB2CK5.js +108 -0
  202. package/dist/chunk-HXHB2CK5.js.map +1 -0
  203. package/dist/chunk-I7ZLEC7Y.js +128 -0
  204. package/dist/chunk-I7ZLEC7Y.js.map +1 -0
  205. package/dist/chunk-ICAQYWCX.js +153 -0
  206. package/dist/chunk-ICAQYWCX.js.map +1 -0
  207. package/dist/chunk-IFHF4UES.js +387 -0
  208. package/dist/chunk-IFHF4UES.js.map +1 -0
  209. package/dist/chunk-IRIIK3BU.js +215 -0
  210. package/dist/chunk-IRIIK3BU.js.map +1 -0
  211. package/dist/chunk-IRKDMISK.js +62 -0
  212. package/dist/chunk-IRKDMISK.js.map +1 -0
  213. package/dist/chunk-IXJHHR3Y.js +3 -0
  214. package/dist/chunk-IXJHHR3Y.js.map +1 -0
  215. package/dist/chunk-JDTAG7KZ.js +33 -0
  216. package/dist/chunk-JDTAG7KZ.js.map +1 -0
  217. package/dist/chunk-JLVL76SW.js +544 -0
  218. package/dist/chunk-JLVL76SW.js.map +1 -0
  219. package/dist/chunk-JPA2VQRW.js +119 -0
  220. package/dist/chunk-JPA2VQRW.js.map +1 -0
  221. package/dist/chunk-JWXK4TMX.js +106 -0
  222. package/dist/chunk-JWXK4TMX.js.map +1 -0
  223. package/dist/chunk-K3J7YLL4.js +153 -0
  224. package/dist/chunk-K3J7YLL4.js.map +1 -0
  225. package/dist/chunk-K45MMHLA.js +258 -0
  226. package/dist/chunk-K45MMHLA.js.map +1 -0
  227. package/dist/chunk-KNH7JW6E.js +142 -0
  228. package/dist/chunk-KNH7JW6E.js.map +1 -0
  229. package/dist/chunk-KOTCWE7V.js +345 -0
  230. package/dist/chunk-KOTCWE7V.js.map +1 -0
  231. package/dist/chunk-KR3IVNQH.js +402 -0
  232. package/dist/chunk-KR3IVNQH.js.map +1 -0
  233. package/dist/chunk-KRHL3YH2.js +3 -0
  234. package/dist/chunk-KRHL3YH2.js.map +1 -0
  235. package/dist/chunk-KXSJSLPJ.js +354 -0
  236. package/dist/chunk-KXSJSLPJ.js.map +1 -0
  237. package/dist/chunk-L2XR5IFJ.js +103 -0
  238. package/dist/chunk-L2XR5IFJ.js.map +1 -0
  239. package/dist/chunk-LATTRPLQ.js +286 -0
  240. package/dist/chunk-LATTRPLQ.js.map +1 -0
  241. package/dist/chunk-LFN7UHDT.js +122 -0
  242. package/dist/chunk-LFN7UHDT.js.map +1 -0
  243. package/dist/chunk-LMTNDUIP.js +96 -0
  244. package/dist/chunk-LMTNDUIP.js.map +1 -0
  245. package/dist/chunk-LNY2EXOV.js +349 -0
  246. package/dist/chunk-LNY2EXOV.js.map +1 -0
  247. package/dist/chunk-LQVQ7SHG.js +226 -0
  248. package/dist/chunk-LQVQ7SHG.js.map +1 -0
  249. package/dist/chunk-MDQFZEIC.js +174 -0
  250. package/dist/chunk-MDQFZEIC.js.map +1 -0
  251. package/dist/chunk-MK6ID2HI.js +532 -0
  252. package/dist/chunk-MK6ID2HI.js.map +1 -0
  253. package/dist/chunk-MQ2446N7.js +216 -0
  254. package/dist/chunk-MQ2446N7.js.map +1 -0
  255. package/dist/chunk-MVOENLOZ.js +3 -0
  256. package/dist/chunk-MVOENLOZ.js.map +1 -0
  257. package/dist/chunk-N23L6UDK.js +108 -0
  258. package/dist/chunk-N23L6UDK.js.map +1 -0
  259. package/dist/chunk-N3I6GA4I.js +137 -0
  260. package/dist/chunk-N3I6GA4I.js.map +1 -0
  261. package/dist/chunk-N4UTBJRY.js +72 -0
  262. package/dist/chunk-N4UTBJRY.js.map +1 -0
  263. package/dist/chunk-NCLOPI6U.js +347 -0
  264. package/dist/chunk-NCLOPI6U.js.map +1 -0
  265. package/dist/chunk-NGR4HFVA.js +136 -0
  266. package/dist/chunk-NGR4HFVA.js.map +1 -0
  267. package/dist/chunk-NK5Q2YRM.js +70 -0
  268. package/dist/chunk-NK5Q2YRM.js.map +1 -0
  269. package/dist/chunk-NNOGFX66.js +3 -0
  270. package/dist/chunk-NNOGFX66.js.map +1 -0
  271. package/dist/chunk-NWFRMVI2.js +147 -0
  272. package/dist/chunk-NWFRMVI2.js.map +1 -0
  273. package/dist/chunk-NWVYQYKK.js +75 -0
  274. package/dist/chunk-NWVYQYKK.js.map +1 -0
  275. package/dist/chunk-NXQ25PKF.js +318 -0
  276. package/dist/chunk-NXQ25PKF.js.map +1 -0
  277. package/dist/chunk-OEXQ2MOY.js +338 -0
  278. package/dist/chunk-OEXQ2MOY.js.map +1 -0
  279. package/dist/chunk-ONTUN5XH.js +57 -0
  280. package/dist/chunk-ONTUN5XH.js.map +1 -0
  281. package/dist/chunk-OQCGQG47.js +83 -0
  282. package/dist/chunk-OQCGQG47.js.map +1 -0
  283. package/dist/chunk-OWIFNJXZ.js +167 -0
  284. package/dist/chunk-OWIFNJXZ.js.map +1 -0
  285. package/dist/chunk-PFVT27B5.js +92 -0
  286. package/dist/chunk-PFVT27B5.js.map +1 -0
  287. package/dist/chunk-PGTCXLGY.js +67 -0
  288. package/dist/chunk-PGTCXLGY.js.map +1 -0
  289. package/dist/chunk-PK5O62XD.js +58 -0
  290. package/dist/chunk-PK5O62XD.js.map +1 -0
  291. package/dist/chunk-PLLJNHWU.js +175 -0
  292. package/dist/chunk-PLLJNHWU.js.map +1 -0
  293. package/dist/chunk-POZNQWZE.js +995 -0
  294. package/dist/chunk-POZNQWZE.js.map +1 -0
  295. package/dist/chunk-PWCMCMDN.js +67 -0
  296. package/dist/chunk-PWCMCMDN.js.map +1 -0
  297. package/dist/chunk-Q43KJP5A.js +294 -0
  298. package/dist/chunk-Q43KJP5A.js.map +1 -0
  299. package/dist/chunk-QHKOBGLW.js +119 -0
  300. package/dist/chunk-QHKOBGLW.js.map +1 -0
  301. package/dist/chunk-QSY52N3A.js +1062 -0
  302. package/dist/chunk-QSY52N3A.js.map +1 -0
  303. package/dist/chunk-QUENPT24.js +100 -0
  304. package/dist/chunk-QUENPT24.js.map +1 -0
  305. package/dist/chunk-QWRHPNBY.js +924 -0
  306. package/dist/chunk-QWRHPNBY.js.map +1 -0
  307. package/dist/chunk-RPV77BCQ.js +238 -0
  308. package/dist/chunk-RPV77BCQ.js.map +1 -0
  309. package/dist/chunk-S6ORCWM2.js +205 -0
  310. package/dist/chunk-S6ORCWM2.js.map +1 -0
  311. package/dist/chunk-SAKW2OKH.js +237 -0
  312. package/dist/chunk-SAKW2OKH.js.map +1 -0
  313. package/dist/chunk-SHS6EGWS.js +226 -0
  314. package/dist/chunk-SHS6EGWS.js.map +1 -0
  315. package/dist/chunk-SM4AZOEP.js +222 -0
  316. package/dist/chunk-SM4AZOEP.js.map +1 -0
  317. package/dist/chunk-SXJMERQL.js +40 -0
  318. package/dist/chunk-SXJMERQL.js.map +1 -0
  319. package/dist/chunk-TAZPML2P.js +198 -0
  320. package/dist/chunk-TAZPML2P.js.map +1 -0
  321. package/dist/chunk-TQBUBD3E.js +100 -0
  322. package/dist/chunk-TQBUBD3E.js.map +1 -0
  323. package/dist/chunk-U4H3XHSI.js +305 -0
  324. package/dist/chunk-U4H3XHSI.js.map +1 -0
  325. package/dist/chunk-U74PNG4S.js +167 -0
  326. package/dist/chunk-U74PNG4S.js.map +1 -0
  327. package/dist/chunk-U77MCUVE.js +3 -0
  328. package/dist/chunk-U77MCUVE.js.map +1 -0
  329. package/dist/chunk-UA3OQAHJ.js +140 -0
  330. package/dist/chunk-UA3OQAHJ.js.map +1 -0
  331. package/dist/chunk-UCGT2IR4.js +297 -0
  332. package/dist/chunk-UCGT2IR4.js.map +1 -0
  333. package/dist/chunk-UFRMZ3M6.js +284 -0
  334. package/dist/chunk-UFRMZ3M6.js.map +1 -0
  335. package/dist/chunk-UKC3Q6OA.js +159 -0
  336. package/dist/chunk-UKC3Q6OA.js.map +1 -0
  337. package/dist/chunk-UOHVT5KN.js +3 -0
  338. package/dist/chunk-UOHVT5KN.js.map +1 -0
  339. package/dist/chunk-UP2VWCW5.js +2 -7
  340. package/dist/chunk-UP2VWCW5.js.map +1 -1
  341. package/dist/chunk-V7WEN4SD.js +444 -0
  342. package/dist/chunk-V7WEN4SD.js.map +1 -0
  343. package/dist/chunk-VFALJSXB.js +373 -0
  344. package/dist/chunk-VFALJSXB.js.map +1 -0
  345. package/dist/chunk-VJITPUUS.js +225 -0
  346. package/dist/chunk-VJITPUUS.js.map +1 -0
  347. package/dist/chunk-VKDN66VL.js +129 -0
  348. package/dist/chunk-VKDN66VL.js.map +1 -0
  349. package/dist/chunk-VOCA4KZB.js +655 -0
  350. package/dist/chunk-VOCA4KZB.js.map +1 -0
  351. package/dist/chunk-VT4IMHGE.js +292 -0
  352. package/dist/chunk-VT4IMHGE.js.map +1 -0
  353. package/dist/chunk-VWW3DJKI.js +53 -0
  354. package/dist/chunk-VWW3DJKI.js.map +1 -0
  355. package/dist/chunk-VZZ3HP7G.js +230 -0
  356. package/dist/chunk-VZZ3HP7G.js.map +1 -0
  357. package/dist/chunk-W3QUVCRK.js +54 -0
  358. package/dist/chunk-W3QUVCRK.js.map +1 -0
  359. package/dist/chunk-W4NC5CU5.js +175 -0
  360. package/dist/chunk-W4NC5CU5.js.map +1 -0
  361. package/dist/chunk-WBE6VQOO.js +235 -0
  362. package/dist/chunk-WBE6VQOO.js.map +1 -0
  363. package/dist/chunk-WG5IYG7X.js +3 -0
  364. package/dist/chunk-WG5IYG7X.js.map +1 -0
  365. package/dist/chunk-WH7Y2MAY.js +24 -0
  366. package/dist/chunk-WH7Y2MAY.js.map +1 -0
  367. package/dist/chunk-X4YUWX7H.js +146 -0
  368. package/dist/chunk-X4YUWX7H.js.map +1 -0
  369. package/dist/chunk-XETKCF73.js +74 -0
  370. package/dist/chunk-XETKCF73.js.map +1 -0
  371. package/dist/chunk-XPVKJIWY.js +55 -0
  372. package/dist/chunk-XPVKJIWY.js.map +1 -0
  373. package/dist/chunk-XV6NXXXP.js +206 -0
  374. package/dist/chunk-XV6NXXXP.js.map +1 -0
  375. package/dist/chunk-XXFKDEFH.js +143 -0
  376. package/dist/chunk-XXFKDEFH.js.map +1 -0
  377. package/dist/chunk-Y555RCRZ.js +26 -0
  378. package/dist/chunk-Y555RCRZ.js.map +1 -0
  379. package/dist/chunk-Y5GO2F6P.js +188 -0
  380. package/dist/chunk-Y5GO2F6P.js.map +1 -0
  381. package/dist/chunk-YCZ6M6EF.js +912 -0
  382. package/dist/chunk-YCZ6M6EF.js.map +1 -0
  383. package/dist/chunk-YMYXWHDU.js +96 -0
  384. package/dist/chunk-YMYXWHDU.js.map +1 -0
  385. package/dist/chunk-YTGYSNFR.js +101 -0
  386. package/dist/chunk-YTGYSNFR.js.map +1 -0
  387. package/dist/chunk-YZY35OHQ.js +279 -0
  388. package/dist/chunk-YZY35OHQ.js.map +1 -0
  389. package/dist/chunk-Z3FL7LEK.js +401 -0
  390. package/dist/chunk-Z3FL7LEK.js.map +1 -0
  391. package/dist/chunk-ZARZYMBM.js +95 -0
  392. package/dist/chunk-ZARZYMBM.js.map +1 -0
  393. package/dist/chunk-ZJVZ3LQS.js +199 -0
  394. package/dist/chunk-ZJVZ3LQS.js.map +1 -0
  395. package/dist/chunk-ZKK7L7H7.js +78 -0
  396. package/dist/chunk-ZKK7L7H7.js.map +1 -0
  397. package/dist/chunk-ZPCELVWJ.js +127 -0
  398. package/dist/chunk-ZPCELVWJ.js.map +1 -0
  399. package/dist/chunk-ZUFM33AV.js +113 -0
  400. package/dist/chunk-ZUFM33AV.js.map +1 -0
  401. package/dist/components/advanced/AssetManager/index.js +5 -0
  402. package/dist/components/advanced/AssetManager/index.js.map +1 -0
  403. package/dist/components/advanced/Calendar/index.js +10 -0
  404. package/dist/components/advanced/Calendar/index.js.map +1 -0
  405. package/dist/components/advanced/Command/index.js +6 -0
  406. package/dist/components/advanced/Command/index.js.map +1 -0
  407. package/dist/components/advanced/DragAndDrop/index.js +5 -0
  408. package/dist/components/advanced/DragAndDrop/index.js.map +1 -0
  409. package/dist/components/advanced/ErrorBoundary/index.js +5 -0
  410. package/dist/components/advanced/ErrorBoundary/index.js.map +1 -0
  411. package/dist/components/advanced/EventCalendar/index.js +10 -0
  412. package/dist/components/advanced/EventCalendar/index.js.map +1 -0
  413. package/dist/components/advanced/FileDropzone/index.js +5 -0
  414. package/dist/components/advanced/FileDropzone/index.js.map +1 -0
  415. package/dist/components/advanced/FilePreview/index.js +5 -0
  416. package/dist/components/advanced/FilePreview/index.js.map +1 -0
  417. package/dist/components/advanced/FileUpload/index.js +5 -0
  418. package/dist/components/advanced/FileUpload/index.js.map +1 -0
  419. package/dist/components/advanced/FilterBuilder/index.js +13 -0
  420. package/dist/components/advanced/FilterBuilder/index.js.map +1 -0
  421. package/dist/components/advanced/MarkdownEditor/index.js +9 -0
  422. package/dist/components/advanced/MarkdownEditor/index.js.map +1 -0
  423. package/dist/components/advanced/Portal/index.js +4 -0
  424. package/dist/components/advanced/Portal/index.js.map +1 -0
  425. package/dist/components/advanced/RichTextEditor/index.js +7 -0
  426. package/dist/components/advanced/RichTextEditor/index.js.map +1 -0
  427. package/dist/components/advanced/Search/index.js +5 -0
  428. package/dist/components/advanced/Search/index.js.map +1 -0
  429. package/dist/components/advanced/SortableList/index.js +5 -0
  430. package/dist/components/advanced/SortableList/index.js.map +1 -0
  431. package/dist/components/advanced/VersionControl/index.js +5 -0
  432. package/dist/components/advanced/VersionControl/index.js.map +1 -0
  433. package/dist/components/advanced/index.js +32 -0
  434. package/dist/components/advanced/index.js.map +1 -0
  435. package/dist/components/data-display/Accordion/index.js +5 -0
  436. package/dist/components/data-display/Accordion/index.js.map +1 -0
  437. package/dist/components/data-display/AreaChart/index.js +6 -0
  438. package/dist/components/data-display/AreaChart/index.js.map +1 -0
  439. package/dist/components/data-display/Banner/index.js +5 -0
  440. package/dist/components/data-display/Banner/index.js.map +1 -0
  441. package/dist/components/data-display/BarChart/index.js +6 -0
  442. package/dist/components/data-display/BarChart/index.js.map +1 -0
  443. package/dist/components/data-display/BarList/index.js +5 -0
  444. package/dist/components/data-display/BarList/index.js.map +1 -0
  445. package/dist/components/data-display/Callout/index.js +5 -0
  446. package/dist/components/data-display/Callout/index.js.map +1 -0
  447. package/dist/components/data-display/Carousel/index.js +10 -0
  448. package/dist/components/data-display/Carousel/index.js.map +1 -0
  449. package/dist/components/data-display/CategoryBar/index.js +6 -0
  450. package/dist/components/data-display/CategoryBar/index.js.map +1 -0
  451. package/dist/components/data-display/Chart/index.js +5 -0
  452. package/dist/components/data-display/Chart/index.js.map +1 -0
  453. package/dist/components/data-display/ChartCard/index.js +11 -0
  454. package/dist/components/data-display/ChartCard/index.js.map +1 -0
  455. package/dist/components/data-display/ChartLegend/index.js +6 -0
  456. package/dist/components/data-display/ChartLegend/index.js.map +1 -0
  457. package/dist/components/data-display/ComboChart/index.js +6 -0
  458. package/dist/components/data-display/ComboChart/index.js.map +1 -0
  459. package/dist/components/data-display/DashboardCard/index.js +6 -0
  460. package/dist/components/data-display/DashboardCard/index.js.map +1 -0
  461. package/dist/components/data-display/DashboardFilterbar/index.js +111 -0
  462. package/dist/components/data-display/DashboardFilterbar/index.js.map +1 -0
  463. package/dist/components/data-display/DataTable/FilterBuilder/index.js +13 -0
  464. package/dist/components/data-display/DataTable/FilterBuilder/index.js.map +1 -0
  465. package/dist/components/data-display/DataTable/index.js +22 -0
  466. package/dist/components/data-display/DataTable/index.js.map +1 -0
  467. package/dist/components/data-display/DeltaBar/index.js +6 -0
  468. package/dist/components/data-display/DeltaBar/index.js.map +1 -0
  469. package/dist/components/data-display/EmptyState/index.js +5 -0
  470. package/dist/components/data-display/EmptyState/index.js.map +1 -0
  471. package/dist/components/data-display/Feed/index.js +5 -0
  472. package/dist/components/data-display/Feed/index.js.map +1 -0
  473. package/dist/components/data-display/FunnelChart/index.js +6 -0
  474. package/dist/components/data-display/FunnelChart/index.js.map +1 -0
  475. package/dist/components/data-display/GaugeChart/index.js +5 -0
  476. package/dist/components/data-display/GaugeChart/index.js.map +1 -0
  477. package/dist/components/data-display/Heatmap/index.js +6 -0
  478. package/dist/components/data-display/Heatmap/index.js.map +1 -0
  479. package/dist/components/data-display/HoverCard/index.js +5 -0
  480. package/dist/components/data-display/HoverCard/index.js.map +1 -0
  481. package/dist/components/data-display/ImageGallery/index.js +6 -0
  482. package/dist/components/data-display/ImageGallery/index.js.map +1 -0
  483. package/dist/components/data-display/Item/index.js +6 -0
  484. package/dist/components/data-display/Item/index.js.map +1 -0
  485. package/dist/components/data-display/KPICard/index.js +11 -0
  486. package/dist/components/data-display/KPICard/index.js.map +1 -0
  487. package/dist/components/data-display/Lightbox/index.js +5 -0
  488. package/dist/components/data-display/Lightbox/index.js.map +1 -0
  489. package/dist/components/data-display/LineChart/index.js +6 -0
  490. package/dist/components/data-display/LineChart/index.js.map +1 -0
  491. package/dist/components/data-display/List/index.js +10 -0
  492. package/dist/components/data-display/List/index.js.map +1 -0
  493. package/dist/components/data-display/MarkerBar/index.js +6 -0
  494. package/dist/components/data-display/MarkerBar/index.js.map +1 -0
  495. package/dist/components/data-display/PieChart/index.js +6 -0
  496. package/dist/components/data-display/PieChart/index.js.map +1 -0
  497. package/dist/components/data-display/RadarChart/index.js +6 -0
  498. package/dist/components/data-display/RadarChart/index.js.map +1 -0
  499. package/dist/components/data-display/RadialChart/index.js +6 -0
  500. package/dist/components/data-display/RadialChart/index.js.map +1 -0
  501. package/dist/components/data-display/ScatterChart/index.js +6 -0
  502. package/dist/components/data-display/ScatterChart/index.js.map +1 -0
  503. package/dist/components/data-display/SingleStat/index.js +6 -0
  504. package/dist/components/data-display/SingleStat/index.js.map +1 -0
  505. package/dist/components/data-display/Sparkline/index.js +5 -0
  506. package/dist/components/data-display/Sparkline/index.js.map +1 -0
  507. package/dist/components/data-display/Table/index.js +5 -0
  508. package/dist/components/data-display/Table/index.js.map +1 -0
  509. package/dist/components/data-display/Timeline/index.js +5 -0
  510. package/dist/components/data-display/Timeline/index.js.map +1 -0
  511. package/dist/components/data-display/Tracker/index.js +6 -0
  512. package/dist/components/data-display/Tracker/index.js.map +1 -0
  513. package/dist/components/data-display/VirtualTable/index.js +8 -0
  514. package/dist/components/data-display/VirtualTable/index.js.map +1 -0
  515. package/dist/components/data-display/index.js +63 -0
  516. package/dist/components/data-display/index.js.map +1 -0
  517. package/dist/components/feedback/Alert/index.js +5 -0
  518. package/dist/components/feedback/Alert/index.js.map +1 -0
  519. package/dist/components/feedback/AlertDialog/index.js +10 -0
  520. package/dist/components/feedback/AlertDialog/index.js.map +1 -0
  521. package/dist/components/feedback/ConfirmModal/index.js +11 -0
  522. package/dist/components/feedback/ConfirmModal/index.js.map +1 -0
  523. package/dist/components/feedback/Dialog/index.js +5 -0
  524. package/dist/components/feedback/Dialog/index.js.map +1 -0
  525. package/dist/components/feedback/ErrorPage/index.js +5 -0
  526. package/dist/components/feedback/ErrorPage/index.js.map +1 -0
  527. package/dist/components/feedback/FocusTrap/index.js +5 -0
  528. package/dist/components/feedback/FocusTrap/index.js.map +1 -0
  529. package/dist/components/feedback/Message/index.js +5 -0
  530. package/dist/components/feedback/Message/index.js.map +1 -0
  531. package/dist/components/feedback/Modal/index.js +5 -0
  532. package/dist/components/feedback/Modal/index.js.map +1 -0
  533. package/dist/components/feedback/Notification/index.js +7 -0
  534. package/dist/components/feedback/Notification/index.js.map +1 -0
  535. package/dist/components/feedback/Popover/index.js +5 -0
  536. package/dist/components/feedback/Popover/index.js.map +1 -0
  537. package/dist/components/feedback/Toast/index.js +4 -0
  538. package/dist/components/feedback/Toast/index.js.map +1 -0
  539. package/dist/components/feedback/Tooltip/index.js +5 -0
  540. package/dist/components/feedback/Tooltip/index.js.map +1 -0
  541. package/dist/components/feedback/UpdatesWidget/index.js +5 -0
  542. package/dist/components/feedback/UpdatesWidget/index.js.map +1 -0
  543. package/dist/components/feedback/index.js +23 -0
  544. package/dist/components/feedback/index.js.map +1 -0
  545. package/dist/components/forms/Autocomplete/index.js +5 -0
  546. package/dist/components/forms/Autocomplete/index.js.map +1 -0
  547. package/dist/components/forms/Checkbox/index.js +5 -0
  548. package/dist/components/forms/Checkbox/index.js.map +1 -0
  549. package/dist/components/forms/CheckboxGroup/index.js +6 -0
  550. package/dist/components/forms/CheckboxGroup/index.js.map +1 -0
  551. package/dist/components/forms/ColorPicker/index.js +6 -0
  552. package/dist/components/forms/ColorPicker/index.js.map +1 -0
  553. package/dist/components/forms/Combobox/index.js +5 -0
  554. package/dist/components/forms/Combobox/index.js.map +1 -0
  555. package/dist/components/forms/DatePicker/index.js +13 -0
  556. package/dist/components/forms/DatePicker/index.js.map +1 -0
  557. package/dist/components/forms/DateRangePicker/index.js +13 -0
  558. package/dist/components/forms/DateRangePicker/index.js.map +1 -0
  559. package/dist/components/forms/EmailInput/index.js +7 -0
  560. package/dist/components/forms/EmailInput/index.js.map +1 -0
  561. package/dist/components/forms/ErrorMessage/index.js +5 -0
  562. package/dist/components/forms/ErrorMessage/index.js.map +1 -0
  563. package/dist/components/forms/Field/index.js +7 -0
  564. package/dist/components/forms/Field/index.js.map +1 -0
  565. package/dist/components/forms/FloatLabel/index.js +5 -0
  566. package/dist/components/forms/FloatLabel/index.js.map +1 -0
  567. package/dist/components/forms/Form/index.js +6 -0
  568. package/dist/components/forms/Form/index.js.map +1 -0
  569. package/dist/components/forms/FormValidation/index.js +5 -0
  570. package/dist/components/forms/FormValidation/index.js.map +1 -0
  571. package/dist/components/forms/HelpText/index.js +5 -0
  572. package/dist/components/forms/HelpText/index.js.map +1 -0
  573. package/dist/components/forms/IftaLabel/index.js +5 -0
  574. package/dist/components/forms/IftaLabel/index.js.map +1 -0
  575. package/dist/components/forms/InputGroup/index.js +13 -0
  576. package/dist/components/forms/InputGroup/index.js.map +1 -0
  577. package/dist/components/forms/InputOTP/index.js +5 -0
  578. package/dist/components/forms/InputOTP/index.js.map +1 -0
  579. package/dist/components/forms/InputOTPField/index.js +9 -0
  580. package/dist/components/forms/InputOTPField/index.js.map +1 -0
  581. package/dist/components/forms/MultiSelect/index.js +5 -0
  582. package/dist/components/forms/MultiSelect/index.js.map +1 -0
  583. package/dist/components/forms/NativeSelect/index.js +5 -0
  584. package/dist/components/forms/NativeSelect/index.js.map +1 -0
  585. package/dist/components/forms/NumberInput/index.js +6 -0
  586. package/dist/components/forms/NumberInput/index.js.map +1 -0
  587. package/dist/components/forms/PasswordInput/index.js +7 -0
  588. package/dist/components/forms/PasswordInput/index.js.map +1 -0
  589. package/dist/components/forms/PaymentInput/index.js +5 -0
  590. package/dist/components/forms/PaymentInput/index.js.map +1 -0
  591. package/dist/components/forms/PhoneInput/index.js +5 -0
  592. package/dist/components/forms/PhoneInput/index.js.map +1 -0
  593. package/dist/components/forms/RadioButton/index.js +6 -0
  594. package/dist/components/forms/RadioButton/index.js.map +1 -0
  595. package/dist/components/forms/RadioCardGroup/index.js +5 -0
  596. package/dist/components/forms/RadioCardGroup/index.js.map +1 -0
  597. package/dist/components/forms/RadioGroup/index.js +6 -0
  598. package/dist/components/forms/RadioGroup/index.js.map +1 -0
  599. package/dist/components/forms/Rating/index.js +5 -0
  600. package/dist/components/forms/Rating/index.js.map +1 -0
  601. package/dist/components/forms/SearchInput/index.js +7 -0
  602. package/dist/components/forms/SearchInput/index.js.map +1 -0
  603. package/dist/components/forms/Select/index.js +5 -0
  604. package/dist/components/forms/Select/index.js.map +1 -0
  605. package/dist/components/forms/Slider/index.js +5 -0
  606. package/dist/components/forms/Slider/index.js.map +1 -0
  607. package/dist/components/forms/SuccessMessage/index.js +5 -0
  608. package/dist/components/forms/SuccessMessage/index.js.map +1 -0
  609. package/dist/components/forms/Switch/index.js +5 -0
  610. package/dist/components/forms/Switch/index.js.map +1 -0
  611. package/dist/components/forms/TagsInput/index.js +8 -0
  612. package/dist/components/forms/TagsInput/index.js.map +1 -0
  613. package/dist/components/forms/TextInput/index.js +6 -0
  614. package/dist/components/forms/TextInput/index.js.map +1 -0
  615. package/dist/components/forms/Textarea/index.js +5 -0
  616. package/dist/components/forms/Textarea/index.js.map +1 -0
  617. package/dist/components/forms/TextareaField/index.js +9 -0
  618. package/dist/components/forms/TextareaField/index.js.map +1 -0
  619. package/dist/components/forms/TimePicker/index.js +7 -0
  620. package/dist/components/forms/TimePicker/index.js.map +1 -0
  621. package/dist/components/forms/ToggleGroup/index.js +6 -0
  622. package/dist/components/forms/ToggleGroup/index.js.map +1 -0
  623. package/dist/components/forms/URLInput/index.js +7 -0
  624. package/dist/components/forms/URLInput/index.js.map +1 -0
  625. package/dist/components/forms/index.js +58 -0
  626. package/dist/components/forms/index.js.map +1 -0
  627. package/dist/components/index.js +200 -0
  628. package/dist/components/index.js.map +1 -0
  629. package/dist/components/layout/Card/index.js +5 -0
  630. package/dist/components/layout/Card/index.js.map +1 -0
  631. package/dist/components/layout/Collapsible/index.js +5 -0
  632. package/dist/components/layout/Collapsible/index.js.map +1 -0
  633. package/dist/components/layout/Container/index.js +5 -0
  634. package/dist/components/layout/Container/index.js.map +1 -0
  635. package/dist/components/layout/Flex/index.js +5 -0
  636. package/dist/components/layout/Flex/index.js.map +1 -0
  637. package/dist/components/layout/Grid/index.js +5 -0
  638. package/dist/components/layout/Grid/index.js.map +1 -0
  639. package/dist/components/layout/Panel/index.js +5 -0
  640. package/dist/components/layout/Panel/index.js.map +1 -0
  641. package/dist/components/layout/ResizablePanels/index.js +5 -0
  642. package/dist/components/layout/ResizablePanels/index.js.map +1 -0
  643. package/dist/components/layout/ResponsiveContainer/index.js +5 -0
  644. package/dist/components/layout/ResponsiveContainer/index.js.map +1 -0
  645. package/dist/components/layout/ScrollArea/index.js +5 -0
  646. package/dist/components/layout/ScrollArea/index.js.map +1 -0
  647. package/dist/components/layout/Section/index.js +5 -0
  648. package/dist/components/layout/Section/index.js.map +1 -0
  649. package/dist/components/layout/Sheet/index.js +5 -0
  650. package/dist/components/layout/Sheet/index.js.map +1 -0
  651. package/dist/components/layout/Stack/index.js +5 -0
  652. package/dist/components/layout/Stack/index.js.map +1 -0
  653. package/dist/components/layout/index.js +17 -0
  654. package/dist/components/layout/index.js.map +1 -0
  655. package/dist/components/navigation/AccountSwitch/index.js +10 -0
  656. package/dist/components/navigation/AccountSwitch/index.js.map +1 -0
  657. package/dist/components/navigation/Breadcrumb/index.js +5 -0
  658. package/dist/components/navigation/Breadcrumb/index.js.map +1 -0
  659. package/dist/components/navigation/ContextMenu/index.js +5 -0
  660. package/dist/components/navigation/ContextMenu/index.js.map +1 -0
  661. package/dist/components/navigation/Drawer/index.js +5 -0
  662. package/dist/components/navigation/Drawer/index.js.map +1 -0
  663. package/dist/components/navigation/DropdownMenu/index.js +5 -0
  664. package/dist/components/navigation/DropdownMenu/index.js.map +1 -0
  665. package/dist/components/navigation/FileTree/index.js +5 -0
  666. package/dist/components/navigation/FileTree/index.js.map +1 -0
  667. package/dist/components/navigation/Header/index.js +5 -0
  668. package/dist/components/navigation/Header/index.js.map +1 -0
  669. package/dist/components/navigation/Menu/index.js +5 -0
  670. package/dist/components/navigation/Menu/index.js.map +1 -0
  671. package/dist/components/navigation/Menubar/index.js +5 -0
  672. package/dist/components/navigation/Menubar/index.js.map +1 -0
  673. package/dist/components/navigation/MobileSidebar/index.js +190 -0
  674. package/dist/components/navigation/MobileSidebar/index.js.map +1 -0
  675. package/dist/components/navigation/Navbar/index.js +5 -0
  676. package/dist/components/navigation/Navbar/index.js.map +1 -0
  677. package/dist/components/navigation/NavigationMenu/index.js +5 -0
  678. package/dist/components/navigation/NavigationMenu/index.js.map +1 -0
  679. package/dist/components/navigation/Pagination/index.js +10 -0
  680. package/dist/components/navigation/Pagination/index.js.map +1 -0
  681. package/dist/components/navigation/Sidebar/index.js +16 -0
  682. package/dist/components/navigation/Sidebar/index.js.map +1 -0
  683. package/dist/components/navigation/SkipLinks/index.js +5 -0
  684. package/dist/components/navigation/SkipLinks/index.js.map +1 -0
  685. package/dist/components/navigation/SpeedDial/index.js +6 -0
  686. package/dist/components/navigation/SpeedDial/index.js.map +1 -0
  687. package/dist/components/navigation/TabNavigation/index.js +5 -0
  688. package/dist/components/navigation/TabNavigation/index.js.map +1 -0
  689. package/dist/components/navigation/TabPanel/index.js +5 -0
  690. package/dist/components/navigation/TabPanel/index.js.map +1 -0
  691. package/dist/components/navigation/Tabs/index.js +5 -0
  692. package/dist/components/navigation/Tabs/index.js.map +1 -0
  693. package/dist/components/navigation/Toolbar/index.js +5 -0
  694. package/dist/components/navigation/Toolbar/index.js.map +1 -0
  695. package/dist/components/navigation/Topbar/index.js +5 -0
  696. package/dist/components/navigation/Topbar/index.js.map +1 -0
  697. package/dist/components/navigation/UserProfileDropdown/index.js +224 -0
  698. package/dist/components/navigation/UserProfileDropdown/index.js.map +1 -0
  699. package/dist/components/navigation/WorkspaceDropdown/index.js +192 -0
  700. package/dist/components/navigation/WorkspaceDropdown/index.js.map +1 -0
  701. package/dist/components/navigation/index.js +37 -0
  702. package/dist/components/navigation/index.js.map +1 -0
  703. package/dist/components/primitives/ArrowAnimated/index.js +92 -0
  704. package/dist/components/primitives/ArrowAnimated/index.js.map +1 -0
  705. package/dist/components/primitives/AspectRatio/index.js +4 -0
  706. package/dist/components/primitives/AspectRatio/index.js.map +1 -0
  707. package/dist/components/primitives/Avatar/index.js +6 -0
  708. package/dist/components/primitives/Avatar/index.js.map +1 -0
  709. package/dist/components/primitives/Badge/index.js +7 -0
  710. package/dist/components/primitives/Badge/index.js.map +1 -0
  711. package/dist/components/primitives/Button/index.js +9 -0
  712. package/dist/components/primitives/Button/index.js.map +1 -0
  713. package/dist/components/primitives/ButtonGroup/index.js +7 -0
  714. package/dist/components/primitives/ButtonGroup/index.js.map +1 -0
  715. package/dist/components/primitives/ConfirmButton/index.js +11 -0
  716. package/dist/components/primitives/ConfirmButton/index.js.map +1 -0
  717. package/dist/components/primitives/Divider/index.js +5 -0
  718. package/dist/components/primitives/Divider/index.js.map +1 -0
  719. package/dist/components/primitives/FeatureItem/index.js +5 -0
  720. package/dist/components/primitives/FeatureItem/index.js.map +1 -0
  721. package/dist/components/primitives/FeaturedIcon/index.js +5 -0
  722. package/dist/components/primitives/FeaturedIcon/index.js.map +1 -0
  723. package/dist/components/primitives/FolderStack/index.js +5 -0
  724. package/dist/components/primitives/FolderStack/index.js.map +1 -0
  725. package/dist/components/primitives/Heading/index.js +5 -0
  726. package/dist/components/primitives/Heading/index.js.map +1 -0
  727. package/dist/components/primitives/Icon/index.js +5 -0
  728. package/dist/components/primitives/Icon/index.js.map +1 -0
  729. package/dist/components/primitives/Image/index.js +5 -0
  730. package/dist/components/primitives/Image/index.js.map +1 -0
  731. package/dist/components/primitives/Kbd/index.js +5 -0
  732. package/dist/components/primitives/Kbd/index.js.map +1 -0
  733. package/dist/components/primitives/Label/index.js +5 -0
  734. package/dist/components/primitives/Label/index.js.map +1 -0
  735. package/dist/components/primitives/Link/index.js +5 -0
  736. package/dist/components/primitives/Link/index.js.map +1 -0
  737. package/dist/components/primitives/Paragraph/index.js +5 -0
  738. package/dist/components/primitives/Paragraph/index.js.map +1 -0
  739. package/dist/components/primitives/ProgressBar/index.js +6 -0
  740. package/dist/components/primitives/ProgressBar/index.js.map +1 -0
  741. package/dist/components/primitives/ProgressCircle/index.js +6 -0
  742. package/dist/components/primitives/ProgressCircle/index.js.map +1 -0
  743. package/dist/components/primitives/SkeletonLoader/index.js +5 -0
  744. package/dist/components/primitives/SkeletonLoader/index.js.map +1 -0
  745. package/dist/components/primitives/Spacer/index.js +5 -0
  746. package/dist/components/primitives/Spacer/index.js.map +1 -0
  747. package/dist/components/primitives/Spinner/index.js +5 -0
  748. package/dist/components/primitives/Spinner/index.js.map +1 -0
  749. package/dist/components/primitives/SplitButton/index.js +6 -0
  750. package/dist/components/primitives/SplitButton/index.js.map +1 -0
  751. package/dist/components/primitives/StatusIndicator/index.js +5 -0
  752. package/dist/components/primitives/StatusIndicator/index.js.map +1 -0
  753. package/dist/components/primitives/Tag/index.js +5 -0
  754. package/dist/components/primitives/Tag/index.js.map +1 -0
  755. package/dist/components/primitives/Text/index.js +5 -0
  756. package/dist/components/primitives/Text/index.js.map +1 -0
  757. package/dist/components/primitives/Thumbnail/index.js +6 -0
  758. package/dist/components/primitives/Thumbnail/index.js.map +1 -0
  759. package/dist/components/primitives/Toggle/index.js +5 -0
  760. package/dist/components/primitives/Toggle/index.js.map +1 -0
  761. package/dist/components/primitives/index.js +38 -0
  762. package/dist/components/primitives/index.js.map +1 -0
  763. package/dist/components/workflow/ApprovalFlow/index.js +11 -0
  764. package/dist/components/workflow/ApprovalFlow/index.js.map +1 -0
  765. package/dist/components/workflow/ApprovalStatus/index.js +5 -0
  766. package/dist/components/workflow/ApprovalStatus/index.js.map +1 -0
  767. package/dist/components/workflow/CommentSystem/index.js +12 -0
  768. package/dist/components/workflow/CommentSystem/index.js.map +1 -0
  769. package/dist/components/workflow/Dashboard/index.js +10 -0
  770. package/dist/components/workflow/Dashboard/index.js.map +1 -0
  771. package/dist/components/workflow/DashboardBuilder/index.js +13 -0
  772. package/dist/components/workflow/DashboardBuilder/index.js.map +1 -0
  773. package/dist/components/workflow/KanbanBoard/index.js +13 -0
  774. package/dist/components/workflow/KanbanBoard/index.js.map +1 -0
  775. package/dist/components/workflow/ProgressSteps/index.js +5 -0
  776. package/dist/components/workflow/ProgressSteps/index.js.map +1 -0
  777. package/dist/components/workflow/ReportGenerator/index.js +12 -0
  778. package/dist/components/workflow/ReportGenerator/index.js.map +1 -0
  779. package/dist/components/workflow/Stepper/index.js +5 -0
  780. package/dist/components/workflow/Stepper/index.js.map +1 -0
  781. package/dist/components/workflow/TaskCard/index.js +5 -0
  782. package/dist/components/workflow/TaskCard/index.js.map +1 -0
  783. package/dist/components/workflow/TaskList/index.js +5 -0
  784. package/dist/components/workflow/TaskList/index.js.map +1 -0
  785. package/dist/components/workflow/TaskStatus/index.js +6 -0
  786. package/dist/components/workflow/TaskStatus/index.js.map +1 -0
  787. package/dist/components/workflow/Wizard/index.js +11 -0
  788. package/dist/components/workflow/Wizard/index.js.map +1 -0
  789. package/dist/components/workflow/index.js +32 -0
  790. package/dist/components/workflow/index.js.map +1 -0
  791. package/dist/hooks/index.js +6 -0
  792. package/dist/hooks/index.js.map +1 -0
  793. package/dist/index.d.ts +6 -1
  794. package/dist/index.js +201 -52429
  795. package/dist/index.js.map +1 -1
  796. package/dist/jspdf.node.min-CTWP225M.js +372 -656
  797. package/dist/jspdf.node.min-CTWP225M.js.map +1 -1
  798. package/dist/jspdf.plugin.autotable-AAE7PZKA.js +4 -14
  799. package/dist/jspdf.plugin.autotable-AAE7PZKA.js.map +1 -1
  800. package/dist/lib/chart-colors.js +4 -0
  801. package/dist/lib/chart-colors.js.map +1 -0
  802. package/dist/lib/utils.js +3 -7
  803. package/dist/lib/utils.js.map +1 -1
  804. package/dist/styles.css +5265 -0
  805. package/dist/xlsx-PWHBQ6NK.js +206 -366
  806. package/dist/xlsx-PWHBQ6NK.js.map +1 -1
  807. package/package.json +11 -7
  808. package/styles.css +0 -1
@@ -0,0 +1,4497 @@
1
+ import { FilterBuilder, isFilterGroup, isFilterCondition } from './chunk-DZALMUQD.js';
2
+ import { Table, TableRow, TableHeader, TableHead, TableBody, TableCell, TableFooter } from './chunk-65YSTUD2.js';
3
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuSeparator, ContextMenuItem } from './chunk-4Y72SPNL.js';
4
+ import { Checkbox } from './chunk-XETKCF73.js';
5
+ import { SkeletonLoader } from './chunk-QHKOBGLW.js';
6
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuItem } from './chunk-FSMHI7DW.js';
7
+ import { useMediaQuery } from './chunk-Y555RCRZ.js';
8
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-WBE6VQOO.js';
9
+ import { TextInput } from './chunk-PWCMCMDN.js';
10
+ import { Popover, PopoverTrigger, PopoverContent } from './chunk-AFCSDND5.js';
11
+ import { Button } from './chunk-RPV77BCQ.js';
12
+ import { Badge } from './chunk-KOTCWE7V.js';
13
+ import { cn } from './chunk-HRNDJU7D.js';
14
+ import * as React14 from 'react';
15
+ import { cva } from 'class-variance-authority';
16
+ import { useReactTable, getFacetedUniqueValues, getFacetedRowModel, getExpandedRowModel, getPaginationRowModel, getGroupedRowModel, getFilteredRowModel, getSortedRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
17
+ import { Star, Check, X, Search, Columns3, GripHorizontal, StretchHorizontal, AlignJustify, Download, FileText, FileSpreadsheet, Printer, ChevronUp, ChevronDown, ChevronRight, GripVertical, Plus, ChevronsLeft, ChevronLeft, ChevronsRight, ArrowUp, ArrowDown, ArrowUpDown, Group, MoreVertical, PinIcon, PinOff, Ruler, RotateCcw, EyeOff, ChevronsUpDown } from 'lucide-react';
18
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
19
+ import { useSensors, useSensor, PointerSensor, DndContext, closestCenter } from '@dnd-kit/core';
20
+ import { arrayMove, SortableContext, horizontalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
21
+ import { CSS } from '@dnd-kit/utilities';
22
+ import { useVirtualizer } from '@tanstack/react-virtual';
23
+
24
+ var dataTableVariants = cva(
25
+ // Base styles (always applied)
26
+ "space-y-4",
27
+ {
28
+ variants: {
29
+ density: {
30
+ compact: "[&_td]:py-[var(--datatable-row-padding-y-compact)] [&_th]:py-[var(--datatable-header-padding-y-compact)]",
31
+ default: "[&_td]:py-[var(--datatable-row-padding-y-default)] [&_th]:py-[var(--datatable-header-padding-y-default)]",
32
+ comfortable: "[&_td]:py-[var(--datatable-row-padding-y-comfortable)] [&_th]:py-[var(--datatable-header-padding-y-comfortable)]"
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ density: "default"
37
+ }
38
+ }
39
+ );
40
+ var dataTableRowVariants = cva(
41
+ // Base styles (always applied)
42
+ "transition-colors",
43
+ {
44
+ variants: {
45
+ state: {
46
+ default: "",
47
+ selected: "bg-[color:var(--datatable-row-bg-selected)]",
48
+ highlighted: "bg-[color:var(--datatable-row-bg-highlighted)]/5"
49
+ },
50
+ interactive: {
51
+ true: "cursor-pointer hover:bg-[color:var(--datatable-row-bg-hover)]/50",
52
+ false: ""
53
+ }
54
+ },
55
+ defaultVariants: {
56
+ state: "default",
57
+ interactive: false
58
+ }
59
+ }
60
+ );
61
+ var dataTableHeaderVariants = cva(
62
+ // Base styles (always applied)
63
+ "text-muted-foreground",
64
+ {
65
+ variants: {
66
+ sortable: {
67
+ true: "cursor-pointer select-none hover:text-foreground",
68
+ false: ""
69
+ },
70
+ sorted: {
71
+ asc: "text-foreground",
72
+ desc: "text-foreground",
73
+ none: ""
74
+ }
75
+ },
76
+ defaultVariants: {
77
+ sortable: false,
78
+ sorted: "none"
79
+ }
80
+ }
81
+ );
82
+ var dataTableResizeHandleVariants = cva(
83
+ // Base styles (always applied)
84
+ [
85
+ "absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none",
86
+ "bg-transparent hover:bg-[color:var(--border-default)]",
87
+ "transition-colors duration-150"
88
+ ],
89
+ {
90
+ variants: {
91
+ isResizing: {
92
+ true: "bg-[color:var(--primary)] w-0.5",
93
+ false: ""
94
+ }
95
+ },
96
+ defaultVariants: {
97
+ isResizing: false
98
+ }
99
+ }
100
+ );
101
+
102
+ // src/components/data-display/DataTable/DataTable.types.ts
103
+ function isEditableColumnMeta(meta) {
104
+ return meta !== null && typeof meta === "object" && "editable" in meta;
105
+ }
106
+ function isSpanColumnMeta(meta) {
107
+ return meta !== null && typeof meta === "object" && ("colSpan" in meta || "rowSpan" in meta);
108
+ }
109
+ function highlightText(text, query) {
110
+ if (!query || !text) return text;
111
+ const escapedQuery = query.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
112
+ const regex = new RegExp(`(${escapedQuery})`, "gi");
113
+ const parts = text.split(regex);
114
+ if (parts.length === 1) return text;
115
+ return parts.map(
116
+ (part, index) => regex.test(part) ? /* @__PURE__ */ jsx("mark", { className: "bg-yellow-200 text-inherit dark:bg-yellow-800", children: part }, `hl-${String(index)}`) : part
117
+ );
118
+ }
119
+ function DataTableCellInner({
120
+ cancelEdit,
121
+ cell,
122
+ cellClassName,
123
+ colIndex,
124
+ colSpan,
125
+ editTrigger,
126
+ editValue,
127
+ editError,
128
+ editingCell,
129
+ enableColumnPinning,
130
+ enableEditing,
131
+ enableKeyboardNavigation,
132
+ enableSearchHighlight,
133
+ focusedCell,
134
+ globalFilter,
135
+ getPinnedAttribute,
136
+ getPinnedStyles,
137
+ handleCellFocus,
138
+ row,
139
+ rowSpan,
140
+ setEditInputRef,
141
+ setEditValue,
142
+ startEdit,
143
+ submitEdit
144
+ }) {
145
+ const rowIndex = row.index;
146
+ const isFocused = enableKeyboardNavigation && focusedCell !== null && focusedCell.row === rowIndex && focusedCell.col === colIndex;
147
+ const isEditing = editingCell !== null && editingCell.rowId === row.id && editingCell.columnId === cell.column.id;
148
+ const meta = isEditableColumnMeta(cell.column.columnDef.meta) ? cell.column.columnDef.meta : void 0;
149
+ const isEditable = enableEditing && meta?.editable;
150
+ const cellValue = cell.getValue();
151
+ const handleEditTrigger = () => {
152
+ if (isEditable) {
153
+ startEdit(row.id, cell.column.id, cellValue, cell.column);
154
+ }
155
+ };
156
+ const renderEditInput = () => {
157
+ const editType = meta?.editType ?? "text";
158
+ const editOptions = meta?.editOptions ?? [];
159
+ const handleKeyDown = (e) => {
160
+ if (e.key === "Enter") {
161
+ e.preventDefault();
162
+ void submitEdit(row, cell.column, cellValue);
163
+ } else if (e.key === "Escape") {
164
+ e.preventDefault();
165
+ cancelEdit(row, cell.column, cellValue);
166
+ }
167
+ };
168
+ if (editType === "select") {
169
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
170
+ /* @__PURE__ */ jsx(
171
+ "select",
172
+ {
173
+ ref: setEditInputRef,
174
+ "aria-label": "Edit cell",
175
+ className: "h-8 w-full rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
176
+ value: String(editValue),
177
+ onBlur: () => {
178
+ void submitEdit(row, cell.column, cellValue);
179
+ },
180
+ onChange: (e) => {
181
+ setEditValue(e.target.value);
182
+ },
183
+ onKeyDown: handleKeyDown,
184
+ children: editOptions.map((option) => /* @__PURE__ */ jsx("option", { value: option, children: option }, option))
185
+ }
186
+ ),
187
+ editError && /* @__PURE__ */ jsx("span", { className: "text-xs text-[color:var(--input-border-error)]", children: editError })
188
+ ] });
189
+ }
190
+ if (editType === "checkbox") {
191
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
192
+ /* @__PURE__ */ jsx(
193
+ "input",
194
+ {
195
+ ref: setEditInputRef,
196
+ "aria-label": "Edit cell",
197
+ checked: Boolean(editValue),
198
+ className: "size-4 rounded border border-input",
199
+ type: "checkbox",
200
+ onChange: (e) => {
201
+ setEditValue(e.target.checked);
202
+ void submitEdit(row, cell.column, cellValue);
203
+ },
204
+ onKeyDown: handleKeyDown
205
+ }
206
+ ),
207
+ editError && /* @__PURE__ */ jsx("span", { className: "text-xs text-[color:var(--input-border-error)]", children: editError })
208
+ ] });
209
+ }
210
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
211
+ /* @__PURE__ */ jsx(
212
+ "input",
213
+ {
214
+ ref: setEditInputRef,
215
+ "aria-label": "Edit cell",
216
+ className: "h-8 w-full rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
217
+ type: editType === "number" ? "number" : editType === "date" ? "date" : "text",
218
+ value: editType === "number" ? editValue : typeof editValue === "string" || typeof editValue === "number" ? String(editValue) : "",
219
+ onBlur: () => {
220
+ void submitEdit(row, cell.column, cellValue);
221
+ },
222
+ onChange: (e) => {
223
+ setEditValue(editType === "number" ? e.target.valueAsNumber : e.target.value);
224
+ },
225
+ onKeyDown: handleKeyDown
226
+ }
227
+ ),
228
+ editError && /* @__PURE__ */ jsx("span", { className: "text-xs text-[color:var(--input-border-error)]", children: editError })
229
+ ] });
230
+ };
231
+ return /* @__PURE__ */ jsx(
232
+ TableCell,
233
+ {
234
+ className: cn(
235
+ enableColumnPinning && cell.column.getIsPinned() && "sticky",
236
+ isEditable && "cursor-pointer",
237
+ cellClassName?.(cell.column.id, row)
238
+ ),
239
+ colSpan,
240
+ "data-col": enableKeyboardNavigation ? colIndex : void 0,
241
+ "data-column-id": cell.column.id,
242
+ "data-pinned": getPinnedAttribute(cell.column),
243
+ "data-row": enableKeyboardNavigation ? rowIndex : void 0,
244
+ role: enableKeyboardNavigation ? "gridcell" : void 0,
245
+ rowSpan,
246
+ style: getPinnedStyles(cell.column),
247
+ tabIndex: enableKeyboardNavigation ? isFocused ? 0 : -1 : void 0,
248
+ onClick: editTrigger === "click" && isEditable && !isEditing ? (e) => {
249
+ e.stopPropagation();
250
+ handleEditTrigger();
251
+ } : void 0,
252
+ onDoubleClick: editTrigger === "dblclick" && isEditable && !isEditing ? (e) => {
253
+ e.stopPropagation();
254
+ handleEditTrigger();
255
+ } : void 0,
256
+ onFocus: enableKeyboardNavigation ? () => {
257
+ handleCellFocus(rowIndex, colIndex);
258
+ } : void 0,
259
+ children: isEditing ? renderEditInput() : enableSearchHighlight && globalFilter && !cell.column.columnDef.cell && (typeof cellValue === "string" || typeof cellValue === "number") ? highlightText(String(cellValue), globalFilter) : flexRender(cell.column.columnDef.cell, cell.getContext())
260
+ },
261
+ cell.id
262
+ );
263
+ }
264
+ var DataTableCell = DataTableCellInner;
265
+ function DataTableBodyInner({
266
+ cancelEdit,
267
+ cellClassName,
268
+ columnVirtualizer,
269
+ contextMenuItems,
270
+ dragHandleProps,
271
+ editTrigger,
272
+ editValue,
273
+ editError,
274
+ editingCell,
275
+ enableColumnPinning,
276
+ enableEditing,
277
+ enableGrouping,
278
+ enableKeyboardNavigation,
279
+ enableRowAnimation,
280
+ enableRowColumnSpanning,
281
+ enableRowReordering,
282
+ enableSearchHighlight,
283
+ enableStriping,
284
+ enableVirtualization,
285
+ containerRef,
286
+ focusedCell,
287
+ globalFilter,
288
+ getPinnedAttribute,
289
+ getPinnedStyles,
290
+ handleCellFocus,
291
+ hasFooter,
292
+ onRowClick,
293
+ renderSubComponent,
294
+ rowClassName,
295
+ rowVirtualizer,
296
+ setEditInputRef,
297
+ setEditValue,
298
+ startEdit,
299
+ submitEdit,
300
+ table,
301
+ tableColumns
302
+ }) {
303
+ const rows = table.getRowModel().rows;
304
+ const virtualItems = rowVirtualizer?.getVirtualItems();
305
+ const isVirtual = enableVirtualization && rowVirtualizer && virtualItems;
306
+ const ROW_ANIMATION_DURATION = 300;
307
+ const rowPositionsRef = React14.useRef(/* @__PURE__ */ new Map());
308
+ const isFirstRenderRef = React14.useRef(true);
309
+ React14.useLayoutEffect(() => {
310
+ if (!enableRowAnimation) return;
311
+ const container = containerRef?.current;
312
+ const tbody = container ? container.querySelector("tbody") : document.querySelector('[data-slot="data-table"] tbody');
313
+ if (!tbody) return;
314
+ const trs = tbody.querySelectorAll("tr[data-row-id]");
315
+ if (isFirstRenderRef.current) {
316
+ isFirstRenderRef.current = false;
317
+ for (const tr of trs) {
318
+ const rowId = tr.dataset["rowId"];
319
+ if (rowId) rowPositionsRef.current.set(rowId, tr.getBoundingClientRect().top);
320
+ }
321
+ return;
322
+ }
323
+ const cleanupFns = [];
324
+ for (const tr of trs) {
325
+ const rowId = tr.dataset["rowId"];
326
+ if (!rowId) continue;
327
+ const previousTop = rowPositionsRef.current.get(rowId);
328
+ if (previousTop === void 0) continue;
329
+ const currentTop = tr.getBoundingClientRect().top;
330
+ const delta = previousTop - currentTop;
331
+ if (Math.abs(delta) < 1) continue;
332
+ tr.style.transform = `translateY(${String(delta)}px)`;
333
+ tr.style.transition = "none";
334
+ tr.offsetHeight;
335
+ tr.style.transition = `transform ${String(ROW_ANIMATION_DURATION)}ms ease-out`;
336
+ tr.style.transform = "";
337
+ const onEnd = () => {
338
+ tr.style.transition = "";
339
+ tr.style.transform = "";
340
+ tr.removeEventListener("transitionend", onEnd);
341
+ };
342
+ tr.addEventListener("transitionend", onEnd);
343
+ cleanupFns.push(() => {
344
+ tr.removeEventListener("transitionend", onEnd);
345
+ });
346
+ }
347
+ const newPositions = /* @__PURE__ */ new Map();
348
+ for (const tr of trs) {
349
+ const rowId = tr.dataset["rowId"];
350
+ if (rowId) newPositions.set(rowId, tr.getBoundingClientRect().top);
351
+ }
352
+ rowPositionsRef.current = newPositions;
353
+ return () => {
354
+ for (const fn of cleanupFns) fn();
355
+ };
356
+ }, [rows, enableRowAnimation, containerRef]);
357
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
358
+ /* @__PURE__ */ jsx(
359
+ TableBody,
360
+ {
361
+ style: isVirtual ? {
362
+ height: `${String(rowVirtualizer.getTotalSize())}px`,
363
+ position: "relative"
364
+ } : void 0,
365
+ children: rows.length ? (
366
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- row rendering with grouping, virtualization, and context menu
367
+ (isVirtual ? virtualItems : rows).map((itemOrRow) => {
368
+ const row = isVirtual ? rows[itemOrRow.index] : itemOrRow;
369
+ const virtualRow = isVirtual ? itemOrRow : null;
370
+ const virtualRowStyle = virtualRow ? {
371
+ position: "absolute",
372
+ top: 0,
373
+ left: 0,
374
+ width: "100%",
375
+ height: `${String(virtualRow.size)}px`,
376
+ transform: `translateY(${String(virtualRow.start)}px)`
377
+ } : void 0;
378
+ if (enableGrouping && row.getIsGrouped()) {
379
+ return /* @__PURE__ */ jsxs(React14.Fragment, { children: [
380
+ /* @__PURE__ */ jsx(
381
+ TableRow,
382
+ {
383
+ ref: virtualRow && rowVirtualizer ? rowVirtualizer.measureElement : void 0,
384
+ className: cn(
385
+ "bg-muted/30 font-medium",
386
+ typeof rowClassName === "function" ? rowClassName(row) : rowClassName
387
+ ),
388
+ "data-index": virtualRow?.index,
389
+ style: virtualRowStyle,
390
+ children: row.getVisibleCells().map((cell) => {
391
+ const isGroupedCell = cell.getIsGrouped();
392
+ const isAggregated = cell.getIsAggregated();
393
+ const isPlaceholder = cell.getIsPlaceholder();
394
+ return /* @__PURE__ */ jsx(
395
+ TableCell,
396
+ {
397
+ className: cn(
398
+ enableColumnPinning && cell.column.getIsPinned() && "sticky",
399
+ cellClassName?.(cell.column.id, row)
400
+ ),
401
+ "data-column-id": cell.column.id,
402
+ "data-pinned": getPinnedAttribute(cell.column),
403
+ style: getPinnedStyles(cell.column),
404
+ children: isGroupedCell ? /* @__PURE__ */ jsxs(
405
+ "button",
406
+ {
407
+ className: "flex items-center gap-1.5 text-left",
408
+ type: "button",
409
+ onClick: (e) => {
410
+ e.stopPropagation();
411
+ row.toggleExpanded();
412
+ },
413
+ children: [
414
+ row.getIsExpanded() ? /* @__PURE__ */ jsx(ChevronDown, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "size-4 shrink-0" }),
415
+ /* @__PURE__ */ jsx("span", { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }),
416
+ /* @__PURE__ */ jsxs("span", { className: "ml-1 text-xs text-muted-foreground", children: [
417
+ "(",
418
+ row.subRows.length,
419
+ ")"
420
+ ] })
421
+ ]
422
+ }
423
+ ) : isAggregated ? flexRender(
424
+ cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell,
425
+ cell.getContext()
426
+ ) : isPlaceholder ? null : flexRender(cell.column.columnDef.cell, cell.getContext())
427
+ },
428
+ cell.id
429
+ );
430
+ })
431
+ }
432
+ ),
433
+ row.getIsExpanded() && row.subRows.map((subRow) => {
434
+ const subTableRow = /* @__PURE__ */ jsx(
435
+ TableRow,
436
+ {
437
+ className: cn(
438
+ dataTableRowVariants({
439
+ state: subRow.getIsSelected() ? "selected" : "default",
440
+ interactive: !!onRowClick
441
+ }),
442
+ enableStriping && subRow.index % 2 === 1 && "bg-muted/50",
443
+ typeof rowClassName === "function" ? rowClassName(subRow) : rowClassName
444
+ ),
445
+ "data-state": subRow.getIsSelected() ? "selected" : void 0,
446
+ onClick: onRowClick ? () => {
447
+ onRowClick(subRow.original);
448
+ } : void 0,
449
+ children: subRow.getVisibleCells().map((cell, colIndex) => /* @__PURE__ */ jsx(
450
+ DataTableCell,
451
+ {
452
+ cancelEdit,
453
+ cell,
454
+ cellClassName,
455
+ colIndex,
456
+ editError,
457
+ editingCell,
458
+ editTrigger,
459
+ editValue,
460
+ enableColumnPinning,
461
+ enableEditing,
462
+ enableKeyboardNavigation,
463
+ enableSearchHighlight,
464
+ focusedCell,
465
+ getPinnedAttribute,
466
+ getPinnedStyles,
467
+ globalFilter,
468
+ handleCellFocus,
469
+ row: subRow,
470
+ setEditInputRef,
471
+ setEditValue,
472
+ startEdit,
473
+ submitEdit
474
+ },
475
+ cell.id
476
+ ))
477
+ },
478
+ subRow.id
479
+ );
480
+ return /* @__PURE__ */ jsx(React14.Fragment, { children: contextMenuItems && contextMenuItems.length > 0 ? /* @__PURE__ */ jsxs(ContextMenu, { children: [
481
+ /* @__PURE__ */ jsx(ContextMenuTrigger, { asChild: true, children: subTableRow }),
482
+ /* @__PURE__ */ jsx(ContextMenuContent, { className: "w-48", children: contextMenuItems.map((item) => /* @__PURE__ */ jsxs(React14.Fragment, { children: [
483
+ item.separator && /* @__PURE__ */ jsx(ContextMenuSeparator, {}),
484
+ /* @__PURE__ */ jsxs(
485
+ ContextMenuItem,
486
+ {
487
+ className: item.variant === "destructive" ? "text-destructive" : void 0,
488
+ onClick: () => {
489
+ item.onClick(subRow.original);
490
+ },
491
+ children: [
492
+ item.icon && /* @__PURE__ */ jsx("span", { className: "mr-2", children: item.icon }),
493
+ item.label
494
+ ]
495
+ }
496
+ )
497
+ ] }, item.label)) })
498
+ ] }) : subTableRow }, subRow.id);
499
+ })
500
+ ] }, virtualRow ? virtualRow.key : row.id);
501
+ }
502
+ const tableRow = /* @__PURE__ */ jsxs(
503
+ TableRow,
504
+ {
505
+ ref: virtualRow && rowVirtualizer ? rowVirtualizer.measureElement : void 0,
506
+ className: cn(
507
+ dataTableRowVariants({
508
+ state: row.getIsSelected() ? "selected" : "default",
509
+ interactive: !!onRowClick
510
+ }),
511
+ enableStriping && row.index % 2 === 1 && "bg-muted/50",
512
+ typeof rowClassName === "function" ? rowClassName(row) : rowClassName,
513
+ enableRowReordering && "group/row"
514
+ ),
515
+ "data-index": virtualRow?.index,
516
+ "data-row-id": enableRowAnimation ? row.id : void 0,
517
+ "data-state": row.getIsSelected() ? "selected" : void 0,
518
+ style: virtualRowStyle,
519
+ onClick: onRowClick ? () => {
520
+ onRowClick(row.original);
521
+ } : void 0,
522
+ ...enableRowReordering ? dragHandleProps?.(row.index) : void 0,
523
+ children: [
524
+ enableRowReordering && /* @__PURE__ */ jsx(TableCell, { className: "w-8 px-1", children: /* @__PURE__ */ jsx(GripVertical, { className: "text-muted-foreground size-4 cursor-grab opacity-0 transition-opacity group-hover/row:opacity-100" }) }),
525
+ (() => {
526
+ const visibleCells = row.getVisibleCells();
527
+ const virtualColItems = columnVirtualizer?.getVirtualItems();
528
+ const cellItems = virtualColItems ? virtualColItems.filter((virtualCol) => visibleCells[virtualCol.index] != null).map((virtualCol) => ({
529
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- filtered above
530
+ cell: visibleCells[virtualCol.index],
531
+ colIndex: virtualCol.index
532
+ })) : visibleCells.map((cell, index) => ({ cell, colIndex: index }));
533
+ return cellItems.map(({ cell, colIndex }) => {
534
+ let colSpan;
535
+ let rowSpan;
536
+ if (enableRowColumnSpanning) {
537
+ const spanMeta = isSpanColumnMeta(cell.column.columnDef.meta) ? cell.column.columnDef.meta : void 0;
538
+ if (spanMeta) {
539
+ colSpan = spanMeta.colSpan?.(row);
540
+ rowSpan = spanMeta.rowSpan?.(row);
541
+ if (colSpan === 0 || rowSpan === 0) return null;
542
+ }
543
+ }
544
+ return /* @__PURE__ */ jsx(
545
+ DataTableCell,
546
+ {
547
+ cancelEdit,
548
+ cell,
549
+ cellClassName,
550
+ colIndex,
551
+ colSpan,
552
+ editError,
553
+ editingCell,
554
+ editTrigger,
555
+ editValue,
556
+ enableColumnPinning,
557
+ enableEditing,
558
+ enableKeyboardNavigation,
559
+ enableSearchHighlight,
560
+ focusedCell,
561
+ getPinnedAttribute,
562
+ getPinnedStyles,
563
+ globalFilter,
564
+ handleCellFocus,
565
+ row,
566
+ rowSpan,
567
+ setEditInputRef,
568
+ setEditValue,
569
+ startEdit,
570
+ submitEdit
571
+ },
572
+ cell.id
573
+ );
574
+ });
575
+ })()
576
+ ]
577
+ }
578
+ );
579
+ return /* @__PURE__ */ jsxs(React14.Fragment, { children: [
580
+ contextMenuItems && contextMenuItems.length > 0 ? /* @__PURE__ */ jsxs(ContextMenu, { children: [
581
+ /* @__PURE__ */ jsx(ContextMenuTrigger, { asChild: true, children: tableRow }),
582
+ /* @__PURE__ */ jsx(ContextMenuContent, { className: "w-48", children: contextMenuItems.map((item) => /* @__PURE__ */ jsxs(React14.Fragment, { children: [
583
+ item.separator && /* @__PURE__ */ jsx(ContextMenuSeparator, {}),
584
+ /* @__PURE__ */ jsxs(
585
+ ContextMenuItem,
586
+ {
587
+ className: item.variant === "destructive" ? "text-destructive" : void 0,
588
+ onClick: () => {
589
+ item.onClick(row.original);
590
+ },
591
+ children: [
592
+ item.icon && /* @__PURE__ */ jsx("span", { className: "mr-2", children: item.icon }),
593
+ item.label
594
+ ]
595
+ }
596
+ )
597
+ ] }, item.label)) })
598
+ ] }) : tableRow,
599
+ row.getIsExpanded() && renderSubComponent && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: row.getVisibleCells().length, children: renderSubComponent({ row }) }) })
600
+ ] }, virtualRow ? virtualRow.key : row.id);
601
+ })
602
+ ) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
603
+ TableCell,
604
+ {
605
+ className: "h-24 text-center",
606
+ colSpan: tableColumns.length,
607
+ children: "No results."
608
+ }
609
+ ) })
610
+ }
611
+ ),
612
+ hasFooter && /* @__PURE__ */ jsx(TableFooter, { children: table.getFooterGroups().map((footerGroup) => /* @__PURE__ */ jsx(TableRow, { children: footerGroup.headers.map((header) => /* @__PURE__ */ jsx(TableCell, { children: header.isPlaceholder ? null : flexRender(
613
+ header.column.columnDef.footer,
614
+ header.getContext()
615
+ ) }, header.id)) }, footerGroup.id)) })
616
+ ] });
617
+ }
618
+ var DataTableBody = DataTableBodyInner;
619
+ function DataTableBulkActionsInner({
620
+ actions,
621
+ table
622
+ }) {
623
+ const selectedRows = table.getFilteredSelectedRowModel().flatRows;
624
+ if (selectedRows.length === 0) return null;
625
+ const selectedData = selectedRows.map((row) => row.original);
626
+ return /* @__PURE__ */ jsxs(
627
+ "div",
628
+ {
629
+ className: "flex items-center gap-2 rounded-lg border bg-muted/50 px-4 py-2",
630
+ "data-slot": "data-table-bulk-actions",
631
+ children: [
632
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium", children: [
633
+ selectedRows.length,
634
+ " selected"
635
+ ] }),
636
+ /* @__PURE__ */ jsx("div", { className: "ml-2 flex items-center gap-2", children: actions.map((action) => /* @__PURE__ */ jsxs(
637
+ Button,
638
+ {
639
+ size: "sm",
640
+ variant: action.variant ?? "outline",
641
+ onClick: () => {
642
+ action.onClick(selectedData);
643
+ },
644
+ children: [
645
+ action.icon,
646
+ action.label
647
+ ]
648
+ },
649
+ action.label
650
+ )) })
651
+ ]
652
+ }
653
+ );
654
+ }
655
+ var DataTableBulkActions = DataTableBulkActionsInner;
656
+ var UTILITY_COLUMN_IDS = /* @__PURE__ */ new Set(["select", "_row_number"]);
657
+ function DataTableCardViewInner({
658
+ onRowClick,
659
+ rowClassName,
660
+ table
661
+ }) {
662
+ const rows = table.getRowModel().rows;
663
+ if (rows.length === 0) {
664
+ return /* @__PURE__ */ jsx(
665
+ "div",
666
+ {
667
+ className: "flex flex-col items-center justify-center py-12 text-center",
668
+ "data-slot": "data-table-card-view-empty",
669
+ children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "No results." })
670
+ }
671
+ );
672
+ }
673
+ return /* @__PURE__ */ jsx("div", { className: "space-y-3", "data-slot": "data-table-card-view", children: rows.map((row) => {
674
+ const visibleCells = row.getVisibleCells().filter(
675
+ (cell) => !UTILITY_COLUMN_IDS.has(cell.column.id)
676
+ );
677
+ return /* @__PURE__ */ jsx(
678
+ "div",
679
+ {
680
+ className: cn(
681
+ "rounded-lg border p-4",
682
+ "bg-[color:var(--surface-default)]",
683
+ onRowClick && "cursor-pointer hover:bg-[color:var(--surface-hover)]",
684
+ typeof rowClassName === "function" ? rowClassName(row) : rowClassName
685
+ ),
686
+ role: onRowClick ? "button" : void 0,
687
+ tabIndex: onRowClick ? 0 : void 0,
688
+ onClick: onRowClick ? () => {
689
+ onRowClick(row.original);
690
+ } : void 0,
691
+ onKeyDown: onRowClick ? (e) => {
692
+ if (e.key === "Enter" || e.key === " ") {
693
+ e.preventDefault();
694
+ onRowClick(row.original);
695
+ }
696
+ } : void 0,
697
+ children: /* @__PURE__ */ jsx("div", { className: "space-y-2", children: visibleCells.map((cell) => {
698
+ const headerDef = cell.column.columnDef.header;
699
+ const label = typeof headerDef === "string" ? headerDef : cell.column.id;
700
+ return /* @__PURE__ */ jsxs(
701
+ "div",
702
+ {
703
+ className: "flex items-start justify-between gap-4",
704
+ "data-column-id": cell.column.id,
705
+ children: [
706
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm font-medium shrink-0", children: label }),
707
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-right", children: flexRender(cell.column.columnDef.cell, cell.getContext()) })
708
+ ]
709
+ },
710
+ cell.id
711
+ );
712
+ }) })
713
+ },
714
+ row.id
715
+ );
716
+ }) });
717
+ }
718
+ var DataTableCardView = DataTableCardViewInner;
719
+ var SKELETON_KEYS = ["skeleton-row-1", "skeleton-row-2", "skeleton-row-3", "skeleton-row-4", "skeleton-row-5"];
720
+ function DataTableEmptyState({
721
+ className,
722
+ emptyState,
723
+ error,
724
+ errorState,
725
+ loading,
726
+ loadingComponent
727
+ }) {
728
+ if (loading) {
729
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-4", className), "data-slot": "data-table", children: loadingComponent ?? /* @__PURE__ */ jsx("div", { className: "space-y-2", "data-slot": "data-table-loading", children: SKELETON_KEYS.map((key) => /* @__PURE__ */ jsx(SkeletonLoader, { className: "h-12 w-full" }, key)) }) });
730
+ }
731
+ if (error) {
732
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-4", className), "data-slot": "data-table", children: errorState ?? /* @__PURE__ */ jsx(
733
+ "div",
734
+ {
735
+ className: "flex flex-col items-center justify-center py-12 text-center",
736
+ "data-slot": "data-table-error",
737
+ children: /* @__PURE__ */ jsx("p", { className: "text-destructive text-sm", children: "An error occurred while loading data" })
738
+ }
739
+ ) });
740
+ }
741
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-4", className), "data-slot": "data-table", children: emptyState ?? /* @__PURE__ */ jsx(
742
+ "div",
743
+ {
744
+ className: "flex flex-col items-center justify-center py-12 text-center",
745
+ "data-slot": "data-table-empty",
746
+ children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "No data available" })
747
+ }
748
+ ) });
749
+ }
750
+ function getCellSelector(row, col) {
751
+ return '[data-row="' + String(row) + '"][data-col="' + String(col) + '"]';
752
+ }
753
+ function DataTableFillHandle({
754
+ onFill,
755
+ position,
756
+ tableRef
757
+ }) {
758
+ const isDraggingRef = React14.useRef(false);
759
+ const dragStartRef = React14.useRef(null);
760
+ const currentTargetRef = React14.useRef(null);
761
+ const getCellElement = React14.useCallback(
762
+ (row, col) => {
763
+ if (!tableRef.current) return null;
764
+ return tableRef.current.querySelector(getCellSelector(row, col));
765
+ },
766
+ [tableRef]
767
+ );
768
+ const clearFillTargets = React14.useCallback(() => {
769
+ if (!tableRef.current) return;
770
+ const targeted = tableRef.current.querySelectorAll(
771
+ "[data-fill-target='true']"
772
+ );
773
+ for (const el of targeted) {
774
+ el.removeAttribute("data-fill-target");
775
+ }
776
+ }, [tableRef]);
777
+ const markFillTargets = React14.useCallback(
778
+ (source, target) => {
779
+ clearFillTargets();
780
+ const rowDiff = target.row - source.row;
781
+ const colDiff = target.col - source.col;
782
+ if (Math.abs(rowDiff) >= Math.abs(colDiff)) {
783
+ const startRow = Math.min(source.row + 1, target.row);
784
+ const endRow = Math.max(source.row + 1, target.row);
785
+ for (let r = startRow; r <= endRow; r++) {
786
+ const cell = getCellElement(r, source.col);
787
+ if (cell) {
788
+ cell.setAttribute("data-fill-target", "true");
789
+ }
790
+ }
791
+ } else {
792
+ const startCol = Math.min(source.col + 1, target.col);
793
+ const endCol = Math.max(source.col + 1, target.col);
794
+ for (let c = startCol; c <= endCol; c++) {
795
+ const cell = getCellElement(source.row, c);
796
+ if (cell) {
797
+ cell.setAttribute("data-fill-target", "true");
798
+ }
799
+ }
800
+ }
801
+ },
802
+ [clearFillTargets, getCellElement]
803
+ );
804
+ const handleMouseUp = React14.useCallback(() => {
805
+ if (!isDraggingRef.current || !dragStartRef.current || !currentTargetRef.current) {
806
+ isDraggingRef.current = false;
807
+ clearFillTargets();
808
+ return;
809
+ }
810
+ const source = dragStartRef.current;
811
+ const target = currentTargetRef.current;
812
+ const rowDiff = target.row - source.row;
813
+ const colDiff = target.col - source.col;
814
+ if (rowDiff !== 0 || colDiff !== 0) {
815
+ if (Math.abs(rowDiff) >= Math.abs(colDiff)) {
816
+ const startRow = Math.min(source.row + 1, target.row);
817
+ const endRow = Math.max(source.row + 1, target.row);
818
+ onFill({
819
+ direction: "down",
820
+ sourceCell: { col: source.col, row: source.row },
821
+ targetRange: {
822
+ endCol: source.col,
823
+ endRow,
824
+ startCol: source.col,
825
+ startRow
826
+ }
827
+ });
828
+ } else {
829
+ const startCol = Math.min(source.col + 1, target.col);
830
+ const endCol = Math.max(source.col + 1, target.col);
831
+ onFill({
832
+ direction: "right",
833
+ sourceCell: { col: source.col, row: source.row },
834
+ targetRange: {
835
+ endCol,
836
+ endRow: source.row,
837
+ startCol,
838
+ startRow: source.row
839
+ }
840
+ });
841
+ }
842
+ }
843
+ isDraggingRef.current = false;
844
+ dragStartRef.current = null;
845
+ currentTargetRef.current = null;
846
+ clearFillTargets();
847
+ }, [clearFillTargets, onFill]);
848
+ const handleMouseMove = React14.useCallback(
849
+ (e) => {
850
+ if (!isDraggingRef.current || !dragStartRef.current || !tableRef.current) return;
851
+ const target = document.elementFromPoint(e.clientX, e.clientY);
852
+ if (!target) return;
853
+ const cell = target.closest("[data-row][data-col]");
854
+ if (!cell) return;
855
+ const row = Number(cell.dataset["row"]);
856
+ const col = Number(cell.dataset["col"]);
857
+ if (Number.isNaN(row) || Number.isNaN(col)) return;
858
+ currentTargetRef.current = { col, row };
859
+ markFillTargets(dragStartRef.current, { col, row });
860
+ },
861
+ [markFillTargets, tableRef]
862
+ );
863
+ const handleMouseDown = React14.useCallback(
864
+ (e) => {
865
+ if (!position) return;
866
+ e.preventDefault();
867
+ e.stopPropagation();
868
+ isDraggingRef.current = true;
869
+ dragStartRef.current = { col: position.col, row: position.row };
870
+ currentTargetRef.current = { col: position.col, row: position.row };
871
+ },
872
+ [position]
873
+ );
874
+ React14.useEffect(() => {
875
+ document.addEventListener("mousemove", handleMouseMove);
876
+ document.addEventListener("mouseup", handleMouseUp);
877
+ return () => {
878
+ document.removeEventListener("mousemove", handleMouseMove);
879
+ document.removeEventListener("mouseup", handleMouseUp);
880
+ };
881
+ }, [handleMouseMove, handleMouseUp]);
882
+ const [handleStyle, setHandleStyle] = React14.useState({});
883
+ React14.useEffect(() => {
884
+ if (!position) {
885
+ setHandleStyle({});
886
+ return;
887
+ }
888
+ const table = tableRef.current;
889
+ if (!table) {
890
+ setHandleStyle({});
891
+ return;
892
+ }
893
+ const cell = table.querySelector(
894
+ getCellSelector(position.row, position.col)
895
+ );
896
+ if (!cell) {
897
+ setHandleStyle({});
898
+ return;
899
+ }
900
+ const tableRect = table.getBoundingClientRect();
901
+ const cellRect = cell.getBoundingClientRect();
902
+ setHandleStyle({
903
+ left: cellRect.right - tableRect.left - 3,
904
+ top: cellRect.bottom - tableRect.top - 3
905
+ });
906
+ }, [position, tableRef]);
907
+ if (!position) return null;
908
+ return /* @__PURE__ */ jsx(
909
+ "div",
910
+ {
911
+ className: cn(
912
+ "absolute z-10 size-1.5 cursor-crosshair rounded-sm bg-primary"
913
+ ),
914
+ "data-slot": "data-table-fill-handle",
915
+ role: "presentation",
916
+ style: handleStyle,
917
+ onMouseDown: handleMouseDown
918
+ }
919
+ );
920
+ }
921
+ function DataTableFilterChipsInner({
922
+ table
923
+ }) {
924
+ const columnFilters = table.getState().columnFilters;
925
+ const globalFilter = table.getState().globalFilter;
926
+ const hasFilters = columnFilters.length > 0 || globalFilter && globalFilter.length > 0;
927
+ if (!hasFilters) return null;
928
+ return /* @__PURE__ */ jsxs(
929
+ "div",
930
+ {
931
+ className: "flex flex-wrap items-center gap-2",
932
+ "data-slot": "data-table-filter-chips",
933
+ children: [
934
+ globalFilter && globalFilter.length > 0 && /* @__PURE__ */ jsxs(Badge, { className: "gap-1 pr-1", color: "muted", type: "pill-color", children: [
935
+ "Search: ",
936
+ globalFilter,
937
+ /* @__PURE__ */ jsx(
938
+ "button",
939
+ {
940
+ "aria-label": "Clear search filter",
941
+ className: "ml-1 rounded-full p-0.5 hover:bg-muted",
942
+ type: "button",
943
+ onClick: () => {
944
+ table.setGlobalFilter("");
945
+ },
946
+ children: /* @__PURE__ */ jsx(X, { className: "size-3" })
947
+ }
948
+ )
949
+ ] }),
950
+ columnFilters.map((filter) => {
951
+ const column = table.getColumn(filter.id);
952
+ const headerLabel = column && typeof column.columnDef.header === "string" ? column.columnDef.header : filter.id;
953
+ return /* @__PURE__ */ jsxs(Badge, { className: "gap-1 pr-1", color: "muted", type: "pill-color", children: [
954
+ headerLabel,
955
+ ": ",
956
+ String(filter.value),
957
+ /* @__PURE__ */ jsx(
958
+ "button",
959
+ {
960
+ "aria-label": `Clear ${headerLabel} filter`,
961
+ className: "ml-1 rounded-full p-0.5 hover:bg-muted",
962
+ type: "button",
963
+ onClick: () => {
964
+ column?.setFilterValue(void 0);
965
+ },
966
+ children: /* @__PURE__ */ jsx(X, { className: "size-3" })
967
+ }
968
+ )
969
+ ] }, filter.id);
970
+ }),
971
+ columnFilters.length + (globalFilter ? 1 : 0) >= 2 && /* @__PURE__ */ jsx(
972
+ Button,
973
+ {
974
+ className: "h-6 px-2 text-xs",
975
+ size: "sm",
976
+ variant: "ghost",
977
+ onClick: () => {
978
+ table.resetColumnFilters();
979
+ table.setGlobalFilter("");
980
+ },
981
+ children: "Clear all"
982
+ }
983
+ )
984
+ ]
985
+ }
986
+ );
987
+ }
988
+ var DataTableFilterChips = DataTableFilterChipsInner;
989
+ var FIND_MATCH_ATTR = "data-find-match";
990
+ var FIND_CURRENT_ATTR = "data-find-current";
991
+ function getCellTextContent(cell) {
992
+ const text = cell.textContent;
993
+ if (typeof text === "string") {
994
+ return text.toLowerCase();
995
+ }
996
+ return "";
997
+ }
998
+ function findMatchesInTable(tableEl, normalizedQuery) {
999
+ const result = [];
1000
+ const rows = tableEl.querySelectorAll("tbody tr");
1001
+ rows.forEach((row, rowIndex) => {
1002
+ const cells = row.querySelectorAll("td");
1003
+ cells.forEach((cell) => {
1004
+ if (cell instanceof HTMLTableCellElement) {
1005
+ const text = getCellTextContent(cell);
1006
+ if (text.includes(normalizedQuery)) {
1007
+ result.push({ cell, rowIndex });
1008
+ }
1009
+ }
1010
+ });
1011
+ });
1012
+ return result;
1013
+ }
1014
+ function DataTableFindBar({ onClose, open, tableRef }) {
1015
+ const [currentIndex, setCurrentIndex] = React14.useState(0);
1016
+ const [matches, setMatches] = React14.useState([]);
1017
+ const [query, setQuery] = React14.useState("");
1018
+ const inputRef = React14.useRef(null);
1019
+ React14.useEffect(() => {
1020
+ if (!open) {
1021
+ setQuery("");
1022
+ setCurrentIndex(0);
1023
+ setMatches([]);
1024
+ return;
1025
+ }
1026
+ const timer = setTimeout(() => {
1027
+ inputRef.current?.focus();
1028
+ }, 0);
1029
+ return () => {
1030
+ clearTimeout(timer);
1031
+ };
1032
+ }, [open]);
1033
+ React14.useEffect(() => {
1034
+ const table = tableRef.current;
1035
+ if (!table || !query.trim()) {
1036
+ setMatches([]);
1037
+ return;
1038
+ }
1039
+ const normalizedQuery = query.trim().toLowerCase();
1040
+ const found = findMatchesInTable(table, normalizedQuery);
1041
+ setMatches(found);
1042
+ }, [query, tableRef]);
1043
+ const safeIndex = matches.length > 0 ? Math.min(currentIndex, matches.length - 1) : 0;
1044
+ React14.useEffect(() => {
1045
+ const table = tableRef.current;
1046
+ if (!table) return;
1047
+ const previousMatches = table.querySelectorAll(`[${FIND_MATCH_ATTR}]`);
1048
+ previousMatches.forEach((el) => {
1049
+ el.removeAttribute(FIND_MATCH_ATTR);
1050
+ el.removeAttribute(FIND_CURRENT_ATTR);
1051
+ });
1052
+ matches.forEach((match, index) => {
1053
+ match.cell.setAttribute(FIND_MATCH_ATTR, "true");
1054
+ if (index === safeIndex) {
1055
+ match.cell.setAttribute(FIND_CURRENT_ATTR, "true");
1056
+ }
1057
+ });
1058
+ const currentMatch = matches[safeIndex];
1059
+ if (currentMatch) {
1060
+ currentMatch.cell.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" });
1061
+ }
1062
+ }, [matches, safeIndex, tableRef]);
1063
+ React14.useEffect(() => {
1064
+ if (open) return;
1065
+ const table = tableRef.current;
1066
+ if (!table) return;
1067
+ const marked = table.querySelectorAll(`[${FIND_MATCH_ATTR}]`);
1068
+ marked.forEach((el) => {
1069
+ el.removeAttribute(FIND_MATCH_ATTR);
1070
+ el.removeAttribute(FIND_CURRENT_ATTR);
1071
+ });
1072
+ }, [open, tableRef]);
1073
+ const handlePrev = React14.useCallback(() => {
1074
+ if (matches.length === 0) return;
1075
+ setCurrentIndex(
1076
+ (prev) => prev <= 0 ? matches.length - 1 : prev - 1
1077
+ );
1078
+ }, [matches.length]);
1079
+ const handleNext = React14.useCallback(() => {
1080
+ if (matches.length === 0) return;
1081
+ setCurrentIndex(
1082
+ (prev) => prev >= matches.length - 1 ? 0 : prev + 1
1083
+ );
1084
+ }, [matches.length]);
1085
+ const handleClose = React14.useCallback(() => {
1086
+ setQuery("");
1087
+ setCurrentIndex(0);
1088
+ setMatches([]);
1089
+ onClose();
1090
+ }, [onClose]);
1091
+ const handleKeyDown = React14.useCallback(
1092
+ (e) => {
1093
+ if (e.key === "Escape") {
1094
+ e.preventDefault();
1095
+ handleClose();
1096
+ } else if (e.key === "Enter") {
1097
+ e.preventDefault();
1098
+ if (e.shiftKey) {
1099
+ handlePrev();
1100
+ } else {
1101
+ handleNext();
1102
+ }
1103
+ }
1104
+ },
1105
+ [handleClose, handleNext, handlePrev]
1106
+ );
1107
+ if (!open) {
1108
+ return null;
1109
+ }
1110
+ const displayIndex = matches.length > 0 ? safeIndex + 1 : 0;
1111
+ return /* @__PURE__ */ jsxs(
1112
+ "div",
1113
+ {
1114
+ className: cn(
1115
+ "flex items-center gap-2 border-b px-4 py-2",
1116
+ "bg-background text-foreground"
1117
+ ),
1118
+ "data-slot": "data-table-find-bar",
1119
+ children: [
1120
+ /* @__PURE__ */ jsx(
1121
+ "input",
1122
+ {
1123
+ ref: inputRef,
1124
+ className: cn(
1125
+ "h-8 flex-1 rounded-md border bg-transparent px-3 text-sm",
1126
+ "placeholder:text-muted-foreground",
1127
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1128
+ ),
1129
+ "aria-label": "Find in table",
1130
+ placeholder: "Find in table...",
1131
+ type: "text",
1132
+ value: query,
1133
+ onChange: (e) => {
1134
+ setQuery(e.target.value);
1135
+ setCurrentIndex(0);
1136
+ },
1137
+ onKeyDown: handleKeyDown
1138
+ }
1139
+ ),
1140
+ /* @__PURE__ */ jsx("span", { className: "min-w-16 text-center text-xs text-muted-foreground", children: query.trim() ? `${String(displayIndex)} of ${String(matches.length)}` : "" }),
1141
+ /* @__PURE__ */ jsx(
1142
+ Button,
1143
+ {
1144
+ "aria-label": "Previous match",
1145
+ disabled: matches.length === 0,
1146
+ icon: /* @__PURE__ */ jsx(ChevronUp, { className: "size-4" }),
1147
+ size: "icon-sm",
1148
+ variant: "ghost",
1149
+ onClick: handlePrev
1150
+ }
1151
+ ),
1152
+ /* @__PURE__ */ jsx(
1153
+ Button,
1154
+ {
1155
+ "aria-label": "Next match",
1156
+ disabled: matches.length === 0,
1157
+ icon: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" }),
1158
+ size: "icon-sm",
1159
+ variant: "ghost",
1160
+ onClick: handleNext
1161
+ }
1162
+ ),
1163
+ /* @__PURE__ */ jsx(
1164
+ Button,
1165
+ {
1166
+ "aria-label": "Close find bar",
1167
+ icon: /* @__PURE__ */ jsx(X, { className: "size-4" }),
1168
+ size: "icon-sm",
1169
+ variant: "ghost",
1170
+ onClick: handleClose
1171
+ }
1172
+ )
1173
+ ]
1174
+ }
1175
+ );
1176
+ }
1177
+ function autoSizeColumn(table, columnId, containerEl) {
1178
+ const tableEl = document.querySelector(`[data-slot="data-table"] table`);
1179
+ if (!tableEl) return;
1180
+ const cells = tableEl.querySelectorAll(
1181
+ `[data-column-id="${columnId}"]`
1182
+ );
1183
+ let maxWidth = 0;
1184
+ cells.forEach((cell) => {
1185
+ maxWidth = Math.max(maxWidth, cell.scrollWidth + 2);
1186
+ });
1187
+ const headers = tableEl.querySelectorAll("th");
1188
+ headers.forEach((th) => {
1189
+ const headerContent = th.textContent.trim();
1190
+ const colDef = table.getColumn(columnId)?.columnDef;
1191
+ if (colDef && typeof colDef.header === "string" && colDef.header === headerContent) {
1192
+ maxWidth = Math.max(maxWidth, th.scrollWidth + 2);
1193
+ }
1194
+ });
1195
+ if (maxWidth > 0) {
1196
+ const min = table.getColumn(columnId)?.columnDef.minSize ?? 20;
1197
+ const max = table.getColumn(columnId)?.columnDef.maxSize ?? 1e3;
1198
+ const clampedWidth = Math.min(Math.max(maxWidth, min), max);
1199
+ table.setColumnSizing((prev) => ({
1200
+ ...prev,
1201
+ [columnId]: clampedWidth
1202
+ }));
1203
+ }
1204
+ }
1205
+ function DataTableColumnMenuInner({
1206
+ column,
1207
+ enableColumnFilters,
1208
+ enableColumnPinning,
1209
+ enableColumnResizing,
1210
+ enableColumnVisibility,
1211
+ enableGrouping,
1212
+ enableSorting,
1213
+ table
1214
+ }) {
1215
+ const canSort = enableSorting && column.getCanSort();
1216
+ const sorted = column.getIsSorted();
1217
+ const isPinned = column.getIsPinned();
1218
+ const canHide = enableColumnVisibility && column.getCanHide();
1219
+ const canFilter = enableColumnFilters && column.getCanFilter();
1220
+ const canResize = enableColumnResizing && column.getCanResize();
1221
+ const canGroup = enableGrouping && column.getCanGroup();
1222
+ const isGrouped = column.getIsGrouped();
1223
+ const hasAnyAction = canSort || enableColumnPinning || canResize || canHide || canFilter || canGroup;
1224
+ if (!hasAnyAction) return null;
1225
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
1226
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
1227
+ Button,
1228
+ {
1229
+ "aria-label": `Column menu for ${column.id}`,
1230
+ className: "size-6 opacity-0 transition-opacity group-hover/header:opacity-100 data-[state=open]:opacity-100",
1231
+ size: "icon-sm",
1232
+ type: "button",
1233
+ variant: "ghost",
1234
+ onClick: (e) => {
1235
+ e.stopPropagation();
1236
+ },
1237
+ children: /* @__PURE__ */ jsx(MoreVertical, { className: "size-3.5" })
1238
+ }
1239
+ ) }),
1240
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "start", className: "w-48", children: [
1241
+ canSort && /* @__PURE__ */ jsxs(Fragment, { children: [
1242
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Sort" }),
1243
+ /* @__PURE__ */ jsxs(
1244
+ DropdownMenuItem,
1245
+ {
1246
+ onClick: () => {
1247
+ column.toggleSorting(false);
1248
+ },
1249
+ children: [
1250
+ /* @__PURE__ */ jsx(ArrowUp, { className: "mr-2 size-4" }),
1251
+ "Sort ascending"
1252
+ ]
1253
+ }
1254
+ ),
1255
+ /* @__PURE__ */ jsxs(
1256
+ DropdownMenuItem,
1257
+ {
1258
+ onClick: () => {
1259
+ column.toggleSorting(true);
1260
+ },
1261
+ children: [
1262
+ /* @__PURE__ */ jsx(ArrowDown, { className: "mr-2 size-4" }),
1263
+ "Sort descending"
1264
+ ]
1265
+ }
1266
+ ),
1267
+ sorted && /* @__PURE__ */ jsxs(
1268
+ DropdownMenuItem,
1269
+ {
1270
+ onClick: () => {
1271
+ column.clearSorting();
1272
+ },
1273
+ children: [
1274
+ /* @__PURE__ */ jsx(ArrowUpDown, { className: "mr-2 size-4" }),
1275
+ "Clear sort"
1276
+ ]
1277
+ }
1278
+ ),
1279
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
1280
+ ] }),
1281
+ enableColumnPinning && /* @__PURE__ */ jsxs(Fragment, { children: [
1282
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Pin" }),
1283
+ isPinned !== "left" && /* @__PURE__ */ jsxs(
1284
+ DropdownMenuItem,
1285
+ {
1286
+ onClick: () => {
1287
+ column.pin("left");
1288
+ },
1289
+ children: [
1290
+ /* @__PURE__ */ jsx(PinIcon, { className: "mr-2 size-4" }),
1291
+ "Pin to left"
1292
+ ]
1293
+ }
1294
+ ),
1295
+ isPinned !== "right" && /* @__PURE__ */ jsxs(
1296
+ DropdownMenuItem,
1297
+ {
1298
+ onClick: () => {
1299
+ column.pin("right");
1300
+ },
1301
+ children: [
1302
+ /* @__PURE__ */ jsx(PinIcon, { className: "mr-2 size-4 rotate-90" }),
1303
+ "Pin to right"
1304
+ ]
1305
+ }
1306
+ ),
1307
+ isPinned && /* @__PURE__ */ jsxs(
1308
+ DropdownMenuItem,
1309
+ {
1310
+ onClick: () => {
1311
+ column.pin(false);
1312
+ },
1313
+ children: [
1314
+ /* @__PURE__ */ jsx(PinOff, { className: "mr-2 size-4" }),
1315
+ "Unpin"
1316
+ ]
1317
+ }
1318
+ ),
1319
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
1320
+ ] }),
1321
+ canResize && /* @__PURE__ */ jsxs(Fragment, { children: [
1322
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Size" }),
1323
+ /* @__PURE__ */ jsxs(
1324
+ DropdownMenuItem,
1325
+ {
1326
+ onClick: () => {
1327
+ autoSizeColumn(table, column.id);
1328
+ },
1329
+ children: [
1330
+ /* @__PURE__ */ jsx(Ruler, { className: "mr-2 size-4" }),
1331
+ "Auto-size column"
1332
+ ]
1333
+ }
1334
+ ),
1335
+ /* @__PURE__ */ jsxs(
1336
+ DropdownMenuItem,
1337
+ {
1338
+ onClick: () => {
1339
+ column.resetSize();
1340
+ },
1341
+ children: [
1342
+ /* @__PURE__ */ jsx(RotateCcw, { className: "mr-2 size-4" }),
1343
+ "Reset column size"
1344
+ ]
1345
+ }
1346
+ ),
1347
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
1348
+ ] }),
1349
+ canFilter && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
1350
+ DropdownMenuItem,
1351
+ {
1352
+ onClick: () => {
1353
+ const filterInput = document.querySelector(
1354
+ `input[aria-label="Filter ${typeof column.columnDef.header === "string" ? column.columnDef.header : column.id}"]`
1355
+ );
1356
+ filterInput?.focus();
1357
+ },
1358
+ children: [
1359
+ /* @__PURE__ */ jsx(GripHorizontal, { className: "mr-2 size-4" }),
1360
+ "Filter this column"
1361
+ ]
1362
+ }
1363
+ ) }),
1364
+ canGroup && /* @__PURE__ */ jsxs(Fragment, { children: [
1365
+ /* @__PURE__ */ jsxs(
1366
+ DropdownMenuItem,
1367
+ {
1368
+ onClick: () => {
1369
+ column.getToggleGroupingHandler()();
1370
+ },
1371
+ children: [
1372
+ /* @__PURE__ */ jsx(Group, { className: "mr-2 size-4" }),
1373
+ isGrouped ? "Remove grouping" : "Group by this column"
1374
+ ]
1375
+ }
1376
+ ),
1377
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
1378
+ ] }),
1379
+ canHide && /* @__PURE__ */ jsxs(
1380
+ DropdownMenuItem,
1381
+ {
1382
+ onClick: () => {
1383
+ column.toggleVisibility(false);
1384
+ },
1385
+ children: [
1386
+ /* @__PURE__ */ jsx(EyeOff, { className: "mr-2 size-4" }),
1387
+ "Hide column"
1388
+ ]
1389
+ }
1390
+ )
1391
+ ] })
1392
+ ] });
1393
+ }
1394
+ var DataTableColumnMenu = DataTableColumnMenuInner;
1395
+ function FacetedFilter({ column }) {
1396
+ const facetedValues = column.getFacetedUniqueValues();
1397
+ const filterValue = column.getFilterValue() ?? [];
1398
+ const [open, setOpen] = React14.useState(false);
1399
+ const sortedEntries = React14.useMemo(() => {
1400
+ return [...facetedValues.entries()].sort(
1401
+ (a, b) => String(a[0]).localeCompare(String(b[0]))
1402
+ );
1403
+ }, [facetedValues]);
1404
+ const handleToggle = (value) => {
1405
+ const next = filterValue.includes(value) ? filterValue.filter((v) => v !== value) : [...filterValue, value];
1406
+ column.setFilterValue(next.length > 0 ? next : void 0);
1407
+ };
1408
+ const columnLabel = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
1409
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
1410
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
1411
+ "button",
1412
+ {
1413
+ className: cn(
1414
+ "flex h-7 w-full items-center justify-between rounded-md border px-2 text-xs",
1415
+ "border-[color:var(--border-default)] bg-transparent",
1416
+ "hover:bg-[color:var(--surface-hover)]",
1417
+ filterValue.length > 0 && "text-foreground"
1418
+ ),
1419
+ "aria-label": `Filter ${columnLabel}`,
1420
+ type: "button",
1421
+ children: [
1422
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: filterValue.length > 0 ? `${String(filterValue.length)} selected` : "All" }),
1423
+ /* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-1 size-3 shrink-0 opacity-50" })
1424
+ ]
1425
+ }
1426
+ ) }),
1427
+ /* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: "w-52 p-2", children: [
1428
+ /* @__PURE__ */ jsx("div", { className: "max-h-48 overflow-y-auto", children: sortedEntries.map(([value, count]) => {
1429
+ const stringValue = String(value);
1430
+ const isChecked = filterValue.includes(stringValue);
1431
+ return /* @__PURE__ */ jsxs(
1432
+ "label",
1433
+ {
1434
+ className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs hover:bg-[color:var(--surface-hover)]",
1435
+ children: [
1436
+ /* @__PURE__ */ jsx(
1437
+ Checkbox,
1438
+ {
1439
+ checked: isChecked,
1440
+ size: "sm",
1441
+ onCheckedChange: () => {
1442
+ handleToggle(stringValue);
1443
+ }
1444
+ }
1445
+ ),
1446
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: stringValue }),
1447
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground tabular-nums", children: count })
1448
+ ]
1449
+ },
1450
+ stringValue
1451
+ );
1452
+ }) }),
1453
+ filterValue.length > 0 && /* @__PURE__ */ jsx(
1454
+ "button",
1455
+ {
1456
+ className: "mt-1 w-full rounded px-2 py-1 text-center text-xs text-muted-foreground hover:bg-[color:var(--surface-hover)]",
1457
+ type: "button",
1458
+ onClick: () => {
1459
+ column.setFilterValue(void 0);
1460
+ },
1461
+ children: "Clear"
1462
+ }
1463
+ )
1464
+ ] })
1465
+ ] });
1466
+ }
1467
+ function RangeFilter({ column }) {
1468
+ const filterValue = column.getFilterValue() ?? [void 0, void 0];
1469
+ const columnLabel = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
1470
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
1471
+ /* @__PURE__ */ jsx(
1472
+ TextInput,
1473
+ {
1474
+ "aria-label": `${columnLabel} min`,
1475
+ className: "h-7 text-xs",
1476
+ placeholder: "Min",
1477
+ type: "number",
1478
+ value: filterValue[0] != null ? String(filterValue[0]) : "",
1479
+ onChange: (e) => {
1480
+ const val = e.target.value;
1481
+ column.setFilterValue((prev) => [
1482
+ val ? Number(val) : void 0,
1483
+ prev?.[1]
1484
+ ]);
1485
+ }
1486
+ }
1487
+ ),
1488
+ /* @__PURE__ */ jsx(
1489
+ TextInput,
1490
+ {
1491
+ "aria-label": `${columnLabel} max`,
1492
+ className: "h-7 text-xs",
1493
+ placeholder: "Max",
1494
+ type: "number",
1495
+ value: filterValue[1] != null ? String(filterValue[1]) : "",
1496
+ onChange: (e) => {
1497
+ const val = e.target.value;
1498
+ column.setFilterValue((prev) => [
1499
+ prev?.[0],
1500
+ val ? Number(val) : void 0
1501
+ ]);
1502
+ }
1503
+ }
1504
+ )
1505
+ ] });
1506
+ }
1507
+ function SelectFilter({ column }) {
1508
+ const meta = column.columnDef.meta;
1509
+ const options = meta?.filterOptions ?? [];
1510
+ const filterValue = column.getFilterValue() ?? "";
1511
+ const columnLabel = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
1512
+ return /* @__PURE__ */ jsxs(
1513
+ "select",
1514
+ {
1515
+ className: cn(
1516
+ "h-7 w-full rounded-md border px-2 text-xs",
1517
+ "border-[color:var(--border-default)] bg-transparent",
1518
+ "focus:outline-none focus:ring-1 focus:ring-[color:var(--ring)]"
1519
+ ),
1520
+ "aria-label": `Filter ${columnLabel}`,
1521
+ value: filterValue,
1522
+ onChange: (e) => {
1523
+ column.setFilterValue(e.target.value || void 0);
1524
+ },
1525
+ children: [
1526
+ /* @__PURE__ */ jsx("option", { value: "", children: "All" }),
1527
+ options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt, children: opt }, opt))
1528
+ ]
1529
+ }
1530
+ );
1531
+ }
1532
+ function DefaultColumnFilter({ column }) {
1533
+ const meta = column.columnDef.meta;
1534
+ const variant = meta?.filterVariant ?? "text";
1535
+ const columnLabel = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
1536
+ switch (variant) {
1537
+ case "faceted":
1538
+ return /* @__PURE__ */ jsx(FacetedFilter, { column });
1539
+ case "range":
1540
+ return /* @__PURE__ */ jsx(RangeFilter, { column });
1541
+ case "select":
1542
+ return /* @__PURE__ */ jsx(SelectFilter, { column });
1543
+ case "text":
1544
+ default:
1545
+ return /* @__PURE__ */ jsx(
1546
+ TextInput,
1547
+ {
1548
+ "aria-label": `Filter ${columnLabel}`,
1549
+ className: "h-7 text-xs",
1550
+ placeholder: "Filter...",
1551
+ value: column.getFilterValue() ?? "",
1552
+ onChange: (e) => {
1553
+ column.setFilterValue(e.target.value || void 0);
1554
+ }
1555
+ }
1556
+ );
1557
+ }
1558
+ }
1559
+ function DataTableHeaderInner({
1560
+ columnVirtualizer,
1561
+ enableColumnFilters,
1562
+ enableColumnMenu,
1563
+ enableColumnOrdering,
1564
+ enableColumnPinning,
1565
+ enableColumnResizing,
1566
+ enableColumnVisibility,
1567
+ enableGrouping,
1568
+ enableSorting,
1569
+ enableStickyHeader,
1570
+ getPinnedAttribute,
1571
+ getPinnedStyles,
1572
+ renderColumnFilter,
1573
+ table
1574
+ }) {
1575
+ const sortedColumnCount = table.getState().sorting.length;
1576
+ const hasFilterableColumns = enableColumnFilters && table.getAllLeafColumns().some((col) => col.getCanFilter());
1577
+ const sensors = useSensors(
1578
+ useSensor(PointerSensor, {
1579
+ activationConstraint: {
1580
+ distance: 8
1581
+ }
1582
+ })
1583
+ );
1584
+ const handleDragEnd = React14.useCallback(
1585
+ (event) => {
1586
+ const { active, over } = event;
1587
+ if (!over || active.id === over.id) return;
1588
+ const currentOrder = table.getState().columnOrder.length > 0 ? table.getState().columnOrder : table.getAllLeafColumns().map((col) => col.id);
1589
+ const oldIndex = currentOrder.indexOf(String(active.id));
1590
+ const newIndex = currentOrder.indexOf(String(over.id));
1591
+ if (oldIndex === -1 || newIndex === -1) return;
1592
+ const newOrder = arrayMove(currentOrder, oldIndex, newIndex);
1593
+ table.setColumnOrder(newOrder);
1594
+ },
1595
+ [table]
1596
+ );
1597
+ const columnIds = React14.useMemo(() => {
1598
+ return table.getAllLeafColumns().map((col) => col.id);
1599
+ }, [table]);
1600
+ const headerContent = table.getHeaderGroups().map((headerGroup) => {
1601
+ const virtualColItems = columnVirtualizer?.getVirtualItems();
1602
+ const headersToRender = virtualColItems ? virtualColItems.filter((virtualCol) => headerGroup.headers[virtualCol.index] != null).map((virtualCol) => headerGroup.headers[virtualCol.index]) : headerGroup.headers;
1603
+ return /* @__PURE__ */ jsx(TableRow, { children: headersToRender.map((header) => enableColumnOrdering ? /* @__PURE__ */ jsx(
1604
+ SortableHeaderCell,
1605
+ {
1606
+ enableColumnFilters,
1607
+ enableColumnMenu,
1608
+ enableColumnPinning,
1609
+ enableColumnResizing,
1610
+ enableColumnVisibility,
1611
+ enableGrouping,
1612
+ enableSorting,
1613
+ enableStickyHeader,
1614
+ getPinnedAttribute,
1615
+ getPinnedStyles,
1616
+ header,
1617
+ showSortPriority: sortedColumnCount >= 2,
1618
+ table
1619
+ },
1620
+ header.id
1621
+ ) : /* @__PURE__ */ jsx(
1622
+ DataTableHeaderCell,
1623
+ {
1624
+ enableColumnFilters,
1625
+ enableColumnMenu,
1626
+ enableColumnPinning,
1627
+ enableColumnResizing,
1628
+ enableColumnVisibility,
1629
+ enableGrouping,
1630
+ enableSorting,
1631
+ enableStickyHeader,
1632
+ getPinnedAttribute,
1633
+ getPinnedStyles,
1634
+ header,
1635
+ showSortPriority: sortedColumnCount >= 2,
1636
+ table
1637
+ },
1638
+ header.id
1639
+ )) }, headerGroup.id);
1640
+ });
1641
+ return /* @__PURE__ */ jsxs(TableHeader, { children: [
1642
+ enableColumnOrdering ? /* @__PURE__ */ jsx(
1643
+ DndContext,
1644
+ {
1645
+ collisionDetection: closestCenter,
1646
+ sensors,
1647
+ onDragEnd: handleDragEnd,
1648
+ children: /* @__PURE__ */ jsx(
1649
+ SortableContext,
1650
+ {
1651
+ items: columnIds,
1652
+ strategy: horizontalListSortingStrategy,
1653
+ children: headerContent
1654
+ }
1655
+ )
1656
+ }
1657
+ ) : headerContent,
1658
+ hasFilterableColumns && /* @__PURE__ */ jsx(TableRow, { children: (() => {
1659
+ const allLeafColumns = table.getAllLeafColumns();
1660
+ const virtualColItems = columnVirtualizer?.getVirtualItems();
1661
+ const columnsToRender = virtualColItems ? virtualColItems.filter((virtualCol) => allLeafColumns[virtualCol.index] != null).map((virtualCol) => allLeafColumns[virtualCol.index]) : allLeafColumns;
1662
+ return columnsToRender.map((column) => /* @__PURE__ */ jsx(TableHead, { className: "px-2 py-1.5", children: column.getCanFilter() ? renderColumnFilter ? renderColumnFilter({ column, table }) : /* @__PURE__ */ jsx(DefaultColumnFilter, { column, table }) : null }, column.id));
1663
+ })() })
1664
+ ] });
1665
+ }
1666
+ function SortableHeaderCell(props) {
1667
+ const { header } = props;
1668
+ const {
1669
+ attributes,
1670
+ isDragging,
1671
+ listeners,
1672
+ setNodeRef,
1673
+ transform,
1674
+ transition
1675
+ } = useSortable({
1676
+ id: header.column.id
1677
+ });
1678
+ const style = {
1679
+ transform: CSS.Translate.toString(transform),
1680
+ transition,
1681
+ opacity: isDragging ? 0.5 : 1,
1682
+ position: "relative",
1683
+ zIndex: isDragging ? 2 : void 0,
1684
+ cursor: "grab"
1685
+ };
1686
+ return /* @__PURE__ */ jsx(
1687
+ DataTableHeaderCell,
1688
+ {
1689
+ ...props,
1690
+ dragAttributes: attributes,
1691
+ dragListeners: listeners,
1692
+ dragStyle: style,
1693
+ setDragNodeRef: setNodeRef
1694
+ }
1695
+ );
1696
+ }
1697
+ function DataTableHeaderCell({
1698
+ dragAttributes,
1699
+ dragListeners,
1700
+ dragStyle,
1701
+ enableColumnFilters,
1702
+ enableColumnMenu,
1703
+ enableColumnPinning,
1704
+ enableColumnResizing,
1705
+ enableColumnVisibility,
1706
+ enableGrouping,
1707
+ enableSorting,
1708
+ enableStickyHeader,
1709
+ getPinnedAttribute,
1710
+ getPinnedStyles,
1711
+ header,
1712
+ setDragNodeRef,
1713
+ showSortPriority,
1714
+ table
1715
+ }) {
1716
+ const canSort = header.column.getCanSort();
1717
+ const sorted = header.column.getIsSorted();
1718
+ const sortIndex = header.column.getSortIndex();
1719
+ return /* @__PURE__ */ jsxs(
1720
+ TableHead,
1721
+ {
1722
+ ref: setDragNodeRef,
1723
+ "aria-sort": sorted ? sorted === "asc" ? "ascending" : "descending" : void 0,
1724
+ className: cn(
1725
+ "group/header",
1726
+ dataTableHeaderVariants({
1727
+ sortable: canSort,
1728
+ sorted: sorted ? sorted : "none"
1729
+ }),
1730
+ enableStickyHeader && "sticky top-0 z-10 bg-[color:var(--surface-default)]",
1731
+ enableColumnResizing && "relative",
1732
+ enableColumnPinning && header.column.getIsPinned() && "sticky",
1733
+ dragListeners && "cursor-grab"
1734
+ ),
1735
+ style: {
1736
+ width: enableColumnResizing ? header.getSize() : void 0,
1737
+ ...getPinnedStyles(header.column),
1738
+ ...dragStyle
1739
+ },
1740
+ colSpan: header.colSpan > 1 ? header.colSpan : void 0,
1741
+ "data-pinned": getPinnedAttribute(header.column),
1742
+ onClick: canSort ? header.column.getToggleSortingHandler() : void 0,
1743
+ ...dragAttributes,
1744
+ ...dragListeners,
1745
+ children: [
1746
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1747
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 items-center gap-2", children: [
1748
+ header.isPlaceholder ? null : flexRender(
1749
+ header.column.columnDef.header,
1750
+ header.getContext()
1751
+ ),
1752
+ canSort && /* @__PURE__ */ jsxs("span", { className: "relative text-muted-foreground", children: [
1753
+ sorted === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" }) : sorted === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" }) : /* @__PURE__ */ jsx(ArrowUpDown, { className: "size-4" }),
1754
+ showSortPriority && sorted && sortIndex >= 0 && /* @__PURE__ */ jsx("span", { className: "absolute -right-1.5 -top-1.5 flex size-4 items-center justify-center rounded-full bg-[color:var(--primary)] text-xs font-bold leading-none text-[color:var(--primary-foreground)]", children: sortIndex + 1 })
1755
+ ] })
1756
+ ] }),
1757
+ enableGrouping && !header.isPlaceholder && header.column.getCanGroup() && /* @__PURE__ */ jsx(
1758
+ "button",
1759
+ {
1760
+ "aria-label": header.column.getIsGrouped() ? `Remove grouping by ${header.column.id}` : `Group by ${header.column.id}`,
1761
+ className: cn(
1762
+ "size-5 shrink-0 rounded p-0.5 transition-colors",
1763
+ header.column.getIsGrouped() ? "text-[color:var(--primary)] hover:text-[color:var(--primary)]/80" : "text-muted-foreground opacity-0 hover:text-foreground group-hover/header:opacity-100"
1764
+ ),
1765
+ type: "button",
1766
+ onClick: (e) => {
1767
+ e.stopPropagation();
1768
+ header.column.getToggleGroupingHandler()();
1769
+ },
1770
+ children: /* @__PURE__ */ jsx(Group, { className: "size-3.5" })
1771
+ }
1772
+ ),
1773
+ enableColumnMenu && !header.isPlaceholder && /* @__PURE__ */ jsx(
1774
+ DataTableColumnMenu,
1775
+ {
1776
+ column: header.column,
1777
+ enableColumnFilters,
1778
+ enableColumnPinning,
1779
+ enableColumnResizing,
1780
+ enableColumnVisibility,
1781
+ enableGrouping,
1782
+ enableSorting,
1783
+ table
1784
+ }
1785
+ )
1786
+ ] }),
1787
+ enableColumnResizing && !header.isPlaceholder && /* @__PURE__ */ jsx(
1788
+ "div",
1789
+ {
1790
+ className: dataTableResizeHandleVariants({
1791
+ isResizing: header.column.getIsResizing()
1792
+ }),
1793
+ "aria-label": `Resize ${header.column.id} column`,
1794
+ "aria-orientation": "vertical",
1795
+ "aria-valuemax": header.column.columnDef.maxSize ?? 1e3,
1796
+ "aria-valuemin": header.column.columnDef.minSize ?? 20,
1797
+ "aria-valuenow": header.column.getSize(),
1798
+ role: "separator",
1799
+ tabIndex: 0,
1800
+ onDoubleClick: () => {
1801
+ header.column.resetSize();
1802
+ },
1803
+ onKeyDown: (e) => {
1804
+ const step = e.shiftKey ? 20 : 4;
1805
+ const columnId = header.column.id;
1806
+ const currentSize = header.column.getSize();
1807
+ if (e.key === "ArrowRight") {
1808
+ e.preventDefault();
1809
+ const max = header.column.columnDef.maxSize ?? 1e3;
1810
+ table.setColumnSizing((prev) => ({
1811
+ ...prev,
1812
+ [columnId]: Math.min(currentSize + step, max)
1813
+ }));
1814
+ } else if (e.key === "ArrowLeft") {
1815
+ e.preventDefault();
1816
+ const min = header.column.columnDef.minSize ?? 20;
1817
+ table.setColumnSizing((prev) => ({
1818
+ ...prev,
1819
+ [columnId]: Math.max(currentSize - step, min)
1820
+ }));
1821
+ }
1822
+ },
1823
+ onMouseDown: header.getResizeHandler(),
1824
+ onTouchStart: header.getResizeHandler()
1825
+ }
1826
+ )
1827
+ ]
1828
+ }
1829
+ );
1830
+ }
1831
+ var DataTableHeader = DataTableHeaderInner;
1832
+ function DataTablePaginationInner({
1833
+ enableRowSelection,
1834
+ onPaginationChange,
1835
+ pageSizeOptions,
1836
+ pagination,
1837
+ setInternalPagination,
1838
+ table
1839
+ }) {
1840
+ return /* @__PURE__ */ jsxs(
1841
+ "div",
1842
+ {
1843
+ className: "flex w-full flex-col gap-4 px-[var(--datatable-pagination-padding-x)] py-4 sm:flex-row sm:items-center sm:justify-between",
1844
+ "data-slot": "data-table-pagination",
1845
+ children: [
1846
+ /* @__PURE__ */ jsx("div", { className: "flex-1 text-[color:var(--datatable-pagination-info-color)] text-[length:var(--datatable-pagination-info-size)]", children: enableRowSelection && table.getFilteredSelectedRowModel().rows.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
1847
+ table.getFilteredSelectedRowModel().rows.length,
1848
+ " of",
1849
+ " ",
1850
+ table.getFilteredRowModel().rows.length,
1851
+ " row(s) selected."
1852
+ ] }) : /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "\xA0" }) }),
1853
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between sm:justify-end gap-x-6 gap-y-4 lg:gap-8", children: [
1854
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1855
+ /* @__PURE__ */ jsx("p", { className: "text-[color:var(--datatable-pagination-info-color)] text-[length:var(--datatable-pagination-info-size)] font-medium", children: "Rows per page" }),
1856
+ /* @__PURE__ */ jsxs(
1857
+ Select,
1858
+ {
1859
+ value: String(pagination.pageSize),
1860
+ onValueChange: (value) => {
1861
+ const newSize = Number(value);
1862
+ if (onPaginationChange) {
1863
+ onPaginationChange({
1864
+ pageIndex: 0,
1865
+ pageSize: newSize
1866
+ });
1867
+ } else {
1868
+ setInternalPagination({
1869
+ pageIndex: 0,
1870
+ pageSize: newSize
1871
+ });
1872
+ }
1873
+ },
1874
+ children: [
1875
+ /* @__PURE__ */ jsx(SelectTrigger, { "aria-label": "Rows per page", className: "h-8 w-20 bg-background", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: String(pagination.pageSize) }) }),
1876
+ /* @__PURE__ */ jsx(SelectContent, { side: "top", children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx(SelectItem, { value: String(size), children: size }, size)) })
1877
+ ]
1878
+ }
1879
+ )
1880
+ ] }),
1881
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 lg:gap-8", children: [
1882
+ /* @__PURE__ */ jsxs("div", { className: "flex w-24 items-center justify-center text-[color:var(--datatable-pagination-info-color)] text-[length:var(--datatable-pagination-info-size)] font-medium", children: [
1883
+ "Page ",
1884
+ pagination.pageIndex + 1,
1885
+ " of ",
1886
+ table.getPageCount() || 1
1887
+ ] }),
1888
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
1889
+ /* @__PURE__ */ jsx(
1890
+ Button,
1891
+ {
1892
+ "aria-label": "Go to first page",
1893
+ className: "hidden sm:flex",
1894
+ disabled: !table.getCanPreviousPage(),
1895
+ size: "icon-sm",
1896
+ variant: "outline",
1897
+ onClick: () => {
1898
+ table.setPageIndex(0);
1899
+ },
1900
+ children: /* @__PURE__ */ jsx(ChevronsLeft, { className: "size-4" })
1901
+ }
1902
+ ),
1903
+ /* @__PURE__ */ jsx(
1904
+ Button,
1905
+ {
1906
+ "aria-label": "Go to previous page",
1907
+ disabled: !table.getCanPreviousPage(),
1908
+ size: "icon-sm",
1909
+ variant: "outline",
1910
+ onClick: () => {
1911
+ table.previousPage();
1912
+ },
1913
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
1914
+ }
1915
+ ),
1916
+ /* @__PURE__ */ jsx(
1917
+ Button,
1918
+ {
1919
+ "aria-label": "Go to next page",
1920
+ disabled: !table.getCanNextPage(),
1921
+ size: "icon-sm",
1922
+ variant: "outline",
1923
+ onClick: () => {
1924
+ table.nextPage();
1925
+ },
1926
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
1927
+ }
1928
+ ),
1929
+ /* @__PURE__ */ jsx(
1930
+ Button,
1931
+ {
1932
+ "aria-label": "Go to last page",
1933
+ className: "hidden sm:flex",
1934
+ disabled: !table.getCanNextPage(),
1935
+ size: "icon-sm",
1936
+ variant: "outline",
1937
+ onClick: () => {
1938
+ table.setPageIndex(table.getPageCount() - 1);
1939
+ },
1940
+ children: /* @__PURE__ */ jsx(ChevronsRight, { className: "size-4" })
1941
+ }
1942
+ )
1943
+ ] })
1944
+ ] })
1945
+ ] })
1946
+ ]
1947
+ }
1948
+ );
1949
+ }
1950
+ var DataTablePagination = DataTablePaginationInner;
1951
+ function DataTableSidePanelInner({
1952
+ children,
1953
+ onClose,
1954
+ open,
1955
+ overlay = false,
1956
+ title = "Tools",
1957
+ width = 320
1958
+ }) {
1959
+ const panelRef = React14.useRef(null);
1960
+ const resolvedWidth = typeof width === "number" ? `${String(width)}px` : width;
1961
+ React14.useEffect(() => {
1962
+ if (!open) return;
1963
+ function handleKeyDown(e) {
1964
+ if (e.key === "Escape") {
1965
+ e.preventDefault();
1966
+ onClose();
1967
+ }
1968
+ }
1969
+ document.addEventListener("keydown", handleKeyDown);
1970
+ return () => {
1971
+ document.removeEventListener("keydown", handleKeyDown);
1972
+ };
1973
+ }, [open, onClose]);
1974
+ React14.useEffect(() => {
1975
+ if (!open) return;
1976
+ if (!panelRef.current) return;
1977
+ const timer = setTimeout(() => {
1978
+ panelRef.current?.focus();
1979
+ }, 0);
1980
+ return () => {
1981
+ clearTimeout(timer);
1982
+ };
1983
+ }, [open]);
1984
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1985
+ overlay && /* @__PURE__ */ jsx(
1986
+ "div",
1987
+ {
1988
+ className: cn(
1989
+ "fixed inset-0 z-40 bg-black/50 transition-opacity duration-300",
1990
+ open ? "opacity-100" : "pointer-events-none opacity-0"
1991
+ ),
1992
+ "aria-hidden": "true",
1993
+ "data-slot": "data-table-side-panel-overlay",
1994
+ onClick: onClose
1995
+ }
1996
+ ),
1997
+ /* @__PURE__ */ jsxs(
1998
+ "div",
1999
+ {
2000
+ ref: panelRef,
2001
+ className: cn(
2002
+ "absolute inset-y-0 right-0 z-50 flex flex-col",
2003
+ "border-l bg-background shadow-lg",
2004
+ "transition-transform duration-300 ease-in-out",
2005
+ open ? "translate-x-0" : "translate-x-full"
2006
+ ),
2007
+ "aria-label": title,
2008
+ "data-slot": "data-table-side-panel",
2009
+ "data-state": open ? "open" : "closed",
2010
+ role: "complementary",
2011
+ style: { width: resolvedWidth },
2012
+ tabIndex: -1,
2013
+ children: [
2014
+ /* @__PURE__ */ jsxs(
2015
+ "div",
2016
+ {
2017
+ className: "flex items-center justify-between border-b px-4 py-3",
2018
+ "data-slot": "data-table-side-panel-header",
2019
+ children: [
2020
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold", children: title }),
2021
+ /* @__PURE__ */ jsx(
2022
+ Button,
2023
+ {
2024
+ "aria-label": "Close panel",
2025
+ icon: /* @__PURE__ */ jsx(X, { className: "size-4" }),
2026
+ size: "icon-sm",
2027
+ variant: "ghost",
2028
+ onClick: onClose
2029
+ }
2030
+ )
2031
+ ]
2032
+ }
2033
+ ),
2034
+ /* @__PURE__ */ jsx(
2035
+ "div",
2036
+ {
2037
+ className: "flex-1 overflow-y-auto p-4",
2038
+ "data-slot": "data-table-side-panel-content",
2039
+ children
2040
+ }
2041
+ )
2042
+ ]
2043
+ }
2044
+ )
2045
+ ] });
2046
+ }
2047
+ var DataTableSidePanel = DataTableSidePanelInner;
2048
+ function DataTableStatusBarInner({
2049
+ enableRowSelection,
2050
+ items,
2051
+ table
2052
+ }) {
2053
+ const totalRows = table.getCoreRowModel().rows.length;
2054
+ const filteredRows = table.getFilteredRowModel().rows.length;
2055
+ const selectedRows = enableRowSelection ? table.getFilteredSelectedRowModel().rows.length : 0;
2056
+ const isFiltered = filteredRows < totalRows;
2057
+ return /* @__PURE__ */ jsxs(
2058
+ "div",
2059
+ {
2060
+ className: "flex items-center gap-4 border-t px-4 py-2 text-xs text-muted-foreground",
2061
+ "data-slot": "data-table-status-bar",
2062
+ children: [
2063
+ /* @__PURE__ */ jsx("span", { children: isFiltered ? `${String(filteredRows)} of ${String(totalRows)} rows` : `${String(totalRows)} rows` }),
2064
+ enableRowSelection && selectedRows > 0 && /* @__PURE__ */ jsxs("span", { children: [
2065
+ selectedRows,
2066
+ " selected"
2067
+ ] }),
2068
+ items?.map((item) => /* @__PURE__ */ jsxs("span", { children: [
2069
+ item.label,
2070
+ ": ",
2071
+ item.value(table)
2072
+ ] }, item.id))
2073
+ ]
2074
+ }
2075
+ );
2076
+ }
2077
+ var DataTableStatusBar = DataTableStatusBarInner;
2078
+ function DataTableToolbar({
2079
+ advancedFilterColumns,
2080
+ columns,
2081
+ currentAdvancedFilter,
2082
+ debouncedFilterUpdate,
2083
+ density = "default",
2084
+ enableAdvancedFilter,
2085
+ enableColumnVisibility,
2086
+ enableDensityToggle,
2087
+ enableExport,
2088
+ enableFiltering,
2089
+ enablePrint,
2090
+ enableSearch,
2091
+ exportFormats,
2092
+ filterPresets,
2093
+ onAdvancedFilterChange,
2094
+ onDeleteFilterPreset,
2095
+ onDensityChange,
2096
+ onExport,
2097
+ onPrint,
2098
+ onSaveFilterPreset,
2099
+ searchDisplayValue,
2100
+ searchPlaceholder,
2101
+ setSearchDisplayValue
2102
+ }) {
2103
+ const hideableColumns = enableColumnVisibility && columns ? columns.filter((col) => col.getCanHide()) : [];
2104
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2105
+ enableFiltering && enableSearch || enableExport || enableColumnVisibility || enableDensityToggle || enablePrint ? /* @__PURE__ */ jsxs(
2106
+ "div",
2107
+ {
2108
+ className: "flex items-center justify-between gap-[var(--datatable-toolbar-gap)]",
2109
+ "data-slot": "data-table-toolbar",
2110
+ children: [
2111
+ enableFiltering && enableSearch ? /* @__PURE__ */ jsxs("div", { className: "relative max-w-sm flex-1", children: [
2112
+ /* @__PURE__ */ jsx(Search, { className: "text-[color:var(--datatable-toolbar-search-icon-color)] absolute top-[var(--datatable-toolbar-search-icon-top)] left-[var(--datatable-toolbar-search-icon-left)] size-[var(--datatable-toolbar-search-icon-size)] -translate-y-1/2" }),
2113
+ /* @__PURE__ */ jsx(
2114
+ TextInput,
2115
+ {
2116
+ "aria-label": "Search table",
2117
+ className: "pl-[var(--datatable-toolbar-search-input-padding-left)]",
2118
+ placeholder: searchPlaceholder,
2119
+ value: searchDisplayValue,
2120
+ onChange: (e) => {
2121
+ const value = e.target.value;
2122
+ setSearchDisplayValue(value);
2123
+ debouncedFilterUpdate(value);
2124
+ }
2125
+ }
2126
+ )
2127
+ ] }) : /* @__PURE__ */ jsx("div", { className: "flex-1" }),
2128
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2129
+ enableColumnVisibility && hideableColumns.length > 0 && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
2130
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
2131
+ Button,
2132
+ {
2133
+ "aria-label": "Toggle columns",
2134
+ size: "sm",
2135
+ variant: "outline",
2136
+ children: [
2137
+ /* @__PURE__ */ jsx(Columns3, { className: "mr-2 size-4" }),
2138
+ "Columns"
2139
+ ]
2140
+ }
2141
+ ) }),
2142
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
2143
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Toggle columns" }),
2144
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
2145
+ hideableColumns.map((column) => /* @__PURE__ */ jsx(
2146
+ DropdownMenuCheckboxItem,
2147
+ {
2148
+ checked: column.getIsVisible(),
2149
+ onCheckedChange: (value) => {
2150
+ column.toggleVisibility(value);
2151
+ },
2152
+ children: typeof column.columnDef.header === "string" ? column.columnDef.header : column.id
2153
+ },
2154
+ column.id
2155
+ ))
2156
+ ] })
2157
+ ] }),
2158
+ enableDensityToggle && onDensityChange && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
2159
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
2160
+ Button,
2161
+ {
2162
+ "aria-label": "Change density",
2163
+ size: "sm",
2164
+ variant: "outline",
2165
+ children: [
2166
+ density === "compact" ? /* @__PURE__ */ jsx(GripHorizontal, { className: "mr-2 size-4" }) : density === "comfortable" ? /* @__PURE__ */ jsx(StretchHorizontal, { className: "mr-2 size-4" }) : /* @__PURE__ */ jsx(AlignJustify, { className: "mr-2 size-4" }),
2167
+ "Density"
2168
+ ]
2169
+ }
2170
+ ) }),
2171
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
2172
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Row density" }),
2173
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
2174
+ /* @__PURE__ */ jsxs(
2175
+ DropdownMenuRadioGroup,
2176
+ {
2177
+ value: density,
2178
+ onValueChange: (value) => {
2179
+ onDensityChange(value);
2180
+ },
2181
+ children: [
2182
+ /* @__PURE__ */ jsxs(DropdownMenuRadioItem, { value: "compact", children: [
2183
+ /* @__PURE__ */ jsx(GripHorizontal, { className: "mr-2 size-4" }),
2184
+ "Compact"
2185
+ ] }),
2186
+ /* @__PURE__ */ jsxs(DropdownMenuRadioItem, { value: "default", children: [
2187
+ /* @__PURE__ */ jsx(AlignJustify, { className: "mr-2 size-4" }),
2188
+ "Default"
2189
+ ] }),
2190
+ /* @__PURE__ */ jsxs(DropdownMenuRadioItem, { value: "comfortable", children: [
2191
+ /* @__PURE__ */ jsx(StretchHorizontal, { className: "mr-2 size-4" }),
2192
+ "Comfortable"
2193
+ ] })
2194
+ ]
2195
+ }
2196
+ )
2197
+ ] })
2198
+ ] }),
2199
+ enableExport && exportFormats.length === 1 && /* @__PURE__ */ jsxs(
2200
+ Button,
2201
+ {
2202
+ "aria-label": "Export",
2203
+ size: "sm",
2204
+ variant: "outline",
2205
+ onClick: () => {
2206
+ const format = exportFormats[0];
2207
+ if (format) void onExport(format);
2208
+ },
2209
+ children: [
2210
+ /* @__PURE__ */ jsx(Download, { className: "mr-2 size-4" }),
2211
+ "Export"
2212
+ ]
2213
+ }
2214
+ ),
2215
+ enableExport && exportFormats.length > 1 && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
2216
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
2217
+ Button,
2218
+ {
2219
+ "aria-label": "Export",
2220
+ size: "sm",
2221
+ variant: "outline",
2222
+ children: [
2223
+ /* @__PURE__ */ jsx(Download, { className: "mr-2 size-4" }),
2224
+ "Export"
2225
+ ]
2226
+ }
2227
+ ) }),
2228
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
2229
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: "Export as" }),
2230
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
2231
+ exportFormats.map((format) => /* @__PURE__ */ jsxs(
2232
+ DropdownMenuItem,
2233
+ {
2234
+ onClick: () => {
2235
+ void onExport(format);
2236
+ },
2237
+ children: [
2238
+ format === "csv" ? /* @__PURE__ */ jsx(FileText, { className: "mr-2 size-4" }) : /* @__PURE__ */ jsx(FileSpreadsheet, { className: "mr-2 size-4" }),
2239
+ format === "csv" ? "CSV (.csv)" : "Excel (.xlsx)"
2240
+ ]
2241
+ },
2242
+ format
2243
+ ))
2244
+ ] })
2245
+ ] }),
2246
+ enablePrint && onPrint && /* @__PURE__ */ jsxs(
2247
+ Button,
2248
+ {
2249
+ "aria-label": "Print",
2250
+ size: "sm",
2251
+ variant: "outline",
2252
+ onClick: onPrint,
2253
+ children: [
2254
+ /* @__PURE__ */ jsx(Printer, { className: "mr-2 size-4" }),
2255
+ "Print"
2256
+ ]
2257
+ }
2258
+ )
2259
+ ] })
2260
+ ]
2261
+ }
2262
+ ) : null,
2263
+ enableAdvancedFilter && advancedFilterColumns.length > 0 && /* @__PURE__ */ jsx(
2264
+ FilterBuilder,
2265
+ {
2266
+ columns: advancedFilterColumns,
2267
+ filter: currentAdvancedFilter,
2268
+ presets: filterPresets,
2269
+ onDeletePreset: onDeleteFilterPreset,
2270
+ onFilterChange: onAdvancedFilterChange,
2271
+ onSavePreset: onSaveFilterPreset
2272
+ }
2273
+ )
2274
+ ] });
2275
+ }
2276
+ function renderCellInput(accessorKey, editType, editOptions, cellValue, onChangeValue) {
2277
+ if (editType === "select") {
2278
+ return /* @__PURE__ */ jsxs(
2279
+ "select",
2280
+ {
2281
+ "aria-label": `New ${accessorKey}`,
2282
+ className: "h-8 w-full rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2283
+ value: typeof cellValue === "string" ? cellValue : "",
2284
+ onChange: (e) => {
2285
+ onChangeValue(accessorKey, e.target.value);
2286
+ },
2287
+ children: [
2288
+ /* @__PURE__ */ jsx("option", { value: "", children: "\u2014" }),
2289
+ editOptions.map((option) => /* @__PURE__ */ jsx("option", { value: option, children: option }, option))
2290
+ ]
2291
+ }
2292
+ );
2293
+ }
2294
+ if (editType === "checkbox") {
2295
+ return /* @__PURE__ */ jsx(
2296
+ "input",
2297
+ {
2298
+ "aria-label": `New ${accessorKey}`,
2299
+ checked: Boolean(cellValue),
2300
+ className: "size-4 rounded border border-input",
2301
+ type: "checkbox",
2302
+ onChange: (e) => {
2303
+ onChangeValue(accessorKey, e.target.checked);
2304
+ }
2305
+ }
2306
+ );
2307
+ }
2308
+ return /* @__PURE__ */ jsx(
2309
+ "input",
2310
+ {
2311
+ value: editType === "number" ? cellValue ?? "" : typeof cellValue === "string" ? cellValue : "",
2312
+ "aria-label": `New ${accessorKey}`,
2313
+ className: "h-8 w-full rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2314
+ type: editType === "number" ? "number" : editType === "date" ? "date" : "text",
2315
+ onChange: (e) => {
2316
+ onChangeValue(
2317
+ accessorKey,
2318
+ editType === "number" ? e.target.valueAsNumber : e.target.value
2319
+ );
2320
+ }
2321
+ }
2322
+ );
2323
+ }
2324
+ function DataTableTrailingRowInner({
2325
+ columns,
2326
+ onAdd
2327
+ }) {
2328
+ const [editing, setEditing] = React14.useState(false);
2329
+ const [values, setValues] = React14.useState({});
2330
+ const handleCancel = React14.useCallback(() => {
2331
+ setEditing(false);
2332
+ setValues({});
2333
+ }, []);
2334
+ const handleSave = React14.useCallback(() => {
2335
+ onAdd(values);
2336
+ setEditing(false);
2337
+ setValues({});
2338
+ }, [onAdd, values]);
2339
+ const handleKeyDown = React14.useCallback(
2340
+ (e) => {
2341
+ if (e.key === "Escape") {
2342
+ e.preventDefault();
2343
+ handleCancel();
2344
+ }
2345
+ },
2346
+ [handleCancel]
2347
+ );
2348
+ const handleChangeValue = React14.useCallback(
2349
+ (key, value) => {
2350
+ setValues((prev) => ({ ...prev, [key]: value }));
2351
+ },
2352
+ []
2353
+ );
2354
+ if (!editing) {
2355
+ return /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: columns.length, children: /* @__PURE__ */ jsxs(
2356
+ "button",
2357
+ {
2358
+ className: "flex w-full items-center gap-2 px-4 py-2 text-sm text-muted-foreground hover:bg-muted/50 hover:text-foreground transition-colors",
2359
+ type: "button",
2360
+ onClick: () => {
2361
+ setEditing(true);
2362
+ },
2363
+ children: [
2364
+ /* @__PURE__ */ jsx(Plus, { className: "size-4" }),
2365
+ "Add row"
2366
+ ]
2367
+ }
2368
+ ) }) });
2369
+ }
2370
+ return /* @__PURE__ */ jsxs("tr", { onKeyDown: handleKeyDown, children: [
2371
+ columns.map((col) => {
2372
+ const accessorKey = "accessorKey" in col ? String(col.accessorKey) : col.id ?? "";
2373
+ const meta = col.meta;
2374
+ const editable = meta?.editable ?? false;
2375
+ const editType = meta?.editType ?? "text";
2376
+ const editOptions = meta?.editOptions ?? [];
2377
+ if (!editable || !accessorKey) {
2378
+ return /* @__PURE__ */ jsx("td", {}, accessorKey || col.id);
2379
+ }
2380
+ return /* @__PURE__ */ jsx("td", { className: "px-2 py-1", children: renderCellInput(accessorKey, editType, editOptions, values[accessorKey], handleChangeValue) }, accessorKey);
2381
+ }),
2382
+ /* @__PURE__ */ jsx("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
2383
+ /* @__PURE__ */ jsx(
2384
+ Button,
2385
+ {
2386
+ "aria-label": "Save new row",
2387
+ size: "icon",
2388
+ variant: "ghost",
2389
+ onClick: handleSave,
2390
+ children: /* @__PURE__ */ jsx(Check, { className: "size-4" })
2391
+ }
2392
+ ),
2393
+ /* @__PURE__ */ jsx(
2394
+ Button,
2395
+ {
2396
+ "aria-label": "Cancel new row",
2397
+ size: "icon",
2398
+ variant: "ghost",
2399
+ onClick: handleCancel,
2400
+ children: /* @__PURE__ */ jsx(X, { className: "size-4" })
2401
+ }
2402
+ )
2403
+ ] }) })
2404
+ ] });
2405
+ }
2406
+ var DataTableTrailingRow = DataTableTrailingRowInner;
2407
+
2408
+ // src/components/data-display/DataTable/DataTable.export.ts
2409
+ function escapeCSV(value) {
2410
+ let sanitized = value;
2411
+ if (/^[=+\-@\t\r]/.test(sanitized)) {
2412
+ sanitized = "'" + sanitized;
2413
+ }
2414
+ if (sanitized.includes(",") || sanitized.includes('"') || sanitized.includes("\n")) {
2415
+ return `"${sanitized.replaceAll('"', '""')}"`;
2416
+ }
2417
+ return sanitized;
2418
+ }
2419
+ function tableToCSV(table, options = {}) {
2420
+ const {
2421
+ includeHeaders = true,
2422
+ onlyVisibleColumns = true,
2423
+ onlyFilteredRows = false
2424
+ } = options;
2425
+ const columns = onlyVisibleColumns ? table.getVisibleLeafColumns() : table.getAllLeafColumns();
2426
+ const exportColumns = columns.filter((col) => col.id !== "select" && col.id !== "_row_number");
2427
+ const rows = onlyFilteredRows ? table.getFilteredRowModel().rows : table.getCoreRowModel().rows;
2428
+ const lines = [];
2429
+ if (includeHeaders) {
2430
+ const headerLine = exportColumns.map((col) => {
2431
+ const header = col.columnDef.header;
2432
+ return typeof header === "string" ? escapeCSV(header) : escapeCSV(col.id);
2433
+ }).join(",");
2434
+ lines.push(headerLine);
2435
+ }
2436
+ rows.forEach((row) => {
2437
+ const rowLine = exportColumns.map((col) => escapeCSV(String(row.getValue(col.id) ?? ""))).join(",");
2438
+ lines.push(rowLine);
2439
+ });
2440
+ return lines.join("\n");
2441
+ }
2442
+ function downloadFile(content, filename, mimeType) {
2443
+ const blob = new Blob([content], { type: mimeType });
2444
+ const url = URL.createObjectURL(blob);
2445
+ const link = document.createElement("a");
2446
+ link.href = url;
2447
+ link.download = filename;
2448
+ document.body.appendChild(link);
2449
+ link.click();
2450
+ document.body.removeChild(link);
2451
+ URL.revokeObjectURL(url);
2452
+ }
2453
+ function exportToCSV(table, filename = "export", options = {}) {
2454
+ const csv = tableToCSV(table, options);
2455
+ downloadFile(csv, `${filename}.csv`, "text/csv;charset=utf-8;");
2456
+ }
2457
+ async function exportToPDF(table, filename = "export", options = {}) {
2458
+ const {
2459
+ includeHeaders = true,
2460
+ onlyVisibleColumns = true,
2461
+ onlyFilteredRows = false
2462
+ } = options;
2463
+ try {
2464
+ const { default: jsPDF } = await import('./jspdf.node.min-CTWP225M.js');
2465
+ await import('./jspdf.plugin.autotable-AAE7PZKA.js');
2466
+ const columns = onlyVisibleColumns ? table.getVisibleLeafColumns() : table.getAllLeafColumns();
2467
+ const exportColumns = columns.filter((col) => col.id !== "select" && col.id !== "_row_number");
2468
+ const rows = onlyFilteredRows ? table.getFilteredRowModel().rows : table.getCoreRowModel().rows;
2469
+ const headers = exportColumns.map((col) => {
2470
+ const header = col.columnDef.header;
2471
+ return typeof header === "string" ? header : col.id;
2472
+ });
2473
+ const body = rows.map(
2474
+ (row) => exportColumns.map((col) => String(row.getValue(col.id) ?? ""))
2475
+ );
2476
+ const doc = new jsPDF({ orientation: "landscape" });
2477
+ const docWithAutoTable = doc;
2478
+ docWithAutoTable.autoTable({
2479
+ head: includeHeaders ? [headers] : void 0,
2480
+ body
2481
+ });
2482
+ doc.save(`${filename}.pdf`);
2483
+ } catch (error) {
2484
+ console.error("Failed to load jspdf libraries for PDF export:", error);
2485
+ throw error;
2486
+ }
2487
+ }
2488
+ async function exportToExcel(table, filename = "export", options = {}) {
2489
+ const {
2490
+ includeHeaders = true,
2491
+ onlyVisibleColumns = true,
2492
+ onlyFilteredRows = false
2493
+ } = options;
2494
+ try {
2495
+ const XLSX = await import('./xlsx-PWHBQ6NK.js');
2496
+ const columns = onlyVisibleColumns ? table.getVisibleLeafColumns() : table.getAllLeafColumns();
2497
+ const exportColumns = columns.filter((col) => col.id !== "select" && col.id !== "_row_number");
2498
+ const rows = onlyFilteredRows ? table.getFilteredRowModel().rows : table.getCoreRowModel().rows;
2499
+ const headers = exportColumns.map((col) => {
2500
+ const header = col.columnDef.header;
2501
+ return typeof header === "string" ? header : col.id;
2502
+ });
2503
+ const data = rows.map((row) => {
2504
+ const rowData = {};
2505
+ exportColumns.forEach((col, index) => {
2506
+ const key = headers[index] ?? col.id;
2507
+ rowData[key] = row.getValue(col.id);
2508
+ });
2509
+ return rowData;
2510
+ });
2511
+ const ws = XLSX.utils.json_to_sheet(data, {
2512
+ header: includeHeaders ? headers : void 0,
2513
+ skipHeader: !includeHeaders
2514
+ });
2515
+ const wb = XLSX.utils.book_new();
2516
+ XLSX.utils.book_append_sheet(wb, ws, "Data");
2517
+ XLSX.writeFile(wb, `${filename}.xlsx`);
2518
+ } catch (error) {
2519
+ console.error("Failed to load xlsx library for Excel export:", error);
2520
+ throw error;
2521
+ }
2522
+ }
2523
+
2524
+ // src/components/data-display/DataTable/filterGroupToColumnFilters.ts
2525
+ function toStr(val) {
2526
+ if (val == null) return "";
2527
+ if (typeof val === "string") return val;
2528
+ if (typeof val === "number" || typeof val === "boolean") return val.toString();
2529
+ return JSON.stringify(val);
2530
+ }
2531
+ function evaluateCondition(condition, cellValue) {
2532
+ const value = toStr(cellValue).toLowerCase();
2533
+ const filterValue = toStr(condition.value).toLowerCase();
2534
+ switch (condition.operator) {
2535
+ case "contains":
2536
+ return value.includes(filterValue);
2537
+ case "notContains":
2538
+ return !value.includes(filterValue);
2539
+ case "equals":
2540
+ return value === filterValue;
2541
+ case "notEquals":
2542
+ return value !== filterValue;
2543
+ case "startsWith":
2544
+ return value.startsWith(filterValue);
2545
+ case "endsWith":
2546
+ return value.endsWith(filterValue);
2547
+ case "isEmpty":
2548
+ return value === "";
2549
+ case "isNotEmpty":
2550
+ return value !== "";
2551
+ case "gt":
2552
+ return Number(cellValue) > Number(condition.value);
2553
+ case "gte":
2554
+ return Number(cellValue) >= Number(condition.value);
2555
+ case "lt":
2556
+ return Number(cellValue) < Number(condition.value);
2557
+ case "lte":
2558
+ return Number(cellValue) <= Number(condition.value);
2559
+ case "between":
2560
+ return Number(cellValue) >= Number(condition.value) && Number(cellValue) <= Number(condition.value2);
2561
+ case "before":
2562
+ return new Date(String(cellValue)) < new Date(String(condition.value));
2563
+ case "after":
2564
+ return new Date(String(cellValue)) > new Date(String(condition.value));
2565
+ case "dateBetween":
2566
+ return new Date(String(cellValue)) >= new Date(String(condition.value)) && new Date(String(cellValue)) <= new Date(String(condition.value2));
2567
+ case "in":
2568
+ return filterValue.split(",").map((v) => v.trim()).includes(value);
2569
+ case "notIn":
2570
+ return !filterValue.split(",").map((v) => v.trim()).includes(value);
2571
+ default:
2572
+ return true;
2573
+ }
2574
+ }
2575
+ function evaluateFilterGroup(group, getColumnValue) {
2576
+ if (group.conditions.length === 0) return true;
2577
+ const results = group.conditions.map((item) => {
2578
+ if (isFilterGroup(item)) {
2579
+ return evaluateFilterGroup(item, getColumnValue);
2580
+ }
2581
+ if (isFilterCondition(item)) {
2582
+ if (!item.column) return true;
2583
+ const cellValue = getColumnValue(item.column);
2584
+ return evaluateCondition(item, cellValue);
2585
+ }
2586
+ return true;
2587
+ });
2588
+ return group.logic === "AND" ? results.every(Boolean) : results.some(Boolean);
2589
+ }
2590
+ function useDataTableKeyboard({
2591
+ enableEditing,
2592
+ enableKeyboardNavigation,
2593
+ enableRowSelection,
2594
+ keyboardShortcuts,
2595
+ onCellFocus,
2596
+ startEdit,
2597
+ table,
2598
+ tableRef
2599
+ }) {
2600
+ const [focusedCell, setFocusedCell] = React14.useState(
2601
+ enableKeyboardNavigation ? { row: 0, col: 0 } : null
2602
+ );
2603
+ const computeNewPosition = React14.useCallback(
2604
+ (key, ctrlKey, currentRow, currentCol, totalRows, totalCols) => {
2605
+ const handlers = {
2606
+ ArrowDown: () => ({
2607
+ row: currentRow < totalRows - 1 ? currentRow + 1 : currentRow,
2608
+ col: currentCol,
2609
+ handled: currentRow < totalRows - 1
2610
+ }),
2611
+ ArrowLeft: () => ({
2612
+ row: currentRow,
2613
+ col: currentCol > 0 ? currentCol - 1 : currentCol,
2614
+ handled: currentCol > 0
2615
+ }),
2616
+ ArrowRight: () => ({
2617
+ row: currentRow,
2618
+ col: currentCol < totalCols - 1 ? currentCol + 1 : currentCol,
2619
+ handled: currentCol < totalCols - 1
2620
+ }),
2621
+ ArrowUp: () => ({
2622
+ row: currentRow > 0 ? currentRow - 1 : currentRow,
2623
+ col: currentCol,
2624
+ handled: currentRow > 0
2625
+ }),
2626
+ End: () => ({
2627
+ row: ctrlKey ? totalRows - 1 : currentRow,
2628
+ col: totalCols - 1,
2629
+ handled: true
2630
+ }),
2631
+ Home: () => ({
2632
+ row: ctrlKey ? 0 : currentRow,
2633
+ col: 0,
2634
+ handled: true
2635
+ }),
2636
+ PageDown: () => ({
2637
+ row: Math.min(currentRow + 10, totalRows - 1),
2638
+ col: currentCol,
2639
+ handled: true
2640
+ }),
2641
+ PageUp: () => ({
2642
+ row: Math.max(currentRow - 10, 0),
2643
+ col: currentCol,
2644
+ handled: true
2645
+ })
2646
+ };
2647
+ const handler = handlers[key];
2648
+ return handler ? handler() : { row: currentRow, col: currentCol, handled: false };
2649
+ },
2650
+ []
2651
+ );
2652
+ const tryKeyboardEdit = React14.useCallback(
2653
+ (rows, visibleColumns) => {
2654
+ if (!enableEditing || !focusedCell) return false;
2655
+ const row = rows[focusedCell.row];
2656
+ const column = visibleColumns[focusedCell.col];
2657
+ if (!row || !column) return false;
2658
+ const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : void 0;
2659
+ if (!meta?.editable) return false;
2660
+ startEdit(row.id, column.id, row.getValue(column.id), column);
2661
+ return true;
2662
+ },
2663
+ [enableEditing, focusedCell, startEdit]
2664
+ );
2665
+ const moveFocus = React14.useCallback(
2666
+ (newRow, newCol, visibleColumns) => {
2667
+ if (!focusedCell || newRow === focusedCell.row && newCol === focusedCell.col) return;
2668
+ setFocusedCell({ row: newRow, col: newCol });
2669
+ const cellSelector = `[data-row="${String(newRow)}"][data-col="${String(newCol)}"]`;
2670
+ const cell = tableRef.current?.querySelector(cellSelector);
2671
+ cell?.focus();
2672
+ if (onCellFocus) {
2673
+ const column = visibleColumns[newCol];
2674
+ if (column) onCellFocus(newRow, column.id);
2675
+ }
2676
+ },
2677
+ [focusedCell, onCellFocus, tableRef]
2678
+ );
2679
+ const handleKeyDown = React14.useCallback(
2680
+ (event) => {
2681
+ if (!enableKeyboardNavigation || !focusedCell) return;
2682
+ const rows = table.getRowModel().rows;
2683
+ const visibleColumns = table.getVisibleLeafColumns();
2684
+ if ((event.key === "Enter" || event.key === "F2") && tryKeyboardEdit(rows, visibleColumns)) {
2685
+ event.preventDefault();
2686
+ return;
2687
+ }
2688
+ const selectKey = keyboardShortcuts.select ?? " ";
2689
+ if (event.key === selectKey && enableRowSelection) {
2690
+ const row = rows[focusedCell.row];
2691
+ if (row) {
2692
+ event.preventDefault();
2693
+ row.toggleSelected();
2694
+ }
2695
+ return;
2696
+ }
2697
+ const { row: newRow, col: newCol, handled } = computeNewPosition(
2698
+ event.key,
2699
+ event.ctrlKey || event.metaKey,
2700
+ focusedCell.row,
2701
+ focusedCell.col,
2702
+ rows.length,
2703
+ visibleColumns.length
2704
+ );
2705
+ if (handled) {
2706
+ event.preventDefault();
2707
+ moveFocus(newRow, newCol, visibleColumns);
2708
+ }
2709
+ },
2710
+ [enableKeyboardNavigation, focusedCell, table, enableRowSelection, tryKeyboardEdit, moveFocus, computeNewPosition, keyboardShortcuts]
2711
+ );
2712
+ const handleCellFocus = React14.useCallback(
2713
+ (rowIndex, colIndex) => {
2714
+ if (!enableKeyboardNavigation) return;
2715
+ setFocusedCell({ row: rowIndex, col: colIndex });
2716
+ },
2717
+ [enableKeyboardNavigation]
2718
+ );
2719
+ return {
2720
+ focusedCell,
2721
+ handleCellFocus,
2722
+ handleKeyDown
2723
+ };
2724
+ }
2725
+
2726
+ // src/components/data-display/DataTable/useDataTable.ts
2727
+ var DEBOUNCE_MS = 150;
2728
+ function loadPersistedState(key, storage) {
2729
+ if (!key) return null;
2730
+ const store = storage ?? (typeof window !== "undefined" ? window.localStorage : null);
2731
+ if (!store) return null;
2732
+ try {
2733
+ const raw = store.getItem(`datatable-${key}`);
2734
+ if (!raw) return null;
2735
+ const parsed = JSON.parse(raw);
2736
+ if (parsed.v !== 1) return null;
2737
+ return parsed;
2738
+ } catch {
2739
+ return null;
2740
+ }
2741
+ }
2742
+ function useDebouncedCallback(callback, delay) {
2743
+ const timerRef = React14.useRef(null);
2744
+ React14.useEffect(() => {
2745
+ return () => {
2746
+ if (timerRef.current) clearTimeout(timerRef.current);
2747
+ };
2748
+ }, []);
2749
+ return React14.useCallback(
2750
+ (value) => {
2751
+ if (timerRef.current) clearTimeout(timerRef.current);
2752
+ timerRef.current = setTimeout(() => {
2753
+ callback(value);
2754
+ }, delay);
2755
+ },
2756
+ [callback, delay]
2757
+ );
2758
+ }
2759
+ function useDataTable(props, selectionColumn, rowNumberColumn = null) {
2760
+ const {
2761
+ advancedFilter,
2762
+ columnFilters: controlledColumnFilters,
2763
+ columnOrder: controlledColumnOrder,
2764
+ columnPinning: controlledColumnPinning,
2765
+ columnResizeMode = "onChange",
2766
+ columnSizing: controlledColumnSizing,
2767
+ columnVisibility: controlledColumnVisibility,
2768
+ columns,
2769
+ data,
2770
+ enableAdvancedFilter = false,
2771
+ enableClipboard = false,
2772
+ enableColumnAutoSize = false,
2773
+ enableColumnFilters = false,
2774
+ enableColumnOrdering = false,
2775
+ enableColumnPinning = false,
2776
+ enableColumnResizing = false,
2777
+ enableColumnVirtualization = false,
2778
+ enableEditing = false,
2779
+ enableFiltering = true,
2780
+ enableGrouping = false,
2781
+ enableKeyboardNavigation = false,
2782
+ enableMultiSort = false,
2783
+ enableVirtualization = false,
2784
+ enableRowPinning = false,
2785
+ enableRowSelection = false,
2786
+ enableSorting = true,
2787
+ enableTreeData = false,
2788
+ expanded: controlledExpanded,
2789
+ exportFilename = "export",
2790
+ getRowCanExpand,
2791
+ getSubRows,
2792
+ globalFilter: controlledGlobalFilter,
2793
+ grouping: controlledGrouping,
2794
+ initialColumnFilters,
2795
+ initialColumnPinning,
2796
+ initialGlobalFilter,
2797
+ initialPagination,
2798
+ initialSorting,
2799
+ keyboardShortcuts = {},
2800
+ manualFiltering = false,
2801
+ manualPagination = false,
2802
+ manualSorting = false,
2803
+ maxMultiSortColCount,
2804
+ onAdvancedFilterChange,
2805
+ onCellEdit,
2806
+ onCellEditCancel,
2807
+ onCellFocus,
2808
+ onColumnFiltersChange,
2809
+ onColumnOrderChange,
2810
+ onColumnPinningChange,
2811
+ onColumnSizingChange,
2812
+ onColumnVisibilityChange,
2813
+ onExpandedChange,
2814
+ onExport,
2815
+ onGlobalFilterChange,
2816
+ onGroupingChange,
2817
+ onPaginationChange,
2818
+ onRowPinningChange,
2819
+ onRowSelectionChange,
2820
+ onSelectionChange,
2821
+ onSortingChange,
2822
+ pageCount,
2823
+ pageSize = 10,
2824
+ persistenceKey,
2825
+ persistenceStorage,
2826
+ pagination: controlledPagination,
2827
+ rowPinning: controlledRowPinning,
2828
+ rowSelection: controlledRowSelection,
2829
+ showFooter = false,
2830
+ sorting: controlledSorting,
2831
+ treeExpandDepth = 1
2832
+ } = props;
2833
+ const [persisted] = React14.useState(() => loadPersistedState(persistenceKey, persistenceStorage));
2834
+ const [internalSorting, setInternalSorting] = React14.useState(
2835
+ initialSorting ?? persisted?.sorting ?? []
2836
+ );
2837
+ const [internalGlobalFilter, setInternalGlobalFilter] = React14.useState(
2838
+ initialGlobalFilter ?? ""
2839
+ );
2840
+ const [internalColumnFilters, setInternalColumnFilters] = React14.useState(initialColumnFilters ?? persisted?.columnFilters ?? []);
2841
+ const [internalColumnOrder, setInternalColumnOrder] = React14.useState(persisted?.columnOrder ?? []);
2842
+ const [internalColumnVisibility, setInternalColumnVisibility] = React14.useState(persisted?.columnVisibility ?? {});
2843
+ const [internalPagination, setInternalPagination] = React14.useState({
2844
+ pageIndex: initialPagination?.pageIndex ?? 0,
2845
+ pageSize: initialPagination?.pageSize ?? persisted?.pagination?.pageSize ?? pageSize
2846
+ });
2847
+ const [internalRowSelection, setInternalRowSelection] = React14.useState({});
2848
+ const [internalExpanded, setInternalExpanded] = React14.useState(enableTreeData && treeExpandDepth > 0 ? true : {});
2849
+ const [internalGrouping, setInternalGrouping] = React14.useState([]);
2850
+ const [internalColumnSizing, setInternalColumnSizing] = React14.useState(persisted?.columnSizing ?? {});
2851
+ const [internalColumnPinning, setInternalColumnPinning] = React14.useState(initialColumnPinning ?? persisted?.columnPinning ?? {});
2852
+ const [internalRowPinning, setInternalRowPinning] = React14.useState({ top: [], bottom: [] });
2853
+ const [internalAdvancedFilter, setInternalAdvancedFilter] = React14.useState({
2854
+ id: "root",
2855
+ logic: "AND",
2856
+ conditions: []
2857
+ });
2858
+ const tableRef = React14.useRef(null);
2859
+ const previousSelectionRef = React14.useRef(null);
2860
+ const [editingCell, setEditingCell] = React14.useState(null);
2861
+ const [editValue, setEditValue] = React14.useState("");
2862
+ const [editError, setEditError] = React14.useState(null);
2863
+ const editInputRef = React14.useRef(null);
2864
+ const [searchDisplayValue, setSearchDisplayValue] = React14.useState(controlledGlobalFilter ?? initialGlobalFilter ?? "");
2865
+ const filterUpdateFn = React14.useCallback(
2866
+ (value) => {
2867
+ if (onGlobalFilterChange) {
2868
+ onGlobalFilterChange(value);
2869
+ } else {
2870
+ setInternalGlobalFilter(value);
2871
+ }
2872
+ },
2873
+ [onGlobalFilterChange]
2874
+ );
2875
+ const debouncedFilterUpdate = useDebouncedCallback(filterUpdateFn, DEBOUNCE_MS);
2876
+ const sorting = controlledSorting ?? internalSorting;
2877
+ const globalFilter = controlledGlobalFilter ?? internalGlobalFilter;
2878
+ const columnFilters = controlledColumnFilters ?? internalColumnFilters;
2879
+ const columnOrder = controlledColumnOrder ?? internalColumnOrder;
2880
+ const columnVisibility = controlledColumnVisibility ?? internalColumnVisibility;
2881
+ const pagination = controlledPagination ?? internalPagination;
2882
+ const rowSelection = controlledRowSelection ?? internalRowSelection;
2883
+ const expanded = controlledExpanded ?? internalExpanded;
2884
+ const grouping = controlledGrouping ?? internalGrouping;
2885
+ const columnSizing = controlledColumnSizing ?? internalColumnSizing;
2886
+ const columnPinning = controlledColumnPinning ?? internalColumnPinning;
2887
+ const rowPinning = controlledRowPinning ?? internalRowPinning;
2888
+ const currentAdvancedFilter = advancedFilter ?? internalAdvancedFilter;
2889
+ const handleAdvancedFilterChange = React14.useCallback(
2890
+ (filter) => {
2891
+ if (onAdvancedFilterChange) {
2892
+ onAdvancedFilterChange(filter);
2893
+ } else {
2894
+ setInternalAdvancedFilter(filter);
2895
+ }
2896
+ },
2897
+ [onAdvancedFilterChange]
2898
+ );
2899
+ const handleRowSelectionChange = React14.useCallback(
2900
+ (updaterOrValue) => {
2901
+ const newValue = typeof updaterOrValue === "function" ? updaterOrValue(rowSelection) : updaterOrValue;
2902
+ if (onRowSelectionChange) {
2903
+ onRowSelectionChange(newValue);
2904
+ } else {
2905
+ setInternalRowSelection(newValue);
2906
+ }
2907
+ },
2908
+ [rowSelection, onRowSelectionChange]
2909
+ );
2910
+ const startEdit = React14.useCallback(
2911
+ (rowId, columnId, currentValue, column) => {
2912
+ if (!enableEditing) return;
2913
+ const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : void 0;
2914
+ if (!meta?.editable) return;
2915
+ setEditingCell({ rowId, columnId });
2916
+ setEditValue(currentValue);
2917
+ setEditError(null);
2918
+ },
2919
+ [enableEditing]
2920
+ );
2921
+ const cancelEdit = React14.useCallback(
2922
+ (row, column, oldValue) => {
2923
+ if (onCellEditCancel && editingCell) {
2924
+ onCellEditCancel({ row, column, oldValue });
2925
+ }
2926
+ setEditingCell(null);
2927
+ setEditValue("");
2928
+ setEditError(null);
2929
+ },
2930
+ [editingCell, onCellEditCancel]
2931
+ );
2932
+ const submitEdit = React14.useCallback(
2933
+ async (row, column, oldValue) => {
2934
+ const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : void 0;
2935
+ if (meta?.validate) {
2936
+ const validationError = meta.validate(editValue, row);
2937
+ if (validationError) {
2938
+ setEditError(validationError);
2939
+ return;
2940
+ }
2941
+ }
2942
+ if (onCellEdit) {
2943
+ const params = { row, column, value: editValue, oldValue };
2944
+ try {
2945
+ const result = await Promise.resolve(onCellEdit(params));
2946
+ if (!result) return;
2947
+ } catch {
2948
+ return;
2949
+ }
2950
+ }
2951
+ setEditingCell(null);
2952
+ setEditValue("");
2953
+ setEditError(null);
2954
+ },
2955
+ [editValue, onCellEdit]
2956
+ );
2957
+ const setEditInputRef = React14.useCallback((node) => {
2958
+ editInputRef.current = node;
2959
+ if (node) {
2960
+ node.focus();
2961
+ if (node instanceof HTMLInputElement) {
2962
+ node.select();
2963
+ }
2964
+ }
2965
+ }, []);
2966
+ const tableColumns = React14.useMemo(() => {
2967
+ const result = [];
2968
+ if (rowNumberColumn) result.push(rowNumberColumn);
2969
+ if (enableRowSelection && selectionColumn) result.push(selectionColumn);
2970
+ result.push(...columns);
2971
+ return result;
2972
+ }, [columns, enableRowSelection, rowNumberColumn, selectionColumn]);
2973
+ const filteredData = React14.useMemo(() => {
2974
+ if (!enableAdvancedFilter || currentAdvancedFilter.conditions.length === 0) return data;
2975
+ return data.filter((row) => {
2976
+ return evaluateFilterGroup(currentAdvancedFilter, (columnId) => {
2977
+ return row[columnId];
2978
+ });
2979
+ });
2980
+ }, [data, enableAdvancedFilter, currentAdvancedFilter]);
2981
+ const table = useReactTable({
2982
+ data: filteredData,
2983
+ columns: tableColumns,
2984
+ state: {
2985
+ sorting,
2986
+ globalFilter,
2987
+ grouping,
2988
+ columnFilters,
2989
+ columnOrder: enableColumnOrdering ? columnOrder : void 0,
2990
+ columnVisibility,
2991
+ columnPinning,
2992
+ rowPinning,
2993
+ pagination,
2994
+ rowSelection,
2995
+ expanded,
2996
+ columnSizing
2997
+ },
2998
+ enableGrouping,
2999
+ enableRowPinning,
3000
+ enableRowSelection,
3001
+ enableSorting,
3002
+ enableMultiSort,
3003
+ maxMultiSortColCount,
3004
+ enableFilters: enableFiltering || enableColumnFilters,
3005
+ enableGlobalFilter: enableFiltering,
3006
+ enableColumnFilters,
3007
+ enableColumnResizing,
3008
+ enableColumnPinning,
3009
+ columnResizeMode,
3010
+ manualPagination,
3011
+ manualSorting,
3012
+ manualFiltering,
3013
+ pageCount: manualPagination ? pageCount : void 0,
3014
+ getRowCanExpand,
3015
+ getSubRows: enableTreeData ? getSubRows : void 0,
3016
+ getCoreRowModel: getCoreRowModel(),
3017
+ getSortedRowModel: manualSorting ? void 0 : getSortedRowModel(),
3018
+ getFilteredRowModel: manualFiltering ? void 0 : getFilteredRowModel(),
3019
+ getGroupedRowModel: enableGrouping ? getGroupedRowModel() : void 0,
3020
+ getPaginationRowModel: manualPagination || enableVirtualization ? void 0 : getPaginationRowModel(),
3021
+ getExpandedRowModel: getExpandedRowModel(),
3022
+ getFacetedRowModel: getFacetedRowModel(),
3023
+ getFacetedUniqueValues: getFacetedUniqueValues(),
3024
+ onSortingChange: onSortingChange ?? setInternalSorting,
3025
+ onGlobalFilterChange: onGlobalFilterChange ?? setInternalGlobalFilter,
3026
+ onGroupingChange: onGroupingChange ?? setInternalGrouping,
3027
+ onColumnFiltersChange: onColumnFiltersChange ?? setInternalColumnFilters,
3028
+ onColumnOrderChange: enableColumnOrdering ? onColumnOrderChange ?? setInternalColumnOrder : void 0,
3029
+ onColumnVisibilityChange: onColumnVisibilityChange ?? setInternalColumnVisibility,
3030
+ onPaginationChange: onPaginationChange ?? setInternalPagination,
3031
+ onRowSelectionChange: handleRowSelectionChange,
3032
+ onExpandedChange: onExpandedChange ?? setInternalExpanded,
3033
+ onColumnSizingChange: onColumnSizingChange ?? setInternalColumnSizing,
3034
+ onColumnPinningChange: onColumnPinningChange ?? setInternalColumnPinning,
3035
+ onRowPinningChange: onRowPinningChange ?? setInternalRowPinning
3036
+ });
3037
+ const handleExport = React14.useCallback(
3038
+ async (format = "csv") => {
3039
+ const filename = typeof exportFilename === "function" ? exportFilename() : exportFilename;
3040
+ const options = { filename };
3041
+ if (onExport) {
3042
+ onExport(format, data, options);
3043
+ return;
3044
+ }
3045
+ if (format === "excel") {
3046
+ await exportToExcel(table, filename);
3047
+ } else if (format === "pdf") {
3048
+ await exportToPDF(table, filename);
3049
+ } else {
3050
+ exportToCSV(table, filename);
3051
+ }
3052
+ },
3053
+ [data, exportFilename, onExport, table]
3054
+ );
3055
+ React14.useEffect(() => {
3056
+ if (!onSelectionChange) return;
3057
+ const previousSelection = previousSelectionRef.current;
3058
+ previousSelectionRef.current = rowSelection;
3059
+ if (previousSelection === null && Object.keys(rowSelection).length === 0) return;
3060
+ if (previousSelection) {
3061
+ const prevKeys = Object.keys(previousSelection);
3062
+ const currKeys = Object.keys(rowSelection);
3063
+ if (prevKeys.length === currKeys.length && prevKeys.every((key) => key in rowSelection)) {
3064
+ return;
3065
+ }
3066
+ }
3067
+ const selectedRows = table.getSelectedRowModel().flatRows.map((row) => row.original);
3068
+ onSelectionChange(selectedRows);
3069
+ }, [onSelectionChange, rowSelection, table]);
3070
+ const { focusedCell, handleCellFocus, handleKeyDown } = useDataTableKeyboard({
3071
+ enableEditing,
3072
+ enableKeyboardNavigation,
3073
+ enableRowSelection,
3074
+ keyboardShortcuts,
3075
+ onCellFocus,
3076
+ startEdit,
3077
+ table,
3078
+ tableRef
3079
+ });
3080
+ const hasFooter = showFooter && tableColumns.some(
3081
+ (col) => "footer" in col && col.footer !== void 0
3082
+ );
3083
+ const getPinnedStyles = React14.useCallback(
3084
+ (column) => {
3085
+ if (!enableColumnPinning) return {};
3086
+ const isPinned = column.getIsPinned();
3087
+ if (!isPinned) return {};
3088
+ const isLeftPinned = isPinned === "left";
3089
+ const isRightPinned = isPinned === "right";
3090
+ return {
3091
+ position: "sticky",
3092
+ left: isLeftPinned ? `${String(column.getStart("left"))}px` : void 0,
3093
+ right: isRightPinned ? `${String(column.getAfter("right"))}px` : void 0,
3094
+ backgroundColor: "var(--surface-default)",
3095
+ zIndex: 1
3096
+ };
3097
+ },
3098
+ [enableColumnPinning]
3099
+ );
3100
+ const getPinnedAttribute = React14.useCallback(
3101
+ (column) => {
3102
+ if (!enableColumnPinning) return void 0;
3103
+ const isPinned = column.getIsPinned();
3104
+ return isPinned ? isPinned : void 0;
3105
+ },
3106
+ [enableColumnPinning]
3107
+ );
3108
+ const persistTimerRef = React14.useRef(null);
3109
+ React14.useEffect(() => {
3110
+ if (!persistenceKey) return;
3111
+ if (persistTimerRef.current) clearTimeout(persistTimerRef.current);
3112
+ persistTimerRef.current = setTimeout(() => {
3113
+ const storage = persistenceStorage ?? (typeof window !== "undefined" ? window.localStorage : null);
3114
+ if (!storage) return;
3115
+ try {
3116
+ const state = {
3117
+ v: 1,
3118
+ sorting,
3119
+ columnOrder: enableColumnOrdering ? columnOrder : void 0,
3120
+ columnVisibility,
3121
+ columnSizing,
3122
+ columnPinning,
3123
+ pagination: { pageSize: pagination.pageSize },
3124
+ columnFilters
3125
+ };
3126
+ storage.setItem(`datatable-${persistenceKey}`, JSON.stringify(state));
3127
+ } catch {
3128
+ }
3129
+ }, 500);
3130
+ return () => {
3131
+ if (persistTimerRef.current) clearTimeout(persistTimerRef.current);
3132
+ };
3133
+ }, [persistenceKey, persistenceStorage, sorting, columnOrder, enableColumnOrdering, columnVisibility, columnSizing, columnPinning, pagination.pageSize, columnFilters]);
3134
+ const autoSizeRunRef = React14.useRef(false);
3135
+ React14.useEffect(() => {
3136
+ if (!enableColumnAutoSize || autoSizeRunRef.current) return;
3137
+ const timer = setTimeout(() => {
3138
+ const tableEl = tableRef.current;
3139
+ if (!tableEl) return;
3140
+ const allColumns = table.getAllLeafColumns();
3141
+ const newSizing = {};
3142
+ for (const col of allColumns) {
3143
+ const cells = tableEl.querySelectorAll(`[data-column-id="${col.id}"]`);
3144
+ let maxWidth = 0;
3145
+ cells.forEach((cell) => {
3146
+ maxWidth = Math.max(maxWidth, cell.scrollWidth + 2);
3147
+ });
3148
+ if (maxWidth > 0) {
3149
+ const min = col.columnDef.minSize ?? 20;
3150
+ const max = col.columnDef.maxSize ?? 1e3;
3151
+ newSizing[col.id] = Math.min(Math.max(maxWidth, min), max);
3152
+ }
3153
+ }
3154
+ if (Object.keys(newSizing).length > 0) {
3155
+ table.setColumnSizing((prev) => ({ ...prev, ...newSizing }));
3156
+ }
3157
+ autoSizeRunRef.current = true;
3158
+ }, 0);
3159
+ return () => {
3160
+ clearTimeout(timer);
3161
+ };
3162
+ }, [enableColumnAutoSize, table, tableRef]);
3163
+ const handleCopy = React14.useCallback(
3164
+ (event) => {
3165
+ if (!enableClipboard) return;
3166
+ const selectedRows = table.getSelectedRowModel().flatRows;
3167
+ if (selectedRows.length > 0) {
3168
+ event.preventDefault();
3169
+ const visibleColumns = table.getVisibleLeafColumns();
3170
+ const headers = visibleColumns.filter((col) => col.id !== "select" && col.id !== "_row_number").map((col) => typeof col.columnDef.header === "string" ? col.columnDef.header : col.id);
3171
+ const rows = selectedRows.map(
3172
+ (row) => visibleColumns.filter((col) => col.id !== "select" && col.id !== "_row_number").map((col) => {
3173
+ const value = row.getValue(col.id);
3174
+ if (value == null) return "";
3175
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
3176
+ return "";
3177
+ })
3178
+ );
3179
+ const tsv = [headers.join(" "), ...rows.map((r) => r.join(" "))].join("\n");
3180
+ event.clipboardData.setData("text/plain", tsv);
3181
+ }
3182
+ },
3183
+ [enableClipboard, table]
3184
+ );
3185
+ const scrollContainerRef = React14.useRef(null);
3186
+ const rowVirtualizer = useVirtualizer({
3187
+ count: props.enableVirtualization ? table.getRowModel().rows.length : 0,
3188
+ enabled: props.enableVirtualization ?? false,
3189
+ estimateSize: () => props.estimateRowHeight ?? 35,
3190
+ getScrollElement: () => scrollContainerRef.current,
3191
+ overscan: props.overscan ?? 5
3192
+ });
3193
+ const visibleLeafColumns = table.getVisibleLeafColumns();
3194
+ const columnVirtualizer = useVirtualizer({
3195
+ count: enableColumnVirtualization ? visibleLeafColumns.length : 0,
3196
+ enabled: enableColumnVirtualization,
3197
+ estimateSize: (index) => visibleLeafColumns[index]?.getSize() ?? 150,
3198
+ getScrollElement: () => scrollContainerRef.current,
3199
+ horizontal: true,
3200
+ overscan: props.overscan ?? 3
3201
+ });
3202
+ return {
3203
+ cancelEdit,
3204
+ columnVirtualizer: enableColumnVirtualization ? columnVirtualizer : void 0,
3205
+ currentAdvancedFilter,
3206
+ debouncedFilterUpdate,
3207
+ editError,
3208
+ editingCell,
3209
+ editValue,
3210
+ focusedCell,
3211
+ getPinnedAttribute,
3212
+ getPinnedStyles,
3213
+ handleAdvancedFilterChange,
3214
+ handleCellFocus,
3215
+ handleCopy,
3216
+ handleExport,
3217
+ handleKeyDown,
3218
+ hasFooter,
3219
+ pagination,
3220
+ rowVirtualizer: props.enableVirtualization ? rowVirtualizer : void 0,
3221
+ scrollContainerRef,
3222
+ searchDisplayValue,
3223
+ setEditInputRef,
3224
+ setEditValue,
3225
+ setInternalPagination,
3226
+ setSearchDisplayValue,
3227
+ startEdit,
3228
+ submitEdit,
3229
+ table,
3230
+ tableColumns,
3231
+ tableRef
3232
+ };
3233
+ }
3234
+ function buildEditKey(rowIndex, columnId) {
3235
+ return `${String(rowIndex)}:${columnId}`;
3236
+ }
3237
+ function useDataTableBatchEditing({
3238
+ enabled,
3239
+ selectedCells,
3240
+ table
3241
+ }) {
3242
+ const [pendingEdits, setPendingEdits] = React14.useState(
3243
+ () => /* @__PURE__ */ new Map()
3244
+ );
3245
+ const applyBatchEdit = React14.useCallback(
3246
+ (columnId, value) => {
3247
+ if (!enabled) return;
3248
+ const column = table.getColumn(columnId);
3249
+ if (!column) return;
3250
+ const meta = column.columnDef.meta;
3251
+ if (!meta?.editable) return;
3252
+ const visibleColumns = table.getVisibleLeafColumns();
3253
+ const columnIndex = visibleColumns.findIndex((c) => c.id === columnId);
3254
+ if (columnIndex === -1) return;
3255
+ const matchingCells = selectedCells.filter(
3256
+ (cell) => cell.col === columnIndex
3257
+ );
3258
+ if (matchingCells.length === 0) return;
3259
+ setPendingEdits((prev) => {
3260
+ const next = new Map(prev);
3261
+ for (const cell of matchingCells) {
3262
+ next.set(buildEditKey(cell.row, columnId), value);
3263
+ }
3264
+ return next;
3265
+ });
3266
+ },
3267
+ [enabled, selectedCells, table]
3268
+ );
3269
+ const clearBatchEdit = React14.useCallback(() => {
3270
+ setPendingEdits(/* @__PURE__ */ new Map());
3271
+ }, []);
3272
+ return {
3273
+ applyBatchEdit,
3274
+ clearBatchEdit,
3275
+ pendingEdits
3276
+ };
3277
+ }
3278
+ function normalizeRange(range) {
3279
+ return {
3280
+ endCol: Math.max(range.startCol, range.endCol),
3281
+ endRow: Math.max(range.startRow, range.endRow),
3282
+ startCol: Math.min(range.startCol, range.endCol),
3283
+ startRow: Math.min(range.startRow, range.endRow)
3284
+ };
3285
+ }
3286
+ function expandRange(range) {
3287
+ const normalized = normalizeRange(range);
3288
+ const cells = [];
3289
+ for (let row = normalized.startRow; row <= normalized.endRow; row++) {
3290
+ for (let col = normalized.startCol; col <= normalized.endCol; col++) {
3291
+ cells.push({ colIndex: col, rowIndex: row });
3292
+ }
3293
+ }
3294
+ return cells;
3295
+ }
3296
+ function useDataTableCellSelection({
3297
+ colCount,
3298
+ enabled,
3299
+ onSelectionChange,
3300
+ rowCount
3301
+ }) {
3302
+ const [state, setState] = React14.useState({
3303
+ colCount,
3304
+ range: null,
3305
+ rowCount
3306
+ });
3307
+ const isDraggingRef = React14.useRef(false);
3308
+ const anchorRef = React14.useRef(null);
3309
+ const selection = state.rowCount === rowCount && state.colCount === colCount ? state.range : null;
3310
+ const updateSelection = React14.useCallback(
3311
+ (range) => {
3312
+ setState({ colCount, range, rowCount });
3313
+ },
3314
+ [colCount, rowCount]
3315
+ );
3316
+ const notifySelectionChange = React14.useCallback(
3317
+ (range) => {
3318
+ if (!onSelectionChange) return;
3319
+ const cells = range ? expandRange(range) : [];
3320
+ onSelectionChange(cells);
3321
+ },
3322
+ [onSelectionChange]
3323
+ );
3324
+ const clearSelection = React14.useCallback(() => {
3325
+ updateSelection(null);
3326
+ anchorRef.current = null;
3327
+ notifySelectionChange(null);
3328
+ }, [updateSelection, notifySelectionChange]);
3329
+ const getSelectedCells = React14.useCallback(() => {
3330
+ if (!selection) return [];
3331
+ return expandRange(selection);
3332
+ }, [selection]);
3333
+ const isSelected = React14.useCallback(
3334
+ (rowIndex, colIndex) => {
3335
+ if (!selection) return false;
3336
+ const normalized = normalizeRange(selection);
3337
+ return rowIndex >= normalized.startRow && rowIndex <= normalized.endRow && colIndex >= normalized.startCol && colIndex <= normalized.endCol;
3338
+ },
3339
+ [selection]
3340
+ );
3341
+ const handleMouseDown = React14.useCallback(
3342
+ (rowIndex, colIndex, event) => {
3343
+ if (!enabled) return;
3344
+ if (event.shiftKey && anchorRef.current) {
3345
+ const newRange = {
3346
+ endCol: colIndex,
3347
+ endRow: rowIndex,
3348
+ startCol: anchorRef.current.col,
3349
+ startRow: anchorRef.current.row
3350
+ };
3351
+ updateSelection(newRange);
3352
+ notifySelectionChange(newRange);
3353
+ } else {
3354
+ anchorRef.current = { col: colIndex, row: rowIndex };
3355
+ const newRange = {
3356
+ endCol: colIndex,
3357
+ endRow: rowIndex,
3358
+ startCol: colIndex,
3359
+ startRow: rowIndex
3360
+ };
3361
+ updateSelection(newRange);
3362
+ isDraggingRef.current = true;
3363
+ notifySelectionChange(newRange);
3364
+ }
3365
+ },
3366
+ [enabled, updateSelection, notifySelectionChange]
3367
+ );
3368
+ const handleMouseMove = React14.useCallback(
3369
+ (rowIndex, colIndex) => {
3370
+ if (!enabled || !isDraggingRef.current || !anchorRef.current) return;
3371
+ const newRange = {
3372
+ endCol: colIndex,
3373
+ endRow: rowIndex,
3374
+ startCol: anchorRef.current.col,
3375
+ startRow: anchorRef.current.row
3376
+ };
3377
+ updateSelection(newRange);
3378
+ notifySelectionChange(newRange);
3379
+ },
3380
+ [enabled, updateSelection, notifySelectionChange]
3381
+ );
3382
+ const handleMouseUp = React14.useCallback(() => {
3383
+ isDraggingRef.current = false;
3384
+ }, []);
3385
+ React14.useEffect(() => {
3386
+ if (!enabled) return;
3387
+ const handleKeyDown = (event) => {
3388
+ const isCtrlOrMeta = event.ctrlKey || event.metaKey;
3389
+ if (isCtrlOrMeta && event.key === "a" && rowCount > 0 && colCount > 0) {
3390
+ event.preventDefault();
3391
+ const allRange = {
3392
+ endCol: colCount - 1,
3393
+ endRow: rowCount - 1,
3394
+ startCol: 0,
3395
+ startRow: 0
3396
+ };
3397
+ anchorRef.current = { col: 0, row: 0 };
3398
+ updateSelection(allRange);
3399
+ notifySelectionChange(allRange);
3400
+ }
3401
+ };
3402
+ const handleGlobalMouseUp = () => {
3403
+ isDraggingRef.current = false;
3404
+ };
3405
+ document.addEventListener("keydown", handleKeyDown);
3406
+ window.addEventListener("mouseup", handleGlobalMouseUp);
3407
+ return () => {
3408
+ document.removeEventListener("keydown", handleKeyDown);
3409
+ window.removeEventListener("mouseup", handleGlobalMouseUp);
3410
+ };
3411
+ }, [enabled, rowCount, colCount, updateSelection, notifySelectionChange]);
3412
+ return {
3413
+ clearSelection,
3414
+ getSelectedCells,
3415
+ handleMouseDown,
3416
+ handleMouseMove,
3417
+ handleMouseUp,
3418
+ isSelected,
3419
+ selection
3420
+ };
3421
+ }
3422
+ var DEFAULT_MAX_SIZE = 50;
3423
+ function useDataTableHistory({
3424
+ containerRef,
3425
+ maxSize = DEFAULT_MAX_SIZE,
3426
+ onApply
3427
+ } = {}) {
3428
+ const [undoStack, setUndoStack] = React14.useState([]);
3429
+ const [redoStack, setRedoStack] = React14.useState([]);
3430
+ const pushEdit = React14.useCallback(
3431
+ (entry) => {
3432
+ setUndoStack((prev) => {
3433
+ const next = [...prev, entry];
3434
+ if (next.length > maxSize) {
3435
+ return next.slice(next.length - maxSize);
3436
+ }
3437
+ return next;
3438
+ });
3439
+ setRedoStack([]);
3440
+ },
3441
+ [maxSize]
3442
+ );
3443
+ const undoStackRef = React14.useRef(undoStack);
3444
+ const redoStackRef = React14.useRef(redoStack);
3445
+ const onApplyRef = React14.useRef(onApply);
3446
+ React14.useEffect(() => {
3447
+ undoStackRef.current = undoStack;
3448
+ }, [undoStack]);
3449
+ React14.useEffect(() => {
3450
+ redoStackRef.current = redoStack;
3451
+ }, [redoStack]);
3452
+ React14.useEffect(() => {
3453
+ onApplyRef.current = onApply;
3454
+ }, [onApply]);
3455
+ const undo = React14.useCallback(() => {
3456
+ const entry = undoStackRef.current.at(-1);
3457
+ if (!entry) return;
3458
+ setUndoStack((prev) => prev.slice(0, -1));
3459
+ setRedoStack((prev) => [...prev, entry]);
3460
+ onApplyRef.current?.(entry, "undo");
3461
+ }, []);
3462
+ const redo = React14.useCallback(() => {
3463
+ const entry = redoStackRef.current.at(-1);
3464
+ if (!entry) return;
3465
+ setRedoStack((prev) => prev.slice(0, -1));
3466
+ setUndoStack((prev) => [...prev, entry]);
3467
+ onApplyRef.current?.(entry, "redo");
3468
+ }, []);
3469
+ const clear = React14.useCallback(() => {
3470
+ setUndoStack([]);
3471
+ setRedoStack([]);
3472
+ }, []);
3473
+ React14.useEffect(() => {
3474
+ if (!onApplyRef.current) return;
3475
+ function handleKeyDown(event) {
3476
+ if (containerRef?.current && !containerRef.current.contains(document.activeElement)) {
3477
+ return;
3478
+ }
3479
+ const isCtrlOrMeta = event.ctrlKey || event.metaKey;
3480
+ if (!isCtrlOrMeta) return;
3481
+ if ((event.key === "z" || event.key === "Z") && event.shiftKey) {
3482
+ event.preventDefault();
3483
+ redo();
3484
+ return;
3485
+ }
3486
+ if (event.key === "y" || event.key === "Y") {
3487
+ event.preventDefault();
3488
+ redo();
3489
+ return;
3490
+ }
3491
+ if (event.key === "z" && !event.shiftKey) {
3492
+ event.preventDefault();
3493
+ undo();
3494
+ }
3495
+ }
3496
+ document.addEventListener("keydown", handleKeyDown);
3497
+ return () => {
3498
+ document.removeEventListener("keydown", handleKeyDown);
3499
+ };
3500
+ }, [containerRef, onApply, redo, undo]);
3501
+ return {
3502
+ canRedo: redoStack.length > 0,
3503
+ canUndo: undoStack.length > 0,
3504
+ clear,
3505
+ pushEdit,
3506
+ redo,
3507
+ undo
3508
+ };
3509
+ }
3510
+ function useDataTableInfiniteScroll({
3511
+ enabled,
3512
+ hasNextPage,
3513
+ isFetching,
3514
+ onLoadMore,
3515
+ rootMargin = "200px"
3516
+ }) {
3517
+ const observerRef = React14.useRef(null);
3518
+ const sentinelNodeRef = React14.useRef(null);
3519
+ const onLoadMoreRef = React14.useRef(onLoadMore);
3520
+ React14.useEffect(() => {
3521
+ onLoadMoreRef.current = onLoadMore;
3522
+ }, [onLoadMore]);
3523
+ const disconnectObserver = React14.useCallback(() => {
3524
+ if (observerRef.current) {
3525
+ observerRef.current.disconnect();
3526
+ observerRef.current = null;
3527
+ }
3528
+ }, []);
3529
+ React14.useEffect(() => {
3530
+ if (!enabled || !hasNextPage || isFetching) {
3531
+ disconnectObserver();
3532
+ return;
3533
+ }
3534
+ const observer = new IntersectionObserver(
3535
+ (entries) => {
3536
+ const entry = entries[0];
3537
+ if (entry?.isIntersecting) {
3538
+ onLoadMoreRef.current();
3539
+ }
3540
+ },
3541
+ { rootMargin }
3542
+ );
3543
+ observerRef.current = observer;
3544
+ if (sentinelNodeRef.current) {
3545
+ observer.observe(sentinelNodeRef.current);
3546
+ }
3547
+ return () => {
3548
+ observer.disconnect();
3549
+ };
3550
+ }, [disconnectObserver, enabled, hasNextPage, isFetching, rootMargin]);
3551
+ const sentinelRef = React14.useCallback(
3552
+ (node) => {
3553
+ if (sentinelNodeRef.current && observerRef.current) {
3554
+ observerRef.current.unobserve(sentinelNodeRef.current);
3555
+ }
3556
+ sentinelNodeRef.current = node;
3557
+ if (node && observerRef.current) {
3558
+ observerRef.current.observe(node);
3559
+ }
3560
+ },
3561
+ []
3562
+ );
3563
+ return {
3564
+ isLoading: isFetching,
3565
+ sentinelRef
3566
+ };
3567
+ }
3568
+ function parseClipboardText(text) {
3569
+ const lines = text.replaceAll(/\r\n?/g, "\n").trimEnd().split("\n");
3570
+ const delimiter = lines.some((line) => line.includes(" ")) ? " " : ",";
3571
+ return lines.map((line) => line.split(delimiter));
3572
+ }
3573
+ function mapRowToCells(parsedRow, targetRowIndex, startCol, visibleColumns) {
3574
+ const cells = [];
3575
+ let editableColOffset = 0;
3576
+ for (const value of parsedRow) {
3577
+ let targetColIndex = startCol + editableColOffset;
3578
+ while (targetColIndex < visibleColumns.length) {
3579
+ const col = visibleColumns[targetColIndex];
3580
+ if (!col) break;
3581
+ const meta2 = col.columnDef.meta;
3582
+ if (meta2?.editable) break;
3583
+ targetColIndex++;
3584
+ editableColOffset++;
3585
+ }
3586
+ const column = visibleColumns[targetColIndex];
3587
+ if (!column) continue;
3588
+ const meta = column.columnDef.meta;
3589
+ if (!meta?.editable) continue;
3590
+ cells.push({ columnId: column.id, rowIndex: targetRowIndex, value });
3591
+ editableColOffset++;
3592
+ }
3593
+ return cells;
3594
+ }
3595
+ function useDataTablePaste({
3596
+ enabled,
3597
+ focusedCell,
3598
+ onPaste,
3599
+ table
3600
+ }) {
3601
+ const handlePaste = React14.useCallback(
3602
+ (event) => {
3603
+ if (!enabled || !focusedCell || !onPaste) return;
3604
+ const text = event.clipboardData.getData("text/plain");
3605
+ if (!text) return;
3606
+ event.preventDefault();
3607
+ const parsed = parseClipboardText(text);
3608
+ const rows = table.getRowModel().rows;
3609
+ const visibleColumns = table.getVisibleLeafColumns();
3610
+ const cells = [];
3611
+ for (const [rowOffset, parsedRow] of parsed.entries()) {
3612
+ const targetRowIndex = focusedCell.row + rowOffset;
3613
+ const targetRow = rows[targetRowIndex];
3614
+ if (!targetRow) continue;
3615
+ const rowCells = mapRowToCells(parsedRow, targetRowIndex, focusedCell.col, visibleColumns);
3616
+ cells.push(...rowCells);
3617
+ }
3618
+ if (cells.length > 0) {
3619
+ onPaste({ cells });
3620
+ }
3621
+ },
3622
+ [enabled, focusedCell, onPaste, table]
3623
+ );
3624
+ return {
3625
+ handlePaste
3626
+ };
3627
+ }
3628
+ function useDataTableRowEditing({
3629
+ enabled,
3630
+ onRowEdit,
3631
+ onRowEditCancel
3632
+ }) {
3633
+ const [editingRowId, setEditingRowId] = React14.useState(null);
3634
+ const [rowEditValues, setRowEditValues] = React14.useState({});
3635
+ const [oldValues, setOldValues] = React14.useState({});
3636
+ const editingRowRef = React14.useRef(null);
3637
+ const isRowEditing = React14.useCallback(
3638
+ (rowId) => editingRowId === rowId,
3639
+ [editingRowId]
3640
+ );
3641
+ const startRowEdit = React14.useCallback(
3642
+ (row) => {
3643
+ if (!enabled) return;
3644
+ const initialValues = {};
3645
+ const currentOldValues = {};
3646
+ for (const cell of row.getAllCells()) {
3647
+ const meta = cell.column.columnDef.meta;
3648
+ if (meta?.editable) {
3649
+ const value = row.getValue(cell.column.id);
3650
+ initialValues[cell.column.id] = value;
3651
+ currentOldValues[cell.column.id] = value;
3652
+ }
3653
+ }
3654
+ editingRowRef.current = row;
3655
+ setEditingRowId(row.id);
3656
+ setRowEditValues(initialValues);
3657
+ setOldValues(currentOldValues);
3658
+ },
3659
+ [enabled]
3660
+ );
3661
+ const cancelRowEdit = React14.useCallback(() => {
3662
+ if (editingRowId === null) return;
3663
+ const row = editingRowRef.current;
3664
+ editingRowRef.current = null;
3665
+ setEditingRowId(null);
3666
+ setRowEditValues({});
3667
+ setOldValues({});
3668
+ if (row && onRowEditCancel) {
3669
+ onRowEditCancel({ row });
3670
+ }
3671
+ }, [editingRowId, onRowEditCancel]);
3672
+ const setRowEditValue = React14.useCallback(
3673
+ (columnId, value) => {
3674
+ setRowEditValues((prev) => ({ ...prev, [columnId]: value }));
3675
+ },
3676
+ []
3677
+ );
3678
+ const submitRowEdit = React14.useCallback(
3679
+ async (row) => {
3680
+ if (!enabled || editingRowId === null) return;
3681
+ if (onRowEdit) {
3682
+ const accepted = await onRowEdit({
3683
+ oldValues,
3684
+ row,
3685
+ values: rowEditValues
3686
+ });
3687
+ if (!accepted) {
3688
+ return;
3689
+ }
3690
+ }
3691
+ editingRowRef.current = null;
3692
+ setEditingRowId(null);
3693
+ setRowEditValues({});
3694
+ setOldValues({});
3695
+ },
3696
+ [enabled, editingRowId, oldValues, onRowEdit, rowEditValues]
3697
+ );
3698
+ return {
3699
+ cancelRowEdit,
3700
+ editingRowId,
3701
+ isRowEditing,
3702
+ rowEditValues,
3703
+ setRowEditValue,
3704
+ startRowEdit,
3705
+ submitRowEdit
3706
+ };
3707
+ }
3708
+ function cleanupDataAttributes(element) {
3709
+ const dragging = element.closest("table")?.querySelectorAll("[data-dragging]");
3710
+ const dragOver = element.closest("table")?.querySelectorAll("[data-drag-over]");
3711
+ dragging?.forEach((el) => {
3712
+ el.removeAttribute("data-dragging");
3713
+ });
3714
+ dragOver?.forEach((el) => {
3715
+ el.removeAttribute("data-drag-over");
3716
+ });
3717
+ }
3718
+ function useDataTableRowReordering({
3719
+ enabled,
3720
+ onRowReorder
3721
+ }) {
3722
+ const [draggedIndex, setDraggedIndex] = React14.useState(null);
3723
+ const [targetIndex, setTargetIndex] = React14.useState(null);
3724
+ const isDragging = draggedIndex !== null;
3725
+ const handleDragStart = React14.useCallback(
3726
+ (rowIndex, event) => {
3727
+ if (!enabled) return;
3728
+ setDraggedIndex(rowIndex);
3729
+ event.dataTransfer.effectAllowed = "move";
3730
+ event.currentTarget.setAttribute("data-dragging", "true");
3731
+ },
3732
+ [enabled]
3733
+ );
3734
+ const handleDragOver = React14.useCallback(
3735
+ (rowIndex, event) => {
3736
+ if (!enabled || draggedIndex === null) return;
3737
+ event.preventDefault();
3738
+ event.dataTransfer.dropEffect = "move";
3739
+ if (targetIndex !== null && targetIndex !== rowIndex) {
3740
+ const table = event.currentTarget.closest("table");
3741
+ const previousTarget = table?.querySelector("[data-drag-over]");
3742
+ previousTarget?.removeAttribute("data-drag-over");
3743
+ }
3744
+ setTargetIndex(rowIndex);
3745
+ event.currentTarget.setAttribute("data-drag-over", "true");
3746
+ },
3747
+ [enabled, draggedIndex, targetIndex]
3748
+ );
3749
+ const handleDrop = React14.useCallback(
3750
+ (rowIndex, event) => {
3751
+ if (!enabled || draggedIndex === null) return;
3752
+ event.preventDefault();
3753
+ cleanupDataAttributes(event.currentTarget);
3754
+ if (draggedIndex !== rowIndex && onRowReorder) {
3755
+ onRowReorder({ fromIndex: draggedIndex, toIndex: rowIndex });
3756
+ }
3757
+ setDraggedIndex(null);
3758
+ setTargetIndex(null);
3759
+ },
3760
+ [enabled, draggedIndex, onRowReorder]
3761
+ );
3762
+ const handleDragEnd = React14.useCallback(
3763
+ (_rowIndex, event) => {
3764
+ cleanupDataAttributes(event.currentTarget);
3765
+ setDraggedIndex(null);
3766
+ setTargetIndex(null);
3767
+ },
3768
+ []
3769
+ );
3770
+ const dragHandleProps = React14.useCallback(
3771
+ (rowIndex) => ({
3772
+ draggable: enabled,
3773
+ onDragEnd: (event) => {
3774
+ handleDragEnd(rowIndex, event);
3775
+ },
3776
+ onDragOver: (event) => {
3777
+ handleDragOver(rowIndex, event);
3778
+ },
3779
+ onDragStart: (event) => {
3780
+ handleDragStart(rowIndex, event);
3781
+ },
3782
+ onDrop: (event) => {
3783
+ handleDrop(rowIndex, event);
3784
+ }
3785
+ }),
3786
+ [enabled, handleDragEnd, handleDragOver, handleDragStart, handleDrop]
3787
+ );
3788
+ return {
3789
+ dragHandleProps,
3790
+ isDragging
3791
+ };
3792
+ }
3793
+ var DEFAULT_PAGE_INDEX = 0;
3794
+ var DEFAULT_PAGE_SIZE = 10;
3795
+ var DEFAULT_PREFIX = "dt_";
3796
+ var PARAM_FILTER = "filter";
3797
+ var PARAM_PAGE = "page";
3798
+ var PARAM_PAGE_SIZE = "pageSize";
3799
+ var PARAM_SEARCH = "search";
3800
+ var PARAM_SORT = "sort";
3801
+ function parseSortingParam(raw) {
3802
+ if (!raw) return [];
3803
+ return raw.split(",").reduce((acc, segment) => {
3804
+ const lastDot = segment.lastIndexOf(".");
3805
+ if (lastDot === -1) return acc;
3806
+ const id = segment.slice(0, lastDot);
3807
+ const direction = segment.slice(lastDot + 1);
3808
+ if (id && (direction === "asc" || direction === "desc")) {
3809
+ acc.push({ desc: direction === "desc", id });
3810
+ }
3811
+ return acc;
3812
+ }, []);
3813
+ }
3814
+ function parsePaginationParams(pageRaw, pageSizeRaw) {
3815
+ const pageIndex = pageRaw ? Math.max(0, Number.parseInt(pageRaw, 10) - 1) : DEFAULT_PAGE_INDEX;
3816
+ const pageSize = pageSizeRaw ? Math.max(1, Number.parseInt(pageSizeRaw, 10)) : DEFAULT_PAGE_SIZE;
3817
+ return {
3818
+ pageIndex: Number.isNaN(pageIndex) ? DEFAULT_PAGE_INDEX : pageIndex,
3819
+ pageSize: Number.isNaN(pageSize) ? DEFAULT_PAGE_SIZE : pageSize
3820
+ };
3821
+ }
3822
+ function parseColumnFiltersParam(raw) {
3823
+ if (!raw) return [];
3824
+ try {
3825
+ const parsed = JSON.parse(raw);
3826
+ if (!Array.isArray(parsed)) return [];
3827
+ return parsed.reduce((acc, item) => {
3828
+ if (item !== null && typeof item === "object" && "id" in item && "value" in item && typeof item.id === "string") {
3829
+ acc.push({ id: item.id, value: item.value });
3830
+ }
3831
+ return acc;
3832
+ }, []);
3833
+ } catch {
3834
+ return [];
3835
+ }
3836
+ }
3837
+ function serializeSorting(sorting) {
3838
+ return sorting.map((s) => `${s.id}.${s.desc ? "desc" : "asc"}`).join(",");
3839
+ }
3840
+ function serializeColumnFilters(filters) {
3841
+ if (filters.length === 0) return "";
3842
+ return JSON.stringify(filters.map((f) => ({ id: f.id, value: f.value })));
3843
+ }
3844
+ function readStateFromUrl(prefix) {
3845
+ const params = new URLSearchParams(window.location.search);
3846
+ return {
3847
+ columnFilters: parseColumnFiltersParam(params.get(`${prefix}${PARAM_FILTER}`)),
3848
+ globalFilter: params.get(`${prefix}${PARAM_SEARCH}`) ?? "",
3849
+ pagination: parsePaginationParams(
3850
+ params.get(`${prefix}${PARAM_PAGE}`),
3851
+ params.get(`${prefix}${PARAM_PAGE_SIZE}`)
3852
+ ),
3853
+ sorting: parseSortingParam(params.get(`${prefix}${PARAM_SORT}`))
3854
+ };
3855
+ }
3856
+ function writeStateToUrl(prefix, state) {
3857
+ const params = new URLSearchParams(window.location.search);
3858
+ setOrDelete(params, `${prefix}${PARAM_SORT}`, serializeSorting(state.sorting));
3859
+ setOrDelete(params, `${prefix}${PARAM_SEARCH}`, state.globalFilter);
3860
+ setOrDelete(params, `${prefix}${PARAM_FILTER}`, serializeColumnFilters(state.columnFilters));
3861
+ const pageValue = state.pagination.pageIndex > DEFAULT_PAGE_INDEX ? String(state.pagination.pageIndex + 1) : "";
3862
+ setOrDelete(params, `${prefix}${PARAM_PAGE}`, pageValue);
3863
+ const pageSizeValue = state.pagination.pageSize !== DEFAULT_PAGE_SIZE ? String(state.pagination.pageSize) : "";
3864
+ setOrDelete(params, `${prefix}${PARAM_PAGE_SIZE}`, pageSizeValue);
3865
+ const search = params.toString();
3866
+ const newUrl = `${window.location.pathname}${search ? `?${search}` : ""}`;
3867
+ window.history.replaceState(null, "", newUrl);
3868
+ }
3869
+ function setOrDelete(params, key, value) {
3870
+ if (value) {
3871
+ params.set(key, value);
3872
+ } else {
3873
+ params.delete(key);
3874
+ }
3875
+ }
3876
+ function useDataTableUrlState({
3877
+ enabled,
3878
+ prefix = DEFAULT_PREFIX
3879
+ }) {
3880
+ const initial = React14.useMemo(() => {
3881
+ if (!enabled || typeof window === "undefined") {
3882
+ return {
3883
+ columnFilters: [],
3884
+ globalFilter: "",
3885
+ pagination: { pageIndex: DEFAULT_PAGE_INDEX, pageSize: DEFAULT_PAGE_SIZE },
3886
+ sorting: []
3887
+ };
3888
+ }
3889
+ return readStateFromUrl(prefix);
3890
+ }, [enabled, prefix]);
3891
+ const updateUrl = React14.useCallback(
3892
+ (state) => {
3893
+ if (!enabled || typeof window === "undefined") return;
3894
+ writeStateToUrl(prefix, state);
3895
+ },
3896
+ [enabled, prefix]
3897
+ );
3898
+ return {
3899
+ initialColumnFilters: initial.columnFilters,
3900
+ initialGlobalFilter: initial.globalFilter,
3901
+ initialPagination: initial.pagination,
3902
+ initialSorting: initial.sorting,
3903
+ updateUrl
3904
+ };
3905
+ }
3906
+ function DataTable(props) {
3907
+ const {
3908
+ advancedFilterColumns = [],
3909
+ bulkActions,
3910
+ cellClassName,
3911
+ className,
3912
+ contextMenuItems,
3913
+ data,
3914
+ density: controlledDensity,
3915
+ editTrigger = "dblclick",
3916
+ emptyState,
3917
+ enableAdvancedFilter = false,
3918
+ enableBatchEditing = false,
3919
+ enableCellSelection = false,
3920
+ enableClipboard = false,
3921
+ enableColumnFilters = false,
3922
+ enableColumnMenu = false,
3923
+ enableColumnOrdering = false,
3924
+ enableColumnPinning = false,
3925
+ enableColumnResizing = false,
3926
+ enableColumnVirtualization = false,
3927
+ enableColumnVisibility = false,
3928
+ enableDensityToggle = false,
3929
+ enableEditing = false,
3930
+ enableExport = false,
3931
+ enableFillHandle = false,
3932
+ enableFilterChips = false,
3933
+ enableFiltering = true,
3934
+ enableFind = false,
3935
+ enableGrouping = false,
3936
+ enableInfiniteScroll = false,
3937
+ enableKeyboardNavigation = false,
3938
+ enablePagination = true,
3939
+ enablePaste = false,
3940
+ enablePrint = false,
3941
+ enableResponsive = false,
3942
+ enableRowAnimation = false,
3943
+ enableRowColumnSpanning = false,
3944
+ enableRowEditing = false,
3945
+ enableRowNumbers = false,
3946
+ enableRowSelection = false,
3947
+ enableSearch = true,
3948
+ enableSearchHighlight = false,
3949
+ enableSidePanel = false,
3950
+ enableStatusBar = false,
3951
+ enableStickyHeader = false,
3952
+ enableStriping = false,
3953
+ enableTrailingRow = false,
3954
+ enableUndoRedo = false,
3955
+ enableUrlState = false,
3956
+ enableVirtualization = false,
3957
+ error = false,
3958
+ errorState,
3959
+ exportFormats = ["csv"],
3960
+ filterPresets,
3961
+ hasNextPage = false,
3962
+ isFetching = false,
3963
+ loading = false,
3964
+ loadingComponent,
3965
+ maxHeight,
3966
+ onAddRow,
3967
+ onCellFill,
3968
+ onCellSelectionChange,
3969
+ onDeleteFilterPreset,
3970
+ onDensityChange,
3971
+ onLoadMore,
3972
+ onPaginationChange,
3973
+ onPaste,
3974
+ onRowClick,
3975
+ onRowEdit,
3976
+ onRowEditCancel,
3977
+ onRowReorder,
3978
+ onSaveFilterPreset,
3979
+ onSidePanelOpenChange,
3980
+ onUndoRedo,
3981
+ pageSizeOptions = [10, 20, 50],
3982
+ renderColumnFilter,
3983
+ renderSubComponent,
3984
+ responsiveBreakpoint = 768,
3985
+ rowClassName,
3986
+ searchPlaceholder = "Search...",
3987
+ sidePanelContent,
3988
+ sidePanelOpen: controlledSidePanelOpen,
3989
+ statusBarItems,
3990
+ urlStatePrefix
3991
+ } = props;
3992
+ const [internalDensity, setInternalDensity] = React14.useState("default");
3993
+ const density = controlledDensity ?? internalDensity;
3994
+ const handleDensityChange = React14.useCallback(
3995
+ (newDensity) => {
3996
+ if (onDensityChange) {
3997
+ onDensityChange(newDensity);
3998
+ } else {
3999
+ setInternalDensity(newDensity);
4000
+ }
4001
+ },
4002
+ [onDensityChange]
4003
+ );
4004
+ const [findBarOpen, setFindBarOpen] = React14.useState(false);
4005
+ const [internalSidePanelOpen, setInternalSidePanelOpen] = React14.useState(false);
4006
+ const sidePanelOpen = controlledSidePanelOpen ?? internalSidePanelOpen;
4007
+ const setSidePanelOpen = React14.useCallback(
4008
+ (open) => {
4009
+ if (onSidePanelOpenChange) {
4010
+ onSidePanelOpenChange(open);
4011
+ } else {
4012
+ setInternalSidePanelOpen(open);
4013
+ }
4014
+ },
4015
+ [onSidePanelOpenChange]
4016
+ );
4017
+ const containerRef = React14.useRef(null);
4018
+ const isBelowBreakpoint = useMediaQuery(`(max-width: ${String(responsiveBreakpoint)}px)`);
4019
+ const showCardView = enableResponsive && isBelowBreakpoint;
4020
+ const selectionColumn = React14.useMemo(() => {
4021
+ if (!enableRowSelection) return null;
4022
+ return {
4023
+ id: "select",
4024
+ header: ({ table: table2 }) => /* @__PURE__ */ jsx(
4025
+ Checkbox,
4026
+ {
4027
+ checked: table2.getIsAllPageRowsSelected() || table2.getIsSomePageRowsSelected() && "indeterminate",
4028
+ "aria-label": "Select all",
4029
+ onCheckedChange: (value) => {
4030
+ table2.toggleAllPageRowsSelected(!!value);
4031
+ }
4032
+ }
4033
+ ),
4034
+ cell: ({ row }) => /* @__PURE__ */ jsx(
4035
+ Checkbox,
4036
+ {
4037
+ "aria-label": "Select row",
4038
+ checked: row.getIsSelected(),
4039
+ onCheckedChange: (value) => {
4040
+ row.toggleSelected(!!value);
4041
+ }
4042
+ }
4043
+ ),
4044
+ enableSorting: false,
4045
+ enableHiding: false
4046
+ };
4047
+ }, [enableRowSelection]);
4048
+ const rowNumberColumn = React14.useMemo(() => {
4049
+ if (!enableRowNumbers) return null;
4050
+ return {
4051
+ id: "_row_number",
4052
+ header: "#",
4053
+ cell: ({ row }) => /* @__PURE__ */ jsx("span", { className: "text-muted-foreground tabular-nums text-right block text-xs", children: row.index + 1 }),
4054
+ size: 50,
4055
+ enableSorting: false,
4056
+ enableHiding: false,
4057
+ enableResizing: false,
4058
+ enableColumnFilter: false,
4059
+ enableGlobalFilter: false
4060
+ };
4061
+ }, [enableRowNumbers]);
4062
+ const urlState = useDataTableUrlState({
4063
+ enabled: enableUrlState,
4064
+ prefix: urlStatePrefix
4065
+ });
4066
+ const mergedProps = React14.useMemo(() => {
4067
+ if (!enableUrlState) return props;
4068
+ return {
4069
+ ...props,
4070
+ initialColumnFilters: props.initialColumnFilters ?? (urlState.initialColumnFilters.length > 0 ? urlState.initialColumnFilters : void 0),
4071
+ initialGlobalFilter: props.initialGlobalFilter ?? (urlState.initialGlobalFilter || void 0),
4072
+ initialPagination: props.initialPagination ?? (urlState.initialPagination.pageIndex > 0 || urlState.initialPagination.pageSize !== 10 ? urlState.initialPagination : void 0),
4073
+ initialSorting: props.initialSorting ?? (urlState.initialSorting.length > 0 ? urlState.initialSorting : void 0)
4074
+ };
4075
+ }, [enableUrlState]);
4076
+ const {
4077
+ cancelEdit,
4078
+ columnVirtualizer,
4079
+ currentAdvancedFilter,
4080
+ debouncedFilterUpdate,
4081
+ editError,
4082
+ editingCell,
4083
+ editValue,
4084
+ focusedCell,
4085
+ getPinnedAttribute,
4086
+ getPinnedStyles,
4087
+ handleAdvancedFilterChange,
4088
+ handleCellFocus,
4089
+ handleCopy,
4090
+ handleExport,
4091
+ handleKeyDown,
4092
+ hasFooter,
4093
+ pagination,
4094
+ rowVirtualizer,
4095
+ scrollContainerRef,
4096
+ searchDisplayValue,
4097
+ setEditInputRef,
4098
+ setEditValue,
4099
+ setInternalPagination,
4100
+ setSearchDisplayValue,
4101
+ startEdit,
4102
+ submitEdit,
4103
+ table,
4104
+ tableColumns,
4105
+ tableRef
4106
+ } = useDataTable(mergedProps, selectionColumn, rowNumberColumn);
4107
+ const historyOnApply = React14.useCallback(
4108
+ (entry, direction) => {
4109
+ if (!onUndoRedo) return;
4110
+ const value = direction === "undo" ? entry.oldValue : entry.newValue;
4111
+ onUndoRedo({ columnId: entry.columnId, rowId: entry.rowId, value }, direction);
4112
+ },
4113
+ [onUndoRedo]
4114
+ );
4115
+ useDataTableHistory({
4116
+ containerRef,
4117
+ onApply: enableUndoRedo ? historyOnApply : void 0
4118
+ });
4119
+ const cellSelection = useDataTableCellSelection({
4120
+ colCount: table.getVisibleLeafColumns().length,
4121
+ enabled: enableCellSelection,
4122
+ onSelectionChange: onCellSelectionChange,
4123
+ rowCount: table.getRowModel().rows.length
4124
+ });
4125
+ const noop = React14.useCallback(() => {
4126
+ }, []);
4127
+ const infiniteScroll = useDataTableInfiniteScroll({
4128
+ enabled: enableInfiniteScroll,
4129
+ hasNextPage,
4130
+ isFetching,
4131
+ onLoadMore: onLoadMore ?? noop
4132
+ });
4133
+ const { handlePaste } = useDataTablePaste({
4134
+ enabled: enablePaste,
4135
+ focusedCell,
4136
+ onPaste,
4137
+ table
4138
+ });
4139
+ useDataTableRowEditing({
4140
+ enabled: enableRowEditing,
4141
+ onRowEdit,
4142
+ onRowEditCancel
4143
+ });
4144
+ useDataTableBatchEditing({
4145
+ enabled: enableBatchEditing,
4146
+ selectedCells: cellSelection.getSelectedCells().map((c) => ({ col: c.colIndex, row: c.rowIndex })),
4147
+ table
4148
+ });
4149
+ const rowReordering = useDataTableRowReordering({
4150
+ enabled: props.enableRowReordering ?? false,
4151
+ onRowReorder: onRowReorder ? (params) => {
4152
+ onRowReorder(params.fromIndex, params.toIndex);
4153
+ } : void 0
4154
+ });
4155
+ const tableState = table.getState();
4156
+ const currentSorting = tableState.sorting;
4157
+ const currentPagination = tableState.pagination;
4158
+ const currentColumnFilters = tableState.columnFilters;
4159
+ const currentGlobalFilter = tableState.globalFilter;
4160
+ const urlUpdateUrl = urlState.updateUrl;
4161
+ React14.useEffect(() => {
4162
+ if (!enableUrlState) return;
4163
+ urlUpdateUrl({
4164
+ columnFilters: currentColumnFilters,
4165
+ globalFilter: currentGlobalFilter,
4166
+ pagination: currentPagination,
4167
+ sorting: currentSorting
4168
+ });
4169
+ }, [enableUrlState, urlUpdateUrl, currentSorting, currentPagination, currentColumnFilters, currentGlobalFilter]);
4170
+ const handlePrint = React14.useCallback(() => {
4171
+ window.print();
4172
+ }, []);
4173
+ React14.useEffect(() => {
4174
+ if (!enableFind) return;
4175
+ function handleFindKeyDown(e) {
4176
+ const isCtrlOrMeta = e.ctrlKey || e.metaKey;
4177
+ if (isCtrlOrMeta && e.key === "f" && containerRef.current?.contains(document.activeElement)) {
4178
+ e.preventDefault();
4179
+ setFindBarOpen(true);
4180
+ }
4181
+ }
4182
+ document.addEventListener("keydown", handleFindKeyDown);
4183
+ return () => {
4184
+ document.removeEventListener("keydown", handleFindKeyDown);
4185
+ };
4186
+ }, [enableFind]);
4187
+ const handleFindBarClose = React14.useCallback(() => {
4188
+ setFindBarOpen(false);
4189
+ }, []);
4190
+ if (loading || error || data.length === 0) {
4191
+ return /* @__PURE__ */ jsx(
4192
+ DataTableEmptyState,
4193
+ {
4194
+ className,
4195
+ emptyState,
4196
+ error,
4197
+ errorState,
4198
+ loading,
4199
+ loadingComponent
4200
+ }
4201
+ );
4202
+ }
4203
+ return /* @__PURE__ */ jsxs(
4204
+ "div",
4205
+ {
4206
+ ref: containerRef,
4207
+ className: cn(dataTableVariants({ density }), "relative", className),
4208
+ "data-slot": "data-table",
4209
+ children: [
4210
+ /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(
4211
+ DataTableToolbar,
4212
+ {
4213
+ advancedFilterColumns,
4214
+ columns: enableColumnVisibility ? table.getAllLeafColumns() : void 0,
4215
+ currentAdvancedFilter,
4216
+ debouncedFilterUpdate,
4217
+ density,
4218
+ enableAdvancedFilter,
4219
+ enableColumnVisibility,
4220
+ enableDensityToggle,
4221
+ enableExport,
4222
+ enableFiltering,
4223
+ enablePrint,
4224
+ enableSearch,
4225
+ exportFormats,
4226
+ filterPresets,
4227
+ searchDisplayValue,
4228
+ searchPlaceholder,
4229
+ setSearchDisplayValue,
4230
+ onAdvancedFilterChange: handleAdvancedFilterChange,
4231
+ onDeleteFilterPreset,
4232
+ onDensityChange: handleDensityChange,
4233
+ onExport: handleExport,
4234
+ onPrint: handlePrint,
4235
+ onSaveFilterPreset
4236
+ }
4237
+ ) }),
4238
+ enableFind && /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(
4239
+ DataTableFindBar,
4240
+ {
4241
+ open: findBarOpen,
4242
+ tableRef,
4243
+ onClose: handleFindBarClose
4244
+ }
4245
+ ) }),
4246
+ enableFilterChips && /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(DataTableFilterChips, { table }) }),
4247
+ bulkActions && bulkActions.length > 0 && enableRowSelection && /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(
4248
+ DataTableBulkActions,
4249
+ {
4250
+ actions: bulkActions,
4251
+ table
4252
+ }
4253
+ ) }),
4254
+ showCardView ? /* @__PURE__ */ jsx(
4255
+ DataTableCardView,
4256
+ {
4257
+ rowClassName,
4258
+ table,
4259
+ onRowClick
4260
+ }
4261
+ ) : (
4262
+ /* Table View */
4263
+ /* @__PURE__ */ jsxs(
4264
+ "div",
4265
+ {
4266
+ ref: enableVirtualization || enableColumnVirtualization ? scrollContainerRef : void 0,
4267
+ style: (enableVirtualization || enableColumnVirtualization || enableStickyHeader) && maxHeight ? {
4268
+ maxHeight: typeof maxHeight === "number" ? `${String(maxHeight)}px` : maxHeight,
4269
+ overflow: "auto"
4270
+ } : void 0,
4271
+ className: "rounded-md border print:border-none print:w-full print:max-h-none print:overflow-visible",
4272
+ "data-slot": "data-table-container",
4273
+ children: [
4274
+ /* @__PURE__ */ jsxs(
4275
+ Table,
4276
+ {
4277
+ ref: tableRef,
4278
+ "aria-colcount": enableKeyboardNavigation ? table.getVisibleLeafColumns().length : void 0,
4279
+ "aria-rowcount": enableKeyboardNavigation ? table.getRowModel().rows.length + 1 : void 0,
4280
+ role: enableKeyboardNavigation ? "grid" : void 0,
4281
+ onCopy: enableClipboard ? handleCopy : void 0,
4282
+ onKeyDown: enableKeyboardNavigation ? handleKeyDown : void 0,
4283
+ onPaste: enablePaste ? handlePaste : void 0,
4284
+ children: [
4285
+ /* @__PURE__ */ jsx(
4286
+ DataTableHeader,
4287
+ {
4288
+ columnVirtualizer: enableColumnVirtualization ? columnVirtualizer : void 0,
4289
+ enableColumnFilters,
4290
+ enableColumnMenu,
4291
+ enableColumnOrdering,
4292
+ enableColumnPinning,
4293
+ enableColumnResizing,
4294
+ enableColumnVisibility,
4295
+ enableGrouping,
4296
+ enableSorting: props.enableSorting ?? true,
4297
+ enableStickyHeader,
4298
+ getPinnedAttribute,
4299
+ getPinnedStyles,
4300
+ renderColumnFilter,
4301
+ table
4302
+ }
4303
+ ),
4304
+ /* @__PURE__ */ jsx(
4305
+ DataTableBody,
4306
+ {
4307
+ cancelEdit,
4308
+ cellClassName,
4309
+ columnVirtualizer: enableColumnVirtualization ? columnVirtualizer : void 0,
4310
+ containerRef,
4311
+ contextMenuItems,
4312
+ dragHandleProps: rowReordering.dragHandleProps,
4313
+ editError,
4314
+ editingCell,
4315
+ editTrigger,
4316
+ editValue,
4317
+ enableColumnPinning,
4318
+ enableEditing,
4319
+ enableGrouping,
4320
+ enableKeyboardNavigation,
4321
+ enableRowAnimation: enableRowAnimation && !enableVirtualization,
4322
+ enableRowColumnSpanning,
4323
+ enableRowReordering: props.enableRowReordering ?? false,
4324
+ enableRowSelection,
4325
+ enableSearchHighlight,
4326
+ enableStriping,
4327
+ enableVirtualization,
4328
+ focusedCell,
4329
+ getPinnedAttribute,
4330
+ getPinnedStyles,
4331
+ globalFilter: enableSearchHighlight ? table.getState().globalFilter : void 0,
4332
+ handleCellFocus,
4333
+ hasFooter,
4334
+ renderSubComponent,
4335
+ rowClassName,
4336
+ rowVirtualizer: enableVirtualization ? rowVirtualizer : void 0,
4337
+ setEditInputRef,
4338
+ setEditValue,
4339
+ startEdit,
4340
+ submitEdit,
4341
+ table,
4342
+ tableColumns,
4343
+ onRowClick
4344
+ }
4345
+ ),
4346
+ enableTrailingRow && onAddRow && /* @__PURE__ */ jsx("tfoot", { children: /* @__PURE__ */ jsx(
4347
+ DataTableTrailingRow,
4348
+ {
4349
+ columns: tableColumns,
4350
+ onAdd: onAddRow
4351
+ }
4352
+ ) })
4353
+ ]
4354
+ }
4355
+ ),
4356
+ enableFillHandle && onCellFill && focusedCell && /* @__PURE__ */ jsx(
4357
+ DataTableFillHandle,
4358
+ {
4359
+ position: focusedCell,
4360
+ tableRef,
4361
+ onFill: onCellFill
4362
+ }
4363
+ ),
4364
+ enableInfiniteScroll && /* @__PURE__ */ jsx(
4365
+ "div",
4366
+ {
4367
+ ref: infiniteScroll.sentinelRef,
4368
+ "aria-hidden": "true",
4369
+ style: { height: 1 }
4370
+ }
4371
+ )
4372
+ ]
4373
+ }
4374
+ )
4375
+ ),
4376
+ enablePagination && !enableVirtualization && !showCardView && /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(
4377
+ DataTablePagination,
4378
+ {
4379
+ enableRowSelection,
4380
+ pageSizeOptions,
4381
+ pagination,
4382
+ setInternalPagination,
4383
+ table,
4384
+ onPaginationChange
4385
+ }
4386
+ ) }),
4387
+ enableStatusBar && /* @__PURE__ */ jsx("div", { className: "print:hidden", children: /* @__PURE__ */ jsx(
4388
+ DataTableStatusBar,
4389
+ {
4390
+ enableRowSelection,
4391
+ items: statusBarItems,
4392
+ table
4393
+ }
4394
+ ) }),
4395
+ enableSidePanel && /* @__PURE__ */ jsx(
4396
+ DataTableSidePanel,
4397
+ {
4398
+ open: sidePanelOpen,
4399
+ onClose: () => {
4400
+ setSidePanelOpen(false);
4401
+ },
4402
+ children: sidePanelContent
4403
+ }
4404
+ ),
4405
+ /* @__PURE__ */ jsxs("div", { "aria-atomic": "true", "aria-live": "polite", className: "sr-only", children: [
4406
+ table.getFilteredRowModel().rows.length,
4407
+ " rows",
4408
+ enableRowSelection && table.getFilteredSelectedRowModel().rows.length > 0 ? `, ${String(table.getFilteredSelectedRowModel().rows.length)} selected` : ""
4409
+ ] })
4410
+ ]
4411
+ }
4412
+ );
4413
+ }
4414
+ function DataTableProgressCell({
4415
+ className,
4416
+ max = 100,
4417
+ value
4418
+ }) {
4419
+ const percent = Math.min(100, Math.max(0, value / max * 100));
4420
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", className), children: [
4421
+ /* @__PURE__ */ jsx("div", { className: "h-2 w-full rounded-full bg-muted", children: /* @__PURE__ */ jsx(
4422
+ "div",
4423
+ {
4424
+ className: "h-full rounded-full bg-primary transition-all",
4425
+ style: { width: `${String(percent)}%` }
4426
+ }
4427
+ ) }),
4428
+ /* @__PURE__ */ jsxs("span", { className: "w-8 text-right text-xs tabular-nums text-muted-foreground", children: [
4429
+ Math.round(percent),
4430
+ "%"
4431
+ ] })
4432
+ ] });
4433
+ }
4434
+ function DataTableRatingCell({
4435
+ className,
4436
+ max = 5,
4437
+ value
4438
+ }) {
4439
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-0.5", className), children: Array.from({ length: max }, (_, i) => /* @__PURE__ */ jsx(
4440
+ Star,
4441
+ {
4442
+ className: cn(
4443
+ "size-3.5",
4444
+ i < value ? "fill-yellow-400 text-yellow-400" : "text-muted-foreground/30"
4445
+ )
4446
+ },
4447
+ i
4448
+ )) });
4449
+ }
4450
+ function DataTableCurrencyCell({
4451
+ className,
4452
+ currency = "USD",
4453
+ locale = "en-US",
4454
+ value
4455
+ }) {
4456
+ const formatted = new Intl.NumberFormat(locale, {
4457
+ style: "currency",
4458
+ currency
4459
+ }).format(value);
4460
+ return /* @__PURE__ */ jsx("span", { className: cn("tabular-nums", className), children: formatted });
4461
+ }
4462
+ function DataTableBooleanCell({
4463
+ className,
4464
+ value
4465
+ }) {
4466
+ return value ? /* @__PURE__ */ jsx(Check, { className: cn("size-4 text-green-600", className) }) : /* @__PURE__ */ jsx(X, { className: cn("size-4 text-muted-foreground", className) });
4467
+ }
4468
+ function DataTableDateCell({
4469
+ className,
4470
+ format = "date",
4471
+ now,
4472
+ value
4473
+ }) {
4474
+ const date = value instanceof Date ? value : new Date(value);
4475
+ const [mountTime] = React14.useState(() => Date.now());
4476
+ const referenceTime = now ?? mountTime;
4477
+ let formatted;
4478
+ if (format === "relative") {
4479
+ const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
4480
+ const diffMs = date.getTime() - referenceTime;
4481
+ const diffDays = Math.round(diffMs / (1e3 * 60 * 60 * 24));
4482
+ if (Math.abs(diffDays) < 1) {
4483
+ const diffHours = Math.round(diffMs / (1e3 * 60 * 60));
4484
+ formatted = rtf.format(diffHours, "hour");
4485
+ } else {
4486
+ formatted = rtf.format(diffDays, "day");
4487
+ }
4488
+ } else {
4489
+ const options = format === "datetime" ? { dateStyle: "medium", timeStyle: "short" } : format === "time" ? { timeStyle: "short" } : { dateStyle: "medium" };
4490
+ formatted = new Intl.DateTimeFormat("en-US", options).format(date);
4491
+ }
4492
+ return /* @__PURE__ */ jsx("span", { className: cn("text-sm", className), children: formatted });
4493
+ }
4494
+
4495
+ export { DataTable, DataTableBooleanCell, DataTableCurrencyCell, DataTableDateCell, DataTableProgressCell, DataTableRatingCell, downloadFile, exportToCSV, exportToExcel, exportToPDF, tableToCSV };
4496
+ //# sourceMappingURL=chunk-75QBUI2P.js.map
4497
+ //# sourceMappingURL=chunk-75QBUI2P.js.map