{"_id":"@atawi/react-datatable","_rev":"12-b0eb63e1920025bac67387e0420eb600","name":"@atawi/react-datatable","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@atawi/react-datatable","version":"1.0.0","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.0","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"d6d58a110634883be929b91bd31496d025d1380f","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.0.tgz","fileCount":112,"integrity":"sha512-wYQj2ewObrcj0j/kx0VOxMvPcg5Wo5LhIjRc9nKiqGFNpcZxx5KOPqSiiwe0jgFPQ3t6rCqBOa6oRJMxBJvCag==","signatures":[{"sig":"MEUCIQDDZsOojqca8vY720fQioxJ05loF9UPvjXFvOzuqMB5cgIgcWF4K2jALfpwfh3OR7Vyp5uBHk9BGsu8gcT7dqIsEvo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5800159},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"3130639145ff571072b2360b26382961e2241570","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.18.1","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.0_1734844105118_0.9546452997356387","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@atawi/react-datatable","version":"1.0.1","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.1","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"420d59cec08dd48b82ab6aa5aa3b69da69574405","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.1.tgz","fileCount":112,"integrity":"sha512-PUxOvv3qFSgdZHweSj5AXoSv9lcmzfK4wbpoy1Jcvf0z7M/ouqqbPcDnsnAHZeiyMz4/brXv6VhCLtOckMuM0A==","signatures":[{"sig":"MEUCIQC1/ezB2WeEIy4vjYggR/EP0oYxds4bZhWI/4wLP4PX0wIgQ2eJx2aZd/DM2YJ40Vo4lws080pSQIQdq9SzhVoPOZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5801609},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"afaf168222c61044c3912c41bbce8756e353915b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.18.2","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.1_1739595953180_0.8762040163683928","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@atawi/react-datatable","version":"1.0.2","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.2","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"468bf2538d614c3b539d0bc3efba430ee4639d6d","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.2.tgz","fileCount":112,"integrity":"sha512-xMuWm15PjHDZz3tDHcCfHaYD1XcOcy0jmiaBMtkRhhU3u5huKdtKLcw7j1h2FM2T9LOhfcVdgVqJGJuvX1pWbQ==","signatures":[{"sig":"MEUCIQDl8WMgpfF5sQEbz/gBhc+FeoYLxp60MBoIChuVx9qv3AIgdSgQbhU7YLMuNuQVBQyQX4tzuAS9AbVli5JL3/HugOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5803051},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"a42f68da2ffa2d8faa5ee15dc622efcbcfea97f2","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.18.2","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.2_1740457032552_0.38603723372798315","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@atawi/react-datatable","version":"1.0.3","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.3","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"0015f24391449f59a87cc69da798b27c698b9972","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.3.tgz","fileCount":112,"integrity":"sha512-UNxgsUZKhRVGxJ5QlBqbHHrXTIRFwdQfrNWp5gbJv8QCLV+nEqBdFnzU4zeKBrv5ZbyHy8NJ1jB/j6ty5atRDQ==","signatures":[{"sig":"MEQCIFOPnoELw64J1vMZ4Fqkbhzle5GH17LqDpgm1Mqv9rJ+AiAkL3VNjnsZGoUrbwUC7aVaYXRl3+mu4hFOfBCxxiiSBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5804239},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"c0044b627cb7904c2a25597125c2527c65a8bb9c","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.18.3","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.3_1741493183103_0.10298220160714222","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@atawi/react-datatable","version":"1.0.4","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.4","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"f8b1a2b67999e15642c27a0c7a8180d63308621d","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.4.tgz","fileCount":112,"integrity":"sha512-pWnlAJ+YAdCnLDJeOmGNWDxKr25hkl1+Bxp7Xv+YYjqUs6Xbj7MhMLte2wUJzlNjVURpFdj22S0NtTEn1V9ivA==","signatures":[{"sig":"MEQCIGA6pAdXox3WzE1hdJ1HqLOJLP3RfKx/koqPOuz3kFqDAiAlP7DSHX6DQ4VOkbqOZ0TbOSDYH3U5QnvwkYPBVti/sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5805118},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"a2d24a9d7a193c119c6706342642c6ec54cfb8e2","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.0","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.4_1743359598844_0.6713387191275977","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@atawi/react-datatable","version":"1.0.5","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.5","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"b8d5af1c63de4ccaa5a4e8e97d53952e87cec2be","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.5.tgz","fileCount":112,"integrity":"sha512-jA8laCx4b9saalfkO/2r0Fe44w26hY+Rd7RsmK886O2nWWCH0bbH9PeOhVralAN9vTKvPAHmfnL7AFWuzpExug==","signatures":[{"sig":"MEUCIEIf6XRhKAIa8OZhxkqbGlg2DqFCoWiBe//n/GhIZlGLAiEAvHQjm2JtUL5SErFZnyiA5HQ/NFVN/hVLW71cA55HjmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5806705},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"8d57df5601726ecaa9a923de60f47098ff97af18","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.0","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.5_1743391315462_0.8728863309060073","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@atawi/react-datatable","version":"1.0.6","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.6","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"59a69842ea39019150de0cff4cfebd68d9fdeb40","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.6.tgz","fileCount":112,"integrity":"sha512-4im6er7p3G8ajL6vmq6bFJ8L1x1WpEWVnmiAS5FA0mEbfCHNHFoCmYRR5JyJDQgEH9eegjPICoxd1OCXjo2+yg==","signatures":[{"sig":"MEQCICC0YE0spABHJo6N96FqpPhbZrMbAqwubEfuOfuvm9WYAiA2BAlIlDejOCGFXcos7XKNW5yLkiAElcutzVLT7ojAsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5806679},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css"},"gitHead":"e49b7997e90a2b81304e4fbf689a07dd6a7e9ad6","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.0","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.6_1745893384896_0.28351916768277174","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@atawi/react-datatable","version":"1.0.7","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.7","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"eca584d7cde240fe05ed159782127cc7e902de71","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.7.tgz","fileCount":9,"integrity":"sha512-u8rFUBCeocB45xEcJ/mCYH1vdR5TIoj10TScHBEh+vZX3RJYAG0b1qLrIAJNNyiW6+Ztpm59/Kyoht7uFWzxIg==","signatures":[{"sig":"MEUCIQDiF7iqmF7FQG9V7RVptcJJMudLcSvxH4b9zkK+jISpzQIgLai3X5/r4i7lZ0maR91scAXFc3mHQzGw7rd66zkQr2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5833576},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css","./dist/style.css":"./dist/style.css"},"gitHead":"04cba8b927cfd354ee610b74a101992a46e3d79b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.4","dependencies":{"sass":"^1.71.1","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.7_1756793938934_0.15766989652692742","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@atawi/react-datatable","version":"1.0.8","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript"],"_id":"@atawi/react-datatable@1.0.8","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"3fab0e829c32594921a099d43a7cf926ccbbaea6","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.8.tgz","fileCount":9,"integrity":"sha512-q4XOJBudYYiwkzjN1WsXNq64Sr4fIB1g74LjYTcUfvAlQjNvgwoijivQgnycL2W512FwpZgvBsXJHXo1a3Aqcg==","signatures":[{"sig":"MEYCIQC6LJBL7t6dzAiiv+F1PfZG4dpADUm/5/Qae9qH/EUUVwIhAOElpfY9PVVOc2poBpDqYjzUNaQgx//xmAqKS90RHj5I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5833069},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css","./dist/style.css":"./dist/style.css"},"gitHead":"967048420be494398ce4b5939f18bd9d4be4a3d6","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.5","dependencies":{"sass":"^1.93.2","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.8_1758679296095_0.896226133525108","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@atawi/react-datatable","version":"1.0.9","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript","accessibility"],"_id":"@atawi/react-datatable@1.0.9","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"32303a9b8646bc1a1eb84adaf84a3f7d6568687c","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.0.9.tgz","fileCount":9,"integrity":"sha512-1CArOHrNRANINkdd8anPasKQCahyYOD+t3zCIFFV2HudLcIJ/EfHitRiDLu3BUfNVqOL0ibCiE8FAy/vFnMphA==","signatures":[{"sig":"MEYCIQDHoYEt7MuqbNrFm6wGdPM0n2zAksHKWUKmGYUpQ8eD0AIhAJcJkApEO78/ojgu7abfQMamF5QYujme4VPsSGMoAwSj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5847929},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css","./dist/style.css":"./dist/style.css"},"gitHead":"6d0ef0329f17c5e0ad1354204a98b7fb191a7925","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.5","dependencies":{"sass":"^1.93.2","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.0.9_1758854125561_0.4117290312352795","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@atawi/react-datatable","version":"1.1.0","keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript","accessibility"],"_id":"@atawi/react-datatable@1.1.0","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"dist":{"shasum":"7d4dc2e84bc611d0b871c0b75874b30a6a5d7876","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.1.0.tgz","fileCount":9,"integrity":"sha512-T9JlQPCOvhmiXzvECiV7icYwYJn+3WwSuSxdUCQng9Y7PSuEjLlLI2B8SOuSZuS6CiCD+tmfFPaW59TDGZMrow==","signatures":[{"sig":"MEUCIQCMsvzFFCOeSgBslXut2za8MlYAI5FHPsjr+xQu+sx2swIgbkSI+8PlaEcT02UEFVgk935lOMrYKTxLFLolqV2tCLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5857089},"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","require":"./dist/index.cjs"},"./style.css":"./dist/style.css","./dist/style.css":"./dist/style.css"},"gitHead":"35321b585795d281e5b74f346615a0829afc1903","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"tsc && vite build","preview":"vite preview","storybook":"storybook dev -p 6006","build:demo":"vite build --config vite.config.demo.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.19.5","dependencies":{"sass":"^1.93.2","xlsx":"^0.18.5","lodash":"^4.17.21","react-window":"^1.8.10","react-virtualized-auto-sizer":"^1.0.20"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.2","jsdom":"^24.0.0","react":"^18.3.1","eslint":"^9.9.1","vitest":"^1.3.1","globals":"^15.9.0","postcss":"^8.4.35","happy-dom":"^13.3.8","react-dom":"^18.3.1","storybook":"^7.6.17","@eslint/js":"^9.9.1","typescript":"^5.7.2","tailwindcss":"^3.4.1","@types/react":"^18.3.5","autoprefixer":"^10.4.18","@storybook/test":"^7.6.17","vite-plugin-dts":"^2.1.5","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@storybook/blocks":"^7.6.17","typescript-eslint":"^8.3.0","@types/react-window":"^1.8.8","@vitest/coverage-v8":"^1.3.1","@vitejs/plugin-react":"^4.3.1","@storybook/addon-a11y":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@testing-library/react":"^14.2.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-storybook":"^0.8.0","@testing-library/jest-dom":"^6.4.2","eslint-plugin-react-hooks":"^5.1.0-rc.0","@storybook/addon-essentials":"^7.6.17","@testing-library/user-event":"^14.5.2","eslint-plugin-react-refresh":"^0.4.11","@storybook/addon-interactions":"^7.6.17"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-datatable_1.1.0_1758918999375_0.7789795776173776","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@atawi/react-datatable","private":false,"version":"1.1.1","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs","types":"./dist/index.d.ts"},"./dist/style.css":"./dist/style.css","./style.css":"./dist/style.css"},"sideEffects":["**/*.css"],"scripts":{"dev":"vite","build":"tsc && vite build","build:demo":"vite build --config vite.config.demo.ts","lint":"eslint .","preview":"vite preview","test":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"dependencies":{"lodash":"^4.17.21","react-virtualized-auto-sizer":"^1.0.20","react-window":"^1.8.10","sass":"^1.93.2","xlsx":"^0.18.5"},"devDependencies":{"@eslint/js":"^9.9.1","@storybook/addon-a11y":"^7.6.17","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@storybook/addon-links":"^7.6.17","@storybook/blocks":"^7.6.17","@storybook/react":"^7.6.17","@storybook/react-vite":"^7.6.17","@storybook/test":"^7.6.17","@testing-library/jest-dom":"^6.4.2","@testing-library/react":"^14.2.1","@testing-library/user-event":"^14.5.2","@types/react":"^18.3.5","@types/react-dom":"^18.3.0","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.3.1","@vitest/coverage-v8":"^1.3.1","autoprefixer":"^10.4.18","eslint":"^9.9.1","eslint-plugin-jsx-a11y":"^6.8.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.11","eslint-plugin-storybook":"^0.8.0","globals":"^15.9.0","happy-dom":"^13.3.8","jsdom":"^24.0.0","postcss":"^8.4.35","react":"^18.3.1","react-dom":"^18.3.1","storybook":"^7.6.17","tailwindcss":"^3.4.1","typescript":"^5.7.2","typescript-eslint":"^8.3.0","vite":"^5.4.2","vite-plugin-dts":"^2.1.5","vitest":"^1.3.1"},"keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript","accessibility"],"_id":"@atawi/react-datatable@1.1.1","gitHead":"bb7d2c79256c6a905ad7ea85a0becebc98a638ac","description":"![](https://github.com/AhmedAlatawi/react-datatable/actions/workflows/ci.yml/badge.svg) [![codecov](https://codecov.io/github/ahmedalatawi/react-datatable/graph/badge.svg?token=95A4BRXOT5)](https://codecov.io/github/ahmedalatawi/react-datatable) [![Licens","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-m5S5uUR20ScYB9nfgya+PijIkT7ZZkEEkfsi/Lb0wRMYhgdRDOVSi3GkOXLXvvrrmbnRJmgKcc8obs9+VkzHAg==","shasum":"717e0358ba33c0f0506f679a6aa5c31fdfb74c1c","tarball":"https://registry.npmjs.org/@atawi/react-datatable/-/react-datatable-1.1.1.tgz","fileCount":10,"unpackedSize":5932153,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFFzIgu6BMrPhVd5uHVXuGVIdmy6SyEBU6HZowtn/fTUAiA/nJ9YFQRANjh05+GTZMFOoAY5tYOHzL14JedEu1vJ/Q=="}]},"_npmUser":{"name":"ahmed757","email":"aalat001@gmail.com"},"directories":{},"maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-datatable_1.1.1_1761283322692_0.6370319352054505"},"_hasShrinkwrap":false}},"time":{"created":"2024-12-22T05:08:24.987Z","modified":"2025-10-24T05:22:03.190Z","1.0.0":"2024-12-22T05:08:25.304Z","1.0.1":"2025-02-15T05:05:53.436Z","1.0.2":"2025-02-25T04:17:12.778Z","1.0.3":"2025-03-09T04:06:23.362Z","1.0.4":"2025-03-30T18:33:19.055Z","1.0.5":"2025-03-31T03:21:55.712Z","1.0.6":"2025-04-29T02:23:05.183Z","1.0.7":"2025-09-02T06:18:59.178Z","1.0.8":"2025-09-24T02:01:36.444Z","1.0.9":"2025-09-26T02:35:25.861Z","1.1.0":"2025-09-26T20:36:39.561Z","1.1.1":"2025-10-24T05:22:02.965Z"},"keywords":["react","datatable","table","grid","virtualized","sorting","filtering","typescript","accessibility"],"description":"![](https://github.com/AhmedAlatawi/react-datatable/actions/workflows/ci.yml/badge.svg) [![codecov](https://codecov.io/github/ahmedalatawi/react-datatable/graph/badge.svg?token=95A4BRXOT5)](https://codecov.io/github/ahmedalatawi/react-datatable) [![Licens","maintainers":[{"name":"ahmed757","email":"aalat001@gmail.com"}],"readme":"![](https://github.com/AhmedAlatawi/react-datatable/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/github/ahmedalatawi/react-datatable/graph/badge.svg?token=95A4BRXOT5)](https://codecov.io/github/ahmedalatawi/react-datatable)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](https://github.com/AhmedAlatawi/react-datatable/blob/master/LICENSE)\n\n# React Datatable\n\nA powerful and flexible React DataTable component with built-in virtualization, sorting, filtering, and more. Built for performance and scalability, handling large datasets with ease.\n\n[DataTable Demo](https://react-datatable-demo.netlify.app)\n\n[DataTable Storybook](https://react-datatable-storybook.netlify.app)\n\n[Codesandbox using CSS](https://codesandbox.io/p/sandbox/kjj4ld)\n\n[Codesandbox using Tailwind](https://codesandbox.io/p/devbox/festive-tess-928f89)\n\n## Features\n\n- 📦 **Virtual Scrolling**: Efficiently handle large datasets with virtualized rendering\n- 🔍 **Advanced Search**:\n  - Global text search across all columns\n  - Column-specific filtering with multiple operators\n  - Support for text, select, date, and numeric filters\n- 🔄 **Smart Sorting**:\n  - Multi-column sorting\n  - Custom sort functions\n  - Persistent sort state\n- 🎯 **Powerful Filtering**:\n  - Multiple filter types (contains, equals, starts/ends with)\n  - Date range filters\n  - Numeric comparisons\n- ✨ **Row Management**:\n  - Single and multi-row selection\n  - Expandable rows with custom content\n  - Row click handlers\n- 📱 **Responsive Design**:\n  - Mobile-friendly layout\n  - Adaptive column sizing\n  - Horizontal scrolling on small screens\n- 🎨 **Customization**:\n  - Custom cell renderers\n  - Theming support\n  - Custom CSS classes\n- 📊 **Data Export**:\n  - Export to CSV\n  - Export to JSON\n  - Export to Excel\n- 🧪 **Quality Assured**:\n  - Comprehensive test coverage\n  - TypeScript support\n  - Accessibility compliant\n- ⚡ **Performance Optimized**:\n  - Virtualized scrolling\n  - Efficient re-rendering\n  - Optimized for large datasets\n\n## Installation\n\n```bash\nnpm install @atawi/react-datatable\n```\n\nOr\n\n```bash\nyarn add @atawi/react-datatable\n```\n\n## CSS Setup\n\nThe library uses CSS by default and optionally supports Tailwind CSS.\n\n### Default CSS (Recommended)\n\nBy default, the library uses its own CSS styles that work in any project:\n\n```tsx\nimport { DataTable } from \"@atawi/react-datatable\";\nimport \"@atawi/react-datatable/dist/style.css\";\n```\n\n### With Tailwind CSS\n\nIf you prefer to use Tailwind CSS utilities, set the `useTailwind` prop to `true`:\n\n```tsx\nimport { DataTable } from \"@atawi/react-datatable\";\nimport \"@atawi/react-datatable/dist/style.css\";\n\n<DataTable data={data} columns={columns} useTailwind={true} />;\n```\n\n**Note:** When using `useTailwind={true}`, make sure your project has Tailwind CSS installed and configured.\n\n### Custom Styling\n\nYou can customize the appearance regardless of which styling approach you use:\n\n**With CSS Classes:**\n\n```tsx\n<DataTable\n  data={data}\n  columns={columns}\n  className=\"my-custom-table\"\n  theme={{\n    container: \"custom-container\",\n    header: \"custom-header\",\n    row: \"custom-row\",\n    selectedRow: \"custom-selected-row\",\n  }}\n/>\n```\n\n**With Tailwind Classes (when useTailwind={true}):**\n\n```tsx\n<DataTable\n  data={data}\n  columns={columns}\n  useTailwind={true}\n  className=\"border-2 border-blue-500 rounded-xl\"\n  theme={{\n    container: \"bg-gradient-to-r from-blue-50 to-indigo-50\",\n    header: \"bg-blue-600 text-white\",\n    row: \"hover:bg-blue-50 transition-all duration-200\",\n    selectedRow: \"bg-blue-100 border-l-4 border-blue-500\",\n  }}\n/>\n```\n\n## Quick Start\n\n```tsx\nimport { DataTable } from \"@atawi/react-datatable\";\nimport \"@atawi/react-datatable/dist/style.css\";\n\nconst columns = [\n  {\n    key: \"name\",\n    header: \"Name\",\n    sortable: true,\n    searchable: true,\n    filterable: true,\n  },\n  {\n    key: \"email\",\n    header: \"Email\",\n    sortable: true,\n    searchable: true,\n  },\n  {\n    key: \"status\",\n    header: \"Status\",\n    sortable: true,\n    filterable: true,\n    filterType: \"select\",\n    render: (value) => <span className={`status-${value}`}>{value}</span>,\n  },\n];\n\nconst data = [\n  { id: 1, name: \"John Doe\", email: \"john@example.com\", status: \"active\" },\n  { id: 2, name: \"Jane Smith\", email: \"jane@example.com\", status: \"inactive\" },\n];\n\nfunction App() {\n  const handleSelectionChange = (selectedItems) => {\n    console.log(\"Selected:\", selectedItems);\n  };\n\n  return (\n    <DataTable\n      data={data}\n      columns={columns}\n      pageSize={10}\n      selectable={true}\n      expandable={true}\n      stickyHeader={true}\n      searchable={true}\n      exportable={true}\n      useTailwind={false} // Use CSS by default\n      onSelectionChange={handleSelectionChange}\n    />\n  );\n}\n```\n\n## API Reference\n\n### DataTable Props\n\n| Prop                    | Type                              | Default              | Description                 |\n| ----------------------- | --------------------------------- | -------------------- | --------------------------- |\n| `data`                  | `T[]`                             | Required             | Array of data items         |\n| `columns`               | `Column<T>[]`                     | Required             | Array of column definitions |\n| `pageSize`              | `number`                          | `10`                 | Number of items per page    |\n| `selectable`            | `boolean`                         | `true`               | Enable row selection        |\n| `expandable`            | `boolean`                         | `false`              | Enable row expansion        |\n| `stickyHeader`          | `boolean`                         | `true`               | Make header stick to top    |\n| `loading`               | `boolean`                         | `false`              | Show loading state          |\n| `pagination`            | `boolean`                         | `true`               | Enable pagination           |\n| `searchable`            | `boolean`                         | `true`               | Show search box             |\n| `exportable`            | `boolean`                         | `true`               | Show export options         |\n| `disableInternalSearch` | `boolean`                         | `false`              | disable internal search     |\n| `theme`                 | `DataTableTheme`                  | `undefined`          | Custom theme object         |\n| `onSelectionChange`     | `(items: T[]) => void`            | `undefined`          | Selection callback          |\n| `onRowClick`            | `(item: T) => void`               | `undefined`          | Row click callback          |\n| `onPageChange`          | `(page: number) => void`          | `undefined`          | Page number change callback |\n| `onSearchTextChange`    | `(text: string) => void`          | `undefined`          | Search text change callback |\n| `emptyMessage`          | `string`                          | `'No results found'` | Message shown when no data  |\n| `className`             | `string`                          | `''`                 | Additional CSS class        |\n| `rowClassName`          | `string \\| ((item: T) => string)` | `''`                 | Row CSS class               |\n\n### Column Definition\n\n```typescript\ninterface Column<T> {\n  key: keyof T;\n  header: string;\n  sortable?: boolean;\n  searchable?: boolean;\n  filterable?: boolean;\n  filterType?: \"text\" | \"select\" | \"date\" | \"number\";\n  width?: string;\n  minWidth?: string;\n  maxWidth?: string;\n  align?: \"left\" | \"center\" | \"right\";\n  render?: (value: T[keyof T], item: T) => ReactNode;\n}\n```\n\n### Theme Customization\n\n```typescript\ninterface DataTableTheme {\n  container?: string;\n  header?: string;\n  table?: string;\n  row?: string;\n  cell?: string;\n  pagination?: string;\n  expandedRow?: string;\n  selectedRow?: string;\n  loadingOverlay?: string;\n  checkbox?: string;\n  sortIcon?: string;\n  expandIcon?: string;\n}\n```\n\n## Advanced Usage\n\n### Styling Approaches\n\nThe library supports multiple styling approaches to fit your project needs:\n\n#### 1. Tailwind CSS Classes\n\n```tsx\nconst customTheme = {\n  container: \"bg-white border-2 border-gray-300 rounded-xl shadow-lg\",\n  header: \"bg-gradient-to-r from-gray-700 to-gray-900 text-white\",\n  row: \"hover:bg-gray-50 hover:shadow-sm transition-all duration-200\",\n  cell: \"px-6 py-4 border-r border-gray-100 last:border-r-0\",\n  selectedRow: \"bg-blue-50 border-l-4 border-blue-500\",\n  pagination: \"bg-gray-50 border-t-2 border-gray-200\",\n};\n\n<DataTable data={data} columns={columns} theme={customTheme} />;\n```\n\n#### 2. CSS Classes\n\n```css\n.dark-theme {\n  background-color: #1f2937;\n  color: white;\n}\n\n.dark-theme .datatable-header {\n  background-color: #374151;\n  color: #f3f4f6;\n}\n\n.dark-theme .virtual-row:hover {\n  background-color: #374151;\n}\n```\n\n```tsx\n<DataTable data={data} columns={columns} className=\"dark-theme\" />\n```\n\n#### 3. CSS-in-JS / Styled Components\n\n```tsx\nconst StyledDataTable = styled(DataTable)`\n  .datatable-header {\n    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n    color: white;\n  }\n\n  .virtual-row:hover {\n    background-color: rgba(102, 126, 234, 0.1);\n    transform: translateY(-1px);\n  }\n`;\n```\n\n### Custom Cell Rendering\n\n```tsx\nconst columns = [\n  {\n    key: \"status\",\n    header: \"Status\",\n    render: (value, row) => (\n      <Badge color={value === \"active\" ? \"green\" : \"red\"} label={value} />\n    ),\n  },\n];\n```\n\n### Expandable Rows\n\n```tsx\n<DataTable\n  data={data}\n  columns={columns}\n  expandable={true}\n  expandedContent={(item) => (\n    <div className=\"expanded-details\">\n      <h3>Details for {item.name}</h3>\n      <pre>{JSON.stringify(item, null, 2)}</pre>\n    </div>\n  )}\n/>\n```\n\n### Custom Filtering\n\n```tsx\nconst columns = [\n  {\n    key: \"date\",\n    header: \"Date\",\n    filterable: true,\n    filterType: \"date\",\n    render: (value) => new Date(value).toLocaleDateString(),\n  },\n];\n```\n\n### Large Dataset Handling\n\n```tsx\nconst largeData = Array.from({ length: 10000 }, (_, i) => ({\n  id: i,\n  name: `Item ${i}`,\n  // ... other fields\n}));\n\n<DataTable\n  data={largeData}\n  columns={columns}\n  pageSize={50}\n  pagination={false} // Use virtual scrolling instead\n/>;\n```\n\n## Component Exports\n\nThe library exports individual components and hooks for advanced customization:\n\n```tsx\nimport {\n  DataTable,\n  SearchBar,\n  ExportMenu,\n  Pagination,\n  TableHeader,\n  TableRow,\n  ColumnFilter,\n  LoadingSpinner,\n  useDataTableLogic,\n  useSorting,\n  useSelection,\n  usePagination,\n  useVirtualization,\n  useRowInteraction,\n  type Column,\n  type DataTableProps,\n  type DataTableTheme,\n  type Filter,\n} from \"@atawi/react-datatable\";\n```\n\n### Building Custom Tables\n\nUse the exported hooks to build completely custom table implementations:\n\n```tsx\nimport {\n  useDataTableLogic,\n  useSorting,\n  useSelection,\n} from \"@atawi/react-datatable\";\n\nfunction CustomTable({ data, columns }) {\n  const { filteredData } = useDataTableLogic(data, [\"name\", \"email\"]);\n  const { sortedData, handleSort } = useSorting(filteredData);\n  const { selectedRows, handleSelectRow } = useSelection(sortedData);\n\n  return (\n    <div className=\"my-custom-table\">{/* Your custom implementation */}</div>\n  );\n}\n```\n\n## Browser Support\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n- iOS Safari (latest)\n- Chrome for Android (latest)\n\n## Contributing\n\nAny contributions are welcome! Please see the [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Start development server\nnpm run dev\n\n# Run tests\nnpm run test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Build for production\nnpm run build\n```\n\n## License\n\nMIT © Atawi\n","readmeFilename":"README.md"}