@abi-software/map-side-bar 2.7.2-beta.2 → 2.7.2-beta.4

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.
@@ -5,9 +5,7 @@
5
5
  <div class="title-content">
6
6
  <div class="block" v-if="entry.title">
7
7
  <div class="title">
8
- <span @click="connectivityClicked(entry.featureId[0])">
9
- {{ capitalise(entry.title) }}
10
- </span>
8
+ {{ capitalise(entry.title) }}
11
9
  <template v-if="entry.featuresAlert">
12
10
  <el-popover
13
11
  width="250"
@@ -24,7 +22,13 @@
24
22
  </el-popover>
25
23
  </template>
26
24
  </div>
27
- <div v-if="hasProvenanceTaxonomyLabel" class="subtitle">
25
+ <div
26
+ v-if="
27
+ entry.provenanceTaxonomyLabel &&
28
+ entry.provenanceTaxonomyLabel.length > 0
29
+ "
30
+ class="subtitle"
31
+ >
28
32
  {{ provSpeciesDescription }}
29
33
  </div>
30
34
  </div>
@@ -54,152 +58,53 @@
54
58
  </div>
55
59
  </div>
56
60
 
57
- <div class="content-container population-display">
61
+ <div
62
+ class="content-container population-display"
63
+ :class="dualConnectionSource ? 'population-display-toolbar' : ''"
64
+ >
58
65
  <div class="block attribute-title-container">
59
66
  <span class="attribute-title">Population Display</span>
60
67
  </div>
61
68
  <div class="block buttons-row">
62
- <el-button
63
- :class="activeView === 'listView' ? 'button' : 'el-button-secondary'"
64
- @click="switchConnectivityView('listView')"
65
- >
66
- List view
67
- </el-button>
68
- <el-button
69
- :class="activeView === 'graphView' ? 'button' : 'el-button-secondary'"
70
- @click="switchConnectivityView('graphView')"
71
- >
72
- Graph view
73
- </el-button>
74
- </div>
75
- </div>
76
-
77
- <div class="content-container content-container-connectivity" v-show="activeView === 'listView'">
78
- {{ entry.paths }}
79
- <div v-if="hasOrigins" class="block">
80
- <div class="attribute-title-container">
81
- <span class="attribute-title">Origin</span>
82
- <el-popover
83
- width="250"
84
- trigger="hover"
85
- :teleported="false"
86
- popper-class="popover-origin-help"
87
- >
88
- <template #reference>
89
- <el-icon class="info"><el-icon-warning /></el-icon>
90
- </template>
91
- <span style="word-break: keep-all">
92
- <i>Origin</i> {{ originDescription }}
93
- </span>
94
- </el-popover>
95
- </div>
96
- <div
97
- v-for="(origin, i) in entry.origins"
98
- class="attribute-content"
99
- :origin-item-label="origin"
100
- :key="origin"
101
- >
102
- <span
103
- @mouseenter="connectivityHovered(origin)"
104
- @mouseleave="connectivityHovered()"
105
- >
106
- {{ capitalise(origin) }}
107
- </span>
108
- <el-icon
109
- class="connectivity-search-icon"
110
- @click="connectivityClicked(entry.featureId[0], 'Origins', origin)"
111
- >
112
- <el-icon-search />
113
- </el-icon>
114
- </div>
115
- <el-button
116
- v-show="hasOriginsWithDatasets"
117
- class="button"
118
- id="open-dendrites-button"
119
- @click="openDendrites"
120
- >
121
- Explore origin data
122
- </el-button>
123
- </div>
124
- <div v-if="hasComponents" class="block">
125
- <div class="attribute-title-container">
126
- <div class="attribute-title">Components</div>
127
- </div>
128
- <div
129
- v-for="(component, i) in entry.components"
130
- class="attribute-content"
131
- :component-item-label="component"
132
- :key="component"
133
- >
134
- <span
135
- @mouseenter="connectivityHovered(component)"
136
- @mouseleave="connectivityHovered()"
137
- >
138
- {{ capitalise(component) }}
139
- </span>
140
- <el-icon
141
- class="connectivity-search-icon"
142
- @click="connectivityClicked(entry.featureId[0], 'Components', component)"
143
- >
144
- <el-icon-search />
145
- </el-icon>
69
+ <div v-if="dualConnectionSource">
70
+ <span>Connectivity from:</span>
71
+ <el-radio-group v-model="connectivitySource" @change="onConnectivitySourceChange">
72
+ <el-radio value="map">Map</el-radio>
73
+ <el-radio value="sckan">SCKAN</el-radio>
74
+ </el-radio-group>
146
75
  </div>
