@abi-software/flatmapvuer 0.5.9 → 0.6.0-vue3-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.
Files changed (41) hide show
  1. package/babel.config.js +0 -14
  2. package/dist/favicon.ico +0 -0
  3. package/dist/flatmapvuer.js +69542 -0
  4. package/dist/flatmapvuer.umd.cjs +1021 -0
  5. package/dist/index.html +17 -0
  6. package/dist/style.css +1 -0
  7. package/package.json +29 -21
  8. package/src/App.vue +180 -105
  9. package/src/assets/styles.scss +2 -3
  10. package/src/components/AnnotationTool.vue +193 -153
  11. package/src/components/EventBus.js +3 -3
  12. package/src/components/ExternalResourceCard.vue +39 -30
  13. package/src/components/FlatmapVuer.vue +734 -676
  14. package/src/components/MultiFlatmapVuer.vue +313 -246
  15. package/src/components/ProvenancePopup.vue +195 -121
  16. package/src/components/SelectionsGroup.vue +93 -84
  17. package/src/components/Tooltip.vue +11 -13
  18. package/src/components/TreeControls.vue +67 -64
  19. package/src/components/index.js +4 -7
  20. package/src/components/legends/DynamicLegends.vue +13 -19
  21. package/src/components/legends/SvgLegends.vue +72 -27
  22. package/src/components.d.ts +46 -0
  23. package/src/icons/flatmap-marker.js +1 -1
  24. package/src/icons/fonts/mapicon-species.eot +0 -0
  25. package/src/icons/fonts/mapicon-species.svg +0 -0
  26. package/src/icons/yellowstar.js +2 -2
  27. package/src/legends/legend.svg +0 -0
  28. package/src/main.js +2 -6
  29. package/src/services/flatmapQueries.js +175 -139
  30. package/vite.config.js +76 -0
  31. package/vue.config.js +14 -0
  32. package/CHANGELOG.md +0 -402
  33. package/dist/demo.html +0 -10
  34. package/dist/flatmapvuer.common.js +0 -22741
  35. package/dist/flatmapvuer.common.js.map +0 -1
  36. package/dist/flatmapvuer.css +0 -1
  37. package/dist/flatmapvuer.umd.js +0 -22751
  38. package/dist/flatmapvuer.umd.js.map +0 -1
  39. package/dist/flatmapvuer.umd.min.js +0 -4
  40. package/dist/flatmapvuer.umd.min.js.map +0 -1
  41. package/package-lock.json +0 -18473
@@ -4,7 +4,6 @@
4
4
  ref="flatmapContainer"
5
5
  v-loading="loading"
6
6
  element-loading-text="Loading..."
7
- element-loading-spinner="el-icon-loading"
8
7
  element-loading-background="rgba(0, 0, 0, 0.3)"
9
8
  >
10
9
  <map-svg-sprite-color />
@@ -16,10 +15,9 @@
16
15
  <div>
17
16
  <el-popover
18
17
  placement="right"
19
- :appendToBody="false"
20
- trigger="manual"
21
- popper-class="warning-popper flatmap-popper right-popper"
22
- v-model="hoverVisibilities[6].value"
18
+ popper-class="warning-popper flatmap-popper"
19
+ :teleported="false"
20
+ :visible="hoverVisibilities[6].value"
23
21
  ref="warningPopover"
24
22
  >
25
23
  <p
@@ -69,319 +67,370 @@
69
67
  >. New connectivity and species specificity will be added as the
70
68
  SPARC program progresses.
71
69
  </p>
72
- </el-popover>
73
- <i
74
- class="el-icon-warning warning-icon"
75
- v-if="displayWarning"
76
- @mouseover="showToolitip(6)"
77
- @mouseout="hideToolitip(6)"
78
- v-popover:warningPopover
79
- >
80
- <template v-if="isLegacy">
81
- <span class="warning-text">Legacy Map</span>
82
- <div class="latest-map-text" @click="viewLatestMap">
83
- Click here for the latest map
70
+ <template #reference>
71
+ <div
72
+ class="el-icon-warning warning-icon"
73
+ v-if="displayWarning"
74
+ @mouseover="showToolitip(6)"
75
+ @mouseout="hideToolitip(6)"
76
+ v-popover:warningPopover
77
+ >
78
+ <el-icon><el-icon-warning-filled /></el-icon>
79
+ <template v-if="isLegacy">
80
+ <span class="warning-text">Legacy Map</span>
81
+ <div class="latest-map-text" @click="viewLatestMap">
82
+ Click here for the latest map
83
+ </div>
84
+ </template>
85
+ <template v-else>
86
+ <span class="warning-text">Beta</span>
87
+ </template>
84
88
  </div>
85
89
  </template>
86
- <template v-else>
87
- <span class="warning-text">Beta</span>
88
- </template>
89
- </i>
90
+ </el-popover>
90
91
  </div>
91
92
  <el-popover
92
- :content="latestChangesMessage"
93
93
  placement="right"
94
94
  v-if="displayLatestChanges"
95
- :appendToBody="false"
95
+ :teleported="false"
96
96
  trigger="manual"
97
- popper-class="warning-popper flatmap-popper right-popper"
98
- v-model="hoverVisibilities[7].value"
97
+ popper-class="warning-popper flatmap-popper"
98
+ :visible="hoverVisibilities[7].value"
99
99
  ref="latestChangesPopover"
100
- ></el-popover>
101
- <i
102
- class="el-icon-warning latest-changesicon"
103
- v-if="displayLatestChanges && latestChangesMessage"
104
- @mouseover="showToolitip(7)"
105
- @mouseout="hideToolitip(7)"
106
- v-popover:latestChangesPopover
107
100
  >
108
- <span class="warning-text">What's new?</span>
109
- </i>
101
+ <template #reference>
102
+ <div
103
+ class="latest-changesicon"
104
+ v-if="displayLatestChanges"
105
+ @mouseover="showToolitip(7)"
106
+ @mouseout="hideToolitip(7)"
107
+ v-popover:latestChangesPopover
108
+ >
109
+ <el-icon><el-icon-warning-filled /></el-icon>
110
+ <span class="warning-text">What's new?</span>
111
+ </div>
112
+ </template>
113
+ <template #default>
114
+ <b>Network discovery mode</b>
115
+ <p>
116
+ You can now view the network of neurons connected to a selected
117
+ neuron. This mode is located in the settings at the bottom right.
118
+ Once discovery mode is on, click on a neuron to see its
119
+ connections.
120
+ </p>
121
+ <b>Now can display up to 6 panes</b>
122
+ <p>
123
+ You can now display up to 6 panes in the flatmap. This allows you
124
+ to compare between different datasets and/or different views of
125
+ the same dataset.
126
+ </p>
127
+ </template>
128
+ </el-popover>
110
129
  </div>
111
130
 
112
131
  <!-- The element below is placed onto the flatmap when it is ready -->
113
- <i
114
- class="el-icon-arrow-down minimap-resize"
132
+ <el-icon
133
+ class="minimap-resize"
115
134
  :class="{ enlarge: minimapSmall, shrink: !minimapSmall }"
116
135
  ref="minimapResize"
117
136
  v-show="minimapResizeShow"
118
137
  @click="closeMinimap"
119
- ></i>
138
+ >
139
+ <el-icon-arrow-down />
140
+ </el-icon>
120
141
 
121
142
  <div class="bottom-right-control">
122
143
  <el-popover
123
144
  content="Zoom in"
124
145
  placement="left"
125
- :appendToBody="false"
146
+ :teleported="false"
126
147
  trigger="manual"
127
- popper-class="flatmap-popper left-popper"
128
- v-model="hoverVisibilities[0].value"
148
+ width="70"
149
+ popper-class="flatmap-popper"
150
+ :visible="hoverVisibilities[0].value"
129
151
  >
130
- <map-svg-icon
131
- icon="zoomIn"
132
- class="icon-button zoomIn"
133
- slot="reference"
134
- @click.native="zoomIn()"
135
- @mouseover.native="showToolitip(0)"
136
- @mouseout.native="hideToolitip(0)"
137
- />
152
+ <template #reference>
153
+ <map-svg-icon
154
+ icon="zoomIn"
155
+ class="icon-button zoomIn"
156
+ @click.native="zoomIn()"
157
+ @mouseover.native="showToolitip(0)"
158
+ @mouseout.native="hideToolitip(0)"
159
+ />
160
+ </template>
138
161
  </el-popover>
139
162
  <el-popover
140
163
  content="Zoom out"
141
164
  placement="top-end"
142
- :appendToBody="false"
165
+ :teleported="false"
143
166
  trigger="manual"
167
+ width="70"
144
168
  popper-class="flatmap-popper popper-zoomout"
145
- v-model="hoverVisibilities[1].value"
169
+ :visible="hoverVisibilities[1].value"
146
170
  >
147
- <map-svg-icon
148
- icon="zoomOut"
149
- class="icon-button zoomOut"
150
- slot="reference"
151
- @click.native="zoomOut()"
152
- @mouseover.native="showToolitip(1)"
153
- @mouseout.native="hideToolitip(1)"
154
- />
171
+ <template #reference>
172
+ <map-svg-icon
173
+ icon="zoomOut"
174
+ class="icon-button zoomOut"
175
+ @click.native="zoomOut()"
176
+ @mouseover.native="showToolitip(1)"
177
+ @mouseout.native="hideToolitip(1)"
178
+ />
179
+ </template>
155
180
  </el-popover>
156
181
  <el-popover
157
182
  content="Reset"
158
183
  placement="top"
159
- :appendToBody="false"
184
+ :teleported="false"
160
185
  trigger="manual"
186
+ width="70"
161
187
  popper-class="flatmap-popper"
162
- v-model="hoverVisibilities[2].value"
188
+ :visible="hoverVisibilities[2].value"
163
189
  >
164
190
  <div>
165
191
  Fit to
166
192
  <br />
167
193
  window
168
194
  </div>
169
- <map-svg-icon
170
- slot="reference"
171
- icon="fitWindow"
172
- class="icon-button fitWindow"
173
- @click.native="resetView()"
174
- @mouseover.native="showToolitip(2)"
175
- @mouseout.native="hideToolitip(2)"
176
- />
195
+ <template #reference>
196
+ <map-svg-icon
197
+ icon="fitWindow"
198
+ class="icon-button fitWindow"
199
+ @click.native="resetView()"
200
+ @mouseover.native="showToolitip(2)"
201
+ @mouseout.native="hideToolitip(2)"
202
+ />
203
+ </template>
177
204
  </el-popover>
178
205
  </div>
179
206
  <el-popover
180
207
  content="Change pathway visibility"
181
208
  placement="right"
182
- :appendToBody="false"
209
+ :teleported="false"
183
210
  trigger="manual"
184
- popper-class="flatmap-popper right-popper"
185
- v-model="hoverVisibilities[4].value"
211
+ popper-class="flatmap-popper"
212
+ :visible="hoverVisibilities[4].value"
186
213
  ref="checkBoxPopover"
187
- />
188
- <div
189
- class="pathway-location"
190
- :class="{ open: drawerOpen, close: !drawerOpen }"
191
214
  >
