@panoramax/web-viewer 3.0.2-develop-a8ea8e60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.dockerignore +6 -0
  2. package/.gitlab-ci.yml +71 -0
  3. package/CHANGELOG.md +428 -0
  4. package/CODE_OF_CONDUCT.md +134 -0
  5. package/Dockerfile +14 -0
  6. package/LICENSE +21 -0
  7. package/README.md +39 -0
  8. package/build/editor.html +1 -0
  9. package/build/index.css +36 -0
  10. package/build/index.css.map +1 -0
  11. package/build/index.html +1 -0
  12. package/build/index.js +25 -0
  13. package/build/index.js.map +1 -0
  14. package/build/map.html +1 -0
  15. package/build/viewer.html +1 -0
  16. package/config/env.js +104 -0
  17. package/config/getHttpsConfig.js +66 -0
  18. package/config/getPackageJson.js +25 -0
  19. package/config/jest/babelTransform.js +29 -0
  20. package/config/jest/cssTransform.js +14 -0
  21. package/config/jest/fileTransform.js +40 -0
  22. package/config/modules.js +134 -0
  23. package/config/paths.js +72 -0
  24. package/config/pnpTs.js +35 -0
  25. package/config/webpack/persistentCache/createEnvironmentHash.js +9 -0
  26. package/config/webpack.config.js +885 -0
  27. package/config/webpackDevServer.config.js +127 -0
  28. package/docs/01_Start.md +149 -0
  29. package/docs/02_Usage.md +828 -0
  30. package/docs/03_URL_settings.md +140 -0
  31. package/docs/04_Advanced_examples.md +214 -0
  32. package/docs/05_Compatibility.md +85 -0
  33. package/docs/09_Develop.md +62 -0
  34. package/docs/90_Releases.md +27 -0
  35. package/docs/images/class_diagram.drawio +129 -0
  36. package/docs/images/class_diagram.jpg +0 -0
  37. package/docs/images/screenshot.jpg +0 -0
  38. package/mkdocs.yml +45 -0
  39. package/package.json +254 -0
  40. package/public/editor.html +54 -0
  41. package/public/favicon.ico +0 -0
  42. package/public/index.html +59 -0
  43. package/public/map.html +53 -0
  44. package/public/viewer.html +67 -0
  45. package/scripts/build.js +217 -0
  46. package/scripts/start.js +176 -0
  47. package/scripts/test.js +52 -0
  48. package/src/Editor.css +37 -0
  49. package/src/Editor.js +359 -0
  50. package/src/StandaloneMap.js +114 -0
  51. package/src/Viewer.css +203 -0
  52. package/src/Viewer.js +1186 -0
  53. package/src/components/CoreView.css +64 -0
  54. package/src/components/CoreView.js +159 -0
  55. package/src/components/Loader.css +56 -0
  56. package/src/components/Loader.js +111 -0
  57. package/src/components/Map.css +65 -0
  58. package/src/components/Map.js +841 -0
  59. package/src/components/Photo.css +36 -0
  60. package/src/components/Photo.js +687 -0
  61. package/src/img/arrow_360.svg +14 -0
  62. package/src/img/arrow_flat.svg +11 -0
  63. package/src/img/arrow_triangle.svg +10 -0
  64. package/src/img/arrow_turn.svg +9 -0
  65. package/src/img/bg_aerial.jpg +0 -0
  66. package/src/img/bg_streets.jpg +0 -0
  67. package/src/img/loader_base.jpg +0 -0
  68. package/src/img/loader_hd.jpg +0 -0
  69. package/src/img/logo_dead.svg +91 -0
  70. package/src/img/marker.svg +17 -0
  71. package/src/img/marker_blue.svg +20 -0
  72. package/src/img/switch_big.svg +44 -0
  73. package/src/img/switch_mini.svg +48 -0
  74. package/src/index.js +10 -0
  75. package/src/translations/de.json +163 -0
  76. package/src/translations/en.json +164 -0
  77. package/src/translations/eo.json +6 -0
  78. package/src/translations/es.json +164 -0
  79. package/src/translations/fi.json +1 -0
  80. package/src/translations/fr.json +164 -0
  81. package/src/translations/hu.json +133 -0
  82. package/src/translations/nl.json +1 -0
  83. package/src/translations/zh_Hant.json +136 -0
  84. package/src/utils/API.js +709 -0
  85. package/src/utils/Exif.js +198 -0
  86. package/src/utils/I18n.js +75 -0
  87. package/src/utils/Map.js +382 -0
  88. package/src/utils/PhotoAdapter.js +45 -0
  89. package/src/utils/Utils.js +568 -0
  90. package/src/utils/Widgets.js +477 -0
  91. package/src/viewer/URLHash.js +334 -0
  92. package/src/viewer/Widgets.css +711 -0
  93. package/src/viewer/Widgets.js +1196 -0
  94. package/tests/Editor.test.js +125 -0
  95. package/tests/StandaloneMap.test.js +44 -0
  96. package/tests/Viewer.test.js +363 -0
  97. package/tests/__snapshots__/Editor.test.js.snap +300 -0
  98. package/tests/__snapshots__/StandaloneMap.test.js.snap +30 -0
  99. package/tests/__snapshots__/Viewer.test.js.snap +195 -0
  100. package/tests/components/CoreView.test.js +91 -0
  101. package/tests/components/Loader.test.js +38 -0
  102. package/tests/components/Map.test.js +230 -0
  103. package/tests/components/Photo.test.js +335 -0
  104. package/tests/components/__snapshots__/Loader.test.js.snap +15 -0
  105. package/tests/components/__snapshots__/Map.test.js.snap +767 -0
  106. package/tests/components/__snapshots__/Photo.test.js.snap +205 -0
  107. package/tests/data/Map_geocoder_ban.json +36 -0
  108. package/tests/data/Map_geocoder_nominatim.json +56 -0
  109. package/tests/data/Viewer_pictures_1.json +148 -0
  110. package/tests/setupTests.js +5 -0
  111. package/tests/utils/API.test.js +906 -0
  112. package/tests/utils/Exif.test.js +124 -0
  113. package/tests/utils/I18n.test.js +28 -0
  114. package/tests/utils/Map.test.js +105 -0
  115. package/tests/utils/Utils.test.js +300 -0
  116. package/tests/utils/Widgets.test.js +107 -0
  117. package/tests/utils/__snapshots__/API.test.js.snap +132 -0
  118. package/tests/utils/__snapshots__/Exif.test.js.snap +43 -0
  119. package/tests/utils/__snapshots__/Map.test.js.snap +48 -0
  120. package/tests/utils/__snapshots__/Utils.test.js.snap +41 -0
  121. package/tests/utils/__snapshots__/Widgets.test.js.snap +44 -0
  122. package/tests/viewer/URLHash.test.js +537 -0
  123. package/tests/viewer/Widgets.test.js +127 -0
  124. package/tests/viewer/__snapshots__/URLHash.test.js.snap +98 -0
  125. package/tests/viewer/__snapshots__/Widgets.test.js.snap +393 -0