147
- </div>
148
- <div v-if="hasDestinations" class="block">
149
- <div class="attribute-title-container">
150
- <span class="attribute-title">Destination</span>
151
- <el-popover
152
- width="250"
153
- trigger="hover"
154
- :teleported="false"
155
- popper-class="popover-origin-help"
156
- >
157
- <template #reference>
158
- <el-icon class="info"><el-icon-warning /></el-icon>
159
- </template>
160
- <span style="word-break: keep-all">
161
- <i>Destination</i> is where the axons terminate
162
- </span>
163
- </el-popover>
164
- </div>
165
- <div
166
- v-for="(destination, i) in entry.destinations"
167
- class="attribute-content"
168
- :destination-item-label="destination"
169
- :key="destination"
170
- >
171
- <span
172
- @mouseenter="connectivityHovered(destination)"
173
- @mouseleave="connectivityHovered()"
76
+ <div>
77
+ <el-button
78
+ :class="activeView === 'listView' ? 'button' : 'el-button-secondary'"
79
+ @click="switchConnectivityView('listView')"
174
80
  >
175
- {{ capitalise(destination) }}
176
- </span>
177
- <el-icon
178
- class="connectivity-search-icon"
179
- @click="connectivityClicked(entry.featureId[0], 'Destinations', destination)"
81
+ List view
82
+ </el-button>
83
+ <el-button
84
+ :class="activeView === 'graphView' ? 'button' : 'el-button-secondary'"
85
+ @click="switchConnectivityView('graphView')"
180
86
  >
181
- <el-icon-search />
182
- </el-icon>
87
+ Graph view
88
+ </el-button>
183
89
  </div>
184
- <el-button v-show="hasDestinationsWithDatasets" class="button" @click="openAxons"
185
- >
186
- Explore destination data
187
- </el-button>
188
- </div>
189
- <div v-show="hasComponentsWithDatasets" class="block">
190
- <el-button class="button" @click="openAll">
191
- Search for data on components
192
- </el-button>
193
90
  </div>
91
+ </div>
194
92
 
195
- <div class="connectivity-error-container">
196
- <div class="connectivity-error" v-if="connectivityError">
197
- <strong v-if="connectivityError.errorConnectivities">
198
- {{ connectivityError.errorConnectivities }}
199
- </strong>
200
- {{ connectivityError.errorMessage }}
201
- </div>
202
- </div>
93
+ <div class="content-container content-container-connectivity" v-show="activeView === 'listView'">
94
+ <connectivity-list
95
+ :key="entry.featureId[0]"
96
+ :entry="entry"
97
+ :origins="origins"
98
+ :components="components"
99
+ :destinations="destinations"
100
+ :originsWithDatasets="originsWithDatasets"
101
+ :componentsWithDatasets="componentsWithDatasets"
102
+ :destinationsWithDatasets="destinationsWithDatasets"
103
+ :availableAnatomyFacets="availableAnatomyFacets"
104
+ :connectivityError="connectivityError"
105
+ @toggle-connectivity-tooltip="onToggleConnectivityTooltip"
106
+ @connectivity-action-click="onConnectivityActionClick"
107
+ ></connectivity-list>
203
108
  </div>
204
109
 
205
110
  <div class="content-container" v-show="activeView === 'graphView'">
@@ -207,8 +112,9 @@
207
112
  <connectivity-graph
208
113
  :key="entry.featureId[0]"