192
- <div
193
- class="pathway-container"
194
- :class="{ open: drawerOpen, close: !drawerOpen }"
195
- :style="{ 'max-height' : pathwaysMaxHeight + 'px' }"
196
- v-if="pathControls"
197
- v-popover:checkBoxPopover
198
- >
199
- <svg-legends v-if="!isFC" class="svg-legends-container" />
200
- <el-popover
201
- content="Location of the featured dataset"
202
- placement="right"
203
- :appendToBody="false"
204
- trigger="hover"
205
- popper-class="flatmap-popper popper-bump-right right-popper"
206
- v-model="hoverVisibilities[9].value"
207
- ref="featuredMarkerPopover"
208
- >
209
- </el-popover>
210
- <div v-show="showStarInLegend" v-popover:featuredMarkerPopover class="yellow-star-legend" v-html="yellowstar"></div>
211
- <!-- The line below places the yellowstar svg on the left, and the text "Featured markers on the right" with css so they are both centered in the div -->
212
-
213
- <el-popover
214
- content="Find these markers for data"
215
- placement="right"
216
- :appendToBody="false"
217
- trigger="manual"
218
- popper-class="flatmap-popper popper-bump-right right-popper"
219
- v-model="hoverVisibilities[5].value"
220
- ref="markerPopover"
221
- ></el-popover>
215
+ <template #reference>
222
216
  <div
223
- v-show="hoverVisibilities[5].value"
224
- class="flatmap-marker-help"
225
- v-html="flatmapMarker"
226
- v-popover:markerPopover
227
- ></div>
228
- <tree-controls
229
- v-if="isFC && systems && systems.length > 0"
230
- :active="currentActive"
231
- :hover="currentHover"
232
- :tree-data="systems"
233
- ref="treeControls"
234
- @changed="systemSelected"
235
- @checkAll="checkAllSystems"
236
- @change-active="ftuSelected"
237
- />
238
- <selections-group
239
- v-if="!isFC && centreLines && centreLines.length > 0"
240
- title="Nerves"
241
- labelKey="label"
242
- identifierKey="key"
243
- :selections="centreLines"
244
- @changed="centreLinesSelected"
245
- ref="centrelinesSelection"
246
- key="centrelinesSelection"
247
- />
248
- <!--
249
- <selections-group
250
- v-if="isFC && sckanDisplay && sckanDisplay.length > 0"
251
- title="SCKAN"
252
- labelKey="label"
253
- identifierKey="key"
254
- :selections="sckanDisplay"
255
- @changed="sckanSelected"
256
- @checkAll="checkAllSCKAN"
257
- ref="skcanSelection"
258
- key="skcanSelection"
259
- />
260
- <selections-group
261
- v-if="layers && layers.length > 0"
262
- title="Layers"
263
- labelKey="description"
264
- identifierKey="id"
265
- :selections="layers"
266
- @changed="layersSelected"
267
- @checkAll="checkAllLayers"
268
- ref="layersSelection"
269
- key="layersSelection"
270
- />
271
- -->
272
- <selections-group
273
- v-if="!isFC && taxonConnectivity && taxonConnectivity.length > 0"
274
- title="Observed in"
275
- labelKey="label"
276
- identifierKey="taxon"
277
- :selections="taxonConnectivity"
278
- @changed="taxonsSelected"
279
- @checkAll="checkAllTaxons"
280
- ref="taxonSelection"
281
- key="taxonSelection"
282
- />
283
- <selections-group
284
- v-if="pathways && pathways.length > 0"
285
- title="Pathways"
286
- labelKey="label"
287
- identifierKey="type"
288
- colourStyle="line"
289
- :selections="pathways"
290
- @changed="pathwaysSelected"
291
- @checkAll="checkAllPathways"
292
- ref="pathwaysSelection"
293
- key="pathwaysSelection"
294
- />
295
- </div>
296
- <div
297
- @click="toggleDrawer"
298
- class="drawer-button"
299
- :class="{ open: drawerOpen, close: !drawerOpen }"
300
- >
301
- <i class="el-icon-arrow-left"></i>
302
- </div>
303
- </div>
217
+ class="pathway-location"
218
+ :class="{ open: drawerOpen, close: !drawerOpen }"
219
+ >
220
+ <div
221
+ class="pathway-container"
222
+ :class="{ open: drawerOpen, close: !drawerOpen }"
223
+ :style="{ 'max-height': pathwaysMaxHeight + 'px' }"
224
+ v-if="pathControls"
225
+ v-popover:checkBoxPopover
226
+ >
227
+ <svg-legends v-if="!isFC" class="svg-legends-container" />
228
+ <el-popover
229
+ content="Location of the featured dataset"
230
+ placement="right"
231
+ :teleported="false"
232
+ trigger="hover"
233
+ popper-class="flatmap-popper popper-bump-right"
234
+ :visible="hoverVisibilities[9].value"
235
+ ref="featuredMarkerPopover"
236
+ >
237
+ <template #reference>
238
+ <div
239
+ v-show="showStarInLegend"
240
+ v-popover:featuredMarkerPopover
241
+ class="yellow-star-legend"
242
+ v-html="yellowstar"
243
+ ></div>
244
+ </template>
245
+ </el-popover>
246
+ <!-- The line below places the yellowstar svg on the left, and the text "Featured markers on the right" with css so they are both centered in the div -->
247
+
248
+ <el-popover
249
+ content="Find these markers for data"
250
+ placement="right"
251
+ :teleported="false"
252
+ trigger="manual"
253
+ popper-class="flatmap-popper popper-bump-right"
254
+ :visible="hoverVisibilities[5].value"
255
+ ref="markerPopover"
256
+ >
257
+ <template #reference>
258
+ <div
259
+ v-show="hoverVisibilities[5].value"
260
+ class="flatmap-marker-help"
261
+ v-html="flatmapMarker"
262
+ v-popover:markerPopover
263
+ ></div>
264
+ </template>
265
+ </el-popover>
266
+ <tree-controls
267
+ v-if="isFC && systems && systems.length > 0"
268
+ :active="currentActive"
269
+ :hover="currentHover"
270
+ :tree-data="systems"
271
+ ref="treeControls"
272
+ @changed="systemSelected"
273
+ @checkAll="checkAllSystems"
274
+ @change-active="ftuSelected"
275
+ />
276
+ <selections-group
277
+ v-if="!isFC && centreLines && centreLines.length > 0"
278
+ title="Nerves"
279
+ labelKey="label"
280
+ identifierKey="key"
281
+ :selections="centreLines"
282
+ @changed="centreLinesSelected"
283
+ ref="centrelinesSelection"
284
+ key="centrelinesSelection"
285
+ />
286
+ <!--
287
+ <selections-group
288
+ v-if="isFC && sckanDisplay && sckanDisplay.length > 0"
289
+ title="SCKAN"
290
+ labelKey="label"
291
+ identifierKey="key"
292
+ :selections="sckanDisplay"
293
+ @changed="sckanSelected"
294
+ @checkAll="checkAllSCKAN"
295
+ ref="skcanSelection"
296
+ key="skcanSelection"
297
+ />
298
+ <selections-group
299
+ v-if="layers && layers.length > 0"
300
+ title="Layers"
301
+ labelKey="description"
302
+ identifierKey="id"
303
+ :selections="layers"
304
+ @changed="layersSelected"
305
+ @checkAll="checkAllLayers"
306
+ ref="layersSelection"
307
+ key="layersSelection"
308
+ />
309
+ -->
310
+ <selections-group
311
+ v-if="!isFC && taxonConnectivity && taxonConnectivity.length > 0"
312
+ title="Observed in"
313
+ labelKey="label"
314
+ identifierKey="taxon"
315
+ :selections="taxonConnectivity"
316
+ @changed="taxonsSelected"
317
+ @checkAll="checkAllTaxons"
318
+ ref="taxonSelection"
319
+ key="taxonSelection"
320
+ />
321
+ <selections-group
322
+ v-if="pathways && pathways.length > 0"
323
+ title="Pathways"
324
+ labelKey="label"
325
+ identifierKey="type"
326
+ colourStyle="line"
327
+ :selections="pathways"
328
+ @changed="pathwaysSelected"
329
+ @checkAll="checkAllPathways"
330
+ ref="pathwaysSelection"
331
+ key="pathwaysSelection"
332
+ />
333
+ </div>
334
+ <div
335
+ @click="toggleDrawer"
336
+ class="drawer-button"
337
+ :class="{ open: drawerOpen, close: !drawerOpen }"
338
+ >
339
+ <el-icon><el-icon-arrow-left /></el-icon>
340
+ </div>
341
+ </div>
342
+ </template>
343
+ </el-popover>
304
344
  <el-popover
345
+ v-if="openMapRef"
305
346
  ref="open-map-popover"
347
+ :virtual-ref="openMapRef"
306
348
  placement="top-start"
307
- width="128"
308
- :append-to-body="false"
349
+ width="136"
350
+ :teleported="false"
309
351
  trigger="click"
310
352
  popper-class="open-map-popper non-selectable"
353
+ virtual-triggering
311
354
  >
312
- <el-row v-for="item in openMapOptions" :key="item.key">
313
- <el-button type="primary" plain @click="$emit('open-map', item.key)">
314
- {{ item.display }}
315
- </el-button>
316
- </el-row>
355
+ <div>
356
+ <el-row v-for="item in openMapOptions" :key="item.key">
357
+ <el-button type="primary" plain @click="$emit('open-map', item.key)">
358
+ {{ item.display }}
359
+ </el-button>
360
+ </el-row>
361
+ </div>
317
362
  </el-popover>
318
363
  <el-popover
319
364
  ref="backgroundPopover"
365
+ :virtual-ref="backgroundIconRef"
320
366
  placement="top-start"
321
- width="175"
322
- :appendToBody="false"
367
+ width="200"
368
+ :teleported="false"
323
369
  trigger="click"
324
370
  popper-class="background-popper"
371
+ virtual-triggering
325
372
  >
326
- <el-row class="backgroundText">Viewing Mode</el-row>
327
- <el-row class="backgroundControl">
328
- <el-select
329
- :popper-append-to-body="false"
330
- v-model="viewingMode"
331
- placeholder="Select"
332
- class="select-box"
333
- popper-class="flatmap_dropdown"
334
- >
335
- <el-option
336
- v-for="item in viewingModes"
337
- :key="item"
338
- :label="item"
339
- :value="item"
373
+ <div>
374
+ <el-row class="backgroundText">Viewing Mode</el-row>
375
+ <el-row class="backgroundControl">
376
+ <el-select
377
+ :teleported="false"
378
+ v-model="viewingMode"
379
+ placeholder="Select"
380
+ class="select-box"
381
+ popper-class="flatmap_dropdown"
340
382
  >
