{"_id":"@aiquants/virtualscroll","_rev":"52-726e82eadd852c8a07b5c9dd289c3c47","name":"@aiquants/virtualscroll","dist-tags":{"latest":"3.5.0"},"versions":{"0.1.0":{"name":"@aiquants/virtualscroll","version":"0.1.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.1.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"90d6e4cc6009f1d06447ef2e986ac607dfd06914","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.1.0.tgz","fileCount":4,"integrity":"sha512-tbqJZjjhllYfJOYBhfyV6CP01Eidq3RDc4WHR8+d12TYFPCAmYwcswdTo5yNLlbrULQpN1lhm5sQnWCDcPLQ+A==","signatures":[{"sig":"MEQCICdhwCK3fiHrIP7CcRLLnQqy9SPpT0AEx+BbEEWXM6j6AiATfDZidvXrA35PRDseCFxquhwQvWSRruBNmAMLzKKujA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10069},"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"}},"gitHead":"b8e5c4b1b0ccb306e3d111a95c3b85abebb936a8","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.1.0_1756469048399_0.6618965529611662","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiquants/virtualscroll","version":"0.2.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.2.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"51f25756c76f72ef4218230adf31949a785201fa","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.2.0.tgz","fileCount":33,"integrity":"sha512-xshkgYqMYBZcXg4Anso9j9Wsv3AhpORAxvaGBlPDYYwY9hY3X+rOZ6ND1FsVD8u+5aUC9VPKVFThdrlCQw1Hag==","signatures":[{"sig":"MEQCIBZWfwt7wZNHQU2jPX8+fumoqH6W6SAAb6XSHV8ivmi0AiALat2T4DEDPxih2rgMynRDaUzE+l+ZNpceeOs9p5up0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":389884},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ad7ee3f06b0ff16eca87e4d951a3043ba2ee2e32","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.2.0_1757592768026_0.12137414627579646","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aiquants/virtualscroll","version":"0.2.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.2.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"03db0c8627bfc3bdeb839625d0f6ed785f2128dc","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.2.1.tgz","fileCount":33,"integrity":"sha512-idxkwyOy7freGXgcErEHfnnCOilayw7zzGIGYV9uhnHwRMAs/6HawLc8DgYNBlPPmKeKHRcO7GxdWUjkE6g/Fw==","signatures":[{"sig":"MEUCIQCRNUuKLD8J+kmDOClcL5nIv8RiUmx+Yt7IZeBMikNj7gIgNpYFaUB7UqIj3XS80t5pDTN/cb5NtWlcKU0dnhlJ7g4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":389215},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f8b9eeeb5fdd1e5b13bb2dfb8377ad5130789046","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.2.1_1757635274989_0.04085333332193297","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aiquants/virtualscroll","version":"0.2.2","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.2.2","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"753f4d6caeac2307781158d1eb81d32913e55c0c","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.2.2.tgz","fileCount":33,"integrity":"sha512-gH0/6QoIdGEFkDpT1LDP+Jfj+tPhgWQs050pplFLvmzcdExCg23J2yKL/egg7BRWwV+ae47NvR36d+BDU0AHYw==","signatures":[{"sig":"MEYCIQD0z9qFSQmWsBEOCIjAnrmzmH4kSZSECi/jYTz1jv83GwIhALKnPDP1jbCq//WkfuKwYvb5YK9rGZNff+0zqHDJgZ4e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390510},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e1467328202352f0b4fbd493c8d354ac3a90fbaa","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.2.2_1758883322474_0.10265456725805655","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiquants/virtualscroll","version":"0.4.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.4.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"dc4fc8a392588173ed7f6faaeb6d13a82ca1442d","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.4.0.tgz","fileCount":36,"integrity":"sha512-MkE+2pjieUs87sFNeRO6RbeNrZNKx5gOBe0Yt+dRogKlAdehw/SoiwNUhzHd63mDuCtEKQbPe2agb/9zV+sSLQ==","signatures":[{"sig":"MEQCIDY9V2VD6eH8hdQ+Z4ShN+KbTsc2NCg52Los5uKPHNMpAiAbwOzufvKQiHFLUxXjptObml1GjCd9ZR6QvIVrAqzvNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580818},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"7015b8e9826750a3936d29871158d63b23d52183","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","@tailwindcss/vite":"^4.1.14","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.4.0_1759830014464_0.3976830213858573","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aiquants/virtualscroll","version":"0.4.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.4.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"8dc0ae73b222099c0de0a21d3347d3a6c123ae10","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.4.1.tgz","fileCount":36,"integrity":"sha512-ekOcFQg7ifHWICLvp8kDxm+UUsE3g0oWPtsbSV1uGofJEKSolsX5SkPQJv65+azjkO6lA7Gux6Uun1OgEyJlzw==","signatures":[{"sig":"MEQCIF4eo0voNAvAdlHyeDRmmCct5YtKSImPjdvbgX8G4OiwAiBdWtDHs0DvoNQerdpOzZjyNykE1cgXx/1/bi34ObtTFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580816},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"6497086598b362ab2c016d96355e61141b851087","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test && npm run build"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.1.1","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.3","jsdom":"^26.0.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.1.1","typescript":"^5.9.2","tailwindcss":"^4.1.12","@types/react":"^19.1.11","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.8","@tailwindcss/vite":"^4.1.14","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.0.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.5","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.4.1_1759830354627_0.22996817031595373","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aiquants/virtualscroll","version":"0.5.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.5.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"bb561f39dfd64b1aa2f21ae054230801f78ffaa1","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.5.0.tgz","fileCount":36,"integrity":"sha512-ADmm2t6F3HNT6s2fa9i2gjTdwaKpO0QzKJi5q3fQNkbwGo7nT9ED1a23B3Nw16+G7uhsFpK6dKaQDg/aL19NLg==","signatures":[{"sig":"MEUCIFshCmie8GyJjd7rfT6pFV/1k1GiIBw3Yk2C8sDqFiDKAiEAjhDFZrdtPk6nXMg3RRmBonJc/bAXTA6F4Gg+RMxcMww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522226},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"d56dc9cf85090a24b8d50c340b81bcb906553855","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0","@tailwindcss/postcss":"^4.1.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","jsdom":"^26.1.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.16","@types/react":"^19.2.2","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2","@tailwindcss/vite":"^4.1.16","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.5.0_1761640869549_0.8022620691744307","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@aiquants/virtualscroll","version":"0.6.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@0.6.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"b772a77713341eb58788d57df3f04d2498fb1d0b","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-0.6.1.tgz","fileCount":36,"integrity":"sha512-dhhs5dFUZJJrUfCY2swde1VpcMFKBeA7CuhFBwVYEHPKJoE1qFpLqMebWZTv9JeifBTWiEcPP7eXUlvddFy92Q==","signatures":[{"sig":"MEUCIGqhW19yXe0I/qfa9eOQoe8+GtlXhmYz0mVYpmxLBUjeAiEAqDi1uAtXJmeq/kyfaBdyNL4/VrWSqrfSDc8WIG+IK8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522259},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"ba216d68f0aa97256c143618f650cf61a376f679","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0","@tailwindcss/postcss":"^4.1.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","jsdom":"^26.1.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.16","@types/react":"^19.2.2","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2","@tailwindcss/vite":"^4.1.16","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_0.6.1_1761644121682_0.2430834747368411","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aiquants/virtualscroll","version":"1.0.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.0.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"22b19baa80f52302f774985cf88e8c2e43d4c2b6","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.0.0.tgz","fileCount":38,"integrity":"sha512-5JkI8+KYLZ/ahrU61H0spnZskSYw4iKIBLqzOdglgYeO2R6/yUSzD8CxUNop7yrMhwm9ALKFIk5YeSSZRpOLzg==","signatures":[{"sig":"MEUCIGfI1jq3PMvUMf5apEcMIeMI/bBlHan7Qy+884DwpzCsAiEAiNeYiAL2v8NNQtLdjOsROs5OfLdSIeAjE2s9f06DjTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548770},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"afc1533b0cbeeb56c09b2ce14748677918bb68d5","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0","@tailwindcss/postcss":"^4.1.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","jsdom":"^26.1.0","rimraf":"^6.0.1","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.16","@types/react":"^19.2.2","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2","@tailwindcss/vite":"^4.1.16","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.0.0_1761806704048_0.25236007144799943","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aiquants/virtualscroll","version":"1.1.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.1.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"f5a90fa26dd6d3423fd4ff7efeadd8edc6a1d588","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.1.0.tgz","fileCount":38,"integrity":"sha512-DRwXfI2clagCG7jP1t4aUPN+0Y9i9lhUEqeFWnkMM2Xylldv/457R7mSDWQ/UuFSzOmqNI6c/r6oCTBegTcenw==","signatures":[{"sig":"MEYCIQC7uMmu4RlJyCcdMGkuQsK1Bxeoa8Q920g9xbPct+iGyAIhAP1jVnc+R7Ezi54pKWzWC+lVREwxCVKYwOy/+2iQTk4R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548770},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"ee47a356d2a0264446d8026d7bce836f978ab8bb","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"rimraf dist && vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0","@tailwindcss/postcss":"^4.1.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","jsdom":"^26.1.0","rimraf":"^6.1.0","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.16","@types/react":"^19.2.2","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2","@tailwindcss/vite":"^4.1.16","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.1.0_1762248614440_0.594630424784427","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aiquants/virtualscroll","version":"1.2.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.2.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"d37826836d06c73a19ac39103e11f8eb0d7b081a","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.2.0.tgz","fileCount":38,"integrity":"sha512-kKYorL5gA9y/kBxS/ueHxwINCzP2NeKaJqRSrR9Cb7NxNulQQbu3cSdTbU/6IsT97oE51Blg0cXeXvZVDo93iA==","signatures":[{"sig":"MEUCIFdgSmCWp+F0FWEpayf6gwPzVeTov/F6PIZpzfsnAXctAiEA/ROci1SeMTJqZPPNkMbyTM8L/subnYV2Dx4nkPFuZKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":579700},"main":"./dist/index.cjs","type":"module","style":"./dist/virtualscroll.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./virtualscroll.css":"./dist/virtualscroll.css"},"gitHead":"0d0244524e4f75f93cb7e9fa168150e4befc8087","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts","clean":"rimraf dist","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0","@tailwindcss/postcss":"^4.1.17"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.2","jsdom":"^26.1.0","rimraf":"^6.1.0","vitest":"^3.2.4","postcss":"^8.5.6","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.2","autoprefixer":"^10.4.21","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.2.0_1762657275169_0.8225392149992727","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@aiquants/virtualscroll","version":"1.3.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.3.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"7f710eeae97b5bc2c4109fcfed79c15bbdd74037","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.3.0.tgz","fileCount":37,"integrity":"sha512-clxzcCgxV5tg8A1lnt2wQ+m5+nUVgVhm95SPitO1IzLZKZbxyxQ+bewl2cBeyI5BfWQiudJzdYOdA7VrFvft/g==","signatures":[{"sig":"MEQCIDRFA1CMse1HmLevlagBePwoFEVUMGxZAOXexyJoE/l+AiBBxbrDnzjF/r87VQwVU5irsNqehdK5gLN1ixQj2UBD6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231945},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"6a13788981f64cde967b894ff09ddaceca31af6c","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.6","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.56.1","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.3.0_1764025490436_0.7777166195772296","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@aiquants/virtualscroll","version":"1.5.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.5.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"e5ce5ea97116d5d0603b7fd68492764519c17a3e","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.5.0.tgz","fileCount":37,"integrity":"sha512-OV2oHIDPUKMVYeTpRL0ihcIT72lEpwoJjaaUp84lu/84aWB/RMAuYzkmSWkYpCEv6v5EaABXi6Qz0D8LnPXSKw==","signatures":[{"sig":"MEYCIQCAy/tomuSsqPiY0bF/SNGtHkKGeH5jjbub2pTZ05DQMgIhALMxQfJz4rkZluC3NGsp9sulvjFF2WWmJWtDd4j8DieL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231978},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"6a13788981f64cde967b894ff09ddaceca31af6c","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.6","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.56.1","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.5.0_1764025801573_0.14772769356174376","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@aiquants/virtualscroll","version":"1.6.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.6.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"9838cd686472db15d87e5b683cfaceee12e52855","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.6.0.tgz","fileCount":37,"integrity":"sha512-0g4U15JG0v13JF2lK+sMCH10LF9tZsDrfDDtf/nzwS7l5Zwc1jC9X/tsPOh5ejadCibJWZrVNXGzVafeZ5feDA==","signatures":[{"sig":"MEUCIGUNjEOgTAEaJi1IR5Z3Zuys9PWGUw2VGCfSVHoSKEKmAiEA0wFhF1YyuusJrJ27KZrvRSHvAYNyrYLcAPeuDaSLnq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232217},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"12e5470bf9a3c6ff1b1e57a9e7605f41a0a19ac5","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.6","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.56.1","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.6.0_1764210327378_0.24760017638896548","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@aiquants/virtualscroll","version":"1.7.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.7.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"cc4d92f88c120c77e4f969b58f12670d1a48229d","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.7.0.tgz","fileCount":37,"integrity":"sha512-z6qljuXnC5ExtUrnUH27gJNuCeFFIo135XQRkx2lyC1m6BSfI/ItgFDgfnpal1BVmHa9VslvEJ9NJc4VBHWCIw==","signatures":[{"sig":"MEQCICRs/m13VZNctNG0WCgTpylvQbY6CcqoDV6GBZ7yGe2TAiBa1icrVY67xXNklH+Goi4g0KcFe16WrhI23ukhofgmKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232348},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"f01ae77a338cfd689c9ff5e94cf447f0d911bce1","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.7","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.7.0_1764215336097_0.25016097317509023","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@aiquants/virtualscroll","version":"1.8.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.8.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"97b4a586a396ff15e0a9ae42609758388fced452","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.8.0.tgz","fileCount":37,"integrity":"sha512-0HzYDKQYm6RF8/rKRWJRRLPbv3qwtvc9XjLXfc7JtR/Ry1AeKWQWlCZ/HxGVen89M+BRYc2QUmZmP6f7MxgePA==","signatures":[{"sig":"MEUCID0EdEgDmuqZ/Iya2nfs2rIhHBk5S00h9yduOlmIePpyAiEAwVTqq9fdcid5hOqHedW5pZALLGbG1MPVSVT5bcSzEWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238390},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"860e9369f74cf09dcf7c2e85d456d230b67efe1a","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.7","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.8.0_1764562480220_0.504503063252641","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@aiquants/virtualscroll","version":"1.9.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.9.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"136689f690e866881c09013d820977ec2b06b49a","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.9.0.tgz","fileCount":37,"integrity":"sha512-elVadffPteJh55Fvg+epGHQitctF4OXGfol2S3ATI9Y84/N+DgjhfooDx9BadhlcS+khKFx3oKuG5w7T+/TEuw==","signatures":[{"sig":"MEUCIQDOu8rhPcxEguUZ3w1oJm4BkEiF/bAfkm2mQzN2QUzTSwIgSypNcWBXSv2+7jqzvlVswY/97Ou7M6XybKJ1ZTSVGJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238568},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"62679d145c186ca94efc56a1f7cea2e95b61f62d","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.7","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.9.0_1764923985394_0.038273826290831314","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@aiquants/virtualscroll","version":"1.10.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.10.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"9397f442eb3279fa3cff44cf249ab7076e708ab8","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.10.0.tgz","fileCount":37,"integrity":"sha512-KnUHF7kB98nGOBngcn7tHdCcR+KXTwUgLgnYWJt26G7f6e322dO2tbvrNTwwbDGu5l9mL8BQfjzEYc4Vn52R4w==","signatures":[{"sig":"MEUCIFlUaS39/GDhp1fNxr+z6pj08sFPZvRb87GuR9RvEYIIAiEArz4RGVaiWggfvkp74Ginz4Dc1lVlWBlNhN4x065JYE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247437},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"9d767d1e0fe2ec1e451439f94e2d6ed5024288f2","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.7","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.10.0_1764932017779_0.24598350960450044","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@aiquants/virtualscroll","version":"1.11.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.11.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"90ce7e190ef28a1de7345836bf55c5159029bcbb","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.11.0.tgz","fileCount":37,"integrity":"sha512-gTvoo7l4gFNRber6FjeHfe54pdHoy1qV4MHPXySX3FLhSEPcRs8oLdqDIZsFP96YF/0Lg3tmi7+VwpZn9/2icg==","signatures":[{"sig":"MEUCIQCPSQsQsTzgSLR73sTiuBa9GU8aFycvDRJvq/FRmOPJFgIgWIQR1+0XSFcqLTdbA4JH6JFpZZCOKOp6pbAXQ4k8H/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244075},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"01a67c731db73769ee516de0d73e9c6bc65c0c24","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde-k","email":"owner@aiquants.co.jp"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"react":"^19.2.0","tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.0","typescript":"^5.9.3","tailwindcss":"^4.1.17","@types/react":"^19.2.7","@biomejs/biome":"^1.9.4","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.17","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.17","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.1","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.11.0_1765005505236_0.7811078164430092","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@aiquants/virtualscroll","version":"1.12.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.12.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"e91414434afdf6a760a8d2aab4cc96eac1be8de3","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.12.0.tgz","fileCount":37,"integrity":"sha512-gJ0XE3l64dD2hUZyeP7G0T4YKHAAyGPlfxHgIV5e996+WXINb7KTzJb/YcQjZ/yexO1GHOcGUPL3rYhS0RW9Qw==","signatures":[{"sig":"MEQCIBjU/3L7uU0W86KqxTiwwmCoYpM00P49lG0m8mb96OF2AiBou1yKEOxgRl/HDF2kJ1IHUrL3AVnxVg8CbSa4v1XAFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247880},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"5d6ef62a24b447963e40d4686b57c0eefb2db869","scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.3","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.3","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","@biomejs/biome":"^2.3.10","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.12.0_1766286381275_0.1509342453724647","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@aiquants/virtualscroll","version":"1.13.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.13.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"fec86196b91ee45a81fd9517df2adc75b1cc5f59","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.13.0.tgz","fileCount":37,"integrity":"sha512-coJaJIzTFJEAZAZGUPJKQqhEvnNqCkizqp/T1JwNth5nPeaL47AR+CSzuzYehuCiZz7gdDk7PWHX8BYJRuhGyQ==","signatures":[{"sig":"MEQCIDnLjeMzQ/hzMTtw/jzbA8oVipof5+qEQhiwLXs53dgTAiAGSsGKXRIgYQ3NGqcXRrQCbPwxclM9HtDNnbHCGgcpfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248775},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"cad274dd7adc723c97b7ab78c0ae73b8598f8224","scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.3","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.3","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","@biomejs/biome":"^2.3.10","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.13.0_1766323834057_0.7251804231840133","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@aiquants/virtualscroll","version":"1.14.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.14.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"6948d80cdff770e3716c5ab26c65d07d6d4ae277","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.14.0.tgz","fileCount":37,"integrity":"sha512-y/FaGHYDvwKcHJtQ53HXWT4wU20DjdmUvY3E6gtdt8ZWBdAd6zGQc1cbRHOi/Stocs5PJZe6SunPs4p3dpPd+w==","signatures":[{"sig":"MEUCIQD8VbAmVuKVr94iEBGWhR7tDbdj9wXS9EiJMtwkOJqpkwIgBhkP1wYq4Bmm2hg6O6Vbp7shpGoj95n1WlCye6latT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248742},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"gitHead":"d50e89f9b6bb0b56f33655ee302819e998b8dd34","scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","prepare":"pnpm run build","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && npm publish","publish:minor":"npm version minor && npm publish","publish:patch":"npm version patch && npm publish","test:coverage":"vitest --coverage","prepublishOnly":"npm run clean && npm run typecheck && npm run test --if-present && npm run test:e2e --if-present && npm run build","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.3","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.3","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.14.0_1766497566143_0.310808149631564","host":"s3://npm-registry-packages-npm-production"}},"1.14.1":{"name":"@aiquants/virtualscroll","version":"1.14.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.14.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"c0e72b7bac3b0a2db5e887bd489a9ce3c3602d0e","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.14.1.tgz","fileCount":37,"integrity":"sha512-kamqXmGpkNINgTJRhlF+U/o6gTx0Ak+UgKZthumRFIfktsXyyIHlQ0DrJg0+6Pt//FsSkQ8XkrokjQvczxtqXg==","signatures":[{"sig":"MEQCIGD+ajYODUP9ivau5eimkIY5h1Q6J/vE9/0cYrPl6nzgAiAArEBjESJxyWo88a5JB23H9tYKxRLwlZUvVquP9alIOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248620},"main":"./dist/index.cjs","type":"module","_from":"file:aiquants-virtualscroll-1.14.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_resolved":"/tmp/a2ce747a49d8cdc456a3769ec3ff0e89/aiquants-virtualscroll-1.14.1.tgz","_integrity":"sha512-kamqXmGpkNINgTJRhlF+U/o6gTx0Ak+UgKZthumRFIfktsXyyIHlQ0DrJg0+6Pt//FsSkQ8XkrokjQvczxtqXg==","_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.3","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.3","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.14.1_1766534866351_0.11067251446668913","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@aiquants/virtualscroll","version":"1.15.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.15.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"dist/cli.js"},"dist":{"shasum":"e4d0e30b1210319fb328ec213516362b908831f3","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.15.0.tgz","fileCount":35,"integrity":"sha512-V6Lwi0G3mxxnWtisgCHiwZX6tJvB/+2+j4/zbecpH8gcYsFcGDjvcLL5iCqYSVcoWkizWQcy8hLU0Po9kl561w==","signatures":[{"sig":"MEQCIBg+Wa6H1hrVNEr6Qwk9mO7IM1wva6h2WpUkAvgu4RHvAiAHHn7qFqTRMrEW/C+DSZ+TXYGBsu3FzweQvZEJ+TfvvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229028},"main":"./dist/index.cjs","type":"module","_from":"file:aiquants-virtualscroll-1.15.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"_resolved":"/tmp/2e333122da77236655a8b3ae4b65f091/aiquants-virtualscroll-1.15.0.tgz","_integrity":"sha512-V6Lwi0G3mxxnWtisgCHiwZX6tJvB/+2+j4/zbecpH8gcYsFcGDjvcLL5iCqYSVcoWkizWQcy8hLU0Po9kl561w==","_npmVersion":"10.9.2","description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.3","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.3","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.57.0","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":">=19.0.0","react-dom":">=19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.15.0_1770807548333_0.9093436446973808","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@aiquants/virtualscroll","version":"1.17.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.17.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"2de73f3a59821fa41f8cb38dbd007d76e2239326","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.17.0.tgz","fileCount":35,"integrity":"sha512-lyhyXbxgnMj5hQoN08tbwTxse+cPze8s5OmhOPY9kQqvLTraMRDSVus4A0QDFdjMa2JXJS/1JC5ZOhl4UWvVlQ==","signatures":[{"sig":"MEQCIHs4gj4tzgjOUKW5NAqLny/11hj4Lz5drRQdzFE763VAAiBJqP4lAMh69xFVxNf9cIeI2giVrmgapnDVJadH51wjEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228955},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.17.0_1780719423741_0.31084842927039147","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"@aiquants/virtualscroll","version":"1.18.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.18.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"fd9379daea1096b565aca7fb618dcbe38a130a9f","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.18.0.tgz","fileCount":35,"integrity":"sha512-1lfkRZrjgIzRLYByc8DeHcQNYzETMmR/LMOwd1/aXlW6lDT5QFtSnFA5tJ+7oCO+XTEcbZsAFpdoOCo33SdJRg==","signatures":[{"sig":"MEUCIErDwmI8/tNsD6lKLUlDZ7whN3W8vAKyR6ryp6p52blHAiEAprPWPUwBjmqO0MJdDuF26J6rBB6ybGj0UGtcdrMABBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230785},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm run test:e2e && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm run test:e2e && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm run test:e2e && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.18.0_1783408755990_0.7722643273422585","host":"s3://npm-registry-packages-npm-production"}},"1.18.2":{"name":"@aiquants/virtualscroll","version":"1.18.2","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.18.2","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"ba8d1e5f39d6c3d398d9f213e945eb82c5f2762b","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.18.2.tgz","fileCount":35,"integrity":"sha512-jrQ2dW+6cOPv9qKP1zCqim3LmQ2rjUwXRHwkJrl0n5NViHUfPLtaeFWcYFUsaYBZwl7cMTb/F3vJo3NMqLoPjg==","signatures":[{"sig":"MEQCIBPW5UZTPguivS74ESEBAhnZLMG8958Ob6nu9ebkuhnqAiBjXC6Qr7sNzPZu4+J/oOGMUBBYWKHh+x/xmVvCgBPkkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233773},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm run test:e2e && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm run test:e2e && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm run test:e2e && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^2.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.18.2_1783413325582_0.6911177122219054","host":"s3://npm-registry-packages-npm-production"}},"1.18.3":{"name":"@aiquants/virtualscroll","version":"1.18.3","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.18.3","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"d9f6470f7ef99b083eb591be83804d9c6e12b48e","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.18.3.tgz","fileCount":43,"integrity":"sha512-Z+pBl7nltrV3Sj7WTKrZK3MF9vJLsTGxbPx4IW3R8G6vR1SFQFPX+EAEhu95/Cyvq1WrlUr3kP4/koFhuEwfbw==","signatures":[{"sig":"MEQCICc9Tgb9YaUJjh5D69hM/6QCaB+2OShSgNLu/bX1i61/AiAXhk/iEnYSnZ+s44LqpGb2B8efWdZKlb81hcy9lbt05w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362644},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"npm version major && pnpm run test:e2e && pnpm publish --no-git-checks","publish:minor":"npm version minor && pnpm run test:e2e && pnpm publish --no-git-checks","publish:patch":"npm version patch && pnpm run test:e2e && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.18.3_1784101799174_0.41509537813408803","host":"s3://npm-registry-packages-npm-production"}},"1.18.5":{"name":"@aiquants/virtualscroll","version":"1.18.5","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.18.5","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"2ad61bc2412c96d4a5d3e30fc60cda719c38ce8a","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.18.5.tgz","fileCount":43,"integrity":"sha512-8DFVv+UEOQKBfoVE/1vODauaLvVuZfAAuguTcRshrgDL/MGL9FwHJ/vkt27O4fwDvFCda8AVZbqZU5oBrysEpw==","signatures":[{"sig":"MEYCIQDrc/lFxm32HIdE89BPBUyEziHk4BMQ4c1tE6Gd7MkwBgIhAN2DjT1b5J15lc0pvwC966SxO+PecVIpnqUyXGver1Ka","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362851},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/tailwind.css -o dist/styles/virtualscroll.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"pnpm build:css --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.18.5_1784773297836_0.7430443599757437","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"@aiquants/virtualscroll","version":"1.19.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.19.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"8498a94b1e7e74b1871eb26e0f63555cf1b1c6cd","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.19.0.tgz","fileCount":69,"integrity":"sha512-0sCUqlLqPQqiO86zpAD/OXDWAFWBQQVV7p77XgyXybXFIKvz98ExF0hFCzrTqOP2iCSVqOT0Kh/11RhKMjVRTA==","signatures":[{"sig":"MEUCIAh3SdJW7vfPCHH6BY1h/QL56+jXZ3/oUxSwgukmygrcAiEA9b0kD07XTHZ5kJ+GYMXffU32cPwQycyK2o5Yu9+52no=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":937994},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.19.0_1784846141622_0.8707073554005269","host":"s3://npm-registry-packages-npm-production"}},"1.19.1":{"name":"@aiquants/virtualscroll","version":"1.19.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.19.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"eb752132e695c840ee8d09cbb7ce4420677c54e5","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.19.1.tgz","fileCount":69,"integrity":"sha512-mg5PVxuIZ/YslsY2aWmx33aeoEBiuzA2VKXOhyCWTrh4dGp6vzj6bfPxze+8hdhsXODvbiRrm+zXXcmdnWo+aA==","signatures":[{"sig":"MEQCIGoxB9ZQ/ITJumep2zxHRPWS55++Zkxqp2urliB6Q+fMAiBdJn70kwxfzb5x9WndPsRQECVvoVf6eoIRrxng7gbYEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":937475},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.19.1_1784861930782_0.22120352044544433","host":"s3://npm-registry-packages-npm-production"}},"1.19.2":{"name":"@aiquants/virtualscroll","version":"1.19.2","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.19.2","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"a8a63492d145d2dee549e6cba28b08db1b1c7179","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.19.2.tgz","fileCount":69,"integrity":"sha512-bhyntzgZov5/LoDDci373ih0vjaahyj0QujLWQkempS1Gc50oQ3oEpmP7406LrPGuw7ubWqXW5DREe2LQsIaYw==","signatures":[{"sig":"MEUCIG0zrcIqzUMoGTRMciKStpvNqTZ1tUjNfh0x1480iQD+AiEA1g3IbiCQsYczo6RtzRRbQHr7olywr2/F9tJXuN5mG3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":937884},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.19.2_1785108938041_0.33350957027334815","host":"s3://npm-registry-packages-npm-production"}},"1.19.3":{"name":"@aiquants/virtualscroll","version":"1.19.3","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.19.3","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"e93fd7b4ad709b3c5adcde11c366e94b5e84160a","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.19.3.tgz","fileCount":69,"integrity":"sha512-2TamonVgKKTZPeB+O6PC5+s+hgw9eO0Pz4z2Ne1WB+LA9FLZlmA/1b7WoEbPxdysO+Sg0hnZdJotbz7DW26Vjw==","signatures":[{"sig":"MEUCIQDbMUbGV7XLJX5uLAy//RcgpBvtxaYvoa6Z02mX0OekrgIgI8FlTnHCDDRfi8JbvX+7T9Jy29aPyhhRsR9Bm2WrcFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":937884},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.19.3_1785110047338_0.033255571817802254","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"@aiquants/virtualscroll","version":"1.20.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.20.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"73ea72ff3510d7c99bf084a1916e3597acddb4a4","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.20.0.tgz","fileCount":69,"integrity":"sha512-KD7ZMYIxIfrdEHyVvRWSAx3OzPB3AGWzZi/AQGXZty1I/ZQ6nOFfOX+rNyPTbYtIoc4wM1b957Zz44ohHORyCw==","signatures":[{"sig":"MEUCIQCzBJMSOaJOrDlp1WnldUpWDxtKW/t7Vijv76/Hdo4BsgIgEtjVtXN1zH9i1LyKzSIS+AxPlsUwv6Qpiot9B9lZNpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":939597},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.20.0_1785411157299_0.48751666623205403","host":"s3://npm-registry-packages-npm-production"}},"1.22.0":{"name":"@aiquants/virtualscroll","version":"1.22.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.22.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"68d775920fa01629ba363d701ee50138f7ce3e1e","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.22.0.tgz","fileCount":63,"integrity":"sha512-Nmg/LB5ytC5dIxaW7A/PJ7dBiIHaC6gMn/cEGAMmXhYrUr7+rXlubbZEVYdxFQITI1AKRxhRUMoSPk6Dan7A2w==","signatures":[{"sig":"MEUCIQDpUmLHi0L9C6ii+uIDRUJsZI33pSFsv0KIfFsBo8B8eAIgR8458FDtkgUZ+nXr3fygvkTDg2bQR6zziw21jFydjtA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":869747},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.22.0_1785810654024_0.507111848715939","host":"s3://npm-registry-packages-npm-production"}},"1.22.1":{"name":"@aiquants/virtualscroll","version":"1.22.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.22.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"99d58436eb0a25e873b42df8fd0dac18dff2a22d","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.22.1.tgz","fileCount":60,"integrity":"sha512-lR8UlTPRcqDhq8EECUQBrS7+iFCJx+elvMkZwd0Ke2S9ybDGCsPi4tCUysy0klMdJ9STBrbuyLc5J7rzgTG9Aw==","signatures":[{"sig":"MEUCIGRrux9coSIE+nuZd5zlGqh40FPFsi/jLOnwXVhQ5Y9HAiEA6wwEl7nssFl3gfj4TYSK0mD7vBAafT6Wr5fwZR5e6mc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":815579},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.22.1_1786110541859_0.013618960855448003","host":"s3://npm-registry-packages-npm-production"}},"1.23.0":{"name":"@aiquants/virtualscroll","version":"1.23.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.23.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"ec293a5fd0433d9f8f7dd241d2fb9d6b726598f6","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.23.0.tgz","fileCount":60,"integrity":"sha512-4c18MqJhhZ22/47CGOtUNm8uPRlktPvyptwQErHcEdjT8Lj3xfvT7oE76j+xrEkkkL8y/RNTde7pHxjxEQvmJQ==","signatures":[{"sig":"MEQCIGXKsKISeFuvTEXI9RvpfSFmxoQ2qCtcGat1EqdLKOiUAiAtp6k/34D6TDFCtQteVei5IbI5ZGRs1zWwKx59HtY59A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":830658},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.23.0_1786142963733_0.9365654475691971","host":"s3://npm-registry-packages-npm-production"}},"1.24.0":{"name":"@aiquants/virtualscroll","version":"1.24.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.24.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"00a098a8878dc4047cd0f854f038e89c9d9c5afd","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.24.0.tgz","fileCount":60,"integrity":"sha512-xlEPH02jWW3gdi9sutA56mkao6QkFjF1bdarDXQsqjo9wpOVgwO7/IE5kqDaP9kJtHw/rxMQtvx47eJZieckyQ==","signatures":[{"sig":"MEYCIQCkuE3xl6HhDiuAXegP3euGAiEpV2Pokdz9Irgwzva4uwIhALE1hwrWryDaj6DmLVUvs+wgGu/feiWsjgG+3LoUY3vb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":832650},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.24.0_1786417486153_0.1206992729147327","host":"s3://npm-registry-packages-npm-production"}},"1.25.0":{"name":"@aiquants/virtualscroll","version":"1.25.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@1.25.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"ff7baa60b1ad132eabd782623e442a4ee6c9a743","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-1.25.0.tgz","fileCount":60,"integrity":"sha512-HE0Nv9xaXPMKipzqPeOQ5xncednzK3JGHKPE9AWcb0LisEQSY9A1PgYasg6moNrj7Z7WgLxtuFldT4xD4p4ObQ==","signatures":[{"sig":"MEQCIBZyDrw7NS04sZMXQACjWdlqx4Gv6Ubtc0pGVDp756iQAiAmFXDuh2q+jh1r32lsXzsgc4c/6IJq662hFSO9ZsmEWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":850738},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_1.25.0_1786435767443_0.25830962890374143","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@aiquants/virtualscroll","version":"2.0.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.0.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"aa20a89b56fa582308a303aa1a06f279f0956b73","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.0.0.tgz","fileCount":60,"integrity":"sha512-IkyvS+LMfv5HDpUfeF8lxbBKo/oVj5dZpeiUamE53YY7kpdbLG4XPxXXJM0s9T/btDByYbwPDZgPQW1NgOlOTQ==","signatures":[{"sig":"MEQCIEeIwuz6Jbr1pEjrmUEzyWYcM8Woj6Mvl0LgF3eKZLL1AiArWnj1Nun96hSg42uJv2iqwDaxoEsE7tzEJm+Dbe7+vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":860169},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.0.0_1786457098069_0.43274593213687274","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@aiquants/virtualscroll","version":"2.1.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.1.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"6454e38deec67b3576c7d6192d117961d7134934","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.1.0.tgz","fileCount":60,"integrity":"sha512-wNes/cL3nGHirK4yFsIkQncpOKT8Hu/hUuOHm7rLpwpE0sSGsZuf/ISPslZCQ3TOdBIknmbbtFOYwrTtVC2feA==","signatures":[{"sig":"MEYCIQC6Z29Gb/vOD4rWKA+slVjW903v2bz+t0CkKK4EKXcEfgIhAMAP10gu9WxtpBvTDDWpiGCzujJiLA7q22j2YyjQJPb7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":863604},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.1.0_1786709326196_0.5802775913383569","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@aiquants/virtualscroll","version":"2.2.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.2.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"94c89bb3211fefa18668682af09740646dce7f46","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.2.0.tgz","fileCount":60,"integrity":"sha512-8vEqHteK/Zt75h5xxFZgPzofJmaJU7ma2Ojvbzgo3H2+fvWPMbE9uMkUMiNpFunNBGXrWlIVnydQG4Sg8+kJ6w==","signatures":[{"sig":"MEYCIQDRjPcyvM35XGWlc64l2j1KuRJJpWFHI4hw91mSjcsgeAIhAPO0sseXafNMASbygjOW8Rfy6/gBJfLQAEsVxVoSoM/m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":874244},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.2.0_1786728065985_0.07194659019375482","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@aiquants/virtualscroll","version":"2.3.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.3.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"25d5adea8639fe4da3e391b6123182c02073d70b","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.3.0.tgz","fileCount":60,"integrity":"sha512-evmBbZe1EqnxgufBsaA+viwtX+vpy723rdtXhtnLajOUt7lyLzWbCQu/+Fi6gqHduPrj5dZH4aaGVZDinDyQRA==","signatures":[{"sig":"MEQCIBaiaJv7/9HSSwVZCCzX1EU7l1pYGqHUoZ4MTY38kaJGAiAqfCaEI+Wm5gKG/Y79bUX6VB4oeYuiF+I92ooOah5+GQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":879775},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.3.0_1787130106718_0.8536300631374132","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@aiquants/virtualscroll","version":"2.4.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.4.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"4d13e123e1e99645c673b15e7838d69e1e46af95","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.4.0.tgz","fileCount":60,"integrity":"sha512-JRDL9DDmgSmlUhWspPJNDLOApgKYwut3JYnZnHLd6jeO5KoMO/M2lAvumxOZqC8y3vrQMALKUUTT/ibX2tJLwA==","signatures":[{"sig":"MEUCIAp1a/Xh94ht1sEBThl76SMFVoCX3g/lfsBIEDNpVcb+AiEAstpF9TztBGYAXOOVtak8eTAN+CJaR7jxO/gEMOr+hZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":908789},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.4.0_1787138486780_0.804732220433942","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@aiquants/virtualscroll","version":"2.5.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.5.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"d0618cece85f16103d0362a00fcc5f27dec207cd","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.5.0.tgz","fileCount":72,"integrity":"sha512-cgbO6Mx6vfYGlILN8b+gpapPyZXj3V/ajZluIxgxUTw1xXcRRj+T7mMILS8jEC4Fg31yxb4xRZ070aXRbMY1mg==","signatures":[{"sig":"MEQCH2aYOTAi8b4Z8cwaweJ2v6jDBkwlBoz68Xr6J0qzoxMCIQCTLmeOjWH3D2LRgwDkz3m9quOT3n6Tbldin0ZwztIj3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1018432},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.5.0_1787174407868_0.033431123383788064","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@aiquants/virtualscroll","version":"2.6.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.6.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"ebada3da26d3652203035059b3171e04fe3ca068","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.6.0.tgz","fileCount":72,"integrity":"sha512-wLxj+oo0E6eylnH5DoTsLTVbu6AI9iCvY5xJqYCKTP6gNcdRArMGiJkO5NisM2Yd0EbDV3lVUFVRrmZSutUe1A==","signatures":[{"sig":"MEYCIQCrrPDdLnLTzr9TwTvRt1MGRk1ia9DU7txbKib8oNn72wIhALuhCBVW55fQA82B0zICuKVe3RfT9lByf8wQIoLFcWl+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1031137},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.6.0_1787187724667_0.5986845251178445","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@aiquants/virtualscroll","version":"2.7.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@2.7.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"717fc33cf55584206d6cb6a0dfafd70a912768ba","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-2.7.0.tgz","fileCount":72,"integrity":"sha512-i2aveRTZp1XbcfvhQnJk2AkVADMB7NADuYDGuH+BZeBYkQTAwLWf9XcM26OO1oxpKCMeqOYaqRC6CBNXMyNhdQ==","signatures":[{"sig":"MEUCIQCk0cSZqpJK3/6XYY6ad/w/ENgR4RFtF9d+G4KGRKvJswIgPgiBrLmhrxJzXrXcHTvkNlzAz/YPHJArXiinKIwJ4L8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1040879},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_2.7.0_1787193543607_0.778675337948723","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@aiquants/virtualscroll","version":"3.0.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@3.0.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"cf3d911e852f002d9adaab586f9a86a3bb6ef763","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-3.0.0.tgz","fileCount":72,"integrity":"sha512-z2e86FBdFIa6sKYA7b2P50woLwtYrBFwknLm2DgERsNv9EKFU8ECwr1rNedrxWbIOcujzH88/9To2Ek9aAfnCg==","signatures":[{"sig":"MEYCIQDovpavV2AR8pdWpcTdzcIZhRkvs8cLvEwx3L2RGaLdzQIhAL6MIefPHyesZcy9I9f5uaQ9OuFOi1Bo0UQ92SH6dn2d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043224},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_3.0.0_1787204377562_0.8838341755725199","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@aiquants/virtualscroll","version":"3.1.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@3.1.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"3aca12f42afce51331f315fe729233690f32a6c8","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-3.1.0.tgz","fileCount":76,"integrity":"sha512-4++usIsim6CSB6LP8ccDtdEFhyQ1/gx2BBCjnw4IE/QshKjpvcgfr29MVFYjH3EoHLqVdXAi6Q7b/PUZTkW1eg==","signatures":[{"sig":"MEYCIQCup6eHE7b8OacxInyfyMh3tOgzRIqZbrRdvxojnJ5RhQIhAK4K88tpN93ZrUdw5FWO/q9HRmrNrgUkuXpQaIe8f/+J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1103619},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_3.1.0_1787213134324_0.8588524767604204","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@aiquants/virtualscroll","version":"3.1.1","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@3.1.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"f5101019b062cb8c77cfdbf2ec3da8992526d804","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-3.1.1.tgz","fileCount":76,"integrity":"sha512-QndkaNAs/MWsn9A5DjMGwWyPQ3I+ScUqdLUSxSj9Xea4ftjQ/LC/Xj3OKqw4jKBSm84MKEh5Rx4L47Y+IcVQ+A==","signatures":[{"sig":"MEUCIQCa8jV93fPtPx0uEAgWdmK6gWVSl1lVNL/RxE6rQirESAIgC0sDGgcqccMD+2ub5RmJ1dwMqqxxcsYhesrK7TsjKa4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1109848},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_3.1.1_1787906892990_0.46731581341415507","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@aiquants/virtualscroll","version":"3.4.0","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/virtualscroll@3.4.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"bin":{"virtualscroll":"./dist/cli.js"},"dist":{"shasum":"1bc2e2ffb757430216a1221926843947a0e6bee2","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-3.4.0.tgz","fileCount":80,"integrity":"sha512-LFnToUAdq/42aq6XMlUrzA9tuFC2EJEHWPNFuwTJ/IQFbaVZT7vAj25N+nE226vqzYBIEiuM/aPfQoHgMJ/SSA==","signatures":[{"sig":"MEYCIQCnUVwPoU+gdXsZyRzVbV//WoCuiCyvqlIAHIsQ+l07KQIhAKxKJZHitvmBGEJI0lQzcZc24htMKKVl+2yOKYlQZr8V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1362545},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src tests","test":"vitest run","build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test --repeat-each 1","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","typecheck":"tsc --noEmit","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","test:watch":"vitest --watch","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","test:e2e:headed":"playwright test --headed","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"High-performance virtual scrolling component for React with variable item heights","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"tailwind-merge":"^3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.7","jsdom":"^26.1.0","react":"^19.2.7","rimraf":"^6.1.2","vitest":"^3.2.4","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^20.11.4","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitest/coverage-v8":"^3.2.4","tailwindcss-animate":"^1.0.7","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/virtualscroll_3.4.0_1788395077303_0.9263841312342862","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@aiquants/virtualscroll","version":"3.5.0","description":"High-performance virtual scrolling component for React with variable item heights","sideEffects":["**/*.css"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":"./dist/index.js"},"./styles/virtualscroll.css":"./dist/styles/virtualscroll.css","./styles/virtualscroll.standalone.css":"./dist/styles/virtualscroll.standalone.css"},"bin":{"virtualscroll":"./dist/cli.js"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"dependencies":{"tailwind-merge":"^3.4.0"},"devDependencies":{"@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@tailwindcss/vite":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.0","@testing-library/user-event":"^14.6.1","@types/node":"^20.11.4","@types/react":"^19.2.7","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.2","@vitest/coverage-v8":"^3.2.4","jsdom":"^26.1.0","react":"^19.2.7","react-dom":"^19.2.7","rimraf":"^6.1.2","tailwindcss":"^4.1.18","tailwindcss-animate":"^1.0.7","typescript":"^5.9.3","vite":"^7.2.7","vite-plugin-dts":"^4.5.4","vitest":"^3.2.4"},"keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"author":{"name":"fehde-k","url":"https://x.com/fehdek"},"license":"MIT","publishConfig":{"access":"public"},"scripts":{"build":"vite build && vite build --config vite.config.cli.ts && pnpm build:css && pnpm build:cts","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/virtualscroll.standalone.css --minify","build:cts":"node -e \"const fs=require('node:fs');const re=/(from\\s+')(\\.{1,2}\\/[^']+)\\.(?:tsx|ts)(')/g;for(const f of fs.readdirSync('dist')){if(!f.endsWith('.d.ts'))continue;const s=fs.readFileSync('dist/'+f,'utf8').replace(re,(_m,p,spec,q)=>p+spec+'.cjs'+q).replace(/^\\/\\/# sourceMappingURL=.*(\\r?\\n)?/gm,'');fs.writeFileSync('dist/'+f.slice(0,-5)+'.d.cts',s)}\"","dev":"vite build --watch","watch":"vite build --watch","watch:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/virtualscroll.css --minify --watch","demo:dev":"cd demo && pnpm run dev","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm start","typecheck":"tsc --noEmit","test":"vitest run","test:e2e":"playwright test --repeat-each 1","test:e2e:headed":"playwright test --headed","test:watch":"vitest --watch","test:coverage":"vitest --coverage","lint":"biome check src tests","lint:fix":"biome check --write src tests","format":"biome format --write src tests","format:check":"biome format src tests","license-check":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\"","license-check:json":"pnpm dlx license-checker --production --onlyAllow \"MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;Unlicense\" --json","clean":"rimraf dist","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks"},"_nodeVersion":"26.0.0","_id":"@aiquants/virtualscroll@3.5.0","dist":{"integrity":"sha512-24i4ia8DEmbbGR+vQ67WWESmlELpOnUvn17tSpUWC9f83cFacYzNW5uMlXPyd3bB8jRe9N0nO/d9gzPZ+vPfBg==","shasum":"8ca9b8ad993fdd4e0c96ae64bac8db223d27aef6","tarball":"https://registry.npmjs.org/@aiquants/virtualscroll/-/virtualscroll-3.5.0.tgz","fileCount":80,"unpackedSize":1424966,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDrmIoEhMTIg/eG0kn4cTyQ2esfE3uL3f4PEUuwN6S73gIhAKE/UFb/EB4OMIrgWrj1RxuUR2jQ9qnWPzpf2evkbTxS"}]},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"directories":{},"maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/virtualscroll_3.5.0_1789347781089_0.4357279540251482"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-29T12:04:08.302Z","modified":"2026-09-14T01:03:01.426Z","0.1.0":"2025-08-29T12:04:08.596Z","0.2.0":"2025-09-11T12:12:48.201Z","0.2.1":"2025-09-12T00:01:15.183Z","0.2.2":"2025-09-26T10:42:02.648Z","0.4.0":"2025-10-07T09:40:14.705Z","0.4.1":"2025-10-07T09:45:54.873Z","0.5.0":"2025-10-28T08:41:09.769Z","0.6.1":"2025-10-28T09:35:21.966Z","1.0.0":"2025-10-30T06:45:04.316Z","1.1.0":"2025-11-04T09:30:14.667Z","1.2.0":"2025-11-09T03:01:15.398Z","1.3.0":"2025-11-24T23:04:50.659Z","1.5.0":"2025-11-24T23:10:01.787Z","1.6.0":"2025-11-27T02:25:27.561Z","1.7.0":"2025-11-27T03:48:56.292Z","1.8.0":"2025-12-01T04:14:40.404Z","1.9.0":"2025-12-05T08:39:45.531Z","1.10.0":"2025-12-05T10:53:37.938Z","1.11.0":"2025-12-06T07:18:25.385Z","1.12.0":"2025-12-21T03:06:21.424Z","1.13.0":"2025-12-21T13:30:34.227Z","1.14.0":"2025-12-23T13:46:06.285Z","1.14.1":"2025-12-24T00:07:46.508Z","1.15.0":"2026-02-11T10:59:08.516Z","1.17.0":"2026-06-06T04:17:03.871Z","1.18.0":"2026-07-07T07:19:16.149Z","1.18.2":"2026-07-07T08:35:25.735Z","1.18.3":"2026-07-15T07:49:59.327Z","1.18.5":"2026-07-23T02:21:37.997Z","1.19.0":"2026-07-23T22:35:41.810Z","1.19.1":"2026-07-24T02:58:50.935Z","1.19.2":"2026-07-26T23:35:38.218Z","1.19.3":"2026-07-26T23:54:07.494Z","1.20.0":"2026-07-30T11:32:37.443Z","1.22.0":"2026-08-04T02:30:54.231Z","1.22.1":"2026-08-07T13:49:02.025Z","1.23.0":"2026-08-07T22:49:23.942Z","1.24.0":"2026-08-11T03:04:46.298Z","1.25.0":"2026-08-11T08:09:27.631Z","2.0.0":"2026-08-11T14:04:58.271Z","2.1.0":"2026-08-14T12:08:46.384Z","2.2.0":"2026-08-14T17:21:06.135Z","2.3.0":"2026-08-19T09:01:46.873Z","2.4.0":"2026-08-19T11:21:27.010Z","2.5.0":"2026-08-19T21:20:08.040Z","2.6.0":"2026-08-20T01:02:04.813Z","2.7.0":"2026-08-20T02:39:03.769Z","3.0.0":"2026-08-20T05:39:37.703Z","3.1.0":"2026-08-20T08:05:34.486Z","3.1.1":"2026-08-28T08:48:13.157Z","3.4.0":"2026-09-03T00:24:37.466Z","3.5.0":"2026-09-14T01:03:01.231Z"},"author":{"name":"fehde-k","url":"https://x.com/fehdek"},"license":"MIT","keywords":["react","virtual-scroll","virtual-scrolling","performance","large-list","typescript","fenwick-tree","variable-height"],"description":"High-performance virtual scrolling component for React with variable item heights","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"readme":"# @aiquants/virtualscroll\n\nHigh-performance virtual scrolling component for React with variable item heights using Fenwick Tree optimization.\n\n## Features\n\n- ⚡ **High Performance**: Optimized for thousands of items with O(log n) operations\n- 📐 **Variable Heights**: Support for items with different heights\n<!-- - 🌲 **Fenwick Tree**: Advanced data structure for efficient prefix sum calculations -->\n- 🎯 **Precise Scrolling**: Accurate scroll positioning and smooth navigation\n<!-- - 🔄 **LRU Caching**: Built-in cache for optimal memory usage -->\n- 📱 **Touch Support**: Full support for touch devices\n- ↔️ **Horizontal Delegation**: Opt-in `onWheelHorizontal` hands horizontal wheel / trackpad (and shift+wheel) gestures to the parent — build frozen-column data grids\n- 🎨 **Customizable**: Flexible styling and theming options\n- 🌀 **Ultrafast Tap Scroll**: Adaptive tap scroll circle that scales speed up to 120× for massive datasets\n- ♿ **Accessibility opt-ins**: Escape row-return (`enableEscapeRowReturn`) and a screen-reader live region (`liveRegion`) announcing the visible range with your own wording\n- 🔧 **TypeScript**: Full TypeScript support with comprehensive type definitions\n\n## Installation\n\n```bash\nnpm install @aiquants/virtualscroll\n# or\nyarn add @aiquants/virtualscroll\n# or\npnpm add @aiquants/virtualscroll\n```\n\n> **Note:** the `virtualscroll demo` CLI is for source checkouts only — the demo app is not bundled in the published npm package. To run it, clone the repository and run `pnpm install && pnpm dev` inside `demo/`.\n\n## Basic Usage\n\n> **Required:** import the package stylesheet **once** in your app — the components rely on\n> the `.aqvs-*` layout classes it ships, and without it the list overflows its viewport and\n> the scrollbar is mislaid. This stylesheet is also a **peer CSS dependency** of\n> `@aiquants/directory-tree`, `@aiquants/select-box`, and `@aiquants/daily-report`; when you also\n> use those packages, import virtualscroll's CSS just once and they all share it.\n>\n> The package ships **two CSS artifacts**. Neither bundles a CSS reset — the standalone build declares\n> `@layer base` but leaves it empty — so every `.aqvs-*` rule cancels the UA defaults **its own box model**\n> depends on: `box-sizing`, `border-style`, the UA button bevel and padding, and the tap highlight (2.2.0).\n> The components' box model is therefore identical with and without Tailwind preflight; text that inherits\n> host typography (the \"No items\" label, the Top/Bottom pill label, your own row content) still follows the\n> host's font and default line-height **by design**. The package's JSX writes `.aqvs-*` class names only,\n> never a Tailwind utility, and the standalone build ships no utilities either — the `.aqvs-*` rules are\n> byte-identical in both artifacts, so import exactly one:\n>\n> ```css\n> /* Tailwind v4 host — components-only build (Artifact A) in the components layer */\n> @import '@aiquants/virtualscroll/styles/virtualscroll.css' layer(components);\n> ```\n>\n> ```css\n> /* Non-Tailwind host — single self-contained standalone build (Artifact B) */\n> @import '@aiquants/virtualscroll/styles/virtualscroll.standalone.css';\n> ```\n\n```tsx\n// Load the stylesheet once, e.g. in your app entry point (see the styling note above)\nimport '@aiquants/virtualscroll/styles/virtualscroll.standalone.css'\nimport { VirtualScroll } from '@aiquants/virtualscroll'\nimport { useCallback } from 'react'\n\ntype Item = {\n  id: number\n  text: string\n  height: number\n}\n\nconst items: Item[] = Array.from({ length: 10000 }, (_, i) => ({\n  id: i,\n  text: `Item ${i}`,\n  height: Math.floor(Math.random() * 50) + 30, // Random height between 30-80px\n}))\n\nfunction App() {\n  const getItem = useCallback((index: number) => items[index], [])\n  const getItemHeight = useCallback((index: number) => items[index].height, [])\n\n  return (\n    <div style={{ height: '400px', width: '100%', border: '1px solid #d1d5db' }}>\n      <VirtualScroll\n        itemCount={items.length}\n        getItem={getItem}\n        getItemHeight={getItemHeight}\n        overscanCount={5}\n      >\n        {(item, index) => (\n          <div\n            key={item.id}\n            style={{\n              height: item.height,\n              padding: '8px',\n              borderBottom: '1px solid #eee',\n              display: 'flex',\n              alignItems: 'center',\n            }}\n          >\n            <span>#{index}: {item.text}</span>\n          </div>\n        )}\n      </VirtualScroll>\n    </div>\n  )\n}\n```\n\n## Sizing\n\n`viewportSize` is **optional and best omitted**. When it is absent the component measures its own band\n(the content element, via `ResizeObserver`) and every derived value follows automatically.\n\n```tsx\n// The host owns the height; VirtualScroll fills it.\n<div className=\"min-h-0 flex-1\">\n    <VirtualScroll itemCount={n} getItem={getItem} getItemHeight={getItemHeight}>{renderRow}</VirtualScroll>\n</div>\n```\n\n**The host must establish a definite height** (`h-full`, `flex-1` + `min-h-0`, an explicit px height,\n`position: absolute`, …). With an auto-height host the band stays 0 and the package logs a warning —\nthere is nothing to measure. In self-measured mode the root carries `data-self-measured=\"true\"` and the\npackaged rule `.aqvs-scroll-pane[data-self-measured=\"true\"] { height: 100% }` stretches it to the host,\nso the stylesheet import is required for this mode as well.\n\n**Pass `viewportSize` only when the band is known by calculation, not measurement** — a dropdown whose\nheight comes from row count × row height, for example. If you pass a value that disagrees with the real\nband by more than 1px, the package warns: the clip window, the max scroll position, the thumb mapping,\nthe rendered row count and scrollability all derive from it, so all five would be silently wrong (rows\nspilling over the next element, a dead band at the bottom, an end you can never reach, a thumb that\nleaves the viewport, or a list that ignores the wheel entirely).\n\n## Horizontal Scrolling\n\n`VirtualScroll` virtualizes and scrolls the **vertical** axis only. To add a horizontal axis — e.g. a\ndata grid whose columns extend past the viewport — pass `onWheelHorizontal`. Horizontal-dominant\nwheel / trackpad gestures (and shift+wheel) are then delegated to your handler, which drives a\nhorizontal offset you own. Vertical scrolling is untouched. When `onWheelHorizontal` is omitted,\nhorizontal gestures and shift+wheel bypass vertical scroll interception so parent native scrolling\n(e.g., `overflow-x: auto`) works seamlessly without being consumed.\n\nA common pattern freezes a left column and translates the remaining columns via a shared CSS\nvariable (so rows don't re-render on horizontal scroll), reusing the package's `ScrollBar` with the\n`horizontal` prop for the bottom bar:\n\n```tsx\nimport { ScrollBar, VirtualScroll } from '@aiquants/virtualscroll'\nimport { useCallback, useState } from 'react'\n\nconst clamp = (v: number, max: number) => Math.max(0, Math.min(v, max))\n\nfunction Grid() {\n  const [hscroll, setHscroll] = useState(0)\n  const maxHScroll = /* contentWidth - visibleWidth */ 632\n  const onWheelHorizontal = useCallback((dx: number) => setHscroll((h) => clamp(h + dx, maxHScroll)), [maxHScroll])\n\n  // `--hx` on the container is inherited by every row; numeric tracks translate via CSS only.\n  return (\n    <div style={{ ['--hx' as string]: `${hscroll}px`, display: 'flex', flexDirection: 'column' }}>\n      <div style={{ height: 440 }}>\n        <VirtualScroll itemCount={rows.length} getItem={getItem} getItemHeight={getItemHeight} onWheelHorizontal={onWheelHorizontal}>\n          {(row) => (\n            <div style={{ display: 'flex' }}>\n              <div style={{ width: 180, flexShrink: 0 }}>{row.label}{/* frozen column */}</div>\n              <div style={{ flex: 1, overflow: 'hidden' }}>\n                <div style={{ transform: 'translateX(calc(-1 * var(--hx)))' }}>{/* numeric columns */}</div>\n              </div>\n            </div>\n          )}\n        </VirtualScroll>\n      </div>\n      <ScrollBar\n        horizontal\n        contentSize={1200}\n        viewportSize={568}\n        scrollPosition={hscroll}\n        onScroll={(next) => { const c = clamp(typeof next === 'function' ? next(hscroll) : next, maxHScroll); setHscroll(c); return c }}\n      />\n    </div>\n  )\n}\n```\n\nA runnable version lives in the demo at **`/horizontal`** (`pnpm demo:dev`), and\n[`@aiquants/directory-tree`](../directory-tree)'s TreeGrid mode uses this exact pattern in production.\n\n## Bridging input from outside the pane\n\nThe wheel listener lives on `.aqvs-scroll-pane` only, so anything you render **outside** it — a frozen\ncolumn header, a sticky footer, the horizontal scrollbar row, an empty-state panel — is a wheel dead\nzone. Data tables pin the header outside the virtual list by convention, so this gap is the norm, not\nan edge case.\n\nUse `useWheelBridge`: it gives that element the pane's own wheel semantics.\n\n```tsx\nimport { useRef } from 'react'\nimport { useWheelBridge, VirtualScroll, type VirtualScrollHandle } from '@aiquants/virtualscroll'\n\nconst listRef = useRef<VirtualScrollHandle>(null)\nconst headerRef = useWheelBridge(listRef)\n\n<div ref={headerRef}>frozen header — outside the pane</div>\n<VirtualScroll ref={listRef} onWheelHorizontal={setScrollX} ...>{renderRow}</VirtualScroll>\n```\n\n**The hook takes no configuration that affects wheel semantics, and that is the point.** Wheel speed, the horizontal sink, whether\nthe list can scroll, inertia and axis resolution all live behind the handle, in one function\n(`applyWheel`) that the pane's own listener goes through too. Give the bridge its own settings and the\nsame grid ends up scrolling at one speed over the rows and another over the header — we measured exactly that\n— 30px vs 10px for one wheel tick at `wheelSpeedMultiplier: 3` — in a work-in-progress build that did give\nthe bridge its own settings. With a single home for the rules, that\nmismatch is not expressible. The hook's job is `{ passive: false }` registration, teardown, and the\n`enableBridge` on/off switch — nothing else. Deciding whether an event was already applied belongs to\n`applyWheel`, which tracks the events **this package** consumed (see below).\n\nIts one option is `enableBridge` (default `true`) — a plain on/off switch, not a semantic knob. Pass\n`{ enableBridge: false }` to stop bridging without unmounting the element:\n\n```tsx\nconst headerRef = useWheelBridge(listRef, { enableBridge: !isEditing })\n```\n\nIt works with `ScrollPane` directly too: the parameter is typed against `WheelBridgeTarget`\n(`{ applyWheel }`), which both `VirtualScrollHandle` and `ScrollPaneHandle` satisfy.\n\nComposing with your own ref is safe — the hook keeps a per-element ledger and skips re-attaching to an\nelement it already holds, so the common inline merge cannot pile up listeners (without it, four\nre-renders leave five live wheel listeners on one element). Return the hook's value so React 19 can run\nits cleanup on unmount:\n\n```tsx\n<div ref={(node) => { myRef.current = node; return headerRef(node) }} />\n```\n\nDropping that `return` still works — the ledger keeps it correct — but the listener then stays on the\nelement until the element itself is garbage-collected.\n\nThe ledger is keyed **per element**, so one hook can serve several bands (a header and a footer) without\nthem fighting over a single slot.\n\n**Wheel scrolling chains to the page at the edges** (like a native scroll container). A vertical wheel\nthat cannot move the list any further in its own direction is left to the ancestors, so a user wheeling\ndown a long page passes through the list instead of getting trapped. The notch that *reaches* the edge\nis consumed (partial movement, stops exactly at the edge); the *next* notch chains — the same stepping a\nnative scroller has. Set `behaviorOptions.overscrollBehavior: \"contain\"` to keep the pre-2.7.0 trapping\n(e.g. a list inside a modal where the page behind must never move).\n\n⚠️ **`onWheel` cannot do this.** React 19 registers `onWheel` as a passive listener, so `preventDefault()`\nis ignored and the page scrolls instead. The hook attaches a `{ passive: false }` listener itself.\n\n⚠️ **Only bridge elements OUTSIDE the pane.** Anything inside the pane is already covered by the pane's\nown listener, so bridging it is a redundant registration — the consumed-event mark keeps it from being\napplied twice, but the extra listener is pure overhead on the wheel hot path.\n\n⚠️ **Do not bridge with `scrollTo`.** It is a *jump* API: it floors the absolute position (sub-pixel\ntrackpad deltas vanish entirely) and pins a scroll anchor (every later size change re-pins the list to\nthat row, so filtering a list makes it jump back to where it used to be). `scrollBy` is the delta API and\ntakes the pane's own path. Also never write `scrollTo(handle.getScrollPosition() + delta)` — the getter\nreturns the `-1` sentinel while the pane is unconnected.\n\n### Horizontal scrolling from the keyboard\n\nWith `onWheelHorizontal` wired **and `behaviorOptions.enableKeyboardNavigation` left on** (the default),\n`horizontalKeyInputs` lets a focused row emit horizontal deltas too:\n\n| Value | Keys | Use it when |\n| --- | --- | --- |\n| `[]` (default) | — | Never steal the row's own arrow handling |\n| `[\"arrow\"]` | `←/→` | Lists that want keyboard access to the horizontal axis |\n\n`Shift + ←/→` is **never** consumed (the `\"shift-arrow\"` input was removed in 3.0.0): in the browser it\nextends the text selection, and the 2.x \"yield only while a selection exists\" detection had structural\ndefects — selections inside Shadow DOM are invisible to `document.getSelection()` (the guard silently\nfails), and `Ctrl+A` makes every row intersect the selection, locking horizontal keys out until the\nselection is cleared. Shift-flavored horizontal input remains available via `shift + wheel`, which does\nnot conflict with selection. The prop stays an array (one vocabulary entry today) to match\n`behaviorOptions.pointerDragInputs` and to keep future additions non-breaking.\n\nThe default is empty on purpose: the package's row key handler runs in the **capture** phase, ahead of\nyour row's own handler. When it consumes a key it calls `preventDefault()` only and deliberately does\n**not** stop propagation — `stopPropagation()` would delete the event from `document` and `window`\nbubble listeners too, breaking global hotkey libraries and keydown telemetry. Check `defaultPrevented`\nin your own handler, exactly as you would for the vertical arrows.\n\nIt also fires only when the row **itself** is the event target. Focus sitting on something inside the\nrow — a `role=\"slider\"` cell, a link, a nested `overflow-x:auto` region — is never hijacked, so you do\nnot have to avoid `[\"arrow\"]` just because your rows contain arrow-key widgets.\n\n`horizontalKeyStep` (default 40) must be finite and positive; anything\nelse logs a warning and leaves the key untouched rather than silently substituting the default.\n\n⚠️ **This does nothing when `enableKeyboardNavigation` is `false`** — the row key handler is what reads\nthese keys, and turning navigation off removes it. The package emits a `Logger.warn` when it sees that\ncombination. Note the next section tells `listbox` / `tree` / `grid` authors to turn navigation off; if\nyou follow both, your arrow keys are dead. Pick one.\n\n⚠️ **Rows are not in the page tab sequence** (`tabIndex={-1}`). This feature fires only while a row has\nfocus, so if you want keyboard-only users to reach it, give them an entry point — for example call\n`handle.focusItemAtIndex(0)` when the list receives focus.\n\n⚠️ **Wrappers that own the horizontal axis should seal these too.** If you re-export VirtualScroll with\n`Omit<VirtualScrollProps, 'onWheelHorizontal'>`, add `onPanHorizontal` (3.2.0), `horizontalKeyInputs`\nand `horizontalKeyStep` to that same `Omit`. All four sit at the top level, next to each other,\nprecisely so one `Omit` closes the whole horizontal seam.\n\n## Escape row-return\n\nRows are not in the tab order (`tabIndex={-1}`), so once focus enters a link or widget inside a\nrow there is by default no keyboard way back to the row — the anchor for arrow-key navigation.\n`behaviorOptions.enableEscapeRowReturn` (default: `false`) makes `Escape` return focus to the row\nwrapper (scrolling it into view if needed).\n\nIt is off by default because `Escape` is the most overloaded key on the page (closing modals and\ndropdowns, cancelling IME composition, clearing selection). The feature therefore listens in the\n**bubble** phase — a dropdown opened inside a cell handles its own `Escape` first and can keep it\nwith `stopPropagation()` or `preventDefault()` — skips IME composition (`isComposing`), leaves\n**editable targets** (`input` / `textarea` / `select` / `contentEditable`) entirely alone (their\nnative `Escape` default actions, like Blink/WebKit clearing an `<input type=\"search\">`, never show\nup in `defaultPrevented` and would otherwise be silently suppressed), and never acts while the row\nitself has focus (an `Escape` on the row means whatever *you* decide — e.g. deselect). When it\ndoes act it calls `preventDefault()` only and does not stop propagation, the same contract as the\narrow keys.\n\n## Screen-reader live region\n\nVirtualization removes off-screen rows from the DOM, so a screen-reader user scrolling the list\ngets no feedback about where they are. The opt-in `liveRegion` prop renders a visually hidden\n`role=\"status\"` element (polite, atomic) next to the pane and updates it after the visible range\nsettles:\n\n```tsx\n<VirtualScroll\n    liveRegion={{\n        format: ({ visibleStartIndex, visibleEndIndex, itemCount }) => `rows ${visibleStartIndex + 1}-${visibleEndIndex + 1} of ${itemCount}`,\n        debounceMs: 400, // default; trailing — announces once after the last range change\n    }}\n    ...\n/>\n```\n\nThe package ships **no built-in strings** — wording and language are yours (`format` returning the\nsame string leaves the DOM untouched; `\"\"` clears the region). An invalid `debounceMs` (negative /\nnon-finite) logs a warning and disables announcements instead of silently substituting the\ndefault. ⚠️ If your app already maintains its own live region for the list, keep using\n`onRangeChange` instead — two regions double-announce.\n\n## VirtualGrid (2D — trillion-scale columns, v3.2.0)\n\n`VirtualGrid` composes the proven row axis (an embedded `VirtualScroll`) with a symmetric\nhorizontal column engine built from the SAME machinery: a second sparse Fenwick width tree,\nthe shared rendering-range computation (BigInt huge branch included), quantized column-anchor\nrebasing at the shared `ANCHOR_REBASE_DISTANCE`, and synthetic scrolling — total-size pixels\nnever land in the DOM, so `colCount` inherits the full row-axis profile (`<= 2^53 - 1`; ten\ntrillion columns sit comfortably inside).\n\n```tsx\n<VirtualGrid<string>\n    rowCount={1_000_000_000_000}\n    colCount={1_000_000_000_000}\n    getRowHeight={() => 24}\n    getColWidth={() => 100}\n    getCell={(row, col) => `${row}:${col}`}\n    contentProps={{ role: \"grid\" }}          // composite role belongs to the consumer\n    getCellProps={(row, col) => ({ role: \"gridcell\" })}\n    onRenderTruncated={(info) => console.warn(info)} // the cell cap is never silent\n>\n    {(cell) => <span>{cell}</span>}\n</VirtualGrid>\n```\n\nContracts (see the design plan under `docs/plans/` for the full bounding theorem):\n\n- `getRowHeight` / `getColWidth` return integer px, `0` = hidden, `<= MAX_TRACK_SIZE`\n  (2^18 px) — oversized tracks fail fast with a `RangeError` (a single unbounded track would\n  pierce the measured browser layout wall at 2^25 px).\n- Per-axis overscan defaults to 3 (a deliberate, documented deviation from the bare\n  `VirtualScroll` default of 15 — the bounding contract's window-span term is\n  overscan-proportional). With the defaults, ancestor `scale(z)` stays in the full-precision\n  band up to z ≈ 5.3.\n- The handle mirrors the row contracts: logical coordinates, `-1` sentinels pre-attach,\n  `scrollBy`/`scrollTo` return the applied clamped position synchronously, `applyWheel`\n  returns a boolean for `useWheelBridge`, and `{index, offset}` anchors\n  (`getScrollAnchor` / `initialScrollAnchor`) replace raw-px restore.\n- Header sync: derive the window origin (`offsetOf(renderingColStart)`) from YOUR geometry\n  source, position header cells window-relative, and translate the header track by\n  `origin - scrollX` per `onScroll` — the same scheme the row-side headers use. LTR only (v1).\n- Row-side parity carries: `horizontalKeyInputs` / `horizontalKeyStep` (arrow keys reach the\n  grid-owned horizontal axis), `contentInsets`, `background`, `onRowFocus` /\n  `focusRowAtIndex`, and `behaviorOptions.defaultColWidth` (explicit Fenwick baseValue — skips\n  width sampling). The full member-by-member classification lives in\n  `docs/specs/2026.09.01 [AI] virtualscroll-virtual-grid.md`.\n- Frozen leading columns (v3.3.0): `frozenLeadingCols` pins the first F columns as a static\n  band OUTSIDE the anchor machinery (direct tree-absolute lefts; scroll cells live inside a\n  static clip whose inner carries the `residual - W_F` origin-shift transform). Integer in\n  `[0, MAX_FROZEN_LEADING_COLS]` (128) — `RangeError` otherwise; values beyond the current\n  `colCount` freeze every column (documented dynamic clamp). `scrollToCell` /\n  `initialScrollAnchor` targeting a frozen column are horizontal no-ops (always visible), and\n  `getFrozenSize()` reports the effective `{cols, width, rows, height, trailingCols,\n  trailingRows, trailingWidth, trailingHeight, trailingVisibleWidth, trailingVisibleHeight}`\n  (both axes, both ends — the `rows`/`height` fields are a non-breaking v3.4.0 addition and\n  the six `trailing*` fields a non-breaking v3.5.0 addition; `trailingWidth`/`trailingHeight`\n  are TREE px, the `trailingVisible*` pair is the viewport clip `min(tree, max(0, viewport -\n  leading))`) for consumer hit-test partitioning.\n  Frozen cells precede the scroll band in row DOM (logical column order for AT / tabbing), and\n  an all-frozen grid reports the scroll band as the canonical EMPTY window (`renderingColStart\n  > renderingColEnd` — inclusive loops run zero iterations). `frozenLeadingCols` of `0` (the\n  default) is structurally identical to the pre-frozen DOM.\n- Frozen leading rows (v3.4.0): `frozenLeadingRows` pins the first R rows as a grid-owned band\n  ABOVE the scroll pane (out-of-pane band + index shift: the embedded row axis only ever sees\n  the shifted space `rowCount - R`, so the vertical bar maps the scroll band naturally — no\n  bar inset needed). Band rows reuse the normal row renderer, so frozen columns keep working\n  inside them (the frozen-rows x frozen-cols 4-quadrant corner comes for free). Integer in\n  `[0, MAX_FROZEN_LEADING_ROWS]` (128) — `RangeError` otherwise; values beyond the current\n  `rowCount` freeze every row (documented dynamic clamp — the scroll rows then report the\n  canonical EMPTY window `renderingRowStart > renderingRowEnd`), as does a degenerate band\n  (H_F fills the measured viewport — zero scroll-row DOM). `scrollToCell` /\n  `initialScrollAnchor` targeting a frozen row are vertical no-ops (always visible),\n  `contentInsets.top` remains leading blank space INSIDE the scroll band (a pinned band is not\n  an inset), and `frozenLeadingRows` of `0` (the default) is structurally identical to the\n  pre-frozen DOM. Changing `frozenLeadingRows` at runtime rebuilds the embedded row tree\n  (remount) and preserves the visible-top viewpoint across the toggle.\n- Frozen trailing columns / rows (v3.5.0): `frozenTrailingCols` pins the last T columns in a\n  right-anchored clip outside the anchor machinery (band-local lefts; the scroll band\n  generalizes to `viewport - W_F - W_T` with a right clip inset driven by\n  `--aqvs-grid-trailing-width` — written only while T > 0, `0px` fallback otherwise), and\n  `frozenTrailingRows` pins the last T rows as a second grid-owned band BELOW the scroll pane\n  (clip height = the visible size `min(H_T, max(0, viewport - H_F))`, inner bottom-anchored at\n  the tree height H_T). Band rows reuse the normal row renderer, so every corner of the\n  3 x 3 region grid comes for free. Integers in `[0, MAX_FROZEN_TRAILING_COLS]` /\n  `[0, MAX_FROZEN_TRAILING_ROWS]` (128) — `RangeError` otherwise; the dynamic clamp is\n  `min(T, count - effectiveLeading)`: the LEADING band wins the count space (ADR-19-1), and\n  when the leading + trailing extents exceed the viewport, occluded trailing cells cannot be\n  scrolled into view (a documented clamp — `scrollToCell` / `initialScrollAnchor` targeting a\n  trailing track stay no-ops on that axis, the column no-op leaving any armed column anchor in\n  place). Changing `frozenTrailingCols`/`frozenTrailingRows` at runtime does NOT remount the\n  embedded row axis (the tail-only itemCount change keeps the viewpoint for free; a pending\n  row anchor whose target enters the band clamps to the last scroll row), and a value of `0`\n  (the default) is structurally identical to the pre-trailing DOM.\n\n## Residual quantizer for snapping consumers\n\nConsumers that snap positions to a fixed quantum (row height, column width) lose sub-quantum\ndeltas: a high-resolution trackpad emits many small deltas, each rounds to zero rows, and a slow\nswipe never moves. `createResidualQuantizer` carries the remainder across events:\n\n```tsx\nimport { createResidualQuantizer } from \"@aiquants/virtualscroll\"\n\nconst quantizer = createResidualQuantizer({ quantum: ROW_HEIGHT })\nconst onWheelVertical = (deltaY: number) => {\n    const emitted = quantizer.push(deltaY) // always a multiple of the quantum (possibly 0)\n    if (emitted !== 0) snapScrollBy(emitted)\n}\n```\n\nBy default the residue is dropped on direction reversal (so a stale forward remainder cannot delay\nthe first backward step); call `reset()` from your own idle timer or when the snapped layout\nchanges. `quantum` must be finite and positive (anything else throws — fail fast). Non-finite\ndeltas and deltas beyond `Number.MAX_SAFE_INTEGER` emit 0 without poisoning the accumulator —\npast 2^53 the float product stops being an *exact* multiple of the quantum, the very property a\nsnapping consumer relies on. The quantizer is deliberately time-free: idle expiry policies differ\nper UI, so they stay on your side of the seam.\n\n## Suspended transitions (React 18/19 `startTransition` + `Suspense`)\n\nScroll state is judged against the **last committed** dimensions, never against a render that got\ndiscarded. While a transition that shrinks or grows the list is suspended (the old list stays on\nscreen), the wheel keeps working and every jump/clamp uses the sizes the user can actually see —\na pending shrink cannot snap the list to the top, and a pending grow cannot let you overscroll into\nspace that does not exist yet. Once the transition commits, positions re-clamp against the new sizes\nas usual. Manual scrolling during the pending window also detaches a pending `scrollTo`/`scrollToIndex`\nanchor exactly like it does outside a transition, so the commit does not yank the list back.\n\n(Regression-tested in jsdom and real Chromium: `src/transitionClamp.spec.tsx`,\n`tests/e2e/transition-scroll.spec.ts`.)\n\n## Composite widget roles (listbox / tree / grid)\n\nBuilding a `listbox`, `tree` or `grid` on top of VirtualScroll? Put the role on **`contentProps`**,\nnot on a wrapper around `<VirtualScroll>`:\n\n```tsx\n<VirtualScroll\n  itemCount={options.length}\n  getItem={(i) => options[i]}\n  getItemHeight={() => 36}\n  viewportSize={300}\n  contentProps={{ id: listboxId, role: \"listbox\", \"aria-label\": \"Warehouses\" }}\n  // Required: with keyboard navigation ON, every row wrapper gets tabIndex={-1}. That does not add a\n  // tab stop, but it makes the wrappers focusable — VirtualScroll then moves real DOM focus onto a row\n  // — and it makes them opaque to the owned-element relationship.\n  // ⚠️ This also disables `horizontalKeyInputs` — the row key handler goes away with it.\n  behaviorOptions={{ enableKeyboardNavigation: false }}>\n  {(option) => <div role=\"option\" aria-selected={false}>{option.label}</div>}\n</VirtualScroll>\n```\n\n**Why the content element and not the root.** The root also contains the custom scrollbar, whose\n`role=\"scrollbar\"` is not an allowed owned child of `listbox` — ARIA permits only `option` and\n`group`. The content element owns exactly the rendered rows; the scrollbar and any overlay are its\nsiblings. Passing `id` here also overrides the generated one, so the scrollbar's `aria-controls`\nkeeps pointing at the same element.\n\nThe wrappers between the content element and your rows carry no role, no global ARIA attribute and\nno `tabindex`, so they are transparent to the owned-element relationship — **but only while\n`enableKeyboardNavigation` is `false`**. That is what a consumer driving selection through\n`aria-activedescendant` should be doing anyway: with it on, VirtualScroll moves real DOM focus onto\na row, which the APG combobox/listbox patterns forbid.\n\nFor a virtualized list you must also publish `aria-setsize` (the full count) and `aria-posinset`\n(the absolute 1-based index) on every row — a browser cannot infer them when only a window of rows\nexists in the DOM.\n\n## API Reference\n\n### VirtualScroll Props\n\n| Prop | Type | Required | Description |\n| --- | --- | --- | --- |\n| `children` | `(item: T, index: number) => ReactNode` | ✅ | Render function for items |\n| `itemCount` | `number` | ✅ | Total number of items |\n| `getItem` | `(index: number) => T` | ✅ | Function to get item at index |\n| `getItemHeight` | `(index: number) => number` | ✅ | Function to get item height |\n| `viewportSize` | `number` | ❌ | Height of the visible band. **Omit it** — the component then measures its host with a `ResizeObserver`. Pass it only when you know the band by calculation rather than measurement (e.g. a dropdown sized from row count × row height). See [Sizing](#sizing) |\n| `overscanCount` | `number` | ❌ | Number of items to render outside viewport (default: 15) |\n| `className` | `string` | ❌ | CSS class name. Lands on the scroll root (`.aqvs-scroll-pane`) — see [Custom Scrollbar Styling](#custom-scrollbar-styling) |\n| `getItemKey` | `(index: number) => React.Key` | ❌ | Stable React key per index (defaults to the index) |\n| `testId` | `string` | ❌ | Emitted as `data-testid` on the scroll root. DOM hooks should use `data-*`, never class selectors |\n| `onScroll` | `(position: number, totalHeight: number) => void` | ❌ | Scroll event handler |\n| `onRangeChange` | `(range: VirtualScrollRange) => void` | ❌ | Range change handler |\n| `onWheelHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in horizontal delegation. Horizontal-dominant wheel / trackpad gestures (and shift+wheel) are delegated to this handler so the parent can implement horizontal scrolling. ⚠️ **Keyboard deltas arrive here too** when `horizontalKeyInputs` is set. When omitted, horizontal gestures bypass vertical scrolling so parent native scrolling works. See [Horizontal Scrolling](#horizontal-scrolling). |\n| `onPanHorizontal` | `(deltaX: number) => void` | ❌ | Opt-in delegation of the horizontal component of pointer pans (touch / pen drags) — the pan twin of `onWheelHorizontal` with the same sign convention, per-move increments divided by the press-time x-axis ancestor scale (3.2.0). When set, purely horizontal pans also activate the drag. Same seal family as `onWheelHorizontal` — wrappers sealing the horizontal axis must `Omit` this name too. |\n| `horizontalKeyInputs` | `readonly \"arrow\"[]` | ❌ | Keyboard gestures that emit a horizontal delta through `onWheelHorizontal` (default: `[]`, so row-level arrow handling is never stolen). `Shift + ←/→` is never consumed. Fires only when the row itself is the event target. ⚠️ Requires `behaviorOptions.enableKeyboardNavigation` (default `true`) — with it off the rows have no key handler at all and this prop does nothing (the package warns) |\n| `horizontalKeyStep` | `number` | ❌ | Pixels per horizontal arrow press (default: 40). Must be finite and positive; anything else warns and leaves the key untouched |\n| `background` | `ReactNode` | ❌ | Background element |\n| `initialScrollIndex` | `number` | ❌ | Initial scroll index |\n| `initialScrollOffset` | `number` | ❌ | Initial scroll offset (**logical** px). Not suitable for restoring positions of variable-height lists across remounts — use `initialScrollAnchor` |\n| `initialScrollAnchor` | `{ index: number; offsetPx?: number }` | ❌ | Anchor-based initial position (1.25.0): starts with row `index` scrolled `offsetPx` px past the viewport top, exact from the first commit. Save side: `getScrollAnchor()`. Precedence: anchor > `initialScrollIndex` > `initialScrollOffset` |\n| `contentInsets` | `ScrollPaneContentInsets` | ❌ | Insets for the content area |\n| `callbackThrottleMs` | `number` | ❌ | Throttle time for scroll callbacks (default: 5ms) |\n| `onItemFocus` | `(index: number) => void` | ❌ | Callback when an item is focused |\n| `scrollBarOptions` | `VirtualScrollScrollBarOptions` | ❌ | Options for the scrollbar |\n| `behaviorOptions` | `VirtualScrollBehaviorOptions` | ❌ | Options for scrolling behavior |\n| `liveRegion` | `VirtualScrollLiveRegionOptions` | ❌ | Opt-in screen-reader live region announcing the visible range (nothing rendered when omitted). See [Screen-reader live region](#screen-reader-live-region) |\n| `contentProps` | `React.AriaAttributes & { id?: string; role?: React.AriaRole }` | ❌ | ARIA / identity attributes for the scrollable **content** element — the correct host for a composite widget role. See [Composite widget roles](#composite-widget-roles-listbox--tree--grid). |\n\n### VirtualScrollScrollBarOptions\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `width` | `number` | Width of the scrollbar (default: 12) |\n| `enableThumbDrag` | `boolean` | Enable dragging the scrollbar thumb (default: true) |\n| `enableTrackClick` | `boolean` | Enable clicking the scrollbar track (default: true) |\n| `enableArrowButtons` | `boolean` | Enable arrow buttons on the scrollbar (default: true) |\n| `enableScrollToTopBottomButtons` | `boolean` | Enable \"Scroll to Top\" and \"Scroll to Bottom\" buttons (default: false) |\n| `renderThumbOverlay` | `(props: ScrollBarThumbOverlayRenderProps) => ReactNode` | Render prop to anchor custom UI near the scrollbar thumb |\n| `tapScrollCircleOptions` | `ScrollBarTapCircleOptions` | Customization for the auxiliary tap scroll circle |\n\n### VirtualScrollBehaviorOptions\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `enablePointerDrag` | `boolean` | Enable dragging the content area to scroll (default: true). ⚠️ Setting this to `false` removes the only way to scroll on touch devices — the pane is transform-based and has no native scroller. Use `pointerDragInputs` to exclude a single pointer type instead. |\n| `pointerDragInputs` | `readonly (\"mouse\" \\| \"pen\" \\| \"touch\")[]` | Pointer types allowed to drag-scroll the content area (default: all three). `touch-action: none` is applied only when `\"touch\"` or `\"pen\"` is included. |\n| `enableKeyboardNavigation` | `boolean` | Enable keyboard navigation (default: true). Arrow / Page keys move row focus. ⚠️ They fire **only when the row wrapper itself is the event target** — focus inside a row (a `role=\"slider\"` cell, a link, a nested scroll region) keeps its own keys |\n| `enableEscapeRowReturn` | `boolean` | Opt-in (default: false): pressing `Escape` while focus sits on an element **inside** a row returns focus to the row wrapper. Listens in the bubble phase and respects `preventDefault` / `stopPropagation` / IME composition, so widgets inside the row keep first claim on their own `Escape`. Requires `enableKeyboardNavigation` |\n| `wheelSpeedMultiplier` | `number` | Multiplier for mouse wheel scrolling speed (default: 1) |\n| `inertiaOptions` | `ScrollPaneInertiaOptions` | Physics tuning for drag inertia |\n| `overscrollBehavior` | `\"auto\" \\| \"contain\"` | Wheel behavior at the edges (default `\"auto\"` = chain to ancestors like a native scroller; `\"contain\"` = keep consuming, pre-2.7.0 trapping) |\n| `clipItemHeight` | `boolean` | Whether to clip item height (default: false) |\n| `resetOnGetItemHeightChange` | `boolean` | Whether to reset internal height cache when `getItemHeight` changes (default: false) |\n\n### VirtualScrollHandle Methods\n\n| Method | Type | Description |\n| --- | --- | --- |\n| `scrollTo` | `(position: number \\| ((prev: number) => number)) => number` | **Jump** to a **logical** position (updater receives the current logical position). Returns the applied **logical** position (2.0.0). ⚠️ Not for bridging continuous input — see [Bridging input from outside the pane](#bridging-input-from-outside-the-pane) |\n| `scrollBy` | `(delta: number) => number` | Scroll **by a delta** with the pane's own wheel semantics (float accumulation, no anchor). Use this — not `scrollTo` — to bridge continuous input from outside the pane. Returns the applied **logical** position |\n| `applyWheel` | `(event: WheelEvent) => boolean` | Apply one wheel event with the pane's own rules; returns whether it was consumed. The single entry point for wheel input originating outside the pane — normally reached through `useWheelBridge` |\n| *(ScrollPaneHandle only)* `scrollTo` | `(pos, dimsOverride?)` | The pane-level jump. `dimsOverride` is an explicit clamp-space for callers that know **fresher-than-committed** dims (the layout-shift compensation passes `committed + delta`). Do not pass it casually — a wrong override clamps against dims that are not on screen |\n| `scrollToIndex` | `(index: number, options?: { align?: \"top\" \\| \"bottom\" \\| \"center\"; offset?: number }) => void` | Scroll to specific item index with optional alignment and offset |\n| `getScrollPosition` | `() => number` | Get current **logical** scroll position (2.0.0; `-1` when the pane is not connected) |\n| `getContentSize` | `() => number` | Get total content size (insets included). Returns the `-1` sentinel while the pane is unconnected |\n| `getViewportSize` | `() => number` | Get viewport size. Returns the `-1` sentinel while the pane is unconnected |\n| `focusItemAtIndex` | `(index: number, options?: { ensureVisible?: boolean }) => void` | Focus item at specific index |\n| `getRange` | `() => VirtualScrollRange` | Get current range information (updated one render behind) |\n| `getScrollAnchor` | `() => { index: number; offsetPx: number } \\| null` | Capture the current top visible row anchor for exact restore via `initialScrollAnchor` (`null` when `itemCount` is 0) |\n| `getFenwickTreeTotalHeight` | `() => number` | Total content height managed by the Fenwick tree (insets excluded) |\n| `getFenwickSize` | `() => number` | Item count managed by the Fenwick tree |\n| `updateItemSize` | `(index: number, size: number) => void` | Manually update one item's size (with layout-shift compensation). `getItemHeight(index)` must return the same value afterwards |\n\n**Coordinate system (2.0.0)**: every position the handle and callbacks accept or return is\n**logical** (content px, insets excluded) — `onScroll` / `onRangeChange` / `initialScroll*` /\n`getScrollAnchor` / `scrollTo` (input AND return) / `getScrollPosition` all share one space, so no\nconversion code is ever needed in consumers. Pane coordinates (insets included) are an internal\ndetail; only `ScrollPane`'s own handle speaks pane-space (it IS the pane). Logical 0 maps to\npane 0 internally (true top, top inset visible; unified in 1.24.0).\n\n### VirtualScrollRange\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `renderingStartIndex` | `number` | Index of the first item being rendered (including overscan) |\n| `renderingEndIndex` | `number` | Index of the last item being rendered (including overscan) |\n| `visibleStartIndex` | `number` | Index of the first fully or partially visible item |\n| `visibleEndIndex` | `number` | Index of the last fully or partially visible item |\n| `scrollPosition` | `number` | Current scroll position in pixels |\n| `totalHeight` | `number` | Total height of the scroll content |\n\n## Advanced Usage\n\n### With Ref and Scroll Control\n\n```tsx\n// Load the stylesheet once, e.g. in your app entry point (see the styling note above)\nimport '@aiquants/virtualscroll/styles/virtualscroll.standalone.css'\nimport { ScrollBarThumbOverlayRenderProps, VirtualScroll, VirtualScrollHandle, VirtualScrollRange } from '@aiquants/virtualscroll'\nimport { useCallback, useRef, useState } from 'react'\n\nconst items = Array.from({ length: 100000 }, (_, index) => ({\n  id: index,\n  text: `Item ${index}`,\n  height: (index % 20) * 2 + 30,\n}))\n\nconst getItem = (index: number) => items[index]\nconst getItemHeight = (index: number) => items[index].height\n\nfunction AdvancedExample() {\n  const virtualScrollRef = useRef<VirtualScrollHandle>(null)\n  const [visibleStartIndex, setVisibleStartIndex] = useState(0)\n\n  const scrollToTop = () => {\n    virtualScrollRef.current?.scrollTo(0)\n  }\n\n  const scrollToIndex = (index: number) => {\n    // Scroll to item 500, aligning it to the center of the viewport\n    virtualScrollRef.current?.scrollToIndex(index, { align: \"center\" })\n  }\n\n  const handleRangeChange = useCallback((range: VirtualScrollRange) => {\n    setVisibleStartIndex(range.visibleStartIndex)\n  }, [])\n\n  const renderThumbOverlay = useCallback((props: ScrollBarThumbOverlayRenderProps) => {\n    if (!(props.isDragging || props.isTapScrollActive)) {\n      return null\n    }\n    const activeItem = items[visibleStartIndex]\n    const label = activeItem ? activeItem.text : `Item ${visibleStartIndex}`\n\n    return (\n      <div\n        style={{\n          pointerEvents: 'none',\n          position: 'absolute',\n          display: 'flex',\n          alignItems: 'center',\n          ...(props.orientation === 'vertical'\n            ? { top: props.thumbCenter, left: -14, transform: 'translate(-100%, -50%)' }\n            : { left: props.thumbCenter, top: -14, transform: 'translate(-50%, -100%)' }),\n        }}\n      >\n        <div\n          style={{\n            borderRadius: 9999,\n            border: '1px solid #e2e8f0',\n            background: '#fff',\n            padding: '4px 8px',\n            fontSize: 12,\n            fontWeight: 500,\n            color: '#334155',\n            whiteSpace: 'nowrap',\n            boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n          }}\n        >\n          {label}\n        </div>\n      </div>\n    )\n  }, [visibleStartIndex])\n\n  return (\n    <div>\n      <div>\n        <button onClick={scrollToTop}>Scroll to Top</button>\n        <button onClick={() => scrollToIndex(500)}>Scroll to Item 500</button>\n      </div>\n      <VirtualScroll\n        ref={virtualScrollRef}\n        itemCount={items.length}\n        getItem={getItem}\n        getItemHeight={getItemHeight}\n        onRangeChange={handleRangeChange}\n        scrollBarOptions={{\n          renderThumbOverlay: renderThumbOverlay\n        }}\n      >\n        {(item, index) => <ItemComponent item={item} index={index} />}\n      </VirtualScroll>\n    </div>\n  )\n}\n```\n\n### Custom Scrollbar Styling\n\n`className` lands on the **scroll root** (`.aqvs-scroll-pane`). The bar, its track, thumb, arrow buttons\nand the Top/Bottom pills are all descendants of that element, so one wrapper class reaches every part:\n\n```tsx\n<VirtualScroll\n  itemCount={items.length}\n  getItem={getItem}\n  getItemHeight={getItemHeight}\n  viewportSize={400}\n  className=\"custom-virtual-scroll\"\n>\n  {(item, index) => <ItemComponent item={item} index={index} />}\n</VirtualScroll>\n```\n\n```css\n/* The bar and its track. The stripe you see behind the thumb is the track. */\n.custom-virtual-scroll .aqvs-scrollbar { background-color: #f0f0f0; }\n.custom-virtual-scroll .aqvs-scrollbar-track { background-color: #e8e8e8; }\n\n/* The thumb. Restate the states you want to keep — see \"State rules are replaced\" below. */\n.custom-virtual-scroll .aqvs-scrollbar-thumb { background-color: #007acc; }\n.custom-virtual-scroll .aqvs-scrollbar-thumb[data-thumb-state=\"hover\"] { background-color: #3399dd; }\n.custom-virtual-scroll .aqvs-scrollbar-thumb[data-thumb-state=\"dragging\"] { background-color: #005c99; }\n.custom-virtual-scroll .aqvs-scrollbar-thumb[data-thumb-state=\"disabled\"] { background-color: #b0c4d4; }\n\n/* Arrow buttons and the Top/Bottom pills. */\n.custom-virtual-scroll .aqvs-scrollbar-arrow-button { background-color: #e8e8e8; color: #007acc; }\n.custom-virtual-scroll .aqvs-scrollbar-arrow-button:enabled:hover { background-color: #cfe8f7; }\n.custom-virtual-scroll .aqvs-scroll-to-edge-button { background-color: rgba(0, 122, 204, 0.85); }\n.custom-virtual-scroll .aqvs-scroll-to-edge-button:hover { background-color: rgba(0, 92, 153, 0.9); }\n```\n\nThe packaged rules live in `@layer components` in **both** artifacts, so an ordinary (unlayered) rule in\nyour app wins regardless of specificity and regardless of import order — no `!important`, no deeper\nselector. Keep your rules unlayered: written inside a `@layer components { … }` block of your own you\nre-enter the package's layer, and ordinary specificity — then source order — decides again. The example\nabove still wins there (every selector is prefixed with your wrapper class), but an unprefixed\n`.aqvs-scrollbar-thumb { … }` in that layer loses on hover and while dragging, and an equally specific\nrule loses outright if your stylesheet is ordered before the package's.\n\nThree consequences are worth knowing:\n\n- **State rules are replaced, not merged.** The thumb publishes `data-thumb-state` (`idle` / `hover` /\n  `dragging` / `disabled`; `disabled` whenever `scrollBarOptions.enableThumbDrag` is `false`). A single\n  flat `.aqvs-scrollbar-thumb { background-color: … }` freezes the thumb at that one colour, and the same\n  applies to `.aqvs-scrollbar-arrow-button:enabled:hover` and `.aqvs-scroll-to-edge-button:hover`. The\n  shape feedback survives untouched: `scaleX(1.06)` / `scaleX(1.12)` on a vertical bar, `scaleY(…)` on a\n  horizontal one — and the same state rules pull the cross-axis edges from `1.5px` to `-0.5px`, which is\n  most of the growth at the default `width: 12`.\n- **Inline styles still outrank your rule.** Every size and position — the bar's width, the arrow buttons,\n  the thumb geometry — plus the thumb's `border-radius` / `cursor` and the track's `border-radius` are\n  written inline from `scrollBarOptions.width`, `viewportSize` and the scroll position. Change sizing\n  through the props; to re-round the corners use `!important`.\n- **Do not hand-roll the hidden state.** When the content fits the viewport, the bar and the thumb wrapper\n  carry `data-visible=\"false\"` and the packaged rule hides them (`opacity: 0; pointer-events: none`). If\n  you override `opacity` on `.aqvs-scrollbar`, scope it to `[data-visible=\"true\"]`. The same applies to the\n  auto-hiding Top/Bottom pills — and there the hidden state is more than styling: `.aqvs-scroll-to-edge-overlay`\n  carries `inert` while hidden (and the pill `tabindex=\"-1\"`) so it is not a phantom tab stop for keyboard\n  users. Forcing `opacity: 1` on the hidden overlay therefore paints a pill that cannot be clicked or focused.\n  Scope such rules to `[data-visible=\"true\"]` as well.\n\nThe parts you are most likely to target: `.aqvs-scroll-pane` (root), `.aqvs-scroll-pane-content` (row\nviewport), `.aqvs-scrollbar` (+ `-vertical` / `-horizontal`), `.aqvs-scrollbar-track`,\n`.aqvs-scrollbar-thumb-wrapper`, `.aqvs-scrollbar-thumb` (+ `-vertical` / `-horizontal`),\n`.aqvs-scrollbar-arrow-button`, `.aqvs-scroll-to-edge-overlay` / `-button`, `.aqvs-tap-scroll-circle`,\n`.aqvs-item-container`.\n\n### Tap Scroll Circle Configuration\n\nThe auxiliary tap scroll circle can replace the native scrollbar for large datasets while remaining easy to control:\n\n- **Adaptive speed scaling** automatically ramps up to a `120×` multiplier as `itemCount` grows (trillions supported).\n- **Manual overrides** let you clamp or extend speed via `maxSpeedMultiplier` when you need deterministic behavior.\n- **Speed shaping** with `maxSpeedCurve` controls how quickly the speed ramps up as you pull the circle, blending gentle near-threshold drag with high-speed travel at extended distances. The ceiling itself does not depend on the drag distance: `exponentialSteepness` shapes the ramp, and `exponentialScale` caps the ceiling (its effective value is `min(exponentialScale, maxSpeedMultiplier)`).\n  - ⚠️ `easedOffset` is **a fraction of the whole `[minSpeed, maxSpeed]` range applied at zero drag**, not a small nudge. With a large `maxSpeedMultiplier` (including the automatic `itemCount`-derived one) even `0.1` starts the list at several viewports per second and costs you the low-speed resolution. Raise `minSpeedMultiplier` instead when you only want a faster floor.\n- **Per-pointer drag control**: `behaviorOptions.pointerDragInputs` restricts content drag-scrolling to specific pointer types, e.g. `[\"pen\", \"touch\"]` to keep touch scrolling while freeing the mouse for text selection. Do **not** use `enablePointerDrag: false` for that — the pane has no native scroller, so disabling drag removes the only way to scroll on touch devices.\n- **Full layout control** (`size`, `offsetX`, `offsetY`) keeps the circle accessible on both desktop and touch devices.\n- **Visibility tuning** exposes an `opacity` knob so you can match subdued or high-contrast UI themes.\n\n```tsx\nimport { VirtualScroll } from \"@aiquants/virtualscroll\"\n\nconst items = Array.from({ length: 1_000_000_000_000 }, (_, index) => ({\n  id: index,\n  text: `Record ${index}`,\n  height: 42,\n}))\n\nexport function UltraFastExample() {\n  return (\n    <VirtualScroll\n      itemCount={items.length}\n      getItem={(index) => items[index]}\n      getItemHeight={() => 42}\n      scrollBarOptions={{\n        tapScrollCircleOptions: {\n          maxSpeedMultiplier: 80, // Optional: override adaptive speed when needed\n          maxSpeedCurve: {\n            exponentialSteepness: 6,\n            exponentialScale: 80,\n          },\n          offsetX: -96,\n          opacity: 0.85,\n        }\n      }}\n    >\n      {(item) => <div style={{ height: item.height }}>{item.text}</div>}\n    </VirtualScroll>\n  )\n}\n```\n\n## Performance Tips\n\n1. **Memoize callback functions**: Use `useCallback` for `getItem` and `getItemHeight`\n2. **Optimize item rendering**: Memoize item components when possible\n3. **Adjust overscan count**: Balance between smooth scrolling and memory usage\n4. **Consider item height consistency**: More consistent heights provide better performance\n\n## Browser Support\n\n- Chrome 88+\n- Firefox 87+\n- Safari 14+\n- Edge 88+\n\n## License\n\nMIT\n","readmeFilename":""}