@abi-software/map-side-bar 1.5.0 → 1.5.2

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 (37) hide show
  1. package/CHANGELOG.md +228 -228
  2. package/LICENSE +201 -201
  3. package/README.md +146 -146
  4. package/babel.config.js +14 -14
  5. package/dist/map-side-bar.common.js +423 -182
  6. package/dist/map-side-bar.common.js.map +1 -1
  7. package/dist/map-side-bar.css +1 -1
  8. package/dist/map-side-bar.umd.js +423 -182
  9. package/dist/map-side-bar.umd.js.map +1 -1
  10. package/dist/map-side-bar.umd.min.js +1 -1
  11. package/dist/map-side-bar.umd.min.js.map +1 -1
  12. package/package-lock.json +14536 -14536
  13. package/package.json +75 -75
  14. package/public/index.html +17 -17
  15. package/src/App.vue +164 -164
  16. package/src/algolia/algolia.js +188 -188
  17. package/src/algolia/utils.js +69 -69
  18. package/src/assets/_variables.scss +43 -43
  19. package/src/assets/styles.scss +7 -7
  20. package/src/components/BadgesGroup.vue +144 -144
  21. package/src/components/Cascader.vue +49 -49
  22. package/src/components/ContextCard.vue +397 -397
  23. package/src/components/DatasetCard.vue +328 -328
  24. package/src/components/EventBus.js +3 -3
  25. package/src/components/ImageGallery.vue +531 -531
  26. package/src/components/SearchFilters.vue +586 -587
  27. package/src/components/SearchHistory.vue +146 -0
  28. package/src/components/SideBar.vue +235 -232
  29. package/src/components/SidebarContent.vue +564 -554
  30. package/src/components/Tabs.vue +78 -78
  31. package/src/components/hardcoded-context-info.js +79 -79
  32. package/src/components/index.js +8 -8
  33. package/src/components/species-map.js +8 -8
  34. package/src/main.js +8 -8
  35. package/src/mixins/S3Bucket.vue +31 -31
  36. package/static.json +6 -6
  37. package/vue.config.js +19 -19
