{"_id":"@affino/virtualization-core","_rev":"6-116761a354cbe72a226adf5060b0fdb3","name":"@affino/virtualization-core","dist-tags":{"alpha":"1.0.0-alpha.1","latest":"1.0.0"},"versions":{"1.0.0-alpha.0":{"name":"@affino/virtualization-core","version":"1.0.0-alpha.0","keywords":["virtualization","table","grid","headless"],"author":{"name":"Anton Pavlov","email":"pavlov@myyahho.com"},"license":"MIT","_id":"@affino/virtualization-core@1.0.0-alpha.0","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"homepage":"https://github.com/affino/affino#readme","bugs":{"url":"https://github.com/affino/affino/issues"},"dist":{"shasum":"c813d8b431d327e18fad2a55ad00042e2ddd7730","tarball":"https://registry.npmjs.org/@affino/virtualization-core/-/virtualization-core-1.0.0-alpha.0.tgz","fileCount":36,"integrity":"sha512-orz7hn4UjnKmLH1KKziIeXElyGaIudMKQ06LLDEpiynIt2T9WOEqw4aKxMg8Fv5VKl7mpc+jycVXgWKeguCyjQ==","signatures":[{"sig":"MEYCIQDrpleERO98UiSn77opYdQ1+7lNzdPzEfgngYS3duYMMQIhAPV+joJ4dVFHI13dhx5hPABWG1tH+scpTSsW223tjEgc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36074},"main":"dist/index.js","type":"module","_from":"file:affino-virtualization-core-1.0.0-alpha.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"_resolved":"/tmp/3dae20fe28874dd6e9468369c87bf707/affino-virtualization-core-1.0.0-alpha.0.tgz","_integrity":"sha512-orz7hn4UjnKmLH1KKziIeXElyGaIudMKQ06LLDEpiynIt2T9WOEqw4aKxMg8Fv5VKl7mpc+jycVXgWKeguCyjQ==","repository":{"url":"git+https://github.com/affino/affino.git","type":"git"},"_npmVersion":"10.8.2","description":"Headless virtualization math for grids and scrolling surfaces","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15","@vitest/coverage-v8":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/virtualization-core_1.0.0-alpha.0_1765919847607_0.1603298321194655","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.1":{"name":"@affino/virtualization-core","version":"1.0.0-alpha.1","keywords":["virtualization","table","grid","headless"],"author":{"name":"Anton Pavlov","email":"pavlov@myyahho.com"},"license":"MIT","_id":"@affino/virtualization-core@1.0.0-alpha.1","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"homepage":"https://ui.unitlab.io","bugs":{"url":"https://github.com/affinio/affinio/issues"},"dist":{"shasum":"8d139d4000f344322e8bdcc78c9c154ee26880a0","tarball":"https://registry.npmjs.org/@affino/virtualization-core/-/virtualization-core-1.0.0-alpha.1.tgz","fileCount":36,"integrity":"sha512-ptA4mULvAVLTS3kTexx6K+ZbuV+Vya88rjk7ZF4R15ipzEm/v3A7/RTPISYcJUgzLc+6/gTgPj4gwrKrazBSYA==","signatures":[{"sig":"MEUCIQDVd4K0pjpPFB1YRvA49RQV5IfDHNSJJfrOOQeBbedh4QIgLqsG/iha9CBFdKME1Pub0J9LXabnBwAOD/ga6tlXeHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36145},"main":"dist/index.js","type":"module","_from":"file:affino-virtualization-core-1.0.0-alpha.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"_resolved":"/tmp/9cb1ad1cfd77cd131bdb7218917b3348/affino-virtualization-core-1.0.0-alpha.1.tgz","_integrity":"sha512-ptA4mULvAVLTS3kTexx6K+ZbuV+Vya88rjk7ZF4R15ipzEm/v3A7/RTPISYcJUgzLc+6/gTgPj4gwrKrazBSYA==","repository":{"url":"git+https://github.com/affinio/affinio.git#main","type":"git"},"_npmVersion":"10.8.2","description":"Headless virtualization math for grids and scrolling surfaces","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^4.0.15","@vitest/coverage-v8":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/virtualization-core_1.0.0-alpha.1_1765925341372_0.905310537455156","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.2":{"name":"@affino/virtualization-core","version":"1.0.0-alpha.2","keywords":["virtualization","table","grid","headless"],"author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"license":"MIT","_id":"@affino/virtualization-core@1.0.0-alpha.2","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"homepage":"https://affino.dev","bugs":{"url":"https://github.com/affinio/affinio/issues"},"dist":{"shasum":"66969fc1d60c22f7dbb305f468e3fc773dfa2261","tarball":"https://registry.npmjs.org/@affino/virtualization-core/-/virtualization-core-1.0.0-alpha.2.tgz","fileCount":36,"integrity":"sha512-mAwC1ItsTjMTdBB9oIg9raHlvAZKGt5r9tsl0o5TPDjy4aHlrRJ7i/F51Rss2GZmzltLtVEmvnB77beeJRaLww==","signatures":[{"sig":"MEQCIBo6hkN5bykWMSspVFDRbcUAVE78HBS0AWjKm08p5rShAiB2AMM6xna+XeCnw3+BBOWMP7kLsiRKX6ttyg5hCZuxLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36167},"main":"dist/index.js","type":"module","_from":"file:affino-virtualization-core-1.0.0-alpha.2.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"_resolved":"/tmp/75fd469dcfd984f06cfbbe1e1d5d4011/affino-virtualization-core-1.0.0-alpha.2.tgz","_integrity":"sha512-mAwC1ItsTjMTdBB9oIg9raHlvAZKGt5r9tsl0o5TPDjy4aHlrRJ7i/F51Rss2GZmzltLtVEmvnB77beeJRaLww==","repository":{"url":"git+https://github.com/affinio/affinio.git#main","type":"git"},"_npmVersion":"10.8.2","description":"Framework-agnostic headless virtualization math for grids and scrolling surfaces","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15","@vitest/coverage-v8":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/virtualization-core_1.0.0-alpha.2_1765983951079_0.12216317564762447","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.3":{"name":"@affino/virtualization-core","version":"1.0.0-alpha.3","keywords":["virtualization","table","grid","headless"],"author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"license":"MIT","_id":"@affino/virtualization-core@1.0.0-alpha.3","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"homepage":"https://affino.dev","bugs":{"url":"https://github.com/affinio/affinio/issues"},"dist":{"shasum":"53b84568ec86ae8906150c16abcca502b10438dd","tarball":"https://registry.npmjs.org/@affino/virtualization-core/-/virtualization-core-1.0.0-alpha.3.tgz","fileCount":36,"integrity":"sha512-vaA1U2eBu00KNKCC4G+VvpcB6O5wdhS8BStEijUe5w6o3Gw1Rx1yIe9ECDQySGuTOC0FJB6ZBLw/fAAGX/rVUA==","signatures":[{"sig":"MEUCIQC+PjZhBaBAXQaX9nL4a0eTdfUiyQEhUrnz1rDtk/xO2gIgEGsYVP1fizTCOxOHePozEW+UhdTzWEYf24rM1CXx0OQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36180},"main":"dist/index.js","type":"module","_from":"file:affino-virtualization-core-1.0.0-alpha.3.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"_resolved":"/tmp/eeb12898002b306c95c5dd9d989bd0a4/affino-virtualization-core-1.0.0-alpha.3.tgz","_integrity":"sha512-vaA1U2eBu00KNKCC4G+VvpcB6O5wdhS8BStEijUe5w6o3Gw1Rx1yIe9ECDQySGuTOC0FJB6ZBLw/fAAGX/rVUA==","repository":{"url":"git+https://github.com/affinio/affinio.git#main","type":"git"},"_npmVersion":"10.8.2","description":"Framework-agnostic headless virtualization math for grids and scrolling surfaces","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15","@vitest/coverage-v8":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/virtualization-core_1.0.0-alpha.3_1765990408614_0.4138528472363898","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@affino/virtualization-core","version":"1.0.0","author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"type":"module","description":"Framework-agnostic headless virtualization math for grids and scrolling surfaces","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"main":"dist/index.js","types":"dist/index.d.ts","sideEffects":false,"repository":{"type":"git","url":"git+https://github.com/affinio/affinio.git#main"},"homepage":"https://affino.dev","license":"MIT","keywords":["virtualization","table","grid","headless"],"devDependencies":{"@vitest/coverage-v8":"^4.0.15","vitest":"^4.0.15"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run"},"_id":"@affino/virtualization-core@1.0.0","bugs":{"url":"https://github.com/affinio/affinio/issues"},"_integrity":"sha512-QsJGEDaVK+lrLCWYRQB5Id4mS05pfwPLt5z0IG4KMo56VS8cSm3ySYBNPhgzt6mDGUY3mqvS9ENElEN8k2auxw==","_resolved":"/tmp/43cbab775a7c000929fd1c84db1ca72d/affino-virtualization-core-1.0.0.tgz","_from":"file:affino-virtualization-core-1.0.0.tgz","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-QsJGEDaVK+lrLCWYRQB5Id4mS05pfwPLt5z0IG4KMo56VS8cSm3ySYBNPhgzt6mDGUY3mqvS9ENElEN8k2auxw==","shasum":"cab2caaa3973130e2eef9edfe6e6197f8a4cb5e4","tarball":"https://registry.npmjs.org/@affino/virtualization-core/-/virtualization-core-1.0.0.tgz","fileCount":36,"unpackedSize":36172,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAH2fV06w13hjPYj0DCq0vDQb9uc12bOROPJt0qGgtiVAiEA0xFJ19j4A8OZvvtXTxx56EN/LCYP8AVfs6iYflJzCFw="}]},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"directories":{},"maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/virtualization-core_1.0.0_1769943499992_0.24417271589696932"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-16T21:17:27.496Z","modified":"2026-02-01T10:58:20.258Z","1.0.0-alpha.0":"2025-12-16T21:17:27.741Z","1.0.0-alpha.1":"2025-12-16T22:49:01.514Z","1.0.0-alpha.2":"2025-12-17T15:05:51.213Z","1.0.0-alpha.3":"2025-12-17T16:53:28.780Z","1.0.0":"2026-02-01T10:58:20.140Z"},"bugs":{"url":"https://github.com/affinio/affinio/issues"},"author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"license":"MIT","homepage":"https://affino.dev","keywords":["virtualization","table","grid","headless"],"repository":{"type":"git","url":"git+https://github.com/affinio/affinio.git#main"},"description":"Framework-agnostic headless virtualization math for grids and scrolling surfaces","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"readme":"# @affino/virtualization-core\n\nHeadless virtualization math for scroll-heavy surfaces and composite grids.\n\n> Shared overscan heuristics and scroll-bound math extracted from production-grade grid engines.\n\n## Features\n\n- Axis-agnostic virtualizer with deterministic overscan buckets\n- Dynamic overscan controllers that react to velocity and viewport math\n- Scroll limit helpers that cooperate with browser-native constraints\n- Zero DOM requirements so adapters stay framework-specific\n\n## Non-goals\n\n- Rendering or DOM measurement\n- Event binding\n- Framework integrations\n- Styling or layout helpers\n\n## Mental model\n\nThis package models virtualization as a pure axis problem.\n\n- An axis virtualizer maps a scroll offset to a visible index window.\n- Overscan expands that window based on velocity and viewport heuristics.\n- Strategies define how ranges are computed for a specific surface (list, columns, grid).\n\nThe core does not know about pixels, DOM nodes, or rendering.\nIt only operates on numbers and deterministic math.\n\n## Invariants\n\nThe virtualizer guarantees the following:\n\n- `startIndex` is inclusive, `endIndex` is exclusive\n- `0 <= startIndex <= endIndex <= totalCount`\n- When `virtualizationEnabled = false`, the full range is returned\n- Overscan never exceeds the available pool size\n- `update()` is deterministic for the same inputs\n\n## Usage\n\n### Example: vertical list\n\n```ts\nconst virtualizer = createAxisVirtualizer(\"vertical\", strategy, null)\n\nconst state = virtualizer.update({\n  axis: \"vertical\",\n  viewportSize: 600,\n  scrollOffset,\n  virtualizationEnabled: true,\n  estimatedItemSize: 32,\n  totalCount: items.length,\n  overscan: 10,\n  meta: { scrollDirection },\n})\n\nconst visibleItems = items.slice(state.startIndex, state.endIndex)\n```\n\nFramework adapters provide the `strategy` and translate DOM scroll events into\npure math inputs so this package can stay deterministic and testable.\n\nSee `/demo-vue` → `https://www.affino.dev` for a live example that streams scroll offsets into the\nvirtualizer and visualizes overscan, pool size, and render budgets in real time.\n","readmeFilename":"README.md"}