341
- <el-row>
342
- <el-col :span="12">{{ item }}</el-col>
343
- </el-row>
344
- </el-option>
345
- </el-select>
346
- </el-row>
347
- <el-row class="backgroundSpacer"></el-row>
348
- <el-row class="backgroundText">Organs display</el-row>
349
- <el-row class="backgroundControl">
350
- <el-radio-group
351
- v-model="colourRadio"
352
- class="flatmap-radio"
353
- @change="setColour"
354
- >
355
- <el-radio :label="true">Colour</el-radio>
356
- <el-radio :label="false">Greyscale</el-radio>
357
- </el-radio-group>
358
- </el-row>
359
- <el-row class="backgroundSpacer"></el-row>
360
- <el-row class="backgroundText">Outlines display</el-row>
361
- <el-row class="backgroundControl">
362
- <el-radio-group
363
- v-model="outlinesRadio"
364
- class="flatmap-radio"
365
- @change="setOutlines"
366
- >
367
- <el-radio :label="true">Show</el-radio>
368
- <el-radio :label="false">Hide</el-radio>
369
- </el-radio-group>
370
- </el-row>
371
- <el-row class="backgroundSpacer"></el-row>
372
- <el-row class="backgroundText">Change background</el-row>
373
- <el-row class="backgroundControl">
374
- <div
375
- v-for="item in availableBackground"
376
- :key="item"
377
- :class="[
378
- 'backgroundChoice',
379
- item,
380
- item == currentBackground ? 'active' : '',
381
- ]"
382
- @click="backgroundChangeCallback(item)"
383
- />
384
- </el-row>
383
+ <el-option
384
+ v-for="item in viewingModes"
385
+ :key="item"
386
+ :label="item"
387
+ :value="item"
388
+ >
389
+ <el-row>
390
+ <el-col :span="12">{{ item }}</el-col>
391
+ </el-row>
392
+ </el-option>
393
+ </el-select>
394
+ </el-row>
395
+ <el-row class="backgroundSpacer"></el-row>
396
+ <el-row class="backgroundText">Organs display</el-row>
397
+ <el-row class="backgroundControl">
398
+ <el-radio-group
399
+ v-model="colourRadio"
400
+ class="flatmap-radio"
401
+ @change="setColour"
402
+ >
403
+ <el-radio :label="true">Colour</el-radio>
404
+ <el-radio :label="false">Greyscale</el-radio>
405
+ </el-radio-group>
406
+ </el-row>
407
+ <el-row class="backgroundSpacer"></el-row>
408
+ <el-row class="backgroundText">Outlines display</el-row>
409
+ <el-row class="backgroundControl">
410
+ <el-radio-group
411
+ v-model="outlinesRadio"
412
+ class="flatmap-radio"
413
+ @change="setOutlines"
414
+ >
415
+ <el-radio :label="true">Show</el-radio>
416
+ <el-radio :label="false">Hide</el-radio>
417
+ </el-radio-group>
418
+ </el-row>
419
+ <el-row class="backgroundSpacer"></el-row>
420
+ <el-row class="backgroundText">Change background</el-row>
421
+ <el-row class="backgroundControl">
422
+ <div
423
+ v-for="item in availableBackground"
424
+ :key="item"
425
+ :class="[
426
+ 'backgroundChoice',
427
+ item,
428
+ item == currentBackground ? 'active' : '',
429
+ ]"
430
+ @click="backgroundChangeCallback(item)"
431
+ />
432
+ </el-row>
433
+ </div>
385
434
  </el-popover>
386
435
  <div
387
436
  class="settings-group"
@@ -389,41 +438,42 @@
389
438
  >
390
439
  <el-row>
391
440
  <el-popover
392
- v-model="hoverVisibilities[8].value"
441
+ :visible="hoverVisibilities[8].value"
393
442
  content="Open new map"
394
443
  placement="right"
395
- :append-to-body="false"
396
- trigger="manual"
397
- popper-class="flatmap-popper right-popper"
444
+ :teleported="false"
445
+ popper-class="flatmap-popper"
398
446
  >
399
- <map-svg-icon
400
- v-if="enableOpenMapUI && openMapOptions.length > 0"
401
- slot="reference"
402
- v-popover:open-map-popover
403
- icon="openMap"
404
- class="icon-button"
405
- @mouseover.native="showToolitip(8)"
406
- @mouseout.native="hideToolitip(8)"
407
- />
447
+ <template #reference>
448
+ <map-svg-icon
449
+ v-if="enableOpenMapUI && openMapOptions.length > 0"
450
+ ref="openMapRef"
451
+ icon="openMap"
452
+ class="icon-button"
453
+ @mouseover.native="showToolitip(8)"
454
+ @mouseout.native="hideToolitip(8)"
455
+ />
456
+ </template>
408
457
  </el-popover>
409
458
  </el-row>
410
459
  <el-row>
411
460
  <el-popover
412
461
  content="Change settings"
413
462
  placement="right"
414
- v-model="hoverVisibilities[3].value"
415
- :appendToBody="false"
463
+ :visible="hoverVisibilities[3].value"
464
+ :teleported="false"
416
465
  trigger="manual"
417
- popper-class="flatmap-popper right-popper"
466
+ popper-class="flatmap-popper"
418
467
  >
419
- <map-svg-icon
420
- v-popover:backgroundPopover
421
- icon="changeBckgd"
422
- class="icon-button"
423
- slot="reference"
424
- @mouseover.native="showToolitip(3)"
425
- @mouseout.native="hideToolitip(3)"
426
- />
468
+ <template #reference>
469
+ <map-svg-icon
470
+ ref="backgroundIconRef"
471
+ icon="changeBckgd"
472
+ class="icon-button"
473
+ @mouseover.native="showToolitip(3)"
474
+ @mouseout.native="hideToolitip(3)"
475
+ />
476
+ </template>
427
477
  </el-popover>
428
478
  </el-row>
429
479
  </div>
@@ -439,97 +489,85 @@
439
489
  </template>
440
490
 
441
491
  <script>
492
+ import { ref } from 'vue'
493
+ import {
494
+ WarningFilled as ElIconWarningFilled,
495
+ ArrowDown as ElIconArrowDown,
496
+ ArrowLeft as ElIconArrowLeft,
497
+ } from '@element-plus/icons-vue'
442
498
  /* eslint-disable no-alert, no-console */
443
- import Vue from "vue";
444
- import Tooltip from "./Tooltip";
445
- import SelectionsGroup from "./SelectionsGroup";
446
- import TreeControls from "./TreeControls";
447
- import { MapSvgIcon, MapSvgSpriteColor } from "@abi-software/svg-sprite";
448
- import SvgLegends from "./legends/SvgLegends";
499
+ import Tooltip from './Tooltip.vue'
500
+ import SelectionsGroup from './SelectionsGroup.vue'
501
+ import TreeControls from './TreeControls.vue'
502
+ //import { MapSvgIcon, MapSvgSpriteColor } from '@abi-software/svg-sprite'
503
+ import { MapSvgIcon, MapSvgSpriteColor } from 'vue3-component-svg-sprite'
504
+ import SvgLegends from './legends/SvgLegends.vue'
449
505
  import {
450
- Button,
451
- Col,
452
- Loading,
453
- Radio,
454
- RadioGroup,
455
- Row,
456
- Select,
457
- } from "element-ui";
458
- import lang from "element-ui/lib/locale/lang/en";
459
- import locale from "element-ui/lib/locale";
460
- import flatmapMarker from "../icons/flatmap-marker";
461
- import {FlatmapQueries, findTaxonomyLabel} from "../services/flatmapQueries.js";
462
- import yellowstar from "../icons/yellowstar";
463
-
464
- locale.use(lang);
465
- Vue.use(Button);
466
- Vue.use(Col);
467
- Vue.use(Loading.directive);
468
- Vue.use(Radio);
469
- Vue.use(RadioGroup);
470
- Vue.use(Row);
471
- Vue.use(Select);
472
- const ResizeSensor = require("css-element-queries/src/ResizeSensor");
473
-
474
- const processTaxon = (flatmapAPI, taxonIdentifiers) => {
475
- let processed = [];
476
- taxonIdentifiers.forEach((taxon) => {
477
- findTaxonomyLabel(flatmapAPI, taxon).then((value) => {
478
- const item = { taxon, label: value };
479
- processed.push(item);
480
- });
481
- });
482
-
483
- return processed;
484
- };
506
+ ElButton as Button,
507
+ ElCol as Col,
508
+ ElLoading as Loading,
509
+ ElRadio as Radio,
510
+ ElRadioGroup as RadioGroup,
511
+ ElRow as Row,
512
+ ElSelect as Select,
513
+ } from 'element-plus'
514
+ import flatmapMarker from '../icons/flatmap-marker'
515
+ import {
516
+ FlatmapQueries,
517
+ findTaxonomyLabel,
518
+ } from '../services/flatmapQueries.js'
519
+ import yellowstar from '../icons/yellowstar'
520
+ import ResizeSensor from 'css-element-queries/src/ResizeSensor'
521
+ import * as flatmap from '@abi-software/flatmap-viewer'
522
+
485
523
 
486
524
  const processFTUs = (parent, key) => {
487
- const ftus = [];
488
- let items = parent.organs ? parent.organs : parent.ftus;
525
+ const ftus = []
526
+ let items = parent.organs ? parent.organs : parent.ftus
489
527
  const children = items
490
528
  ? items.filter(
491
529
  (obj, index) =>
492
530
  items.findIndex((item) => item.label === obj.label) === index
493
531
  )
494
- : undefined;
532
+ : undefined
495
533
  if (children) {
496
534
  children.forEach((child) => {
497
535
  const data = {
498
536
  label: child.label,
499
537
  models: child.models,
500
538
  key: `${key}.${child.label}`,
501
- };
502
- const grandChildren = processFTUs(child, data.key);
539
+ }
540
+ const grandChildren = processFTUs(child, data.key)
503
541
  if (grandChildren.length > 0) {
504
- data.children = grandChildren;
542
+ data.children = grandChildren
505
543
  }
506
- ftus.push(data);
507
- });
544
+ ftus.push(data)
545
+ })
508
546
  }
509
- return ftus;
510
- };
547
+ return ftus
548
+ }
511
549
 
512
550
  const processSystems = (systems) => {
513
- const allSystems = [];
551
+ const allSystems = []
514
552
  if (systems && systems.length > 0) {
515
- const data = { label: "All", key: "All", children: [] };
553
+ const data = { label: 'All', key: 'All', children: [] }
516
554
  systems.forEach((system) => {
517
555
  const child = {
518
556
  colour: system.colour,
519
557
  enabled: system.enabled,
520
558
  label: system.id,
521
559
  key: system.id,
522
- };
523
- const children = processFTUs(system, child.key);
524
- if (children.length > 0) child.children = children;
525
- data.children.push(child);
526
- });
560
+ }
561
+ const children = processFTUs(system, child.key)
562
+ if (children.length > 0) child.children = children
563
+ data.children.push(child)
564
+ })
527
565
 
528
- allSystems.push(data);
566
+ allSystems.push(data)
529
567
  }
530
568
 
531
- return allSystems;
532
- };
569
+ return allSystems
570
+ }
533
571
 
534
572
  const createUnfilledTooltipData = function () {
535
573
  return {
@@ -540,66 +578,104 @@ const createUnfilledTooltipData = function () {
540
578
  originsWithDatasets: [],
541
579
  componentsWithDatasets: [],
542
580
  resource: undefined,
543
- };
544
- };
581
+ }
582
+ }
545
583
 