@@ -1,188 +1,188 @@
1
- /* eslint-disable no-alert, no-console */
2
- import algoliasearch from 'algoliasearch'
3
-
4
- // export `createAlgoliaClient` to use it in page components
5
- export class AlgoliaClient {
6
- constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
7
- this.client = algoliasearch(
8
- algoliaId,
9
- algoliaKey
10
- )
11
- this.PENNSIEVE_API_LOCATION = PENNSIEVE_API_LOCATION
12
- this.anatomyFacetLabels = []
13
- }
14
- initIndex(ALGOLIA_INDEX) {
15
- this.index = this.client.initIndex(ALGOLIA_INDEX);
16
- }
17
-
18
- getAlgoliaFacets(propPathMapping) {
19
- const map = new Map(Object.entries(propPathMapping));
20
- const facetPropPaths = Array.from(map.keys());
21
- let facetData = []
22
- let facetId = 0
23
- return this.index
24
- .search('', {
25
- sortFacetValuesBy: 'alpha',
26
- facets: facetPropPaths
27
- })
28
- .then(response => {
29
- facetPropPaths.map((facetPropPath) => {
30
- var children = []
31
- const responseFacets = response.facets
32
- if (responseFacets === undefined) { return }
33
- const responseFacetChildren =
34
- responseFacets[facetPropPath] == undefined
35
- ? {}
36
- : responseFacets[facetPropPath]
37
- Object.keys(responseFacetChildren).map(facet => {
38
- children.push({
39
- label: facet,
40
- id: facetId++,
41
- facetPropPath: facetPropPath
42
- })
43
- })
44
- if (children.length > 0) {
45
- facetData.push({
46
- label: map.get(facetPropPath),
47
- id: facetId++,
48
- children: children,
49
- key: facetPropPath
50
- })
51
- }
52
- })
53
- return facetData
54
- })
55
- }
56
-
57
- // Returns all DOIs of all versions for a given discover dataset
58
- _discoverAllDois(discoverId, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
59
- return new Promise(resolve => {
60
- fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r => r.json()).then(dataset => {
61
- resolve(dataset.map(version => version.doi))
62
- })
63
- })
64
- }
65
-
66
- // Get all dois given a list of discoverIds
67
- _expandDois(discoverIds, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
68
- return new Promise(resolve => {
69
- let promiseList = discoverIds.map(discoverId => this._discoverAllDois(discoverId, PENNSIEVE_API_LOCATION))
70
- Promise.all(promiseList).then((values) => {
71
- resolve(values.flat())
72
- });
73
- })
74
- }
75
-
76
- _processResultsForCards(results) {
77
- let newResults = []
78
- let newResult = {}
79
- for (let res of results) {
80
- newResult = { ...res }
81
- newResult = {
82
- doi: res.item.curie.split(':')[1],
83
- name: res.item.name,
84
- description: res.item.description,
85
- updated: res.pennsieve ? res.pennsieve.updatedAt : undefined,
86
- publishDate: res.pennsieve ? res.pennsieve.publishDate : undefined,
87
- datasetId: res.objectID,
88
- detailsReady: false
89
- }
90
- newResults.push(newResult)
91
- }
92
- return newResults
93
- }
94
-
95
- _processAnatomy(hits) {
96
- let foundKeyWords = []
97
- let foundLabels = []
98
- let uniqueLabels = []
99
- let uniqueKeywords = []
100
- hits.forEach(hit => {
101
- if (hit.item && hit.item.keywords) {
102
- hit.item.keywords.forEach(keywordObj => {
103
- let keyword = keywordObj.keyword.toUpperCase()
104
- if (keyword.includes('UBERON') || keyword.includes('ILX')) {
105
- foundKeyWords.push(this._processUberonURL(keyword))
106
- }
107
- })
108
- }
109
- if (hit.anatomy && hit.anatomy.organ ) {
110
- hit.anatomy.organ.forEach(anatomy => {
111
- if (anatomy.curie) {
112
- foundKeyWords.push(anatomy.curie)
113
- foundLabels.push(anatomy.name)
114
- }
115
- })
116
- }
117
- })
118
- uniqueKeywords = [...new Set(foundKeyWords) ]
119
- uniqueLabels = [...new Set(foundLabels) ]
120
- this.anatomyFacetLabels = uniqueLabels
121
- return uniqueKeywords
122
- }
123
-
124
- _processUberonURL(url) {
125
- let ub = url.split('/').pop()
126
- return ub.replace('_', ':')
127
- }
128
-
129
- /**
130
- * Get Search results
131
- * This is using fetch from the Algolia API
132
- */
133
- search(filter, query = '', hitsperPage = 10, page = 1) {
134
- return new Promise(resolve => {
135
- this.index
136
- .search(query, {
137
- facets: ['*'],
138
- hitsPerPage: hitsperPage,
139
- page: page - 1,
140
- filters: filter,
141
- attributesToHighlight: [],
142
- attributesToRetrieve: [
143
- 'pennsieve.publishDate',
144
- 'pennsieve.updatedAt',
145
- 'item.curie',
146
- 'item.name',
147
- 'item.description',
148
- 'objectID',
149
- ],
150
- })
151
- .then(response => {
152
- let searchData = {
153
- items: this._processResultsForCards(response.hits),
154
- total: response.nbHits,
155
- discoverIds: response.hits.map(r => r.pennsieve ? r.pennsieve.identifier : r.objectID),
156
- dois: response.hits.map(r => r.item.curie.split(':')[1])
157
- }
158
- resolve(searchData)
159
- })
160
- })
161
- }
162
-
163
- /**
164
- * Get key words
165
- * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out
166
- */
167
- anatomyInSearch(filter, query = '', hitsperPage = 999999, page = 1) {
168
- return new Promise(resolve => {
169
- this.index
170
- .search(query, {
171
- facets: ['*'],
172
- hitsPerPage: hitsperPage,
173
- page: page - 1,
174
- filters: filter,
175
- attributesToHighlight: [],
176
- attributesToRetrieve: [
177
- 'item.keywords.keyword',
178
- 'anatomy.organ.name',
179
- 'anatomy.organ.curie'
180
- ],
181
- })
182
- .then(response => {
183
- let anatomyAsUberons = this._processAnatomy(response.hits)
184
- resolve(anatomyAsUberons)
185
- })
186
- })
187
- }
188
- }
1
+ /* eslint-disable no-alert, no-console */
2
+ import algoliasearch from 'algoliasearch'
3
+
4
+ // export `createAlgoliaClient` to use it in page components
5
+ export class AlgoliaClient {
6
+ constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
7
+ this.client = algoliasearch(
8
+ algoliaId,
9
+ algoliaKey
10
+ )
11
+ this.PENNSIEVE_API_LOCATION = PENNSIEVE_API_LOCATION
12
+ this.anatomyFacetLabels = []
13
+ }
14
+ initIndex(ALGOLIA_INDEX) {
15
+ this.index = this.client.initIndex(ALGOLIA_INDEX);
16
+ }
17
+
18
+ getAlgoliaFacets(propPathMapping) {
19
+ const map = new Map(Object.entries(propPathMapping));
20
+ const facetPropPaths = Array.from(map.keys());
21
+ let facetData = []
22
+ let facetId = 0
23
+ return this.index
24
+ .search('', {
25
+ sortFacetValuesBy: 'alpha',
26
+ facets: facetPropPaths
27
+ })
28
+ .then(response => {
29
+ facetPropPaths.map((facetPropPath) => {
30
+ var children = []
31
+ const responseFacets = response.facets
32
+ if (responseFacets === undefined) { return }
33
+ const responseFacetChildren =
34
+ responseFacets[facetPropPath] == undefined
35
+ ? {}
36
+ : responseFacets[facetPropPath]
37
+ Object.keys(responseFacetChildren).map(facet => {
38
+ children.push({
39
+ label: facet,
40
+ id: facetId++,
41
+ facetPropPath: facetPropPath
42
+ })
43
+ })
44
+ if (children.length > 0) {
45
+ facetData.push({
46
+ label: map.get(facetPropPath),
47
+ id: facetId++,
48
+ children: children,
49
+ key: facetPropPath
50
+ })
51
+ }
52
+ })
53
+ return facetData
54
+ })
55
+ }
56
+
57
+ // Returns all DOIs of all versions for a given discover dataset
58
+ _discoverAllDois(discoverId, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
59
+ return new Promise(resolve => {
60
+ fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r => r.json()).then(dataset => {
61
+ resolve(dataset.map(version => version.doi))
62
+ })
63
+ })
64
+ }
65
+
66
+ // Get all dois given a list of discoverIds
67
+ _expandDois(discoverIds, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
68
+ return new Promise(resolve => {
69
+ let promiseList = discoverIds.map(discoverId => this._discoverAllDois(discoverId, PENNSIEVE_API_LOCATION))
70
+ Promise.all(promiseList).then((values) => {
71
+ resolve(values.flat())
72
+ });
73
+ })
74
+ }
75
+
76
+ _processResultsForCards(results) {
77
+ let newResults = []
78
+ let newResult = {}
79
+ for (let res of results) {
80
+ newResult = { ...res }
81
+ newResult = {
82
+ doi: res.item.curie.split(':')[1],
83
+ name: res.item.name,
84
+ description: res.item.description,
85
+ updated: res.pennsieve ? res.pennsieve.updatedAt : undefined,
86
+ publishDate: res.pennsieve ? res.pennsieve.publishDate : undefined,
87
+ datasetId: res.objectID,
88
+ detailsReady: false
89
+ }
90
+ newResults.push(newResult)
91
+ }
92
+ return newResults
93
+ }
94
+
95
+ _processAnatomy(hits) {
96
+ let foundKeyWords = []
97
+ let foundLabels = []
98
+ let uniqueLabels = []
99
+ let uniqueKeywords = []
100
+ hits.forEach(hit => {
101
+ if (hit.item && hit.item.keywords) {
102
+ hit.item.keywords.forEach(keywordObj => {
103
+ let keyword = keywordObj.keyword.toUpperCase()
104
+ if (keyword.includes('UBERON') || keyword.includes('ILX')) {
105
+ foundKeyWords.push(this._processUberonURL(keyword))
106
+ }
107
+ })
108
+ }
109
+ if (hit.anatomy && hit.anatomy.organ ) {
110
+ hit.anatomy.organ.forEach(anatomy => {
111
+ if (anatomy.curie) {
112
+ foundKeyWords.push(anatomy.curie)
113
+ foundLabels.push(anatomy.name)
114
+ }
115
+ })
116
+ }
117
+ })
118
+ uniqueKeywords = [...new Set(foundKeyWords) ]
119
+ uniqueLabels = [...new Set(foundLabels) ]
120
+ this.anatomyFacetLabels = uniqueLabels
121
+ return uniqueKeywords
122
+ }
123
+
124
+ _processUberonURL(url) {
125
+ let ub = url.split('/').pop()
126
+ return ub.replace('_', ':')
127
+ }
128
+
129
+ /**
130
+ * Get Search results
131
+ * This is using fetch from the Algolia API
132
+ */
133
+ search(filter, query = '', hitsperPage = 10, page = 1) {
134
+ return new Promise(resolve => {
135
+ this.index
136
+ .search(query, {
137
+ facets: ['*'],
138
+ hitsPerPage: hitsperPage,
139
+ page: page - 1,
140
+ filters: filter,
141
+ attributesToHighlight: [],
142
+ attributesToRetrieve: [
143
+ 'pennsieve.publishDate',
144
+ 'pennsieve.updatedAt',
145
+ 'item.curie',
146
+ 'item.name',
147
+ 'item.description',
148
+ 'objectID',
149
+ ],
150
+ })
151
+ .then(response => {
152
+ let searchData = {
153
+ items: this._processResultsForCards(response.hits),
154
+ total: response.nbHits,
155
+ discoverIds: response.hits.map(r => r.pennsieve ? r.pennsieve.identifier : r.objectID),
156
+ dois: response.hits.map(r => r.item.curie.split(':')[1])
157
+ }
158
+ resolve(searchData)
159
+ })
160
+ })
161
+ }
162
+
163
+ /**
164
+ * Get key words
165
+ * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out
166
+ */
167
+ anatomyInSearch(filter, query = '', hitsperPage = 999999, page = 1) {
168
+ return new Promise(resolve => {
169
+ this.index
170
+ .search(query, {
171
+ facets: ['*'],
172
+ hitsPerPage: hitsperPage,
173
+ page: page - 1,
174
+ filters: filter,
175
+ attributesToHighlight: [],
176
+ attributesToRetrieve: [
177
+ 'item.keywords.keyword',
178
+ 'anatomy.organ.name',
179
+ 'anatomy.organ.curie'
180
+ ],
181
+ })
182
+ .then(response => {
183
+ let anatomyAsUberons = this._processAnatomy(response.hits)
184
+ resolve(anatomyAsUberons)
185
+ })
186
+ })
187
+ }
188
+ }
@@ -1,70 +1,70 @@
1
- /* eslint-disable no-alert, no-console */
2
-
3
- // Mapping between display categories and their Algolia index property path
4
- // Used for populating the Dataset Search Results facet menu dynamically
5
- export const facetPropPathMapping = {
6
- 'anatomy.organ.name' : 'Anatomical Structure',
7
- 'organisms.primary.species.name' : 'Species',
8
- 'item.modalities.keyword' : 'Experimental Approach',
9
- 'attributes.subject.sex.value' : 'Sex',
10
- 'attributes.subject.ageCategory.value' : 'Age Categories',
11
- 'item.types.name' : 'Data type',
12
- }
13
-
14
- // Same as above, but these show on the sidebar filters
15
- export const shownFilters = {
16
- 'anatomy.organ.name' : 'Anatomical Structure',
17
- 'organisms.primary.species.name' : 'Species',
18
- 'attributes.subject.sex.value' : 'Sex',
19
- 'attributes.subject.ageCategory.value' : 'Age Categories',
20
- 'item.types.name' : 'Data type',
21
- }
22
-
23
- /* Returns filter for searching algolia. All facets of the same category are joined with OR,
24
- * and each of those results is then joined with an AND.
25
- * i.e. (color:blue OR color:red) AND (shape:circle OR shape:red) */
26
- export function getFilters(selectedFacetArray=undefined) {
27
- // return all datasets if no filter
28
- if (selectedFacetArray === undefined) {
29
- return 'NOT item.published.status:embargo'
30
- }
31
-
32
- // Switch the 'term' attribute to 'label' if 'label' does not exist
33
- selectedFacetArray.forEach(f=>f.label=f.facet)
34
-
35
-
36
- let facets = removeShowAllFacets(selectedFacetArray)
37
-
38
- let filters = "NOT item.published.status:embargo";
39
- filters = `(${filters}) AND `;
40
-
41
- const facetPropPaths = Object.keys(facetPropPathMapping);
42
- facetPropPaths.map((facetPropPath) => {
43
- const facetsToBool = facets.filter(
44
- (facet) => facet.facetPropPath == facetPropPath
45
- );
46
- let orFilters = "";
47
- let andFilters = "";
48
- facetsToBool.map((facet) => {
49
- if (facet.AND){
50
- andFilters += `AND "${facetPropPath}":"${facet.label}"`;
51
- } else {
52
- orFilters += `"${facetPropPath}":"${facet.label}" OR `;
53
- }
54
- });
55
- if (orFilters == "" && andFilters =="") {
56
- return;
57
- }
58
- orFilters = `(${orFilters.substring(0, orFilters.lastIndexOf(" OR "))})` // remove last OR
59
-
60
- filters += `${orFilters + andFilters} AND `; // Put them together
61
- // (Note that we add an extra AND in case there are facets at a higher level)
62
-
63
- filters = filters.split('()AND ').join(''); // Handle case where there where no OR facets
64
- });
65
- return filters.substring(0, filters.lastIndexOf(" AND "));
66
- }
67
-
68
- function removeShowAllFacets(facetArray){
69
- return facetArray.filter( f => f.label !== 'Show all')
1
+ /* eslint-disable no-alert, no-console */
2
+
3
+ // Mapping between display categories and their Algolia index property path
4
+ // Used for populating the Dataset Search Results facet menu dynamically
5
+ export const facetPropPathMapping = {
6
+ 'anatomy.organ.name' : 'Anatomical Structure',
7
+ 'organisms.primary.species.name' : 'Species',
8
+ 'item.modalities.keyword' : 'Experimental Approach',
9
+ 'attributes.subject.sex.value' : 'Sex',
10
+ 'attributes.subject.ageCategory.value' : 'Age Categories',
11
+ 'item.types.name' : 'Data type',
12
+ }
13
+
14
+ // Same as above, but these show on the sidebar filters
15
+ export const shownFilters = {
16
+ 'anatomy.organ.name' : 'Anatomical Structure',
17
+ 'organisms.primary.species.name' : 'Species',
18
+ 'attributes.subject.sex.value' : 'Sex',
19
+ 'attributes.subject.ageCategory.value' : 'Age Categories',
20
+ 'item.types.name' : 'Data type',
21
+ }
22
+
23
+ /* Returns filter for searching algolia. All facets of the same category are joined with OR,
24
+ * and each of those results is then joined with an AND.
25
+ * i.e. (color:blue OR color:red) AND (shape:circle OR shape:red) */
26
+ export function getFilters(selectedFacetArray=undefined) {
27
+ // return all datasets if no filter
28
+ if (selectedFacetArray === undefined) {
29
+ return 'NOT item.published.status:embargo'
30
+ }
31
+
32
+ // Switch the 'term' attribute to 'label' if 'label' does not exist
33
+ selectedFacetArray.forEach(f=>f.label=f.facet)
34
+
35
+
36
+ let facets = removeShowAllFacets(selectedFacetArray)
37
+
38
+ let filters = "NOT item.published.status:embargo";
39
+ filters = `(${filters}) AND `;
40
+
41
+ const facetPropPaths = Object.keys(facetPropPathMapping);
42
+ facetPropPaths.map((facetPropPath) => {
43
+ const facetsToBool = facets.filter(
44
+ (facet) => facet.facetPropPath == facetPropPath
45
+ );
46
+ let orFilters = "";
47
+ let andFilters = "";
48
+ facetsToBool.map((facet) => {
49
+ if (facet.AND){
50
+ andFilters += `AND "${facetPropPath}":"${facet.label}"`;
51
+ } else {
52
+ orFilters += `"${facetPropPath}":"${facet.label}" OR `;
53
+ }
54
+ });
55
+ if (orFilters == "" && andFilters =="") {
56
+ return;
57
+ }
58
+ orFilters = `(${orFilters.substring(0, orFilters.lastIndexOf(" OR "))})` // remove last OR
59
+
60
+ filters += `${orFilters + andFilters} AND `; // Put them together
61
+ // (Note that we add an extra AND in case there are facets at a higher level)
62
+
63
+ filters = filters.split('()AND ').join(''); // Handle case where there where no OR facets
64
+ });
65
+ return filters.substring(0, filters.lastIndexOf(" AND "));
66
+ }
67
+
68
+ function removeShowAllFacets(facetArray){
69
+ return facetArray.filter( f => f.label !== 'Show all')
70
70
  }
@@ -1,43 +1,43 @@
1
- // Primary colors
2
- $purple: #8300BF;
3
- $darkBlue: #24245B;
4
- $grey: #303133;
5
-
6
- // Secondary colors
7
- $lightPurple: #BC00FC;
8
- $blue: #0026FF;
9
-
10
- // Status colors
11
- $success: #5e9f69;
12
- $warning: #FF8400;
13
- $danger: #b51d09;
14
-
15
- // Text colors
16
- $neutralGrey: #616161;
17
- $mediumGrey: #606266;
18
- $lightGrey: #909399;
19
-
20
- // Line colors
21
- $lineColor1: #DCDFE6;
22
- $lineColor2: #E4E7ED;
23
-
24
- // Background colors
25
- $background: #F5F7FA;
26
- $cochlear: #FFFFFF;
27
-
28
- //Search box colors
29
- $darkGrey: #606266;
30
-
31
- $app-primary-color: $purple;
32
- $app-secondary-color: $darkBlue;
33
- $text-color: $grey;
34
- $input-text: $grey;
35
-
36
- $system-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !important;
37
- $font-family: 'Asap', sans-serif;
38
-
39
- // Viewport Sizes
40
- $viewport-sm: 20rem;
41
- $viewport-md: 47rem;
42
- $viewport-lg: 64rem;
43
- $viewport-xlg: 120rem;
1
+ // Primary colors
2
+ $purple: #8300BF;
3
+ $darkBlue: #24245B;
4
+ $grey: #303133;
5
+
6
+ // Secondary colors
7
+ $lightPurple: #BC00FC;
8
+ $blue: #0026FF;
9
+
10
+ // Status colors
11
+ $success: #5e9f69;
12
+ $warning: #FF8400;
13
+ $danger: #b51d09;
14
+
15
+ // Text colors
16
+ $neutralGrey: #616161;
17
+ $mediumGrey: #606266;
18
+ $lightGrey: #909399;
19
+
20
+ // Line colors
21
+ $lineColor1: #DCDFE6;
22
+ $lineColor2: #E4E7ED;
23
+
24
+ // Background colors
25
+ $background: #F5F7FA;
26
+ $cochlear: #FFFFFF;
27
+
28
+ //Search box colors
29
+ $darkGrey: #606266;
30
+
31
+ $app-primary-color: $purple;
32
+ $app-secondary-color: $darkBlue;
33
+ $text-color: $grey;
34
+ $input-text: $grey;
35
+
36
+ $system-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !important;
37
+ $font-family: 'Asap', sans-serif;
38
+
39
+ // Viewport Sizes
40
+ $viewport-sm: 20rem;
41
+ $viewport-md: 47rem;
42
+ $viewport-lg: 64rem;
43
+ $viewport-xlg: 120rem;
@@ -1,7 +1,7 @@
1
- @import url('https://fonts.googleapis.com/css?family=Asap:400,400i,500,600,700&display=swap');
2
-
3
- @import '_variables';
4
-
5
- /* icon font path, required */
6
- $--color-primary: $app-primary-color !default;
7
- $--font-path: '~element-ui/lib/theme-chalk/fonts';
1
+ @import url('https://fonts.googleapis.com/css?family=Asap:400,400i,500,600,700&display=swap');
2
+
3
+ @import '_variables';
4
+
5
+ /* icon font path, required */
6
+ $--color-primary: $app-primary-color !default;
7
+ $--font-path: '~element-ui/lib/theme-chalk/fonts';