@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,33 @@
1
+ import dayjs from './dayjs'
2
+
3
+ const filters = {
4
+ // To support more locales update add imports to dayjs.js'
5
+ displayDate(value, format, locale = 'en') {
6
+ if (value) {
7
+ const dateDayjs = dayjs(value).locale(locale)
8
+ let date
9
+ switch (format) {
10
+ case 'DateTime':
11
+ date = dateDayjs.format('MMM D YYYY, HH:mm') // Feb 18 2021, 20:55
12
+ break
13
+ case 'Date':
14
+ date = dateDayjs.format('MMM D YYYY') // Feb 18 2021
15
+ break
16
+ case 'Time':
17
+ date = dateDayjs.format('HH:mm') // 20:55
18
+ break
19
+ case 'MonthAndYear':
20
+ date = dateDayjs.format('MMM YYYY') // Feb. 2021
21
+ break
22
+ case 'Day':
23
+ date = dateDayjs.format('D') // 1-31
24
+ break
25
+ default:
26
+ date = dateDayjs.format('ll') // Feb. 18, 2021 (en)
27
+ }
28
+ return date
29
+ }
30
+ }
31
+ }
32
+
33
+ export default filters
@@ -0,0 +1,353 @@
1
+ // import Vue from 'vue'
2
+ // @ts-ignore
3
+ import dayjs from './dayjs'
4
+ import { useHeaderStore } from './../store/header'
5
+ import { useRoute } from 'vue-router'
6
+ import type {
7
+ BreadcrumbPathObject,
8
+ ImageObject,
9
+ ImageSrcObject,
10
+ RelatedLinkObject
11
+ } from '../interfaces'
12
+ // srcSet data structure
13
+ export interface SrcSetDataValue {
14
+ url: string
15
+ width: number
16
+ }
17
+ // nav link object
18
+ export type LinkObject = {
19
+ linkPage: {
20
+ title: string
21
+ url: string
22
+ } | null
23
+ title: string | null
24
+ path: string | null
25
+ }
26
+ // breadcrumbs used for nav and secondary nav
27
+ export type BreadcrumbObject = {
28
+ menu_links: {
29
+ [key: string]: [BreadcrumbPathObject]
30
+ } | null
31
+ more: [BreadcrumbPathObject] | null
32
+ }
33
+ // general related link object used in various places
34
+
35
+ // image object used to construct lightbox items
36
+ export type BaseImageObject = {
37
+ title: string | null
38
+ original: string | null
39
+ credit: string | null
40
+ detailUrl: string | null
41
+ }
42
+ // lightbox item used to construct lightbox items array
43
+ export type lightboxObject = {
44
+ title: string | null
45
+ url: string | null
46
+ detailUrl: string | null
47
+ credit: string | null
48
+ }
49
+
50
+ // lightbox item used to construct lightbox items array
51
+ export type lightboxGalleryObject = {
52
+ title: string | null
53
+ original: string | null
54
+ detailUrl: string | null
55
+ credit: string | null
56
+ }
57
+
58
+ export interface EventDateObject {
59
+ day: string
60
+ monthAndYear: string
61
+ }
62
+
63
+ /* -- mixinTransparentHeader --
64
+ This mixin is used on the component level to make the header transparent.
65
+ Mostly used by hero image components.
66
+ */
67
+ export const mixinTransparentHeader = () => {
68
+ const headerStore = useHeaderStore()
69
+ if (headerStore) {
70
+ headerStore.makeTransparent(true)
71
+ }
72
+ }
73
+
74
+ /* -- mixinGetLinkText --
75
+ This is used frequently in the navigation components
76
+ and provides a graceful fallback to use the page title
77
+ if one exists.
78
+ */
79
+ export const mixinGetLinkText = (item: LinkObject): string => {
80
+ if (item.title) {
81
+ return item.title
82
+ } else if (item.linkPage) {
83
+ return item.linkPage.title
84
+ }
85
+ return ''
86
+ }
87
+
88
+ /* -- mixinGetRouterLink --
89
+ Checks if nav links are a router link
90
+ - Necessary for url query links as those are passed as external links but should be treated as router links
91
+ - Only checks for /missions? and /news? to keep it safe
92
+ - If a router link, returns a router-compatible string, otherwise null
93
+ TODO: unit test would be good for this
94
+ TODO: need to modify this to work with breadcrumb-passed objects too
95
+ strategy: check if path starts with a slash.
96
+ */
97
+ export const mixinGetRouterLink = (link: LinkObject): string | undefined => {
98
+ if (link.linkPage && link.linkPage.url) {
99
+ return link.linkPage.url
100
+ } else if (link.path) {
101
+ // TODO: VUE3 get env vars properly
102
+ // const domain = process?.env?.SITE_HOSTNAME || 'http://localhost:3000'
103
+ const domain = 'http://localhost:3000'
104
+ // keeping it specific and only checking for mission slug with url query
105
+ if (link.path.startsWith(domain + '/missions?') || link.path.startsWith(domain + '/news?')) {
106
+ return link.path.replace(domain, '')
107
+ } else if (link.path.startsWith('/')) {
108
+ // if it's actually a relative link, make it so
109
+ // (applies when breadcrumbs are passed to mobile secondary nav)
110
+ return link.path
111
+ }
112
+ }
113
+ return undefined
114
+ }
115
+
116
+ /* -- mixinUpdateGlobalChildren --
117
+ This mixin is used by the navigation to share secondary nav items between the global nav and components
118
+ */
119
+ export const mixinUpdateGlobalChildren = (value: [BreadcrumbPathObject] | null) => {
120
+ const headerStore = useHeaderStore()
121
+ headerStore.updateGlobalChildren(value)
122
+ }
123
+ /* -- mixinUpdateSecondary --
124
+ This mixin is used by the navigation to share secondary nav override items between components
125
+ */
126
+ export const mixinUpdateSecondary = (value: [BreadcrumbPathObject] | null) => {
127
+ const headerStore = useHeaderStore()
128
+ headerStore.updateSecondary(value)
129
+ }
130
+ /* -- mixinHighlightPrimary --
131
+ This mixin is used to specify if active primary navigation items should be highlighted/underlined
132
+ Use case: If a page displays a secondary nav, the active primary navigation item should have a different style treatment
133
+ */
134
+ export const mixinHighlightPrimary = (value: boolean) => {
135
+ const headerStore = useHeaderStore()
136
+ headerStore.updateHighlightPrimary(value)
137
+ }
138
+ /* -- mixinIsActivePath --
139
+ Used in various navigation components to determine if a navigation
140
+ item matches the active path, or is an ancestor of the active path.
141
+ Both cases will return true.
142
+ Useful for dropdown toggles.
143
+ */
144
+ export const mixinIsActivePath = (itemPath: string): Boolean => {
145
+ const route = useRoute()
146
+ const currentPath = route ? route.path : null
147
+ const path = itemPath
148
+ const ancestorPath = path ? (path.endsWith('/') ? path : path + '/') : null
149
+ if (currentPath && path && ancestorPath) {
150
+ if (currentPath === path) {
151
+ return true
152
+ } else {
153
+ return currentPath.startsWith(ancestorPath)
154
+ }
155
+ }
156
+ return false
157
+ }
158
+
159
+ /* -- mixinGetSrcSet --
160
+ Use this when you are querying custom cropped renditions
161
+ from Wagtail and want to use the image's srcset attribute.
162
+
163
+ The only requirement is that the image query must include
164
+ custom rendition queries that start with the string `screen`
165
+ and query for both the `url` and `width`
166
+
167
+ Example Query:
168
+ image {
169
+ screenXs: rendition(fill: "320x180-c10") {
170
+ url
171
+ width
172
+ }
173
+ screenMd: rendition(fill: "768x432-c10") {
174
+ url
175
+ width
176
+ }
177
+ screenXl: rendition(fill: "1280x640-c10") {
178
+ url
179
+ width
180
+ }
181
+ }
182
+ */
183
+ export const mixinGetSrcSet = (srcSetObject: Partial<ImageObject>): string => {
184
+ let srcSet = ''
185
+ const valid = Object.keys(srcSetObject).some(function (key) {
186
+ if (key.startsWith('screen')) {
187
+ return true
188
+ }
189
+ return false
190
+ })
191
+ if (valid) {
192
+ const srcSetArray: string[] = []
193
+ for (const [key, value] of Object.entries(srcSetObject)) {
194
+ if (key.startsWith('screen') && typeof value === 'object') {
195
+ if ((value as ImageSrcObject).url && (value as ImageSrcObject).width) {
196
+ srcSetArray.push(`${(value as ImageSrcObject).url} ${(value as ImageSrcObject).width}w`)
197
+ }
198
+ }
199
+ }
200
+ srcSet = srcSetArray.join(', ')
201
+ }
202
+ return srcSet
203
+ }
204
+ // Use with RelatedLinkBlock to retrieve the external link to use with an href prop
205
+ export const mixinGetExternalLink = (link: RelatedLinkObject): string | undefined => {
206
+ if (link.externalLink) {
207
+ return link.externalLink
208
+ } else if (link.document) {
209
+ return link.document.url
210
+ }
211
+ return undefined
212
+ }
213
+ // Gets the fully qualified canonical URL of the current page if passed $route.path string
214
+ export const mixinCanonicalUrl = (path: string): string => {
215
+ const domain = 'https://www.jpl.nasa.gov'
216
+ return domain + path
217
+ }
218
+ // Used to construct an array of image objects to use with BaseLightbox
219
+ // TODO: currently only assembles an array of 1 item (single image lightbox).
220
+ // This will need to be modified to work for image gallery lightbox (multiple items)
221
+ export const mixinLightboxItems = (
222
+ image: BaseImageObject,
223
+ title: string
224
+ ): lightboxObject[] | false => {
225
+ // check for image original src url at minimum
226
+ if (image && image.original) {
227
+ let theTitle = image.title
228
+ if (title) {
229
+ theTitle = title
230
+ }
231
+ // kind of a hacky way to ensure the credit only shows up if there isn't a detailUrl link
232
+ let theCredit = image.credit
233
+ if (image.detailUrl) {
234
+ theCredit = ''
235
+ }
236
+ return [
237
+ {
238
+ title: theTitle,
239
+ url: image.original,
240
+ detailUrl: image.detailUrl,
241
+ credit: theCredit
242
+ }
243
+ ]
244
+ }
245
+ return false
246
+ }
247
+
248
+ export const mixinLightboxGalleryItems = (items: object | any): object | false => {
249
+ const res = []
250
+ const itemsArr: Array<object> = Object.keys(items).map(
251
+ (key: string): lightboxGalleryObject => items[key]
252
+ )
253
+ if (items) {
254
+ for (const images of itemsArr) {
255
+ for (const image of Object.values(images)) {
256
+ if (image && image.original !== undefined) {
257
+ res.push({
258
+ title: image.title,
259
+ url: image.original,
260
+ detailUrl: image.detailUrl,
261
+ credit: image.credit
262
+ })
263
+ }
264
+ }
265
+ }
266
+ return res
267
+ } else {
268
+ return false
269
+ }
270
+ }
271
+
272
+ // return event dates for the red box that appears in the corner of the hero and thumbnail images
273
+ export const mixinFormatSplitEventDates = (
274
+ startDatetime: string,
275
+ endDatetime?: string
276
+ ): EventDateObject => {
277
+ const startDateDayjs = dayjs(startDatetime)
278
+
279
+ let day = startDateDayjs.format('D')
280
+ const monthAndYear = startDateDayjs.format('MMM YYYY')
281
+
282
+ if (endDatetime) {
283
+ const endDateDayjs = dayjs(endDatetime)
284
+
285
+ if (
286
+ startDateDayjs.format('MM') === endDateDayjs.format('MM') &&
287
+ startDateDayjs.format('ll') !== endDateDayjs.format('ll')
288
+ ) {
289
+ // If event spans multiple days within the same month, show both days
290
+ day = `${day}-${endDateDayjs.format('D')}`
291
+ }
292
+ // Otherwise, we only show the start date
293
+ }
294
+ return { day, monthAndYear }
295
+ }
296
+
297
+ // return event dates formatted for listing cards
298
+ export const mixinFormatEventDates = (startDatetime: string, endDatetime?: string): string => {
299
+ const startDateDayjs = dayjs(startDatetime)
300
+
301
+ let eventDate = startDateDayjs.format('ll')
302
+
303
+ if (endDatetime) {
304
+ const endDateDayjs = dayjs(endDatetime)
305
+
306
+ if (startDateDayjs.format('YYYY') !== endDateDayjs.format('YYYY')) {
307
+ // Event spans into another year
308
+ eventDate = `${startDateDayjs.format('ll')} - ${endDateDayjs.format('ll')}`
309
+ } else if (startDateDayjs.format('MM') !== endDateDayjs.format('MM')) {
310
+ // Event spans multiple months
311
+ eventDate = `${startDateDayjs.format('MMM D')} - ${endDateDayjs.format('ll')}`
312
+ } else if (
313
+ endDateDayjs.diff(startDateDayjs, 'hour') >= 24 &&
314
+ startDateDayjs.format('ll') !== endDateDayjs.format('ll')
315
+ ) {
316
+ // Event spans multiple days within a calendar month and is greater than 24 hours
317
+ eventDate = `${startDateDayjs.format('MMM D')}-${endDateDayjs.format(
318
+ 'D'
319
+ )}, ${startDateDayjs.format('YYYY')}`
320
+ }
321
+ }
322
+ return eventDate
323
+ }
324
+
325
+ export const mixinFormatEventTimeInHoursAndMinutes = (
326
+ startDatetime: string,
327
+ endDatetime?: string,
328
+ endTime?: string
329
+ ): string => {
330
+ // Only display time if event spans less than one day
331
+ const startDateDayjs = dayjs(startDatetime)
332
+ let time = ''
333
+
334
+ if (endDatetime) {
335
+ const endDateDayjs = dayjs(endDatetime)
336
+ if (
337
+ endDateDayjs.diff(startDateDayjs, 'hour') <= 24 &&
338
+ endDateDayjs.diff(startDateDayjs, 'day') === 0
339
+ ) {
340
+ // Event is less than 24 hours and spans 1 day
341
+ if (endTime) {
342
+ if (startDateDayjs.format('a') === endDateDayjs.format('a')) {
343
+ time = `${startDateDayjs.format('h:mm')}-${endDateDayjs.format('h:mm a z')}`
344
+ } else {
345
+ time = `${startDateDayjs.format('h:mm a')} - ${endDateDayjs.format('h:mm a z')}`
346
+ }
347
+ } else {
348
+ time = `${startDateDayjs.format('h:mm a z')}`
349
+ }
350
+ }
351
+ }
352
+ return time
353
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,24 @@
1
+ /*
2
+ ** TailwindCSS Configuration File
3
+ **
4
+ ** Docs: https://tailwindcss.com/docs/configuration
5
+ ** Default: https://github.com/tailwindcss/tailwindcss/blob/master/stubs/defaultConfig.stub.js
6
+ */
7
+
8
+ // import explorer 1's tailwind config
9
+ import explorer1Config from '@explorer-1/common/tailwind.config';
10
+
11
+ export default {
12
+ ...explorer1Config,
13
+ content: [
14
+ './index.html',
15
+ './src/App.vue',
16
+ './src/components/**/*.vue',
17
+ './.www-frontend_temp/components/!(_docs)/**/*.vue',
18
+ './.www-frontend_temp/layouts/**/*.vue',
19
+ './.www-frontend_temp/pages/**/*.vue',
20
+ './.www-frontend_temp/mixins/**/*.vue',
21
+ './.www-frontend_temp/plugins/**/*.js',
22
+ './.www-frontend_temp/nuxt.config.js',
23
+ ],
24
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "noEmit": true,
15
+ "jsx": "preserve",
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+
23
+ /* Custom */
24
+ "allowJs": true
25
+ },
26
+ "exclude": ["node_modules"],
27
+ "include": ["src/**/*"],
28
+ "references": [{ "path": "./tsconfig.node.json" }]
29
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true,
8
+ "strict": true
9
+ },
10
+ "include": ["vite.config.ts"]
11
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,55 @@
1
+ import { defineConfig } from 'vite'
2
+ import { resolve } from 'node:path'
3
+ import vue from '@vitejs/plugin-vue'
4
+ import dts from 'vite-plugin-dts'
5
+ import Components from 'unplugin-vue-components/vite'
6
+
7
+ // https://vitejs.dev/config/
8
+ export default defineConfig({
9
+ plugins: [
10
+ vue(),
11
+ dts({
12
+ insertTypesEntry: true
13
+ }),
14
+ Components({
15
+ dirs: ['./src/components', './src/templates']
16
+ })
17
+ ],
18
+ css: {
19
+ preprocessorOptions: {
20
+ scss: {
21
+ additionalData: `@import "@explorer-1/common/src/scss/_hover.scss";`
22
+ }
23
+ }
24
+ },
25
+ // build: {
26
+ // rollupOptions: {
27
+ // output: {
28
+ // assetFileNames: 'assets/[name].[ext]',
29
+ // entryFileNames: 'assets/[name].js',
30
+ // chunkFileNames: 'assets/[name].js'
31
+ // }
32
+ // }
33
+ // }
34
+ build: {
35
+ lib: {
36
+ // Could also be a dictionary or array of multiple entry points
37
+ entry: resolve(__dirname, 'lib/main.ts'),
38
+ name: 'Explorer1Vue',
39
+ // the proper extensions will be added
40
+ fileName: 'explorer-1-vue'
41
+ },
42
+ rollupOptions: {
43
+ // make sure to externalize deps that shouldn't be bundled
44
+ // into your library
45
+ external: ['vue', 'swiper', '@fancyapps/ui', 'dayjs', 'click-outside-vue3'],
46
+ output: {
47
+ // Provide global variables to use in the UMD build
48
+ // for externalized deps
49
+ globals: {
50
+ vue: 'Vue'
51
+ }
52
+ }
53
+ }
54
+ }
55
+ })