From 5a52b08107bf4d97a10420e1f3ecce3874763ccb Mon Sep 17 00:00:00 2001 From: Alexis Date: Tue, 24 Mar 2026 21:50:04 +0100 Subject: [PATCH 1/7] Rough data setup --- package.json | 1 + pnpm-lock.yaml | 19 ++++++++-- src/components/Map.vue | 78 ++++++++++++++++++++++++++++++++++++++++++ src/main.ts | 3 ++ src/pages/Home.vue | 16 +++++++-- 5 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 src/components/Map.vue diff --git a/package.json b/package.json index 04a8fac..6d37652 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "format": "oxfmt src/" }, "dependencies": { + "@pinia/colada": "^1.0.0", "@tailwindcss/vite": "^4.2.2", "@vueuse/core": "^14.2.1", "pinia": "^3.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c42575..4ac4948 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@pinia/colada': + specifier: ^1.0.0 + version: 1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) '@tailwindcss/vite': specifier: ^4.2.2 version: 4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) @@ -25,7 +28,7 @@ importers: version: 3.5.30(typescript@5.9.3) vue-router: specifier: ^5.0.3 - version: 5.0.4(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) + version: 5.0.4(@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)))(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) devDependencies: '@tsconfig/node24': specifier: ^24.0.4 @@ -695,6 +698,12 @@ packages: cpu: [x64] os: [win32] + '@pinia/colada@1.0.0': + resolution: {integrity: sha512-YKSybA6wusFK4CAUPzItoSgPCfScVnnnO2MSlmaaisE/L7luE77GxFyhTzipM8IbvbXh4zkCy97OE7w9WX34wA==} + peerDependencies: + pinia: ^2.2.6 || ^3.0.0 + vue: ^3.5.17 + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -2517,6 +2526,11 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.51.0': optional: true + '@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))': + dependencies: + pinia: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) + vue: 3.5.30(typescript@5.9.3) + '@polka/url@1.0.0-next.29': {} '@rolldown/pluginutils@1.0.0-rc.2': {} @@ -3787,7 +3801,7 @@ snapshots: transitivePeerDependencies: - supports-color - vue-router@5.0.4(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)): + vue-router@5.0.4(@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)))(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)): dependencies: '@babel/generator': 7.29.1 '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3)) @@ -3808,6 +3822,7 @@ snapshots: vue: 3.5.30(typescript@5.9.3) yaml: 2.8.3 optionalDependencies: + '@pinia/colada': 1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) '@vue/compiler-sfc': 3.5.30 pinia: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) diff --git a/src/components/Map.vue b/src/components/Map.vue new file mode 100644 index 0000000..30a5cf9 --- /dev/null +++ b/src/components/Map.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/main.ts b/src/main.ts index fda1e6e..f23a1d7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,6 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' +import { PiniaColada } from '@pinia/colada' import App from './App.vue' import router from './router' @@ -7,6 +8,8 @@ import router from './router' const app = createApp(App) app.use(createPinia()) +app.use(PiniaColada) + app.use(router) app.mount('#app') diff --git a/src/pages/Home.vue b/src/pages/Home.vue index 67f90c1..a1a5109 100644 --- a/src/pages/Home.vue +++ b/src/pages/Home.vue @@ -1,5 +1,15 @@ + + From 2685a7c86859dbdb901109b315b51696d1d6ba8c Mon Sep 17 00:00:00 2001 From: Alexis Date: Tue, 24 Mar 2026 21:51:58 +0100 Subject: [PATCH 2/7] Moved types to folder --- src/components/Map.vue | 43 ++---------------------------------------- src/types/Api.ts | 6 ++++++ src/types/Bikes.ts | 23 ++++++++++++++++++++++ src/types/Geo.ts | 13 +++++++++++++ 4 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 src/types/Api.ts create mode 100644 src/types/Bikes.ts create mode 100644 src/types/Geo.ts diff --git a/src/components/Map.vue b/src/components/Map.vue index 30a5cf9..7bf0b2e 100644 --- a/src/components/Map.vue +++ b/src/components/Map.vue @@ -1,50 +1,11 @@ From ff773e1d1c076eeb5913c834b1fa9f6ac837d6cb Mon Sep 17 00:00:00 2001 From: Alexis Date: Tue, 24 Mar 2026 23:13:23 +0100 Subject: [PATCH 5/7] Basic map and cluster setup + popup info --- package.json | 6 + pnpm-lock.yaml | 572 ++++++++++++++++++++++++++++++++++++++-- src/assets/css/main.css | 4 + src/components/Map.vue | 108 +++++++- src/stores/map.ts | 15 ++ 5 files changed, 681 insertions(+), 24 deletions(-) create mode 100644 src/stores/map.ts diff --git a/package.json b/package.json index 6d37652..0061da3 100644 --- a/package.json +++ b/package.json @@ -15,16 +15,21 @@ "format": "oxfmt src/" }, "dependencies": { + "@phosphor-icons/vue": "^2.2.1", "@pinia/colada": "^1.0.0", "@tailwindcss/vite": "^4.2.2", + "@vue-leaflet/vue-leaflet": "^0.10.1", "@vueuse/core": "^14.2.1", + "leaflet": "^1.9.4", "pinia": "^3.0.4", "tailwindcss": "^4.2.2", "vue": "^3.5.30", + "vue-leaflet-markercluster": "^0.6.1", "vue-router": "^5.0.3" }, "devDependencies": { "@tsconfig/node24": "^24.0.4", + "@types/leaflet": "^1.9.21", "@types/node": "^24.12.0", "@vitejs/plugin-vue": "^6.0.4", "@vue/eslint-config-typescript": "^14.7.0", @@ -37,6 +42,7 @@ "npm-run-all2": "^8.0.4", "oxfmt": "^0.37.0", "oxlint": "~1.51.0", + "sass-embedded": "^1.98.0", "typescript": "~5.9.3", "vite": "^7.3.1", "vite-plugin-vue-devtools": "^8.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ac4948..aa4f5a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,24 @@ importers: .: dependencies: + '@phosphor-icons/vue': + specifier: ^2.2.1 + version: 2.2.1(vue@3.5.30(typescript@5.9.3)) '@pinia/colada': specifier: ^1.0.0 version: 1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) + version: 4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)) + '@vue-leaflet/vue-leaflet': + specifier: ^0.10.1 + version: 0.10.1(@types/leaflet@1.9.21)(leaflet@1.9.4)(typescript@5.9.3) '@vueuse/core': specifier: ^14.2.1 version: 14.2.1(vue@3.5.30(typescript@5.9.3)) + leaflet: + specifier: ^1.9.4 + version: 1.9.4 pinia: specifier: ^3.0.4 version: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) @@ -26,6 +35,9 @@ importers: vue: specifier: ^3.5.30 version: 3.5.30(typescript@5.9.3) + vue-leaflet-markercluster: + specifier: ^0.6.1 + version: 0.6.1(@vue-leaflet/vue-leaflet@0.10.1(@types/leaflet@1.9.21)(leaflet@1.9.4)(typescript@5.9.3))(typescript@5.9.3) vue-router: specifier: ^5.0.3 version: 5.0.4(@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)))(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)) @@ -33,12 +45,15 @@ importers: '@tsconfig/node24': specifier: ^24.0.4 version: 24.0.4 + '@types/leaflet': + specifier: ^1.9.21 + version: 1.9.21 '@types/node': specifier: ^24.12.0 version: 24.12.0 '@vitejs/plugin-vue': specifier: ^6.0.4 - version: 6.0.5(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)) + version: 6.0.5(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)) '@vue/eslint-config-typescript': specifier: ^14.7.0 version: 14.7.0(eslint-plugin-vue@10.8.0(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) @@ -69,15 +84,18 @@ importers: oxlint: specifier: ~1.51.0 version: 1.51.0 + sass-embedded: + specifier: ^1.98.0 + version: 1.98.0 typescript: specifier: ~5.9.3 version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) + version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) vite-plugin-vue-devtools: specifier: ^8.0.7 - version: 8.1.1(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)) + version: 8.1.1(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)) vue-tsc: specifier: ^3.2.5 version: 3.2.6(typescript@5.9.3) @@ -224,6 +242,9 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + '@esbuild/aix-ppc64@0.27.4': resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} @@ -698,6 +719,100 @@ packages: cpu: [x64] os: [win32] + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@phosphor-icons/vue@2.2.1': + resolution: {integrity: sha512-3RNg1utc2Z5RwPKWFkW3eXI/0BfQAwXgtFxPUPeSzi55jGYUq16b+UqcgbKLazWFlwg5R92OCLKjDiJjeiJcnA==} + engines: {node: '>=14'} + peerDependencies: + vue: '>=3.2.39' + '@pinia/colada@1.0.0': resolution: {integrity: sha512-YKSybA6wusFK4CAUPzItoSgPCfScVnnnO2MSlmaaisE/L7luE77GxFyhTzipM8IbvbXh4zkCy97OE7w9WX34wA==} peerDependencies: @@ -951,9 +1066,15 @@ 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/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/leaflet@1.9.21': + resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} + '@types/node@24.12.0': resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} @@ -1035,6 +1156,15 @@ packages: '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + '@vue-leaflet/vue-leaflet@0.10.1': + resolution: {integrity: sha512-RNEDk8TbnwrJl8ujdbKgZRFygLCxd0aBcWLQ05q/pGv4+d0jamE3KXQgQBqGAteE1mbQsk3xoNcqqUgaIGfWVg==} + peerDependencies: + '@types/leaflet': ^1.5.7 + leaflet: ^1.6.0 + peerDependenciesMeta: + '@types/leaflet': + optional: true + '@vue-macros/common@3.1.2': resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} engines: {node: '>=20.19.0'} @@ -1217,10 +1347,17 @@ packages: caniuse-lite@1.0.30001781: resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1436,6 +1573,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -1447,6 +1588,9 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1527,6 +1671,9 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + leaflet@1.9.4: + resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1663,6 +1810,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} @@ -1789,6 +1939,10 @@ packages: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -1812,6 +1966,131 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + sass-embedded-all-unknown@1.98.0: + resolution: {integrity: sha512-6n4RyK7/1mhdfYvpP3CClS3fGoYqDvRmLClCESS6I7+SAzqjxvGG6u5Fo+cb1nrPNbbilgbM4QKdgcgWHO9NCA==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.98.0: + resolution: {integrity: sha512-M9Ra98A6vYJHpwhoC/5EuH1eOshQ9ZyNwC8XifUDSbRl/cGeQceT1NReR9wFj3L7s1pIbmes1vMmaY2np0uAKQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.98.0: + resolution: {integrity: sha512-LjGiMhHgu7VL1n7EJxTCre1x14bUsWd9d3dnkS2rku003IWOI/fxc7OXgaKagoVzok1kv09rzO3vFXJR5ZeONQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.98.0: + resolution: {integrity: sha512-WPe+0NbaJIZE1fq/RfCZANMeIgmy83x4f+SvFOG7LhUthHpZWcOcrPTsCKKmN3xMT3iw+4DXvqTYOCYGRL3hcQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.98.0: + resolution: {integrity: sha512-zrD25dT7OHPEgLWuPEByybnIfx4rnCtfge4clBgjZdZ3lF6E7qNLRBtSBmoFflh6Vg0RlEjJo5VlpnTMBM5MQQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.98.0: + resolution: {integrity: sha512-cgr1z9rBnCdMf8K+JabIaYd9Rag2OJi5mjq08XJfbJGMZV/TA6hFJCLGkr5/+ZOn4/geTM5/3aSfQ8z5EIJAOg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.98.0: + resolution: {integrity: sha512-OLBOCs/NPeiMqTdOrMFbVHBQFj19GS3bSVSxIhcCq16ZyhouUkYJEZjxQgzv9SWA2q6Ki8GCqp4k6jMeUY9dcA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.98.0: + resolution: {integrity: sha512-axOE3t2MTBwCtkUCbrdM++Gj0gC0fdHJPrgzQ+q1WUmY9NoNMGqflBtk5mBZaWUeha2qYO3FawxCB8lctFwCtw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: glibc + + sass-embedded-linux-arm@1.98.0: + resolution: {integrity: sha512-03baQZCxVyEp8v1NWBRlzGYrmVT/LK7ZrHlF1piscGiGxwfdxoLXVuxsylx3qn/dD/4i/rh7Bzk7reK1br9jvQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: glibc + + sass-embedded-linux-musl-arm64@1.98.0: + resolution: {integrity: sha512-LeqNxQA8y4opjhe68CcFvMzCSrBuJqYVFbwElEj9bagHXQHTp9xVPJRn6VcrC+0VLEDq13HVXMv7RslIuU0zmA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-arm@1.98.0: + resolution: {integrity: sha512-OBkjTDPYR4hSaueOGIM6FDpl9nt/VZwbSRpbNu9/eEJcxE8G/vynRugW8KRZmCFjPy8j/jkGBvvS+k9iOqKV3g==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + libc: musl + + sass-embedded-linux-musl-riscv64@1.98.0: + resolution: {integrity: sha512-7w6hSuOHKt8FZsmjRb3iGSxEzM87fO9+M8nt5JIQYMhHTj5C+JY/vcske0v715HCVj5e1xyTnbGXf8FcASeAIw==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: musl + + sass-embedded-linux-musl-x64@1.98.0: + resolution: {integrity: sha512-QikNyDEJOVqPmxyCFkci8ZdCwEssdItfjQFJB+D+Uy5HFqcS5Lv3d3GxWNX/h1dSb23RPyQdQc267ok5SbEyJw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: musl + + sass-embedded-linux-riscv64@1.98.0: + resolution: {integrity: sha512-E7fNytc/v4xFBQKzgzBddV/jretA4ULAPO6XmtBiQu4zZBdBozuSxsQLe2+XXeb0X4S2GIl72V7IPABdqke/vA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + libc: glibc + + sass-embedded-linux-x64@1.98.0: + resolution: {integrity: sha512-VsvP0t/uw00mMNPv3vwyYKUrFbqzxQHnRMO+bHdAMjvLw4NFf6mscpym9Bzf+NXwi1ZNKnB6DtXjmcpcvqFqYg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + libc: glibc + + sass-embedded-unknown-all@1.98.0: + resolution: {integrity: sha512-C4MMzcAo3oEDQnW7L8SBgB9F2Fq5qHPnaYTZRMOH3Mp/7kM4OooBInXpCiiFjLnjY95hzP4KyctVx0uYR6MYlQ==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.98.0: + resolution: {integrity: sha512-nP/10xbAiPbhQkMr3zQfXE4TuOxPzWRQe1Hgbi90jv2R4TbzbqQTuZVOaJf7KOAN4L2Bo6XCTRjK5XkVnwZuwQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.98.0: + resolution: {integrity: sha512-/lbrVsfbcbdZQ5SJCWcV0NVPd6YRs+FtAnfedp4WbCkO/ZO7Zt/58MvI4X2BVpRY/Nt5ZBo1/7v2gYcQ+J4svQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.98.0: + resolution: {integrity: sha512-Do7u6iRb6K+lrllcTkB1BXcHwOxcKe3rEfOF/GcCLE2w3WpddakRAosJOHFUR37DpsvimQXEt5abs3NzUjEIqg==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.98.0: + resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} + engines: {node: '>=14.0.0'} + hasBin: true + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} @@ -1852,6 +2131,18 @@ packages: resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.2.0: + resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} + engines: {node: '>=16.0.0'} + tailwindcss@4.2.2: resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} @@ -1881,6 +2172,9 @@ packages: peerDependencies: typescript: '>=4.8.4' + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1923,6 +2217,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vite-dev-rpc@1.1.0: resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} peerDependencies: @@ -2003,6 +2300,11 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + vue-leaflet-markercluster@0.6.1: + resolution: {integrity: sha512-jdU1k7qRb7R4o7kNjcH6hQkw9P0UPUdXcfGcpvFIpWPCeVbkTMo2vK2wIHtZexScw2Pa+tYjsZlYxrOHOR6+gA==} + peerDependencies: + '@vue-leaflet/vue-leaflet': ^0.10.1 + vue-router@5.0.4: resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==} peerDependencies: @@ -2262,6 +2564,8 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@bufbuild/protobuf@2.11.0': {} + '@esbuild/aix-ppc64@0.27.4': optional: true @@ -2526,6 +2830,71 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.51.0': optional: true + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + + '@phosphor-icons/vue@2.2.1(vue@3.5.30(typescript@5.9.3))': + dependencies: + vue: 3.5.30(typescript@5.9.3) + '@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))': dependencies: pinia: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) @@ -2671,12 +3040,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) '@tsconfig/node24@24.0.4': {} @@ -2684,8 +3053,14 @@ snapshots: '@types/estree@1.0.8': {} + '@types/geojson@7946.0.16': {} + '@types/json-schema@7.0.15': {} + '@types/leaflet@1.9.21': + dependencies: + '@types/geojson': 7946.0.16 + '@types/node@24.12.0': dependencies: undici-types: 7.16.0 @@ -2783,10 +3158,10 @@ snapshots: '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) vue: 3.5.30(typescript@5.9.3) '@volar/language-core@2.4.28': @@ -2801,6 +3176,15 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 + '@vue-leaflet/vue-leaflet@0.10.1(@types/leaflet@1.9.21)(leaflet@1.9.4)(typescript@5.9.3)': + dependencies: + leaflet: 1.9.4 + vue: 3.5.30(typescript@5.9.3) + optionalDependencies: + '@types/leaflet': 1.9.21 + transitivePeerDependencies: + - typescript + '@vue-macros/common@3.1.2(vue@3.5.30(typescript@5.9.3))': dependencies: '@vue/compiler-sfc': 3.5.30 @@ -3031,10 +3415,17 @@ snapshots: caniuse-lite@1.0.30001781: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + optional: true + chokidar@5.0.0: dependencies: readdirp: 5.0.0 + colorjs.io@0.5.2: {} + confbox@0.1.8: {} confbox@0.2.4: {} @@ -3264,12 +3655,16 @@ snapshots: graceful-fs@4.2.11: {} + has-flag@4.0.0: {} + hookable@5.5.3: {} ignore@5.3.2: {} ignore@7.0.5: {} + immutable@5.1.5: {} + imurmurhash@0.1.4: {} is-docker@3.0.0: {} @@ -3320,6 +3715,8 @@ snapshots: kolorist@1.8.0: {} + leaflet@1.9.4: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -3428,6 +3825,9 @@ snapshots: natural-compare@1.4.0: {} + node-addon-api@7.1.1: + optional: true + node-releases@2.0.36: {} npm-normalize-package-bin@4.0.0: {} @@ -3582,6 +3982,9 @@ snapshots: json-parse-even-better-errors: 4.0.0 npm-normalize-package-bin: 4.0.0 + readdirp@4.1.2: + optional: true + readdirp@5.0.0: {} reusify@1.1.0: {} @@ -3625,6 +4028,106 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + sass-embedded-all-unknown@1.98.0: + dependencies: + sass: 1.98.0 + optional: true + + sass-embedded-android-arm64@1.98.0: + optional: true + + sass-embedded-android-arm@1.98.0: + optional: true + + sass-embedded-android-riscv64@1.98.0: + optional: true + + sass-embedded-android-x64@1.98.0: + optional: true + + sass-embedded-darwin-arm64@1.98.0: + optional: true + + sass-embedded-darwin-x64@1.98.0: + optional: true + + sass-embedded-linux-arm64@1.98.0: + optional: true + + sass-embedded-linux-arm@1.98.0: + optional: true + + sass-embedded-linux-musl-arm64@1.98.0: + optional: true + + sass-embedded-linux-musl-arm@1.98.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.98.0: + optional: true + + sass-embedded-linux-musl-x64@1.98.0: + optional: true + + sass-embedded-linux-riscv64@1.98.0: + optional: true + + sass-embedded-linux-x64@1.98.0: + optional: true + + sass-embedded-unknown-all@1.98.0: + dependencies: + sass: 1.98.0 + optional: true + + sass-embedded-win32-arm64@1.98.0: + optional: true + + sass-embedded-win32-x64@1.98.0: + optional: true + + sass-embedded@1.98.0: + dependencies: + '@bufbuild/protobuf': 2.11.0 + colorjs.io: 0.5.2 + immutable: 5.1.5 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.98.0 + sass-embedded-android-arm: 1.98.0 + sass-embedded-android-arm64: 1.98.0 + sass-embedded-android-riscv64: 1.98.0 + sass-embedded-android-x64: 1.98.0 + sass-embedded-darwin-arm64: 1.98.0 + sass-embedded-darwin-x64: 1.98.0 + sass-embedded-linux-arm: 1.98.0 + sass-embedded-linux-arm64: 1.98.0 + sass-embedded-linux-musl-arm: 1.98.0 + sass-embedded-linux-musl-arm64: 1.98.0 + sass-embedded-linux-musl-riscv64: 1.98.0 + sass-embedded-linux-musl-x64: 1.98.0 + sass-embedded-linux-riscv64: 1.98.0 + sass-embedded-linux-x64: 1.98.0 + sass-embedded-unknown-all: 1.98.0 + sass-embedded-win32-arm64: 1.98.0 + sass-embedded-win32-x64: 1.98.0 + + sass@1.98.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + optional: true + scule@1.3.0: {} semver@6.3.1: {} @@ -3653,6 +4156,16 @@ snapshots: dependencies: copy-anything: 4.0.5 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.2.0 + + sync-message-port@1.2.0: {} + tailwindcss@4.2.2: {} tapable@2.3.1: {} @@ -3674,6 +4187,8 @@ snapshots: dependencies: typescript: 5.9.3 + tslib@2.8.1: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -3718,17 +4233,19 @@ snapshots: util-deprecate@1.0.2: {} - vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)): + varint@6.0.0: {} + + vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)): dependencies: birpc: 2.9.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)) - vite-hot-client@2.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)): + vite-hot-client@2.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)): dependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) - vite-plugin-inspect@11.3.3(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)): + vite-plugin-inspect@11.3.3(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -3738,26 +4255,26 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.1.1(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)): + vite-plugin-vue-devtools@8.1.1(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3))(vue@3.5.30(typescript@5.9.3)): dependencies: '@vue/devtools-core': 8.1.1(vue@3.5.30(typescript@5.9.3)) '@vue/devtools-kit': 8.1.1 '@vue/devtools-shared': 8.1.1 sirv: 3.0.2 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) - vite-plugin-inspect: 11.3.3(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) - vite-plugin-vue-inspector: 5.4.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)) + vite-plugin-vue-inspector: 5.4.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-inspector@5.4.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3)): + vite-plugin-vue-inspector@5.4.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) @@ -3768,11 +4285,11 @@ snapshots: '@vue/compiler-dom': 3.5.30 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(yaml@2.8.3): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -3785,6 +4302,8 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 + sass: 1.98.0 + sass-embedded: 1.98.0 yaml: 2.8.3 vscode-uri@3.1.0: {} @@ -3801,6 +4320,13 @@ snapshots: transitivePeerDependencies: - supports-color + vue-leaflet-markercluster@0.6.1(@vue-leaflet/vue-leaflet@0.10.1(@types/leaflet@1.9.21)(leaflet@1.9.4)(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@vue-leaflet/vue-leaflet': 0.10.1(@types/leaflet@1.9.21)(leaflet@1.9.4)(typescript@5.9.3) + vue: 3.5.30(typescript@5.9.3) + transitivePeerDependencies: + - typescript + vue-router@5.0.4(@pinia/colada@1.0.0(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)))(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)): dependencies: '@babel/generator': 7.29.1 diff --git a/src/assets/css/main.css b/src/assets/css/main.css index 9869637..f8f444b 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -120,3 +120,7 @@ @apply bg-background text-foreground; } } + +.flow > * + * { + margin: .5em 0 0 !important; +} diff --git a/src/components/Map.vue b/src/components/Map.vue index b023833..d15f8a2 100644 --- a/src/components/Map.vue +++ b/src/components/Map.vue @@ -1,8 +1,19 @@ + + diff --git a/src/stores/map.ts b/src/stores/map.ts new file mode 100644 index 0000000..183e3f9 --- /dev/null +++ b/src/stores/map.ts @@ -0,0 +1,15 @@ +import type { PointTuple } from 'leaflet' +import { defineStore } from 'pinia' +import { ref } from 'vue' + +export const useMap = defineStore('map', () => { + const zoom = ref(7) + const minZoom = 4 + const center = ref([47.809376, -0.637207]) + + return { + zoom, + minZoom, + center, + } +}) From 51e624ba2e2458d71e7dae7366103a23cb32c353 Mon Sep 17 00:00:00 2001 From: Alexis Date: Wed, 25 Mar 2026 18:05:35 +0100 Subject: [PATCH 6/7] Added more icons for park types --- src/components/BikeMarker.vue | 49 +++++++++++++++++++++++++++++++++++ src/components/Map.vue | 42 ++++-------------------------- src/stores/map.ts | 6 ++--- 3 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 src/components/BikeMarker.vue diff --git a/src/components/BikeMarker.vue b/src/components/BikeMarker.vue new file mode 100644 index 0000000..3b2a06b --- /dev/null +++ b/src/components/BikeMarker.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/Map.vue b/src/components/Map.vue index d15f8a2..0e64b5f 100644 --- a/src/components/Map.vue +++ b/src/components/Map.vue @@ -2,18 +2,17 @@ import 'leaflet/dist/leaflet.css' import 'vue-leaflet-markercluster/dist/style.css' -import L, { type PointTuple } from 'leaflet' +import L from 'leaflet' globalThis.L = L +import { useMap } from '@/stores/map' import type { ApiResponse } from '@/types/Api' import type { BikeParking } from '@/types/Bikes' import { API_BASE_URL, API_LIMIT } from '@/utils/const' import { useQuery } from '@pinia/colada' -import { LControlZoom, LIcon, LMap, LMarker, LPopup, LTileLayer } from '@vue-leaflet/vue-leaflet' +import { LControlZoom, LMap, LTileLayer } from '@vue-leaflet/vue-leaflet' import { LMarkerClusterGroup } from 'vue-leaflet-markercluster' -import { useMap } from '@/stores/map' -import { computed, ref } from 'vue' -import { PhBicycle } from '@phosphor-icons/vue' +import BikeMarker from './BikeMarker.vue' async function fetchAllBikeParkings(): Promise { const firstPage = await fetch(`${API_BASE_URL}?limit=${API_LIMIT}`).then(r => r.json()) as ApiResponse @@ -38,11 +37,6 @@ const { state } = useQuery({ }) const { zoom, minZoom, center } = useMap() -const normalIconSize: PointTuple = [30, 30] - -const iconSize = ref(normalIconSize) -const iconAnchor = computed(() => [iconSize.value[0] / 2, iconSize.value[1]]) -const popupOffset = [0, iconSize.value[0] * -0.66] diff --git a/src/stores/map.ts b/src/stores/map.ts index 183e3f9..a246b64 100644 --- a/src/stores/map.ts +++ b/src/stores/map.ts @@ -3,9 +3,9 @@ import { defineStore } from 'pinia' import { ref } from 'vue' export const useMap = defineStore('map', () => { - const zoom = ref(7) - const minZoom = 4 - const center = ref([47.809376, -0.637207]) + const zoom = ref(10) + const minZoom = 6 + const center = ref([48.11180645878813, -1.6637869497745246]) return { zoom, From 18a71bdacf579fa98c90ef70af601275e78b6275 Mon Sep 17 00:00:00 2001 From: Alexis Date: Wed, 25 Mar 2026 18:51:52 +0100 Subject: [PATCH 7/7] Color theme for different types --- package.json | 2 ++ pnpm-lock.yaml | 17 ++++++++++++ public/korrigo-logo.webp | Bin 0 -> 3320 bytes src/components/BikeMarker.vue | 49 ++++++++++++++++++++++++++++++++-- src/components/Map.vue | 26 +----------------- src/utils/cn.ts | 4 +++ 6 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 public/korrigo-logo.webp create mode 100644 src/utils/cn.ts diff --git a/package.json b/package.json index 0061da3..2e975e0 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@vitejs/plugin-vue": "^6.0.4", "@vue/eslint-config-typescript": "^14.7.0", "@vue/tsconfig": "^0.9.0", + "clsx": "^2.1.1", "eslint": "^10.0.3", "eslint-config-prettier": "^10.1.8", "eslint-plugin-oxlint": "~1.51.0", @@ -43,6 +44,7 @@ "oxfmt": "^0.37.0", "oxlint": "~1.51.0", "sass-embedded": "^1.98.0", + "tailwind-merge": "^3.5.0", "typescript": "~5.9.3", "vite": "^7.3.1", "vite-plugin-vue-devtools": "^8.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa4f5a9..fccd3c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,6 +60,9 @@ importers: '@vue/tsconfig': specifier: ^0.9.0 version: 0.9.0(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) + clsx: + specifier: ^2.1.1 + version: 2.1.1 eslint: specifier: ^10.0.3 version: 10.1.0(jiti@2.6.1) @@ -87,6 +90,9 @@ importers: sass-embedded: specifier: ^1.98.0 version: 1.98.0 + tailwind-merge: + specifier: ^3.5.0 + version: 3.5.0 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -1355,6 +1361,10 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + colorjs.io@0.5.2: resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} @@ -2143,6 +2153,9 @@ packages: resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} engines: {node: '>=16.0.0'} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + tailwindcss@4.2.2: resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} @@ -3424,6 +3437,8 @@ snapshots: dependencies: readdirp: 5.0.0 + clsx@2.1.1: {} + colorjs.io@0.5.2: {} confbox@0.1.8: {} @@ -4166,6 +4181,8 @@ snapshots: sync-message-port@1.2.0: {} + tailwind-merge@3.5.0: {} + tailwindcss@4.2.2: {} tapable@2.3.1: {} diff --git a/public/korrigo-logo.webp b/public/korrigo-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..26482a6983f424444828c93bf1629e2c69ddecd1 GIT binary patch literal 3320 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 C`<1%@ literal 0 HcmV?d00001 diff --git a/src/components/BikeMarker.vue b/src/components/BikeMarker.vue index 3b2a06b..4e917ac 100644 --- a/src/components/BikeMarker.vue +++ b/src/components/BikeMarker.vue @@ -1,4 +1,5 @@