{"_id":"@alphinex/table","_rev":"13-0f1cfeaee2c45e55c33d4bdb2f254ee6","name":"@alphinex/table","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@alphinex/table","version":"1.0.0","license":"UNLICENSED","_id":"@alphinex/table@1.0.0","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"870dca145d0a09dcfa4acbc29665499f07f1e535","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.0.0.tgz","fileCount":5,"integrity":"sha512-LYKfi6AM0chg38/taPh9HplqfbL92of+BJD/A/5Z5C7KIuvy1XVWUF7CfiBJnu+UFzFdO63Q6p1tAFEg7paesQ==","signatures":[{"sig":"MEQCIBNar1WZZkwxmO96qAcQHlI4YQXNnWu6Ja/sVzz+pmsgAiBie0K9UEywjYb/GmS+Y9r7lVQRhawnkc9v76mPk67aug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"1.0.0","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.0","@alphinex/icons":"1.0.0","@alphinex/theme":"1.0.0","@alphinex/utils":"1.0.0","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.0.0_1785852484905_0.8131170296027515","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alphinex/table","version":"1.0.1","license":"UNLICENSED","_id":"@alphinex/table@1.0.1","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"add03f36f37a5f63749883d2efc03f0062f69df5","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.0.1.tgz","fileCount":5,"integrity":"sha512-7SiQbtJfM0e21gkCGxUFsLwSmCULeIMk27yJuplKIjlK/QcKSkPHBiFiVN6kLjXE7F7iddEKyHYml7a17qKw0A==","signatures":[{"sig":"MEUCIQDROvafmxIq5QFHDWI3g1hyaB7++zzuzvz4CaAcsBU4xgIgMMQ7hubH7wgWjzRhBCDpSvoch+52T5IPr2hC3KPcH0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.0.0","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.0","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.0.1_1785858426498_0.6614857539111489","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alphinex/table","version":"1.0.2","license":"UNLICENSED","_id":"@alphinex/table@1.0.2","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"860e85dba058eedecd747382c00a627715d5a339","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.0.2.tgz","fileCount":5,"integrity":"sha512-f/5RdJ96OuXtAphS+m92EkTIf28KYUgALI5HfQ7qryklB7jqyUAbH5AxTBaGDxEZ+NMKlIhlwYm6ZsJpsRPyPQ==","signatures":[{"sig":"MEYCIQDuOU3Ov4Fy9Tc+cCwXkXY4pjpTQplAEaFn6poFm+fuWgIhANMJTYs0vrJTtxE90isU3k9YKVRkbnyuTX3bjjHh3fOh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.1.0","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.0","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.0.2_1785896122382_0.034611240318948466","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alphinex/table","version":"1.0.3","license":"UNLICENSED","_id":"@alphinex/table@1.0.3","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"4d863316a561690fef55d855046e02c16696063d","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.0.3.tgz","fileCount":5,"integrity":"sha512-3eyo/JFeNAz5k1oijnArRPdv427zxW+leBJtS8vWo0vcRE8Y339f2rifSsvayJz5mibapYLQ7n+axEul2FmsOA==","signatures":[{"sig":"MEUCIGyf9L5xn1sTBPQQDrSTSjbbXBr8ZJ2NI82f5+VWWUDoAiEAoOYQCnwKq2EhFipNmxxfxFr0pd1jy+q07el4x++J+Cs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.1.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.0.3_1785938261219_0.14710635406671924","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@alphinex/table","version":"1.0.4","license":"UNLICENSED","_id":"@alphinex/table@1.0.4","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"569b44be9c427885713a92bfa7e451781a3c7451","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.0.4.tgz","fileCount":5,"integrity":"sha512-++oTdZ9uQ2Ly8kqht/uSlmRiItc5y5skTMNtvq1+hHsF3duPbPN/MlmXIzid663Dh4th8J9M6tg2okflpCjOkA==","signatures":[{"sig":"MEYCIQCJxm5rdlgunSI8ad8vUToYiH/WCL6H3PNIr0+LWhotCgIhALxZoLqCR99Fqxrmusm3ztHRUTTzGwVF8x4ixEQmvqc1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52893},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.2.0","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.0.4_1786003933120_0.6665855913226693","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alphinex/table","version":"1.1.0","license":"UNLICENSED","_id":"@alphinex/table@1.1.0","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"85b8a043bf4253b78f88dfa02aba8902a71beb3b","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.0.tgz","fileCount":5,"integrity":"sha512-CU9q4bIObj9AbQKe6Y19kXNWcfRIrQ/mTYddkhHB/0CRBp9GP0PFtT40QZYL79aGXhytap2UbhzmHUwSbxTr3g==","signatures":[{"sig":"MEUCIQCSfnC3TT3rsZx+K3hZifWRtnS6XoJqo8EDdPTmnUfMPwIgTXUsCW4GlvGeZQPDobTVgRNqKuqCsvD/GU0G1jCrP+U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.3.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.0_1786200452140_0.27492327966103014","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alphinex/table","version":"1.1.1","license":"UNLICENSED","_id":"@alphinex/table@1.1.1","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"8c1a75e175291d34b1bb95b1788dee5447169420","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.1.tgz","fileCount":5,"integrity":"sha512-FAClzh7LHq3cEmfqNUDk/pmz4dAnF35LxEhOX6pml8t5w4WZ+k7H48YHQN4Xq4wpBtHZMDr4ULbLyLHlXIoUyw==","signatures":[{"sig":"MEQCIGNWb+ivxo+l1JcYwMQbVjOzAO4Yo8cDBDi44z8jIxPNAiAeYrlqHE30tKOhsUTbog/sbg2ZzoTYlqGghN64p2IEUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.4.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.1_1786218409737_0.04686021915457639","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alphinex/table","version":"1.1.2","license":"UNLICENSED","_id":"@alphinex/table@1.1.2","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"582187951f528bf405c28acc0f47bf1dcd513f19","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.2.tgz","fileCount":5,"integrity":"sha512-evVAhABFuKPAsNYMLmZG74Qpzt8ahZhJRl+4JxjNBuCk/1S6oi4LkDgoVtBQQNCK9IN2iexk5Juk76b82J46Jw==","signatures":[{"sig":"MEUCIQC6cJpWlaFxg7yoWcMSqxz6k22dkqtpZJejZxPYxEfTVQIgWt7GN/xkAiPwmL5/H6Np1H1Qf8UBx1Y/Cm0GTCAunQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.5.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.0.1","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.2_1786273321032_0.7847181732382034","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@alphinex/table","version":"1.1.3","license":"UNLICENSED","_id":"@alphinex/table@1.1.3","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"46e297c650a774c102ef7fe9a986e3c9c066a100","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.3.tgz","fileCount":5,"integrity":"sha512-sE7CA8OTR0+Swe/T6UNre/hW9JHjVJnBY7HD+kw5HDzvEUi0YilAIa16mGCKJehN6Gwca5ikfEh1vwodOpg4YQ==","signatures":[{"sig":"MEUCIQCO9q8eM6I7qbhGOcFhRANYH8qV924vuQLg4ID3eJsukQIgFXIKiDpQ/2EmtPuGCUM2nX2rWpxfqHhVB4Ax5Wr+yMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.5.1","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.1","@alphinex/icons":"1.1.0","@alphinex/theme":"1.1.0","@alphinex/utils":"1.0.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.3_1786298617622_0.4340113077312244","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@alphinex/table","version":"1.1.4","license":"UNLICENSED","_id":"@alphinex/table@1.1.4","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"feed24e11e2228ff076feb242fb4d06191b5ca17","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.4.tgz","fileCount":5,"integrity":"sha512-8HiBCd2biO4Yis2UN8YwN3Tot3IWQuC0yFAcryTIdr1Lyo7cwBQ8fD9+wrccWqQusDd8GjNqIPe1aSl2pXthYA==","signatures":[{"sig":"MEUCIQCeRIHFZnDS9EvbfoJnb6GmLxobxUBehAo+Qms6vqPn5QIgauiUBQbCXfcHt6+i7Nh6+nSZ0DlToEtzje5jD7U0XWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.6.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.2","@alphinex/icons":"1.2.0","@alphinex/theme":"1.1.0","@alphinex/utils":"1.1.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.4_1786525496972_0.5034701298981579","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@alphinex/table","version":"1.1.5","license":"UNLICENSED","_id":"@alphinex/table@1.1.5","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"bdaef10986be436d8d5fdf59a00c068a05506592","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.1.5.tgz","fileCount":5,"integrity":"sha512-6rV58bqwDyNpb9N2Iy355pdkphxFcjljlqvVI/wBKJFC6xQRYXA78LehBvYKhM99p5PZmV2/s1c6piCFLk610g==","signatures":[{"sig":"MEQCICf4a54ZqgSUFL04OVtYDGmCNazwEBlhZKBV71E+op6oAiBMYRmX+xzatkQF/ls8K37TmvdDEgtN7++yfh+z2Tf/bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.7.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.2","@alphinex/icons":"1.2.0","@alphinex/theme":"1.1.0","@alphinex/utils":"1.1.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"0.0.0","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.1.5_1786546541027_0.32394880408780113","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@alphinex/table","version":"1.2.0","license":"UNLICENSED","_id":"@alphinex/table@1.2.0","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"dist":{"shasum":"4b40d6d488a5c96cc058e1a2dd6c9f2cb641e5cf","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.2.0.tgz","fileCount":5,"integrity":"sha512-y8PNg8Sjg59uhNQKYmfaMbSQhdWo6ShZHPQWSJ1cf7Sul8CJvTPgX7zVsslEzs0kPutyyJH+nfeih2xeOIdXcQ==","signatures":[{"sig":"MEYCIQCIl9rZef0ATFsYev8GUMdS4dW2TnMZG/zbg7oNiaUaLAIhAKN1C/PzMKJ6stBB+TF+EeJUn8nXxrnDTfEje34Rbuhr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"private":false,"scripts":{"dev":"vite build --watch","lint":"eslint .","test":"vitest run","build":"vite build","clean":"rimraf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"description":"Enterprise DataGrid: headless engine + styled renderer.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@alphinex/ui":"2.7.0","@dnd-kit/core":"^6.3.1","@alphinex/core":"1.0.0","@alphinex/hooks":"1.0.2","@alphinex/icons":"1.2.0","@alphinex/theme":"1.1.0","@alphinex/utils":"1.1.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.1","vite":"^6.0.5","jsdom":"^25.0.1","react":"^19.0.0","eslint":"^9.17.0","vitest":"^2.1.8","react-dom":"^19.0.0","typescript":"^5.7.2","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@vitejs/plugin-react":"^4.3.4","@alphinex/build-config":"0.0.0","@testing-library/react":"^16.1.0","@alphinex/eslint-config":"1.0.1","@testing-library/jest-dom":"^6.6.3","@alphinex/typescript-config":"0.0.0","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"zod":"^3.24.1","react":"^19.0.0","react-dom":"^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/table_1.2.0_1786638716841_0.6900587607398077","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@alphinex/table","version":"1.2.1","private":false,"description":"Enterprise DataGrid: headless engine + styled renderer.","license":"UNLICENSED","type":"module","sideEffects":false,"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"dependencies":{"@tanstack/react-table":"^8.20.5","@tanstack/react-virtual":"^3.11.2","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@alphinex/core":"1.0.0","@alphinex/theme":"1.1.0","@alphinex/ui":"2.7.0","@alphinex/icons":"1.2.0","@alphinex/utils":"1.1.0","@alphinex/hooks":"1.0.2"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","zod":"^3.24.1"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false},"zod":{"optional":false}},"devDependencies":{"typescript":"^5.7.2","vite":"^6.0.5","vitest":"^2.1.8","react":"^19.0.0","react-dom":"^19.0.0","zod":"^3.24.1","@types/react":"^19.0.2","@types/react-dom":"^19.0.2","@testing-library/react":"^16.1.0","@testing-library/jest-dom":"^6.6.3","@testing-library/user-event":"^14.5.2","@vitejs/plugin-react":"^4.3.4","jsdom":"^25.0.1","eslint":"^9.17.0","@alphinex/eslint-config":"1.0.1","@alphinex/build-config":"0.0.0","@alphinex/typescript-config":"0.0.0"},"scripts":{"build":"vite build","dev":"vite build --watch","lint":"eslint .","typecheck":"tsc --noEmit","test":"vitest run","clean":"rimraf dist .turbo"},"_nodeVersion":"22.14.0","_id":"@alphinex/table@1.2.1","dist":{"integrity":"sha512-4vl4BEEbIgW8xLFbvdPcEzlDgeloQaXpLgS+15uikHbUWosaTfyaPF5nLa0yFsd2pzCbtvZK30JD0jE/mFMeVw==","shasum":"4a79cfde0b6d619e849faddbc350d85dcdf07077","tarball":"https://registry.npmjs.org/@alphinex/table/-/table-1.2.1.tgz","fileCount":5,"unpackedSize":97931,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDnqpsAFanAwferP+XrgQvbD1pVQFK46Ey22Ty7E0WFiQIhAJ3jsYg9dSZnIkNF7ls09uq12cbt3/X4lW7wxqQny/XE"}]},"_npmUser":{"name":"anasaliqureshi","email":"anas@alphinex.com"},"directories":{},"maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/table_1.2.1_1786639272544_0.537226383610212"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T14:08:04.714Z","modified":"2026-08-13T16:41:12.967Z","1.0.0":"2026-08-04T14:08:05.061Z","1.0.1":"2026-08-04T15:47:06.712Z","1.0.2":"2026-08-05T02:15:22.576Z","1.0.3":"2026-08-05T13:57:41.360Z","1.0.4":"2026-08-06T08:12:13.265Z","1.1.0":"2026-08-08T14:47:32.287Z","1.1.1":"2026-08-08T19:46:49.921Z","1.1.2":"2026-08-09T11:02:01.187Z","1.1.3":"2026-08-09T18:03:37.772Z","1.1.4":"2026-08-12T09:04:57.173Z","1.1.5":"2026-08-12T14:55:41.153Z","1.2.0":"2026-08-13T16:31:56.979Z","1.2.1":"2026-08-13T16:41:12.711Z"},"license":"UNLICENSED","description":"Enterprise DataGrid: headless engine + styled renderer.","maintainers":[{"name":"anasaliqureshi","email":"anas@alphinex.com"}],"readme":"# @alphinex/table\n\nEnterprise DataGrid: a headless `useDataGrid()` engine — a thin, opinionated wrapper over\n[TanStack Table](https://tanstack.com/table) (see ADR-0003) — plus `<DataGrid>`, the styled\nrenderer built on top of it, complete with toolbar, pagination, column-visibility, and row\nselection. `useDataGrid()` returns the real TanStack `Table<TData>` instance, so anything\nTanStack Table exposes is available if you want to build fully custom rendering instead of\nusing `<DataGrid>`.\n\n## `useDataGrid`\n\nThe headless engine. Give it `data` and `columns` (standard TanStack `ColumnDef[]`) and it\nmanages sorting, column filters, a global filter, pagination, row selection, and column\nvisibility as internal state, wiring them into a `useReactTable()` instance:\n\n```tsx\nimport { useDataGrid, type ColumnDef } from \"@alphinex/table\";\nimport { flexRender } from \"@tanstack/react-table\";\n\ninterface Invoice {\n  id: string;\n  customer: string;\n  amount: number;\n}\n\nconst columns: ColumnDef<Invoice, unknown>[] = [\n  { accessorKey: \"id\", header: \"Invoice\" },\n  { accessorKey: \"customer\", header: \"Customer\" },\n  { accessorKey: \"amount\", header: \"Amount\" },\n];\n\nfunction CustomInvoiceTable({ data }: { data: Invoice[] }) {\n  const table = useDataGrid({ data, columns, defaultPageSize: 25 });\n\n  return (\n    <table>\n      <thead>\n        {table.getHeaderGroups().map((hg) => (\n          <tr key={hg.id}>\n            {hg.headers.map((header) => (\n              <th key={header.id} onClick={header.column.getToggleSortingHandler()}>\n                {flexRender(header.column.columnDef.header, header.getContext())}\n              </th>\n            ))}\n          </tr>\n        ))}\n      </thead>\n      <tbody>\n        {table.getRowModel().rows.map((row) => (\n          <tr key={row.id}>\n            {row.getVisibleCells().map((cell) => (\n              <td key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</td>\n            ))}\n          </tr>\n        ))}\n      </tbody>\n    </table>\n  );\n}\n```\n\nKey options (`UseDataGridOptions<TData>`):\n\n- `mode?: \"client\" | \"server\"` (default `\"client\"`) — in `\"server\"` mode, sorting/filtering/\n  pagination stop running locally (`manualSorting`/`manualFiltering`/`manualPagination`) and\n  `onQueryChange` fires with the current `{ sorting, columnFilters, globalFilter, pagination }`\n  whenever any of them changes, so the app can refetch.\n- `rowCount?: number` — total row count across all pages; required for correct pagination math\n  in `\"server\"` mode.\n- `selection?: \"none\" | \"single\" | \"multiple\"` (default `\"none\"`) — enables/limits TanStack's\n  row-selection state.\n- `getRowId?: (row, index) => string` and `defaultPageSize?: number` (default `10`).\n\n## `DataGrid`\n\nThe styled renderer: everything `useDataGrid()` leaves as an implementation detail, wired up\nwith `@alphinex/ui` primitives and semantic tokens. It renders as an ARIA grid over `div`s\n(not a native `<table>`, so rows can be virtualized reliably), auto-virtualizes once there are\nmore than ~50 rows, and includes a toolbar and pagination footer by default:\n\n```tsx\nimport { DataGrid } from \"@alphinex/table\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { Badge } from \"@alphinex/ui\";\nimport { formatCurrency } from \"@alphinex/utils\";\n\ninterface Invoice {\n  id: string;\n  customer: string;\n  amount: number;\n  status: \"paid\" | \"pending\" | \"overdue\";\n}\n\nconst columns: ColumnDef<Invoice, unknown>[] = [\n  { accessorKey: \"id\", header: \"Invoice\" },\n  { accessorKey: \"customer\", header: \"Customer\" },\n  {\n    accessorKey: \"amount\",\n    header: \"Amount\",\n    cell: ({ getValue }) => formatCurrency(getValue<number>()),\n  },\n  {\n    accessorKey: \"status\",\n    header: \"Status\",\n    cell: ({ getValue }) => <Badge size=\"sm\">{getValue<string>()}</Badge>,\n  },\n];\n\nfunction InvoiceGrid({ invoices }: { invoices: Invoice[] }) {\n  return (\n    <DataGrid\n      data={invoices}\n      columns={columns}\n      selection=\"multiple\"\n      defaultPageSize={10}\n      searchPlaceholder=\"Search invoices…\"\n    />\n  );\n}\n```\n\n`DataGridProps<TData>` extends `UseDataGridOptions<TData>` and adds rendering concerns:\n`isLoading?` (renders skeleton rows), `emptyState?` (node shown for zero rows), `virtualized?`\n(force on/off — default is auto above the 50-row threshold), `maxHeight?` (scroll-container\nheight while virtualized, default `\"24rem\"`), `toolbar?` (pass `false` to hide it, or a node to\nreplace the default `DataGridToolbar`), `searchPlaceholder?`, `pageSizeOptions?`, and\n`showPagination?` (pass `false` when the app paginates externally).\n\nColumn sorting comes for free: any column without `enableSorting: false` gets a clickable\nheader with a sort-direction chevron, driven by TanStack's `getToggleSortingHandler()`.\n\n## `DataGridToolbar`, `DataGridPagination`, `ColumnVisibilityMenu`\n\nThese are the pieces `<DataGrid>` composes internally — exported individually so you can reuse\nthem in a custom layout (e.g. next to `useDataGrid()`), or pass your own `toolbar` node to\n`<DataGrid>` while keeping the default pagination:\n\n```tsx\nimport {\n  useDataGrid,\n  DataGridToolbar,\n  DataGridPagination,\n  ColumnVisibilityMenu,\n} from \"@alphinex/table\";\n\nfunction CustomToolbarGrid({\n  data,\n  columns,\n}: {\n  data: Invoice[];\n  columns: ColumnDef<Invoice, unknown>[];\n}) {\n  const table = useDataGrid({ data, columns });\n\n  return (\n    <div>\n      <DataGridToolbar table={table} searchPlaceholder=\"Filter…\" />\n      {/* custom row rendering using `table` */}\n      <DataGridPagination table={table} pageSizeOptions={[10, 25, 50]} />\n    </div>\n  );\n}\n```\n\n`DataGridToolbar` renders a global-filter `Input` plus `ColumnVisibilityMenu` (a minimal\nanchored dropdown — not the general-purpose `@alphinex/ui` Menu, per ADR-0001 — that lists any\ncolumn with `enableHiding` not disabled and toggles it). `DataGridPagination` renders the\npage-size `Select`, page-count label, and previous/next buttons, driven by `table.previousPage()`\n/ `table.nextPage()` / `table.setPageSize()`.\n\n## `createSelectionColumn`\n\nBuilds the checkbox column `<DataGrid>` prepends when `selection` isn't `\"none\"`. It lives\noutside `useDataGrid()` deliberately: headless consumers building fully custom rendering add\ntheir own selection column (or don't) rather than getting one automatically.\n\n```tsx\nimport { createSelectionColumn } from \"@alphinex/table\";\n\nconst selectionColumn = createSelectionColumn<Invoice>(\"multiple\"); // or \"single\" / \"none\" (→ null)\nconst columnsWithSelection = selectionColumn ? [selectionColumn, ...columns] : columns;\n```\n\n## CSV export\n\n`DataGridToolbar` shows an \"Export CSV\" button by default (`enableCsvExport={false}` to hide it,\n`csvFilename` to name the download — both also available as `<DataGrid>` props). It exports the\ncurrently filtered/sorted rows for the currently visible columns, not just the current page:\n\n```tsx\n<DataGrid data={invoices} columns={columns} csvFilename=\"invoices.csv\" />\n```\n\nThe underlying pieces are exported too, if you want a custom export trigger:\n`exportTableToCsv(table, filename?)` (downloads directly) or `tableToCsv(table)` (just returns\nthe CSV string).\n\n## CSV import — `CsvImportDialog`\n\nA `Dialog` composite (Sprint 27) for CSV import with inline, per-row validation — see\n[ADR-0020](../../documentation/adr/0020-table-export-import-column-reorder.md) (CSV only, no\n`.xlsx` support yet):\n\n```tsx\nimport { CsvImportDialog } from \"@alphinex/table\";\nimport { z } from \"zod\";\n\nconst contactSchema = z.object({\n  Name: z.string().min(1, \"Name is required\"),\n  Role: z.enum([\"admin\", \"member\"]),\n});\n\n<CsvImportDialog\n  isOpen={isImportOpen}\n  onClose={() => setIsImportOpen(false)}\n  schema={contactSchema}\n  onImport={(rows) => saveContacts(rows)} // only the rows that passed validation\n/>;\n```\n\nThe schema's field names must match the CSV's header row. Rows that fail `schema.safeParse()`\nare listed inline with their row number and error message and excluded from `onImport` — this\npackage has no persistence opinion, `onImport` receives validated data and the app decides where\nit goes.\n\n## Column reorder\n\nDrag any column's grab handle in the `ColumnVisibilityMenu` (\"Columns\" button in the default\ntoolbar) to reorder it — uses `@dnd-kit/sortable`, the same library `@alphinex/kanban` already\nadopted (ADR-0011), wired through TanStack Table's `columnOrder` state. No extra setup needed —\nit's part of `useDataGrid()`/`<DataGrid>` already.\n\nSee [documentation/ARCHITECTURE.md](../../documentation/ARCHITECTURE.md) for the full package contract, dependency rules, and roadmap placement.\n","readmeFilename":""}