@explorer-1/vue 0.3.4 → 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 (236) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.json +2 -2
  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 +2 -7
  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 +24 -4
  10. package/src/components/BaseAccordionItem/BaseAccordionItem.vue +56 -17
  11. package/src/components/BaseAudio/BaseAudio.stories.js +4 -6
  12. package/src/components/BaseAudio/BaseAudio.vue +6 -0
  13. package/src/components/BaseButton/BaseButton.stories.ts +12 -23
  14. package/src/components/BaseButton/BaseButton.vue +34 -10
  15. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.stories.js +2 -1
  16. package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.vue +5 -0
  17. package/src/components/BaseHeading/BaseHeading.stories.js +9 -17
  18. package/src/components/BaseHeading/BaseHeading.vue +18 -8
  19. package/src/components/BaseImage/BaseImage.stories.ts +7 -17
  20. package/src/components/BaseImage/BaseImage.vue +26 -14
  21. package/src/components/BaseImageCaption/BaseImageCaption.stories.js +11 -0
  22. package/src/components/BaseImageCaption/BaseImageCaption.vue +10 -6
  23. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.stories.js +13 -15
  24. package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.vue +13 -9
  25. package/src/components/BaseLink/BaseLink.stories.js +8 -7
  26. package/src/components/BaseLink/BaseLink.vue +32 -21
  27. package/src/components/BaseModal/BaseModal.stories.js +4 -7
  28. package/src/components/BaseModal/BaseModal.vue +1 -0
  29. package/src/components/BaseModal/BaseModalDialog.vue +1 -6
  30. package/src/components/BasePill/BasePill.stories.js +8 -22
  31. package/src/components/BasePill/BasePill.vue +36 -19
  32. package/src/components/BasePlaceholder/BasePlaceholder.stories.js +4 -7
  33. package/src/components/BasePlaceholder/BasePlaceholder.vue +1 -1
  34. package/src/components/BaseRadioGroup/BaseRadioGroup.stories.js +1 -0
  35. package/src/components/BaseRadioGroup/BaseRadioGroup.vue +9 -2
  36. package/src/components/BaseSwimlane/BaseSwimlane.stories.js +2 -1
  37. package/src/components/BaseSwimlane/BaseSwimlane.vue +2 -0
  38. package/src/components/BaseTimer/BaseTimer.stories.js +7 -2
  39. package/src/components/BaseTimer/BaseTimer.vue +4 -2
  40. package/src/components/BaseUnitToggle/BaseUnitToggle.stories.js +1 -16
  41. package/src/components/BaseUnitToggle/BaseUnitToggle.vue +4 -0
  42. package/src/components/BaseVideo/BaseVideo.vue +7 -3
  43. package/src/components/BlockAccordion/BlockAccordion.stories.js +4 -2
  44. package/src/components/BlockAccordion/BlockAccordion.vue +3 -3
  45. package/src/components/BlockAudio/BlockAudio.stories.js +1 -0
  46. package/src/components/BlockAudio/BlockAudio.vue +11 -3
  47. package/src/components/BlockCardGrid/BlockCardGrid.stories.js +1 -1
  48. package/src/components/BlockCardGrid/BlockCardGrid.vue +1 -1
  49. package/src/components/BlockCardGridItem/BlockCardGridItem.stories.js +3 -3
  50. package/src/components/BlockCardGridItem/BlockCardGridItemElement.vue +1 -1
  51. package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +3 -9
  52. package/src/components/BlockCsrTable/BlockCsrTable.stories.js +1 -0
  53. package/src/components/BlockCsrTable/BlockCsrTable.vue +1 -1
  54. package/src/components/BlockCta/BlockCta.stories.js +1 -0
  55. package/src/components/BlockCta/BlockCta.vue +9 -2
  56. package/src/components/BlockDialog/BlockDialog.stories.js +2 -1
  57. package/src/components/BlockGist/BlockGist.stories.js +3 -2
  58. package/src/components/BlockGist/BlockGist.vue +8 -6
  59. package/src/components/BlockHeading/BlockHeading.stories.js +1 -0
  60. package/src/components/BlockIframeEmbed/BlockIframeEmbed.stories.js +3 -2
  61. package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +9 -2
  62. package/src/components/BlockImage/BlockImage.stories.js +1 -5
  63. package/src/components/BlockImage/BlockImage.vue +5 -2
  64. package/src/components/BlockImageCarousel/BlockImageCarousel.stories.js +3 -15
  65. package/src/components/BlockImageCarousel/BlockImageCarousel.vue +2 -0
  66. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.stories.js +2 -16
  67. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +7 -7
  68. package/src/components/BlockImageComparison/BlockImageComparison.stories.js +5 -3
  69. package/src/components/BlockImageComparison/BlockImageComparison.vue +11 -2
  70. package/src/components/BlockImageGallery/BlockImageGallery.stories.js +4 -11
  71. package/src/components/BlockImageGallery/BlockImageGallery.vue +5 -0
  72. package/src/components/BlockInlineImage/BlockInlineImage.stories.js +5 -2
  73. package/src/components/BlockInlineImage/BlockInlineImage.vue +20 -7
  74. package/src/components/BlockKeyPoints/BlockKeyPoints.stories.js +1 -0
  75. package/src/components/BlockKeyPoints/BlockKeyPoints.vue +12 -3
  76. package/src/components/BlockLinkCard/BlockLinkCard.stories.js +24 -34
  77. package/src/components/BlockLinkCard/BlockLinkCard.vue +28 -9
  78. package/src/components/BlockLinkCard/BlockLinkCardCollectionLg.vue +2 -2
  79. package/src/components/BlockLinkCardList/BlockLinkCardList.stories.js +1 -3
  80. package/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.js +2 -14
  81. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +8 -8
  82. package/src/components/BlockLinkTile/BlockLinkTile.stories.js +3 -13
  83. package/src/components/BlockLinkTile/BlockLinkTile.vue +26 -13
  84. package/src/components/BlockListCards/BlockListCards.stories.js +1 -0
  85. package/src/components/BlockListCards/BlockListCards.vue +5 -4
  86. package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.stories.js +1 -0
  87. package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.vue +3 -2
  88. package/src/components/BlockQuote/BlockQuote.stories.js +1 -0
  89. package/src/components/BlockQuote/BlockQuote.vue +3 -2
  90. package/src/components/BlockRelatedLinks/BlockRelatedLinks.stories.js +1 -0
  91. package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +6 -4
  92. package/src/components/BlockRichTable/BlockRichTable.stories.js +1 -1
  93. package/src/components/BlockRichTable/BlockRichTable.vue +23 -9
  94. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +1 -11
  95. package/src/components/BlockStreamfield/BlockStreamfield.vue +34 -31
  96. package/src/components/BlockTeaser/BlockTeaser.stories.js +1 -0
  97. package/src/components/BlockTeaser/BlockTeaser.vue +20 -12
  98. package/src/components/BlockText/BlockText.stories.js +2 -9
  99. package/src/components/BlockText/BlockText.vue +21 -9
  100. package/src/components/BlockVideo/BlockVideo.stories.js +1 -0
  101. package/src/components/BlockVideo/BlockVideo.vue +14 -3
  102. package/src/components/BlockVideoEmbed/BlockVideoEmbed.stories.js +1 -0
  103. package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +6 -3
  104. package/src/components/CalendarButton/CalendarButton.vue +7 -0
  105. package/src/components/DetailHeadline/DetailHeadline.stories.js +2 -20
  106. package/src/components/DetailHeadline/DetailHeadline.vue +16 -4
  107. package/src/components/DsnWidget/DsnWidget.stories.js +2 -6
  108. package/src/components/DsnWidget/DsnWidget.vue +18 -4
  109. package/src/components/EventDetailHero/EventDetailHero.stories.js +10 -7
  110. package/src/components/EventDetailHero/EventDetailHero.vue +4 -7
  111. package/src/components/FormContact/FormContact.stories.js +2 -1
  112. package/src/components/FormNewsletterSignup/FormNewsletterSignup.stories.js +2 -1
  113. package/src/components/HeroInlineMedia/HeroInlineMedia.vue +12 -8
  114. package/src/components/HeroLarge/HeroLarge.stories.js +27 -2
  115. package/src/components/HeroLarge/HeroLarge.vue +12 -5
  116. package/src/components/HeroListingIndex/HeroListingIndex.stories.js +1 -0
  117. package/src/components/HeroListingIndex/HeroListingIndex.vue +18 -13
  118. package/src/components/HeroMedia/HeroMedia.stories.js +14 -9
  119. package/src/components/HeroMedia/HeroMedia.vue +9 -8
  120. package/src/components/HeroMedium/HeroMedium.stories.js +19 -4
  121. package/src/components/HeroMedium/HeroMedium.vue +32 -14
  122. package/src/components/HeroMedium/HeroSmall.stories.js +20 -6
  123. package/src/components/HomepageCarousel/HomepageCarousel.stories.js +1 -1
  124. package/src/components/HomepageCarouselItem/HomepageCarouselItem.stories.js +2 -2
  125. package/src/components/HomepageCarouselItem/HomepageCarouselItem.vue +2 -6
  126. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.vue +2 -2
  127. package/src/components/LogoCaltech/LogoCaltech.stories.js +14 -18
  128. package/src/components/LogoCaltech/LogoCaltech.vue +1 -0
  129. package/src/components/LogoTribrand/LogoTribrand.stories.js +66 -51
  130. package/src/components/LogoTribrand/LogoTribrand.vue +4 -2
  131. package/src/components/MetaPanel/MetaPanel.stories.js +5 -9
  132. package/src/components/MetaPanel/MetaPanel.vue +3 -0
  133. package/src/components/MetaPanelItems/MetaPanelItems.stories.js +9 -2
  134. package/src/components/MetaPanelItems/MetaPanelItems.vue +2 -0
  135. package/src/components/MetadataEduResource/MetadataEduResource.stories.js +12 -10
  136. package/src/components/MetadataEduResource/MetadataEduResource.vue +7 -3
  137. package/src/components/MetadataEvent/MetadataEvent.stories.js +1 -1
  138. package/src/components/MissionDetailAbout/MissionDetailAbout.vue +1 -1
  139. package/src/components/MissionDetailHero/MissionDetailHero.stories.js +2 -2
  140. package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +1 -0
  141. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.stories.js +1 -6
  142. package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.vue +10 -5
  143. package/src/components/MissionDetailStats/DistanceStats.vue +10 -5
  144. package/src/components/MissionDetailStats/MissionDetailStats.stories.js +4 -21
  145. package/src/components/MissionDetailStats/MissionDetailStats.vue +21 -5
  146. package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.vue +4 -2
  147. package/src/components/MixinAnimationCaret/MixinAnimationCaret.stories.ts +7 -0
  148. package/src/components/MixinAnimationCaret/MixinAnimationCaret.vue +12 -6
  149. package/src/components/MixinCarousel/MixinCarousel.stories.js +2 -8
  150. package/src/components/MixinCarousel/MixinCarousel.vue +13 -16
  151. package/src/components/MixinVideoBg/MixinVideoBg.stories.js +1 -1
  152. package/src/components/MixinVideoBg/MixinVideoBg.vue +4 -7
  153. package/src/components/NavDesktop/NavDesktop.stories.js +1 -0
  154. package/src/components/NavDesktop/NavDesktop.vue +4 -4
  155. package/src/components/NavDesktop/NavDesktopTopHat.vue +4 -4
  156. package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +1 -5
  157. package/src/components/NavDesktopEdu/NavDesktopEdu.vue +4 -4
  158. package/src/components/NavHeading/NavHeading.stories.js +3 -2
  159. package/src/components/NavHighlight/NavHighlight.stories.js +3 -2
  160. package/src/components/NavJumpMenu/NavJumpMenu.stories.js +5 -2
  161. package/src/components/NavLinkList/NavLinkList.stories.js +3 -2
  162. package/src/components/NavLinkList/NavLinkList.vue +3 -3
  163. package/src/components/NavLogoLinks/NavLogoLinks.stories.js +1 -0
  164. package/src/components/NavMobile/NavMobile.stories.js +13 -2
  165. package/src/components/NavMobile/NavMobile.vue +18 -5
  166. package/src/components/NavMobile/NavMobileDropdown.vue +2 -2
  167. package/src/components/NavMobile/NavMobileEdu.stories.js +11 -4
  168. package/src/components/NavMobile/NavMobileLink.vue +4 -4
  169. package/src/components/NavSearchForm/NavSearchForm.stories.js +1 -0
  170. package/src/components/NavSecondary/NavSecondary.stories.js +1 -0
  171. package/src/components/NavSecondary/NavSecondary.vue +7 -4
  172. package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +1 -1
  173. package/src/components/NavSocial/NavSocial.stories.js +1 -0
  174. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.stories.js +2 -1
  175. package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.vue +1 -1
  176. package/src/components/ParallaxContainer/ParallaxContainer.stories.js +2 -2
  177. package/src/components/ParallaxContainer/ParallaxContainer.vue +1 -0
  178. package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.vue +6 -5
  179. package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +3 -8
  180. package/src/components/SearchFilterGroup/SearchFilterGroup.stories.js +1 -0
  181. package/src/components/SearchInput/SearchInput.stories.js +1 -0
  182. package/src/components/SearchPagination/SearchPagination.stories.js +1 -0
  183. package/src/components/SearchResultCard/SearchResultCard.stories.js +1 -10
  184. package/src/components/SearchResultCard/SearchResultCard.vue +1 -0
  185. package/src/components/SearchResultGridItem/SearchResultGridItem.stories.js +3 -12
  186. package/src/components/SearchResultGridItem/SearchResultGridItem.vue +5 -2
  187. package/src/components/SearchResultsList/SearchResultsList.stories.js +3 -3
  188. package/src/components/SearchSelectMenu/SearchSelectMenu.stories.js +2 -1
  189. package/src/components/SwimlaneCTA/SwimlaneCTA.vue +1 -0
  190. package/src/components/TextArea/TextArea.stories.js +2 -1
  191. package/src/components/TextInput/TextInput.stories.js +2 -1
  192. package/src/components/TheFooter/TheFooter.stories.js +1 -0
  193. package/src/components/TheFooter/TheFooter.vue +30 -4
  194. package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +1 -1
  195. package/src/components/ThumbnailCarousel/ThumbnailCarousel.vue +2 -1
  196. package/src/components/TimelineDialog/TimelineDialog.vue +2 -2
  197. package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.stories.js +1 -0
  198. package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.stories.js +2 -2
  199. package/src/components/TopicDetailMore/TopicDetailMore.stories.js +1 -0
  200. package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.stories.js +3 -2
  201. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.vue +2 -2
  202. package/src/constants.ts +3 -5
  203. package/src/docs/foundation/grid_layouthelpers.stories.js +2 -2
  204. package/src/docs/introduction.docs.mdx +14 -2
  205. package/src/interfaces.ts +31 -6
  206. package/src/templates/PageAudioDetail/PageAudioDetail.vue +2 -2
  207. package/src/templates/PageContent/PageContent.stories.js +1 -1
  208. package/src/templates/PageEventDetail/PageEventDetail.stories.js +1 -1
  209. package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +2 -2
  210. package/src/templates/edu/PageContentEdu.stories.js +2 -2
  211. package/src/templates/edu/PageEduCollectionsDetail/PageEduCollectionsDetail.stories.js +2 -2
  212. package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +1 -1
  213. package/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.stories.js +2 -2
  214. package/src/templates/edu/PageEduGalleryDetail/PageEduGalleryDetail.stories.js +1 -1
  215. package/src/templates/edu/PageEduGalleryDetail/PageEduGalleryDetail.vue +10 -6
  216. package/src/templates/edu/PageEduHome/PageEduHome.stories.js +1 -1
  217. package/src/templates/edu/PageEduLesson/PageEduLesson.stories.js +2 -2
  218. package/src/templates/edu/PageEduMultimediaDetail/PageEduMultimediaDetail.stories.js +1 -1
  219. package/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.js +2 -2
  220. package/src/templates/edu/PageEduStudentProject/PageEduStudentProject.stories.js +2 -2
  221. package/src/templates/edu/PageEduStudentProject/PageEduStudentProjectSection.vue +10 -6
  222. package/src/templates/edu/PageEduTeachableMoment/PageEduTeachableMoment.stories.js +2 -2
  223. package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.js +2 -2
  224. package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.js +2 -2
  225. package/src/templates/www/PageGoDirectory/PageGoDirectory.stories.js +2 -2
  226. package/src/templates/www/PageHomepage/PageHomepage.stories.js +2 -2
  227. package/src/templates/www/PageMissionDetail/PageMissionDetail.stories.js +2 -2
  228. package/src/templates/www/PagePodcast/PagePodcast.stories.js +2 -2
  229. package/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.js +2 -2
  230. package/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.js +2 -2
  231. package/src/templates/www/PageProfileDetail/PageProfileDetail.stories.js +2 -2
  232. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.js +2 -2
  233. package/src/templates/www/PageTimeline/PageTimeline.stories.js +2 -2
  234. package/src/templates/www/PageTopicDetail/PageTopicDetail.stories.js +2 -2
  235. package/src/templates/www/PageTopicDetail/PageTopicDetail.vue +2 -1
  236. package/src/utils/mixins.ts +7 -7
