@explorer-1/vue 0.3.6 → 0.3.7

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 (200) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/src/components/AboutTheAuthor/AboutTheAuthor.stories.js +1 -1
  4. package/src/components/AboutTheAuthor/AboutTheAuthor.vue +9 -9
  5. package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.stories.js +0 -5
  6. package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.vue +5 -1
  7. package/src/components/BackToTop/BackToTop.stories.js +1 -1
  8. package/src/components/BackToTop/BackToTop.vue +10 -0
  9. package/src/components/BaseAccordionItem/BaseAccordionItem.stories.js +5 -29
  10. package/src/components/BaseAccordionItem/BaseAccordionItem.vue +56 -17
  11. package/src/components/BaseAudio/BaseAudio.vue +6 -0
  12. package/src/components/BaseButton/BaseButton.stories.ts +1 -20
  13. package/src/components/BaseButton/BaseButton.vue +34 -10
  14. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.stories.js +2 -1
  15. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.vue +5 -0
  16. package/src/components/BaseHeading/BaseHeading.stories.js +0 -15
  17. package/src/components/BaseHeading/BaseHeading.vue +18 -8
  18. package/src/components/BaseImage/BaseImage.stories.ts +6 -21
  19. package/src/components/BaseImage/BaseImage.vue +26 -14
  20. package/src/components/BaseImageCaption/BaseImageCaption.vue +10 -6
  21. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.stories.js +3 -16
  22. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.vue +13 -9
  23. package/src/components/BaseLink/BaseLink.stories.js +4 -46
  24. package/src/components/BaseLink/BaseLink.vue +32 -21
  25. package/src/components/BaseModal/BaseModal.stories.js +4 -7
  26. package/src/components/BaseModal/BaseModal.vue +1 -0
  27. package/src/components/BaseModal/BaseModalDialog.vue +1 -6
  28. package/src/components/BasePill/BasePill.stories.js +2 -22
  29. package/src/components/BasePill/BasePill.vue +36 -17
  30. package/src/components/BasePlaceholder/BasePlaceholder.stories.js +4 -7
  31. package/src/components/BasePlaceholder/BasePlaceholder.vue +1 -1
  32. package/src/components/BaseRadioGroup/BaseRadioGroup.stories.js +1 -0
  33. package/src/components/BaseRadioGroup/BaseRadioGroup.vue +9 -2
  34. package/src/components/BaseSwimlane/BaseSwimlane.stories.js +2 -1
  35. package/src/components/BaseSwimlane/BaseSwimlane.vue +2 -0
  36. package/src/components/BaseTimer/BaseTimer.stories.js +6 -1
  37. package/src/components/BaseTimer/BaseTimer.vue +4 -2
  38. package/src/components/BaseUnitToggle/BaseUnitToggle.stories.js +1 -16
  39. package/src/components/BaseUnitToggle/BaseUnitToggle.vue +4 -0
  40. package/src/components/BaseVideo/BaseVideo.vue +7 -3
  41. package/src/components/BlockAccordion/BlockAccordion.stories.js +1 -1
  42. package/src/components/BlockAccordion/BlockAccordion.vue +3 -3
  43. package/src/components/BlockAudio/BlockAudio.stories.js +1 -0
  44. package/src/components/BlockAudio/BlockAudio.vue +11 -3
  45. package/src/components/BlockCardGrid/BlockCardGrid.stories.js +1 -1
  46. package/src/components/BlockCardGrid/BlockCardGrid.vue +1 -1
  47. package/src/components/BlockCardGridItem/BlockCardGridItem.stories.js +1 -1
  48. package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +1 -8
  49. package/src/components/BlockCsrTable/BlockCsrTable.stories.js +1 -0
  50. package/src/components/BlockCsrTable/BlockCsrTable.vue +1 -1
  51. package/src/components/BlockCta/BlockCta.stories.js +1 -0
  52. package/src/components/BlockCta/BlockCta.vue +9 -2
  53. package/src/components/BlockDialog/BlockDialog.stories.js +2 -1
  54. package/src/components/BlockGist/BlockGist.stories.js +3 -2
  55. package/src/components/BlockGist/BlockGist.vue +8 -6
  56. package/src/components/BlockHeading/BlockHeading.stories.js +1 -0
  57. package/src/components/BlockIframeEmbed/BlockIframeEmbed.stories.js +1 -0
  58. package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +9 -2
  59. package/src/components/BlockImage/BlockImage.stories.js +1 -5
  60. package/src/components/BlockImage/BlockImage.vue +5 -2
  61. package/src/components/BlockImageCarousel/BlockImageCarousel.stories.js +1 -13
  62. package/src/components/BlockImageCarousel/BlockImageCarousel.vue +2 -0
  63. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.stories.js +0 -14
  64. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +7 -7
  65. package/src/components/BlockImageComparison/BlockImageComparison.stories.js +3 -1
  66. package/src/components/BlockImageComparison/BlockImageComparison.vue +11 -2
  67. package/src/components/BlockImageGallery/BlockImageGallery.stories.js +2 -9
  68. package/src/components/BlockImageGallery/BlockImageGallery.vue +5 -0
  69. package/src/components/BlockInlineImage/BlockInlineImage.stories.js +1 -8
  70. package/src/components/BlockInlineImage/BlockInlineImage.vue +20 -7
  71. package/src/components/BlockKeyPoints/BlockKeyPoints.stories.js +1 -0
  72. package/src/components/BlockKeyPoints/BlockKeyPoints.vue +12 -3
  73. package/src/components/BlockLinkCard/BlockLinkCard.stories.js +5 -18
  74. package/src/components/BlockLinkCard/BlockLinkCard.vue +27 -8
  75. package/src/components/BlockLinkCard/BlockLinkCardCollectionLg.vue +2 -2
  76. package/src/components/BlockLinkCardList/BlockLinkCardList.stories.js +1 -3
  77. package/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.js +2 -14
  78. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +8 -8
  79. package/src/components/BlockLinkTile/BlockLinkTile.stories.js +1 -11
  80. package/src/components/BlockLinkTile/BlockLinkTile.vue +26 -13
  81. package/src/components/BlockListCards/BlockListCards.stories.js +1 -0
  82. package/src/components/BlockListCards/BlockListCards.vue +5 -4
  83. package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.stories.js +1 -0
  84. package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.vue +3 -2
  85. package/src/components/BlockQuote/BlockQuote.stories.js +1 -0
  86. package/src/components/BlockQuote/BlockQuote.vue +3 -2
  87. package/src/components/BlockRelatedLinks/BlockRelatedLinks.stories.js +1 -0
  88. package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +6 -4
  89. package/src/components/BlockRichTable/BlockRichTable.stories.js +1 -1
  90. package/src/components/BlockRichTable/BlockRichTable.vue +23 -9
  91. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +1 -11
  92. package/src/components/BlockStreamfield/BlockStreamfield.vue +34 -31
  93. package/src/components/BlockTeaser/BlockTeaser.stories.js +1 -0
  94. package/src/components/BlockTeaser/BlockTeaser.vue +20 -12
  95. package/src/components/BlockText/BlockText.stories.js +2 -9
  96. package/src/components/BlockText/BlockText.vue +21 -9
  97. package/src/components/BlockVideo/BlockVideo.stories.js +1 -0
  98. package/src/components/BlockVideo/BlockVideo.vue +14 -3
  99. package/src/components/BlockVideoEmbed/BlockVideoEmbed.stories.js +1 -0
  100. package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +6 -3
  101. package/src/components/CalendarButton/CalendarButton.vue +7 -0
  102. package/src/components/DetailHeadline/DetailHeadline.stories.js +2 -20
  103. package/src/components/DetailHeadline/DetailHeadline.vue +16 -4
  104. package/src/components/DsnWidget/DsnWidget.stories.js +2 -6
  105. package/src/components/DsnWidget/DsnWidget.vue +18 -4
  106. package/src/components/EventDetailHero/EventDetailHero.vue +4 -7
  107. package/src/components/FormContact/FormContact.stories.js +2 -1
  108. package/src/components/FormNewsletterSignup/FormNewsletterSignup.stories.js +2 -1
  109. package/src/components/HeroInlineMedia/HeroInlineMedia.vue +12 -8
  110. package/src/components/HeroLarge/HeroLarge.stories.js +1 -0
  111. package/src/components/HeroLarge/HeroLarge.vue +12 -7
  112. package/src/components/HeroListingIndex/HeroListingIndex.stories.js +1 -0
  113. package/src/components/HeroListingIndex/HeroListingIndex.vue +18 -13
  114. package/src/components/HeroMedia/HeroMedia.stories.js +13 -8
  115. package/src/components/HeroMedia/HeroMedia.vue +9 -8
  116. package/src/components/HeroMedium/HeroMedium.stories.js +1 -0
  117. package/src/components/HeroMedium/HeroMedium.vue +32 -14
  118. package/src/components/HeroMedium/HeroSmall.stories.js +2 -2
  119. package/src/components/HomepageCarousel/HomepageCarousel.stories.js +1 -1
  120. package/src/components/HomepageCarouselItem/HomepageCarouselItem.vue +2 -6
  121. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.vue +2 -2
  122. package/src/components/LogoCaltech/LogoCaltech.stories.js +14 -18
  123. package/src/components/LogoCaltech/LogoCaltech.vue +1 -0
  124. package/src/components/LogoTribrand/LogoTribrand.stories.js +66 -51
  125. package/src/components/LogoTribrand/LogoTribrand.vue +4 -2
  126. package/src/components/MetaPanel/MetaPanel.stories.js +4 -8
  127. package/src/components/MetaPanel/MetaPanel.vue +3 -0
  128. package/src/components/MetaPanelItems/MetaPanelItems.stories.js +9 -2
  129. package/src/components/MetaPanelItems/MetaPanelItems.vue +2 -0
  130. package/src/components/MetadataEduResource/MetadataEduResource.stories.js +12 -10
  131. package/src/components/MetadataEduResource/MetadataEduResource.vue +7 -3
  132. package/src/components/MetadataEvent/MetadataEvent.stories.js +1 -1
  133. package/src/components/MissionDetailAbout/MissionDetailAbout.vue +1 -1
  134. package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +1 -0
  135. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.stories.js +1 -6
  136. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.vue +10 -5
  137. package/src/components/MissionDetailStats/DistanceStats.vue +10 -5
  138. package/src/components/MissionDetailStats/MissionDetailStats.stories.js +2 -19
  139. package/src/components/MissionDetailStats/MissionDetailStats.vue +21 -5
  140. package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.vue +4 -2
  141. package/src/components/MixinAnimationCaret/MixinAnimationCaret.stories.ts +7 -0
  142. package/src/components/MixinAnimationCaret/MixinAnimationCaret.vue +12 -6
  143. package/src/components/MixinCarousel/MixinCarousel.stories.js +2 -8
  144. package/src/components/MixinCarousel/MixinCarousel.vue +13 -16
  145. package/src/components/MixinVideoBg/MixinVideoBg.stories.js +1 -1
  146. package/src/components/MixinVideoBg/MixinVideoBg.vue +4 -7
  147. package/src/components/NavDesktop/NavDesktop.stories.js +1 -0
  148. package/src/components/NavDesktop/NavDesktop.vue +4 -4
  149. package/src/components/NavDesktop/NavDesktopTopHat.vue +4 -4
  150. package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +1 -5
  151. package/src/components/NavDesktopEdu/NavDesktopEdu.vue +4 -4
  152. package/src/components/NavHeading/NavHeading.stories.js +1 -0
  153. package/src/components/NavHighlight/NavHighlight.stories.js +1 -0
  154. package/src/components/NavJumpMenu/NavJumpMenu.stories.js +5 -2
  155. package/src/components/NavLinkList/NavLinkList.stories.js +1 -0
  156. package/src/components/NavLinkList/NavLinkList.vue +3 -3
  157. package/src/components/NavLogoLinks/NavLogoLinks.stories.js +1 -0
  158. package/src/components/NavMobile/NavMobile.stories.js +9 -3
  159. package/src/components/NavMobile/NavMobile.vue +18 -5
  160. package/src/components/NavMobile/NavMobileDropdown.vue +2 -2
  161. package/src/components/NavMobile/NavMobileEdu.stories.js +3 -2
  162. package/src/components/NavMobile/NavMobileLink.vue +4 -4
  163. package/src/components/NavSearchForm/NavSearchForm.stories.js +1 -0
  164. package/src/components/NavSecondary/NavSecondary.stories.js +1 -0
  165. package/src/components/NavSecondary/NavSecondary.vue +7 -4
  166. package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +1 -1
  167. package/src/components/NavSocial/NavSocial.stories.js +1 -0
  168. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.stories.js +2 -1
  169. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.vue +1 -1
  170. package/src/components/ParallaxContainer/ParallaxContainer.vue +1 -0
  171. package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.vue +6 -5
  172. package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +1 -6
  173. package/src/components/SearchFilterGroup/SearchFilterGroup.stories.js +1 -0
  174. package/src/components/SearchInput/SearchInput.stories.js +1 -0
  175. package/src/components/SearchPagination/SearchPagination.stories.js +1 -0
  176. package/src/components/SearchResultCard/SearchResultCard.stories.js +1 -10
  177. package/src/components/SearchResultCard/SearchResultCard.vue +1 -0
  178. package/src/components/SearchResultGridItem/SearchResultGridItem.stories.js +1 -10
  179. package/src/components/SearchResultGridItem/SearchResultGridItem.vue +5 -2
  180. package/src/components/SearchResultsList/SearchResultsList.stories.js +1 -1
  181. package/src/components/SearchSelectMenu/SearchSelectMenu.stories.js +2 -1
  182. package/src/components/SwimlaneCTA/SwimlaneCTA.vue +1 -0
  183. package/src/components/TextArea/TextArea.stories.js +2 -1
  184. package/src/components/TextInput/TextInput.stories.js +2 -1
  185. package/src/components/TheFooter/TheFooter.stories.js +1 -0
  186. package/src/components/TheFooter/TheFooter.vue +30 -4
  187. package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +1 -1
  188. package/src/components/ThumbnailCarousel/ThumbnailCarousel.vue +2 -1
  189. package/src/components/TimelineDialog/TimelineDialog.vue +2 -2
  190. package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.stories.js +1 -0
  191. package/src/components/TopicDetailMore/TopicDetailMore.stories.js +1 -0
  192. package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.stories.js +1 -0
  193. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.vue +2 -2
  194. package/src/constants.ts +3 -5
  195. package/src/interfaces.ts +31 -6
  196. package/src/templates/PageAudioDetail/PageAudioDetail.vue +2 -2
  197. package/src/templates/edu/PageEduGalleryDetail/PageEduGalleryDetail.vue +10 -6
  198. package/src/templates/edu/PageEduStudentProject/PageEduStudentProjectSection.vue +10 -6
  199. package/src/templates/www/PageTopicDetail/PageTopicDetail.vue +2 -1
  200. package/src/utils/mixins.ts +7 -7
