diff --git a/.env.development b/.env.development
index ee6b18a..6a2340c 100644
--- a/.env.development
+++ b/.env.development
@@ -6,4 +6,4 @@ APIKEY_MAPS="AIzaSyAwfOShBqkBcS46WqmlsIVWQJ8gpdOPk_4"
SUPABASE_URL="https://qsssikzgwomudkwfmgad.supabase.co"
SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFzc3Npa3pnd29tdWRrd2ZtZ2FkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQzMjY1NTQsImV4cCI6MjA2OTkwMjU1NH0.BTSscdTcPP1GVmMB-H5caLpWsfuAw1V6mXiqogF8TjU"
VITE_LOGIN_USER="test@test.com"
-VITE_PASSWORD_USER=""
\ No newline at end of file
+VITE_PASSWORD_USER="test"
\ No newline at end of file
diff --git a/package.json b/package.json
index 0906021..3ef7ffe 100644
--- a/package.json
+++ b/package.json
@@ -31,15 +31,16 @@
"react": "^19.2.4",
"react-dom": "^19.2.4",
"tailwindcss": "^4.2.1",
- "tw-animate-css": "^1.4.0"
+ "tw-animate-css": "^1.4.0",
+ "zod": "^4.3.6"
},
"devDependencies": {
"@biomejs/biome": "^2.4.6",
"@inlang/paraglide-js": "^2.13.1",
"@tanstack/devtools-vite": "^0.5.5",
"@tanstack/react-devtools": "^0.9.13",
- "@tanstack/react-router-devtools": "^1.166.7",
"@tanstack/react-query-devtools": "^5.91.3",
+ "@tanstack/react-router-devtools": "^1.166.7",
"@testing-library/dom": "^10.4.1",
"@testing-library/react": "^16.3.2",
"@types/node": "^22.10.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 534be96..8a92bae 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -44,6 +44,9 @@ importers:
lucide-react:
specifier: ^0.577.0
version: 0.577.0(react@19.2.4)
+ maplibre-gl:
+ specifier: ^5.19.0
+ version: 5.20.1
nitro:
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))
@@ -59,13 +62,13 @@ importers:
tw-animate-css:
specifier: ^1.4.0
version: 1.4.0
+ zod:
+ specifier: ^4.3.6
+ version: 4.3.6
devDependencies:
'@biomejs/biome':
specifier: ^2.4.6
version: 2.4.6
- '@inlang/cli':
- specifier: ^3.0.0
- version: 3.1.6
'@inlang/paraglide-js':
specifier: ^2.13.1
version: 2.14.0
@@ -531,11 +534,6 @@ packages:
peerDependencies:
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':
resolution: {integrity: sha512-6Tno8RvEhnALdgueWNQACiEm3YM6hAfbxnYB+JWML9p5s1O4t0DOqgU9YD8fwpixOnZbU6cJRkvt4v9acXDioA==}
hasBin: true
@@ -582,6 +580,42 @@ packages:
'@lix-js/server-protocol-schema@0.1.1':
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':
resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
@@ -2523,6 +2557,9 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/geojson@7946.0.16':
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+
'@types/mysql@2.15.27':
resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==}
@@ -2546,6 +2583,9 @@ packages:
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+ '@types/supercluster@7.1.3':
+ resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==}
+
'@types/tedious@4.0.14':
resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
@@ -2854,6 +2894,9 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
+ earcut@3.0.2:
+ resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==}
+
electron-to-chromium@1.5.302:
resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
@@ -2879,11 +2922,6 @@ packages:
es-module-lexer@1.7.0:
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:
resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
engines: {node: '>=18'}
@@ -2940,6 +2978,9 @@ packages:
get-tsconfig@4.13.6:
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:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3079,11 +3120,17 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ json-stringify-pretty-compact@4.0.0:
+ resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
+ kdbush@4.0.2:
+ resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==}
+
kysely@0.27.6:
resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
engines: {node: '>=14.0.0'}
@@ -3195,6 +3242,10 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
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:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
@@ -3202,6 +3253,9 @@ packages:
resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==}
engines: {node: 18 || 20 || >=22}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
minipass@7.1.3:
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -3212,6 +3266,9 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ murmurhash-js@1.0.0:
+ resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -3307,6 +3364,10 @@ packages:
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
engines: {node: '>= 14.16'}
+ pbf@4.0.1:
+ resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==}
+ hasBin: true
+
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -3349,6 +3410,9 @@ packages:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
+ potpack@2.1.0:
+ resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==}
+
prettier@3.8.1:
resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'}
@@ -3362,6 +3426,9 @@ packages:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
+ protocol-buffers-schema@3.6.0:
+ resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -3369,6 +3436,9 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ quickselect@3.0.0:
+ resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==}
+
react-aria-components@1.15.1:
resolution: {integrity: sha512-irGhZ+vBvoY9xJHf/qzPLLwFZ8cBUrYwPERGhgjE62dy/RXMUiEW+1DeTHz0OvtjbvFbhNp/I7XM9IaBvmLALg==}
peerDependencies:
@@ -3421,6 +3491,9 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ resolve-protobuf-schema@2.1.0:
+ resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==}
+
rolldown@1.0.0-rc.5:
resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -3437,6 +3510,9 @@ packages:
rou3@0.8.1:
resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -3512,6 +3588,9 @@ packages:
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+ supercluster@8.0.1:
+ resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==}
+
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -3555,6 +3634,9 @@ packages:
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
engines: {node: ^18.0.0 || >=20.0.0}
+ tinyqueue@3.0.0:
+ resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==}
+
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
@@ -3891,6 +3973,9 @@ packages:
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+ zod@4.3.6:
+ resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
+
snapshots:
'@acemir/cssom@0.9.31': {}
@@ -4265,13 +4350,6 @@ snapshots:
transitivePeerDependencies:
- 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':
dependencies:
'@inlang/recommend-sherlock': 0.2.1
@@ -4348,6 +4426,52 @@ snapshots:
'@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':
dependencies:
'@emnapi/core': 1.8.1
@@ -6706,6 +6830,8 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/geojson@7946.0.16': {}
+
'@types/mysql@2.15.27':
dependencies:
'@types/node': 22.19.11
@@ -6734,6 +6860,10 @@ snapshots:
dependencies:
csstype: 3.2.3
+ '@types/supercluster@7.1.3':
+ dependencies:
+ '@types/geojson': 7946.0.16
+
'@types/tedious@4.0.14':
dependencies:
'@types/node': 22.19.11
@@ -7026,6 +7156,8 @@ snapshots:
dotenv@16.6.1: {}
+ earcut@3.0.2: {}
+
electron-to-chromium@1.5.302: {}
encoding-sniffer@0.2.1:
@@ -7046,8 +7178,6 @@ snapshots:
es-module-lexer@1.7.0: {}
- esbuild-wasm@0.19.12: {}
-
esbuild@0.27.3:
optionalDependencies:
'@esbuild/aix-ppc64': 0.27.3
@@ -7113,6 +7243,8 @@ snapshots:
dependencies:
resolve-pkg-maps: 1.0.0
+ gl-matrix@3.4.4: {}
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -7265,8 +7397,12 @@ snapshots:
jsesc@3.1.0: {}
+ json-stringify-pretty-compact@4.0.0: {}
+
json5@2.2.3: {}
+ kdbush@4.0.2: {}
+
kysely@0.27.6: {}
launch-editor@2.13.0:
@@ -7349,18 +7485,44 @@ snapshots:
dependencies:
'@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: {}
minimatch@10.2.2:
dependencies:
brace-expansion: 5.0.3
+ minimist@1.2.8: {}
+
minipass@7.1.3: {}
module-details-from-path@1.0.4: {}
ms@2.1.3: {}
+ murmurhash-js@1.0.0: {}
+
nanoid@3.3.11: {}
nf3@0.3.10: {}
@@ -7512,6 +7674,10 @@ snapshots:
pathval@2.0.1: {}
+ pbf@4.0.1:
+ dependencies:
+ resolve-protobuf-schema: 2.1.0
+
pg-int8@1.0.1: {}
pg-protocol@1.11.0: {}
@@ -7546,6 +7712,8 @@ snapshots:
dependencies:
xtend: 4.0.2
+ potpack@2.1.0: {}
+
prettier@3.8.1: {}
pretty-format@27.5.1:
@@ -7556,10 +7724,14 @@ snapshots:
progress@2.0.3: {}
+ protocol-buffers-schema@3.6.0: {}
+
proxy-from-env@1.1.0: {}
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):
dependencies:
'@internationalized/date': 3.11.0
@@ -7705,6 +7877,10 @@ snapshots:
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:
dependencies:
'@oxc-project/types': 0.114.0
@@ -7760,6 +7936,8 @@ snapshots:
rou3@0.8.1: {}
+ rw@1.3.3: {}
+
safer-buffer@2.1.2: {}
saxes@6.0.0:
@@ -7811,6 +7989,10 @@ snapshots:
dependencies:
js-tokens: 9.0.1
+ supercluster@8.0.1:
+ dependencies:
+ kdbush: 4.0.2
+
symbol-tree@3.2.4: {}
tailwind-merge@3.4.0: {}
@@ -7840,6 +8022,8 @@ snapshots:
tinypool@1.1.1: {}
+ tinyqueue@3.0.0: {}
+
tinyrainbow@2.0.0: {}
tinyspy@4.0.4: {}
@@ -8072,3 +8256,5 @@ snapshots:
yocto-queue@0.1.0: {}
zod@3.25.76: {}
+
+ zod@4.3.6: {}
diff --git a/src/lib/hooks/useLogin.tsx b/src/lib/hooks/useLogin.tsx
index 07f8fbb..906202b 100644
--- a/src/lib/hooks/useLogin.tsx
+++ b/src/lib/hooks/useLogin.tsx
@@ -14,13 +14,14 @@ export const useLogin = () => {
mutationKey: ["login"],
mutationFn: async (data: TLoginForm) => {
const response = await user.login({ data })
+
if (response.error) {
throw new Error(response.message)
}
},
onSuccess: () => {
navigate({
- to: "/"
+ to: "/dashboard"
})
}
})
diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts
index 30ab67e..4537c87 100644
--- a/src/routeTree.gen.ts
+++ b/src/routeTree.gen.ts
@@ -12,17 +12,13 @@ import { Route as rootRouteImport } from './routes/__root'
import { Route as LogoutRouteImport } from './routes/logout'
import { Route as LoginRouteImport } from './routes/login'
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 DemoTanstackQueryRouteImport } from './routes/demo/tanstack-query'
import { Route as DemoI18nRouteImport } from './routes/demo.i18n'
-<<<<<<< HEAD
import { Route as AccessRegisterRouteImport } from './routes/access.register'
import { Route as AccessLoginRouteImport } from './routes/access.login'
-import { Route as AuthedDashboardRouteImport } from './routes/_authed/dashboard'
-=======
-import { Route as AuthDashboardRouteImport } from './routes/auth/dashboard'
->>>>>>> main
+import { Route as AuthDashboardRouteImport } from './routes/_auth/dashboard'
import { Route as DemoSentryTestingRouteImport } from './routes/demo/sentry.testing'
const LogoutRoute = LogoutRouteImport.update({
@@ -40,8 +36,8 @@ const AccessRoute = AccessRouteImport.update({
path: '/access',
getParentRoute: () => rootRouteImport,
} as any)
-const AuthedRoute = AuthedRouteImport.update({
- id: '/_authed',
+const AuthRoute = AuthRouteImport.update({
+ id: '/_auth',
getParentRoute: () => rootRouteImport,
} as any)
const IndexRoute = IndexRouteImport.update({
@@ -59,7 +55,6 @@ const DemoI18nRoute = DemoI18nRouteImport.update({
path: '/demo/i18n',
getParentRoute: () => rootRouteImport,
} as any)
-<<<<<<< HEAD
const AccessRegisterRoute = AccessRegisterRouteImport.update({
id: '/register',
path: '/register',
@@ -70,16 +65,10 @@ const AccessLoginRoute = AccessLoginRouteImport.update({
path: '/login',
getParentRoute: () => AccessRoute,
} as any)
-const AuthedDashboardRoute = AuthedDashboardRouteImport.update({
+const AuthDashboardRoute = AuthDashboardRouteImport.update({
id: '/dashboard',
path: '/dashboard',
- getParentRoute: () => AuthedRoute,
-=======
-const AuthDashboardRoute = AuthDashboardRouteImport.update({
- id: '/auth/dashboard',
- path: '/auth/dashboard',
- getParentRoute: () => rootRouteImport,
->>>>>>> main
+ getParentRoute: () => AuthRoute,
} as any)
const DemoSentryTestingRoute = DemoSentryTestingRouteImport.update({
id: '/demo/sentry/testing',
@@ -89,34 +78,24 @@ const DemoSentryTestingRoute = DemoSentryTestingRouteImport.update({
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
-<<<<<<< HEAD
'/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute
'/logout': typeof LogoutRoute
- '/dashboard': typeof AuthedDashboardRoute
+ '/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute
-=======
- '/login': typeof LoginRouteRoute
- '/auth/dashboard': typeof AuthDashboardRoute
->>>>>>> main
'/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
-<<<<<<< HEAD
'/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute
'/logout': typeof LogoutRoute
- '/dashboard': typeof AuthedDashboardRoute
+ '/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute
-=======
- '/login': typeof LoginRouteRoute
- '/auth/dashboard': typeof AuthDashboardRoute
->>>>>>> main
'/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute
@@ -124,18 +103,13 @@ export interface FileRoutesByTo {
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
-<<<<<<< HEAD
- '/_authed': typeof AuthedRouteWithChildren
+ '/_auth': typeof AuthRouteWithChildren
'/access': typeof AccessRouteWithChildren
'/login': typeof LoginRoute
'/logout': typeof LogoutRoute
- '/_authed/dashboard': typeof AuthedDashboardRoute
+ '/_auth/dashboard': typeof AuthDashboardRoute
'/access/login': typeof AccessLoginRoute
'/access/register': typeof AccessRegisterRoute
-=======
- '/login': typeof LoginRouteRoute
- '/auth/dashboard': typeof AuthDashboardRoute
->>>>>>> main
'/demo/i18n': typeof DemoI18nRoute
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
'/demo/sentry/testing': typeof DemoSentryTestingRoute
@@ -146,14 +120,10 @@ export interface FileRouteTypes {
| '/'
| '/access'
| '/login'
-<<<<<<< HEAD
| '/logout'
| '/dashboard'
| '/access/login'
| '/access/register'
-=======
- | '/auth/dashboard'
->>>>>>> main
| '/demo/i18n'
| '/demo/tanstack-query'
| '/demo/sentry/testing'
@@ -162,31 +132,23 @@ export interface FileRouteTypes {
| '/'
| '/access'
| '/login'
-<<<<<<< HEAD
| '/logout'
| '/dashboard'
| '/access/login'
| '/access/register'
-=======
- | '/auth/dashboard'
->>>>>>> main
| '/demo/i18n'
| '/demo/tanstack-query'
| '/demo/sentry/testing'
id:
| '__root__'
| '/'
- | '/_authed'
+ | '/_auth'
| '/access'
| '/login'
-<<<<<<< HEAD
| '/logout'
- | '/_authed/dashboard'
+ | '/_auth/dashboard'
| '/access/login'
| '/access/register'
-=======
- | '/auth/dashboard'
->>>>>>> main
| '/demo/i18n'
| '/demo/tanstack-query'
| '/demo/sentry/testing'
@@ -194,15 +156,10 @@ export interface FileRouteTypes {
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
-<<<<<<< HEAD
- AuthedRoute: typeof AuthedRouteWithChildren
+ AuthRoute: typeof AuthRouteWithChildren
AccessRoute: typeof AccessRouteWithChildren
LoginRoute: typeof LoginRoute
LogoutRoute: typeof LogoutRoute
-=======
- LoginRouteRoute: typeof LoginRouteRoute
- AuthDashboardRoute: typeof AuthDashboardRoute
->>>>>>> main
DemoI18nRoute: typeof DemoI18nRoute
DemoTanstackQueryRoute: typeof DemoTanstackQueryRoute
DemoSentryTestingRoute: typeof DemoSentryTestingRoute
@@ -231,11 +188,11 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof AccessRouteImport
parentRoute: typeof rootRouteImport
}
- '/_authed': {
- id: '/_authed'
+ '/_auth': {
+ id: '/_auth'
path: ''
fullPath: '/'
- preLoaderRoute: typeof AuthedRouteImport
+ preLoaderRoute: typeof AuthRouteImport
parentRoute: typeof rootRouteImport
}
'/': {
@@ -259,7 +216,6 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof DemoI18nRouteImport
parentRoute: typeof rootRouteImport
}
-<<<<<<< HEAD
'/access/register': {
id: '/access/register'
path: '/register'
@@ -274,20 +230,12 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof AccessLoginRouteImport
parentRoute: typeof AccessRoute
}
- '/_authed/dashboard': {
- id: '/_authed/dashboard'
+ '/_auth/dashboard': {
+ id: '/_auth/dashboard'
path: '/dashboard'
fullPath: '/dashboard'
- preLoaderRoute: typeof AuthedDashboardRouteImport
- parentRoute: typeof AuthedRoute
-=======
- '/auth/dashboard': {
- id: '/auth/dashboard'
- path: '/auth/dashboard'
- fullPath: '/auth/dashboard'
preLoaderRoute: typeof AuthDashboardRouteImport
- parentRoute: typeof rootRouteImport
->>>>>>> main
+ parentRoute: typeof AuthRoute
}
'/demo/sentry/testing': {
id: '/demo/sentry/testing'
@@ -299,16 +247,15 @@ declare module '@tanstack/react-router' {
}
}
-interface AuthedRouteChildren {
- AuthedDashboardRoute: typeof AuthedDashboardRoute
+interface AuthRouteChildren {
+ AuthDashboardRoute: typeof AuthDashboardRoute
}
-const AuthedRouteChildren: AuthedRouteChildren = {
- AuthedDashboardRoute: AuthedDashboardRoute,
+const AuthRouteChildren: AuthRouteChildren = {
+ AuthDashboardRoute: AuthDashboardRoute,
}
-const AuthedRouteWithChildren =
- AuthedRoute._addFileChildren(AuthedRouteChildren)
+const AuthRouteWithChildren = AuthRoute._addFileChildren(AuthRouteChildren)
interface AccessRouteChildren {
AccessLoginRoute: typeof AccessLoginRoute
@@ -325,15 +272,10 @@ const AccessRouteWithChildren =
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
-<<<<<<< HEAD
- AuthedRoute: AuthedRouteWithChildren,
+ AuthRoute: AuthRouteWithChildren,
AccessRoute: AccessRouteWithChildren,
LoginRoute: LoginRoute,
LogoutRoute: LogoutRoute,
-=======
- LoginRouteRoute: LoginRouteRoute,
- AuthDashboardRoute: AuthDashboardRoute,
->>>>>>> main
DemoI18nRoute: DemoI18nRoute,
DemoTanstackQueryRoute: DemoTanstackQueryRoute,
DemoSentryTestingRoute: DemoSentryTestingRoute,
diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx
index ec32f14..499577b 100644
--- a/src/routes/__root.tsx
+++ b/src/routes/__root.tsx
@@ -1,3 +1,4 @@
+import { ToastProvider } from "@heroui/react"
import type { QueryClient } from "@tanstack/react-query"
import {
createRootRouteWithContext,
@@ -55,6 +56,7 @@ function RootDocument({ children }: { children: React.ReactNode }) {