@@ -36,7 +36,7 @@
36
36
  v-else-if="block.blockType == 'InlineImageBlock'"
37
37
  :key="`inlineImageBlock${index}`"
38
38
  :class="seamlessText(index) ? 'lg:mb-8 mb-5' : marginBottom"
39
- :data="block"
39
+ :data="block as BlockInlineImageData"
40
40
  :variant="size"
41
41
  />
42
42
 
@@ -55,7 +55,7 @@
55
55
  indent="col-3"
56
56
  :class="marginBottom"
57
57
  >
58
- <BlockKeyPoints :data="block" />
58
+ <BlockKeyPoints :data="block as BlockKeyPointsData" />
59
59
  </LayoutHelper>
60
60
 
61
61
  <LayoutHelper
@@ -73,7 +73,7 @@
73
73
  indent="col-4"
74
74
  :class="marginBottom"
75
75
  >
76
- <BlockCta :data="block" />
76
+ <BlockCta :data="block as BlockCtaData" />
77
77
  </LayoutHelper>
78
78
  <LayoutHelper
79
79
  v-else-if="block.blockType == 'NewsletterSignupBlock'"
@@ -91,7 +91,7 @@
91
91
  :class="marginBottom"
92
92
  >
93
93
  <BlockTeaser
94
- :custom-label="block.customLabel"
94
+ :label="block.customLabel"
95
95
  :heading="block.heading"