546
584
  export default {
547
- name: "FlatmapVuer",
585
+ name: 'FlatmapVuer',
548
586
  components: {
587
+ Button,
588
+ Col,
589
+ Loading,
590
+ Radio,
591
+ RadioGroup,
592
+ Row,
593
+ Select,
549
594
  MapSvgIcon,
550
595
  MapSvgSpriteColor,
551
596
  Tooltip,
552
597
  TreeControls,
553
598
  SelectionsGroup,
554
599
  SvgLegends,
600
+ ElIconWarningFilled,
601
+ ElIconArrowDown,
602
+ ElIconArrowLeft,
555
603
  },
556
604
  beforeCreate: function () {
557
- this.mapManager = undefined;
558
- this.mapImp = undefined;
605
+ this.mapManager = undefined
606
+ this.mapImp = undefined
559
607
  //The state watcher may triggered before
560
608
  //created causing issue, This flag will
561
609
  //resolve this issue.
562
- this.setStateRequired = false;
610
+ this.setStateRequired = false
563
611
  },
564
612
  methods: {
565
613
  viewLatestMap: function () {
566
- let biologicalSex = this.biologicalSex ? this.biologicalSex : undefined;
614
+ let biologicalSex = this.biologicalSex ? this.biologicalSex : undefined
567
615
  //Human requires special handling
568
- if (this.entry === "NCBITaxon:9606") {
569
- biologicalSex = "PATO:0000384";
616
+ if (this.entry === 'NCBITaxon:9606') {
617
+ biologicalSex = 'PATO:0000384'
570
618
  }
571
619
  const state = {
572
620
  entry: this.entry,
573
621
  biologicalSex,
574
622
  viewport: this.mapImp.getState(),
575
- };
576
- this.$emit("view-latest-map", state);
623
+ }
624
+ this.$emit('view-latest-map', state)
577
625
  },
578
626
  backgroundChangeCallback: function (colour) {
579
- this.currentBackground = colour;
627
+ this.currentBackground = colour
580
628
  if (this.mapImp) {
581
- this.mapImp.setBackgroundColour(this.currentBackground, 1);
629
+ this.mapImp.setBackgroundColour(this.currentBackground, 1)
582
630
  }
583
631
  },
632
+ processSystems: function (systems) {
633
+ this.systems.length = 0
634
+ if (systems && systems.length > 0) {
635
+ const data = { label: 'All', key: 'All', children: [] }
636
+ systems.forEach((system) => {
637
+ const child = {
638
+ colour: system.colour,
639
+ enabled: system.enabled,
640
+ label: system.id,
641
+ key: system.id,
642
+ }
643
+ const children = processFTUs(system, child.key)
644
+ if (children.length > 0) child.children = children
645
+ data.children.push(child)
646
+ })
647
+
648
+ this.systems.push(data)
649
+ }
650
+ },
651
+ processTaxon: function (flatmapAPI, taxonIdentifiers) {
652
+ this.taxonConnectivity.length = 0
653
+ taxonIdentifiers.forEach((taxon) => {
654
+ findTaxonomyLabel(flatmapAPI, taxon).then((value) => {
655
+ const item = { taxon, label: value }
656
+ this.taxonConnectivity.push(item)
657
+ })
658
+ })
659
+ },
584
660
  toggleDrawer: function () {
585
- this.drawerOpen = !this.drawerOpen;
661
+ this.drawerOpen = !this.drawerOpen
586
662
  },
587
663
  /**
588
664
  * Function to toggle colour/greyscale of organs.
589
665
  */
590
666
  setColour: function (flag) {
591
- this.colourRadio = flag;
667
+ this.colourRadio = flag
592
668
  if (this.mapImp) {
593
- this.mapImp.setColour({ colour: flag, outline: this.outlinesRadio });
669
+ this.mapImp.setColour({ colour: flag, outline: this.outlinesRadio })
594
670
  }
595
671
  },
596
672
  /**
597
673
  * Function to toggle outlines f organs.
598
674
  */
599
675
  setOutlines: function (flag) {
600
- this.outlineRadio = flag;
676
+ this.outlineRadio = flag
601
677
  if (this.mapImp) {
602
- this.mapImp.setColour({ colour: this.colourRadio, outline: flag });
678
+ this.mapImp.setColour({ colour: this.colourRadio, outline: flag })
603
679
  }
604
680
  },
605
681
  /**
@@ -608,21 +684,21 @@ export default {
608
684
  */
609
685
  resetView: function () {
610
686
  if (this.mapImp) {
611
- this.mapImp.resetMap();
687
+ this.mapImp.resetMap()
612
688
  if (this.$refs.centrelinesSelection) {
613
- this.$refs.centrelinesSelection.reset();
689
+ this.$refs.centrelinesSelection.reset()
614
690
  }
615
691
  if (this.$refs.skcanSelection) {
616
- this.$refs.skcanSelection.reset();
692
+ this.$refs.skcanSelection.reset()
617
693
  }
618
694
  if (this.$refs.layersSelection) {
619
- this.$refs.layersSelection.reset();
695
+ this.$refs.layersSelection.reset()
620
696
  }
621
697
  if (this.$refs.systemsSelection) {
622
- this.$refs.pathwaysSelection.reset();
698
+ this.$refs.pathwaysSelection.reset()
623
699
  }
624
700
  if (this.$refs.pathwaysSelection) {
625
- this.$refs.pathwaysSelection.reset();
701
+ this.$refs.pathwaysSelection.reset()
626
702
  }
627
703
  }
628
704
  },
@@ -632,7 +708,7 @@ export default {
632
708
  */
633
709
  zoomIn: function () {
634
710
  if (this.mapImp) {
635
- this.mapImp.zoomIn();
711
+ this.mapImp.zoomIn()
636
712
  }
637
713
  },
638
714
  /**
@@ -641,102 +717,103 @@ export default {
641
717
  */
642
718
  zoomOut: function () {
643
719
  if (this.mapImp) {
644
- this.mapImp.zoomOut();
720
+ this.mapImp.zoomOut()
645
721
  }
646
722
  },
647
723
  centreLinesSelected: function (payload) {
648
724
  if (this.mapImp) {
649
- this.mapImp.enableCentrelines(payload.value);
725
+ this.mapImp.enableCentrelines(payload.value)
650
726
  }
651
727
  },
652
728
  sckanSelected: function (payload) {
653
729
  if (this.mapImp) {
654
- this.mapImp.enableSckanPath(payload.key, payload.value);
730
+ this.mapImp.enableSckanPath(payload.key, payload.value)
655
731
  }
656
732
  },
657
733
  checkAllSCKAN: function (payload) {
658
734
  if (this.mapImp) {
659
735
  payload.keys.forEach((key) =>
660
- this.mapImp.enableSckanPath(key, payload.value));
736
+ this.mapImp.enableSckanPath(key, payload.value)
737
+ )
661
738
  }
662
739
  },
663
740
  highlightConnectedPaths: function (payload) {
664
741
  if (this.mapImp) {
665
- let paths = [...this.mapImp.pathModelNodes(payload)];
742
+ let paths = [...this.mapImp.pathModelNodes(payload)]
666
743
  // The line below matches the paths to the annIdToFeatureId map to get the feature ids
667
744
 
668
- let pathFeatures = paths.map(p=>this.mapImp.featureProperties(p));
669
- let toHighlight = [];
670
- pathFeatures.forEach(p=>{
671
- this.mapImp.nodePathModels(p.featureId).forEach(f=>{
672
- toHighlight.push(f);
745
+ let pathFeatures = paths.map((p) => this.mapImp.featureProperties(p))
746
+ let toHighlight = []
747
+ pathFeatures.forEach((p) => {
748
+ this.mapImp.nodePathModels(p.featureId).forEach((f) => {
749
+ toHighlight.push(f)
673
750
  })
674
751
  })
675
752
  // display connected paths
676
- this.mapImp.zoomToFeatures(toHighlight, {noZoomIn: true});
753
+ this.mapImp.zoomToFeatures(toHighlight, { noZoomIn: true })
677
754
  }
678
755
  },
679
756
  systemSelected: function (payload) {
680
757
  if (this.mapImp) {
681
- this.mapImp.enableSystem(payload.key, payload.value);
758
+ this.mapImp.enableSystem(payload.key, payload.value)
682
759
  }
683
760
  },
684
761
  checkAllSystems: function (flag) {
685
762
  if (this.mapImp) {
686
763
  this.systems[0].children.forEach((key) =>
687
764
  this.mapImp.enableSystem(key.label, flag)
688
- );
765
+ )
689
766
  }
690
767
  },
691
768
  ftuSelected: function (models) {
692
- this.searchAndShowResult(models, true);
769
+ this.searchAndShowResult(models, true)
693
770
  },
694
771
  layersSelected: function (payload) {
695
772
  if (this.mapImp) {
696
- this.mapImp.enableLayer(payload.key, payload.value);
773
+ this.mapImp.enableLayer(payload.key, payload.value)
697
774
  }
698
775
  },
699
776
  checkAllLayers: function (payload) {
700
777
  if (this.mapImp) {
701
778
  payload.keys.forEach((key) =>
702
779
  this.mapImp.enableLayer(key, payload.value)
703
- );
780
+ )
704
781
  }
705
782
  },
706
783
  taxonsSelected: function (payload) {
707
784
  if (this.mapImp) {
708
- this.mapImp.enableConnectivityByTaxonIds(payload.key, payload.value);
785
+ this.mapImp.enableConnectivityByTaxonIds(payload.key, payload.value)
709
786
  }
710
787
  },
711
788
  checkAllTaxons: function (payload) {
712
789
  if (this.mapImp) {
713
790
  payload.keys.forEach((key) =>
714
791
  this.mapImp.enableConnectivityByTaxonIds(key, payload.value)
715
- );
792
+ )
716
793
  }
717
794
  },
718
795
  pathwaysSelected: function (payload) {
719
796
  if (this.mapImp) {
720
- this.mapImp.enablePath(payload.key, payload.value);
797
+ this.mapImp.enablePath(payload.key, payload.value)
721
798
  }
722
799
  },
723
800
  checkAllPathways: function (payload) {
724
801
  if (this.mapImp) {
725
802
  payload.keys.forEach((key) =>
726
803
  this.mapImp.enablePath(key, payload.value)
727
- );
804
+ )
728
805
  }
729
806
  },
730
807
  enablePanZoomEvents: function (flag) {
731
- this.mapImp.enablePanZoomEvents(flag);
808
+ this.mapImp.enablePanZoomEvents(flag)
732
809
  },
733
810
  eventCallback: function () {
734
811
  return (eventType, data, ...args) => {
735
- if (eventType !== "pan-zoom") {
736
- const label = data.label;
737
- const resource = [data.models];
738
- const taxonomy = this.entry;
739
- const biologicalSex = this.biologicalSex;
812
+ if (eventType !== 'pan-zoom') {
813
+ const label = data.label
814
+ const resource = [data.models]
815
+ const taxonomy = this.entry
816
+ const biologicalSex = this.biologicalSex
740
817
  const payload = {
741
818
  dataset: data.dataset,
742
819
  biologicalSex: biologicalSex,
@@ -749,44 +826,49 @@ export default {
749
826
  provenanceTaxonomy: data.taxons
750
827
  ? JSON.parse(data.taxons)
751
828
  : undefined,
752
- };
753
- if (eventType === "click") {
754
- if (this.viewingMode === "Network Discovery") {
755
- this.highlightConnectedPaths([data.models]);
829
+ }
830
+ if (eventType === 'click') {
831
+ if (this.viewingMode === 'Network Discovery') {
832
+ this.highlightConnectedPaths([data.models])
756
833
  } else {
757
- this.currentActive = data.models ? data.models : "";
834
+ this.currentActive = data.models ? data.models : ''
758
835
  }
759
- } else if (eventType === "mouseenter" &&
760
- !(this.viewingMode === "Network Discovery")) {
761
- this.currentHover = data.models ? data.models : "";
836
+ } else if (
837
+ eventType === 'mouseenter' &&
838
+ !(this.viewingMode === 'Network Discovery')
839
+ ) {
840
+ this.currentHover = data.models ? data.models : ''
762
841
  }
763
842
  if (
764
843
  data &&
765
- data.type !== "marker" &&
766
- eventType === "click" &&
767
- !(this.viewingMode === "Network Discovery")
844
+ data.type !== 'marker' &&
845
+ eventType === 'click' &&
846
+ !(this.viewingMode === 'Network Discovery')
768
847
  ) {
769
- this.checkAndCreatePopups(payload);
848
+ this.checkAndCreatePopups(payload)
770
849
  }
771
- this.$emit("resource-selected", payload);
850
+ this.$emit('resource-selected', payload)
772
851
  } else {
773
- this.$emit("pan-zoom-callback", data);
852
+ this.$emit('pan-zoom-callback', data)
774
853
  }
775
- };
854
+ }
776
855
  },
777
856
  // checkNeuronClicked shows a neuron path pop up if a path was recently clicked
778
857
  checkAndCreatePopups: async function (data) {
779
858
  // Call flatmap database to get the connection data
780
- if (this.viewingMode === "Annotation") {
859
+ if (this.viewingMode === 'Annotation') {
781
860
  if (data.feature && data.feature.featureId && data.feature.models) {
782
- this.annotationEntry = { ...data.feature, resourceId: this.serverUUID };
783
- this.displayTooltip(data.feature.models);
861
+ this.annotationEntry = {
862
+ ...data.feature,
863
+ resourceId: this.serverUUID,
864
+ }
865
+ this.displayTooltip(data.feature.models)
784
866
  } else {
785
- this.annotation = {};
867
+ this.annotation = {}
786
868
  }
787
869
  } else {
788
870
  let results =
789
- await this.flatmapQueries.retrieveFlatmapKnowledgeForEvent(data);
871
+ await this.flatmapQueries.retrieveFlatmapKnowledgeForEvent(data)
790
872
  // The line below only creates the tooltip if some data was found on the path
791
873
  // result 0 is the connection, result 1 is the pubmed results from flatmap
792
874
  if (
@@ -794,141 +876,144 @@ export default {
794
876
  results[1] ||
795
877
  (data.feature.hyperlinks && data.feature.hyperlinks.length > 0)
796
878
  ) {
797
- this.resourceForTooltip = data.resource[0];
798
- data.resourceForTooltip = this.resourceForTooltip;
799
- this.createTooltipFromNeuronCuration(data);
879
+ this.resourceForTooltip = data.resource[0]
880
+ data.resourceForTooltip = this.resourceForTooltip
881
+ this.createTooltipFromNeuronCuration(data)
800
882
  }
801
883
  }
802
884
  },
803
885
  popUpCssHacks: function () {
804
886
  // Below is a hack to remove flatmap tooltips while popup is open
805
- let ftooltip = document.querySelector(".flatmap-tooltip-popup");
806
- if (ftooltip) ftooltip.style.display = "none";
807
- document.querySelector(".maplibregl-popup-close-button").style.display =
808
- "block";
809
- this.$refs.tooltip.$el.style.display = "flex";
810
- document.querySelector(".maplibregl-popup-close-button").onclick = () => {
811
- document.querySelector(".flatmap-tooltip-popup").style.display =
812
- "block";
813
- };
887
+ let ftooltip = document.querySelector('.flatmap-tooltip-popup')
888
+ if (ftooltip) ftooltip.style.display = 'none'
889
+ document.querySelector('.maplibregl-popup-close-button').style.display =
890
+ 'block'
891
+ this.$refs.tooltip.$el.style.display = 'flex'
892
+ document.querySelector('.maplibregl-popup-close-button').onclick = () => {
893
+ document.querySelector('.flatmap-tooltip-popup').style.display = 'block'
894
+ }
814
895
  },
815
896
  closeTooltip: function () {
816
- this.$refs.tooltip.$el.style.display = "none";
817
- document.querySelectorAll(".maplibregl-popup").forEach((item) => {
818
- item.style.display = "none";
819
- });
897
+ this.$refs.tooltip.$el.style.display = 'none'
898
+ document.querySelectorAll('.maplibregl-popup').forEach((item) => {
899
+ item.style.display = 'none'
900
+ })
820
901
  },
821
902
  createTooltipFromNeuronCuration: async function (data) {
822
- this.tooltipEntry = await this.flatmapQueries.createTooltipData(data);
823
- this.displayTooltip(data.resource[0]);
903
+ this.tooltipEntry = await this.flatmapQueries.createTooltipData(data)
904
+ this.displayTooltip(data.resource[0])
824
905
  },
825
906
  // Keeping this as an API
826
907
  showPopup: function (featureId, node, options) {
827
- let myOptions = options;
908
+ let myOptions = options
828
909
  if (this.mapImp) {
829
910
  if (myOptions) {
830
- if (!myOptions.className) myOptions.className = "custom-popup";
911
+ if (!myOptions.className) myOptions.className = 'custom-popup'
831
912
  } else {
832
- myOptions = { className: "custom-popup", positionAtLastClick: true };
913
+ myOptions = { className: 'custom-popup', positionAtLastClick: true }
833
914
  }
834
- this.mapImp.showPopup(featureId, node, myOptions);
915
+ this.mapImp.showPopup(featureId, node, myOptions)
835
916
  }
836
917
  },
837
918
  showMarkerPopup: function (featureId, node, options) {
838
919
  if (this.mapImp) {
839
- this.mapImp.showMarkerPopup(featureId, node, options);
920
+ this.mapImp.showMarkerPopup(featureId, node, options)
840
921
  }
841
922
  },
842
923
  closeMinimap: function () {
843
924
  let minimapEl = this.$refs.flatmapContainer.querySelector(
844
- ".maplibregl-ctrl-minimap"
845
- ); // find minimap
925
+ '.maplibregl-ctrl-minimap'
926
+ ) // find minimap
846
927
  if (this.minimapSmall) {
847
928
  //switch the classes on the minimap
848
- minimapEl.classList.add("enlarge");
849
- minimapEl.classList.remove("shrink");
929
+ minimapEl.classList.add('enlarge')
930
+ minimapEl.classList.remove('shrink')
850
931
  } else {
851
- minimapEl.classList.add("shrink");
852
- minimapEl.classList.remove("enlarge");
932
+ minimapEl.classList.add('shrink')
933
+ minimapEl.classList.remove('enlarge')
853
934
  }
854
- this.minimapSmall = !this.minimapSmall;
935
+ this.minimapSmall = !this.minimapSmall
855
936
  },
856
937
  addResizeButtonToMinimap: function () {
857
938
  let minimapEl = this.$refs.flatmapContainer.querySelector(
858
- ".maplibregl-ctrl-minimap"
859
- );
939
+ '.maplibregl-ctrl-minimap'
940
+ )
860
941
  if (minimapEl) {
861
- this.$refs.minimapResize.parentNode.removeChild(
862
- this.$refs.minimapResize
863
- );
864
- minimapEl.appendChild(this.$refs.minimapResize);
865
- this.minimapResizeShow = true;
942
+ if (this.$refs.minimapResize &&
943
+ this.$refs.minimapResize.$el.parentNode) {
944
+ this.$refs.minimapResize.$el.parentNode.removeChild(
945
+ this.$refs.minimapResize.$el)
946
+ }
947
+ minimapEl.appendChild(this.$refs.minimapResize.$el)
948
+ this.minimapResizeShow = true
866
949
  }
867
950
  },
868
951
  setHelpMode: function (helpMode) {
869
952
  if (helpMode) {
870
- this.inHelp = true;
953
+ this.inHelp = true
871
954
  this.hoverVisibilities.forEach((item) => {
872
- item.value = true;
873
- });
874
- this.openFlatmapHelpPopup();
955
+ item.value = true
956
+ })
957
+ this.openFlatmapHelpPopup()
875
958
  } else {
876
- this.inHelp = false;
959
+ this.inHelp = false
877
960
  this.hoverVisibilities.forEach((item) => {
878
- item.value = false;
879
- });
880
- this.closeFlatmapHelpPopup();
961
+ item.value = false
962
+ })
963
+ this.closeFlatmapHelpPopup()
881
964
  }
882
965
  },
