@explorer-1/vue 0.1.3 → 0.1.5

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 (158) hide show
  1. package/dist/explorer-1-vue.js +8960 -10011
  2. package/dist/explorer-1-vue.umd.cjs +13 -16
  3. package/dist/src/components/BaseHeading/BaseHeading.stories.d.ts +6 -11
  4. package/dist/src/components/BaseHeading/BaseHeading.vue.d.ts +6 -10
  5. package/dist/src/components/BasePlaceholder/BasePlaceholder.stories.d.ts +0 -1
  6. package/dist/src/components/BlockDialog/BlockDialog.stories.d.ts +81 -0
  7. package/dist/src/components/BlockImage/BlockImage.stories.d.ts +0 -1
  8. package/dist/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.d.ts +6 -0
  9. package/dist/src/components/BlockLinkCarousel/BlockLinkCarousel.vue.d.ts +6 -0
  10. package/dist/src/components/BlockQuote/BlockQuote.stories.d.ts +0 -1
  11. package/dist/src/components/BlockStreamfield/BlockStreamfield.stories.d.ts +58 -8
  12. package/dist/src/components/BlockVideoEmbed/BlockVideoEmbed.vue.d.ts +7 -3
  13. package/dist/src/components/HeroListingIndex/HeroListingIndex.stories.d.ts +1 -0
  14. package/dist/src/components/HeroMedium/HeroMedium.stories.d.ts +1 -0
  15. package/dist/src/components/HeroMedium/HeroSmall.stories.d.ts +1 -0
  16. package/dist/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.d.ts +1 -6
  17. package/dist/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.d.ts +31 -47
  18. package/dist/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue.d.ts +5 -1
  19. package/dist/src/components/HomepageStats/HomepageStats.stories.d.ts +19 -9
  20. package/dist/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.d.ts +6 -50
  21. package/dist/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue.d.ts +7 -1
  22. package/dist/src/components/MissionDetailAbout/MissionDetailAbout.stories.d.ts +1 -6
  23. package/dist/src/components/MissionDetailHero/MissionDetailHero.stories.d.ts +11 -11
  24. package/dist/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.d.ts +6 -6
  25. package/dist/src/components/NavDesktop/NavDesktop.stories.d.ts +3 -6
  26. package/dist/src/components/NavDesktopEdu/NavDesktopEdu.stories.d.ts +289 -0
  27. package/dist/src/components/NavLogoLinks/NavLogoLinks.stories.d.ts +0 -5
  28. package/dist/src/components/NavMobile/NavMobile.stories.d.ts +42 -9
  29. package/dist/src/components/NavMobile/NavMobile.vue.d.ts +13 -2
  30. package/dist/src/components/NavMobile/NavMobileEdu.stories.d.ts +392 -0
  31. package/dist/src/components/NavSocial/NavSocial.stories.d.ts +42 -1
  32. package/dist/src/components/NavSocial/NavSocial.vue.d.ts +42 -1
  33. package/dist/src/components/TheFooter/TheFooter.vue.d.ts +9 -1
  34. package/dist/src/components/TimelineDialog/TimelineDialog.stories.d.ts +75 -0
  35. package/dist/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.d.ts +1 -7
  36. package/dist/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.d.ts +1 -6
  37. package/dist/src/docs/foundation/typography.stories.d.ts +6 -10
  38. package/dist/src/store/curatedGallery.d.ts +6 -0
  39. package/dist/src/store/search.d.ts +10 -0
  40. package/dist/src/templates/PageAudioDetail/PageAudioDetail.stories.d.ts +102 -0
  41. package/dist/src/templates/PageContent/PageContent.stories.d.ts +2 -1
  42. package/dist/src/templates/PageContent/PageContent.vue.d.ts +8 -0
  43. package/dist/src/templates/PageEventDetail/PageEventDetail.stories.d.ts +1 -1
  44. package/dist/src/templates/PageImageDetail/PageImageDetail.stories.d.ts +141 -0
  45. package/dist/src/templates/PageNewsDetail/PageNewsDetail.stories.d.ts +1163 -228
  46. package/dist/src/templates/PageVideoDetail/PageVideoDetail.stories.d.ts +56 -0
  47. package/dist/src/templates/edu/PageContentEdu.stories.d.ts +27 -0
  48. package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +360 -0
  49. package/dist/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.d.ts +99 -0
  50. package/dist/src/templates/{edu/PageEduNewsDetail.stories.d.ts → www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.d.ts} +48 -67
  51. package/dist/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.d.ts +98 -0
  52. package/dist/src/templates/www/PageGoDirectory/PageGoDirectory.stories.d.ts +56 -0
  53. package/dist/src/templates/www/PageHomepage/PageHomepage.stories.d.ts +704 -0
  54. package/dist/src/templates/www/PageInfographicDetail/PageInfographicDetail.stories.d.ts +41 -0
  55. package/dist/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.stories.d.ts +14 -0
  56. package/dist/src/templates/www/PageMissionDetail/PageMissionDetail.stories.d.ts +875 -0
  57. package/dist/src/templates/www/PagePodcast/PagePodcast.stories.d.ts +115 -0
  58. package/dist/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.d.ts +84 -0
  59. package/dist/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.d.ts +64 -0
  60. package/dist/src/templates/www/PageProfileDetail/PageProfileDetail.stories.d.ts +60 -0
  61. package/dist/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.d.ts +170 -0
  62. package/dist/src/templates/www/PageTimeline/PageTimeline.stories.d.ts +338 -0
  63. package/dist/src/templates/www/PageTopicDetail/PageTopicDetail.stories.d.ts +297 -0
  64. package/dist/style.css +1 -1
  65. package/lib/main.ts +4 -0
  66. package/package.json +2 -1
  67. package/src/components/BaseAudio/BaseAudio.vue +0 -1
  68. package/src/components/BaseHeading/BaseHeading.stories.js +0 -1
  69. package/src/components/BaseHeading/BaseHeading.vue +5 -7
  70. package/src/components/BasePlaceholder/BasePlaceholder.stories.js +0 -1
  71. package/src/components/BlockAudio/BlockAudio.stories.js +2 -3
  72. package/src/components/BlockDialog/BlockDialog.stories.js +56 -0
  73. package/src/components/BlockDialog/BlockDialog.stories.mdx +28 -0
  74. package/src/components/BlockDialog/BlockDialog.vue +132 -0
  75. package/src/components/BlockHeading/BlockHeading.stories.js +2 -2
  76. package/src/components/BlockImage/BlockImage.stories.js +0 -1
  77. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +0 -1
  78. package/src/components/BlockImageGallery/BlockImageGallery.vue +0 -1
  79. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +4 -2
  80. package/src/components/BlockQuote/BlockQuote.stories.js +0 -1
  81. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +20 -9
  82. package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +3 -2
  83. package/src/components/DsnWidget/DsnWidget.vue +2 -2
  84. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.js +1 -8
  85. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.js +115 -118
  86. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue +3 -23
  87. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarouselItem.vue +1 -2
  88. package/src/components/HomepageStats/HomepageStats.stories.js +10 -10
  89. package/src/components/HomepageStats/HomepageStats.vue +8 -8
  90. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.js +11 -18
  91. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue +20 -14
  92. package/src/components/HomepageTeaserBlock/HomepageTeaserBlockCardImage.vue +1 -1
  93. package/src/components/MissionDetailAbout/MissionDetailAbout.stories.js +1 -8
  94. package/src/components/MissionDetailHero/MissionDetailHero.stories.js +11 -11
  95. package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +6 -6
  96. package/src/components/MixinCarousel/MixinCarousel.docs.mdx +1 -1
  97. package/src/components/NavDesktop/NavDesktop.stories.js +1 -4
  98. package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +2 -1
  99. package/src/components/NavDesktopEdu/NavDesktopEdu.vue +0 -26
  100. package/src/components/NavMobile/NavMobileEdu.stories.js +2 -1
  101. package/src/components/NavSecondary/NavSecondary.vue +1 -1
  102. package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +1 -1
  103. package/src/components/TimelineDialog/TimelineDialog.stories.js +47 -0
  104. package/src/components/TimelineDialog/TimelineDialog.stories.mdx +26 -0
  105. package/src/components/TimelineDialog/TimelineDialog.vue +145 -0
  106. package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.js +1 -9
  107. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.js +1 -8
  108. package/src/docs/utils/ComponentItem.jsx +0 -1
  109. package/src/store/curatedGallery.ts +23 -0
  110. package/src/store/search.ts +43 -0
  111. package/src/templates/PageAudioDetail/PageAudioDetail.stories.js +106 -0
  112. package/src/templates/PageAudioDetail/PageAudioDetail.vue +375 -0
  113. package/src/templates/PageContent/PageContent.stories.js +2 -1
  114. package/src/templates/PageEventDetail/PageEventDetail.stories.js +1 -1
  115. package/src/templates/PageImageDetail/PageImageDetail.stories.js +116 -0
  116. package/src/templates/PageImageDetail/PageImageDetail.vue +444 -0
  117. package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +3 -2
  118. package/src/templates/PageNewsDetail/PageNewsDetail.vue +1 -1
  119. package/src/templates/PageVideoDetail/PageVideoDetail.stories.js +84 -0
  120. package/src/templates/PageVideoDetail/PageVideoDetail.vue +173 -0
  121. package/src/templates/edu/PageContentEdu.stories.js +1 -0
  122. package/src/templates/edu/{PageEduNewsDetail.stories.js → PageEduNewsDetail/PageEduNewsDetail.stories.js} +5 -3
  123. package/src/templates/edu/{PageEduNewsDetail.vue → PageEduNewsDetail/PageEduNewsDetail.vue} +3 -2
  124. package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.js +54 -0
  125. package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.vue +79 -0
  126. package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.js +34 -0
  127. package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.vue +56 -0
  128. package/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.js +110 -0
  129. package/src/templates/www/PageCuratedGallery/PageCuratedGallery.vue +345 -0
  130. package/src/templates/www/PageGoDirectory/PageGoDirectory.stories.js +61 -0
  131. package/src/templates/www/PageGoDirectory/PageGoDirectory.vue +76 -0
  132. package/src/templates/www/PageHomepage/PageHomepage.stories.js +101 -0
  133. package/src/templates/www/PageHomepage/PageHomepage.vue +136 -0
  134. package/src/templates/www/PageInfographicDetail/PageInfographicDetail.stories.js +46 -0
  135. package/src/templates/www/PageInfographicDetail/PageInfographicDetail.vue +125 -0
  136. package/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.stories.js +14 -0
  137. package/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.vue +94 -0
  138. package/src/templates/www/PageMissionDetail/PageMissionDetail.stories.js +246 -0
  139. package/src/templates/www/PageMissionDetail/PageMissionDetail.vue +136 -0
  140. package/src/templates/www/PagePodcast/PagePodcast.stories.js +86 -0
  141. package/src/templates/www/PagePodcast/PagePodcast.vue +219 -0
  142. package/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.js +96 -0
  143. package/src/templates/www/PagePodcastSeason/PagePodcastSeason.vue +191 -0
  144. package/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.js +72 -0
  145. package/src/templates/www/PagePressKitIndex/PagePressKitIndex.vue +76 -0
  146. package/src/templates/www/PageProfileDetail/PageProfileDetail.stories.js +76 -0
  147. package/src/templates/www/PageProfileDetail/PageProfileDetail.vue +178 -0
  148. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.js +43 -0
  149. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.vue +101 -0
  150. package/src/templates/www/PageTimeline/BlockMilestone.vue +99 -0
  151. package/src/templates/www/PageTimeline/PageTimeline.stories.js +357 -0
  152. package/src/templates/www/PageTimeline/PageTimeline.vue +384 -0
  153. package/src/templates/www/PageTopicDetail/PageTopicDetail.stories.js +87 -0
  154. package/src/templates/www/PageTopicDetail/PageTopicDetail.vue +121 -0
  155. package/src/utils/mixins.ts +1 -1
  156. package/components.d.ts +0 -217
  157. package/src/templates/www/HomePage/HomePage.vue +0 -30
  158. /package/dist/src/components/{MixinDropdownToggle/MixinDropdownToggle.vue.d.ts → NavDropdownToggle/NavDropdownToggle.vue.d.ts} +0 -0
