@panoramax/web-viewer 3.2.3-develop-d7e5a16d → 3.2.3-develop-6257391e

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 (221) hide show
  1. package/.gitlab-ci.yml +3 -0
  2. package/CHANGELOG.md +19 -0
  3. package/CODE_OF_CONDUCT.md +1 -1
  4. package/README.md +1 -1
  5. package/build/editor.html +10 -1
  6. package/build/index.css +2 -2
  7. package/build/index.css.map +1 -1
  8. package/build/index.html +1 -1
  9. package/build/index.js +1682 -5
  10. package/build/index.js.map +1 -1
  11. package/build/map.html +1 -1
  12. package/build/viewer.html +10 -1
  13. package/build/widgets.html +1 -0
  14. package/config/jest/mocks.js +172 -0
  15. package/config/paths.js +1 -0
  16. package/config/webpack.config.js +26 -0
  17. package/docs/03_URL_settings.md +3 -11
  18. package/docs/05_Compatibility.md +59 -76
  19. package/docs/09_Develop.md +30 -11
  20. package/docs/90_Releases.md +2 -2
  21. package/docs/images/class_diagram.drawio +28 -28
  22. package/docs/images/class_diagram.jpg +0 -0
  23. package/docs/index.md +112 -0
  24. package/docs/reference/components/core/Basic.md +153 -0
  25. package/docs/reference/components/core/CoverageMap.md +160 -0
  26. package/docs/reference/components/core/Editor.md +172 -0
  27. package/docs/reference/components/core/Viewer.md +288 -0
  28. package/docs/reference/components/layout/CorneredGrid.md +29 -0
  29. package/docs/reference/components/layout/Mini.md +45 -0
  30. package/docs/reference/components/menus/MapBackground.md +32 -0
  31. package/docs/reference/components/menus/MapFilters.md +15 -0
  32. package/docs/reference/components/menus/MapLayers.md +15 -0
  33. package/docs/reference/components/menus/MapLegend.md +15 -0
  34. package/docs/reference/components/menus/PictureLegend.md +15 -0
  35. package/docs/reference/components/menus/PictureMetadata.md +15 -0
  36. package/docs/reference/components/menus/PlayerOptions.md +15 -0
  37. package/docs/reference/components/menus/QualityScoreDoc.md +15 -0
  38. package/docs/reference/components/menus/ReportForm.md +15 -0
  39. package/docs/reference/components/menus/ShareMenu.md +15 -0
  40. package/docs/reference/components/ui/Button.md +39 -0
  41. package/docs/reference/components/ui/ButtonGroup.md +36 -0
  42. package/docs/reference/components/ui/CopyButton.md +35 -0
  43. package/docs/reference/components/ui/Grade.md +32 -0
  44. package/docs/reference/components/ui/LinkButton.md +44 -0
  45. package/docs/reference/components/ui/Loader.md +54 -0
  46. package/docs/reference/components/ui/Map.md +214 -0
  47. package/docs/reference/components/ui/MapMore.md +233 -0
  48. package/docs/reference/components/ui/Photo.md +369 -0
  49. package/docs/reference/components/ui/Popup.md +56 -0
  50. package/docs/reference/components/ui/QualityScore.md +45 -0
  51. package/docs/reference/components/ui/SearchBar.md +63 -0
  52. package/docs/reference/components/ui/TogglableGroup.md +39 -0
  53. package/docs/reference/components/ui/widgets/GeoSearch.md +32 -0
  54. package/docs/reference/components/ui/widgets/Legend.md +32 -0
  55. package/docs/reference/components/ui/widgets/MapFiltersButton.md +33 -0
  56. package/docs/reference/components/ui/widgets/MapLayersButton.md +15 -0
  57. package/docs/reference/components/ui/widgets/Player.md +32 -0
  58. package/docs/reference/components/ui/widgets/Share.md +15 -0
  59. package/docs/reference/components/ui/widgets/Zoom.md +15 -0
  60. package/docs/reference/utils/API.md +311 -0
  61. package/docs/reference/utils/InitParameters.md +67 -0
  62. package/docs/reference/utils/URLHandler.md +102 -0
  63. package/docs/reference.md +73 -0
  64. package/docs/shortcuts.md +11 -0
  65. package/docs/tutorials/aerial_imagery.md +19 -0
  66. package/docs/tutorials/authentication.md +10 -0
  67. package/docs/tutorials/custom_widgets.md +64 -0
  68. package/docs/tutorials/map_style.md +27 -0
  69. package/docs/tutorials/migrate_v4.md +122 -0
  70. package/docs/tutorials/synced_coverage.md +42 -0
  71. package/mkdocs.yml +60 -5
  72. package/package.json +10 -7
  73. package/public/editor.html +21 -29
  74. package/public/index.html +3 -3
  75. package/public/map.html +19 -18
  76. package/public/viewer.html +18 -24
  77. package/public/widgets.html +265 -0
  78. package/scripts/doc.js +77 -0
  79. package/src/components/core/Basic.css +44 -0
  80. package/src/components/core/Basic.js +258 -0
  81. package/src/components/core/CoverageMap.css +9 -0
  82. package/src/components/core/CoverageMap.js +105 -0
  83. package/src/components/core/Editor.css +23 -0
  84. package/src/components/core/Editor.js +354 -0
  85. package/src/components/core/Viewer.css +109 -0
  86. package/src/components/core/Viewer.js +707 -0
  87. package/src/components/core/index.js +11 -0
  88. package/src/components/index.js +13 -0
  89. package/src/components/layout/CorneredGrid.js +109 -0
  90. package/src/components/layout/Mini.js +117 -0
  91. package/src/components/layout/index.js +7 -0
  92. package/src/components/menus/MapBackground.js +106 -0
  93. package/src/components/menus/MapFilters.js +386 -0
  94. package/src/components/menus/MapLayers.js +143 -0
  95. package/src/components/menus/MapLegend.js +54 -0
  96. package/src/components/menus/PictureLegend.js +103 -0
  97. package/src/components/menus/PictureMetadata.js +188 -0
  98. package/src/components/menus/PlayerOptions.js +96 -0
  99. package/src/components/menus/QualityScoreDoc.js +36 -0
  100. package/src/components/menus/ReportForm.js +133 -0
  101. package/src/components/menus/Share.js +228 -0
  102. package/src/components/menus/index.js +15 -0
  103. package/src/components/styles.js +365 -0
  104. package/src/components/ui/Button.js +75 -0
  105. package/src/components/ui/ButtonGroup.css +49 -0
  106. package/src/components/ui/ButtonGroup.js +68 -0
  107. package/src/components/ui/CopyButton.js +71 -0
  108. package/src/components/ui/Grade.js +54 -0
  109. package/src/components/ui/LinkButton.js +68 -0
  110. package/src/components/ui/Loader.js +188 -0
  111. package/src/components/{Map.css → ui/Map.css} +5 -17
  112. package/src/components/{Map.js → ui/Map.js} +114 -138
  113. package/src/components/ui/MapMore.js +324 -0
  114. package/src/components/{Photo.css → ui/Photo.css} +6 -6
  115. package/src/components/{Photo.js → ui/Photo.js} +279 -90
  116. package/src/components/ui/Popup.js +145 -0
  117. package/src/components/ui/QualityScore.js +152 -0
  118. package/src/components/ui/SearchBar.js +363 -0
  119. package/src/components/ui/TogglableGroup.js +162 -0
  120. package/src/components/ui/index.js +20 -0
  121. package/src/components/ui/widgets/GeoSearch.css +21 -0
  122. package/src/components/ui/widgets/GeoSearch.js +139 -0
  123. package/src/components/ui/widgets/Legend.js +51 -0
  124. package/src/components/ui/widgets/MapFiltersButton.js +104 -0
  125. package/src/components/ui/widgets/MapLayersButton.js +79 -0
  126. package/src/components/ui/widgets/Player.css +7 -0
  127. package/src/components/ui/widgets/Player.js +148 -0
  128. package/src/components/ui/widgets/Share.js +30 -0
  129. package/src/components/ui/widgets/Zoom.js +82 -0
  130. package/src/components/ui/widgets/index.js +12 -0
  131. package/src/img/panoramax.svg +13 -0
  132. package/src/img/switch_big.svg +20 -10
  133. package/src/index.js +6 -9
  134. package/src/translations/da.json +1 -1
  135. package/src/translations/de.json +1 -1
  136. package/src/translations/en.json +5 -3
  137. package/src/translations/eo.json +1 -1
  138. package/src/translations/es.json +1 -1
  139. package/src/translations/fr.json +5 -3
  140. package/src/translations/hu.json +1 -1
  141. package/src/translations/it.json +1 -1
  142. package/src/translations/ja.json +1 -1
  143. package/src/translations/nl.json +1 -1
  144. package/src/translations/pl.json +1 -1
  145. package/src/translations/sv.json +1 -1
  146. package/src/translations/zh_Hant.json +1 -1
  147. package/src/utils/API.js +74 -42
  148. package/src/utils/InitParameters.js +354 -0
  149. package/src/utils/URLHandler.js +364 -0
  150. package/src/utils/geocoder.js +116 -0
  151. package/src/utils/{I18n.js → i18n.js} +3 -1
  152. package/src/utils/index.js +11 -0
  153. package/src/utils/{Map.js → map.js} +216 -80
  154. package/src/utils/picture.js +433 -0
  155. package/src/utils/utils.js +315 -0
  156. package/src/utils/widgets.js +93 -0
  157. package/tests/components/ui/CopyButton.test.js +52 -0
  158. package/tests/components/ui/Loader.test.js +54 -0
  159. package/tests/components/{Map.test.js → ui/Map.test.js} +19 -61
  160. package/tests/components/{Photo.test.js → ui/Photo.test.js} +89 -57
  161. package/tests/components/ui/Popup.test.js +24 -0
  162. package/tests/components/ui/QualityScore.test.js +17 -0
  163. package/tests/components/ui/SearchBar.test.js +107 -0
  164. package/tests/components/ui/__snapshots__/CopyButton.test.js.snap +34 -0
  165. package/tests/components/ui/__snapshots__/Loader.test.js.snap +56 -0
  166. package/tests/components/{__snapshots__ → ui/__snapshots__}/Map.test.js.snap +11 -38
  167. package/tests/components/{__snapshots__ → ui/__snapshots__}/Photo.test.js.snap +57 -4
  168. package/tests/components/ui/__snapshots__/Popup.test.js.snap +29 -0
  169. package/tests/components/ui/__snapshots__/QualityScore.test.js.snap +11 -0
  170. package/tests/components/ui/__snapshots__/SearchBar.test.js.snap +65 -0
  171. package/tests/utils/API.test.js +1 -14
  172. package/tests/utils/InitParameters.test.js +485 -0
  173. package/tests/utils/URLHandler.test.js +350 -0
  174. package/tests/utils/__snapshots__/URLHandler.test.js.snap +21 -0
  175. package/tests/utils/__snapshots__/picture.test.js.snap +315 -0
  176. package/tests/utils/__snapshots__/widgets.test.js.snap +19 -0
  177. package/tests/utils/geocoder.test.js +37 -0
  178. package/tests/utils/{I18n.test.js → i18n.test.js} +1 -1
  179. package/tests/utils/map.test.js +67 -0
  180. package/tests/utils/picture.test.js +745 -0
  181. package/tests/utils/utils.test.js +288 -0
  182. package/tests/utils/widgets.test.js +90 -0
  183. package/docs/01_Start.md +0 -149
  184. package/docs/02_Usage.md +0 -831
  185. package/docs/04_Advanced_examples.md +0 -216
  186. package/src/Editor.css +0 -37
  187. package/src/Editor.js +0 -361
  188. package/src/StandaloneMap.js +0 -114
  189. package/src/Viewer.css +0 -203
  190. package/src/Viewer.js +0 -1246
  191. package/src/components/CoreView.css +0 -70
  192. package/src/components/CoreView.js +0 -175
  193. package/src/components/Loader.css +0 -74
  194. package/src/components/Loader.js +0 -120
  195. package/src/utils/Exif.js +0 -193
  196. package/src/utils/Utils.js +0 -631
  197. package/src/utils/Widgets.js +0 -562
  198. package/src/viewer/URLHash.js +0 -469
  199. package/src/viewer/Widgets.css +0 -880
  200. package/src/viewer/Widgets.js +0 -1470
  201. package/tests/Editor.test.js +0 -126
  202. package/tests/StandaloneMap.test.js +0 -45
  203. package/tests/Viewer.test.js +0 -366
  204. package/tests/__snapshots__/Editor.test.js.snap +0 -298
  205. package/tests/__snapshots__/StandaloneMap.test.js.snap +0 -30
  206. package/tests/__snapshots__/Viewer.test.js.snap +0 -195
  207. package/tests/components/CoreView.test.js +0 -92
  208. package/tests/components/Loader.test.js +0 -38
  209. package/tests/components/__snapshots__/Loader.test.js.snap +0 -15
  210. package/tests/utils/Exif.test.js +0 -124
  211. package/tests/utils/Map.test.js +0 -113
  212. package/tests/utils/Utils.test.js +0 -300
  213. package/tests/utils/Widgets.test.js +0 -107
  214. package/tests/utils/__snapshots__/Exif.test.js.snap +0 -43
  215. package/tests/utils/__snapshots__/Utils.test.js.snap +0 -41
  216. package/tests/utils/__snapshots__/Widgets.test.js.snap +0 -44
  217. package/tests/viewer/URLHash.test.js +0 -559
  218. package/tests/viewer/Widgets.test.js +0 -127
  219. package/tests/viewer/__snapshots__/URLHash.test.js.snap +0 -108
  220. package/tests/viewer/__snapshots__/Widgets.test.js.snap +0 -403
  221. /package/tests/utils/__snapshots__/{Map.test.js.snap → geocoder.test.js.snap} +0 -0
