@explorer-1/vue 0.0.0

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 (371) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/components.d.ts +215 -0
  4. package/index.html +18 -0
  5. package/lib/main.ts +78 -0
  6. package/package.json +54 -0
  7. package/postcss.config.js +7 -0
  8. package/public/edu/.gitkeep +0 -0
  9. package/public/edu/explorer-1/bg-stars-edu.png +0 -0
  10. package/public/edu/explorer-1/bg-stars.jpg +0 -0
  11. package/public/explorer-1/bg-stars-edu.png +0 -0
  12. package/public/explorer-1/bg-stars.jpg +0 -0
  13. package/src/App.vue +30 -0
  14. package/src/assets/fonts/README.md +12 -0
  15. package/src/assets/fonts/archivo-narrow/ArchivoNarrow-Bold.woff2 +0 -0
  16. package/src/assets/fonts/archivo-narrow/ArchivoNarrow-BoldItalic.woff2 +0 -0
  17. package/src/assets/fonts/archivo-narrow/ArchivoNarrow-SemiBold.woff2 +0 -0
  18. package/src/assets/fonts/archivo-narrow/ArchivoNarrow-SemiBoldItalic.woff2 +0 -0
  19. package/src/assets/fonts/metropolis/Metropolis-Bold.woff2 +0 -0
  20. package/src/assets/fonts/metropolis/Metropolis-BoldItalic.woff2 +0 -0
  21. package/src/assets/fonts/metropolis/Metropolis-ExtraBold.woff2 +0 -0
  22. package/src/assets/fonts/metropolis/Metropolis-Medium.woff2 +0 -0
  23. package/src/assets/fonts/metropolis/Metropolis-MediumItalic.woff2 +0 -0
  24. package/src/assets/fonts/metropolis/Metropolis-Regular.woff2 +0 -0
  25. package/src/assets/fonts/metropolis/Metropolis-RegularItalic.woff2 +0 -0
  26. package/src/assets/fonts/metropolis/Metropolis-SemiBold.woff2 +0 -0
  27. package/src/assets/fonts/metropolis/Metropolis-SemiBoldItalic.woff2 +0 -0
  28. package/src/assets/scss/styles.scss +1 -0
  29. package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.stories.js +156 -0
  30. package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.vue +156 -0
  31. package/src/components/BackToTop/BackToTop.stories.js +24 -0
  32. package/src/components/BackToTop/BackToTop.vue +76 -0
  33. package/src/components/BaseAudio/BaseAudio.stories.js +29 -0
  34. package/src/components/BaseAudio/BaseAudio.vue +359 -0
  35. package/src/components/BaseButton/BaseButton.stories.ts +65 -0
  36. package/src/components/BaseButton/BaseButton.vue +114 -0
  37. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.stories.mdx +68 -0
  38. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.vue +101 -0
  39. package/src/components/BaseHeading/BaseHeading.stories.js +75 -0
  40. package/src/components/BaseHeading/BaseHeading.vue +58 -0
  41. package/src/components/BaseImage/BaseImage.stories.ts +52 -0
  42. package/src/components/BaseImage/BaseImage.vue +120 -0
  43. package/src/components/BaseImageCaption/BaseImageCaption.stories.js +27 -0
  44. package/src/components/BaseImageCaption/BaseImageCaption.vue +51 -0
  45. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.stories.js +73 -0
  46. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.vue +90 -0
  47. package/src/components/BaseLightboxCloseButton/BaseLightboxCloseButton.vue +45 -0
  48. package/src/components/BaseLightboxOpenButton/BaseLightboxOpenButton.vue +46 -0
  49. package/src/components/BaseLink/BaseLink.stories.js +47 -0
  50. package/src/components/BaseLink/BaseLink.vue +227 -0
  51. package/src/components/BaseModal/BaseModal.stories.js +90 -0
  52. package/src/components/BaseModal/BaseModal.vue +54 -0
  53. package/src/components/BaseModal/BaseModalDialog.vue +59 -0
  54. package/src/components/BasePlaceholder/BasePlaceholder.stories.js +29 -0
  55. package/src/components/BasePlaceholder/BasePlaceholder.vue +30 -0
  56. package/src/components/BaseRadioGroup/BaseRadioGroup.stories.mdx +68 -0
  57. package/src/components/BaseRadioGroup/BaseRadioGroup.vue +102 -0
  58. package/src/components/BaseSwimlane/BaseSwimlane.stories.mdx +64 -0
  59. package/src/components/BaseSwimlane/BaseSwimlane.vue +204 -0
  60. package/src/components/BaseTag/BaseTag.stories.js +34 -0
  61. package/src/components/BaseTag/BaseTag.vue +36 -0
  62. package/src/components/BaseTimer/BaseTimer.stories.js +78 -0
  63. package/src/components/BaseTimer/BaseTimer.test.js +15 -0
  64. package/src/components/BaseTimer/BaseTimer.vue +270 -0
  65. package/src/components/BaseUnitToggle/BaseUnitToggle.stories.js +86 -0
  66. package/src/components/BaseUnitToggle/BaseUnitToggle.test.js +26 -0
  67. package/src/components/BaseUnitToggle/BaseUnitToggle.vue +255 -0
  68. package/src/components/BaseVideo/BaseVideo.stories.js +31 -0
  69. package/src/components/BaseVideo/BaseVideo.vue +73 -0
  70. package/src/components/BlockAnchor/BlockAnchor.vue +38 -0
  71. package/src/components/BlockAudio/BlockAudio.stories.js +29 -0
  72. package/src/components/BlockAudio/BlockAudio.vue +78 -0
  73. package/src/components/BlockCard/BlockCard.stories.js +24 -0
  74. package/src/components/BlockCard/BlockCard.vue +88 -0
  75. package/src/components/BlockCardGroup/BlockCardGroup.stories.js +71 -0
  76. package/src/components/BlockCardGroup/BlockCardGroup.vue +61 -0
  77. package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +55 -0
  78. package/src/components/BlockCircleImageCard/BlockCircleImageCard.vue +120 -0
  79. package/src/components/BlockCta/BlockCta.stories.js +35 -0
  80. package/src/components/BlockCta/BlockCta.vue +55 -0
  81. package/src/components/BlockHeading/BlockHeading.stories.js +22 -0
  82. package/src/components/BlockHeading/BlockHeading.vue +27 -0
  83. package/src/components/BlockIframeEmbed/BlockIframeEmbed.stories.js +40 -0
  84. package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +84 -0
  85. package/src/components/BlockImage/BlockImage.stories.js +137 -0
  86. package/src/components/BlockImage/BlockImage.vue +48 -0
  87. package/src/components/BlockImage/BlockImageFullBleed.vue +119 -0
  88. package/src/components/BlockImage/BlockImageStandard.vue +106 -0
  89. package/src/components/BlockImageCarousel/BlockImageCarousel.stories.js +108 -0
  90. package/src/components/BlockImageCarousel/BlockImageCarousel.vue +201 -0
  91. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.stories.js +63 -0
  92. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +120 -0
  93. package/src/components/BlockImageComparison/BlockImageComparison.stories.js +46 -0
  94. package/src/components/BlockImageComparison/BlockImageComparison.vue +59 -0
  95. package/src/components/BlockImageGallery/BlockImageGallery.stories.js +55 -0
  96. package/src/components/BlockImageGallery/BlockImageGallery.vue +128 -0
  97. package/src/components/BlockInlineImage/BlockInlineImage.stories.js +68 -0
  98. package/src/components/BlockInlineImage/BlockInlineImage.vue +124 -0
  99. package/src/components/BlockKeyPoints/BlockKeyPoints.stories.js +28 -0
  100. package/src/components/BlockKeyPoints/BlockKeyPoints.vue +48 -0
  101. package/src/components/BlockLinkCard/BlockLinkCard.stories.js +102 -0
  102. package/src/components/BlockLinkCard/BlockLinkCard.vue +197 -0
  103. package/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.js +217 -0
  104. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +68 -0
  105. package/src/components/BlockLinkTile/BlockLinkTile.stories.js +72 -0
  106. package/src/components/BlockLinkTile/BlockLinkTile.vue +193 -0
  107. package/src/components/BlockListCards/BlockListCards.stories.js +69 -0
  108. package/src/components/BlockListCards/BlockListCards.vue +129 -0
  109. package/src/components/BlockQuote/BlockQuote.stories.js +84 -0
  110. package/src/components/BlockQuote/BlockQuote.vue +87 -0
  111. package/src/components/BlockRelatedLinks/BlockRelatedLinks.stories.js +60 -0
  112. package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +77 -0
  113. package/src/components/BlockRelatedLinks/RelatedLink.vue +85 -0
  114. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +88 -0
  115. package/src/components/BlockStreamfield/BlockStreamfield.vue +333 -0
  116. package/src/components/BlockTable/BlockTable.stories.js +20 -0
  117. package/src/components/BlockTable/BlockTable.vue +73 -0
  118. package/src/components/BlockTeaser/BlockTeaser.stories.js +74 -0
  119. package/src/components/BlockTeaser/BlockTeaser.test.js +12 -0
  120. package/src/components/BlockTeaser/BlockTeaser.vue +174 -0
  121. package/src/components/BlockText/BlockText.stories.js +21 -0
  122. package/src/components/BlockText/BlockText.vue +44 -0
  123. package/src/components/BlockTwitterEmbed/BlockTwitterEmbed.stories.js +19 -0
  124. package/src/components/BlockTwitterEmbed/BlockTwitterEmbed.vue +61 -0
  125. package/src/components/BlockVideo/BlockVideo.stories.js +23 -0
  126. package/src/components/BlockVideo/BlockVideo.vue +41 -0
  127. package/src/components/BlockVideoEmbed/BlockVideoEmbed.stories.js +20 -0
  128. package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +71 -0
  129. package/src/components/CalendarButton/CalendarButton.stories.js +36 -0
  130. package/src/components/CalendarButton/CalendarButton.vue +86 -0
  131. package/src/components/DetailHeadline/DetailHeadline.stories.js +48 -0
  132. package/src/components/DetailHeadline/DetailHeadline.vue +143 -0
  133. package/src/components/DsnWidget/DsnWidget.stories.js +29 -0
  134. package/src/components/DsnWidget/DsnWidget.vue +96 -0
  135. package/src/components/EventCard/EventCard.vue +188 -0
  136. package/src/components/EventDetailHero/EventDetailHero.stories.js +53 -0
  137. package/src/components/EventDetailHero/EventDetailHero.vue +64 -0
  138. package/src/components/FormContact/FormContact.stories.js +16 -0
  139. package/src/components/FormContact/FormContact.vue +202 -0
  140. package/src/components/FormNewsletterSignup/FormNewsletterSignup.stories.js +16 -0
  141. package/src/components/FormNewsletterSignup/FormNewsletterSignup.vue +355 -0
  142. package/src/components/HeroLarge/HeroLarge.stories.js +46 -0
  143. package/src/components/HeroLarge/HeroLarge.vue +93 -0
  144. package/src/components/HeroListingIndex/HeroListingIndex.stories.js +156 -0
  145. package/src/components/HeroListingIndex/HeroListingIndex.vue +80 -0
  146. package/src/components/HeroMedia/HeroMedia.stories.js +135 -0
  147. package/src/components/HeroMedia/HeroMedia.vue +174 -0
  148. package/src/components/HeroMedium/HeroMedium.stories.js +73 -0
  149. package/src/components/HeroMedium/HeroMedium.vue +166 -0
  150. package/src/components/HomepageCarousel/HomepageCarousel.stories.js +112 -0
  151. package/src/components/HomepageCarousel/HomepageCarousel.vue +382 -0
  152. package/src/components/HomepageCarouselItem/HomepageCarouselItem.stories.js +60 -0
  153. package/src/components/HomepageCarouselItem/HomepageCarouselItem.vue +168 -0
  154. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.js +35 -0
  155. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.vue +39 -0
  156. package/src/components/HomepageFeaturedRobot/HomepageFeaturedRobot.stories.js +93 -0
  157. package/src/components/HomepageFeaturedRobot/HomepageFeaturedRobot.vue +129 -0
  158. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.js +153 -0
  159. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue +282 -0
  160. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarouselItem.vue +143 -0
  161. package/src/components/HomepageStats/HomepageStats.stories.js +155 -0
  162. package/src/components/HomepageStats/HomepageStats.vue +362 -0
  163. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.js +90 -0
  164. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue +156 -0
  165. package/src/components/HomepageTeaserBlock/HomepageTeaserBlockCardImage.vue +58 -0
  166. package/src/components/Icons/Icon360.vue +29 -0
  167. package/src/components/Icons/IconArrow.vue +26 -0
  168. package/src/components/Icons/IconArrows.vue +43 -0
  169. package/src/components/Icons/IconAudio.vue +27 -0
  170. package/src/components/Icons/IconBook.vue +21 -0
  171. package/src/components/Icons/IconBookUser.vue +21 -0
  172. package/src/components/Icons/IconBriefcase.vue +21 -0
  173. package/src/components/Icons/IconCalendar.vue +25 -0
  174. package/src/components/Icons/IconCaret.vue +26 -0
  175. package/src/components/Icons/IconCheckbox.vue +26 -0
  176. package/src/components/Icons/IconCheckboxSelected.vue +35 -0
  177. package/src/components/Icons/IconClose.vue +27 -0
  178. package/src/components/Icons/IconCloseLightbox.vue +25 -0
  179. package/src/components/Icons/IconDownload.vue +31 -0
  180. package/src/components/Icons/IconDropdown.vue +25 -0
  181. package/src/components/Icons/IconEnvelope.vue +21 -0
  182. package/src/components/Icons/IconExpand.vue +28 -0
  183. package/src/components/Icons/IconExternal.vue +25 -0
  184. package/src/components/Icons/IconFilter.vue +25 -0
  185. package/src/components/Icons/IconForwardTen.vue +38 -0
  186. package/src/components/Icons/IconGrid.vue +25 -0
  187. package/src/components/Icons/IconHand.vue +21 -0
  188. package/src/components/Icons/IconInfo.vue +26 -0
  189. package/src/components/Icons/IconLink.vue +27 -0
  190. package/src/components/Icons/IconList.vue +25 -0
  191. package/src/components/Icons/IconLocation.vue +37 -0
  192. package/src/components/Icons/IconMagnifyingGlass.vue +21 -0
  193. package/src/components/Icons/IconMedal.vue +21 -0
  194. package/src/components/Icons/IconMenu.vue +27 -0
  195. package/src/components/Icons/IconMinus.vue +26 -0
  196. package/src/components/Icons/IconMute.vue +27 -0
  197. package/src/components/Icons/IconNext.vue +25 -0
  198. package/src/components/Icons/IconPause.vue +28 -0
  199. package/src/components/Icons/IconPlay.vue +28 -0
  200. package/src/components/Icons/IconPlus.vue +25 -0
  201. package/src/components/Icons/IconPrev.vue +25 -0
  202. package/src/components/Icons/IconRewindTen.vue +42 -0
  203. package/src/components/Icons/IconSearch.vue +25 -0
  204. package/src/components/Icons/IconShare.vue +30 -0
  205. package/src/components/Icons/IconSlideshow.vue +30 -0
  206. package/src/components/Icons/IconSocialEmail.vue +26 -0
  207. package/src/components/Icons/IconSocialFacebook.vue +26 -0
  208. package/src/components/Icons/IconSocialGoogleClassroom.vue +26 -0
  209. package/src/components/Icons/IconSocialInstagram.vue +35 -0
  210. package/src/components/Icons/IconSocialPinterest.vue +26 -0
  211. package/src/components/Icons/IconSocialReddit.vue +25 -0
  212. package/src/components/Icons/IconSocialTwitter.vue +25 -0
  213. package/src/components/Icons/IconSocialYoutube.vue +35 -0
  214. package/src/components/Icons/IconStop.vue +27 -0
  215. package/src/components/Icons/IconTime.vue +25 -0
  216. package/src/components/Icons/IconUniversity.vue +21 -0
  217. package/src/components/Icons/IconUser.vue +26 -0
  218. package/src/components/Icons/IconVolume.vue +27 -0
  219. package/src/components/Icons/Icons.stories.ts +440 -0
  220. package/src/components/ImageDetailContextImage/ImageDetailContextImage.vue +125 -0
  221. package/src/components/LayoutHelper/LayoutHelper.vue +38 -0
  222. package/src/components/LoadingTransition/LoadingTransition.vue +48 -0
  223. package/src/components/LogoCaltech/LogoCaltech.stories.js +39 -0
  224. package/src/components/LogoCaltech/LogoCaltech.vue +29 -0
  225. package/src/components/LogoTribrand/LogoTribrand.stories.js +76 -0
  226. package/src/components/LogoTribrand/LogoTribrand.vue +93 -0
  227. package/src/components/MissionDetailAbout/MissionDetailAbout.stories.js +70 -0
  228. package/src/components/MissionDetailAbout/MissionDetailAbout.vue +204 -0
  229. package/src/components/MissionDetailHero/MissionDetailHero.stories.js +303 -0
  230. package/src/components/MissionDetailHero/MissionDetailHero.vue +292 -0
  231. package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +278 -0
  232. package/src/components/MissionDetailHighlights/MissionDetailHighlights.vue +332 -0
  233. package/src/components/MissionDetailHighlights/MissionDetailHighlightsCarousel.vue +160 -0
  234. package/src/components/MissionDetailHighlights/MissionDetailHighlightsCarouselItem.vue +123 -0
  235. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.stories.js +43 -0
  236. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.vue +97 -0
  237. package/src/components/MissionDetailStats/DistanceStats.test.js +133 -0
  238. package/src/components/MissionDetailStats/DistanceStats.vue +250 -0
  239. package/src/components/MissionDetailStats/MissionDetailStats.stories.js +95 -0
  240. package/src/components/MissionDetailStats/MissionDetailStats.test.js +23 -0
  241. package/src/components/MissionDetailStats/MissionDetailStats.vue +187 -0
  242. package/src/components/MissionDetailStats/MissionDetailStatsMicro.vue +52 -0
  243. package/src/components/MissionDetailStats/MissionDetailStatsMini.vue +109 -0
  244. package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.stories.js +55 -0
  245. package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.vue +95 -0
  246. package/src/components/MixinAnimationCaret/MixinAnimationCaret.stories.ts +24 -0
  247. package/src/components/MixinAnimationCaret/MixinAnimationCaret.vue +81 -0
  248. package/src/components/MixinCarousel/MixinCarousel.docs.mdx +33 -0
  249. package/src/components/MixinCarousel/MixinCarousel.stories.js +53 -0
  250. package/src/components/MixinCarousel/MixinCarousel.vue +236 -0
  251. package/src/components/MixinDropdownToggle/MixinDropdownToggle.vue +53 -0
  252. package/src/components/MixinFancybox/MixinFancybox.vue +405 -0
  253. package/src/components/MixinFancybox/MixinFancyboxOpenButton.vue +35 -0
  254. package/src/components/MixinVideoBg/MixinVideoBg.stories.js +23 -0
  255. package/src/components/MixinVideoBg/MixinVideoBg.vue +39 -0
  256. package/src/components/NavDesktop/NavDesktop.stories.js +254 -0
  257. package/src/components/NavDesktop/NavDesktop.vue +355 -0
  258. package/src/components/NavDesktop/NavDesktopDropdown.vue +201 -0
  259. package/src/components/NavDesktop/NavDesktopDropdownContent.vue +87 -0
  260. package/src/components/NavDesktop/NavDesktopDropdownMore.vue +112 -0
  261. package/src/components/NavDesktop/NavDesktopTopHat.vue +56 -0
  262. package/src/components/NavHeading/NavHeading.stories.js +23 -0
  263. package/src/components/NavHeading/NavHeading.vue +40 -0
  264. package/src/components/NavHighlight/NavHighlight.stories.js +42 -0
  265. package/src/components/NavHighlight/NavHighlight.vue +67 -0
  266. package/src/components/NavLinkList/NavLinkList.stories.js +46 -0
  267. package/src/components/NavLinkList/NavLinkList.vue +66 -0
  268. package/src/components/NavLogoLinks/NavLogoLinks.stories.js +22 -0
  269. package/src/components/NavLogoLinks/NavLogoLinks.vue +57 -0
  270. package/src/components/NavMobile/NavMobile.stories.js +231 -0
  271. package/src/components/NavMobile/NavMobile.vue +280 -0
  272. package/src/components/NavMobile/NavMobileDropdown.vue +175 -0
  273. package/src/components/NavMobile/NavMobileLink.vue +69 -0
  274. package/src/components/NavMobile/NavMobileSecondaryDropdown.vue +124 -0
  275. package/src/components/NavSearchForm/NavSearchForm.stories.js +13 -0
  276. package/src/components/NavSearchForm/NavSearchForm.vue +102 -0
  277. package/src/components/NavSecondary/NavSecondary.stories.js +24 -0
  278. package/src/components/NavSecondary/NavSecondary.vue +191 -0
  279. package/src/components/NavSecondary/NavSecondaryDropdown.vue +181 -0
  280. package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +140 -0
  281. package/src/components/NavSecondary/NavSecondaryLink.vue +62 -0
  282. package/src/components/NavSocial/NavSocial.stories.js +20 -0
  283. package/src/components/NavSocial/NavSocial.vue +97 -0
  284. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.stories.js +60 -0
  285. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.test.js +30 -0
  286. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.vue +73 -0
  287. package/src/components/ParallaxContainer/ParallaxContainer.stories.js +47 -0
  288. package/src/components/ParallaxContainer/ParallaxContainer.vue +76 -0
  289. package/src/components/ParallaxElement/ParallaxElement.vue +25 -0
  290. package/src/components/PastEventsCarousel/PastEventsCarousel.vue +86 -0
  291. package/src/components/PodcastEpisodeCard/PodcastEpisodeCard.vue +251 -0
  292. package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.stories.js +235 -0
  293. package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.vue +171 -0
  294. package/src/components/ProfileDetailSectionGroup/ProfileDetailSectionGroup.vue +84 -0
  295. package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +97 -0
  296. package/src/components/RoboticsDetailStats/RoboticsDetailStats.test.js +21 -0
  297. package/src/components/RoboticsDetailStats/RoboticsDetailStats.vue +217 -0
  298. package/src/components/RoboticsDetailStats/RoboticsDetailStatsMini.vue +182 -0
  299. package/src/components/SearchFilterGroup/SearchFilterGroup.stories.js +59 -0
  300. package/src/components/SearchFilterGroup/SearchFilterGroup.vue +221 -0
  301. package/src/components/SearchInput/SearchInput.stories.js +35 -0
  302. package/src/components/SearchInput/SearchInput.vue +93 -0
  303. package/src/components/SearchPagination/SearchPagination.stories.js +55 -0
  304. package/src/components/SearchPagination/SearchPagination.vue +173 -0
  305. package/src/components/SearchResultCard/SearchResultCard.stories.js +57 -0
  306. package/src/components/SearchResultCard/SearchResultCard.vue +282 -0
  307. package/src/components/SearchResultGridItem/SearchResultGridItem.stories.js +70 -0
  308. package/src/components/SearchResultGridItem/SearchResultGridItem.vue +140 -0
  309. package/src/components/SearchResultsList/SearchResultsList.vue +183 -0
  310. package/src/components/SearchSelectMenu/SearchSelectMenu.stories.js +25 -0
  311. package/src/components/SearchSelectMenu/SearchSelectMenu.vue +86 -0
  312. package/src/components/ShareButtons/ShareButtons.stories.js +16 -0
  313. package/src/components/ShareButtons/ShareButtons.vue +132 -0
  314. package/src/components/ShareButtonsEdu/ShareButtonsEdu.stories.js +14 -0
  315. package/src/components/ShareButtonsEdu/ShareButtonsEdu.vue +215 -0
  316. package/src/components/SkipLink/SkipLink.stories.js +9 -0
  317. package/src/components/SkipLink/SkipLink.vue +53 -0
  318. package/src/components/SwimlaneCTA/SwimlaneCTA.stories.mdx +77 -0
  319. package/src/components/SwimlaneCTA/SwimlaneCTA.vue +281 -0
  320. package/src/components/TheFooter/TheFooter.stories.js +602 -0
  321. package/src/components/TheFooter/TheFooter.vue +228 -0
  322. package/src/components/TheFooter/TheFooterSignUp.vue +61 -0
  323. package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +106 -0
  324. package/src/components/ThumbnailCarousel/ThumbnailCarousel.vue +76 -0
  325. package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.stories.js +93 -0
  326. package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.vue +68 -0
  327. package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.stories.js +38 -0
  328. package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.vue +104 -0
  329. package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.js +84 -0
  330. package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.vue +112 -0
  331. package/src/components/TopicDetailMore/TopicDetailMore.stories.js +221 -0
  332. package/src/components/TopicDetailMore/TopicDetailMore.vue +124 -0
  333. package/src/components/TopicDetailMore/TopicDetailMoreVisibility.vue +51 -0
  334. package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.stories.js +116 -0
  335. package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.vue +130 -0
  336. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.js +34 -0
  337. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.vue +98 -0
  338. package/src/components/YearTicker/YearTicker.stories.js +37 -0
  339. package/src/components/YearTicker/YearTicker.vue +132 -0
  340. package/src/docs/foundation/DynamicTokens.vue +106 -0
  341. package/src/docs/foundation/FontVariants.vue +80 -0
  342. package/src/docs/foundation/color.docs.mdx +112 -0
  343. package/src/docs/foundation/grid.docs.mdx +189 -0
  344. package/src/docs/foundation/grid.stories.js +263 -0
  345. package/src/docs/foundation/grid_layouthelpers.docs.mdx +78 -0
  346. package/src/docs/foundation/grid_layouthelpers.stories.js +53 -0
  347. package/src/docs/foundation/themes.docs.mdx +71 -0
  348. package/src/docs/foundation/themes.stories.js +63 -0
  349. package/src/docs/foundation/typography.docs.mdx +50 -0
  350. package/src/docs/foundation/typography.stories.js +119 -0
  351. package/src/interfaces.ts +129 -0
  352. package/src/main.ts +34 -0
  353. package/src/store/header.ts +40 -0
  354. package/src/store/theme.ts +27 -0
  355. package/src/templates/PageContent/PageContent.stories.js +92 -0
  356. package/src/templates/PageContent/PageContent.vue +140 -0
  357. package/src/templates/PageEventDetail/PageEventDetail.stories.js +104 -0
  358. package/src/templates/PageEventDetail/PageEventDetail.vue +358 -0
  359. package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +158 -0
  360. package/src/templates/PageNewsDetail/PageNewsDetail.vue +242 -0
  361. package/src/templates/edu/PageEduNewsDetail.stories.js +64 -0
  362. package/src/templates/edu/PageEduNewsDetail.vue +155 -0
  363. package/src/templates/www/HomePage/HomePage.vue +30 -0
  364. package/src/utils/dayjs.js +32 -0
  365. package/src/utils/filters.js +33 -0
  366. package/src/utils/mixins.ts +353 -0
  367. package/src/vite-env.d.ts +1 -0
  368. package/tailwind.config.js +24 -0
  369. package/tsconfig.json +29 -0
  370. package/tsconfig.node.json +11 -0
  371. package/vite.config.ts +55 -0
