feat: Implement a new _auth layout with a dashboard map, refactor the login form, and add logout functionality.

This commit is contained in:
Jrodenas
2026-03-15 19:56:14 +01:00
parent 45da7f62fe
commit 08d0a5a099
12 changed files with 307 additions and 148 deletions

View File

@@ -6,4 +6,4 @@ APIKEY_MAPS="AIzaSyAwfOShBqkBcS46WqmlsIVWQJ8gpdOPk_4"
SUPABASE_URL="https://qsssikzgwomudkwfmgad.supabase.co" SUPABASE_URL="https://qsssikzgwomudkwfmgad.supabase.co"
SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFzc3Npa3pnd29tdWRrd2ZtZ2FkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQzMjY1NTQsImV4cCI6MjA2OTkwMjU1NH0.BTSscdTcPP1GVmMB-H5caLpWsfuAw1V6mXiqogF8TjU" SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFzc3Npa3pnd29tdWRrd2ZtZ2FkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQzMjY1NTQsImV4cCI6MjA2OTkwMjU1NH0.BTSscdTcPP1GVmMB-H5caLpWsfuAw1V6mXiqogF8TjU"
VITE_LOGIN_USER="test@test.com" VITE_LOGIN_USER="test@test.com"
VITE_PASSWORD_USER="" VITE_PASSWORD_USER="test"

View File

@@ -31,15 +31,16 @@
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"tailwindcss": "^4.2.1", "tailwindcss": "^4.2.1",
"tw-animate-css": "^1.4.0" "tw-animate-css": "^1.4.0",
"zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^2.4.6", "@biomejs/biome": "^2.4.6",
"@inlang/paraglide-js": "^2.13.1", "@inlang/paraglide-js": "^2.13.1",
"@tanstack/devtools-vite": "^0.5.5", "@tanstack/devtools-vite": "^0.5.5",
"@tanstack/react-devtools": "^0.9.13", "@tanstack/react-devtools": "^0.9.13",
"@tanstack/react-router-devtools": "^1.166.7",
"@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-query-devtools": "^5.91.3",
"@tanstack/react-router-devtools": "^1.166.7",
"@testing-library/dom": "^10.4.1", "@testing-library/dom": "^10.4.1",
"@testing-library/react": "^16.3.2", "@testing-library/react": "^16.3.2",
"@types/node": "^22.10.2", "@types/node": "^22.10.2",

230
pnpm-lock.yaml generated
View File

