diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index d8e41189f..9b72a44ba 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -28,6 +28,8 @@ jobs:
uses: nrwl/nx-set-shas@v4.3.0
with:
main-branch-name: main
+ - name: Install Playwright browsers
+ run: pnpm exec playwright install chromium
- name: Run Checks
run: pnpm run test:pr
preview:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 35a381e00..16532632a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -28,6 +28,8 @@ jobs:
fetch-depth: 0
- name: Setup Tools
uses: tanstack/config/.github/setup@main
+ - name: Install Playwright browsers
+ run: pnpm exec playwright install chromium
- name: Run Tests
run: pnpm run test:ci
- name: Run Changesets (version or publish)
diff --git a/.gitignore b/.gitignore
index cc376bd6c..2a91fb574 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,8 @@ stats.html
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
+
+# Playwright test artifacts
+test-results/
+playwright-report/
+*.log
diff --git a/examples/angular/dynamic/package.json b/examples/angular/dynamic/package.json
index 998300cd6..df5dcfed4 100644
--- a/examples/angular/dynamic/package.json
+++ b/examples/angular/dynamic/package.json
@@ -18,7 +18,7 @@
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
"@faker-js/faker": "^8.4.1",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/fixed/package.json b/examples/angular/fixed/package.json
index 28a3f8d5e..36ff8ee9c 100644
--- a/examples/angular/fixed/package.json
+++ b/examples/angular/fixed/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.3.12",
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/infinite-scroll/package.json b/examples/angular/infinite-scroll/package.json
index 3369df4e0..5440c2dff 100644
--- a/examples/angular/infinite-scroll/package.json
+++ b/examples/angular/infinite-scroll/package.json
@@ -18,7 +18,7 @@
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
"@tanstack/angular-query-experimental": "5.80.7",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/padding/package.json b/examples/angular/padding/package.json
index 5b440d8b1..c36a82d46 100644
--- a/examples/angular/padding/package.json
+++ b/examples/angular/padding/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.3.12",
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/smooth-scroll/package.json b/examples/angular/smooth-scroll/package.json
index b47b123ed..fc9eb3b34 100644
--- a/examples/angular/smooth-scroll/package.json
+++ b/examples/angular/smooth-scroll/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.3.12",
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/sticky/package.json b/examples/angular/sticky/package.json
index 9ce425680..d63f060d0 100644
--- a/examples/angular/sticky/package.json
+++ b/examples/angular/sticky/package.json
@@ -18,7 +18,7 @@
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
"@faker-js/faker": "^8.4.1",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/table/package.json b/examples/angular/table/package.json
index 9529c176c..bae19a419 100644
--- a/examples/angular/table/package.json
+++ b/examples/angular/table/package.json
@@ -19,7 +19,7 @@
"@angular/router": "^17.3.12",
"@faker-js/faker": "^8.4.1",
"@tanstack/angular-table": "8.21.3",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/variable/package.json b/examples/angular/variable/package.json
index 6a5527e4e..5a904d618 100644
--- a/examples/angular/variable/package.json
+++ b/examples/angular/variable/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.3.12",
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/angular/window/package.json b/examples/angular/window/package.json
index 119bf4dc3..3925d15df 100644
--- a/examples/angular/window/package.json
+++ b/examples/angular/window/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.3.12",
"@angular/platform-browser-dynamic": "^17.3.12",
"@angular/router": "^17.3.12",
- "@tanstack/angular-virtual": "^3.13.11",
+ "@tanstack/angular-virtual": "^3.13.12",
"rxjs": "^7.8.2",
"tslib": "^2.8.1",
"zone.js": "0.15.1"
diff --git a/examples/lit/dynamic/package.json b/examples/lit/dynamic/package.json
index 587bab405..268e1f4b5 100644
--- a/examples/lit/dynamic/package.json
+++ b/examples/lit/dynamic/package.json
@@ -9,8 +9,8 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/lit-virtual": "^3.13.11",
- "@tanstack/virtual-core": "^3.13.11",
+ "@tanstack/lit-virtual": "^3.13.12",
+ "@tanstack/virtual-core": "^3.13.12",
"lit": "^3.3.0"
},
"devDependencies": {
diff --git a/examples/lit/fixed/package.json b/examples/lit/fixed/package.json
index 32c252c76..21655cab2 100644
--- a/examples/lit/fixed/package.json
+++ b/examples/lit/fixed/package.json
@@ -9,8 +9,8 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/lit-virtual": "^3.13.11",
- "@tanstack/virtual-core": "^3.13.11",
+ "@tanstack/lit-virtual": "^3.13.12",
+ "@tanstack/virtual-core": "^3.13.12",
"lit": "^3.3.0"
},
"devDependencies": {
diff --git a/examples/react/dynamic/package.json b/examples/react/dynamic/package.json
index 003814c39..83ac0a396 100644
--- a/examples/react/dynamic/package.json
+++ b/examples/react/dynamic/package.json
@@ -9,7 +9,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/fixed/package.json b/examples/react/fixed/package.json
index abd21541c..9b2f02aa7 100644
--- a/examples/react/fixed/package.json
+++ b/examples/react/fixed/package.json
@@ -8,7 +8,7 @@
"serve": "vite preview"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/infinite-scroll/package.json b/examples/react/infinite-scroll/package.json
index 7e7d2ef23..d52035f64 100644
--- a/examples/react/infinite-scroll/package.json
+++ b/examples/react/infinite-scroll/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@tanstack/react-query": "^5.80.7",
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/padding/package.json b/examples/react/padding/package.json
index 96c8e628d..ac6851cee 100644
--- a/examples/react/padding/package.json
+++ b/examples/react/padding/package.json
@@ -9,7 +9,7 @@
"start": "vite"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/scroll-padding/package.json b/examples/react/scroll-padding/package.json
index 6a9148f6a..fa36ebfc0 100644
--- a/examples/react/scroll-padding/package.json
+++ b/examples/react/scroll-padding/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@react-hookz/web": "^25.1.1",
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/smooth-scroll/package.json b/examples/react/smooth-scroll/package.json
index c6e50e9de..446fc813c 100644
--- a/examples/react/smooth-scroll/package.json
+++ b/examples/react/smooth-scroll/package.json
@@ -9,7 +9,7 @@
"start": "vite"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/sticky/package.json b/examples/react/sticky/package.json
index 1cf073027..50706ad7c 100644
--- a/examples/react/sticky/package.json
+++ b/examples/react/sticky/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"lodash": "^4.17.21",
"react": "^18.3.1",
"react-dom": "^18.3.1"
diff --git a/examples/react/table/package.json b/examples/react/table/package.json
index 1f040c9fc..51f48079f 100644
--- a/examples/react/table/package.json
+++ b/examples/react/table/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"@faker-js/faker": "^8.4.1",
"@tanstack/react-table": "^8.21.3",
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/variable/package.json b/examples/react/variable/package.json
index 2acd9d508..f758c579c 100644
--- a/examples/react/variable/package.json
+++ b/examples/react/variable/package.json
@@ -9,7 +9,7 @@
"start": "vite"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/react/window/package.json b/examples/react/window/package.json
index df21c1892..eb74bac54 100644
--- a/examples/react/window/package.json
+++ b/examples/react/window/package.json
@@ -8,7 +8,7 @@
"serve": "vite preview"
},
"dependencies": {
- "@tanstack/react-virtual": "^3.13.11",
+ "@tanstack/react-virtual": "^3.13.12",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
diff --git a/examples/svelte/dynamic/package.json b/examples/svelte/dynamic/package.json
index e4b32325e..2c38cd71e 100644
--- a/examples/svelte/dynamic/package.json
+++ b/examples/svelte/dynamic/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/svelte-virtual": "^3.13.11"
+ "@tanstack/svelte-virtual": "^3.13.12"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.1.2",
diff --git a/examples/svelte/fixed/package.json b/examples/svelte/fixed/package.json
index 24c1be7c6..a893fe447 100644
--- a/examples/svelte/fixed/package.json
+++ b/examples/svelte/fixed/package.json
@@ -9,7 +9,7 @@
"check": "svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-virtual": "^3.13.11"
+ "@tanstack/svelte-virtual": "^3.13.12"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.1.2",
diff --git a/examples/svelte/infinite-scroll/package.json b/examples/svelte/infinite-scroll/package.json
index 59ae7851a..fb2607d19 100644
--- a/examples/svelte/infinite-scroll/package.json
+++ b/examples/svelte/infinite-scroll/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@tanstack/svelte-query": "^5.80.7",
- "@tanstack/svelte-virtual": "^3.13.11"
+ "@tanstack/svelte-virtual": "^3.13.12"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.1.2",
diff --git a/examples/svelte/smooth-scroll/package.json b/examples/svelte/smooth-scroll/package.json
index 515e00644..50d20d2b5 100644
--- a/examples/svelte/smooth-scroll/package.json
+++ b/examples/svelte/smooth-scroll/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/svelte-virtual": "^3.13.11"
+ "@tanstack/svelte-virtual": "^3.13.12"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.1.2",
diff --git a/examples/svelte/sticky/package.json b/examples/svelte/sticky/package.json
index 1fa3be225..032404252 100644
--- a/examples/svelte/sticky/package.json
+++ b/examples/svelte/sticky/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/svelte-virtual": "^3.13.11",
+ "@tanstack/svelte-virtual": "^3.13.12",
"lodash": "^4.17.21"
},
"devDependencies": {
diff --git a/examples/svelte/table/package.json b/examples/svelte/table/package.json
index 21dcb8103..692c850bb 100644
--- a/examples/svelte/table/package.json
+++ b/examples/svelte/table/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"@faker-js/faker": "^8.4.1",
"@tanstack/svelte-table": "^8.21.3",
- "@tanstack/svelte-virtual": "^3.13.11"
+ "@tanstack/svelte-virtual": "^3.13.12"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.1.2",
diff --git a/examples/vue/dynamic/package.json b/examples/vue/dynamic/package.json
index fee4f48d5..cd017bdf9 100644
--- a/examples/vue/dynamic/package.json
+++ b/examples/vue/dynamic/package.json
@@ -9,7 +9,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/fixed/package.json b/examples/vue/fixed/package.json
index 20c61d47d..b11ee85b2 100644
--- a/examples/vue/fixed/package.json
+++ b/examples/vue/fixed/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/infinite-scroll/package.json b/examples/vue/infinite-scroll/package.json
index 5a8082f97..e32d32a42 100644
--- a/examples/vue/infinite-scroll/package.json
+++ b/examples/vue/infinite-scroll/package.json
@@ -9,7 +9,7 @@
},
"dependencies": {
"@tanstack/vue-query": "^5.80.7",
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/padding/package.json b/examples/vue/padding/package.json
index be46b4f75..f8183738c 100644
--- a/examples/vue/padding/package.json
+++ b/examples/vue/padding/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/scroll-padding/package.json b/examples/vue/scroll-padding/package.json
index 9fa9e9949..c195c4983 100644
--- a/examples/vue/scroll-padding/package.json
+++ b/examples/vue/scroll-padding/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"@vueuse/core": "^12.8.2",
"vue": "^3.5.16"
},
diff --git a/examples/vue/smooth-scroll/package.json b/examples/vue/smooth-scroll/package.json
index 006ca1c48..be226253a 100644
--- a/examples/vue/smooth-scroll/package.json
+++ b/examples/vue/smooth-scroll/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/sticky/package.json b/examples/vue/sticky/package.json
index 821ab6991..73b849d5b 100644
--- a/examples/vue/sticky/package.json
+++ b/examples/vue/sticky/package.json
@@ -9,7 +9,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"lodash": "^4.17.21",
"vue": "^3.5.16"
},
diff --git a/examples/vue/table/package.json b/examples/vue/table/package.json
index fa82e7a24..5248ffe20 100644
--- a/examples/vue/table/package.json
+++ b/examples/vue/table/package.json
@@ -10,7 +10,7 @@
"dependencies": {
"@faker-js/faker": "^8.4.1",
"@tanstack/vue-table": "^8.21.3",
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/examples/vue/variable/package.json b/examples/vue/variable/package.json
index 81f7faf5e..9a1ee2b68 100644
--- a/examples/vue/variable/package.json
+++ b/examples/vue/variable/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-virtual": "^3.13.11",
+ "@tanstack/vue-virtual": "^3.13.12",
"vue": "^3.5.16"
},
"devDependencies": {
diff --git a/knip.json b/knip.json
index 639c5df88..f3a69e7a2 100644
--- a/knip.json
+++ b/knip.json
@@ -1,4 +1,4 @@
{
"$schema": "https://unpkg.com/knip@5/schema.json",
- "ignoreWorkspaces": ["examples/**"]
+ "ignoreWorkspaces": ["examples/**", "packages/react-virtual/e2e/**"]
}
diff --git a/package.json b/package.json
index ee01fe550..370508b6c 100644
--- a/package.json
+++ b/package.json
@@ -11,8 +11,8 @@
"clean": "pnpm --filter \"./packages/**\" run clean",
"preinstall": "node -e \"if(process.env.CI == 'true') {console.log('Skipping preinstall...'); process.exit(1)}\" || npx -y only-allow pnpm",
"test": "pnpm run test:ci",
- "test:pr": "nx affected --targets=test:sherif,test:knip,test:eslint,test:lib,test:types,test:build,build",
- "test:ci": "nx run-many --targets=test:sherif,test:knip,test:eslint,test:lib,test:types,test:build,build",
+ "test:pr": "nx affected --targets=test:sherif,test:knip,test:eslint,test:lib,test:e2e,test:types,test:build,build",
+ "test:ci": "nx run-many --targets=test:sherif,test:knip,test:eslint,test:lib,test:e2e,test:types,test:build,build",
"test:eslint": "nx affected --target=test:eslint",
"test:format": "pnpm run prettier --check",
"test:sherif": "sherif",
@@ -20,6 +20,7 @@
"test:lib:dev": "pnpm run test:lib && nx watch --all -- pnpm run test:lib",
"test:build": "nx affected --target=test:build --exclude=examples/**",
"test:types": "nx affected --target=test:types --exclude=examples/**",
+ "test:e2e": "nx affected --target=test:e2e --exclude=examples/**",
"test:knip": "knip",
"build": "nx affected --target=build --exclude=examples/**",
"build:all": "nx run-many --target=build --exclude=examples/**",
@@ -39,6 +40,7 @@
},
"devDependencies": {
"@changesets/cli": "^2.29.4",
+ "@playwright/test": "^1.53.1",
"@svitejs/changesets-changelog-github-compact": "^1.2.0",
"@tanstack/config": "^0.18.2",
"@testing-library/jest-dom": "^6.6.3",
diff --git a/packages/angular-virtual/CHANGELOG.md b/packages/angular-virtual/CHANGELOG.md
index f1bf7d7da..349888a98 100644
--- a/packages/angular-virtual/CHANGELOG.md
+++ b/packages/angular-virtual/CHANGELOG.md
@@ -1,5 +1,12 @@
# @tanstack/angular-virtual
+## 3.13.12
+
+### Patch Changes
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/angular-virtual/package.json b/packages/angular-virtual/package.json
index 3a1ceaba4..6574fdff3 100644
--- a/packages/angular-virtual/package.json
+++ b/packages/angular-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/angular-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in Angular",
"author": "Garrett Darnell",
"license": "MIT",
diff --git a/packages/lit-virtual/CHANGELOG.md b/packages/lit-virtual/CHANGELOG.md
index 2f76a109c..be7e68988 100644
--- a/packages/lit-virtual/CHANGELOG.md
+++ b/packages/lit-virtual/CHANGELOG.md
@@ -1,5 +1,12 @@
# @tanstack/lit-virtual
+## 3.13.12
+
+### Patch Changes
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/lit-virtual/package.json b/packages/lit-virtual/package.json
index 4abf17894..aeb07a9c7 100644
--- a/packages/lit-virtual/package.json
+++ b/packages/lit-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/lit-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in Lit",
"author": "Tanner Linsley",
"license": "MIT",
diff --git a/packages/react-virtual/CHANGELOG.md b/packages/react-virtual/CHANGELOG.md
index 61357397b..d70879c81 100644
--- a/packages/react-virtual/CHANGELOG.md
+++ b/packages/react-virtual/CHANGELOG.md
@@ -1,5 +1,14 @@
# @tanstack/react-virtual
+## 3.13.12
+
+### Patch Changes
+
+- chore(react-virtual): fix vite e2e build ([#1030](https://github.com/TanStack/virtual/pull/1030))
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/react-virtual/e2e/app/index.html b/packages/react-virtual/e2e/app/index.html
new file mode 100644
index 000000000..6d5c94aec
--- /dev/null
+++ b/packages/react-virtual/e2e/app/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/react-virtual/e2e/app/main.tsx b/packages/react-virtual/e2e/app/main.tsx
new file mode 100644
index 000000000..e99be4b33
--- /dev/null
+++ b/packages/react-virtual/e2e/app/main.tsx
@@ -0,0 +1,76 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import { useVirtualizer } from '@tanstack/react-virtual'
+
+function getRandomInt(min: number, max: number) {
+ return Math.floor(Math.random() * (max - min + 1)) + min
+}
+
+const randomHeight = (() => {
+ const cache = new Map()
+ return (id: string) => {
+ const value = cache.get(id)
+ if (value !== undefined) {
+ return value
+ }
+ const v = getRandomInt(25, 100)
+ cache.set(id, v)
+ return v
+ }
+})()
+
+const App = () => {
+ const parentRef = React.useRef(null)
+ const rowVirtualizer = useVirtualizer({
+ count: 1002,
+ getScrollElement: () => parentRef.current,
+ estimateSize: () => 50,
+ debug: true,
+ })
+
+ return (
+
+
+
+
+
+ )
+}
+
+ReactDOM.createRoot(document.getElementById('root')!).render()
diff --git a/packages/react-virtual/e2e/app/test/scroll.spec.ts b/packages/react-virtual/e2e/app/test/scroll.spec.ts
new file mode 100644
index 000000000..65ba73b3a
--- /dev/null
+++ b/packages/react-virtual/e2e/app/test/scroll.spec.ts
@@ -0,0 +1,33 @@
+import { expect, test } from '@playwright/test'
+
+const check = () => {
+ const item = document.querySelector('[data-testid="item-1000"]')
+ const container = document.querySelector('#scroll-container')
+
+ if (!item || !container) throw new Error('Elements not found')
+
+ const itemRect = item.getBoundingClientRect()
+ const containerRect = container.getBoundingClientRect()
+ const scrollTop = container.scrollTop
+
+ const top = itemRect.top + scrollTop - containerRect.top
+ const botttom = top + itemRect.height
+
+ const containerBottom = scrollTop + container.clientHeight
+
+ return Math.abs(botttom - containerBottom)
+}
+
+test('scrolls to index 1000', async ({ page }) => {
+ await page.goto('/')
+ await page.click('#scroll-to-1000')
+
+ // Wait for scroll effect (including retries)
+ await page.waitForTimeout(1000)
+
+ await expect(page.locator('[data-testid="item-1000"]')).toBeVisible()
+
+ const delta = await page.evaluate(check)
+ console.log('bootom element detla', delta)
+ expect(delta).toBeLessThan(1.01)
+})
diff --git a/packages/react-virtual/e2e/app/tsconfig.json b/packages/react-virtual/e2e/app/tsconfig.json
new file mode 100644
index 000000000..ad08d6c2b
--- /dev/null
+++ b/packages/react-virtual/e2e/app/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "esModuleInterop": true,
+ "jsx": "react-jsx",
+ "target": "ESNext",
+ "moduleResolution": "Bundler",
+ "module": "ESNext",
+ "resolveJsonModule": true,
+ "allowJs": true,
+ "skipLibCheck": true
+ },
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/react-virtual/e2e/app/vite.config.ts b/packages/react-virtual/e2e/app/vite.config.ts
new file mode 100644
index 000000000..f1479d13e
--- /dev/null
+++ b/packages/react-virtual/e2e/app/vite.config.ts
@@ -0,0 +1,17 @@
+import path from 'node:path'
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+export default defineConfig({
+ root: __dirname,
+ plugins: [react()],
+ resolve: {
+ alias: {
+ '@tanstack/react-virtual': path.resolve(__dirname, '../../src/index'),
+ '@tanstack/virtual-core': path.resolve(
+ __dirname,
+ '../../../virtual-core/src/index',
+ ),
+ },
+ },
+})
diff --git a/packages/react-virtual/package.json b/packages/react-virtual/package.json
index fef3ac781..4182103a8 100644
--- a/packages/react-virtual/package.json
+++ b/packages/react-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/react-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in React",
"author": "Tanner Linsley",
"license": "MIT",
@@ -29,7 +29,8 @@
"test:lib": "vitest",
"test:lib:dev": "pnpm run test:lib --watch",
"test:build": "publint --strict",
- "build": "vite build"
+ "build": "vite build",
+ "test:e2e": "playwright test"
},
"type": "module",
"types": "dist/esm/index.d.ts",
diff --git a/packages/react-virtual/playwright.config.ts b/packages/react-virtual/playwright.config.ts
new file mode 100644
index 000000000..6e9f9a5fb
--- /dev/null
+++ b/packages/react-virtual/playwright.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from '@playwright/test'
+
+const PORT = 5173
+const baseURL = `http://localhost:${PORT}`
+
+export default defineConfig({
+ testDir: './e2e/app/test',
+ use: {
+ baseURL,
+ },
+ webServer: {
+ command: `VITE_SERVER_PORT=${PORT} vite build --config e2e/app/vite.config.ts && VITE_SERVER_PORT=${PORT} vite preview --config e2e/app/vite.config.ts --port ${PORT}`,
+ url: baseURL,
+ reuseExistingServer: !process.env.CI,
+ stdout: 'pipe',
+ },
+})
diff --git a/packages/react-virtual/tsconfig.json b/packages/react-virtual/tsconfig.json
index 3655b9d05..effe33b1b 100644
--- a/packages/react-virtual/tsconfig.json
+++ b/packages/react-virtual/tsconfig.json
@@ -3,5 +3,10 @@
"compilerOptions": {
"jsx": "react"
},
- "include": ["src", "eslint.config.js", "vite.config.ts"]
+ "include": [
+ "src",
+ "eslint.config.js",
+ "vite.config.ts",
+ "playwright.config.ts"
+ ]
}
diff --git a/packages/solid-virtual/CHANGELOG.md b/packages/solid-virtual/CHANGELOG.md
index 056ec4085..9ac36931e 100644
--- a/packages/solid-virtual/CHANGELOG.md
+++ b/packages/solid-virtual/CHANGELOG.md
@@ -1,5 +1,12 @@
# @tanstack/solid-virtual
+## 3.13.12
+
+### Patch Changes
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/solid-virtual/package.json b/packages/solid-virtual/package.json
index c73e14bd2..ecdc1f9cf 100644
--- a/packages/solid-virtual/package.json
+++ b/packages/solid-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/solid-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in Solid",
"author": "Tanner Linsley",
"license": "MIT",
diff --git a/packages/svelte-virtual/CHANGELOG.md b/packages/svelte-virtual/CHANGELOG.md
index 9f4bb7aa2..871e04d86 100644
--- a/packages/svelte-virtual/CHANGELOG.md
+++ b/packages/svelte-virtual/CHANGELOG.md
@@ -1,5 +1,12 @@
# @tanstack/svelte-virtual
+## 3.13.12
+
+### Patch Changes
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/svelte-virtual/package.json b/packages/svelte-virtual/package.json
index e24b77f13..a04091f73 100644
--- a/packages/svelte-virtual/package.json
+++ b/packages/svelte-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/svelte-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in Svelte",
"author": "Tanner Linsley",
"license": "MIT",
diff --git a/packages/virtual-core/CHANGELOG.md b/packages/virtual-core/CHANGELOG.md
index af985eaea..f86daed0b 100644
--- a/packages/virtual-core/CHANGELOG.md
+++ b/packages/virtual-core/CHANGELOG.md
@@ -1,5 +1,11 @@
# @tanstack/virtual-core
+## 3.13.12
+
+### Patch Changes
+
+- fix(virtual-core): scroll to index doesn't scroll to bottom correctly ([#1029](https://github.com/TanStack/virtual/pull/1029))
+
## 3.13.11
### Patch Changes
diff --git a/packages/virtual-core/package.json b/packages/virtual-core/package.json
index 99250ffec..6e32738e2 100644
--- a/packages/virtual-core/package.json
+++ b/packages/virtual-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/virtual-core",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks",
"author": "Tanner Linsley",
"license": "MIT",
diff --git a/packages/virtual-core/src/index.ts b/packages/virtual-core/src/index.ts
index fc6449839..b4794e06e 100644
--- a/packages/virtual-core/src/index.ts
+++ b/packages/virtual-core/src/index.ts
@@ -359,7 +359,6 @@ export class Virtualizer<
scrollElement: TScrollElement | null = null
targetWindow: (Window & typeof globalThis) | null = null
isScrolling = false
- private scrollToIndexTimeoutId: number | null = null
measurementsCache: Array = []
private itemSizeCache = new Map()
private pendingMeasuredCacheIndexes: Array = []
@@ -904,7 +903,7 @@ export class Virtualizer<
toOffset -= size
}
- const maxOffset = this.getTotalSize() - size
+ const maxOffset = this.getTotalSize() + this.options.scrollMargin - size
return Math.max(Math.min(maxOffset, toOffset), 0)
}
@@ -943,19 +942,10 @@ export class Virtualizer<
private isDynamicMode = () => this.elementsCache.size > 0
- private cancelScrollToIndex = () => {
- if (this.scrollToIndexTimeoutId !== null && this.targetWindow) {
- this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId)
- this.scrollToIndexTimeoutId = null
- }
- }
-
scrollToOffset = (
toOffset: number,
{ align = 'start', behavior }: ScrollToOffsetOptions = {},
) => {
- this.cancelScrollToIndex()
-
if (behavior === 'smooth' && this.isDynamicMode()) {
console.warn(
'The `smooth` scroll behavior is not fully supported with dynamic size.',
@@ -972,50 +962,62 @@ export class Virtualizer<
index: number,
{ align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},
) => {
- index = Math.max(0, Math.min(index, this.options.count - 1))
-
- this.cancelScrollToIndex()
-
if (behavior === 'smooth' && this.isDynamicMode()) {
console.warn(
'The `smooth` scroll behavior is not fully supported with dynamic size.',
)
}
- const offsetAndAlign = this.getOffsetForIndex(index, initialAlign)
- if (!offsetAndAlign) return
+ index = Math.max(0, Math.min(index, this.options.count - 1))
- const [offset, align] = offsetAndAlign
+ let attempts = 0
+ const maxAttempts = 10
- this._scrollToOffset(offset, { adjustments: undefined, behavior })
+ const tryScroll = (currentAlign: ScrollAlignment) => {
+ if (!this.targetWindow) return
- if (behavior !== 'smooth' && this.isDynamicMode() && this.targetWindow) {
- this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {
- this.scrollToIndexTimeoutId = null
+ const offsetInfo = this.getOffsetForIndex(index, currentAlign)
+ if (!offsetInfo) {
+ console.warn('Failed to get offset for index:', index)
+ return
+ }
+ const [offset, align] = offsetInfo
+ this._scrollToOffset(offset, { adjustments: undefined, behavior })
+
+ this.targetWindow.requestAnimationFrame(() => {
+ const currentOffset = this.getScrollOffset()
+ const afterInfo = this.getOffsetForIndex(index, align)
+ if (!afterInfo) {
+ console.warn('Failed to get offset for index:', index)
+ return
+ }
- const elementInDOM = this.elementsCache.has(
- this.options.getItemKey(index),
- )
+ if (!approxEqual(afterInfo[0], currentOffset)) {
+ scheduleRetry(align)
+ }
+ })
+ }
- if (elementInDOM) {
- const result = this.getOffsetForIndex(index, align)
- if (!result) return
- const [latestOffset] = result
+ const scheduleRetry = (align: ScrollAlignment) => {
+ if (!this.targetWindow) return
- const currentScrollOffset = this.getScrollOffset()
- if (!approxEqual(latestOffset, currentScrollOffset)) {
- this.scrollToIndex(index, { align, behavior })
- }
- } else {
- this.scrollToIndex(index, { align, behavior })
+ attempts++
+ if (attempts < maxAttempts) {
+ if (process.env.NODE_ENV !== 'production' && this.options.debug) {
+ console.info('Schedule retry', attempts, maxAttempts)
}
- })
+ this.targetWindow.requestAnimationFrame(() => tryScroll(align))
+ } else {
+ console.warn(
+ `Failed to scroll to index ${index} after ${maxAttempts} attempts.`,
+ )
+ }
}
+
+ tryScroll(initialAlign)
}
scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {
- this.cancelScrollToIndex()
-
if (behavior === 'smooth' && this.isDynamicMode()) {
console.warn(
'The `smooth` scroll behavior is not fully supported with dynamic size.',
diff --git a/packages/virtual-core/src/utils.ts b/packages/virtual-core/src/utils.ts
index 1bb4615c2..c11b3d38c 100644
--- a/packages/virtual-core/src/utils.ts
+++ b/packages/virtual-core/src/utils.ts
@@ -83,7 +83,7 @@ export function notUndefined(value: T | undefined, msg?: string): T {
}
}
-export const approxEqual = (a: number, b: number) => Math.abs(a - b) <= 1
+export const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1.01
export const debounce = (
targetWindow: Window & typeof globalThis,
diff --git a/packages/vue-virtual/CHANGELOG.md b/packages/vue-virtual/CHANGELOG.md
index 19b986133..6eeec1fa7 100644
--- a/packages/vue-virtual/CHANGELOG.md
+++ b/packages/vue-virtual/CHANGELOG.md
@@ -1,5 +1,12 @@
# @tanstack/vue-virtual
+## 3.13.12
+
+### Patch Changes
+
+- Updated dependencies [[`d21ed98`](https://github.com/TanStack/virtual/commit/d21ed98da3470b9986c9a028ed70fdf0d6189ab4)]:
+ - @tanstack/virtual-core@3.13.12
+
## 3.13.11
### Patch Changes
diff --git a/packages/vue-virtual/package.json b/packages/vue-virtual/package.json
index 4a6ca31a9..c7cc7ec0a 100644
--- a/packages/vue-virtual/package.json
+++ b/packages/vue-virtual/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/vue-virtual",
- "version": "3.13.11",
+ "version": "3.13.12",
"description": "Headless UI for virtualizing scrollable elements in Vue",
"author": "Tanner Linsley",
"license": "MIT",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1859b3f87..bd8e18643 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -11,6 +11,9 @@ importers:
'@changesets/cli':
specifier: ^2.29.4
version: 2.29.4
+ '@playwright/test':
+ specifier: ^1.53.1
+ version: 1.53.1
'@svitejs/changesets-changelog-github-compact':
specifier: ^1.2.0
version: 1.2.0(encoding@0.1.13)
@@ -90,7 +93,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -142,7 +145,7 @@ importers:
specifier: ^17.3.12
version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -197,7 +200,7 @@ importers:
specifier: 5.80.7
version: 5.80.7(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -249,7 +252,7 @@ importers:
specifier: ^17.3.12
version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -301,7 +304,7 @@ importers:
specifier: ^17.3.12
version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -356,7 +359,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -414,7 +417,7 @@ importers:
specifier: 8.21.3
version: 8.21.3(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -466,7 +469,7 @@ importers:
specifier: ^17.3.12
version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -518,7 +521,7 @@ importers:
specifier: ^17.3.12
version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@17.3.12(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
'@tanstack/angular-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/angular-virtual
rxjs:
specifier: ^7.8.2
@@ -549,10 +552,10 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/lit-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/lit-virtual
'@tanstack/virtual-core':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/virtual-core
lit:
specifier: ^3.3.0
@@ -574,10 +577,10 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/lit-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/lit-virtual
'@tanstack/virtual-core':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/virtual-core
lit:
specifier: ^3.3.0
@@ -599,7 +602,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -630,7 +633,7 @@ importers:
examples/react/fixed:
dependencies:
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -664,7 +667,7 @@ importers:
specifier: ^5.80.7
version: 5.80.7(react@18.3.1)
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -689,7 +692,7 @@ importers:
examples/react/padding:
dependencies:
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -717,7 +720,7 @@ importers:
specifier: ^25.1.1
version: 25.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -742,7 +745,7 @@ importers:
examples/react/smooth-scroll:
dependencies:
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -770,7 +773,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
lodash:
specifier: ^4.17.21
@@ -807,7 +810,7 @@ importers:
specifier: ^8.21.3
version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -832,7 +835,7 @@ importers:
examples/react/variable:
dependencies:
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -857,7 +860,7 @@ importers:
examples/react/window:
dependencies:
'@tanstack/react-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/react-virtual
react:
specifier: ^18.3.1
@@ -891,7 +894,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -919,7 +922,7 @@ importers:
examples/svelte/fixed:
dependencies:
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -950,7 +953,7 @@ importers:
specifier: ^5.80.7
version: 5.80.7(svelte@4.2.20)
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -981,7 +984,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -1012,7 +1015,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
lodash:
specifier: ^4.17.21
@@ -1049,7 +1052,7 @@ importers:
specifier: ^8.21.3
version: 8.21.3(svelte@4.2.20)
'@tanstack/svelte-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/svelte-virtual
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -1080,7 +1083,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1105,7 +1108,7 @@ importers:
examples/vue/fixed:
dependencies:
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1133,7 +1136,7 @@ importers:
specifier: ^5.80.7
version: 5.80.7(vue@3.5.16(typescript@5.2.2))
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1158,7 +1161,7 @@ importers:
examples/vue/padding:
dependencies:
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1183,7 +1186,7 @@ importers:
examples/vue/scroll-padding:
dependencies:
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
'@vueuse/core':
specifier: ^12.8.2
@@ -1211,7 +1214,7 @@ importers:
examples/vue/smooth-scroll:
dependencies:
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1239,7 +1242,7 @@ importers:
specifier: ^8.4.1
version: 8.4.1
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
lodash:
specifier: ^4.17.21
@@ -1276,7 +1279,7 @@ importers:
specifier: ^8.21.3
version: 8.21.3(vue@3.5.16(typescript@5.2.2))
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -1301,7 +1304,7 @@ importers:
examples/vue/variable:
dependencies:
'@tanstack/vue-virtual':
- specifier: ^3.13.11
+ specifier: ^3.13.12
version: link:../../../packages/vue-virtual
vue:
specifier: ^3.5.16
@@ -3181,6 +3184,11 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ '@playwright/test@1.53.1':
+ resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@publint/pack@0.1.2':
resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==}
engines: {node: '>=18'}
@@ -5218,6 +5226,11 @@ packages:
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -6533,6 +6546,16 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+ playwright-core@1.53.1:
+ resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.53.1:
+ resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
postcss-loader@8.1.1:
resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==}
engines: {node: '>= 18.12.0'}
@@ -9842,6 +9865,10 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
+ '@playwright/test@1.53.1':
+ dependencies:
+ playwright: 1.53.1
+
'@publint/pack@0.1.2': {}
'@react-hookz/web@25.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -12219,6 +12246,9 @@ snapshots:
fs.realpath@1.0.0: {}
+ fsevents@2.3.2:
+ optional: true
+
fsevents@2.3.3:
optional: true
@@ -13663,6 +13693,14 @@ snapshots:
mlly: 1.7.4
pathe: 2.0.3
+ playwright-core@1.53.1: {}
+
+ playwright@1.53.1:
+ dependencies:
+ playwright-core: 1.53.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.2.2)(webpack@5.94.0):
dependencies:
cosmiconfig: 9.0.0(typescript@5.2.2)