96
96
  :introduction="block.introduction"
97
97
  :button-text="block.buttonText"
@@ -134,7 +134,7 @@
134
134
  indent="col-2"
135
135
  :class="marginBottom"
136
136
  >
137
- <BlockVideo :data="block" />
137
+ <BlockVideo :data="block as BlockVideoData" />
138
138
  </LayoutHelper>
139
139
 
140
140
  <LayoutHelper
@@ -143,14 +143,14 @@
143
143
  indent="col-2"
144
144
  :class="marginBottom"
145
145
  >
146
- <BlockVideoEmbed :data="block as unknown as VideoBlockEmbedData" />
146
+ <BlockVideoEmbed :data="block as unknown as BlockVideoEmbedData" />
147
147
  </LayoutHelper>
148
148
 
149
149
  <BlockImage
150
150
  v-else-if="block.blockType == 'FullBleedImageBlock'"
151
151
  :key="`fullBleedImageBlock${index}`"
152
152
  :class="marginBottom"
153
- :data="block"
153
+ :data="block as ImageBlock"
154
154
  :full-bleed="block.fullBleed"
155
155
  />
156
156
 
@@ -160,7 +160,7 @@
160
160
  indent="col-2"
161
161
  :class="marginBottom"
162
162
  >
163
- <BlockImageComparison :data="block" />
163
+ <BlockImageComparison :data="block as BlockImageComparisonData" />
164
164
  </LayoutHelper>
