├── .gitignore ├── CHANGELOG.md ├── README.md ├── composer.json └── src ├── Resources ├── app │ ├── administration │ │ ├── package-lock.json │ │ ├── package.json │ │ └── src │ │ │ ├── extension │ │ │ └── sw-cms │ │ │ │ └── component │ │ │ │ └── sw-cms-sidebar │ │ │ │ ├── index.js │ │ │ │ └── sw-cms-sidebar.html.twig │ │ │ ├── main.js │ │ │ └── module │ │ │ └── sw-cms │ │ │ ├── blocks │ │ │ └── sas │ │ │ │ └── sas-maps │ │ │ │ ├── component │ │ │ │ ├── index.js │ │ │ │ └── sas-cms-block-maps.html.twig │ │ │ │ ├── index.js │ │ │ │ └── preview │ │ │ │ ├── index.js │ │ │ │ ├── sas-cms-preview-maps.html.twig │ │ │ │ └── sas-cms-preview-maps.scss │ │ │ ├── elements │ │ │ └── maps │ │ │ │ ├── component │ │ │ │ ├── index.js │ │ │ │ ├── sw-cms-el-maps.html.twig │ │ │ │ └── sw-cms-el-maps.scss │ │ │ │ ├── config │ │ │ │ ├── index.js │ │ │ │ └── sw-cms-el-config-maps.html.twig │ │ │ │ ├── index.js │ │ │ │ └── preview │ │ │ │ ├── index.js │ │ │ │ ├── map.svg │ │ │ │ ├── sw-cms-el-preview-maps.html.twig │ │ │ │ └── sw-cms-el-preview-maps.scss │ │ │ └── snippet │ │ │ ├── de-DE.json │ │ │ └── en-GB.json │ └── storefront │ │ ├── build │ │ └── webpack.config.js │ │ ├── dist │ │ └── storefront │ │ │ └── js │ │ │ └── sas-maps.js │ │ ├── package-lock.json │ │ ├── package.json │ │ └── src │ │ ├── main.js │ │ ├── sas-maps │ │ └── sas-maps.plugin.js │ │ └── scss │ │ └── maps.scss ├── config │ ├── config.xml │ ├── plugin.png │ └── services.xml ├── public │ └── administration │ │ ├── css │ │ └── sas-maps.css │ │ ├── img │ │ └── mapbox-preview.png │ │ └── js │ │ ├── sas-maps.js │ │ └── sas-maps.js.map └── views │ └── storefront │ ├── element │ └── cms-element-maps.html.twig │ └── layout │ └── meta.html.twig └── SasMaps.php /.gitignore: -------------------------------------------------------------------------------- 1 | ### OSX 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | 6 | ## node_modules 7 | src/Resources/app/storefront/node_modules 8 | src/Resources/app/administration/node_modules 9 | src/node_modules 10 | 11 | ## other stuff 12 | /.idea -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 1.0.3 2 | - added API key check 3 | - added a new CMS block 4 | 5 | # 1.0.2 6 | - fixed missing mapbox module within storefront 7 | - fixed shopware version which caused an error while installing the plugin 8 | 9 | # 1.0.1 10 | - added language snippets for the element settings 11 | - added tab layout to element settings 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://res.cloudinary.com/dtgdh7noz/image/upload/v1584603232/preview_h2cdb9.jpg) 2 | 3 | # Maps 4 | 5 | A beautifully simple, yet deceptively powerful, Map element with Mapbox support. 6 | 7 | Configure the map element within your shopping experience. 8 | 9 | ### Mapbox API Key 10 | In order to use our Maps element you'll need an API key from Mapbox. 11 | Mapbox is free up to 50.000 Requests per month. 12 | 13 | First register on [Mapbox](https://www.mapbox.com/). 14 | You can get your API key if you go to your [Access tokens](https://account.mapbox.com/access-tokens/) page within your account. 15 | 16 | Copy your **public token** and paste this token to your **Mapbox API Key** configuration within your Shopware plugin settings page. 17 | Now you can use your maps element within your shopping experience. 18 | 19 | 20 | 21 | 22 | ![](https://res.cloudinary.com/dtgdh7noz/image/upload/v1584603445/Bildschirmfoto_2020-03-19_um_09.37.01_pfajbs.png) 23 | 24 | ![](https://res.cloudinary.com/dtgdh7noz/image/upload/v1584603448/Bildschirmfoto_2020-03-19_um_09.37.12_e7x3fu.png) 25 | 26 | ## Changes 27 | ##### Changes 1.0.3 28 | 29 | - If there is an error with the API key, or no API key is set you will get an error message. 30 | - We also added a block for the CMS element. 31 | 32 | ![](https://res.cloudinary.com/dtgdh7noz/image/upload/v1591095915/Bildschirmfoto_2020-06-02_um_13.52.05_znc9pj.png) 33 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sas/maps", 3 | "description": "Maps plugin", 4 | "version": "v1.0.3", 5 | "type": "shopware-platform-plugin", 6 | "license": "proprietary", 7 | "authors": [ 8 | { 9 | "name": "Shape & Shift", 10 | "role": "Manufacturer", 11 | "homepage": "https://shapeandshift.dev" 12 | } 13 | ], 14 | "autoload": { 15 | "psr-4": { 16 | "Sas\\Maps\\": "src/" 17 | } 18 | }, 19 | "require": { 20 | "shopware/core": "*" 21 | }, 22 | "extra": { 23 | "shopware-plugin-class": "Sas\\Maps\\SasMaps", 24 | "label": { 25 | "de-DE": "Maps", 26 | "en-GB": "Maps" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/Resources/app/administration/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "administration", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@mapbox/geojson-area": { 8 | "version": "0.2.2", 9 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz", 10 | "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=", 11 | "requires": { 12 | "wgs84": "0.0.0" 13 | } 14 | }, 15 | "@mapbox/geojson-rewind": { 16 | "version": "0.4.1", 17 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz", 18 | "integrity": "sha512-mxo2MEr7izA1uOXcDsw99Kgg6xW3P4H2j4n1lmldsgviIelpssvP+jQDivFKOHrOVJDpTTi5oZJvRcHtU9Uufw==", 19 | "requires": { 20 | "@mapbox/geojson-area": "0.2.2", 21 | "concat-stream": "~1.6.0", 22 | "minimist": "^1.2.5", 23 | "sharkdown": "^0.1.0" 24 | }, 25 | "dependencies": { 26 | "minimist": { 27 | "version": "1.2.5", 28 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 29 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 30 | } 31 | } 32 | }, 33 | "@mapbox/geojson-types": { 34 | "version": "1.0.2", 35 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", 36 | "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" 37 | }, 38 | "@mapbox/jsonlint-lines-primitives": { 39 | "version": "2.0.2", 40 | "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", 41 | "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" 42 | }, 43 | "@mapbox/mapbox-gl-supported": { 44 | "version": "1.5.0", 45 | "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", 46 | "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==" 47 | }, 48 | "@mapbox/point-geometry": { 49 | "version": "0.1.0", 50 | "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", 51 | "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" 52 | }, 53 | "@mapbox/tiny-sdf": { 54 | "version": "1.1.1", 55 | "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz", 56 | "integrity": "sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg==" 57 | }, 58 | "@mapbox/unitbezier": { 59 | "version": "0.0.0", 60 | "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", 61 | "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=" 62 | }, 63 | "@mapbox/vector-tile": { 64 | "version": "1.3.1", 65 | "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", 66 | "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", 67 | "requires": { 68 | "@mapbox/point-geometry": "~0.1.0" 69 | } 70 | }, 71 | "@mapbox/whoots-js": { 72 | "version": "3.1.0", 73 | "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", 74 | "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" 75 | }, 76 | "ansicolors": { 77 | "version": "0.2.1", 78 | "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", 79 | "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" 80 | }, 81 | "buffer-from": { 82 | "version": "1.1.1", 83 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 84 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 85 | }, 86 | "cardinal": { 87 | "version": "0.4.4", 88 | "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", 89 | "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=", 90 | "requires": { 91 | "ansicolors": "~0.2.1", 92 | "redeyed": "~0.4.0" 93 | } 94 | }, 95 | "concat-stream": { 96 | "version": "1.6.2", 97 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 98 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 99 | "requires": { 100 | "buffer-from": "^1.0.0", 101 | "inherits": "^2.0.3", 102 | "readable-stream": "^2.2.2", 103 | "typedarray": "^0.0.6" 104 | } 105 | }, 106 | "core-util-is": { 107 | "version": "1.0.2", 108 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 109 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 110 | }, 111 | "csscolorparser": { 112 | "version": "1.0.3", 113 | "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", 114 | "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" 115 | }, 116 | "earcut": { 117 | "version": "2.2.2", 118 | "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", 119 | "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==" 120 | }, 121 | "esprima": { 122 | "version": "1.0.4", 123 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", 124 | "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" 125 | }, 126 | "fuzzy": { 127 | "version": "0.1.3", 128 | "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", 129 | "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" 130 | }, 131 | "geojson-vt": { 132 | "version": "3.2.1", 133 | "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", 134 | "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" 135 | }, 136 | "gl-matrix": { 137 | "version": "3.3.0", 138 | "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", 139 | "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" 140 | }, 141 | "grid-index": { 142 | "version": "1.1.0", 143 | "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", 144 | "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" 145 | }, 146 | "ieee754": { 147 | "version": "1.1.13", 148 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 149 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 150 | }, 151 | "inherits": { 152 | "version": "2.0.4", 153 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 154 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 155 | }, 156 | "isarray": { 157 | "version": "1.0.0", 158 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 159 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 160 | }, 161 | "kdbush": { 162 | "version": "3.0.0", 163 | "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", 164 | "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" 165 | }, 166 | "lodash.debounce": { 167 | "version": "4.0.8", 168 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 169 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" 170 | }, 171 | "mapbox": { 172 | "version": "1.0.0-beta5", 173 | "resolved": "https://registry.npmjs.org/mapbox/-/mapbox-1.0.0-beta5.tgz", 174 | "integrity": "sha1-Y0L5jfdEZP3KAHvxnljsJBM/DWY=", 175 | "requires": { 176 | "rest": "^2.0.0" 177 | } 178 | }, 179 | "mapbox-gl": { 180 | "version": "1.9.1", 181 | "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.9.1.tgz", 182 | "integrity": "sha512-jpBcqh+4qpOkj8RdxRdvwKPA8gzNYyMQ8HOcXgZYuEM5nKevRDjD3cEs+rUxi1JuYj4t8bIk68Lfh7aQQC1MjQ==", 183 | "requires": { 184 | "@mapbox/geojson-rewind": "^0.4.0", 185 | "@mapbox/geojson-types": "^1.0.2", 186 | "@mapbox/jsonlint-lines-primitives": "^2.0.2", 187 | "@mapbox/mapbox-gl-supported": "^1.4.0", 188 | "@mapbox/point-geometry": "^0.1.0", 189 | "@mapbox/tiny-sdf": "^1.1.0", 190 | "@mapbox/unitbezier": "^0.0.0", 191 | "@mapbox/vector-tile": "^1.3.1", 192 | "@mapbox/whoots-js": "^3.1.0", 193 | "csscolorparser": "~1.0.2", 194 | "earcut": "^2.2.2", 195 | "geojson-vt": "^3.2.1", 196 | "gl-matrix": "^3.0.0", 197 | "grid-index": "^1.1.0", 198 | "minimist": "0.0.8", 199 | "murmurhash-js": "^1.0.0", 200 | "pbf": "^3.2.1", 201 | "potpack": "^1.0.1", 202 | "quickselect": "^2.0.0", 203 | "rw": "^1.3.3", 204 | "supercluster": "^7.0.0", 205 | "tinyqueue": "^2.0.0", 206 | "vt-pbf": "^3.1.1" 207 | } 208 | }, 209 | "mapbox-gl-geocoder": { 210 | "version": "2.0.1", 211 | "resolved": "https://registry.npmjs.org/mapbox-gl-geocoder/-/mapbox-gl-geocoder-2.0.1.tgz", 212 | "integrity": "sha1-R3b5xf13DnVgBqWsGEnlKajR3pQ=", 213 | "requires": { 214 | "lodash.debounce": "^4.0.6", 215 | "mapbox": "1.0.0-beta5", 216 | "suggestions": "^1.3.1", 217 | "xtend": "^4.0.1" 218 | } 219 | }, 220 | "minimist": { 221 | "version": "0.0.8", 222 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 223 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 224 | }, 225 | "murmurhash-js": { 226 | "version": "1.0.0", 227 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 228 | "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" 229 | }, 230 | "pbf": { 231 | "version": "3.2.1", 232 | "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", 233 | "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", 234 | "requires": { 235 | "ieee754": "^1.1.12", 236 | "resolve-protobuf-schema": "^2.1.0" 237 | } 238 | }, 239 | "potpack": { 240 | "version": "1.0.1", 241 | "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz", 242 | "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw==" 243 | }, 244 | "process-nextick-args": { 245 | "version": "2.0.1", 246 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 247 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 248 | }, 249 | "protocol-buffers-schema": { 250 | "version": "3.4.0", 251 | "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", 252 | "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" 253 | }, 254 | "quickselect": { 255 | "version": "2.0.0", 256 | "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", 257 | "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" 258 | }, 259 | "readable-stream": { 260 | "version": "2.3.7", 261 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 262 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 263 | "requires": { 264 | "core-util-is": "~1.0.0", 265 | "inherits": "~2.0.3", 266 | "isarray": "~1.0.0", 267 | "process-nextick-args": "~2.0.0", 268 | "safe-buffer": "~5.1.1", 269 | "string_decoder": "~1.1.1", 270 | "util-deprecate": "~1.0.1" 271 | } 272 | }, 273 | "redeyed": { 274 | "version": "0.4.4", 275 | "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", 276 | "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", 277 | "requires": { 278 | "esprima": "~1.0.4" 279 | } 280 | }, 281 | "resolve-protobuf-schema": { 282 | "version": "2.1.0", 283 | "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", 284 | "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", 285 | "requires": { 286 | "protocol-buffers-schema": "^3.3.1" 287 | } 288 | }, 289 | "rest": { 290 | "version": "2.0.0", 291 | "resolved": "https://registry.npmjs.org/rest/-/rest-2.0.0.tgz", 292 | "integrity": "sha1-bfrfZqQFxJz71bS9JbWf0pzYYbw=" 293 | }, 294 | "rw": { 295 | "version": "1.3.3", 296 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 297 | "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" 298 | }, 299 | "safe-buffer": { 300 | "version": "5.1.2", 301 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 302 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 303 | }, 304 | "sharkdown": { 305 | "version": "0.1.1", 306 | "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz", 307 | "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==", 308 | "requires": { 309 | "cardinal": "~0.4.2", 310 | "minimist": "0.0.5", 311 | "split": "~0.2.10" 312 | }, 313 | "dependencies": { 314 | "minimist": { 315 | "version": "0.0.5", 316 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", 317 | "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" 318 | } 319 | } 320 | }, 321 | "split": { 322 | "version": "0.2.10", 323 | "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", 324 | "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", 325 | "requires": { 326 | "through": "2" 327 | } 328 | }, 329 | "string_decoder": { 330 | "version": "1.1.1", 331 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 332 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 333 | "requires": { 334 | "safe-buffer": "~5.1.0" 335 | } 336 | }, 337 | "suggestions": { 338 | "version": "1.7.0", 339 | "resolved": "https://registry.npmjs.org/suggestions/-/suggestions-1.7.0.tgz", 340 | "integrity": "sha512-Px+gellrEQUkgM3Lc0Umnz4JIammE0CLcp+7lbNQH/wqnD0u/N1bOXytNOR3Ap1dIZDHE8lYMuwd60jMO6BPDw==", 341 | "requires": { 342 | "fuzzy": "^0.1.1", 343 | "xtend": "^4.0.0" 344 | } 345 | }, 346 | "supercluster": { 347 | "version": "7.0.0", 348 | "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.0.0.tgz", 349 | "integrity": "sha512-8VuHI8ynylYQj7Qf6PBMWy1PdgsnBiIxujOgc9Z83QvJ8ualIYWNx2iMKyKeC4DZI5ntD9tz/CIwwZvIelixsA==", 350 | "requires": { 351 | "kdbush": "^3.0.0" 352 | } 353 | }, 354 | "through": { 355 | "version": "2.3.8", 356 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 357 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 358 | }, 359 | "tinyqueue": { 360 | "version": "2.0.3", 361 | "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", 362 | "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" 363 | }, 364 | "typedarray": { 365 | "version": "0.0.6", 366 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 367 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 368 | }, 369 | "util-deprecate": { 370 | "version": "1.0.2", 371 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 372 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 373 | }, 374 | "vt-pbf": { 375 | "version": "3.1.1", 376 | "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz", 377 | "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==", 378 | "requires": { 379 | "@mapbox/point-geometry": "0.1.0", 380 | "@mapbox/vector-tile": "^1.3.1", 381 | "pbf": "^3.0.5" 382 | } 383 | }, 384 | "wgs84": { 385 | "version": "0.0.0", 386 | "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", 387 | "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=" 388 | }, 389 | "xtend": { 390 | "version": "4.0.2", 391 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 392 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 393 | } 394 | } 395 | } 396 | -------------------------------------------------------------------------------- /src/Resources/app/administration/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "administration", 3 | "version": "1.0.0", 4 | "private": true, 5 | "author": "Shape & Shift", 6 | "license": "ISC", 7 | "dependencies": { 8 | "mapbox-gl": "^1.8.1", 9 | "mapbox-gl-geocoder": "^2.0.1" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/extension/sw-cms/component/sw-cms-sidebar/index.js: -------------------------------------------------------------------------------- 1 | import template from './sw-cms-sidebar.html.twig'; 2 | 3 | Shopware.Component.override('sw-cms-sidebar', { 4 | template 5 | }); 6 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/extension/sw-cms/component/sw-cms-sidebar/sw-cms-sidebar.html.twig: -------------------------------------------------------------------------------- 1 | {% block sw_cms_sidebar_block_overview_category_options %} 2 | {% parent %} 3 | 4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/main.js: -------------------------------------------------------------------------------- 1 | import './extension/sw-cms/component/sw-cms-sidebar'; 2 | import './module/sw-cms/blocks/sas/sas-maps'; 3 | import './module/sw-cms/elements/maps'; 4 | 5 | import deDE from './module/sw-cms/snippet/de-DE.json'; 6 | import enGB from './module/sw-cms/snippet/en-GB.json'; 7 | 8 | Shopware.Locale.extend('de-DE', deDE); 9 | Shopware.Locale.extend('en-GB', enGB); 10 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/component/index.js: -------------------------------------------------------------------------------- 1 | import template from './sas-cms-block-maps.html.twig'; 2 | 3 | Shopware.Component.register('sas-cms-block-maps', { 4 | template 5 | }); 6 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/component/sas-cms-block-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block sas_cms_block_maps %} 2 |
3 | {% block sas_cms_block_maps_content %}{% endblock %} 4 |
5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/index.js: -------------------------------------------------------------------------------- 1 | import './component'; 2 | import './preview'; 3 | 4 | Shopware.Service('cmsService').registerCmsBlock({ 5 | name: 'sas-maps', 6 | label: 'sas-maps.blocks.maps.label', 7 | category: 'sas', 8 | component: 'sas-cms-block-maps', 9 | previewComponent: 'sas-cms-preview-maps', 10 | defaultConfig: { 11 | marginBottom: '20px', 12 | marginTop: '20px', 13 | marginLeft: '20px', 14 | marginRight: '20px', 15 | sizingMode: 'boxed' 16 | }, 17 | slots: { 18 | sasMaps: 'maps' 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/preview/index.js: -------------------------------------------------------------------------------- 1 | import template from './sas-cms-preview-maps.html.twig'; 2 | import './sas-cms-preview-maps.scss'; 3 | 4 | Shopware.Component.register('sas-cms-preview-maps', { 5 | template 6 | }); 7 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/preview/sas-cms-preview-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block sas_cms_block_nmaps_preview %} 2 |
3 | 4 |
5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/blocks/sas/sas-maps/preview/sas-cms-preview-maps.scss: -------------------------------------------------------------------------------- 1 | @import "~scss/variables"; 2 | 3 | .sas-cms-preview-maps { 4 | display: flex; 5 | 6 | img { 7 | object-fit: cover; 8 | height: 100px; 9 | width: 100%; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/component/index.js: -------------------------------------------------------------------------------- 1 | import template from './sw-cms-el-maps.html.twig'; 2 | import './sw-cms-el-maps.scss'; 3 | 4 | import mapboxgl from 'mapbox-gl'; 5 | import MapboxGeocoder from 'mapbox-gl-geocoder'; 6 | 7 | import 'mapbox-gl/dist/mapbox-gl.css'; 8 | import 'mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css'; 9 | 10 | const { Mixin } = Shopware; 11 | 12 | Shopware.Component.register('sw-cms-el-maps', { 13 | template, 14 | 15 | inject: ['systemConfigApiService'], 16 | 17 | mixins: [ 18 | Mixin.getByName('cms-element') 19 | ], 20 | 21 | data() { 22 | return { 23 | apiKey: null, 24 | isLoading: true, 25 | isEmpty: false 26 | }; 27 | }, 28 | 29 | created() { 30 | this.createdComponent(); 31 | }, 32 | 33 | 34 | methods: { 35 | createdComponent() { 36 | this.initElementConfig('maps'); 37 | this.getApiKey().then((config) => { 38 | if (this.checkIfEmpty(config["SasMaps.config.mapboxApiKey"])) { 39 | this.isEmpty = true; 40 | this.isLoading = false; 41 | } else { 42 | this.createMap(); 43 | } 44 | }); 45 | }, 46 | getApiKey() { 47 | return this.systemConfigApiService.getValues('SasMaps.config'); 48 | }, 49 | checkIfEmpty(obj) { 50 | return !obj || Object.keys(obj).length === 0; 51 | }, 52 | createMap() { 53 | const systemConfigApiService = Shopware.Service('systemConfigApiService'); 54 | 55 | return systemConfigApiService.getValues('SasMaps.config') 56 | .then((response) => { 57 | return response['SasMaps.config.mapboxApiKey']; 58 | }) 59 | .then((token) => { 60 | this.isEmpty = false; 61 | this.isLoading = false; 62 | return token; 63 | }) 64 | .then((token) => { 65 | mapboxgl.accessToken = token; 66 | 67 | const map = new mapboxgl.Map({ 68 | container: 'map', 69 | style: 'mapbox://styles/mapbox/streets-v11', 70 | center: [this.element.config.geoLat.value, this.element.config.geoLong.value], 71 | zoom: 13 72 | }); 73 | 74 | const marker = new mapboxgl.Marker().setLngLat([this.element.config.geoLat.value, this.element.config.geoLong.value]).addTo(map); 75 | 76 | const geocoder = new MapboxGeocoder({ 77 | accessToken: mapboxgl.accessToken, 78 | mapboxgl: mapboxgl 79 | }); 80 | 81 | map.addControl(geocoder, 'top-left'); 82 | 83 | map.on('load', () => { 84 | geocoder.on('result', (ev) => { 85 | this.element.config.geoLat.value = ev.result.geometry.coordinates[0]; 86 | this.element.config.geoLong.value = ev.result.geometry.coordinates[1]; 87 | 88 | marker.setLngLat([this.element.config.geoLat.value, this.element.config.geoLong.value]); 89 | }); 90 | }); 91 | 92 | const popup = new mapboxgl.Popup({ closeOnClick: false, offset: 40 }) 93 | .setLngLat([this.element.config.geoLat.value, this.element.config.geoLong.value]) 94 | .setHTML(this.element.config.description.value) 95 | .addTo(map); 96 | }) 97 | .catch((error) => { 98 | this.isEmpty = true; 99 | this.isLoading = false; 100 | }); 101 | } 102 | } 103 | }); 104 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/component/sw-cms-el-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block sw_cms_element_maps %} 2 |
3 | 4 | 5 | 12 | {{ $tc('sas-maps.elements.config.error.message') }} 13 |

14 | 15 | 16 | {{ $tc('sas-maps.elements.config.error.goToLinkText') }} 17 | 18 |
19 | 20 |
21 | 22 |
23 | 24 |
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/component/sw-cms-el-maps.scss: -------------------------------------------------------------------------------- 1 | .sw-cms-el-maps { 2 | display: flex; 3 | justify-content: center; 4 | align-items: center; 5 | overflow: hidden; 6 | width: 100%; 7 | min-height: 350px; 8 | position: relative; 9 | img { 10 | max-width: 100%; 11 | height: 350px; 12 | object-fit: contain; 13 | } 14 | #map { 15 | position: absolute; 16 | top: 0; 17 | bottom: 0; 18 | width: 100%; 19 | } 20 | } 21 | 22 | #geocoder-container > div { 23 | min-width: 50%; 24 | margin-left: 25%; 25 | } 26 | 27 | .mapboxgl-popup-content { 28 | padding: 20px 30px; 29 | font-size: 14px; 30 | border-radius: 0; 31 | } 32 | 33 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/config/index.js: -------------------------------------------------------------------------------- 1 | import template from './sw-cms-el-config-maps.html.twig'; 2 | 3 | const { Component, Mixin } = Shopware; 4 | 5 | Shopware.Component.register('sw-cms-el-config-maps', { 6 | template, 7 | 8 | mixins: [ 9 | Mixin.getByName('cms-element') 10 | ], 11 | 12 | created() { 13 | this.createdComponent(); 14 | }, 15 | 16 | methods: { 17 | createdComponent() { 18 | this.initElementConfig('maps'); 19 | } 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/config/sw-cms-el-config-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block sw_cms_element_image_config %} 2 |
3 | 4 | 5 | 6 | 19 | 20 | 44 | 45 | 46 |
47 | {% endblock %} 48 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/index.js: -------------------------------------------------------------------------------- 1 | import './component'; 2 | import './config'; 3 | import './preview'; 4 | 5 | Shopware.Service('cmsService').registerCmsElement({ 6 | name: 'maps', 7 | label: 'sas-maps.elements.mapsElement.label', 8 | component: 'sw-cms-el-maps', 9 | configComponent: 'sw-cms-el-config-maps', 10 | previewComponent: 'sw-cms-el-preview-maps', 11 | defaultConfig: { 12 | geoLat: { 13 | source: 'static', 14 | value: 0 15 | }, 16 | geoLong: { 17 | source: 'static', 18 | value: 0 19 | }, 20 | zoom: { 21 | source: 'static', 22 | value: 10 23 | }, 24 | mapboxStyle: { 25 | source: 'static', 26 | value: 'mapbox://styles/mapbox/light-v10' 27 | }, 28 | description: { 29 | source: 'static', 30 | value: null 31 | } 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/preview/index.js: -------------------------------------------------------------------------------- 1 | import template from './sw-cms-el-preview-maps.html.twig'; 2 | import './sw-cms-el-preview-maps.scss'; 3 | 4 | Shopware.Component.register('sw-cms-el-preview-maps', { 5 | template 6 | }); 7 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/preview/map.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/preview/sw-cms-el-preview-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block sw_cms_element_maps_preview %} 2 |
3 | 4 |
5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/elements/maps/preview/sw-cms-el-preview-maps.scss: -------------------------------------------------------------------------------- 1 | .sw-cms-el-preview-maps { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | height: 100%; 6 | img { 7 | max-width: 100%; 8 | height: 100%; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/snippet/de-DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "sas-maps": { 3 | "elements": { 4 | "config": { 5 | "tab": { 6 | "settings": "Einstellungen", 7 | "popup": "Popup Inhalt" 8 | }, 9 | "label": { 10 | "mapbox-style": "Mapbox Style", 11 | "latitude": "Breitengrad", 12 | "longitude": "Längengrad", 13 | "popup-content": "Popup Inhalt" 14 | }, 15 | "error": { 16 | "title": "Mapbox API Key", 17 | "message": "Dein Mapbox API ist falsch oder fehlt. Bitte hinterlege einen validen API Key", 18 | "goToLinkText": "Zu Mapbox Plugin Einstellungen" 19 | } 20 | }, 21 | "mapsElement": { 22 | "label": "Maps Element", 23 | "zoomLevel": "Zoom level", 24 | "zoomLevelSelect": "Zoom Level auswählen" 25 | } 26 | }, 27 | "blocks": { 28 | "maps": { 29 | "label": "Karte / Maps" 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Resources/app/administration/src/module/sw-cms/snippet/en-GB.json: -------------------------------------------------------------------------------- 1 | { 2 | "sas-maps": { 3 | "elements": { 4 | "config": { 5 | "tab": { 6 | "settings": "Settings", 7 | "popup": "Popup Content" 8 | }, 9 | "label": { 10 | "mapbox-style": "Mapbox Style", 11 | "latitude": "Latitude", 12 | "longitude": "Longitude", 13 | "popup-content": "Popup Content" 14 | }, 15 | "error": { 16 | "title": "Mapbox API Key", 17 | "message": "Your Mapbox API key seems to be wrong or you forgot to set it up. Please enter a valid API key within the Maps plugin settings.", 18 | "goToLinkText": "Go to mapbox plugin settings" 19 | } 20 | }, 21 | "mapsElement": { 22 | "label": "Maps Element", 23 | "zoomLevel": "Zoom level", 24 | "zoomLevelSelect": "Select zoom level" 25 | } 26 | }, 27 | "blocks": { 28 | "maps": { 29 | "label": "Maps" 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/build/webpack.config.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line func-names 2 | module.exports = function (params) { 3 | return { 4 | resolve: { 5 | modules: [ 6 | `${params.basePath}Resources/app/storefront/node_modules` 7 | ] 8 | } 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "storefront", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@mapbox/geojson-area": { 8 | "version": "0.2.2", 9 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz", 10 | "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=", 11 | "requires": { 12 | "wgs84": "0.0.0" 13 | } 14 | }, 15 | "@mapbox/geojson-rewind": { 16 | "version": "0.4.1", 17 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz", 18 | "integrity": "sha512-mxo2MEr7izA1uOXcDsw99Kgg6xW3P4H2j4n1lmldsgviIelpssvP+jQDivFKOHrOVJDpTTi5oZJvRcHtU9Uufw==", 19 | "requires": { 20 | "@mapbox/geojson-area": "0.2.2", 21 | "concat-stream": "~1.6.0", 22 | "minimist": "^1.2.5", 23 | "sharkdown": "^0.1.0" 24 | }, 25 | "dependencies": { 26 | "minimist": { 27 | "version": "1.2.5", 28 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 29 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 30 | } 31 | } 32 | }, 33 | "@mapbox/geojson-types": { 34 | "version": "1.0.2", 35 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", 36 | "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" 37 | }, 38 | "@mapbox/jsonlint-lines-primitives": { 39 | "version": "2.0.2", 40 | "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", 41 | "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" 42 | }, 43 | "@mapbox/mapbox-gl-supported": { 44 | "version": "1.5.0", 45 | "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", 46 | "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==" 47 | }, 48 | "@mapbox/point-geometry": { 49 | "version": "0.1.0", 50 | "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", 51 | "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" 52 | }, 53 | "@mapbox/tiny-sdf": { 54 | "version": "1.1.1", 55 | "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz", 56 | "integrity": "sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg==" 57 | }, 58 | "@mapbox/unitbezier": { 59 | "version": "0.0.0", 60 | "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", 61 | "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=" 62 | }, 63 | "@mapbox/vector-tile": { 64 | "version": "1.3.1", 65 | "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", 66 | "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", 67 | "requires": { 68 | "@mapbox/point-geometry": "~0.1.0" 69 | } 70 | }, 71 | "@mapbox/whoots-js": { 72 | "version": "3.1.0", 73 | "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", 74 | "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" 75 | }, 76 | "ansicolors": { 77 | "version": "0.2.1", 78 | "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", 79 | "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" 80 | }, 81 | "buffer-from": { 82 | "version": "1.1.1", 83 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 84 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 85 | }, 86 | "cardinal": { 87 | "version": "0.4.4", 88 | "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", 89 | "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=", 90 | "requires": { 91 | "ansicolors": "~0.2.1", 92 | "redeyed": "~0.4.0" 93 | } 94 | }, 95 | "concat-stream": { 96 | "version": "1.6.2", 97 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 98 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 99 | "requires": { 100 | "buffer-from": "^1.0.0", 101 | "inherits": "^2.0.3", 102 | "readable-stream": "^2.2.2", 103 | "typedarray": "^0.0.6" 104 | } 105 | }, 106 | "core-util-is": { 107 | "version": "1.0.2", 108 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 109 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 110 | }, 111 | "csscolorparser": { 112 | "version": "1.0.3", 113 | "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", 114 | "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" 115 | }, 116 | "earcut": { 117 | "version": "2.2.2", 118 | "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", 119 | "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==" 120 | }, 121 | "esprima": { 122 | "version": "1.0.4", 123 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", 124 | "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" 125 | }, 126 | "geojson-vt": { 127 | "version": "3.2.1", 128 | "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", 129 | "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" 130 | }, 131 | "gl-matrix": { 132 | "version": "3.3.0", 133 | "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", 134 | "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" 135 | }, 136 | "grid-index": { 137 | "version": "1.1.0", 138 | "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", 139 | "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" 140 | }, 141 | "ieee754": { 142 | "version": "1.1.13", 143 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 144 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 145 | }, 146 | "inherits": { 147 | "version": "2.0.4", 148 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 149 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 150 | }, 151 | "isarray": { 152 | "version": "1.0.0", 153 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 154 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 155 | }, 156 | "kdbush": { 157 | "version": "3.0.0", 158 | "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", 159 | "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" 160 | }, 161 | "mapbox-gl": { 162 | "version": "1.9.1", 163 | "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.9.1.tgz", 164 | "integrity": "sha512-jpBcqh+4qpOkj8RdxRdvwKPA8gzNYyMQ8HOcXgZYuEM5nKevRDjD3cEs+rUxi1JuYj4t8bIk68Lfh7aQQC1MjQ==", 165 | "requires": { 166 | "@mapbox/geojson-rewind": "^0.4.0", 167 | "@mapbox/geojson-types": "^1.0.2", 168 | "@mapbox/jsonlint-lines-primitives": "^2.0.2", 169 | "@mapbox/mapbox-gl-supported": "^1.4.0", 170 | "@mapbox/point-geometry": "^0.1.0", 171 | "@mapbox/tiny-sdf": "^1.1.0", 172 | "@mapbox/unitbezier": "^0.0.0", 173 | "@mapbox/vector-tile": "^1.3.1", 174 | "@mapbox/whoots-js": "^3.1.0", 175 | "csscolorparser": "~1.0.2", 176 | "earcut": "^2.2.2", 177 | "geojson-vt": "^3.2.1", 178 | "gl-matrix": "^3.0.0", 179 | "grid-index": "^1.1.0", 180 | "minimist": "0.0.8", 181 | "murmurhash-js": "^1.0.0", 182 | "pbf": "^3.2.1", 183 | "potpack": "^1.0.1", 184 | "quickselect": "^2.0.0", 185 | "rw": "^1.3.3", 186 | "supercluster": "^7.0.0", 187 | "tinyqueue": "^2.0.0", 188 | "vt-pbf": "^3.1.1" 189 | } 190 | }, 191 | "minimist": { 192 | "version": "0.0.8", 193 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 194 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 195 | }, 196 | "murmurhash-js": { 197 | "version": "1.0.0", 198 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 199 | "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" 200 | }, 201 | "pbf": { 202 | "version": "3.2.1", 203 | "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", 204 | "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", 205 | "requires": { 206 | "ieee754": "^1.1.12", 207 | "resolve-protobuf-schema": "^2.1.0" 208 | } 209 | }, 210 | "potpack": { 211 | "version": "1.0.1", 212 | "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz", 213 | "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw==" 214 | }, 215 | "process-nextick-args": { 216 | "version": "2.0.1", 217 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 218 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 219 | }, 220 | "protocol-buffers-schema": { 221 | "version": "3.4.0", 222 | "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", 223 | "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" 224 | }, 225 | "quickselect": { 226 | "version": "2.0.0", 227 | "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", 228 | "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" 229 | }, 230 | "readable-stream": { 231 | "version": "2.3.7", 232 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 233 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 234 | "requires": { 235 | "core-util-is": "~1.0.0", 236 | "inherits": "~2.0.3", 237 | "isarray": "~1.0.0", 238 | "process-nextick-args": "~2.0.0", 239 | "safe-buffer": "~5.1.1", 240 | "string_decoder": "~1.1.1", 241 | "util-deprecate": "~1.0.1" 242 | } 243 | }, 244 | "redeyed": { 245 | "version": "0.4.4", 246 | "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", 247 | "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", 248 | "requires": { 249 | "esprima": "~1.0.4" 250 | } 251 | }, 252 | "resolve-protobuf-schema": { 253 | "version": "2.1.0", 254 | "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", 255 | "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", 256 | "requires": { 257 | "protocol-buffers-schema": "^3.3.1" 258 | } 259 | }, 260 | "rw": { 261 | "version": "1.3.3", 262 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 263 | "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" 264 | }, 265 | "safe-buffer": { 266 | "version": "5.1.2", 267 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 268 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 269 | }, 270 | "sharkdown": { 271 | "version": "0.1.1", 272 | "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz", 273 | "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==", 274 | "requires": { 275 | "cardinal": "~0.4.2", 276 | "minimist": "0.0.5", 277 | "split": "~0.2.10" 278 | }, 279 | "dependencies": { 280 | "minimist": { 281 | "version": "0.0.5", 282 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", 283 | "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" 284 | } 285 | } 286 | }, 287 | "split": { 288 | "version": "0.2.10", 289 | "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", 290 | "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", 291 | "requires": { 292 | "through": "2" 293 | } 294 | }, 295 | "string_decoder": { 296 | "version": "1.1.1", 297 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 298 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 299 | "requires": { 300 | "safe-buffer": "~5.1.0" 301 | } 302 | }, 303 | "supercluster": { 304 | "version": "7.0.0", 305 | "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.0.0.tgz", 306 | "integrity": "sha512-8VuHI8ynylYQj7Qf6PBMWy1PdgsnBiIxujOgc9Z83QvJ8ualIYWNx2iMKyKeC4DZI5ntD9tz/CIwwZvIelixsA==", 307 | "requires": { 308 | "kdbush": "^3.0.0" 309 | } 310 | }, 311 | "through": { 312 | "version": "2.3.8", 313 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 314 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 315 | }, 316 | "tinyqueue": { 317 | "version": "2.0.3", 318 | "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", 319 | "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" 320 | }, 321 | "typedarray": { 322 | "version": "0.0.6", 323 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 324 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 325 | }, 326 | "util-deprecate": { 327 | "version": "1.0.2", 328 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 329 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 330 | }, 331 | "vt-pbf": { 332 | "version": "3.1.1", 333 | "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz", 334 | "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==", 335 | "requires": { 336 | "@mapbox/point-geometry": "0.1.0", 337 | "@mapbox/vector-tile": "^1.3.1", 338 | "pbf": "^3.0.5" 339 | } 340 | }, 341 | "wgs84": { 342 | "version": "0.0.0", 343 | "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", 344 | "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=" 345 | } 346 | } 347 | } 348 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "storefront", 3 | "version": "1.0.0", 4 | "private": true, 5 | "author": "Shape & Shift", 6 | "license": "ISC", 7 | "dependencies": { 8 | "mapbox-gl": "^1.9.1" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/src/main.js: -------------------------------------------------------------------------------- 1 | import Maps from './sas-maps/sas-maps.plugin'; 2 | 3 | const PluginManager = window.PluginManager; 4 | PluginManager.register('Maps', Maps, '[data-maps]'); 5 | 6 | if (module.hot) { 7 | module.hot.accept(); 8 | } 9 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/src/sas-maps/sas-maps.plugin.js: -------------------------------------------------------------------------------- 1 | import Plugin from 'src/plugin-system/plugin.class'; 2 | import DomAccess from 'src/helper/dom-access.helper'; 3 | 4 | import mapboxgl from 'mapbox-gl'; 5 | 6 | export default class Maps extends Plugin { 7 | 8 | init() { 9 | this._generateMap(); 10 | } 11 | 12 | _generateMap() { 13 | const geoLat = DomAccess.getDataAttribute(this.el, 'lat'); 14 | const geoLong = DomAccess.getDataAttribute(this.el, 'long'); 15 | const description = DomAccess.getDataAttribute(this.el, 'description'); 16 | const mapboxStyle = DomAccess.getDataAttribute(this.el, 'mapbox'); 17 | const zoom = DomAccess.getDataAttribute(this.el, 'zoom'); 18 | const apiKey = DomAccess.getDataAttribute(this.el, 'token'); 19 | 20 | mapboxgl.accessToken = apiKey; 21 | 22 | const map = new mapboxgl.Map({ 23 | container: this.el, 24 | style: mapboxStyle, 25 | center: [geoLat, geoLong], 26 | zoom: zoom, 27 | attributionControl: false 28 | }); 29 | 30 | new mapboxgl.Marker().setLngLat([geoLat, geoLong]).addTo(map); 31 | 32 | new mapboxgl.Popup({ closeOnClick: false, offset: 40 }) 33 | .setLngLat([geoLat, geoLong]) 34 | .setHTML(description) 35 | .addTo(map); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Resources/app/storefront/src/scss/maps.scss: -------------------------------------------------------------------------------- 1 | .mapboxgl-popup-content { 2 | padding: 20px 30px; 3 | font-size: 14px; 4 | border-radius: 0; 5 | } 6 | -------------------------------------------------------------------------------- /src/Resources/config/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | Maps Configuration 6 | Map Konfiguration 7 | 8 | mapboxApiKey 9 | 10 | 11 | Your secret token for xyz... 12 | Dein geheimer Schlüssel für xyz... 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Resources/config/plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shape-and-Shift/shopware-maps/207d51d7f97e1b1b3288850cf17e6c7a3a7277d9/src/Resources/config/plugin.png -------------------------------------------------------------------------------- /src/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/Resources/public/administration/css/sas-maps.css: -------------------------------------------------------------------------------- 1 | .sas-cms-preview-maps{display:flex}.sas-cms-preview-maps img{object-fit:cover;height:100px;width:100%}.sw-cms-el-maps{display:flex;justify-content:center;align-items:center;overflow:hidden;width:100%;min-height:350px;position:relative}.sw-cms-el-maps img{max-width:100%;height:350px;object-fit:contain}.sw-cms-el-maps #map{position:absolute;top:0;bottom:0;width:100%}#geocoder-container>div{min-width:50%;margin-left:25%}.mapboxgl-popup-content{padding:20px 30px;font-size:14px;border-radius:0}.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mapboxgl-canvas{position:absolute;left:0;top:0}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-group{border-radius:4px;background:#fff}.mapboxgl-ctrl-group:not(:empty){-moz-box-shadow:0 0 2px rgba(0,0,0,.1);-webkit-box-shadow:0 0 2px rgba(0,0,0,.1);box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{width:29px;height:29px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (-ms-high-contrast:active){.mapboxgl-ctrl-icon{background-color:transparent}.mapboxgl-ctrl-group button+button{border-top:1px solid ButtonText}}.mapboxgl-ctrl button::-moz-focus-inner{border:0;padding:0}.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:focus:only-child{border-radius:inherit}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{-webkit-animation:mapboxgl-spin 2s linear infinite;-moz-animation:mapboxgl-spin 2s infinite linear;-o-animation:mapboxgl-spin 2s infinite linear;-ms-animation:mapboxgl-spin 2s infinite linear;animation:mapboxgl-spin 2s linear infinite}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 005.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 009 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 003.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0011 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 110 7 3.5 3.5 0 110-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}}@-webkit-keyframes mapboxgl-spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@-moz-keyframes mapboxgl-spin{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(1turn)}}@-o-keyframes mapboxgl-spin{0%{-o-transform:rotate(0deg)}to{-o-transform:rotate(1turn)}}@-ms-keyframes mapboxgl-spin{0%{-ms-transform:rotate(0deg)}to{-ms-transform:rotate(1turn)}}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E%3Cdefs%3E%3Cpath id='a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg opacity='.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cg opacity='.9' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/g%3E%3C/svg%3E")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media (-ms-high-contrast:active){a.mapboxgl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E%3Cdefs%3E%3Cpath id='a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cg fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/g%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E%3Cdefs%3E%3Cpath id='a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/svg%3E")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{min-height:20px;padding:0;margin:10px;position:relative;background-color:#fff;border-radius:3px 12px 12px 3px}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 24px 2px 4px;visibility:visible;margin-top:6px}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 4px 2px 24px;border-radius:12px 3px 3px 12px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact:after{content:"";cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1012 0 6 6 0 10-12 0m5-3a1 1 0 102 0 1 1 0 10-2 0m0 3a1 1 0 112 0v3a1 1 0 11-2 0'/%3E%3C/svg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1012 0 6 6 0 10-12 0m5-3a1 1 0 102 0 1 1 0 10-2 0m0 3a1 1 0 112 0v3a1 1 0 11-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1012 0 6 6 0 10-12 0m5-3a1 1 0 102 0 1 1 0 10-2 0m0 3a1 1 0 112 0v3a1 1 0 11-2 0'/%3E%3C/svg%3E")}}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;border:2px solid #333;border-top:#333;padding:0 5px;color:#333;box-sizing:border-box}.mapboxgl-popup{position:absolute;top:0;left:0;display:-webkit-flex;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{-webkit-flex-direction:column;flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.mapboxgl-popup-anchor-left{-webkit-flex-direction:row;flex-direction:row}.mapboxgl-popup-anchor-right{-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{position:absolute;top:0;left:0;will-change:transform}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:"";position:absolute;-webkit-animation:mapboxgl-user-location-dot-pulse 2s infinite;-moz-animation:mapboxgl-user-location-dot-pulse 2s infinite;-ms-animation:mapboxgl-user-location-dot-pulse 2s infinite;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px rgba(0,0,0,.35)}@-webkit-keyframes mapboxgl-user-location-dot-pulse{0%{-webkit-transform:scale(1);opacity:1}70%{-webkit-transform:scale(3);opacity:0}to{-webkit-transform:scale(1);opacity:0}}@-ms-keyframes mapboxgl-user-location-dot-pulse{0%{-ms-transform:scale(1);opacity:1}70%{-ms-transform:scale(3);opacity:0}to{-ms-transform:scale(1);opacity:0}}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:rgba(29,161,242,.2);width:1px;height:1px;border-radius:100%}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}}.mapboxgl-ctrl-geocoder,.mapboxgl-ctrl-geocoder *,.mapboxgl-ctrl-geocoder :after,.mapboxgl-ctrl-geocoder :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mapboxgl-ctrl-geocoder{font:15px/20px Helvetica Neue,Arial,Helvetica,sans-serif;position:relative;background-color:#fff;width:33.3333%;min-width:240px;max-width:360px;z-index:1;border-radius:3px}.mapboxgl-ctrl-geocoder input[type=text]{font-size:12px;width:100%;border:0;background-color:transparent;height:40px;margin:0;color:rgba(0,0,0,.5);padding:10px 10px 10px 40px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mapboxgl-ctrl-geocoder input:focus{color:rgba(0,0,0,.75);outline:0;box-shadow:none;outline:thin dotted\8}.mapboxgl-ctrl-geocoder .geocoder-icon-search{position:absolute;top:10px;left:10px}.mapboxgl-ctrl-geocoder button{padding:0;margin:0;background-color:#fff;border:none;cursor:pointer}.mapboxgl-ctrl-geocoder .geocoder-pin-right *{background-color:#fff;z-index:2;position:absolute;right:10px;top:10px;display:none}.mapboxgl-ctrl-geocoder,.mapboxgl-ctrl-geocoder ul{box-shadow:0 0 0 2px rgba(0,0,0,.1)}.mapboxgl-ctrl-geocoder ul{background-color:#fff;border-radius:0 0 3px 3px;left:0;list-style:none;margin:0;padding:0;position:absolute;width:100%;top:100%;z-index:1000;overflow:hidden;font-size:12px}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-geocoder ul,.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl-geocoder ul{top:auto;bottom:100%}.mapboxgl-ctrl-geocoder ul>li>a{clear:both;cursor:default;display:block;padding:5px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid rgba(0,0,0,.1);color:#404040}.mapboxgl-ctrl-geocoder ul>li:last-child>a{border-bottom:none}.mapboxgl-ctrl-geocoder ul>li.active>a,.mapboxgl-ctrl-geocoder ul>li>a:hover{color:#202020;background-color:#eee;text-decoration:none;cursor:pointer}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@-moz-keyframes rotate{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(1turn)}}@-ms-keyframes rotate{0%{-ms-transform:rotate(0deg)}to{-ms-transform:rotate(1turn)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.geocoder-icon{display:inline-block;width:20px;height:20px;vertical-align:middle;speak:none;background-repeat:no-repeat}.geocoder-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PHBhdGggZD0iTTguNSA0QzYgNCA0IDYgNCA4LjVTNiAxMyA4LjUgMTNjLjkgMCAxLjctLjIgMi4zLS43aC4xbDMuNCAzLjRjLjIuMi40LjMuNy4zLjYgMCAxLS40IDEtMSAwLS4zLS4xLS41LS4zLS43bC0zLjQtMy40di0uMWMuNS0uNi43LTEuNC43LTIuM0MxMyA2IDExIDQgOC41IDR6bTAgMS41YzEuNyAwIDMgMS4zIDMgM3MtMS4zIDMtMyAzLTMtMS4zLTMtMyAxLjMtMyAzLTN6Ii8+PC9zdmc+)}.geocoder-icon-close{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHdpZHRoPSIyMCI+PHBhdGggZD0iTTUgNXYxLjVMOC41IDEwIDUgMTMuNVYxNWgxLjVsMy41LTMuNSAzLjUgMy41SDE1di0xLjVMMTEuNSAxMCAxNSA2LjVWNWgtMS41TDEwIDguNSA2LjUgNUg1eiIvPjwvc3ZnPg==)}.geocoder-icon-loading{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PHBhdGggZD0iTTEwIDJ2My4zYzIuNiAwIDQuNyAyLjEgNC43IDQuN0gxOGMwLTQuNC0zLjYtOC04LTh6Ii8+PHBhdGggZD0iTTEwIDJDNi44IDIgMy43IDQuMSAyLjYgNy4xYy0xLjIgMi45LS41IDYuNSAxLjkgOC43IDIuNCAyLjQgNi40IDIuOSA5LjQgMS4yIDIuNS0xLjQgNC4yLTQuMiA0LjItN2gtMy4zYy4xIDIuMi0xLjcgNC4zLTMuOCA0LjYtMi4zLjQtNC42LS44LTUuMy0yLjktLjktMi0uMS00LjYgMS45LTUuNy43LS40IDEuNS0uNyAyLjQtLjdWMnoiIG9wYWNpdHk9Ii4yIi8+PC9zdmc+);-webkit-animation:rotate .4s linear infinite;-moz-animation:rotate .4s linear infinite;-ms-animation:rotate .4s linear infinite;animation:rotate .4s linear infinite}.sw-cms-el-preview-maps{display:flex;align-items:center;justify-content:center;height:100%}.sw-cms-el-preview-maps img{max-width:100%;height:100%} -------------------------------------------------------------------------------- /src/Resources/public/administration/img/mapbox-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shape-and-Shift/shopware-maps/207d51d7f97e1b1b3288850cf17e6c7a3a7277d9/src/Resources/public/administration/img/mapbox-preview.png -------------------------------------------------------------------------------- /src/Resources/public/administration/js/sas-maps.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/sas-maps.js","sourceRoot":""} -------------------------------------------------------------------------------- /src/Resources/views/storefront/element/cms-element-maps.html.twig: -------------------------------------------------------------------------------- 1 | {% block element_maps %} 2 |
11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /src/Resources/views/storefront/layout/meta.html.twig: -------------------------------------------------------------------------------- 1 | {% sw_extends '@Storefront/storefront/layout/meta.html.twig' %} 2 | 3 | {% block layout_head_stylesheet %} 4 | {{ parent() }} 5 | 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /src/SasMaps.php: -------------------------------------------------------------------------------- 1 |