@abi-software/flatmapvuer 0.6.3-vue.3.9 → 1.0.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 (38) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +120 -120
  3. package/cypress.config.js +23 -23
  4. package/dist/flatmapvuer.js +15894 -16259
  5. package/dist/flatmapvuer.umd.cjs +132 -145
  6. package/dist/index.html +17 -17
  7. package/dist/style.css +1 -1
  8. package/package.json +95 -95
  9. package/public/index.html +17 -17
  10. package/reporter-config.json +9 -9
  11. package/src/App.vue +310 -310
  12. package/src/assets/_variables.scss +43 -43
  13. package/src/assets/styles.scss +5 -5
  14. package/src/components/AnnotationTool.vue +450 -446
  15. package/src/components/EventBus.js +3 -3
  16. package/src/components/ExternalResourceCard.vue +107 -107
  17. package/src/components/FlatmapVuer.vue +2600 -2531
  18. package/src/components/MultiFlatmapVuer.vue +731 -731
  19. package/src/components/ProvenancePopup.vue +503 -495
  20. package/src/components/SelectionsGroup.vue +255 -255
  21. package/src/components/Tooltip.vue +50 -50
  22. package/src/components/TreeControls.vue +231 -231
  23. package/src/components/index.js +7 -7
  24. package/src/components/legends/DynamicLegends.vue +106 -106
  25. package/src/components/legends/SvgLegends.vue +112 -112
  26. package/src/icons/flatmap-marker.js +1 -1
  27. package/src/icons/fonts/mapicon-species.svg +14 -14
  28. package/src/icons/fonts/mapicon-species.ttf +0 -0
  29. package/src/icons/fonts/mapicon-species.woff +0 -0
  30. package/src/icons/mapicon-species-style.css +42 -42
  31. package/src/icons/yellowstar.js +5 -5
  32. package/src/legends/legend.svg +25 -25
  33. package/src/main.js +19 -19
  34. package/src/services/flatmapQueries.js +453 -453
  35. package/src/store/index.js +23 -23
  36. package/vite.config.js +73 -73
  37. package/vite.static-build.js +12 -12
  38. package/vuese-generator.js +64 -64
