diff --git a/package.json b/package.json index 28b8df2c8..701db85ca 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,11 @@ }, "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", - "@maplibre/maplibre-gl-leaflet": "^0.1.3", + "@nazka/map-gl-js-spiderfy": "^2.0.0", "@tanstack/match-sorter-utils": "^8.19.4", "@tanstack/svelte-table": "^8.21.3", + "@turf/convex": "^7.3.5", + "@turf/helpers": "^7.3.5", "@zerodevx/svelte-toast": "^0.9.6", "axios": "^1.15.0", "axios-retry": "^4.5.0", @@ -53,12 +55,8 @@ "husky": "^9.1.7", "i18n-iso-countries": "^7.14.0", "js-confetti": "^0.13.1", - "leaflet": "^1.9.4", - "leaflet.featuregroup.subgroup": "^1.0.2", - "leaflet.locatecontrol": "^0.90.0", - "leaflet.markercluster": "^1.5.3", "localforage": "^1.10.0", - "maplibre-gl": "^4.7.1", + "maplibre-gl": "^5.24.0", "marked": "^18.0.0", "opening_hours": "^3.12.0", "qrcode": "^1.5.4", @@ -80,9 +78,6 @@ "@types/d3-geo": "^3.1.0", "@types/dompurify": "^3.2.0", "@types/geojson": "^7946.0.16", - "@types/leaflet": "1.9.21", - "@types/leaflet.featuregroup.subgroup": "^1.0.4", - "@types/leaflet.markercluster": "^1.5.6", "@types/node": "^22.19.18", "@types/qrcode": "^1.5.6", "jsdom": "^29.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69d6d7eb3..cdea934bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,15 +11,21 @@ importers: '@mapbox/geojson-rewind': specifier: ^0.5.2 version: 0.5.2 - '@maplibre/maplibre-gl-leaflet': - specifier: ^0.1.3 - version: 0.1.3(@types/leaflet@1.9.21)(leaflet@1.9.4)(maplibre-gl@4.7.1) + '@nazka/map-gl-js-spiderfy': + specifier: ^2.0.0 + version: 2.0.0 '@tanstack/match-sorter-utils': specifier: ^8.19.4 version: 8.19.4 '@tanstack/svelte-table': specifier: ^8.21.3 version: 8.21.3(svelte@4.2.20) + '@turf/convex': + specifier: ^7.3.5 + version: 7.3.5 + '@turf/helpers': + specifier: ^7.3.5 + version: 7.3.5 '@zerodevx/svelte-toast': specifier: ^0.9.6 version: 0.9.6(svelte@4.2.20) @@ -53,24 +59,12 @@ importers: js-confetti: specifier: ^0.13.1 version: 0.13.1 - leaflet: - specifier: ^1.9.4 - version: 1.9.4 - leaflet.featuregroup.subgroup: - specifier: ^1.0.2 - version: 1.0.2 - leaflet.locatecontrol: - specifier: ^0.90.0 - version: 0.90.0(leaflet@1.9.4) - leaflet.markercluster: - specifier: ^1.5.3 - version: 1.5.3(leaflet@1.9.4) localforage: specifier: ^1.10.0 version: 1.10.0 maplibre-gl: - specifier: ^4.7.1 - version: 4.7.1 + specifier: ^5.24.0 + version: 5.24.0 marked: specifier: ^18.0.0 version: 18.0.4 @@ -129,15 +123,6 @@ importers: '@types/geojson': specifier: ^7946.0.16 version: 7946.0.16 - '@types/leaflet': - specifier: 1.9.21 - version: 1.9.21 - '@types/leaflet.featuregroup.subgroup': - specifier: ^1.0.4 - version: 1.0.4 - '@types/leaflet.markercluster': - specifier: ^1.5.6 - version: 1.5.6 '@types/node': specifier: ^22.19.18 version: 22.19.19 @@ -947,33 +932,41 @@ packages: resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} engines: {node: '>= 0.6'} - '@mapbox/point-geometry@0.1.0': - resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + '@mapbox/point-geometry@1.1.0': + resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} - '@mapbox/tiny-sdf@2.0.6': - resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} + '@mapbox/tiny-sdf@2.2.0': + resolution: {integrity: sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==} '@mapbox/unitbezier@0.0.1': resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} - '@mapbox/vector-tile@1.3.1': - resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + '@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/maplibre-gl-leaflet@0.1.3': - resolution: {integrity: sha512-9+hp1PSJcxuuj5/Zta9zbQ8+ZvN4doWXPtlY7ikNtUZY1VbkamY0uTqzHp9kxRPqpgeKGrI7MjzXvwzU88wWCw==} - peerDependencies: - '@types/leaflet': ^1.9.0 - leaflet: ^1.9.3 - maplibre-gl: ^2.4.0 || ^3.3.1 || ^4.3.2 || ^5.0.0 + '@maplibre/geojson-vt@5.0.4': + resolution: {integrity: sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==} + + '@maplibre/geojson-vt@6.1.0': + resolution: {integrity: sha512-2eIY4gZxeKIVOZVNkAMb+5NgXhgsMQpOveTQAvnp53LYqHGJZDidk7Ew0Tged9PThidpbS+NFTh0g4zivhPDzQ==} - '@maplibre/maplibre-gl-style-spec@20.4.0': - resolution: {integrity: sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==} + '@maplibre/maplibre-gl-style-spec@24.8.5': + resolution: {integrity: sha512-EzEJmMt6thioRH7GI9LWS7ahXTcAhAPGWCe6oTP2Ps4YnsXOOAfeqx854lZaiDnwURfHmcCKV1mr6oo0i23x6w==} hasBin: true + '@maplibre/mlt@1.1.10': + resolution: {integrity: sha512-SByFHVVxqThkstQnwh8/48pyvUmeQ7NGZ/n+XHa4TkLTKK6lnsMh9Aa7LocS8OW5E3ZiXxmwYivSc7lcQsQBag==} + + '@maplibre/vt-pbf@4.3.0': + resolution: {integrity: sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==} + + '@nazka/map-gl-js-spiderfy@2.0.0': + resolution: {integrity: sha512-puFWuTXtsoFKEFlmaF1EcPhRZRIuvsGwuYmVPNT0nTbVHXC//jKJa57uxfwVps01AQJBiyewQ30ElUzv8Kp3fg==} + '@playwright/test@1.60.0': resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} engines: {node: '>=18'} @@ -1261,6 +1254,15 @@ packages: resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} + '@turf/convex@7.3.5': + resolution: {integrity: sha512-d/pq86he+/GB/2ObuBHapeT15QFsCPhhGab3uE4YjogLMbD8qtu0sRGF+cvvPRDNuCLycOBL/xgFLnf9SteYlA==} + + '@turf/helpers@7.3.5': + resolution: {integrity: sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==} + + '@turf/meta@7.3.5': + resolution: {integrity: sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1280,33 +1282,12 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/geojson-vt@3.2.5': - resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} - '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/leaflet.featuregroup.subgroup@1.0.4': - resolution: {integrity: sha512-Vgd0fy3J16MekTBFaR+Vd2wg1X8i2kCDx9XBumj/JjqVLV+D3X3ZEpg7f+UokULLB59MKIWIC11ciG8eNxBtTw==} - - '@types/leaflet.markercluster@1.5.6': - resolution: {integrity: sha512-I7hZjO2+isVXGYWzKxBp8PsCzAYCJBc29qBdFpquOCkS7zFDqUsUvkEOyQHedsk/Cy5tocQzf+Ndorm5W9YKTQ==} - - '@types/leaflet@1.9.21': - resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} - - '@types/mapbox__point-geometry@0.1.4': - resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} - - '@types/mapbox__vector-tile@1.3.4': - resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} - '@types/node@22.19.19': resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} - '@types/pbf@3.0.5': - resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} - '@types/qrcode@1.5.6': resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} @@ -1467,6 +1448,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + concaveman@1.2.1: + resolution: {integrity: sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -1549,8 +1533,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - earcut@3.0.1: - resolution: {integrity: sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==} + earcut@3.0.2: + resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1688,9 +1672,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - geojson-vt@4.0.2: - resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1711,12 +1692,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - gl-matrix@3.4.3: - resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} - - global-prefix@4.0.0: - resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} - engines: {node: '>=16'} + gl-matrix@3.4.4: + resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} globals@17.6.0: resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} @@ -1772,16 +1749,9 @@ packages: typescript: optional: true - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - ini@4.1.3: - resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -1810,10 +1780,6 @@ packages: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -1839,30 +1805,10 @@ packages: kdbush@4.0.2: resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - leaflet.featuregroup.subgroup@1.0.2: - resolution: {integrity: sha512-9nCVg8nUe686+BtPbUT7ALOe/IA+8Mum+rkA8pfPpCkH0WvKevRrH+JMcMTjAoNQKVI0uxrWrLV5w298SS3ESA==} - - leaflet.locatecontrol@0.90.0: - resolution: {integrity: sha512-yzgKyOXVRgALmo38ZhPf+2QgYE3pA/rrVSE0CyZhsSAzlnwPTZ1sfZLOFXTH20XLNNw1SX7AuMRLu0LZkWNakg==} - peerDependencies: - leaflet: ^1.9.0 || >=2.0.0-alpha.1 - - leaflet.markercluster@1.5.3: - resolution: {integrity: sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==} - peerDependencies: - leaflet: ^1.3.1 - - leaflet@1.9.4: - resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} - lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -1972,8 +1918,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - maplibre-gl@4.7.1: - resolution: {integrity: sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==} + maplibre-gl@5.24.0: + resolution: {integrity: sha512-ALyFxgtd5R+65UqZ/++lOqwWcC0SNho9c27fYSyLmG7AfnAul2o46F05aDJGPbFU57wos9dgcIySHs0Xe6ia3A==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} marked@18.0.4: @@ -2070,8 +2016,8 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} - pbf@3.3.0: - resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + pbf@4.0.2: + resolution: {integrity: sha512-J0ajxARhZfpUEebxYs1vhMGMuLSXtBe1e+fFPDrf2uA2hgo+UshKfNUWOz92HJNz6/NFEXseQPddnHkTreWRqg==} hasBin: true periscopic@3.1.0: @@ -2098,12 +2044,15 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + point-in-polygon@1.1.0: + resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==} + postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} - potpack@2.0.0: - resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} + potpack@2.1.0: + resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==} protocol-buffers-schema@3.6.0: resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} @@ -2127,6 +2076,9 @@ packages: quickselect@3.0.0: resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} + rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -2155,14 +2107,14 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + robust-predicates@2.0.4: + resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==} + rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -2351,6 +2303,9 @@ packages: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} + tinyqueue@2.0.3: + resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} + tinyqueue@3.0.0: resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} @@ -2514,9 +2469,6 @@ packages: jsdom: optional: true - vt-pbf@3.1.3: - resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -2536,11 +2488,6 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -3034,34 +2981,51 @@ snapshots: '@mapbox/jsonlint-lines-primitives@2.0.2': {} - '@mapbox/point-geometry@0.1.0': {} + '@mapbox/point-geometry@1.1.0': {} - '@mapbox/tiny-sdf@2.0.6': {} + '@mapbox/tiny-sdf@2.2.0': {} '@mapbox/unitbezier@0.0.1': {} - '@mapbox/vector-tile@1.3.1': + '@mapbox/vector-tile@2.0.4': dependencies: - '@mapbox/point-geometry': 0.1.0 + '@mapbox/point-geometry': 1.1.0 + '@types/geojson': 7946.0.16 + pbf: 4.0.2 '@mapbox/whoots-js@3.1.0': {} - '@maplibre/maplibre-gl-leaflet@0.1.3(@types/leaflet@1.9.21)(leaflet@1.9.4)(maplibre-gl@4.7.1)': + '@maplibre/geojson-vt@5.0.4': {} + + '@maplibre/geojson-vt@6.1.0': dependencies: - '@types/leaflet': 1.9.21 - leaflet: 1.9.4 - maplibre-gl: 4.7.1 + kdbush: 4.0.2 - '@maplibre/maplibre-gl-style-spec@20.4.0': + '@maplibre/maplibre-gl-style-spec@24.8.5': 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: 2.0.0 - rw: 1.3.3 + quickselect: 3.0.0 tinyqueue: 3.0.0 + '@maplibre/mlt@1.1.10': + 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.2 + supercluster: 8.0.1 + + '@nazka/map-gl-js-spiderfy@2.0.0': {} + '@playwright/test@1.60.0': dependencies: playwright: 1.60.0 @@ -3287,6 +3251,25 @@ snapshots: '@tanstack/table-core@8.21.3': {} + '@turf/convex@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + concaveman: 1.2.1 + tslib: 2.8.1 + + '@turf/helpers@7.3.5': + dependencies: + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/meta@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -3306,38 +3289,12 @@ snapshots: '@types/estree@1.0.8': {} - '@types/geojson-vt@3.2.5': - dependencies: - '@types/geojson': 7946.0.16 - '@types/geojson@7946.0.16': {} - '@types/leaflet.featuregroup.subgroup@1.0.4': - dependencies: - '@types/leaflet': 1.9.21 - - '@types/leaflet.markercluster@1.5.6': - dependencies: - '@types/leaflet': 1.9.21 - - '@types/leaflet@1.9.21': - dependencies: - '@types/geojson': 7946.0.16 - - '@types/mapbox__point-geometry@0.1.4': {} - - '@types/mapbox__vector-tile@1.3.4': - dependencies: - '@types/geojson': 7946.0.16 - '@types/mapbox__point-geometry': 0.1.4 - '@types/pbf': 3.0.5 - '@types/node@22.19.19': dependencies: undici-types: 6.21.0 - '@types/pbf@3.0.5': {} - '@types/qrcode@1.5.6': dependencies: '@types/node': 22.19.19 @@ -3514,6 +3471,13 @@ snapshots: dependencies: delayed-stream: 1.0.0 + concaveman@1.2.1: + dependencies: + point-in-polygon: 1.1.0 + rbush: 3.0.1 + robust-predicates: 2.0.4 + tinyqueue: 2.0.3 + cookie@0.6.0: {} css-tree@2.3.1: @@ -3582,7 +3546,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - earcut@3.0.1: {} + earcut@3.0.2: {} emoji-regex@10.6.0: {} @@ -3804,8 +3768,6 @@ snapshots: function-bind@1.1.2: {} - geojson-vt@4.0.2: {} - get-caller-file@2.0.5: {} get-east-asian-width@1.6.0: {} @@ -3830,13 +3792,7 @@ snapshots: get-stream@6.0.1: {} - gl-matrix@3.4.3: {} - - global-prefix@4.0.0: - dependencies: - ini: 4.1.3 - kind-of: 6.0.3 - which: 4.0.0 + gl-matrix@3.4.4: {} globals@17.6.0: {} @@ -3883,12 +3839,8 @@ snapshots: optionalDependencies: typescript: 5.9.3 - ieee754@1.2.1: {} - immediate@3.0.6: {} - ini@4.1.3: {} - internmap@2.0.3: {} intl-messageformat@10.7.18: @@ -3914,8 +3866,6 @@ snapshots: is-retry-allowed@2.2.0: {} - isexe@3.1.1: {} - jiti@2.7.0: {} js-confetti@0.13.1: {} @@ -3952,22 +3902,8 @@ snapshots: kdbush@4.0.2: {} - kind-of@6.0.3: {} - kleur@4.1.5: {} - leaflet.featuregroup.subgroup@1.0.2: {} - - leaflet.locatecontrol@0.90.0(leaflet@1.9.4): - dependencies: - leaflet: 1.9.4 - - leaflet.markercluster@1.5.3(leaflet@1.9.4): - dependencies: - leaflet: 1.9.4 - - leaflet@1.9.4: {} - lie@3.1.1: dependencies: immediate: 3.0.6 @@ -4068,34 +4004,27 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - maplibre-gl@4.7.1: + maplibre-gl@5.24.0: dependencies: - '@mapbox/geojson-rewind': 0.5.2 '@mapbox/jsonlint-lines-primitives': 2.0.2 - '@mapbox/point-geometry': 0.1.0 - '@mapbox/tiny-sdf': 2.0.6 + '@mapbox/point-geometry': 1.1.0 + '@mapbox/tiny-sdf': 2.2.0 '@mapbox/unitbezier': 0.0.1 - '@mapbox/vector-tile': 1.3.1 + '@mapbox/vector-tile': 2.0.4 '@mapbox/whoots-js': 3.1.0 - '@maplibre/maplibre-gl-style-spec': 20.4.0 + '@maplibre/geojson-vt': 6.1.0 + '@maplibre/maplibre-gl-style-spec': 24.8.5 + '@maplibre/mlt': 1.1.10 + '@maplibre/vt-pbf': 4.3.0 '@types/geojson': 7946.0.16 - '@types/geojson-vt': 3.2.5 - '@types/mapbox__point-geometry': 0.1.4 - '@types/mapbox__vector-tile': 1.3.4 - '@types/pbf': 3.0.5 - '@types/supercluster': 7.1.3 - earcut: 3.0.1 - geojson-vt: 4.0.2 - gl-matrix: 3.4.3 - global-prefix: 4.0.0 + earcut: 3.0.2 + gl-matrix: 3.4.4 kdbush: 4.0.2 murmurhash-js: 1.0.0 - pbf: 3.3.0 - potpack: 2.0.0 + pbf: 4.0.2 + potpack: 2.1.0 quickselect: 3.0.0 - supercluster: 8.0.1 tinyqueue: 3.0.0 - vt-pbf: 3.1.3 marked@18.0.4: {} @@ -4173,9 +4102,8 @@ snapshots: pathval@2.0.1: {} - pbf@3.3.0: + pbf@4.0.2: dependencies: - ieee754: 1.2.1 resolve-protobuf-schema: 2.1.0 periscopic@3.1.0: @@ -4198,13 +4126,15 @@ snapshots: pngjs@5.0.0: {} + point-in-polygon@1.1.0: {} + postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 - potpack@2.0.0: {} + potpack@2.1.0: {} protocol-buffers-schema@3.6.0: {} @@ -4222,6 +4152,10 @@ snapshots: quickselect@3.0.0: {} + rbush@3.0.1: + dependencies: + quickselect: 2.0.0 + readdirp@4.1.2: {} remove-accents@0.5.0: {} @@ -4243,6 +4177,8 @@ snapshots: rfdc@1.4.1: {} + robust-predicates@2.0.4: {} + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -4274,8 +4210,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 - rw@1.3.3: {} - sade@1.8.1: dependencies: mri: 1.2.0 @@ -4445,6 +4379,8 @@ snapshots: tinypool@1.1.1: {} + tinyqueue@2.0.3: {} + tinyqueue@3.0.0: {} tinyrainbow@2.0.0: {} @@ -4573,12 +4509,6 @@ snapshots: - tsx - yaml - vt-pbf@3.1.3: - dependencies: - '@mapbox/point-geometry': 0.1.0 - '@mapbox/vector-tile': 1.3.1 - pbf: 3.3.0 - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -4597,10 +4527,6 @@ snapshots: which-module@2.0.1: {} - which@4.0.0: - dependencies: - isexe: 3.1.1 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 diff --git a/src/app.css b/src/app.css index 63b18fd85..eb9e73331 100644 --- a/src/app.css +++ b/src/app.css @@ -170,153 +170,9 @@ filter: drop-shadow(0 0 6px #f7931a) drop-shadow(0 0 12px #f7931a); } } - - /* Fix for Leaflet controls not visible on mobile Firefox/Brave */ - /* Only apply to fullscreen map to avoid breaking embedded maps */ - .map-fullscreen .leaflet-bottom { - position: fixed !important; - bottom: 0 !important; - } -} - -/* Center icons in Leaflet control buttons */ -.leaflet-bar a { - display: flex; - align-items: center; - justify-content: center; -} - -/* Invert custom button icons in dark mode */ -.dark .leaflet-bar a img { - filter: invert(1); -} - -/* Dark mode for Leaflet controls - Tailwind gray palette */ -:root { - /* Marker label colors - Light mode (Tailwind palette references) */ - --marker-label-color: #0e7490; /* cyan-700 - better contrast on varied map backgrounds */ - --marker-label-shadow: #ffffff; /* white */ - --marker-label-boosted-color: #f97316; /* orange-500 - warmer, more prominent */ - --marker-label-boosted-shadow: #ffffff; /* white */ -} - -.dark { - --leaflet-bg: #1f2937; /* gray-800 */ - --leaflet-bg-transparent: rgba(31, 41, 55, 0.8); - --leaflet-border: #374151; /* gray-700 */ - --leaflet-border-muted: #6b7280; /* gray-500 */ - --leaflet-text: #f3f4f6; /* gray-100 */ - --leaflet-text-muted: #9ca3af; /* gray-400 */ - --leaflet-link: #60a5fa; /* blue-400 */ - --marker-label-color: #22d3ee; /* cyan-400 - bright for dark backgrounds */ - --marker-label-shadow: rgba(0, 0, 0, 0.95); /* near-black */ - --marker-label-boosted-color: #fb923c; /* orange-400 - bright warm tone */ - --marker-label-boosted-shadow: rgba(0, 0, 0, 0.95); /* near-black */ -} - -.dark .leaflet-bar, -.dark .leaflet-control-layers { - background-color: var(--leaflet-bg); - border-color: var(--leaflet-border); -} - -.dark .leaflet-bar a { - color: var(--leaflet-text); - background-color: var(--leaflet-bg); - border-bottom-color: var(--leaflet-border); -} - -.dark .leaflet-bar a:hover { - background-color: var(--leaflet-border); -} - -.dark .leaflet-control-layers-toggle { - background-color: var(--leaflet-bg); -} - -.dark .leaflet-control-layers-list { - background-color: var(--leaflet-bg); - color: var(--leaflet-text); -} - -.dark .leaflet-control-attribution { - background-color: var(--leaflet-bg-transparent); - color: var(--leaflet-text-muted); -} - -.dark .leaflet-control-attribution a { - color: var(--leaflet-link); -} - -.dark .leaflet-control-scale-line { - background-color: var(--leaflet-bg-transparent); - color: var(--leaflet-text); - border-color: var(--leaflet-border-muted); - text-shadow: none; } /* Dark mode for select dropdown options (Windows/Linux native rendering fix) */ .dark select option { background-color: rgb(55 65 81); /* gray-700 */ } - -/* Marker label styles for Leaflet permanent tooltips */ -.leaflet-tooltip.marker-label, -.leaflet-tooltip.marker-label-boosted { - background: none !important; - border: none !important; - outline: none !important; - box-shadow: none !important; - font-size: 14px; - padding: 2px 4px; - margin: 0; - border-radius: 0; - text-align: left; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - display: inline-block; - max-width: 160px; - min-width: unset; - width: auto; - height: auto; - font-weight: 500; - line-height: 1.2; -} - -.leaflet-tooltip.marker-label { - color: var(--marker-label-color); - text-shadow: - -1px -1px 0 var(--marker-label-shadow), - 1px -1px 0 var(--marker-label-shadow), - -1px 1px 0 var(--marker-label-shadow), - 1px 1px 0 var(--marker-label-shadow); -} - -.leaflet-tooltip.marker-label-boosted { - color: var(--marker-label-boosted-color); - font-weight: 600; - text-shadow: - -1px -1px 0 var(--marker-label-boosted-shadow), - 1px -1px 0 var(--marker-label-boosted-shadow), - -1px 1px 0 var(--marker-label-boosted-shadow), - 1px 1px 0 var(--marker-label-boosted-shadow); - filter: drop-shadow(0 1px 2px rgba(249, 115, 22, 0.35)); -} - -/* Z-index layering for marker labels and tooltips - * - Tooltips (350): Below markers to prevent interaction blocking - * - Markers: Use Leaflet's default z-index management for proper interaction states - * - Clusters: Default Leaflet z-index (higher, not modified) - */ -.leaflet-map-pane .leaflet-tooltip-pane { - z-index: 350 !important; -} - -/* Hide the tooltip arrow/pointer for permanent labels */ -.leaflet-tooltip.marker-label::before, -.leaflet-tooltip.marker-label .leaflet-tooltip-tip-container, -.leaflet-tooltip.marker-label-boosted::before, -.leaflet-tooltip.marker-label-boosted .leaflet-tooltip-tip-container { - display: none !important; -} diff --git a/src/routes/map/components/CommunityRail.svelte b/src/components/CommunityRail.svelte similarity index 56% rename from src/routes/map/components/CommunityRail.svelte rename to src/components/CommunityRail.svelte index 01fb72927..9663cd454 100644 --- a/src/routes/map/components/CommunityRail.svelte +++ b/src/components/CommunityRail.svelte @@ -1,34 +1,38 @@ {#if allCommunities.length > 0} - +