your personal website on atproto - mirror blento.app

switch map

+148 -254
+1 -1
README.md
··· 16 17 Should blento.app shut down at some point, someone else can also spin up a new version that shows all blentos (note: it's MIT licensed so you _could_ do that now too and offer a competing service, but please don't (except for self-hosting your own profile ofc), legal != nice). 18 19 - One other note: for most independence I encourage everyone to get their own domain see [how to setup a custom domain](./docs/CustomDomain.md), selfhosting on the other hand while currently possible is not encourage *yet* before this project reaches a more stable state (if you do want to selfhost though, see [here](./docs/Selfhosting.md)). 20 21 ## Making Custom cards 22
··· 16 17 Should blento.app shut down at some point, someone else can also spin up a new version that shows all blentos (note: it's MIT licensed so you _could_ do that now too and offer a competing service, but please don't (except for self-hosting your own profile ofc), legal != nice). 18 19 + One other note: for most independence I encourage everyone to get their own domain see [how to setup a custom domain](./docs/CustomDomain.md), selfhosting on the other hand while currently possible is not encourage _yet_ before this project reaches a more stable state (if you do want to selfhost though, see [here](./docs/Selfhosting.md)). 20 21 ## Making Custom cards 22
+1 -1
docs/CustomCards.md
··· 9 - in light/dark mode 10 - with and without colored cards 11 - in edit mode and not in edit mode 12 - - on mobile and desktop (note that there's two different mobile "modes", one dependent on screen size and one enabled when pointer: coarse)
··· 9 - in light/dark mode 10 - with and without colored cards 11 - in edit mode and not in edit mode 12 + - on mobile and desktop (note that there's two different mobile "modes", one dependent on screen size and one enabled when pointer: coarse)
+2 -3
docs/Selfhosting.md
··· 1 # Selfhosting with cloudflare workers 2 3 - I currently advise everyone to *not* selfhost, as long as this project is still in the beginning stages with lots of changes every day, isntead I'd suggest setting up a custom domain (see [here](./CustomDomain.md)) and only later once this project is more stable to selfhost, thanks to the magic of atproto, you'll just have to change where your domain points to and setup the selfhosted version and your content will magically transfer over. 4 5 If you do still want to give selfhosting a try now, some features/cards may break on your selfhosted version, in that case sync with the upstream repo. 6 - 7 8 1. fork this repo 9 2. create a cloudflare worker application and connect it to your fork ··· 36 6. some cards need their own additional env keys, if you have these cards in your profile, create your keys and add them to your cloudflare worker 37 38 - github profile: GITHUB_TOKEN (token with public_repo access) 39 - - map: PUBLIC_MAPBOX_TOKEN
··· 1 # Selfhosting with cloudflare workers 2 3 + I currently advise everyone to _not_ selfhost, as long as this project is still in the beginning stages with lots of changes every day, isntead I'd suggest setting up a custom domain (see [here](./CustomDomain.md)) and only later once this project is more stable to selfhost, thanks to the magic of atproto, you'll just have to change where your domain points to and setup the selfhosted version and your content will magically transfer over. 4 5 If you do still want to give selfhosting a try now, some features/cards may break on your selfhosted version, in that case sync with the upstream repo. 6 7 1. fork this repo 8 2. create a cloudflare worker application and connect it to your fork ··· 35 6. some cards need their own additional env keys, if you have these cards in your profile, create your keys and add them to your cloudflare worker 36 37 - github profile: GITHUB_TOKEN (token with public_repo access) 38 + - map: no token needed (uses OpenFreeMap)
+2 -1
package.json
··· 33 "prettier-plugin-tailwindcss": "^0.7.2", 34 "svelte": "^5.48.0", 35 "svelte-check": "^4.3.5", 36 "tailwindcss": "^4.1.18", 37 "typescript": "^5.9.3", 38 "typescript-eslint": "^8.53.1", ··· 76 "hls.js": "^1.6.15", 77 "leaflet": "^1.9.4", 78 "link-preview-js": "^4.0.0", 79 - "mapbox-gl": "^3.18.1", 80 "marked": "^17.0.1", 81 "perfect-freehand": "^1.2.2", 82 "plyr": "^3.8.4",
··· 33 "prettier-plugin-tailwindcss": "^0.7.2", 34 "svelte": "^5.48.0", 35 "svelte-check": "^4.3.5", 36 + "svelte-maplibre-gl": "^1.0.3", 37 "tailwindcss": "^4.1.18", 38 "typescript": "^5.9.3", 39 "typescript-eslint": "^8.53.1", ··· 77 "hls.js": "^1.6.15", 78 "leaflet": "^1.9.4", 79 "link-preview-js": "^4.0.0", 80 + "maplibre-gl": "^5.17.0", 81 "marked": "^17.0.1", 82 "perfect-freehand": "^1.2.2", 83 "plyr": "^3.8.4",
+112 -93
pnpm-lock.yaml
··· 119 link-preview-js: 120 specifier: ^4.0.0 121 version: 4.0.0 122 - mapbox-gl: 123 - specifier: ^3.18.1 124 - version: 3.18.1 125 marked: 126 specifier: ^17.0.1 127 version: 17.0.1 ··· 210 svelte-check: 211 specifier: ^4.3.5 212 version: 4.3.5(picomatch@4.0.3)(svelte@5.48.0)(typescript@5.9.3) 213 tailwindcss: 214 specifier: ^4.1.18 215 version: 4.1.18 ··· 944 '@jridgewell/trace-mapping@0.3.9': 945 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 946 947 '@mapbox/jsonlint-lines-primitives@2.0.2': 948 - resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} 949 engines: {node: '>= 0.6'} 950 951 - '@mapbox/mapbox-gl-supported@3.0.0': 952 - resolution: {integrity: sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==} 953 - 954 '@mapbox/point-geometry@1.1.0': 955 - resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} 956 957 '@mapbox/tiny-sdf@2.0.7': 958 - resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==} 959 960 '@mapbox/unitbezier@0.0.1': 961 - resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} 962 963 '@mapbox/vector-tile@2.0.4': 964 - resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==} 965 966 '@mapbox/whoots-js@3.1.0': 967 - resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} 968 engines: {node: '>=6.0.0'} 969 970 '@mixmark-io/domino@2.2.0': 971 resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} ··· 1508 '@types/estree@1.0.8': 1509 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 1510 1511 - '@types/geojson-vt@3.2.5': 1512 - resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} 1513 - 1514 '@types/geojson@7946.0.16': 1515 - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} 1516 1517 '@types/json-schema@7.0.15': 1518 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} ··· 1520 '@types/linkify-it@5.0.0': 1521 resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 1522 1523 - '@types/mapbox__point-geometry@0.1.4': 1524 - resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} 1525 - 1526 '@types/markdown-it@14.1.2': 1527 resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 1528 ··· 1531 1532 '@types/node@25.0.10': 1533 resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} 1534 - 1535 - '@types/pbf@3.0.5': 1536 - resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} 1537 1538 '@types/stats.js@0.17.4': 1539 resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} 1540 1541 '@types/supercluster@7.1.3': 1542 - resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} 1543 1544 '@types/three@0.176.0': 1545 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} ··· 1710 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1711 engines: {node: '>=10'} 1712 1713 - cheap-ruler@4.0.0: 1714 - resolution: {integrity: sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw==} 1715 - 1716 cheerio-select@2.1.0: 1717 resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 1718 ··· 1789 css.escape@1.5.1: 1790 resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 1791 1792 - csscolorparser@1.0.3: 1793 - resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} 1794 - 1795 cssesc@3.0.0: 1796 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1797 engines: {node: '>=4'} ··· 1850 resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} 1851 1852 earcut@3.0.2: 1853 - resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} 1854 1855 emoji-picker-element@1.28.1: 1856 resolution: {integrity: sha512-8c64IPish2PWoV9oYCo2pvuPHwIv+uK9bO0dfpPyMupDAvaWL9ZvYhWNTAR+2sx7BhfRjciImqP6CIUgNX+DMg==} ··· 2008 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2009 os: [darwin] 2010 2011 - geojson-vt@4.0.2: 2012 - resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} 2013 2014 gl-matrix@3.4.4: 2015 - resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} 2016 2017 glob-parent@6.0.2: 2018 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} ··· 2032 2033 graceful-fs@4.2.11: 2034 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2035 - 2036 - grid-index@1.1.0: 2037 - resolution: {integrity: sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==} 2038 2039 gsap@3.14.2: 2040 resolution: {integrity: sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==} ··· 2116 json-stable-stringify-without-jsonify@1.0.1: 2117 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2118 2119 kdbush@4.0.2: 2120 - resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} 2121 2122 keyv@4.5.4: 2123 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} ··· 2252 magic-string@0.30.21: 2253 resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 2254 2255 - mapbox-gl@3.18.1: 2256 - resolution: {integrity: sha512-Izc8dee2zkmb6Pn9hXFbVioPRLXJz1OFUcrvri69MhFACPU4bhLyVmhEsD9AyW1qOAP0Yvhzm60v63xdMIHPPw==} 2257 2258 markdown-it@14.1.0: 2259 resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} ··· 2264 engines: {node: '>= 20'} 2265 hasBin: true 2266 2267 - martinez-polygon-clipping@0.8.1: 2268 - resolution: {integrity: sha512-9PLLMzMPI6ihHox4Ns6LpVBLpRc7sbhULybZ/wyaY8sY3ECNe2+hxm1hA2/9bEEpRrdpjoeduBuZLg2aq1cSIQ==} 2269 - 2270 mdurl@2.0.0: 2271 resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 2272 ··· 2288 minimatch@9.0.5: 2289 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 2290 engines: {node: '>=16 || 14 >=14.17'} 2291 2292 mitt@3.0.1: 2293 resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} ··· 2315 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 2316 2317 murmurhash-js@1.0.0: 2318 - resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} 2319 2320 nanoid@3.3.11: 2321 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} ··· 2392 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 2393 2394 pbf@4.0.1: 2395 - resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==} 2396 hasBin: true 2397 2398 perfect-freehand@1.2.2: ··· 2454 engines: {node: ^10 || ^12 || >=14} 2455 2456 potpack@2.1.0: 2457 - resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==} 2458 2459 prelude-ls@1.2.1: 2460 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} ··· 2585 resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} 2586 2587 protocol-buffers-schema@3.6.0: 2588 - resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} 2589 2590 punycode.js@2.3.1: 2591 resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} ··· 2603 resolution: {integrity: sha512-pItrW0Z9HnDBnFmgiNrY1uxRdri32Uh9EjNYLPVC2zZ3ZRIIEqBoDgm4DkvDwNNDHTK7FNkmr8zAa77BYc9xNw==} 2604 2605 quickselect@3.0.0: 2606 - resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} 2607 2608 rangetouch@2.0.1: 2609 resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==} ··· 2625 engines: {node: '>=4'} 2626 2627 resolve-protobuf-schema@2.1.0: 2628 - resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} 2629 - 2630 - robust-predicates@2.0.4: 2631 - resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==} 2632 2633 rollup@4.56.0: 2634 resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} ··· 2662 '@sveltejs/kit': 2663 optional: true 2664 2665 sade@1.8.1: 2666 resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2667 engines: {node: '>=6'} ··· 2708 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 2709 engines: {node: '>=0.10.0'} 2710 2711 - splaytree@0.1.4: 2712 - resolution: {integrity: sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==} 2713 - 2714 std-env@3.10.0: 2715 resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 2716 ··· 2725 resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} 2726 2727 supercluster@8.0.1: 2728 - resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} 2729 2730 supports-color@10.2.2: 2731 resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} ··· 2752 svelte: 2753 optional: true 2754 2755 svelte-sonner@0.3.28: 2756 resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} 2757 peerDependencies: ··· 2846 engines: {node: '>=12.0.0'} 2847 2848 tinyqueue@3.0.0: 2849 - resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} 2850 2851 tlds@1.261.0: 2852 resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} ··· 3668 '@jridgewell/resolve-uri': 3.1.2 3669 '@jridgewell/sourcemap-codec': 1.5.5 3670 3671 - '@mapbox/jsonlint-lines-primitives@2.0.2': {} 3672 3673 - '@mapbox/mapbox-gl-supported@3.0.0': {} 3674 3675 '@mapbox/point-geometry@1.1.0': {} 3676 ··· 3685 pbf: 4.0.1 3686 3687 '@mapbox/whoots-js@3.1.0': {} 3688 3689 '@mixmark-io/domino@2.2.0': {} 3690 ··· 4170 4171 '@types/estree@1.0.8': {} 4172 4173 - '@types/geojson-vt@3.2.5': 4174 - dependencies: 4175 - '@types/geojson': 7946.0.16 4176 - 4177 '@types/geojson@7946.0.16': {} 4178 4179 '@types/json-schema@7.0.15': {} 4180 4181 '@types/linkify-it@5.0.0': {} 4182 - 4183 - '@types/mapbox__point-geometry@0.1.4': {} 4184 4185 '@types/markdown-it@14.1.2': 4186 dependencies: ··· 4192 '@types/node@25.0.10': 4193 dependencies: 4194 undici-types: 7.16.0 4195 - 4196 - '@types/pbf@3.0.5': {} 4197 4198 '@types/stats.js@0.17.4': {} 4199 ··· 4407 ansi-styles: 4.3.0 4408 supports-color: 7.2.0 4409 4410 - cheap-ruler@4.0.0: {} 4411 - 4412 cheerio-select@2.1.0: 4413 dependencies: 4414 boolbase: 1.0.0 ··· 4498 css-what@6.2.2: {} 4499 4500 css.escape@1.5.1: {} 4501 - 4502 - csscolorparser@1.0.3: {} 4503 4504 cssesc@3.0.0: {} 4505 ··· 4762 fsevents@2.3.3: 4763 optional: true 4764 4765 - geojson-vt@4.0.2: {} 4766 4767 gl-matrix@3.4.4: {} 4768 ··· 4778 4779 graceful-fs@4.2.11: {} 4780 4781 - grid-index@1.1.0: {} 4782 - 4783 gsap@3.14.2: {} 4784 4785 has-flag@4.0.0: {} ··· 4846 json-schema-traverse@0.4.1: {} 4847 4848 json-stable-stringify-without-jsonify@1.0.1: {} 4849 4850 kdbush@4.0.2: {} 4851 ··· 4953 dependencies: 4954 '@jridgewell/sourcemap-codec': 1.5.5 4955 4956 - mapbox-gl@3.18.1: 4957 dependencies: 4958 '@mapbox/jsonlint-lines-primitives': 2.0.2 4959 - '@mapbox/mapbox-gl-supported': 3.0.0 4960 '@mapbox/point-geometry': 1.1.0 4961 '@mapbox/tiny-sdf': 2.0.7 4962 '@mapbox/unitbezier': 0.0.1 4963 '@mapbox/vector-tile': 2.0.4 4964 '@mapbox/whoots-js': 3.1.0 4965 '@types/geojson': 7946.0.16 4966 - '@types/geojson-vt': 3.2.5 4967 - '@types/mapbox__point-geometry': 0.1.4 4968 - '@types/pbf': 3.0.5 4969 '@types/supercluster': 7.1.3 4970 - cheap-ruler: 4.0.0 4971 - csscolorparser: 1.0.3 4972 earcut: 3.0.2 4973 - geojson-vt: 4.0.2 4974 gl-matrix: 3.4.4 4975 - grid-index: 1.1.0 4976 kdbush: 4.0.2 4977 - martinez-polygon-clipping: 0.8.1 4978 murmurhash-js: 1.0.0 4979 pbf: 4.0.1 4980 potpack: 2.1.0 ··· 4993 4994 marked@17.0.1: {} 4995 4996 - martinez-polygon-clipping@0.8.1: 4997 - dependencies: 4998 - robust-predicates: 2.0.4 4999 - splaytree: 0.1.4 5000 - tinyqueue: 3.0.0 5001 - 5002 mdurl@2.0.0: {} 5003 5004 meshoptimizer@0.18.1: {} ··· 5025 minimatch@9.0.5: 5026 dependencies: 5027 brace-expansion: 2.0.2 5028 5029 mitt@3.0.1: {} 5030 ··· 5331 dependencies: 5332 protocol-buffers-schema: 3.6.0 5333 5334 - robust-predicates@2.0.4: {} 5335 - 5336 rollup@4.56.0: 5337 dependencies: 5338 '@types/estree': 1.0.8 ··· 5389 svelte: 5.48.0 5390 optionalDependencies: 5391 '@sveltejs/kit': 2.50.1(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) 5392 5393 sade@1.8.1: 5394 dependencies: ··· 5463 totalist: 3.0.1 5464 5465 source-map-js@1.2.1: {} 5466 - 5467 - splaytree@0.1.4: {} 5468 5469 std-env@3.10.0: {} 5470 ··· 5507 postcss-scss: 4.0.9(postcss@8.5.6) 5508 postcss-selector-parser: 7.1.1 5509 optionalDependencies: 5510 svelte: 5.48.0 5511 5512 svelte-sonner@0.3.28(svelte@5.48.0):
··· 119 link-preview-js: 120 specifier: ^4.0.0 121 version: 4.0.0 122 + maplibre-gl: 123 + specifier: ^5.17.0 124 + version: 5.17.0 125 marked: 126 specifier: ^17.0.1 127 version: 17.0.1 ··· 210 svelte-check: 211 specifier: ^4.3.5 212 version: 4.3.5(picomatch@4.0.3)(svelte@5.48.0)(typescript@5.9.3) 213 + svelte-maplibre-gl: 214 + specifier: ^1.0.3 215 + version: 1.0.3(maplibre-gl@5.17.0)(svelte@5.48.0) 216 tailwindcss: 217 specifier: ^4.1.18 218 version: 4.1.18 ··· 947 '@jridgewell/trace-mapping@0.3.9': 948 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 949 950 + '@mapbox/geojson-rewind@0.5.2': 951 + resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==, tarball: https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz} 952 + hasBin: true 953 + 954 '@mapbox/jsonlint-lines-primitives@2.0.2': 955 + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==, tarball: https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz} 956 engines: {node: '>= 0.6'} 957 958 '@mapbox/point-geometry@1.1.0': 959 + resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==, tarball: https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz} 960 961 '@mapbox/tiny-sdf@2.0.7': 962 + resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==, tarball: https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz} 963 964 '@mapbox/unitbezier@0.0.1': 965 + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==, tarball: https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz} 966 967 '@mapbox/vector-tile@2.0.4': 968 + resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==, tarball: https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz} 969 970 '@mapbox/whoots-js@3.1.0': 971 + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==, tarball: https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz} 972 engines: {node: '>=6.0.0'} 973 + 974 + '@maplibre/geojson-vt@5.0.4': 975 + resolution: {integrity: sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==, tarball: https://registry.npmjs.org/@maplibre/geojson-vt/-/geojson-vt-5.0.4.tgz} 976 + 977 + '@maplibre/maplibre-gl-style-spec@24.4.1': 978 + resolution: {integrity: sha512-UKhA4qv1h30XT768ccSv5NjNCX+dgfoq2qlLVmKejspPcSQTYD4SrVucgqegmYcKcmwf06wcNAa/kRd0NHWbUg==, tarball: https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-24.4.1.tgz} 979 + hasBin: true 980 + 981 + '@maplibre/mlt@1.1.5': 982 + resolution: {integrity: sha512-HjoAIOYAfZo2El/tHBnvWpCRlodWgWLZ/tyO4Wrw0LVY2bkQz1+pwAwDvmgSRvfkSkSzWnqJJd1JwgCrq/60HQ==, tarball: https://registry.npmjs.org/@maplibre/mlt/-/mlt-1.1.5.tgz} 983 + 984 + '@maplibre/vt-pbf@4.2.1': 985 + resolution: {integrity: sha512-IxZBGq/+9cqf2qdWlFuQ+ZfoMhWpxDUGQZ/poPHOJBvwMUT1GuxLo6HgYTou+xxtsOsjfbcjI8PZaPCtmt97rA==, tarball: https://registry.npmjs.org/@maplibre/vt-pbf/-/vt-pbf-4.2.1.tgz} 986 987 '@mixmark-io/domino@2.2.0': 988 resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} ··· 1525 '@types/estree@1.0.8': 1526 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 1527 1528 '@types/geojson@7946.0.16': 1529 + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, tarball: https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz} 1530 1531 '@types/json-schema@7.0.15': 1532 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} ··· 1534 '@types/linkify-it@5.0.0': 1535 resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 1536 1537 '@types/markdown-it@14.1.2': 1538 resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 1539 ··· 1542 1543 '@types/node@25.0.10': 1544 resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} 1545 1546 '@types/stats.js@0.17.4': 1547 resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} 1548 1549 '@types/supercluster@7.1.3': 1550 + resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==, tarball: https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz} 1551 1552 '@types/three@0.176.0': 1553 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} ··· 1718 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1719 engines: {node: '>=10'} 1720 1721 cheerio-select@2.1.0: 1722 resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 1723 ··· 1794 css.escape@1.5.1: 1795 resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 1796 1797 cssesc@3.0.0: 1798 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1799 engines: {node: '>=4'} ··· 1852 resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} 1853 1854 earcut@3.0.2: 1855 + resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==, tarball: https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz} 1856 1857 emoji-picker-element@1.28.1: 1858 resolution: {integrity: sha512-8c64IPish2PWoV9oYCo2pvuPHwIv+uK9bO0dfpPyMupDAvaWL9ZvYhWNTAR+2sx7BhfRjciImqP6CIUgNX+DMg==} ··· 2010 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2011 os: [darwin] 2012 2013 + get-stream@6.0.1: 2014 + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, tarball: https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz} 2015 + engines: {node: '>=10'} 2016 2017 gl-matrix@3.4.4: 2018 + resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==, tarball: https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz} 2019 2020 glob-parent@6.0.2: 2021 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} ··· 2035 2036 graceful-fs@4.2.11: 2037 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2038 2039 gsap@3.14.2: 2040 resolution: {integrity: sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==} ··· 2116 json-stable-stringify-without-jsonify@1.0.1: 2117 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2118 2119 + json-stringify-pretty-compact@4.0.0: 2120 + resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==, tarball: https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz} 2121 + 2122 kdbush@4.0.2: 2123 + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==, tarball: https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz} 2124 2125 keyv@4.5.4: 2126 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} ··· 2255 magic-string@0.30.21: 2256 resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 2257 2258 + maplibre-gl@5.17.0: 2259 + resolution: {integrity: sha512-gwS6NpXBfWD406dtT5YfEpl2hmpMm+wcPqf04UAez/TxY1OBjiMdK2ZoMGcNIlGHelKc4+Uet6zhDdDEnlJVHA==, tarball: https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.17.0.tgz} 2260 + engines: {node: '>=16.14.0', npm: '>=8.1.0'} 2261 2262 markdown-it@14.1.0: 2263 resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} ··· 2268 engines: {node: '>= 20'} 2269 hasBin: true 2270 2271 mdurl@2.0.0: 2272 resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 2273 ··· 2289 minimatch@9.0.5: 2290 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 2291 engines: {node: '>=16 || 14 >=14.17'} 2292 + 2293 + minimist@1.2.8: 2294 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz} 2295 2296 mitt@3.0.1: 2297 resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} ··· 2319 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 2320 2321 murmurhash-js@1.0.0: 2322 + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==, tarball: https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz} 2323 2324 nanoid@3.3.11: 2325 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} ··· 2396 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 2397 2398 pbf@4.0.1: 2399 + resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==, tarball: https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz} 2400 hasBin: true 2401 2402 perfect-freehand@1.2.2: ··· 2458 engines: {node: ^10 || ^12 || >=14} 2459 2460 potpack@2.1.0: 2461 + resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==, tarball: https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz} 2462 2463 prelude-ls@1.2.1: 2464 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} ··· 2589 resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} 2590 2591 protocol-buffers-schema@3.6.0: 2592 + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==, tarball: https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz} 2593 2594 punycode.js@2.3.1: 2595 resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} ··· 2607 resolution: {integrity: sha512-pItrW0Z9HnDBnFmgiNrY1uxRdri32Uh9EjNYLPVC2zZ3ZRIIEqBoDgm4DkvDwNNDHTK7FNkmr8zAa77BYc9xNw==} 2608 2609 quickselect@3.0.0: 2610 + resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==, tarball: https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz} 2611 2612 rangetouch@2.0.1: 2613 resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==} ··· 2629 engines: {node: '>=4'} 2630 2631 resolve-protobuf-schema@2.1.0: 2632 + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==, tarball: https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz} 2633 2634 rollup@4.56.0: 2635 resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} ··· 2663 '@sveltejs/kit': 2664 optional: true 2665 2666 + rw@1.3.3: 2667 + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, tarball: https://registry.npmjs.org/rw/-/rw-1.3.3.tgz} 2668 + 2669 sade@1.8.1: 2670 resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2671 engines: {node: '>=6'} ··· 2712 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 2713 engines: {node: '>=0.10.0'} 2714 2715 std-env@3.10.0: 2716 resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 2717 ··· 2726 resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} 2727 2728 supercluster@8.0.1: 2729 + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==, tarball: https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz} 2730 2731 supports-color@10.2.2: 2732 resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} ··· 2753 svelte: 2754 optional: true 2755 2756 + svelte-maplibre-gl@1.0.3: 2757 + resolution: {integrity: sha512-pGZMLN5EcJoe6lREyaY2lsbkvrnKjIGHJRM2ijN+TUDeJbV9oecjBxbDXQZd8b5X4JJztSG915L731dFdhhSwA==, tarball: https://registry.npmjs.org/svelte-maplibre-gl/-/svelte-maplibre-gl-1.0.3.tgz} 2758 + peerDependencies: 2759 + maplibre-gl: ^5.0.0 || ^4.0.0 2760 + svelte: '>=5.0.0' 2761 + 2762 svelte-sonner@0.3.28: 2763 resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} 2764 peerDependencies: ··· 2853 engines: {node: '>=12.0.0'} 2854 2855 tinyqueue@3.0.0: 2856 + resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==, tarball: https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz} 2857 2858 tlds@1.261.0: 2859 resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} ··· 3675 '@jridgewell/resolve-uri': 3.1.2 3676 '@jridgewell/sourcemap-codec': 1.5.5 3677 3678 + '@mapbox/geojson-rewind@0.5.2': 3679 + dependencies: 3680 + get-stream: 6.0.1 3681 + minimist: 1.2.8 3682 3683 + '@mapbox/jsonlint-lines-primitives@2.0.2': {} 3684 3685 '@mapbox/point-geometry@1.1.0': {} 3686 ··· 3695 pbf: 4.0.1 3696 3697 '@mapbox/whoots-js@3.1.0': {} 3698 + 3699 + '@maplibre/geojson-vt@5.0.4': {} 3700 + 3701 + '@maplibre/maplibre-gl-style-spec@24.4.1': 3702 + dependencies: 3703 + '@mapbox/jsonlint-lines-primitives': 2.0.2 3704 + '@mapbox/unitbezier': 0.0.1 3705 + json-stringify-pretty-compact: 4.0.0 3706 + minimist: 1.2.8 3707 + quickselect: 3.0.0 3708 + rw: 1.3.3 3709 + tinyqueue: 3.0.0 3710 + 3711 + '@maplibre/mlt@1.1.5': 3712 + dependencies: 3713 + '@mapbox/point-geometry': 1.1.0 3714 + 3715 + '@maplibre/vt-pbf@4.2.1': 3716 + dependencies: 3717 + '@mapbox/point-geometry': 1.1.0 3718 + '@mapbox/vector-tile': 2.0.4 3719 + '@maplibre/geojson-vt': 5.0.4 3720 + '@types/geojson': 7946.0.16 3721 + '@types/supercluster': 7.1.3 3722 + pbf: 4.0.1 3723 + supercluster: 8.0.1 3724 3725 '@mixmark-io/domino@2.2.0': {} 3726 ··· 4206 4207 '@types/estree@1.0.8': {} 4208 4209 '@types/geojson@7946.0.16': {} 4210 4211 '@types/json-schema@7.0.15': {} 4212 4213 '@types/linkify-it@5.0.0': {} 4214 4215 '@types/markdown-it@14.1.2': 4216 dependencies: ··· 4222 '@types/node@25.0.10': 4223 dependencies: 4224 undici-types: 7.16.0 4225 4226 '@types/stats.js@0.17.4': {} 4227 ··· 4435 ansi-styles: 4.3.0 4436 supports-color: 7.2.0 4437 4438 cheerio-select@2.1.0: 4439 dependencies: 4440 boolbase: 1.0.0 ··· 4524 css-what@6.2.2: {} 4525 4526 css.escape@1.5.1: {} 4527 4528 cssesc@3.0.0: {} 4529 ··· 4786 fsevents@2.3.3: 4787 optional: true 4788 4789 + get-stream@6.0.1: {} 4790 4791 gl-matrix@3.4.4: {} 4792 ··· 4802 4803 graceful-fs@4.2.11: {} 4804 4805 gsap@3.14.2: {} 4806 4807 has-flag@4.0.0: {} ··· 4868 json-schema-traverse@0.4.1: {} 4869 4870 json-stable-stringify-without-jsonify@1.0.1: {} 4871 + 4872 + json-stringify-pretty-compact@4.0.0: {} 4873 4874 kdbush@4.0.2: {} 4875 ··· 4977 dependencies: 4978 '@jridgewell/sourcemap-codec': 1.5.5 4979 4980 + maplibre-gl@5.17.0: 4981 dependencies: 4982 + '@mapbox/geojson-rewind': 0.5.2 4983 '@mapbox/jsonlint-lines-primitives': 2.0.2 4984 '@mapbox/point-geometry': 1.1.0 4985 '@mapbox/tiny-sdf': 2.0.7 4986 '@mapbox/unitbezier': 0.0.1 4987 '@mapbox/vector-tile': 2.0.4 4988 '@mapbox/whoots-js': 3.1.0 4989 + '@maplibre/geojson-vt': 5.0.4 4990 + '@maplibre/maplibre-gl-style-spec': 24.4.1 4991 + '@maplibre/mlt': 1.1.5 4992 + '@maplibre/vt-pbf': 4.2.1 4993 '@types/geojson': 7946.0.16 4994 '@types/supercluster': 7.1.3 4995 earcut: 3.0.2 4996 gl-matrix: 3.4.4 4997 kdbush: 4.0.2 4998 murmurhash-js: 1.0.0 4999 pbf: 4.0.1 5000 potpack: 2.1.0 ··· 5013 5014 marked@17.0.1: {} 5015 5016 mdurl@2.0.0: {} 5017 5018 meshoptimizer@0.18.1: {} ··· 5039 minimatch@9.0.5: 5040 dependencies: 5041 brace-expansion: 2.0.2 5042 + 5043 + minimist@1.2.8: {} 5044 5045 mitt@3.0.1: {} 5046 ··· 5347 dependencies: 5348 protocol-buffers-schema: 3.6.0 5349 5350 rollup@4.56.0: 5351 dependencies: 5352 '@types/estree': 1.0.8 ··· 5403 svelte: 5.48.0 5404 optionalDependencies: 5405 '@sveltejs/kit': 2.50.1(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) 5406 + 5407 + rw@1.3.3: {} 5408 5409 sade@1.8.1: 5410 dependencies: ··· 5479 totalist: 3.0.1 5480 5481 source-map-js@1.2.1: {} 5482 5483 std-env@3.10.0: {} 5484 ··· 5521 postcss-scss: 4.0.9(postcss@8.5.6) 5522 postcss-selector-parser: 7.1.1 5523 optionalDependencies: 5524 + svelte: 5.48.0 5525 + 5526 + svelte-maplibre-gl@1.0.3(maplibre-gl@5.17.0)(svelte@5.48.0): 5527 + dependencies: 5528 + maplibre-gl: 5.17.0 5529 svelte: 5.48.0 5530 5531 svelte-sonner@0.3.28(svelte@5.48.0):
+29 -154
src/lib/cards/core/MapCard/Map.svelte
··· 1 <script lang="ts"> 2 - import { onMount } from 'svelte'; 3 - import 'mapbox-gl/dist/mapbox-gl.css'; 4 - import mapboxgl from 'mapbox-gl'; 5 - import { env } from '$env/dynamic/public'; 6 import type { Item } from '$lib/types'; 7 - import { getHexOfCardColor } from '../../helper'; 8 9 let { item = $bindable() }: { item: Item } = $props(); 10 11 - // $inspect(item); 12 - 13 - let mapContainer: HTMLElement | undefined = $state(); 14 - let map: mapboxgl.Map | undefined = $state(); 15 - 16 - onMount(() => { 17 - if (!mapContainer || !env.PUBLIC_MAPBOX_TOKEN) { 18 - console.error('no map container or no mapbox token'); 19 - return; 20 - } 21 - 22 - try { 23 - mapboxgl.accessToken = env.PUBLIC_MAPBOX_TOKEN; 24 - 25 - const lat = parseFloat(item.cardData.lat); 26 - const lon = parseFloat(item.cardData.lon); 27 - const zoom = item.cardData.zoom ? parseFloat(item.cardData.zoom) : 0; 28 - const lightPreset = item.cardData.lightPreset || 'day'; 29 - 30 - map = new mapboxgl.Map({ 31 - container: mapContainer, 32 - style: 'mapbox://styles/mapbox/standard', 33 - center: [lon, lat], 34 - config: { 35 - basemap: { 36 - lightPreset: lightPreset, 37 - showPointOfInterestLabels: false 38 - } 39 - }, 40 - zoom: zoom, 41 - attributionControl: false, 42 - dragPan: false, 43 - dragRotate: false, 44 - keyboard: false, 45 - doubleClickZoom: true, 46 - touchZoomRotate: true, 47 - scrollZoom: true, 48 - boxZoom: false, 49 - pitchWithRotate: false, 50 - touchPitch: false 51 - }); 52 53 - // Keep location centered during zoom and save zoom level 54 - map.on('zoom', () => { 55 - if (map) { 56 - map.setCenter([lon, lat]); 57 - } 58 - }); 59 - 60 - map.on('zoomend', () => { 61 - if (map) { 62 - item.cardData.zoom = map.getZoom().toString(); 63 - } 64 - }); 65 - 66 - map.on('load', () => { 67 - if (!map) return; 68 69 - map.resize(); 70 - map.setCenter([lon, lat]); 71 - 72 - const accentColor = getHexOfCardColor(item); 73 - 74 - // Add location point source 75 - map.addSource('location-point', { 76 - type: 'geojson', 77 - data: { 78 - type: 'Feature', 79 - geometry: { 80 - type: 'Point', 81 - coordinates: [lon, lat] 82 - }, 83 - properties: { 84 - name: item.cardData.name || '' 85 - } 86 - } 87 - }); 88 - 89 - // Outer glow 90 - map.addLayer({ 91 - id: 'location-glow-outer', 92 - type: 'circle', 93 - source: 'location-point', 94 - paint: { 95 - 'circle-radius': 20, 96 - 'circle-color': accentColor, 97 - 'circle-opacity': 0.15, 98 - 'circle-blur': 1 99 - } 100 - }); 101 - 102 - // Middle glow 103 - map.addLayer({ 104 - id: 'location-glow-middle', 105 - type: 'circle', 106 - source: 'location-point', 107 - paint: { 108 - 'circle-radius': 12, 109 - 'circle-color': accentColor, 110 - 'circle-opacity': 0.3, 111 - 'circle-blur': 0.5 112 - } 113 - }); 114 - 115 - // White border 116 - map.addLayer({ 117 - id: 'location-dot-border', 118 - type: 'circle', 119 - source: 'location-point', 120 - paint: { 121 - 'circle-radius': 8, 122 - 'circle-color': '#ffffff', 123 - 'circle-opacity': 1 124 - } 125 - }); 126 - 127 - // Accent color center dot 128 - map.addLayer({ 129 - id: 'location-dot', 130 - type: 'circle', 131 - source: 'location-point', 132 - paint: { 133 - 'circle-radius': 6, 134 - 'circle-color': accentColor, 135 - 'circle-opacity': 1 136 - } 137 - }); 138 - }); 139 - 140 - // Handle container resize 141 - const resizeObserver = new ResizeObserver(() => { 142 - if (map) { 143 - map.resize(); 144 - map.setCenter([lon, lat]); 145 - } 146 - }); 147 - if (mapContainer) resizeObserver.observe(mapContainer); 148 - 149 - return () => { 150 - resizeObserver.disconnect(); 151 - if (map) { 152 - map.remove(); 153 - } 154 - }; 155 - } catch (err) { 156 - console.error(`Something went wrong trying to initialize the map`, err); 157 - } 158 - }); 159 - </script> 160 - 161 - <div bind:this={mapContainer} class="absolute inset-0 isolate h-full w-full"></div>
··· 1 <script lang="ts"> 2 import type { Item } from '$lib/types'; 3 + import { MapLibre, Projection, Marker } from 'svelte-maplibre-gl'; 4 5 let { item = $bindable() }: { item: Item } = $props(); 6 7 + let center = $state({ lng: parseFloat(item.cardData.lon), lat: parseFloat(item.cardData.lat) }); 8 + </script> 9 10 + <div class="absolute inset-0 isolate h-full w-full"> 11 + <MapLibre 12 + class="h-full w-full" 13 + style="https://tiles.openfreemap.org/styles/liberty" 14 + zoom={item.cardData.zoom} 15 + {center} 16 + attributionControl={{ compact: true }} 17 + dragPan={false} 18 + dragRotate={false} 19 + keyboard={false} 20 + touchZoomRotate={true} 21 + scrollZoom={true} 22 + boxZoom={false} 23 + pitchWithRotate={false} 24 + touchPitch={false} 25 + > 26 + <Projection type={'globe'} /> 27 28 + <Marker bind:lnglat={center}> 29 + {#snippet content()} 30 + <div class="from-accent-400 size-10 rounded-full bg-radial via-transparent p-3"> 31 + <div class="bg-accent-500 size-4 rounded-full ring-2 ring-white"></div> 32 + </div> 33 + {/snippet} 34 + </Marker> 35 + </MapLibre> 36 + </div>
+1 -1
src/lib/cards/core/MapCard/index.ts
··· 14 }, 15 16 creationModalComponent: CreateMapCardModal, 17 - allowSetColor: false, 18 canHaveLabel: true, 19 settingsComponent: MapCardSettings, 20
··· 14 }, 15 16 creationModalComponent: CreateMapCardModal, 17 + allowSetColor: true, 18 canHaveLabel: true, 19 settingsComponent: MapCardSettings, 20