@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,21 @@
1
+ import BlockText, { variants } from './BlockText.vue'
2
+
3
+ export default {
4
+ title: 'Components/Blocks/BlockText',
5
+ component: BlockText,
6
+ argTypes: {
7
+ variant: {
8
+ control: { type: 'select' },
9
+ options: Object.keys(variants)
10
+ },
11
+ text: { control: { type: 'text' } }
12
+ }
13
+ }
14
+
15
+ export const Default = {
16
+ name: 'BlockText',
17
+ args: {
18
+ variant: 'large',
19
+ text: `<p>AVIRIS is the first full spectral range imaging spectrometer and dedicated to <a href="https://en.wikipedia.org/wiki/Remote_sensing" target="_blank">Earth Remote Measurement</a>. Test <a href="#">preventlongurlsfrombreakingoutofcontainerpreventlongurlsfrombreakingoutofcontainerpreventlongurlsfrombreakingoutofcontainerpreventlongurlsfrombreakingoutofcontainer</a>. It is a unique optical sensor that continues to deliver calibrated images of the upwelling spectral radiance in 224 contiguous spectral channels (bands) with wavelengths from 380 to 2510 nanometers. AVIRIS has been flown on four aircraft platforms: NASA's high altitude ER-2 jet, Twin Otter International's turboprop, Scaled Composites' Proteus, and NASA's WB-57. The ER-2 flies at approximately 20 km above sea level, at about 730 km/hr. The Twin Otter aircraft flies at 4km above ground level at 130km/hr. AVIRIS has flown North America including Alaska, Hawaii, Europe, Brazil, and Argentina.</p><p>The objective of the AVIRIS project is to support advanced NASA science and applications research. AVIRIS uses imaging spectroscopy to detect, identify, measure, and monitor constituents and processes of the Earth's surface and atmosphere based on measured constituent absorption and scattering signatures. Science and applications research with AVIRIS data spans a wide range of discipline across the Earth system. </p><hr /><ul><li>Lorem ipsum dolor sit amet consectatur adipscing</li><li>Lorem ipsum dolor sit amet <strong>consectatur adipscing</strong></li><li>Lorem ipsum dolor sit amet consectatur adipscing</li></ul><p>Lorem ipsum dolor sit amet paragraph text</p><ol><li>Lorem ipsum dolor sit amet consectatur adipscing</li><li>Lorem ipsum dolor sit amet consectatur adipscing</li><li>Lorem ipsum dolor <strong>sit amet</strong> consectatur adipscing</li><li>Lorem <strong>ipsum dolor</strong> sit amet consectatur adipscing</li></ol><hr /><p>Lorem ipsum dolor sit amet consectatur adipscing</p>`
20
+ }
21
+ }
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <div
3
+ class="BlockText"
4
+ :class="computedClass"
5
+ v-html="text"
6
+ ></div>
7
+ </template>
8
+ <script lang="ts">
9
+ import { defineComponent } from 'vue'
10
+
11
+ interface Variants {
12
+ [name: string]: string
13
+ }
14
+
15
+ export const variants: Variants = {
16
+ small: 'text-body-sm',
17
+ medium: 'text-body-md',
18
+ large: 'text-body-lg'
19
+ }
20
+
21
+ export default defineComponent({
22
+ name: 'BlockText',
23
+ props: {
24
+ text: {
25
+ type: String,
26
+ required: false
27
+ },
28
+ variant: {
29
+ type: String,
30
+ required: false,
31
+ default: 'large',
32
+ validator: (prop: string): boolean => Object.keys(variants).includes(prop)
33
+ }
34
+ },
35
+ computed: {
36
+ computedClass(): string {
37
+ return variants[this.variant]
38
+ }
39
+ }
40
+ })
41
+ </script>
42
+ <style lang="scss">
43
+ @import '@explorer-1/common/src/scss/components/BlockText';
44
+ </style>
@@ -0,0 +1,19 @@
1
+ import BlockTwitterEmbed from './BlockTwitterEmbed.vue'
2
+
3
+ export default {
4
+ title: 'Components/Blocks/BlockTwitterEmbed',
5
+ component: BlockTwitterEmbed,
6
+ excludeStories: /.*Data$/
7
+ }
8
+
9
+ export const BlockTwitterEmbedData = {
10
+ blockType: 'TwitterEmbedBlock',
11
+ username: 'NASAJPL'
12
+ }
13
+
14
+ export const List = {
15
+ name: 'BlockTwitterEmbed',
16
+ args: {
17
+ data: BlockTwitterEmbedData
18
+ }
19
+ }
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="BlockTwitterEmbed lg:px-0 px-8"
5
+ >
6
+ <div
7
+ ref="timeline"
8
+ class="border-gray-light-mid mx-auto border"
9
+ ></div>
10
+ </div>
11
+ </template>
12
+
13
+ <script lang="ts">
14
+ // @ts-nocheck
15
+ export default {
16
+ name: 'BlockTwitterEmbed',
17
+ props: {
18
+ data: {
19
+ type: Object,
20
+ required: false
21
+ }
22
+ },
23
+ mounted() {
24
+ this.render()
25
+ },
26
+ methods: {
27
+ render() {
28
+ // TODO: VUE3 -- find another way to make this client-only
29
+ if (typeof require !== 'undefined') {
30
+ require('twitter-widgets').load((err, twttr) => {
31
+ if (err) {
32
+ console.log('[twitter-widgets] Error: ' + err)
33
+ return
34
+ }
35
+ twttr.widgets.createTimeline(
36
+ {
37
+ sourceType: 'profile',
38
+ screenName: this.data.username
39
+ },
40
+ this.$refs.timeline
41
+ )
42
+ })
43
+ }
44
+ }
45
+ }
46
+ }
47
+ </script>
48
+
49
+ <style lang="scss">
50
+ .BlockTwitterEmbed {
51
+ > div {
52
+ height: 400px;
53
+ max-height: 60vh;
54
+ @apply overflow-y-auto;
55
+ @screen md {
56
+ height: 600px;
57
+ @apply w-xl max-h-none;
58
+ }
59
+ }
60
+ }
61
+ </style>
@@ -0,0 +1,23 @@
1
+ import { BaseVideoData } from './../BaseVideo/BaseVideo.stories'
2
+ import BlockVideo from './BlockVideo.vue'
3
+
4
+ export default {
5
+ title: 'Components/Blocks/BlockVideo',
6
+ component: BlockVideo,
7
+ excludeStories: /.*Data$/
8
+ }
9
+
10
+ // shared data
11
+ export const BlockVideoData = {
12
+ block: {
13
+ blockType: 'VideoBlock',
14
+ video: BaseVideoData,
15
+ caption: 'Lorem ipsum dolor sit amet consectatur',
16
+ credit: 'Credit'
17
+ }
18
+ }
19
+
20
+ export const Default = {
21
+ name: 'BlockVideo',
22
+ args: { data: BlockVideoData.block }
23
+ }
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="BlockVideo"
5
+ >
6
+ <BaseVideo
7
+ :data="data.video"
8
+ :autoplay="autoplay"
9
+ />
10
+
11
+ <div
12
+ v-if="(data.caption && data.caption.length > 2) || data.credit"
13
+ class="lg:px-0 p-4 pb-0"
14
+ >
15
+ <BaseImageCaption :data="data" />
16
+ </div>
17
+ </div>
18
+ </template>
19
+ <script lang="ts">
20
+ import { defineComponent } from 'vue'
21
+ import BaseVideo from './../BaseVideo/BaseVideo.vue'
22
+ import BaseImageCaption from './../BaseImageCaption/BaseImageCaption.vue'
23
+
24
+ export default defineComponent({
25
+ name: 'BlockVideo',
26
+ components: {
27
+ BaseVideo,
28
+ BaseImageCaption
29
+ },
30
+ props: {
31
+ data: {
32
+ type: Object,
33
+ required: false
34
+ },
35
+ autoplay: {
36
+ type: Boolean,
37
+ default: false
38
+ }
39
+ }
40
+ })
41
+ </script>
@@ -0,0 +1,20 @@
1
+ import BlockVideoEmbed from './BlockVideoEmbed.vue'
2
+
3
+ export default {
4
+ title: 'Components/Blocks/BlockVideoEmbed',
5
+ component: BlockVideoEmbed,
6
+ excludeStories: /.*Data$/
7
+ }
8
+
9
+ // shared data
10
+ export const BlockVideoEmbedData = {
11
+ data: {
12
+ embed: {
13
+ embed: `<iframe title="Meet NASA's Diana Trujillo" width="480" height="270" src="https://www.youtube.com/embed/vUuUyYqI83Q?feature=oembed" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`
14
+ },
15
+ caption: `<p>Get to know some of the diverse team of engineers and scientists working on NASA's next Mars rover, Perseverance.</p>`,
16
+ credit: 'ISRO/NASA/JPL-Caltech/Brown University/USGS'
17
+ }
18
+ }
19
+
20
+ export const Default = { name: 'BlockVideoEmbed', args: { data: BlockVideoEmbedData.data } }
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div
3
+ v-if="data && data.embed"
4
+ class="BlockVideoEmbed"
5
+ >
6
+ <BaseImagePlaceholder
7
+ aspect-ratio="16:9"
8
+ dark-mode
9
+ >
10
+ <div v-html="data.embed.embed"></div>
11
+ </BaseImagePlaceholder>
12
+ <div
13
+ v-if="data.caption"
14
+ class="lg:px-0 p-4"
15
+ >
16
+ <BaseImageCaption :data="data" />
17
+ </div>
18
+ </div>
19
+ </template>
20
+ <script lang="ts">
21
+ import type { PropType } from 'vue'
22
+ import { defineComponent } from 'vue'
23
+ import BaseImagePlaceholder from './../BaseImagePlaceholder/BaseImagePlaceholder.vue'
24
+ import BaseImageCaption from './../BaseImageCaption/BaseImageCaption.vue'
25
+
26
+ export interface BlockData {
27
+ heading: string
28
+ display?: boolean
29
+ embed: {
30
+ // HTML for the iframe, generated by OEmbed.
31
+ embed: string
32
+ }
33
+ caption: string
34
+ credit?: string
35
+ }
36
+
37
+ export default defineComponent({
38
+ name: 'BlockVideoEmbed',
39
+ components: {
40
+ BaseImagePlaceholder,
41
+ BaseImageCaption
42
+ },
43
+ props: {
44
+ data: {
45
+ type: Object as PropType<BlockData>,
46
+ required: false
47
+ }
48
+ },
49
+ mounted() {
50
+ this.addIframeLazyLoad()
51
+ },
52
+ methods: {
53
+ addIframeLazyLoad() {
54
+ if (!this.data?.embed) {
55
+ return
56
+ }
57
+
58
+ // TODO: not using feature detect as that would require rewriting the html output from wagtail to set data-src instead of src
59
+ // get the iframe in this component
60
+ const iframe = this.$el.querySelector('iframe')
61
+ if (iframe) {
62
+ iframe.setAttribute('loading', 'lazy')
63
+ }
64
+ }
65
+ }
66
+ })
67
+ </script>
68
+
69
+ <style lang="scss">
70
+ @import '@explorer-1/common/src/scss/components/BlockVideoEmbed';
71
+ </style>
@@ -0,0 +1,36 @@
1
+ import CalendarButton from './CalendarButton.vue'
2
+
3
+ export default {
4
+ title: 'Components/CalendarButton',
5
+ component: CalendarButton,
6
+ excludeStories: /.*Data$/
7
+ }
8
+
9
+ // data
10
+ export const CalendarButtonData = {
11
+ title: 'Event title',
12
+ location: 'Location',
13
+ isAllDay: false,
14
+ startDatetime: '2021-11-11T00:00:00-08:00',
15
+ endDatetime: '2021-11-11T23:59:59.999999-08:00'
16
+ }
17
+
18
+ // template
19
+ const CalendarButtonTemplate = (args) => ({
20
+ props: Object.keys(args),
21
+ components: { CalendarButton },
22
+ template: `
23
+ <CalendarButton
24
+ :is-all-day="isAllDay"
25
+ :start-datetime="startDatetime"
26
+ :end-datetime="endDatetime"
27
+ :title="title"
28
+ :location="location"
29
+ />
30
+ `
31
+ })
32
+
33
+ export const Default = CalendarButtonTemplate.bind({})
34
+ Default.args = {
35
+ ...CalendarButtonData
36
+ }
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <BaseButton
3
+ class="w-full"
4
+ variant="secondary"
5
+ compact
6
+ @click="
7
+ // @ts-ignore
8
+ icalendar.download()
9
+ "
10
+ >
11
+ Add to calendar
12
+ </BaseButton>
13
+ </template>
14
+ <script lang="ts">
15
+ import { defineComponent } from 'vue'
16
+ import { ICalendar } from 'datebook'
17
+ import type { CalendarOptions } from 'datebook'
18
+ // @ts-ignore
19
+ import dayjs from './../../utils/dayjs'
20
+ import BaseButton from './../BaseButton/BaseButton.vue'
21
+
22
+ export default defineComponent({
23
+ name: 'CalendarButton',
24
+ components: {
25
+ BaseButton
26
+ },
27
+ props: {
28
+ isAllDay: {
29
+ type: Boolean,
30
+ required: true
31
+ },
32
+ startDatetime: {
33
+ type: String,
34
+ required: true
35
+ },
36
+ endDatetime: {
37
+ type: String,
38
+ required: false
39
+ },
40
+ title: {
41
+ type: String,
42
+ required: false
43
+ },
44
+ location: {
45
+ type: String,
46
+ required: false
47
+ },
48
+ description: {
49
+ type: String,
50
+ required: false
51
+ }
52
+ },
53
+ computed: {
54
+ icalendar(): ICalendar {
55
+ let recurrence = {}
56
+ if (this.endDatetime && this.isAllDay) {
57
+ // Calculate how many full days
58
+ const startDateDayjs = dayjs(this.startDatetime)
59
+ const endDateDayjs = dayjs(this.endDatetime)
60
+ const difference = endDateDayjs.diff(startDateDayjs, 'day') + 1
61
+ recurrence = { frequency: 'DAILY', interval: 1, count: difference }
62
+ }
63
+
64
+ const options: CalendarOptions = {
65
+ title: this.title ? this.title : undefined,
66
+ location: this.location ? this.addSlashes(this.location) : undefined,
67
+ description: this.description ? this.description : undefined,
68
+ start: new Date(this.startDatetime),
69
+ end: !this.isAllDay && this.endDatetime ? new Date(this.endDatetime) : undefined,
70
+ recurrence
71
+ }
72
+
73
+ return new ICalendar(options)
74
+ }
75
+ },
76
+ methods: {
77
+ addSlashes(string: string): string {
78
+ // Escape special characters COMMA, SEMI-COLON and BACKSLASH
79
+ // as temporary fix for this issue https://github.com/jshor/datebook/issues/179
80
+ // regex based of https://stackoverflow.com/a/770533
81
+ // eslint-disable-next-line
82
+ return string.replace(/[,;\\]/g, '\\$&').replace(/\u0000/g, '\\0')
83
+ }
84
+ }
85
+ })
86
+ </script>
@@ -0,0 +1,48 @@
1
+ import DetailHeadline from './DetailHeadline.vue'
2
+
3
+ export default {
4
+ title: 'Components/DetailHeadline',
5
+ component: DetailHeadline,
6
+ excludeStories: /.*Data$/
7
+ }
8
+
9
+ export const DetailHeadlineData = {
10
+ title: "NASA's Ingenuity Mars Helicopter Recharges Its Batteries in Flight",
11
+ publicationDate: '2020-08-13',
12
+ author: {
13
+ name: 'Jane Platt',
14
+ organization: 'JPL'
15
+ },
16
+ topics: [
17
+ {
18
+ title: 'Mars',
19
+ url: '/topics/mars'
20
+ },
21
+ {
22
+ title: 'Rover',
23
+ url: '/topics/rover'
24
+ }
25
+ ]
26
+ }
27
+
28
+ // stories
29
+ export const Default = {
30
+ args: DetailHeadlineData
31
+ }
32
+
33
+ export const NoAuthor = {
34
+ args: {
35
+ title: "NASA's Ingenuity Mars Helicopter Recharges Its Batteries in Flight",
36
+ publicationDate: '2020-08-13',
37
+ topics: [
38
+ {
39
+ title: 'Mars',
40
+ url: '/topics/mars'
41
+ },
42
+ {
43
+ title: 'Rover',
44
+ url: '/topics/rover'
45
+ }
46
+ ]
47
+ }
48
+ }
@@ -0,0 +1,143 @@
1
+ <template>
2
+ <div v-if="title || label || topics || publicationDate || author">
3
+ <div
4
+ v-if="label || (topics && topics.length)"
5
+ class="flex flex-wrap items-start mb-3"
6
+ >
7
+ <div
8
+ v-if="topics && topics.length"
9
+ class="inline"
10
+ >
11
+ <BaseLink
12
+ variant="secondary"
13
+ :to="topics[0].url"
14
+ class="py-3"
15
+ use-primary-color
16
+ >
17
+ <span :itemprop="schema ? 'articleSection' : undefined">
18
+ {{ topics[0].title }}
19
+ </span>
20
+ </BaseLink>
21
+ </div>
22
+ <span
23
+ v-else-if="label"
24
+ class="text-subtitle py-3"
25
+ >
26
+ <template v-if="!labelLink">
27
+ {{ label }}
28
+ </template>
29
+ <template v-else>
30
+ <BaseLink
31
+ variant="secondary"
32
+ :to="labelLink"
33
+ class="py-3"
34
+ >
35
+ {{ label }}
36
+ </BaseLink>
37
+ </template>
38
+ </span>
39
+ <span class="sr-only">.</span>
40
+ </div>
41
+ <BaseHeading
42
+ level="h1"
43
+ :size="themeStore.theme === 'ThemeEdu' ? 'h1' : 'h2'"
44
+ :itemprop="schema ? 'headline' : undefined"
45
+ >{{ title }}
46
+ </BaseHeading>
47
+ <div
48
+ v-if="author || publicationDate"
49
+ class="lg:text-base text-gray-mid-dark divide-gray-mid-dark px-3 mt-5 -ml-3 text-sm leading-normal"
50
+ >
51
+ <span
52
+ v-if="author"
53
+ :itemprop="schema ? 'author' : undefined"
54
+ itemscope
55
+ itemtype="https://schema.org/Person"
56
+ class="pr-3 border-r mr-2"
57
+ >
58
+ Written by
59
+ <span :itemprop="schema ? 'name' : undefined">{{ author.name }}</span>
60
+ </span>
61
+ <span
62
+ v-else
63
+ :itemprop="schema ? 'author' : undefined"
64
+ itemscope
65
+ itemtype="https://schema.org/Organization"
66
+ class="hidden"
67
+ >
68
+ <span :itemprop="schema ? 'name' : undefined"> Jet Propulsion Laboratory </span>
69
+ <span :itemprop="schema ? 'url' : undefined"> https://www.jpl.nasa.gov/ </span>
70
+ </span>
71
+ <span v-if="publicationDate">
72
+ <meta
73
+ v-if="schema"
74
+ itemprop="datePublished"
75
+ :content="pubDatetime"
76
+ />
77
+ {{
78
+ // @ts-ignore
79
+ $filters.displayDate(publicationDate)
80
+ }}
81
+ </span>
82
+ </div>
83
+ </div>
84
+ </template>
85
+ <script lang="ts">
86
+ import { defineComponent, type PropType } from 'vue'
87
+ import { mapStores } from 'pinia'
88
+ import { useThemeStore } from '../../store/theme'
89
+ import type { Topic } from './../../interfaces'
90
+ import BaseLink from './../BaseLink/BaseLink.vue'
91
+ import BaseHeading from './../BaseHeading/BaseHeading.vue'
92
+
93
+ export default defineComponent({
94
+ name: 'DetailHeadline',
95
+ components: {
96
+ BaseLink,
97
+ BaseHeading
98
+ },
99
+ props: {
100
+ title: {
101
+ type: String,
102
+ required: false
103
+ },
104
+ author: {
105
+ type: Object,
106
+ required: false
107
+ },
108
+ publicationDate: {
109
+ type: String,
110
+ required: false
111
+ },
112
+ publicationTime: {
113
+ type: String,
114
+ required: false
115
+ },
116
+ topics: {
117
+ type: Array as PropType<Topic[]>,
118
+ required: false
119
+ },
120
+ // if topics array isn't available
121
+ label: {
122
+ type: String,
123
+ required: false
124
+ },
125
+ labelLink: {
126
+ type: String,
127
+ required: false
128
+ },
129
+ schema: {
130
+ type: Boolean,
131
+ default: false
132
+ }
133
+ },
134
+ computed: {
135
+ ...mapStores(useThemeStore),
136
+ pubDatetime(): string | undefined {
137
+ const currentTime = this.publicationTime || '00:00:00'
138
+ const returnDate = new Date(this.publicationDate + ' ' + currentTime)
139
+ return returnDate.toISOString()
140
+ }
141
+ }
142
+ })
143
+ </script>
@@ -0,0 +1,29 @@
1
+ import DsnWidget from './DsnWidget.vue'
2
+
3
+ export default {
4
+ title: 'Components/DsnWidget',
5
+ component: DsnWidget,
6
+ excludeStories: /.*Data$/,
7
+ argTypes: {
8
+ status: {
9
+ control: { type: 'text' }
10
+ }
11
+ }
12
+ }
13
+
14
+ export const DsnWidgetData = {
15
+ heading: 'DEEP SPACE NETWORK',
16
+ link: 'https://eyes.nasa.gov/dsn/dsn.html',
17
+ linkTarget: true,
18
+ transmitTitle: 'Currently transmitting',
19
+ transmitStatus: 'receiving',
20
+ spacecraftName: 'Parker Solar Probe',
21
+ location: 'Canberra',
22
+ __typename: 'DeepSpaceNetworkWidget'
23
+ }
24
+
25
+ export const Base = {
26
+ args: {
27
+ data: DsnWidgetData
28
+ }
29
+ }