@@ -0,0 +1,444 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="PageImageDetail ThemeVariantLight"
5
+ itemscope
6
+ itemtype="http://schema.org/ImageObject"
7
+ >
8
+ <!-- schema.org -->
9
+ <meta
10
+ v-if="data.image && data.image.original"
11
+ itemprop="contentUrl"
12
+ :content="data.image.original"
13
+ />
14
+ <meta
15
+ v-if="data.image && data.image.src"
16
+ itemprop="thumbnailUrl"
17
+ :content="data.image.src"
18
+ />
19
+
20
+ <div class="lg:container 3xl:px-0 lg:mt-12 px-5 mx-auto mt-5">
21
+ <BaseLink
22
+ variant="secondary"
23
+ to="/images"
24
+ class="py-3"
25
+ >Image</BaseLink
26
+ >
27
+ <DetailHeadline
28
+ :title="data.title"
29
+ :publication-date="data.publicationDate"
30
+ schema
31
+ />
32
+ </div>
33
+ <div
34
+ class="PageImageDetail-image-container max-w-screen-3xl relative lg:mb-20 mx-auto mt-10 mb-8"
35
+ >
36
+ <ImageDetailContextImage
37
+ v-if="data.contextImage"
38
+ class="sm:block hidden"
39
+ :data="data"
40
+ />
41
+ <MixinFancybox
42
+ v-if="data.image"
43
+ :src="data.image.original"
44
+ :caption="data.image.caption"
45
+ :credit="data.image.credit"
46
+ :title="data.title"
47
+ >
48
+ <BaseImagePlaceholder
49
+ class="relative bg-black border border-black"
50
+ aspect-ratio="21:9"
51
+ >
52
+ <BaseImage
53
+ v-if="data.image.src"
54
+ :id="data.image.id"
55
+ :src="data.image.src.url"
56
+ :srcset="data.image.srcSet"
57
+ :alt="data.image.alt"
58
+ object-fit-class="scaleDown"
59
+ loading="eager"
60
+ />
61
+ </BaseImagePlaceholder>
62
+ </MixinFancybox>
63
+ <ImageDetailContextImage
64
+ v-if="data.contextImage"
65
+ class="sm:hidden block"
66
+ :data="data"
67
+ />
68
+ </div>
69
+ <LayoutHelper
70
+ indent="col-2"
71
+ class="lg:mb-24 mb-10"
72
+ >
73
+ <div class="lg:grid grid-cols-10">
74
+ <div
75
+ v-if="data.body"
76
+ class="col-span-7"
77
+ itemprop="description"
78
+ >
79
+ <BlockStreamfield
80
+ variant="fluid"
81
+ :data="data.body"
82
+ />
83
+ </div>
84
+ <aside class="col-start-9 col-end-11">
85
+ <div class="lg:pt-0 pt-8 mb-12">
86
+ <div class="lg:w-auto w-full">
87
+ <BaseButton
88
+ v-if="data.image && data.image.original"
89
+ :href="data.image.original"
90
+ class="w-full mb-5"
91
+ variant="primary"
92
+ compact
93
+ >Download JPG</BaseButton
94
+ >
95
+ </div>
96
+ <div class="lg:w-auto w-full">
97
+ <BaseButton
98
+ v-if="data.downloadUrl"
99
+ :href="data.downloadUrl"
100
+ class="w-full"
101
+ variant="secondary"
102
+ compact
103
+ >Download TIFF</BaseButton
104
+ >
105
+ </div>
106
+ </div>
107
+ <div
108
+ v-if="data.relatedMission && data.relatedMission.length"
109
+ class="lg:mb-16 mb-8"
110
+ >
111
+ <span class="font-secondary w-full text-base tracking-wider uppercase"> Mission </span>
112
+ <ul>
113
+ <li
114
+ v-for="(block, index) in data.relatedMission"
115
+ :key="index"
116
+ >
117
+ <div v-if="block.blockType == 'MissionLinkBlock'">
118
+ <template v-if="block.page || block.externalLink">
119
+ <BaseLink
120
+ v-if="block.externalLink === null"
121
+ variant="none"
122
+ link-class="font-primary text-jpl-red hover:text-jpl-red-light text-lg"
123
+ :to="block.page.url"
124
+ >{{ block.text }}
125
+ </BaseLink>
126
+ <BaseLink
127
+ v-else
128
+ variant="none"
129
+ link-class="font-primary text-jpl-red hover:text-jpl-red-light text-lg"
130
+ :href="block.externalLink"
131
+ external-target-blank
132
+ >
133
+ <span class="flex items-center">
134
+ <span class="mr-2">{{ block.text }}</span>
135
+ <IconExternal class="flex-shrink-0 text-sm" />
136
+ </span>
137
+ </BaseLink>
138
+ </template>
139
+ <span
140
+ v-else
141
+ class="text-lg"
142
+ >
143
+ {{ block.text }}
144
+ </span>
145
+ </div>
146
+ </li>
147
+ </ul>
148
+ </div>
149
+ <div
150
+ v-if="data.targets && data.targets.length"
151
+ class="lg:mb-16 mb-8"
152
+ >
153
+ <span class="font-secondary w-full text-base tracking-wider uppercase"> Target </span>
154
+ <ul>
155
+ <li
156
+ v-for="(item, index) in data.targets"
157
+ :key="index"
158
+ >
159
+ <BaseLink
160
+ variant="none"
161
+ link-class="font-primary text-jpl-red hover:text-jpl-red-light w-full py-3 text-lg"
162
+ :to="{
163
+ name: 'missions',
164
+ query: { mission_target: item.target }
165
+ }"
166
+ >
167
+ {{ item.target }}
168
+ </BaseLink>
169
+ </li>
170
+ </ul>
171
+ </div>
172
+ <div
173
+ v-if="data.spacecraft && data.spacecraft.length"
174
+ class="lg:mb-16 mb-8"
175
+ >
176
+ <span class="font-secondary w-full text-base tracking-wider uppercase">
177
+ Spacecraft
178
+ </span>
179
+ <ul>
180
+ <li
181
+ v-for="(item, index) in data.spacecraft"
182
+ :key="index"
183
+ >
184
+ <span class="w-full text-lg">
185
+ {{ item.spacecraft }}
186
+ </span>
187
+ </li>
188
+ </ul>
189
+ </div>
190
+ <div
191
+ v-if="data.instruments && data.instruments.length"
192
+ class="lg:mb-16 mb-8"
193
+ >
194
+ <span class="font-secondary w-full text-base tracking-wider uppercase">
195
+ Instrument
196
+ </span>
197
+ <ul>
198
+ <li
199
+ v-for="(item, index) in data.instruments"
200
+ :key="index"
201
+ class="instrument justify-content-center flex-column flex items-start w-full align-middle"
202
+ >
203
+ <span class="w-full text-lg">
204
+ {{ item.instrument }}
205
+ </span>
206
+ </li>
207
+ </ul>
208
+ </div>
209
+ <div
210
+ v-if="data.image.credit"
211
+ class="lg:mb-16 mb-8"
212
+ >
213
+ <span class="font-secondary w-full text-base tracking-wider uppercase"> Credit </span>
214
+ <BlockText :text="data.image.credit" />
215
+ </div>
216
+ </aside>
217
+ </div>
218
+ </LayoutHelper>
219
+ <LayoutHelper
220
+ v-if="
221
+ (data.keepExploringMission && data.keepExploringMission.length) ||
222
+ (data.keepExploringTarget && data.keepExploringTarget.length) ||
223
+ (data.keepExploringInstrument && data.keepExploringInstrument.length)
224
+ "
225
+ indent="col-2"
226
+ >
227
+ <h2
228
+ class="font-primary text-gray-dark lg:mb-5 lg:text-6xl mb-6 text-3xl font-semibold leading-normal tracking-normal uppercase"
229
+ >
230
+ Keep Exploring
231
+ </h2>
232
+ <ul class="TopicTabs flex flex-row flex-wrap justify-start pb-4 mb-5 list-none">
233
+ <li
234
+ v-if="
235
+ data.relatedMission &&
236
+ data.relatedMission.length &&
237
+ data.keepExploringMission &&
238
+ data.keepExploringMission.length
239
+ "
240
+ class="last:mr-0 sm:w-auto md:mr-16 w-full mr-10 text-center"
241
+ >
242
+ <button
243
+ class="text-subtitle block py-2 border-b-2 text-gray-mid-dark can-hover:hover:text-gray-dark"
244
+ :class="openTab === 1 ? 'border-jpl-red text-gray-dark' : 'border-white'"
245
+ :aria-expanded="openTab === 1 ? 'true' : 'false'"
246
+ active
247
+ @click="toggleTabs(1)"
248
+ >
249
+ {{ data.relatedMission[0].text }}
250
+ </button>
251
+ </li>
252
+ <li
253
+ v-if="
254
+ data.targets &&
255
+ data.targets.length &&
256
+ data.keepExploringTarget &&
257
+ data.keepExploringTarget.length
258
+ "
259
+ class="last:mr-0 sm:w-auto md:mr-16 w-full mr-10 text-center"
260
+ >
261
+ <button
262
+ class="text-subtitle block py-2 border-b-2 text-gray-mid-dark can-hover:hover:text-gray-dark"
263
+ :class="openTab === 2 ? 'border-jpl-red text-gray-dark' : 'border-white'"
264
+ :aria-expanded="openTab === 2 ? 'true' : 'false'"
265
+ @click="toggleTabs(2)"
266
+ >
267
+ {{ data.targets[0].target }}
268
+ </button>
269
+ </li>
270
+ <li
271
+ v-if="
272
+ data.instruments &&
273
+ data.instruments.length &&
274
+ data.keepExploringInstrument &&
275
+ data.keepExploringInstrument.length
276
+ "
277
+ class="last:mr-0 sm:w-auto md:mr-16 w-full mr-10 text-center"
278
+ >
279
+ <button
280
+ class="text-subtitle block py-2 border-b-2 text-gray-mid-dark can-hover:hover:text-gray-dark"
281
+ :class="openTab === 3 ? 'border-jpl-red text-gray-dark' : 'border-white'"
282
+ :aria-expanded="openTab === 3 ? 'true' : 'false'"
283
+ @click="toggleTabs(3)"
284
+ >
285
+ {{ data.instruments[0].instrument }}
286
+ </button>
287
+ </li>
288
+ </ul>
289
+ </LayoutHelper>
290
+ <keep-alive>
291
+ <template
292
+ v-if="openTab === 1 && data.keepExploringMission && data.keepExploringMission.length"
293
+ >
294
+ <ThumbnailCarousel
295
+ :key="openTab"
296
+ class="lg:mb-24 mb-12"
297
+ :aria-hidden="openTab === 1 ? 'false' : 'true'"
298
+ :slides="data.keepExploringMission"
299
+ />
300
+ </template>
301
+ <template
302
+ v-else-if="openTab === 2 && data.keepExploringTarget && data.keepExploringTarget.length"
303
+ >
304
+ <ThumbnailCarousel
305
+ :key="openTab"
306
+ class="lg:mb-24 mb-12"
307
+ :aria-hidden="openTab === 2 ? 'false' : 'true'"
308
+ :slides="data.keepExploringTarget"
309
+ />
310
+ </template>
311
+ <template
312
+ v-else-if="
313
+ openTab === 3 && data.keepExploringInstrument && data.keepExploringInstrument.length
314
+ "
315
+ >
316
+ <ThumbnailCarousel
317
+ :key="openTab"
318
+ class="lg:mb-24 mb-12"
319
+ :aria-hidden="openTab === 3 ? 'false' : 'true'"
320
+ :slides="data.keepExploringInstrument"
321
+ />
322
+ </template>
323
+ </keep-alive>
324
+ <div
325
+ v-if="data.relatedTopics && data.relatedTopics.length"
326
+ class="bg-gray-light lg:py-24 py-12"
327
+ >
328
+ <BlockLinkCarousel
329
+ item-type="tiles"
330
+ heading="Related Topics"
331
+ :items="data.relatedTopics"
332
+ />
333
+ </div>
334
+ </div>
335
+ </template>
336
+ <script lang="ts">
337
+ import { defineComponent } from 'vue'
338
+ import BaseButton from './../../components/BaseButton/BaseButton.vue'
339
+ import MixinFancybox from './../../components/MixinFancybox/MixinFancybox.vue'
340
+ import BaseImage from './../../components/BaseImage/BaseImage.vue'
341
+ import BaseImagePlaceholder from './../../components/BaseImagePlaceholder/BaseImagePlaceholder.vue'
342
+ import BaseLink from './../../components/BaseLink/BaseLink.vue'
343
+ import BlockLinkCarousel from './../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
344
+ import BlockStreamfield from './../../components/BlockStreamfield/BlockStreamfield.vue'
345
+ import BlockText from './../../components/BlockText/BlockText.vue'
346
+ import DetailHeadline from './../../components/DetailHeadline/DetailHeadline.vue'
347
+ import IconExternal from './../../components/Icons/IconExternal.vue'
348
+ import ImageDetailContextImage from './../../components/ImageDetailContextImage/ImageDetailContextImage.vue'
349
+ import LayoutHelper from './../../components/LayoutHelper/LayoutHelper.vue'
350
+ import ThumbnailCarousel from './../../components/ThumbnailCarousel/ThumbnailCarousel.vue'
351
+
352
+ export default defineComponent({
353
+ name: 'PageImageDetail',
354
+ components: {
355
+ BaseButton,
356
+ MixinFancybox,
357
+ BaseImage,
358
+ BaseImagePlaceholder,
359
+ BaseLink,
360
+ BlockLinkCarousel,
361
+ BlockStreamfield,
362
+ BlockText,
363
+ DetailHeadline,
364
+ IconExternal,
365
+ ImageDetailContextImage,
366
+ LayoutHelper,
367
+ ThumbnailCarousel
368
+ },
369
+ props: {
370
+ data: {
371
+ type: Object,
372
+ required: false
373
+ }
374
+ },
375
+ data() {
376
+ return {
377
+ openTab: 1 // for tabbed carousels
378
+ }
379
+ },
380
+ watch: {
381
+ // to make sure carousel init on headless preview
382
+ data() {
383
+ this.initExploreCarousels()
384
+ }
385
+ },
386
+ mounted() {
387
+ this.initExploreCarousels()
388
+ },
389
+ methods: {
390
+ initExploreCarousels() {
391
+ if (this.data) {
392
+ if (this.data.keepExploringMission && this.data.keepExploringMission.length) {
393
+ this.openTab = 1
394
+ } else if (this.data.keepExploringTarget && this.data.keepExploringTarget.length) {
395
+ this.openTab = 2
396
+ } else if (this.data.keepExploringInstrument && this.data.keepExploringInstrument.length) {
397
+ this.openTab = 3
398
+ }
399
+ }
400
+ },
401
+ toggleTabs(tabNumber: number) {
402
+ this.openTab = tabNumber
403
+ }
404
+ }
405
+ })
406
+ </script>
407
+
408
+ <style lang="scss">
409
+ .PageImageDetail {
410
+ .PageImageDetail-image-container {
411
+ .BaseImagePlaceholder {
412
+ @apply select-none;
413
+
414
+ min-height: 400px;
415
+
416
+ img {
417
+ -webkit-user-drag: none;
418
+ }
419
+ }
420
+ @screen sm {
421
+ &::before {
422
+ content: '';
423
+ @apply absolute inset-0;
424
+ }
425
+ }
426
+ }
427
+
428
+ .TopicTabs {
429
+ button {
430
+ @apply select-none;
431
+ }
432
+ }
433
+
434
+ aside {
435
+ .BaseButton {
436
+ max-width: 200px;
437
+ }
438
+
439
+ .BlockText {
440
+ @apply text-lg;
441
+ }
442
+ }
443
+ }
444
+ </style>
@@ -1,6 +1,6 @@
1
1
  import { HeroMediaData } from './../../components/HeroMedia/HeroMedia.stories'