@@ -0,0 +1,92 @@
1
+ import { BlockHeadingData } from './../../components/BlockHeading/BlockHeading.stories'
2
+ import { BlockKeyPointsData } from './../../components/BlockKeyPoints/BlockKeyPoints.stories'
3
+ import { BlockImageComparisonData } from './../../components/BlockImageComparison/BlockImageComparison.stories'
4
+ import { BlockIframeEmbedData } from './../../components/BlockIframeEmbed/BlockIframeEmbed.stories'
5
+ import { HeroMediaData } from './../../components/HeroMedia/HeroMedia.stories'
6
+ import { BlockRelatedLinksData } from './../../components/BlockRelatedLinks/BlockRelatedLinks.stories.js'
7
+ import { BlockLinkCardCarouselData } from './../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
8
+ import { NavSecondaryData } from './../../components/NavSecondary/NavSecondary.stories.js'
9
+
10
+ import PageContent from './PageContent.vue'
11
+
12
+ export default {
13
+ title: 'Templates/PageContent',
14
+ component: PageContent,
15
+ decorators: [
16
+ () => ({
17
+ template: `<div id="storyDecorator" class="absolute inset-0 disable-nav-offset"><story/></div>`
18
+ })
19
+ ],
20
+ parameters: {
21
+ html: {
22
+ root: '#storyDecorator'
23
+ },
24
+ viewMode: 'canvas'
25
+ },
26
+ excludeStories: /.*(Data)$/
27
+ }
28
+
29
+ // data
30
+ export const ContentPageData = {
31
+ url: '/slug',
32
+ breadcrumb: NavSecondaryData.breadcrumb,
33
+ title: 'Make a Paper Mars Helicopter',
34
+ displayLabel: 'Classroom Activity',
35
+ heroPosition: 'inline',
36
+ heroImage: HeroMediaData.image,
37
+ heroImageInline: HeroMediaData.imageInline,
38
+ body: [
39
+ BlockKeyPointsData,
40
+ BlockHeadingData,
41
+ {
42
+ blockType: 'RichTextBlock',
43
+ value:
44
+ '<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'
45
+ },
46
+ BlockImageComparisonData,
47
+ BlockHeadingData,
48
+ {
49
+ blockType: 'RichTextBlock',
50
+ value:
51
+ '<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'
52
+ },
53
+ BlockIframeEmbedData
54
+ ],
55
+ relatedLinks: [BlockRelatedLinksData.data],
56
+ relatedContentHeading: 'Related Activities',
57
+ relatedContent: [
58
+ // external link card, no image
59
+ {
60
+ label: 'Explore NASA',
61
+ thumbnailImage: null,
62
+ title: 'NASA website',
63
+ externalLink: 'https://www.nasa.gov'
64
+ },
65
+
66
+ // via page chooser
67
+ {
68
+ page: {
69
+ label: 'Mission',
70
+ thumbnailImage: {
71
+ src: {
72
+ url: 'https://picsum.photos/512/288',
73
+ width: 512,
74
+ height: 288
75
+ }
76
+ },
77
+ title: 'GRACE-FO',
78
+ url: '/mission/placeholder'
79
+ }
80
+ },
81
+ ...BlockLinkCardCarouselData
82
+ ],
83
+ clearanceNumber: 'CL#12345'
84
+ }
85
+
86
+ // stories
87
+ export const Template = {
88
+ name: 'PageContent',
89
+ args: {
90
+ data: ContentPageData
91
+ }
92
+ }
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="ThemeVariantLight"
5
+ :class="{ '-nav-offset': !heroInline && data.heroImage }"
6
+ >
7
+ <!-- hero image -->
8
+ <HeroMedia
9
+ v-if="data.heroImage && !heroInline"
10
+ class="md:mb-0 mb-10"
11
+ :image="data.heroImage"
12
+ :caption="data.heroImageCaption"
13
+ :display-caption="!data.heroImageCaption ? false : true"
14
+ :constrain="data.heroConstrain"
15
+ />
16
+
17
+ <!-- secondary nav -->
18
+ <NavSecondary
19
+ :breadcrumb="data.breadcrumb"
20
+ :has-intro="data.heroImage && !heroInline ? true : false"
21
+ />
22
+
23
+ <!-- page headline -->
24
+ <LayoutHelper
25
+ indent="col-2"
26
+ :class="h1LayoutHelperClasses"
27
+ >
28
+ <DetailHeadline
29
+ :title="data.title"
30
+ :label="data.displayLabel"
31
+ :class="{ 'sr-only': hideH1 }"
32
+ />
33
+ </LayoutHelper>
34
+
35
+ <!-- inline hero -->
36
+ <LayoutHelper
37
+ v-if="data.heroImageInline && heroInline"
38
+ indent="col-2"
39
+ class="mb-22 mt-10"
40
+ >
41
+ <BlockImageStandard
42
+ :data="data.heroImageInline"
43
+ :caption="data.heroImageCaption"
44
+ :display-caption="!data.heroImageCaption ? false : true"
45
+ :constrain="data.heroConstrain"
46
+ />
47
+ </LayoutHelper>
48
+
49
+ <!-- share buttons -->
50
+ <LayoutHelper
51
+ indent="col-2"
52
+ class="lg:mb-0 relative mb-8"
53
+ >
54
+ <ShareButtons
55
+ v-if="data.title && data.url"
56
+ :title="data.title"
57
+ :url="data.url"
58
+ />
59
+ </LayoutHelper>
60
+
61
+ <!-- Body Streamfield -->
62
+ <BlockStreamfield :data="data.body" />
63
+
64
+ <!-- related links -->
65
+ <LayoutHelper
66
+ v-if="data.relatedLinks && data.relatedLinks.length"
67
+ indent="col-3"
68
+ class="lg:my-18 my-10"
69
+ >
70
+ <BlockRelatedLinks :data="data.relatedLinks[0]" />
71
+ </LayoutHelper>
72
+
73
+ <!-- contact form for specific content page only -->
74
+ <template v-if="data.slug === 'contact-jpl'">
75
+ <FormContact class="lg:mb-18 mb-10" />
76
+ </template>
77
+
78
+ <!-- Newsletter Signup form for specific content page only -->
79
+ <template v-if="data.slug === 'newsletter-signup'">
80
+ <!-- Newsletter Signup Form -->
81
+ <FormNewsletterSignup class="lg:mb-18 mb-10" />
82
+ </template>
83
+
84
+ <!-- media contacts and release number -->
85
+ <LayoutHelper
86
+ v-if="data.clearanceNumber"
87
+ indent="col-3"
88
+ class="lg:my-18 my-10"
89
+ >
90
+ <p class="text-body-sm text-gray-mid-dark">
91
+ {{ data.clearanceNumber }}
92
+ </p>
93
+ </LayoutHelper>
94
+
95
+ <!-- related content -->
96
+ <BlockLinkCarousel
97
+ item-type="cards"
98
+ class="lg:my-24 my-12"
99
+ :heading="data.relatedContentHeading"
100
+ :items="data.relatedContent"
101
+ />
102
+ </div>
103
+ </template>
104
+ <script lang="ts">
105
+ import { defineComponent } from 'vue'
106
+ import { useRoute } from 'vue-router'
107
+ const route = useRoute()
108
+
109
+ export default defineComponent({
110
+ name: 'PageContent',
111
+ props: {
112
+ data: {
113
+ type: Object,
114
+ required: false,
115
+ default: undefined
116
+ }
117
+ },
118
+ computed: {
119
+ heroInline() {
120
+ if (this.data?.heroPosition === 'inline') {
121
+ return true
122
+ }
123
+ return false
124
+ },
125
+ hideH1() {
126
+ if (route?.path === '/a-plan-for-jpl') {
127
+ return true
128
+ }
129
+ return false
130
+ },
131
+ h1LayoutHelperClasses() {
132
+ if (this.hideH1) {
133
+ // We're hiding the H1 from regular browsers, so reduce the standard margin.
134
+ return 'lg:mt-12 mt-5'
135
+ }
136
+ return 'lg:mt-12 lg:mb-18 mt-5 mb-10'
137
+ }
138
+ }
139
+ })
140
+ </script>
@@ -0,0 +1,104 @@
1
+ import { BlockKeyPointsData } from './../../components/BlockKeyPoints/BlockKeyPoints.stories'
2
+ import { EventDetailHeroData } from './../../components/EventDetailHero/EventDetailHero.stories'
3
+ import { EventsBlockLinkCarouselData } from './../../components/BlockLinkCarousel/BlockLinkCarousel.stories'
4
+ import PageEventDetail from './PageEventDetail.vue'
5
+
6
+ export default {
7
+ title: 'Templates/PageEventDetail',
8
+ component: PageEventDetail,
9
+ decorators: [
10
+ () => ({
11
+ template: `<div id="storyDecorator" class="absolute inset-0 disable-nav-offset"><story/></div>`
12
+ })
13
+ ],
14
+ parameters: {
15
+ html: {
16
+ root: '#storyDecorator'
17
+ },
18
+ viewMode: 'canvas'
19
+ },
20
+ excludeStories: /.*Data$/
21
+ }
22
+
23
+ // stories
24
+ export const EventDetail = {
25
+ args: {
26
+ data: {
27
+ id: '285',
28
+ title: 'Becoming a nasa engineer',
29
+ slug: 'becoming-a-nasa-engineer',
30
+ url: '/events/becoming-a-nasa-engineer',
31
+ startDate: '2022-01-23',
32
+ startDatetime: '2022-01-23T17:00:00-08:00',
33
+ startTime: '17:00:00',
34
+ endDate: '2022-01-25',
35
+ endDatetime: '2022-01-25T23:00:00-08:00',
36
+ endTime: '23:00:00',
37
+ isAllDay: false,
38
+ timezone: 'PST',
39
+ label: 'Events',
40
+ location: 'Webcast',
41
+ registerLink: [],
42
+ heroImage: {
43
+ ...EventDetailHeroData.heroImage
44
+ },
45
+ thumbnailImage: {
46
+ alt: '',
47
+ original: 'https://picsum.photos/512/288'
48
+ },
49
+ body: [
50
+ BlockKeyPointsData,
51
+ {
52
+ blockType: 'RichTextBlock',
53
+ value:
54
+ '<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'
55
+ }
56
+ ],
57
+ moreEvents: [...EventsBlockLinkCarouselData],
58
+ speakers: [
59
+ {
60
+ host: 'host',
61
+ id: '1',
62
+ internalLink: null,
63
+ name: 'Varoujan Gorjian',
64
+ title: 'Splitzer Research Scientest, JPL'
65
+ },
66
+ {
67
+ host: 'co-host',
68
+ id: '2',
69
+ image: {
70
+ alt: '',
71
+ src: {
72
+ height: '450',
73
+ url: 'https://picsum.photos/560/560',
74
+ width: '450'
75
+ }
76
+ },
77
+ internalLink: null,
78
+ name: 'Robert Hurt',
79
+ title: 'Splitzer visualisation'
80
+ }
81
+ ],
82
+ relatedLinks: [
83
+ {
84
+ blockType: 'RelatedLinksBlock',
85
+ heading: 'Webcast',
86
+ links: [
87
+ {
88
+ document: null,
89
+ externalLink: 'http://www.google.com',
90
+ page: null,
91
+ text: 'Watch the event live on YouTube'
92
+ },
93
+ {
94
+ document: null,
95
+ externalLink: 'http://www.google.com',
96
+ page: null,
97
+ text: 'Watch the event live on Ustream'
98
+ }
99
+ ]
100
+ }
101
+ ]
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,358 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="PageEventDetail 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.label"
35
+ class="flex flex-wrap items-start mb-3"
36
+ >
37
+ <nuxt-link
38
+ class="py-3 cursor-pointer group nuxt-link-active text-subtitle text-primary can-hover:hover:text-primary-dark"
39
+ to="/events"
40
+ >
41
+ {{ data.label }}
42
+ </nuxt-link>
43
+ </div>
44
+ <BaseHeading
45
+ level="h1"
46
+ itemprop="name"
47
+ >
48
+ {{ data.title }}
49
+ </BaseHeading>
50
+ </LayoutHelper>
51
+
52
+ <!-- share buttons -->
53
+ <LayoutHelper
54
+ indent="col-1"
55
+ class="relative mb-16 lg:mb-0"
56
+ >
57
+ <ShareButtons
58
+ :title="data.title"
59
+ :url="data.url"
60
+ />
61
+ </LayoutHelper>
62
+
63
+ <LayoutHelper indent="col-2">
64
+ <EventDetailHero
65
+ :image="data.heroImage"
66
+ :start-date-split="formattedSplitEventDates"
67
+ />
68
+
69
+ <!-- Event details -->
70
+ <div>
71
+ <div
72
+ class="py-1 mb-10 text-xl lg:mb-0 lg:flex"
73
+ :class="data.registerLink && data.registerLink.length > 0 ? '' : 'lg:mb-10'"
74
+ >
75
+ <div class="PageEventDetail__Metadata text-primary">
76
+ <IconCalendar class="relative mr-3" />
77
+ <span>{{ formattedEventDates }}</span>
78
+ </div>
79
+ <div
80
+ v-show="displayTime"
81
+ class="PageEventDetail__Metadata text-primary"
82
+ >
83
+ <IconTime class="relative mr-3" />
84
+ <span>{{ displayTime }}</span>
85
+ </div>
86
+ <!--Virtual location -->
87
+ <div
88
+ v-if="data.isVirtualEvent && data.locationLink"
89
+ itemprop="location"
90
+ itemscope
91
+ itemtype="https://schema.org/VirtualLocation"
92
+ class="PageEventDetail__Metadata text-primary"
93
+ >
94
+ <link
95
+ itemprop="url"
96
+ :href="data.locationLink"
97
+ />
98
+ <meta
99
+ itemprop="name"
100
+ :content="data.location"
101
+ />
102
+ <IconLocation class="relative mr-3" />
103
+ <BaseLink
104
+ variant="none"
105
+ :href="data.locationLink"
106
+ external-target-blank
107
+ >
108
+ {{ data.location }}
109
+ </BaseLink>
110
+ </div>
111
+ <!-- Normal location -->
112
+ <div
113
+ v-else-if="data.location"
114
+ class="PageEventDetail__Metadata text-primary"
115
+ >
116
+ <meta
117
+ itemprop="location"
118
+ :content="data.location"
119
+ />
120
+ <IconLocation class="relative mr-3" />
121
+ <BaseLink
122
+ v-if="data.locationLink"
123
+ variant="none"
124
+ :href="data.locationLink"
125
+ external-target-blank
126
+ >
127
+ {{ data.location }}
128
+ </BaseLink>
129
+ <span v-else>{{ data.location }}</span>
130
+ </div>
131
+ <div class="PageEventDetail__Buttons">
132
+ <BaseButton
133
+ v-if="
134
+ data.registerLink &&
135
+ data.registerLink.length > 0 &&
136
+ ((data.registerLink[0].page && data.registerLink[0].page.url) ||
137
+ data.registerLink[0].externalLink)
138
+ "
139
+ class="w-full px-0 mb-5"
140
+ :href="data.registerLink[0].externalLink ? data.registerLink[0].externalLink : null"
141
+ :to="
142
+ data.registerLink[0].page && data.registerLink[0].page.url
143
+ ? data.registerLink[0].page.url
144
+ : null
145
+ "
146
+ :target="data.registerLink[0].externalLink ? '_blank' : '_self'"
147
+ compact
148
+ >Register for event
149
+ </BaseButton>
150
+ <!-- Todo IF VIRTUAL EVENT passes url as string to location prop -->
151
+ <!-- location= location name and link -->
152
+ <CalendarButton
153
+ :is-all-day="data.isAllDay"
154
+ :start-datetime="data.startDatetime"
155
+ :end-datetime="data.endDatetime ? data.endDatetime : null"
156
+ :title="data.title ? data.title : null"
157
+ :location="data.location ? data.location : null"
158
+ :description="data.summary ? data.summary : null"
159
+ />
160
+ </div>
161
+ </div>
162
+
163
+ <!-- Body -->
164
+ <div
165
+ v-if="data.body || data.summary"
166
+ class="grid-cols-10 lg:grid -mx-4 lg:mx-0"
167
+ >
168
+ <div class="col-span-7">
169
+ <p
170
+ v-if="data.summary"
171
+ class="BlockText text-body-lg mb-8 px-4 lg:px-0"
172
+ >
173
+ {{ data.summary }}
174
+ </p>
175
+ <BlockStreamfield
176
+ v-if="data.body"
177
+ variant="fluid"
178
+ :data="data.body"
179
+ />
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </LayoutHelper>
184
+
185
+ <!-- Speakers -->
186
+ <LayoutHelper
187
+ v-if="data.speakers && data.speakers.length > 0"
188
+ indent="col-2"
189
+ class="mb-12 lg:mb-16"
190
+ >
191
+ <div class="grid-cols-10 lg:grid">
192
+ <div class="col-span-7">
193
+ <BaseHeading
194
+ level="h2"
195
+ class="mb-5 md:mb-8"
196
+ >Speakers</BaseHeading
197
+ >
198
+ <div class="flex flex-col flex-wrap justify-start md:flex-row md:-mx-4">
199
+ <div
200
+ v-for="(speaker, index) in data.speakers"
201
+ :key="index"
202
+ class="flex flex-1 mb-6 md:flex-none md:flex-wrap md:mx-4 md:w-56"
203
+ >
204
+ <div class="w-40 mr-6 md:mr-0 md:w-56">
205
+ <BaseImagePlaceholder
206
+ aspect-ratio="1:1"
207
+ class="relative overflow-hidden bg-gray-light-mid"
208
+ transparent-mode
209
+ >
210
+ <BaseImage
211
+ v-if="speaker.image && speaker.image.src"
212
+ :src="speaker.image.src.url"
213
+ :width="speaker.image.src.width"
214
+ :height="speaker.image.src.height"
215
+ alt=""
216
+ class="object-cover"
217
+ loading="lazy"
218
+ />
219
+ <img
220
+ v-else
221
+ :src="PlaceholderPortrait"
222
+ alt=""
223
+ />
224
+ </BaseImagePlaceholder>
225
+ </div>
226
+ <div class="flex-1 h-full">
227
+ <h3
228
+ v-if="speaker.name"
229
+ class="my-3 text-lg font-normal leading-none"
230
+ >
231
+ <BaseLink
232
+ v-if="speaker.internalLink || speaker.externalLink"
233
+ link-class="no-underline normal-case"
234
+ :to="speaker.internalLink ? speaker.internalLink.url : null"
235
+ :href="speaker.externalLink ? speaker.externalLink : null"
236
+ external-target-blank
237
+ >
238
+ {{ speaker.name }}
239
+ </BaseLink>
240
+ <template v-else>
241
+ {{ speaker.name }}
242
+ </template>
243
+ </h3>
244
+ <p
245
+ v-if="speaker.title"
246
+ class="mb-3 text-gray-dark"
247
+ >
248
+ {{ speaker.title }}
249
+ </p>
250
+ <p>
251
+ {{ speaker.host }}
252
+ </p>
253
+ </div>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </LayoutHelper>
259
+
260
+ <!-- Webcast -->
261
+ <LayoutHelper
262
+ v-if="data.relatedLinks && data.relatedLinks.length > 0"
263
+ indent="col-2"
264
+ class="my-12 lg:my-16"
265
+ >
266
+ <BlockRelatedLinks :data="data.relatedLinks[0]" />
267
+ </LayoutHelper>
268
+
269
+ <!-- Related Events -->
270
+ <LayoutHelper
271
+ v-if="data.moreEvents && data.moreEvents.length > 0"
272
+ indent="col-1"
273
+ class="my-12 lg:my-16"
274
+ >
275
+ <BlockLinkCarousel
276
+ item-type="cards"
277
+ heading="MORE EVENTS"
278
+ :items="data.moreEvents"
279
+ />
280
+ </LayoutHelper>
281
+ </div>
282
+ </template>
283
+ <script lang="ts">
284
+ import { defineComponent } from 'vue'
285
+ import {
286
+ mixinFormatEventDates,
287
+ mixinFormatEventTimeInHoursAndMinutes,
288
+ mixinFormatSplitEventDates
289
+ } from '../../utils/mixins'
290
+ // @ts-ignore
291
+ import PlaceholderPortrait from '@explorer-1/common/src/images/svg/placeholder-portrait.svg'
292
+
293
+ export default defineComponent({
294
+ name: 'PageEventDetail',
295
+ props: {
296
+ data: {
297
+ type: Object,
298
+ required: false
299
+ }
300
+ },
301
+ data() {
302
+ return {
303
+ PlaceholderPortrait: PlaceholderPortrait
304
+ }
305
+ },
306
+ computed: {
307
+ displayTime(): string {
308
+ return this.data
309
+ ? mixinFormatEventTimeInHoursAndMinutes(
310
+ this.data.startDatetime,
311
+ this.data.endDatetime,
312
+ this.data.endTime
313
+ )
314
+ : ''
315
+ },
316
+ formattedEventDates(): string {
317
+ return this.data ? mixinFormatEventDates(this.data.startDatetime, this.data.endDatetime) : ''
318
+ },
319
+ formattedSplitEventDates() {
320
+ return this.data
321
+ ? mixinFormatSplitEventDates(this.data.startDatetime, this.data.endDatetime)
322
+ : undefined
323
+ }
324
+ }
325
+ })
326
+ </script>
327
+ <style lang="scss">
328
+ .PageEventDetail {
329
+ .PageEventDetail__Metadata {
330
+ @apply flex;
331
+ @apply items-baseline;
332
+ @apply mr-12;
333
+ @apply md:mr-8;
334
+ @apply lg:mr-12;
335
+ @apply mb-5;
336
+
337
+ span {
338
+ max-width: 230px;
339
+ min-width: 110px;
340
+ @apply text-gray-dark;
341
+ }
342
+
343
+ svg {
344
+ min-width: 1.25rem;
345
+ @apply top-0.5;
346
+ }
347
+ }
348
+
349
+ .PageEventDetail__Buttons {
350
+ @apply text-base;
351
+ @apply lg:ml-auto;
352
+ @apply mt-10;
353
+ @apply lg:mt-0;
354
+
355
+ max-width: 260px;
356
+ }
357
+ }
358
+ </style>