@abi-software/map-side-bar 1.3.36 → 1.3.37-staging

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 +146 -146
  3. package/babel.config.js +14 -14
  4. package/del.json +27 -0
  5. package/dist/img/logo-sparc-wave-primary.8ed83a51.svg +1 -0
  6. package/dist/map-side-bar.common.js +2065 -1205
  7. package/dist/map-side-bar.common.js.map +1 -1
  8. package/dist/map-side-bar.css +1 -1
  9. package/dist/map-side-bar.umd.js +2065 -1205
  10. package/dist/map-side-bar.umd.js.map +1 -1
  11. package/dist/map-side-bar.umd.min.js +3 -1
  12. package/dist/map-side-bar.umd.min.js.map +1 -1
  13. package/package-lock.json +13716 -13716
  14. package/package.json +67 -67
  15. package/public/index.html +17 -17
  16. package/scaffold_context_info.json +31 -0
  17. package/src/App.vue +149 -152
  18. package/src/algolia/algolia.js +182 -182
  19. package/src/algolia/utils.js +69 -69
  20. package/src/components/BadgesGroup.vue +141 -142
  21. package/src/components/Cascader.vue +49 -49
  22. package/src/components/ContextCard.vue +384 -391
  23. package/src/components/DatasetCard.vue +385 -325
  24. package/src/components/EventBus.js +3 -3
  25. package/src/components/ImageGallery.vue +509 -525
  26. package/src/components/SearchFilters.vue +609 -586
  27. package/src/components/SideBar.vue +245 -224
  28. package/src/components/SidebarContent.vue +511 -508
  29. package/src/components/Tabs.vue +78 -78
  30. package/src/components/hardcoded-context-info.js +79 -79
  31. package/src/components/index.js +8 -8
  32. package/src/components/processFilters.js +22 -0
  33. package/src/components/species-map.js +8 -8
  34. package/src/main.js +8 -8
  35. package/src/mixins/GalleryHelpers.js +104 -0
  36. package/static.json +6 -6
  37. package/vue.config.js +11 -11
  38. package/src/mixins/S3Bucket.vue +0 -31
