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