@explorer-1/vue 0.2.0 → 0.2.1
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/components.d.ts +1 -0
- package/dist/explorer-1-vue.js +3759 -3729
- package/dist/explorer-1-vue.umd.cjs +12 -12
- package/dist/src/components/BlockCard/BlockCard.vue.d.ts +9 -0
- package/dist/src/components/BlockLinkCard/BlockLinkCard.vue.d.ts +30 -0
- package/dist/src/components/BlockRelatedLinks/BlockRelatedLinks.vue.d.ts +11 -0
- package/dist/src/components/BlockStreamfield/BlockStreamfield.stories.d.ts +17 -0
- package/dist/src/components/CalendarButton/CalendarButton.stories.d.ts +2 -62
- package/dist/src/components/CalendarButton/CalendarButton.vue.d.ts +26 -7
- package/dist/src/components/EventDetailHero/EventDetailHero.vue.d.ts +8 -1
- package/dist/src/templates/PageEventDetail/PageEventDetail.stories.d.ts +3 -1
- package/dist/src/templates/PageImageDetail/PageImageDetail.stories.d.ts +19 -27
- package/dist/src/templates/PageNewsDetail/PageNewsDetail.stories.d.ts +136 -0
- package/dist/src/templates/edu/PageContentEdu.stories.d.ts +1 -0
- package/dist/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.d.ts +128 -0
- package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +51 -0
- package/dist/src/templates/edu/PageEduResourceArticle/PageEduResourceArticle.stories.d.ts +17 -0
- package/dist/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.d.ts +17 -0
- package/dist/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.d.ts +17 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/BaseTag/BaseTag.vue +2 -2
- package/src/components/BlockCard/BlockCard.vue +8 -5
- package/src/components/BlockInlineImage/BlockInlineImage.vue +1 -1
- package/src/components/BlockLinkCard/BlockLinkCard.vue +33 -13
- package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +0 -1
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +6 -1
- package/src/components/BlockStreamfield/BlockStreamfield.stories.js +1 -0
- package/src/components/BlockStreamfield/BlockStreamfield.vue +3 -0
- package/src/components/CalendarButton/CalendarButton.stories.js +1 -19
- package/src/components/CalendarButton/CalendarButton.vue +43 -17
- package/src/components/EventDetailHero/EventDetailHero.vue +26 -31
- package/src/components/MixinCarousel/MixinCarousel.vue +1 -1
- package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +1 -0
- package/src/templates/PageEventDetail/PageEventDetail.stories.js +3 -1
- package/src/templates/PageEventDetail/PageEventDetail.vue +3 -3
- package/src/templates/PageImageDetail/PageImageDetail.stories.js +1 -1
- package/src/templates/edu/PageContentEdu.stories.js +1 -0
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +130 -0
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.vue +419 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { BlockKeyPointsData } from './../../../components/BlockKeyPoints/BlockKeyPoints.stories'
|
|
2
|
+
import { BlockLinkCardCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
|
|
3
|
+
import { EventDetailHeroData } from './../../../components/EventDetailHero/EventDetailHero.stories'
|
|
4
|
+
import { EventsBlockLinkCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories'
|
|
5
|
+
import PageEduEventDetail from './PageEduEventDetail.vue'
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Templates/EDU/PageEduEventDetail',
|
|
9
|
+
component: PageEduEventDetail,
|
|
10
|
+
tags: ['!autodocs'],
|
|
11
|
+
parameters: {
|
|
12
|
+
html: {
|
|
13
|
+
root: '#storyDecorator'
|
|
14
|
+
},
|
|
15
|
+
layout: 'fullscreen'
|
|
16
|
+
},
|
|
17
|
+
excludeStories: /.*Data$/
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// stories
|
|
21
|
+
export const BaseStory = {
|
|
22
|
+
name: 'PageEduEventDetail',
|
|
23
|
+
args: {
|
|
24
|
+
data: {
|
|
25
|
+
id: '285',
|
|
26
|
+
title: 'Becoming a NASA engineer',
|
|
27
|
+
slug: 'becoming-a-nasa-engineer',
|
|
28
|
+
url: '/events/becoming-a-nasa-engineer',
|
|
29
|
+
startDate: '2022-01-23',
|
|
30
|
+
startDatetime: '2022-01-23T17:00:00-08:00',
|
|
31
|
+
startTime: '17:00:00',
|
|
32
|
+
endDate: '2022-01-25',
|
|
33
|
+
endDatetime: '2022-01-25T23:00:00-08:00',
|
|
34
|
+
endTime: '23:00:00',
|
|
35
|
+
isAllDay: false,
|
|
36
|
+
timezone: 'PST',
|
|
37
|
+
eventType: 'Workshop',
|
|
38
|
+
summary:
|
|
39
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus et luctus nisi. Maecenas vel turpis sem. Nullam ultricies nulla quis nisi faucibus eleifend. In turpis ante, blandit nec dapibus tempor, posuere at erat. In justo quam, imperdiet at hendrerit eget, imperdiet ut orci. ',
|
|
40
|
+
locationName: 'Webcast',
|
|
41
|
+
registerLink: [
|
|
42
|
+
{
|
|
43
|
+
text: 'Registration Link',
|
|
44
|
+
document: '',
|
|
45
|
+
page: {
|
|
46
|
+
url: '/placeholder'
|
|
47
|
+
},
|
|
48
|
+
externalLink: ''
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
eventImage: {
|
|
52
|
+
__typename: 'CustomImage',
|
|
53
|
+
srcSet:
|
|
54
|
+
'https://picsum.photos/720/420 320w, https://picsum.photos/720/420 640w, https://picsum.photos/720/420 720w',
|
|
55
|
+
original: 'https://picsum.photos/720/420',
|
|
56
|
+
src: {
|
|
57
|
+
__typename: 'CustomRendition',
|
|
58
|
+
url: 'https://picsum.photos/720/420',
|
|
59
|
+
width: '720',
|
|
60
|
+
height: '420'
|
|
61
|
+
},
|
|
62
|
+
title: 'Marine Picks First Public Mars Global Surveyor Image',
|
|
63
|
+
alt: '',
|
|
64
|
+
caption:
|
|
65
|
+
'<p data-block-key="y00sz">A close-up view of part of the area imaged by Mars Global Surveyor for its public request program.</p>',
|
|
66
|
+
credit: 'Credit',
|
|
67
|
+
detailUrl: null
|
|
68
|
+
},
|
|
69
|
+
thumbnailImage: {
|
|
70
|
+
alt: '',
|
|
71
|
+
original: 'https://picsum.photos/512/288'
|
|
72
|
+
},
|
|
73
|
+
targetAudience: 'All ages',
|
|
74
|
+
body: [
|
|
75
|
+
BlockKeyPointsData,
|
|
76
|
+
{
|
|
77
|
+
blockType: 'RichTextBlock',
|
|
78
|
+
value:
|
|
79
|
+
'<p>Lorem ipsum <a href="/missions/test-mission/">dolor</a> sit amet, consectetur adipiscing elit. Quisque vitae justo quis justo malesuada molestie. Cras sed tincidunt dui.</p><p>Integer imperdiet blandit neque vitae euismod. Nulla aliquet lacus nibh, vel tincidunt urna efficitur non. In et eros vitae ex posuere maximus quis eget urna. Suspendisse fringilla posuere velit sit amet posuere. Morbi malesuada bibendum vehicula. Donec faucibus ut erat ut mattis. Suspendisse ornare, quam at placerat cursus, dolor mi lacinia nunc, eget maximus augue nulla in dolor.</p>\n'
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
relatedEvents: [...EventsBlockLinkCarouselData],
|
|
83
|
+
speakers: [
|
|
84
|
+
{
|
|
85
|
+
host: 'host',
|
|
86
|
+
id: '1',
|
|
87
|
+
internalLink: null,
|
|
88
|
+
name: 'Varoujan Gorjian',
|
|
89
|
+
title: 'Splitzer Research Scientest, JPL'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
host: 'co-host',
|
|
93
|
+
id: '2',
|
|
94
|
+
image: {
|
|
95
|
+
alt: '',
|
|
96
|
+
src: {
|
|
97
|
+
height: '450',
|
|
98
|
+
url: 'https://picsum.photos/560/560',
|
|
99
|
+
width: '450'
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
internalLink: null,
|
|
103
|
+
name: 'Robert Hurt',
|
|
104
|
+
title: 'Splitzer visualisation'
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
relatedLinks: [
|
|
108
|
+
{
|
|
109
|
+
blockType: 'RelatedLinksBlock',
|
|
110
|
+
heading: 'Related Links',
|
|
111
|
+
links: [
|
|
112
|
+
{
|
|
113
|
+
document: null,
|
|
114
|
+
externalLink: 'http://www.google.com',
|
|
115
|
+
page: null,
|
|
116
|
+
text: 'Lorem ipsum dolor'
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
document: null,
|
|
120
|
+
externalLink: 'http://www.google.com',
|
|
121
|
+
page: null,
|
|
122
|
+
text: 'Sit amet consectatur'
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
relatedContent: BlockLinkCardCarouselData
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
v-if="data"
|
|
4
|
+
class="PageEduEventDetail pt-5 ThemeVariantLight lg:pt-12"
|
|
5
|
+
itemscope
|
|
6
|
+
itemtype="http://schema.org/Event"
|
|
7
|
+
>
|
|
8
|
+
<!-- schema.org -->
|
|
9
|
+
<meta
|
|
10
|
+
v-if="data.thumbnailImage && data.thumbnailImage.original"
|
|
11
|
+
itemprop="thumbnailUrl"
|
|
12
|
+
:content="data.thumbnailImage.original"
|
|
13
|
+
/>
|
|
14
|
+
<meta
|
|
15
|
+
itemprop="startDate"
|
|
16
|
+
:content="data.startDatetime"
|
|
17
|
+
/>
|
|
18
|
+
<meta
|
|
19
|
+
v-if="data.endDatetime"
|
|
20
|
+
itemprop="endDate"
|
|
21
|
+
:content="data.endDatetime"
|
|
22
|
+
/>
|
|
23
|
+
<meta
|
|
24
|
+
v-if="data.summary || data.body"
|
|
25
|
+
itemprop="description"
|
|
26
|
+
:content="data.summary || data.body"
|
|
27
|
+
/>
|
|
28
|
+
|
|
29
|
+
<LayoutHelper
|
|
30
|
+
indent="col-2"
|
|
31
|
+
class="mb-6 lg:mb-12"
|
|
32
|
+
>
|
|
33
|
+
<div
|
|
34
|
+
v-if="data.eventType"
|
|
35
|
+
class="flex flex-wrap items-start mb-3"
|
|
36
|
+
>
|
|
37
|
+
<BaseTag
|
|
38
|
+
variant="primary"
|
|
39
|
+
size="md"
|
|
40
|
+
>
|
|
41
|
+
{{ data.eventType }}
|
|
42
|
+
</BaseTag>
|
|
43
|
+
</div>
|
|
44
|
+
<BaseHeading
|
|
45
|
+
level="h1"
|
|
46
|
+
itemprop="name"
|
|
47
|
+
>
|
|
48
|
+
{{ data.title }}
|
|
49
|
+
</BaseHeading>
|
|
50
|
+
<ShareButtonsEdu
|
|
51
|
+
class="mt-4"
|
|
52
|
+
:title="data.title"
|
|
53
|
+
:url="data.url"
|
|
54
|
+
/>
|
|
55
|
+
</LayoutHelper>
|
|
56
|
+
|
|
57
|
+
<LayoutHelper indent="col-2">
|
|
58
|
+
<EventDetailHero
|
|
59
|
+
:image="data.eventImage"
|
|
60
|
+
:start-date-split="formattedSplitEventDates"
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<!-- Event details -->
|
|
64
|
+
<div>
|
|
65
|
+
<div
|
|
66
|
+
class="py-1 mb-10 text-xl lg:mb-0 lg:flex"
|
|
67
|
+
:class="data.registerLink && data.registerLink.length > 0 ? '' : 'lg:mb-10'"
|
|
68
|
+
>
|
|
69
|
+
<div
|
|
70
|
+
v-if="formattedEventDates || data.customDate"
|
|
71
|
+
class="PageEduEventDetail__Metadata text-primary"
|
|
72
|
+
>
|
|
73
|
+
<IconCalendar class="relative mr-3 text-[1.2rem]" />
|
|
74
|
+
<span>{{ formattedEventDates || data.customDate }}</span>
|
|
75
|
+
</div>
|
|
76
|
+
<div
|
|
77
|
+
v-show="displayTime"
|
|
78
|
+
class="PageEduEventDetail__Metadata text-primary"
|
|
79
|
+
>
|
|
80
|
+
<IconTime class="relative mr-3" />
|
|
81
|
+
<span>{{ displayTime }}</span>
|
|
82
|
+
</div>
|
|
83
|
+
<!--Virtual location -->
|
|
84
|
+
<div
|
|
85
|
+
v-if="data.isVirtualEvent && data.locationLink"
|
|
86
|
+
itemprop="location"
|
|
87
|
+
itemscope
|
|
88
|
+
itemtype="https://schema.org/VirtualLocation"
|
|
89
|
+
class="PageEduEventDetail__Metadata text-primary"
|
|
90
|
+
>
|
|
91
|
+
<link
|
|
92
|
+
itemprop="url"
|
|
93
|
+
:href="data.locationLink"
|
|
94
|
+
/>
|
|
95
|
+
<meta
|
|
96
|
+
itemprop="name"
|
|
97
|
+
:content="data.locationName"
|
|
98
|
+
/>
|
|
99
|
+
<IconLocation class="relative mr-3" />
|
|
100
|
+
<BaseLink
|
|
101
|
+
variant="none"
|
|
102
|
+
class="text-action"
|
|
103
|
+
:href="data.locationLink"
|
|
104
|
+
external-target-blank
|
|
105
|
+
>
|
|
106
|
+
{{ data.locationName }}
|
|
107
|
+
</BaseLink>
|
|
108
|
+
</div>
|
|
109
|
+
<!-- Normal location -->
|
|
110
|
+
<div
|
|
111
|
+
v-else-if="data.locationName"
|
|
112
|
+
class="PageEduEventDetail__Metadata text-primary"
|
|
113
|
+
>
|
|
114
|
+
<meta
|
|
115
|
+
itemprop="location"
|
|
116
|
+
:content="data.locationName"
|
|
117
|
+
/>
|
|
118
|
+
<IconLocation class="relative mr-3" />
|
|
119
|
+
<BaseLink
|
|
120
|
+
v-if="data.locationLink"
|
|
121
|
+
variant="none"
|
|
122
|
+
:href="data.locationLink"
|
|
123
|
+
external-target-blank
|
|
124
|
+
>
|
|
125
|
+
{{ data.locationName }}
|
|
126
|
+
</BaseLink>
|
|
127
|
+
<span v-else>{{ data.locationName }}</span>
|
|
128
|
+
</div>
|
|
129
|
+
<div
|
|
130
|
+
v-if="data.targetAudience"
|
|
131
|
+
class="PageEduEventDetail__Metadata text-primary"
|
|
132
|
+
>
|
|
133
|
+
<IconUser class="relative mr-3 text-[.9rem]" />
|
|
134
|
+
<span>{{ data.targetAudience }}</span>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div class="PageEduEventDetail__Buttons">
|
|
138
|
+
<BaseButton
|
|
139
|
+
v-if="
|
|
140
|
+
data.registerLink &&
|
|
141
|
+
data.registerLink.length > 0 &&
|
|
142
|
+
((data.registerLink[0].page && data.registerLink[0].page.url) ||
|
|
143
|
+
data.registerLink[0].externalLink)
|
|
144
|
+
"
|
|
145
|
+
class="w-full px-0 mb-5"
|
|
146
|
+
:href="data.registerLink[0].externalLink ? data.registerLink[0].externalLink : null"
|
|
147
|
+
:to="
|
|
148
|
+
data.registerLink[0].page && data.registerLink[0].page.url
|
|
149
|
+
? data.registerLink[0].page.url
|
|
150
|
+
: null
|
|
151
|
+
"
|
|
152
|
+
:target="data.registerLink[0].externalLink ? '_blank' : '_self'"
|
|
153
|
+
compact
|
|
154
|
+
>Register for event
|
|
155
|
+
</BaseButton>
|
|
156
|
+
<!-- Todo IF VIRTUAL EVENT passes url as string to location prop -->
|
|
157
|
+
<!-- location= location name and link -->
|
|
158
|
+
<CalendarButton
|
|
159
|
+
v-if="data.startDatetime"
|
|
160
|
+
:start-datetime="data.startDatetime"
|
|
161
|
+
:end-datetime="data.endDatetime ? data.endDatetime : null"
|
|
162
|
+
:title="data.title ? data.title : null"
|
|
163
|
+
:location="data.locationName ? data.locationName : null"
|
|
164
|
+
:description="data.summary ? data.summary : null"
|
|
165
|
+
/>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<!-- Body -->
|
|
170
|
+
<div
|
|
171
|
+
v-if="data.body || data.summary"
|
|
172
|
+
class="grid-cols-10 lg:grid -mx-4 lg:mx-0"
|
|
173
|
+
>
|
|
174
|
+
<div class="col-span-7">
|
|
175
|
+
<p
|
|
176
|
+
v-if="data.summary"
|
|
177
|
+
class="BlockText text-body-lg mb-8 px-4 lg:px-0 font-semibold"
|
|
178
|
+
>
|
|
179
|
+
{{ data.summary }}
|
|
180
|
+
</p>
|
|
181
|
+
<BlockStreamfield
|
|
182
|
+
v-if="data.body"
|
|
183
|
+
variant="fluid"
|
|
184
|
+
:data="data.body"
|
|
185
|
+
/>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</LayoutHelper>
|
|
190
|
+
|
|
191
|
+
<!-- Speakers -->
|
|
192
|
+
<LayoutHelper
|
|
193
|
+
v-if="data.speakers && data.speakers.length > 0"
|
|
194
|
+
indent="col-2"
|
|
195
|
+
class="mb-12 lg:mb-16"
|
|
196
|
+
>
|
|
197
|
+
<div class="grid-cols-10 lg:grid">
|
|
198
|
+
<div class="col-span-7">
|
|
199
|
+
<BaseHeading
|
|
200
|
+
level="h2"
|
|
201
|
+
size="h3"
|
|
202
|
+
class="mb-5 md:mb-8"
|
|
203
|
+
>Speakers</BaseHeading
|
|
204
|
+
>
|
|
205
|
+
<div class="flex flex-col flex-wrap justify-start md:flex-row md:-mx-4">
|
|
206
|
+
<div
|
|
207
|
+
v-for="(speaker, index) in data.speakers"
|
|
208
|
+
:key="index"
|
|
209
|
+
class="flex flex-1 mb-6 md:flex-none md:flex-wrap md:mx-4 md:w-56"
|
|
210
|
+
>
|
|
211
|
+
<div class="w-40 mr-6 md:mr-0 md:w-56">
|
|
212
|
+
<BaseImagePlaceholder
|
|
213
|
+
aspect-ratio="1:1"
|
|
214
|
+
class="relative overflow-hidden bg-gray-light-mid"
|
|
215
|
+
transparent-mode
|
|
216
|
+
>
|
|
217
|
+
<BaseImage
|
|
218
|
+
v-if="speaker.image && speaker.image.src"
|
|
219
|
+
:src="speaker.image.src.url"
|
|
220
|
+
:width="speaker.image.src.width"
|
|
221
|
+
:height="speaker.image.src.height"
|
|
222
|
+
alt=""
|
|
223
|
+
class="object-cover"
|
|
224
|
+
loading="lazy"
|
|
225
|
+
/>
|
|
226
|
+
<img
|
|
227
|
+
v-else
|
|
228
|
+
:src="PlaceholderPortrait"
|
|
229
|
+
alt=""
|
|
230
|
+
/>
|
|
231
|
+
</BaseImagePlaceholder>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="flex-1 h-full">
|
|
234
|
+
<h3
|
|
235
|
+
v-if="speaker.name"
|
|
236
|
+
class="my-3 text-lg !font-normal !tracking-normal leading-none"
|
|
237
|
+
>
|
|
238
|
+
<BaseLink
|
|
239
|
+
v-if="speaker.internalLink || speaker.externalLink"
|
|
240
|
+
link-class="no-underline normal-case"
|
|
241
|
+
:to="speaker.internalLink ? speaker.internalLink.url : null"
|
|
242
|
+
:href="speaker.externalLink ? speaker.externalLink : null"
|
|
243
|
+
external-target-blank
|
|
244
|
+
>
|
|
245
|
+
{{ speaker.name }}
|
|
246
|
+
</BaseLink>
|
|
247
|
+
<template v-else>
|
|
248
|
+
{{ speaker.name }}
|
|
249
|
+
</template>
|
|
250
|
+
</h3>
|
|
251
|
+
<p
|
|
252
|
+
v-if="speaker.title"
|
|
253
|
+
class="mb-3 text-gray-mid-dark"
|
|
254
|
+
>
|
|
255
|
+
{{ speaker.title }}
|
|
256
|
+
</p>
|
|
257
|
+
<p class="text-action capitalize">
|
|
258
|
+
{{ speaker.host }}
|
|
259
|
+
</p>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
</LayoutHelper>
|
|
266
|
+
|
|
267
|
+
<!-- Webcast -->
|
|
268
|
+
<LayoutHelper
|
|
269
|
+
v-if="data.relatedLinks && data.relatedLinks.length > 0"
|
|
270
|
+
indent="col-2"
|
|
271
|
+
class="my-12 lg:my-16"
|
|
272
|
+
>
|
|
273
|
+
<BlockRelatedLinks
|
|
274
|
+
:data="data.relatedLinks[0]"
|
|
275
|
+
size="h3"
|
|
276
|
+
/>
|
|
277
|
+
</LayoutHelper>
|
|
278
|
+
|
|
279
|
+
<!-- Related Events -->
|
|
280
|
+
<LayoutHelper
|
|
281
|
+
v-if="data.relatedEvents?.length"
|
|
282
|
+
indent="col-1"
|
|
283
|
+
class="my-12 lg:my-16"
|
|
284
|
+
>
|
|
285
|
+
<BlockLinkCarousel
|
|
286
|
+
item-type="cards"
|
|
287
|
+
size="h3"
|
|
288
|
+
heading="Related Events"
|
|
289
|
+
:items="data.relatedEvents"
|
|
290
|
+
/>
|
|
291
|
+
</LayoutHelper>
|
|
292
|
+
<!-- Related Content -->
|
|
293
|
+
<div
|
|
294
|
+
v-if="data.relatedContent?.length"
|
|
295
|
+
class="bg-stars bg-[#15003B] lg:py-24 lg:mt-24 py-12 mt-12"
|
|
296
|
+
>
|
|
297
|
+
<BlockLinkCarousel
|
|
298
|
+
class="ThemeVariantDark"
|
|
299
|
+
item-type="cards"
|
|
300
|
+
heading="Explore More"
|
|
301
|
+
:items="data.relatedContent"
|
|
302
|
+
/>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
</template>
|
|
306
|
+
<script lang="ts">
|
|
307
|
+
import { defineComponent } from 'vue'
|
|
308
|
+
import {
|
|
309
|
+
mixinFormatEventDates,
|
|
310
|
+
mixinFormatEventTimeInHoursAndMinutes,
|
|
311
|
+
mixinFormatSplitEventDates
|
|
312
|
+
} from '../../../utils/mixins'
|
|
313
|
+
import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
|
|
314
|
+
import BaseHeading from './../../../components/BaseHeading/BaseHeading.vue'
|
|
315
|
+
import BaseTag from './../../../components/BaseTag/BaseTag.vue'
|
|
316
|
+
import ShareButtonsEdu from './../../../components/ShareButtonsEdu/ShareButtonsEdu.vue'
|
|
317
|
+
import EventDetailHero from './../../../components/EventDetailHero/EventDetailHero.vue'
|
|
318
|
+
import IconCalendar from './../../../components/Icons/IconCalendar.vue'
|
|
319
|
+
import IconLocation from './../../../components/Icons/IconLocation.vue'
|
|
320
|
+
import IconTime from './../../../components/Icons/IconTime.vue'
|
|
321
|
+
import IconUser from './../../../components/Icons/IconUser.vue'
|
|
322
|
+
import BaseLink from './../../../components/BaseLink/BaseLink.vue'
|
|
323
|
+
import BaseButton from './../../../components/BaseButton/BaseButton.vue'
|
|
324
|
+
import CalendarButton from './../../../components/CalendarButton/CalendarButton.vue'
|
|
325
|
+
import BlockStreamfield from './../../../components/BlockStreamfield/BlockStreamfield.vue'
|
|
326
|
+
import BaseImagePlaceholder from './../../../components/BaseImagePlaceholder/BaseImagePlaceholder.vue'
|
|
327
|
+
import BaseImage from './../../../components/BaseImage/BaseImage.vue'
|
|
328
|
+
import BlockRelatedLinks from './../../../components/BlockRelatedLinks/BlockRelatedLinks.vue'
|
|
329
|
+
import BlockLinkCarousel from './../../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
|
|
330
|
+
// @ts-ignore
|
|
331
|
+
import PlaceholderPortrait from '@explorer-1/common/src/images/svg/placeholder-portrait.svg'
|
|
332
|
+
|
|
333
|
+
export default defineComponent({
|
|
334
|
+
name: 'PageEduEventDetail',
|
|
335
|
+
components: {
|
|
336
|
+
LayoutHelper,
|
|
337
|
+
BaseHeading,
|
|
338
|
+
BaseTag,
|
|
339
|
+
ShareButtonsEdu,
|
|
340
|
+
EventDetailHero,
|
|
341
|
+
IconCalendar,
|
|
342
|
+
IconLocation,
|
|
343
|
+
IconTime,
|
|
344
|
+
IconUser,
|
|
345
|
+
BaseLink,
|
|
346
|
+
BaseButton,
|
|
347
|
+
CalendarButton,
|
|
348
|
+
BlockStreamfield,
|
|
349
|
+
BaseImagePlaceholder,
|
|
350
|
+
BaseImage,
|
|
351
|
+
BlockRelatedLinks,
|
|
352
|
+
BlockLinkCarousel
|
|
353
|
+
},
|
|
354
|
+
props: {
|
|
355
|
+
data: {
|
|
356
|
+
type: Object,
|
|
357
|
+
required: false,
|
|
358
|
+
default: undefined
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
data() {
|
|
362
|
+
return {
|
|
363
|
+
PlaceholderPortrait: PlaceholderPortrait
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
computed: {
|
|
367
|
+
displayTime(): string {
|
|
368
|
+
return this.data
|
|
369
|
+
? mixinFormatEventTimeInHoursAndMinutes(
|
|
370
|
+
this.data.startDatetime,
|
|
371
|
+
this.data.endDatetime,
|
|
372
|
+
this.data.endTime
|
|
373
|
+
)
|
|
374
|
+
: ''
|
|
375
|
+
},
|
|
376
|
+
formattedEventDates(): string {
|
|
377
|
+
return this.data ? mixinFormatEventDates(this.data.startDatetime, this.data.endDatetime) : ''
|
|
378
|
+
},
|
|
379
|
+
formattedSplitEventDates() {
|
|
380
|
+
return this.data
|
|
381
|
+
? mixinFormatSplitEventDates(this.data.startDatetime, this.data.endDatetime)
|
|
382
|
+
: undefined
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
})
|
|
386
|
+
</script>
|
|
387
|
+
<style lang="scss">
|
|
388
|
+
.PageEduEventDetail {
|
|
389
|
+
.PageEduEventDetail__Metadata {
|
|
390
|
+
@apply flex;
|
|
391
|
+
@apply items-baseline;
|
|
392
|
+
@apply mr-12 md:mr-8 lg:mr-12;
|
|
393
|
+
@apply mb-5 lg:mb-7;
|
|
394
|
+
|
|
395
|
+
span {
|
|
396
|
+
max-width: 230px;
|
|
397
|
+
min-width: 110px;
|
|
398
|
+
@apply text-gray-dark;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
svg {
|
|
402
|
+
min-width: 1.25rem;
|
|
403
|
+
@apply top-0.5;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.PageEduEventDetail__Buttons {
|
|
408
|
+
@apply text-base;
|
|
409
|
+
@apply lg:ml-auto;
|
|
410
|
+
@apply mt-10;
|
|
411
|
+
@apply lg:mt-0;
|
|
412
|
+
|
|
413
|
+
max-width: 260px;
|
|
414
|
+
}
|
|
415
|
+
.bg-stars .MixinCarousel__Heading {
|
|
416
|
+
@apply text-white;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
</style>
|