883
966
  showToolitip: function (tooltipNumber) {
884
967
  if (!this.inHelp) {
885
- clearTimeout(this.tooltipWait[tooltipNumber]);
968
+ clearTimeout(this.tooltipWait[tooltipNumber])
886
969
  this.tooltipWait[tooltipNumber] = setTimeout(() => {
887
- this.hoverVisibilities[tooltipNumber].value = true;
888
- }, 500);
970
+ this.hoverVisibilities[tooltipNumber].value = true
971
+ }, 500)
889
972
  }
890
973
  },
891
974
  hideToolitip: function (tooltipNumber) {
892
975
  if (!this.inHelp) {
893
- clearTimeout(this.tooltipWait[tooltipNumber]);
976
+ clearTimeout(this.tooltipWait[tooltipNumber])
894
977
  this.tooltipWait[tooltipNumber] = setTimeout(() => {
895
- this.hoverVisibilities[tooltipNumber].value = false;
896
- }, 500);
978
+ this.hoverVisibilities[tooltipNumber].value = false
979
+ }, 500)
897
980
  }
898
981
  },
899
982
  displayTooltip: function (feature) {
900
983
  this.mapImp.showPopup(
901
984
  this.mapImp.modelFeatureIds(feature)[0],
902
985
  this.$refs.tooltip.$el,
903
- { className: "flatmapvuer-popover", positionAtLastClick: true }
904
- );
905
- this.popUpCssHacks();
986
+ { className: 'flatmapvuer-popover', positionAtLastClick: true }
987
+ )
988
+ this.popUpCssHacks()
906
989
  },
907
990
  openFlatmapHelpPopup: function () {
908
991
  if (this.mapImp) {
909
- let heartId = this.mapImp.featureIdsForModel("UBERON:0000948")[0];
910
- const elm = "Click for more information";
911
- this.mapImp.showPopup(heartId, elm, {
912
- anchor: "top",
913
- className: "flatmap-popup-popper",
914
- });
992
+ let heartId = this.mapImp.modelFeatureIds('UBERON:0000948')
993
+ if (heartId && heartId.length > 0) {
994
+ const elm = 'Click for more information'
995
+ this.mapImp.showPopup(heartId[0], elm, {
996
+ anchor: 'top',
997
+ className: 'flatmap-popup-popper',
998
+ })
999
+ }
915
1000
  }
916
1001
  },
917
1002
  closeFlatmapHelpPopup: function () {
918
1003
  this.$el
919
- .querySelectorAll(".maplibregl-popup-close-button")
1004
+ .querySelectorAll('.maplibregl-popup-close-button')
920
1005
  .forEach((item) => {
921
- item.click();
922
- });
1006
+ item.click()
1007
+ })
923
1008
  },