2
2
  import { DetailHeadlineData } from './../../components/DetailHeadline/DetailHeadline.stories'
3
- import { BlockStreamfieldData } from './../../components/BlockStreamfield/BlockStreamfield.stories'
3
+ import { BlockStreamfieldTruncatedData } from './../../components/BlockStreamfield/BlockStreamfield.stories'
4
4
  import {
5
5
  BlockLinkCardCarouselData,
6
6
  BlockLinkTileCarouselData
@@ -21,6 +21,7 @@ export default {
21
21
  })
22
22
  ],
23
23
  parameters: {
24
+ layout: 'fullscreen',
24
25
  html: {
25
26
  root: '#storyDecorator'
26
27
  }
@@ -53,7 +54,7 @@ export const BaseStory = {
53
54
  blockType: 'HeroImageBlock'
54
55
  }
55
56
  ],
56
- ...BlockStreamfieldData,
57
+ ...BlockStreamfieldTruncatedData,
57
58
  releaseNumber: '2020-157',
58
59
  relatedLinks: [BlockRelatedLinksData.data],
59
60
  mediaContacts: [
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="data"
4
- class="ThemeLight"
4
+ class="ThemeVariantLight"
5
5
  :class="computedClass"
6
6
  itemscope
7
7
  itemtype="http://schema.org/Article"
@@ -0,0 +1,84 @@
1
+ import { BlockLinkTileCarouselData } from './../../components/BlockLinkCarousel/BlockLinkCarousel.stories'
2
+ import PageVideoDetail from './PageVideoDetail.vue'
3
+
4
+ export default {
5
+ title: 'Templates/PageVideoDetail',
6
+ component: PageVideoDetail,
7
+ tags: ['!autodocs'],
8
+ excludeStories: /.*Data$/,
9
+ parameters: {
10
+ layout: 'fullscreen'
11
+ }
12
+ }
13
+
14
+ // stories
15
+ export const BaseStory = {
16
+ name: 'PageVideoDetail',
17
+ args: {
18
+ data: {
19
+ block: [],
20
+ body: 'How Earth satellites including the JPL-managed Topex/Poseidon are helping researchers track the movements and behaviors of sea lions and seals to keep them from extinction.',
21
+ firstPublishedAt: '2001-12-03T08:00:00+00:00',
22
+ id: '6723',
23
+ label: 'Video',
24
+ publicationDate: '2001-12-03',
25
+ seoDescription: null,
26
+ seoTitle: 'Seals, Sea Lions, and Satellites',
27
+ slug: 'seals-sea-lions-and-satellites',
28
+ summary:
29
+ 'How Earth satellites including the JPL-managed Topex/Poseidon are helping researchers track the movements and behaviors of sea lions and seals to keep them from extinction.',
30
+ thumbnailImage: {
31
+ alt: 'Seals, Sea Lions, and Satellites',
32
+ id: '7844',
33
+ original: '/public/images/bg-earth-1440x810.jpg'
34
+ },
35
+ title: 'Seals, Sea Lions, and Satellites',
36
+ topicLabel: 'Earth',
37
+ transcript: `<p>Preparing to Land Perseverance</p>
38
+ <p>The following tests, conducted from 2017-2020, helped prepare NASA's Perseverance rover for its landing on Mars.</p>
39
+ <p>[music]</p>
40
+ <p>Centrifuge Spin Test</p>
41
+ <p>Santa Clarita, CA June 2019</p>
42
+ <p>[music]</p>
43
+ <p>Parachute Firing Test</p>
44
+ <p>Moses Lake, WA May 2019</p>
45
+ <p>[music]</p>
46
+ <p>[mortar firing]</p>
47
+ <p>[mortar firing]</p>
48
+ <p>[clapping]</p>
49
+ <p>Parachute Wind Tunnel Test</p>
50
+ <p>NASA's Ames Research Center </p>
51
+ <p>Moffett Field, CA June 2017</p>
52
+ <p>[music]</p>
53
+ <p>[mortar firing]</p>
54
+ <p>[wind]</p>
55
+ <p>[clapping]</p>
56
+ <p>Lander Vision System Test</p>
57
+ <p>For Avoiding Landing Hazards</p>
58
+ <p>Death Valley, CA May 2019</p>
59
+ <p>[helicopter taking off]</p>
60
+ <p>[music]</p>
61
+ <p>Rover Wheel Drop Test</p>
62
+ <p>NASA's Jet Propulsion Laboratory</p>
63
+ <p>Southern CA August 2019</p>
64
+ <p>[wheel dropping]</p>
65
+ <p>[hitting rock]</p>`,
66
+ uploadedMedia: {
67
+ duration: '122',
68
+ file: '/videos/NASA-Mars-Helicopter-IngenuityAnimations-7sec.mp4',
69
+ fileExtension: 'm4v',
70
+ fileWebm: '/videos/NASA-Mars-Helicopter-IngenuityAnimations-7sec.webm',
71
+ height: null,
72
+ id: '1',
73
+ sources:
74
+ "[{'src': '/videos/NASA-Mars-Helicopter-IngenuityAnimations-7sec.mp4', 'type': 'application/octet-stream'}, {'src': '/videos/NASA-Mars-Helicopter-IngenuityAnimations-7sec.webm', 'type': 'video/webm'}]",
75
+ title: 'Seals, Sea Lions, and Satellites',
76
+ type: '',
77
+ width: null
78
+ },
79
+ url: '/videos/seals-sea-lions-and-satellites/',
80
+ urlPath: '/home/videos/seals-sea-lions-and-satellites/',
81
+ relatedPages: BlockLinkTileCarouselData
82
+ }
83
+ }
84
+ }