@@ -1,4 +1,9 @@
1
1
  <script lang="ts">
2
+ /**
3
+ * This mixin appends an animated caret to a line of text or to more complex HTML markup.
4
+ * When implemented, it must be wrapped by a link element with CSS class `group` to ensure that the animation is triggered by hovering over the link.
5
+ * See the `BaseLink` primary variant for an implementation example. */
6
+
2
7
  import { defineComponent } from 'vue'
3
8
  import IconCaret from './../Icons/IconCaret.vue'
4
9
 
@@ -8,32 +13,33 @@ export default defineComponent({
8
13
  IconCaret
9
14
  },
10
15
  props: {
11
- // when wrapped in a parent component i.e. BaseLink and grandparent component needs to pass a class
12
- // appended to classes applied to .MixinAnimationCaret
16
+ /** Use when wrapped in a parent component. Appends to classes applied to .`MixinAnimationCaret`.
17
+ * Use-case example: BaseLink and grandparent component needs to pass a class
18
+ */
13
19
  passedWrapperClass: {
14
20
  type: String || null,
15
21
  required: false,
16
22
  default: ''
17
23
  },
18
- // to modify spacing around the caret itself
24
+ /** Modify spacing around the caret itself with TailwindCSS classes */
19
25
  arrowClass: {
20
26
  type: String,
21
27
  required: false,
22
28
  default: ''
23
29
  },
24
- // default color class
30
+ /** Default color class. Use TailwindCSS classes */
25
31
  color: {
26
32
  type: String,
27
33
  required: false,
28
34
  default: 'text-primary'
29
35
  },
30
- // default margin left class
36
+ /** Default margin left class. Use TailwindCSS classes */
31
37
  marginLeft: {
32
38
  type: String,
33
39
  default: 'ml-1',
34
40
  required: false
35
41
  },
36
- // appends .caret-inline .MixinAnimationCaret
42
+ /** Appends .caret-inline to .MixinAnimationCaret */
37
43
  inline: {
38
44
  type: Boolean,
39
45
  default: false,
@@ -1,15 +1,9 @@
1
- import MixinCarousel, { variants } from './MixinCarousel.vue'
1
+ import MixinCarousel from './MixinCarousel.vue'
2
2
 
3
3
  export default {
4
4
  title: 'Mixins/MixinCarousel',
5
5
  component: MixinCarousel,
6
- tags: ['!autodocs'],
7
- argTypes: {
8
- variant: {
9
- control: { type: 'select' },
10
- options: Object.keys(variants)
11
- }
12
- }
6
+ tags: ['autodocs', 'carousels']
13
7
  }
14
8
 
15
9
  export const BaseStory = {
@@ -97,7 +97,7 @@
97
97
  </template>
98
98
  <script lang="ts">
99
99
  // @ts-nocheck
100
- import { defineComponent } from 'vue'
100
+ import { defineComponent, type PropType } from 'vue'
101
101
  import Swiper from 'swiper'
102
102
  import { A11y, Navigation } from 'swiper/modules'
103
103
  import type { SwiperOptions } from 'swiper/types'
@@ -112,24 +112,18 @@ const MixinCarouselOptions = swiperOptions.MixinCarousel
112
112
 
113
113
  Swiper.use([Navigation, A11y])
114
114
 
115
- interface Variants {
116
- [key: string]: string
117
- }
118
-
119
- export const variants: Variants = {
115
+ const variants = {
120
116
  cards: '-cards',
121
117
  tiles: '-tiles'
122
118
  }
119
+ type VariantsKeys = keyof typeof variants
123
120
 
124
- interface Indents {
125
- [key: string]: string
126
- }
127
-
128
- export const indents: Indents = {
121
+ const indents = {
129
122
  'col-1': '',
130
123
  'col-2': 'lg:col-start-2',
131
124
  'col-3': 'lg:col-start-3'
132
125
  }
126
+ type IndentsKeys = keyof typeof indents
133
127
 
134
128
  export default defineComponent({
135
129
  name: 'MixinCarousel',
@@ -148,18 +142,21 @@ export default defineComponent({
148
142
  },
149
143
  heading: {
150
144
  type: String,
151
- required: false
145
+ required: false,
146
+ default: undefined
152
147
  },
153
148
  link: {
154
149
  type: [String, Object],
155
- required: false
150
+ required: false,
151
+ default: undefined
156
152
  },
157
153
  linkTitle: {
158
154
  type: String,
159
- required: false
155
+ required: false,
156
+ default: undefined
160
157
  },
161
158
  variant: {
162
- type: String,
159
+ type: String as PropType<VariantsKeys>,
163
160
  required: false,
164
161
  default: 'cards',
165
162
  validator: (prop: string): boolean => Object.keys(variants).includes(prop)
@@ -170,7 +167,7 @@ export default defineComponent({
170
167
  default: 2
171
168
  },
172
169
  indent: {
173
- type: String,
170
+ type: String as PropType<IndentsKeys>,
174
171
  required: false,
175
172
  default: 'col-2',
176
173
  validator: (prop: string): boolean => Object.keys(indents).includes(prop)
@@ -8,7 +8,7 @@ export default {
8
8
  parameters: {
9
9
  docs: {
10
10
  description: {
11
- component: 'This mix-in will always autoplay and loop a video.'
11
+ component: 'This mix-in loops a muted video.'
12
12
  }
13
13
  }
14
14
  }
@@ -27,18 +27,15 @@
27
27
  </video>
28
28
  </template>
29
29
  <script lang="ts">
30
- import { defineComponent } from 'vue'
31
-
30
+ /** This mix-in loops a muted video. */
31
+ import { defineComponent, type PropType } from 'vue'
32
+ import type { VideoObject } from './../../interfaces.ts'
32
33
  export default defineComponent({
33
34
  name: 'MixinVideoBg',
34
35
  props: {
35
36
  video: {
36
- type: Object,
37
+ type: Object as PropType<VideoObject>,
37
38
  default: undefined
38
- },
39
- autoplay: {
40
- type: Boolean,
41
- default: false
42
39
  }
43
40
  }
44
41
  })
@@ -9,6 +9,7 @@ import NavDesktopDropdownMore from './NavDesktopDropdownMore.vue'
9
9
  export default {
10
10
  title: 'Navigation/Headers/WWW/NavDesktop',
11
11
  component: NavDesktop,
12
+ tags: ['navigation'],
12
13
  excludeStories: /.*Data$/
13
14
  }
14
15
 
@@ -123,7 +123,7 @@ import NavLogoLinks from './../NavLogoLinks/NavLogoLinks.vue'
123
123
  import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
124
124
  import IconSearch from './../Icons/IconSearch.vue'
125
125
  import IconClose from './../Icons/IconClose.vue'
126
- import type { LinkObject, BreadcrumbObject } from './../../utils/mixins'
126
+ import type { NavLinkObject, BreadcrumbObject } from './../../utils/mixins'
127
127
  import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
128
128
  import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
129
129
  import type { BreadcrumbPathObject } from '../../interfaces'
@@ -237,14 +237,14 @@ export default defineComponent({
237
237
  },
238
238
  methods: {
239
239
  // safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
240
- getUrlKey(item: LinkObject): string | null {
240
+ getUrlKey(item: NavLinkObject): string | null {
241
241
  if (item.linkPage) {
242
242
  return item.linkPage.url
243
243
  }
244
244
  return null
245
245
  },
246
246
  // to determine active class on menu links and 'more' menu links
247
- checkActive(item: LinkObject) {
247
+ checkActive(item: NavLinkObject) {
248
248
  const urlKey = this.getUrlKey(item)
249
249
  if (urlKey && this.breadcrumb?.menu_links) {
250
250
  // key into the breadcrumbs for each section
@@ -292,7 +292,7 @@ export default defineComponent({
292
292
  this.$emit('openSearch')
293
293
  }
294
294
  },
295
- getLinkText(item: LinkObject) {
295
+ getLinkText(item: NavLinkObject) {
296
296
  return mixinGetLinkText(item)
297
297
  }
298
298
  }
@@ -37,7 +37,7 @@ import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
37
37
  import { mapStores } from 'pinia'
38
38
  import { useThemeStore } from './../../store/theme'
39
39
  import BaseLink from './../BaseLink/BaseLink.vue'
40
- import type { LinkObject } from './../../utils/mixins'
40
+ import type { NavLinkObject } from './../../utils/mixins'
41
41
  import type { PropType } from 'vue'
42
42
 
43
43
  export default defineComponent({
@@ -47,15 +47,15 @@ export default defineComponent({
47
47
  },
48
48
  props: {
49
49
  data: {
50
- type: Array as PropType<LinkObject[]>,
50
+ type: Array as PropType<NavLinkObject[]>,
51
51
  required: false
52
52
  }
53
53
  },
54
54
  methods: {
55
- getRouterLink(link: LinkObject): string | undefined {
55
+ getRouterLink(link: NavLinkObject): string | undefined {
56
56
  return mixinGetRouterLink(link)
57
57
  },
58
- getLinkText(link: LinkObject): string | undefined {
58
+ getLinkText(link: NavLinkObject): string | undefined {
59
59
  return mixinGetLinkText(link)
60
60
  }
61
61
  },
@@ -1,15 +1,11 @@
1
1
  import { MenuHighlightColumnData } from './../NavHighlight/NavHighlight.stories'
2
2
  import { MenuLinkColumnWithHeaderData } from './../NavLinkList/NavLinkList.stories'
3
3
  import NavDesktop from './NavDesktopEdu.vue'
4
- import NavDesktopTopHat from './../NavDesktop/NavDesktopTopHat.vue'
5
- import NavDesktopDropdown from './../NavDesktop/NavDesktopDropdown.vue'
6
- import NavDesktopDropdownContent from './../NavDesktop/NavDesktopDropdownContent.vue'
7
- import NavDesktopDropdownMore from './../NavDesktop/NavDesktopDropdownMore.vue'
8
4
 
9
5
  export default {
10
6
  title: 'Navigation/Headers/EDU/NavDesktopEdu',
11
7
  component: NavDesktop,
12
- tags: ['!autodocs'],
8
+ tags: ['navigation'],
13
9
  excludeStories: /.*Data$/,
14
10
  parameters: {
15
11
  layout: 'fullscreen'
@@ -127,7 +127,7 @@ import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
127
127
  import IconExternal from './../Icons/IconExternal.vue'
128
128
  import IconSearch from './../Icons/IconSearch.vue'
129
129
  import IconClose from './../Icons/IconClose.vue'
130
- import type { LinkObject, BreadcrumbObject } from './../../utils/mixins'
130
+ import type { NavLinkObject, BreadcrumbObject } from './../../utils/mixins'
131
131
  import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
132
132
  import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
133
133
  import type { BreadcrumbPathObject } from '../../interfaces'
@@ -242,14 +242,14 @@ export default defineComponent({
242
242
  },
243
243
  methods: {
244
244
  // safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
245
- getUrlKey(item: LinkObject): string | null {
245
+ getUrlKey(item: NavLinkObject): string | null {
246
246
  if (item.linkPage) {
247
247
  return item.linkPage.url
248
248
  }
249
249
  return null
250
250
  },
251
251
  // to determine active class on menu links and 'more' menu links
252
- checkActive(item: LinkObject) {
252
+ checkActive(item: NavLinkObject) {
253
253
  const urlKey = this.getUrlKey(item)
254
254
  if (urlKey && this.breadcrumb && this.breadcrumb.menu_links) {
255
255
  // key into the breadcrumbs for each section
@@ -297,7 +297,7 @@ export default defineComponent({
297
297
  this.$emit('openSearch')
298
298
  }
299
299
  },
300
- getLinkText(item: LinkObject) {
300
+ getLinkText(item: NavLinkObject) {
301
301
  return mixinGetLinkText(item)
302
302
  }
303
303
  }
@@ -4,6 +4,7 @@ import NavHeading from './NavHeading.vue'
4
4
  export default {
5
5
  title: 'Navigation/Elements/NavHeading',
6
6
  component: NavHeading,
7
+ tags: ['navigation'],
7
8
  decorators: [
8
9
  () => ({
9
10
  template: `<div id="storyRoot" class="p-8 bg-jpl-blue-darker edu:bg-primary-dark"><story/></div>`
@@ -3,6 +3,7 @@ import NavHighlight from './NavHighlight.vue'
3
3
  export default {
4
4
  title: 'Navigation/Elements/NavHighlight',
5
5
  component: NavHighlight,
6
+ tags: ['navigation'],
6
7
  decorators: [
7
8
  () => ({
8
9
  template: `<div id="storyRoot" class="lg:BaseGrid container"><div class="col-span-5"><story/></div></div>`
@@ -3,8 +3,11 @@ import NavJumpMenu from './NavJumpMenu.vue'
3
3
  export default {
4
4
  title: 'Navigation/Jump Menu',
5
5
  component: NavJumpMenu,
6
- tags: ['!autodocs'],
7
- excludeStories: /.*Data$/
6
+ tags: ['navigation'],
7
+ excludeStories: /.*Data$/,
8
+ decorators: () => ({
9
+ template: `<story style="visibility: visible!important;" />`
10
+ })
8
11
  }
9
12
 
10
13
  const JumpLinksData = [
@@ -3,6 +3,7 @@ import NavLinkList from './NavLinkList.vue'
3
3
  export default {
4
4
  title: 'Navigation/Elements/NavLinkList',
5
5
  component: NavLinkList,
6
+ tags: ['navigation'],
6
7
  decorators: [
7
8
  () => ({
8
9
  template: `<div id="storyRoot" class="bg-jpl-blue-darker p-8"><story/></div>`
@@ -32,7 +32,7 @@ import { defineComponent } from 'vue'
32
32
  import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
33
33
  import BaseLink from './../BaseLink/BaseLink.vue'
34
34
  import NavHeading from './../NavHeading/NavHeading.vue'
35
- import type { LinkObject } from './../../utils/mixins'
35
+ import type { NavLinkObject } from './../../utils/mixins'
36
36
  export default defineComponent({
37
37
  name: 'NavLinkList',
38
38
  components: {
@@ -51,10 +51,10 @@ export default defineComponent({
51
51
  }
52
52
  },
53
53
  methods: {
54
- getRouterLink(link: LinkObject): string | undefined {
54
+ getRouterLink(link: NavLinkObject): string | undefined {
55
55
  return mixinGetRouterLink(link)
56
56
  },
57
- getLinkText(link: LinkObject): string | undefined {
57
+ getLinkText(link: NavLinkObject): string | undefined {
58
58
  return mixinGetLinkText(link)
59
59
  }
60
60
  }
@@ -4,6 +4,7 @@ import NavLogoLinks from './NavLogoLinks.vue'
4
4
  export default {
5
5
  title: 'Navigation/Elements/NavLogoLinks',
6
6
  component: NavLogoLinks,
7
+ tags: ['navigation'],
7
8
  excludeStories: /.*Data$/
8
9
  }
9
10
 
@@ -6,17 +6,23 @@ import NavMobileLink from './NavMobileLink.vue'
6
6
  export default {
7
7
  title: 'Navigation/Headers/WWW/NavMobile',
8
8
  component: NavMobile,
9
+ tags: ['navigation'],
9
10
  excludeStories: /.*Data$/,
10
11
 
11
12
  parameters: {
12
- viewMode: 'canvas'
13
+ viewMode: 'canvas',
14
+ docs: {
15
+ description: {
16
+ component: 'View story directly for correct rendering.'
17
+ }
18
+ }
13
19
  },
14
-
15
20
  globals: {
16
21
  viewport: {
17
22
  value: 'mobile2',
18
23
  isRotated: false
19
- }
24
+ },
25
+ theme: 'defaultTheme'
20
26
  }
21
27
  }
22
28
 
@@ -140,7 +140,8 @@
140
140
  </transition>
141
141
  </template>
142
142
  <script lang="ts">
143
- import { defineComponent } from 'vue'
143
+ /** Designed to be controlled by a wrapper component that passes state via props */
144
+ import { defineComponent, type PropType } from 'vue'
144
145
  import { mapStores } from 'pinia'
145
146
  import { eventBus } from './../../utils/eventBus'
146
147
  import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
@@ -156,9 +157,16 @@ import NavMobileDropdown from './../NavMobile/NavMobileDropdown.vue'
156
157
  import NavMobileLink from './../NavMobile/NavMobileLink.vue'
157
158
  import NavSocial from './../NavSocial/NavSocial.vue'
158
159
  import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
159
- import type { LinkObject, BreadcrumbObject } from '../../utils/mixins'
160
+ import type { NavLinkObject, BreadcrumbObject } from '../../utils/mixins'
160
161
  import { mixinIsActivePath } from '../../utils/mixins'
161
162
  import type { BreadcrumbPathObject } from '../../interfaces'
163
+ import type { FooterNavItem } from './../TheFooter/TheFooter.vue'
164
+
165
+ type NavMobileData = {
166
+ mobileBreadcrumb: string
167
+ footerMoreFromJpl: NavLinkObject[]
168
+ footerNavigation: FooterNavItem[]
169
+ }
162
170
 
163
171
  export default defineComponent({
164
172
  name: 'NavMobile',
@@ -174,26 +182,31 @@ export default defineComponent({
174
182
  IconExternal
175
183
  },
176
184
  props: {
185
+ /** Data object containing navigation data */
177
186
  data: {
178
- type: Object || null,
187
+ type: Object as PropType<NavMobileData>,
179
188
  required: false,
180
189
  default: null
181
190
  },
191
+ /** State: if the top bar should be visible. */
182
192
  headerVisible: {
183
193
  type: Boolean,
184
194
  required: false,
185
195
  default: false
186
196
  },
197
+ /** State: if the user has scrolled up */
187
198
  scrolledUp: {
188
199
  type: Boolean,
189
200
  required: false,
190
201
  default: false
191
202
  },
203
+ /** State: scrollTop value */
192
204
  scrollTop: {
193
205
  type: Number,
194
206
  required: false,
195
207
  default: 0
196
208
  },
209
+ /** Secondary nav data */
197
210
  staticSecondaryData: {
198
211
  type: Array,
199
212
  required: false,
@@ -273,14 +286,14 @@ export default defineComponent({
273
286
  }
274
287
  },
275
288
  // safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
276
- getUrlKey(item: LinkObject): string | null {
289
+ getUrlKey(item: NavLinkObject): string | null {
277
290
  if (item?.linkPage) {
278
291
  return item.linkPage.url
279
292
  }
280
293
  return null
281
294
  },
282
295
  // to determine active class on menu links and 'more' menu links
283
- checkActive(item: LinkObject) {
296
+ checkActive(item: NavLinkObject) {
284
297
  const urlKey = this.getUrlKey(item)
285
298
  if (urlKey && this.breadcrumb?.menu_links) {
286
299
  // key into the breadcrumbs for each section
@@ -62,7 +62,7 @@
62
62
  import { defineComponent } from 'vue'
63
63
  import { mapStores } from 'pinia'
64
64
  import { useHeaderStore } from '../../store/header'
65
- import type { LinkObject } from '../../utils/mixins'
65
+ import type { NavLinkObject } from '../../utils/mixins'
66
66
  import { eventBus } from './../../utils/eventBus'
67
67
  import NavDropdownToggle from './../NavDropdownToggle/NavDropdownToggle.vue'
68
68
  import NavMobileLink from './../NavMobile/NavMobileLink.vue'
@@ -140,7 +140,7 @@ export default defineComponent({
140
140
  this.closeDropdown()
141
141
  }
142
142
  },
143
- getLinkText(link: LinkObject) {
143
+ getLinkText(link: NavLinkObject) {
144
144
  return mixinGetLinkText(link)
145
145
  }
146
146
  }
@@ -4,7 +4,7 @@ import NavMobile from './NavMobile.vue'
4
4
  export default {
5
5
  title: 'Navigation/Headers/EDU/NavMobile',
6
6
  component: NavMobile,
7
- tags: ['!autodocs'],
7
+ tags: ['navigation'],
8
8
  excludeStories: /.*Data$/,
9
9
 
10
10
  parameters: {
@@ -21,7 +21,8 @@ export default {
21
21
  viewport: {
22
22
  value: 'mobile2',
23
23
  isRotated: false
24
- }
24
+ },
25
+ theme: 'ThemeEdu'
25
26
  }
26
27
  }
27
28
 
@@ -16,7 +16,7 @@
16
16
  import { defineComponent } from 'vue'
17
17
  import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
18
18
  import type { PropType } from 'vue'
19
- import type { LinkObject } from './../../utils/mixins'
19
+ import type { NavLinkObject } from './../../utils/mixins'
20
20
  import BaseLink from './../BaseLink/BaseLink.vue'
21
21
 
22
22
  export default defineComponent({
@@ -26,7 +26,7 @@ export default defineComponent({
26
26
  },
27
27
  props: {
28
28
  data: {
29
- type: Object as PropType<LinkObject>,
29
+ type: Object as PropType<NavLinkObject>,
30
30
  required: false
31
31
  },
32
32
  // pass a custom title
@@ -45,10 +45,10 @@ export default defineComponent({
45
45
  }
46
46
  },
47
47
  methods: {
48
- getRouterLink(link: LinkObject): string | undefined {
48
+ getRouterLink(link: NavLinkObject): string | undefined {
49
49
  return mixinGetRouterLink(link)
50
50
  },
51
- getLinkText(link: LinkObject): string | undefined {
51
+ getLinkText(link: NavLinkObject): string | undefined {
52
52
  return mixinGetLinkText(link)
53
53
  }
54
54
  }
@@ -3,6 +3,7 @@ import NavSearchForm from './NavSearchForm.vue'
3
3
  export default {
4
4
  title: 'Navigation/Elements/NavSearchForm',
5
5
  component: NavSearchForm,
6
+ tags: ['forms', 'navigation'],
6
7
  excludeStories: /.*Data$/
7
8
  }
8
9
 
@@ -3,6 +3,7 @@ import NavSecondary from './NavSecondary.vue'
3
3
  export default {
4
4
  title: 'Navigation/Secondary Navigation',
5
5
  component: NavSecondary,
6
+ tags: ['navigation'],
6
7
  excludeStories: /.*Data$/,
7
8
  parameters: {
8
9
  docs: {
@@ -55,10 +55,13 @@ import { mixinHighlightPrimary, mixinUpdateSecondary } from './../../utils/mixin
55
55
  import type { BreadcrumbPathObject } from './../../interfaces'
56
56
 
57
57
  export default defineComponent({
58
- /** The complexity of this component is due to the need for it to be populated from multiple data sources
59
- ** SecondaryNav will first check to see if there is a navigation override from the data fetched for this specific page (data.breadcrumb and store.header.secondaryNav)
60
- ** If there is no breadcrumb override, then it will fallback to using the breadcrumbs derived form the active global nav item (store.header.globalChildren)
61
- ** store.header.secondaryNav reverts to null on route changes, so the breadcrumb override is re-evaluted on every page
58
+ /**
59
+ * This component is only visible on large viewports. Mobile secondary nav is handled in the \`NavMobile\` component.
60
+ *
61
+ * The complexity of this component is due to the need for it to be populated from multiple data sources
62
+ * SecondaryNav will first check to see if there is a navigation override from the data fetched for this specific page (data.breadcrumb and store.header.secondaryNav)
63
+ * If there is no breadcrumb override, then it will fallback to using the breadcrumbs derived form the active global nav item (store.header.globalChildren)
64
+ * store.header.secondaryNav reverts to null on route changes, so the breadcrumb override is re-evaluted on every page
62
65
  */
63
66
  name: 'NavSecondary',
64
67
  components: {
@@ -67,7 +67,7 @@
67
67
  import { defineComponent } from 'vue'
68
68
  import BaseLink from './../BaseLink/BaseLink.vue'
69
69
 
70
- interface NavItemObject {
70
+ export interface NavItemObject {
71
71
  path: String
72
72
  title: String
73
73
  children: [Object]
@@ -3,6 +3,7 @@ import NavSocial from './NavSocial.vue'
3
3
  export default {
4
4
  title: 'Navigation/Elements/NavSocial',
5
5
  component: NavSocial,
6
+ tags: ['navigation'],
6
7
  excludeStories: /.*Data$/
7
8
  }
8
9
 
@@ -2,7 +2,8 @@ import NewsDetailMediaContact from './NewsDetailMediaContact.vue'
2
2
 
3
3
  export default {
4
4
  title: 'Components/WWW/NewsDetail/NewsDetailMediaContact',
5
- component: NewsDetailMediaContact
5
+ component: NewsDetailMediaContact,
6
+ tags: ['listings']
6
7
  }
7
8
 
8
9
  const contacts = [
@@ -21,7 +21,7 @@
21
21
  import { defineComponent } from 'vue'
22
22
  import type { PropType } from 'vue'
23
23
 
24
- interface Contact {
24
+ export interface Contact {
25
25
  contact: {
26
26
  id: string
27
27
  name: string
@@ -10,6 +10,7 @@
10
10
  </template>
11
11
 
12
12
  <script lang="ts">
13
+ /** Use `ParallaxContainer` with a nested `ParallaxElement` to create a parallax scrolling effect. */
13
14
  // @ts-nocheck
14
15
  export default {
15
16
  name: `ParallaxContainer`,