@@ -1,325 +1,385 @@
1
- <template>
2
- <div class="dataset-card-container" ref="container">
3
- <div class="dataset-card" ref="card">
4
- <div class="seperator-path"></div>
5
- <div v-loading="loading" class="card" >
6
- <span class="card-left">
7
- <image-gallery v-if="!loading && discoverId"
8
- :datasetId="discoverId"
9
- :datasetVersion="version"
10
- :entry="entry"
11
- :envVars="envVars"
12
- :label="label"
13
- :datasetThumbnail="thumbnail"
14
- :dataset-biolucida="biolucidaData"
15
- :category="currentCategory"
16
- @card-clicked="galleryClicked"
17
- />
18
- </span>
19
- <div class="card-right" >
20
- <div class="title" @click="cardClicked">{{entry.name}}</div>
21
- <div class="details">{{contributors}} {{entry.publishDate ? `(${publishYear})` : ''}}</div>
22
- <div class="details">{{samples}}</div>
23
- <div v-if="!entry.detailsReady" class="details loading-icon" v-loading="!entry.detailsReady"></div>
24
- <div>
25
- <el-button v-if="entry.simulation" @click="openRepository" size="mini" class="button" icon="el-icon-view">View repository</el-button>
26
- </div>
27
- <div class="badges-container">
28
- <badges-group
29
- :entry="entry"
30
- :dataset-biolucida="biolucidaData"
31
- @categoryChanged="categoryChanged"
32
- />
33
- </div>
34
- </div>
35
- </div>
36
- </div>
37
- </div>
38
- </template>
39
-
40
-
41
- <script>
42
- /* eslint-disable no-alert, no-console */
43
- import Vue from "vue";
44
- import BadgesGroup from "./BadgesGroup.vue";
45
- import { Button, Icon } from "element-ui";
46
- import lang from "element-ui/lib/locale/lang/en";
47
- import locale from "element-ui/lib/locale";
48
- import EventBus from "./EventBus"
49
- import speciesMap from "./species-map";
50
- import ImageGallery from "./ImageGallery.vue";
51
-
52
- locale.use(lang);
53
- Vue.use(Button);
54
- Vue.use(Icon);
55
-
56
- export default {
57
- name: "DatasetCard",
58
- components: { BadgesGroup, ImageGallery },
59
- props: {
60
- /**
61
- * Object containing information for
62
- * the required viewing.
63
- */
64
- entry: {
65
- type: Object,
66
- default: () => {}
67
- },
68
- envVars: {
69
- type: Object,
70
- default: () => {}
71
- },
72
- },
73
- data: function () {
74
- return {
75
- thumbnail: require('@/../assets/missing-image.svg'),
76
- dataLocation: this.entry.doi,
77
- discoverId: undefined,
78
- loading: true,
79
- version: 1,
80
- lastDoi: undefined,
81
- biolucidaData: undefined,
82
- currentCategory: "All"
83
- };
84
- },
85
- computed: {
86
- contributors: function() {
87
- let text = "";
88
- if (this.entry.contributors) {
89
- if (this.entry.contributors.length === 1) {
90
- text = this.lastName(this.entry.contributors[0].name);
91
- } else if (this.entry.contributors.length === 2) {
92
- text = this.lastName(this.entry.contributors[0].name) + " & " + this.lastName(this.entry.contributors[1].name);
93
- } else if (this.entry.contributors.length > 2) {
94
- text = this.lastName(this.entry.contributors[0].name) + " et al.";
95
- }
96
- }
97
- return text;
98
- },
99
- samples: function() {
100
- let text = "";
101
- if (this.entry.species) {
102
- if (speciesMap[this.entry.species[0].toLowerCase()]){
103
- text = `${speciesMap[this.entry.species[0].toLowerCase()]}`;
104
- } else {
105
- text = `${this.entry.species}`;
106
- }
107
- }
108
- if (this.entry.numberSamples > 0) {
109
- text += " (";
110
- if (this.entry.numberSamples === 1) {
111
- text += `${this.entry.numberSamples} sample`;
112
- } else if (this.entry.numberSamples > 1) {
113
- text += `${this.entry.numberSamples} samples`;
114
- }
115
- if (this.entry.numberSubjects === 1) {
116
- text += ` from ${this.entry.numberSubjects} subject`;
117
- } else if (this.entry.numberSamples > 1) {
118
- text += ` from ${this.entry.numberSubjects} subjects`;
119
- }
120
- text += ")";
121
- }
122
-
123
- return text;
124
- },
125
- label: function(){
126
- return this.entry.organs ? this.entry.organs[0] : this.entry.name
127
- },
128
- publishYear: function() {
129
- return this.entry.publishDate.split('-')[0]
130
- }
131
- },
132
- methods: {
133
- cardClicked: function(){
134
- this.openDataset()
135
- },
136
- categoryChanged: function(name) {
137
- this.currentCategory = name;
138
- },
139
- galleryClicked: function(payload) {
140
- this.propogateCardAction(payload)
141
- },
142
- openDataset: function(){
143
- window.open(this.dataLocation,'_blank');
144
- },
145
- openRepository: function() {
146
- let apiLocation = this.envVars.API_LOCATION;
147
- this.entry.additionalLinks.forEach(function(el) {
148
- if (el.description == "Repository") {
149
- let xmlhttp = new XMLHttpRequest();
150
- xmlhttp.open("POST", apiLocation + "/pmr_latest_exposure", true);
151
- xmlhttp.setRequestHeader("Content-type", "application/json");
152
- xmlhttp.onreadystatechange = () => {
153
- if (xmlhttp.readyState === 4) {
154
- let url = "";
155
- if (xmlhttp.status === 200) {
156
- url = JSON.parse(xmlhttp.responseText)["url"];
157
- }
158
- if (url === "") {
159
- url = el.uri;
160
- }
161
- window.open(url,'_blank');
162
- }
163
- };
164
- xmlhttp.send(JSON.stringify({workspace_url: el.uri}));
165
- }
166
- });
167
- },
168
- propogateCardAction: function(action){
169
- EventBus.$emit("PopoverActionClick", action)
170
- this.$emit('contextUpdate', action)
171
- },
172
- splitDOI: function(doi){
173
- return [doi.split('/')[doi.split('/').length-2], doi.split('/')[doi.split('/').length-1]]
174
- },
175
- getBanner: function () {
176
- // Only load banner if card has changed
177
- if (this.lastDoi !== this.entry.doi) {
178
- this.lastDoi = this.entry.doi
179
- this.loading = true
180
- let doi = this.splitDOI(this.entry.doi)
181
- fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${doi[0]}/${doi[1]}`)
182
- .then((response) =>{
183
- if (!response.ok){
184
- throw Error(response.statusText)
185
- } else {
186
- return response.json()
187
- }
188
- })
189
- .then((data) => {
190
- this.thumbnail = data.banner
191
- this.discoverId = data.id
192
- this.version = data.version
193
- this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`
194
- this.getBiolucidaInfo(this.discoverId)
195
- this.loading = false
196
- })
197
- .catch(() => {
198
- //set defaults if we hit an error
199
- this.thumbnail = require('@/../assets/missing-image.svg')
200
- this.discoverId = Number(this.entry.datasetId)
201
- this.loading = false
202
- });
203
- }
204
-
205
- },
206
- lastName: function(fullName){
207
- return fullName.split(',')[0]
208
- },
209
- getBiolucidaInfo: function(id) {
210
- let apiLocation = this.envVars.API_LOCATION;
211
- let endpoint = apiLocation + "image_search/" + id;
212
- // Add parameters if we are sent them
213
- fetch(endpoint)
214
- .then(response => response.json())
215
- .then(data => {
216
- if (data.status == "success")
217
- this.biolucidaData = data;
218
- });
219
- }
220
- },
221
- created: function() {
222
- this.getBanner()
223
- },
224
- watch: {
225
- // currently not using card overflow
226
- 'entry.description': function() { // watch it
227
- this.getBanner()
228
- }
229
- },
230
- };
231
- </script>
232
-
233
- <!-- Add "scoped" attribute to limit CSS to this component only -->
234
- <style scoped>
235
- .dataset-card {
236
- padding-left: 16px;
237
- position: relative;
238
- min-height:17rem;
239
- }
240
-
241
- .title {
242
- padding-bottom: 0.75rem;
243
- font-family: Asap;
244
- font-size: 14px;
245
- font-weight: bold;
246
- font-stretch: normal;
247
- font-style: normal;
248
- line-height: 1.5;
249
- letter-spacing: 1.05px;
250
- color: #484848;
251
- cursor: pointer;
252
- }
253
- .card {
254
- padding-top: 18px;
255
- position: relative;
256
- display: flex;
257
- }
258
-
259
- .card-left{
260
- flex: 1
261
- }
262
-
263
- .card-right {
264
- flex: 1.3;
265
- padding-left: 6px;
266
- }
267
-
268
- .button{
269
- z-index: 10;
270
- font-family: Asap;
271
- font-size: 14px;
272
- font-weight: normal;
273
- font-stretch: normal;
274
- font-style: normal;
275
- line-height: normal;
276
- letter-spacing: normal;
277
- background-color: #8300bf;
278
- border: #8300bf;
279
- color: white;
280
- cursor: pointer;
281
- margin-top: 8px;
282
- }
283
-
284
- .button:hover {
285
- background-color: #8300bf;
286
- color: white;
287
- }
288
-
289
- .banner-img {
290
- width: 128px;
291
- height: 128px;
292
- box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.25);
293
- background-color: #ffffff;
294
- cursor: pointer;
295
- }
296
- .details{
297
- font-family: Asap;
298
- font-size: 14px;
299
- font-weight: normal;
300
- font-stretch: normal;
301
- font-style: normal;
302
- line-height: 1.5;
303
- letter-spacing: 1.05px;
304
- color: #484848;
305
- }
306
-
307
- .badges-container {
308
- margin-top:0.75rem;
309
- }
310
-
311
- .loading-icon {
312
- z-index: 20;
313
- width: 40px;
314
- height: 40px;
315
- left: 80px;
316
- }
317
-
318
- .loading-icon >>> .el-loading-mask {
319
- background-color: rgba(117, 190, 218, 0.0) !important;
320
- }
321
-
322
- .loading-icon >>> .el-loading-spinner .path {
323
- stroke: #8300bf;
324
- }
325
- </style>
1
+ <template>
2
+ <div class="dataset-card-container" ref="container">
3
+ <div class="dataset-card" ref="card">
4
+ <div class="seperator-path"></div>
5
+ <div v-loading="loading" class="card" >
6
+ <span class="card-left">
7
+ <image-gallery v-if="!loading"
8
+ :datasetId="String(discoverId)"
9
+ :datasetVersion="version"
10
+ :entry="entry"
11
+ :envVars="envVars"
12
+ :label="label"
13
+ :datasetThumbnail="thumbnail"
14
+ :dataset-biolucida="biolucidaData"
15
+ :category="currentCategory"
16
+ @card-clicked="galleryClicked"
17
+ />
18
+ </span>
19
+ <div class="card-right" >
20
+ <div class="title" @click="cardClicked">{{entry.name}}</div>
21
+ <div class="details">{{contributors}} {{entry.publishDate ? `(${publishYear})` : ''}}</div>
22
+ <div class="details">{{samples}}</div>
23
+ <div v-if="!entry.detailsReady" class="details loading-icon" v-loading="!entry.detailsReady"></div>
24
+ <div>
25
+ <el-button v-if="entry.simulation" @click="openRepository" size="mini" class="button" icon="el-icon-view">View repository</el-button>
26
+ </div>
27
+ <div class="badges-container">
28
+ <badges-group
29
+ :entry="entry"
30
+ :dataset-biolucida="biolucidaData"
31
+ @categoryChanged="categoryChanged"
32
+ />
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+
41
+ <script>
42
+ /* eslint-disable no-alert, no-console */
43
+ import Vue from "vue";
44
+ import BadgesGroup from "./BadgesGroup.vue";
45
+ import { Button, Icon } from "element-ui";
46
+ import lang from "element-ui/lib/locale/lang/en";
47
+ import locale from "element-ui/lib/locale";
48
+ import EventBus from "./EventBus"
49
+ import speciesMap from "./species-map";
50
+ import ImageGallery from "./ImageGallery.vue";
51
+
52
+ locale.use(lang);
53
+ Vue.use(Button);
54
+ Vue.use(Icon);
55
+
56
+ export default {
57
+ name: "DatasetCard",
58
+ components: { BadgesGroup, ImageGallery },
59
+ props: {
60
+ /**
61
+ * Object containing information for
62
+ * the required viewing.
63
+ */
64
+ entry: {
65
+ type: Object,
66
+ default: () => {}
67
+ },
68
+ envVars: {
69
+ type: Object,
70
+ default: () => {}
71
+ },
72
+ },
73
+ data: function () {
74
+ return {
75
+ thumbnail: require('@/../assets/missing-image.svg'),
76
+ dataLocation: this.entry.doi,
77
+ discoverId: undefined,
78
+ loading: true,
79
+ version: 1,
80
+ lastDoi: undefined,
81
+ biolucidaData: undefined,
82
+ currentCategory: "All"
83
+ };
84
+ },
85
+ computed: {
86
+ contributors: function() {
87
+ let text = "";
88
+ if (this.entry.contributors) {
89
+ if (this.entry.contributors.length === 1) {
90
+ text = this.lastName(this.entry.contributors[0].name);
91
+ } else if (this.entry.contributors.length === 2) {
92
+ text = this.lastName(this.entry.contributors[0].name) + " & " + this.lastName(this.entry.contributors[1].name);
93
+ } else if (this.entry.contributors.length > 2) {
94
+ text = this.lastName(this.entry.contributors[0].name) + " et al.";
95
+ }
96
+ }
97
+ return text;
98
+ },
99
+ samples: function() {
100
+ let text = "";
101
+ if (this.entry.species) {
102
+ if (speciesMap[this.entry.species[0].toLowerCase()]){
103
+ text = `${speciesMap[this.entry.species[0].toLowerCase()]}`;
104
+ } else {
105
+ text = `${this.entry.species}`;
106
+ }
107
+ }
108
+ if (this.entry.numberSamples > 0) {
109
+ text += " (";
110
+ if (this.entry.numberSamples === 1) {
111
+ text += `${this.entry.numberSamples} sample`;
112
+ } else if (this.entry.numberSamples > 1) {
113
+ text += `${this.entry.numberSamples} samples`;
114
+ }
115
+ if (this.entry.numberSubjects === 1) {
116
+ text += ` from ${this.entry.numberSubjects} subject`;
117
+ } else if (this.entry.numberSamples > 1) {
118
+ text += ` from ${this.entry.numberSubjects} subjects`;
119
+ }
120
+ text += ")";
121
+ }
122
+
123
+ return text;
124
+ },
125
+ label: function(){
126
+ return this.entry.organs ? this.entry.organs[0] : this.entry.name
127
+ },
128
+ publishYear: function() {
129
+ return this.entry.publishDate.split('-')[0]
130
+ }
131
+ },
132
+ methods: {
133
+ cardClicked: function(){
134
+ this.openDataset()
135
+ },
136
+ categoryChanged: function(name) {
137
+ this.currentCategory = name;
138
+ },
139
+ galleryClicked: function(payload) {
140
+ this.propogateCardAction(payload)
141
+ },
142
+ openDataset: function(){
143
+ window.open(this.dataLocation,'_blank');
144
+ },
145
+ openRepository: function() {
146
+ let apiLocation = this.envVars.API_LOCATION;
147
+ this.entry.additionalLinks.forEach(function(el) {
148
+ if (el.description == "Repository") {
149
+ let xmlhttp = new XMLHttpRequest();
150
+ xmlhttp.open("POST", apiLocation + "/pmr_latest_exposure", true);
151
+ xmlhttp.setRequestHeader("Content-type", "application/json");
152
+ xmlhttp.onreadystatechange = () => {
153
+ if (xmlhttp.readyState === 4) {
154
+ let url = "";
155
+ if (xmlhttp.status === 200) {
156
+ url = JSON.parse(xmlhttp.responseText)["url"];
157
+ }
158
+ if (url === "") {
159
+ url = el.uri;
160
+ }
161
+ window.open(url,'_blank');
162
+ }
163
+ };
164
+ xmlhttp.send(JSON.stringify({workspace_url: el.uri}));
165
+ }
166
+ });
167
+ },
168
+ propogateCardAction: function(action){
169
+ EventBus.$emit("PopoverActionClick", action)
170
+ this.$emit('contextUpdate', action)
171
+ },
172
+ splitDOI: function(doi){
173
+ return [doi.split('/')[doi.split('/').length-2], doi.split('/')[doi.split('/').length-1]]
174
+ },
175
+ getBanner: function () { // NOTE! This getBanner uses the pennsieve api to retrive the banner. Only use for curation!
176
+ if (this.entry.datasetId.length > 4){
177
+ this.loading = true
178
+ this.getPennsieveBanner()
179
+ } else if (this.lastDoi !== this.entry.doi) {
180
+ this.lastDoi = this.entry.doi
181
+ this.loading = true
182
+ let doi = this.splitDOI(this.entry.doi)
183
+ fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${doi[0]}/${doi[1]}`)
184
+ .then((response) =>{
185
+ if (!response.ok){
186
+ throw Error(response.statusText)
187
+ } else {
188
+ return response.json()
189
+ }
190
+ })
191
+ .then((data) => {
192
+ this.thumbnail = data.banner
193
+ this.discoverId = data.id
194
+ this.version = data.version
195
+ this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`
196
+ if (this.discoverId.length < 5) this.getBiolucidaInfo(this.discoverId)
197
+ this.loading = false
198
+ })
199
+ .catch(() => {
200
+ //set defaults if we hit an error
201
+ this.thumbnail = require('@/../assets/missing-image.svg')
202
+ this.discoverId = Number(this.entry.datasetId)
203
+ this.loading = false
204
+ });
205
+ }
206
+ },
207
+ getPennsieveBanner: function(){
208
+ // authenticate with pennsieve
209
+ fetch('https://cognito-idp.us-east-1.amazonaws.com/', {
210
+ method: 'POST',
211
+ headers: {
212
+ 'Accept': 'application/json, text/plain, */*',
213
+ 'Content-Type': 'application/x-amz-json-1.1',
214
+ 'X-Amz-Target': 'AWSCognitoIdentityProviderService.InitiateAuth',
215
+ 'X-Amz-User-Agent': 'aws-amplify/0.1.x js',
216
+ },
217
+ body: JSON.stringify({"AuthFlow":"USER_PASSWORD_AUTH","ClientId":"670mo7si81pcc3sfub7o1914d8","AuthParameters":{"USERNAME":"jessekhorasanee@gmail.com","PASSWORD":"Asameswayhey@666","DEVICE_KEY":"us-east-1_0d4e8de7-6079-470d-bedd-62043ba70f7e"},"ClientMetadata":{}})
218
+ }).then(res => res.json())
219
+ .then(res => {
220
+ console.log(res)
221
+ let token = res.AuthenticationResult.AccessToken
222
+ let proxy = `${this.envVars.API_LOCATION}proxy/?url=` // set up proxy
223
+
224
+ // call pennsieve api via proxy
225
+ fetch(`${proxy}https://api.pennsieve.io/datasets/N%3Adataset%3A${this.entry.datasetId}/banner?api_key=${token}`
226
+ ).then(res=>res.json()).then(res=>{
227
+ console.log('success!')
228
+ this.thumbnail = res.banner
229
+ this.discoverId = this.entry.datasetId
230
+ this.loading = false
231
+ })
232
+ })
233
+
234
+ },
235
+ // getBanner: function () {
236
+ // // Only load banner if card has changed
237
+ // if (this.lastDoi !== this.entry.doi) {
238
+ // this.lastDoi = this.entry.doi
239
+ // this.loading = true
240
+ // let doi = this.splitDOI(this.entry.doi)
241
+ // fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${doi[0]}/${doi[1]}`)
242
+ // .then((response) =>{
243
+ // if (!response.ok){
244
+ // throw Error(response.statusText)
245
+ // } else {
246
+ // return response.json()
247
+ // }
248
+ // })
249
+ // .then((data) => {
250
+ // this.thumbnail = data.banner
251
+ // this.discoverId = data.id
252
+ // this.version = data.version
253
+ // this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`
254
+ // this.getBiolucidaInfo(this.discoverId)
255
+ // this.loading = false
256
+ // })
257
+ // .catch(() => {
258
+ // //set defaults if we hit an error
259
+ // this.thumbnail = require('@/../assets/missing-image.svg')
260
+ // this.discoverId = Number(this.entry.datasetId)
261
+ // this.loading = false
262
+ // });
263
+ // }
264
+
265
+ // },
266
+ lastName: function(fullName){
267
+ return fullName.split(',')[0]
268
+ },
269
+ getBiolucidaInfo: function(id) {
270
+ let apiLocation = this.envVars.API_LOCATION;
271
+ let endpoint = apiLocation + "image_search/" + id;
272
+ // Add parameters if we are sent them
273
+ fetch(endpoint)
274
+ .then(response => response.json())
275
+ .then(data => {
276
+ if (data.status == "success")
277
+ this.biolucidaData = data;
278
+ });
279
+ }
280
+ },
281
+ created: function() {
282
+ this.getBanner()
283
+ },
284
+ watch: {
285
+ // currently not using card overflow
286
+ 'entry.description': function() { // watch it
287
+ this.getBanner()
288
+ }
289
+ },
290
+ };
291
+ </script>
292
+
293
+ <!-- Add "scoped" attribute to limit CSS to this component only -->
294
+ <style scoped>
295
+ .dataset-card {
296
+ padding-left: 16px;
297
+ position: relative;
298
+ min-height:17rem;
299
+ }
300
+
301
+ .title {
302
+ padding-bottom: 0.75rem;
303
+ font-family: Asap;
304
+ font-size: 14px;
305
+ font-weight: bold;
306
+ font-stretch: normal;
307
+ font-style: normal;
308
+ line-height: 1.5;
309
+ letter-spacing: 1.05px;
310
+ color: #484848;
311
+ cursor: pointer;
312
+ }
313
+ .card {
314
+ padding-top: 18px;
315
+ position: relative;
316
+ display: flex;
317
+ }
318
+
319
+ .card-left{
320
+ flex: 1
321
+ }
322
+
323
+ .card-right {
324
+ flex: 1.3;
325
+ padding-left: 6px;
326
+ }
327
+
328
+ .button{
329
+ z-index: 10;
330
+ font-family: Asap;
331
+ font-size: 14px;
332
+ font-weight: normal;
333
+ font-stretch: normal;
334
+ font-style: normal;
335
+ line-height: normal;
336
+ letter-spacing: normal;
337
+ background-color: #8300bf;
338
+ border: #8300bf;
339
+ color: white;
340
+ cursor: pointer;
341
+ margin-top: 8px;
342
+ }
343
+
344
+ .button:hover {
345
+ background-color: #8300bf;
346
+ color: white;
347
+ }
348
+
349
+ .banner-img {
350
+ width: 128px;
351
+ height: 128px;
352
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.25);
353
+ background-color: #ffffff;
354
+ cursor: pointer;
355
+ }
356
+ .details{
357
+ font-family: Asap;
358
+ font-size: 14px;
359
+ font-weight: normal;
360
+ font-stretch: normal;
361
+ font-style: normal;
362
+ line-height: 1.5;
363
+ letter-spacing: 1.05px;
364
+ color: #484848;
365
+ }
366
+
367
+ .badges-container {
368
+ margin-top:0.75rem;
369
+ }
370
+
371
+ .loading-icon {
372
+ z-index: 20;
373
+ width: 40px;
374
+ height: 40px;
375
+ left: 80px;
376
+ }
377
+
378
+ .loading-icon >>> .el-loading-mask {
379
+ background-color: rgba(117, 190, 218, 0.0) !important;
380
+ }
381
+
382
+ .loading-icon >>> .el-loading-spinner .path {
383
+ stroke: #8300bf;
384
+ }
385
+ </style>