@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.
- package/dist/chunk-23BHD62H.js +288 -0
- package/dist/chunk-23BHD62H.js.map +1 -0
- package/dist/chunk-2D6OFVPN.js +145 -0
- package/dist/chunk-2D6OFVPN.js.map +1 -0
- package/dist/chunk-2IFYXJ3H.js +107 -0
- package/dist/chunk-2IFYXJ3H.js.map +1 -0
- package/dist/chunk-2UGDLAYC.js +71 -0
- package/dist/chunk-2UGDLAYC.js.map +1 -0
- package/dist/chunk-2VHARFMD.js +670 -0
- package/dist/chunk-2VHARFMD.js.map +1 -0
- package/dist/chunk-2XJWE2XR.js +36 -0
- package/dist/chunk-2XJWE2XR.js.map +1 -0
- package/dist/chunk-3JIXCWJO.js +182 -0
- package/dist/chunk-3JIXCWJO.js.map +1 -0
- package/dist/chunk-3L5G7VI2.js +203 -0
- package/dist/chunk-3L5G7VI2.js.map +1 -0
- package/dist/chunk-3MJNJKAF.js +264 -0
- package/dist/chunk-3MJNJKAF.js.map +1 -0
- package/dist/chunk-3NFQXZHO.js +199 -0
- package/dist/chunk-3NFQXZHO.js.map +1 -0
- package/dist/chunk-3RJEA2MM.js +560 -0
- package/dist/chunk-3RJEA2MM.js.map +1 -0
- package/dist/chunk-3WOGOTOV.js +152 -0
- package/dist/chunk-3WOGOTOV.js.map +1 -0
- package/dist/chunk-43SINRHH.js +853 -0
- package/dist/chunk-43SINRHH.js.map +1 -0
- package/dist/chunk-46ESMCEQ.js +80 -0
- package/dist/chunk-46ESMCEQ.js.map +1 -0
- package/dist/chunk-4HRQX2IA.js +928 -0
- package/dist/chunk-4HRQX2IA.js.map +1 -0
- package/dist/chunk-4J6DHPYY.js +130 -0
- package/dist/chunk-4J6DHPYY.js.map +1 -0
- package/dist/chunk-4MQNDQ4O.js +62 -0
- package/dist/chunk-4MQNDQ4O.js.map +1 -0
- package/dist/chunk-4RSHPKHB.js +268 -0
- package/dist/chunk-4RSHPKHB.js.map +1 -0
- package/dist/chunk-4Y72SPNL.js +283 -0
- package/dist/chunk-4Y72SPNL.js.map +1 -0
- package/dist/chunk-53RWD44Z.js +90 -0
- package/dist/chunk-53RWD44Z.js.map +1 -0
- package/dist/chunk-57KTYE5H.js +273 -0
- package/dist/chunk-57KTYE5H.js.map +1 -0
- package/dist/chunk-5J5OL4IV.js +529 -0
- package/dist/chunk-5J5OL4IV.js.map +1 -0
- package/dist/chunk-5KTMPLDK.js +251 -0
- package/dist/chunk-5KTMPLDK.js.map +1 -0
- package/dist/chunk-5YDFC74M.js +310 -0
- package/dist/chunk-5YDFC74M.js.map +1 -0
- package/dist/chunk-5ZEYTBTU.js +288 -0
- package/dist/chunk-5ZEYTBTU.js.map +1 -0
- package/dist/chunk-5ZKKXLPF.js +177 -0
- package/dist/chunk-5ZKKXLPF.js.map +1 -0
- package/dist/chunk-65YSTUD2.js +206 -0
- package/dist/chunk-65YSTUD2.js.map +1 -0
- package/dist/chunk-6GWO7JNP.js +438 -0
- package/dist/chunk-6GWO7JNP.js.map +1 -0
- package/dist/chunk-6SHOL6WR.js +163 -0
- package/dist/chunk-6SHOL6WR.js.map +1 -0
- package/dist/chunk-6SZRWNPT.js +67 -0
- package/dist/chunk-6SZRWNPT.js.map +1 -0
- package/dist/chunk-6VCJU6XD.js +19 -0
- package/dist/chunk-6VCJU6XD.js.map +1 -0
- package/dist/chunk-6XY7QYVR.js +812 -0
- package/dist/chunk-6XY7QYVR.js.map +1 -0
- package/dist/chunk-6Z73ZQOP.js +3 -0
- package/dist/chunk-6Z73ZQOP.js.map +1 -0
- package/dist/chunk-6ZAMTPGN.js +309 -0
- package/dist/chunk-6ZAMTPGN.js.map +1 -0
- package/dist/chunk-75QBUI2P.js +4497 -0
- package/dist/chunk-75QBUI2P.js.map +1 -0
- package/dist/chunk-7BAL24EU.js +204 -0
- package/dist/chunk-7BAL24EU.js.map +1 -0
- package/dist/chunk-7I6KK6QE.js +411 -0
- package/dist/chunk-7I6KK6QE.js.map +1 -0
- package/dist/chunk-7QDWREVG.js +342 -0
- package/dist/chunk-7QDWREVG.js.map +1 -0
- package/dist/chunk-7RTHGI6E.js +154 -0
- package/dist/chunk-7RTHGI6E.js.map +1 -0
- package/dist/chunk-7Y2UQMX6.js +524 -0
- package/dist/chunk-7Y2UQMX6.js.map +1 -0
- package/dist/chunk-7ZJ32KRQ.js +100 -0
- package/dist/chunk-7ZJ32KRQ.js.map +1 -0
- package/dist/chunk-AEE5GDNA.js +220 -0
- package/dist/chunk-AEE5GDNA.js.map +1 -0
- package/dist/chunk-AEHYYTFW.js +70 -0
- package/dist/chunk-AEHYYTFW.js.map +1 -0
- package/dist/chunk-AFCSDND5.js +58 -0
- package/dist/chunk-AFCSDND5.js.map +1 -0
- package/dist/chunk-AR3OXNPL.js +70 -0
- package/dist/chunk-AR3OXNPL.js.map +1 -0
- package/dist/chunk-ARNVOHVW.js +103 -0
- package/dist/chunk-ARNVOHVW.js.map +1 -0
- package/dist/chunk-ATIEGLR2.js +3 -0
- package/dist/chunk-ATIEGLR2.js.map +1 -0
- package/dist/chunk-AV5YQ2Z4.js +515 -0
- package/dist/chunk-AV5YQ2Z4.js.map +1 -0
- package/dist/chunk-AWWBBMMY.js +1070 -0
- package/dist/chunk-AWWBBMMY.js.map +1 -0
- package/dist/chunk-AZANPNLR.js +134 -0
- package/dist/chunk-AZANPNLR.js.map +1 -0
- package/dist/chunk-B3BDIM4H.js +137 -0
- package/dist/chunk-B3BDIM4H.js.map +1 -0
- package/dist/chunk-B6KQKQ4S.js +774 -0
- package/dist/chunk-B6KQKQ4S.js.map +1 -0
- package/dist/chunk-B7ZLPQSO.js +181 -0
- package/dist/chunk-B7ZLPQSO.js.map +1 -0
- package/dist/chunk-BECPEVUL.js +115 -0
- package/dist/chunk-BECPEVUL.js.map +1 -0
- package/dist/chunk-BFBGESUI.js +217 -0
- package/dist/chunk-BFBGESUI.js.map +1 -0
- package/dist/chunk-BITATKTH.js +3 -0
- package/dist/chunk-BITATKTH.js.map +1 -0
- package/dist/chunk-BIUVOZQG.js +370 -0
- package/dist/chunk-BIUVOZQG.js.map +1 -0
- package/dist/chunk-BQMQULAC.js +37 -0
- package/dist/chunk-BQMQULAC.js.map +1 -0
- package/dist/chunk-BWGZKU3I.js +3 -0
- package/dist/chunk-BWGZKU3I.js.map +1 -0
- package/dist/chunk-CCUCWL6M.js +1203 -0
- package/dist/chunk-CCUCWL6M.js.map +1 -0
- package/dist/chunk-CKD4UBV6.js +138 -0
- package/dist/chunk-CKD4UBV6.js.map +1 -0
- package/dist/chunk-CNRV2IGH.js +111 -0
- package/dist/chunk-CNRV2IGH.js.map +1 -0
- package/dist/chunk-CP2PEDG2.js +383 -0
- package/dist/chunk-CP2PEDG2.js.map +1 -0
- package/dist/chunk-CSXT7SKR.js +139 -0
- package/dist/chunk-CSXT7SKR.js.map +1 -0
- package/dist/chunk-CUWQUGGB.js +228 -0
- package/dist/chunk-CUWQUGGB.js.map +1 -0
- package/dist/chunk-CXHA5D3I.js +170 -0
- package/dist/chunk-CXHA5D3I.js.map +1 -0
- package/dist/chunk-CYIFWQ5Y.js +197 -0
- package/dist/chunk-CYIFWQ5Y.js.map +1 -0
- package/dist/chunk-D2V2HKLX.js +249 -0
- package/dist/chunk-D2V2HKLX.js.map +1 -0
- package/dist/chunk-D5DM6GZB.js +204 -0
- package/dist/chunk-D5DM6GZB.js.map +1 -0
- package/dist/chunk-DL7D5F7B.js +63 -0
- package/dist/chunk-DL7D5F7B.js.map +1 -0
- package/dist/chunk-DNAGXK2C.js +91 -0
- package/dist/chunk-DNAGXK2C.js.map +1 -0
- package/dist/chunk-DYDXGWH2.js +109 -0
- package/dist/chunk-DYDXGWH2.js.map +1 -0
- package/dist/chunk-DZALMUQD.js +482 -0
- package/dist/chunk-DZALMUQD.js.map +1 -0
- package/dist/chunk-E27SQ54A.js +122 -0
- package/dist/chunk-E27SQ54A.js.map +1 -0
- package/dist/chunk-ESLSPRYA.js +875 -0
- package/dist/chunk-ESLSPRYA.js.map +1 -0
- package/dist/chunk-EVUHEBWX.js +35 -0
- package/dist/chunk-EVUHEBWX.js.map +1 -0
- package/dist/chunk-F6ZKBK5B.js +265 -0
- package/dist/chunk-F6ZKBK5B.js.map +1 -0
- package/dist/chunk-F7XARQUW.js +82 -0
- package/dist/chunk-F7XARQUW.js.map +1 -0
- package/dist/chunk-FCSYPOHF.js +77 -0
- package/dist/chunk-FCSYPOHF.js.map +1 -0
- package/dist/chunk-FDES5YDF.js +159 -0
- package/dist/chunk-FDES5YDF.js.map +1 -0
- package/dist/chunk-FPCRGFNY.js +776 -0
- package/dist/chunk-FPCRGFNY.js.map +1 -0
- package/dist/chunk-FRDYXDAE.js +69 -0
- package/dist/chunk-FRDYXDAE.js.map +1 -0
- package/dist/chunk-FSMHI7DW.js +291 -0
- package/dist/chunk-FSMHI7DW.js.map +1 -0
- package/dist/chunk-FUCQNVJL.js +90 -0
- package/dist/chunk-FUCQNVJL.js.map +1 -0
- package/dist/chunk-FYJHWYPM.js +539 -0
- package/dist/chunk-FYJHWYPM.js.map +1 -0
- package/dist/chunk-G2V7D7VC.js +371 -0
- package/dist/chunk-G2V7D7VC.js.map +1 -0
- package/dist/chunk-G5TWK7L3.js +667 -0
- package/dist/chunk-G5TWK7L3.js.map +1 -0
- package/dist/chunk-G6SIIN2B.js +3 -0
- package/dist/chunk-G6SIIN2B.js.map +1 -0
- package/dist/chunk-GAP3OZR7.js +223 -0
- package/dist/chunk-GAP3OZR7.js.map +1 -0
- package/dist/chunk-GBTVAO4V.js +316 -0
- package/dist/chunk-GBTVAO4V.js.map +1 -0
- package/dist/chunk-GKMR5SVC.js +97 -0
- package/dist/chunk-GKMR5SVC.js.map +1 -0
- package/dist/chunk-GL56KIFL.js +79 -0
- package/dist/chunk-GL56KIFL.js.map +1 -0
- package/dist/chunk-GLEKBJLR.js +226 -0
- package/dist/chunk-GLEKBJLR.js.map +1 -0
- package/dist/chunk-GPW57XOW.js +80 -0
- package/dist/chunk-GPW57XOW.js.map +1 -0
- package/dist/chunk-H4ANCFZG.js +233 -0
- package/dist/chunk-H4ANCFZG.js.map +1 -0
- package/dist/chunk-HAEZLC7V.js +122 -0
- package/dist/chunk-HAEZLC7V.js.map +1 -0
- package/dist/chunk-HIEOL77G.js +460 -0
- package/dist/chunk-HIEOL77G.js.map +1 -0
- package/dist/chunk-HKXQLWGR.js +335 -0
- package/dist/chunk-HKXQLWGR.js.map +1 -0
- package/dist/chunk-HNYBLROK.js +469 -0
- package/dist/chunk-HNYBLROK.js.map +1 -0
- package/dist/chunk-HRNDJU7D.js +5 -5
- package/dist/chunk-HRNDJU7D.js.map +1 -1
- package/dist/chunk-HXHB2CK5.js +108 -0
- package/dist/chunk-HXHB2CK5.js.map +1 -0
- package/dist/chunk-I7ZLEC7Y.js +128 -0
- package/dist/chunk-I7ZLEC7Y.js.map +1 -0
- package/dist/chunk-ICAQYWCX.js +153 -0
- package/dist/chunk-ICAQYWCX.js.map +1 -0
- package/dist/chunk-IFHF4UES.js +387 -0
- package/dist/chunk-IFHF4UES.js.map +1 -0
- package/dist/chunk-IRIIK3BU.js +215 -0
- package/dist/chunk-IRIIK3BU.js.map +1 -0
- package/dist/chunk-IRKDMISK.js +62 -0
- package/dist/chunk-IRKDMISK.js.map +1 -0
- package/dist/chunk-IXJHHR3Y.js +3 -0
- package/dist/chunk-IXJHHR3Y.js.map +1 -0
- package/dist/chunk-JDTAG7KZ.js +33 -0
- package/dist/chunk-JDTAG7KZ.js.map +1 -0
- package/dist/chunk-JLVL76SW.js +544 -0
- package/dist/chunk-JLVL76SW.js.map +1 -0
- package/dist/chunk-JPA2VQRW.js +119 -0
- package/dist/chunk-JPA2VQRW.js.map +1 -0
- package/dist/chunk-JWXK4TMX.js +106 -0
- package/dist/chunk-JWXK4TMX.js.map +1 -0
- package/dist/chunk-K3J7YLL4.js +153 -0
- package/dist/chunk-K3J7YLL4.js.map +1 -0
- package/dist/chunk-K45MMHLA.js +258 -0
- package/dist/chunk-K45MMHLA.js.map +1 -0
- package/dist/chunk-KNH7JW6E.js +142 -0
- package/dist/chunk-KNH7JW6E.js.map +1 -0
- package/dist/chunk-KOTCWE7V.js +345 -0
- package/dist/chunk-KOTCWE7V.js.map +1 -0
- package/dist/chunk-KR3IVNQH.js +402 -0
- package/dist/chunk-KR3IVNQH.js.map +1 -0
- package/dist/chunk-KRHL3YH2.js +3 -0
- package/dist/chunk-KRHL3YH2.js.map +1 -0
- package/dist/chunk-KXSJSLPJ.js +354 -0
- package/dist/chunk-KXSJSLPJ.js.map +1 -0
- package/dist/chunk-L2XR5IFJ.js +103 -0
- package/dist/chunk-L2XR5IFJ.js.map +1 -0
- package/dist/chunk-LATTRPLQ.js +286 -0
- package/dist/chunk-LATTRPLQ.js.map +1 -0
- package/dist/chunk-LFN7UHDT.js +122 -0
- package/dist/chunk-LFN7UHDT.js.map +1 -0
- package/dist/chunk-LMTNDUIP.js +96 -0
- package/dist/chunk-LMTNDUIP.js.map +1 -0
- package/dist/chunk-LNY2EXOV.js +349 -0
- package/dist/chunk-LNY2EXOV.js.map +1 -0
- package/dist/chunk-LQVQ7SHG.js +226 -0
- package/dist/chunk-LQVQ7SHG.js.map +1 -0
- package/dist/chunk-MDQFZEIC.js +174 -0
- package/dist/chunk-MDQFZEIC.js.map +1 -0
- package/dist/chunk-MK6ID2HI.js +532 -0
- package/dist/chunk-MK6ID2HI.js.map +1 -0
- package/dist/chunk-MQ2446N7.js +216 -0
- package/dist/chunk-MQ2446N7.js.map +1 -0
- package/dist/chunk-MVOENLOZ.js +3 -0
- package/dist/chunk-MVOENLOZ.js.map +1 -0
- package/dist/chunk-N23L6UDK.js +108 -0
- package/dist/chunk-N23L6UDK.js.map +1 -0
- package/dist/chunk-N3I6GA4I.js +137 -0
- package/dist/chunk-N3I6GA4I.js.map +1 -0
- package/dist/chunk-N4UTBJRY.js +72 -0
- package/dist/chunk-N4UTBJRY.js.map +1 -0
- package/dist/chunk-NCLOPI6U.js +347 -0
- package/dist/chunk-NCLOPI6U.js.map +1 -0
- package/dist/chunk-NGR4HFVA.js +136 -0
- package/dist/chunk-NGR4HFVA.js.map +1 -0
- package/dist/chunk-NK5Q2YRM.js +70 -0
- package/dist/chunk-NK5Q2YRM.js.map +1 -0
- package/dist/chunk-NNOGFX66.js +3 -0
- package/dist/chunk-NNOGFX66.js.map +1 -0
- package/dist/chunk-NWFRMVI2.js +147 -0
- package/dist/chunk-NWFRMVI2.js.map +1 -0
- package/dist/chunk-NWVYQYKK.js +75 -0
- package/dist/chunk-NWVYQYKK.js.map +1 -0
- package/dist/chunk-NXQ25PKF.js +318 -0
- package/dist/chunk-NXQ25PKF.js.map +1 -0
- package/dist/chunk-OEXQ2MOY.js +338 -0
- package/dist/chunk-OEXQ2MOY.js.map +1 -0
- package/dist/chunk-ONTUN5XH.js +57 -0
- package/dist/chunk-ONTUN5XH.js.map +1 -0
- package/dist/chunk-OQCGQG47.js +83 -0
- package/dist/chunk-OQCGQG47.js.map +1 -0
- package/dist/chunk-OWIFNJXZ.js +167 -0
- package/dist/chunk-OWIFNJXZ.js.map +1 -0
- package/dist/chunk-PFVT27B5.js +92 -0
- package/dist/chunk-PFVT27B5.js.map +1 -0
- package/dist/chunk-PGTCXLGY.js +67 -0
- package/dist/chunk-PGTCXLGY.js.map +1 -0
- package/dist/chunk-PK5O62XD.js +58 -0
- package/dist/chunk-PK5O62XD.js.map +1 -0
- package/dist/chunk-PLLJNHWU.js +175 -0
- package/dist/chunk-PLLJNHWU.js.map +1 -0
- package/dist/chunk-POZNQWZE.js +995 -0
- package/dist/chunk-POZNQWZE.js.map +1 -0
- package/dist/chunk-PWCMCMDN.js +67 -0
- package/dist/chunk-PWCMCMDN.js.map +1 -0
- package/dist/chunk-Q43KJP5A.js +294 -0
- package/dist/chunk-Q43KJP5A.js.map +1 -0
- package/dist/chunk-QHKOBGLW.js +119 -0
- package/dist/chunk-QHKOBGLW.js.map +1 -0
- package/dist/chunk-QSY52N3A.js +1062 -0
- package/dist/chunk-QSY52N3A.js.map +1 -0
- package/dist/chunk-QUENPT24.js +100 -0
- package/dist/chunk-QUENPT24.js.map +1 -0
- package/dist/chunk-QWRHPNBY.js +924 -0
- package/dist/chunk-QWRHPNBY.js.map +1 -0
- package/dist/chunk-RPV77BCQ.js +238 -0
- package/dist/chunk-RPV77BCQ.js.map +1 -0
- package/dist/chunk-S6ORCWM2.js +205 -0
- package/dist/chunk-S6ORCWM2.js.map +1 -0
- package/dist/chunk-SAKW2OKH.js +237 -0
- package/dist/chunk-SAKW2OKH.js.map +1 -0
- package/dist/chunk-SHS6EGWS.js +226 -0
- package/dist/chunk-SHS6EGWS.js.map +1 -0
- package/dist/chunk-SM4AZOEP.js +222 -0
- package/dist/chunk-SM4AZOEP.js.map +1 -0
- package/dist/chunk-SXJMERQL.js +40 -0
- package/dist/chunk-SXJMERQL.js.map +1 -0
- package/dist/chunk-TAZPML2P.js +198 -0
- package/dist/chunk-TAZPML2P.js.map +1 -0
- package/dist/chunk-TQBUBD3E.js +100 -0
- package/dist/chunk-TQBUBD3E.js.map +1 -0
- package/dist/chunk-U4H3XHSI.js +305 -0
- package/dist/chunk-U4H3XHSI.js.map +1 -0
- package/dist/chunk-U74PNG4S.js +167 -0
- package/dist/chunk-U74PNG4S.js.map +1 -0
- package/dist/chunk-U77MCUVE.js +3 -0
- package/dist/chunk-U77MCUVE.js.map +1 -0
- package/dist/chunk-UA3OQAHJ.js +140 -0
- package/dist/chunk-UA3OQAHJ.js.map +1 -0
- package/dist/chunk-UCGT2IR4.js +297 -0
- package/dist/chunk-UCGT2IR4.js.map +1 -0
- package/dist/chunk-UFRMZ3M6.js +284 -0
- package/dist/chunk-UFRMZ3M6.js.map +1 -0
- package/dist/chunk-UKC3Q6OA.js +159 -0
- package/dist/chunk-UKC3Q6OA.js.map +1 -0
- package/dist/chunk-UOHVT5KN.js +3 -0
- package/dist/chunk-UOHVT5KN.js.map +1 -0
- package/dist/chunk-UP2VWCW5.js +2 -7
- package/dist/chunk-UP2VWCW5.js.map +1 -1
- package/dist/chunk-V7WEN4SD.js +444 -0
- package/dist/chunk-V7WEN4SD.js.map +1 -0
- package/dist/chunk-VFALJSXB.js +373 -0
- package/dist/chunk-VFALJSXB.js.map +1 -0
- package/dist/chunk-VJITPUUS.js +225 -0
- package/dist/chunk-VJITPUUS.js.map +1 -0
- package/dist/chunk-VKDN66VL.js +129 -0
- package/dist/chunk-VKDN66VL.js.map +1 -0
- package/dist/chunk-VOCA4KZB.js +655 -0
- package/dist/chunk-VOCA4KZB.js.map +1 -0
- package/dist/chunk-VT4IMHGE.js +292 -0
- package/dist/chunk-VT4IMHGE.js.map +1 -0
- package/dist/chunk-VWW3DJKI.js +53 -0
- package/dist/chunk-VWW3DJKI.js.map +1 -0
- package/dist/chunk-VZZ3HP7G.js +230 -0
- package/dist/chunk-VZZ3HP7G.js.map +1 -0
- package/dist/chunk-W3QUVCRK.js +54 -0
- package/dist/chunk-W3QUVCRK.js.map +1 -0
- package/dist/chunk-W4NC5CU5.js +175 -0
- package/dist/chunk-W4NC5CU5.js.map +1 -0
- package/dist/chunk-WBE6VQOO.js +235 -0
- package/dist/chunk-WBE6VQOO.js.map +1 -0
- package/dist/chunk-WG5IYG7X.js +3 -0
- package/dist/chunk-WG5IYG7X.js.map +1 -0
- package/dist/chunk-WH7Y2MAY.js +24 -0
- package/dist/chunk-WH7Y2MAY.js.map +1 -0
- package/dist/chunk-X4YUWX7H.js +146 -0
- package/dist/chunk-X4YUWX7H.js.map +1 -0
- package/dist/chunk-XETKCF73.js +74 -0
- package/dist/chunk-XETKCF73.js.map +1 -0
- package/dist/chunk-XPVKJIWY.js +55 -0
- package/dist/chunk-XPVKJIWY.js.map +1 -0
- package/dist/chunk-XV6NXXXP.js +206 -0
- package/dist/chunk-XV6NXXXP.js.map +1 -0
- package/dist/chunk-XXFKDEFH.js +143 -0
- package/dist/chunk-XXFKDEFH.js.map +1 -0
- package/dist/chunk-Y555RCRZ.js +26 -0
- package/dist/chunk-Y555RCRZ.js.map +1 -0
- package/dist/chunk-Y5GO2F6P.js +188 -0
- package/dist/chunk-Y5GO2F6P.js.map +1 -0
- package/dist/chunk-YCZ6M6EF.js +912 -0
- package/dist/chunk-YCZ6M6EF.js.map +1 -0
- package/dist/chunk-YMYXWHDU.js +96 -0
- package/dist/chunk-YMYXWHDU.js.map +1 -0
- package/dist/chunk-YTGYSNFR.js +101 -0
- package/dist/chunk-YTGYSNFR.js.map +1 -0
- package/dist/chunk-YZY35OHQ.js +279 -0
- package/dist/chunk-YZY35OHQ.js.map +1 -0
- package/dist/chunk-Z3FL7LEK.js +401 -0
- package/dist/chunk-Z3FL7LEK.js.map +1 -0
- package/dist/chunk-ZARZYMBM.js +95 -0
- package/dist/chunk-ZARZYMBM.js.map +1 -0
- package/dist/chunk-ZJVZ3LQS.js +199 -0
- package/dist/chunk-ZJVZ3LQS.js.map +1 -0
- package/dist/chunk-ZKK7L7H7.js +78 -0
- package/dist/chunk-ZKK7L7H7.js.map +1 -0
- package/dist/chunk-ZPCELVWJ.js +127 -0
- package/dist/chunk-ZPCELVWJ.js.map +1 -0
- package/dist/chunk-ZUFM33AV.js +113 -0
- package/dist/chunk-ZUFM33AV.js.map +1 -0
- package/dist/components/advanced/AssetManager/index.js +5 -0
- package/dist/components/advanced/AssetManager/index.js.map +1 -0
- package/dist/components/advanced/Calendar/index.js +10 -0
- package/dist/components/advanced/Calendar/index.js.map +1 -0
- package/dist/components/advanced/Command/index.js +6 -0
- package/dist/components/advanced/Command/index.js.map +1 -0
- package/dist/components/advanced/DragAndDrop/index.js +5 -0
- package/dist/components/advanced/DragAndDrop/index.js.map +1 -0
- package/dist/components/advanced/ErrorBoundary/index.js +5 -0
- package/dist/components/advanced/ErrorBoundary/index.js.map +1 -0
- package/dist/components/advanced/EventCalendar/index.js +10 -0
- package/dist/components/advanced/EventCalendar/index.js.map +1 -0
- package/dist/components/advanced/FileDropzone/index.js +5 -0
- package/dist/components/advanced/FileDropzone/index.js.map +1 -0
- package/dist/components/advanced/FilePreview/index.js +5 -0
- package/dist/components/advanced/FilePreview/index.js.map +1 -0
- package/dist/components/advanced/FileUpload/index.js +5 -0
- package/dist/components/advanced/FileUpload/index.js.map +1 -0
- package/dist/components/advanced/FilterBuilder/index.js +13 -0
- package/dist/components/advanced/FilterBuilder/index.js.map +1 -0
- package/dist/components/advanced/MarkdownEditor/index.js +9 -0
- package/dist/components/advanced/MarkdownEditor/index.js.map +1 -0
- package/dist/components/advanced/Portal/index.js +4 -0
- package/dist/components/advanced/Portal/index.js.map +1 -0
- package/dist/components/advanced/RichTextEditor/index.js +7 -0
- package/dist/components/advanced/RichTextEditor/index.js.map +1 -0
- package/dist/components/advanced/Search/index.js +5 -0
- package/dist/components/advanced/Search/index.js.map +1 -0
- package/dist/components/advanced/SortableList/index.js +5 -0
- package/dist/components/advanced/SortableList/index.js.map +1 -0
- package/dist/components/advanced/VersionControl/index.js +5 -0
- package/dist/components/advanced/VersionControl/index.js.map +1 -0
- package/dist/components/advanced/index.js +32 -0
- package/dist/components/advanced/index.js.map +1 -0
- package/dist/components/data-display/Accordion/index.js +5 -0
- package/dist/components/data-display/Accordion/index.js.map +1 -0
- package/dist/components/data-display/AreaChart/index.js +6 -0
- package/dist/components/data-display/AreaChart/index.js.map +1 -0
- package/dist/components/data-display/Banner/index.js +5 -0
- package/dist/components/data-display/Banner/index.js.map +1 -0
- package/dist/components/data-display/BarChart/index.js +6 -0
- package/dist/components/data-display/BarChart/index.js.map +1 -0
- package/dist/components/data-display/BarList/index.js +5 -0
- package/dist/components/data-display/BarList/index.js.map +1 -0
- package/dist/components/data-display/Callout/index.js +5 -0
- package/dist/components/data-display/Callout/index.js.map +1 -0
- package/dist/components/data-display/Carousel/index.js +10 -0
- package/dist/components/data-display/Carousel/index.js.map +1 -0
- package/dist/components/data-display/CategoryBar/index.js +6 -0
- package/dist/components/data-display/CategoryBar/index.js.map +1 -0
- package/dist/components/data-display/Chart/index.js +5 -0
- package/dist/components/data-display/Chart/index.js.map +1 -0
- package/dist/components/data-display/ChartCard/index.js +11 -0
- package/dist/components/data-display/ChartCard/index.js.map +1 -0
- package/dist/components/data-display/ChartLegend/index.js +6 -0
- package/dist/components/data-display/ChartLegend/index.js.map +1 -0
- package/dist/components/data-display/ComboChart/index.js +6 -0
- package/dist/components/data-display/ComboChart/index.js.map +1 -0
- package/dist/components/data-display/DashboardCard/index.js +6 -0
- package/dist/components/data-display/DashboardCard/index.js.map +1 -0
- package/dist/components/data-display/DashboardFilterbar/index.js +111 -0
- package/dist/components/data-display/DashboardFilterbar/index.js.map +1 -0
- package/dist/components/data-display/DataTable/FilterBuilder/index.js +13 -0
- package/dist/components/data-display/DataTable/FilterBuilder/index.js.map +1 -0
- package/dist/components/data-display/DataTable/index.js +22 -0
- package/dist/components/data-display/DataTable/index.js.map +1 -0
- package/dist/components/data-display/DeltaBar/index.js +6 -0
- package/dist/components/data-display/DeltaBar/index.js.map +1 -0
- package/dist/components/data-display/EmptyState/index.js +5 -0
- package/dist/components/data-display/EmptyState/index.js.map +1 -0
- package/dist/components/data-display/Feed/index.js +5 -0
- package/dist/components/data-display/Feed/index.js.map +1 -0
- package/dist/components/data-display/FunnelChart/index.js +6 -0
- package/dist/components/data-display/FunnelChart/index.js.map +1 -0
- package/dist/components/data-display/GaugeChart/index.js +5 -0
- package/dist/components/data-display/GaugeChart/index.js.map +1 -0
- package/dist/components/data-display/Heatmap/index.js +6 -0
- package/dist/components/data-display/Heatmap/index.js.map +1 -0
- package/dist/components/data-display/HoverCard/index.js +5 -0
- package/dist/components/data-display/HoverCard/index.js.map +1 -0
- package/dist/components/data-display/ImageGallery/index.js +6 -0
- package/dist/components/data-display/ImageGallery/index.js.map +1 -0
- package/dist/components/data-display/Item/index.js +6 -0
- package/dist/components/data-display/Item/index.js.map +1 -0
- package/dist/components/data-display/KPICard/index.js +11 -0
- package/dist/components/data-display/KPICard/index.js.map +1 -0
- package/dist/components/data-display/Lightbox/index.js +5 -0
- package/dist/components/data-display/Lightbox/index.js.map +1 -0
- package/dist/components/data-display/LineChart/index.js +6 -0
- package/dist/components/data-display/LineChart/index.js.map +1 -0
- package/dist/components/data-display/List/index.js +10 -0
- package/dist/components/data-display/List/index.js.map +1 -0
- package/dist/components/data-display/MarkerBar/index.js +6 -0
- package/dist/components/data-display/MarkerBar/index.js.map +1 -0
- package/dist/components/data-display/PieChart/index.js +6 -0
- package/dist/components/data-display/PieChart/index.js.map +1 -0
- package/dist/components/data-display/RadarChart/index.js +6 -0
- package/dist/components/data-display/RadarChart/index.js.map +1 -0
- package/dist/components/data-display/RadialChart/index.js +6 -0
- package/dist/components/data-display/RadialChart/index.js.map +1 -0
- package/dist/components/data-display/ScatterChart/index.js +6 -0
- package/dist/components/data-display/ScatterChart/index.js.map +1 -0
- package/dist/components/data-display/SingleStat/index.js +6 -0
- package/dist/components/data-display/SingleStat/index.js.map +1 -0
- package/dist/components/data-display/Sparkline/index.js +5 -0
- package/dist/components/data-display/Sparkline/index.js.map +1 -0
- package/dist/components/data-display/Table/index.js +5 -0
- package/dist/components/data-display/Table/index.js.map +1 -0
- package/dist/components/data-display/Timeline/index.js +5 -0
- package/dist/components/data-display/Timeline/index.js.map +1 -0
- package/dist/components/data-display/Tracker/index.js +6 -0
- package/dist/components/data-display/Tracker/index.js.map +1 -0
- package/dist/components/data-display/VirtualTable/index.js +8 -0
- package/dist/components/data-display/VirtualTable/index.js.map +1 -0
- package/dist/components/data-display/index.js +63 -0
- package/dist/components/data-display/index.js.map +1 -0
- package/dist/components/feedback/Alert/index.js +5 -0
- package/dist/components/feedback/Alert/index.js.map +1 -0
- package/dist/components/feedback/AlertDialog/index.js +10 -0
- package/dist/components/feedback/AlertDialog/index.js.map +1 -0
- package/dist/components/feedback/ConfirmModal/index.js +11 -0
- package/dist/components/feedback/ConfirmModal/index.js.map +1 -0
- package/dist/components/feedback/Dialog/index.js +5 -0
- package/dist/components/feedback/Dialog/index.js.map +1 -0
- package/dist/components/feedback/ErrorPage/index.js +5 -0
- package/dist/components/feedback/ErrorPage/index.js.map +1 -0
- package/dist/components/feedback/FocusTrap/index.js +5 -0
- package/dist/components/feedback/FocusTrap/index.js.map +1 -0
- package/dist/components/feedback/Message/index.js +5 -0
- package/dist/components/feedback/Message/index.js.map +1 -0
- package/dist/components/feedback/Modal/index.js +5 -0
- package/dist/components/feedback/Modal/index.js.map +1 -0
- package/dist/components/feedback/Notification/index.js +7 -0
- package/dist/components/feedback/Notification/index.js.map +1 -0
- package/dist/components/feedback/Popover/index.js +5 -0
- package/dist/components/feedback/Popover/index.js.map +1 -0
- package/dist/components/feedback/Toast/index.js +4 -0
- package/dist/components/feedback/Toast/index.js.map +1 -0
- package/dist/components/feedback/Tooltip/index.js +5 -0
- package/dist/components/feedback/Tooltip/index.js.map +1 -0
- package/dist/components/feedback/UpdatesWidget/index.js +5 -0
- package/dist/components/feedback/UpdatesWidget/index.js.map +1 -0
- package/dist/components/feedback/index.js +23 -0
- package/dist/components/feedback/index.js.map +1 -0
- package/dist/components/forms/Autocomplete/index.js +5 -0
- package/dist/components/forms/Autocomplete/index.js.map +1 -0
- package/dist/components/forms/Checkbox/index.js +5 -0
- package/dist/components/forms/Checkbox/index.js.map +1 -0
- package/dist/components/forms/CheckboxGroup/index.js +6 -0
- package/dist/components/forms/CheckboxGroup/index.js.map +1 -0
- package/dist/components/forms/ColorPicker/index.js +6 -0
- package/dist/components/forms/ColorPicker/index.js.map +1 -0
- package/dist/components/forms/Combobox/index.js +5 -0
- package/dist/components/forms/Combobox/index.js.map +1 -0
- package/dist/components/forms/DatePicker/index.js +13 -0
- package/dist/components/forms/DatePicker/index.js.map +1 -0
- package/dist/components/forms/DateRangePicker/index.js +13 -0
- package/dist/components/forms/DateRangePicker/index.js.map +1 -0
- package/dist/components/forms/EmailInput/index.js +7 -0
- package/dist/components/forms/EmailInput/index.js.map +1 -0
- package/dist/components/forms/ErrorMessage/index.js +5 -0
- package/dist/components/forms/ErrorMessage/index.js.map +1 -0
- package/dist/components/forms/Field/index.js +7 -0
- package/dist/components/forms/Field/index.js.map +1 -0
- package/dist/components/forms/FloatLabel/index.js +5 -0
- package/dist/components/forms/FloatLabel/index.js.map +1 -0
- package/dist/components/forms/Form/index.js +6 -0
- package/dist/components/forms/Form/index.js.map +1 -0
- package/dist/components/forms/FormValidation/index.js +5 -0
- package/dist/components/forms/FormValidation/index.js.map +1 -0
- package/dist/components/forms/HelpText/index.js +5 -0
- package/dist/components/forms/HelpText/index.js.map +1 -0
- package/dist/components/forms/IftaLabel/index.js +5 -0
- package/dist/components/forms/IftaLabel/index.js.map +1 -0
- package/dist/components/forms/InputGroup/index.js +13 -0
- package/dist/components/forms/InputGroup/index.js.map +1 -0
- package/dist/components/forms/InputOTP/index.js +5 -0
- package/dist/components/forms/InputOTP/index.js.map +1 -0
- package/dist/components/forms/InputOTPField/index.js +9 -0
- package/dist/components/forms/InputOTPField/index.js.map +1 -0
- package/dist/components/forms/MultiSelect/index.js +5 -0
- package/dist/components/forms/MultiSelect/index.js.map +1 -0
- package/dist/components/forms/NativeSelect/index.js +5 -0
- package/dist/components/forms/NativeSelect/index.js.map +1 -0
- package/dist/components/forms/NumberInput/index.js +6 -0
- package/dist/components/forms/NumberInput/index.js.map +1 -0
- package/dist/components/forms/PasswordInput/index.js +7 -0
- package/dist/components/forms/PasswordInput/index.js.map +1 -0
- package/dist/components/forms/PaymentInput/index.js +5 -0
- package/dist/components/forms/PaymentInput/index.js.map +1 -0
- package/dist/components/forms/PhoneInput/index.js +5 -0
- package/dist/components/forms/PhoneInput/index.js.map +1 -0
- package/dist/components/forms/RadioButton/index.js +6 -0
- package/dist/components/forms/RadioButton/index.js.map +1 -0
- package/dist/components/forms/RadioCardGroup/index.js +5 -0
- package/dist/components/forms/RadioCardGroup/index.js.map +1 -0
- package/dist/components/forms/RadioGroup/index.js +6 -0
- package/dist/components/forms/RadioGroup/index.js.map +1 -0
- package/dist/components/forms/Rating/index.js +5 -0
- package/dist/components/forms/Rating/index.js.map +1 -0
- package/dist/components/forms/SearchInput/index.js +7 -0
- package/dist/components/forms/SearchInput/index.js.map +1 -0
- package/dist/components/forms/Select/index.js +5 -0
- package/dist/components/forms/Select/index.js.map +1 -0
- package/dist/components/forms/Slider/index.js +5 -0
- package/dist/components/forms/Slider/index.js.map +1 -0
- package/dist/components/forms/SuccessMessage/index.js +5 -0
- package/dist/components/forms/SuccessMessage/index.js.map +1 -0
- package/dist/components/forms/Switch/index.js +5 -0
- package/dist/components/forms/Switch/index.js.map +1 -0
- package/dist/components/forms/TagsInput/index.js +8 -0
- package/dist/components/forms/TagsInput/index.js.map +1 -0
- package/dist/components/forms/TextInput/index.js +6 -0
- package/dist/components/forms/TextInput/index.js.map +1 -0
- package/dist/components/forms/Textarea/index.js +5 -0
- package/dist/components/forms/Textarea/index.js.map +1 -0
- package/dist/components/forms/TextareaField/index.js +9 -0
- package/dist/components/forms/TextareaField/index.js.map +1 -0
- package/dist/components/forms/TimePicker/index.js +7 -0
- package/dist/components/forms/TimePicker/index.js.map +1 -0
- package/dist/components/forms/ToggleGroup/index.js +6 -0
- package/dist/components/forms/ToggleGroup/index.js.map +1 -0
- package/dist/components/forms/URLInput/index.js +7 -0
- package/dist/components/forms/URLInput/index.js.map +1 -0
- package/dist/components/forms/index.js +58 -0
- package/dist/components/forms/index.js.map +1 -0
- package/dist/components/index.js +200 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout/Card/index.js +5 -0
- package/dist/components/layout/Card/index.js.map +1 -0
- package/dist/components/layout/Collapsible/index.js +5 -0
- package/dist/components/layout/Collapsible/index.js.map +1 -0
- package/dist/components/layout/Container/index.js +5 -0
- package/dist/components/layout/Container/index.js.map +1 -0
- package/dist/components/layout/Flex/index.js +5 -0
- package/dist/components/layout/Flex/index.js.map +1 -0
- package/dist/components/layout/Grid/index.js +5 -0
- package/dist/components/layout/Grid/index.js.map +1 -0
- package/dist/components/layout/Panel/index.js +5 -0
- package/dist/components/layout/Panel/index.js.map +1 -0
- package/dist/components/layout/ResizablePanels/index.js +5 -0
- package/dist/components/layout/ResizablePanels/index.js.map +1 -0
- package/dist/components/layout/ResponsiveContainer/index.js +5 -0
- package/dist/components/layout/ResponsiveContainer/index.js.map +1 -0
- package/dist/components/layout/ScrollArea/index.js +5 -0
- package/dist/components/layout/ScrollArea/index.js.map +1 -0
- package/dist/components/layout/Section/index.js +5 -0
- package/dist/components/layout/Section/index.js.map +1 -0
- package/dist/components/layout/Sheet/index.js +5 -0
- package/dist/components/layout/Sheet/index.js.map +1 -0
- package/dist/components/layout/Stack/index.js +5 -0
- package/dist/components/layout/Stack/index.js.map +1 -0
- package/dist/components/layout/index.js +17 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/navigation/AccountSwitch/index.js +10 -0
- package/dist/components/navigation/AccountSwitch/index.js.map +1 -0
- package/dist/components/navigation/Breadcrumb/index.js +5 -0
- package/dist/components/navigation/Breadcrumb/index.js.map +1 -0
- package/dist/components/navigation/ContextMenu/index.js +5 -0
- package/dist/components/navigation/ContextMenu/index.js.map +1 -0
- package/dist/components/navigation/Drawer/index.js +5 -0
- package/dist/components/navigation/Drawer/index.js.map +1 -0
- package/dist/components/navigation/DropdownMenu/index.js +5 -0
- package/dist/components/navigation/DropdownMenu/index.js.map +1 -0
- package/dist/components/navigation/FileTree/index.js +5 -0
- package/dist/components/navigation/FileTree/index.js.map +1 -0
- package/dist/components/navigation/Header/index.js +5 -0
- package/dist/components/navigation/Header/index.js.map +1 -0
- package/dist/components/navigation/Menu/index.js +5 -0
- package/dist/components/navigation/Menu/index.js.map +1 -0
- package/dist/components/navigation/Menubar/index.js +5 -0
- package/dist/components/navigation/Menubar/index.js.map +1 -0
- package/dist/components/navigation/MobileSidebar/index.js +190 -0
- package/dist/components/navigation/MobileSidebar/index.js.map +1 -0
- package/dist/components/navigation/Navbar/index.js +5 -0
- package/dist/components/navigation/Navbar/index.js.map +1 -0
- package/dist/components/navigation/NavigationMenu/index.js +5 -0
- package/dist/components/navigation/NavigationMenu/index.js.map +1 -0
- package/dist/components/navigation/Pagination/index.js +10 -0
- package/dist/components/navigation/Pagination/index.js.map +1 -0
- package/dist/components/navigation/Sidebar/index.js +16 -0
- package/dist/components/navigation/Sidebar/index.js.map +1 -0
- package/dist/components/navigation/SkipLinks/index.js +5 -0
- package/dist/components/navigation/SkipLinks/index.js.map +1 -0
- package/dist/components/navigation/SpeedDial/index.js +6 -0
- package/dist/components/navigation/SpeedDial/index.js.map +1 -0
- package/dist/components/navigation/TabNavigation/index.js +5 -0
- package/dist/components/navigation/TabNavigation/index.js.map +1 -0
- package/dist/components/navigation/TabPanel/index.js +5 -0
- package/dist/components/navigation/TabPanel/index.js.map +1 -0
- package/dist/components/navigation/Tabs/index.js +5 -0
- package/dist/components/navigation/Tabs/index.js.map +1 -0
- package/dist/components/navigation/Toolbar/index.js +5 -0
- package/dist/components/navigation/Toolbar/index.js.map +1 -0
- package/dist/components/navigation/Topbar/index.js +5 -0
- package/dist/components/navigation/Topbar/index.js.map +1 -0
- package/dist/components/navigation/UserProfileDropdown/index.js +224 -0
- package/dist/components/navigation/UserProfileDropdown/index.js.map +1 -0
- package/dist/components/navigation/WorkspaceDropdown/index.js +192 -0
- package/dist/components/navigation/WorkspaceDropdown/index.js.map +1 -0
- package/dist/components/navigation/index.js +37 -0
- package/dist/components/navigation/index.js.map +1 -0
- package/dist/components/primitives/ArrowAnimated/index.js +92 -0
- package/dist/components/primitives/ArrowAnimated/index.js.map +1 -0
- package/dist/components/primitives/AspectRatio/index.js +4 -0
- package/dist/components/primitives/AspectRatio/index.js.map +1 -0
- package/dist/components/primitives/Avatar/index.js +6 -0
- package/dist/components/primitives/Avatar/index.js.map +1 -0
- package/dist/components/primitives/Badge/index.js +7 -0
- package/dist/components/primitives/Badge/index.js.map +1 -0
- package/dist/components/primitives/Button/index.js +9 -0
- package/dist/components/primitives/Button/index.js.map +1 -0
- package/dist/components/primitives/ButtonGroup/index.js +7 -0
- package/dist/components/primitives/ButtonGroup/index.js.map +1 -0
- package/dist/components/primitives/ConfirmButton/index.js +11 -0
- package/dist/components/primitives/ConfirmButton/index.js.map +1 -0
- package/dist/components/primitives/Divider/index.js +5 -0
- package/dist/components/primitives/Divider/index.js.map +1 -0
- package/dist/components/primitives/FeatureItem/index.js +5 -0
- package/dist/components/primitives/FeatureItem/index.js.map +1 -0
- package/dist/components/primitives/FeaturedIcon/index.js +5 -0
- package/dist/components/primitives/FeaturedIcon/index.js.map +1 -0
- package/dist/components/primitives/FolderStack/index.js +5 -0
- package/dist/components/primitives/FolderStack/index.js.map +1 -0
- package/dist/components/primitives/Heading/index.js +5 -0
- package/dist/components/primitives/Heading/index.js.map +1 -0
- package/dist/components/primitives/Icon/index.js +5 -0
- package/dist/components/primitives/Icon/index.js.map +1 -0
- package/dist/components/primitives/Image/index.js +5 -0
- package/dist/components/primitives/Image/index.js.map +1 -0
- package/dist/components/primitives/Kbd/index.js +5 -0
- package/dist/components/primitives/Kbd/index.js.map +1 -0
- package/dist/components/primitives/Label/index.js +5 -0
- package/dist/components/primitives/Label/index.js.map +1 -0
- package/dist/components/primitives/Link/index.js +5 -0
- package/dist/components/primitives/Link/index.js.map +1 -0
- package/dist/components/primitives/Paragraph/index.js +5 -0
- package/dist/components/primitives/Paragraph/index.js.map +1 -0
- package/dist/components/primitives/ProgressBar/index.js +6 -0
- package/dist/components/primitives/ProgressBar/index.js.map +1 -0
- package/dist/components/primitives/ProgressCircle/index.js +6 -0
- package/dist/components/primitives/ProgressCircle/index.js.map +1 -0
- package/dist/components/primitives/SkeletonLoader/index.js +5 -0
- package/dist/components/primitives/SkeletonLoader/index.js.map +1 -0
- package/dist/components/primitives/Spacer/index.js +5 -0
- package/dist/components/primitives/Spacer/index.js.map +1 -0
- package/dist/components/primitives/Spinner/index.js +5 -0
- package/dist/components/primitives/Spinner/index.js.map +1 -0
- package/dist/components/primitives/SplitButton/index.js +6 -0
- package/dist/components/primitives/SplitButton/index.js.map +1 -0
- package/dist/components/primitives/StatusIndicator/index.js +5 -0
- package/dist/components/primitives/StatusIndicator/index.js.map +1 -0
- package/dist/components/primitives/Tag/index.js +5 -0
- package/dist/components/primitives/Tag/index.js.map +1 -0
- package/dist/components/primitives/Text/index.js +5 -0
- package/dist/components/primitives/Text/index.js.map +1 -0
- package/dist/components/primitives/Thumbnail/index.js +6 -0
- package/dist/components/primitives/Thumbnail/index.js.map +1 -0
- package/dist/components/primitives/Toggle/index.js +5 -0
- package/dist/components/primitives/Toggle/index.js.map +1 -0
- package/dist/components/primitives/index.js +38 -0
- package/dist/components/primitives/index.js.map +1 -0
- package/dist/components/workflow/ApprovalFlow/index.js +11 -0
- package/dist/components/workflow/ApprovalFlow/index.js.map +1 -0
- package/dist/components/workflow/ApprovalStatus/index.js +5 -0
- package/dist/components/workflow/ApprovalStatus/index.js.map +1 -0
- package/dist/components/workflow/CommentSystem/index.js +12 -0
- package/dist/components/workflow/CommentSystem/index.js.map +1 -0
- package/dist/components/workflow/Dashboard/index.js +10 -0
- package/dist/components/workflow/Dashboard/index.js.map +1 -0
- package/dist/components/workflow/DashboardBuilder/index.js +13 -0
- package/dist/components/workflow/DashboardBuilder/index.js.map +1 -0
- package/dist/components/workflow/KanbanBoard/index.js +13 -0
- package/dist/components/workflow/KanbanBoard/index.js.map +1 -0
- package/dist/components/workflow/ProgressSteps/index.js +5 -0
- package/dist/components/workflow/ProgressSteps/index.js.map +1 -0
- package/dist/components/workflow/ReportGenerator/index.js +12 -0
- package/dist/components/workflow/ReportGenerator/index.js.map +1 -0
- package/dist/components/workflow/Stepper/index.js +5 -0
- package/dist/components/workflow/Stepper/index.js.map +1 -0
- package/dist/components/workflow/TaskCard/index.js +5 -0
- package/dist/components/workflow/TaskCard/index.js.map +1 -0
- package/dist/components/workflow/TaskList/index.js +5 -0
- package/dist/components/workflow/TaskList/index.js.map +1 -0
- package/dist/components/workflow/TaskStatus/index.js +6 -0
- package/dist/components/workflow/TaskStatus/index.js.map +1 -0
- package/dist/components/workflow/Wizard/index.js +11 -0
- package/dist/components/workflow/Wizard/index.js.map +1 -0
- package/dist/components/workflow/index.js +32 -0
- package/dist/components/workflow/index.js.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +201 -52429
- package/dist/index.js.map +1 -1
- package/dist/jspdf.node.min-CTWP225M.js +372 -656
- package/dist/jspdf.node.min-CTWP225M.js.map +1 -1
- package/dist/jspdf.plugin.autotable-AAE7PZKA.js +4 -14
- package/dist/jspdf.plugin.autotable-AAE7PZKA.js.map +1 -1
- package/dist/lib/chart-colors.js +4 -0
- package/dist/lib/chart-colors.js.map +1 -0
- package/dist/lib/utils.js +3 -7
- package/dist/lib/utils.js.map +1 -1
- package/dist/styles.css +5265 -0
- package/dist/xlsx-PWHBQ6NK.js +206 -366
- package/dist/xlsx-PWHBQ6NK.js.map +1 -1
- package/package.json +11 -7
- package/styles.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/DataTable/DataTable.variants.ts","../src/components/data-display/DataTable/DataTable.types.ts","../src/components/data-display/DataTable/DataTableCell.tsx","../src/components/data-display/DataTable/DataTableBody.tsx","../src/components/data-display/DataTable/DataTableBulkActions.tsx","../src/components/data-display/DataTable/DataTableCardView.tsx","../src/components/data-display/DataTable/DataTableEmptyState.tsx","../src/components/data-display/DataTable/DataTableFillHandle.tsx","../src/components/data-display/DataTable/DataTableFilterChips.tsx","../src/components/data-display/DataTable/DataTableFindBar.tsx","../src/components/data-display/DataTable/DataTableColumnMenu.tsx","../src/components/data-display/DataTable/DataTableHeader.tsx","../src/components/data-display/DataTable/DataTablePagination.tsx","../src/components/data-display/DataTable/DataTableSidePanel.tsx","../src/components/data-display/DataTable/DataTableStatusBar.tsx","../src/components/data-display/DataTable/DataTableToolbar.tsx","../src/components/data-display/DataTable/DataTableTrailingRow.tsx","../src/components/data-display/DataTable/DataTable.export.ts","../src/components/data-display/DataTable/filterGroupToColumnFilters.ts","../src/components/data-display/DataTable/useDataTableKeyboard.ts","../src/components/data-display/DataTable/useDataTable.ts","../src/components/data-display/DataTable/useDataTableBatchEditing.ts","../src/components/data-display/DataTable/useDataTableCellSelection.ts","../src/components/data-display/DataTable/useDataTableHistory.ts","../src/components/data-display/DataTable/useDataTableInfiniteScroll.ts","../src/components/data-display/DataTable/useDataTablePaste.ts","../src/components/data-display/DataTable/useDataTableRowEditing.ts","../src/components/data-display/DataTable/useDataTableRowReordering.ts","../src/components/data-display/DataTable/useDataTableUrlState.ts","../src/components/data-display/DataTable/DataTable.tsx","../src/components/data-display/DataTable/DataTableFormatters.tsx"],"names":["React2","jsxs","Fragment","jsx","flexRender","React5","React6","ChevronDown","X","React8","ArrowUp","ArrowDown","ArrowUpDown","Group","ChevronRight","React10","GripHorizontal","React12","React13","React15","React16","React17","React18","meta","React19","React20","React21","React22","React23","table","Check","React24"],"mappings":"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","file":"chunk-75QBUI2P.js","sourcesContent":["// DataTable/DataTable.variants.ts\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DataTable container style variants using CVA\n *\n * @see https://cva.style/docs\n */\nexport const dataTableVariants = cva(\n // Base styles (always applied)\n \"space-y-4\",\n {\n variants: {\n density: {\n compact: \"[&_td]:py-[var(--datatable-row-padding-y-compact)] [&_th]:py-[var(--datatable-header-padding-y-compact)]\",\n default: \"[&_td]:py-[var(--datatable-row-padding-y-default)] [&_th]:py-[var(--datatable-header-padding-y-default)]\",\n comfortable: \"[&_td]:py-[var(--datatable-row-padding-y-comfortable)] [&_th]:py-[var(--datatable-header-padding-y-comfortable)]\",\n },\n },\n defaultVariants: {\n density: \"default\",\n },\n }\n)\n\n/**\n * DataTable row style variants\n */\nexport const dataTableRowVariants = cva(\n // Base styles (always applied)\n \"transition-colors\",\n {\n variants: {\n state: {\n default: \"\",\n selected: \"bg-[color:var(--datatable-row-bg-selected)]\",\n highlighted: \"bg-[color:var(--datatable-row-bg-highlighted)]/5\",\n },\n interactive: {\n true: \"cursor-pointer hover:bg-[color:var(--datatable-row-bg-hover)]/50\",\n false: \"\",\n },\n },\n defaultVariants: {\n state: \"default\",\n interactive: false,\n },\n }\n)\n\n/**\n * DataTable header cell style variants\n */\nexport const dataTableHeaderVariants = cva(\n // Base styles (always applied)\n \"text-muted-foreground\",\n {\n variants: {\n sortable: {\n true: \"cursor-pointer select-none hover:text-foreground\",\n false: \"\",\n },\n sorted: {\n asc: \"text-foreground\",\n desc: \"text-foreground\",\n none: \"\",\n },\n },\n defaultVariants: {\n sortable: false,\n sorted: \"none\",\n },\n }\n)\n\n/**\n * DataTable resize handle style variants\n */\nexport const dataTableResizeHandleVariants = cva(\n // Base styles (always applied)\n [\n \"absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none\",\n \"bg-transparent hover:bg-[color:var(--border-default)]\",\n \"transition-colors duration-150\",\n ],\n {\n variants: {\n isResizing: {\n true: \"bg-[color:var(--primary)] w-0.5\",\n false: \"\",\n },\n },\n defaultVariants: {\n isResizing: false,\n },\n }\n)\n\n// Export variant prop types\nexport type DataTableVariantProps = VariantProps<typeof dataTableVariants>\nexport type DataTableRowVariantProps = VariantProps<typeof dataTableRowVariants>\nexport type DataTableHeaderVariantProps = VariantProps<typeof dataTableHeaderVariants>\nexport type DataTableResizeHandleVariantProps = VariantProps<typeof dataTableResizeHandleVariants>\n","import type {\n FilterBuilderColumn,\n FilterGroup,\n FilterPreset,\n} from \"./FilterBuilder\"\nimport type {\n Column,\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n OnChangeFn,\n PaginationState,\n Row,\n RowPinningState,\n RowSelectionState,\n SortingState,\n Table as TanStackTable,\n VisibilityState,\n} from \"@tanstack/react-table\"\nimport type { ReactNode } from \"react\"\n\n/**\n * Parameters passed to cell edit callbacks\n */\nexport interface CellEditParams<TData> {\n /** The column being edited */\n column: Column<TData>\n /** The previous value before editing */\n oldValue: unknown\n /** The row being edited */\n row: Row<TData>\n /** The new value */\n value: unknown\n}\n\n/**\n * Column meta configuration for inline editing\n * Add this to column definitions via the `meta` property\n */\nexport interface EditableColumnMeta {\n /** Enable editing for this column */\n editable?: boolean\n /** Options for select type (array of allowed values) */\n editOptions?: string[]\n /** Edit input type */\n editType?: \"checkbox\" | \"date\" | \"number\" | \"select\" | \"text\"\n /** Validation function - return error message or null if valid */\n validate?: (value: unknown, row: Row<unknown>) => null | string\n}\n\n/**\n * Type guard for EditableColumnMeta\n */\nexport function isEditableColumnMeta(meta: unknown): meta is EditableColumnMeta {\n return meta !== null && typeof meta === \"object\" && \"editable\" in meta\n}\n\n/**\n * Column meta for row/column spanning configuration\n * Add to column definitions via `meta` property alongside EditableColumnMeta\n */\nexport interface SpanColumnMeta {\n /** Function returning colSpan for a given row (default 1) */\n colSpan?: (row: Row<unknown>) => number\n /** Function returning rowSpan for a given row (default 1) */\n rowSpan?: (row: Row<unknown>) => number\n}\n\n/**\n * Type guard for SpanColumnMeta\n */\nexport function isSpanColumnMeta(meta: unknown): meta is SpanColumnMeta {\n return meta !== null && typeof meta === \"object\" && (\"colSpan\" in meta || \"rowSpan\" in meta)\n}\n\n/**\n * Available export formats\n */\nexport type ExportFormat = \"csv\" | \"excel\" | \"pdf\"\n\n/**\n * Custom keyboard shortcuts configuration\n */\nexport interface KeyboardShortcuts {\n /** Key to copy cell (default: 'Ctrl+C') */\n copy?: string\n /** Key to delete row (default: 'Delete') */\n delete?: string\n /** Key to trigger edit mode (default: 'Enter' or 'F2') */\n edit?: string\n /** Key to select row (default: 'Space') */\n select?: string\n}\n\n/**\n * Focused cell position\n */\nexport interface FocusedCell {\n col: number\n row: number\n}\n\n/**\n * Export configuration options\n */\nexport interface ExportOptions {\n /** Custom filename (without extension) */\n filename?: string\n /** Include column headers in export @default true */\n includeHeaders?: boolean\n /** Only export filtered/selected rows @default false */\n onlyFilteredRows?: boolean\n /** Only export visible columns @default true */\n onlyVisibleColumns?: boolean\n}\n\n/**\n * DataTable component props\n * Advanced table with sorting, filtering, pagination, selection\n * Built on TanStack Table (React Table v8)\n */\nexport interface DataTableProps<TData> {\n /**\n * Advanced filter state (controlled)\n * Use with enableAdvancedFilter for visual filter building\n */\n advancedFilter?: FilterGroup\n\n /**\n * Column definitions for the advanced filter builder\n * Maps table columns to filter types (text, number, date, select)\n */\n advancedFilterColumns?: FilterBuilderColumn[]\n\n /**\n * Bulk action buttons shown when rows are selected\n * Each action has a label, optional icon, and onClick handler\n */\n bulkActions?: {\n icon?: ReactNode\n label: string\n onClick: (rows: TData[]) => void\n variant?: \"default\" | \"destructive\" | \"ghost\" | \"outline\" | \"secondary\"\n }[]\n\n /** Custom cell className (function receives cell column and row) */\n cellClassName?: (columnId: string, row: Row<TData>) => string\n\n /** Additional CSS classes */\n className?: string\n\n /** Column filters state (controlled) */\n columnFilters?: ColumnFiltersState\n\n /**\n * Controlled column order state\n * Array of column IDs defining display order\n */\n columnOrder?: ColumnOrderState\n\n /**\n * Controlled column pinning state\n */\n columnPinning?: ColumnPinningState\n\n /**\n * Column resize mode\n * - \"onChange\": resize while dragging (real-time)\n * - \"onEnd\": resize only when drag ends (better performance)\n * @default \"onChange\"\n */\n columnResizeMode?: \"onChange\" | \"onEnd\"\n\n /** Column definitions (required) */\n columns: ColumnDef<TData>[]\n\n /**\n * Controlled column sizing state\n */\n columnSizing?: ColumnSizingState\n\n /** Column visibility state (controlled) */\n columnVisibility?: VisibilityState\n\n /**\n * Context menu items for right-click on rows/cells\n * Each item receives the row data and optional cell column id\n */\n contextMenuItems?: {\n icon?: ReactNode\n label: string\n onClick: (row: TData, columnId?: string) => void\n separator?: boolean\n variant?: \"default\" | \"destructive\"\n }[]\n\n /** Array of data to display (required) */\n data: TData[]\n\n /**\n * Table row density\n * Controls vertical padding on cells\n * @default \"default\"\n */\n density?: \"comfortable\" | \"compact\" | \"default\"\n\n /**\n * Edit trigger mode\n * - \"click\": Single click to enter edit mode\n * - \"dblclick\": Double click to enter edit mode\n * @default \"dblclick\"\n */\n editTrigger?: \"click\" | \"dblclick\"\n\n /** Content to display when data is empty */\n emptyState?: ReactNode\n\n /**\n * Enable advanced filter builder UI\n * Shows a visual interface for building complex AND/OR filter conditions\n * @default false\n */\n enableAdvancedFilter?: boolean\n\n /**\n * Enable batch editing for selected cell ranges\n * Applies the same value to all selected cells at once\n * @default false\n */\n enableBatchEditing?: boolean\n\n /**\n * Enable multi-cell range selection (click+drag or Shift+click)\n * Cells can be selected as a rectangular range with mouse or keyboard\n * @default false\n */\n enableCellSelection?: boolean\n\n /**\n * Enable clipboard copy (Ctrl/Cmd+C copies focused cell or selected rows)\n * @default false\n */\n enableClipboard?: boolean\n\n /**\n * Enable auto-sizing all columns on mount or data change\n * Measures max content width and adjusts column sizes automatically\n * @default false\n */\n enableColumnAutoSize?: boolean\n\n /** Enable column filters */\n enableColumnFilters?: boolean\n\n /**\n * Enable column menu (right-click or icon on header hover)\n * Shows contextual actions: sort, pin, auto-size, filter, hide\n * @default false\n */\n enableColumnMenu?: boolean\n\n /**\n * Enable drag-and-drop column reordering\n * Users can drag column headers to rearrange them\n * @default false\n */\n enableColumnOrdering?: boolean\n\n /**\n * Enable column pinning\n * @default false\n */\n enableColumnPinning?: boolean\n\n /**\n * Enable column resizing by dragging borders\n * @default false\n */\n enableColumnResizing?: boolean\n\n /**\n * Enable column virtualization for wide tables with many columns\n * Only renders visible columns plus overscan for smooth scrolling\n * @default false\n */\n enableColumnVirtualization?: boolean\n\n /** Enable column visibility toggle */\n enableColumnVisibility?: boolean\n\n /**\n * Enable density toggle in toolbar\n * @default false\n */\n enableDensityToggle?: boolean\n\n /**\n * Enable inline cell editing\n * Cells with editable column meta will become editable\n * @default false\n */\n enableEditing?: boolean\n\n /**\n * Enable export functionality\n * @default false\n */\n enableExport?: boolean\n\n /**\n * Enable drag-to-fill handle on selected cells\n * A small handle appears at the bottom-right of the selection for dragging values\n * @default false\n */\n enableFillHandle?: boolean\n\n /**\n * Enable filter chips (removable tags showing active filters)\n * Shows active filter chips below the toolbar with a \"Clear all\" option\n * @default false\n */\n enableFilterChips?: boolean\n\n /** Enable global filtering */\n enableFiltering?: boolean\n\n /**\n * Enable in-table find bar (Ctrl/Cmd+F)\n * Shows a search bar that highlights and navigates matching cells\n * @default false\n */\n enableFind?: boolean\n\n /**\n * Enable row grouping by column values\n * Rows with the same value will be grouped under a collapsible header\n * @default false\n */\n enableGrouping?: boolean\n\n /**\n * Enable infinite scroll / load more\n * When enabled, a sentinel element at the bottom of the table body triggers\n * loading more data via IntersectionObserver as the user scrolls near it.\n * Typically used with enableVirtualization and without pagination.\n * @default false\n */\n enableInfiniteScroll?: boolean\n\n /**\n * Enable keyboard navigation between cells\n * Implements ARIA grid pattern for accessibility\n * @default false\n */\n enableKeyboardNavigation?: boolean\n\n /**\n * Enable multi-column sorting (hold Shift to add sort columns)\n * @default false\n */\n enableMultiSort?: boolean\n\n /** Enable pagination controls */\n enablePagination?: boolean\n\n /**\n * Enable clipboard paste (Ctrl/Cmd+V pastes TSV/CSV data starting from focused cell)\n * @default false\n */\n enablePaste?: boolean\n\n /**\n * Enable print button in toolbar\n * Adds a print button that triggers window.print() with print-optimized styles\n * @default false\n */\n enablePrint?: boolean\n\n /**\n * Enable responsive card view below a breakpoint\n * Switches from table layout to card layout on smaller screens\n * @default false\n */\n enableResponsive?: boolean\n\n /**\n * Enable row animation on sort/filter changes\n * Uses CSS view-transition-name for smooth row transitions\n * @default false\n */\n enableRowAnimation?: boolean\n\n /**\n * Enable row/column spanning (colSpan/rowSpan) via column meta\n * Configure via column meta: `meta: { colSpan: (row) => number, rowSpan: (row) => number }`\n * @default false\n */\n enableRowColumnSpanning?: boolean\n\n /**\n * Enable full-row editing mode\n * When enabled, an entire row enters edit mode at once (all editable columns become inputs).\n * Changes are applied or discarded as a batch via Save/Cancel row actions.\n * @default false\n */\n enableRowEditing?: boolean\n\n /**\n * Enable automatic row numbering column\n * Prepends a \"#\" column showing sequential row numbers based on visible/filtered order\n * @default false\n */\n enableRowNumbers?: boolean\n\n /**\n * Enable row pinning (pin rows to top or bottom)\n * @default false\n */\n enableRowPinning?: boolean\n\n /**\n * Enable drag-and-drop row reordering\n * @default false\n */\n enableRowReordering?: boolean\n\n /** Enable row selection with checkboxes */\n enableRowSelection?: boolean\n\n /** Enable search input */\n enableSearch?: boolean\n\n /**\n * Enable search text highlighting in cells\n * Wraps matching text with <mark> elements\n * @default false\n */\n enableSearchHighlight?: boolean\n\n /**\n * Enable side panel for table tools\n * @default false\n */\n enableSidePanel?: boolean\n\n /** Enable sorting on columns */\n enableSorting?: boolean\n\n /**\n * Enable status bar at the bottom of the table\n * Shows row count, filtered count, selected count, and custom items\n * @default false\n */\n enableStatusBar?: boolean\n\n /**\n * Enable sticky header that stays visible when scrolling\n * Requires maxHeight to be set for the table container\n * @default false\n */\n enableStickyHeader?: boolean\n\n /**\n * Enable row striping (alternating row backgrounds)\n * @default false\n */\n enableStriping?: boolean\n\n /**\n * Enable trailing \"add new\" row at the bottom of the table\n * Shows a row with a \"+\" button for inline record creation\n * @default false\n */\n enableTrailingRow?: boolean\n\n /**\n * Enable hierarchical tree data display\n * Rows with children (defined via getSubRows) are rendered as expandable tree nodes\n * @default false\n */\n enableTreeData?: boolean\n\n /**\n * Enable undo/redo for cell edits (Ctrl+Z / Ctrl+Shift+Z)\n * @default false\n */\n enableUndoRedo?: boolean\n\n /**\n * Enable URL-based state persistence (sync sort, filter, page to URL params)\n * @default false\n */\n enableUrlState?: boolean\n\n /**\n * Enable row virtualization for large datasets\n * When enabled, only visible rows are rendered using TanStack Virtual.\n * Pagination is typically disabled when virtualization is on (show all rows, scroll).\n * Requires maxHeight to be set for the scroll container.\n * @default false\n */\n enableVirtualization?: boolean\n\n /** Whether the table is in an error state */\n error?: boolean\n\n /** Custom content to display when in error state */\n errorState?: ReactNode\n\n /**\n * Estimated row height in pixels for virtual scrolling\n * Used by the virtualizer to calculate scroll area size\n * @default 35\n */\n estimateRowHeight?: number\n\n /** Expanded state (controlled) */\n expanded?: ExpandedState\n\n /**\n * Default export filename\n * @default \"export\"\n */\n exportFilename?: (() => string) | string\n\n /**\n * Available export formats\n * @default ['csv']\n */\n exportFormats?: ExportFormat[]\n\n /**\n * Saved filter presets for the advanced filter builder\n */\n filterPresets?: FilterPreset[]\n\n /** Function to determine if row can expand */\n getRowCanExpand?: (row: Row<TData>) => boolean\n\n /**\n * Function to extract child rows from a parent row\n * Used with enableTreeData to define the parent-child hierarchy\n */\n getSubRows?: (row: TData) => TData[] | undefined\n\n /** Global filter value (controlled) */\n globalFilter?: string\n\n /** Grouping state (controlled) */\n grouping?: GroupingState\n\n /**\n * Whether there are more items to load\n * Used with enableInfiniteScroll to signal when all data has been fetched\n */\n hasNextPage?: boolean\n\n /** Initial column filters state (uncontrolled) */\n initialColumnFilters?: ColumnFiltersState\n\n /**\n * Initial column pinning (uncontrolled)\n */\n initialColumnPinning?: ColumnPinningState\n\n /** Initial global filter value (uncontrolled) */\n initialGlobalFilter?: string\n\n /** Initial pagination state (uncontrolled) */\n initialPagination?: PaginationState\n\n /** Initial sorting state */\n initialSorting?: SortingState\n\n /**\n * Whether data is currently being fetched for infinite scroll\n * Prevents duplicate load requests while a fetch is in progress\n */\n isFetching?: boolean\n\n /**\n * Custom keyboard shortcuts\n * Only used when enableKeyboardNavigation is true\n */\n keyboardShortcuts?: KeyboardShortcuts\n\n /** Show loading state */\n loading?: boolean\n\n /** Loading component to render */\n loadingComponent?: ReactNode\n\n /** Enable manual (server-side) filtering */\n manualFiltering?: boolean\n\n /** Enable manual (server-side) pagination */\n manualPagination?: boolean\n\n /** Enable manual (server-side) sorting */\n manualSorting?: boolean\n\n /**\n * Maximum height of the table container\n * Required when enableStickyHeader is true\n * @example \"400px\" or \"60vh\" or 500\n */\n maxHeight?: number | string\n\n /**\n * Maximum number of columns that can be sorted simultaneously\n * Only applies when enableMultiSort is true\n */\n maxMultiSortColCount?: number\n\n /**\n * Callback when a new row is added via the trailing row\n * Receives the values entered by the user\n */\n onAddRow?: (values: Record<string, unknown>) => void\n\n /** Callback when advanced filter changes */\n onAdvancedFilterChange?: (filter: FilterGroup) => void\n\n /**\n * Callback when cell edit is submitted\n * Return false to reject the edit (keeps edit mode open)\n * Return true to accept the edit (closes edit mode)\n */\n onCellEdit?: (params: CellEditParams<TData>) => boolean | Promise<boolean>\n\n /**\n * Callback when cell edit is cancelled (via Escape key)\n */\n onCellEditCancel?: (params: Omit<CellEditParams<TData>, \"value\">) => void\n\n /** Callback when a fill handle drag completes */\n onCellFill?: (params: { direction: \"down\" | \"right\"; sourceCell: { col: number; row: number }; targetRange: { endCol: number; endRow: number; startCol: number; startRow: number } }) => void\n\n /**\n * Callback when cell is focused via keyboard navigation\n * Only called when enableKeyboardNavigation is true\n */\n onCellFocus?: (rowIndex: number, columnId: string) => void\n\n /**\n * Callback when cell range selection changes\n * Receives an array of selected cell coordinates\n * Only called when enableCellSelection is true\n */\n onCellSelectionChange?: (cells: { colIndex: number; rowIndex: number }[]) => void\n\n /** Callback for column filters change */\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n\n /**\n * Callback when column order changes\n */\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n\n /**\n * Callback when column pinning changes\n */\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n\n /**\n * Callback when column sizes change\n */\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n\n /** Callback for column visibility change */\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n\n /** Callback to delete a filter preset */\n onDeleteFilterPreset?: (presetId: string) => void\n\n /** Callback when density changes */\n onDensityChange?: (density: \"comfortable\" | \"compact\" | \"default\") => void\n\n /** Callback for expanded state change */\n onExpandedChange?: OnChangeFn<ExpandedState>\n\n /**\n * Custom export handler (overrides default)\n */\n onExport?: (format: ExportFormat, data: TData[], options: ExportOptions) => void\n\n /** Callback for global filter change */\n onGlobalFilterChange?: (value: string) => void\n\n /** Callback for grouping change */\n onGroupingChange?: OnChangeFn<GroupingState>\n\n /**\n * Callback to load more data when scrolling near the bottom\n * Only called when enableInfiniteScroll is true\n */\n onLoadMore?: () => void\n\n /** Callback for pagination change */\n onPaginationChange?: OnChangeFn<PaginationState>\n\n /**\n * Callback when data is pasted from clipboard\n * Receives mapped cell coordinates and values\n */\n onPaste?: (params: { cells: { columnId: string; rowIndex: number; value: string }[] }) => void\n\n /** Callback when row is clicked */\n onRowClick?: (row: TData) => void\n\n /**\n * Callback when full-row edit is submitted\n * Return false to reject the edit (keeps row in edit mode)\n * Return true to accept the edit (exits edit mode)\n * Only called when enableRowEditing is true\n */\n onRowEdit?: (params: { oldValues: Record<string, unknown>; row: Row<TData>; values: Record<string, unknown> }) => boolean | Promise<boolean>\n\n /**\n * Callback when full-row edit is cancelled\n * Only called when enableRowEditing is true\n */\n onRowEditCancel?: (params: { row: Row<TData> }) => void\n\n /**\n * Callback when row pinning changes\n */\n onRowPinningChange?: OnChangeFn<RowPinningState>\n\n /**\n * Callback when rows are reordered via drag and drop\n * Receives the old and new index of the dragged row\n */\n onRowReorder?: (oldIndex: number, newIndex: number) => void\n\n /** Callback for row selection change */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n\n /** Callback to save a filter preset */\n onSaveFilterPreset?: (preset: FilterPreset) => void\n\n /** Callback when selection changes */\n onSelectionChange?: (rows: TData[]) => void\n\n /**\n * Callback when side panel open state changes\n * Only used when enableSidePanel is true\n */\n onSidePanelOpenChange?: (open: boolean) => void\n\n /** Callback for sorting change */\n onSortingChange?: OnChangeFn<SortingState>\n\n /**\n * Callback when undo/redo applies a cell edit\n * Receives the affected cell info and direction\n * Only called when enableUndoRedo is true\n */\n onUndoRedo?: (entry: { columnId: string; rowId: string; value: unknown }, direction: \"redo\" | \"undo\") => void\n\n /**\n * Number of rows to render outside the visible area for virtualization\n * Higher values reduce blank flashes during fast scrolling\n * @default 5\n */\n overscan?: number\n\n /** Total page count (for server-side pagination) */\n pageCount?: number\n\n /** Number of items per page */\n pageSize?: number\n\n /** Options for page size selector */\n pageSizeOptions?: number[]\n\n /** Pagination state (controlled) */\n pagination?: PaginationState\n\n /**\n * Key for persisting table state to storage\n * When set, sorting, pageSize, visibility, sizing, pinning, density, and filters are persisted\n */\n persistenceKey?: string\n\n /**\n * Storage mechanism for state persistence\n * @default localStorage\n */\n persistenceStorage?: Storage\n\n /** Render function for column filter */\n renderColumnFilter?: (props: {\n column: Column<TData>\n table: TanStackTable<TData>\n }) => ReactNode\n\n /** Render function for expanded sub-component */\n renderSubComponent?: (props: { row: Row<TData> }) => ReactNode\n\n /**\n * Breakpoint (in px) below which responsive card view activates\n * Only used when enableResponsive is true\n * @default 768\n */\n responsiveBreakpoint?: number\n\n /** Custom row className (string or function) */\n rowClassName?: ((row: Row<TData>) => string) | string\n\n /**\n * Row pinning state (controlled)\n */\n rowPinning?: RowPinningState\n\n /** Row selection state (controlled) */\n rowSelection?: RowSelectionState\n\n /** Search input placeholder */\n searchPlaceholder?: string\n\n /** Show footer row */\n showFooter?: boolean\n\n /**\n * Content to render inside the side panel\n * Only used when enableSidePanel is true\n */\n sidePanelContent?: ReactNode\n\n /**\n * Controlled open state for the side panel\n * When provided, the component becomes controlled\n * Only used when enableSidePanel is true\n */\n sidePanelOpen?: boolean\n\n /** Sorting state (controlled) */\n sorting?: SortingState\n\n /**\n * Custom status bar items to display alongside default counts\n * Each item has a label and a value function that receives the table instance\n */\n statusBarItems?: {\n id: string\n label: string\n value: (table: TanStackTable<TData>) => ReactNode\n }[]\n\n /**\n * Number of tree levels to auto-expand on mount\n * Only used when enableTreeData is true\n * @default 1\n */\n treeExpandDepth?: number\n\n /**\n * Prefix for URL state parameters\n * Only used when enableUrlState is true\n * @default \"dt_\"\n */\n urlStatePrefix?: string\n}\n\n/**\n * DataTable pagination info\n */\nexport interface DataTablePaginationInfo {\n canNextPage: boolean\n canPreviousPage: boolean\n pageCount: number\n pageIndex: number\n pageSize: number\n totalItems: number\n}\n\n/**\n * DataTable column filter variant\n */\nexport type DataTableFilterVariant = \"faceted\" | \"range\" | \"select\" | \"text\"\n\n/**\n * Column filter meta information\n */\nexport interface DataTableColumnMeta {\n filterOptions?: string[]\n filterVariant?: DataTableFilterVariant\n}\n\n/**\n * Re-export useful types from TanStack Table\n */\nexport type {\n Column,\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n Row,\n RowPinningState,\n RowSelectionState,\n SortingState,\n VisibilityState,\n} from \"@tanstack/react-table\"\n\n// Note: DataTable has an internal FilterBuilder. For standalone filter building,\n// use the FilterBuilder from advanced/FilterBuilder\n// Internal types (FilterBuilderColumn, FilterCondition, FilterGroup, etc.) are\n// imported in DataTable.tsx but not re-exported to avoid conflicts\n","import type { FocusedCell } from \"./DataTable.types\"\nimport type { Cell, Column, Row } from \"@tanstack/react-table\"\n\nimport { flexRender } from \"@tanstack/react-table\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { TableCell } from \"../Table\"\nimport { isEditableColumnMeta } from \"./DataTable.types\"\n\ninterface DataTableCellProps<TData> {\n cancelEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => void\n cell: Cell<TData, unknown>\n cellClassName?: (columnId: string, row: Row<TData>) => string\n colIndex: number\n colSpan?: number\n editError: null | string\n editingCell: null | { columnId: string; rowId: string }\n editTrigger: \"click\" | \"dblclick\"\n editValue: unknown\n enableColumnPinning: boolean\n enableEditing: boolean\n enableKeyboardNavigation: boolean\n enableSearchHighlight: boolean\n focusedCell: FocusedCell | null\n getPinnedAttribute: (column: Column<TData>) => string | undefined\n getPinnedStyles: (column: Column<TData>) => React.CSSProperties\n globalFilter?: string\n handleCellFocus: (rowIndex: number, colIndex: number) => void\n row: Row<TData>\n rowSpan?: number\n setEditInputRef: (node: HTMLInputElement | HTMLSelectElement | null) => void\n setEditValue: (value: unknown) => void\n startEdit: (rowId: string, columnId: string, currentValue: unknown, column: Column<TData>) => void\n submitEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => Promise<void>\n}\n\n/**\n * Highlight matching text by wrapping matches in <mark> elements.\n */\nfunction highlightText(text: string, query: string): React.ReactNode {\n if (!query || !text) return text\n const escapedQuery = query.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n const regex = new RegExp(`(${escapedQuery})`, \"gi\")\n const parts = text.split(regex)\n if (parts.length === 1) return text\n return parts.map((part, index) =>\n regex.test(part)\n ? <mark key={`hl-${String(index)}`} className=\"bg-yellow-200 text-inherit dark:bg-yellow-800\">{part}</mark>\n : part\n )\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity -- Cell rendering requires many conditional branches for editing, pinning, keyboard nav\nfunction DataTableCellInner<TData>({\n cancelEdit,\n cell,\n cellClassName,\n colIndex,\n colSpan,\n editTrigger,\n editValue,\n editError,\n editingCell,\n enableColumnPinning,\n enableEditing,\n enableKeyboardNavigation,\n enableSearchHighlight,\n focusedCell,\n globalFilter,\n getPinnedAttribute,\n getPinnedStyles,\n handleCellFocus,\n row,\n rowSpan,\n setEditInputRef,\n setEditValue,\n startEdit,\n submitEdit,\n}: DataTableCellProps<TData>) {\n const rowIndex = row.index\n const isFocused = enableKeyboardNavigation &&\n focusedCell !== null &&\n focusedCell.row === rowIndex &&\n focusedCell.col === colIndex\n\n // Inline editing state\n const isEditing = editingCell !== null && editingCell.rowId === row.id && editingCell.columnId === cell.column.id\n const meta = isEditableColumnMeta(cell.column.columnDef.meta) ? cell.column.columnDef.meta : undefined\n const isEditable = enableEditing && meta?.editable\n const cellValue = cell.getValue()\n\n // Edit trigger handlers\n const handleEditTrigger = () => {\n if (isEditable) {\n startEdit(row.id, cell.column.id, cellValue, cell.column)\n }\n }\n\n // Render edit input based on edit type\n const renderEditInput = () => {\n const editType = meta?.editType ?? \"text\"\n const editOptions = meta?.editOptions ?? []\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n void submitEdit(row, cell.column, cellValue)\n } else if (e.key === \"Escape\") {\n e.preventDefault()\n cancelEdit(row, cell.column, cellValue)\n }\n }\n\n if (editType === \"select\") {\n return (\n <div className=\"flex flex-col gap-1\">\n <select\n ref={setEditInputRef}\n aria-label=\"Edit cell\"\n 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\"\n value={String(editValue)}\n onBlur={() => { void submitEdit(row, cell.column, cellValue); }}\n onChange={(e) => { setEditValue(e.target.value); }}\n onKeyDown={handleKeyDown}\n >\n {editOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n {editError && (\n <span className=\"text-xs text-[color:var(--input-border-error)]\">{editError}</span>\n )}\n </div>\n )\n }\n\n if (editType === \"checkbox\") {\n return (\n <div className=\"flex items-center gap-2\">\n <input\n ref={setEditInputRef}\n aria-label=\"Edit cell\"\n checked={Boolean(editValue)}\n className=\"size-4 rounded border border-input\"\n type=\"checkbox\"\n onChange={(e) => {\n setEditValue(e.target.checked)\n void submitEdit(row, cell.column, cellValue)\n }}\n onKeyDown={handleKeyDown}\n />\n {editError && (\n <span className=\"text-xs text-[color:var(--input-border-error)]\">{editError}</span>\n )}\n </div>\n )\n }\n\n return (\n <div className=\"flex flex-col gap-1\">\n <input\n ref={setEditInputRef}\n aria-label=\"Edit cell\"\n 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\"\n type={editType === \"number\" ? \"number\" : editType === \"date\" ? \"date\" : \"text\"}\n value={editType === \"number\" ? (editValue as number) : (typeof editValue === \"string\" || typeof editValue === \"number\" ? String(editValue) : \"\")}\n onBlur={() => { void submitEdit(row, cell.column, cellValue); }}\n onChange={(e) => {\n setEditValue(editType === \"number\" ? e.target.valueAsNumber : e.target.value)\n }}\n onKeyDown={handleKeyDown}\n />\n {editError && (\n <span className=\"text-xs text-[color:var(--input-border-error)]\">{editError}</span>\n )}\n </div>\n )\n }\n\n return (\n <TableCell\n key={cell.id}\n className={cn(\n enableColumnPinning && cell.column.getIsPinned() && \"sticky\",\n isEditable && \"cursor-pointer\",\n cellClassName?.(cell.column.id, row)\n )}\n colSpan={colSpan}\n data-col={enableKeyboardNavigation ? colIndex : undefined}\n data-column-id={cell.column.id}\n data-pinned={getPinnedAttribute(cell.column)}\n data-row={enableKeyboardNavigation ? rowIndex : undefined}\n role={enableKeyboardNavigation ? \"gridcell\" : undefined}\n rowSpan={rowSpan}\n style={getPinnedStyles(cell.column)}\n tabIndex={enableKeyboardNavigation ? (isFocused ? 0 : -1) : undefined}\n onClick={\n editTrigger === \"click\" && isEditable && !isEditing\n ? (e: React.MouseEvent) => { e.stopPropagation(); handleEditTrigger(); }\n : undefined\n }\n onDoubleClick={\n editTrigger === \"dblclick\" && isEditable && !isEditing\n ? (e: React.MouseEvent) => { e.stopPropagation(); handleEditTrigger(); }\n : undefined\n }\n onFocus={\n enableKeyboardNavigation\n ? () => { handleCellFocus(rowIndex, colIndex); }\n : undefined\n }\n >\n {isEditing ? renderEditInput() : (\n enableSearchHighlight && globalFilter && !cell.column.columnDef.cell && (typeof cellValue === \"string\" || typeof cellValue === \"number\")\n ? highlightText(String(cellValue), globalFilter)\n : flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </TableCell>\n )\n}\n\n// Note: React.memo cannot be used here because props like `cell` and `row` from\n// TanStack Table are stable references with mutating internal state.\n// To optimize, introduce a DataTableContext in a future refactor.\nconst DataTableCell = DataTableCellInner\n\nexport { DataTableCell }\nexport type { DataTableCellProps }\n","import type { FocusedCell } from \"./DataTable.types\"\nimport type { Column, ColumnDef, Row, Table } from \"@tanstack/react-table\"\nimport type { Virtualizer } from \"@tanstack/react-virtual\"\nimport type { ReactNode } from \"react\"\n\nimport { flexRender } from \"@tanstack/react-table\"\nimport { ChevronDown, ChevronRight, GripVertical } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n ContextMenu,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuSeparator,\n ContextMenuTrigger,\n} from \"../../navigation/ContextMenu\"\nimport { TableBody, TableCell, TableFooter, TableRow } from \"../Table\"\nimport { isSpanColumnMeta } from \"./DataTable.types\"\nimport { dataTableRowVariants } from \"./DataTable.variants\"\nimport { DataTableCell } from \"./DataTableCell\"\n\ninterface DataTableBodyProps<TData> {\n cancelEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => void\n cellClassName?: (columnId: string, row: Row<TData>) => string\n columnVirtualizer?: Virtualizer<HTMLDivElement, Element>\n /** Ref to the closest [data-slot=\"data-table\"] container for scoped DOM queries */\n containerRef?: React.RefObject<HTMLDivElement | null>\n contextMenuItems?: {\n icon?: ReactNode\n label: string\n onClick: (row: TData, columnId?: string) => void\n separator?: boolean\n variant?: \"default\" | \"destructive\"\n }[]\n dragHandleProps?: (rowIndex: number) => Record<string, unknown>\n editError: null | string\n editingCell: null | { columnId: string; rowId: string }\n editTrigger: \"click\" | \"dblclick\"\n editValue: unknown\n enableColumnPinning: boolean\n enableEditing: boolean\n enableGrouping: boolean\n enableKeyboardNavigation: boolean\n enableRowAnimation?: boolean\n enableRowColumnSpanning?: boolean\n enableRowReordering?: boolean\n enableRowSelection: boolean\n enableSearchHighlight: boolean\n enableStriping: boolean\n enableVirtualization?: boolean\n focusedCell: FocusedCell | null\n getPinnedAttribute: (column: Column<TData>) => string | undefined\n getPinnedStyles: (column: Column<TData>) => React.CSSProperties\n globalFilter?: string\n handleCellFocus: (rowIndex: number, colIndex: number) => void\n hasFooter: boolean\n onRowClick?: (row: TData) => void\n renderSubComponent?: (props: { row: Row<TData> }) => React.ReactNode\n rowClassName?: ((row: Row<TData>) => string) | string\n rowVirtualizer?: Virtualizer<HTMLDivElement, Element>\n setEditInputRef: (node: HTMLInputElement | HTMLSelectElement | null) => void\n setEditValue: (value: unknown) => void\n startEdit: (rowId: string, columnId: string, currentValue: unknown, column: Column<TData>) => void\n submitEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => Promise<void>\n table: Table<TData>\n tableColumns: ColumnDef<TData>[]\n}\n\nfunction DataTableBodyInner<TData>({\n cancelEdit,\n cellClassName,\n columnVirtualizer,\n contextMenuItems,\n dragHandleProps,\n editTrigger,\n editValue,\n editError,\n editingCell,\n enableColumnPinning,\n enableEditing,\n enableGrouping,\n enableKeyboardNavigation,\n enableRowAnimation,\n enableRowColumnSpanning,\n enableRowReordering,\n enableSearchHighlight,\n enableStriping,\n enableVirtualization,\n containerRef,\n focusedCell,\n globalFilter,\n getPinnedAttribute,\n getPinnedStyles,\n handleCellFocus,\n hasFooter,\n onRowClick,\n renderSubComponent,\n rowClassName,\n rowVirtualizer,\n setEditInputRef,\n setEditValue,\n startEdit,\n submitEdit,\n table,\n tableColumns,\n}: DataTableBodyProps<TData>) {\n const rows = table.getRowModel().rows\n const virtualItems = rowVirtualizer?.getVirtualItems()\n const isVirtual = enableVirtualization && rowVirtualizer && virtualItems\n\n // --- FLIP animation for row sort/filter transitions ---\n const ROW_ANIMATION_DURATION = 300\n const rowPositionsRef = React.useRef<Map<string, number>>(new Map())\n const isFirstRenderRef = React.useRef(true)\n\n React.useLayoutEffect(() => {\n if (!enableRowAnimation) return\n\n const container = containerRef?.current\n const tbody = container\n ? container.querySelector('tbody')\n : document.querySelector('[data-slot=\"data-table\"] tbody')\n if (!tbody) return\n const trs = tbody.querySelectorAll<HTMLElement>('tr[data-row-id]')\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n // Capture initial positions without animating\n for (const tr of trs) {\n const rowId = tr.dataset[\"rowId\"]\n if (rowId) rowPositionsRef.current.set(rowId, tr.getBoundingClientRect().top)\n }\n return\n }\n\n // Last + Invert + Play\n const cleanupFns: (() => void)[] = []\n\n for (const tr of trs) {\n const rowId = tr.dataset[\"rowId\"]\n if (!rowId) continue\n\n const previousTop = rowPositionsRef.current.get(rowId)\n if (previousTop === undefined) continue\n\n const currentTop = tr.getBoundingClientRect().top\n const delta = previousTop - currentTop\n\n if (Math.abs(delta) < 1) continue\n\n // Invert: instantly move to old position\n tr.style.transform = `translateY(${String(delta)}px)`\n tr.style.transition = 'none'\n\n // Force reflow\n tr.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions\n\n // Play: animate back to natural position\n tr.style.transition = `transform ${String(ROW_ANIMATION_DURATION)}ms ease-out`\n tr.style.transform = ''\n\n // Cleanup on transition end\n const onEnd = () => {\n tr.style.transition = ''\n tr.style.transform = ''\n tr.removeEventListener('transitionend', onEnd)\n }\n tr.addEventListener('transitionend', onEnd) // eslint-disable-line @eslint-react/web-api/no-leaked-event-listener -- cleanup is in effect return via cleanupFns\n cleanupFns.push(() => { tr.removeEventListener('transitionend', onEnd) })\n }\n\n // Update stored positions\n const newPositions = new Map<string, number>()\n for (const tr of trs) {\n const rowId = tr.dataset[\"rowId\"]\n if (rowId) newPositions.set(rowId, tr.getBoundingClientRect().top)\n }\n rowPositionsRef.current = newPositions\n\n // Effect cleanup: remove any pending transitionend listeners\n return () => {\n for (const fn of cleanupFns) fn()\n }\n }, [rows, enableRowAnimation, containerRef]) // rows changes trigger animation\n\n return (\n <>\n <TableBody\n style={isVirtual ? {\n height: `${String(rowVirtualizer.getTotalSize())}px`,\n position: \"relative\",\n } : undefined}\n >\n {rows.length ? (\n // eslint-disable-next-line sonarjs/cognitive-complexity -- row rendering with grouping, virtualization, and context menu\n (isVirtual ? virtualItems : rows).map((itemOrRow) => {\n const row = isVirtual\n ? rows[(itemOrRow as (typeof virtualItems)[number]).index]! // eslint-disable-line @typescript-eslint/no-non-null-assertion -- index from virtualizer is always valid\n : (itemOrRow as Row<TData>)\n const virtualRow = isVirtual ? (itemOrRow as (typeof virtualItems)[number]) : null\n // Virtual row positioning style\n const virtualRowStyle: React.CSSProperties | undefined = virtualRow\n ? {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${String(virtualRow.size)}px`,\n transform: `translateY(${String(virtualRow.start)}px)`,\n }\n : undefined\n\n // Grouped row header rendering\n if (enableGrouping && row.getIsGrouped()) {\n return (\n <React.Fragment key={virtualRow ? virtualRow.key : row.id}>\n <TableRow\n ref={virtualRow && rowVirtualizer ? rowVirtualizer.measureElement : undefined}\n className={cn(\n \"bg-muted/30 font-medium\",\n typeof rowClassName === \"function\" ? rowClassName(row) : rowClassName\n )}\n data-index={virtualRow?.index}\n style={virtualRowStyle}\n >\n {row.getVisibleCells().map((cell) => {\n const isGroupedCell = cell.getIsGrouped()\n const isAggregated = cell.getIsAggregated()\n const isPlaceholder = cell.getIsPlaceholder()\n\n return (\n <TableCell\n key={cell.id}\n className={cn(\n enableColumnPinning && cell.column.getIsPinned() && \"sticky\",\n cellClassName?.(cell.column.id, row)\n )}\n data-column-id={cell.column.id}\n data-pinned={getPinnedAttribute(cell.column)}\n style={getPinnedStyles(cell.column)}\n >\n {isGroupedCell ? (\n <button\n className=\"flex items-center gap-1.5 text-left\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n row.toggleExpanded()\n }}\n >\n {row.getIsExpanded() ? (\n <ChevronDown className=\"size-4 shrink-0\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0\" />\n )}\n <span>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n <span className=\"ml-1 text-xs text-muted-foreground\">\n ({row.subRows.length})\n </span>\n </button>\n ) : isAggregated ? (\n flexRender(\n cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell,\n cell.getContext()\n )\n ) : isPlaceholder ? null : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </TableCell>\n )\n })}\n </TableRow>\n {/* Render sub-rows if expanded */}\n {row.getIsExpanded() && row.subRows.map((subRow) => {\n const subTableRow = (\n <TableRow\n key={subRow.id}\n className={cn(\n dataTableRowVariants({\n state: subRow.getIsSelected() ? \"selected\" : \"default\",\n interactive: !!onRowClick,\n }),\n enableStriping && subRow.index % 2 === 1 && \"bg-muted/50\",\n typeof rowClassName === \"function\" ? rowClassName(subRow) : rowClassName\n )}\n data-state={subRow.getIsSelected() ? \"selected\" : undefined}\n onClick={\n onRowClick ? () => { onRowClick(subRow.original); } : undefined\n }\n >\n {subRow.getVisibleCells().map((cell, colIndex) => (\n <DataTableCell\n key={cell.id}\n cancelEdit={cancelEdit}\n cell={cell}\n cellClassName={cellClassName}\n colIndex={colIndex}\n editError={editError}\n editingCell={editingCell}\n editTrigger={editTrigger}\n editValue={editValue}\n enableColumnPinning={enableColumnPinning}\n enableEditing={enableEditing}\n enableKeyboardNavigation={enableKeyboardNavigation}\n enableSearchHighlight={enableSearchHighlight}\n focusedCell={focusedCell}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n globalFilter={globalFilter}\n handleCellFocus={handleCellFocus}\n row={subRow}\n setEditInputRef={setEditInputRef}\n setEditValue={setEditValue}\n startEdit={startEdit}\n submitEdit={submitEdit}\n />\n ))}\n </TableRow>\n )\n\n return (\n <React.Fragment key={subRow.id}>\n {contextMenuItems && contextMenuItems.length > 0 ? (\n <ContextMenu>\n <ContextMenuTrigger asChild>\n {subTableRow}\n </ContextMenuTrigger>\n <ContextMenuContent className=\"w-48\">\n {contextMenuItems.map((item) => (\n <React.Fragment key={item.label}>\n {item.separator && <ContextMenuSeparator />}\n <ContextMenuItem\n className={item.variant === \"destructive\" ? \"text-destructive\" : undefined}\n onClick={() => { item.onClick(subRow.original); }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </ContextMenuItem>\n </React.Fragment>\n ))}\n </ContextMenuContent>\n </ContextMenu>\n ) : subTableRow}\n </React.Fragment>\n )\n })}\n </React.Fragment>\n )\n }\n\n // Regular row rendering\n const tableRow = (\n <TableRow\n ref={virtualRow && rowVirtualizer ? rowVirtualizer.measureElement : undefined}\n className={cn(\n dataTableRowVariants({\n state: row.getIsSelected() ? \"selected\" : \"default\",\n interactive: !!onRowClick,\n }),\n enableStriping && row.index % 2 === 1 && \"bg-muted/50\",\n typeof rowClassName === \"function\" ? rowClassName(row) : rowClassName,\n enableRowReordering && \"group/row\"\n )}\n data-index={virtualRow?.index}\n data-row-id={enableRowAnimation ? row.id : undefined}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n style={virtualRowStyle}\n onClick={\n onRowClick ? () => { onRowClick(row.original); } : undefined\n }\n {...(enableRowReordering ? dragHandleProps?.(row.index) : undefined)}\n >\n {enableRowReordering && (\n <TableCell className=\"w-8 px-1\">\n <GripVertical className=\"text-muted-foreground size-4 cursor-grab opacity-0 transition-opacity group-hover/row:opacity-100\" />\n </TableCell>\n )}\n {(() => {\n const visibleCells = row.getVisibleCells()\n const virtualColItems = columnVirtualizer?.getVirtualItems()\n const cellItems = virtualColItems\n ? virtualColItems\n .filter((virtualCol) => visibleCells[virtualCol.index] != null)\n .map((virtualCol) => ({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- filtered above\n cell: visibleCells[virtualCol.index]!,\n colIndex: virtualCol.index,\n }))\n : visibleCells.map((cell, index) => ({ cell, colIndex: index }))\n\n return cellItems.map(({ cell, colIndex }) => {\n let colSpan: number | undefined\n let rowSpan: number | undefined\n\n if (enableRowColumnSpanning) {\n const spanMeta = isSpanColumnMeta(cell.column.columnDef.meta)\n ? cell.column.columnDef.meta\n : undefined\n\n if (spanMeta) {\n colSpan = spanMeta.colSpan?.(row as Row<unknown>)\n rowSpan = spanMeta.rowSpan?.(row as Row<unknown>)\n\n // If colSpan or rowSpan is 0, this cell is covered by a previous cell's span — skip it\n if (colSpan === 0 || rowSpan === 0) return null\n }\n }\n\n return (\n <DataTableCell\n key={cell.id}\n cancelEdit={cancelEdit}\n cell={cell}\n cellClassName={cellClassName}\n colIndex={colIndex}\n colSpan={colSpan}\n editError={editError}\n editingCell={editingCell}\n editTrigger={editTrigger}\n editValue={editValue}\n enableColumnPinning={enableColumnPinning}\n enableEditing={enableEditing}\n enableKeyboardNavigation={enableKeyboardNavigation}\n enableSearchHighlight={enableSearchHighlight}\n focusedCell={focusedCell}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n globalFilter={globalFilter}\n handleCellFocus={handleCellFocus}\n row={row}\n rowSpan={rowSpan}\n setEditInputRef={setEditInputRef}\n setEditValue={setEditValue}\n startEdit={startEdit}\n submitEdit={submitEdit}\n />\n )\n })\n })()}\n </TableRow>\n )\n\n return (\n <React.Fragment key={virtualRow ? virtualRow.key : row.id}>\n {contextMenuItems && contextMenuItems.length > 0 ? (\n <ContextMenu>\n <ContextMenuTrigger asChild>\n {tableRow}\n </ContextMenuTrigger>\n <ContextMenuContent className=\"w-48\">\n {contextMenuItems.map((item) => (\n <React.Fragment key={item.label}>\n {item.separator && <ContextMenuSeparator />}\n <ContextMenuItem\n className={item.variant === \"destructive\" ? \"text-destructive\" : undefined}\n onClick={() => { item.onClick(row.original); }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </ContextMenuItem>\n </React.Fragment>\n ))}\n </ContextMenuContent>\n </ContextMenu>\n ) : tableRow}\n {/* Expanded row content */}\n {row.getIsExpanded() && renderSubComponent && (\n <TableRow>\n <TableCell colSpan={row.getVisibleCells().length}>\n {renderSubComponent({ row })}\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n )\n })\n ) : (\n <TableRow>\n <TableCell\n className=\"h-24 text-center\"\n colSpan={tableColumns.length}\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {hasFooter && (\n <TableFooter>\n {table.getFooterGroups().map((footerGroup) => (\n <TableRow key={footerGroup.id}>\n {footerGroup.headers.map((header) => (\n <TableCell key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.footer,\n header.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableFooter>\n )}\n </>\n )\n}\n\n// Note: React.memo cannot be used here because TanStack Table's `table` instance\n// is a stable reference whose internal state mutates. React.memo would skip\n// necessary re-renders after sort/filter/pagination changes.\n// To optimize, introduce a DataTableContext in a future refactor.\nconst DataTableBody = DataTableBodyInner\n\nexport { DataTableBody }\nexport type { DataTableBodyProps }\n","import type { Table } from \"@tanstack/react-table\"\nimport type { ReactNode } from \"react\"\n\nimport { Button } from \"../../primitives/Button\"\n\ninterface BulkAction<TData> {\n icon?: ReactNode\n label: string\n onClick: (rows: TData[]) => void\n variant?: \"default\" | \"destructive\" | \"ghost\" | \"outline\" | \"secondary\"\n}\n\ninterface DataTableBulkActionsProps<TData> {\n actions: BulkAction<TData>[]\n table: Table<TData>\n}\n\nfunction DataTableBulkActionsInner<TData>({\n actions,\n table,\n}: DataTableBulkActionsProps<TData>) {\n const selectedRows = table.getFilteredSelectedRowModel().flatRows\n if (selectedRows.length === 0) return null\n\n const selectedData = selectedRows.map((row) => row.original)\n\n return (\n <div\n className=\"flex items-center gap-2 rounded-lg border bg-muted/50 px-4 py-2\"\n data-slot=\"data-table-bulk-actions\"\n >\n <span className=\"text-sm font-medium\">\n {selectedRows.length} selected\n </span>\n <div className=\"ml-2 flex items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.label}\n size=\"sm\"\n variant={action.variant ?? \"outline\"}\n onClick={() => { action.onClick(selectedData); }}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n )\n}\n\nconst DataTableBulkActions = DataTableBulkActionsInner\n\nexport { DataTableBulkActions }\nexport type { DataTableBulkActionsProps }\n","import type { Table as ReactTable, Row } from \"@tanstack/react-table\"\n\nimport { flexRender } from \"@tanstack/react-table\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\n/** Utility column IDs that should be skipped in card view */\nconst UTILITY_COLUMN_IDS = new Set([\"select\", \"_row_number\"])\n\ninterface DataTableCardViewProps<TData> {\n onRowClick?: (row: TData) => void\n rowClassName?: ((row: Row<TData>) => string) | string\n table: ReactTable<TData>\n}\n\nfunction DataTableCardViewInner<TData>({\n onRowClick,\n rowClassName,\n table,\n}: DataTableCardViewProps<TData>) {\n const rows = table.getRowModel().rows\n\n if (rows.length === 0) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n data-slot=\"data-table-card-view-empty\"\n >\n <p className=\"text-muted-foreground text-sm\">No results.</p>\n </div>\n )\n }\n\n return (\n <div className=\"space-y-3\" data-slot=\"data-table-card-view\">\n {rows.map((row) => {\n const visibleCells = row.getVisibleCells().filter(\n (cell) => !UTILITY_COLUMN_IDS.has(cell.column.id)\n )\n\n return (\n <div\n key={row.id}\n className={cn(\n \"rounded-lg border p-4\",\n \"bg-[color:var(--surface-default)]\",\n onRowClick && \"cursor-pointer hover:bg-[color:var(--surface-hover)]\",\n typeof rowClassName === \"function\" ? rowClassName(row) : rowClassName\n )}\n role={onRowClick ? \"button\" : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? () => { onRowClick(row.original); } : undefined}\n onKeyDown={\n onRowClick\n ? (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onRowClick(row.original)\n }\n }\n : undefined\n }\n >\n <div className=\"space-y-2\">\n {visibleCells.map((cell) => {\n const headerDef = cell.column.columnDef.header\n const label = typeof headerDef === \"string\"\n ? headerDef\n : cell.column.id\n\n return (\n <div\n key={cell.id}\n className=\"flex items-start justify-between gap-4\"\n data-column-id={cell.column.id}\n >\n <span className=\"text-muted-foreground text-sm font-medium shrink-0\">\n {label}\n </span>\n <span className=\"text-sm text-right\">\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nconst DataTableCardView = DataTableCardViewInner\n\nexport { DataTableCardView }\nexport type { DataTableCardViewProps }\n","import type { ReactNode } from \"react\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\n\n// Static keys for skeleton loader to avoid array index as key\nconst SKELETON_KEYS = [\"skeleton-row-1\", \"skeleton-row-2\", \"skeleton-row-3\", \"skeleton-row-4\", \"skeleton-row-5\"] as const\n\ninterface DataTableEmptyStateProps {\n className?: string\n emptyState?: ReactNode\n error?: boolean\n errorState?: ReactNode\n loading?: boolean\n loadingComponent?: ReactNode\n}\n\nfunction DataTableEmptyState({\n className,\n emptyState,\n error,\n errorState,\n loading,\n loadingComponent,\n}: DataTableEmptyStateProps) {\n if (loading) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"data-table\">\n {loadingComponent ?? (\n <div className=\"space-y-2\" data-slot=\"data-table-loading\">\n {SKELETON_KEYS.map((key) => (\n <SkeletonLoader key={key} className=\"h-12 w-full\" />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"data-table\">\n {errorState ?? (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n data-slot=\"data-table-error\"\n >\n <p className=\"text-destructive text-sm\">\n An error occurred while loading data\n </p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div className={cn(\"space-y-4\", className)} data-slot=\"data-table\">\n {emptyState ?? (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n data-slot=\"data-table-empty\"\n >\n <p className=\"text-muted-foreground text-sm\">No data available</p>\n </div>\n )}\n </div>\n )\n}\n\nexport { DataTableEmptyState }\nexport type { DataTableEmptyStateProps }\n","import * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\ninterface DataTableFillHandleTargetRange {\n endCol: number\n endRow: number\n startCol: number\n startRow: number\n}\n\ninterface DataTableFillHandleParams {\n direction: \"down\" | \"right\"\n sourceCell: { col: number; row: number }\n targetRange: DataTableFillHandleTargetRange\n}\n\ninterface DataTableFillHandleProps {\n onFill: (params: DataTableFillHandleParams) => void\n position: null | { col: number; row: number }\n tableRef: React.RefObject<HTMLTableElement | null>\n}\n\nfunction getCellSelector(row: number, col: number): string {\n return \"[data-row=\\\"\" + String(row) + \"\\\"][data-col=\\\"\" + String(col) + \"\\\"]\"\n}\n\nfunction DataTableFillHandle({\n onFill,\n position,\n tableRef,\n}: DataTableFillHandleProps) {\n const isDraggingRef = React.useRef(false)\n const dragStartRef = React.useRef<null | { col: number; row: number }>(null)\n const currentTargetRef = React.useRef<null | { col: number; row: number }>(null)\n\n const getCellElement = React.useCallback(\n (row: number, col: number): HTMLElement | null => {\n if (!tableRef.current) return null\n return tableRef.current.querySelector(getCellSelector(row, col))\n },\n [tableRef],\n )\n\n const clearFillTargets = React.useCallback(() => {\n if (!tableRef.current) return\n const targeted = tableRef.current.querySelectorAll(\n \"[data-fill-target='true']\",\n )\n for (const el of targeted) {\n el.removeAttribute(\"data-fill-target\")\n }\n }, [tableRef])\n\n const markFillTargets = React.useCallback(\n (source: { col: number; row: number }, target: { col: number; row: number }) => {\n clearFillTargets()\n\n const rowDiff = target.row - source.row\n const colDiff = target.col - source.col\n\n // Determine primary drag direction based on larger axis delta\n if (Math.abs(rowDiff) >= Math.abs(colDiff)) {\n // Fill down\n const startRow = Math.min(source.row + 1, target.row)\n const endRow = Math.max(source.row + 1, target.row)\n for (let r = startRow; r <= endRow; r++) {\n const cell = getCellElement(r, source.col)\n if (cell) {\n cell.setAttribute(\"data-fill-target\", \"true\")\n }\n }\n } else {\n // Fill right\n const startCol = Math.min(source.col + 1, target.col)\n const endCol = Math.max(source.col + 1, target.col)\n for (let c = startCol; c <= endCol; c++) {\n const cell = getCellElement(source.row, c)\n if (cell) {\n cell.setAttribute(\"data-fill-target\", \"true\")\n }\n }\n }\n },\n [clearFillTargets, getCellElement],\n )\n\n const handleMouseUp = React.useCallback(() => {\n if (!isDraggingRef.current || !dragStartRef.current || !currentTargetRef.current) {\n isDraggingRef.current = false\n clearFillTargets()\n return\n }\n\n const source = dragStartRef.current\n const target = currentTargetRef.current\n const rowDiff = target.row - source.row\n const colDiff = target.col - source.col\n\n // Only fire if we actually dragged somewhere\n if (rowDiff !== 0 || colDiff !== 0) {\n if (Math.abs(rowDiff) >= Math.abs(colDiff)) {\n const startRow = Math.min(source.row + 1, target.row)\n const endRow = Math.max(source.row + 1, target.row)\n onFill({\n direction: \"down\",\n sourceCell: { col: source.col, row: source.row },\n targetRange: {\n endCol: source.col,\n endRow,\n startCol: source.col,\n startRow,\n },\n })\n } else {\n const startCol = Math.min(source.col + 1, target.col)\n const endCol = Math.max(source.col + 1, target.col)\n onFill({\n direction: \"right\",\n sourceCell: { col: source.col, row: source.row },\n targetRange: {\n endCol,\n endRow: source.row,\n startCol,\n startRow: source.row,\n },\n })\n }\n }\n\n isDraggingRef.current = false\n dragStartRef.current = null\n currentTargetRef.current = null\n clearFillTargets()\n }, [clearFillTargets, onFill])\n\n const handleMouseMove = React.useCallback(\n (e: MouseEvent) => {\n if (!isDraggingRef.current || !dragStartRef.current || !tableRef.current) return\n\n const target = document.elementFromPoint(e.clientX, e.clientY)\n if (!target) return\n\n const cell = target.closest<HTMLElement>(\"[data-row][data-col]\")\n if (!cell) return\n\n const row = Number(cell.dataset[\"row\"])\n const col = Number(cell.dataset[\"col\"])\n\n if (Number.isNaN(row) || Number.isNaN(col)) return\n\n currentTargetRef.current = { col, row }\n markFillTargets(dragStartRef.current, { col, row })\n },\n [markFillTargets, tableRef],\n )\n\n const handleMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n if (!position) return\n e.preventDefault()\n e.stopPropagation()\n\n isDraggingRef.current = true\n dragStartRef.current = { col: position.col, row: position.row }\n currentTargetRef.current = { col: position.col, row: position.row }\n },\n [position],\n )\n\n // Attach/detach global mouse listeners for drag tracking\n React.useEffect(() => {\n document.addEventListener(\"mousemove\", handleMouseMove)\n document.addEventListener(\"mouseup\", handleMouseUp)\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove)\n document.removeEventListener(\"mouseup\", handleMouseUp)\n }\n }, [handleMouseMove, handleMouseUp])\n\n // Position the handle at the bottom-right corner of the active cell\n const [handleStyle, setHandleStyle] = React.useState<React.CSSProperties>({})\n /* eslint-disable react-you-might-not-need-an-effect/no-pass-ref-to-parent, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, react-you-might-not-need-an-effect/no-derived-state, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- DOM measurement requires ref in effect */\n React.useEffect(() => {\n if (!position) {\n setHandleStyle({})\n return\n }\n\n const table = tableRef.current\n if (!table) {\n setHandleStyle({})\n return\n }\n\n const cell = table.querySelector(\n getCellSelector(position.row, position.col),\n )\n if (!cell) {\n setHandleStyle({})\n return\n }\n\n const tableRect = table.getBoundingClientRect()\n const cellRect = cell.getBoundingClientRect()\n\n setHandleStyle({\n left: cellRect.right - tableRect.left - 3,\n top: cellRect.bottom - tableRect.top - 3,\n })\n }, [position, tableRef])\n /* eslint-enable react-you-might-not-need-an-effect/no-pass-ref-to-parent, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, react-you-might-not-need-an-effect/no-derived-state, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n if (!position) return null\n\n return (\n <div\n className={cn(\n \"absolute z-10 size-1.5 cursor-crosshair rounded-sm bg-primary\",\n )}\n data-slot=\"data-table-fill-handle\"\n role=\"presentation\"\n style={handleStyle}\n onMouseDown={handleMouseDown}\n />\n )\n}\n\nexport { DataTableFillHandle }\nexport type { DataTableFillHandleParams, DataTableFillHandleProps }\n","import type { Table } from \"@tanstack/react-table\"\n\nimport { X } from \"lucide-react\"\n\nimport { Badge } from \"../../primitives/Badge\"\nimport { Button } from \"../../primitives/Button\"\n\ninterface DataTableFilterChipsProps<TData> {\n table: Table<TData>\n}\n\nfunction DataTableFilterChipsInner<TData>({\n table,\n}: DataTableFilterChipsProps<TData>) {\n const columnFilters = table.getState().columnFilters\n const globalFilter = table.getState().globalFilter as string | undefined\n\n const hasFilters = columnFilters.length > 0 || (globalFilter && globalFilter.length > 0)\n if (!hasFilters) return null\n\n return (\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-slot=\"data-table-filter-chips\"\n >\n {globalFilter && globalFilter.length > 0 && (\n <Badge className=\"gap-1 pr-1\" color=\"muted\" type=\"pill-color\">\n Search: {globalFilter}\n <button\n aria-label=\"Clear search filter\"\n className=\"ml-1 rounded-full p-0.5 hover:bg-muted\"\n type=\"button\"\n onClick={() => { table.setGlobalFilter(\"\"); }}\n >\n <X className=\"size-3\" />\n </button>\n </Badge>\n )}\n {columnFilters.map((filter) => {\n const column = table.getColumn(filter.id)\n const headerLabel = column && typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : filter.id\n\n return (\n <Badge key={filter.id} className=\"gap-1 pr-1\" color=\"muted\" type=\"pill-color\">\n {headerLabel}: {String(filter.value)}\n <button\n aria-label={`Clear ${headerLabel} filter`}\n className=\"ml-1 rounded-full p-0.5 hover:bg-muted\"\n type=\"button\"\n onClick={() => { column?.setFilterValue(undefined); }}\n >\n <X className=\"size-3\" />\n </button>\n </Badge>\n )\n })}\n {(columnFilters.length + (globalFilter ? 1 : 0)) >= 2 && (\n <Button\n className=\"h-6 px-2 text-xs\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n table.resetColumnFilters()\n table.setGlobalFilter(\"\")\n }}\n >\n Clear all\n </Button>\n )}\n </div>\n )\n}\n\nconst DataTableFilterChips = DataTableFilterChipsInner\n\nexport { DataTableFilterChips }\nexport type { DataTableFilterChipsProps }\n","import { ChevronDown, ChevronUp, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Button } from \"../../primitives/Button\"\n\n/** Props for the DataTableFindBar component. */\ninterface DataTableFindBarProps {\n /** Callback to close the find bar. */\n onClose: () => void\n /** Whether the find bar is open. */\n open: boolean\n /** Ref to the table element used for searching text content. */\n tableRef: React.RefObject<HTMLTableElement | null>\n}\n\n/** A single match found in the table. */\ninterface FindMatch {\n /** The cell element containing the match. */\n cell: HTMLTableCellElement\n /** The row index of the match. */\n rowIndex: number\n}\n\nconst FIND_MATCH_ATTR = \"data-find-match\"\nconst FIND_CURRENT_ATTR = \"data-find-current\"\n\n/**\n * Collects visible text content from a table cell element.\n */\nfunction getCellTextContent(cell: HTMLTableCellElement): string {\n const text = cell.textContent\n if (typeof text === \"string\") {\n return text.toLowerCase()\n }\n return \"\"\n}\n\n/**\n * Search table cells and return matching cells with their row indices.\n */\nfunction findMatchesInTable(\n tableEl: HTMLTableElement,\n normalizedQuery: string\n): FindMatch[] {\n const result: FindMatch[] = []\n const rows = tableEl.querySelectorAll(\"tbody tr\")\n\n rows.forEach((row, rowIndex) => {\n const cells = row.querySelectorAll(\"td\")\n cells.forEach((cell) => {\n if (cell instanceof HTMLTableCellElement) {\n const text = getCellTextContent(cell)\n if (text.includes(normalizedQuery)) {\n result.push({ cell, rowIndex })\n }\n }\n })\n })\n\n return result\n}\n\n/**\n * \"Find in table\" bar that allows searching through visible table cell content.\n * Highlights matching cells and supports prev/next navigation.\n */\nfunction DataTableFindBar({ onClose, open, tableRef }: DataTableFindBarProps) {\n const [currentIndex, setCurrentIndex] = React.useState(0)\n const [matches, setMatches] = React.useState<FindMatch[]>([])\n const [query, setQuery] = React.useState(\"\")\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n // Reset state when bar closes and focus when it opens\n /* eslint-disable react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- intentional state reset on prop change */\n React.useEffect(() => {\n if (!open) {\n // Reset when closing\n setQuery(\"\")\n setCurrentIndex(0)\n setMatches([])\n return\n }\n const timer = setTimeout(() => {\n inputRef.current?.focus()\n }, 0)\n return () => {\n clearTimeout(timer)\n }\n }, [open])\n /* eslint-enable react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n // Search for matches when query changes (in an effect so we can access the ref)\n /* eslint-disable react-you-might-not-need-an-effect/no-event-handler, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, react-you-might-not-need-an-effect/no-chain-state-updates, react-you-might-not-need-an-effect/no-derived-state, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect -- DOM search requires ref access in effect */\n React.useEffect(() => {\n const table = tableRef.current\n if (!table || !query.trim()) {\n setMatches([])\n return\n }\n\n const normalizedQuery = query.trim().toLowerCase()\n const found = findMatchesInTable(table, normalizedQuery)\n setMatches(found)\n }, [query, tableRef])\n /* eslint-enable react-you-might-not-need-an-effect/no-event-handler, react-you-might-not-need-an-effect/no-adjust-state-on-prop-change, react-you-might-not-need-an-effect/no-chain-state-updates, react-you-might-not-need-an-effect/no-derived-state, @eslint-react/hooks-extra/no-direct-set-state-in-use-effect */\n\n // Keep currentIndex in bounds when matches change\n const safeIndex = matches.length > 0\n ? Math.min(currentIndex, matches.length - 1)\n : 0\n\n // Apply data attributes to matching cells and scroll current match into view\n /* eslint-disable react-you-might-not-need-an-effect/no-pass-ref-to-parent, react-you-might-not-need-an-effect/no-event-handler -- DOM attribute manipulation requires ref in effect */\n React.useEffect(() => {\n const table = tableRef.current\n if (!table) return\n\n // Clear all existing attributes\n const previousMatches = table.querySelectorAll(`[${FIND_MATCH_ATTR}]`)\n previousMatches.forEach((el) => {\n el.removeAttribute(FIND_MATCH_ATTR)\n el.removeAttribute(FIND_CURRENT_ATTR)\n })\n\n // Apply attributes to current matches\n matches.forEach((match, index) => {\n match.cell.setAttribute(FIND_MATCH_ATTR, \"true\")\n if (index === safeIndex) {\n match.cell.setAttribute(FIND_CURRENT_ATTR, \"true\")\n }\n })\n\n // Scroll current match into view\n const currentMatch = matches[safeIndex]\n if (currentMatch) {\n currentMatch.cell.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"nearest\" })\n }\n }, [matches, safeIndex, tableRef])\n /* eslint-enable react-you-might-not-need-an-effect/no-pass-ref-to-parent, react-you-might-not-need-an-effect/no-event-handler */\n\n // Clean up attributes when bar closes\n /* eslint-disable react-you-might-not-need-an-effect/no-pass-ref-to-parent -- cleanup requires ref in effect */\n React.useEffect(() => {\n if (open) return\n\n const table = tableRef.current\n if (!table) return\n\n const marked = table.querySelectorAll(`[${FIND_MATCH_ATTR}]`)\n marked.forEach((el) => {\n el.removeAttribute(FIND_MATCH_ATTR)\n el.removeAttribute(FIND_CURRENT_ATTR)\n })\n }, [open, tableRef])\n /* eslint-enable react-you-might-not-need-an-effect/no-pass-ref-to-parent */\n\n const handlePrev = React.useCallback(() => {\n if (matches.length === 0) return\n setCurrentIndex((prev) =>\n prev <= 0 ? matches.length - 1 : prev - 1\n )\n }, [matches.length])\n\n const handleNext = React.useCallback(() => {\n if (matches.length === 0) return\n setCurrentIndex((prev) =>\n prev >= matches.length - 1 ? 0 : prev + 1\n )\n }, [matches.length])\n\n const handleClose = React.useCallback(() => {\n setQuery(\"\")\n setCurrentIndex(0)\n setMatches([])\n onClose()\n }, [onClose])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault()\n handleClose()\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n if (e.shiftKey) {\n handlePrev()\n } else {\n handleNext()\n }\n }\n },\n [handleClose, handleNext, handlePrev]\n )\n\n if (!open) {\n return null\n }\n\n const displayIndex = matches.length > 0 ? safeIndex + 1 : 0\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 border-b px-4 py-2\",\n \"bg-background text-foreground\"\n )}\n data-slot=\"data-table-find-bar\"\n >\n <input\n ref={inputRef}\n className={cn(\n \"h-8 flex-1 rounded-md border bg-transparent px-3 text-sm\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n )}\n aria-label=\"Find in table\"\n placeholder=\"Find in table...\"\n type=\"text\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value)\n setCurrentIndex(0)\n }}\n onKeyDown={handleKeyDown}\n />\n <span className=\"min-w-16 text-center text-xs text-muted-foreground\">\n {query.trim()\n ? `${String(displayIndex)} of ${String(matches.length)}`\n : \"\"}\n </span>\n <Button\n aria-label=\"Previous match\"\n disabled={matches.length === 0}\n icon={<ChevronUp className=\"size-4\" />}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={handlePrev}\n />\n <Button\n aria-label=\"Next match\"\n disabled={matches.length === 0}\n icon={<ChevronDown className=\"size-4\" />}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={handleNext}\n />\n <Button\n aria-label=\"Close find bar\"\n icon={<X className=\"size-4\" />}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={handleClose}\n />\n </div>\n )\n}\n\nexport { DataTableFindBar }\nexport type { DataTableFindBarProps }\n","import type { Column, Table } from \"@tanstack/react-table\"\n\nimport {\n ArrowDown,\n ArrowUp,\n ArrowUpDown,\n EyeOff,\n GripHorizontal,\n Group,\n MoreVertical,\n PinIcon,\n PinOff,\n RotateCcw,\n Ruler,\n} from \"lucide-react\"\nimport * as React from \"react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../navigation/DropdownMenu\"\nimport { Button } from \"../../primitives/Button\"\n\ninterface DataTableColumnMenuProps<TData> {\n column: Column<TData>\n enableColumnFilters: boolean\n enableColumnPinning: boolean\n enableColumnResizing: boolean\n enableColumnVisibility: boolean\n enableGrouping: boolean\n enableSorting: boolean\n table: Table<TData>\n}\n\n/**\n * Auto-size a column by measuring the max content width of all visible cells.\n */\nfunction autoSizeColumn<TData>(table: Table<TData>, columnId: string, containerEl?: Element | null) {\n const tableEl = containerEl?.querySelector(\"table\") ?? document.querySelector(`[data-slot=\"data-table\"] table`)\n if (!tableEl) return\n\n const cells = tableEl.querySelectorAll(\n `[data-column-id=\"${columnId}\"]`\n )\n\n let maxWidth = 0\n cells.forEach((cell) => {\n maxWidth = Math.max(maxWidth, cell.scrollWidth + 2)\n })\n\n // Also measure the header\n const headers = tableEl.querySelectorAll(\"th\")\n headers.forEach((th) => {\n // Match by column index or content\n const headerContent = th.textContent.trim()\n const colDef = table.getColumn(columnId)?.columnDef\n if (colDef && typeof colDef.header === \"string\" && colDef.header === headerContent) {\n maxWidth = Math.max(maxWidth, th.scrollWidth + 2)\n }\n })\n\n if (maxWidth > 0) {\n const min = table.getColumn(columnId)?.columnDef.minSize ?? 20\n const max = table.getColumn(columnId)?.columnDef.maxSize ?? 1000\n const clampedWidth = Math.min(Math.max(maxWidth, min), max)\n table.setColumnSizing((prev) => ({\n ...prev,\n [columnId]: clampedWidth,\n }))\n }\n}\n\nfunction DataTableColumnMenuInner<TData>({\n column,\n enableColumnFilters,\n enableColumnPinning,\n enableColumnResizing,\n enableColumnVisibility,\n enableGrouping,\n enableSorting,\n table,\n}: DataTableColumnMenuProps<TData>) {\n const canSort = enableSorting && column.getCanSort()\n const sorted = column.getIsSorted()\n const isPinned = column.getIsPinned()\n const canHide = enableColumnVisibility && column.getCanHide()\n const canFilter = enableColumnFilters && column.getCanFilter()\n const canResize = enableColumnResizing && column.getCanResize()\n const canGroup = enableGrouping && column.getCanGroup()\n const isGrouped = column.getIsGrouped()\n\n // Don't render menu if no actions are available\n const hasAnyAction = canSort || enableColumnPinning || canResize || canHide || canFilter || canGroup\n if (!hasAnyAction) return null\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={`Column menu for ${column.id}`}\n className=\"size-6 opacity-0 transition-opacity group-hover/header:opacity-100 data-[state=open]:opacity-100\"\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={(e) => { e.stopPropagation(); }}\n >\n <MoreVertical className=\"size-3.5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-48\">\n {/* Sort Actions */}\n {canSort && (\n <>\n <DropdownMenuLabel>Sort</DropdownMenuLabel>\n <DropdownMenuItem\n onClick={() => { column.toggleSorting(false); }}\n >\n <ArrowUp className=\"mr-2 size-4\" />\n Sort ascending\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => { column.toggleSorting(true); }}\n >\n <ArrowDown className=\"mr-2 size-4\" />\n Sort descending\n </DropdownMenuItem>\n {sorted && (\n <DropdownMenuItem\n onClick={() => { column.clearSorting(); }}\n >\n <ArrowUpDown className=\"mr-2 size-4\" />\n Clear sort\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n </>\n )}\n\n {/* Pin Actions */}\n {enableColumnPinning && (\n <>\n <DropdownMenuLabel>Pin</DropdownMenuLabel>\n {isPinned !== \"left\" && (\n <DropdownMenuItem\n onClick={() => { column.pin(\"left\"); }}\n >\n <PinIcon className=\"mr-2 size-4\" />\n Pin to left\n </DropdownMenuItem>\n )}\n {isPinned !== \"right\" && (\n <DropdownMenuItem\n onClick={() => { column.pin(\"right\"); }}\n >\n <PinIcon className=\"mr-2 size-4 rotate-90\" />\n Pin to right\n </DropdownMenuItem>\n )}\n {isPinned && (\n <DropdownMenuItem\n onClick={() => { column.pin(false); }}\n >\n <PinOff className=\"mr-2 size-4\" />\n Unpin\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n </>\n )}\n\n {/* Resize Actions */}\n {canResize && (\n <>\n <DropdownMenuLabel>Size</DropdownMenuLabel>\n <DropdownMenuItem\n onClick={() => { autoSizeColumn(table, column.id); }}\n >\n <Ruler className=\"mr-2 size-4\" />\n Auto-size column\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => { column.resetSize(); }}\n >\n <RotateCcw className=\"mr-2 size-4\" />\n Reset column size\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n\n {/* Filter Action */}\n {canFilter && (\n <>\n <DropdownMenuItem\n onClick={() => {\n // Focus the filter input for this column\n const filterInput = document.querySelector<HTMLInputElement>(\n `input[aria-label=\"Filter ${typeof column.columnDef.header === \"string\" ? column.columnDef.header : column.id}\"]`\n )\n filterInput?.focus()\n }}\n >\n <GripHorizontal className=\"mr-2 size-4\" />\n Filter this column\n </DropdownMenuItem>\n </>\n )}\n\n {/* Group Action */}\n {canGroup && (\n <>\n <DropdownMenuItem\n onClick={() => { column.getToggleGroupingHandler()(); }}\n >\n <Group className=\"mr-2 size-4\" />\n {isGrouped ? \"Remove grouping\" : \"Group by this column\"}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n\n {/* Hide Action */}\n {canHide && (\n <DropdownMenuItem\n onClick={() => { column.toggleVisibility(false); }}\n >\n <EyeOff className=\"mr-2 size-4\" />\n Hide column\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nconst DataTableColumnMenu = DataTableColumnMenuInner\n\nexport { autoSizeColumn, DataTableColumnMenu }\nexport type { DataTableColumnMenuProps }\n","import type { DataTableColumnMeta } from \"./DataTable.types\"\nimport type { DragEndEvent, DraggableAttributes } from \"@dnd-kit/core\"\nimport type { SyntheticListenerMap } from \"@dnd-kit/core/dist/hooks/utilities\"\nimport type { Column, Header, Table } from \"@tanstack/react-table\"\nimport type { Virtualizer } from \"@tanstack/react-virtual\"\nimport type { ReactNode } from \"react\"\n\nimport {\n closestCenter,\n DndContext,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\"\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { flexRender } from \"@tanstack/react-table\"\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronsUpDown, Group } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../feedback/Popover\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport { TableHead, TableHeader, TableRow } from \"../Table\"\nimport { dataTableHeaderVariants, dataTableResizeHandleVariants } from \"./DataTable.variants\"\nimport { DataTableColumnMenu } from \"./DataTableColumnMenu\"\n\n// ---------------------------------------------------------------------------\n// Faceted Filter (T2.8) - dropdown with unique value checkboxes + counts\n// ---------------------------------------------------------------------------\n\ninterface FacetedFilterProps<TData> {\n column: Column<TData>\n}\n\nfunction FacetedFilter<TData>({ column }: FacetedFilterProps<TData>) {\n const facetedValues = column.getFacetedUniqueValues()\n const filterValue = (column.getFilterValue() as string[] | undefined) ?? []\n const [open, setOpen] = React.useState(false)\n\n const sortedEntries = React.useMemo(() => {\n return [...facetedValues.entries()].sort((a, b) =>\n String(a[0]).localeCompare(String(b[0]))\n )\n }, [facetedValues])\n\n const handleToggle = (value: string) => {\n const next = filterValue.includes(value)\n ? filterValue.filter((v) => v !== value)\n : [...filterValue, value]\n column.setFilterValue(next.length > 0 ? next : undefined)\n }\n\n const columnLabel = typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n className={cn(\n \"flex h-7 w-full items-center justify-between rounded-md border px-2 text-xs\",\n \"border-[color:var(--border-default)] bg-transparent\",\n \"hover:bg-[color:var(--surface-hover)]\",\n filterValue.length > 0 && \"text-foreground\"\n )}\n aria-label={`Filter ${columnLabel}`}\n type=\"button\"\n >\n <span className=\"truncate\">\n {filterValue.length > 0\n ? `${String(filterValue.length)} selected`\n : \"All\"}\n </span>\n <ChevronsUpDown className=\"ml-1 size-3 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-52 p-2\">\n <div className=\"max-h-48 overflow-y-auto\">\n {sortedEntries.map(([value, count]) => {\n const stringValue = String(value)\n const isChecked = filterValue.includes(stringValue)\n return (\n <label\n key={stringValue}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs hover:bg-[color:var(--surface-hover)]\"\n >\n <Checkbox\n checked={isChecked}\n size=\"sm\"\n onCheckedChange={() => { handleToggle(stringValue); }}\n />\n <span className=\"flex-1 truncate\">{stringValue}</span>\n <span className=\"text-muted-foreground tabular-nums\">\n {count}\n </span>\n </label>\n )\n })}\n </div>\n {filterValue.length > 0 && (\n <button\n className=\"mt-1 w-full rounded px-2 py-1 text-center text-xs text-muted-foreground hover:bg-[color:var(--surface-hover)]\"\n type=\"button\"\n onClick={() => { column.setFilterValue(undefined); }}\n >\n Clear\n </button>\n )}\n </PopoverContent>\n </Popover>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Range Filter (T2.9) - min/max number inputs\n// ---------------------------------------------------------------------------\n\ninterface RangeFilterProps<TData> {\n column: Column<TData>\n}\n\nfunction RangeFilter<TData>({ column }: RangeFilterProps<TData>) {\n const filterValue = (column.getFilterValue() as [number?, number?] | undefined) ?? [undefined, undefined]\n\n const columnLabel = typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id\n\n return (\n <div className=\"flex items-center gap-1\">\n <TextInput\n aria-label={`${columnLabel} min`}\n className=\"h-7 text-xs\"\n placeholder=\"Min\"\n type=\"number\"\n value={filterValue[0] != null ? String(filterValue[0]) : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n column.setFilterValue((prev: [number?, number?] | undefined) => [\n val ? Number(val) : undefined,\n prev?.[1],\n ])\n }}\n />\n <TextInput\n aria-label={`${columnLabel} max`}\n className=\"h-7 text-xs\"\n placeholder=\"Max\"\n type=\"number\"\n value={filterValue[1] != null ? String(filterValue[1]) : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n column.setFilterValue((prev: [number?, number?] | undefined) => [\n prev?.[0],\n val ? Number(val) : undefined,\n ])\n }}\n />\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Select Filter (T2.9) - dropdown select from meta.filterOptions\n// ---------------------------------------------------------------------------\n\ninterface SelectFilterProps<TData> {\n column: Column<TData>\n}\n\nfunction SelectFilter<TData>({ column }: SelectFilterProps<TData>) {\n const meta = column.columnDef.meta as DataTableColumnMeta | undefined\n const options = meta?.filterOptions ?? []\n const filterValue = (column.getFilterValue() as string | undefined) ?? \"\"\n\n const columnLabel = typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id\n\n return (\n <select\n className={cn(\n \"h-7 w-full rounded-md border px-2 text-xs\",\n \"border-[color:var(--border-default)] bg-transparent\",\n \"focus:outline-none focus:ring-1 focus:ring-[color:var(--ring)]\"\n )}\n aria-label={`Filter ${columnLabel}`}\n value={filterValue}\n onChange={(e) => {\n column.setFilterValue(e.target.value || undefined)\n }}\n >\n <option value=\"\">All</option>\n {options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Default Column Filter - dispatches to the right filter type\n// ---------------------------------------------------------------------------\n\ninterface DefaultColumnFilterProps<TData> {\n column: Column<TData>\n table: Table<TData>\n}\n\nfunction DefaultColumnFilter<TData>({ column }: DefaultColumnFilterProps<TData>) {\n const meta = column.columnDef.meta as DataTableColumnMeta | undefined\n const variant = meta?.filterVariant ?? \"text\"\n\n const columnLabel = typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id\n\n switch (variant) {\n case \"faceted\":\n return <FacetedFilter column={column} />\n case \"range\":\n return <RangeFilter column={column} />\n case \"select\":\n return <SelectFilter column={column} />\n case \"text\":\n default:\n return (\n <TextInput\n aria-label={`Filter ${columnLabel}`}\n className=\"h-7 text-xs\"\n placeholder=\"Filter...\"\n value={(column.getFilterValue() as string | undefined) ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n column.setFilterValue(e.target.value || undefined)\n }}\n />\n )\n }\n}\n\n// ---------------------------------------------------------------------------\n// DataTableHeader\n// ---------------------------------------------------------------------------\n\ninterface DataTableHeaderProps<TData> {\n columnVirtualizer?: Virtualizer<HTMLDivElement, Element>\n enableColumnFilters: boolean\n enableColumnMenu: boolean\n enableColumnOrdering: boolean\n enableColumnPinning: boolean\n enableColumnResizing: boolean\n enableColumnVisibility: boolean\n enableGrouping: boolean\n enableSorting: boolean\n enableStickyHeader: boolean\n getPinnedAttribute: (column: Column<TData>) => string | undefined\n getPinnedStyles: (column: Column<TData>) => React.CSSProperties\n renderColumnFilter?: (props: { column: Column<TData>; table: Table<TData> }) => ReactNode\n table: Table<TData>\n}\n\nfunction DataTableHeaderInner<TData>({\n columnVirtualizer,\n enableColumnFilters,\n enableColumnMenu,\n enableColumnOrdering,\n enableColumnPinning,\n enableColumnResizing,\n enableColumnVisibility,\n enableGrouping,\n enableSorting,\n enableStickyHeader,\n getPinnedAttribute,\n getPinnedStyles,\n renderColumnFilter,\n table,\n}: DataTableHeaderProps<TData>) {\n const sortedColumnCount = table.getState().sorting.length\n const hasFilterableColumns = enableColumnFilters && table.getAllLeafColumns().some((col) => col.getCanFilter())\n\n // DnD sensors with activation constraint to avoid interfering with click events (e.g. sorting)\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n })\n )\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const currentOrder = table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : table.getAllLeafColumns().map((col) => col.id)\n\n const oldIndex = currentOrder.indexOf(String(active.id))\n const newIndex = currentOrder.indexOf(String(over.id))\n if (oldIndex === -1 || newIndex === -1) return\n\n const newOrder = arrayMove(currentOrder, oldIndex, newIndex)\n table.setColumnOrder(newOrder)\n },\n [table]\n )\n\n // Get column IDs for SortableContext\n const columnIds = React.useMemo(() => {\n return table.getAllLeafColumns().map((col) => col.id)\n }, [table])\n\n const headerContent = table.getHeaderGroups().map((headerGroup) => {\n const virtualColItems = columnVirtualizer?.getVirtualItems()\n const headersToRender = virtualColItems\n ? virtualColItems\n .filter((virtualCol) => headerGroup.headers[virtualCol.index] != null)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- filtered above\n .map((virtualCol) => headerGroup.headers[virtualCol.index]!)\n : headerGroup.headers\n\n return (\n <TableRow key={headerGroup.id}>\n {headersToRender.map((header) => (\n enableColumnOrdering ? (\n <SortableHeaderCell\n key={header.id}\n enableColumnFilters={enableColumnFilters}\n enableColumnMenu={enableColumnMenu}\n enableColumnPinning={enableColumnPinning}\n enableColumnResizing={enableColumnResizing}\n enableColumnVisibility={enableColumnVisibility}\n enableGrouping={enableGrouping}\n enableSorting={enableSorting}\n enableStickyHeader={enableStickyHeader}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n header={header}\n showSortPriority={sortedColumnCount >= 2}\n table={table}\n />\n ) : (\n <DataTableHeaderCell\n key={header.id}\n enableColumnFilters={enableColumnFilters}\n enableColumnMenu={enableColumnMenu}\n enableColumnPinning={enableColumnPinning}\n enableColumnResizing={enableColumnResizing}\n enableColumnVisibility={enableColumnVisibility}\n enableGrouping={enableGrouping}\n enableSorting={enableSorting}\n enableStickyHeader={enableStickyHeader}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n header={header}\n showSortPriority={sortedColumnCount >= 2}\n table={table}\n />\n )\n ))}\n </TableRow>\n )\n })\n\n return (\n <TableHeader>\n {enableColumnOrdering ? (\n <DndContext\n collisionDetection={closestCenter}\n sensors={sensors}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={columnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerContent}\n </SortableContext>\n </DndContext>\n ) : (\n headerContent\n )}\n {hasFilterableColumns && (\n <TableRow>\n {(() => {\n const allLeafColumns = table.getAllLeafColumns()\n const virtualColItems = columnVirtualizer?.getVirtualItems()\n const columnsToRender = virtualColItems\n ? virtualColItems\n .filter((virtualCol) => allLeafColumns[virtualCol.index] != null)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- filtered above\n .map((virtualCol) => allLeafColumns[virtualCol.index]!)\n : allLeafColumns\n\n return columnsToRender.map((column) => (\n <TableHead key={column.id} className=\"px-2 py-1.5\">\n {column.getCanFilter() ? (\n renderColumnFilter ? (\n renderColumnFilter({ column, table })\n ) : (\n <DefaultColumnFilter column={column} table={table} />\n )\n ) : null}\n </TableHead>\n ))\n })()}\n </TableRow>\n )}\n </TableHeader>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SortableHeaderCell - T2.1: wraps header cell with DnD reordering\n// ---------------------------------------------------------------------------\n\nfunction SortableHeaderCell<TData>(props: DataTableHeaderCellProps<TData>) {\n const { header } = props\n const {\n attributes,\n isDragging,\n listeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id: header.column.id,\n })\n\n const style: React.CSSProperties = {\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n position: \"relative\",\n zIndex: isDragging ? 2 : undefined,\n cursor: \"grab\",\n }\n\n return (\n <DataTableHeaderCell\n {...props}\n dragAttributes={attributes}\n dragListeners={listeners}\n dragStyle={style}\n setDragNodeRef={setNodeRef}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DataTableHeaderCell - T2.2: supports colSpan for multi-level headers\n// ---------------------------------------------------------------------------\n\ninterface DataTableHeaderCellProps<TData> {\n dragAttributes?: DraggableAttributes\n dragListeners?: SyntheticListenerMap\n dragStyle?: React.CSSProperties\n enableColumnFilters: boolean\n enableColumnMenu: boolean\n enableColumnPinning: boolean\n enableColumnResizing: boolean\n enableColumnVisibility: boolean\n enableGrouping: boolean\n enableSorting: boolean\n enableStickyHeader: boolean\n getPinnedAttribute: (column: Column<TData>) => string | undefined\n getPinnedStyles: (column: Column<TData>) => React.CSSProperties\n header: Header<TData, unknown>\n setDragNodeRef?: (node: HTMLElement | null) => void\n showSortPriority: boolean\n table: Table<TData>\n}\n\nfunction DataTableHeaderCell<TData>({\n dragAttributes,\n dragListeners,\n dragStyle,\n enableColumnFilters,\n enableColumnMenu,\n enableColumnPinning,\n enableColumnResizing,\n enableColumnVisibility,\n enableGrouping,\n enableSorting,\n enableStickyHeader,\n getPinnedAttribute,\n getPinnedStyles,\n header,\n setDragNodeRef,\n showSortPriority,\n table,\n}: DataTableHeaderCellProps<TData>) {\n const canSort = header.column.getCanSort()\n const sorted = header.column.getIsSorted()\n const sortIndex = header.column.getSortIndex()\n\n return (\n <TableHead\n ref={setDragNodeRef}\n aria-sort={\n sorted\n ? sorted === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n className={cn(\n \"group/header\",\n dataTableHeaderVariants({\n sortable: canSort,\n sorted: sorted ? sorted : \"none\",\n }),\n enableStickyHeader && \"sticky top-0 z-10 bg-[color:var(--surface-default)]\",\n enableColumnResizing && \"relative\",\n enableColumnPinning && header.column.getIsPinned() && \"sticky\",\n dragListeners && \"cursor-grab\"\n )}\n style={{\n width: enableColumnResizing ? header.getSize() : undefined,\n ...getPinnedStyles(header.column),\n ...dragStyle,\n }}\n colSpan={header.colSpan > 1 ? header.colSpan : undefined}\n data-pinned={getPinnedAttribute(header.column)}\n onClick={\n canSort\n ? header.column.getToggleSortingHandler()\n : undefined\n }\n {...dragAttributes}\n {...dragListeners}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 items-center gap-2\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {canSort && (\n <span className=\"relative text-muted-foreground\">\n {sorted === \"asc\" ? (\n <ArrowUp className=\"size-4\" />\n ) : sorted === \"desc\" ? (\n <ArrowDown className=\"size-4\" />\n ) : (\n <ArrowUpDown className=\"size-4\" />\n )}\n {showSortPriority && sorted && sortIndex >= 0 && (\n <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)]\">\n {sortIndex + 1}\n </span>\n )}\n </span>\n )}\n </div>\n {enableGrouping && !header.isPlaceholder && header.column.getCanGroup() && (\n <button\n aria-label={\n header.column.getIsGrouped()\n ? `Remove grouping by ${header.column.id}`\n : `Group by ${header.column.id}`\n }\n className={cn(\n \"size-5 shrink-0 rounded p-0.5 transition-colors\",\n header.column.getIsGrouped()\n ? \"text-[color:var(--primary)] hover:text-[color:var(--primary)]/80\"\n : \"text-muted-foreground opacity-0 hover:text-foreground group-hover/header:opacity-100\"\n )}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n header.column.getToggleGroupingHandler()()\n }}\n >\n <Group className=\"size-3.5\" />\n </button>\n )}\n {enableColumnMenu && !header.isPlaceholder && (\n <DataTableColumnMenu\n column={header.column}\n enableColumnFilters={enableColumnFilters}\n enableColumnPinning={enableColumnPinning}\n enableColumnResizing={enableColumnResizing}\n enableColumnVisibility={enableColumnVisibility}\n enableGrouping={enableGrouping}\n enableSorting={enableSorting}\n table={table}\n />\n )}\n </div>\n {enableColumnResizing && !header.isPlaceholder && (\n <div\n className={dataTableResizeHandleVariants({\n isResizing: header.column.getIsResizing(),\n })}\n aria-label={`Resize ${header.column.id} column`}\n aria-orientation=\"vertical\"\n aria-valuemax={header.column.columnDef.maxSize ?? 1000}\n aria-valuemin={header.column.columnDef.minSize ?? 20}\n aria-valuenow={header.column.getSize()}\n role=\"separator\"\n tabIndex={0}\n onDoubleClick={() => { header.column.resetSize(); }}\n onKeyDown={(e) => {\n const step = e.shiftKey ? 20 : 4\n const columnId = header.column.id\n const currentSize = header.column.getSize()\n if (e.key === \"ArrowRight\") {\n e.preventDefault()\n const max = header.column.columnDef.maxSize ?? 1000\n table.setColumnSizing((prev) => ({\n ...prev,\n [columnId]: Math.min(currentSize + step, max),\n }))\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault()\n const min = header.column.columnDef.minSize ?? 20\n table.setColumnSizing((prev) => ({\n ...prev,\n [columnId]: Math.max(currentSize - step, min),\n }))\n }\n }}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )}\n </TableHead>\n )\n}\n\n// Note: React.memo cannot be used here because TanStack Table's `table` instance\n// is a stable reference whose internal state mutates. React.memo would skip\n// necessary re-renders after sort/filter/pagination changes.\n// To optimize, introduce a DataTableContext in a future refactor.\nconst DataTableHeader = DataTableHeaderInner\n\nexport { DataTableHeader }\nexport type { DataTableHeaderProps }\n","import type { PaginationState, Table } from \"@tanstack/react-table\"\n\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../forms/Select/Select\"\nimport { Button } from \"../../primitives/Button\"\n\ninterface DataTablePaginationProps<TData> {\n enableRowSelection: boolean\n onPaginationChange?: (pagination: PaginationState) => void\n pageSizeOptions: number[]\n pagination: PaginationState\n setInternalPagination: (pagination: PaginationState) => void\n table: Table<TData>\n}\n\nfunction DataTablePaginationInner<TData>({\n enableRowSelection,\n onPaginationChange,\n pageSizeOptions,\n pagination,\n setInternalPagination,\n table,\n}: DataTablePaginationProps<TData>) {\n return (\n <div\n 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\"\n data-slot=\"data-table-pagination\"\n >\n {/* Selection info */}\n <div className=\"flex-1 text-[color:var(--datatable-pagination-info-color)] text-[length:var(--datatable-pagination-info-size)]\">\n {enableRowSelection && table.getFilteredSelectedRowModel().rows.length > 0 ? (\n <>\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </>\n ) : (\n <span className=\"hidden sm:inline\"> </span>\n )}\n </div>\n\n {/* Controls Container */}\n <div className=\"flex flex-wrap items-center justify-between sm:justify-end gap-x-6 gap-y-4 lg:gap-8\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-[color:var(--datatable-pagination-info-color)] text-[length:var(--datatable-pagination-info-size)] font-medium\">\n Rows per page\n </p>\n <Select\n value={String(pagination.pageSize)}\n onValueChange={(value) => {\n const newSize = Number(value)\n if (onPaginationChange) {\n onPaginationChange({\n pageIndex: 0,\n pageSize: newSize,\n })\n } else {\n setInternalPagination({\n pageIndex: 0,\n pageSize: newSize,\n })\n }\n }}\n >\n <SelectTrigger aria-label=\"Rows per page\" className=\"h-8 w-20 bg-background\">\n <SelectValue placeholder={String(pagination.pageSize)} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {pageSizeOptions.map((size) => (\n <SelectItem key={size} value={String(size)}>\n {size}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-4 lg:gap-8\">\n <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\">\n Page {pagination.pageIndex + 1} of {table.getPageCount() || 1}\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n aria-label=\"Go to first page\"\n className=\"hidden sm:flex\"\n disabled={!table.getCanPreviousPage()}\n size=\"icon-sm\"\n variant=\"outline\"\n onClick={() => { table.setPageIndex(0); }}\n >\n <ChevronsLeft className=\"size-4\" />\n </Button>\n <Button\n aria-label=\"Go to previous page\"\n disabled={!table.getCanPreviousPage()}\n size=\"icon-sm\"\n variant=\"outline\"\n onClick={() => { table.previousPage(); }}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button\n aria-label=\"Go to next page\"\n disabled={!table.getCanNextPage()}\n size=\"icon-sm\"\n variant=\"outline\"\n onClick={() => { table.nextPage(); }}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n <Button\n aria-label=\"Go to last page\"\n className=\"hidden sm:flex\"\n disabled={!table.getCanNextPage()}\n size=\"icon-sm\"\n variant=\"outline\"\n onClick={() => { table.setPageIndex(table.getPageCount() - 1); }}\n >\n <ChevronsRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nconst DataTablePagination = DataTablePaginationInner\n\nexport { DataTablePagination }\nexport type { DataTablePaginationProps }\n","import { PanelRight, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Button } from \"../../primitives/Button\"\n\n/**\n * Props for the DataTableSidePanel component\n */\ninterface DataTableSidePanelProps {\n /** Content to render inside the panel */\n children?: React.ReactNode\n /** Callback when the panel is closed */\n onClose: () => void\n /** Whether the panel is open */\n open: boolean\n /** Whether to show a backdrop overlay behind the panel */\n overlay?: boolean\n /** Panel title displayed in the header */\n title?: string\n /** Width of the panel (number in px or CSS string) */\n width?: number | string\n}\n\n/**\n * Props for the DataTableSidePanelTrigger component\n */\ninterface DataTableSidePanelTriggerProps {\n /** Callback when the trigger button is clicked */\n onClick: () => void\n /** Whether the panel is currently open */\n open?: boolean\n}\n\n/**\n * A trigger button for opening the DataTable side panel.\n * Renders a toolbar-compatible icon button with the PanelRight icon.\n */\nfunction DataTableSidePanelTrigger({\n onClick,\n open,\n}: DataTableSidePanelTriggerProps) {\n return (\n <Button\n aria-expanded={open}\n aria-label={open ? \"Close side panel\" : \"Open side panel\"}\n icon={<PanelRight className=\"size-4\" />}\n size=\"sm\"\n variant={open ? \"secondary\" : \"outline\"}\n onClick={onClick}\n />\n )\n}\n\n/**\n * A collapsible side panel that slides in from the right side of the DataTable.\n * Used for organizing table tools such as column visibility, filters, and export options.\n *\n * Features:\n * - Smooth slide-in/out CSS transition\n * - Close button in the header\n * - Escape key to dismiss\n * - Optional backdrop overlay\n * - Custom width support\n * - Custom content via children\n */\nfunction DataTableSidePanelInner({\n children,\n onClose,\n open,\n overlay = false,\n title = \"Tools\",\n width = 320,\n}: DataTableSidePanelProps) {\n const panelRef = React.useRef<HTMLDivElement>(null)\n\n const resolvedWidth = typeof width === \"number\" ? `${String(width)}px` : width\n\n // Handle Escape key to close the panel\n React.useEffect(() => {\n if (!open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n e.preventDefault()\n onClose()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [open, onClose])\n\n // Focus trap: focus the panel when it opens\n React.useEffect(() => {\n if (!open) return\n if (!panelRef.current) return\n\n const timer = setTimeout(() => {\n panelRef.current?.focus()\n }, 0)\n return () => {\n clearTimeout(timer)\n }\n }, [open])\n\n return (\n <>\n {/* Backdrop overlay */}\n {overlay && (\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 transition-opacity duration-300\",\n open ? \"opacity-100\" : \"pointer-events-none opacity-0\"\n )}\n aria-hidden=\"true\"\n data-slot=\"data-table-side-panel-overlay\"\n onClick={onClose}\n />\n )}\n\n {/* Side panel */}\n <div\n ref={panelRef}\n className={cn(\n \"absolute inset-y-0 right-0 z-50 flex flex-col\",\n \"border-l bg-background shadow-lg\",\n \"transition-transform duration-300 ease-in-out\",\n open ? \"translate-x-0\" : \"translate-x-full\"\n )}\n aria-label={title}\n data-slot=\"data-table-side-panel\"\n data-state={open ? \"open\" : \"closed\"}\n role=\"complementary\"\n style={{ width: resolvedWidth }}\n tabIndex={-1}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b px-4 py-3\"\n data-slot=\"data-table-side-panel-header\"\n >\n <h3 className=\"text-sm font-semibold\">{title}</h3>\n <Button\n aria-label=\"Close panel\"\n icon={<X className=\"size-4\" />}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={onClose}\n />\n </div>\n\n {/* Content */}\n <div\n className=\"flex-1 overflow-y-auto p-4\"\n data-slot=\"data-table-side-panel-content\"\n >\n {children}\n </div>\n </div>\n </>\n )\n}\n\nconst DataTableSidePanel = DataTableSidePanelInner\n\nexport { DataTableSidePanel, DataTableSidePanelTrigger }\nexport type { DataTableSidePanelProps, DataTableSidePanelTriggerProps }\n","import type { Table } from \"@tanstack/react-table\"\nimport type { ReactNode } from \"react\"\n\ninterface DataTableStatusBarProps<TData> {\n enableRowSelection: boolean\n items?: {\n id: string\n label: string\n value: (table: Table<TData>) => ReactNode\n }[]\n table: Table<TData>\n}\n\nfunction DataTableStatusBarInner<TData>({\n enableRowSelection,\n items,\n table,\n}: DataTableStatusBarProps<TData>) {\n const totalRows = table.getCoreRowModel().rows.length\n const filteredRows = table.getFilteredRowModel().rows.length\n const selectedRows = enableRowSelection\n ? table.getFilteredSelectedRowModel().rows.length\n : 0\n const isFiltered = filteredRows < totalRows\n\n return (\n <div\n className=\"flex items-center gap-4 border-t px-4 py-2 text-xs text-muted-foreground\"\n data-slot=\"data-table-status-bar\"\n >\n <span>\n {isFiltered\n ? `${String(filteredRows)} of ${String(totalRows)} rows`\n : `${String(totalRows)} rows`}\n </span>\n {enableRowSelection && selectedRows > 0 && (\n <span>{selectedRows} selected</span>\n )}\n {items?.map((item) => (\n <span key={item.id}>\n {item.label}: {item.value(table)}\n </span>\n ))}\n </div>\n )\n}\n\nconst DataTableStatusBar = DataTableStatusBarInner\n\nexport { DataTableStatusBar }\nexport type { DataTableStatusBarProps }\n","import type { ExportFormat } from \"./DataTable.types\"\nimport type { FilterBuilderColumn, FilterGroup } from \"./FilterBuilder\"\nimport type { FilterPreset } from \"./FilterBuilder/FilterBuilder.types\"\nimport type { Column } from \"@tanstack/react-table\"\n\nimport { AlignJustify, Columns3, Download, FileSpreadsheet, FileText, GripHorizontal, Printer, Search, StretchHorizontal } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { TextInput } from \"../../forms/TextInput\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../navigation/DropdownMenu/DropdownMenu\"\nimport { Button } from \"../../primitives/Button\"\nimport { FilterBuilder } from \"./FilterBuilder\"\n\ninterface DataTableToolbarProps {\n // Advanced filter props\n advancedFilterColumns: FilterBuilderColumn[]\n columns?: Column<unknown>[]\n currentAdvancedFilter: FilterGroup\n debouncedFilterUpdate: (value: string) => void\n density?: \"comfortable\" | \"compact\" | \"default\"\n enableAdvancedFilter: boolean\n enableColumnVisibility: boolean\n enableDensityToggle: boolean\n enableExport: boolean\n enableFiltering: boolean\n enablePrint: boolean\n enableSearch: boolean\n\n exportFormats: ExportFormat[]\n filterPresets?: FilterPreset[]\n onAdvancedFilterChange: (filter: FilterGroup) => void\n onDeleteFilterPreset?: (presetId: string) => void\n onDensityChange?: (density: \"comfortable\" | \"compact\" | \"default\") => void\n onExport: (format: ExportFormat) => Promise<void> | void\n onPrint?: () => void\n onSaveFilterPreset?: (preset: FilterPreset) => void\n searchDisplayValue: string\n searchPlaceholder: string\n setSearchDisplayValue: (value: string) => void\n}\n\nfunction DataTableToolbar({\n advancedFilterColumns,\n columns,\n currentAdvancedFilter,\n debouncedFilterUpdate,\n density = \"default\",\n enableAdvancedFilter,\n enableColumnVisibility,\n enableDensityToggle,\n enableExport,\n enableFiltering,\n enablePrint,\n enableSearch,\n exportFormats,\n filterPresets,\n onAdvancedFilterChange,\n onDeleteFilterPreset,\n onDensityChange,\n onExport,\n onPrint,\n onSaveFilterPreset,\n searchDisplayValue,\n searchPlaceholder,\n setSearchDisplayValue,\n}: DataTableToolbarProps) {\n const hideableColumns = enableColumnVisibility && columns\n ? columns.filter((col) => col.getCanHide())\n : []\n\n return (\n <>\n {/* Search/Filter Bar */}\n {(enableFiltering && enableSearch) || enableExport || enableColumnVisibility || enableDensityToggle || enablePrint ? (\n <div\n className=\"flex items-center justify-between gap-[var(--datatable-toolbar-gap)]\"\n data-slot=\"data-table-toolbar\"\n >\n {enableFiltering && enableSearch ? (\n <div className=\"relative max-w-sm flex-1\">\n <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\" />\n <TextInput\n aria-label=\"Search table\"\n className=\"pl-[var(--datatable-toolbar-search-input-padding-left)]\"\n placeholder={searchPlaceholder}\n value={searchDisplayValue}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setSearchDisplayValue(value)\n debouncedFilterUpdate(value)\n }}\n />\n </div>\n ) : (\n <div className=\"flex-1\" />\n )}\n <div className=\"flex items-center gap-2\">\n {enableColumnVisibility && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label=\"Toggle columns\"\n size=\"sm\"\n variant=\"outline\"\n >\n <Columns3 className=\"mr-2 size-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {hideableColumns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => {\n column.toggleVisibility(value)\n }}\n >\n {typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {enableDensityToggle && onDensityChange && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label=\"Change density\"\n size=\"sm\"\n variant=\"outline\"\n >\n {density === \"compact\" ? (\n <GripHorizontal className=\"mr-2 size-4\" />\n ) : density === \"comfortable\" ? (\n <StretchHorizontal className=\"mr-2 size-4\" />\n ) : (\n <AlignJustify className=\"mr-2 size-4\" />\n )}\n Density\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Row density</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuRadioGroup\n value={density}\n onValueChange={(value) => {\n onDensityChange(value as \"comfortable\" | \"compact\" | \"default\")\n }}\n >\n <DropdownMenuRadioItem value=\"compact\">\n <GripHorizontal className=\"mr-2 size-4\" />\n Compact\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"default\">\n <AlignJustify className=\"mr-2 size-4\" />\n Default\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"comfortable\">\n <StretchHorizontal className=\"mr-2 size-4\" />\n Comfortable\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {enableExport && exportFormats.length === 1 && (\n <Button\n aria-label=\"Export\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n const format = exportFormats[0]\n if (format) void onExport(format)\n }}\n >\n <Download className=\"mr-2 size-4\" />\n Export\n </Button>\n )}\n {enableExport && exportFormats.length > 1 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label=\"Export\"\n size=\"sm\"\n variant=\"outline\"\n >\n <Download className=\"mr-2 size-4\" />\n Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Export as</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {exportFormats.map((format) => (\n <DropdownMenuItem\n key={format}\n onClick={() => { void onExport(format); }}\n >\n {format === \"csv\" ? (\n <FileText className=\"mr-2 size-4\" />\n ) : (\n <FileSpreadsheet className=\"mr-2 size-4\" />\n )}\n {format === \"csv\" ? \"CSV (.csv)\" : \"Excel (.xlsx)\"}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {enablePrint && onPrint && (\n <Button\n aria-label=\"Print\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onPrint}\n >\n <Printer className=\"mr-2 size-4\" />\n Print\n </Button>\n )}\n </div>\n </div>\n ) : null}\n\n {/* Advanced Filter Builder */}\n {enableAdvancedFilter && advancedFilterColumns.length > 0 && (\n <FilterBuilder\n columns={advancedFilterColumns}\n filter={currentAdvancedFilter}\n presets={filterPresets}\n onDeletePreset={onDeleteFilterPreset}\n onFilterChange={onAdvancedFilterChange}\n onSavePreset={onSaveFilterPreset}\n />\n )}\n </>\n )\n}\n\nexport { DataTableToolbar }\nexport type { DataTableToolbarProps }\n","import type { EditableColumnMeta } from \"./DataTable.types\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\n\nimport { Check, Plus, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"../../primitives/Button\"\n\ninterface DataTableTrailingRowProps<TData> {\n columns: ColumnDef<TData>[]\n onAdd: (values: Record<string, unknown>) => void\n}\n\n/** Render the appropriate input for a column's edit type. */\nfunction renderCellInput(\n accessorKey: string,\n editType: string,\n editOptions: string[],\n cellValue: unknown,\n onChangeValue: (key: string, value: unknown) => void,\n): React.ReactNode {\n if (editType === \"select\") {\n return (\n <select\n aria-label={`New ${accessorKey}`}\n 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\"\n value={typeof cellValue === \"string\" ? cellValue : \"\"}\n onChange={(e) => { onChangeValue(accessorKey, e.target.value); }}\n >\n <option value=\"\">—</option>\n {editOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n )\n }\n\n if (editType === \"checkbox\") {\n return (\n <input\n aria-label={`New ${accessorKey}`}\n checked={Boolean(cellValue)}\n className=\"size-4 rounded border border-input\"\n type=\"checkbox\"\n onChange={(e) => { onChangeValue(accessorKey, e.target.checked); }}\n />\n )\n }\n\n return (\n <input\n value={\n editType === \"number\"\n ? (cellValue as number | undefined) ?? \"\"\n : typeof cellValue === \"string\" ? cellValue : \"\"\n }\n aria-label={`New ${accessorKey}`}\n 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\"\n type={editType === \"number\" ? \"number\" : editType === \"date\" ? \"date\" : \"text\"}\n onChange={(e) => {\n onChangeValue(\n accessorKey,\n editType === \"number\" ? e.target.valueAsNumber : e.target.value,\n )\n }}\n />\n )\n}\n\nfunction DataTableTrailingRowInner<TData>({\n columns,\n onAdd,\n}: DataTableTrailingRowProps<TData>) {\n const [editing, setEditing] = React.useState(false)\n const [values, setValues] = React.useState<Record<string, unknown>>({})\n\n const handleCancel = React.useCallback(() => {\n setEditing(false)\n setValues({})\n }, [])\n\n const handleSave = React.useCallback(() => {\n onAdd(values)\n setEditing(false)\n setValues({})\n }, [onAdd, values])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault()\n handleCancel()\n }\n },\n [handleCancel]\n )\n\n const handleChangeValue = React.useCallback(\n (key: string, value: unknown) => {\n setValues((prev) => ({ ...prev, [key]: value }))\n },\n []\n )\n\n if (!editing) {\n return (\n <tr>\n <td colSpan={columns.length}>\n <button\n 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\"\n type=\"button\"\n onClick={() => { setEditing(true); }}\n >\n <Plus className=\"size-4\" />\n Add row\n </button>\n </td>\n </tr>\n )\n }\n\n return (\n <tr onKeyDown={handleKeyDown}>\n {columns.map((col) => {\n const accessorKey =\n \"accessorKey\" in col ? String(col.accessorKey) : col.id ?? \"\"\n const meta = col.meta as EditableColumnMeta | undefined\n const editable = meta?.editable ?? false\n const editType = meta?.editType ?? \"text\"\n const editOptions = meta?.editOptions ?? []\n\n if (!editable || !accessorKey) {\n return <td key={accessorKey || col.id} />\n }\n\n return (\n <td key={accessorKey} className=\"px-2 py-1\">\n {renderCellInput(accessorKey, editType, editOptions, values[accessorKey], handleChangeValue)}\n </td>\n )\n })}\n <td className=\"px-2 py-1\">\n <div className=\"flex items-center gap-1\">\n <Button\n aria-label=\"Save new row\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={handleSave}\n >\n <Check className=\"size-4\" />\n </Button>\n <Button\n aria-label=\"Cancel new row\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={handleCancel}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n </td>\n </tr>\n )\n}\n\nconst DataTableTrailingRow = DataTableTrailingRowInner\n\nexport { DataTableTrailingRow }\nexport type { DataTableTrailingRowProps }\n","import type { ExportOptions } from \"./DataTable.types\"\nimport type { Table } from \"@tanstack/react-table\"\n\n/**\n * Escape a value for CSV format.\n * Handles commas, quotes, newlines, and prevents CSV formula injection\n * by prefixing dangerous characters with a single quote.\n */\nfunction escapeCSV(value: string): string {\n let sanitized = value\n // Prevent CSV formula injection: neutralize values starting with =, +, -, @, \\t, \\r\n if (/^[=+\\-@\\t\\r]/.test(sanitized)) {\n sanitized = \"'\" + sanitized\n }\n if (sanitized.includes(\",\") || sanitized.includes('\"') || sanitized.includes(\"\\n\")) {\n return `\"${sanitized.replaceAll('\"', '\"\"')}\"`\n }\n return sanitized\n}\n\n/**\n * Convert table data to CSV string\n * @param table - TanStack Table instance\n * @param options - Export options\n * @returns CSV string\n */\nexport function tableToCSV<TData>(\n table: Table<TData>,\n options: ExportOptions = {}\n): string {\n const {\n includeHeaders = true,\n onlyVisibleColumns = true,\n onlyFilteredRows = false,\n } = options\n\n // Get columns (filter out internal columns: selection and row numbers)\n const columns = onlyVisibleColumns\n ? table.getVisibleLeafColumns()\n : table.getAllLeafColumns()\n const exportColumns = columns.filter((col) => col.id !== \"select\" && col.id !== \"_row_number\")\n\n // Get rows\n const rows = onlyFilteredRows\n ? table.getFilteredRowModel().rows\n : table.getCoreRowModel().rows\n\n // Build CSV\n const lines: string[] = []\n\n if (includeHeaders) {\n const headerLine = exportColumns\n .map((col) => {\n const header = col.columnDef.header\n return typeof header === \"string\" ? escapeCSV(header) : escapeCSV(col.id)\n })\n .join(\",\")\n lines.push(headerLine)\n }\n\n rows.forEach((row) => {\n const rowLine = exportColumns\n .map((col) => escapeCSV(String(row.getValue(col.id) ?? \"\")))\n .join(\",\")\n lines.push(rowLine)\n })\n\n return lines.join(\"\\n\")\n}\n\n/**\n * Download a string as a file\n * @param content - File content\n * @param filename - Filename with extension\n * @param mimeType - MIME type for the file\n */\nexport function downloadFile(\n content: string,\n filename: string,\n mimeType: string\n): void {\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement(\"a\")\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n\n/**\n * Export table data to CSV and trigger download\n * @param table - TanStack Table instance\n * @param filename - Filename without extension\n * @param options - Export options\n */\nexport function exportToCSV<TData>(\n table: Table<TData>,\n filename = \"export\",\n options: ExportOptions = {}\n): void {\n const csv = tableToCSV(table, options)\n downloadFile(csv, `${filename}.csv`, \"text/csv;charset=utf-8;\")\n}\n\n/**\n * Export table data to PDF and trigger download.\n * The jspdf and jspdf-autotable libraries are dynamically imported to avoid adding them to the main bundle.\n * @param table - TanStack Table instance\n * @param filename - Filename without extension\n * @param options - Export options\n */\nexport async function exportToPDF<TData>(\n table: Table<TData>,\n filename = \"export\",\n options: ExportOptions = {}\n): Promise<void> {\n const {\n includeHeaders = true,\n onlyVisibleColumns = true,\n onlyFilteredRows = false,\n } = options\n\n try {\n const { default: jsPDF } = await import(\"jspdf\")\n await import(\"jspdf-autotable\")\n\n // Get columns (filter out internal columns: selection and row numbers)\n const columns = onlyVisibleColumns\n ? table.getVisibleLeafColumns()\n : table.getAllLeafColumns()\n const exportColumns = columns.filter((col) => col.id !== \"select\" && col.id !== \"_row_number\")\n\n // Get rows\n const rows = onlyFilteredRows\n ? table.getFilteredRowModel().rows\n : table.getCoreRowModel().rows\n\n // Build headers\n const headers = exportColumns.map((col) => {\n const header = col.columnDef.header\n return typeof header === \"string\" ? header : col.id\n })\n\n // Build row data\n const body = rows.map((row) =>\n exportColumns.map((col) => String(row.getValue(col.id) ?? \"\"))\n )\n\n // Create PDF in landscape orientation\n const doc = new jsPDF({ orientation: \"landscape\" })\n\n // Use autoTable to render the data\n const docWithAutoTable = doc as unknown as { autoTable: (options: { body: string[][]; head?: string[][] }) => void }\n docWithAutoTable.autoTable({\n head: includeHeaders ? [headers] : undefined,\n body,\n })\n\n doc.save(`${filename}.pdf`)\n } catch (error) {\n console.error(\"Failed to load jspdf libraries for PDF export:\", error)\n throw error\n }\n}\n\n/**\n * Export table data to Excel (.xlsx) and trigger download.\n * The xlsx library is dynamically imported to avoid adding it to the main bundle.\n * @param table - TanStack Table instance\n * @param filename - Filename without extension\n * @param options - Export options\n */\nexport async function exportToExcel<TData>(\n table: Table<TData>,\n filename = \"export\",\n options: ExportOptions = {}\n): Promise<void> {\n const {\n includeHeaders = true,\n onlyVisibleColumns = true,\n onlyFilteredRows = false,\n } = options\n\n try {\n const XLSX = await import(\"xlsx\")\n\n // Get columns (filter out internal columns: selection and row numbers)\n const columns = onlyVisibleColumns\n ? table.getVisibleLeafColumns()\n : table.getAllLeafColumns()\n const exportColumns = columns.filter((col) => col.id !== \"select\" && col.id !== \"_row_number\")\n\n // Get rows\n const rows = onlyFilteredRows\n ? table.getFilteredRowModel().rows\n : table.getCoreRowModel().rows\n\n // Build data as array of objects keyed by header\n const headers = exportColumns.map((col) => {\n const header = col.columnDef.header\n return typeof header === \"string\" ? header : col.id\n })\n\n const data = rows.map((row) => {\n const rowData: Record<string, unknown> = {}\n exportColumns.forEach((col, index) => {\n const key = headers[index] ?? col.id\n rowData[key] = row.getValue(col.id)\n })\n return rowData\n })\n\n const ws = XLSX.utils.json_to_sheet(data, {\n header: includeHeaders ? headers : undefined,\n skipHeader: !includeHeaders,\n })\n const wb = XLSX.utils.book_new()\n XLSX.utils.book_append_sheet(wb, ws, \"Data\")\n\n XLSX.writeFile(wb, `${filename}.xlsx`)\n } catch (error) {\n console.error(\"Failed to load xlsx library for Excel export:\", error)\n throw error\n }\n}\n","import type { FilterCondition, FilterGroup } from \"./FilterBuilder/FilterBuilder.types\"\nimport type { ColumnFiltersState } from \"@tanstack/react-table\"\n\nimport { isFilterCondition, isFilterGroup } from \"./FilterBuilder/FilterBuilder.types\"\n\n/**\n * Evaluate a single filter condition against a cell value.\n */\nfunction toStr(val: unknown): string {\n if (val == null) return \"\"\n if (typeof val === \"string\") return val\n if (typeof val === \"number\" || typeof val === \"boolean\") return val.toString()\n return JSON.stringify(val)\n}\n\nfunction evaluateCondition(condition: FilterCondition, cellValue: unknown): boolean {\n const value = toStr(cellValue).toLowerCase()\n const filterValue = toStr(condition.value).toLowerCase()\n\n switch (condition.operator) {\n case \"contains\":\n return value.includes(filterValue)\n case \"notContains\":\n return !value.includes(filterValue)\n case \"equals\":\n return value === filterValue\n case \"notEquals\":\n return value !== filterValue\n case \"startsWith\":\n return value.startsWith(filterValue)\n case \"endsWith\":\n return value.endsWith(filterValue)\n case \"isEmpty\":\n return value === \"\"\n case \"isNotEmpty\":\n return value !== \"\"\n case \"gt\":\n return Number(cellValue) > Number(condition.value)\n case \"gte\":\n return Number(cellValue) >= Number(condition.value)\n case \"lt\":\n return Number(cellValue) < Number(condition.value)\n case \"lte\":\n return Number(cellValue) <= Number(condition.value)\n case \"between\":\n return Number(cellValue) >= Number(condition.value) && Number(cellValue) <= Number(condition.value2)\n case \"before\":\n return new Date(String(cellValue)) < new Date(String(condition.value))\n case \"after\":\n return new Date(String(cellValue)) > new Date(String(condition.value))\n case \"dateBetween\":\n return new Date(String(cellValue)) >= new Date(String(condition.value)) && new Date(String(cellValue)) <= new Date(String(condition.value2))\n case \"in\":\n return filterValue.split(\",\").map((v) => v.trim()).includes(value)\n case \"notIn\":\n return !filterValue.split(\",\").map((v) => v.trim()).includes(value)\n default:\n return true\n }\n}\n\n/**\n * Evaluate a FilterGroup against a row's data.\n * Returns true if the row matches the filter group.\n */\nfunction evaluateFilterGroup(group: FilterGroup, getColumnValue: (columnId: string) => unknown): boolean {\n if (group.conditions.length === 0) return true\n\n const results = group.conditions.map((item) => {\n if (isFilterGroup(item)) {\n return evaluateFilterGroup(item, getColumnValue)\n }\n if (isFilterCondition(item)) {\n if (!item.column) return true\n const cellValue = getColumnValue(item.column)\n return evaluateCondition(item, cellValue)\n }\n return true\n })\n\n return group.logic === \"AND\"\n ? results.every(Boolean)\n : results.some(Boolean)\n}\n\n/**\n * Convert a FilterGroup into TanStack Table ColumnFiltersState.\n * For simple AND conditions at the root level, each condition maps directly.\n * For OR logic or nested groups, returns null to signal that the caller\n * should use evaluateFilterGroup as a global filter function instead.\n */\nfunction filterGroupToColumnFilters(group: FilterGroup): ColumnFiltersState | null {\n if (group.conditions.length === 0) return []\n\n // OR logic or nested groups cannot be represented as simple column filters\n if (group.logic !== \"AND\") return null\n if (group.conditions.some(isFilterGroup)) return null\n\n const filters: ColumnFiltersState = []\n for (const item of group.conditions) {\n if (isFilterCondition(item) && item.column && item.value !== \"\") {\n filters.push({ id: item.column, value: item.value })\n }\n }\n return filters\n}\n\nexport { evaluateFilterGroup, filterGroupToColumnFilters }\n","import type { FocusedCell, KeyboardShortcuts } from \"./DataTable.types\"\nimport type {\n Column,\n Table as ReactTable,\n Row,\n} from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\nimport { isEditableColumnMeta } from \"./DataTable.types\"\n\ninterface UseDataTableKeyboardOptions<TData> {\n enableEditing: boolean\n enableKeyboardNavigation: boolean\n enableRowSelection: boolean\n keyboardShortcuts: KeyboardShortcuts\n onCellFocus?: (rowIndex: number, columnId: string) => void\n startEdit: (rowId: string, columnId: string, currentValue: unknown, column: Column<TData>) => void\n table: ReactTable<TData>\n tableRef: React.RefObject<HTMLTableElement | null>\n}\n\ninterface UseDataTableKeyboardReturn {\n focusedCell: FocusedCell | null\n handleCellFocus: (rowIndex: number, colIndex: number) => void\n handleKeyDown: (event: React.KeyboardEvent<HTMLTableElement>) => void\n}\n\nfunction useDataTableKeyboard<TData>({\n enableEditing,\n enableKeyboardNavigation,\n enableRowSelection,\n keyboardShortcuts,\n onCellFocus,\n startEdit,\n table,\n tableRef,\n}: UseDataTableKeyboardOptions<TData>): UseDataTableKeyboardReturn {\n const [focusedCell, setFocusedCell] = React.useState<FocusedCell | null>(\n enableKeyboardNavigation ? { row: 0, col: 0 } : null\n )\n\n // Compute new cell position based on key\n const computeNewPosition = React.useCallback(\n (\n key: string,\n ctrlKey: boolean,\n currentRow: number,\n currentCol: number,\n totalRows: number,\n totalCols: number\n ): { col: number; handled: boolean; row: number } => {\n const handlers: Record<string, () => { col: number; handled: boolean; row: number }> = {\n ArrowDown: () => ({\n row: currentRow < totalRows - 1 ? currentRow + 1 : currentRow,\n col: currentCol,\n handled: currentRow < totalRows - 1,\n }),\n ArrowLeft: () => ({\n row: currentRow,\n col: currentCol > 0 ? currentCol - 1 : currentCol,\n handled: currentCol > 0,\n }),\n ArrowRight: () => ({\n row: currentRow,\n col: currentCol < totalCols - 1 ? currentCol + 1 : currentCol,\n handled: currentCol < totalCols - 1,\n }),\n ArrowUp: () => ({\n row: currentRow > 0 ? currentRow - 1 : currentRow,\n col: currentCol,\n handled: currentRow > 0,\n }),\n End: () => ({\n row: ctrlKey ? totalRows - 1 : currentRow,\n col: totalCols - 1,\n handled: true,\n }),\n Home: () => ({\n row: ctrlKey ? 0 : currentRow,\n col: 0,\n handled: true,\n }),\n PageDown: () => ({\n row: Math.min(currentRow + 10, totalRows - 1),\n col: currentCol,\n handled: true,\n }),\n PageUp: () => ({\n row: Math.max(currentRow - 10, 0),\n col: currentCol,\n handled: true,\n }),\n }\n\n const handler = handlers[key]\n return handler ? handler() : { row: currentRow, col: currentCol, handled: false }\n },\n []\n )\n\n // Try to enter edit mode on the focused cell via keyboard\n const tryKeyboardEdit = React.useCallback(\n (rows: Row<TData>[], visibleColumns: Column<TData>[]): boolean => {\n if (!enableEditing || !focusedCell) return false\n const row = rows[focusedCell.row]\n const column = visibleColumns[focusedCell.col]\n if (!row || !column) return false\n const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : undefined\n if (!meta?.editable) return false\n startEdit(row.id, column.id, row.getValue(column.id), column)\n return true\n },\n [enableEditing, focusedCell, startEdit]\n )\n\n // Move focus to a new cell and notify\n const moveFocus = React.useCallback(\n (newRow: number, newCol: number, visibleColumns: Column<TData>[]) => {\n if (!focusedCell || (newRow === focusedCell.row && newCol === focusedCell.col)) return\n setFocusedCell({ row: newRow, col: newCol })\n const cellSelector = `[data-row=\"${String(newRow)}\"][data-col=\"${String(newCol)}\"]`\n const cell = tableRef.current?.querySelector(cellSelector) as HTMLElement | null\n cell?.focus()\n if (onCellFocus) {\n const column = visibleColumns[newCol]\n if (column) onCellFocus(newRow, column.id)\n }\n },\n [focusedCell, onCellFocus, tableRef]\n )\n\n // Keyboard navigation handler\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLTableElement>) => {\n if (!enableKeyboardNavigation || !focusedCell) return\n\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns()\n\n if ((event.key === \"Enter\" || event.key === \"F2\") && tryKeyboardEdit(rows, visibleColumns)) {\n event.preventDefault()\n return\n }\n\n const selectKey = keyboardShortcuts.select ?? \" \"\n if (event.key === selectKey && enableRowSelection) {\n const row = rows[focusedCell.row]\n if (row) {\n event.preventDefault()\n row.toggleSelected()\n }\n return\n }\n\n const { row: newRow, col: newCol, handled } = computeNewPosition(\n event.key,\n event.ctrlKey || event.metaKey,\n focusedCell.row,\n focusedCell.col,\n rows.length,\n visibleColumns.length\n )\n\n if (handled) {\n event.preventDefault()\n moveFocus(newRow, newCol, visibleColumns)\n }\n },\n [enableKeyboardNavigation, focusedCell, table, enableRowSelection, tryKeyboardEdit, moveFocus, computeNewPosition, keyboardShortcuts]\n )\n\n // Handle cell focus\n const handleCellFocus = React.useCallback(\n (rowIndex: number, colIndex: number) => {\n if (!enableKeyboardNavigation) return\n setFocusedCell({ row: rowIndex, col: colIndex })\n },\n [enableKeyboardNavigation]\n )\n\n return {\n focusedCell,\n handleCellFocus,\n handleKeyDown,\n }\n}\n\nexport { useDataTableKeyboard }\nexport type { UseDataTableKeyboardOptions, UseDataTableKeyboardReturn }\n","import type { CellEditParams, DataTableProps, ExportFormat, ExportOptions, FocusedCell } from \"./DataTable.types\"\nimport type { FilterGroup } from \"./FilterBuilder\"\nimport type {\n Column,\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n Table as ReactTable,\n Row,\n RowPinningState,\n RowSelectionState,\n SortingState,\n VisibilityState,\n} from \"@tanstack/react-table\"\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { useVirtualizer } from \"@tanstack/react-virtual\"\nimport * as React from \"react\"\n\nimport { exportToCSV, exportToExcel, exportToPDF } from \"./DataTable.export\"\nimport { isEditableColumnMeta } from \"./DataTable.types\"\nimport { evaluateFilterGroup } from \"./filterGroupToColumnFilters\"\nimport { useDataTableKeyboard } from \"./useDataTableKeyboard\"\n\nconst DEBOUNCE_MS = 150\n\ninterface PersistedState {\n columnFilters?: ColumnFiltersState\n columnOrder?: ColumnOrderState\n columnPinning?: ColumnPinningState\n columnSizing?: ColumnSizingState\n columnVisibility?: VisibilityState\n pagination?: { pageSize: number }\n sorting?: SortingState\n v: number\n}\n\nfunction loadPersistedState(key?: string, storage?: Storage): null | PersistedState {\n if (!key) return null\n const store = storage ?? (typeof window !== \"undefined\" ? window.localStorage : null)\n if (!store) return null\n try {\n const raw = store.getItem(`datatable-${key}`)\n if (!raw) return null\n const parsed = JSON.parse(raw) as PersistedState\n if (parsed.v !== 1) return null\n return parsed\n } catch {\n return null\n }\n}\n\nfunction useDebouncedCallback(callback: (value: string) => void, delay: number) {\n const timerRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n return React.useCallback(\n (value: string) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => { callback(value); }, delay)\n },\n [callback, delay]\n )\n}\n\ninterface UseDataTableReturn<TData> {\n cancelEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => void\n columnVirtualizer?: ReturnType<typeof useVirtualizer<HTMLDivElement, Element>>\n currentAdvancedFilter: FilterGroup\n debouncedFilterUpdate: (value: string) => void\n editError: null | string\n editingCell: null | { columnId: string; rowId: string }\n editValue: unknown\n focusedCell: FocusedCell | null\n getPinnedAttribute: (column: Column<TData>) => string | undefined\n getPinnedStyles: (column: Column<TData>) => React.CSSProperties\n handleAdvancedFilterChange: (filter: FilterGroup) => void\n handleCellFocus: (rowIndex: number, colIndex: number) => void\n handleCopy: (event: React.ClipboardEvent) => void\n handleExport: (format?: ExportFormat) => Promise<void>\n handleKeyDown: (event: React.KeyboardEvent<HTMLTableElement>) => void\n hasFooter: boolean\n pagination: PaginationState\n rowVirtualizer?: ReturnType<typeof useVirtualizer<HTMLDivElement, Element>>\n scrollContainerRef: React.RefObject<HTMLDivElement | null>\n searchDisplayValue: string\n setEditInputRef: (node: HTMLInputElement | HTMLSelectElement | null) => void\n setEditValue: (value: unknown) => void\n setInternalPagination: React.Dispatch<React.SetStateAction<PaginationState>>\n setSearchDisplayValue: (value: string) => void\n startEdit: (rowId: string, columnId: string, currentValue: unknown, column: Column<TData>) => void\n submitEdit: (row: Row<TData>, column: Column<TData>, oldValue: unknown) => Promise<void>\n table: ReactTable<TData>\n tableColumns: ColumnDef<TData>[]\n tableRef: React.RefObject<HTMLTableElement | null>\n}\n\n \nfunction useDataTable<TData>(\n props: DataTableProps<TData>,\n selectionColumn: ColumnDef<TData> | null,\n rowNumberColumn: ColumnDef<TData> | null = null\n): UseDataTableReturn<TData> {\n const {\n advancedFilter,\n columnFilters: controlledColumnFilters,\n columnOrder: controlledColumnOrder,\n columnPinning: controlledColumnPinning,\n columnResizeMode = \"onChange\",\n columnSizing: controlledColumnSizing,\n columnVisibility: controlledColumnVisibility,\n columns,\n data,\n enableAdvancedFilter = false,\n enableClipboard = false,\n enableColumnAutoSize = false,\n enableColumnFilters = false,\n enableColumnOrdering = false,\n enableColumnPinning = false,\n enableColumnResizing = false,\n enableColumnVirtualization = false,\n enableEditing = false,\n enableFiltering = true,\n enableGrouping = false,\n enableKeyboardNavigation = false,\n enableMultiSort = false,\n enableVirtualization = false,\n enableRowPinning = false,\n enableRowSelection = false,\n enableSorting = true,\n enableTreeData = false,\n expanded: controlledExpanded,\n exportFilename = \"export\",\n getRowCanExpand,\n getSubRows,\n globalFilter: controlledGlobalFilter,\n grouping: controlledGrouping,\n initialColumnFilters,\n initialColumnPinning,\n initialGlobalFilter,\n initialPagination,\n initialSorting,\n keyboardShortcuts = {},\n manualFiltering = false,\n manualPagination = false,\n manualSorting = false,\n maxMultiSortColCount,\n onAdvancedFilterChange,\n onCellEdit,\n onCellEditCancel,\n onCellFocus,\n onColumnFiltersChange,\n onColumnOrderChange,\n onColumnPinningChange,\n onColumnSizingChange,\n onColumnVisibilityChange,\n onExpandedChange,\n onExport,\n onGlobalFilterChange,\n onGroupingChange,\n onPaginationChange,\n onRowPinningChange,\n onRowSelectionChange,\n onSelectionChange,\n onSortingChange,\n pageCount,\n pageSize = 10,\n persistenceKey,\n persistenceStorage,\n pagination: controlledPagination,\n rowPinning: controlledRowPinning,\n rowSelection: controlledRowSelection,\n showFooter = false,\n sorting: controlledSorting,\n treeExpandDepth = 1,\n } = props\n\n // Load persisted state once on mount\n const [persisted] = React.useState(() => loadPersistedState(persistenceKey, persistenceStorage))\n\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] = React.useState<SortingState>(\n initialSorting ?? persisted?.sorting ?? []\n )\n const [internalGlobalFilter, setInternalGlobalFilter] = React.useState(\n initialGlobalFilter ?? \"\"\n )\n const [internalColumnFilters, setInternalColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters ?? persisted?.columnFilters ?? [])\n const [internalColumnOrder, setInternalColumnOrder] =\n React.useState<ColumnOrderState>(persisted?.columnOrder ?? [])\n const [internalColumnVisibility, setInternalColumnVisibility] =\n React.useState<VisibilityState>(persisted?.columnVisibility ?? {})\n const [internalPagination, setInternalPagination] =\n React.useState<PaginationState>({\n pageIndex: initialPagination?.pageIndex ?? 0,\n pageSize: initialPagination?.pageSize ?? persisted?.pagination?.pageSize ?? pageSize,\n })\n const [internalRowSelection, setInternalRowSelection] =\n React.useState<RowSelectionState>({})\n const [internalExpanded, setInternalExpanded] =\n React.useState<ExpandedState>(enableTreeData && treeExpandDepth > 0 ? true : {})\n const [internalGrouping, setInternalGrouping] =\n React.useState<GroupingState>([])\n const [internalColumnSizing, setInternalColumnSizing] =\n React.useState<ColumnSizingState>(persisted?.columnSizing ?? {})\n const [internalColumnPinning, setInternalColumnPinning] =\n React.useState<ColumnPinningState>(initialColumnPinning ?? persisted?.columnPinning ?? {})\n const [internalRowPinning, setInternalRowPinning] =\n React.useState<RowPinningState>({ top: [], bottom: [] })\n\n // Internal state for advanced filter (uncontrolled mode)\n const [internalAdvancedFilter, setInternalAdvancedFilter] =\n React.useState<FilterGroup>({\n id: \"root\",\n logic: \"AND\",\n conditions: [],\n })\n\n const tableRef = React.useRef<HTMLTableElement>(null)\n const previousSelectionRef = React.useRef<null | RowSelectionState>(null)\n\n // Inline editing state\n const [editingCell, setEditingCell] = React.useState<null | { columnId: string; rowId: string }>(null)\n const [editValue, setEditValue] = React.useState<unknown>(\"\")\n const [editError, setEditError] = React.useState<null | string>(null)\n const editInputRef = React.useRef<HTMLInputElement | HTMLSelectElement>(null)\n\n // Debounced search display value\n const [searchDisplayValue, setSearchDisplayValue] = React.useState(controlledGlobalFilter ?? initialGlobalFilter ?? \"\")\n const filterUpdateFn = React.useCallback(\n (value: string) => {\n if (onGlobalFilterChange) {\n onGlobalFilterChange(value)\n } else {\n setInternalGlobalFilter(value)\n }\n },\n [onGlobalFilterChange]\n )\n const debouncedFilterUpdate = useDebouncedCallback(filterUpdateFn, DEBOUNCE_MS)\n\n // Determine controlled vs uncontrolled state\n const sorting = controlledSorting ?? internalSorting\n const globalFilter = controlledGlobalFilter ?? internalGlobalFilter\n const columnFilters = controlledColumnFilters ?? internalColumnFilters\n const columnOrder = controlledColumnOrder ?? internalColumnOrder\n const columnVisibility = controlledColumnVisibility ?? internalColumnVisibility\n const pagination = controlledPagination ?? internalPagination\n const rowSelection = controlledRowSelection ?? internalRowSelection\n const expanded = controlledExpanded ?? internalExpanded\n const grouping = controlledGrouping ?? internalGrouping\n const columnSizing = controlledColumnSizing ?? internalColumnSizing\n const columnPinning = controlledColumnPinning ?? internalColumnPinning\n const rowPinning = controlledRowPinning ?? internalRowPinning\n const currentAdvancedFilter = advancedFilter ?? internalAdvancedFilter\n\n // Handler for advanced filter changes\n const handleAdvancedFilterChange = React.useCallback(\n (filter: FilterGroup) => {\n if (onAdvancedFilterChange) {\n onAdvancedFilterChange(filter)\n } else {\n setInternalAdvancedFilter(filter)\n }\n },\n [onAdvancedFilterChange]\n )\n\n // Create wrapper for row selection state updates\n const handleRowSelectionChange = React.useCallback(\n (updaterOrValue: ((old: RowSelectionState) => RowSelectionState) | RowSelectionState) => {\n const newValue = typeof updaterOrValue === \"function\"\n ? updaterOrValue(rowSelection)\n : updaterOrValue\n\n if (onRowSelectionChange) {\n onRowSelectionChange(newValue)\n } else {\n setInternalRowSelection(newValue)\n }\n },\n [rowSelection, onRowSelectionChange]\n )\n\n // Inline editing functions\n const startEdit = React.useCallback(\n (rowId: string, columnId: string, currentValue: unknown, column: Column<TData>) => {\n if (!enableEditing) return\n const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : undefined\n if (!meta?.editable) return\n setEditingCell({ rowId, columnId })\n setEditValue(currentValue)\n setEditError(null)\n },\n [enableEditing]\n )\n\n const cancelEdit = React.useCallback(\n (row: Row<TData>, column: Column<TData>, oldValue: unknown) => {\n if (onCellEditCancel && editingCell) {\n onCellEditCancel({ row, column, oldValue })\n }\n setEditingCell(null)\n setEditValue(\"\")\n setEditError(null)\n },\n [editingCell, onCellEditCancel]\n )\n\n const submitEdit = React.useCallback(\n async (row: Row<TData>, column: Column<TData>, oldValue: unknown) => {\n const meta = isEditableColumnMeta(column.columnDef.meta) ? column.columnDef.meta : undefined\n if (meta?.validate) {\n const validationError = meta.validate(editValue, row as Row<unknown>)\n if (validationError) {\n setEditError(validationError)\n return\n }\n }\n if (onCellEdit) {\n const params: CellEditParams<TData> = { row, column, value: editValue, oldValue }\n try {\n const result = await Promise.resolve(onCellEdit(params))\n if (!result) return\n } catch {\n return\n }\n }\n setEditingCell(null)\n setEditValue(\"\")\n setEditError(null)\n },\n [editValue, onCellEdit]\n )\n\n // Callback ref to focus edit input when editing starts\n const setEditInputRef = React.useCallback((node: HTMLInputElement | HTMLSelectElement | null) => {\n (editInputRef).current = node\n if (node) {\n node.focus()\n if (node instanceof HTMLInputElement) {\n node.select()\n }\n }\n }, [])\n\n // Memoize column definitions with row number and selection columns\n const tableColumns = React.useMemo(() => {\n const result: ColumnDef<TData>[] = []\n if (rowNumberColumn) result.push(rowNumberColumn)\n if (enableRowSelection && selectionColumn) result.push(selectionColumn)\n result.push(...columns)\n return result\n }, [columns, enableRowSelection, rowNumberColumn, selectionColumn])\n\n // Advanced filter bridge: pre-filter data when advanced filter is active\n const filteredData = React.useMemo(() => {\n if (!enableAdvancedFilter || currentAdvancedFilter.conditions.length === 0) return data\n return data.filter((row) => {\n return evaluateFilterGroup(currentAdvancedFilter, (columnId) => {\n return (row as Record<string, unknown>)[columnId]\n })\n })\n }, [data, enableAdvancedFilter, currentAdvancedFilter])\n\n // Initialize table\n // eslint-disable-next-line react-hooks/incompatible-library -- TanStack Table's API is required here.\n const table = useReactTable({\n data: filteredData,\n columns: tableColumns,\n state: {\n sorting,\n globalFilter,\n grouping,\n columnFilters,\n columnOrder: enableColumnOrdering ? columnOrder : undefined,\n columnVisibility,\n columnPinning,\n rowPinning,\n pagination,\n rowSelection,\n expanded,\n columnSizing,\n },\n enableGrouping,\n enableRowPinning,\n enableRowSelection,\n enableSorting,\n enableMultiSort,\n maxMultiSortColCount,\n enableFilters: enableFiltering || enableColumnFilters,\n enableGlobalFilter: enableFiltering,\n enableColumnFilters,\n enableColumnResizing,\n enableColumnPinning,\n columnResizeMode,\n manualPagination,\n manualSorting,\n manualFiltering,\n pageCount: manualPagination ? pageCount : undefined,\n getRowCanExpand,\n getSubRows: enableTreeData ? getSubRows : undefined,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel:\n manualFiltering ? undefined : getFilteredRowModel(),\n getGroupedRowModel: enableGrouping ? getGroupedRowModel() : undefined,\n getPaginationRowModel: manualPagination || enableVirtualization\n ? undefined\n : getPaginationRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n onSortingChange: onSortingChange ?? setInternalSorting,\n onGlobalFilterChange: onGlobalFilterChange ?? setInternalGlobalFilter,\n onGroupingChange: onGroupingChange ?? setInternalGrouping,\n onColumnFiltersChange: onColumnFiltersChange ?? setInternalColumnFilters,\n onColumnOrderChange: enableColumnOrdering ? (onColumnOrderChange ?? setInternalColumnOrder) : undefined,\n onColumnVisibilityChange:\n onColumnVisibilityChange ?? setInternalColumnVisibility,\n onPaginationChange: onPaginationChange ?? setInternalPagination,\n onRowSelectionChange: handleRowSelectionChange,\n onExpandedChange: onExpandedChange ?? setInternalExpanded,\n onColumnSizingChange: onColumnSizingChange ?? setInternalColumnSizing,\n onColumnPinningChange: onColumnPinningChange ?? setInternalColumnPinning,\n onRowPinningChange: onRowPinningChange ?? setInternalRowPinning,\n })\n\n // Handle export\n const handleExport = React.useCallback(\n async (format: ExportFormat = \"csv\") => {\n const filename = typeof exportFilename === \"function\"\n ? exportFilename()\n : exportFilename\n\n const options: ExportOptions = { filename }\n\n if (onExport) {\n onExport(format, data, options)\n return\n }\n\n if (format === \"excel\") {\n await exportToExcel(table, filename)\n } else if (format === \"pdf\") {\n await exportToPDF(table, filename)\n } else {\n exportToCSV(table, filename)\n }\n },\n [data, exportFilename, onExport, table]\n )\n\n // Sync selection state to parent\n /* eslint-disable react-you-might-not-need-an-effect/no-event-handler, react-you-might-not-need-an-effect/no-pass-live-state-to-parent, react-you-might-not-need-an-effect/no-pass-data-to-parent, react-you-might-not-need-an-effect/no-derived-state */\n React.useEffect(() => {\n if (!onSelectionChange) return\n\n const previousSelection = previousSelectionRef.current\n previousSelectionRef.current = rowSelection\n\n if (previousSelection === null && Object.keys(rowSelection).length === 0) return\n\n if (previousSelection) {\n const prevKeys = Object.keys(previousSelection)\n const currKeys = Object.keys(rowSelection)\n if (\n prevKeys.length === currKeys.length &&\n prevKeys.every((key) => key in rowSelection)\n ) {\n return\n }\n }\n\n const selectedRows = table.getSelectedRowModel().flatRows.map((row) => row.original)\n onSelectionChange(selectedRows)\n }, [onSelectionChange, rowSelection, table])\n /* eslint-enable react-you-might-not-need-an-effect/no-event-handler, react-you-might-not-need-an-effect/no-pass-live-state-to-parent, react-you-might-not-need-an-effect/no-pass-data-to-parent, react-you-might-not-need-an-effect/no-derived-state */\n\n // Keyboard navigation (extracted hook)\n const { focusedCell, handleCellFocus, handleKeyDown } = useDataTableKeyboard({\n enableEditing,\n enableKeyboardNavigation,\n enableRowSelection,\n keyboardShortcuts,\n onCellFocus,\n startEdit,\n table,\n tableRef,\n })\n\n const hasFooter =\n showFooter &&\n tableColumns.some(\n (col) => \"footer\" in col && col.footer !== undefined\n )\n\n // Pinning helpers\n const getPinnedStyles = React.useCallback(\n (column: Column<TData>): React.CSSProperties => {\n if (!enableColumnPinning) return {}\n const isPinned = column.getIsPinned()\n if (!isPinned) return {}\n const isLeftPinned = isPinned === \"left\"\n const isRightPinned = isPinned === \"right\"\n return {\n position: \"sticky\",\n left: isLeftPinned ? `${String(column.getStart(\"left\"))}px` : undefined,\n right: isRightPinned ? `${String(column.getAfter(\"right\"))}px` : undefined,\n backgroundColor: \"var(--surface-default)\",\n zIndex: 1,\n }\n },\n [enableColumnPinning]\n )\n\n const getPinnedAttribute = React.useCallback(\n (column: Column<TData>): string | undefined => {\n if (!enableColumnPinning) return undefined\n const isPinned = column.getIsPinned()\n return isPinned ? isPinned : undefined\n },\n [enableColumnPinning]\n )\n\n // State persistence — debounced to avoid excessive writes (e.g., during column resize)\n const persistTimerRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n \n React.useEffect(() => {\n if (!persistenceKey) return\n if (persistTimerRef.current) clearTimeout(persistTimerRef.current)\n persistTimerRef.current = setTimeout(() => {\n const storage = persistenceStorage ?? (typeof window !== \"undefined\" ? window.localStorage : null)\n if (!storage) return\n try {\n const state = {\n v: 1,\n sorting,\n columnOrder: enableColumnOrdering ? columnOrder : undefined,\n columnVisibility,\n columnSizing,\n columnPinning,\n pagination: { pageSize: pagination.pageSize },\n columnFilters,\n }\n storage.setItem(`datatable-${persistenceKey}`, JSON.stringify(state))\n } catch {\n // Storage full or unavailable\n }\n }, 500)\n return () => {\n if (persistTimerRef.current) clearTimeout(persistTimerRef.current)\n }\n }, [persistenceKey, persistenceStorage, sorting, columnOrder, enableColumnOrdering, columnVisibility, columnSizing, columnPinning, pagination.pageSize, columnFilters])\n \n\n // Auto-size columns on mount when enabled\n const autoSizeRunRef = React.useRef(false)\n React.useEffect(() => {\n if (!enableColumnAutoSize || autoSizeRunRef.current) return\n // Defer to after first render when DOM is ready\n const timer = setTimeout(() => {\n const tableEl = tableRef.current\n if (!tableEl) return\n const allColumns = table.getAllLeafColumns()\n const newSizing: Record<string, number> = {}\n for (const col of allColumns) {\n const cells = tableEl.querySelectorAll(`[data-column-id=\"${col.id}\"]`)\n let maxWidth = 0\n cells.forEach((cell) => {\n maxWidth = Math.max(maxWidth, cell.scrollWidth + 2)\n })\n if (maxWidth > 0) {\n const min = col.columnDef.minSize ?? 20\n const max = col.columnDef.maxSize ?? 1000\n newSizing[col.id] = Math.min(Math.max(maxWidth, min), max)\n }\n }\n if (Object.keys(newSizing).length > 0) {\n table.setColumnSizing((prev) => ({ ...prev, ...newSizing }))\n }\n autoSizeRunRef.current = true\n }, 0)\n return () => { clearTimeout(timer); }\n }, [enableColumnAutoSize, table, tableRef])\n\n // Clipboard copy handler\n const handleCopy = React.useCallback(\n (event: React.ClipboardEvent) => {\n if (!enableClipboard) return\n\n const selectedRows = table.getSelectedRowModel().flatRows\n if (selectedRows.length > 0) {\n event.preventDefault()\n const visibleColumns = table.getVisibleLeafColumns()\n const headers = visibleColumns\n .filter((col) => col.id !== \"select\" && col.id !== \"_row_number\")\n .map((col) => typeof col.columnDef.header === \"string\" ? col.columnDef.header : col.id)\n const rows = selectedRows.map((row) =>\n visibleColumns\n .filter((col) => col.id !== \"select\" && col.id !== \"_row_number\")\n .map((col) => {\n const value = row.getValue(col.id)\n if (value == null) return \"\"\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return String(value)\n return \"\"\n })\n )\n const tsv = [headers.join(\"\\t\"), ...rows.map((r) => r.join(\"\\t\"))].join(\"\\n\")\n event.clipboardData.setData(\"text/plain\", tsv)\n }\n },\n [enableClipboard, table]\n )\n\n // Virtualization\n const scrollContainerRef = React.useRef<HTMLDivElement>(null)\n const rowVirtualizer = useVirtualizer({\n count: props.enableVirtualization ? table.getRowModel().rows.length : 0,\n enabled: props.enableVirtualization ?? false,\n estimateSize: () => props.estimateRowHeight ?? 35,\n getScrollElement: () => scrollContainerRef.current,\n overscan: props.overscan ?? 5,\n })\n\n // Column virtualization\n const visibleLeafColumns = table.getVisibleLeafColumns()\n const columnVirtualizer = useVirtualizer({\n count: enableColumnVirtualization ? visibleLeafColumns.length : 0,\n enabled: enableColumnVirtualization,\n estimateSize: (index) => visibleLeafColumns[index]?.getSize() ?? 150,\n getScrollElement: () => scrollContainerRef.current,\n horizontal: true,\n overscan: props.overscan ?? 3,\n })\n\n return {\n cancelEdit,\n columnVirtualizer: enableColumnVirtualization ? columnVirtualizer : undefined,\n currentAdvancedFilter,\n debouncedFilterUpdate,\n editError,\n editingCell,\n editValue,\n focusedCell,\n getPinnedAttribute,\n getPinnedStyles,\n handleAdvancedFilterChange,\n handleCellFocus,\n handleCopy,\n handleExport,\n handleKeyDown,\n hasFooter,\n pagination,\n rowVirtualizer: props.enableVirtualization ? rowVirtualizer : undefined,\n scrollContainerRef,\n searchDisplayValue,\n setEditInputRef,\n setEditValue,\n setInternalPagination,\n setSearchDisplayValue,\n startEdit,\n submitEdit,\n table,\n tableColumns,\n tableRef,\n }\n}\n\nexport { useDataTable }\nexport type { UseDataTableReturn }\n","import type { EditableColumnMeta } from \"./DataTable.types\"\nimport type { Table } from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\n/**\n * A selected cell position for batch editing.\n */\ninterface BatchEditCell {\n col: number\n row: number\n}\n\n/**\n * Options for the useDataTableBatchEditing hook.\n */\ninterface UseDataTableBatchEditingOptions<TData> {\n /** Whether batch editing is enabled */\n enabled: boolean\n /** Array of currently selected cell positions */\n selectedCells: BatchEditCell[]\n /** TanStack Table instance */\n table: Table<TData>\n}\n\n/**\n * Return value of the useDataTableBatchEditing hook.\n */\ninterface UseDataTableBatchEditingReturn {\n /** Apply a value to all selected cells in the given column */\n applyBatchEdit: (columnId: string, value: unknown) => void\n /** Clear all pending batch edits */\n clearBatchEdit: () => void\n /** Map of pending edits keyed by \"rowIndex:columnId\" */\n pendingEdits: Map<string, unknown>\n}\n\n/**\n * Build a pending-edits map key from a row index and column id.\n */\nfunction buildEditKey(rowIndex: number, columnId: string): string {\n return `${String(rowIndex)}:${columnId}`\n}\n\n/**\n * Custom hook for batch editing multiple cells simultaneously in a DataTable.\n *\n * When a set of cells is selected (via cell selection), this hook allows\n * applying a single value to all selected cells that belong to a specific\n * editable column. Only cells whose column meta has `editable: true` will\n * be included in the pending edits.\n *\n * The `pendingEdits` map uses keys in the format `\"rowIndex:columnId\"` so\n * consumers can look up whether a given cell has a pending batch edit and\n * render it accordingly.\n */\nfunction useDataTableBatchEditing<TData>({\n enabled,\n selectedCells,\n table,\n}: UseDataTableBatchEditingOptions<TData>): UseDataTableBatchEditingReturn {\n const [pendingEdits, setPendingEdits] = React.useState<Map<string, unknown>>(\n () => new Map(),\n )\n\n const applyBatchEdit = React.useCallback(\n (columnId: string, value: unknown): void => {\n if (!enabled) return\n\n const column = table.getColumn(columnId)\n if (!column) return\n\n const meta = column.columnDef.meta as EditableColumnMeta | undefined\n if (!meta?.editable) return\n\n const visibleColumns = table.getVisibleLeafColumns()\n const columnIndex = visibleColumns.findIndex((c) => c.id === columnId)\n if (columnIndex === -1) return\n\n const matchingCells = selectedCells.filter(\n (cell) => cell.col === columnIndex,\n )\n\n if (matchingCells.length === 0) return\n\n setPendingEdits((prev) => {\n const next = new Map(prev)\n for (const cell of matchingCells) {\n next.set(buildEditKey(cell.row, columnId), value)\n }\n return next\n })\n },\n [enabled, selectedCells, table],\n )\n\n const clearBatchEdit = React.useCallback((): void => {\n setPendingEdits(new Map())\n }, [])\n\n return {\n applyBatchEdit,\n clearBatchEdit,\n pendingEdits,\n }\n}\n\nexport { useDataTableBatchEditing }\nexport type {\n BatchEditCell,\n UseDataTableBatchEditingOptions,\n UseDataTableBatchEditingReturn,\n}\n","import * as React from \"react\"\n\n/**\n * Represents a rectangular range of selected cells.\n */\ninterface CellRange {\n endCol: number\n endRow: number\n startCol: number\n startRow: number\n}\n\n/**\n * Options for the useDataTableCellSelection hook.\n */\ninterface UseDataTableCellSelectionOptions {\n /** Number of visible columns */\n colCount: number\n /** Whether cell selection is enabled */\n enabled: boolean\n /** Callback fired when the selection changes */\n onSelectionChange?: (cells: { colIndex: number; rowIndex: number }[]) => void\n /** Number of visible rows on the current page */\n rowCount: number\n}\n\n/**\n * Return value of the useDataTableCellSelection hook.\n */\ninterface UseDataTableCellSelectionReturn {\n /** Clear the current selection */\n clearSelection: () => void\n /** Get all selected cells as an array of {rowIndex, colIndex} */\n getSelectedCells: () => { colIndex: number; rowIndex: number }[]\n /** Handler for mousedown on a cell — starts or extends selection */\n handleMouseDown: (rowIndex: number, colIndex: number, event: React.MouseEvent) => void\n /** Handler for mousemove on a cell — extends selection during drag */\n handleMouseMove: (rowIndex: number, colIndex: number) => void\n /** Handler for mouseup — finalizes the drag selection */\n handleMouseUp: () => void\n /** Check whether a specific cell is within the current selection */\n isSelected: (rowIndex: number, colIndex: number) => boolean\n /** The current selection range, or null if nothing is selected */\n selection: CellRange | null\n}\n\n/**\n * Normalize a CellRange so that start <= end for both rows and cols.\n * This allows the selection rectangle to work regardless of drag direction.\n */\nfunction normalizeRange(range: CellRange): CellRange {\n return {\n endCol: Math.max(range.startCol, range.endCol),\n endRow: Math.max(range.startRow, range.endRow),\n startCol: Math.min(range.startCol, range.endCol),\n startRow: Math.min(range.startRow, range.endRow),\n }\n}\n\n/**\n * Expand a CellRange into a flat array of cell coordinates.\n */\nfunction expandRange(range: CellRange): { colIndex: number; rowIndex: number }[] {\n const normalized = normalizeRange(range)\n const cells: { colIndex: number; rowIndex: number }[] = []\n\n for (let row = normalized.startRow; row <= normalized.endRow; row++) {\n for (let col = normalized.startCol; col <= normalized.endCol; col++) {\n cells.push({ colIndex: col, rowIndex: row })\n }\n }\n\n return cells\n}\n\n/**\n * Selection state that includes the counts it was created with,\n * enabling automatic invalidation when dimensions change.\n */\ninterface SelectionState {\n colCount: number\n range: CellRange | null\n rowCount: number\n}\n\n/**\n * Custom hook for managing multi-cell range selection in DataTable.\n *\n * Supports:\n * - Click to select a single cell\n * - Shift+Click to extend selection to a range\n * - Mouse drag (mousedown, mousemove, mouseup) to select a range\n * - Ctrl/Cmd+A to select all cells on the current page\n *\n * Selected cells are identified via the `isSelected` function,\n * which can be used to set a `data-cell-selected` attribute for styling.\n */\nfunction useDataTableCellSelection({\n colCount,\n enabled,\n onSelectionChange,\n rowCount,\n}: UseDataTableCellSelectionOptions): UseDataTableCellSelectionReturn {\n const [state, setState] = React.useState<SelectionState>({\n colCount,\n range: null,\n rowCount,\n })\n const isDraggingRef = React.useRef(false)\n const anchorRef = React.useRef<null | { col: number; row: number }>(null)\n\n // Derive the effective selection: if dimensions changed, selection is invalidated\n const selection = (state.rowCount === rowCount && state.colCount === colCount)\n ? state.range\n : null\n\n /**\n * Update selection range in state, tracking current dimensions.\n */\n const updateSelection = React.useCallback(\n (range: CellRange | null) => {\n setState({ colCount, range, rowCount })\n },\n [colCount, rowCount]\n )\n\n /**\n * Notify the consumer about selection changes.\n */\n const notifySelectionChange = React.useCallback(\n (range: CellRange | null) => {\n if (!onSelectionChange) return\n const cells = range ? expandRange(range) : []\n onSelectionChange(cells)\n },\n [onSelectionChange]\n )\n\n /**\n * Clear the current selection.\n */\n const clearSelection = React.useCallback(() => {\n updateSelection(null)\n anchorRef.current = null\n notifySelectionChange(null)\n }, [updateSelection, notifySelectionChange])\n\n /**\n * Get all currently selected cells as a flat array.\n */\n const getSelectedCells = React.useCallback((): { colIndex: number; rowIndex: number }[] => {\n if (!selection) return []\n return expandRange(selection)\n }, [selection])\n\n /**\n * Check if a specific cell is within the current selection.\n */\n const isSelected = React.useCallback(\n (rowIndex: number, colIndex: number): boolean => {\n if (!selection) return false\n const normalized = normalizeRange(selection)\n return (\n rowIndex >= normalized.startRow &&\n rowIndex <= normalized.endRow &&\n colIndex >= normalized.startCol &&\n colIndex <= normalized.endCol\n )\n },\n [selection]\n )\n\n /**\n * Handle mousedown on a cell.\n * - Plain click: start a new single-cell selection.\n * - Shift+Click: extend from the existing anchor to this cell.\n */\n const handleMouseDown = React.useCallback(\n (rowIndex: number, colIndex: number, event: React.MouseEvent) => {\n if (!enabled) return\n\n if (event.shiftKey && anchorRef.current) {\n // Extend selection from the anchor\n const newRange: CellRange = {\n endCol: colIndex,\n endRow: rowIndex,\n startCol: anchorRef.current.col,\n startRow: anchorRef.current.row,\n }\n updateSelection(newRange)\n notifySelectionChange(newRange)\n } else {\n // Start a new selection at this cell\n anchorRef.current = { col: colIndex, row: rowIndex }\n const newRange: CellRange = {\n endCol: colIndex,\n endRow: rowIndex,\n startCol: colIndex,\n startRow: rowIndex,\n }\n updateSelection(newRange)\n isDraggingRef.current = true\n notifySelectionChange(newRange)\n }\n },\n [enabled, updateSelection, notifySelectionChange]\n )\n\n /**\n * Handle mousemove on a cell during a drag operation.\n * Extends the selection from the anchor to the current cell.\n */\n const handleMouseMove = React.useCallback(\n (rowIndex: number, colIndex: number) => {\n if (!enabled || !isDraggingRef.current || !anchorRef.current) return\n\n const newRange: CellRange = {\n endCol: colIndex,\n endRow: rowIndex,\n startCol: anchorRef.current.col,\n startRow: anchorRef.current.row,\n }\n updateSelection(newRange)\n notifySelectionChange(newRange)\n },\n [enabled, updateSelection, notifySelectionChange]\n )\n\n /**\n * Handle mouseup — finalizes the drag selection.\n */\n const handleMouseUp = React.useCallback(() => {\n isDraggingRef.current = false\n }, [])\n\n /**\n * Listen for Ctrl/Cmd+A to select all cells and mouseup on the window\n * to finalize drag even if the mouse leaves the table.\n */\n React.useEffect(() => {\n if (!enabled) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const isCtrlOrMeta = event.ctrlKey || event.metaKey\n if (isCtrlOrMeta && event.key === \"a\" && rowCount > 0 && colCount > 0) {\n event.preventDefault()\n const allRange: CellRange = {\n endCol: colCount - 1,\n endRow: rowCount - 1,\n startCol: 0,\n startRow: 0,\n }\n anchorRef.current = { col: 0, row: 0 }\n updateSelection(allRange)\n notifySelectionChange(allRange)\n }\n }\n\n const handleGlobalMouseUp = () => {\n isDraggingRef.current = false\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n window.addEventListener(\"mouseup\", handleGlobalMouseUp)\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n window.removeEventListener(\"mouseup\", handleGlobalMouseUp)\n }\n }, [enabled, rowCount, colCount, updateSelection, notifySelectionChange])\n\n return {\n clearSelection,\n getSelectedCells,\n handleMouseDown,\n handleMouseMove,\n handleMouseUp,\n isSelected,\n selection,\n }\n}\n\nexport { useDataTableCellSelection }\nexport type {\n CellRange,\n UseDataTableCellSelectionOptions,\n UseDataTableCellSelectionReturn,\n}\n","import * as React from \"react\"\n\n/**\n * A single edit operation in the history stack\n */\ninterface EditHistoryEntry {\n columnId: string\n newValue: unknown\n oldValue: unknown\n rowId: string\n}\n\ninterface UseDataTableHistoryOptions {\n /** Ref to the DataTable container — shortcuts only fire when focus is inside */\n containerRef?: React.RefObject<HTMLElement | null>\n /** Maximum number of entries in the undo stack @default 50 */\n maxSize?: number\n /** Callback invoked when undo/redo applies an entry */\n onApply?: (entry: EditHistoryEntry, direction: \"redo\" | \"undo\") => void\n}\n\ninterface UseDataTableHistoryReturn {\n canRedo: boolean\n canUndo: boolean\n clear: () => void\n pushEdit: (entry: EditHistoryEntry) => void\n redo: () => void\n undo: () => void\n}\n\nconst DEFAULT_MAX_SIZE = 50\n\n/**\n * Custom hook implementing undo/redo for DataTable cell edits using the\n * Command pattern.\n *\n * Maintains two stacks (undo & redo). Each `pushEdit` adds an entry and\n * clears the redo stack. `undo` pops the last entry, invokes `onApply`\n * with direction \"undo\", and pushes it onto the redo stack (and vice-versa\n * for `redo`).\n *\n * Keyboard shortcuts (Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y) are registered via\n * a global keydown listener that is cleaned up on unmount.\n */\nfunction useDataTableHistory({\n containerRef,\n maxSize = DEFAULT_MAX_SIZE,\n onApply,\n}: UseDataTableHistoryOptions = {}): UseDataTableHistoryReturn {\n const [undoStack, setUndoStack] = React.useState<EditHistoryEntry[]>([])\n const [redoStack, setRedoStack] = React.useState<EditHistoryEntry[]>([])\n\n const pushEdit = React.useCallback(\n (entry: EditHistoryEntry) => {\n setUndoStack((prev) => {\n const next = [...prev, entry]\n if (next.length > maxSize) {\n return next.slice(next.length - maxSize)\n }\n return next\n })\n // Any new edit clears the redo stack\n setRedoStack([])\n },\n [maxSize],\n )\n\n // Use refs to avoid stale closures and keep callbacks stable\n const undoStackRef = React.useRef(undoStack)\n const redoStackRef = React.useRef(redoStack)\n const onApplyRef = React.useRef(onApply)\n React.useEffect(() => { undoStackRef.current = undoStack }, [undoStack])\n React.useEffect(() => { redoStackRef.current = redoStack }, [redoStack])\n React.useEffect(() => { onApplyRef.current = onApply }, [onApply])\n\n const undo = React.useCallback(() => {\n const entry = undoStackRef.current.at(-1)\n if (!entry) return\n setUndoStack((prev) => prev.slice(0, -1))\n setRedoStack((prev) => [...prev, entry])\n onApplyRef.current?.(entry, \"undo\")\n }, [])\n\n const redo = React.useCallback(() => {\n const entry = redoStackRef.current.at(-1)\n if (!entry) return\n setRedoStack((prev) => prev.slice(0, -1))\n setUndoStack((prev) => [...prev, entry])\n onApplyRef.current?.(entry, \"redo\")\n }, [])\n\n const clear = React.useCallback(() => {\n setUndoStack([])\n setRedoStack([])\n }, [])\n\n // Register keyboard shortcuts scoped to the DataTable container.\n // Skip entirely when onApply is not provided (i.e. enableUndoRedo=false)\n // to avoid hijacking Ctrl+Z / Ctrl+Y from the browser or other components.\n React.useEffect(() => {\n if (!onApplyRef.current) return\n\n function handleKeyDown(event: KeyboardEvent) {\n // Only intercept when focus is inside the DataTable container\n if (containerRef?.current && !containerRef.current.contains(document.activeElement)) {\n return\n }\n\n const isCtrlOrMeta = event.ctrlKey || event.metaKey\n if (!isCtrlOrMeta) return\n\n // Ctrl+Shift+Z or Ctrl+Y → redo\n if ((event.key === \"z\" || event.key === \"Z\") && event.shiftKey) {\n event.preventDefault()\n redo()\n return\n }\n\n if (event.key === \"y\" || event.key === \"Y\") {\n event.preventDefault()\n redo()\n return\n }\n\n // Ctrl+Z → undo\n if (event.key === \"z\" && !event.shiftKey) {\n event.preventDefault()\n undo()\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown)\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [containerRef, onApply, redo, undo])\n\n return {\n canRedo: redoStack.length > 0,\n canUndo: undoStack.length > 0,\n clear,\n pushEdit,\n redo,\n undo,\n }\n}\n\nexport { useDataTableHistory }\nexport type { EditHistoryEntry, UseDataTableHistoryOptions, UseDataTableHistoryReturn }\n","import * as React from \"react\"\n\n/**\n * Options for the infinite scroll hook\n */\ninterface UseDataTableInfiniteScrollOptions {\n /** Whether infinite scroll is enabled */\n enabled: boolean\n /** Whether there are more items to load */\n hasNextPage: boolean\n /** Whether data is currently being fetched */\n isFetching: boolean\n /** Callback to load more data */\n onLoadMore: () => void\n /** Root margin for IntersectionObserver (e.g., \"200px\") to trigger early */\n rootMargin?: string\n}\n\n/**\n * Return value of the infinite scroll hook\n */\ninterface UseDataTableInfiniteScrollReturn {\n /** Whether currently loading */\n isLoading: boolean\n /** Ref callback to attach to the sentinel element at the bottom */\n sentinelRef: React.RefCallback<HTMLElement>\n}\n\n/**\n * Hook that monitors scroll position via IntersectionObserver and triggers\n * data loading when a sentinel element enters the viewport.\n *\n * Place the sentinel element at the bottom of the table body. When the user\n * scrolls near it, `onLoadMore` is called automatically.\n *\n * @example\n * ```tsx\n * const { sentinelRef, isLoading } = useDataTableInfiniteScroll({\n * enabled: true,\n * hasNextPage: true,\n * isFetching: false,\n * onLoadMore: () => fetchNextPage(),\n * rootMargin: '200px',\n * })\n *\n * // In the table body:\n * <tr ref={sentinelRef} aria-hidden=\"true\" style={{ height: 1 }} />\n * ```\n */\nfunction useDataTableInfiniteScroll({\n enabled,\n hasNextPage,\n isFetching,\n onLoadMore,\n rootMargin = \"200px\",\n}: UseDataTableInfiniteScrollOptions): UseDataTableInfiniteScrollReturn {\n const observerRef = React.useRef<IntersectionObserver | null>(null)\n const sentinelNodeRef = React.useRef<HTMLElement | null>(null)\n\n // Stable callback ref so we don't need onLoadMore in the observer deps\n const onLoadMoreRef = React.useRef(onLoadMore)\n React.useEffect(() => {\n onLoadMoreRef.current = onLoadMore\n }, [onLoadMore])\n\n // Cleanup helper to disconnect the current observer\n const disconnectObserver = React.useCallback(() => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n observerRef.current = null\n }\n }, [])\n\n // Create or recreate the IntersectionObserver when config changes\n React.useEffect(() => {\n if (!enabled || !hasNextPage || isFetching) {\n disconnectObserver()\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry?.isIntersecting) {\n onLoadMoreRef.current()\n }\n },\n { rootMargin }\n )\n\n observerRef.current = observer\n\n // If a sentinel node is already attached, observe it\n if (sentinelNodeRef.current) {\n observer.observe(sentinelNodeRef.current)\n }\n\n return () => {\n observer.disconnect()\n }\n }, [disconnectObserver, enabled, hasNextPage, isFetching, rootMargin])\n\n // Ref callback that handles attaching/detaching the sentinel element\n const sentinelRef: React.RefCallback<HTMLElement> = React.useCallback(\n (node) => {\n // Stop observing the previous node\n if (sentinelNodeRef.current && observerRef.current) {\n observerRef.current.unobserve(sentinelNodeRef.current)\n }\n\n sentinelNodeRef.current = node\n\n // Start observing the new node\n if (node && observerRef.current) {\n observerRef.current.observe(node)\n }\n },\n []\n )\n\n return {\n isLoading: isFetching,\n sentinelRef,\n }\n}\n\nexport { useDataTableInfiniteScroll }\nexport type {\n UseDataTableInfiniteScrollOptions,\n UseDataTableInfiniteScrollReturn,\n}\n","import type { EditableColumnMeta } from \"./DataTable.types\"\nimport type { Column, Table } from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\ninterface UseDataTablePasteOptions<TData> {\n enabled: boolean\n focusedCell: null | { col: number; row: number }\n onPaste?: (params: { cells: { columnId: string; rowIndex: number; value: string }[] }) => void\n table: Table<TData>\n}\n\ninterface UseDataTablePasteReturn {\n handlePaste: (event: React.ClipboardEvent) => void\n}\n\n/**\n * Detect whether `text` is tab-separated or comma-separated and split\n * it into a 2D array of strings (rows × columns).\n */\nfunction parseClipboardText(text: string): string[][] {\n const lines = text.replaceAll(/\\r\\n?/g, \"\\n\").trimEnd().split(\"\\n\")\n\n // Use TSV if any line contains a tab, otherwise fall back to CSV\n const delimiter = lines.some((line) => line.includes(\"\\t\")) ? \"\\t\" : \",\"\n\n return lines.map((line) => line.split(delimiter))\n}\n\n/**\n * Map a single parsed row of clipboard values to cell targets, skipping\n * columns that are not editable.\n */\nfunction mapRowToCells(\n parsedRow: string[],\n targetRowIndex: number,\n startCol: number,\n visibleColumns: Column<unknown>[],\n): { columnId: string; rowIndex: number; value: string }[] {\n const cells: { columnId: string; rowIndex: number; value: string }[] = []\n let editableColOffset = 0\n\n for (const value of parsedRow) {\n let targetColIndex = startCol + editableColOffset\n\n // Advance past non-editable columns\n while (targetColIndex < visibleColumns.length) {\n const col = visibleColumns[targetColIndex]\n if (!col) break\n const meta = col.columnDef.meta as EditableColumnMeta | undefined\n if (meta?.editable) break\n targetColIndex++\n editableColOffset++\n }\n\n const column = visibleColumns[targetColIndex]\n if (!column) continue\n\n const meta = column.columnDef.meta as EditableColumnMeta | undefined\n if (!meta?.editable) continue\n\n cells.push({ columnId: column.id, rowIndex: targetRowIndex, value })\n editableColOffset++\n }\n\n return cells\n}\n\n/**\n * Custom hook that provides a paste handler for DataTable.\n *\n * Parses TSV (tab-separated) or CSV (comma-separated) data from the\n * clipboard and maps each value to a table cell starting from the\n * currently focused cell position. Read-only columns (those without\n * `meta.editable`) are skipped.\n *\n * The handler is returned as a callback — it is NOT registered as a\n * global listener. Attach it to the table element via `onPaste`.\n */\nfunction useDataTablePaste<TData>({\n enabled,\n focusedCell,\n onPaste,\n table,\n}: UseDataTablePasteOptions<TData>): UseDataTablePasteReturn {\n const handlePaste = React.useCallback(\n (event: React.ClipboardEvent) => {\n if (!enabled || !focusedCell || !onPaste) return\n\n const text = event.clipboardData.getData(\"text/plain\")\n if (!text) return\n\n event.preventDefault()\n\n const parsed = parseClipboardText(text)\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns() as Column<unknown>[]\n\n const cells: { columnId: string; rowIndex: number; value: string }[] = []\n\n for (const [rowOffset, parsedRow] of parsed.entries()) {\n const targetRowIndex = focusedCell.row + rowOffset\n const targetRow = rows[targetRowIndex]\n if (!targetRow) continue\n\n const rowCells = mapRowToCells(parsedRow, targetRowIndex, focusedCell.col, visibleColumns)\n cells.push(...rowCells)\n }\n\n if (cells.length > 0) {\n onPaste({ cells })\n }\n },\n [enabled, focusedCell, onPaste, table],\n )\n\n return {\n handlePaste,\n }\n}\n\nexport { useDataTablePaste }\nexport type { UseDataTablePasteOptions, UseDataTablePasteReturn }\n","import type { EditableColumnMeta } from \"./DataTable.types\"\nimport type { Row } from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\ninterface UseDataTableRowEditingOptions<TData> {\n enabled: boolean\n onRowEdit?: (params: {\n oldValues: Record<string, unknown>\n row: Row<TData>\n values: Record<string, unknown>\n }) => boolean | Promise<boolean>\n onRowEditCancel?: (params: { row: Row<TData> }) => void\n}\n\ninterface UseDataTableRowEditingReturn<TData> {\n cancelRowEdit: () => void\n editingRowId: null | string\n isRowEditing: (rowId: string) => boolean\n rowEditValues: Record<string, unknown>\n setRowEditValue: (columnId: string, value: unknown) => void\n startRowEdit: (row: Row<TData>) => void\n submitRowEdit: (row: Row<TData>) => Promise<void>\n}\n\n/**\n * Custom hook that manages full-row editing state for the DataTable.\n *\n * When a row enters edit mode, all editable columns (determined by column meta\n * `editable: true`) become input fields simultaneously. Changes are tracked\n * independently per column and applied or discarded as a batch via\n * `submitRowEdit` / `cancelRowEdit`.\n *\n * The `onRowEdit` callback receives both old and new values and can return\n * `false` (or resolve to `false`) to reject the edit, keeping the row in edit\n * mode so the user can correct their input.\n */\nfunction useDataTableRowEditing<TData>({\n enabled,\n onRowEdit,\n onRowEditCancel,\n}: UseDataTableRowEditingOptions<TData>): UseDataTableRowEditingReturn<TData> {\n const [editingRowId, setEditingRowId] = React.useState<null | string>(null)\n const [rowEditValues, setRowEditValues] = React.useState<Record<string, unknown>>({})\n const [oldValues, setOldValues] = React.useState<Record<string, unknown>>({})\n\n // Keep a stable ref for the editing row so cancelRowEdit can invoke onRowEditCancel\n const editingRowRef = React.useRef<null | Row<TData>>(null)\n\n const isRowEditing = React.useCallback(\n (rowId: string): boolean => editingRowId === rowId,\n [editingRowId],\n )\n\n const startRowEdit = React.useCallback(\n (row: Row<TData>) => {\n if (!enabled) return\n\n const initialValues: Record<string, unknown> = {}\n const currentOldValues: Record<string, unknown> = {}\n\n for (const cell of row.getAllCells()) {\n const meta = cell.column.columnDef.meta as EditableColumnMeta | undefined\n if (meta?.editable) {\n const value = row.getValue(cell.column.id)\n initialValues[cell.column.id] = value\n currentOldValues[cell.column.id] = value\n }\n }\n\n editingRowRef.current = row\n setEditingRowId(row.id)\n setRowEditValues(initialValues)\n setOldValues(currentOldValues)\n },\n [enabled],\n )\n\n const cancelRowEdit = React.useCallback(() => {\n if (editingRowId === null) return\n\n const row = editingRowRef.current\n editingRowRef.current = null\n setEditingRowId(null)\n setRowEditValues({})\n setOldValues({})\n\n if (row && onRowEditCancel) {\n onRowEditCancel({ row })\n }\n }, [editingRowId, onRowEditCancel])\n\n const setRowEditValue = React.useCallback(\n (columnId: string, value: unknown) => {\n setRowEditValues((prev) => ({ ...prev, [columnId]: value }))\n },\n [],\n )\n\n const submitRowEdit = React.useCallback(\n async (row: Row<TData>) => {\n if (!enabled || editingRowId === null) return\n\n if (onRowEdit) {\n const accepted = await onRowEdit({\n oldValues,\n row,\n values: rowEditValues,\n })\n\n if (!accepted) {\n // Edit rejected — keep the row in edit mode so the user can fix values\n return\n }\n }\n\n editingRowRef.current = null\n setEditingRowId(null)\n setRowEditValues({})\n setOldValues({})\n },\n [enabled, editingRowId, oldValues, onRowEdit, rowEditValues],\n )\n\n return {\n cancelRowEdit,\n editingRowId,\n isRowEditing,\n rowEditValues,\n setRowEditValue,\n startRowEdit,\n submitRowEdit,\n }\n}\n\nexport { useDataTableRowEditing }\nexport type { UseDataTableRowEditingOptions, UseDataTableRowEditingReturn }\n","import * as React from \"react\"\n\n/**\n * Options for the row reordering hook.\n */\ninterface UseDataTableRowReorderingOptions {\n /** Whether row drag-and-drop reordering is enabled */\n enabled: boolean\n /** Callback fired when a row is dropped at a new position */\n onRowReorder?: (params: { fromIndex: number; toIndex: number }) => void\n}\n\n/**\n * Return value of the row reordering hook.\n */\ninterface UseDataTableRowReorderingReturn {\n /** Returns drag-related props to spread on each table row */\n dragHandleProps: (rowIndex: number) => {\n draggable: boolean\n onDragEnd: (event: React.DragEvent<HTMLElement>) => void\n onDragOver: (event: React.DragEvent<HTMLElement>) => void\n onDragStart: (event: React.DragEvent<HTMLElement>) => void\n onDrop: (event: React.DragEvent<HTMLElement>) => void\n }\n /** Whether a drag operation is currently in progress */\n isDragging: boolean\n}\n\n/**\n * Remove drag-related data attributes from all table rows within a container.\n */\nfunction cleanupDataAttributes(element: HTMLElement): void {\n const dragging = element.closest(\"table\")?.querySelectorAll(\"[data-dragging]\")\n const dragOver = element.closest(\"table\")?.querySelectorAll(\"[data-drag-over]\")\n\n dragging?.forEach((el) => {\n el.removeAttribute(\"data-dragging\")\n })\n dragOver?.forEach((el) => {\n el.removeAttribute(\"data-drag-over\")\n })\n}\n\n/**\n * Custom hook for row drag-and-drop reordering in the DataTable.\n *\n * Uses the native HTML Drag and Drop API to let users reorder rows by\n * dragging them to a new position. Data attributes (`data-dragging` and\n * `data-drag-over`) are applied to rows during drag operations so they\n * can be styled with CSS.\n *\n * @example\n * ```tsx\n * const { dragHandleProps, isDragging } = useDataTableRowReordering({\n * enabled: true,\n * onRowReorder: ({ fromIndex, toIndex }) => {\n * const updated = arrayMove(data, fromIndex, toIndex)\n * setData(updated)\n * },\n * })\n *\n * // Spread on each row:\n * <tr {...dragHandleProps(rowIndex)}>\n * ```\n */\nfunction useDataTableRowReordering({\n enabled,\n onRowReorder,\n}: UseDataTableRowReorderingOptions): UseDataTableRowReorderingReturn {\n const [draggedIndex, setDraggedIndex] = React.useState<null | number>(null)\n const [targetIndex, setTargetIndex] = React.useState<null | number>(null)\n\n const isDragging = draggedIndex !== null\n\n const handleDragStart = React.useCallback(\n (rowIndex: number, event: React.DragEvent<HTMLElement>) => {\n if (!enabled) return\n\n setDraggedIndex(rowIndex)\n event.dataTransfer.effectAllowed = \"move\"\n event.currentTarget.setAttribute(\"data-dragging\", \"true\")\n },\n [enabled],\n )\n\n const handleDragOver = React.useCallback(\n (rowIndex: number, event: React.DragEvent<HTMLElement>) => {\n if (!enabled || draggedIndex === null) return\n\n event.preventDefault()\n event.dataTransfer.dropEffect = \"move\"\n\n // Remove data-drag-over from the previous target\n if (targetIndex !== null && targetIndex !== rowIndex) {\n const table = event.currentTarget.closest(\"table\")\n const previousTarget = table?.querySelector(\"[data-drag-over]\")\n previousTarget?.removeAttribute(\"data-drag-over\")\n }\n\n setTargetIndex(rowIndex)\n event.currentTarget.setAttribute(\"data-drag-over\", \"true\")\n },\n [enabled, draggedIndex, targetIndex],\n )\n\n const handleDrop = React.useCallback(\n (rowIndex: number, event: React.DragEvent<HTMLElement>) => {\n if (!enabled || draggedIndex === null) return\n\n event.preventDefault()\n cleanupDataAttributes(event.currentTarget)\n\n if (draggedIndex !== rowIndex && onRowReorder) {\n onRowReorder({ fromIndex: draggedIndex, toIndex: rowIndex })\n }\n\n setDraggedIndex(null)\n setTargetIndex(null)\n },\n [enabled, draggedIndex, onRowReorder],\n )\n\n const handleDragEnd = React.useCallback(\n (_rowIndex: number, event: React.DragEvent<HTMLElement>) => {\n cleanupDataAttributes(event.currentTarget)\n setDraggedIndex(null)\n setTargetIndex(null)\n },\n [],\n )\n\n const dragHandleProps = React.useCallback(\n (rowIndex: number) => ({\n draggable: enabled,\n onDragEnd: (event: React.DragEvent<HTMLElement>) => {\n handleDragEnd(rowIndex, event)\n },\n onDragOver: (event: React.DragEvent<HTMLElement>) => {\n handleDragOver(rowIndex, event)\n },\n onDragStart: (event: React.DragEvent<HTMLElement>) => {\n handleDragStart(rowIndex, event)\n },\n onDrop: (event: React.DragEvent<HTMLElement>) => {\n handleDrop(rowIndex, event)\n },\n }),\n [enabled, handleDragEnd, handleDragOver, handleDragStart, handleDrop],\n )\n\n return {\n dragHandleProps,\n isDragging,\n }\n}\n\nexport { useDataTableRowReordering }\nexport type {\n UseDataTableRowReorderingOptions,\n UseDataTableRowReorderingReturn,\n}\n","import type {\n ColumnFiltersState,\n PaginationState,\n SortingState,\n} from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_PAGE_INDEX = 0\nconst DEFAULT_PAGE_SIZE = 10\nconst DEFAULT_PREFIX = \"dt_\"\n\nconst PARAM_FILTER = \"filter\"\nconst PARAM_PAGE = \"page\"\nconst PARAM_PAGE_SIZE = \"pageSize\"\nconst PARAM_SEARCH = \"search\"\nconst PARAM_SORT = \"sort\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface DataTableUrlState {\n columnFilters: ColumnFiltersState\n globalFilter: string\n pagination: PaginationState\n sorting: SortingState\n}\n\ninterface UseDataTableUrlStateOptions {\n enabled: boolean\n prefix?: string\n}\n\ninterface UseDataTableUrlStateReturn {\n initialColumnFilters: ColumnFiltersState\n initialGlobalFilter: string\n initialPagination: PaginationState\n initialSorting: SortingState\n updateUrl: (state: DataTableUrlState) => void\n}\n\n// ---------------------------------------------------------------------------\n// Parsing helpers (extracted to keep cognitive complexity low)\n// ---------------------------------------------------------------------------\n\nfunction parseSortingParam(raw: null | string): SortingState {\n if (!raw) return []\n\n return raw.split(\",\").reduce<SortingState>((acc, segment) => {\n const lastDot = segment.lastIndexOf(\".\")\n if (lastDot === -1) return acc\n\n const id = segment.slice(0, lastDot)\n const direction = segment.slice(lastDot + 1)\n\n if (id && (direction === \"asc\" || direction === \"desc\")) {\n acc.push({ desc: direction === \"desc\", id })\n }\n\n return acc\n }, [])\n}\n\nfunction parsePaginationParams(\n pageRaw: null | string,\n pageSizeRaw: null | string,\n): PaginationState {\n const pageIndex = pageRaw ? Math.max(0, Number.parseInt(pageRaw, 10) - 1) : DEFAULT_PAGE_INDEX\n const pageSize = pageSizeRaw ? Math.max(1, Number.parseInt(pageSizeRaw, 10)) : DEFAULT_PAGE_SIZE\n\n return {\n pageIndex: Number.isNaN(pageIndex) ? DEFAULT_PAGE_INDEX : pageIndex,\n pageSize: Number.isNaN(pageSize) ? DEFAULT_PAGE_SIZE : pageSize,\n }\n}\n\nfunction parseColumnFiltersParam(raw: null | string): ColumnFiltersState {\n if (!raw) return []\n\n try {\n const parsed: unknown = JSON.parse(raw)\n\n if (!Array.isArray(parsed)) return []\n\n return parsed.reduce<ColumnFiltersState>((acc, item: unknown) => {\n if (\n item !== null &&\n typeof item === \"object\" &&\n \"id\" in item &&\n \"value\" in item &&\n typeof (item as { id: unknown }).id === \"string\"\n ) {\n acc.push({ id: (item as { id: string }).id, value: (item as { value: unknown }).value })\n }\n return acc\n }, [])\n } catch {\n return []\n }\n}\n\n// ---------------------------------------------------------------------------\n// Serialization helpers\n// ---------------------------------------------------------------------------\n\nfunction serializeSorting(sorting: SortingState): string {\n return sorting\n .map((s) => `${s.id}.${s.desc ? \"desc\" : \"asc\"}`)\n .join(\",\")\n}\n\nfunction serializeColumnFilters(filters: ColumnFiltersState): string {\n if (filters.length === 0) return \"\"\n return JSON.stringify(filters.map((f) => ({ id: f.id, value: f.value })))\n}\n\n// ---------------------------------------------------------------------------\n// URL read / write helpers\n// ---------------------------------------------------------------------------\n\nfunction readStateFromUrl(prefix: string): {\n columnFilters: ColumnFiltersState\n globalFilter: string\n pagination: PaginationState\n sorting: SortingState\n} {\n const params = new URLSearchParams(window.location.search)\n\n return {\n columnFilters: parseColumnFiltersParam(params.get(`${prefix}${PARAM_FILTER}`)),\n globalFilter: params.get(`${prefix}${PARAM_SEARCH}`) ?? \"\",\n pagination: parsePaginationParams(\n params.get(`${prefix}${PARAM_PAGE}`),\n params.get(`${prefix}${PARAM_PAGE_SIZE}`),\n ),\n sorting: parseSortingParam(params.get(`${prefix}${PARAM_SORT}`)),\n }\n}\n\nfunction writeStateToUrl(prefix: string, state: DataTableUrlState): void {\n const params = new URLSearchParams(window.location.search)\n\n setOrDelete(params, `${prefix}${PARAM_SORT}`, serializeSorting(state.sorting))\n setOrDelete(params, `${prefix}${PARAM_SEARCH}`, state.globalFilter)\n setOrDelete(params, `${prefix}${PARAM_FILTER}`, serializeColumnFilters(state.columnFilters))\n\n // Page is stored as 1-indexed for human-readable URLs\n const pageValue =\n state.pagination.pageIndex > DEFAULT_PAGE_INDEX\n ? String(state.pagination.pageIndex + 1)\n : \"\"\n setOrDelete(params, `${prefix}${PARAM_PAGE}`, pageValue)\n\n const pageSizeValue =\n state.pagination.pageSize !== DEFAULT_PAGE_SIZE\n ? String(state.pagination.pageSize)\n : \"\"\n setOrDelete(params, `${prefix}${PARAM_PAGE_SIZE}`, pageSizeValue)\n\n const search = params.toString()\n const newUrl = `${window.location.pathname}${search ? `?${search}` : \"\"}`\n\n window.history.replaceState(null, \"\", newUrl)\n}\n\nfunction setOrDelete(params: URLSearchParams, key: string, value: string): void {\n if (value) {\n params.set(key, value)\n } else {\n params.delete(key)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Syncs DataTable state (sorting, pagination, filters, search) with URL\n * search params so that the current view can be bookmarked or shared.\n *\n * When `enabled` is false the hook returns empty defaults and `updateUrl`\n * is a no-op, making it safe to call unconditionally.\n *\n * @example\n * ```tsx\n * const { initialSorting, initialPagination, updateUrl } =\n * useDataTableUrlState({ enabled: true, prefix: \"users_\" })\n * ```\n */\nfunction useDataTableUrlState({\n enabled,\n prefix = DEFAULT_PREFIX,\n}: UseDataTableUrlStateOptions): UseDataTableUrlStateReturn {\n const initial = React.useMemo<{\n columnFilters: ColumnFiltersState\n globalFilter: string\n pagination: PaginationState\n sorting: SortingState\n }>(() => {\n if (!enabled || typeof window === \"undefined\") {\n return {\n columnFilters: [],\n globalFilter: \"\",\n pagination: { pageIndex: DEFAULT_PAGE_INDEX, pageSize: DEFAULT_PAGE_SIZE },\n sorting: [],\n }\n }\n\n return readStateFromUrl(prefix)\n }, [enabled, prefix])\n\n const updateUrl = React.useCallback(\n (state: DataTableUrlState) => {\n if (!enabled || typeof window === \"undefined\") return\n writeStateToUrl(prefix, state)\n },\n [enabled, prefix],\n )\n\n return {\n initialColumnFilters: initial.columnFilters,\n initialGlobalFilter: initial.globalFilter,\n initialPagination: initial.pagination,\n initialSorting: initial.sorting,\n updateUrl,\n }\n}\n\nexport { useDataTableUrlState }\nexport type {\n DataTableUrlState,\n UseDataTableUrlStateOptions,\n UseDataTableUrlStateReturn,\n}\n","import type { DataTableProps } from \"./DataTable.types\"\nimport type { DataTableHeaderProps } from \"./DataTableHeader\"\nimport type {\n Column,\n ColumnDef,\n Table as ReactTable,\n Row,\n} from \"@tanstack/react-table\"\n\nimport * as React from \"react\"\n\nimport { useMediaQuery } from \"../../../hooks/use-media-query\"\nimport { cn } from \"../../../lib/utils\"\nimport { Checkbox } from \"../../forms/Checkbox\"\nimport { Table } from \"../Table\"\nimport { dataTableVariants } from \"./DataTable.variants\"\nimport { DataTableBody } from \"./DataTableBody\"\nimport { DataTableBulkActions } from \"./DataTableBulkActions\"\nimport { DataTableCardView } from \"./DataTableCardView\"\nimport { DataTableEmptyState } from \"./DataTableEmptyState\"\nimport { DataTableFillHandle } from \"./DataTableFillHandle\"\nimport { DataTableFilterChips } from \"./DataTableFilterChips\"\nimport { DataTableFindBar } from \"./DataTableFindBar\"\nimport { DataTableHeader } from \"./DataTableHeader\"\nimport { DataTablePagination } from \"./DataTablePagination\"\nimport { DataTableSidePanel } from \"./DataTableSidePanel\"\nimport { DataTableStatusBar } from \"./DataTableStatusBar\"\nimport { DataTableToolbar } from \"./DataTableToolbar\"\nimport { DataTableTrailingRow } from \"./DataTableTrailingRow\"\nimport { useDataTable } from \"./useDataTable\"\nimport { useDataTableBatchEditing } from \"./useDataTableBatchEditing\"\nimport { useDataTableCellSelection } from \"./useDataTableCellSelection\"\nimport { useDataTableHistory } from \"./useDataTableHistory\"\nimport { useDataTableInfiniteScroll } from \"./useDataTableInfiniteScroll\"\nimport { useDataTablePaste } from \"./useDataTablePaste\"\nimport { useDataTableRowEditing } from \"./useDataTableRowEditing\"\nimport { useDataTableRowReordering } from \"./useDataTableRowReordering\"\nimport { useDataTableUrlState } from \"./useDataTableUrlState\"\n\n/**\n * DataTable - Advanced data table with sorting, filtering, pagination, and selection.\n *\n * Built on TanStack Table (React Table v8) for powerful data manipulation.\n *\n * @example\n * ```tsx\n * import { DataTable } from '@etus/ui'\n * import { ColumnDef } from '@tanstack/react-table'\n *\n * const columns: ColumnDef<User>[] = [\n * { accessorKey: 'name', header: 'Name' },\n * { accessorKey: 'email', header: 'Email' },\n * ]\n *\n * function UserTable() {\n * return (\n * <DataTable\n * data={users}\n * columns={columns}\n * enableSorting\n * enablePagination\n * />\n * )\n * }\n * ```\n */\n\n// eslint-disable-next-line sonarjs/cognitive-complexity -- orchestrator component with many feature flags\nfunction DataTable<TData>(props: DataTableProps<TData>) {\n const {\n advancedFilterColumns = [],\n bulkActions,\n cellClassName,\n className,\n contextMenuItems,\n data,\n density: controlledDensity,\n editTrigger = \"dblclick\",\n emptyState,\n enableAdvancedFilter = false,\n enableBatchEditing = false,\n enableCellSelection = false,\n enableClipboard = false,\n enableColumnFilters = false,\n enableColumnMenu = false,\n enableColumnOrdering = false,\n enableColumnPinning = false,\n enableColumnResizing = false,\n enableColumnVirtualization = false,\n enableColumnVisibility = false,\n enableDensityToggle = false,\n enableEditing = false,\n enableExport = false,\n enableFillHandle = false,\n enableFilterChips = false,\n enableFiltering = true,\n enableFind = false,\n enableGrouping = false,\n enableInfiniteScroll = false,\n enableKeyboardNavigation = false,\n enablePagination = true,\n enablePaste = false,\n enablePrint = false,\n enableResponsive = false,\n enableRowAnimation = false,\n enableRowColumnSpanning = false,\n enableRowEditing = false,\n enableRowNumbers = false,\n enableRowSelection = false,\n enableSearch = true,\n enableSearchHighlight = false,\n enableSidePanel = false,\n enableStatusBar = false,\n enableStickyHeader = false,\n enableStriping = false,\n enableTrailingRow = false,\n enableUndoRedo = false,\n enableUrlState = false,\n enableVirtualization = false,\n error = false,\n errorState,\n exportFormats = [\"csv\"],\n filterPresets,\n hasNextPage = false,\n isFetching = false,\n loading = false,\n loadingComponent,\n maxHeight,\n onAddRow,\n onCellFill,\n onCellSelectionChange,\n onDeleteFilterPreset,\n onDensityChange,\n onLoadMore,\n onPaginationChange,\n onPaste,\n onRowClick,\n onRowEdit,\n onRowEditCancel,\n onRowReorder,\n onSaveFilterPreset,\n onSidePanelOpenChange,\n onUndoRedo,\n pageSizeOptions = [10, 20, 50],\n renderColumnFilter,\n renderSubComponent,\n responsiveBreakpoint = 768,\n rowClassName,\n searchPlaceholder = \"Search...\",\n sidePanelContent,\n sidePanelOpen: controlledSidePanelOpen,\n statusBarItems,\n urlStatePrefix,\n } = props\n\n // --- Internal state ---\n const [internalDensity, setInternalDensity] = React.useState<\"comfortable\" | \"compact\" | \"default\">(\"default\")\n const density = controlledDensity ?? internalDensity\n const handleDensityChange = React.useCallback(\n (newDensity: \"comfortable\" | \"compact\" | \"default\") => {\n if (onDensityChange) {\n onDensityChange(newDensity)\n } else {\n setInternalDensity(newDensity)\n }\n },\n [onDensityChange]\n )\n\n const [findBarOpen, setFindBarOpen] = React.useState(false)\n const [internalSidePanelOpen, setInternalSidePanelOpen] = React.useState(false)\n const sidePanelOpen = controlledSidePanelOpen ?? internalSidePanelOpen\n const setSidePanelOpen = React.useCallback(\n (open: boolean) => {\n if (onSidePanelOpenChange) {\n onSidePanelOpenChange(open)\n } else {\n setInternalSidePanelOpen(open)\n }\n },\n [onSidePanelOpenChange]\n )\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n // Responsive breakpoint\n const isBelowBreakpoint = useMediaQuery(`(max-width: ${String(responsiveBreakpoint)}px)`)\n const showCardView = enableResponsive && isBelowBreakpoint\n\n // Selection column definition - stable across renders\n const selectionColumn = React.useMemo<ColumnDef<TData> | null>(() => {\n if (!enableRowSelection) return null\n return {\n id: \"select\",\n header: ({ table }: { table: ReactTable<TData> }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n aria-label=\"Select all\"\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(!!value)\n }}\n />\n ),\n cell: ({ row }: { row: Row<TData> }) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(!!value)\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n }\n }, [enableRowSelection])\n\n // Row number column definition - stable across renders\n const rowNumberColumn = React.useMemo<ColumnDef<TData> | null>(() => {\n if (!enableRowNumbers) return null\n return {\n id: \"_row_number\",\n header: \"#\",\n cell: ({ row }: { row: Row<TData> }) => (\n <span className=\"text-muted-foreground tabular-nums text-right block text-xs\">\n {row.index + 1}\n </span>\n ),\n size: 50,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n enableColumnFilter: false,\n enableGlobalFilter: false,\n }\n }, [enableRowNumbers])\n\n // --- URL state (must be called before useDataTable to provide initial values) ---\n const urlState = useDataTableUrlState({\n enabled: enableUrlState,\n prefix: urlStatePrefix,\n })\n\n // Merge URL initial values into props when enableUrlState is active\n const mergedProps = React.useMemo(() => {\n if (!enableUrlState) return props\n return {\n ...props,\n initialColumnFilters: props.initialColumnFilters ?? (urlState.initialColumnFilters.length > 0 ? urlState.initialColumnFilters : undefined),\n initialGlobalFilter: props.initialGlobalFilter ?? (urlState.initialGlobalFilter || undefined),\n initialPagination: props.initialPagination ?? (urlState.initialPagination.pageIndex > 0 || urlState.initialPagination.pageSize !== 10\n ? urlState.initialPagination\n : undefined),\n initialSorting: props.initialSorting ?? (urlState.initialSorting.length > 0 ? urlState.initialSorting : undefined),\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- URL initial values are stable (computed once from URL on mount)\n }, [enableUrlState])\n\n // --- Core table hook ---\n const {\n cancelEdit,\n columnVirtualizer,\n currentAdvancedFilter,\n debouncedFilterUpdate,\n editError,\n editingCell,\n editValue,\n focusedCell,\n getPinnedAttribute,\n getPinnedStyles,\n handleAdvancedFilterChange,\n handleCellFocus,\n handleCopy,\n handleExport,\n handleKeyDown,\n hasFooter,\n pagination,\n rowVirtualizer,\n scrollContainerRef,\n searchDisplayValue,\n setEditInputRef,\n setEditValue,\n setInternalPagination,\n setSearchDisplayValue,\n startEdit,\n submitEdit,\n table,\n tableColumns,\n tableRef,\n } = useDataTable(mergedProps, selectionColumn, rowNumberColumn)\n\n // --- Advanced hooks (must be called before any early return) ---\n\n // Undo/redo history — hooks register keyboard shortcuts internally\n const historyOnApply = React.useCallback(\n (entry: { columnId: string; newValue: unknown; oldValue: unknown; rowId: string }, direction: \"redo\" | \"undo\") => {\n if (!onUndoRedo) return\n const value = direction === \"undo\" ? entry.oldValue : entry.newValue\n onUndoRedo({ columnId: entry.columnId, rowId: entry.rowId, value }, direction)\n },\n [onUndoRedo]\n )\n const _history = useDataTableHistory({\n containerRef,\n onApply: enableUndoRedo ? historyOnApply : undefined,\n })\n\n const cellSelection = useDataTableCellSelection({\n colCount: table.getVisibleLeafColumns().length,\n enabled: enableCellSelection,\n onSelectionChange: onCellSelectionChange,\n rowCount: table.getRowModel().rows.length,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function -- fallback for disabled onLoadMore\n const noop = React.useCallback(() => {}, [])\n const infiniteScroll = useDataTableInfiniteScroll({\n enabled: enableInfiniteScroll,\n hasNextPage,\n isFetching,\n onLoadMore: onLoadMore ?? noop,\n })\n\n const { handlePaste } = useDataTablePaste({\n enabled: enablePaste,\n focusedCell,\n onPaste,\n table,\n })\n\n const _rowEditing = useDataTableRowEditing<TData>({\n enabled: enableRowEditing,\n onRowEdit,\n onRowEditCancel,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- wired to cellSelection; no UI consumer yet\n const batchEditing = useDataTableBatchEditing({\n enabled: enableBatchEditing,\n selectedCells: cellSelection.getSelectedCells().map((c) => ({ col: c.colIndex, row: c.rowIndex })),\n table,\n })\n\n const rowReordering = useDataTableRowReordering({\n enabled: props.enableRowReordering ?? false,\n onRowReorder: onRowReorder ? (params: { fromIndex: number; toIndex: number }) => { onRowReorder(params.fromIndex, params.toIndex); } : undefined,\n })\n\n // Sync table state back to URL when enableUrlState is active.\n // Extract state slices into variables so react-hooks/exhaustive-deps can\n // statically verify the dependency array.\n const tableState = table.getState()\n const currentSorting = tableState.sorting\n const currentPagination = tableState.pagination\n const currentColumnFilters = tableState.columnFilters\n const currentGlobalFilter = tableState.globalFilter as string\n const urlUpdateUrl = urlState.updateUrl\n /* eslint-disable react-you-might-not-need-an-effect/no-pass-data-to-parent -- syncs to browser URL, not a parent component */\n React.useEffect(() => {\n if (!enableUrlState) return\n urlUpdateUrl({\n columnFilters: currentColumnFilters,\n globalFilter: currentGlobalFilter,\n pagination: currentPagination,\n sorting: currentSorting,\n })\n }, [enableUrlState, urlUpdateUrl, currentSorting, currentPagination, currentColumnFilters, currentGlobalFilter])\n /* eslint-enable react-you-might-not-need-an-effect/no-pass-data-to-parent */\n\n // Print handler\n const handlePrint = React.useCallback(() => {\n window.print()\n }, [])\n\n // Find bar keyboard shortcut (Ctrl/Cmd+F)\n React.useEffect(() => {\n if (!enableFind) return\n\n function handleFindKeyDown(e: KeyboardEvent) {\n const isCtrlOrMeta = e.ctrlKey || e.metaKey\n if (isCtrlOrMeta && e.key === \"f\" && containerRef.current?.contains(document.activeElement)) {\n e.preventDefault()\n setFindBarOpen(true)\n }\n }\n\n document.addEventListener(\"keydown\", handleFindKeyDown)\n return () => {\n document.removeEventListener(\"keydown\", handleFindKeyDown)\n }\n }, [enableFind])\n\n const handleFindBarClose = React.useCallback(() => {\n setFindBarOpen(false)\n }, [])\n\n // --- Early returns for loading/error/empty states ---\n if (loading || error || data.length === 0) {\n return (\n <DataTableEmptyState\n className={className}\n emptyState={emptyState}\n error={error}\n errorState={errorState}\n loading={loading}\n loadingComponent={loadingComponent}\n />\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={cn(dataTableVariants({ density }), \"relative\", className)}\n data-slot=\"data-table\"\n >\n {/* Toolbar - hidden on print */}\n <div className=\"print:hidden\">\n <DataTableToolbar\n advancedFilterColumns={advancedFilterColumns}\n columns={enableColumnVisibility ? (table.getAllLeafColumns() as Column<unknown>[]) : undefined}\n currentAdvancedFilter={currentAdvancedFilter}\n debouncedFilterUpdate={debouncedFilterUpdate}\n density={density}\n enableAdvancedFilter={enableAdvancedFilter}\n enableColumnVisibility={enableColumnVisibility}\n enableDensityToggle={enableDensityToggle}\n enableExport={enableExport}\n enableFiltering={enableFiltering}\n enablePrint={enablePrint}\n enableSearch={enableSearch}\n exportFormats={exportFormats}\n filterPresets={filterPresets}\n searchDisplayValue={searchDisplayValue}\n searchPlaceholder={searchPlaceholder}\n setSearchDisplayValue={setSearchDisplayValue}\n onAdvancedFilterChange={handleAdvancedFilterChange}\n onDeleteFilterPreset={onDeleteFilterPreset}\n onDensityChange={handleDensityChange}\n onExport={handleExport}\n onPrint={handlePrint}\n onSaveFilterPreset={onSaveFilterPreset}\n />\n </div>\n\n {/* Find Bar - hidden on print */}\n {enableFind && (\n <div className=\"print:hidden\">\n <DataTableFindBar\n open={findBarOpen}\n tableRef={tableRef}\n onClose={handleFindBarClose}\n />\n </div>\n )}\n\n {/* Filter Chips - hidden on print */}\n {enableFilterChips && (\n <div className=\"print:hidden\">\n <DataTableFilterChips table={table} />\n </div>\n )}\n\n {/* Bulk Actions - hidden on print */}\n {bulkActions && bulkActions.length > 0 && enableRowSelection && (\n <div className=\"print:hidden\">\n <DataTableBulkActions\n actions={bulkActions}\n table={table}\n />\n </div>\n )}\n\n {/* Responsive Card View */}\n {showCardView ? (\n <DataTableCardView\n rowClassName={rowClassName}\n table={table}\n onRowClick={onRowClick}\n />\n ) : (\n /* Table View */\n <div\n ref={enableVirtualization || enableColumnVirtualization ? scrollContainerRef : undefined}\n style={\n (enableVirtualization || enableColumnVirtualization || enableStickyHeader) && maxHeight\n ? {\n maxHeight: typeof maxHeight === \"number\" ? `${String(maxHeight)}px` : maxHeight,\n overflow: \"auto\",\n }\n : undefined\n }\n className=\"rounded-md border print:border-none print:w-full print:max-h-none print:overflow-visible\"\n data-slot=\"data-table-container\"\n >\n <Table\n ref={tableRef}\n aria-colcount={enableKeyboardNavigation ? table.getVisibleLeafColumns().length : undefined}\n aria-rowcount={enableKeyboardNavigation ? table.getRowModel().rows.length + 1 : undefined}\n role={enableKeyboardNavigation ? \"grid\" : undefined}\n onCopy={enableClipboard ? handleCopy : undefined}\n onKeyDown={enableKeyboardNavigation ? handleKeyDown : undefined}\n onPaste={enablePaste ? handlePaste : undefined}\n >\n <DataTableHeader\n columnVirtualizer={enableColumnVirtualization ? columnVirtualizer : undefined}\n enableColumnFilters={enableColumnFilters}\n enableColumnMenu={enableColumnMenu}\n enableColumnOrdering={enableColumnOrdering}\n enableColumnPinning={enableColumnPinning}\n enableColumnResizing={enableColumnResizing}\n enableColumnVisibility={enableColumnVisibility}\n enableGrouping={enableGrouping}\n enableSorting={props.enableSorting ?? true}\n enableStickyHeader={enableStickyHeader}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n renderColumnFilter={renderColumnFilter as DataTableHeaderProps<TData>[\"renderColumnFilter\"]}\n table={table}\n />\n <DataTableBody\n cancelEdit={cancelEdit}\n cellClassName={cellClassName}\n columnVirtualizer={enableColumnVirtualization ? columnVirtualizer : undefined}\n containerRef={containerRef}\n contextMenuItems={contextMenuItems}\n dragHandleProps={rowReordering.dragHandleProps}\n editError={editError}\n editingCell={editingCell}\n editTrigger={editTrigger}\n editValue={editValue}\n enableColumnPinning={enableColumnPinning}\n enableEditing={enableEditing}\n enableGrouping={enableGrouping}\n enableKeyboardNavigation={enableKeyboardNavigation}\n enableRowAnimation={enableRowAnimation && !enableVirtualization}\n enableRowColumnSpanning={enableRowColumnSpanning}\n enableRowReordering={props.enableRowReordering ?? false}\n enableRowSelection={enableRowSelection}\n enableSearchHighlight={enableSearchHighlight}\n enableStriping={enableStriping}\n enableVirtualization={enableVirtualization}\n focusedCell={focusedCell}\n getPinnedAttribute={getPinnedAttribute}\n getPinnedStyles={getPinnedStyles}\n globalFilter={enableSearchHighlight ? table.getState().globalFilter as string : undefined}\n handleCellFocus={handleCellFocus}\n hasFooter={hasFooter}\n renderSubComponent={renderSubComponent}\n rowClassName={rowClassName}\n rowVirtualizer={enableVirtualization ? rowVirtualizer : undefined}\n setEditInputRef={setEditInputRef}\n setEditValue={setEditValue}\n startEdit={startEdit}\n submitEdit={submitEdit}\n table={table}\n tableColumns={tableColumns}\n onRowClick={onRowClick}\n />\n {enableTrailingRow && onAddRow && (\n <tfoot>\n <DataTableTrailingRow\n columns={tableColumns}\n onAdd={onAddRow}\n />\n </tfoot>\n )}\n </Table>\n\n {/* Fill handle for drag-to-fill */}\n {enableFillHandle && onCellFill && focusedCell && (\n <DataTableFillHandle\n position={focusedCell}\n tableRef={tableRef}\n onFill={onCellFill}\n />\n )}\n\n {/* Infinite scroll sentinel */}\n {enableInfiniteScroll && (\n <div\n ref={infiniteScroll.sentinelRef}\n aria-hidden=\"true\"\n style={{ height: 1 }}\n />\n )}\n </div>\n )}\n\n {/* Pagination - hidden when virtualization is active, hidden on print */}\n {enablePagination && !enableVirtualization && !showCardView && (\n <div className=\"print:hidden\">\n <DataTablePagination\n enableRowSelection={enableRowSelection}\n pageSizeOptions={pageSizeOptions}\n pagination={pagination}\n setInternalPagination={setInternalPagination}\n table={table}\n onPaginationChange={onPaginationChange}\n />\n </div>\n )}\n\n {/* Status Bar - hidden on print */}\n {enableStatusBar && (\n <div className=\"print:hidden\">\n <DataTableStatusBar\n enableRowSelection={enableRowSelection}\n items={statusBarItems}\n table={table}\n />\n </div>\n )}\n\n {/* Side Panel */}\n {enableSidePanel && (\n <DataTableSidePanel\n open={sidePanelOpen}\n onClose={() => { setSidePanelOpen(false); }}\n >\n {sidePanelContent}\n </DataTableSidePanel>\n )}\n\n {/* Screen reader announcements */}\n <div aria-atomic=\"true\" aria-live=\"polite\" className=\"sr-only\">\n {table.getFilteredRowModel().rows.length} rows\n {enableRowSelection && table.getFilteredSelectedRowModel().rows.length > 0\n ? `, ${String(table.getFilteredSelectedRowModel().rows.length)} selected`\n : \"\"}\n </div>\n </div>\n )\n}\n\nexport { DataTable }\n","import { Check, Star, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\n\n// ---- Progress Cell ----\n\ninterface DataTableProgressCellProps {\n className?: string\n max?: number\n value: number\n}\n\nfunction DataTableProgressCell({\n className,\n max = 100,\n value,\n}: DataTableProgressCellProps) {\n const percent = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <div className=\"h-2 w-full rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-primary transition-all\"\n style={{ width: `${String(percent)}%` }}\n />\n </div>\n <span className=\"w-8 text-right text-xs tabular-nums text-muted-foreground\">\n {Math.round(percent)}%\n </span>\n </div>\n )\n}\n\n// ---- Rating Cell ----\n\ninterface DataTableRatingCellProps {\n className?: string\n max?: number\n value: number\n}\n\nfunction DataTableRatingCell({\n className,\n max = 5,\n value,\n}: DataTableRatingCellProps) {\n return (\n <div className={cn(\"flex items-center gap-0.5\", className)}>\n {Array.from({ length: max }, (_, i) => (\n <Star\n key={i}\n className={cn(\n \"size-3.5\",\n i < value\n ? \"fill-yellow-400 text-yellow-400\"\n : \"text-muted-foreground/30\"\n )}\n />\n ))}\n </div>\n )\n}\n\n// ---- Currency Cell ----\n\ninterface DataTableCurrencyCellProps {\n className?: string\n currency?: string\n locale?: string\n value: number\n}\n\nfunction DataTableCurrencyCell({\n className,\n currency = \"USD\",\n locale = \"en-US\",\n value,\n}: DataTableCurrencyCellProps) {\n const formatted = new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(value)\n\n return <span className={cn(\"tabular-nums\", className)}>{formatted}</span>\n}\n\n// ---- Boolean Cell ----\n\ninterface DataTableBooleanCellProps {\n className?: string\n value: boolean\n}\n\nfunction DataTableBooleanCell({\n className,\n value,\n}: DataTableBooleanCellProps) {\n return value ? (\n <Check className={cn(\"size-4 text-green-600\", className)} />\n ) : (\n <X className={cn(\"size-4 text-muted-foreground\", className)} />\n )\n}\n\n// ---- Date Cell ----\n\ninterface DataTableDateCellProps {\n className?: string\n format?: \"date\" | \"datetime\" | \"relative\" | \"time\"\n /** Reference time for relative format (defaults to mount time) */\n now?: number\n value: Date | string\n}\n\nfunction DataTableDateCell({\n className,\n format = \"date\",\n now,\n value,\n}: DataTableDateCellProps) {\n const date = value instanceof Date ? value : new Date(value)\n // Capture reference time once on mount to avoid impure Date.now() during render\n const [mountTime] = React.useState(() => Date.now())\n const referenceTime = now ?? mountTime\n\n let formatted: string\n if (format === \"relative\") {\n const rtf = new Intl.RelativeTimeFormat(\"en\", { numeric: \"auto\" })\n const diffMs = date.getTime() - referenceTime\n const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24))\n if (Math.abs(diffDays) < 1) {\n const diffHours = Math.round(diffMs / (1000 * 60 * 60))\n formatted = rtf.format(diffHours, \"hour\")\n } else {\n formatted = rtf.format(diffDays, \"day\")\n }\n } else {\n const options: Intl.DateTimeFormatOptions =\n format === \"datetime\"\n ? { dateStyle: \"medium\", timeStyle: \"short\" }\n : format === \"time\"\n ? { timeStyle: \"short\" }\n : { dateStyle: \"medium\" }\n formatted = new Intl.DateTimeFormat(\"en-US\", options).format(date)\n }\n\n return <span className={cn(\"text-sm\", className)}>{formatted}</span>\n}\n\nexport {\n DataTableBooleanCell,\n DataTableCurrencyCell,\n DataTableDateCell,\n DataTableProgressCell,\n DataTableRatingCell,\n}\n\nexport type {\n DataTableBooleanCellProps,\n DataTableCurrencyCellProps,\n DataTableDateCellProps,\n DataTableProgressCellProps,\n DataTableRatingCellProps,\n}\n"]}
|