@@ -0,0 +1,711 @@
1
+ /****************************************
2
+ * Style for map/viewer unified widgets *
3
+ ****************************************/
4
+
5
+ /* Colors */
6
+ :root {
7
+ --widget-bg: var(--white);
8
+ --widget-bg-hover: var(--grey);
9
+ --widget-bg-active: var(--blue);
10
+ --widget-bg-inactive: var(--grey-semi-dark);
11
+ --widget-bg-primary: var(--blue-semi);
12
+ --widget-bg-primary-hover: #e0e7ff;
13
+ --widget-border-div: var(--grey-pale);
14
+ --widget-border-btn: var(--blue);
15
+ --widget-font: var(--grey-dark);
16
+ --widget-font-active: var(--white);
17
+ --widget-font-btn-inactive: var(--grey-semi-dark);
18
+ --widget-font-btn-indirect: var(--grey-dark);
19
+ --widget-font-btn-direct: var(--blue);
20
+ }
21
+
22
+
23
+ /***********************************************
24
+ * Positioning utilities
25
+ */
26
+
27
+ .gvs-corner-space {
28
+ display: flex;
29
+ justify-content: space-between;
30
+ width: 100%;
31
+ height: 50%;
32
+ z-index: 10;
33
+ visibility: hidden;
34
+ position: relative;
35
+ }
36
+
37
+ .gvs-main .gvs-corner-space {
38
+ padding: 10px;
39
+ }
40
+
41
+ .gvs-corner {
42
+ display: flex;
43
+ gap: 10px;
44
+ }
45
+
46
+ .gvs-main .gvs-corner {
47
+ width: 33%;
48
+ }
49
+
50
+ .gvs-corner > * {
51
+ visibility: visible;
52
+ }
53
+
54
+ #gvs-corner-main-top-middle { align-items: start; justify-content: center; }
55
+ #gvs-corner-main-top-left { flex-direction: row; align-items: start; }
56
+ #gvs-corner-main-top-right { flex-direction: column; align-items: end; }
57
+
58
+ #gvs-corner-main-bottom-right,
59
+ #gvs-corner-mini-bottom-left,
60
+ #gvs-corner-mini-bottom-right {
61
+ flex-direction: column-reverse;
62
+ align-items: end;
63
+ }
64
+
65
+ #gvs-corner-main-bottom-left {
66
+ flex-direction: column-reverse;
67
+ align-items: start;
68
+ }
69
+
70
+ @container (max-width: 576px) {
71
+ #gvs-corner-main-top-right .gvs-group-btnpanel button {
72
+ margin-bottom: 0;
73
+ }
74
+
75
+ #gvs-corner-main-top-right .gvs-group-btnpanel .gvs-panel {
76
+ right: 50px;
77
+ left: unset;
78
+ top: 0;
79
+ bottom: unset;
80
+ }
81
+
82
+ #gvs-filter-search-user-panel {
83
+ top: 35px !important;
84
+ left: 0px !important;
85
+ right: unset !important;
86
+ bottom: unset !important;
87
+ }
88
+ }
89
+
90
+
91
+ /***********************************************
92
+ * Reusable styles
93
+ */
94
+
95
+ .gvs { font-family: sans-serif; }
96
+
97
+ .gvs-widget-bg {
98
+ border: 1px solid var(--widget-border-div);
99
+ border-radius: 5px;
100
+ background-color: var(--widget-bg);
101
+ color: var(--widget-font);
102
+ }
103
+
104
+ .gvs-mini .gvs-corner .gvs-widget-bg { box-shadow: none; }
105
+ .gvs-widget-bg a { color: var(--widget-font-btn-direct); }
106
+
107
+ .gvs-hidden,
108
+ .gvs-focus-map .gvs-only-psv,
109
+ .gvs-mini-hidden .gvs-only-mini,
110
+ .gvs:not(.gvs-mini-hidden) .gvs-only-mini-hidden,
111
+ .gvs:not(.gvs-focus-map) .gvs-only-map {
112
+ display: none !important;
113
+ }
114
+
115
+ .gvs-input-btn {
116
+ display: flex;
117
+ flex-direction: row;
118
+ width: 100%;
119
+ gap: 5px;
120
+ justify-content: space-between;
121
+ align-items: center;
122
+ flex-wrap: wrap;
123
+ }
124
+
125
+ span.gvs-input-btn {
126
+ display: inline-block;
127
+ width: unset;
128
+ vertical-align: middle;
129
+ }
130
+
131
+ .gvs-input-btn a,
132
+ .gvs-input-btn input[type=reset],
133
+ .gvs-input-btn button {
134
+ font-size: 0.9em;
135
+ flex-grow: 1;
136
+ flex-shrink: 1;
137
+ text-align: center;
138
+ background-color: var(--widget-bg-primary);
139
+ border: none;
140
+ padding: 5px;
141
+ font-weight: 600;
142
+ flex-basis: 30%;
143
+ line-height: 18px;
144
+ justify-content: center;
145
+ display: flex;
146
+ gap: 5px;
147
+ color: var(--widget-font-btn-direct);
148
+ border-radius: 8px;
149
+ cursor: pointer;
150
+ text-decoration: none;
151
+
152
+ display: flex;
153
+ align-items: center;
154
+ gap: 5px;
155
+ }
156
+
157
+ .gvs-input-btn input:not([type=reset]), .gvs-input-btn textarea {
158
+ font-size: 0.7em;
159
+ width: 100%;
160
+ font-family: 'Courier New', Courier, monospace;
161
+ }
162
+
163
+ .gvs textarea {
164
+ background-color: var(--widget-bg);
165
+ color: var(--widget-font);
166
+ border: 1px solid var(--widget-border-div);
167
+ border-radius: 10px;
168
+ padding: 5px;
169
+ width: 100%;
170
+ }
171
+
172
+ .gvs-input-btn textarea {
173
+ font-size: 0.8em;
174
+ height: 50px;
175
+ }
176
+
177
+ .gvs-input-btn button:not(:disabled):hover,
178
+ .gvs-input-btn input[type=reset]:hover,
179
+ .gvs-input-btn a.gvs-link-btn:hover {
180
+ background-color: var(--widget-bg-primary-hover);
181
+ }
182
+
183
+ .gvs-input-btn button.gvs-btn-active,
184
+ .gvs-input-btn button.gvs-btn-active:hover {
185
+ background-color: var(--widget-bg-active);
186
+ border-color: var(--widget-bg-active);
187
+ color: var(--widget-font-active);
188
+ }
189
+
190
+ .gvs-input-btn a svg,
191
+ .gvs-input-btn button svg {
192
+ height: 18px;
193
+ }
194
+
195
+ .gvs-input-group {
196
+ display: flex;
197
+ flex-direction: row;
198
+ align-items: center;
199
+ gap: 5px;
200
+ }
201
+
202
+ .gvs-input-range {
203
+ display: flex;
204
+ justify-content: space-between;
205
+ gap: 10px;
206
+ align-items: center;
207
+ width: 100%;
208
+ }
209
+
210
+
211
+ /* Group */
212
+ .gvs-group {
213
+ display: flex;
214
+ align-items: stretch;
215
+ align-content: stretch;
216
+ }
217
+
218
+ .gvs-group-vertical { flex-direction: column; }
219
+ .gvs-group-horizontal { flex-direction: row; }
220
+
221
+ .gvs-group.gvs-group-btnpanel {
222
+ display: block;
223
+ position: relative;
224
+ box-shadow: none;
225
+ }
226
+ .gvs-bottom.gvs-right .gvs-group.gvs-group-btnpanel { flex-direction: row-reverse; align-items: end; }
227
+ .gvs-top.gvs-left .gvs-group.gvs-group-btnpanel { flex-direction: column; align-items: start; }
228
+
229
+
230
+ /* Panel */
231
+ .gvs-panel {
232
+ position: absolute;
233
+ transition: opacity 0.2s;
234
+ padding: 15px;
235
+ z-index: 100;
236
+ width: 250px;
237
+ border-radius: 25px;
238
+ }
239
+
240
+ .gvs-panel.gvs-hidden {
241
+ opacity: 0;
242
+ display: block !important;
243
+ pointer-events: none;
244
+ }
245
+
246
+ .gvs-top.gvs-middle .gvs-panel { top: 44px; left: calc((100% - 300px)/2); right: calc((100% - 300px)/2); }
247
+ .gvs-top.gvs-left .gvs-panel { top: 65px; left: 0; }
248
+ .gvs-bottom.gvs-right .gvs-panel { bottom: 0; right: 65px; }
249
+
250
+
251
+ /* Button */
252
+ .gvs-btn {
253
+ min-width: 38px;
254
+ height: 38px;
255
+ cursor: pointer;
256
+ line-height: 38px;
257
+ font-weight: bold;
258
+ font-size: 1.3em;
259
+ text-align: center;
260
+ display: flex;
261
+ justify-content: center;
262
+ align-items: center;
263
+ }
264
+
265
+ a.gvs-btn { text-decoration: none; }
266
+
267
+ .gvs-btn.gvs-btn-large {
268
+ width: 56px;
269
+ height: 56px;
270
+ border-radius: 28px;
271
+ line-height: 56px;
272
+ }
273
+
274
+ .gvs-btn:not(:disabled):hover { background-color: var(--widget-bg-hover); }
275
+ .gvs-mini .gvs-corner .gvs-btn { border-radius: 10px; }
276
+ .gvs-btn:disabled { color: var(--widget-bg-inactive); }
277
+
278
+
279
+
280
+ /* Button in group */
281
+ .gvs-group { border-radius: 7px; }
282
+ .gvs-group.gvs-group-large { border-radius: 21px; }
283
+ .gvs-group:not(.gvs-group-btnpanel) .gvs-btn { box-shadow: none; }
284
+
285
+ .gvs-group.gvs-group-vertical .gvs-btn {
286
+ border-radius: 0px;
287
+ border-bottom-width: 0px;
288
+ border-top-width: 0px;
289
+ }
290
+
291
+ .gvs-group.gvs-group-vertical .gvs-btn:first-child {
292
+ border-top-right-radius: 7px;
293
+ border-top-left-radius: 7px;
294
+ border-top-width: 1px;
295
+ }
296
+
297
+ .gvs-group.gvs-group-vertical .gvs-btn:last-child {
298
+ border-bottom-right-radius: 7px;
299
+ border-bottom-left-radius: 7px;
300
+ border-bottom-width: 1px;
301
+ }
302
+
303
+ .gvs-group.gvs-group-horizontal .gvs-btn {
304
+ border-radius: 0px;
305
+ border-right-width: 0px;
306
+ border-left-width: 0px;
307
+ }
308
+
309
+ .gvs-group.gvs-group-horizontal .gvs-btn:first-child {
310
+ border-bottom-left-radius: 7px;
311
+ border-top-left-radius: 7px;
312
+ border-left-width: 1px;
313
+ }
314
+
315
+ .gvs-group.gvs-group-horizontal .gvs-btn:last-child {
316
+ border-bottom-right-radius: 7px;
317
+ border-top-right-radius: 7px;
318
+ border-right-width: 1px;
319
+ }
320
+
321
+
322
+ /* Expandable button */
323
+ .gvs-btn-expandable {
324
+ min-width: 40px;
325
+ height: 40px;
326
+ border-radius: 20px;
327
+ padding: 0 10px;
328
+ display: flex;
329
+ align-items: center;
330
+ gap: 8px;
331
+ font-weight: 400;
332
+ font-size: 16px;
333
+ }
334
+
335
+ .gvs-btn-expandable svg:last-child { transition: rotate 0.2s; }
336
+ .gvs-btn-expandable:has(+ .gvs-panel:not(.gvs-hidden)) svg:last-child:not(:first-child) { rotate: 180deg; }
337
+
338
+
339
+ /* Search bar */
340
+ .gvs-search-bar {
341
+ display: flex;
342
+ align-items: center;
343
+ justify-content: space-between;
344
+ height: 30px;
345
+ border-radius: 15px;
346
+ position: relative;
347
+ max-width: 100vw;
348
+ }
349
+
350
+ .gvs-search-bar input {
351
+ background: none;
352
+ border: none !important;
353
+ outline: none;
354
+ height: 20px;
355
+ width: calc(100% - 30px);
356
+ transition: width 0.2s ease-in-out;
357
+ }
358
+
359
+ .gvs-search-bar.gvs-search-bar-reducable {
360
+ max-width: 75vw;
361
+ padding-left: 10px;
362
+ padding-right: 4px;
363
+ }
364
+
365
+ .gvs-search-bar.gvs-search-bar-reducable.gvs-search-bar-reduced input {
366
+ width: 0px !important;
367
+ padding-left: 6px;
368
+ }
369
+
370
+ .gvs-search-bar.gvs-search-bar-reducable.gvs-search-bar-reduced input:not(:first-child) {
371
+ border-left: 1px solid var(--widget-border-div);
372
+ }
373
+
374
+ .gvs-search-bar-icon {
375
+ width: 14px;
376
+ margin-right: 10px;
377
+ text-align: center;
378
+ display: inline-block;
379
+ cursor: pointer;
380
+ }
381
+
382
+ .gvs-search-bar-icon svg { pointer-events: none; }
383
+
384
+ .gvs-search-bar-results {
385
+ position: absolute;
386
+ top: 35px;
387
+ list-style: none;
388
+ margin: 0;
389
+ padding: 0;
390
+ max-width: calc(100% - 20px);
391
+ }
392
+
393
+ .gvs-search-bar-result,
394
+ .gvs-search-empty {
395
+ display: block;
396
+ padding: 5px 15px;
397
+ white-space: nowrap;
398
+ overflow: hidden;
399
+ text-overflow: ellipsis;
400
+ cursor: pointer;
401
+ border-radius: 0;
402
+ }
403
+
404
+ .gvs-search-bar-result:hover {
405
+ background-color: var(--widget-bg-hover);
406
+ }
407
+
408
+ .gvs-search-bar-result:first-child {
409
+ border-top-right-radius: 25px;
410
+ border-top-left-radius: 25px;
411
+ padding-top: 15px;
412
+ }
413
+
414
+ .gvs-search-bar-result:last-child {
415
+ border-bottom-right-radius: 25px;
416
+ border-bottom-left-radius: 25px;
417
+ padding-bottom: 15px;
418
+ }
419
+
420
+
421
+ /* Inputs */
422
+ .gvs-panel select,
423
+ .gvs-panel input:not(.gvs-search-bar),
424
+ .gvs-popup select,
425
+ .gvs-popup input:not(.gvs-search-bar) {
426
+ background-color: var(--widget-bg);
427
+ color: var(--widget-font);
428
+ border: 1px solid var(--widget-border-div);
429
+ border-radius: 20px;
430
+ font-size: 16px;
431
+ padding: 2px 10px;
432
+ }
433
+
434
+ .gvs-popup form .gvs-input-group.gvs-input-group-inline {
435
+ margin-bottom: 10px;
436
+ }
437
+
438
+ .gvs-popup form .gvs-input-group.gvs-input-group-inline input {
439
+ padding: 0;
440
+ margin: 0 0 0 10px;
441
+ }
442
+
443
+ .gvs-popup form .gvs-input-group:not(.gvs-input-group-inline) {
444
+ flex-direction: column;
445
+ align-items: start;
446
+ margin: 0 0 10px 0;
447
+ }
448
+
449
+ .gvs-popup form .gvs-input-group:not(.gvs-input-group-inline) select,
450
+ .gvs-popup form .gvs-input-group:not(.gvs-input-group-inline) input {
451
+ width: 100%;
452
+ }
453
+
454
+ .gvs-popup form .gvs-input-group label svg {
455
+ margin-right: 5px;
456
+ }
457
+
458
+
459
+ /***********************************************
460
+ * Per-component styles
461
+ */
462
+
463
+ /* Legend */
464
+ #gvs-widget-legend {
465
+ display: block;
466
+ font-family: sans-serif;
467
+ padding: 5px 10px;
468
+ border-radius: 20px;
469
+ position: relative;
470
+ }
471
+
472
+ #gvs-widget-mini-legend {
473
+ padding: 2px 7px;
474
+ border-bottom-right-radius: 10px;
475
+ border-top-right-radius: 0px;
476
+ border-bottom-left-radius: 0px;
477
+ display: inline-block;
478
+ font-size: 0.8em;
479
+ margin-left: 10px;
480
+ }
481
+
482
+ #gvs-widget-mini-legend a,
483
+ #gvs-widget-legend a {
484
+ color: var(--widget-font-btn-indirect);
485
+ }
486
+
487
+
488
+ /* Expand/hide main legend */
489
+ #gvs-legend-toggle {
490
+ border-radius: 19px;
491
+ position: absolute;
492
+ right: -5px;
493
+ bottom: -5px;
494
+ visibility: visible;
495
+ box-shadow: 0px 0px 5px #0091EA;
496
+ }
497
+
498
+ /* Expand/Hide mini-widget buttons */
499
+ #gvs-mini-hide,
500
+ #gvs-mini-expand {
501
+ border-bottom-right-radius: 0px;
502
+ border-top-left-radius: 0px;
503
+ font-size: 12px;
504
+ font-weight: 400;
505
+ line-height: 18px;
506
+ color: var(--widget-font-btn-indirect);
507
+ }
508
+
509
+ #gvs-mini-expand {
510
+ width: unset;
511
+ text-decoration: underline;
512
+ padding: 0 8px;
513
+ }
514
+
515
+ #gvs-mini-hide img,
516
+ #gvs-mini-expand img {
517
+ width: 20px;
518
+ vertical-align: middle;
519
+ }
520
+
521
+ #gvs-mini-expand img {
522
+ margin-left: 5px;
523
+ }
524
+
525
+ @container (max-width: 576px) {
526
+ #gvs-corner-main-bottom-right {
527
+ padding-bottom: 100px;
528
+ }
529
+ #gvs-widget-legend {
530
+ position: absolute;
531
+ bottom: 10px;
532
+ padding-right: 40px;
533
+ margin-bottom: 5px;
534
+ margin-right: 5px;
535
+ max-width: 45vw;
536
+ }
537
+ .gvs-iframed #gvs-widget-legend {
538
+ width: 100%;
539
+ }
540
+ #gvs-mini-hide,
541
+ #gvs-mini-expand {
542
+ width: 32px;
543
+ height: 32px;
544
+ line-height: unset;
545
+ font-size: unset;
546
+ }
547
+
548
+ #gvs-mini-hide img,
549
+ #gvs-mini-expand img {
550
+ width: 18px;
551
+ }
552
+
553
+ #gvs-mini-expand img {
554
+ margin-left: 0;
555
+ visibility: visible;
556
+ }
557
+ }
558
+
559
+
560
+ /* Geocoder search bar */
561
+ #gvs-widget-search-bar {
562
+ height: 40px;
563
+ border-radius: 20px;
564
+ padding-left: 10px;
565
+ padding-right: 4px;
566
+ }
567
+
568
+ #gvs-widget-search-bar input {
569
+ font-size: 1.0em;
570
+ width: 310px;
571
+ max-width: calc(75vw - 60px);
572
+ }
573
+
574
+ #gvs-widget-search-bar .gvs-search-bar-results { top: 45px; }
575
+
576
+ #gvs-widget-search-bar .maplibregl-ctrl.maplibregl-ctrl-group {
577
+ box-shadow: none;
578
+ background: none;
579
+ margin-left: -5px;
580
+ }
581
+
582
+ #gvs-widget-search-bar button.maplibregl-ctrl-geolocate {
583
+ border-radius: 15px;
584
+ }
585
+
586
+
587
+ /* Filters */
588
+ #gvs-filter { margin-bottom: 5px; }
589
+ #gvs-filter-panel {
590
+ width: 350px;
591
+ max-width: 350px;
592
+ }
593
+ #gvs-filter-panel input[type=date] {
594
+ min-width: 0;
595
+ flex-grow: 2;
596
+ padding: 2px 0;
597
+ text-align: center;
598
+ }
599
+ #gvs-filter-camera-model, #gvs-filter-search-user { width: 100%; }
600
+ #gvs-filter-zoomin {
601
+ text-align: center;
602
+ font-weight: bold;
603
+ margin-bottom: 15px;
604
+ }
605
+
606
+
607
+ /* Map layers */
608
+ #gvs-map-bg {
609
+ justify-content: space-evenly;
610
+ margin: 10px 0 15px 0;
611
+ }
612
+ #gvs-map-bg input { display: none; }
613
+ #gvs-map-bg label { cursor: pointer; }
614
+
615
+ #gvs-map-bg img {
616
+ width: 44px;
617
+ border-radius: 5px;
618
+ vertical-align: middle;
619
+ margin-right: 5px;
620
+ border: 2px solid var(--widget-bg);
621
+ }
622
+
623
+ #gvs-map-bg input:checked + label img {
624
+ outline: 3px solid var(--widget-border-btn);
625
+ }
626
+
627
+ #gvs-map-layers { margin-bottom: 5px; }
628
+ #gvs-map-layers-panel { right: 0; }
629
+
630
+ .gvs-map-theme-legend {
631
+ display: flex;
632
+ flex-wrap: wrap;
633
+ margin-top: 5px;
634
+ justify-content: space-evenly;
635
+ }
636
+
637
+ .gvs-map-theme-legend .gvs-map-theme-legend-entry {
638
+ margin: 10px 8px 5px 0px;
639
+ line-height: 12px;
640
+ display: flex;
641
+ align-items: center;
642
+ font-size: 1.0em;
643
+ }
644
+
645
+ .gvs-map-theme-color {
646
+ display: inline-block;
647
+ width: 15px;
648
+ height: 15px;
649
+ border-radius: 3px;
650
+ margin-right: 5px;
651
+ }
652
+
653
+
654
+ /* Player */
655
+ #gvs-widget-player { justify-content: center; }
656
+ #gvs-player-prev,
657
+ #gvs-player-play,
658
+ #gvs-player-next {
659
+ color: var(--widget-font-btn-direct);
660
+ }
661
+
662
+ #gvs-player-prev:disabled,
663
+ #gvs-player-play:disabled,
664
+ #gvs-player-next:disabled {
665
+ color: var(--widget-font-btn-inactive);
666
+ }
667
+
668
+ #gvs-player-more-panel {
669
+ display: flex;
670
+ top: 56px;
671
+ }
672
+
673
+ .gvs-player-options {
674
+ width: 280px;
675
+ }
676
+
677
+ .gvs-player-options.gvs-hidden {
678
+ display: flex !important;
679
+ }
680
+
681
+ #gvs-player-contrast {
682
+ margin-left: 10px;
683
+ display: inline-block;
684
+ padding: 2px 7px;
685
+ background: none;
686
+ border: 1px solid var(--widget-border-btn);
687
+ border-radius: 8px;
688
+ color: var(--widget-font-btn-direct);
689
+ cursor: pointer;
690
+ font-size: 1em;
691
+ text-decoration: none;
692
+ }
693
+
694
+ #gvs-player-contrast.gvs-btn-active {
695
+ background-color: var(--widget-bg-active);
696
+ border-color: var(--widget-bg-active);
697
+ color: var(--widget-font-active);
698
+ }
699
+
700
+
701
+ /* Share panel */
702
+ #gvs-share-panel {
703
+ right: 66px;
704
+ bottom: 0px;
705
+ }
706
+
707
+
708
+ /* Zoom */
709
+ #gvs-widget-zoom button {
710
+ color: var(--widget-font-btn-direct);
711
+ }