165
165
 
166
166
  <LayoutHelper
@@ -169,7 +169,7 @@
169
169
  indent="col-2"
170
170
  :class="marginBottom"
171
171
  >
172
- <BlockIframeEmbed :data="block" />
172
+ <BlockIframeEmbed :data="block as BlockIframeEmbedData" />
173
173
  </LayoutHelper>
174
174
 
175
175
  <LayoutHelper
@@ -221,7 +221,7 @@
221
221
  :key="`linkCarouselBlock${index}`"
222
222
  :class="marginBottom"
223
223
  >
224
- <BlockLinkCarousel :items="block.blocks" />
224
+ <BlockLinkCarousel :items="block.blocks as Card[]" />
225
225
  </div>
226
226
 
227
227
  <LayoutHelper
@@ -230,7 +230,7 @@
230
230
  indent="col-2"
231
231
  :class="marginBottom"
232
232
  >
233
- <BlockLinkCardList :items="block.blocks" />
233
+ <BlockLinkCardList :items="block.blocks as Card[]" />
234
234
  </LayoutHelper>
235
235
 
236
236
  <LayoutHelper
@@ -269,19 +269,23 @@
269
269
  <script lang="ts">
270
270
  import { defineComponent } from 'vue'
271
271
  import type { PropType } from 'vue'