@@ -1,114 +0,0 @@
1
- import CoreView from "./components/CoreView";
2
- import Map from "./components/Map";
3
- import { getUserLayerId } from "./utils/Map";
4
- import { NavigationControl } from "!maplibre-gl"; // DO NOT REMOVE THE "!": bundled builds breaks otherwise !!!
5
-
6
- /**
7
- * The standalone map viewer allows to see STAC pictures data as a map.
8
- * It only embeds a map (no 360° pictures viewer) with a minimal picture preview (thumbnail).
9
- *
10
- * Note that you can use any of the [CoreView](#CoreView) class functions as well.
11
- *
12
- * @param {string|Element} container The DOM element to create viewer into
13
- * @param {string} endpoint URL to API to use (must be a [STAC API](https://github.com/radiantearth/stac-api-spec/blob/main/overview.md))
14
- * @param {object} [options] Map options. Various settings can be passed, either the ones defined here, or any of [MapLibre GL settings](https://maplibre.org/maplibre-gl-js-docs/api/map/#map-parameters).
15
- * @param {string} [options.selectedSequence] The ID of sequence to highlight on load (defaults to none)
16
- * @param {string} [options.selectedPicture] The ID of picture to highlight on load (defaults to none)
17
- * @param {object} [options.fetchOptions=null] Set custom options for fetch calls made against API ([same syntax as fetch options parameter](https://developer.mozilla.org/en-US/docs/Web/API/fetch#parameters))
18
- * @param {number} [options.minZoom=0] The minimum zoom level of the map (0-24).
19
- * @param {number} [options.maxZoom=24] The maximum zoom level of the map (0-24).
20
- * @param {string|object} [options.style] The map's MapLibre style. This can be an a JSON object conforming to the schema described in the [MapLibre Style Specification](https://maplibre.org/maplibre-gl-js-docs/style-spec/), or a URL string pointing to one.
21
- * @param {external:maplibre-gl.LngLatLike} [options.center=[0, 0]] The initial geographical centerpoint of the map. If `center` is not specified in the constructor options, MapLibre GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `[0, 0]` Note: MapLibre GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON.
22
- * @param {number} [options.zoom=0] The initial zoom level of the map. If `zoom` is not specified in the constructor options, MapLibre GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`.
23
- * @param {external:maplibre-gl.LngLatBoundsLike} [options.bounds] The initial bounds of the map. If `bounds` is specified, it overrides `center` and `zoom` constructor options.
24
- * @param {string[]} [options.users] The IDs of users whom data should appear on map (defaults to all)
25
- *
26
- * @property {Map} map The map widget
27
- */
28
- class StandaloneMap extends CoreView {
29
- constructor(container, endpoint, options = {}) {
30
- super(container, endpoint, options);
31
-
32
- this.mapContainer = document.createElement("div");
33
- this.container.appendChild(this.mapContainer);
34
-
35
- // Init API
36
- this._api.onceReady().then(() => this._initMap());
37
-
38
- // Events handlers
39
- this.addEventListener("map:picture-click", e => this.select(e.detail.seqId, e.detail.picId));
40
- this.addEventListener("map:sequence-click", e => this.select(e.detail.seqId));
41
- this.addEventListener("select", this._onSelect.bind(this));
42
- }
43
-
44
- getClassName() {
45
- return "Map";
46
- }
47
-
48
- /**
49
- * Ends all form of life in this object.
50
- *
51
- * This is useful for Single Page Applications (SPA), to remove various event listeners.
52
- */
53
- destroy() {
54
- super.destroy();
55
-
56
- // Delete sub-components
57
- this.map.destroy();
58
- delete this.map;
59
-
60
- // Clean-up DOM
61
- this.mapContainer.remove();
62
- this.container.innerHTML = "";
63
- this.container.classList.remove(...[...this.container.classList].filter(c => c.startsWith("gvs")));
64
- }
65
-
66
- /**
67
- * Creates map object
68
- * @private
69
- */
70
- _initMap() {
71
- this._options.hash = true;
72
-
73
- // Override to avoid display of pictures symbols
74
- class MyMap extends Map {
75
- _getLayerStyleProperties(layer) {
76
- if(layer === "pictures_symbols") {
77
- return { layout: { visibility: "none" } };
78
- }
79
- else {
80
- return super._getLayerStyleProperties(layer);
81
- }
82
- }
83
- }
84
-
85
- this.map = new MyMap(this, this.mapContainer, this._options);
86
- this.map.addControl(new NavigationControl({ showCompass: false }));
87
- this.map.waitForEnoughMapLoaded().then(() => {
88
- this.map.reloadLayersStyles();
89
- this._loader.dismiss();
90
- });
91
- }
92
-
93
- /**
94
- * Select event handler
95
- * @private
96
- * @param {object} e Event details
97
- */
98
- _onSelect(e) {
99
- // Move thumbnail to match selected element
100
- if(e.detail.picId || e.detail.seqId) {
101
- const layer = e.detail.picId ? "pictures" : "sequences";
102
- const features = this.map.queryRenderedFeatures({
103
- layers: [...this.map._userLayers].map(l => getUserLayerId(l, layer)),
104
- filter: ["==", ["get", "id"], e.detail.picId || e.detail.seqId]
105
- });
106
-
107
- if(features.length >= 0 && features[0] != null) {
108
- this.map._attachPreviewToPictures({ features }, layer);
109
- }
110
- }
111
- }
112
- }
113
-
114
- export default StandaloneMap;
package/src/Viewer.css DELETED
@@ -1,203 +0,0 @@
1
- /*
2
- * Sizing of elements
3
- */
4
-
5
- /* Focused element */
6
- .gvs-viewer .gvs-main
7
- {
8
- position: relative;
9
- width: 100%;
10
- height: 100%;
11
- z-index: 0;
12
- }
13
-
14
- .gvs-viewer .gvs-main {
15
- display: flex;
16
- flex-direction: column;
17
- }
18
-
19
- /* Non-focused element */
20
- .gvs-viewer .gvs-mini
21
- {
22
- position: absolute;
23
- top: unset;
24
- bottom: 10px;
25
- left: 10px;
26
- height: 30%;
27
- min-height: 232px;
28
- aspect-ratio: 1 / 1;
29
- z-index: 1;
30
- }
31
-
32
- .gvs.gvs-viewer:not(.gvs-has-mini) .gvs-mini,
33
- .gvs.gvs-viewer.gvs-mini-hidden .gvs-mini {
34
- display: none;
35
- }
36
-
37
- @container (max-width: 576px) { /* Special rule for small containers */
38
- .gvs-viewer .gvs-mini {
39
- max-width: 166px;
40
- max-height: 110px;
41
- min-height: unset;
42
- width: 50%;
43
- height: 30%;
44
- }
45
- }
46
-
47
- .gvs-viewer .gvs-map.maplibregl-map {
48
- position: absolute;
49
- top: 0;
50
- right: 0;
51
- left: 0;
52
- bottom: 0;
53
- }
54
-
55
- /* PSV fulfilling its parent */
56
- .gvs-viewer .gvs-psv,
57
- .gvs-viewer .gvs-popup {
58
- position: absolute;
59
- top: 0;
60
- right: 0;
61
- left: 0;
62
- bottom: 0;
63
- }
64
-
65
-
66
- /*
67
- * Styling
68
- */
69
-
70
-
71
- /* Non-focused element */
72
- .gvs-viewer .gvs-mini,
73
- .gvs-viewer .gvs-mini .psv-container,
74
- .gvs-viewer .gvs-mini .gvs-map
75
- {
76
- border-radius: 10px;
77
- }
78
-
79
- /* PSV under widgets */
80
- .gvs-viewer .psv-container {
81
- z-index: 0;
82
- }
83
-
84
- /* No PSV loader */
85
- .gvs-viewer .psv-loader {
86
- display: none;
87
- }
88
-
89
- /* Overlay under navbar */
90
- .gvs-viewer .psv-overlay {
91
- z-index: 89;
92
- }
93
-
94
- /* Popup */
95
- .gvs-viewer .gvs-popup {
96
- display: flex;
97
- justify-content: center;
98
- align-items: center;
99
- transition: opacity 0.1s;
100
- z-index: 10;
101
- visibility: visible;
102
- opacity: 1;
103
- }
104
-
105
- .gvs-viewer .gvs-popup.gvs-hidden {
106
- display: flex !important;
107
- opacity: 0;
108
- visibility: hidden;
109
- }
110
-
111
- .gvs-viewer .gvs-popup-backdrop {
112
- position: absolute;
113
- background: rgba(0, 0, 0, 0.85);
114
- top: 0;
115
- bottom: 0;
116
- right: 0;
117
- left: 0;
118
- z-index: 10;
119
- }
120
-
121
- .gvs-viewer .gvs-popup div.gvs-widget-bg {
122
- max-width: 90%;
123
- max-height: 90%;
124
- position: absolute;
125
- padding: 15px;
126
- z-index: 10;
127
- border-radius: 25px;
128
- overflow-y: auto;
129
- }
130
-
131
- .gvs-viewer #gvs-popup-btn-close {
132
- position: absolute;
133
- top: 15px;
134
- right: 15px;
135
- width: 24px;
136
- min-width: unset;
137
- height: 24px;
138
- border-radius: 12px;
139
- }
140
-
141
- .gvs-viewer .gvs-popup table {
142
- border-collapse: collapse;
143
- font-size: 0.9rem;
144
- width: 100%;
145
- }
146
-
147
- .gvs-viewer .gvs-popup thead {
148
- background-color: var(--blue-pale);
149
- }
150
-
151
- .gvs-viewer .gvs-popup th[scope="row"] {
152
- text-align: left;
153
- }
154
-
155
- .gvs-viewer .gvs-popup th, .gvs-popup td {
156
- border: 1px solid var(--grey-semi-dark);
157
- padding: 8px 10px;
158
- max-width: 600px;
159
- }
160
-
161
- .gvs-viewer .gvs-popup .gvs-table-light th[scope="row"] {
162
- width: 30%;
163
- }
164
-
165
- .gvs-viewer .gvs-popup .gvs-table-light th,
166
- .gvs-viewer .gvs-popup .gvs-table-light td {
167
- border: none;
168
- padding: 5px 10px;
169
- text-align: left;
170
- }
171
-
172
- .gvs-viewer .gvs-popup .gvs-table-light .gvs-td-with-id {
173
- display: flex;
174
- justify-content: space-between;
175
- align-items: center;
176
- }
177
-
178
- .gvs-viewer .gvs-popup table:not(.gvs-table-light) td:last-of-type {
179
- text-align: center;
180
- }
181
-
182
- .gvs-viewer .gvs-popup table:not(.gvs-table-light) tbody > tr:nth-of-type(even) {
183
- background-color: var(--grey);
184
- }
185
-
186
- .gvs-viewer .gvs-popup details summary {
187
- font-size: 1.0em;
188
- line-height: 1.0em;
189
- font-weight: 500;
190
- margin: 15px 0;
191
- cursor: pointer;
192
- }
193
-
194
- .gvs-viewer .gvs-popup details summary svg {
195
- height: 18px;
196
- vertical-align: sub;
197
- margin-right: 2px;
198
- }
199
-
200
- .gvs-viewer .gvs-metadata-actions {
201
- justify-content: center;
202
- font-size: 0.9rem;
203
- }