@@ -44,6 +44,9 @@ importers:
lucide-react: lucide-react:
specifier: ^0.577.0 specifier: ^0.577.0
version: 0.577.0(react@19.2.4) version: 0.577.0(react@19.2.4)
maplibre-gl:
specifier: ^5.19.0
version: 5.20.1
nitro: nitro:
specifier: ^3.0.1-alpha.2 specifier: ^3.0.1-alpha.2
version: 3.0.1-alpha.2(lru-cache@11.2.6)(rolldown@1.0.0-rc.5)(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) version: 3.0.1-alpha.2(lru-cache@11.2.6)(rolldown@1.0.0-rc.5)(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))
@@ -59,13 +62,13 @@ importers:
tw-animate-css: tw-animate-css:
specifier: ^1.4.0 specifier: ^1.4.0
version: 1.4.0 version: 1.4.0
zod:
specifier: ^4.3.6
version: 4.3.6
devDependencies: devDependencies:
'@biomejs/biome': '@biomejs/biome':
specifier: ^2.4.6 specifier: ^2.4.6
version: 2.4.6 version: 2.4.6
'@inlang/cli':
specifier: ^3.0.0
version: 3.1.6
'@inlang/paraglide-js': '@inlang/paraglide-js':
specifier: ^2.13.1 specifier: ^2.13.1
version: 2.14.0 version: 2.14.0
@@ -531,11 +534,6 @@ packages:
peerDependencies: peerDependencies:
tailwindcss: '>=4.0.0' tailwindcss: '>=4.0.0'
'@inlang/cli@3.1.6':
resolution: {integrity: sha512-fJG2E/DB4b31/Z8ie4rdfJaO9zK+aUcE90DNn1YoRxiaZ/nxk7cgYdh9Yd6tcZKQjHxH0V6fF6R+bGDxr/3Enw==}
engines: {node: '>=18.0.0'}
hasBin: true
'@inlang/paraglide-js@2.14.0': '@inlang/paraglide-js@2.14.0':
resolution: {integrity: sha512-6Tno8RvEhnALdgueWNQACiEm3YM6hAfbxnYB+JWML9p5s1O4t0DOqgU9YD8fwpixOnZbU6cJRkvt4v9acXDioA==} resolution: {integrity: sha512-6Tno8RvEhnALdgueWNQACiEm3YM6hAfbxnYB+JWML9p5s1O4t0DOqgU9YD8fwpixOnZbU6cJRkvt4v9acXDioA==}
hasBin: true hasBin: true
@@ -582,6 +580,42 @@ packages:
'@lix-js/server-protocol-schema@0.1.1': '@lix-js/server-protocol-schema@0.1.1':
resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==} resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==}
'@mapbox/jsonlint-lines-primitives@2.0.2':
resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==}
engines: {node: '>= 0.6'}
'@mapbox/point-geometry@1.1.0':
resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==}
'@mapbox/tiny-sdf@2.0.7':
resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==}
'@mapbox/unitbezier@0.0.1':
resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==}
'@mapbox/vector-tile@2.0.4':
resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==}
'@mapbox/whoots-js@3.1.0':
resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==}
engines: {node: '>=6.0.0'}
'@maplibre/geojson-vt@5.0.4':
resolution: {integrity: sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==}
'@maplibre/geojson-vt@6.0.2':
resolution: {integrity: sha512-OnXnV2m1yBULKOlUanNFTiOeXCktvWYY4yWoHVETlp6ShJGUhY3DNt9XzPByL24h4JcoJRccPBlMhH1o8cvmyQ==}
'@maplibre/maplibre-gl-style-spec@24.7.0':
resolution: {integrity: sha512-Ed7rcKYU5iELfablg9Mj+TVCsXsPBgdMyXPRAxb2v7oWg9YJnpQdZ5msDs1LESu/mtXy3Z48Vdppv2t/x5kAhw==}
hasBin: true
'@maplibre/mlt@1.1.7':
resolution: {integrity: sha512-HZSsXrgn2V6T3o0qklMwKERfKaAxjO8shmiFnVygCtXTg4SPKWVX+U99RkvxUfCsjYBEcT4ltor8lSlBSCca7Q==}
'@maplibre/vt-pbf@4.3.0':
resolution: {integrity: sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==}
'@napi-rs/wasm-runtime@1.1.1': '@napi-rs/wasm-runtime@1.1.1':
resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
@@ -2523,6 +2557,9 @@ packages:
'@types/estree@1.0.8': '@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/geojson@7946.0.16':
resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
'@types/mysql@2.15.27': '@types/mysql@2.15.27':
resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==}
@@ -2546,6 +2583,9 @@ packages:
'@types/react@19.2.14': '@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
'@types/supercluster@7.1.3':
resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==}
'@types/tedious@4.0.14': '@types/tedious@4.0.14':
resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
@@ -2854,6 +2894,9 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'} engines: {node: '>=12'}
earcut@3.0.2:
resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==}
electron-to-chromium@1.5.302: electron-to-chromium@1.5.302:
resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
@@ -2879,11 +2922,6 @@ packages:
es-module-lexer@1.7.0: es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
esbuild-wasm@0.19.12:
resolution: {integrity: sha512-Zmc4hk6FibJZBcTx5/8K/4jT3/oG1vkGTEeKJUQFCUQKimD6Q7+adp/bdVQyYJFolMKaXkQnVZdV4O5ZaTYmyQ==}
engines: {node: '>=12'}
hasBin: true
esbuild@0.27.3: esbuild@0.27.3:
resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -2940,6 +2978,9 @@ packages:
get-tsconfig@4.13.6: get-tsconfig@4.13.6:
resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
gl-matrix@3.4.4:
resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==}
glob-parent@5.1.2: glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -3079,11 +3120,17 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
hasBin: true hasBin: true
json-stringify-pretty-compact@4.0.0:
resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==}
json5@2.2.3: json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'} engines: {node: '>=6'}
hasBin: true hasBin: true
kdbush@4.0.2:
resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==}
kysely@0.27.6: kysely@0.27.6:
resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==} resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@@ -3195,6 +3242,10 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
maplibre-gl@5.20.1:
resolution: {integrity: sha512-57YIgfRct+rrk78ldoWRuLWRnXV/1vM2Rk0QYfEDQmsXdpgbACwvGoREIOZtyDIaq/GJK/ORYEriaAdVZuNfvw==}
engines: {node: '>=16.14.0', npm: '>=8.1.0'}
mdn-data@2.12.2: mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
@@ -3202,6 +3253,9 @@ packages:
resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==}
engines: {node: 18 || 20 || >=22} engines: {node: 18 || 20 || >=22}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
minipass@7.1.3: minipass@7.1.3:
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'} engines: {node: '>=16 || 14 >=14.17'}
@@ -3212,6 +3266,9 @@ packages:
ms@2.1.3: ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
murmurhash-js@1.0.0:
resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==}
nanoid@3.3.11: nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -3307,6 +3364,10 @@ packages:
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
engines: {node: '>= 14.16'} engines: {node: '>= 14.16'}
pbf@4.0.1:
resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==}
hasBin: true
pg-int8@1.0.1: pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'} engines: {node: '>=4.0.0'}
@@ -3349,6 +3410,9 @@ packages:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
potpack@2.1.0:
resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==}
prettier@3.8.1: prettier@3.8.1:
resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'} engines: {node: '>=14'}
@@ -3362,6 +3426,9 @@ packages:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
protocol-buffers-schema@3.6.0:
resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==}
proxy-from-env@1.1.0: proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -3369,6 +3436,9 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'} engines: {node: '>=6'}
quickselect@3.0.0:
resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==}
react-aria-components@1.15.1: react-aria-components@1.15.1:
resolution: {integrity: sha512-irGhZ+vBvoY9xJHf/qzPLLwFZ8cBUrYwPERGhgjE62dy/RXMUiEW+1DeTHz0OvtjbvFbhNp/I7XM9IaBvmLALg==} resolution: {integrity: sha512-irGhZ+vBvoY9xJHf/qzPLLwFZ8cBUrYwPERGhgjE62dy/RXMUiEW+1DeTHz0OvtjbvFbhNp/I7XM9IaBvmLALg==}
peerDependencies: peerDependencies:
@@ -3421,6 +3491,9 @@ packages:
resolve-pkg-maps@1.0.0: resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
resolve-protobuf-schema@2.1.0:
resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==}
rolldown@1.0.0-rc.5: rolldown@1.0.0-rc.5:
resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==} resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@@ -3437,6 +3510,9 @@ packages:
rou3@0.8.1: rou3@0.8.1:
resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
rw@1.3.3:
resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
safer-buffer@2.1.2: safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -3512,6 +3588,9 @@ packages:
strip-literal@3.1.0: strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
supercluster@8.0.1:
resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==}
symbol-tree@3.2.4: symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -3555,6 +3634,9 @@ packages:
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
tinyqueue@3.0.0:
resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==}
tinyrainbow@2.0.0: tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@@ -3891,6 +3973,9 @@ packages:
zod@3.25.76: zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zod@4.3.6:
resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
snapshots: snapshots:
'@acemir/cssom@0.9.31': {} '@acemir/cssom@0.9.31': {}
@@ -4265,13 +4350,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- tailwind-merge - tailwind-merge
'@inlang/cli@3.1.6':
dependencies:
'@inlang/sdk': 2.7.0
esbuild-wasm: 0.19.12
transitivePeerDependencies:
- babel-plugin-macros
'@inlang/paraglide-js@2.14.0': '@inlang/paraglide-js@2.14.0':
dependencies: dependencies:
'@inlang/recommend-sherlock': 0.2.1 '@inlang/recommend-sherlock': 0.2.1
@@ -4348,6 +4426,52 @@ snapshots:
'@lix-js/server-protocol-schema@0.1.1': {} '@lix-js/server-protocol-schema@0.1.1': {}
'@mapbox/jsonlint-lines-primitives@2.0.2': {}
'@mapbox/point-geometry@1.1.0': {}
'@mapbox/tiny-sdf@2.0.7': {}
'@mapbox/unitbezier@0.0.1': {}
'@mapbox/vector-tile@2.0.4':
dependencies:
'@mapbox/point-geometry': 1.1.0
'@types/geojson': 7946.0.16
pbf: 4.0.1
'@mapbox/whoots-js@3.1.0': {}
'@maplibre/geojson-vt@5.0.4': {}
'@maplibre/geojson-vt@6.0.2':
dependencies:
kdbush: 4.0.2
'@maplibre/maplibre-gl-style-spec@24.7.0':
dependencies:
'@mapbox/jsonlint-lines-primitives': 2.0.2
'@mapbox/unitbezier': 0.0.1
json-stringify-pretty-compact: 4.0.0
minimist: 1.2.8
quickselect: 3.0.0
rw: 1.3.3
tinyqueue: 3.0.0
'@maplibre/mlt@1.1.7':
dependencies:
'@mapbox/point-geometry': 1.1.0
'@maplibre/vt-pbf@4.3.0':
dependencies:
'@mapbox/point-geometry': 1.1.0
'@mapbox/vector-tile': 2.0.4
'@maplibre/geojson-vt': 5.0.4
'@types/geojson': 7946.0.16
'@types/supercluster': 7.1.3
pbf: 4.0.1
supercluster: 8.0.1
'@napi-rs/wasm-runtime@1.1.1': '@napi-rs/wasm-runtime@1.1.1':
dependencies: dependencies:
'@emnapi/core': 1.8.1 '@emnapi/core': 1.8.1
@@ -6706,6 +6830,8 @@ snapshots:
'@types/estree@1.0.8': {} '@types/estree@1.0.8': {}
'@types/geojson@7946.0.16': {}
'@types/mysql@2.15.27': '@types/mysql@2.15.27':
dependencies: dependencies:
'@types/node': 22.19.11 '@types/node': 22.19.11
@@ -6734,6 +6860,10 @@ snapshots:
dependencies: dependencies:
csstype: 3.2.3 csstype: 3.2.3
'@types/supercluster@7.1.3':
dependencies:
'@types/geojson': 7946.0.16
'@types/tedious@4.0.14': '@types/tedious@4.0.14':
dependencies: dependencies:
'@types/node': 22.19.11 '@types/node': 22.19.11
@@ -7026,6 +7156,8 @@ snapshots:
dotenv@16.6.1: {} dotenv@16.6.1: {}
earcut@3.0.2: {}
electron-to-chromium@1.5.302: {} electron-to-chromium@1.5.302: {}
encoding-sniffer@0.2.1: encoding-sniffer@0.2.1:
@@ -7046,8 +7178,6 @@ snapshots:
es-module-lexer@1.7.0: {} es-module-lexer@1.7.0: {}
esbuild-wasm@0.19.12: {}
esbuild@0.27.3: esbuild@0.27.3:
optionalDependencies: optionalDependencies:
'@esbuild/aix-ppc64': 0.27.3 '@esbuild/aix-ppc64': 0.27.3
@@ -7113,6 +7243,8 @@ snapshots:
dependencies: dependencies:
resolve-pkg-maps: 1.0.0 resolve-pkg-maps: 1.0.0
gl-matrix@3.4.4: {}
glob-parent@5.1.2: glob-parent@5.1.2:
dependencies: dependencies:
is-glob: 4.0.3 is-glob: 4.0.3
@@ -7265,8 +7397,12 @@ snapshots:
jsesc@3.1.0: {} jsesc@3.1.0: {}
json-stringify-pretty-compact@4.0.0: {}
json5@2.2.3: {} json5@2.2.3: {}
kdbush@4.0.2: {}
kysely@0.27.6: {} kysely@0.27.6: {}
launch-editor@2.13.0: launch-editor@2.13.0:
@@ -7349,18 +7485,44 @@ snapshots:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
maplibre-gl@5.20.1:
dependencies:
'@mapbox/jsonlint-lines-primitives': 2.0.2
'@mapbox/point-geometry': 1.1.0
'@mapbox/tiny-sdf': 2.0.7
'@mapbox/unitbezier': 0.0.1
'@mapbox/vector-tile': 2.0.4
'@mapbox/whoots-js': 3.1.0
'@maplibre/geojson-vt': 6.0.2
'@maplibre/maplibre-gl-style-spec': 24.7.0
'@maplibre/mlt': 1.1.7
'@maplibre/vt-pbf': 4.3.0
'@types/geojson': 7946.0.16
earcut: 3.0.2
gl-matrix: 3.4.4
kdbush: 4.0.2
murmurhash-js: 1.0.0
pbf: 4.0.1
potpack: 2.1.0
quickselect: 3.0.0
tinyqueue: 3.0.0
mdn-data@2.12.2: {} mdn-data@2.12.2: {}
minimatch@10.2.2: minimatch@10.2.2:
dependencies: dependencies:
brace-expansion: 5.0.3 brace-expansion: 5.0.3
minimist@1.2.8: {}
minipass@7.1.3: {} minipass@7.1.3: {}
module-details-from-path@1.0.4: {} module-details-from-path@1.0.4: {}
ms@2.1.3: {} ms@2.1.3: {}
murmurhash-js@1.0.0: {}
nanoid@3.3.11: {} nanoid@3.3.11: {}
nf3@0.3.10: {} nf3@0.3.10: {}
@@ -7512,6 +7674,10 @@ snapshots:
pathval@2.0.1: {} pathval@2.0.1: {}
pbf@4.0.1:
dependencies:
resolve-protobuf-schema: 2.1.0
pg-int8@1.0.1: {} pg-int8@1.0.1: {}
pg-protocol@1.11.0: {} pg-protocol@1.11.0: {}
@@ -7546,6 +7712,8 @@ snapshots:
dependencies: dependencies:
xtend: 4.0.2 xtend: 4.0.2
potpack@2.1.0: {}
prettier@3.8.1: {} prettier@3.8.1: {}
pretty-format@27.5.1: pretty-format@27.5.1:
@@ -7556,10 +7724,14 @@ snapshots:
progress@2.0.3: {} progress@2.0.3: {}
protocol-buffers-schema@3.6.0: {}
proxy-from-env@1.1.0: {} proxy-from-env@1.1.0: {}
punycode@2.3.1: {} punycode@2.3.1: {}
quickselect@3.0.0: {}
react-aria-components@1.15.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): react-aria-components@1.15.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies: dependencies:
'@internationalized/date': 3.11.0 '@internationalized/date': 3.11.0
@@ -7705,6 +7877,10 @@ snapshots:
resolve-pkg-maps@1.0.0: {} resolve-pkg-maps@1.0.0: {}
resolve-protobuf-schema@2.1.0:
dependencies:
protocol-buffers-schema: 3.6.0
rolldown@1.0.0-rc.5: rolldown@1.0.0-rc.5:
dependencies: dependencies:
'@oxc-project/types': 0.114.0 '@oxc-project/types': 0.114.0
@@ -7760,6 +7936,8 @@ snapshots:
rou3@0.8.1: {} rou3@0.8.1: {}
rw@1.3.3: {}
safer-buffer@2.1.2: {} safer-buffer@2.1.2: {}
saxes@6.0.0: saxes@6.0.0:
@@ -7811,6 +7989,10 @@ snapshots:
dependencies: dependencies:
js-tokens: 9.0.1 js-tokens: 9.0.1
supercluster@8.0.1:
dependencies:
kdbush: 4.0.2
symbol-tree@3.2.4: {} symbol-tree@3.2.4: {}
tailwind-merge@3.4.0: {} tailwind-merge@3.4.0: {}
@@ -7840,6 +8022,8 @@ snapshots:
tinypool@1.1.1: {} tinypool@1.1.1: {}
tinyqueue@3.0.0: {}
tinyrainbow@2.0.0: {} tinyrainbow@2.0.0: {}
tinyspy@4.0.4: {} tinyspy@4.0.4: {}
@@ -8072,3 +8256,5 @@ snapshots:
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
zod@3.25.76: {} zod@3.25.76: {}
zod@4.3.6: {}