272
- import type { StreamfieldBlockData } from '../../interfaces'
272
+ import type { ImageBlock, StreamfieldBlockData, Card } from '../../interfaces'
273
273
  import LayoutHelper from './../LayoutHelper/LayoutHelper.vue'
274
274
  import BlockAnchor from './../BlockAnchor/BlockAnchor.vue'
275
275
  import BlockAccordion, { type AccordionBlockObject } from './../BlockAccordion/BlockAccordion.vue'
276
276
  import BlockCardGrid from './../BlockCardGrid/BlockCardGrid.vue'
277
- import BlockCta from './../BlockCta/BlockCta.vue'
277
+ import BlockCta, { type BlockCtaData } from './../BlockCta/BlockCta.vue'
278
278
  import BlockHeading, { BlockHeadingObject } from './../BlockHeading/BlockHeading.vue'
279
279
  import BlockImage from './../BlockImage/BlockImage.vue'
280
280
  import BlockImageCarousel from './../BlockImageCarousel/BlockImageCarousel.vue'
281
- import BlockImageComparison from './../BlockImageComparison/BlockImageComparison.vue'
281
+ import BlockImageComparison, {
282
+ type BlockImageComparisonData
283
+ } from './../BlockImageComparison/BlockImageComparison.vue'
282
284
  import BlockImageGallery from './../BlockImageGallery/BlockImageGallery.vue'
283
- import BlockInlineImage from './../BlockInlineImage/BlockInlineImage.vue'
284
- import BlockKeyPoints from './../BlockKeyPoints/BlockKeyPoints.vue'
285
+ import BlockInlineImage, {
286
+ type BlockInlineImageData
287
+ } from './../BlockInlineImage/BlockInlineImage.vue'
288
+ import BlockKeyPoints, { type BlockKeyPointsData } from './../BlockKeyPoints/BlockKeyPoints.vue'
285
289
  import BlockLinkCardList from './../BlockLinkCardList/BlockLinkCardList.vue'
286
290
  import BlockLinkCarousel from './../BlockLinkCarousel/BlockLinkCarousel.vue'
287
291
  import BlockListCards from './../BlockListCards/BlockListCards.vue'