209
114
  :entry="entry.featureId[0]"
210
- :mapServer="envVars.FLATMAPAPI_LOCATION"
115
+ :mapServer="flatmapApi"
211
116
  :sckanVersion="sckanVersion"
117
+ :connectivityFromMap="connectivityFromMap"
212
118
  @tap-node="onTapNode"
213
119
  ref="connectivityGraphRef"
214
120
  />
@@ -216,22 +122,17 @@
216
122
  </div>
217
123
 
218
124
  <div class="content-container content-container-references" v-if="resources.length">
219
- <ExternalResourceCard
125
+ <external-resource-card
220
126
  :resources="resources"
221
127
  @references-loaded="onReferencesLoaded"
222
128
  @show-reference-connectivities="onShowReferenceConnectivities"
223
- />
129
+ ></external-resource-card>
224
130
  </div>
225
131
  </div>
226
132
  </template>
227
133
 
228
134
  <script>
229
- /* eslint-disable no-alert, no-console */
230
- import {
231
- Warning as ElIconWarning,
232
- Location as ElIconLocation,
233
- Search as ElIconSearch,
234
- } from '@element-plus/icons-vue'
135
+ /* eslint-disable no-alert, no-console */
235
136
  import {
236
137
  ElButton as Button,
237
138
  ElContainer as Container,
@@ -242,9 +143,11 @@ import EventBus from './EventBus.js'
242
143
  import {
243
144
  CopyToClipboard,
244
145
  ConnectivityGraph,
245
- ExternalResourceCard
146
+ ConnectivityList,
147
+ ExternalResourceCard,
246
148
  } from '@abi-software/map-utilities';
247
149
  import '@abi-software/map-utilities/dist/style.css';
150
+ import { processConnectivity } from './flatmapQueries.js';
248
151
 
249
152
  const titleCase = (str) => {
250
153
  return str.replace(/\w\S*/g, (t) => {
@@ -265,12 +168,10 @@ export default {
265
168
  Button,
266
169
  Container,
267
170
  Icon,
268
- ElIconWarning,
269
- ElIconLocation,
270
- ElIconSearch,
171
+ ExternalResourceCard,
271
172
  CopyToClipboard,
272
173
  ConnectivityGraph,
273
- ExternalResourceCard
174
+ ConnectivityList,
274
175
  },
275
176
  props: {
276
177
  entry: {
@@ -294,75 +195,44 @@ export default {
294
195
  type: Array,
295
196
  default: () => [],
296
197
  },
198
+ useDOIFormatter: {
199
+ type: Boolean,
200
+ default: true,
201
+ },
297
202
  },
298
203
  data: function () {
299
204
  return {
300
205
  controller: undefined,
301
206
  activeSpecies: undefined,
302
- pubmedSearchUrl: '',
303
207
  loading: false,
304
208
  activeView: 'listView',
305
- facetList: [],
306
209
  showToolip: false,
307
210
  showDetails: false,
308
211
  originDescriptions: {
309
212
  motor: 'is the location of the initial cell body of the circuit',
310
213
  sensory: 'is the location of the initial cell body in the PNS circuit',
311
214
  },
215
+ origins: [],
216
+ originsWithDatasets: [],
217
+ components: [],
218
+ componentsWithDatasets: [],
219
+ destinations: [],
220
+ destinationsWithDatasets: [],
221
+ connectivityFromMap: null,
312
222
  uberons: [{ id: undefined, name: undefined }],
313
223
  connectivityError: null,
314
224
  timeoutID: undefined,
315
225
  graphViewLoaded: false,
316
226
  updatedCopyContent: '',
317
227
  sckanVersion: '',
228
+ connectivitySource: 'sckan',
229
+ mapuuid: '',
230
+ mapId: '',
231
+ dualConnectionSource: false,
232
+ flatmapApi: '',
318
233
  }
319
234
  },
320
- watch: {
321
- availableAnatomyFacets: {
322
- handler: function (val) {
323
- this.convertFacetsToList(val)
324
- },
325
- immediate: true,
326
- deep: true,
327
- },
328
- },
329
235
  computed: {
330
- hasProvenanceTaxonomyLabel: function () {
331
- return (
332
- this.entry.provenanceTaxonomyLabel &&
333
- this.entry.provenanceTaxonomyLabel.length > 0
334
- );
335
- },
336
- hasOrigins: function () {
337
- return this.entry.origins && this.entry.origins.length > 0;
338
- },
339
- hasOriginsWithDatasets: function () {
340
- return (
341
- this.entry.originsWithDatasets &&
342
- this.entry.originsWithDatasets.length > 0 &&
343
- this.shouldShowExploreButton(this.entry.originsWithDatasets)
344
- );
345
- },
346
- hasComponents: function () {
347
- return this.entry.components && this.entry.components.length > 0;
348
- },
349
- hasComponentsWithDatasets: function () {
350
- return (
351
- this.entry.componentsWithDatasets &&
352
- this.entry.componentsWithDatasets.length > 0 &&
353
- this.shouldShowExploreButton(this.entry.componentsWithDatasets)
354
- );
355
- },
356
- hasDestinations: function () {
357
- return this.entry.destinations && this.entry.destinations.length > 0;
358
- },
359
- hasDestinationsWithDatasets: function () {
360
- return (
361
- this.entry.destinationsWithDatasets &&
362
- this.entry.destinationsWithDatasets.length > 0 &&
363
- this.shouldShowExploreButton(this.entry.destinationsWithDatasets)
364
- );
365
- },
366
236
  resources: function () {
367
237
  let resources = [];
368
238
  if (this.entry && this.entry.hyperlinks) {
@@ -398,49 +268,6 @@ export default {
398
268
  capitalise: function (text) {
399
269
  return capitalise(text)
400
270
  },
401
- openUrl: function (url) {
402
- window.open(url, '_blank')
403
- },
404
- openAll: function () {
405
- EventBus.emit('onConnectivityActionClick', {
406
- type: 'Facets',
407
- labels: this.entry.componentsWithDatasets.map((a) => a.name.toLowerCase()),
408
- })
409
- },
410
- openAxons: function () {
411
- EventBus.emit('onConnectivityActionClick', {
412
- type: 'Facets',
413
- labels: this.entry.destinationsWithDatasets.map((a) => a.name.toLowerCase()),
414
- })
415
- },
416
- // shouldShowExploreButton: Checks if the feature is in the list of available anatomy facets
417
- shouldShowExploreButton: function (features) {
418
- for (let i = 0; i < features.length; i++) {
419
- if (this.facetList.includes(features[i].name.toLowerCase())) {
420
- return true
421
- }
422
- }
423
- return false
424
- },
425
- // convertFacetsToList: Converts the available anatomy facets to a list for easy searching
426
- convertFacetsToList: function (facets) {
427
- facets.forEach((facet) => {
428
- if(facet.children) {
429
- this.convertFacetsToList(facet.children)
430
- } else {
431
- this.facetList.push(facet.label.toLowerCase())
432
- }
433
- })
434
- },
435
- openDendrites: function () {
436
- EventBus.emit('onConnectivityActionClick', {
437
- type: 'Facets',
438
- labels: this.entry.originsWithDatasets.map((a) => a.name.toLowerCase()),
439
- })
440
- },
441
- pubmedSearchUrlUpdate: function (val) {
442
- this.pubmedSearchUrl = val
443
- },
444
271
  showConnectivity: function (entry) {
445
272
  // move the map center to highlighted area
446
273
  const featureIds = entry.featureId || [];
@@ -449,6 +276,7 @@ export default {
449
276
  },
450
277
  switchConnectivityView: function (val) {
451
278
  this.activeView = val;
279
+
452
280
  if (val === 'graphView' && !this.graphViewLoaded) {
453
281
  // to load the connectivity graph only after the container is in view
454
282
  this.$nextTick(() => {
@@ -459,7 +287,7 @@ export default {
459
287
  onTapNode: function (data) {
460
288
  // save selected state for list view
461
289
  const name = data.map(t => t.label).join(', ');
462
- this.connectivityHovered(name);
290
+ this.toggleConnectivityTooltip(name, {show: true});
463
291
  },
464
292
  onShowReferenceConnectivities: function (refSource) {
465
293
  this.$emit('show-reference-connectivities', refSource);
@@ -530,28 +358,28 @@ export default {
530
358
  }
531
359
 
532
360
  // Origins
533
- if (this.entry.origins?.length) {
361
+ if (this.origins?.length) {
534
362
  const title = 'Origin';
535
- const origins = this.entry.origins;
536
- const originsWithDatasets = this.entry.originsWithDatasets;
363
+ const origins = this.origins;
364
+ const originsWithDatasets = this.originsWithDatasets;
537
365
  const transformedOrigins = transformData(title, origins, originsWithDatasets);
538
366
  contentArray.push(transformedOrigins);
539
367
  }
540
368
 
541
369
  // Components
542
- if (this.entry.components?.length) {
370
+ if (this.components?.length) {
543
371
  const title = 'Components';
544
- const components = this.entry.components;
545
- const componentsWithDatasets = this.entry.componentsWithDatasets;
372
+ const components = this.components;
373
+ const componentsWithDatasets = this.componentsWithDatasets;
546
374
  const transformedComponents = transformData(title, components, componentsWithDatasets);
547
375
  contentArray.push(transformedComponents);
548
376
  }
549
377
 
550
378
  // Destination
551
- if (this.entry.destinations?.length) {
379
+ if (this.destinations?.length) {
552
380
  const title = 'Destination';
553
- const destinations = this.entry.destinations;
554
- const destinationsWithDatasets = this.entry.destinationsWithDatasets;
381
+ const destinations = this.destinations;
382
+ const destinationsWithDatasets = this.destinationsWithDatasets;
555
383
  const transformedDestinations = transformData(title, destinations, destinationsWithDatasets);
556
384
  contentArray.push(transformedDestinations);
557
385
  }
@@ -569,48 +397,31 @@ export default {
569
397
 
570
398
  return contentArray.join('\n\n<br>');
571
399
  },
572
- getConnectivityDatasets: function (label) {
400
+ toggleConnectivityTooltip: function (name, option) {
573
401
  const allWithDatasets = [
574
- ...this.entry.componentsWithDatasets,
575
- ...this.entry.destinationsWithDatasets,
576
- ...this.entry.originsWithDatasets,
402
+ ...this.componentsWithDatasets,
403
+ ...this.destinationsWithDatasets,
404
+ ...this.originsWithDatasets,
577
405
  ];
578
- const names = label.split(','); // some features have more than one value
579
- let data = [];
580
- names.forEach((n) => {
581
- const foundData = allWithDatasets.find((a) =>
582
- a.name.toLowerCase().trim() === n.toLowerCase().trim()
583
- );
584
- if (foundData) {
585
- data.push({
586
- id: foundData.id,
587
- label: foundData.name
588
- });
589
- }
590
- });
591
- return data
592
- },
593
- connectivityHovered: function (label) {
594
- const data = label ? this.getConnectivityDatasets(label) : [];
595
- // type: to show error only for click event
596
- this.$emit('connectivity-hovered', data);
597
- },
598
- connectivityClicked: function (id, type, label) {
599
- let payload = {
600
- query: id,
601
- filter: [],
602
- data: label ? this.getConnectivityDatasets(label) : [],
603
- };
604
- if (type && label) {
605
- payload.filter.push({
606
- AND: undefined,
607
- facet: type,
608
- facetPropPath: 'flatmap.connectivity.source',
609
- facetSubPropPath: undefined,
610
- term: 'Connectivity',
406
+ const names = name.split(','); // some features have more than one value
407
+ const data = [];
408
+ if (option.show) {
409
+ names.forEach((n) => {
410
+ const foundData = allWithDatasets.find((a) =>
411
+ a.name.toLowerCase().trim() === n.toLowerCase().trim()
412
+ );
413
+
414
+ if (foundData) {
415
+ data.push({
416
+ id: foundData.id,
417
+ label: foundData.name
418
+ });
419
+ }
611
420
  });
612
- };
613
- this.$emit('connectivity-clicked', payload);
421
+ }
422
+
423
+ // type: to show error only for click event
424
+ this.$emit('connectivity-component-click', data);
614
425
  },
615
426
  getErrorConnectivities: function (errorData) {
616
427
  const errorDataToEmit = [...new Set(errorData)];
@@ -666,10 +477,73 @@ export default {
666
477
  this.connectivityError = null;
667
478
  }, ERROR_TIMEOUT);
668
479
  },
480
+ updateConnectionsData: function (source) {
481
+ this.origins = source.origins;
482
+ this.components = source.components;
483
+ this.destinations = source.destinations;
484
+ this.originsWithDatasets = source.originsWithDatasets;
485
+ this.componentsWithDatasets = source.componentsWithDatasets;
486
+ this.destinationsWithDatasets = source.destinationsWithDatasets;
487
+
488
+ this.updatedCopyContent = this.getUpdateCopyContent();
489
+ },
490
+ onConnectivitySourceChange: function (val) {
491
+ if (this.connectivitySource === 'map') {
492
+ this.getConnectionsFromMap(this.mapuuid, this.entry.featureId[0])
493
+ .then((response) => {
494
+ this.connectivityFromMap = response;
495
+ processConnectivity(this.flatmapApi, this.sckanVersion, response)
496
+ .then((result) => {
497
+ const mapSource = {
498
+ origins: result.labels.origins,
499
+ components: result.labels.components,
500
+ destinations: result.labels.destinations,
501
+ originsWithDatasets: result.withDatasets.originsWithDatasets,
502
+ componentsWithDatasets: result.withDatasets.componentsWithDatasets,
503
+ destinationsWithDatasets: result.withDatasets.destinationsWithDatasets,
504
+ }
505
+ this.updateConnectionsData(mapSource);
506
+ })
507
+ });
508
+ } else {
509
+ this.connectivityFromMap = null;
510
+ this.updateConnectionsData(this.entry);
511
+ }
512
+ },
513
+ getConnectionsFromMap: async function (mapuuid, pathId) {
514
+ const url = this.flatmapApi + `flatmap/${mapuuid}/connectivity/${pathId}`;
515
+
516
+ try {
517
+ const response = await fetch(url);
518
+ if (!response.ok) {
519
+ throw new Error(`Response status: ${response.status}`);
520
+ }
521
+
522
+ return await response.json();
523
+ } catch (error) {
524
+ throw new Error(error);
525
+ }
526
+ },
527
+ onToggleConnectivityTooltip: function (data) {
528
+ const {name, option} = data;
529
+ this.toggleConnectivityTooltip(name, option);
530
+ },
531
+ onConnectivityActionClick: function (data) {
532
+ EventBus.emit('onConnectivityActionClick', data);
533
+ },
669
534
  },
670
535
  mounted: function () {
671
536
  this.sckanVersion = this.entry['knowledge-source'];
672
- this.updatedCopyContent = this.getUpdateCopyContent();
537
+ this.mapuuid = this.entry['mapuuid'];
538
+ this.mapId = this.entry['mapId'];
539
+ this.flatmapApi = this.envVars.FLATMAPAPI_LOCATION;
540
+ this.updateConnectionsData(this.entry);
541
+
542
+ // TODO: only rat flatmap has dual connections now
543
+ if (this.mapId === 'rat-flatmap') {
544
+ this.dualConnectionSource = true;
545
+ }
546
+
673
547
  EventBus.on('connectivity-graph-error', (errorInfo) => {
674
548
  this.pushConnectivityError(errorInfo);
675
549
  });
@@ -706,10 +580,6 @@ export default {
706
580
  font-weight: bold;
707
581
  padding-bottom: 8px;
708
582
  color: $app-primary-color;
709
-
710
- span:hover {
711
- cursor: pointer;
712
- }
713
583
  }
714
584
 
715
585
  .block + .block {
@@ -754,17 +624,8 @@ export default {
754
624
  }
755
625
  }
756
626
 
757
- .info,
758
627
  .alert {
759
628
  color: #8300bf;
760
- }
761
-
762
- .info {
763
- transform: rotate(180deg);
764
- margin-left: 8px;
765
- }
766
-
767
- .alert {
768
629
  margin-left: 5px;
769
630
  vertical-align: text-bottom;
770
631
 
@@ -824,51 +685,6 @@ export default {
824
685
  text-transform: uppercase;
825
686
  }
826
687
 
827
- .attribute-content {
828
- display: flex;
829
- justify-content: space-between;
830
- font-size: 14px;
831
- font-weight: 500;
832
- transition: color 0.25s ease;
833
- position: relative;
834
- cursor: default;
835
-
836
- .connectivity-search-icon {
837
- display: none;
838
- }
839
-
840
- &:hover {
841
- color: $app-primary-color;
842
-
843
- .connectivity-search-icon {
844
- padding-top: 4px;
845
- cursor: pointer;
846
- display: block;
847
- }
848
- }
849
-
850
- +.attribute-content {
851
- &::before {
852
- content: "";
853
- width: 90%;
854
- height: 1px;
855
- background-color: var(--el-border-color);
856
- position: absolute;
857
- top: 0;
858
- left: 0;
859
- }
860
- }
861
-
862
- &:last-of-type {
863
- margin-bottom: 0.5em;
864
- }
865
- }
866
-
867
- .popover-container {
868
- height: 100%;
869
- width: 100%;
870
- }
871
-
872
688
  .main {
873
689
  .el-button.is-round {
874
690
  border-radius: 4px;
@@ -925,18 +741,11 @@ export default {
925
741
  margin-top: 0 !important;
926
742
  margin-left: 10px !important;
927
743
  }
928
- }
929
744
 
930
- .neuron-connection-button {
931
- display: flex;
932
- flex: 1 1 auto !important;
933
- flex-direction: row !important;
934
- align-items: center;
935
- justify-content: space-between;
936
-
937
- .el-button + .el-button {
938
- margin-top: 0 !important;
939
- margin-left: 10px !important;
745
+ > div:first-child {
746
+ display: flex;
747
+ align-items: center;
748
+ gap: 0.5rem;
940
749
  }
941
750
  }
942
751
 
@@ -948,6 +757,23 @@ export default {
948
757
  justify-content: space-between;
949
758
  border-bottom: 1px solid $app-primary-color;
950
759
  padding-bottom: 0.5rem !important;
760
+
761
+ &.population-display-toolbar {
762
+ flex-direction: column !important;
763
+ align-items: start;
764
+
765
+ .buttons-row {
766
+ display: flex;
767
+ flex-direction: row;
768
+ align-items: center;
769
+ justify-content: space-between;
770
+ width: 100%;
771
+ }
772
+ }
773
+
774
+ .el-radio {
775
+ margin-right: 1rem;
776
+ }
951
777
  }
952
778
 
953
779
  .tooltip-container {
@@ -1069,25 +895,4 @@ export default {
1069
895
  margin-top: -1.25rem;
1070
896
  }
1071
897
  }
1072
-
1073
- .connectivity-error-container {
1074
- position: sticky;
1075
- bottom: 0.5rem;
1076
- width: 100%;
1077
- min-height: 31px; // placeholder
1078
- margin-top: -10px !important;
1079
- display: flex;
1080
- flex-direction: row;
1081
- align-items: center;
1082
- justify-content: center;
1083
- }
1084
-
1085
- .connectivity-error {
1086
- width: fit-content;
1087
- font-size: 12px;
1088
- padding: 0.25rem 0.5rem;
1089
- background-color: var(--el-color-error-light-9);
1090
- border-radius: var(--el-border-radius-small);
1091
- border: 1px solid var(--el-color-error);
1092
- }
1093
898
  </style>