webui2/.oxfmtrc.json 🔗
@@ -8,5 +8,5 @@
"trailingComma": "all",
"sortImports": {},
"sortTailwindcss": {},
- "ignorePatterns": ["src/__generated__/**"]
+ "ignorePatterns": ["src/__generated__/**", "src/routeTree.gen.ts"]
}
Quentin Gliech and Claude Opus 4.6 (1M context) created
replace code-based route tree with file-based routing using
@tanstack/router-plugin:
- add tanstackRouter vite plugin with autoCodeSplitting
- create src/routes/ directory mirroring the URL structure
- each route file uses createFileRoute/createRootRoute
- page components stay in src/pages/, route files just wire them up
- App.tsx now imports the generated routeTree from routeTree.gen.ts
- move CodePageSearch type to the route file where validateSearch lives
- ignore routeTree.gen.ts from linter and formatter
route structure:
__root.tsx → Shell + ErrorPage
index.tsx → RepoPickerPage
auth/select-identity.tsx → IdentitySelectPage
$repo.tsx → RepoShell layout
$repo/index.tsx → CodePage (with search params)
$repo/issues/ → BugListPage, NewBugPage, BugDetailPage
$repo/user/$id.tsx → UserProfilePage
$repo/commit/$hash.tsx → CommitPage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
webui2/.oxfmtrc.json | 2
webui2/.oxlintrc.json | 2
webui2/package.json | 1
webui2/pnpm-lock.yaml | 581 +++++++++++++++++++++++
webui2/src/App.tsx | 107 ----
webui2/src/pages/CodePage.tsx | 2
webui2/src/routeTree.gen.ts | 237 +++++++++
webui2/src/routes/$repo.tsx | 7
webui2/src/routes/$repo/commit/$hash.tsx | 7
webui2/src/routes/$repo/index.tsx | 20
webui2/src/routes/$repo/issues/$id.tsx | 7
webui2/src/routes/$repo/issues/index.tsx | 7
webui2/src/routes/$repo/issues/new.tsx | 7
webui2/src/routes/$repo/user/$id.tsx | 7
webui2/src/routes/__root.tsx | 9
webui2/src/routes/auth/select-identity.tsx | 7
webui2/src/routes/index.tsx | 7
webui2/vite.config.ts | 3
18 files changed, 907 insertions(+), 113 deletions(-)
@@ -8,5 +8,5 @@
"trailingComma": "all",
"sortImports": {},
"sortTailwindcss": {},
- "ignorePatterns": ["src/__generated__/**"]
+ "ignorePatterns": ["src/__generated__/**", "src/routeTree.gen.ts"]
}
@@ -19,5 +19,5 @@
"typeAware": true,
"typeCheck": true
},
- "ignorePatterns": ["src/__generated__/**"]
+ "ignorePatterns": ["src/__generated__/**", "src/routeTree.gen.ts"]
}
@@ -45,6 +45,7 @@
"@graphql-codegen/typescript-react-apollo": "^4.3.2",
"@tailwindcss/typography": "^0.5.19",
"@tailwindcss/vite": "^4.2.2",
+ "@tanstack/router-plugin": "^1.167.9",
"@types/react": "^19.1.0",
"@types/react-dom": "^19.1.0",
"@vitejs/plugin-react": "^6.0.1",
@@ -92,7 +92,10 @@ importers:
version: 0.5.19(tailwindcss@4.2.2)
'@tailwindcss/vite':
specifier: ^4.2.2
- version: 4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3))
+ version: 4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))
+ '@tanstack/router-plugin':
+ specifier: ^1.167.9
+ version: 1.167.9(@tanstack/react-router@1.168.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))
'@types/react':
specifier: ^19.1.0
version: 19.2.14
@@ -101,7 +104,7 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^6.0.1
- version: 6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3))
+ version: 6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))
oxfmt:
specifier: ^0.42.0
version: 0.42.0
@@ -119,7 +122,7 @@ importers:
version: 6.0.2
vite:
specifier: ^8.0.3
- version: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3)
+ version: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)
packages:
@@ -212,6 +215,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.28.6':
+ resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/runtime@7.29.2':
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
engines: {node: '>=6.9.0'}
@@ -249,6 +264,162 @@ packages:
resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==}
engines: {node: '>=18.0.0'}
+ '@esbuild/aix-ppc64@0.27.4':
+ resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.4':
+ resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.4':
+ resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.4':
+ resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.4':
+ resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.4':
+ resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.4':
+ resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.4':
+ resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.4':
+ resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.4':
+ resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.4':
+ resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.4':
+ resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.4':
+ resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.4':
+ resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.4':
+ resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.4':
+ resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.4':
+ resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.4':
+ resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.4':
+ resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.4':
+ resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.4':
+ resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.4':
+ resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.4':
+ resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.4':
+ resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@fastify/busboy@3.2.0':
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
@@ -1869,9 +2040,44 @@ packages:
engines: {node: '>=20.19'}
hasBin: true
+ '@tanstack/router-generator@1.166.22':
+ resolution: {integrity: sha512-wQ7H8/Q2rmSPuaxWnurJ3DATNnqWV2tajxri9TSiW4QHsG7cWPD34+goeIinKG+GajJyEdfVpz6w/gRJXfbAPw==}
+ engines: {node: '>=20.19'}
+
+ '@tanstack/router-plugin@1.167.9':
+ resolution: {integrity: sha512-h/VV05FEHd4PVyc5Zy8B3trWLcdLt/Pmp+mfifmBKGRw+MUtvdQKbBHhmy4ouOf67s5zDJMc+n8R3xgU7bDwFA==}
+ engines: {node: '>=20.19'}
+ hasBin: true
+ peerDependencies:
+ '@rsbuild/core': '>=1.0.2'
+ '@tanstack/react-router': ^1.168.8
+ vite: '>=5.0.0 || >=6.0.0 || >=7.0.0'
+ vite-plugin-solid: ^2.11.10
+ webpack: '>=5.92.0'
+ peerDependenciesMeta:
+ '@rsbuild/core':
+ optional: true
+ '@tanstack/react-router':
+ optional: true
+ vite:
+ optional: true
+ vite-plugin-solid:
+ optional: true
+ webpack:
+ optional: true
+
+ '@tanstack/router-utils@1.161.6':
+ resolution: {integrity: sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw==}
+ engines: {node: '>=20.19'}
+
'@tanstack/store@0.9.3':
resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==}
+ '@tanstack/virtual-file-routes@1.161.7':
+ resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==}
+ engines: {node: '>=20.19'}
+ hasBin: true
+
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -1961,6 +2167,11 @@ packages:
resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==}
engines: {node: '>=8'}
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
ansi-escapes@7.3.0:
resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
engines: {node: '>=18'}
@@ -1981,6 +2192,14 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1992,10 +2211,17 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
auto-bind@4.0.0:
resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==}
engines: {node: '>=8'}
+ babel-dead-code-elimination@1.0.12:
+ resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==}
+
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -2008,6 +2234,10 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
brace-expansion@5.0.5:
resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
engines: {node: 18 || 20 || >=22}
@@ -2066,6 +2296,10 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
@@ -2193,6 +2427,10 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2234,6 +2472,11 @@ packages:
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+ esbuild@0.27.4:
+ resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -2242,6 +2485,11 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
estree-util-is-identifier-name@3.0.0:
resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
@@ -2300,6 +2548,9 @@ packages:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
+ get-tsconfig@4.13.7:
+ resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==}
+
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -2442,6 +2693,10 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -2851,6 +3106,10 @@ packages:
resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
engines: {node: '>=0.10.0'}
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
@@ -2920,6 +3179,9 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -2939,6 +3201,11 @@ packages:
resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
+ prettier@3.8.1:
+ resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@@ -3003,6 +3270,14 @@ packages:
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines: {node: '>=0.10.0'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
rehype-autolink-headings@7.1.0:
resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
@@ -3055,6 +3330,9 @@ packages:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
@@ -3131,6 +3409,14 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
@@ -3194,6 +3480,9 @@ packages:
resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==}
engines: {node: '>=16'}
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -3224,6 +3513,11 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tw-animate-css@1.4.0:
resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
@@ -3265,6 +3559,10 @@ packages:
resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==}
engines: {node: '>=0.10.0'}
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
+
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
@@ -3367,6 +3665,9 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
@@ -3423,6 +3724,9 @@ packages:
resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
engines: {node: '>=18'}
+ zod@3.25.76:
+ resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -3535,6 +3839,16 @@ snapshots:
'@babel/core': 7.29.0
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/runtime@7.29.2': {}
'@babel/template@7.28.6':
@@ -3593,6 +3907,84 @@ snapshots:
'@whatwg-node/promise-helpers': 1.3.2
tslib: 2.8.1
+ '@esbuild/aix-ppc64@0.27.4':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/android-arm@0.27.4':
+ optional: true
+
+ '@esbuild/android-x64@0.27.4':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.4':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.4':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.4':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.4':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.4':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.4':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.4':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.4':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.4':
+ optional: true
+
'@fastify/busboy@3.2.0': {}
'@floating-ui/core@1.7.5':
@@ -5181,12 +5573,12 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 4.2.2
- '@tailwindcss/vite@4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3))':
+ '@tailwindcss/vite@4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@tailwindcss/node': 4.2.2
'@tailwindcss/oxide': 4.2.2
tailwindcss: 4.2.2
- vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3)
+ vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)
'@tanstack/history@1.161.6': {}
@@ -5213,8 +5605,58 @@ snapshots:
seroval: 1.5.1
seroval-plugins: 1.5.1(seroval@1.5.1)
+ '@tanstack/router-generator@1.166.22':
+ dependencies:
+ '@tanstack/router-core': 1.168.7
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/virtual-file-routes': 1.161.7
+ prettier: 3.8.1
+ recast: 0.23.11
+ source-map: 0.7.6
+ tsx: 4.21.0
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tanstack/router-plugin@1.167.9(@tanstack/react-router@1.168.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@tanstack/router-core': 1.168.7
+ '@tanstack/router-generator': 1.166.22
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/virtual-file-routes': 1.161.7
+ chokidar: 3.6.0
+ unplugin: 2.3.11
+ zod: 3.25.76
+ optionalDependencies:
+ '@tanstack/react-router': 1.168.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tanstack/router-utils@1.161.6':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ ansis: 4.2.0
+ babel-dead-code-elimination: 1.0.12
+ diff: 8.0.4
+ pathe: 2.0.3
+ tinyglobby: 0.2.15
+ transitivePeerDependencies:
+ - supports-color
+
'@tanstack/store@0.9.3': {}
+ '@tanstack/virtual-file-routes@1.161.7': {}
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
@@ -5262,10 +5704,10 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-react@6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3))':
+ '@vitejs/plugin-react@6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.7
- vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3)
+ vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)
'@whatwg-node/disposablestack@0.0.6':
dependencies:
@@ -5304,6 +5746,8 @@ snapshots:
dependencies:
tslib: 2.8.1
+ acorn@8.16.0: {}
+
ansi-escapes@7.3.0:
dependencies:
environment: 1.1.0
@@ -5318,6 +5762,13 @@ snapshots:
ansi-styles@6.2.3: {}
+ ansis@4.2.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.2
+
argparse@2.0.1: {}
aria-hidden@1.2.6:
@@ -5326,14 +5777,29 @@ snapshots:
array-union@2.1.0: {}
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
auto-bind@4.0.0: {}
+ babel-dead-code-elimination@1.0.12:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.2
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
bail@2.0.2: {}
balanced-match@4.0.4: {}
baseline-browser-mapping@2.10.12: {}
+ binary-extensions@2.3.0: {}
+
brace-expansion@5.0.5:
dependencies:
balanced-match: 4.0.4
@@ -5412,6 +5878,18 @@ snapshots:
chardet@2.1.1: {}
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
class-variance-authority@0.7.1:
dependencies:
clsx: 2.1.1
@@ -5513,6 +5991,8 @@ snapshots:
dependencies:
dequal: 2.0.3
+ diff@8.0.4: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -5547,10 +6027,41 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
+ esbuild@0.27.4:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.4
+ '@esbuild/android-arm': 0.27.4
+ '@esbuild/android-arm64': 0.27.4
+ '@esbuild/android-x64': 0.27.4
+ '@esbuild/darwin-arm64': 0.27.4
+ '@esbuild/darwin-x64': 0.27.4
+ '@esbuild/freebsd-arm64': 0.27.4
+ '@esbuild/freebsd-x64': 0.27.4
+ '@esbuild/linux-arm': 0.27.4
+ '@esbuild/linux-arm64': 0.27.4
+ '@esbuild/linux-ia32': 0.27.4
+ '@esbuild/linux-loong64': 0.27.4
+ '@esbuild/linux-mips64el': 0.27.4
+ '@esbuild/linux-ppc64': 0.27.4
+ '@esbuild/linux-riscv64': 0.27.4
+ '@esbuild/linux-s390x': 0.27.4
+ '@esbuild/linux-x64': 0.27.4
+ '@esbuild/netbsd-arm64': 0.27.4
+ '@esbuild/netbsd-x64': 0.27.4
+ '@esbuild/openbsd-arm64': 0.27.4
+ '@esbuild/openbsd-x64': 0.27.4
+ '@esbuild/openharmony-arm64': 0.27.4
+ '@esbuild/sunos-x64': 0.27.4
+ '@esbuild/win32-arm64': 0.27.4
+ '@esbuild/win32-ia32': 0.27.4
+ '@esbuild/win32-x64': 0.27.4
+
escalade@3.2.0: {}
escape-string-regexp@5.0.0: {}
+ esprima@4.0.1: {}
+
estree-util-is-identifier-name@3.0.0: {}
eventemitter3@5.0.4: {}
@@ -5597,6 +6108,10 @@ snapshots:
get-nonce@1.0.1: {}
+ get-tsconfig@4.13.7:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
github-slugger@2.0.0: {}
glob-parent@5.1.2:
@@ -5790,6 +6305,10 @@ snapshots:
is-arrayish@0.2.1: {}
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
is-decimal@2.0.1: {}
is-extglob@2.1.1: {}
@@ -6359,6 +6878,8 @@ snapshots:
dependencies:
remove-trailing-separator: 1.1.0
+ normalize-path@3.0.0: {}
+
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
@@ -6484,6 +7005,8 @@ snapshots:
path-type@4.0.0: {}
+ pathe@2.0.3: {}
+
picocolors@1.1.1: {}
picomatch@2.3.2: {}
@@ -6501,6 +7024,8 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ prettier@3.8.1: {}
+
property-information@7.1.0: {}
queue-microtask@1.2.3: {}
@@ -6620,6 +7145,18 @@ snapshots:
react@19.2.4: {}
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.2
+
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
rehype-autolink-headings@7.1.0:
dependencies:
'@types/hast': 3.0.4
@@ -6711,6 +7248,8 @@ snapshots:
resolve-from@5.0.0: {}
+ resolve-pkg-maps@1.0.0: {}
+
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
@@ -6797,6 +7336,10 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map@0.6.1: {}
+
+ source-map@0.7.6: {}
+
space-separated-tokens@2.0.2: {}
sponge-case@1.0.1:
@@ -6865,6 +7408,8 @@ snapshots:
timeout-signal@2.0.0: {}
+ tiny-invariant@1.3.3: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.4)
@@ -6890,6 +7435,13 @@ snapshots:
tslib@2.8.1: {}
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.4
+ get-tsconfig: 4.13.7
+ optionalDependencies:
+ fsevents: 2.3.3
+
tw-animate-css@1.4.0: {}
typescript@6.0.2: {}
@@ -6937,6 +7489,13 @@ snapshots:
dependencies:
normalize-path: 2.1.1
+ unplugin@2.3.11:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.16.0
+ picomatch: 4.0.4
+ webpack-virtual-modules: 0.6.2
+
update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
browserslist: 4.28.1
@@ -6989,7 +7548,7 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(jiti@2.6.1)(yaml@2.8.3):
+ vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
@@ -6998,8 +7557,10 @@ snapshots:
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.5.0
+ esbuild: 0.27.4
fsevents: 2.3.3
jiti: 2.6.1
+ tsx: 4.21.0
yaml: 2.8.3
transitivePeerDependencies:
- '@emnapi/core'
@@ -7009,6 +7570,8 @@ snapshots:
web-streams-polyfill@3.3.3: {}
+ webpack-virtual-modules@0.6.2: {}
+
whatwg-mimetype@4.0.0: {}
wrap-ansi@6.2.0:
@@ -7053,4 +7616,6 @@ snapshots:
yoctocolors-cjs@2.1.3: {}
+ zod@3.25.76: {}
+
zwitch@2.0.4: {}
@@ -1,108 +1,13 @@
-import { createRootRoute, createRoute, createRouter, RouterProvider } from "@tanstack/react-router";
+import { createRouter, RouterProvider } from "@tanstack/react-router";
-import { Shell } from "@/components/layout/Shell";
-import { RepoShell } from "@/lib/repo";
-import { BugDetailPage } from "@/pages/BugDetailPage";
-import { BugListPage } from "@/pages/BugListPage";
-import { CodePage } from "@/pages/CodePage";
-import { CommitPage } from "@/pages/CommitPage";
-import { ErrorPage } from "@/pages/ErrorPage";
-import { IdentitySelectPage } from "@/pages/IdentitySelectPage";
-import { NewBugPage } from "@/pages/NewBugPage";
-import { RepoPickerPage } from "@/pages/RepoPickerPage";
-import { UserProfilePage } from "@/pages/UserProfilePage";
+import { routeTree } from "./routeTree.gen";
-// ── Route tree ───────────────────────────────────────────────────────────────
-
-const rootRoute = createRootRoute({
- component: Shell,
- errorComponent: ErrorPage,
-});
-
-const indexRoute = createRoute({
- getParentRoute: () => rootRoute,
- path: "/",
- component: RepoPickerPage,
-});
-
-const authSelectIdentityRoute = createRoute({
- getParentRoute: () => rootRoute,
- path: "/auth/select-identity",
- component: IdentitySelectPage,
-});
-
-const repoRoute = createRoute({
- getParentRoute: () => rootRoute,
- path: "/$repo",
- component: RepoShell,
-});
-
-export type CodePageSearch = {
- ref: string;
- path: string;
- type: "tree" | "blob" | "commits";
-};
-
-const repoIndexRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/",
- component: CodePage,
- validateSearch: (search: Record<string, unknown>): CodePageSearch => ({
- ref: (search.ref as string) ?? "",
- path: (search.path as string) ?? "",
- type: ["tree", "blob", "commits"].includes(search.type as string)
- ? (search.type as CodePageSearch["type"])
- : "tree",
- }),
-});
-
-const bugListRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/issues",
- component: BugListPage,
+const router = createRouter({
+ routeTree,
+ defaultPreload: "intent",
+ scrollRestoration: true,
});
-const newBugRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/issues/new",
- component: NewBugPage,
-});
-
-const bugDetailRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/issues/$id",
- component: BugDetailPage,
-});
-
-const userProfileRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/user/$id",
- component: UserProfilePage,
-});
-
-const commitRoute = createRoute({
- getParentRoute: () => repoRoute,
- path: "/commit/$hash",
- component: CommitPage,
-});
-
-const routeTree = rootRoute.addChildren([
- indexRoute,
- authSelectIdentityRoute,
- repoRoute.addChildren([
- repoIndexRoute,
- bugListRoute,
- newBugRoute,
- bugDetailRoute,
- userProfileRoute,
- commitRoute,
- ]),
-]);
-
-// ── Router instance ──────────────────────────────────────────────────────────
-
-const router = createRouter({ routeTree });
-
declare module "@tanstack/react-router" {
interface Register {
router: typeof router;
@@ -104,7 +104,7 @@ interface BlobQueryData {
} | null;
}
-import type { CodePageSearch } from "@/App";
+import type { CodePageSearch } from "@/routes/$repo/index";
type ViewMode = CodePageSearch["type"];
@@ -0,0 +1,237 @@
+/* eslint-disable */
+
+// @ts-nocheck
+
+// noinspection JSUnusedGlobalSymbols
+
+// This file was automatically generated by TanStack Router.
+// You should NOT make any changes in this file as it will be overwritten.
+// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
+
+import { Route as rootRouteImport } from './routes/__root'
+import { Route as RepoRouteImport } from './routes/$repo'
+import { Route as IndexRouteImport } from './routes/index'
+import { Route as RepoIndexRouteImport } from './routes/$repo/index'
+import { Route as AuthSelectIdentityRouteImport } from './routes/auth/select-identity'
+import { Route as RepoIssuesIndexRouteImport } from './routes/$repo/issues/index'
+import { Route as RepoUserIdRouteImport } from './routes/$repo/user/$id'
+import { Route as RepoIssuesNewRouteImport } from './routes/$repo/issues/new'
+import { Route as RepoIssuesIdRouteImport } from './routes/$repo/issues/$id'
+import { Route as RepoCommitHashRouteImport } from './routes/$repo/commit/$hash'
+
+const RepoRoute = RepoRouteImport.update({
+ id: '/$repo',
+ path: '/$repo',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const IndexRoute = IndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const RepoIndexRoute = RepoIndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => RepoRoute,
+} as any)
+const AuthSelectIdentityRoute = AuthSelectIdentityRouteImport.update({
+ id: '/auth/select-identity',
+ path: '/auth/select-identity',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const RepoIssuesIndexRoute = RepoIssuesIndexRouteImport.update({
+ id: '/issues/',
+ path: '/issues/',
+ getParentRoute: () => RepoRoute,
+} as any)
+const RepoUserIdRoute = RepoUserIdRouteImport.update({
+ id: '/user/$id',
+ path: '/user/$id',
+ getParentRoute: () => RepoRoute,
+} as any)
+const RepoIssuesNewRoute = RepoIssuesNewRouteImport.update({
+ id: '/issues/new',
+ path: '/issues/new',
+ getParentRoute: () => RepoRoute,
+} as any)
+const RepoIssuesIdRoute = RepoIssuesIdRouteImport.update({
+ id: '/issues/$id',
+ path: '/issues/$id',
+ getParentRoute: () => RepoRoute,
+} as any)
+const RepoCommitHashRoute = RepoCommitHashRouteImport.update({
+ id: '/commit/$hash',
+ path: '/commit/$hash',
+ getParentRoute: () => RepoRoute,
+} as any)
+
+export interface FileRoutesByFullPath {
+ '/': typeof IndexRoute
+ '/$repo': typeof RepoRouteWithChildren
+ '/auth/select-identity': typeof AuthSelectIdentityRoute
+ '/$repo/': typeof RepoIndexRoute
+ '/$repo/commit/$hash': typeof RepoCommitHashRoute
+ '/$repo/issues/$id': typeof RepoIssuesIdRoute
+ '/$repo/issues/new': typeof RepoIssuesNewRoute
+ '/$repo/user/$id': typeof RepoUserIdRoute
+ '/$repo/issues/': typeof RepoIssuesIndexRoute
+}
+export interface FileRoutesByTo {
+ '/': typeof IndexRoute
+ '/auth/select-identity': typeof AuthSelectIdentityRoute
+ '/$repo': typeof RepoIndexRoute
+ '/$repo/commit/$hash': typeof RepoCommitHashRoute
+ '/$repo/issues/$id': typeof RepoIssuesIdRoute
+ '/$repo/issues/new': typeof RepoIssuesNewRoute
+ '/$repo/user/$id': typeof RepoUserIdRoute
+ '/$repo/issues': typeof RepoIssuesIndexRoute
+}
+export interface FileRoutesById {
+ __root__: typeof rootRouteImport
+ '/': typeof IndexRoute
+ '/$repo': typeof RepoRouteWithChildren
+ '/auth/select-identity': typeof AuthSelectIdentityRoute
+ '/$repo/': typeof RepoIndexRoute
+ '/$repo/commit/$hash': typeof RepoCommitHashRoute
+ '/$repo/issues/$id': typeof RepoIssuesIdRoute
+ '/$repo/issues/new': typeof RepoIssuesNewRoute
+ '/$repo/user/$id': typeof RepoUserIdRoute
+ '/$repo/issues/': typeof RepoIssuesIndexRoute
+}
+export interface FileRouteTypes {
+ fileRoutesByFullPath: FileRoutesByFullPath
+ fullPaths:
+ | '/'
+ | '/$repo'
+ | '/auth/select-identity'
+ | '/$repo/'
+ | '/$repo/commit/$hash'
+ | '/$repo/issues/$id'
+ | '/$repo/issues/new'
+ | '/$repo/user/$id'
+ | '/$repo/issues/'
+ fileRoutesByTo: FileRoutesByTo
+ to:
+ | '/'
+ | '/auth/select-identity'
+ | '/$repo'
+ | '/$repo/commit/$hash'
+ | '/$repo/issues/$id'
+ | '/$repo/issues/new'
+ | '/$repo/user/$id'
+ | '/$repo/issues'
+ id:
+ | '__root__'
+ | '/'
+ | '/$repo'
+ | '/auth/select-identity'
+ | '/$repo/'
+ | '/$repo/commit/$hash'
+ | '/$repo/issues/$id'
+ | '/$repo/issues/new'
+ | '/$repo/user/$id'
+ | '/$repo/issues/'
+ fileRoutesById: FileRoutesById
+}
+export interface RootRouteChildren {
+ IndexRoute: typeof IndexRoute
+ RepoRoute: typeof RepoRouteWithChildren
+ AuthSelectIdentityRoute: typeof AuthSelectIdentityRoute
+}
+
+declare module '@tanstack/react-router' {
+ interface FileRoutesByPath {
+ '/$repo': {
+ id: '/$repo'
+ path: '/$repo'
+ fullPath: '/$repo'
+ preLoaderRoute: typeof RepoRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/': {
+ id: '/'
+ path: '/'
+ fullPath: '/'
+ preLoaderRoute: typeof IndexRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/$repo/': {
+ id: '/$repo/'
+ path: '/'
+ fullPath: '/$repo/'
+ preLoaderRoute: typeof RepoIndexRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ '/auth/select-identity': {
+ id: '/auth/select-identity'
+ path: '/auth/select-identity'
+ fullPath: '/auth/select-identity'
+ preLoaderRoute: typeof AuthSelectIdentityRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/$repo/issues/': {
+ id: '/$repo/issues/'
+ path: '/issues'
+ fullPath: '/$repo/issues/'
+ preLoaderRoute: typeof RepoIssuesIndexRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ '/$repo/user/$id': {
+ id: '/$repo/user/$id'
+ path: '/user/$id'
+ fullPath: '/$repo/user/$id'
+ preLoaderRoute: typeof RepoUserIdRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ '/$repo/issues/new': {
+ id: '/$repo/issues/new'
+ path: '/issues/new'
+ fullPath: '/$repo/issues/new'
+ preLoaderRoute: typeof RepoIssuesNewRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ '/$repo/issues/$id': {
+ id: '/$repo/issues/$id'
+ path: '/issues/$id'
+ fullPath: '/$repo/issues/$id'
+ preLoaderRoute: typeof RepoIssuesIdRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ '/$repo/commit/$hash': {
+ id: '/$repo/commit/$hash'
+ path: '/commit/$hash'
+ fullPath: '/$repo/commit/$hash'
+ preLoaderRoute: typeof RepoCommitHashRouteImport
+ parentRoute: typeof RepoRoute
+ }
+ }
+}
+
+interface RepoRouteChildren {
+ RepoIndexRoute: typeof RepoIndexRoute
+ RepoCommitHashRoute: typeof RepoCommitHashRoute
+ RepoIssuesIdRoute: typeof RepoIssuesIdRoute
+ RepoIssuesNewRoute: typeof RepoIssuesNewRoute
+ RepoUserIdRoute: typeof RepoUserIdRoute
+ RepoIssuesIndexRoute: typeof RepoIssuesIndexRoute
+}
+
+const RepoRouteChildren: RepoRouteChildren = {
+ RepoIndexRoute: RepoIndexRoute,
+ RepoCommitHashRoute: RepoCommitHashRoute,
+ RepoIssuesIdRoute: RepoIssuesIdRoute,
+ RepoIssuesNewRoute: RepoIssuesNewRoute,
+ RepoUserIdRoute: RepoUserIdRoute,
+ RepoIssuesIndexRoute: RepoIssuesIndexRoute,
+}
+
+const RepoRouteWithChildren = RepoRoute._addFileChildren(RepoRouteChildren)
+
+const rootRouteChildren: RootRouteChildren = {
+ IndexRoute: IndexRoute,
+ RepoRoute: RepoRouteWithChildren,
+ AuthSelectIdentityRoute: AuthSelectIdentityRoute,
+}
+export const routeTree = rootRouteImport
+ ._addFileChildren(rootRouteChildren)
+ ._addFileTypes<FileRouteTypes>()
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { RepoShell } from "@/lib/repo";
+
+export const Route = createFileRoute("/$repo")({
+ component: RepoShell,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { CommitPage } from "@/pages/CommitPage";
+
+export const Route = createFileRoute("/$repo/commit/$hash")({
+ component: CommitPage,
+});
@@ -0,0 +1,20 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { CodePage } from "@/pages/CodePage";
+
+export type CodePageSearch = {
+ ref: string;
+ path: string;
+ type: "tree" | "blob" | "commits";
+};
+
+export const Route = createFileRoute("/$repo/")({
+ component: CodePage,
+ validateSearch: (search: Record<string, unknown>): CodePageSearch => ({
+ ref: (search.ref as string) ?? "",
+ path: (search.path as string) ?? "",
+ type: ["tree", "blob", "commits"].includes(search.type as string)
+ ? (search.type as CodePageSearch["type"])
+ : "tree",
+ }),
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { BugDetailPage } from "@/pages/BugDetailPage";
+
+export const Route = createFileRoute("/$repo/issues/$id")({
+ component: BugDetailPage,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { BugListPage } from "@/pages/BugListPage";
+
+export const Route = createFileRoute("/$repo/issues/")({
+ component: BugListPage,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { NewBugPage } from "@/pages/NewBugPage";
+
+export const Route = createFileRoute("/$repo/issues/new")({
+ component: NewBugPage,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { UserProfilePage } from "@/pages/UserProfilePage";
+
+export const Route = createFileRoute("/$repo/user/$id")({
+ component: UserProfilePage,
+});
@@ -0,0 +1,9 @@
+import { createRootRoute } from "@tanstack/react-router";
+
+import { Shell } from "@/components/layout/Shell";
+import { ErrorPage } from "@/pages/ErrorPage";
+
+export const Route = createRootRoute({
+ component: Shell,
+ errorComponent: ErrorPage,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { IdentitySelectPage } from "@/pages/IdentitySelectPage";
+
+export const Route = createFileRoute("/auth/select-identity")({
+ component: IdentitySelectPage,
+});
@@ -0,0 +1,7 @@
+import { createFileRoute } from "@tanstack/react-router";
+
+import { RepoPickerPage } from "@/pages/RepoPickerPage";
+
+export const Route = createFileRoute("/")({
+ component: RepoPickerPage,
+});
@@ -1,6 +1,7 @@
import path from "path";
import tailwindcss from "@tailwindcss/vite";
+import { tanstackRouter } from "@tanstack/router-plugin/vite";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
@@ -8,7 +9,7 @@ import { defineConfig } from "vite";
const API_URL = process.env.VITE_API_URL || "http://localhost:3000";
export default defineConfig({
- plugins: [tailwindcss(), react()],
+ plugins: [tanstackRouter({ target: "react", autoCodeSplitting: true }), tailwindcss(), react()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),