@@ -292,25 +296,23 @@ import BlockRelatedLinks, {
292
296
  import BlockRichTable from './../BlockRichTable/BlockRichTable.vue'
293
297
  import BlockTeaser from './../BlockTeaser/BlockTeaser.vue'
294
298
  import BlockText from './../BlockText/BlockText.vue'
295
- import BlockIframeEmbed from './../BlockIframeEmbed/BlockIframeEmbed.vue'
299
+ import BlockIframeEmbed, {
300
+ type BlockIframeEmbedData
301
+ } from './../BlockIframeEmbed/BlockIframeEmbed.vue'
296
302
  import BlockGist from './../BlockGist/BlockGist.vue'
297
- import BlockVideo from './../BlockVideo/BlockVideo.vue'
298
- import BlockVideoEmbed, {
299
- type BlockData as VideoBlockEmbedData
300
- } from './../BlockVideoEmbed/BlockVideoEmbed.vue'
303
+ import BlockVideo, { type BlockVideoData } from './../BlockVideo/BlockVideo.vue'
304
+ import BlockVideoEmbed, { type BlockVideoEmbedData } from './../BlockVideoEmbed/BlockVideoEmbed.vue'
301
305
  import BlockNewsletterSignup from '../BlockNewsletterSignup/BlockNewsletterSignup.vue'
302
306
  import BlockCsrTable from '../BlockCsrTable/BlockCsrTable.vue'
303
307
  import { mapStores } from 'pinia'
304
308
  import { useThemeStore } from '../../store/theme'
309
+ import { type VariantKey as BlockTextVariantKey } from './../BlockText/BlockText.vue'
305
310
 
306
- interface Variants {
307
- [key: string]: string
308
- }
309
-
310
- export const variants: Variants = {
311
+ export const variants = {
311
312
  default: '',
312
313
  fluid: '-fluid'
313
314
  }
315
+ type VariantsKey = keyof typeof variants
314
316
 
315
317
  export default defineComponent({
316
318
  name: 'BlockStreamfield',
@@ -343,21 +345,22 @@ export default defineComponent({
343
345
  BlockCsrTable
344
346
  },
345
347
  props: {
348
+ /** Changes behavior of width. Fluid width: all block widths will match that of the container. Otherwise they will conform to preset widths. */
346
349
  variant: {
347
- type: String,
350
+ type: String as PropType<VariantsKey>,
348
351
  required: false,
349
352
  default: 'default',
350
353
  validator: (prop: string): boolean => Object.keys(variants).includes(prop)
351
354
  },
355
+ /** Text size. Corresponds to available variants of `BlockText` */
352
356
  size: {
353
- type: String as PropType<'small' | 'medium' | 'large'>,
354
- required: false,
357
+ type: String as PropType<BlockTextVariantKey>,
355
358
  default: 'large'
356
359
  },
357
- // eslint-disable-next-line vue/require-default-prop
358
360
  data: {
359
361
  type: Array as PropType<StreamfieldBlockData[]>,
360
- required: false
362
+ required: false,
363
+ default: undefined
361
364
  }
362
365
  },
363
366
  computed: {
@@ -3,6 +3,7 @@ import BlockTeaser from './BlockTeaser.vue'
3
3
  export default {
4
4
  title: 'Components/Blocks/BlockTeaser',
5
5
  component: BlockTeaser,
6
+ tags: ['wagtail-blocks'],
6
7
  excludeStories: /.*Data$/
7
8
  }
8
9
 
@@ -75,39 +75,47 @@ export default defineComponent({
75
75
  BaseImage
76
76
  },
77
77
  props: {
78
- // piecemeal props for reuse
79
- customLabel: {
80
- type: String,
81
- required: false
82
- },
78
+ /** Small text at the top of the teaser */
83
79
  label: {
84
80
  type: String,
85
- required: false
81
+ required: false,
82
+ default: undefined
86
83
  },
84
+ /** Large heading text */
87
85
  heading: {
88
86
  type: String,
89
- required: false
87
+ required: false,
88
+ default: undefined
90
89
  },
90
+ /** Short descriptive text */
91
91
  introduction: {
92
92
  type: String,
93
- required: false
93
+ required: false,
94
+ default: undefined
94
95
  },
96
+ /** Button text */
95
97
  buttonText: {
96
98
  type: String,
97
- required: false
99
+ required: false,
100
+ default: undefined
98
101
  },
102
+ /** Background image */
99
103
  image: {
100
104
  type: Object,
101
- required: false
105
+ required: false,
106
+ default: undefined
102
107
  },
108
+ /** If the background image should span the entire width of the block */
103
109
  fullWidth: {
104
110
  type: Boolean,
105
111
  default: false
106
112
  },
113
+ /** Option to pass a page data object as an object or as a single item in an array (for better compatibility with CMS mixed use) */
107
114
  // ideally can pass a page object (TopicDetailPage), but sometimes (e.g. streamfield teaserblock) this will be wrapped in an array
108
115
  teaserPage: {
109
116
  type: [Array, Object],
110
- required: false
117
+ required: false,
118
+ default: undefined
111
119
  }
112
120
  },
113
121
  computed: {
@@ -115,7 +123,7 @@ export default defineComponent({
115
123
  * Fall back to the linked page’s label, if there is one.
116
124
  */
117
125
  theLabel(): string {
118
- return this.customLabel || this.label || this.theTeaserPage?.label || ''
126
+ return this.label || this.theTeaserPage?.label || ''
119
127
  },
120
128
 
121
129
  /**
@@ -1,16 +1,9 @@
1
- import BlockText, { variants } from './BlockText.vue'
1
+ import BlockText from './BlockText.vue'
2
2
 
3
3
  export default {
4
4
  title: 'Components/Blocks/BlockText',
5
5
  component: BlockText,
6
- tags: ['!autodocs'],
7
- argTypes: {
8
- variant: {
9
- control: { type: 'select' },
10
- options: Object.keys(variants)
11
- },
12
- text: { control: { type: 'text' } }
13
- },
6
+ tags: ['wagtail-blocks'],
14
7
  decorators: [
15
8
  () => ({
16
9
  template: '<div class="lg:w-2/3 mx-auto"><story /></div>'
@@ -6,37 +6,49 @@
6
6
  ></div>
7
7
  </template>
8
8
  <script lang="ts">
9
+ /**
10
+ * Description of this component
11
+ */
9
12
  import { defineComponent } from 'vue'
10
13
 
11
- interface Variants {
12
- [key: string]: string
13
- }
14
-
15
14
  export interface BlockTextObject {
16
15
  blockType?: string
17
16
  value: string
18
17
  }
19
- export const variants: Variants = {
18
+
19
+ const variants = {
20
20
  small: 'text-body-sm -small',
21
21
  medium: 'text-body-md -medium',
22
22
  large: 'text-body-lg -large'
23
- }
23
+ } as const
24
+
25
+ export type VariantKey = keyof typeof variants
24
26
 
25
27
  export default defineComponent({
26
28
  name: 'BlockText',
27
29
  props: {
30
+ /**
31
+ * Block contents. Supports rich text.
32
+ */
28
33
  text: {
29
34
  type: String,
30
- required: false
35
+ required: false,
36
+ default: undefined
31
37
  },
38
+ /**
39
+ * Adjusts text size and vertical spacing. Corresponds with the same variants in `BlockInlineImage`
40
+ */
32
41
  variant: {
33
- type: String,
42
+ type: String as () => VariantKey,
34
43
  required: false,
35
44
  default: 'large',
36
- validator: (prop: string): boolean => Object.keys(variants).includes(prop)
45
+ validator: (prop: VariantKey) => Object.keys(variants).includes(prop)
37
46
  }
38
47
  },
39
48
  computed: {
49
+ /**
50
+ * Class string generated by variant selection.
51
+ */
40
52
  computedClass(): string {
41
53
  return variants[this.variant]
42
54
  }
@@ -4,6 +4,7 @@ import BlockVideo from './BlockVideo.vue'
4
4
  export default {
5
5
  title: 'Components/Blocks/BlockVideo',
6
6
  component: BlockVideo,
7
+ tags: ['wagtail-blocks'],
7
8
  excludeStories: /.*Data$/
8
9
  }
9
10
 
@@ -21,12 +21,19 @@
21
21
  </div>
22
22
  </template>
23
23
  <script lang="ts">
24
- import { defineComponent } from 'vue'
24
+ import { defineComponent, type PropType } from 'vue'
25
25
  import { mapStores } from 'pinia'
26
+ import type { BlockData, VideoObject } from './../../interfaces.ts'
26
27
  import { useThemeStore } from '../../store/theme'
27
28
  import BaseVideo from './../BaseVideo/BaseVideo.vue'
28
29
  import BaseImageCaption from './../BaseImageCaption/BaseImageCaption.vue'
29
30
 
31
+ export type BlockVideoData = BlockData & {
32
+ video: VideoObject
33
+ autoplay: boolean
34
+ caption: string
35
+ credit: string
36
+ }
30
37
  export default defineComponent({
31
38
  name: 'BlockVideo',
32
39
  components: {
@@ -34,14 +41,18 @@ export default defineComponent({
34
41
  BaseImageCaption
35
42
  },
36
43
  props: {
44
+ /** BlockData is used to render an HTML5 video element */
37
45
  data: {
38
- type: Object,
39
- required: false
46
+ type: Object as PropType<BlockVideoData>,
47
+ required: false,
48
+ default: undefined
40
49
  },
50
+ /** If the video should autoplay */
41
51
  autoplay: {
42
52
  type: Boolean,
43
53
  default: false
44
54
  },
55
+ /** Adds a link. Link text defaults to "Full Video Details" */
45
56
  customDetailUrl: {
46
57
  type: String,
47
58
  default: undefined
@@ -3,6 +3,7 @@ import BlockVideoEmbed from './BlockVideoEmbed.vue'
3
3
  export default {
4
4
  title: 'Components/Blocks/BlockVideoEmbed',
5
5
  component: BlockVideoEmbed,
6
+ tags: ['wagtail-blocks'],
6
7
  excludeStories: /.*Data$/
7
8
  }
8
9
 
@@ -24,14 +24,15 @@
24
24
  <script lang="ts">
25
25
  import type { PropType } from 'vue'
26
26
  import { defineComponent } from 'vue'
27
+ import type { BlockData } from './../../interfaces'
27
28
  import BaseImagePlaceholder from './../BaseImagePlaceholder/BaseImagePlaceholder.vue'
28
29
  import BaseImageCaption from './../BaseImageCaption/BaseImageCaption.vue'
29
30
 
30
- export interface BlockData {
31
+ export type BlockVideoEmbedData = BlockData & {
31
32
  heading: string
32
33
  display?: boolean
33
34
  embed: {
34
- // HTML for the iframe, generated by OEmbed.
35
+ /** HTML for the iframe, generated by OEmbed */
35
36
  embed: string
36
37
  }
37
38
  caption: string
@@ -45,11 +46,13 @@ export default defineComponent({
45
46
  BaseImageCaption
46
47
  },
47
48
  props: {
49
+ /** BlockData (`embed.embed`) provides the HTML markup for the embed */
48
50
  data: {
49
- type: Object as PropType<Partial<BlockData>>,
51
+ type: Object as PropType<BlockVideoEmbedData>,
50
52
  required: false,
51
53
  default: undefined
52
54
  },
55
+ /** Adds a link. Link text defaults to "Full Video Details" */
53
56
  customDetailUrl: {
54
57
  type: String,
55
58
  default: undefined
@@ -24,34 +24,41 @@ export default defineComponent({
24
24
  BaseButton
25
25
  },
26
26
  props: {
27
+ /** Used to generate ICS file */
27
28
  isAllDay: {
28
29
  type: Boolean,
29
30
  required: false,
30
31
  default: false
31
32
  },
33
+ /** Used to generate ICS file */
32
34
  startDate: {
33
35
  type: String,
34
36
  default: undefined
35
37
  },
38
+ /** Used to generate ICS file */
36
39
  startDatetime: {
37
40
  type: String,
38
41
  default: undefined
39
42
  },
43
+ /** Used to generate ICS file */
40
44
  endDatetime: {
41
45
  type: String,
42
46
  required: false,
43
47
  default: undefined
44
48
  },
49
+ /** Used to generate ICS file */
45
50
  title: {
46
51
  type: String,
47
52
  required: false,
48
53
  default: undefined
49
54
  },
55
+ /** Used to generate ICS file */
50
56
  location: {
51
57
  type: String,
52
58
  required: false,
53
59
  default: undefined
54
60
  },
61
+ /** Used to generate ICS file */
55
62
  description: {
56
63
  type: String,
57
64
  required: false,
@@ -1,27 +1,9 @@
1
- import DetailHeadline, { pillColorVariants } from './DetailHeadline.vue'
1
+ import DetailHeadline from './DetailHeadline.vue'
2
2
 
3
3
  export default {
4
4
  title: 'Components/Utilities/DetailHeadline',
5
5
  component: DetailHeadline,
6
- excludeStories: /.*Data$/,
7
- argTypes: {
8
- ariaLabel: {
9
- type: 'string',
10
- description:
11
- "ARIA label. Recommended if your button label isn't descriptive, or if it only contains an icon."
12
- },
13
- pillColor: {
14
- type: 'string',
15
- description: 'Color of pill',
16
- control: {
17
- type: 'select'
18
- },
19
- options: pillColorVariants,
20
- table: {
21
- defaultValue: { summary: 'primary' }
22
- }
23
- }
24
- }
6
+ excludeStories: /.*Data$/
25
7
  }
26
8
 
27
9
  export const DetailHeadlineData = {
@@ -124,7 +124,8 @@ import BaseLink from './../BaseLink/BaseLink.vue'
124
124
  import BaseHeading from './../BaseHeading/BaseHeading.vue'
125
125
  import BasePill from '../BasePill/BasePill.vue'
126
126
 
127
- export const pillColorVariants = ['primary', 'secondary', 'action']
127
+ export const pillColorVariants = ['primary', 'secondary', 'action', 'primary-inverted'] as const
128
+ export type PillColorVariant = (typeof pillColorVariants)[number]
128
129
 
129
130
  export default defineComponent({
130
131
  name: 'DetailHeadline',
@@ -134,60 +135,71 @@ export default defineComponent({
134
135
  BasePill
135
136
  },
136
137
  props: {
138
+ /** Title of detail page */
137
139
  title: {
138
140
  type: String,
139
141
  required: false,
140
142
  default: undefined
141
143
  },
144
+ /** Author or array of authors */
142
145
  author: {
143
146
  type: Object as PropType<AuthorObject | { author: AuthorObject }[]>,
144
147
  required: false,
145
148
  default: undefined
146
149
  },
150
+ /** Publication date */
147
151
  publicationDate: {
148
152
  type: String,
149
153
  required: false,
150
154
  default: undefined
151
155
  },
156
+ /** Publication time */
152
157
  publicationTime: {
153
158
  type: String,
154
159
  required: false,
155
160
  default: undefined
156
161
  },
162
+ /** Approximate read time */
157
163
  readTime: {
158
164
  type: String,
159
165
  required: false,
160
166
  default: undefined
161
167
  },
168
+ /** Array of related topics */
162
169
  topics: {
163
170
  type: Array as PropType<Topic[]>,
164
171
  required: false,
165
172
  default: undefined
166
173
  },
167
- // if topics array isn't available
174
+ /** Label, if there are no related topics */
168
175
  label: {
169
176
  type: String,
170
177
  required: false,
171
178
  default: undefined
172
179
  },
180
+ /** Option link for the label */
173
181
  labelLink: {
174
182
  type: String,
175
183
  required: false,
176
184
  default: undefined
177
185
  },
186
+ /** If the label should use the "pill" style (only works when using ThemeEdu) */
178
187
  pill: {
179
188
  type: Boolean,
180
189
  default: false
181
190
  },
191
+ /** Pill color variants */
182
192
  pillColor: {
183
- type: String,
193
+ type: String as PropType<PillColorVariant>,
184
194
  default: 'primary',
185
- validator: (prop: string): boolean => pillColorVariants.includes(prop)
195
+ validator: (prop: PillColorVariant): boolean => pillColorVariants.includes(prop)
186
196
  },
197
+ /** If schema.org metadata should be generated */
187
198
  schema: {
188
199
  type: Boolean,
189
200
  default: false
190
201
  },
202
+ /** If publication date should be hidden */
191
203
  hideDate: {
192
204
  type: Boolean,
193
205
  default: false
@@ -3,12 +3,8 @@ import DsnWidget from './DsnWidget.vue'
3
3
  export default {
4
4
  title: 'Components/WWW/DsnWidget',
5
5
  component: DsnWidget,
6
- excludeStories: /.*Data$/,
7
- argTypes: {
8
- status: {
9
- control: { type: 'text' }
10
- }
11
- }
6
+ tags: ['widget'],
7
+ excludeStories: /.*Data$/
12
8
  }
13
9
 
14
10
  export const DsnWidgetData = {
@@ -74,12 +74,24 @@
74
74
  </div>
75
75
  </template>
76
76
  <script lang="ts">
77
- import { defineComponent } from 'vue'
77
+ import { defineComponent, type PropType } from 'vue'
78
78
  import BaseLink from './../BaseLink/BaseLink.vue'
79
79
  import IconArrows from './../Icons/IconArrows.vue'
80
80
  /**
81
- * Displays dsn widget data. API is parsed by the backend. Frontend retrieves via a graphQL query.
81
+ * Displays dsn widget data. API is parsed by the backend and passed to the frontend via GraphQL.
82
82
  */
83
+
84
+ type DsnWidgetObject = {
85
+ heading: string
86
+ link: string
87
+ linkTarget: string
88
+ transmitTitle: string
89
+ transmitStatus: string
90
+ spacecraftName: string
91
+ location: string
92
+ __typename: string
93
+ }
94
+
83
95
  export default defineComponent({
84
96
  name: 'DsnWidget',
85
97
  components: {
@@ -87,9 +99,11 @@ export default defineComponent({
87
99
  IconArrows
88
100
  },
89
101
  props: {
102
+ /** Backend retrieves data and passes it to the frontend as a DsnWidgetObject */
90
103
  data: {
91
- type: Object,
92
- required: false
104
+ type: Object as PropType<DsnWidgetObject>,
105
+ required: false,
106
+ default: undefined
93
107
  }
94
108
  }
95
109
  })