924
1009
  getLabels: function () {
925
- let labels = [];
1010
+ let labels = []
926
1011
  if (this.mapImp) {
927
- let annotations = this.mapImp.annotations;
1012
+ let annotations = this.mapImp.annotations
928
1013
  for (let value of annotations.values()) {
929
- if (value.label) labels.push(value.label);
1014
+ if (value.label) labels.push(value.label)
930
1015
  }
931
- return Array.from(new Set(labels));
1016
+ return Array.from(new Set(labels))
932
1017
  }
933
1018
  },
934
1019
  getState: function () {
@@ -936,15 +1021,15 @@ export default {
936
1021
  let state = {
937
1022
  entry: this.entry,
938
1023
  viewport: this.mapImp.getState(),
939
- };
940
- const identifier = this.mapImp.getIdentifier();
941
- if (this.biologicalSex) state["biologicalSex"] = this.biologicalSex;
1024
+ }
1025
+ const identifier = this.mapImp.getIdentifier()
1026
+ if (this.biologicalSex) state['biologicalSex'] = this.biologicalSex
942
1027
  else if (identifier && identifier.biologicalSex)
943
- state["biologicalSex"] = identifier.biologicalSex;
944
- if (identifier && identifier.uuid) state["uuid"] = identifier.uuid;
945
- return state;
1028
+ state['biologicalSex'] = identifier.biologicalSex
1029
+ if (identifier && identifier.uuid) state['uuid'] = identifier.uuid
1030
+ return state
946
1031
  }
947
- return undefined;
1032
+ return undefined
948
1033
  },
949
1034
  setState: function (state) {
950
1035
  if (state) {
@@ -955,26 +1040,26 @@ export default {
955
1040
  (!state.biologicalSex || state.biologicalSex === this.biologicalSex)
956
1041
  ) {
957
1042
  if (state.viewport) {
958
- this.mapImp.setState(state.viewport);
1043
+ this.mapImp.setState(state.viewport)
959
1044
  }
960
1045
  } else {
961
- this.createFlatmap(state);
1046
+ this.createFlatmap(state)
962
1047
  }
963
- this.setStateRequired = false;
1048
+ this.setStateRequired = false
964
1049
  }
965
1050
  },
966
1051
  restoreMapState: function (state) {
967
1052
  if (state) {
968
- if (state.viewport) this.mapImp.setState(state.viewport);
969
- if (state.searchTerm) this.searchAndShowResult(state.searchTerm, true);
1053
+ if (state.viewport) this.mapImp.setState(state.viewport)
1054
+ if (state.searchTerm) this.searchAndShowResult(state.searchTerm, true)
970
1055
  }
971
1056
  },
972
1057
  createFlatmap: function (state) {
973
1058
  if (!this.mapImp && !this.loading) {
974
- this.loading = true;
975
- let minimap = false;
1059
+ this.loading = true
1060
+ let minimap = false
976
1061
  if (this.displayMinimap) {
977
- minimap = { position: "top-right" };
1062
+ minimap = { position: 'top-right' }
978
1063
  }
979
1064
 
980
1065
  //As for flatmap-viewer@2.2.7, see below for the documentation
@@ -993,28 +1078,28 @@ export default {
993
1078
  // @arg identifier.uuid {string} The unique uuid the flatmap. If given then this exact map will
994
1079
  // be loaded, overriding ``taxon`` and ``biologicalSex``.
995
1080
 
996
- let identifier = { taxon: this.entry };
1081
+ let identifier = { taxon: this.entry }
997
1082
  if (this.uuid) {
998
- identifier.uuid = this.uuid;
1083
+ identifier.uuid = this.uuid
999
1084
  }
1000
1085
  //This now handle the uses of uuid when resuming states
1001
1086
  if (state) {
1002
1087
  if (state.uuid) {
1003
- identifier = { uuid: state.uuid };
1088
+ identifier = { uuid: state.uuid }
1004
1089
  } else if (state.entry) {
1005
- identifier.taxon = state.entry;
1090
+ identifier.taxon = state.entry
1006
1091
  if (state.biologicalSex) {
1007
- identifier["biologicalSex"] = state.biologicalSex;
1008
- } else if (identifier.taxon === "NCBITaxon:9606") {
1092
+ identifier['biologicalSex'] = state.biologicalSex
1093
+ } else if (identifier.taxon === 'NCBITaxon:9606') {
1009
1094
  //For backward compatibility
1010
- identifier["biologicalSex"] = "PATO:0000384";
1095
+ identifier['biologicalSex'] = 'PATO:0000384'
1011
1096
  }
1012
1097
  }
1013
1098
  } else {
1014
1099
  // Set the bioloicalSex now if map is not resumed from
1015
1100
  // a saved state
1016
1101
  if (this.biologicalSex) {
1017
- identifier["biologicalSex"] = this.biologicalSex;
1102
+ identifier['biologicalSex'] = this.biologicalSex
1018
1103
  }
1019
1104
  }
1020
1105
 
@@ -1027,85 +1112,82 @@ export default {
1027
1112
  //annotatable: false,
1028
1113
  //debug: true,
1029
1114
  featureInfo: this.featureInfo,
1030
- "min-zoom": this.minZoom,
1115
+ 'min-zoom': this.minZoom,
1031
1116
  layerControl: true,
1032
1117
  pathControls: true,
1033
1118
  searchable: this.searchable,
1034
1119
  tooltips: this.tooltips,
1035
1120
  minimap: minimap,
1036
1121
  }
1037
- );
1122
+ )
1038
1123
  promise1.then((returnedObject) => {
1039
- this.mapImp = returnedObject;
1040
- this.serverUUID = this.mapImp.getIdentifier().uuid;
1041
- this.onFlatmapReady();
1042
- if (this._stateToBeSet) this.restoreMapState(this._stateToBeSet);
1124
+ this.mapImp = returnedObject
1125
+ this.serverUUID = this.mapImp.getIdentifier().uuid
1126
+ this.onFlatmapReady()
1127
+ if (this._stateToBeSet) this.restoreMapState(this._stateToBeSet)
1043
1128
  else {
1044
- this.restoreMapState(state);
1129
+ this.restoreMapState(state)
1045
1130
  }
1046
- });
1131
+ })
1047
1132
  } else if (state) {
1048
1133
  this._stateToBeSet = {
1049
1134
  viewport: state.viewport,
1050
1135
  searchTerm: state.searchTerm,
1051
- };
1136
+ }
1052
1137
  if (this.mapImp && !this.loading)
1053
- this.restoreMapState(this._stateToBeSet);
1138
+ this.restoreMapState(this._stateToBeSet)
1054
1139
  }
1055
1140
  },
1056
1141
  computePathControlsMaximumHeight() {
1057
- const elem = this.$refs.display;
1142
+ const elem = this.$refs.display
1058
1143
  if (elem) {
1059
- const computed = getComputedStyle(elem);
1144
+ const computed = getComputedStyle(elem)
1060
1145
  const padding =
1061
- parseInt(computed.paddingTop) + parseInt(computed.paddingBottom);
1062
- const height = elem.clientHeight - padding;
1063
- this.pathwaysMaxHeight = height - 170;
1146
+ parseInt(computed.paddingTop) + parseInt(computed.paddingBottom)
1147
+ const height = elem.clientHeight - padding
1148
+ this.pathwaysMaxHeight = height - 170
1064
1149
  }
1065
1150
  },
1066
1151
  mapResize: function () {
1067
1152
  try {
1068
- this.computePathControlsMaximumHeight();
1153
+ this.computePathControlsMaximumHeight()
1069
1154
  if (this.mapImp) {
1070
- this.mapImp.resize();
1071
- this.showMinimap(this.displayMinimap);
1155
+ this.mapImp.resize()
1156
+ this.showMinimap(this.displayMinimap)
1072
1157
  if (this.mapImp._minimap) {
1073
- this.mapImp._minimap.resize();
1158
+ this.mapImp._minimap._miniMap.resize()
1074
1159
  }
1075
1160
  }
1076
1161
  } catch {
1077
- console.error("Map resize error");
1162
+ console.error('Map resize error')
1078
1163
  }
1079
1164
  },
1080
1165
  onFlatmapReady: function () {
1081
1166
  // onFlatmapReady is used for functions that need to run immediately after the flatmap is loaded
1082
- this.sensor = new ResizeSensor(this.$refs.display, this.mapResize);
1083
- if (this.mapImp.options && this.mapImp.options.style === "functional") {
1084
- this.isFC = true;
1167
+ this.sensor = new ResizeSensor(this.$refs.display, this.mapResize)
1168
+ if (this.mapImp.options && this.mapImp.options.style === 'functional') {
1169
+ this.isFC = true
1085
1170
  }
1086
- this.mapImp.setBackgroundOpacity(1);
1087
- this.backgroundChangeCallback(this.currentBackground);
1088
- this.pathways = this.mapImp.pathTypes();
1089
- this.mapImp.enableCentrelines(false);
1171
+ this.mapImp.setBackgroundOpacity(1)
1172
+ this.backgroundChangeCallback(this.currentBackground)
1173
+ this.pathways = this.mapImp.pathTypes()
1174
+ this.mapImp.enableCentrelines(false)
1090
1175
  //Disable layers for now
1091
1176
  //this.layers = this.mapImp.getLayers();
1092
- this.systems = processSystems(this.mapImp.getSystems());
1093
- this.taxonConnectivity = processTaxon(
1094
- this.flatmapAPI,
1095
- this.mapImp.taxonIdentifiers
1096
- );
1097
- this.addResizeButtonToMinimap();
1098
- this.loading = false;
1099
- this.computePathControlsMaximumHeight();
1100
- this.drawerOpen = true;
1101
- this.mapResize();
1102
- this.$emit("ready", this);
1177
+ this.processSystems(this.mapImp.getSystems())
1178
+ this.processTaxon(this.flatmapAPI, this.mapImp.taxonIdentifiers)
1179
+ this.addResizeButtonToMinimap()
1180
+ this.loading = false
1181
+ this.computePathControlsMaximumHeight()
1182
+ this.drawerOpen = true
1183
+ this.mapResize()
1184
+ this.$emit('ready', this)
1103
1185
  },
1104
1186
  showMinimap: function (flag) {
1105
- if (this.mapImp) this.mapImp.showMinimap(flag);
1187
+ if (this.mapImp) this.mapImp.showMinimap(flag)
1106
1188
  },
1107
1189
  showPathwaysDrawer: function (flag) {
1108
- this.drawerOpen = flag;
1190
+ this.drawerOpen = flag
1109
1191
  },
1110
1192
  /**
1111
1193
  * Function to display features with annotation matching the provided term,
@@ -1113,17 +1195,17 @@ export default {
1113
1195
  */
1114
1196
  searchAndShowResult: function (term, displayLabel) {
1115
1197
  if (this.mapImp) {
1116
- if (term === undefined || term === "") {
1117
- this.mapImp.clearSearchResults();
1118
- return true;
1198
+ if (term === undefined || term === '') {
1199
+ this.mapImp.clearSearchResults()
1200
+ return true
1119
1201
  } else {
1120
- const searchResults = this.mapImp.search(term);
1202
+ const searchResults = this.mapImp.search(term)
1121
1203
  if (
1122
1204
  searchResults &&
1123
1205
  searchResults.results &&
1124
1206
  searchResults.results.length > 0
1125
1207
  ) {
1126
- this.mapImp.showSearchResults(searchResults);
1208
+ this.mapImp.showSearchResults(searchResults)
1127
1209
  if (
1128
1210
  displayLabel &&
1129
1211
  searchResults.results[0].featureId &&
@@ -1131,29 +1213,29 @@ export default {
1131
1213
  ) {
1132
1214
  const annotation = this.mapImp.annotation(
1133
1215
  searchResults.results[0].featureId
1134
- );
1216
+ )
1135
1217
  this.mapImp.showPopup(
1136
1218
  searchResults.results[0].featureId,
1137
1219
  annotation.label,
1138
1220
  {
1139
- className: "custom-popup",
1221
+ className: 'custom-popup',
1140
1222
  positionAtLastClick: false,
1141
1223
  preserveSelection: true,
1142
1224
  }
1143
- );
1225
+ )
1144
1226
  }
1145
- return true;
1146
- } else this.mapImp.clearSearchResults();
1227
+ return true
1228
+ } else this.mapImp.clearSearchResults()
1147
1229
  }
1148
1230
  }
1149
- return false;
1231
+ return false
1150
1232
  },
