@abi-software/scaffoldvuer 1.1.0-beta.0 → 1.1.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abi-software/scaffoldvuer",
3
- "version": "1.1.0-beta.0",
3
+ "version": "1.1.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -41,7 +41,7 @@
41
41
  "*.js"
42
42
  ],
43
43
  "dependencies": {
44
- "@abi-software/flatmapvuer": "^1.1.0-beta.2",
44
+ "@abi-software/flatmapvuer": "^1.1.0",
45
45
  "@abi-software/sparc-annotation": "^0.3.1",
46
46
  "@abi-software/svg-sprite": "^1.0.0",
47
47
  "@element-plus/icons-vue": "^2.3.1",
@@ -55,7 +55,7 @@
55
55
  "vue": "^3.4.15",
56
56
  "vue-router": "^4.2.5",
57
57
  "vue3-component-svg-sprite": "^0.0.1",
58
- "zincjs": "^1.5.1-beta.6"
58
+ "zincjs": "^1.6.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@vitejs/plugin-vue": "^4.6.2",
package/src/App.vue CHANGED
@@ -2,15 +2,50 @@
2
2
  <div id="app">
3
3
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Asap:400,400i,500,600,700&display=swap" />
4
4
  <drop-zone ref="dropzone" @files-drop="onFilesDrop">
5
- <ScaffoldVuer v-if="url" ref="scaffold" class="vuer" :flatmapAPI="flatmapAPI" :display-u-i="displayUI" :url="url"
6
- :help-mode="helpMode" :display-latest-changes="true" :display-minimap="displayMinimap"
7
- :display-markers="displayMarkers" :enableOpenMapUI="true" :minimap-settings="minimapSettings"
8
- :show-colour-picker="showColourPicker" :render="render" :region="region" :view-u-r-l="viewURL" :format="format"
9
- :marker-labels="markerLabels" @open-map="openMap" @on-ready="onReady" @scaffold-selected="onSelected"
10
- @scaffold-navigated="onNavigated" @timeChanged="updateCurrentTime" @zinc-object-added="objectAdded"
11
- @vue:mounted="viewerMounted"/>
5
+ <ScaffoldVuer
6
+ v-if="url"
7
+ ref="scaffold"
8
+ class="vuer"
9
+ :flatmapAPI="flatmapAPI"
10
+ :display-u-i="displayUI"
11
+ :url="url"
12
+ :help-mode="helpMode"
13
+ :helpModeDialog="useHelpModeDialog"
14
+ :helpModeActiveItem="helpModeActiveItem"
15
+ @help-mode-last-item="onHelpModeLastItem"
16
+ @shown-tooltip="onTooltipShown"
17
+ @shown-map-tooltip="onMapTooltipShown"
18
+ :display-latest-changes="true"
19
+ :display-minimap="displayMinimap"
20
+ :display-markers="displayMarkers"
21
+ :enableOpenMapUI="true"
22
+ :marker-cluster="markerCluster"
23
+ :minimap-settings="minimapSettings"
24
+ :show-colour-picker="showColourPicker"
25
+ :render="render"
26
+ :region="region"
27
+ :view-u-r-l="viewURL"
28
+ :format="format"
29
+ :marker-labels="markerLabels"
30
+ @open-map="openMap"
31
+ @on-ready="onReady"
32
+ @scaffold-selected="onSelected"
33
+ @scaffold-navigated="onNavigated"
34
+ @timeChanged="updateCurrentTime"
35
+ @zinc-object-added="objectAdded"
36
+ @vue:mounted="viewerMounted"
37
+ />
12
38
  </drop-zone>
13
39
 
40
+ <HelpModeDialog
41
+ v-if="helpMode && useHelpModeDialog"
42
+ ref="scaffoldHelp"
43
+ :scaffoldRef="scaffoldRef"
44
+ :lastItem="helpModeLastItem"
45
+ @show-next="onHelpModeShowNext"
46
+ @finish-help-mode="onFinishHelpMode"
47
+ />
48
+
14
49
  <el-popover popper-class="options-container" placement="bottom" trigger="click" width="500" :teleported="false">
15
50
  <div>
16
51
  <el-row :gutter="20">
@@ -22,13 +57,17 @@
22
57
  </p>
23
58
  </el-row>
24
59
  <el-row :gutter="20">
25
- <el-col :span="4" :offset="1">
60
+ <el-col :span="3" :offset="1">
26
61
  <el-switch v-model="displayUI" active-text="UI" />
27
62
  </el-col>
28
- <el-col :span="6" :offset="1">
63
+ <el-col :span="4" :offset="1">
29
64
  <el-switch v-model="displayMarkers" active-text="Markers" active-icon-class="el-icon-location"
30
65
  active-color="#8300bf" />
31
66
  </el-col>
67
+ <el-col :span="6" :offset="1">
68
+ <el-switch v-model="markerCluster" active-text="Marker Cluster" active-icon-class="el-icon-location"
69
+ active-color="#8300bf" />
70
+ </el-col>
32
71
  <el-col :span="4" :offset="1">
33
72
  <el-switch v-model="displayMinimap" active-text="Minimap" active-icon-class="el-icon-discover"
34
73
  active-color="#8300bf" />
@@ -180,6 +219,7 @@ import {
180
219
  ElSwitch as Switch,
181
220
  } from "element-plus";
182
221
  import { useRoute, useRouter } from 'vue-router'
222
+ import HelpModeDialog from './components/HelpModeDialog.vue';
183
223
 
184
224
  let texture_prefix = undefined;
185
225
 
@@ -200,9 +240,12 @@ export default {
200
240
  DropZone,
201
241
  ScaffoldVuer,
202
242
  ModelsTable,
243
+ HelpModeDialog,
203
244
  },
204
245
  data: function () {
205
246
  return {
247
+ consoleOn: true,
248
+ createPoints: false,
206
249
  url: undefined,
207
250
  input: undefined,
208
251
  displayUI: true,
@@ -217,6 +260,7 @@ export default {
217
260
  tumbleOn: false,
218
261
  tumbleDirection: [1.0, 0.0],
219
262
  showColourPicker: true,
263
+ markerCluster: false,
220
264
  minimapSettings: {
221
265
  x_offset: 16,
222
266
  y_offset: 50,
@@ -224,7 +268,57 @@ export default {
224
268
  height: 128,
225
269
  align: "top-right",
226
270
  },
227
- markerLabels: ["left atrium", "epicardium"],
271
+ markerLabels: [
272
+ "Spinal cord",
273
+ "urinary bladder",
274
+ "lower urinary tract",
275
+ "Peripheral nervous system",
276
+ "Dorsal root ganglion",
277
+ "cervicothoracic ganglion",
278
+ "stomach",
279
+ "enteric ganglion",
280
+ "myenteric nerve plexus",
281
+ "colon",
282
+ "Enteric Nervous System",
283
+ "pelvic ganglion",
284
+ "celiac ganglion",
285
+ "jugular ganglion",
286
+ "vagus nerve",
287
+ "Brainstem",
288
+ "heart",
289
+ "larynx",
290
+ "inferior vagus X ganglion",
291
+ "mucosa of stomach",
292
+ "lung",
293
+ "pelvic splanchnic nerve",
294
+ "small intestine",
295
+ "type EC enteroendocrine cell",
296
+ "body proper",
297
+ "skin epidermis",
298
+ "Diaphragm",
299
+ "sinus venosus",
300
+ "esophagus",
301
+ "Solitary nucleus",
302
+ "urethra",
303
+ "sympathetic nervous system",
304
+ "superior cervical ganglion",
305
+ "cardiac nerve plexus",
306
+ "ganglion",
307
+ "pancreas",
308
+ "Brain",
309
+ "autonomic nervous system",
310
+ "lower digestive tract",
311
+ "adipose tissue",
312
+ "white adipose tissue",
313
+ "brown adipose tissue",
314
+ "kidney",
315
+ "liver",
316
+ "phrenic nerve",
317
+ "submandibular ganglion",
318
+ "bone tissue",
319
+ "sciatic nerve",
320
+ "glossopharyngeal nerve"
321
+ ],
228
322
  render: true,
229
323
  region: "",
230
324
  viewURL: "",
@@ -239,6 +333,11 @@ export default {
239
333
  loadTextureVolumeOnReady: false,
240
334
  readyCallback: undefined,
241
335
  flatmapAPI: "https://mapcore-demo.org/devel/flatmap/v4/",
336
+ helpMode: false,
337
+ helpModeActiveItem: 0,
338
+ helpModeLastItem: false,
339
+ useHelpModeDialog: true,
340
+ scaffoldRef: null,
242
341
  route: useRoute(),
243
342
  router: useRouter(),
244
343
  ElIconSetting: shallowRef(ElIconSetting),
@@ -261,6 +360,11 @@ export default {
261
360
  syncMode: function (val) {
262
361
  this.$refs.scaffold.toggleSyncControl(val);
263
362
  },
363
+ helpMode: function (newVal) {
364
+ if (!newVal) {
365
+ this.helpModeActiveItem = 0;
366
+ }
367
+ },
264
368
  },
265
369
  mounted: function () {
266
370
  this._objects = [];
@@ -298,8 +402,10 @@ export default {
298
402
  });
299
403
  },
300
404
  objectAdded: function (zincObject) {
301
- console.log(zincObject)
302
- console.log(this.$refs.scaffold.$module.scene.getBoundingBox())
405
+ if (this.consoleOn) {
406
+ console.log(zincObject)
407
+ console.log(this.$refs.scaffold.$module.scene.getBoundingBox())
408
+ }
303
409
  if (this._objects.length === 0) {
304
410
  zincObject.setMarkerMode("on");
305
411
  }
@@ -309,7 +415,9 @@ export default {
309
415
  this._objects.push(zincObject);
310
416
  },
311
417
  openMap: function (map) {
312
- console.log(map);
418
+ if (this.consoleOn) {
419
+ console.log(map);
420
+ }
313
421
  },
314
422
  featureTextureVolume: async function (overlap) {
315
423
  //this.$refs.scaffold.clearScene();
@@ -401,10 +509,12 @@ export default {
401
509
  };
402
510
  })
403
511
  );
404
- console.log(
405
- "found suggestions",
406
- this.$refs.scaffold.fetchSuggestions(term)
407
- );
512
+ if (this.consoleOn) {
513
+ console.log(
514
+ "found suggestions",
515
+ this.$refs.scaffold.fetchSuggestions(term)
516
+ );
517
+ }
408
518
  },
409
519
  autoTumble: function () {
410
520
  const flag = this.tumbleOn;
@@ -430,7 +540,7 @@ export default {
430
540
  });
431
541
  },
432
542
  onReady: function () {
433
- console.log(this.$refs.scaffold)
543
+ if (this.consoleOn) console.log(this.$refs.scaffold)
434
544
  if (this.readyCallback) {
435
545
  this.readyCallback(this.$refs.scaffold, texture_prefix);
436
546
  this.readyCallback = undefined;
@@ -441,6 +551,7 @@ export default {
441
551
  testArmSlides(this.$refs.scaffold);
442
552
  }
443
553
  }
554
+ this.scaffoldRef = this.$refs.scaffold;
444
555
  },
445
556
  addLines: function (coord) {
446
557
  if (this.coordinatesClicked.length === 1) {
@@ -451,30 +562,23 @@ export default {
451
562
  0x00ee22,
452
563
  );
453
564
  this.coordinatesClicked.length = 0;
454
- console.log(returned);
565
+ if (this.consoleOn) console.log(returned);
455
566
  } else {
456
567
  this.coordinatesClicked.push(coord);
457
568
  }
458
569
  },
459
570
  onSelected: function (data) {
460
-
461
571
  if (data && data.length > 0 && data[0].data.group) {
462
- console.log(data[0].data.group)
463
- /*
464
- if (data[0].worldCoords) {
465
- console.log(data[0].data);
572
+ if (this.consoleOn) console.log(data[0]);
573
+ if (this.createPoints && data[0].extraData.worldCoords) {
466
574
  const returned = this.$refs.scaffold.$module.scene.createPoints(
467
575
  "test",
468
576
  "points",
469
- [data[0].worldCoords],
577
+ [data[0].extraData.worldCoords],
470
578
  undefined,
471
579
  0x0022ee,
472
580
  );
473
-
474
- console.log(data[0].worldCoords)
475
- this.addLines(data[0].worldCoords);
476
581
  }
477
- */
478
582
  delete this.route.query["viewURL"];
479
583
  this.$refs.scaffold.showRegionTooltipWithAnnotations(data, false, true);
480
584
  if (this.onClickMarkers) this.$refs.scaffold.setMarkerModeForObjectsWithName(data[0].data.group, "on");
@@ -538,7 +642,31 @@ export default {
538
642
  this.viewURL = "";
539
643
  }
540
644
  })
541
- }
645
+ },
646
+ onHelpModeShowNext: function () {
647
+ this.helpModeActiveItem += 1;
648
+ },
649
+ onHelpModeLastItem: function (isLastItem) {
650
+ if (isLastItem) {
651
+ this.helpModeLastItem = true;
652
+ }
653
+ },
654
+ onFinishHelpMode: function () {
655
+ this.helpMode = false;
656
+ // reset help mode to default values
657
+ this.helpModeActiveItem = 0;
658
+ this.helpModeLastItem = false;
659
+ },
660
+ onTooltipShown: function () {
661
+ if (this.$refs.scaffold && this.$refs.scaffoldHelp) {
662
+ this.$refs.scaffoldHelp.toggleTooltipHighlight();
663
+ }
664
+ },
665
+ onMapTooltipShown: function () {
666
+ if (this.$refs.scaffold && this.$refs.scaffoldHelp) {
667
+ this.$refs.scaffoldHelp.toggleTooltipPinHighlight();
668
+ }
669
+ },
542
670
  },
