your personal website on atproto - mirror blento.app

switch map

+148 -254
+1 -1
README.md
··· 16 16 17 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 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)). 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 20 21 21 ## Making Custom cards 22 22
+1 -1
docs/CustomCards.md
··· 9 9 - in light/dark mode 10 10 - with and without colored cards 11 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) 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 1 # Selfhosting with cloudflare workers 2 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. 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 4 5 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 6 8 7 1. fork this repo 9 8 2. create a cloudflare worker application and connect it to your fork ··· 36 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 37 36 38 37 - github profile: GITHUB_TOKEN (token with public_repo access) 39 - - map: PUBLIC_MAPBOX_TOKEN 38 + - map: no token needed (uses OpenFreeMap)
+2 -1
package.json
··· 33 33 "prettier-plugin-tailwindcss": "^0.7.2", 34 34 "svelte": "^5.48.0", 35 35 "svelte-check": "^4.3.5", 36 + "svelte-maplibre-gl": "^1.0.3", 36 37 "tailwindcss": "^4.1.18", 37 38 "typescript": "^5.9.3", 38 39 "typescript-eslint": "^8.53.1", ··· 76 77 "hls.js": "^1.6.15", 77 78 "leaflet": "^1.9.4", 78 79 "link-preview-js": "^4.0.0", 79 - "mapbox-gl": "^3.18.1", 80 + "maplibre-gl": "^5.17.0", 80 81 "marked": "^17.0.1", 81 82 "perfect-freehand": "^1.2.2", 82 83 "plyr": "^3.8.4",
+112 -93
pnpm-lock.yaml
··· 119 119 link-preview-js: 120 120 specifier: ^4.0.0 121 121 version: 4.0.0 122 - mapbox-gl: 123 - specifier: ^3.18.1 124 - version: 3.18.1 122 + maplibre-gl: 123 + specifier: ^5.17.0 124 + version: 5.17.0 125 125 marked: 126 126 specifier: ^17.0.1 127 127 version: 17.0.1 ··· 210 210 svelte-check: 211 211 specifier: ^4.3.5 212 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) 213 216 tailwindcss: 214 217 specifier: ^4.1.18 215 218 version: 4.1.18 ··· 944 947 '@jridgewell/trace-mapping@0.3.9': 945 948 resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 946 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 + 947 954 '@mapbox/jsonlint-lines-primitives@2.0.2': 948 - resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} 955 + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==, tarball: https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz} 949 956 engines: {node: '>= 0.6'} 950 957 951 - '@mapbox/mapbox-gl-supported@3.0.0': 952 - resolution: {integrity: sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==} 953 - 954 958 '@mapbox/point-geometry@1.1.0': 955 - resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} 959 + resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==, tarball: https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz} 956 960 957 961 '@mapbox/tiny-sdf@2.0.7': 958 - resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==} 962 + resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==, tarball: https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz} 959 963 960 964 '@mapbox/unitbezier@0.0.1': 961 - resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} 965 + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==, tarball: https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz} 962 966 963 967 '@mapbox/vector-tile@2.0.4': 964 - resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==} 968 + resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==, tarball: https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz} 965 969 966 970 '@mapbox/whoots-js@3.1.0': 967 - resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} 971 + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==, tarball: https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz} 968 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} 969 986 970 987 '@mixmark-io/domino@2.2.0': 971 988 resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} ··· 1508 1525 '@types/estree@1.0.8': 1509 1526 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 1510 1527 1511 - '@types/geojson-vt@3.2.5': 1512 - resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} 1513 - 1514 1528 '@types/geojson@7946.0.16': 1515 - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} 1529 + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==, tarball: https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz} 1516 1530 1517 1531 '@types/json-schema@7.0.15': 1518 1532 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} ··· 1520 1534 '@types/linkify-it@5.0.0': 1521 1535 resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 1522 1536 1523 - '@types/mapbox__point-geometry@0.1.4': 1524 - resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} 1525 - 1526 1537 '@types/markdown-it@14.1.2': 1527 1538 resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 1528 1539 ··· 1531 1542 1532 1543 '@types/node@25.0.10': 1533 1544 resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} 1534 - 1535 - '@types/pbf@3.0.5': 1536 - resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} 1537 1545 1538 1546 '@types/stats.js@0.17.4': 1539 1547 resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} 1540 1548 1541 1549 '@types/supercluster@7.1.3': 1542 - resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} 1550 + resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==, tarball: https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz} 1543 1551 1544 1552 '@types/three@0.176.0': 1545 1553 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} ··· 1710 1718 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1711 1719 engines: {node: '>=10'} 1712 1720 1713 - cheap-ruler@4.0.0: 1714 - resolution: {integrity: sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw==} 1715 - 1716 1721 cheerio-select@2.1.0: 1717 1722 resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 1718 1723 ··· 1789 1794 css.escape@1.5.1: 1790 1795 resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 1791 1796 1792 - csscolorparser@1.0.3: 1793 - resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} 1794 - 1795 1797 cssesc@3.0.0: 1796 1798 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1797 1799 engines: {node: '>=4'} ··· 1850 1852 resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} 1851 1853 1852 1854 earcut@3.0.2: 1853 - resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} 1855 + resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==, tarball: https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz} 1854 1856 1855 1857 emoji-picker-element@1.28.1: 1856 1858 resolution: {integrity: sha512-8c64IPish2PWoV9oYCo2pvuPHwIv+uK9bO0dfpPyMupDAvaWL9ZvYhWNTAR+2sx7BhfRjciImqP6CIUgNX+DMg==} ··· 2008 2010 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2009 2011 os: [darwin] 2010 2012 2011 - geojson-vt@4.0.2: 2012 - resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} 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'} 2013 2016 2014 2017 gl-matrix@3.4.4: 2015 - resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} 2018 + resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==, tarball: https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz} 2016 2019 2017 2020 glob-parent@6.0.2: 2018 2021 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} ··· 2032 2035 2033 2036 graceful-fs@4.2.11: 2034 2037 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 2038 2039 2039 gsap@3.14.2: 2040 2040 resolution: {integrity: sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==} ··· 2116 2116 json-stable-stringify-without-jsonify@1.0.1: 2117 2117 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2118 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 + 2119 2122 kdbush@4.0.2: 2120 - resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} 2123 + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==, tarball: https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz} 2121 2124 2122 2125 keyv@4.5.4: 2123 2126 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} ··· 2252 2255 magic-string@0.30.21: 2253 2256 resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 2254 2257 2255 - mapbox-gl@3.18.1: 2256 - resolution: {integrity: sha512-Izc8dee2zkmb6Pn9hXFbVioPRLXJz1OFUcrvri69MhFACPU4bhLyVmhEsD9AyW1qOAP0Yvhzm60v63xdMIHPPw==} 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'} 2257 2261 2258 2262 markdown-it@14.1.0: 2259 2263 resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} ··· 2264 2268 engines: {node: '>= 20'} 2265 2269 hasBin: true 2266 2270 2267 - martinez-polygon-clipping@0.8.1: 2268 - resolution: {integrity: sha512-9PLLMzMPI6ihHox4Ns6LpVBLpRc7sbhULybZ/wyaY8sY3ECNe2+hxm1hA2/9bEEpRrdpjoeduBuZLg2aq1cSIQ==} 2269 - 2270 2271 mdurl@2.0.0: 2271 2272 resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 2272 2273 ··· 2288 2289 minimatch@9.0.5: 2289 2290 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 2290 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} 2291 2295 2292 2296 mitt@3.0.1: 2293 2297 resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} ··· 2315 2319 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 2316 2320 2317 2321 murmurhash-js@1.0.0: 2318 - resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} 2322 + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==, tarball: https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz} 2319 2323 2320 2324 nanoid@3.3.11: 2321 2325 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} ··· 2392 2396 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 2393 2397 2394 2398 pbf@4.0.1: 2395 - resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==} 2399 + resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==, tarball: https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz} 2396 2400 hasBin: true 2397 2401 2398 2402 perfect-freehand@1.2.2: ··· 2454 2458 engines: {node: ^10 || ^12 || >=14} 2455 2459 2456 2460 potpack@2.1.0: 2457 - resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==} 2461 + resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==, tarball: https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz} 2458 2462 2459 2463 prelude-ls@1.2.1: 2460 2464 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} ··· 2585 2589 resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} 2586 2590 2587 2591 protocol-buffers-schema@3.6.0: 2588 - resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} 2592 + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==, tarball: https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz} 2589 2593 2590 2594 punycode.js@2.3.1: 2591 2595 resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} ··· 2603 2607 resolution: {integrity: sha512-pItrW0Z9HnDBnFmgiNrY1uxRdri32Uh9EjNYLPVC2zZ3ZRIIEqBoDgm4DkvDwNNDHTK7FNkmr8zAa77BYc9xNw==} 2604 2608 2605 2609 quickselect@3.0.0: 2606 - resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} 2610 + resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==, tarball: https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz} 2607 2611 2608 2612 rangetouch@2.0.1: 2609 2613 resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==} ··· 2625 2629 engines: {node: '>=4'} 2626 2630 2627 2631 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 + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==, tarball: https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz} 2632 2633 2633 2634 rollup@4.56.0: 2634 2635 resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} ··· 2662 2663 '@sveltejs/kit': 2663 2664 optional: true 2664 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 + 2665 2669 sade@1.8.1: 2666 2670 resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2667 2671 engines: {node: '>=6'} ··· 2708 2712 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 2709 2713 engines: {node: '>=0.10.0'} 2710 2714 2711 - splaytree@0.1.4: 2712 - resolution: {integrity: sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==} 2713 - 2714 2715 std-env@3.10.0: 2715 2716 resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 2716 2717 ··· 2725 2726 resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} 2726 2727 2727 2728 supercluster@8.0.1: 2728 - resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} 2729 + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==, tarball: https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz} 2729 2730 2730 2731 supports-color@10.2.2: 2731 2732 resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} ··· 2752 2753 svelte: 2753 2754 optional: true 2754 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 + 2755 2762 svelte-sonner@0.3.28: 2756 2763 resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} 2757 2764 peerDependencies: ··· 2846 2853 engines: {node: '>=12.0.0'} 2847 2854 2848 2855 tinyqueue@3.0.0: 2849 - resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} 2856 + resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==, tarball: https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz} 2850 2857 2851 2858 tlds@1.261.0: 2852 2859 resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} ··· 3668 3675 '@jridgewell/resolve-uri': 3.1.2 3669 3676 '@jridgewell/sourcemap-codec': 1.5.5 3670 3677 3671 - '@mapbox/jsonlint-lines-primitives@2.0.2': {} 3678 + '@mapbox/geojson-rewind@0.5.2': 3679 + dependencies: 3680 + get-stream: 6.0.1 3681 + minimist: 1.2.8 3672 3682 3673 - '@mapbox/mapbox-gl-supported@3.0.0': {} 3683 + '@mapbox/jsonlint-lines-primitives@2.0.2': {} 3674 3684 3675 3685 '@mapbox/point-geometry@1.1.0': {} 3676 3686 ··· 3685 3695 pbf: 4.0.1 3686 3696 3687 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 3688 3724 3689 3725 '@mixmark-io/domino@2.2.0': {} 3690 3726 ··· 4170 4206 4171 4207 '@types/estree@1.0.8': {} 4172 4208 4173 - '@types/geojson-vt@3.2.5': 4174 - dependencies: 4175 - '@types/geojson': 7946.0.16 4176 - 4177 4209 '@types/geojson@7946.0.16': {} 4178 4210 4179 4211 '@types/json-schema@7.0.15': {} 4180 4212 4181 4213 '@types/linkify-it@5.0.0': {} 4182 - 4183 - '@types/mapbox__point-geometry@0.1.4': {} 4184 4214 4185 4215 '@types/markdown-it@14.1.2': 4186 4216 dependencies: ··· 4192 4222 '@types/node@25.0.10': 4193 4223 dependencies: 4194 4224 undici-types: 7.16.0 4195 - 4196 - '@types/pbf@3.0.5': {} 4197 4225 4198 4226 '@types/stats.js@0.17.4': {} 4199 4227 ··· 4407 4435 ansi-styles: 4.3.0 4408 4436 supports-color: 7.2.0 4409 4437 4410 - cheap-ruler@4.0.0: {} 4411 - 4412 4438 cheerio-select@2.1.0: 4413 4439 dependencies: 4414 4440 boolbase: 1.0.0 ··· 4498 4524 css-what@6.2.2: {} 4499 4525 4500 4526 css.escape@1.5.1: {} 4501 - 4502 - csscolorparser@1.0.3: {} 4503 4527 4504 4528 cssesc@3.0.0: {} 4505 4529 ··· 4762 4786 fsevents@2.3.3: 4763 4787 optional: true 4764 4788 4765 - geojson-vt@4.0.2: {} 4789 + get-stream@6.0.1: {} 4766 4790 4767 4791 gl-matrix@3.4.4: {} 4768 4792 ··· 4778 4802 4779 4803 graceful-fs@4.2.11: {} 4780 4804 4781 - grid-index@1.1.0: {} 4782 - 4783 4805 gsap@3.14.2: {} 4784 4806 4785 4807 has-flag@4.0.0: {} ··· 4846 4868 json-schema-traverse@0.4.1: {} 4847 4869 4848 4870 json-stable-stringify-without-jsonify@1.0.1: {} 4871 + 4872 + json-stringify-pretty-compact@4.0.0: {} 4849 4873 4850 4874 kdbush@4.0.2: {} 4851 4875 ··· 4953 4977 dependencies: 4954 4978 '@jridgewell/sourcemap-codec': 1.5.5 4955 4979 4956 - mapbox-gl@3.18.1: 4980 + maplibre-gl@5.17.0: 4957 4981 dependencies: 4982 + '@mapbox/geojson-rewind': 0.5.2 4958 4983 '@mapbox/jsonlint-lines-primitives': 2.0.2 4959 - '@mapbox/mapbox-gl-supported': 3.0.0 4960 4984 '@mapbox/point-geometry': 1.1.0 4961 4985 '@mapbox/tiny-sdf': 2.0.7 4962 4986 '@mapbox/unitbezier': 0.0.1 4963 4987 '@mapbox/vector-tile': 2.0.4 4964 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 4965 4993 '@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 4994 '@types/supercluster': 7.1.3 4970 - cheap-ruler: 4.0.0 4971 - csscolorparser: 1.0.3 4972 4995 earcut: 3.0.2 4973 - geojson-vt: 4.0.2 4974 4996 gl-matrix: 3.4.4 4975 - grid-index: 1.1.0 4976 4997 kdbush: 4.0.2 4977 - martinez-polygon-clipping: 0.8.1 4978 4998 murmurhash-js: 1.0.0 4979 4999 pbf: 4.0.1 4980 5000 potpack: 2.1.0 ··· 4993 5013 4994 5014 marked@17.0.1: {} 4995 5015 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 5016 mdurl@2.0.0: {} 5003 5017 5004 5018 meshoptimizer@0.18.1: {} ··· 5025 5039 minimatch@9.0.5: 5026 5040 dependencies: 5027 5041 brace-expansion: 2.0.2 5042 + 5043 + minimist@1.2.8: {} 5028 5044 5029 5045 mitt@3.0.1: {} 5030 5046 ··· 5331 5347 dependencies: 5332 5348 protocol-buffers-schema: 3.6.0 5333 5349 5334 - robust-predicates@2.0.4: {} 5335 - 5336 5350 rollup@4.56.0: 5337 5351 dependencies: 5338 5352 '@types/estree': 1.0.8 ··· 5389 5403 svelte: 5.48.0 5390 5404 optionalDependencies: 5391 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: {} 5392 5408 5393 5409 sade@1.8.1: 5394 5410 dependencies: ··· 5463 5479 totalist: 3.0.1 5464 5480 5465 5481 source-map-js@1.2.1: {} 5466 - 5467 - splaytree@0.1.4: {} 5468 5482 5469 5483 std-env@3.10.0: {} 5470 5484 ··· 5507 5521 postcss-scss: 4.0.9(postcss@8.5.6) 5508 5522 postcss-selector-parser: 7.1.1 5509 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 5510 5529 svelte: 5.48.0 5511 5530 5512 5531 svelte-sonner@0.3.28(svelte@5.48.0):
+29 -154
src/lib/cards/core/MapCard/Map.svelte
··· 1 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 2 import type { Item } from '$lib/types'; 7 - import { getHexOfCardColor } from '../../helper'; 3 + import { MapLibre, Projection, Marker } from 'svelte-maplibre-gl'; 8 4 9 5 let { item = $bindable() }: { item: Item } = $props(); 10 6 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 - }); 7 + let center = $state({ lng: parseFloat(item.cardData.lon), lat: parseFloat(item.cardData.lat) }); 8 + </script> 52 9 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; 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'} /> 68 27 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> 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 14 }, 15 15 16 16 creationModalComponent: CreateMapCardModal, 17 - allowSetColor: false, 17 + allowSetColor: true, 18 18 canHaveLabel: true, 19 19 settingsComponent: MapCardSettings, 20 20