1151
1233
  /**
1152
1234
  * Get the list of suggested terms
1153
1235
  */
1154
1236
  searchSuggestions: function (term) {
1155
- if (this.mapImp) return this.mapImp.search(term);
1156
- return [];
1237
+ if (this.mapImp) return this.mapImp.search(term)
1238
+ return []
1157
1239
  },
1158
1240
  },
1159
1241
  props: {
@@ -1161,7 +1243,7 @@ export default {
1161
1243
  uuid: String,
1162
1244
  biologicalSex: {
1163
1245
  type: String,
1164
- default: "",
1246
+ default: '',
1165
1247
  },
1166
1248
  featureInfo: {
1167
1249
  type: Boolean,
@@ -1216,23 +1298,23 @@ export default {
1216
1298
  default: function () {
1217
1299
  return [
1218
1300
  {
1219
- display: "Open AC Map",
1220
- key: "AC",
1301
+ display: 'Open AC Map',
1302
+ key: 'AC',
1221
1303
  },
1222
1304
  {
1223
- display: "Open FC Map",
1224
- key: "FC",
1305
+ display: 'Open FC Map',
1306
+ key: 'FC',
1225
1307
  },
1226
1308
  {
1227
- display: "Open 3D Human Map",
1228
- key: "3D",
1309
+ display: 'Open 3D Human Map',
1310
+ key: '3D',
1229
1311
  },
1230
- ];
1312
+ ]
1231
1313
  },
1232
1314
  },
1233
1315
  showStarInLegend: {
1234
1316
  type: Boolean,
1235
- default: false
1317
+ default: false,
1236
1318
  },
1237
1319
  isLegacy: {
1238
1320
  type: Boolean,
@@ -1242,11 +1324,6 @@ export default {
1242
1324
  type: Boolean,
1243
1325
  default: false,
1244
1326
  },
1245
- latestChangesMessage: {
1246
- type: String,
1247
- default:
1248
- "'Observed In' controls and information are now included in AC maps. System control with FTU information has been added to the FC map.",
1249
- },
1250
1327
  /**
1251
1328
  * State containing state of the flatmap.
1252
1329
  */
@@ -1259,18 +1336,18 @@ export default {
1259
1336
  */
1260
1337
  flatmapAPI: {
1261
1338
  type: String,
1262
- default: "https://mapcore-demo.org/current/flatmap/v3/",
1339
+ default: 'https://mapcore-demo.org/current/flatmap/v3/',
1263
1340
  },
1264
1341
  sparcAPI: {
1265
1342
  type: String,
1266
- default: "https://api.sparc.science/",
1343
+ default: 'https://api.sparc.science/',
1267
1344
  },
1268
1345
  },
1269
1346
  provide() {
1270
1347
  return {
1271
1348
  flatmapAPI: this.flatmapAPI,
1272
1349
  sparcAPI: this.sparcAPI,
1273
- };
1350
+ }
1274
1351
  },
1275
1352
  data: function () {
1276
1353
  return {
@@ -1280,14 +1357,14 @@ export default {
1280
1357
  pathways: [],
1281
1358
  sckanDisplay: [
1282
1359
  {
1283
- label: "Display Path with SCKAN",
1284
- key: "VALID",
1360
+ label: 'Display Path with SCKAN',
1361
+ key: 'VALID',
1285
1362
  },
1286
1363
  ],
1287
1364
  centreLines: [
1288
1365
  {
1289
- label: "Display Nerves",
1290
- key: "centrelines",
1366
+ label: 'Display Nerves',
1367
+ key: 'centrelines',
1291
1368
  enabled: false,
1292
1369
  },
1293
1370
  ],
@@ -1309,8 +1386,8 @@ export default {
1309
1386
  yellowstar: yellowstar,
1310
1387
  isFC: false,
1311
1388
  inHelp: false,
1312
- currentBackground: "white",
1313
- availableBackground: ["white", "lightskyblue", "black"],
1389
+ currentBackground: 'white',
1390
+ availableBackground: ['white', 'lightskyblue', 'black'],
1314
1391
  loading: false,
1315
1392
  flatmapMarker: flatmapMarker,
1316
1393
  tooltipEntry: createUnfilledTooltipData(),
@@ -1321,26 +1398,28 @@ export default {
1321
1398
  outlinesRadio: true,
1322
1399
  minimapResizeShow: false,
1323
1400
  minimapSmall: false,
1324
- currentActive: "",
1325
- currentHover: "",
1326
- viewingMode: "Exploration",
1327
- viewingModes: ["Annotation", "Exploration", "Network Discovery"],
1328
- };
1401
+ currentActive: '',
1402
+ currentHover: '',
1403
+ viewingMode: 'Exploration',
1404
+ viewingModes: ['Annotation', 'Exploration', 'Network Discovery'],
1405
+ openMapRef: undefined,
1406
+ backgroundIconRef: undefined,
1407
+ }
1329
1408
  },
1330
1409
  watch: {
1331
1410
  entry: function () {
1332
- if (!this.state) this.createFlatmap();
1411
+ if (!this.state) this.createFlatmap()
1333
1412
  },
1334
1413
  helpMode: function (val) {
1335
- this.setHelpMode(val);
1414
+ this.setHelpMode(val)
1336
1415
  },
1337
1416
  state: {
1338
1417
  handler: function (state) {
1339
1418
  if (this.mapManager) {
1340
- this.setState(state);
1419
+ this.setState(state)
1341
1420
  } else {
1342
1421
  //this component has not been mounted yet
1343
- this.setStateRequired = true;
1422
+ this.setStateRequired = true
1344
1423
  }
1345
1424
  },
1346
1425
  immediate: true,
@@ -1348,30 +1427,30 @@ export default {
1348
1427
  },
1349
1428
  },
1350
1429
  mounted: function () {
1351
- const flatmap = require("@abi-software/flatmap-viewer");
1352
- this.tooltipWait = [];
1353
- this.tooltipWait.length = this.hoverVisibilities.length;
1354
- this.mapManager = new flatmap.MapManager(this.flatmapAPI);
1355
- this.flatmapQueries = new FlatmapQueries();
1356
- this.flatmapQueries.initialise(this.flatmapAPI);
1430
+ this.openMapRef = ref(this.$refs.openMapRef)
1431
+ this.backgroundIconRef = ref(this.$refs.backgroundIconRef)
1432
+ this.tooltipWait = []
1433
+ this.tooltipWait.length = this.hoverVisibilities.length
1434
+ this.mapManager = new flatmap.MapManager(this.flatmapAPI)
1435
+ this.flatmapQueries = new FlatmapQueries()
1436
+ this.flatmapQueries.initialise(this.flatmapAPI)
1357
1437
  if (this.state) {
1358
1438
  //State is set and require to set the state
1359
1439
  if (this.setStateRequired) {
1360
- this.setState(this.state);
1440
+ this.setState(this.state)
1361
1441
  }
1362
1442
  } else if (this.renderAtMounted) {
1363
- this.createFlatmap();
1443
+ this.createFlatmap()
1364
1444
  }
1365
1445
  },
1366
- };
1446
+ }
1367
1447
  </script>
1368
1448
 
1369
- <!-- Add "scoped" attribute to limit CSS to this component only -->
1370
- <style scoped lang="scss">
1371
- @import "~element-ui/packages/theme-chalk/src/button";
1372
- @import "~element-ui/packages/theme-chalk/src/loading";
1373
- @import "~element-ui/packages/theme-chalk/src/row";
1374
- @import "~element-ui/packages/theme-chalk/src/select";
1449
+ <style lang="scss" scoped>
1450
+ @use 'element-plus/theme-chalk/src/button';
1451
+ @use 'element-plus/theme-chalk/src/loading';
1452
+ @use 'element-plus/theme-chalk/src/row';
1453
+ @use 'element-plus/theme-chalk/src/select';
1375
1454
 
1376
1455
  .beta-popovers {
1377
1456
  position: absolute;
@@ -1476,7 +1555,7 @@ export default {
1476
1555
  display: inline-block;
1477
1556
  }
1478
1557
 
1479
- ::v-deep .popper-bump-right {
1558
+ :deep(.popper-bump-right) {
1480
1559
  left: 30px;
1481
1560
  }
1482
1561
 
@@ -1498,11 +1577,11 @@ export default {
1498
1577
  display: none;
1499
1578
  }
1500
1579
 
1501
- ::v-deep .maplibregl-popup {
1580
+ :deep(.maplibregl-popup) {
1502
1581
  max-width: 300px !important;
1503
1582
  }
1504
1583
 
1505
- ::v-deep .flatmap-tooltip-popup {
1584
+ :deep(.flatmap-tooltip-popup) {
1506
1585
  &.maplibregl-popup-anchor-bottom {
1507
1586
  .maplibregl-popup-content {
1508
1587
  margin-bottom: 12px;
@@ -1556,7 +1635,7 @@ export default {
1556
1635
  align-items: center;
1557
1636
  &::after,
1558
1637
  &::before {
1559
- content: "";
1638
+ content: '';
1560
1639
  display: block;
1561
1640
  position: absolute;
1562
1641
  width: 0;
@@ -1570,7 +1649,7 @@ export default {
1570
1649
  }
1571
1650
  }
1572
1651
 
1573
- ::v-deep .maplibregl-popup {
1652
+ :deep(.maplibregl-popup) {
1574
1653
  &.flatmap-marker-popup {
1575
1654
  box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
1576
1655
  pointer-events: auto;
@@ -1580,25 +1659,25 @@ export default {
1580
1659
 
1581
1660
  /* Fix for chrome bug where under triangle pops up above one on top of it */
1582
1661
  .selector:not(*:root),
1583
- ::v-deep.flatmap-tooltip-popup {
1662
+ :deep(.flatmap-tooltip-popup) {
1584
1663
  .maplibregl-popup-content::after {
1585
1664
  top: 99.9%;
1586
1665
  }
1587
1666
  }
1588
1667
 
1589
- ::v-deep .flatmap-tooltip-dialog {
1668
+ :deep(.flatmap-tooltip-dialog) {
1590
1669
  .maplibregl-popup-tip {
1591
1670
  display: none;
1592
1671
  }
1593
1672
  }
1594
1673
 
1595
- ::v-deep .flatmap-marker-popup {
1674
+ :deep(.flatmap-marker-popup){
1596
1675
  .maplibregl-popup-content {
1597
1676
  padding: 0px;
1598
1677
  }
1599
1678
  }
1600
1679
 
1601
- ::v-deep .flatmapvuer-popover {
1680
+ :deep(.flatmapvuer-popover) {
1602
1681
  .maplibregl-popup-close-button {
1603
1682
  position: absolute;
1604
1683
  right: 0.5em;
@@ -1638,32 +1717,27 @@ export default {
1638
1717
  }
1639
1718
  }
1640
1719
 
1641
- ::v-deep .background-popper {
1720
+ :deep(.background-popper.el-popover.el-popper) {
1642
1721
  padding: 5px 12px;
1643
1722
  background-color: #ffffff;
1644
1723
  border: 1px solid $app-primary-color;
1645
1724
  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);
1646
- height: 270px;
1647
- width: 175px;
1648
- min-width: 175px;
1649
- &.el-popper[x-placement^="top"] {
1650
- .popper__arrow {
1651
- border-top-color: $app-primary-color !important;
1652
- &::after {
1653
- border-top-color: #fff !important;
1654
- }
1725
+ height: 290px;
1726
+ min-width: 200px;
1727
+ .el-popper__arrow {
1728
+ &:before {
1729
+ border-color: $app-primary-color;
1655
1730
  }
1656
1731
  }
1657
1732
  }
1658
1733
 
1659
- ::v-deep .open-map-popper {
1734
+ :deep(.open-map-popper.el-popover.el-popper) {
1660
1735
  padding-top: 5px;
1661
1736
  padding-bottom: 5px;
1662
1737
  background-color: #ffffff;
1663
1738
  border: 1px solid $app-primary-color;
1664
1739
  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);
1665
- width: 178px;
1666
- min-width: 178px;
1740
+ min-width: 188px;
1667
1741
 
1668
1742
  .el-row ~ .el-row {
1669
1743
  margin-top: 8px;
@@ -1672,14 +1746,14 @@ export default {
1672
1746
  .el-button {
1673
1747
  padding-top: 5px;
1674
1748
  padding-bottom: 5px;
1749
+ background: #f3e6f9;
1750
+ border-color: $app-primary-color;
1751
+ color: $app-primary-color;
1675
1752
  }
1676
1753
 
1677
- &.el-popper[x-placement^="top"] {
1678
- .popper__arrow {
1679
- border-top-color: $app-primary-color !important;
1680
- &:after {
1681
- border-top-color: #fff !important;
1682
- }
1754
+ .el-popper__arrow {
1755
+ &:before {
1756
+ border-color: $app-primary-color;
1683
1757
  }
1684
1758
  }
1685
1759
  }
@@ -1693,7 +1767,6 @@ export default {
1693
1767
 
1694
1768
  .backgroundControl {
1695
1769
  display: flex;
1696
- margin-top: 12px;
1697
1770
  }
1698
1771
 
1699
1772
  .backgroundChoice {
@@ -1728,12 +1801,12 @@ export default {
1728
1801
  }
1729
1802
  }
1730
1803
 
1731
- ::v-deep .maplibregl-ctrl-minimap {
1804
+ :deep(.maplibregl-ctrl-minimap) {
1732
1805
  transform-origin: top right;
1733
1806
  @media (max-width: 1250px) {
1734
1807
  height: 125px !important; // important is needed here as we are over-riding the style set by the flatmap
1735
1808
  width: 180px !important;
1736
- >>> .maplibregl-canvas .maplibregl-canvas {
1809
+ :deep(.maplibregl-canvas .maplibregl-canvas) {
1737
1810
  height: 125px !important;
1738
1811
  width: 180px !important;
1739
1812
  }
@@ -1741,7 +1814,7 @@ export default {
1741
1814
  @media (min-width: 1251px) {
1742
1815
  height: 190px !important;
1743
1816
  width: 300px !important;
1744
- >>> .maplibregl-canvas .maplibregl-canvas {
1817
+ :deep(.maplibregl-canvas .maplibregl-canvas) {
1745
1818
  height: 190px !important;
1746
1819
  width: 300px !important;
1747
1820
  }
@@ -1774,7 +1847,7 @@ export default {
1774
1847
  }
1775
1848
  }
1776
1849
 
1777
- ::v-deep .flatmap-popper {
1850
+ :deep(.flatmap-popper.el-popper.el-popper) {
1778
1851
  padding: 6px 4px;
1779
1852
  font-size: 12px;
1780
1853
  color: rgb(48, 49, 51);
@@ -1788,40 +1861,24 @@ export default {
1788
1861
  word-break: keep-all;
1789
1862
  white-space: unset;
1790
1863
  }
1791
- &.left-popper {
1792
- .popper__arrow {
1793
- border-left-color: $app-primary-color !important;
1794
- &::after {
1795
- border-left-color: #f3ecf6 !important;
1796
- }
1797
- }
1798
- }
1799
- &.right-popper {
1800
- .popper__arrow {
1801
- border-right-color: $app-primary-color !important;
1802
- &:after {
1803
- border-right-color: #f3ecf6 !important;
1804
- }
1805
- }
1806
- }
1807
- &.el-popper[x-placement^="top"] {
1808
- .popper__arrow {
1809
- border-top-color: $app-primary-color !important;
1810
- &:after {
1811
- border-top-color: #f3ecf6 !important;
1812
- }
1864
+ .el-popper__arrow {
1865
+ &:before {
1866
+ border-color: $app-primary-color;
1867
+ background-color: #f3ecf6;
1813
1868
  }
1814
1869
  }
1815
1870
  }
1816
1871
 
1817
- ::v-deep .el-loading-spinner {
1818
- i,
1872
+ :deep(.el-loading-spinner) {
1873
+ .path {
1874
+ stroke: $app-primary-color;
1875
+ }
1819
1876
  .el-loading-text {
1820
1877
  color: $app-primary-color;
1821
1878
  }
1822
1879
  }
1823
1880
 
1824
- ::v-deep .flatmap-popup-popper {
1881
+ :deep(.flatmap-popup-popper) {
1825
1882
  .maplibregl-popup-tip {
1826
1883
  border-bottom-color: $app-primary-color;
1827
1884
  }
@@ -1839,18 +1896,18 @@ export default {
1839
1896
  }
1840
1897
  }
1841
1898
 
1842
- ::v-deep .popper-zoomout {
1899
+ :deep(.popper-zoomout) {
1843
1900
  padding-right: 13px !important;
1844
1901
  left: -21px !important;
1845
1902
  }
1846
1903
 
1847
- ::v-deep .popper-zoomout {
1904
+ :deep(.popper-zoomout) {
1848
1905
  .popper__arrow {
1849
1906
  left: 53px !important;
1850
1907
  }
1851
1908
  }
1852
1909
 
1853
- ::v-deep .maplibregl-popup-content {
1910
+ :deep(.maplibregl-popup-content) {
1854
1911
  padding: 0px;
1855
1912
  }
1856
1913
 
@@ -1860,13 +1917,13 @@ export default {
1860
1917
  bottom: 16px;
1861
1918
  }
1862
1919
 
1863
- ::v-deep .my-drawer {
1920
+ :deep(.my-drawer) {
1864
1921
  background: rgba(0, 0, 0, 0);
1865
1922
  box-shadow: none;
1866
1923
  }
1867
1924
 
1868
1925
  .drawer {
1869
- ::v-deep .el-drawer:focus {
1926
+ :deep(.el-drawer:focus) {
1870
1927
  outline: none;
1871
1928
  }
1872
1929
  }
@@ -1913,7 +1970,7 @@ export default {
1913
1970
  }
1914
1971
  }
1915
1972
 
1916
- ::v-deep .maplibregl-canvas-container {
1973
+ :deep(.maplibregl-canvas-container) {
1917
1974
  canvas {
1918
1975
  outline: none;
1919
1976
  }
@@ -1925,13 +1982,13 @@ export default {
1925
1982
  }
1926
1983
 
1927
1984
  .flatmap-radio {
1928
- ::v-deep label {
1985
+ :deep(label) {
1929
1986
  margin-right: 20px;
1930
1987
  &:last-child {
1931
1988
  margin-right: 0px;
1932
1989
  }
1933
1990
  }
1934
- ::v-deep .el-radio__input {
1991
+ :deep(.el-radio__input) {
1935
1992
  &.is-checked {
1936
1993
  & + .el-radio__label {
1937
1994
  color: $app-primary-color;
@@ -1947,7 +2004,7 @@ export default {
1947
2004
  }
1948
2005
  }
1949
2006
 
1950
- ::v-deep .custom-popup {
2007
+ :deep(.custom-popup) {
1951
2008
  .maplibregl-popup-tip {
1952
2009
  display: none;
1953
2010
  }
@@ -1957,7 +2014,7 @@ export default {
1957
2014
  pointer-events: none;
1958
2015
  display: none;
1959
2016
  background: #fff;
1960
- font-family: "Asap", sans-serif;
2017
+ font-family: 'Asap', sans-serif;
1961
2018
  font-size: 12pt;
1962
2019
  color: $app-primary-color;
1963
2020
  border: 1px solid $app-primary-color;
@@ -1970,7 +2027,7 @@ export default {
1970
2027
  align-items: center;
1971
2028
  &::after,
1972
2029
  &::before {
1973
- content: "";
2030
+ content: '';
1974
2031
  display: block;
1975
2032
  position: absolute;
1976
2033
  width: 0;
@@ -2029,22 +2086,24 @@ export default {
2029
2086
  background-color: var(--white);
2030
2087
  font-weight: 500;
2031
2088
  color: rgb(48, 49, 51);
2032
- ::v-deep .el-input__inner {
2089
+ :deep(.el-input__inner) {
2033
2090
  height: 30px;
2034
2091
  color: rgb(48, 49, 51);
2035
2092
  }
2036
- ::v-deep .el-input__inner {
2037
- &is-focus,
2038
- &:focus {
2039
- border: 1px solid $app-primary-color;
2093
+ :deep() {
2094
+ .el-input__inner {
2095
+ &is-focus,
2096
+ &:focus {
2097
+ border: 1px solid $app-primary-color;
2098
+ }
2040
2099
  }
2041
2100
  }
2042
- ::v-deep .el-input__icon {
2101
+ :deep(.el-input__icon) {
2043
2102
  line-height: 30px;
2044
2103
  }
2045
2104
  }
2046
2105
 
2047
- ::v-deep .flatmap_dropdown {
2106
+ :deep(.flatmap_dropdown) {
2048
2107
  min-width: 160px !important;
2049
2108
  .el-select-dropdown__item {
2050
2109
  white-space: nowrap;
@@ -2056,4 +2115,3 @@ export default {
2056
2115
  }
2057
2116
  }
2058
2117
  </style>
2059
-