@@ -1,495 +1,503 @@
1
- <template>
2
- <div v-if="entry" class="main" v-loading="loading">
3
- <div class="block" v-if="entry.title">
4
- <span class="title">{{ capitalise(entry.title) }}</span>
5
- <div
6
- v-if="
7
- entry.provenanceTaxonomyLabel &&
8
- entry.provenanceTaxonomyLabel.length > 0
9
- "
10
- class="subtitle"
11
- >
12
- {{ provSpeciesDescription }}
13
- </div>
14
- </div>
15
- <div class="block" v-else>
16
- <span class="title">{{ entry.featureId }}</span>
17
- </div>
18
- <div v-show="showDetails" class="hide" id="hide-path-info" @click="showDetails = false">
19
- Hide path information
20
- <el-icon><el-icon-arrow-up /></el-icon>
21
- </div>
22
- <div v-show="!showDetails" class="hide" id="show-path-info" @click="showDetails = true">
23
- Show path information
24
- <el-icon><el-icon-arrow-down /></el-icon>
25
- </div>
26
- <transition name="slide-fade">
27
- <div v-show="showDetails" class="content-container scrollbar">
28
- {{ entry.paths }}
29
- <div v-if="entry.origins && entry.origins.length > 0" class="block">
30
- <div>
31
- <span class="attribute-title">Origin</span>
32
- <el-popover
33
- width="250"
34
- trigger="hover"
35
- :teleported="false"
36
- popper-class="popover-origin-help"
37
- >
38
- <template #reference>
39
- <el-icon class="info"><el-icon-warning /></el-icon>
40
- </template>
41
- <span style="word-break: keep-all">
42
- <i>Origin</i> {{ originDescription }}
43
- </span>
44
-
45
- </el-popover>
46
- </div>
47
- <div
48
- v-for="(origin, i) in entry.origins"
49
- class="attribute-content"
50
- :origin-item-label="origin"
51
- :key="origin"
52
- >
53
- {{ capitalise(origin) }}
54
- <div v-if="i != entry.origins.length - 1" class="seperator"></div>
55
- </div>
56
- <el-button
57
- v-show="
58
- entry.originsWithDatasets && entry.originsWithDatasets.length > 0
59
- "
60
- class="button"
61
- id="open-dendrites-button"
62
- @click="openDendrites"
63
- >
64
- Explore origin data
65
- </el-button>
66
- </div>
67
- <div
68
- v-if="entry.components && entry.components.length > 0"
69
- class="block"
70
- >
71
- <div class="attribute-title">Components</div>
72
- <div
73
- v-for="(component, i) in entry.components"
74
- class="attribute-content"
75
- :component-item-label="component"
76
- :key="component"
77
- >
78
- {{ capitalise(component) }}
79
- <div
80
- v-if="i != entry.components.length - 1"
81
- class="seperator"
82
- ></div>
83
- </div>
84
- </div>
85
- <div
86
- v-if="entry.destinations && entry.destinations.length > 0"
87
- class="block"
88
- >
89
- <div>
90
- <span class="attribute-title">Destination</span>
91
- <el-popover
92
- width="250"
93
- trigger="hover"
94
- :teleported="false"
95
- popper-class="popover-origin-help"
96
- >
97
- <template #reference>
98
- <el-icon class="info"><el-icon-warning /></el-icon>
99
- </template>
100
- <span style="word-break: keep-all">
101
- <i>Destination</i> is where the axons terminate
102
- </span>
103
- </el-popover>
104
- </div>
105
- <div
106
- v-for="(destination, i) in entry.destinations"
107
- class="attribute-content"
108
- :destination-item-label="destination"
109
- :key="destination"
110
- >
111
- {{ capitalise(destination) }}
112
- <div
113
- v-if="i != entry.destinations.length - 1"
114
- class="seperator"
115
- ></div>
116
- </div>
117
- <el-button
118
- v-show="
119
- entry.destinationsWithDatasets &&
120
- entry.destinationsWithDatasets.length > 0
121
- "
122
- class="button"
123
- @click="openAxons"
124
- >
125
- Explore destination data
126
- </el-button>
127
- </div>
128
-
129
- <el-button
130
- v-show="
131
- entry.componentsWithDatasets &&
132
- entry.componentsWithDatasets.length > 0
133
- "
134
- class="button"
135
- @click="openAll"
136
- >
137
- Search for data on components
138
- </el-button>
139
-
140
- <external-resource-card :resources="resources"></external-resource-card>
141
- </div>
142
- </transition>
143
- </div>
144
- </template>
145
-
146
- <script>
147
- import {
148
- ArrowUp as ElIconArrowUp,
149
- ArrowDown as ElIconArrowDown,
150
- Warning as ElIconWarning,
151
- } from '@element-plus/icons-vue'
152
- /* eslint-disable no-alert, no-console */
153
- import {
154
- ElButton as Button,
155
- ElContainer as Container,
156
- ElIcon as Icon,
157
- } from 'element-plus'
158
-
159
- import EventBus from './EventBus'
160
- import ExternalResourceCard from './ExternalResourceCard.vue'
161
-
162
- const titleCase = (str) => {
163
- return str.replace(/\w\S*/g, (t) => {
164
- return t.charAt(0).toUpperCase() + t.substr(1).toLowerCase()
165
- })
166
- }
167
-
168
- const capitalise = function (str) {
169
- if (str) return str.charAt(0).toUpperCase() + str.slice(1)
170
- return ''
171
- }
172
-
173
- export default {
174
- name: 'ProvenancePopup',
175
- components: {
176
- Button,
177
- Container,
178
- Icon,
179
- ExternalResourceCard,
180
- ElIconArrowUp,
181
- ElIconArrowDown,
182
- ElIconWarning,
183
- },
184
- props: {
185
- entry: {
186
- type: Object,
187
- default: () => ({
188
- destinations: [],
189
- origins: [],
190
- components: [],
191
- destinationsWithDatasets: [],
192
- originsWithDatasets: [],
193
- componentsWithDatasets: [],
194
- resource: undefined,
195
- }),
196
- },
197
- },
198
- data: function () {
199
- return {
200
- controller: undefined,
201
- activeSpecies: undefined,
202
- pubmedSearchUrl: '',
203
- loading: false,
204
- showToolip: false,
205
- showDetails: false,
206
- originDescriptions: {
207
- motor: 'is the location of the initial cell body of the circuit',
208
- sensory: 'is the location of the initial cell body in the PNS circuit',
209
- },
210
- componentsWithDatasets: [],
211
- uberons: [{ id: undefined, name: undefined }],
212
- }
213
- },
214
- computed: {
215
- resources: function () {
216
- let resources = []
217
- if (this.entry && this.entry.hyperlinks) {
218
- resources = this.entry.hyperlinks
219
- }
220
- return resources
221
- },
222
- originDescription: function () {
223
- if (
224
- this.entry &&
225
- this.entry.title &&
226
- this.entry.title.toLowerCase().includes('motor')
227
- ) {
228
- return this.originDescriptions.motor
229
- } else {
230
- return this.originDescriptions.sensory
231
- }
232
- },
233
- provSpeciesDescription: function () {
234
- let text = 'Observed in'
235
- this.entry.provenanceTaxonomyLabel.forEach((label) => {
236
- text += ` ${label},`
237
- })
238
- text = text.slice(0, -1) // remove last comma
239
- text += ' species'
240
- return text
241
- },
242
- },
243
- methods: {
244
- titleCase: function (title) {
245
- return titleCase(title)
246
- },
247
- capitalise: function (text) {
248
- return capitalise(text)
249
- },
250
- openUrl: function (url) {
251
- window.open(url, '_blank')
252
- },
253
- openAll: function () {
254
- EventBus.emit('onActionClick', {
255
- type: 'Facets',
256
- labels: this.entry.componentsWithDatasets.map((a) => a.name),
257
- })
258
- },
259
- openAxons: function () {
260
- EventBus.emit('onActionClick', {
261
- type: 'Facets',
262
- labels: this.entry.destinationsWithDatasets.map((a) => a.name),
263
- })
264
- },
265
- openDendrites: function () {
266
- EventBus.emit('onActionClick', {
267
- type: 'Facets',
268
- labels: this.entry.originsWithDatasets.map((a) => a.name),
269
- })
270
- },
271
- pubmedSearchUrlUpdate: function (val) {
272
- this.pubmedSearchUrl = val
273
- },
274
- },
275
- }
276
- </script>
277
-
278
- <style lang="scss" scoped>
279
-
280
- .display {
281
- width: 44px;
282
- word-break: normal;
283
- }
284
-
285
- .title {
286
- text-align: left;
287
- width: 16em;
288
- line-height: 1.5em !important;
289
- font-size: 1em;
290
- font-family: Helvetica;
291
- font-weight: 500;
292
- /* font-weight: bold; */
293
- padding-bottom: 8px;
294
- }
295
-
296
- .block {
297
- margin-bottom: 0.5em;
298
- }
299
-
300
- .pub {
301
- width: 16rem;
302
- }
303
-
304
- .icon {
305
- right: 0px;
306
- position: absolute;
307
- top: 10px;
308
- }
309
-
310
- .icon:hover {
311
- cursor: pointer;
312
- }
313
-
314
- .popover-origin-help {
315
- text-transform: none !important; // need to overide the tooltip text transform
316
- }
317
-
318
- .info {
319
- transform: rotate(180deg);
320
- color: #8300bf;
321
- margin-left: 8px;
322
- }
323
-
324
- .seperator {
325
- width: 90%;
326
- height: 1px;
327
- background-color: #bfbec2;
328
- }
329
-
330
- .hide {
331
- color: $app-primary-color;
332
- cursor: pointer;
333
- margin-right: 6px;
334
- margin-top: 3px;
335
- }
336
-
337
- .slide-fade-enter-active {
338
- transition: opacity 0.5s, transform 0.5s;
339
- }
340
- .slide-fade-leave-active {
341
- transition: opacity 0.2s, transform 0.2s;
342
- }
343
- .slide-fade-enter, .slide-fade-leave-to /* .slide-fade-leave-active in <2.1.8 */ {
344
- opacity: 0;
345
- transform: translateY(-8px);
346
- }
347
-
348
- .main {
349
- font-size: 14px;
350
- text-align: left;
351
- line-height: 1.5em;
352
- font-family: Asap, sans-serif, Helvetica;
353
- font-weight: 400;
354
- /* outline: thin red solid; */
355
- padding: 1em !important;
356
- overflow: hidden;
357
- min-width: 16rem;
358
- }
359
-
360
- .title {
361
- font-size: 18px;
362
- font-weight: 500;
363
- font-weight: bold;
364
- padding-bottom: 8px;
365
- color: rgb(131, 0, 191);
366
- }
367
-
368
- .attribute-title {
369
- font-size: 16px;
370
- font-weight: 600;
371
- /* font-weight: bold; */
372
- text-transform: uppercase;
373
- }
374
-
375
- .attribute-content {
376
- font-size: 14px;
377
- font-weight: 500;
378
- }
379
-
380
- .popover-container {
381
- height: 100%;
382
- width: 100%;
383
- }
384
-
385
- .main {
386
- .el-button.is-round {
387
- border-radius: 4px;
388
- padding: 9px 20px 10px 20px;
389
- display: flex;
390
- height: 36px;
391
- }
392
- }
393
-
394
- .button {
395
- margin-left: 0px !important;
396
- margin-top: 0px !important;
397
- font-size: 14px !important;
398
- background-color: $app-primary-color;
399
- color: #fff;
400
- & + .button {
401
- margin-top: 10px !important;
402
- }
403
- &:hover {
404
- color: #fff !important;
405
- background: #ac76c5 !important;
406
- border: 1px solid #ac76c5 !important;
407
- }
408
- }
409
-
410
- .tooltip-container {
411
- &::after,
412
- &::before {
413
- content: '';
414
- display: block;
415
- position: absolute;
416
- width: 0;
417
- height: 0;
418
- border-style: solid;
419
- flex-shrink: 0;
420
- }
421
- .tooltip {
422
- &::after {
423
- display: none;
424
- }
425
- &::before {
426
- display: none;
427
- }
428
- }
429
- }
430
-
431
- .maplibregl-popup-anchor-bottom {
432
- .tooltip-container {
433
- &::after,
434
- &::before {
435
- top: 100%;
436
- border-width: 12px;
437
- }
438
- &::after {
439
- margin-top: -1px;
440
- border-color: rgb(255, 255, 255) transparent transparent transparent;
441
- }
442
- &::before {
443
- margin: 0 auto;
444
- border-color: $app-primary-color transparent transparent transparent;
445
- }
446
- }
447
- }
448
-
449
- .maplibregl-popup-anchor-top {
450
- .tooltip-container {
451
- &::after,
452
- &::before {
453
- top: -24px;
454
- border-width: 12px;
455
- }
456
- &::after {
457
- margin-top: 1px;
458
- border-color: transparent transparent rgb(255, 255, 255) transparent;
459
- }
460
- &::before {
461
- margin: 0 auto;
462
- border-color: transparent transparent $app-primary-color transparent;
463
- }
464
- }
465
- }
466
-
467
- .content-container {
468
- overflow-y: scroll;
469
- scrollbar-width: thin !important;
470
- max-height: 240px;
471
- }
472
-
473
- .scrollbar::-webkit-scrollbar-track {
474
- border-radius: 10px;
475
- background-color: #f5f5f5;
476
- }
477
-
478
- .scrollbar::-webkit-scrollbar {
479
- width: 12px;
480
- right: -12px;
481
- background-color: #f5f5f5;
482
- }
483
-
484
- .scrollbar::-webkit-scrollbar-thumb {
485
- border-radius: 4px;
486
- box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);
487
- background-color: #979797;
488
- }
489
-
490
- /* Fix for chrome bug where under triangle pops up above one on top of it */
491
- .selector:not(*:root),
492
- .tooltip-container::after {
493
- top: 99.4%;
494
- }
495
- </style>
1
+ <template>
2
+ <div v-if="entry" class="main" v-loading="loading">
3
+ <div class="block" v-if="entry.title">
4
+ <div class="title">{{ capitalise(entry.title) }}</div>
5
+ <div
6
+ v-if="
7
+ entry.provenanceTaxonomyLabel &&
8
+ entry.provenanceTaxonomyLabel.length > 0
9
+ "
10
+ class="subtitle"
11
+ >
12
+ {{ provSpeciesDescription }}
13
+ </div>
14
+ </div>
15
+ <div class="block" v-else>
16
+ <div class="title">{{ entry.featureId }}</div>
17
+ </div>
18
+ <div v-show="showDetails" class="hide" id="hide-path-info" @click="showDetails = false">
19
+ Hide path information
20
+ <el-icon><el-icon-arrow-up /></el-icon>
21
+ </div>
22
+ <div v-show="!showDetails" class="hide" id="show-path-info" @click="showDetails = true">
23
+ Show path information
24
+ <el-icon><el-icon-arrow-down /></el-icon>
25
+ </div>
26
+ <transition name="slide-fade">
27
+ <div v-show="showDetails" class="content-container scrollbar">
28
+ {{ entry.paths }}
29
+ <div v-if="entry.origins && entry.origins.length > 0" class="block">
30
+ <div>
31
+ <span class="attribute-title">Origin</span>
32
+ <el-popover
33
+ width="250"
34
+ trigger="hover"
35
+ :teleported="false"
36
+ popper-class="popover-origin-help"
37
+ >
38
+ <template #reference>
39
+ <el-icon class="info"><el-icon-warning /></el-icon>
40
+ </template>
41
+ <span style="word-break: keep-all">
42
+ <i>Origin</i> {{ originDescription }}
43
+ </span>
44
+
45
+ </el-popover>
46
+ </div>
47
+ <div
48
+ v-for="(origin, i) in entry.origins"
49
+ class="attribute-content"
50
+ :origin-item-label="origin"
51
+ :key="origin"
52
+ >
53
+ {{ capitalise(origin) }}
54
+ <div v-if="i != entry.origins.length - 1" class="seperator"></div>
55
+ </div>
56
+ <el-button
57
+ v-show="
58
+ entry.originsWithDatasets && entry.originsWithDatasets.length > 0
59
+ "
60
+ class="button"
61
+ id="open-dendrites-button"
62
+ @click="openDendrites"
63
+ >
64
+ Explore origin data
65
+ </el-button>
66
+ </div>
67
+ <div
68
+ v-if="entry.components && entry.components.length > 0"
69
+ class="block"
70
+ >
71
+ <div class="attribute-title">Components</div>
72
+ <div
73
+ v-for="(component, i) in entry.components"
74
+ class="attribute-content"
75
+ :component-item-label="component"
76
+ :key="component"
77
+ >
78
+ {{ capitalise(component) }}
79
+ <div
80
+ v-if="i != entry.components.length - 1"
81
+ class="seperator"
82
+ ></div>
83
+ </div>
84
+ </div>
85
+ <div
86
+ v-if="entry.destinations && entry.destinations.length > 0"
87
+ class="block"
88
+ >
89
+ <div>
90
+ <span class="attribute-title">Destination</span>
91
+ <el-popover
92
+ width="250"
93
+ trigger="hover"
94
+ :teleported="false"
95
+ popper-class="popover-origin-help"
96
+ >
97
+ <template #reference>
98
+ <el-icon class="info"><el-icon-warning /></el-icon>
99
+ </template>
100
+ <span style="word-break: keep-all">
101
+ <i>Destination</i> is where the axons terminate
102
+ </span>
103
+ </el-popover>
104
+ </div>
105
+ <div
106
+ v-for="(destination, i) in entry.destinations"
107
+ class="attribute-content"
108
+ :destination-item-label="destination"
109
+ :key="destination"
110
+ >
111
+ {{ capitalise(destination) }}
112
+ <div
113
+ v-if="i != entry.destinations.length - 1"
114
+ class="seperator"
115
+ ></div>
116
+ </div>
117
+ <el-button
118
+ v-show="
119
+ entry.destinationsWithDatasets &&
120
+ entry.destinationsWithDatasets.length > 0
121
+ "
122
+ class="button"
123
+ @click="openAxons"
124
+ >
125
+ Explore destination data
126
+ </el-button>
127
+ </div>
128
+
129
+ <el-button
130
+ v-show="
131
+ entry.componentsWithDatasets &&
132
+ entry.componentsWithDatasets.length > 0
133
+ "
134
+ class="button"
135
+ @click="openAll"
136
+ >
137
+ Search for data on components
138
+ </el-button>
139
+
140
+ <external-resource-card :resources="resources"></external-resource-card>
141
+ </div>
142
+ </transition>
143
+ </div>
144
+ </template>
145
+
146
+ <script>
147
+ import {
148
+ ArrowUp as ElIconArrowUp,
149
+ ArrowDown as ElIconArrowDown,
150
+ Warning as ElIconWarning,
151
+ } from '@element-plus/icons-vue'
152
+ /* eslint-disable no-alert, no-console */
153
+ import {
154
+ ElButton as Button,
155
+ ElContainer as Container,
156
+ ElIcon as Icon,
157
+ } from 'element-plus'
158
+
159
+ import EventBus from './EventBus'
160
+ import ExternalResourceCard from './ExternalResourceCard.vue'
161
+
162
+ const titleCase = (str) => {
163
+ return str.replace(/\w\S*/g, (t) => {
164
+ return t.charAt(0).toUpperCase() + t.substr(1).toLowerCase()
165
+ })
166
+ }
167
+
168
+ const capitalise = function (str) {
169
+ if (str) return str.charAt(0).toUpperCase() + str.slice(1)
170
+ return ''
171
+ }
172
+
173
+ export default {
174
+ name: 'ProvenancePopup',
175
+ components: {
176
+ Button,
177
+ Container,
178
+ Icon,
179
+ ExternalResourceCard,
180
+ ElIconArrowUp,
181
+ ElIconArrowDown,
182
+ ElIconWarning,
183
+ },
184
+ props: {
185
+ entry: {
186
+ type: Object,
187
+ default: () => ({
188
+ destinations: [],
189
+ origins: [],
190
+ components: [],
191
+ destinationsWithDatasets: [],
192
+ originsWithDatasets: [],
193
+ componentsWithDatasets: [],
194
+ resource: undefined,
195
+ }),
196
+ },
197
+ },
198
+ data: function () {
199
+ return {
200
+ controller: undefined,
201
+ activeSpecies: undefined,
202
+ pubmedSearchUrl: '',
203
+ loading: false,
204
+ showToolip: false,
205
+ showDetails: false,
206
+ originDescriptions: {
207
+ motor: 'is the location of the initial cell body of the circuit',
208
+ sensory: 'is the location of the initial cell body in the PNS circuit',
209
+ },
210
+ componentsWithDatasets: [],
211
+ uberons: [{ id: undefined, name: undefined }],
212
+ }
213
+ },
214
+ computed: {
215
+ resources: function () {
216
+ let resources = []
217
+ if (this.entry && this.entry.hyperlinks) {
218
+ resources = this.entry.hyperlinks
219
+ }
220
+ return resources
221
+ },
222
+ originDescription: function () {
223
+ if (
224
+ this.entry &&
225
+ this.entry.title &&
226
+ this.entry.title.toLowerCase().includes('motor')
227
+ ) {
228
+ return this.originDescriptions.motor
229
+ } else {
230
+ return this.originDescriptions.sensory
231
+ }
232
+ },
233
+ provSpeciesDescription: function () {
234
+ let text = 'Observed in'
235
+ this.entry.provenanceTaxonomyLabel.forEach((label) => {
236
+ text += ` ${label},`
237
+ })
238
+ text = text.slice(0, -1) // remove last comma
239
+ text += ' species'
240
+ return text
241
+ },
242
+ },
243
+ methods: {
244
+ titleCase: function (title) {
245
+ return titleCase(title)
246
+ },
247
+ capitalise: function (text) {
248
+ return capitalise(text)
249
+ },
250
+ openUrl: function (url) {
251
+ window.open(url, '_blank')
252
+ },
253
+ openAll: function () {
254
+ EventBus.emit('onActionClick', {
255
+ type: 'Facets',
256
+ labels: this.entry.componentsWithDatasets.map((a) => a.name),
257
+ })
258
+ },
259
+ openAxons: function () {
260
+ EventBus.emit('onActionClick', {
261
+ type: 'Facets',
262
+ labels: this.entry.destinationsWithDatasets.map((a) => a.name),
263
+ })
264
+ },
265
+ openDendrites: function () {
266
+ EventBus.emit('onActionClick', {
267
+ type: 'Facets',
268
+ labels: this.entry.originsWithDatasets.map((a) => a.name),
269
+ })
270
+ },
271
+ pubmedSearchUrlUpdate: function (val) {
272
+ this.pubmedSearchUrl = val
273
+ },
274
+ },
275
+ }
276
+ </script>
277
+
278
+ <style lang="scss" scoped>
279
+
280
+ .display {
281
+ width: 44px;
282
+ word-break: normal;
283
+ }
284
+
285
+ .title {
286
+ text-align: left;
287
+ // width: 16em;
288
+ line-height: 1.5em !important;
289
+ font-size: 1em;
290
+ font-family: Helvetica;
291
+ font-weight: 500;
292
+ /* font-weight: bold; */
293
+ padding-bottom: 8px;
294
+ }
295
+
296
+ .block {
297
+ margin-bottom: 0.5em;
298
+
299
+ .main > &:first-of-type {
300
+ margin-right: 0.5em;
301
+ }
302
+ }
303
+
304
+ .pub {
305
+ width: 16rem;
306
+ }
307
+
308
+ .icon {
309
+ right: 0px;
310
+ position: absolute;
311
+ top: 10px;
312
+ }
313
+
314
+ .icon:hover {
315
+ cursor: pointer;
316
+ }
317
+
318
+ .popover-origin-help {
319
+ text-transform: none !important; // need to overide the tooltip text transform
320
+ }
321
+
322
+ .info {
323
+ transform: rotate(180deg);
324
+ color: #8300bf;
325
+ margin-left: 8px;
326
+ }
327
+
328
+ .seperator {
329
+ width: 90%;
330
+ height: 1px;
331
+ background-color: #bfbec2;
332
+ }
333
+
334
+ .hide {
335
+ color: $app-primary-color;
336
+ cursor: pointer;
337
+ margin-right: 6px;
338
+ margin-top: 3px;
339
+ }
340
+
341
+ .slide-fade-enter-active {
342
+ transition: opacity 0.5s, transform 0.5s;
343
+ }
344
+ .slide-fade-leave-active {
345
+ transition: opacity 0.2s, transform 0.2s;
346
+ }
347
+ .slide-fade-enter, .slide-fade-leave-to /* .slide-fade-leave-active in <2.1.8 */ {
348
+ opacity: 0;
349
+ transform: translateY(-8px);
350
+ }
351
+
352
+ .main {
353
+ font-size: 14px;
354
+ text-align: left;
355
+ line-height: 1.5em;
356
+ font-family: Asap, sans-serif, Helvetica;
357
+ font-weight: 400;
358
+ /* outline: thin red solid; */
359
+ padding: 1em !important;
360
+ overflow: hidden;
361
+ min-width: 16rem;
362
+ }
363
+
364
+ .title {
365
+ font-size: 18px;
366
+ font-weight: 500;
367
+ font-weight: bold;
368
+ padding-bottom: 8px;
369
+ color: rgb(131, 0, 191);
370
+ }
371
+
372
+ .attribute-title {
373
+ font-size: 16px;
374
+ font-weight: 600;
375
+ /* font-weight: bold; */
376
+ text-transform: uppercase;
377
+ }
378
+
379
+ .attribute-content {
380
+ font-size: 14px;
381
+ font-weight: 500;
382
+ }
383
+
384
+ .popover-container {
385
+ height: 100%;
386
+ width: 100%;
387
+ }
388
+
389
+ .main {
390
+ .el-button.is-round {
391
+ border-radius: 4px;
392
+ padding: 9px 20px 10px 20px;
393
+ display: flex;
394
+ height: 36px;
395
+ }
396
+ }
397
+
398
+ .button {
399
+ margin-left: 0px !important;
400
+ margin-top: 0px !important;
401
+ font-size: 14px !important;
402
+ background-color: $app-primary-color;
403
+ color: #fff;
404
+ & + .button {
405
+ margin-top: 10px !important;
406
+ }
407
+ &:hover {
408
+ color: #fff !important;
409
+ background: #ac76c5 !important;
410
+ border: 1px solid #ac76c5 !important;
411
+ }
412
+ }
413
+
414
+ .tooltip-container {
415
+ &::after,
416
+ &::before {
417
+ content: '';
418
+ display: block;
419
+ position: absolute;
420
+ width: 0;
421
+ height: 0;
422
+ border-style: solid;
423
+ flex-shrink: 0;
424
+ }
425
+ .tooltip {
426
+ &::after {
427
+ display: none;
428
+ }
429
+ &::before {
430
+ display: none;
431
+ }
432
+ }
433
+ }
434
+
435
+ .maplibregl-popup-anchor-bottom {
436
+ .tooltip-container {
437
+ &::after,
438
+ &::before {
439
+ top: 100%;
440
+ border-width: 12px;
441
+ }
442
+ &::after {
443
+ margin-top: -1px;
444
+ border-color: rgb(255, 255, 255) transparent transparent transparent;
445
+ }
446
+ &::before {
447
+ margin: 0 auto;
448
+ border-color: $app-primary-color transparent transparent transparent;
449
+ }
450
+ }
451
+ }
452
+
453
+ .maplibregl-popup-anchor-top {
454
+ .tooltip-container {
455
+ &::after,
456
+ &::before {
457
+ top: -24px;
458
+ border-width: 12px;
459
+ }
460
+ &::after {
461
+ margin-top: 1px;
462
+ border-color: transparent transparent rgb(255, 255, 255) transparent;
463
+ }
464
+ &::before {
465
+ margin: 0 auto;
466
+ border-color: transparent transparent $app-primary-color transparent;
467
+ }
468
+ }
469
+ }
470
+
471
+ .content-container {
472
+ overflow-y: scroll;
473
+ scrollbar-width: thin !important;
474
+ max-height: 240px;
475
+
476
+ .block {
477
+ padding-top: 0.5em;
478
+ }
479
+ }
480
+
481
+ .scrollbar::-webkit-scrollbar-track {
482
+ border-radius: 10px;
483
+ background-color: #f5f5f5;
484
+ }
485
+
486
+ .scrollbar::-webkit-scrollbar {
487
+ width: 12px;
488
+ right: -12px;
489
+ background-color: #f5f5f5;
490
+ }
491
+
492
+ .scrollbar::-webkit-scrollbar-thumb {
493
+ border-radius: 4px;
494
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);
495
+ background-color: #979797;
496
+ }
497
+
498
+ /* Fix for chrome bug where under triangle pops up above one on top of it */
499
+ .selector:not(*:root),
500
+ .tooltip-container::after {
501
+ top: 99.4%;
502
+ }
503
+ </style>