diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index b1ed48d01..dd7bb0974 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -13,7 +13,7 @@
"@radix-ui/react-collapsible": "^1.1.2",
"@radix-ui/react-dialog": "^1.1.5",
"@tanstack/react-query": "^5.66.0",
- "@tanstack/react-router": "^1.98.0",
+ "@tanstack/react-router": "^1.98.4",
"@tanstack/router-zod-adapter": "^1.81.5",
"@vector-im/compound-design-tokens": "3.0.1",
"@vector-im/compound-web": "^7.6.2",
@@ -44,8 +44,8 @@
"@storybook/react-vite": "^8.5.2",
"@storybook/test": "^8.5.0",
"@tanstack/react-query-devtools": "^5.66.0",
- "@tanstack/router-devtools": "^1.98.0",
- "@tanstack/router-vite-plugin": "^1.98.0",
+ "@tanstack/router-devtools": "^1.98.4",
+ "@tanstack/router-vite-plugin": "^1.98.6",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
"@testing-library/user-event": "^14.6.1",
@@ -5993,9 +5993,9 @@
}
},
"node_modules/@tanstack/history": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.98.0.tgz",
- "integrity": "sha512-zFGRdwz/+lLLSKPfKJ0AA8yVb7lXGrI2WwzhQqYXMKg6npUjlq06+XnrIIml99tQGZi+LFVZidtjBZTi2C/4+A==",
+ "version": "1.98.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.98.1.tgz",
+ "integrity": "sha512-fDu7eOUSUB0MK7YYdCVHQczwJr6p8Fyzso4FKt3xm9MGaRMs9RTmsmk0KQOygGxFOgD44ETavMah5/0JOqFDaw==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -6061,14 +6061,14 @@
}
},
"node_modules/@tanstack/react-router": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.98.0.tgz",
- "integrity": "sha512-mnYadj+fOC8o0lIJBnvxYrVy6/5Vh+rLX1l8UuCfpIyRBxHxXarQwfgkczIdpljtQ43QU2mDtYyWdN1ADyko2A==",
+ "version": "1.98.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.98.4.tgz",
+ "integrity": "sha512-h+NZF0JTeEVqNcwXukiTrPUHGEzW7lRa2zKev+ib726Eedviy+WP9Jw7vIBKjjg8vAjCWyHTKxVo3M5lo74Jog==",
"license": "MIT",
"dependencies": {
- "@tanstack/history": "1.98.0",
+ "@tanstack/history": "1.98.1",
"@tanstack/react-store": "^0.7.0",
- "@tanstack/router-core": "^1.98.0",
+ "@tanstack/router-core": "^1.98.1",
"jsesc": "^3.1.0",
"tiny-invariant": "^1.3.3",
"tiny-warning": "^1.0.3"
@@ -6104,12 +6104,12 @@
}
},
"node_modules/@tanstack/router-core": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.98.0.tgz",
- "integrity": "sha512-ExfX1njbU5OksaB/LLPDnspTsxFXyfsblGEesUg5wxlV0s6doeh3gWj4PK06oNvSbW/S+ryu00HRv0F3y4wIsA==",
+ "version": "1.98.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.98.1.tgz",
+ "integrity": "sha512-s0ZBWTB5oIUP/Fb2z0OFK3wZTa831qZzG2ju0hSYhSxwX2d8ZDjXO4aClrGg1tK1O9+ZOb6n+PHdghpF1K9QTg==",
"license": "MIT",
"dependencies": {
- "@tanstack/history": "1.98.0",
+ "@tanstack/history": "1.98.1",
"@tanstack/store": "^0.7.0"
},
"engines": {
@@ -6121,9 +6121,9 @@
}
},
"node_modules/@tanstack/router-devtools": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.98.0.tgz",
- "integrity": "sha512-EbOJk/IihWBMqWv/g9B7v4T0MIqKmRwdKQxRfymMs0IOjsiJZIlhNek+uIxJs5H/P8v9ZR68SQvgObK7ezJ+QQ==",
+ "version": "1.98.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.98.4.tgz",
+ "integrity": "sha512-Pa7zRqoKm1mRJ4TbsVOn52MELDMoWRsuWDOEC1j2VQhLFoWIvdZU2ZLRzfZbZ8pMRZcilCKDa4iXfb18IjOEEw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6138,19 +6138,19 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/react-router": "^1.98.0",
+ "@tanstack/react-router": "^1.98.4",
"react": ">=18.0.0 || >=19.0.0",
"react-dom": ">=18.0.0 || >=19.0.0"
}
},
"node_modules/@tanstack/router-generator": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.98.0.tgz",
- "integrity": "sha512-Bwejqnaj7TIDxSRw9MUT9GcTeBAXMoY839Oct8FuFodRg6a4YnjxcDDIWztmQJMOWrtERvVy+O6nqAakfP0DIQ==",
+ "version": "1.98.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.98.6.tgz",
+ "integrity": "sha512-3TQwtIafN2n3P6ydkp+NlTFWIBRKGY+VTI7g2wo4Ac2XuIhYavgxE/ME4kNoThsytcPinD/qCTvBhYNfKoeAVg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tanstack/virtual-file-routes": "^1.98.0",
+ "@tanstack/virtual-file-routes": "^1.98.1",
"prettier": "^3.4.2",
"tsx": "^4.19.2",
"zod": "^3.24.1"
@@ -6163,7 +6163,7 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/react-router": "^1.98.0"
+ "@tanstack/react-router": "^1.98.4"
},
"peerDependenciesMeta": {
"@tanstack/react-router": {
@@ -6172,31 +6172,26 @@
}
},
"node_modules/@tanstack/router-plugin": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.98.0.tgz",
- "integrity": "sha512-NjTLWaajcgrQckW6K71bL2sMXNmqjkFq4Qr+mbSgehGZJzXXJIkvGrYKigNFCIGvVrOklUIPgcGS8yGH0cSB/w==",
+ "version": "1.98.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.98.6.tgz",
+ "integrity": "sha512-cMDO6y+eIXY309jzFm9piYRlBRLR9NIVGBtEpIO0r0eaQ6Ns2ue7vRC2Cf70dC5Fb4eo50RIMN/QP11jCOwcsA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.26.7",
- "@babel/generator": "^7.26.5",
- "@babel/parser": "^7.26.7",
"@babel/plugin-syntax-jsx": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9",
"@babel/template": "^7.25.9",
"@babel/traverse": "^7.26.7",
"@babel/types": "^7.26.7",
- "@tanstack/router-generator": "^1.98.0",
- "@tanstack/virtual-file-routes": "^1.98.0",
+ "@tanstack/router-generator": "^1.98.6",
+ "@tanstack/router-utils": "^1.98.5",
+ "@tanstack/virtual-file-routes": "^1.98.1",
"@types/babel__core": "^7.20.5",
- "@types/babel__generator": "^7.6.8",
"@types/babel__template": "^7.4.4",
"@types/babel__traverse": "^7.20.6",
- "@types/diff": "^6.0.0",
"babel-dead-code-elimination": "^1.0.8",
- "chalk": "^5.4.1",
"chokidar": "^3.6.0",
- "diff": "^7.0.0",
"unplugin": "^2.1.2",
"zod": "^3.24.1"
},
@@ -6224,19 +6219,6 @@
}
}
},
- "node_modules/@tanstack/router-plugin/node_modules/chalk": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
- "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
"node_modules/@tanstack/router-plugin/node_modules/unplugin": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz",
@@ -6251,14 +6233,34 @@
"node": ">=18.12.0"
}
},
+ "node_modules/@tanstack/router-utils": {
+ "version": "1.98.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.98.5.tgz",
+ "integrity": "sha512-+2G9yqHgh9Xxhw4a5gg5r5WiuXgCQne9j82/RLyKRAG1JK9iGwPc6qPUHQdV359Yf5BO21MvaDeI8iB5y6wTDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.7",
+ "ansis": "^3.5.2",
+ "diff": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
"node_modules/@tanstack/router-vite-plugin": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/router-vite-plugin/-/router-vite-plugin-1.98.0.tgz",
- "integrity": "sha512-tJZZdYelUcHHLXdY9j5ydquy1KsDC5qL4CMvksGLVj/PcC6aiVpBD2uiSb76VxcDMmChZzZf4wsIoeQDq4GSIw==",
+ "version": "1.98.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-vite-plugin/-/router-vite-plugin-1.98.6.tgz",
+ "integrity": "sha512-tgjitUnnke4xLiVrB+xrFnvpv6a8ihG4ATI+sVyGOp0MZ+rscIprBTHah51uPq3om/7JcOfTsS+AGAPUybMWJA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tanstack/router-plugin": "^1.98.0"
+ "@tanstack/router-plugin": "^1.98.6"
},
"engines": {
"node": ">=12"
@@ -6296,9 +6298,9 @@
}
},
"node_modules/@tanstack/virtual-file-routes": {
- "version": "1.98.0",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.98.0.tgz",
- "integrity": "sha512-L9xZy8eu/zyvz3lWj/C/YpBTgzCoZ7XTKIjQ++uWEFRVPdmTVrp+/O/2/ZYnGa315UNEK2+sEtE3/F/2ZPYMWA==",
+ "version": "1.98.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.98.1.tgz",
+ "integrity": "sha512-LBO5HEs6F9oeEgvqmu5ghJSyIQ242KwUJSlxq34AmMYDFOm5m9pVzRMbqbXFKva5CjDQcN8a7SNSy/hYovAwLg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6472,13 +6474,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/diff": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@types/diff/-/diff-6.0.0.tgz",
- "integrity": "sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/doctrine": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz",
@@ -7124,6 +7119,16 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/ansis": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.10.0.tgz",
+ "integrity": "sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 4b2763022..b27596a60 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -23,7 +23,7 @@
"@radix-ui/react-collapsible": "^1.1.2",
"@radix-ui/react-dialog": "^1.1.5",
"@tanstack/react-query": "^5.66.0",
- "@tanstack/react-router": "^1.98.0",
+ "@tanstack/react-router": "^1.98.4",
"@tanstack/router-zod-adapter": "^1.81.5",
"@vector-im/compound-design-tokens": "3.0.1",
"@vector-im/compound-web": "^7.6.2",
@@ -54,8 +54,8 @@
"@storybook/react-vite": "^8.5.2",
"@storybook/test": "^8.5.0",
"@tanstack/react-query-devtools": "^5.66.0",
- "@tanstack/router-devtools": "^1.98.0",
- "@tanstack/router-vite-plugin": "^1.98.0",
+ "@tanstack/router-devtools": "^1.98.4",
+ "@tanstack/router-vite-plugin": "^1.98.6",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
"@testing-library/user-event": "^14.6.1",
diff --git a/frontend/src/router.tsx b/frontend/src/router.tsx
index 02d3ed55d..db2076e0a 100644
--- a/frontend/src/router.tsx
+++ b/frontend/src/router.tsx
@@ -13,6 +13,7 @@ import { routeTree } from "./routeTree.gen";
// Create a new router instance
export const router = createRouter({
routeTree,
+ scrollRestoration: true,
basepath: config.root,
defaultPendingComponent: LoadingScreen,
defaultPreload: "intent",
diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx
index 21ca5d8e2..a4ab23b30 100644
--- a/frontend/src/routes/__root.tsx
+++ b/frontend/src/routes/__root.tsx
@@ -9,7 +9,6 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import {
type ErrorRouteComponent,
Outlet,
- ScrollRestoration,
createRootRouteWithContext,
} from "@tanstack/react-router";
import { TanStackRouterDevtools } from "@tanstack/router-devtools";
@@ -28,7 +27,6 @@ export const Route = createRootRouteWithContext<{
}>()({
component: () => (
<>
-