├── .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 | 
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 | 
23 |
24 | 
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 | 
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 |
7 |
10 | {{ $tc('sas-maps.elements.config.tab.settings') }}
11 |
12 |
13 |
16 | {{ $tc('sas-maps.elements.config.tab.popup') }}
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
43 |
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 |
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 |