@explorer-1/vue 1.1.14 → 1.1.15
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.
- package/CHANGELOG.md +8 -0
- package/package.json +2 -2
- package/src/components/AttractionCard/AttractionCard.vue +54 -1
- package/src/components/MetadataStacked/MetadataStacked.stories.js +2 -1
- package/src/components/MetadataStacked/MetadataStacked.vue +15 -7
- package/src/components/SearchResultCard/SearchResultCard.stories.js +7 -3
- package/src/components/SearchResultCard/SearchResultCard.vue +13 -0
- package/src/components/SearchResultsList/SearchResultsList.stories.js +6 -0
- package/src/components/SearchResultsList/SearchResultsList.vue +10 -0
- package/src/interfaces.ts +6 -0
- package/src/templates/explore-jpl/PageSiteExploreApp/PageSiteExploreApp.stories.js +4 -2
- package/src/templates/explore-jpl/PageSiteExploreApp/PageSiteExploreApp.vue +1 -38
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @explorer-1/vue
|
|
2
2
|
|
|
3
|
+
## 1.1.15
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- de2df9a: Updates to prepare for Explore JPL. Most updates are concerned with improving UX on AttractionCard
|
|
8
|
+
- Updated dependencies [de2df9a]
|
|
9
|
+
- @explorer-1/common@2.1.8
|
|
10
|
+
|
|
3
11
|
## 1.1.14
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorer-1/vue",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.15",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"vue-router": "^5.0.3",
|
|
35
35
|
"vue3-compare-image": "^1.2.6",
|
|
36
36
|
"vue3-observe-visibility": "^1.0.6",
|
|
37
|
-
"@explorer-1/common": "2.1.
|
|
37
|
+
"@explorer-1/common": "2.1.8"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@vitejs/plugin-vue": "^6.0.5",
|
|
@@ -43,11 +43,26 @@ const props = defineProps({
|
|
|
43
43
|
type: String,
|
|
44
44
|
default: undefined
|
|
45
45
|
},
|
|
46
|
+
/**
|
|
47
|
+
* The description for use as card text. Plain text only.
|
|
48
|
+
*/
|
|
49
|
+
description: {
|
|
50
|
+
type: String,
|
|
51
|
+
default: undefined
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* The theme text. Plain text only.
|
|
55
|
+
*/
|
|
56
|
+
theme: {
|
|
57
|
+
type: String,
|
|
58
|
+
default: undefined
|
|
59
|
+
},
|
|
46
60
|
/**
|
|
47
61
|
* The image for the listing card.
|
|
48
62
|
*/
|
|
49
63
|
image: {
|
|
50
|
-
type: Object
|
|
64
|
+
type: Object,
|
|
65
|
+
default: undefined
|
|
51
66
|
},
|
|
52
67
|
/**
|
|
53
68
|
* Controls the visibility of the Bookmark icon and its associated metadata.
|
|
@@ -78,6 +93,12 @@ const props = defineProps({
|
|
|
78
93
|
class="border-gray-light-mid lg:pb-10 lg:mb-10 relative grid grid-cols-12 gap-5 pb-6 mb-6 border-b"
|
|
79
94
|
>
|
|
80
95
|
<div class="col-span-9">
|
|
96
|
+
<div
|
|
97
|
+
v-if="theme"
|
|
98
|
+
class="text-subtitle-sm md:text-subtitle mb-3 md:mb-5 text-gray-mid-dark"
|
|
99
|
+
>
|
|
100
|
+
{{ props.theme }}
|
|
101
|
+
</div>
|
|
81
102
|
<BaseHeading
|
|
82
103
|
v-if="props.title"
|
|
83
104
|
:level="props.headingLevel"
|
|
@@ -91,6 +112,22 @@ const props = defineProps({
|
|
|
91
112
|
:show-my-list="props.showMyList"
|
|
92
113
|
:location-icon="props.locationIcon"
|
|
93
114
|
/>
|
|
115
|
+
<div class="hidden md:block">
|
|
116
|
+
<div
|
|
117
|
+
v-if="props.description"
|
|
118
|
+
class="w-full mt-5 text-body-md"
|
|
119
|
+
>
|
|
120
|
+
{{ props.description }}
|
|
121
|
+
</div>
|
|
122
|
+
<BaseLink
|
|
123
|
+
v-if="props.url"
|
|
124
|
+
class="mt-5"
|
|
125
|
+
variant="primary"
|
|
126
|
+
:href="props.url"
|
|
127
|
+
>
|
|
128
|
+
Learn more
|
|
129
|
+
</BaseLink>
|
|
130
|
+
</div>
|
|
94
131
|
</div>
|
|
95
132
|
<div
|
|
96
133
|
v-if="props.image"
|
|
@@ -108,6 +145,22 @@ const props = defineProps({
|
|
|
108
145
|
/>
|
|
109
146
|
</BaseImagePlaceholder>
|
|
110
147
|
</div>
|
|
148
|
+
<div class="col-span-full md:hidden">
|
|
149
|
+
<div
|
|
150
|
+
v-if="props.description"
|
|
151
|
+
class="w-full text-body-md"
|
|
152
|
+
>
|
|
153
|
+
{{ props.description }}
|
|
154
|
+
</div>
|
|
155
|
+
<BaseLink
|
|
156
|
+
v-if="props.url"
|
|
157
|
+
class="mt-5"
|
|
158
|
+
variant="primary"
|
|
159
|
+
:href="props.url"
|
|
160
|
+
>
|
|
161
|
+
Learn more
|
|
162
|
+
</BaseLink>
|
|
163
|
+
</div>
|
|
111
164
|
</div>
|
|
112
165
|
</BaseLink>
|
|
113
166
|
</template>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import MetadataStacked from './MetadataStacked.vue'
|
|
2
|
+
import ExploreJplIconImage from '@explorer-1/common-storybook/src/story-data/images/2026-Explore-JPL-Site-Number-1-Missions-in-Flight.png'
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
5
|
title: 'Components/Utilities/MetadataStacked',
|
|
@@ -10,7 +11,7 @@ export default {
|
|
|
10
11
|
// data
|
|
11
12
|
export const MetadataStackedData = {
|
|
12
13
|
location: 'Building 179, Highbay 1',
|
|
13
|
-
locationIcon:
|
|
14
|
+
locationIcon: ExploreJplIconImage,
|
|
14
15
|
wait: '45 minute wait',
|
|
15
16
|
showMyList: true
|
|
16
17
|
}
|
|
@@ -36,15 +36,15 @@ const props = defineProps({
|
|
|
36
36
|
</script>
|
|
37
37
|
|
|
38
38
|
<template>
|
|
39
|
-
<div class="MetadataStacked inline-flex flex-col flex-start gap-2.5 text-body-md">
|
|
39
|
+
<div class="MetadataStacked inline-flex flex-col flex-start gap-2 md:gap-2.5 text-body-md">
|
|
40
40
|
<div
|
|
41
41
|
v-if="props.location"
|
|
42
|
-
class="flex flex-row gap-2.5 items-
|
|
42
|
+
class="flex flex-row gap-2 md:gap-2.5 items-start self-stretch"
|
|
43
43
|
>
|
|
44
44
|
<img
|
|
45
45
|
v-if="props.locationIcon"
|
|
46
46
|
:src="props.locationIcon"
|
|
47
|
-
class="w-
|
|
47
|
+
class="mt-[0.1rem] lg:mt-[0.2rem] w-6 h-6"
|
|
48
48
|
alt=""
|
|
49
49
|
/>
|
|
50
50
|
<IconLocation
|
|
@@ -55,17 +55,25 @@ const props = defineProps({
|
|
|
55
55
|
</div>
|
|
56
56
|
<div
|
|
57
57
|
v-if="props.wait"
|
|
58
|
-
class="flex flex-row gap-2.5 items-center self-stretch"
|
|
58
|
+
class="flex flex-row gap-2 md:gap-2.5 items-center self-stretch"
|
|
59
59
|
>
|
|
60
|
-
<
|
|
60
|
+
<div class="w-6">
|
|
61
|
+
<IconHourglass class="MetadataStackedIcon text-jpl-red block mx-auto" />
|
|
62
|
+
</div>
|
|
61
63
|
<span>{{ props.wait }}</span>
|
|
62
64
|
</div>
|
|
63
65
|
<div
|
|
64
66
|
v-if="props.showMyList"
|
|
65
|
-
class="flex flex-row gap-2.5 items-center self-stretch"
|
|
67
|
+
class="flex flex-row gap-2 md:gap-2.5 items-center self-stretch"
|
|
66
68
|
>
|
|
67
|
-
<
|
|
69
|
+
<div class="w-6">
|
|
70
|
+
<IconBookmark class="MetadataStackedIcon text-gray-mid" />
|
|
71
|
+
</div>
|
|
68
72
|
<span class="italic">Added to my list</span>
|
|
69
73
|
</div>
|
|
70
74
|
</div>
|
|
71
75
|
</template>
|
|
76
|
+
|
|
77
|
+
<style lang="scss">
|
|
78
|
+
@import '@explorer-1/common/src/scss/components/MetadataStacked';
|
|
79
|
+
</style>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import SearchResultCard from './SearchResultCard.vue'
|
|
2
|
+
import ExploreJplIconImage from '@explorer-1/common-storybook/src/story-data/images/2026-Explore-JPL-Site-Number-1-Missions-in-Flight.png'
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
5
|
title: 'Components/Cards/SearchResultCards',
|
|
@@ -81,10 +82,13 @@ export const EduEventCard = {
|
|
|
81
82
|
export const AttractionCard = {
|
|
82
83
|
args: {
|
|
83
84
|
...SearchResultCardData,
|
|
85
|
+
theme: 'Missions that Changed the World',
|
|
84
86
|
isAttraction: true,
|
|
85
|
-
location: 'Building 179, Highbay 1',
|
|
86
|
-
locationIcon:
|
|
87
|
+
location: 'Building 179, Highbay 1, Subfloor 204',
|
|
88
|
+
locationIcon: ExploreJplIconImage,
|
|
87
89
|
wait: '45 minute wait',
|
|
88
|
-
showMyList: true
|
|
90
|
+
showMyList: true,
|
|
91
|
+
searchDescription:
|
|
92
|
+
'This is the card description lorem ipsum dolor sit amet. Consectatur adipscing this is the card description. Lorem ipsum dolor sit amet.'
|
|
89
93
|
}
|
|
90
94
|
}
|
|
@@ -70,6 +70,8 @@
|
|
|
70
70
|
:wait="wait"
|
|
71
71
|
:show-my-list="showMyList"
|
|
72
72
|
:location-icon="locationIcon"
|
|
73
|
+
:theme="theme"
|
|
74
|
+
:description="searchDescription"
|
|
73
75
|
/>
|
|
74
76
|
<BaseLink
|
|
75
77
|
v-else
|
|
@@ -405,6 +407,17 @@ export default defineComponent({
|
|
|
405
407
|
locationIcon: {
|
|
406
408
|
type: String,
|
|
407
409
|
default: ''
|
|
410
|
+
},
|
|
411
|
+
theme: {
|
|
412
|
+
type: String,
|
|
413
|
+
default: undefined
|
|
414
|
+
},
|
|
415
|
+
/**
|
|
416
|
+
* The search meta description for use as card text. Plain text only.
|
|
417
|
+
*/
|
|
418
|
+
searchDescription: {
|
|
419
|
+
type: String,
|
|
420
|
+
default: undefined
|
|
408
421
|
}
|
|
409
422
|
},
|
|
410
423
|
computed: {
|
|
@@ -1246,6 +1246,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1246
1246
|
},
|
|
1247
1247
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1248
1248
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1249
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1249
1250
|
explore_jpl_sites_explorejplsite__wait_time_filter: '15',
|
|
1250
1251
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: '15 minute wait',
|
|
1251
1252
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -1373,6 +1374,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1373
1374
|
},
|
|
1374
1375
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1375
1376
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1377
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1376
1378
|
explore_jpl_sites_explorejplsite__wait_time_filter: '',
|
|
1377
1379
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: '',
|
|
1378
1380
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -1495,6 +1497,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1495
1497
|
},
|
|
1496
1498
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1497
1499
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1500
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1498
1501
|
explore_jpl_sites_explorejplsite__wait_time_filter: '',
|
|
1499
1502
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: '60 minute wait',
|
|
1500
1503
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -1617,6 +1620,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1617
1620
|
},
|
|
1618
1621
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1619
1622
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1623
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1620
1624
|
explore_jpl_sites_explorejplsite__wait_time_filter: '0',
|
|
1621
1625
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: 'No wait',
|
|
1622
1626
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -1739,6 +1743,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1739
1743
|
},
|
|
1740
1744
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1741
1745
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1746
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1742
1747
|
explore_jpl_sites_explorejplsite__wait_time_filter: '90',
|
|
1743
1748
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: '90 minutes wait',
|
|
1744
1749
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -1864,6 +1869,7 @@ export const SearchResultsListAttractionData = {
|
|
|
1864
1869
|
},
|
|
1865
1870
|
explore_jpl_sites_explorejplsite__attraction_type_filter: 'Exhibits',
|
|
1866
1871
|
explore_jpl_sites_explorejplsite__attraction_type: 'Exhibits',
|
|
1872
|
+
explore_jpl_sites_explorejplsite__theme_type_filter: 'Moon to Mars',
|
|
1867
1873
|
explore_jpl_sites_explorejplsite__wait_time_filter: '135',
|
|
1868
1874
|
explore_jpl_sites_explorejplsite__wait_time_label_filter: 'more than 2 hour wait',
|
|
1869
1875
|
explore_jpl_sites_explorejplsite__latitude: '34.2012848',
|
|
@@ -40,8 +40,10 @@
|
|
|
40
40
|
:primary-subject="page.primarySubject as unknown as PrimarySubjectObject"
|
|
41
41
|
:grade-levels="page.gradeLevels as unknown as GradeLevelsObject[]"
|
|
42
42
|
:time="page.time as unknown as EduResourcesTime"
|
|
43
|
+
:theme="page.theme"
|
|
43
44
|
:title="page.title"
|
|
44
45
|
:summary="page.summary"
|
|
46
|
+
:search-description="page.searchDescription"
|
|
45
47
|
:featured="featureFirstResult ? index === 0 && currentPage === 1 : false"
|
|
46
48
|
heading-level="h2"
|
|
47
49
|
/>
|
|
@@ -275,6 +277,14 @@ export default defineComponent({
|
|
|
275
277
|
handle === 'explore_jpl_sites_explorejplsite'
|
|
276
278
|
? page._source[handle + '__map_icon']?.thumbnail_image
|
|
277
279
|
: undefined
|
|
280
|
+
page.searchDescription =
|
|
281
|
+
handle === 'explore_jpl_sites_explorejplsite'
|
|
282
|
+
? page._source.search_description
|
|
283
|
+
: undefined
|
|
284
|
+
page.theme =
|
|
285
|
+
handle === 'explore_jpl_sites_explorejplsite'
|
|
286
|
+
? page._source[handle + '__theme_type_filter']
|
|
287
|
+
: undefined
|
|
278
288
|
if (image) {
|
|
279
289
|
page.image = {
|
|
280
290
|
src: {
|
package/src/interfaces.ts
CHANGED
|
@@ -147,6 +147,7 @@ export interface ElasticSearchPage {
|
|
|
147
147
|
location?: string
|
|
148
148
|
locationIcon?: string
|
|
149
149
|
wait?: string
|
|
150
|
+
theme?: string
|
|
150
151
|
title: string
|
|
151
152
|
summary?: string
|
|
152
153
|
eventType?: string
|
|
@@ -155,6 +156,7 @@ export interface ElasticSearchPage {
|
|
|
155
156
|
gradeLevels?: string
|
|
156
157
|
time?: string
|
|
157
158
|
targetAudience?: string
|
|
159
|
+
searchDescription?: string
|
|
158
160
|
}
|
|
159
161
|
|
|
160
162
|
export interface FormOption {
|
|
@@ -255,6 +257,10 @@ export interface FooterResponse {
|
|
|
255
257
|
footer: any
|
|
256
258
|
}
|
|
257
259
|
|
|
260
|
+
export interface BannerAdminResponse {
|
|
261
|
+
bannerAdmin: any
|
|
262
|
+
}
|
|
263
|
+
|
|
258
264
|
export interface EDUSubjectArea {
|
|
259
265
|
id: number
|
|
260
266
|
primarySubject: EduResourcesSubject
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BlockLinkCardCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
|
|
2
|
-
|
|
2
|
+
import ExploreJplIconImage from '@explorer-1/common-storybook/src/story-data/images/2026-Explore-JPL-Site-Number-1-Missions-in-Flight.png'
|
|
3
3
|
import PageSiteExploreApp from './PageSiteExploreApp.vue'
|
|
4
4
|
|
|
5
5
|
export default {
|
|
@@ -39,7 +39,9 @@ export const ExploreAppSitePageData = {
|
|
|
39
39
|
location: 'Cafe 186',
|
|
40
40
|
waitTime: '60',
|
|
41
41
|
waitTimeLabel: '60 minute wait',
|
|
42
|
-
|
|
42
|
+
mapIcon: {
|
|
43
|
+
url: ExploreJplIconImage
|
|
44
|
+
},
|
|
43
45
|
body: [
|
|
44
46
|
{
|
|
45
47
|
blockType: 'RichTextBlock',
|
|
@@ -12,7 +12,6 @@ import BlockStreamfield from './../../../components/BlockStreamfield/BlockStream
|
|
|
12
12
|
import BlockLinkCarousel from './../../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
|
|
13
13
|
import BaseExploreApp from './../../explore-jpl/BaseExploreApp/BaseExploreApp.vue'
|
|
14
14
|
import BaseButton from '../../../components/BaseButton/BaseButton.vue'
|
|
15
|
-
import BaseLink from '../../../components/BaseLink/BaseLink.vue'
|
|
16
15
|
import MetadataStacked from '../../../components/MetadataStacked/MetadataStacked.vue'
|
|
17
16
|
import IconMap from '../../../components/Icons/IconMap.vue'
|
|
18
17
|
|
|
@@ -27,22 +26,6 @@ const props = defineProps({
|
|
|
27
26
|
})
|
|
28
27
|
const { data } = reactive(props)
|
|
29
28
|
|
|
30
|
-
// Handle navigating back to Sites page
|
|
31
|
-
const previousPath = computed(() => {
|
|
32
|
-
try {
|
|
33
|
-
const path = route.path
|
|
34
|
-
|
|
35
|
-
// Split URL segments and remove last item
|
|
36
|
-
const segements = path.split('/').filter(Boolean)
|
|
37
|
-
segements.pop()
|
|
38
|
-
|
|
39
|
-
// Return Sites path
|
|
40
|
-
return '/' + segements.join('/')
|
|
41
|
-
} catch (e) {
|
|
42
|
-
return '/'
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
|
|
46
29
|
// Handle opening map to focus on respective site
|
|
47
30
|
const mapPath = computed(() => {
|
|
48
31
|
try {
|
|
@@ -67,26 +50,11 @@ const mapPath = computed(() => {
|
|
|
67
50
|
>
|
|
68
51
|
<BaseExploreApp :nav-data="data.breadcrumb">
|
|
69
52
|
<template #default>
|
|
70
|
-
<!-- back nav -->
|
|
71
|
-
<LayoutHelper
|
|
72
|
-
indent="col-2"
|
|
73
|
-
class="mb-5"
|
|
74
|
-
>
|
|
75
|
-
<BaseLink
|
|
76
|
-
class="BackToSitesBtn"
|
|
77
|
-
variant="primary"
|
|
78
|
-
:caret-left="true"
|
|
79
|
-
caret-margin-right="mr-1"
|
|
80
|
-
:to="previousPath"
|
|
81
|
-
>Back to Sites</BaseLink
|
|
82
|
-
>
|
|
83
|
-
</LayoutHelper>
|
|
84
|
-
|
|
85
53
|
<!-- page title area -->
|
|
86
54
|
<LayoutHelper indent="col-2">
|
|
87
55
|
<DetailHeadline
|
|
88
56
|
:title="data.title"
|
|
89
|
-
class="
|
|
57
|
+
class="my-5 lg:mt-10"
|
|
90
58
|
/>
|
|
91
59
|
<MetadataStacked
|
|
92
60
|
:location="data.location"
|
|
@@ -151,8 +119,3 @@ const mapPath = computed(() => {
|
|
|
151
119
|
</BaseExploreApp>
|
|
152
120
|
</div>
|
|
153
121
|
</template>
|
|
154
|
-
<style lang="scss" scoped>
|
|
155
|
-
.BackToSitesBtn {
|
|
156
|
-
margin-left: -10px;
|
|
157
|
-
}
|
|
158
|
-
</style>
|