543
671
  };
544
672
  </script>
@@ -0,0 +1,360 @@
1
+ <template>
2
+ <div class="help-mode-dialog" :class="{'finish': lastItem}">
3
+ <h4>Help Mode</h4>
4
+
5
+ <template v-if="lastItem">
6
+ <p>
7
+ All caught up! <br>
8
+ Click 'Help' to restart.
9
+ </p>
10
+ <div>
11
+ <el-button class="button" @click="finishHelpMode">
12
+ Finish
13
+ </el-button>
14
+ </div>
15
+ </template>
16
+ <template v-else>
17
+ <p>Click "Next" to see the next item.</p>
18
+ <div>
19
+ <el-button class="button" @click="showNext">
20
+ Next
21
+ </el-button>
22
+ <el-button class="button secondary" @click="finishHelpMode">
23
+ Exit Help Mode
24
+ </el-button>
25
+ </div>
26
+ </template>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+ import {
32
+ ElButton as Button,
33
+ } from 'element-plus';
34
+
35
+ export default {
36
+ name: 'HelpModeDialog',
37
+ components: {
38
+ Button,
39
+ },
40
+ props: {
41
+ multiflatmapRef: {
42
+ type: Object,
43
+ default: null,
44
+ },
45
+ flatmapRef: {
46
+ type: Object,
47
+ default: null,
48
+ },
49
+ scaffoldRef: {
50
+ type: Object,
51
+ default: null,
52
+ },
53
+ lastItem: {
54
+ type: Boolean,
55
+ default: false,
56
+ required: false,
57
+ }
58
+ },
59
+ mounted: function () {
60
+ this.toggleHelpModeHighlight(true);
61
+ // For tooltips outside of Flatmap
62
+ this.toggleTooltipHighlight();
63
+ },
64
+ unmounted: function () {
65
+ this.toggleHelpModeHighlight(false);
66
+ },
67
+ watch: {
68
+ lastItem: function (isLastItem) {
69
+ if (isLastItem) {
70
+ this.toggleTooltipHighlight();
71
+ }
72
+ }
73
+ },
74
+ methods: {
75
+ showNext: function () {
76
+ this.$emit('show-next');
77
+ },
78
+ finishHelpMode: function () {
79
+ this.$emit('finish-help-mode');
80
+ },
81
+ /**
82
+ * This function must be called on 'shown-map-tooltip' event.
83
+ */
84
+ toggleTooltipPinHighlight: function () {
85
+ const currentFlatmapEl = this.getCurrentFlatmap();
86
+ this.resetHighlightedItems();
87
+
88
+ this.$nextTick(() => {
89
+ // Temporary solution to find the position of map marker from popover
90
+ const mapPins = currentFlatmapEl.querySelectorAll('.maplibregl-marker');
91
+ const mapPinPopover = currentFlatmapEl.querySelector('.flatmap-popup-popper');
92
+ const styleVal = mapPinPopover?.style?.transform || '';
93
+ const mapPopoverPosition = this.extractMarkerPosition(styleVal);
94
+
95
+ mapPins.forEach((mapPin) => {
96
+ const mapPinStyleVal = mapPin.style.transform;
97
+ const mapPinPosition = this.extractMarkerPosition(mapPinStyleVal);
98
+
99
+ if (mapPinPosition === mapPopoverPosition) {
100
+ mapPin.classList.add('in-help-highlight');
101
+ }
102
+ });
103
+ });
104
+ },
105
+ /**
106
+ * This function must be called on 'shown-tooltip' event.
107
+ */
108
+ toggleTooltipHighlight: function () {
109
+ this.resetHighlightedItems();
110
+
111
+ this.$nextTick(() => {
112
+ const activePoppers = document.querySelectorAll('.el-popper:not([style*="none"])');
113
+
114
+ activePoppers.forEach((activePopper) => {
115
+ const multiFlatmapTooltip = activePopper.classList.contains('flatmap-popper');
116
+ const flatmapTooltip = activePopper.classList.contains('el-fade-in-linear-enter-active');
117
+
118
+ if (multiFlatmapTooltip || flatmapTooltip) {
119
+ this.toggleHighlight(activePopper);
120
+ }
121
+ });
122
+ });
123
+ },
124
+ toggleHighlight: function (activePopper) {
125
+ const popperId = activePopper?.id || '';
126
+ const popperTrigger = document.querySelector(`[aria-describedby="${popperId}"]`);
127
+
128
+ if (popperTrigger) {
129
+ popperTrigger.classList.add('in-help-highlight');
130
+ }
131
+ },
132
+ resetHighlightedItems: function () {
133
+ const allHighlightedItems = document.querySelectorAll('.in-help-highlight');
134
+ allHighlightedItems.forEach((el) => {
135
+ el.classList.remove('in-help-highlight');
136
+ });
137
+ },
138
+ getCurrentScaffold: function () {
139
+ const scaffoldEl = this.scaffoldRef?.$el || null;
140
+ return scaffoldEl;
141
+ },
142
+ getCurrentMultiflatmap: function () {
143
+ const multiflatmapEl = this.multiflatmapRef?.$el || null;
144
+ return multiflatmapEl;
145
+ },
146
+ getCurrentFlatmap: function () {
147
+ const flatmap = this.flatmapRef || this.multiflatmapRef?.getCurrentFlatmap();
148
+ const flatmapEl = flatmap?.$el || null;
149
+ return flatmapEl;
150
+ },
151
+ toggleHelpModeHighlight: function (option) {
152
+ const currentMultiflatmapEl = this.getCurrentMultiflatmap();
153
+ const currentFlatmapEl = this.getCurrentFlatmap();
154
+ const currentScaffoldEl = this.getCurrentScaffold();
155
+ const allHighlightedItems = document.querySelectorAll('.in-help-highlight');
156
+
157
+ if (currentMultiflatmapEl) {
158
+ if (option) {
159
+ currentMultiflatmapEl.classList.add('in-help');
160
+ } else {
161
+ currentMultiflatmapEl.classList.remove('in-help');
162
+ }
163
+ }
164
+
165
+ if (currentFlatmapEl) {
166
+ if (option) {
167
+ currentFlatmapEl.classList.add('in-help');
168
+ } else {
169
+ currentFlatmapEl.classList.remove('in-help');
170
+ }
171
+ }
172
+
173
+ if (currentScaffoldEl) {
174
+ if (option) {
175
+ currentScaffoldEl.classList.add('in-help');
176
+ } else {
177
+ currentScaffoldEl.classList.remove('in-help');
178
+ }
179
+ }
180
+
181
+ if (!option) {
182
+ allHighlightedItems.forEach((el) => {
183
+ el.classList.remove('in-help-highlight');
184
+ });
185
+ }
186
+ },
187
+ /**
188
+ * Temporary solution to find the position of map marker from popover
189
+ */
190
+ extractMarkerPosition: function (str) {
191
+ const translateRegex = /translate\((.*?)\)/g;
192
+ const matches = str.match(translateRegex);
193
+ if (!matches) {
194
+ return '';
195
+ }
196
+ const lastMatch = matches[matches.length - 1];
197
+ const values = lastMatch.slice(10, -1);
198
+ return values;
199
+ },
200
+ }
201
+ }
202
+ </script>
203
+
204
+ <style lang="scss" scoped>
205
+ .help-mode-dialog {
206
+ display: flex;
207
+ flex-direction: column;
208
+ align-items: center;
209
+ justify-content: center;
210
+ gap: 1rem;
211
+ width: 300px;
212
+ padding: 1rem;
213
+ font-family: inherit;
214
+ font-size: 14px;
215
+ background: white;
216
+ border-radius: 4px 4px;
217
+ border: 1px solid $app-primary-color;
218
+ box-shadow: 0px 0px 160px 80px rgba(0,0,0,0.5);
219
+ position: absolute;
220
+ top: 0;
221
+ left: 50%;
222
+ transform: translateX(-50%);
223
+ z-index: 2;
224
+
225
+ &.finish {
226
+ animation: shake 0.35s;
227
+ animation-delay: 0.7s;
228
+ }
229
+
230
+ h4 {
231
+ color: $app-primary-color;
232
+ }
233
+
234
+ h4, p {
235
+ margin: 0;
236
+ }
237
+
238
+ p {
239
+ line-height: 1.5;
240
+ }
241
+
242
+ .button {
243
+ color: #fff;
244
+ background-color: $app-primary-color;
245
+ transform: scale(1);
246
+ transform-origin: 50% 50%;
247
+ transition: all var(--el-transition-duration);
248
+
249
+ &:hover {
250
+ color: #fff !important;
251
+ background: #ac76c5 !important;
252
+ border: 1px solid #ac76c5 !important;
253
+ }
254
+
255
+ &:active {
256
+ transform: scale(0.95);
257
+ }
258
+
259
+ &.secondary {
260
+ background: #f3e6f9;
261
+ border-color: $app-primary-color;
262
+ color: $app-primary-color;
263
+
264
+ &:hover {
265
+ color: $app-primary-color !important;
266
+ background: #fff !important;
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ @keyframes shake {
273
+ 0% {
274
+ transform: translateX(-50%) rotate(2deg);
275
+ }
276
+ 25% {
277
+ transform: translateX(-50%) rotate(-2deg);
278
+ }
279
+ 50% {
280
+ transform: translateX(-50%) rotate(2deg);
281
+ }
282
+ 75% {
283
+ transform: translateX(-50%) rotate(-2deg);
284
+ }
285
+ 100% {
286
+ transform: translateX(-50%) rotate(2deg);
287
+ }
288
+ }
289
+
290
+ // Just for App.vue with options popover on top
291
+ .help-mode-dialog {
292
+ .options-popover + .multi-container + & {
293
+ margin-top: 40px;
294
+ }
295
+ .options-popover:not([style*="display: none"]) + .multi-container + & {
296
+ margin-top: 175px;
297
+ }
298
+ }
299
+ </style>
300
+
301
+ <style lang="scss">
302
+ .scaffold-container.in-help,
303
+ .flatmap-container.in-help {
304
+ background: rgba(0,0,0,0.3);
305
+ }
306
+
307
+ .scaffold-container.in-help {
308
+ canvas {
309
+ opacity: 0.3;
310
+ }
311
+ }
312
+
313
+ .scaffold-container.in-help,
314
+ .flatmap-container.in-help {
315
+ .el-tooltip__trigger,
316
+ .el-popover {
317
+ opacity: 0.3;
318
+ }
319
+
320
+ .pathway-location:has(.in-help-highlight) {
321
+ opacity: 1;
322
+
323
+ .pathway-container {
324
+ background: transparent;
325
+ }
326
+
327
+ .container,
328
+ .legends-container,
329
+ .selections-container {
330
+ opacity: 0.3;
331
+ }
332
+ }
333
+
334
+ .maplibregl-canvas,
335
+ .maplibregl-ctrl-minimap {
336
+ opacity: 0.3;
337
+ }
338
+
339
+ .maplibregl-map,
340
+ .maplibregl-canvas {
341
+ pointer-events: none;
342
+ }
343
+ }
344
+
345
+ .in-help .el-popper:not([style*="none"]) {
346
+ opacity: 1 !important;
347
+ }
348
+
349
+ .in-help-highlight {
350
+ opacity: 1 !important;
351
+ background: white !important;
352
+ box-shadow: 0px 0px 128px 128px white !important;
353
+ animation: highlight-area 0.1s;
354
+
355
+ &.maplibregl-marker {
356
+ background: none !important;
357
+ box-shadow: 0px 0px 128px 128px rgba(255,255,255,0.5) !important;
358
+ }
359
+ }
360
+ </style>