@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.
- package/LICENSE +21 -0
- package/README.md +9 -0
- package/components.d.ts +215 -0
- package/index.html +18 -0
- package/lib/main.ts +78 -0
- package/package.json +54 -0
- package/postcss.config.js +7 -0
- package/public/edu/.gitkeep +0 -0
- package/public/edu/explorer-1/bg-stars-edu.png +0 -0
- package/public/edu/explorer-1/bg-stars.jpg +0 -0
- package/public/explorer-1/bg-stars-edu.png +0 -0
- package/public/explorer-1/bg-stars.jpg +0 -0
- package/src/App.vue +30 -0
- package/src/assets/fonts/README.md +12 -0
- package/src/assets/fonts/archivo-narrow/ArchivoNarrow-Bold.woff2 +0 -0
- package/src/assets/fonts/archivo-narrow/ArchivoNarrow-BoldItalic.woff2 +0 -0
- package/src/assets/fonts/archivo-narrow/ArchivoNarrow-SemiBold.woff2 +0 -0
- package/src/assets/fonts/archivo-narrow/ArchivoNarrow-SemiBoldItalic.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-Bold.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-BoldItalic.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-ExtraBold.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-Medium.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-MediumItalic.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-Regular.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-RegularItalic.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-SemiBold.woff2 +0 -0
- package/src/assets/fonts/metropolis/Metropolis-SemiBoldItalic.woff2 +0 -0
- package/src/assets/scss/styles.scss +1 -0
- package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.stories.js +156 -0
- package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.vue +156 -0
- package/src/components/BackToTop/BackToTop.stories.js +24 -0
- package/src/components/BackToTop/BackToTop.vue +76 -0
- package/src/components/BaseAudio/BaseAudio.stories.js +29 -0
- package/src/components/BaseAudio/BaseAudio.vue +359 -0
- package/src/components/BaseButton/BaseButton.stories.ts +65 -0
- package/src/components/BaseButton/BaseButton.vue +114 -0
- package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.stories.mdx +68 -0
- package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.vue +101 -0
- package/src/components/BaseHeading/BaseHeading.stories.js +75 -0
- package/src/components/BaseHeading/BaseHeading.vue +58 -0
- package/src/components/BaseImage/BaseImage.stories.ts +52 -0
- package/src/components/BaseImage/BaseImage.vue +120 -0
- package/src/components/BaseImageCaption/BaseImageCaption.stories.js +27 -0
- package/src/components/BaseImageCaption/BaseImageCaption.vue +51 -0
- package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.stories.js +73 -0
- package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.vue +90 -0
- package/src/components/BaseLightboxCloseButton/BaseLightboxCloseButton.vue +45 -0
- package/src/components/BaseLightboxOpenButton/BaseLightboxOpenButton.vue +46 -0
- package/src/components/BaseLink/BaseLink.stories.js +47 -0
- package/src/components/BaseLink/BaseLink.vue +227 -0
- package/src/components/BaseModal/BaseModal.stories.js +90 -0
- package/src/components/BaseModal/BaseModal.vue +54 -0
- package/src/components/BaseModal/BaseModalDialog.vue +59 -0
- package/src/components/BasePlaceholder/BasePlaceholder.stories.js +29 -0
- package/src/components/BasePlaceholder/BasePlaceholder.vue +30 -0
- package/src/components/BaseRadioGroup/BaseRadioGroup.stories.mdx +68 -0
- package/src/components/BaseRadioGroup/BaseRadioGroup.vue +102 -0
- package/src/components/BaseSwimlane/BaseSwimlane.stories.mdx +64 -0
- package/src/components/BaseSwimlane/BaseSwimlane.vue +204 -0
- package/src/components/BaseTag/BaseTag.stories.js +34 -0
- package/src/components/BaseTag/BaseTag.vue +36 -0
- package/src/components/BaseTimer/BaseTimer.stories.js +78 -0
- package/src/components/BaseTimer/BaseTimer.test.js +15 -0
- package/src/components/BaseTimer/BaseTimer.vue +270 -0
- package/src/components/BaseUnitToggle/BaseUnitToggle.stories.js +86 -0
- package/src/components/BaseUnitToggle/BaseUnitToggle.test.js +26 -0
- package/src/components/BaseUnitToggle/BaseUnitToggle.vue +255 -0
- package/src/components/BaseVideo/BaseVideo.stories.js +31 -0
- package/src/components/BaseVideo/BaseVideo.vue +73 -0
- package/src/components/BlockAnchor/BlockAnchor.vue +38 -0
- package/src/components/BlockAudio/BlockAudio.stories.js +29 -0
- package/src/components/BlockAudio/BlockAudio.vue +78 -0
- package/src/components/BlockCard/BlockCard.stories.js +24 -0
- package/src/components/BlockCard/BlockCard.vue +88 -0
- package/src/components/BlockCardGroup/BlockCardGroup.stories.js +71 -0
- package/src/components/BlockCardGroup/BlockCardGroup.vue +61 -0
- package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +55 -0
- package/src/components/BlockCircleImageCard/BlockCircleImageCard.vue +120 -0
- package/src/components/BlockCta/BlockCta.stories.js +35 -0
- package/src/components/BlockCta/BlockCta.vue +55 -0
- package/src/components/BlockHeading/BlockHeading.stories.js +22 -0
- package/src/components/BlockHeading/BlockHeading.vue +27 -0
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.stories.js +40 -0
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +84 -0
- package/src/components/BlockImage/BlockImage.stories.js +137 -0
- package/src/components/BlockImage/BlockImage.vue +48 -0
- package/src/components/BlockImage/BlockImageFullBleed.vue +119 -0
- package/src/components/BlockImage/BlockImageStandard.vue +106 -0
- package/src/components/BlockImageCarousel/BlockImageCarousel.stories.js +108 -0
- package/src/components/BlockImageCarousel/BlockImageCarousel.vue +201 -0
- package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.stories.js +63 -0
- package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +120 -0
- package/src/components/BlockImageComparison/BlockImageComparison.stories.js +46 -0
- package/src/components/BlockImageComparison/BlockImageComparison.vue +59 -0
- package/src/components/BlockImageGallery/BlockImageGallery.stories.js +55 -0
- package/src/components/BlockImageGallery/BlockImageGallery.vue +128 -0
- package/src/components/BlockInlineImage/BlockInlineImage.stories.js +68 -0
- package/src/components/BlockInlineImage/BlockInlineImage.vue +124 -0
- package/src/components/BlockKeyPoints/BlockKeyPoints.stories.js +28 -0
- package/src/components/BlockKeyPoints/BlockKeyPoints.vue +48 -0
- package/src/components/BlockLinkCard/BlockLinkCard.stories.js +102 -0
- package/src/components/BlockLinkCard/BlockLinkCard.vue +197 -0
- package/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.js +217 -0
- package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +68 -0
- package/src/components/BlockLinkTile/BlockLinkTile.stories.js +72 -0
- package/src/components/BlockLinkTile/BlockLinkTile.vue +193 -0
- package/src/components/BlockListCards/BlockListCards.stories.js +69 -0
- package/src/components/BlockListCards/BlockListCards.vue +129 -0
- package/src/components/BlockQuote/BlockQuote.stories.js +84 -0
- package/src/components/BlockQuote/BlockQuote.vue +87 -0
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.stories.js +60 -0
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +77 -0
- package/src/components/BlockRelatedLinks/RelatedLink.vue +85 -0
- package/src/components/BlockStreamfield/BlockStreamfield.stories.js +88 -0
- package/src/components/BlockStreamfield/BlockStreamfield.vue +333 -0
- package/src/components/BlockTable/BlockTable.stories.js +20 -0
- package/src/components/BlockTable/BlockTable.vue +73 -0
- package/src/components/BlockTeaser/BlockTeaser.stories.js +74 -0
- package/src/components/BlockTeaser/BlockTeaser.test.js +12 -0
- package/src/components/BlockTeaser/BlockTeaser.vue +174 -0
- package/src/components/BlockText/BlockText.stories.js +21 -0
- package/src/components/BlockText/BlockText.vue +44 -0
- package/src/components/BlockTwitterEmbed/BlockTwitterEmbed.stories.js +19 -0
- package/src/components/BlockTwitterEmbed/BlockTwitterEmbed.vue +61 -0
- package/src/components/BlockVideo/BlockVideo.stories.js +23 -0
- package/src/components/BlockVideo/BlockVideo.vue +41 -0
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.stories.js +20 -0
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +71 -0
- package/src/components/CalendarButton/CalendarButton.stories.js +36 -0
- package/src/components/CalendarButton/CalendarButton.vue +86 -0
- package/src/components/DetailHeadline/DetailHeadline.stories.js +48 -0
- package/src/components/DetailHeadline/DetailHeadline.vue +143 -0
- package/src/components/DsnWidget/DsnWidget.stories.js +29 -0
- package/src/components/DsnWidget/DsnWidget.vue +96 -0
- package/src/components/EventCard/EventCard.vue +188 -0
- package/src/components/EventDetailHero/EventDetailHero.stories.js +53 -0
- package/src/components/EventDetailHero/EventDetailHero.vue +64 -0
- package/src/components/FormContact/FormContact.stories.js +16 -0
- package/src/components/FormContact/FormContact.vue +202 -0
- package/src/components/FormNewsletterSignup/FormNewsletterSignup.stories.js +16 -0
- package/src/components/FormNewsletterSignup/FormNewsletterSignup.vue +355 -0
- package/src/components/HeroLarge/HeroLarge.stories.js +46 -0
- package/src/components/HeroLarge/HeroLarge.vue +93 -0
- package/src/components/HeroListingIndex/HeroListingIndex.stories.js +156 -0
- package/src/components/HeroListingIndex/HeroListingIndex.vue +80 -0
- package/src/components/HeroMedia/HeroMedia.stories.js +135 -0
- package/src/components/HeroMedia/HeroMedia.vue +174 -0
- package/src/components/HeroMedium/HeroMedium.stories.js +73 -0
- package/src/components/HeroMedium/HeroMedium.vue +166 -0
- package/src/components/HomepageCarousel/HomepageCarousel.stories.js +112 -0
- package/src/components/HomepageCarousel/HomepageCarousel.vue +382 -0
- package/src/components/HomepageCarouselItem/HomepageCarouselItem.stories.js +60 -0
- package/src/components/HomepageCarouselItem/HomepageCarouselItem.vue +168 -0
- package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.js +35 -0
- package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.vue +39 -0
- package/src/components/HomepageFeaturedRobot/HomepageFeaturedRobot.stories.js +93 -0
- package/src/components/HomepageFeaturedRobot/HomepageFeaturedRobot.vue +129 -0
- package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.js +153 -0
- package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue +282 -0
- package/src/components/HomepageMissionsCarousel/HomepageMissionsCarouselItem.vue +143 -0
- package/src/components/HomepageStats/HomepageStats.stories.js +155 -0
- package/src/components/HomepageStats/HomepageStats.vue +362 -0
- package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.js +90 -0
- package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue +156 -0
- package/src/components/HomepageTeaserBlock/HomepageTeaserBlockCardImage.vue +58 -0
- package/src/components/Icons/Icon360.vue +29 -0
- package/src/components/Icons/IconArrow.vue +26 -0
- package/src/components/Icons/IconArrows.vue +43 -0
- package/src/components/Icons/IconAudio.vue +27 -0
- package/src/components/Icons/IconBook.vue +21 -0
- package/src/components/Icons/IconBookUser.vue +21 -0
- package/src/components/Icons/IconBriefcase.vue +21 -0
- package/src/components/Icons/IconCalendar.vue +25 -0
- package/src/components/Icons/IconCaret.vue +26 -0
- package/src/components/Icons/IconCheckbox.vue +26 -0
- package/src/components/Icons/IconCheckboxSelected.vue +35 -0
- package/src/components/Icons/IconClose.vue +27 -0
- package/src/components/Icons/IconCloseLightbox.vue +25 -0
- package/src/components/Icons/IconDownload.vue +31 -0
- package/src/components/Icons/IconDropdown.vue +25 -0
- package/src/components/Icons/IconEnvelope.vue +21 -0
- package/src/components/Icons/IconExpand.vue +28 -0
- package/src/components/Icons/IconExternal.vue +25 -0
- package/src/components/Icons/IconFilter.vue +25 -0
- package/src/components/Icons/IconForwardTen.vue +38 -0
- package/src/components/Icons/IconGrid.vue +25 -0
- package/src/components/Icons/IconHand.vue +21 -0
- package/src/components/Icons/IconInfo.vue +26 -0
- package/src/components/Icons/IconLink.vue +27 -0
- package/src/components/Icons/IconList.vue +25 -0
- package/src/components/Icons/IconLocation.vue +37 -0
- package/src/components/Icons/IconMagnifyingGlass.vue +21 -0
- package/src/components/Icons/IconMedal.vue +21 -0
- package/src/components/Icons/IconMenu.vue +27 -0
- package/src/components/Icons/IconMinus.vue +26 -0
- package/src/components/Icons/IconMute.vue +27 -0
- package/src/components/Icons/IconNext.vue +25 -0
- package/src/components/Icons/IconPause.vue +28 -0
- package/src/components/Icons/IconPlay.vue +28 -0
- package/src/components/Icons/IconPlus.vue +25 -0
- package/src/components/Icons/IconPrev.vue +25 -0
- package/src/components/Icons/IconRewindTen.vue +42 -0
- package/src/components/Icons/IconSearch.vue +25 -0
- package/src/components/Icons/IconShare.vue +30 -0
- package/src/components/Icons/IconSlideshow.vue +30 -0
- package/src/components/Icons/IconSocialEmail.vue +26 -0
- package/src/components/Icons/IconSocialFacebook.vue +26 -0
- package/src/components/Icons/IconSocialGoogleClassroom.vue +26 -0
- package/src/components/Icons/IconSocialInstagram.vue +35 -0
- package/src/components/Icons/IconSocialPinterest.vue +26 -0
- package/src/components/Icons/IconSocialReddit.vue +25 -0
- package/src/components/Icons/IconSocialTwitter.vue +25 -0
- package/src/components/Icons/IconSocialYoutube.vue +35 -0
- package/src/components/Icons/IconStop.vue +27 -0
- package/src/components/Icons/IconTime.vue +25 -0
- package/src/components/Icons/IconUniversity.vue +21 -0
- package/src/components/Icons/IconUser.vue +26 -0
- package/src/components/Icons/IconVolume.vue +27 -0
- package/src/components/Icons/Icons.stories.ts +440 -0
- package/src/components/ImageDetailContextImage/ImageDetailContextImage.vue +125 -0
- package/src/components/LayoutHelper/LayoutHelper.vue +38 -0
- package/src/components/LoadingTransition/LoadingTransition.vue +48 -0
- package/src/components/LogoCaltech/LogoCaltech.stories.js +39 -0
- package/src/components/LogoCaltech/LogoCaltech.vue +29 -0
- package/src/components/LogoTribrand/LogoTribrand.stories.js +76 -0
- package/src/components/LogoTribrand/LogoTribrand.vue +93 -0
- package/src/components/MissionDetailAbout/MissionDetailAbout.stories.js +70 -0
- package/src/components/MissionDetailAbout/MissionDetailAbout.vue +204 -0
- package/src/components/MissionDetailHero/MissionDetailHero.stories.js +303 -0
- package/src/components/MissionDetailHero/MissionDetailHero.vue +292 -0
- package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +278 -0
- package/src/components/MissionDetailHighlights/MissionDetailHighlights.vue +332 -0
- package/src/components/MissionDetailHighlights/MissionDetailHighlightsCarousel.vue +160 -0
- package/src/components/MissionDetailHighlights/MissionDetailHighlightsCarouselItem.vue +123 -0
- package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.stories.js +43 -0
- package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.vue +97 -0
- package/src/components/MissionDetailStats/DistanceStats.test.js +133 -0
- package/src/components/MissionDetailStats/DistanceStats.vue +250 -0
- package/src/components/MissionDetailStats/MissionDetailStats.stories.js +95 -0
- package/src/components/MissionDetailStats/MissionDetailStats.test.js +23 -0
- package/src/components/MissionDetailStats/MissionDetailStats.vue +187 -0
- package/src/components/MissionDetailStats/MissionDetailStatsMicro.vue +52 -0
- package/src/components/MissionDetailStats/MissionDetailStatsMini.vue +109 -0
- package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.stories.js +55 -0
- package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.vue +95 -0
- package/src/components/MixinAnimationCaret/MixinAnimationCaret.stories.ts +24 -0
- package/src/components/MixinAnimationCaret/MixinAnimationCaret.vue +81 -0
- package/src/components/MixinCarousel/MixinCarousel.docs.mdx +33 -0
- package/src/components/MixinCarousel/MixinCarousel.stories.js +53 -0
- package/src/components/MixinCarousel/MixinCarousel.vue +236 -0
- package/src/components/MixinDropdownToggle/MixinDropdownToggle.vue +53 -0
- package/src/components/MixinFancybox/MixinFancybox.vue +405 -0
- package/src/components/MixinFancybox/MixinFancyboxOpenButton.vue +35 -0
- package/src/components/MixinVideoBg/MixinVideoBg.stories.js +23 -0
- package/src/components/MixinVideoBg/MixinVideoBg.vue +39 -0
- package/src/components/NavDesktop/NavDesktop.stories.js +254 -0
- package/src/components/NavDesktop/NavDesktop.vue +355 -0
- package/src/components/NavDesktop/NavDesktopDropdown.vue +201 -0
- package/src/components/NavDesktop/NavDesktopDropdownContent.vue +87 -0
- package/src/components/NavDesktop/NavDesktopDropdownMore.vue +112 -0
- package/src/components/NavDesktop/NavDesktopTopHat.vue +56 -0
- package/src/components/NavHeading/NavHeading.stories.js +23 -0
- package/src/components/NavHeading/NavHeading.vue +40 -0
- package/src/components/NavHighlight/NavHighlight.stories.js +42 -0
- package/src/components/NavHighlight/NavHighlight.vue +67 -0
- package/src/components/NavLinkList/NavLinkList.stories.js +46 -0
- package/src/components/NavLinkList/NavLinkList.vue +66 -0
- package/src/components/NavLogoLinks/NavLogoLinks.stories.js +22 -0
- package/src/components/NavLogoLinks/NavLogoLinks.vue +57 -0
- package/src/components/NavMobile/NavMobile.stories.js +231 -0
- package/src/components/NavMobile/NavMobile.vue +280 -0
- package/src/components/NavMobile/NavMobileDropdown.vue +175 -0
- package/src/components/NavMobile/NavMobileLink.vue +69 -0
- package/src/components/NavMobile/NavMobileSecondaryDropdown.vue +124 -0
- package/src/components/NavSearchForm/NavSearchForm.stories.js +13 -0
- package/src/components/NavSearchForm/NavSearchForm.vue +102 -0
- package/src/components/NavSecondary/NavSecondary.stories.js +24 -0
- package/src/components/NavSecondary/NavSecondary.vue +191 -0
- package/src/components/NavSecondary/NavSecondaryDropdown.vue +181 -0
- package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +140 -0
- package/src/components/NavSecondary/NavSecondaryLink.vue +62 -0
- package/src/components/NavSocial/NavSocial.stories.js +20 -0
- package/src/components/NavSocial/NavSocial.vue +97 -0
- package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.stories.js +60 -0
- package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.test.js +30 -0
- package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.vue +73 -0
- package/src/components/ParallaxContainer/ParallaxContainer.stories.js +47 -0
- package/src/components/ParallaxContainer/ParallaxContainer.vue +76 -0
- package/src/components/ParallaxElement/ParallaxElement.vue +25 -0
- package/src/components/PastEventsCarousel/PastEventsCarousel.vue +86 -0
- package/src/components/PodcastEpisodeCard/PodcastEpisodeCard.vue +251 -0
- package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.stories.js +235 -0
- package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.vue +171 -0
- package/src/components/ProfileDetailSectionGroup/ProfileDetailSectionGroup.vue +84 -0
- package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +97 -0
- package/src/components/RoboticsDetailStats/RoboticsDetailStats.test.js +21 -0
- package/src/components/RoboticsDetailStats/RoboticsDetailStats.vue +217 -0
- package/src/components/RoboticsDetailStats/RoboticsDetailStatsMini.vue +182 -0
- package/src/components/SearchFilterGroup/SearchFilterGroup.stories.js +59 -0
- package/src/components/SearchFilterGroup/SearchFilterGroup.vue +221 -0
- package/src/components/SearchInput/SearchInput.stories.js +35 -0
- package/src/components/SearchInput/SearchInput.vue +93 -0
- package/src/components/SearchPagination/SearchPagination.stories.js +55 -0
- package/src/components/SearchPagination/SearchPagination.vue +173 -0
- package/src/components/SearchResultCard/SearchResultCard.stories.js +57 -0
- package/src/components/SearchResultCard/SearchResultCard.vue +282 -0
- package/src/components/SearchResultGridItem/SearchResultGridItem.stories.js +70 -0
- package/src/components/SearchResultGridItem/SearchResultGridItem.vue +140 -0
- package/src/components/SearchResultsList/SearchResultsList.vue +183 -0
- package/src/components/SearchSelectMenu/SearchSelectMenu.stories.js +25 -0
- package/src/components/SearchSelectMenu/SearchSelectMenu.vue +86 -0
- package/src/components/ShareButtons/ShareButtons.stories.js +16 -0
- package/src/components/ShareButtons/ShareButtons.vue +132 -0
- package/src/components/ShareButtonsEdu/ShareButtonsEdu.stories.js +14 -0
- package/src/components/ShareButtonsEdu/ShareButtonsEdu.vue +215 -0
- package/src/components/SkipLink/SkipLink.stories.js +9 -0
- package/src/components/SkipLink/SkipLink.vue +53 -0
- package/src/components/SwimlaneCTA/SwimlaneCTA.stories.mdx +77 -0
- package/src/components/SwimlaneCTA/SwimlaneCTA.vue +281 -0
- package/src/components/TheFooter/TheFooter.stories.js +602 -0
- package/src/components/TheFooter/TheFooter.vue +228 -0
- package/src/components/TheFooter/TheFooterSignUp.vue +61 -0
- package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +106 -0
- package/src/components/ThumbnailCarousel/ThumbnailCarousel.vue +76 -0
- package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.stories.js +93 -0
- package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.vue +68 -0
- package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.stories.js +38 -0
- package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.vue +104 -0
- package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.js +84 -0
- package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.vue +112 -0
- package/src/components/TopicDetailMore/TopicDetailMore.stories.js +221 -0
- package/src/components/TopicDetailMore/TopicDetailMore.vue +124 -0
- package/src/components/TopicDetailMore/TopicDetailMoreVisibility.vue +51 -0
- package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.stories.js +116 -0
- package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.vue +130 -0
- package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.js +34 -0
- package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.vue +98 -0
- package/src/components/YearTicker/YearTicker.stories.js +37 -0
- package/src/components/YearTicker/YearTicker.vue +132 -0
- package/src/docs/foundation/DynamicTokens.vue +106 -0
- package/src/docs/foundation/FontVariants.vue +80 -0
- package/src/docs/foundation/color.docs.mdx +112 -0
- package/src/docs/foundation/grid.docs.mdx +189 -0
- package/src/docs/foundation/grid.stories.js +263 -0
- package/src/docs/foundation/grid_layouthelpers.docs.mdx +78 -0
- package/src/docs/foundation/grid_layouthelpers.stories.js +53 -0
- package/src/docs/foundation/themes.docs.mdx +71 -0
- package/src/docs/foundation/themes.stories.js +63 -0
- package/src/docs/foundation/typography.docs.mdx +50 -0
- package/src/docs/foundation/typography.stories.js +119 -0
- package/src/interfaces.ts +129 -0
- package/src/main.ts +34 -0
- package/src/store/header.ts +40 -0
- package/src/store/theme.ts +27 -0
- package/src/templates/PageContent/PageContent.stories.js +92 -0
- package/src/templates/PageContent/PageContent.vue +140 -0
- package/src/templates/PageEventDetail/PageEventDetail.stories.js +104 -0
- package/src/templates/PageEventDetail/PageEventDetail.vue +358 -0
- package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +158 -0
- package/src/templates/PageNewsDetail/PageNewsDetail.vue +242 -0
- package/src/templates/edu/PageEduNewsDetail.stories.js +64 -0
- package/src/templates/edu/PageEduNewsDetail.vue +155 -0
- package/src/templates/www/HomePage/HomePage.vue +30 -0
- package/src/utils/dayjs.js +32 -0
- package/src/utils/filters.js +33 -0
- package/src/utils/mixins.ts +353 -0
- package/src/vite-env.d.ts +1 -0
- package/tailwind.config.js +24 -0
- package/tsconfig.json +29 -0
- package/tsconfig.node.json +11 -0
- package/vite.config.ts +55 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Meta, Story, Canvas } from '@storybook/blocks'
|
|
2
|
+
import * as Stories from './grid_layouthelpers.stories'
|
|
3
|
+
|
|
4
|
+
<Meta of={Stories} />
|
|
5
|
+
|
|
6
|
+
# Column Layout helpers
|
|
7
|
+
|
|
8
|
+
Sometimes you may want to use a few common column indentations in your layouts for blocks on your page. Explorer 1 provides a few helper classes to aid in quickly creating these indented blocks. These helper classes also include responsive fallbacks.
|
|
9
|
+
|
|
10
|
+
## .indent-col-base
|
|
11
|
+
|
|
12
|
+
`.indent-col-base` is the **base class that you must add to any element that will use additional helper classes covered in this documentation**. Its immediate parent must be `.BaseGrid` (or any 12-column grid). It sets the width to start at the first column and end after the last column, i.e. full width.
|
|
13
|
+
|
|
14
|
+
```css
|
|
15
|
+
.indent-col-base {
|
|
16
|
+
@apply col-start-1 col-end-13; // full width of 12 grid container
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
<Canvas
|
|
21
|
+
className="sbdocs-preview-full-width"
|
|
22
|
+
of={Stories.BaseWidth}
|
|
23
|
+
/>
|
|
24
|
+
|
|
25
|
+
## .indent-col-2
|
|
26
|
+
|
|
27
|
+
`.indent-col-2` adds to `.indent-col-base` by overriding the `col-start` and `col-end` for `lg` screens to indent content to the **second** column.
|
|
28
|
+
|
|
29
|
+
```css
|
|
30
|
+
.indent-col-2 {
|
|
31
|
+
@screen lg {
|
|
32
|
+
@apply col-start-2 col-end-12;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
<Canvas
|
|
38
|
+
className="sbdocs-preview-full-width"
|
|
39
|
+
of={Stories.ColTwoStart}
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
## .indent-col-3
|
|
43
|
+
|
|
44
|
+
`.indent-col-3` adds to `.indent-col-base` by overriding the `col-start` and `col-end` for `lg` screens to indent content to the **third** column.
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
.indent-col-3 {
|
|
48
|
+
@screen lg {
|
|
49
|
+
@apply col-start-3 col-end-11;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
<Canvas
|
|
55
|
+
className="sbdocs-preview-full-width"
|
|
56
|
+
of={Stories.ColThreeStart}
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
## .indent-col-4
|
|
60
|
+
|
|
61
|
+
`.indent-col-4` adds to `.indent-col-base` by overriding the `col-start` and `col-end` for `lg` screens to indent content to the **fourth** column, and at `md` screens to the **third** column.
|
|
62
|
+
|
|
63
|
+
```css
|
|
64
|
+
.indent-col-4 {
|
|
65
|
+
@screen md {
|
|
66
|
+
@apply col-start-3 col-end-11;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@screen lg {
|
|
70
|
+
@apply col-start-4 col-end-10;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<Canvas
|
|
76
|
+
className="sbdocs-preview-full-width"
|
|
77
|
+
of={Stories.ColFourStart}
|
|
78
|
+
/>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import LayoutHelper, { indents } from '@explorer-1/vue/src/components/LayoutHelper/LayoutHelper.vue'
|
|
2
|
+
|
|
3
|
+
// TODO: DOCS: update this to match the full grid/layout documentation
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Foundation/Grid and Layout/Column Layout Helpers',
|
|
7
|
+
component: LayoutHelper,
|
|
8
|
+
tags: ['!autodocs'],
|
|
9
|
+
argTypes: {
|
|
10
|
+
indent: {
|
|
11
|
+
control: { type: 'select' },
|
|
12
|
+
options: Object.keys(indents)
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
parameters: {
|
|
16
|
+
html: {
|
|
17
|
+
root: '#storyDecorator'
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
decorators: [
|
|
21
|
+
() => ({
|
|
22
|
+
template: `<div id="storyDecorator" class="container mx-auto border border-black"><story/></div>`
|
|
23
|
+
})
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const LayoutHelperTemplate = (args) => ({
|
|
28
|
+
components: { LayoutHelper },
|
|
29
|
+
setup() {
|
|
30
|
+
return { args }
|
|
31
|
+
},
|
|
32
|
+
template: `<LayoutHelper v-bind="args"><div class="w-full text-white bg-black py-10 px-2">Indent starts at <code>{{args}}</code></div></LayoutHelper>`
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
export const BaseWidth = LayoutHelperTemplate.bind({})
|
|
36
|
+
BaseWidth.args = {
|
|
37
|
+
indent: 'col-1'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const ColTwoStart = LayoutHelperTemplate.bind({})
|
|
41
|
+
ColTwoStart.args = {
|
|
42
|
+
indent: 'col-2'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const ColThreeStart = LayoutHelperTemplate.bind({})
|
|
46
|
+
ColThreeStart.args = {
|
|
47
|
+
indent: 'col-3'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const ColFourStart = LayoutHelperTemplate.bind({})
|
|
51
|
+
ColFourStart.args = {
|
|
52
|
+
indent: 'col-4'
|
|
53
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Meta, Story, Canvas } from '@storybook/blocks'
|
|
2
|
+
import * as Stories from './themes.stories'
|
|
3
|
+
|
|
4
|
+
<Meta of={Stories} />
|
|
5
|
+
|
|
6
|
+
# Themes
|
|
7
|
+
|
|
8
|
+
Throughout this storybook, you can use the Theme and Variant selectors in the Storybook toolbar to preview components in different theme configurations.
|
|
9
|
+
|
|
10
|
+
**Note:** some documentation pages use iframes to display components, which ignores the theme switcher. Thus, for the most accurate representation of the internal theme, we recommend viewing the story in isolation.
|
|
11
|
+
|
|
12
|
+
## Dynamic color tokens
|
|
13
|
+
|
|
14
|
+
There are dynamic color tokens in place that use a semantic name instead of a specific color name. These tokens are use strategically in components to support multiple themes.
|
|
15
|
+
|
|
16
|
+
Changing the Theme and Variant to see how the dynamic tokens change.
|
|
17
|
+
|
|
18
|
+
<Canvas of={Stories.DynamicTokenStory} />
|
|
19
|
+
|
|
20
|
+
## Light & Dark Variants
|
|
21
|
+
|
|
22
|
+
`.ThemeVariantLight` and `.ThemeVariantDark` in Explorer 1 are theme variants. Note that not all components support these variants.
|
|
23
|
+
|
|
24
|
+
### Key Points
|
|
25
|
+
|
|
26
|
+
- `defaultTheme` and `ThemeVariantLight` are the defaults
|
|
27
|
+
- It is recommended that page templates always include the default variant.
|
|
28
|
+
|
|
29
|
+
### Contributing developers: Writing light/dark theme styles for components
|
|
30
|
+
|
|
31
|
+
For components that have light and dark themes, add theme rules to the end of your scss. The following is an example of a component whose background should be `bg-white` by default and in `ThemeVariantLight` but `bg-black` in `ThemeVariantDark`
|
|
32
|
+
|
|
33
|
+
```scss
|
|
34
|
+
.MyComponent {
|
|
35
|
+
// set the default background color
|
|
36
|
+
@apply bg-white;
|
|
37
|
+
// set the ThemeVariantDark background color
|
|
38
|
+
.ThemeVariantDark & {
|
|
39
|
+
@apply bg-black;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Adaptive Text Colors
|
|
45
|
+
|
|
46
|
+
Usage of `.text-action` vs `.text-action` in the context of `.ThemeVariantLight` and `.ThemeVariantDark` ensures that the contrast of the text color is sufficient against the background color. These adaptive text colors are supported by all themes.
|
|
47
|
+
|
|
48
|
+
### Definition (excerpt)
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
.text-action {
|
|
52
|
+
@apply text-action;
|
|
53
|
+
.ThemeVariantDark & {
|
|
54
|
+
@apply text-action-light;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
.text-action-hover {
|
|
58
|
+
@apply text-action-dark;
|
|
59
|
+
.ThemeVariantDark & {
|
|
60
|
+
@apply text-action;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Usage
|
|
66
|
+
|
|
67
|
+
Try changing the Theme and Variant while viewing the examples below. Notice how there are slight changes in color between the Dark and Light variants.
|
|
68
|
+
|
|
69
|
+
<Canvas of={Stories.AdaptiveText} />
|
|
70
|
+
|
|
71
|
+
See [BaseLink](?path=/docs/components-base-baselink--docs) for a real usage example.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import DynamicTokens from './DynamicTokens.vue'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Foundation/Themes',
|
|
5
|
+
component: DynamicTokens,
|
|
6
|
+
tags: ['!autodocs']
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const DynamicTokenStory = {
|
|
10
|
+
name: 'Dynamic Tokens',
|
|
11
|
+
args: {}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const InternalTemplate = `<div>
|
|
15
|
+
<div class="ThemeInternal">
|
|
16
|
+
<!-- BaseLink -->
|
|
17
|
+
<div>
|
|
18
|
+
<a
|
|
19
|
+
class="group cursor-pointer -default underline text-action can-hover:hover:text-action-hover"
|
|
20
|
+
>
|
|
21
|
+
Internal Theme: BaseLink
|
|
22
|
+
</a>
|
|
23
|
+
</div>
|
|
24
|
+
<!-- /BaseLink -->
|
|
25
|
+
</div>
|
|
26
|
+
<div>
|
|
27
|
+
<!-- BaseLink -->
|
|
28
|
+
<div>
|
|
29
|
+
<a
|
|
30
|
+
class="group cursor-pointer -default underline text-action can-hover:hover:text-action-hover"
|
|
31
|
+
>
|
|
32
|
+
Default Theme: BaseLink
|
|
33
|
+
</a>
|
|
34
|
+
</div>
|
|
35
|
+
<!-- /BaseLink -->
|
|
36
|
+
</div>
|
|
37
|
+
</div>`
|
|
38
|
+
|
|
39
|
+
export const Internal = {
|
|
40
|
+
args: {},
|
|
41
|
+
render: (args) => ({
|
|
42
|
+
setup() {
|
|
43
|
+
return { args }
|
|
44
|
+
},
|
|
45
|
+
template: InternalTemplate
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const AdaptiveTextTemplate = `<p class="p-4">
|
|
50
|
+
<a class="cursor-pointer font-bold text-action can-hover:hover:text-action-hover">
|
|
51
|
+
Lorem ipsum dolor sit amet
|
|
52
|
+
</a>
|
|
53
|
+
</p>`
|
|
54
|
+
|
|
55
|
+
export const AdaptiveText = {
|
|
56
|
+
args: {},
|
|
57
|
+
render: (args) => ({
|
|
58
|
+
setup() {
|
|
59
|
+
return { args }
|
|
60
|
+
},
|
|
61
|
+
template: AdaptiveTextTemplate
|
|
62
|
+
})
|
|
63
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Meta, Story, Canvas } from '@storybook/blocks'
|
|
2
|
+
import * as Stories from './typography.stories'
|
|
3
|
+
|
|
4
|
+
<Meta of={Stories} />
|
|
5
|
+
|
|
6
|
+
# Typography
|
|
7
|
+
|
|
8
|
+
## Fonts
|
|
9
|
+
|
|
10
|
+
Below are all fonts used in the design system.
|
|
11
|
+
|
|
12
|
+
### Metropolis
|
|
13
|
+
|
|
14
|
+
Metropolis is used for all heading levels and body copy.
|
|
15
|
+
|
|
16
|
+
### Archivo Narrow
|
|
17
|
+
|
|
18
|
+
Archivo Narrow is used for subtitles and buttons and is always used in UPPERCASE.
|
|
19
|
+
|
|
20
|
+
<Canvas of={Stories.Fonts} />
|
|
21
|
+
|
|
22
|
+
## Text Colors
|
|
23
|
+
|
|
24
|
+
Here are colors intended for text, depending on the background. **Note:** Some of these colors will not pass contrast requirements if used on a different background.
|
|
25
|
+
|
|
26
|
+
<Canvas of={Stories.TextColors} />
|
|
27
|
+
|
|
28
|
+
## Text Styles
|
|
29
|
+
|
|
30
|
+
All of the text styles used across the project, each with its reusable component class.
|
|
31
|
+
Prefer reusing those classes over individual utility classes, as each text style has different properties between desktop and mobile viewports.
|
|
32
|
+
|
|
33
|
+
Note:
|
|
34
|
+
|
|
35
|
+
- All heading levels also have the corresponding text styles directly applied for convenience.
|
|
36
|
+
- This can still be overridden by adding another relevant class.
|
|
37
|
+
|
|
38
|
+
<Canvas of={Stories.TextStyles} />
|
|
39
|
+
|
|
40
|
+
### Heading Icons
|
|
41
|
+
|
|
42
|
+
We can also add icons next to the headings.
|
|
43
|
+
|
|
44
|
+
<Canvas of={Stories.HeadingIcons} />
|
|
45
|
+
|
|
46
|
+
## Text Contrast
|
|
47
|
+
|
|
48
|
+
In areas where text overlays an image, use this `.text-contrast` class in conjunction with a semi-transparent overlay (ex. `bg-black/*`) to improve readability. `.text-contrast` also works with tailwind breakpoints.
|
|
49
|
+
|
|
50
|
+
<Canvas of={Stories.TextContrast} />
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import FontVariants from './FontVariants.vue'
|
|
2
|
+
import IconLocation from './../../components/Icons/IconLocation.vue'
|
|
3
|
+
import BaseHeading from './../../components/BaseHeading/BaseHeading.vue'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Foundation/Typography',
|
|
7
|
+
component: FontVariants,
|
|
8
|
+
subcomponents: { BaseHeading, IconLocation },
|
|
9
|
+
tags: ['!autodocs']
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const Fonts = {
|
|
13
|
+
args: {}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const TextColors = {
|
|
17
|
+
args: {},
|
|
18
|
+
render: () => ({
|
|
19
|
+
template: `<div>
|
|
20
|
+
<div class="md:grid-cols-3 inline-grid gap-4 p-8 mt-8 bg-white">
|
|
21
|
+
<div>
|
|
22
|
+
<div class="bg-gray-dark w-16 h-8"></div>
|
|
23
|
+
<code class="text-gray-dark">.text-gray-dark</code>
|
|
24
|
+
</div>
|
|
25
|
+
<div>
|
|
26
|
+
<div class="bg-gray-mid-dark w-16 h-8"></div>
|
|
27
|
+
<code class="text-gray-mid-dark">.text-gray-mid-dark</code>
|
|
28
|
+
</div>
|
|
29
|
+
<div>
|
|
30
|
+
<div class="bg-jpl-red w-16 h-8"></div>
|
|
31
|
+
<code class="text-jpl-red">.text-jpl-red</code>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="inline-grid grid-cols-3 gap-4 p-8 bg-black">
|
|
35
|
+
<div>
|
|
36
|
+
<div class="w-16 h-8 bg-white"></div>
|
|
37
|
+
<code class="text-white">.text-white</code>
|
|
38
|
+
</div>
|
|
39
|
+
<div>
|
|
40
|
+
<div class="bg-gray-mid w-16 h-8"></div>
|
|
41
|
+
<code class="text-gray-mid">.text-gray-mid</code>
|
|
42
|
+
</div>
|
|
43
|
+
<div>
|
|
44
|
+
<div class="bg-jpl-red-light w-16 h-8"></div>
|
|
45
|
+
<code class="text-jpl-red-light">.text-jpl-red-light</code>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>`
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const TextStyles = {
|
|
53
|
+
args: {},
|
|
54
|
+
render: () => ({
|
|
55
|
+
template: `<div>
|
|
56
|
+
<p class="text-h1-alt mt-8">Header H1 Alt</p>
|
|
57
|
+
<code>.text-h1-alt</code>
|
|
58
|
+
<p class="text-h1 mt-8">Header H1</p>
|
|
59
|
+
<code>h1, .text-h1</code>
|
|
60
|
+
<p class="text-h2 mt-8">Header H2</p>
|
|
61
|
+
<code>h2, .text-h2</code>
|
|
62
|
+
<p class="text-h3 mt-8">Header H3</p>
|
|
63
|
+
<code>h3, .text-h3</code>
|
|
64
|
+
<p class="text-h4 mt-8">Header H4</p>
|
|
65
|
+
<code>h4, .text-h4</code>
|
|
66
|
+
<p class="text-h5 mt-8">Header H5</p>
|
|
67
|
+
<code>h5, .text-h5</code>
|
|
68
|
+
<p class="text-h6 mt-8">Header H6</p>
|
|
69
|
+
<code>h6, .text-h6</code>
|
|
70
|
+
<p class="text-subtitle mt-8">Subtitle</p>
|
|
71
|
+
<code>.text-subtitle</code>
|
|
72
|
+
<p class="text-body-lg mt-8">Body large</p>
|
|
73
|
+
<code>.text-body-lg</code>
|
|
74
|
+
<p class="text-body-md mt-8">Body medium</p>
|
|
75
|
+
<code>.text-body-md</code>
|
|
76
|
+
<p class="text-body-sm mt-8">Body small</p>
|
|
77
|
+
<code>.text-body-sm</code>
|
|
78
|
+
<p class="text-body-xs mt-8">Body extra small</p>
|
|
79
|
+
<code>.text-body-xs</code>
|
|
80
|
+
<p class="mt-8"><mark>Highlighted text</mark></p>
|
|
81
|
+
<code>mark</code>
|
|
82
|
+
</div>`
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export const HeadingIcons = {
|
|
87
|
+
argTypes: {
|
|
88
|
+
size: {
|
|
89
|
+
type: { name: 'string', required: true },
|
|
90
|
+
control: { type: 'select' },
|
|
91
|
+
options: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
args: {
|
|
95
|
+
size: 'h1'
|
|
96
|
+
},
|
|
97
|
+
render: (args) => ({
|
|
98
|
+
components: { BaseHeading, IconLocation },
|
|
99
|
+
setup() {
|
|
100
|
+
return { args }
|
|
101
|
+
},
|
|
102
|
+
template: `<div>
|
|
103
|
+
<BaseHeading v-bind="args"><IconLocation class="inline" /> Heading H1</BaseHeading>
|
|
104
|
+
</div>`
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export const TextContrast = {
|
|
109
|
+
args: {},
|
|
110
|
+
render: () => ({
|
|
111
|
+
template: `<div style="background-image: url(/explorer-1/bg-stars.jpg); background-color: #000;" class="bg-cover bg-no-repeat bg-center">
|
|
112
|
+
<div class="p-10 bg-black/30">
|
|
113
|
+
<span class="text-h3 text-white text-contrast">
|
|
114
|
+
This text uses a text shadow that increases readability when used with a semi-transparent overlay.
|
|
115
|
+
</span>
|
|
116
|
+
</div>
|
|
117
|
+
</div>`
|
|
118
|
+
})
|
|
119
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export interface BreadcrumbPathObject {
|
|
2
|
+
path: string
|
|
3
|
+
title: string
|
|
4
|
+
children: any[]
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface BlockData {
|
|
8
|
+
blockType: string
|
|
9
|
+
}
|
|
10
|
+
export interface ImageSrcObject {
|
|
11
|
+
url: string
|
|
12
|
+
width: number
|
|
13
|
+
height: number
|
|
14
|
+
}
|
|
15
|
+
export interface ThumbnailObject {
|
|
16
|
+
original: string
|
|
17
|
+
width: number
|
|
18
|
+
height: number
|
|
19
|
+
}
|
|
20
|
+
export interface ImageObject {
|
|
21
|
+
title?: string
|
|
22
|
+
src: ImageSrcObject
|
|
23
|
+
srcCropped: ImageSrcObject
|
|
24
|
+
screenXs?: Partial<ImageSrcObject>
|
|
25
|
+
screenSm?: Partial<ImageSrcObject>
|
|
26
|
+
screenMd?: Partial<ImageSrcObject>
|
|
27
|
+
screenLg?: Partial<ImageSrcObject>
|
|
28
|
+
screenXL?: Partial<ImageSrcObject>
|
|
29
|
+
screenThreexl?: Partial<ImageSrcObject>
|
|
30
|
+
srcSet?: string
|
|
31
|
+
alt?: string
|
|
32
|
+
original?: string
|
|
33
|
+
caption?: string
|
|
34
|
+
credit?: string
|
|
35
|
+
detailUrl?: string
|
|
36
|
+
cover?: string
|
|
37
|
+
image?: ImageObject
|
|
38
|
+
displayCaption?: boolean
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ImageBlock extends BlockData, ImageObject {}
|
|
42
|
+
|
|
43
|
+
export interface ElasticSearchPage {
|
|
44
|
+
id: string | number
|
|
45
|
+
content_type: string
|
|
46
|
+
url: string
|
|
47
|
+
type: string
|
|
48
|
+
topic: string
|
|
49
|
+
image: string | any
|
|
50
|
+
date: string
|
|
51
|
+
startDate: string
|
|
52
|
+
endDate: string
|
|
53
|
+
startTime: string
|
|
54
|
+
endTime: string
|
|
55
|
+
location: string
|
|
56
|
+
title: string
|
|
57
|
+
summary: string
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface FormOption {
|
|
61
|
+
id: string
|
|
62
|
+
name: string
|
|
63
|
+
alt: string
|
|
64
|
+
value: string
|
|
65
|
+
text: string
|
|
66
|
+
title: string
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface Card {
|
|
70
|
+
__typename?: string
|
|
71
|
+
type?: string
|
|
72
|
+
url?: string
|
|
73
|
+
externalLink?: string
|
|
74
|
+
page?: Card
|
|
75
|
+
title?: string
|
|
76
|
+
date?: string
|
|
77
|
+
startDate?: string
|
|
78
|
+
endDate?: string
|
|
79
|
+
label?: string
|
|
80
|
+
thumbnailImage?: Partial<ImageObject>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface RelatedLinkObject {
|
|
84
|
+
page: {
|
|
85
|
+
url: string
|
|
86
|
+
} | null
|
|
87
|
+
document: { url: string } | null
|
|
88
|
+
externalLink: string | null
|
|
89
|
+
text: string | null
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface PageResponseObject {
|
|
93
|
+
__typename: string
|
|
94
|
+
contentType: string
|
|
95
|
+
breadcrumb?: string
|
|
96
|
+
url?: string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface PageResponse {
|
|
100
|
+
__typename: string
|
|
101
|
+
page: PageResponseObject
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface HeaderResponse {
|
|
105
|
+
__typename: string
|
|
106
|
+
desktop: any
|
|
107
|
+
mobile: any
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface FooterResponse {
|
|
111
|
+
__typename: string
|
|
112
|
+
footer: any
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export type Explorer1Theme = 'defaultTheme' | 'ThemeInternal' | 'ThemeEdu'
|
|
116
|
+
|
|
117
|
+
export interface Attributes {
|
|
118
|
+
[name: string]: string
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface AuthorObject {
|
|
122
|
+
name: string
|
|
123
|
+
organization: string
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface Topic {
|
|
127
|
+
title: string
|
|
128
|
+
url: string
|
|
129
|
+
}
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createApp } from 'vue'
|
|
2
|
+
import { createPinia } from 'pinia'
|
|
3
|
+
import { createRouter, createWebHashHistory } from 'vue-router'
|
|
4
|
+
import { RouterLink } from 'vue-router'
|
|
5
|
+
import filters from './utils/filters'
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
import vClickOutside from 'click-outside-vue3'
|
|
8
|
+
import VueCompareImage from 'vue3-compare-image'
|
|
9
|
+
import './assets/scss/styles.scss'
|
|
10
|
+
import App from './App.vue'
|
|
11
|
+
|
|
12
|
+
const pinia = createPinia()
|
|
13
|
+
const app = createApp(App)
|
|
14
|
+
|
|
15
|
+
// vue router
|
|
16
|
+
const router = createRouter({
|
|
17
|
+
history: createWebHashHistory(),
|
|
18
|
+
routes: []
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
// plugins
|
|
22
|
+
app.use(pinia)
|
|
23
|
+
app.use(router)
|
|
24
|
+
app.use(vClickOutside)
|
|
25
|
+
app.use(VueCompareImage)
|
|
26
|
+
|
|
27
|
+
// filters
|
|
28
|
+
app.config.globalProperties.$filters = filters
|
|
29
|
+
app.config.globalProperties.$theme = 'EDU'
|
|
30
|
+
|
|
31
|
+
// components
|
|
32
|
+
app.component('NuxtLink', RouterLink)
|
|
33
|
+
|
|
34
|
+
app.mount('#app')
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { defineStore } from 'pinia'
|
|
2
|
+
/** Controls various display states for the header and navigation
|
|
3
|
+
** headerTransparent: whether the header is a transparent overlay
|
|
4
|
+
** highlightPrimary: logic in various components will enable/disable this
|
|
5
|
+
** globalChildren: the breadcrumb items derived from the active primary item in the global navigation
|
|
6
|
+
** secondayNav: breadcrumb items that are overridden from content pages or similar
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface State {
|
|
10
|
+
headerTransparent: boolean
|
|
11
|
+
highlightPrimary: boolean
|
|
12
|
+
globalChildren?: any | null
|
|
13
|
+
secondaryNav?: any | null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const useHeaderStore = defineStore('header', {
|
|
17
|
+
state: (): State => {
|
|
18
|
+
return {
|
|
19
|
+
headerTransparent: false,
|
|
20
|
+
highlightPrimary: true,
|
|
21
|
+
globalChildren: null,
|
|
22
|
+
secondaryNav: null
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
actions: {
|
|
26
|
+
makeTransparent(value: boolean) {
|
|
27
|
+
this.headerTransparent = value
|
|
28
|
+
},
|
|
29
|
+
updateHighlightPrimary(value: boolean) {
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
this.highlightPrimary = value
|
|
32
|
+
},
|
|
33
|
+
updateGlobalChildren(value: any) {
|
|
34
|
+
this.globalChildren = value
|
|
35
|
+
},
|
|
36
|
+
updateSecondary(value: any) {
|
|
37
|
+
this.secondaryNav = value
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineStore } from 'pinia'
|
|
2
|
+
import { type Explorer1Theme } from './../interfaces'
|
|
3
|
+
|
|
4
|
+
/** Sets the Explorer-1 theme
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface State {
|
|
8
|
+
theme: Explorer1Theme | null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const useThemeStore = defineStore('theme', {
|
|
12
|
+
state: (): State => {
|
|
13
|
+
return {
|
|
14
|
+
theme: null
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
actions: {
|
|
18
|
+
setTheme(value: Explorer1Theme) {
|
|
19
|
+
this.theme = value
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
getters: {
|
|
23
|
+
isEdu(state) {
|
|
24
|
+
return state.theme === 'ThemeEdu'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
})
|