View File

@@ -14,13 +14,14 @@ export const useLogin = () => {
mutationKey: ["login"], mutationKey: ["login"],
mutationFn: async (data: TLoginForm) => { mutationFn: async (data: TLoginForm) => {
const response = await user.login({ data }) const response = await user.login({ data })
if (response.error) { if (response.error) {
throw new Error(response.message) throw new Error(response.message)
} }
}, },
onSuccess: () => { onSuccess: () => {
navigate({ navigate({
to: "/" to: "/dashboard"
}) })
} }
}) })

View File

@@ -12,17 +12,13 @@ import { Route as rootRouteImport } from './routes/__root'
import { Route as LogoutRouteImport } from './routes/logout' import { Route as LogoutRouteImport } from './routes/logout'
import { Route as LoginRouteImport } from './routes/login' import { Route as LoginRouteImport } from './routes/login'
import { Route as AccessRouteImport } from './routes/access' import { Route as AccessRouteImport } from './routes/access'
import { Route as AuthedRouteImport } from './routes/_authed' import { Route as AuthRouteImport } from './routes/_auth'
import { Route as IndexRouteImport } from './routes/index' import { Route as IndexRouteImport } from './routes/index'
import { Route as DemoTanstackQueryRouteImport } from './routes/demo/tanstack-query' import { Route as DemoTanstackQueryRouteImport } from './routes/demo/tanstack-query'
import { Route as DemoI18nRouteImport } from './routes/demo.i18n' import { Route as DemoI18nRouteImport } from './routes/demo.i18n'
<<<<<<< HEAD
import { Route as AccessRegisterRouteImport } from './routes/access.register' import { Route as AccessRegisterRouteImport } from './routes/access.register'
import { Route as AccessLoginRouteImport } from './routes/access.login' import { Route as AccessLoginRouteImport } from './routes/access.login'
import { Route as AuthedDashboardRouteImport } from './routes/_authed/dashboard' import { Route as AuthDashboardRouteImport } from './routes/_auth/dashboard'
=======
import { Route as AuthDashboardRouteImport } from './routes/auth/dashboard'
>>>>>>> main
import { Route as DemoSentryTestingRouteImport } from './routes/demo/sentry.testing' import { Route as DemoSentryTestingRouteImport } from './routes/demo/sentry.testing'
const LogoutRoute = LogoutRouteImport.update({ const LogoutRoute = LogoutRouteImport.update({
@@ -40,8 +36,8 @@ const AccessRoute = AccessRouteImport.update({
path: '/access', path: '/access',
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any) } as any)
const AuthedRoute = AuthedRouteImport.update({ const AuthRoute = AuthRouteImport.update({
id: '/_authed', id: '/_auth',
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any) } as any)
const IndexRoute = IndexRouteImport.update({ const IndexRoute = IndexRouteImport.update({
@@ -59,7 +55,6 @@ const DemoI18nRoute = DemoI18nRouteImport.update({
path: '/demo/i18n', path: '/demo/i18n',
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any) } as any)
<<<<<<< HEAD
const AccessRegisterRoute = AccessRegisterRouteImport.update({ const AccessRegisterRoute = AccessRegisterRouteImport.update({
id: '/register', id: '/register',
path: '/register', path: '/register',
@@ -70,16 +65,10 @@ const AccessLoginRoute = AccessLoginRouteImport.update({
path: '/login', path: '/login',
getParentRoute: () => AccessRoute, getParentRoute: () => AccessRoute,
} as any) } as any)
const AuthedDashboardRoute = AuthedDashboardRouteImport.update({ const AuthDashboardRoute = AuthDashboardRouteImport.update({
id: '/dashboard', id: '/dashboard',
path: '/dashboard', path: '/dashboard',
getParentRoute: () => AuthedRoute, getParentRoute: () => AuthRoute,
=======
const AuthDashboardRoute = AuthDashboardRouteImport.update({
id: '/auth/dashboard',
path: '/auth/dashboard',
getParentRoute: () => rootRouteImport,
>>>>>>> main
} as any) } as any)
const DemoSentryTestingRoute = DemoSentryTestingRouteImport.update({ const DemoSentryTestingRoute = DemoSentryTestingRouteImport.update({
id: '/demo/sentry/testing', id: '/demo/sentry/testing',
@@ -89,34 +78,24 @@ const DemoSentryTestingRoute = DemoSentryTestingRouteImport.update({
export interface FileRoutesByFullPath { export interface FileRoutesByFullPath {
'/': typeof IndexRoute '/': typeof IndexRoute
<<<<<<< HEAD
'/access': typeof AccessRouteWithChildren '/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute '/login': typeof LoginRoute
'/logout': typeof LogoutRoute '/logout': typeof LogoutRoute
'/dashboard': typeof AuthedDashboardRoute '/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute '/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute '/access/register': typeof AccessRegisterRoute
=======
'/login': typeof LoginRouteRoute
'/auth/dashboard': typeof AuthDashboardRoute
>>>>>>> main
'/demo/i18n': typeof DemoI18nRoute '/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute '/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute '/demo/sentry/testing': typeof DemoSentryTestingRoute
} }
export interface FileRoutesByTo { export interface FileRoutesByTo {
'/': typeof IndexRoute '/': typeof IndexRoute
<<<<<<< HEAD
'/access': typeof AccessRouteWithChildren '/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute '/login': typeof LoginRoute
'/logout': typeof LogoutRoute '/logout': typeof LogoutRoute
'/dashboard': typeof AuthedDashboardRoute '/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute '/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute '/access/register': typeof AccessRegisterRoute
=======
'/login': typeof LoginRouteRoute
'/auth/dashboard': typeof AuthDashboardRoute
>>>>>>> main
'/demo/i18n': typeof DemoI18nRoute '/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute '/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute '/demo/sentry/testing': typeof DemoSentryTestingRoute
@@ -124,18 +103,13 @@ export interface FileRoutesByTo {
export interface FileRoutesById { export interface FileRoutesById {
__root__: typeof rootRouteImport __root__: typeof rootRouteImport
'/': typeof IndexRoute '/': typeof IndexRoute
<<<<<<< HEAD '/_auth': typeof AuthRouteWithChildren
'/_authed': typeof AuthedRouteWithChildren
'/access': typeof AccessRouteWithChildren '/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute '/login': typeof LoginRoute
'/logout': typeof LogoutRoute '/logout': typeof LogoutRoute
'/_authed/dashboard': typeof AuthedDashboardRoute '/_auth/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute '/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute '/access/register': typeof AccessRegisterRoute
=======
'/login': typeof LoginRouteRoute
'/auth/dashboard': typeof AuthDashboardRoute
>>>>>>> main
'/demo/i18n': typeof DemoI18nRoute '/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute '/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute '/demo/sentry/testing': typeof DemoSentryTestingRoute
@@ -146,14 +120,10 @@ export interface FileRouteTypes {
| '/' | '/'
| '/access' | '/access'
| '/login' | '/login'
<<<<<<< HEAD
| '/logout' | '/logout'
| '/dashboard' | '/dashboard'
| '/access/login' | '/access/login'
| '/access/register' | '/access/register'
=======
| '/auth/dashboard'
>>>>>>> main
| '/demo/i18n' | '/demo/i18n'
| '/demo/tanstack-query' | '/demo/tanstack-query'
| '/demo/sentry/testing' | '/demo/sentry/testing'
@@ -162,31 +132,23 @@ export interface FileRouteTypes {
| '/' | '/'
| '/access' | '/access'
| '/login' | '/login'
<<<<<<< HEAD
| '/logout' | '/logout'
| '/dashboard' | '/dashboard'
| '/access/login' | '/access/login'
| '/access/register' | '/access/register'
=======
| '/auth/dashboard'
>>>>>>> main
| '/demo/i18n' | '/demo/i18n'
| '/demo/tanstack-query' | '/demo/tanstack-query'
| '/demo/sentry/testing' | '/demo/sentry/testing'
id: id:
| '__root__' | '__root__'
| '/' | '/'
| '/_authed' | '/_auth'
| '/access' | '/access'
| '/login' | '/login'
<<<<<<< HEAD
| '/logout' | '/logout'
| '/_authed/dashboard' | '/_auth/dashboard'
| '/access/login' | '/access/login'
| '/access/register' | '/access/register'
=======
| '/auth/dashboard'
>>>>>>> main
| '/demo/i18n' | '/demo/i18n'
| '/demo/tanstack-query' | '/demo/tanstack-query'
| '/demo/sentry/testing' | '/demo/sentry/testing'
@@ -194,15 +156,10 @@ export interface FileRouteTypes {
} }
export interface RootRouteChildren { export interface RootRouteChildren {
IndexRoute: typeof IndexRoute IndexRoute: typeof IndexRoute
<<<<<<< HEAD AuthRoute: typeof AuthRouteWithChildren
AuthedRoute: typeof AuthedRouteWithChildren
AccessRoute: typeof AccessRouteWithChildren AccessRoute: typeof AccessRouteWithChildren
LoginRoute: typeof LoginRoute LoginRoute: typeof LoginRoute
LogoutRoute: typeof LogoutRoute LogoutRoute: typeof LogoutRoute
=======
LoginRouteRoute: typeof LoginRouteRoute
AuthDashboardRoute: typeof AuthDashboardRoute
>>>>>>> main
DemoI18nRoute: typeof DemoI18nRoute DemoI18nRoute: typeof DemoI18nRoute
DemoTanstackQueryRoute: typeof DemoTanstackQueryRoute DemoTanstackQueryRoute: typeof DemoTanstackQueryRoute
DemoSentryTestingRoute: typeof DemoSentryTestingRoute DemoSentryTestingRoute: typeof DemoSentryTestingRoute
@@ -231,11 +188,11 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof AccessRouteImport preLoaderRoute: typeof AccessRouteImport
parentRoute: typeof rootRouteImport parentRoute: typeof rootRouteImport
} }
'/_authed': { '/_auth': {
id: '/_authed' id: '/_auth'
path: '' path: ''
fullPath: '/' fullPath: '/'
preLoaderRoute: typeof AuthedRouteImport preLoaderRoute: typeof AuthRouteImport
parentRoute: typeof rootRouteImport parentRoute: typeof rootRouteImport
} }
'/': { '/': {
@@ -259,7 +216,6 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof DemoI18nRouteImport preLoaderRoute: typeof DemoI18nRouteImport
parentRoute: typeof rootRouteImport parentRoute: typeof rootRouteImport
} }
<<<<<<< HEAD
'/access/register': { '/access/register': {
id: '/access/register' id: '/access/register'
path: '/register' path: '/register'
@@ -274,20 +230,12 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof AccessLoginRouteImport preLoaderRoute: typeof AccessLoginRouteImport
parentRoute: typeof AccessRoute parentRoute: typeof AccessRoute
} }
'/_authed/dashboard': { '/_auth/dashboard': {
id: '/_authed/dashboard' id: '/_auth/dashboard'
path: '/dashboard' path: '/dashboard'
fullPath: '/dashboard' fullPath: '/dashboard'
preLoaderRoute: typeof AuthedDashboardRouteImport
parentRoute: typeof AuthedRoute
=======
'/auth/dashboard': {
id: '/auth/dashboard'
path: '/auth/dashboard'
fullPath: '/auth/dashboard'
preLoaderRoute: typeof AuthDashboardRouteImport preLoaderRoute: typeof AuthDashboardRouteImport
parentRoute: typeof rootRouteImport parentRoute: typeof AuthRoute
>>>>>>> main
} }
'/demo/sentry/testing': { '/demo/sentry/testing': {
id: '/demo/sentry/testing' id: '/demo/sentry/testing'
@@ -299,16 +247,15 @@ declare module '@tanstack/react-router' {
} }
} }
interface AuthedRouteChildren { interface AuthRouteChildren {
AuthedDashboardRoute: typeof AuthedDashboardRoute AuthDashboardRoute: typeof AuthDashboardRoute
} }
const AuthedRouteChildren: AuthedRouteChildren = { const AuthRouteChildren: AuthRouteChildren = {
AuthedDashboardRoute: AuthedDashboardRoute, AuthDashboardRoute: AuthDashboardRoute,
} }
const AuthedRouteWithChildren = const AuthRouteWithChildren = AuthRoute._addFileChildren(AuthRouteChildren)
AuthedRoute._addFileChildren(AuthedRouteChildren)
interface AccessRouteChildren { interface AccessRouteChildren {
AccessLoginRoute: typeof AccessLoginRoute AccessLoginRoute: typeof AccessLoginRoute
@@ -325,15 +272,10 @@ const AccessRouteWithChildren =
const rootRouteChildren: RootRouteChildren = { const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute, IndexRoute: IndexRoute,
<<<<<<< HEAD AuthRoute: AuthRouteWithChildren,
AuthedRoute: AuthedRouteWithChildren,
AccessRoute: AccessRouteWithChildren, AccessRoute: AccessRouteWithChildren,
LoginRoute: LoginRoute, LoginRoute: LoginRoute,
LogoutRoute: LogoutRoute, LogoutRoute: LogoutRoute,
=======
LoginRouteRoute: LoginRouteRoute,
AuthDashboardRoute: AuthDashboardRoute,
>>>>>>> main
DemoI18nRoute: DemoI18nRoute, DemoI18nRoute: DemoI18nRoute,
DemoTanstackQueryRoute: DemoTanstackQueryRoute, DemoTanstackQueryRoute: DemoTanstackQueryRoute,
DemoSentryTestingRoute: DemoSentryTestingRoute, DemoSentryTestingRoute: DemoSentryTestingRoute,

View File

@@ -1,3 +1,4 @@
import { ToastProvider } from "@heroui/react"
import type { QueryClient } from "@tanstack/react-query" import type { QueryClient } from "@tanstack/react-query"
import { import {
createRootRouteWithContext, createRootRouteWithContext,
@@ -55,6 +56,7 @@ function RootDocument({ children }: { children: React.ReactNode }) {
<HeadContent /> <HeadContent />
</head> </head>
<body> <body>
<ToastProvider />
{children} {children}
<Devtools /> <Devtools />
<Scripts /> <Scripts />

View File

@@ -1,8 +1,8 @@
import { createFileRoute, Link, Outlet } from "@tanstack/react-router" import { createFileRoute, Link, Outlet } from "@tanstack/react-router"
export const Route = createFileRoute("/_authed")({ export const Route = createFileRoute("/_auth")({
beforeLoad: ({ context }) => { beforeLoad: ({ context }) => {
if (context.error) { if (context.user.error) {
throw new Error("Not authenticated") throw new Error("Not authenticated")
} }
}, },

View File

@@ -5,13 +5,13 @@ import { useState } from "react"
import { import {
Map as MapComponent, Map as MapComponent,
MapMarker, MapMarker,
MapViewport, type MapViewport,
MarkerContent, MarkerContent,
MarkerPopup, MarkerPopup,
MarkerTooltip MarkerTooltip
} from "@/components/maps/map" } from "@/components/maps/map"
export const Route = createFileRoute("/auth/dashboard")({ export const Route = createFileRoute("/_auth/dashboard")({
component: RouteComponent component: RouteComponent
}) })
@@ -44,7 +44,7 @@ function RouteComponent() {
}) })
return ( return (
<div> <div>
<Card className="h-[800px] p-0 overflow-hidden"> <Card className="h-200 p-0 overflow-hidden">
<MapComponent <MapComponent
center={[40.5874827, -1.7925343]} center={[40.5874827, -1.7925343]}
zoom={10} zoom={10}

View File

@@ -1,9 +0,0 @@
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/_authed/dashboard')({
component: RouteComponent,
})
function RouteComponent() {
return <div>Hello "/_authed/dashboard"!</div>
}

View File

@@ -1,4 +1,14 @@
import { Button, Card, Form, Input, Label, Spinner } from "@heroui/react" import {
Button,
Card,
FieldError,
Fieldset,
Form,
Input,
Label,
Spinner,
TextField
} from "@heroui/react"
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { LogIn } from "lucide-react" import { LogIn } from "lucide-react"
import { useLogin } from "@/lib/hooks/useLogin" import { useLogin } from "@/lib/hooks/useLogin"
@@ -23,28 +33,38 @@ function RouteComponent() {
<div> <div>
<Card.Content> <Card.Content>
<Form onSubmit={handleFormSubmit} className="flex flex-col gap-4"> <Form onSubmit={handleFormSubmit} className="flex flex-col gap-4">
<Label isRequired className="ml-4 text-lg"> <Fieldset>
Correo <Fieldset.Group>
</Label> <TextField
<Input
placeholder="Introduce tu correo"
type="email" type="email"
name="email" name="email"
variant="secondary" variant="secondary"
className="py-4 text-lg" className="py-4 text-lg"
required isRequired
/> defaultValue={import.meta.env.VITE_LOGIN_USER}
>
<Label isRequired className="ml-4 text-lg"> <Label isRequired className="ml-4 text-lg">
Contraseña Correo
</Label> </Label>
<Input <Input placeholder="Introduce tu correo" />
placeholder="Introduce tu contraseña" <FieldError />
</TextField>
<TextField
type="password" type="password"
name="password" name="password"
variant="secondary" variant="secondary"
className="py-4 text-lg" className="py-4 text-lg"
required isRequired
/> defaultValue={import.meta.env.VITE_PASSWORD_USER}
>
<Label isRequired className="ml-4 text-lg">
Contraseña
</Label>
<Input placeholder="Introduce tu contraseña" />
<FieldError />
</TextField>
</Fieldset.Group>
</Fieldset>
<div className="flex justify-end"> <div className="flex justify-end">
<Button <Button
type="submit" type="submit"

View File

@@ -12,6 +12,8 @@ import {
export const Route = createFileRoute("/")({ component: App }) export const Route = createFileRoute("/")({ component: App })
function App() { function App() {
const navigate = Route.useNavigate()
const features = [ const features = [
{ {
icon: <Zap className="w-12 h-12 text-cyan-400" />, icon: <Zap className="w-12 h-12 text-cyan-400" />,
@@ -53,7 +55,17 @@ function App() {
return ( return (
<div className="min-h-screen bg-linear-to-b from-slate-900 via-slate-800 to-slate-900"> <div className="min-h-screen bg-linear-to-b from-slate-900 via-slate-800 to-slate-900">
<Button> Hola</Button> <Button
onPress={() => {
navigate({
to: "/login",
viewTransition: true
})
}}
>
{" "}
Hola
</Button>
<section className="relative py-20 px-6 text-center overflow-hidden"> <section className="relative py-20 px-6 text-center overflow-hidden">
<div className="absolute inset-0 bg-linear-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10"></div> <div className="absolute inset-0 bg-linear-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10"></div>
<div className="relative max-w-5xl mx-auto"> <div className="relative max-w-5xl mx-auto">

View File

@@ -1,5 +1,9 @@
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { user } from "@/lib/server/user"
export const Route = createFileRoute("/logout")({ export const Route = createFileRoute("/logout")({
beforeLoad: async ({ context }) => {} beforeLoad: async () => {
await user.logout()
},
preload: false
}) })