@explorer-1/vue 0.1.4 → 0.1.5

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 (156) hide show
  1. package/dist/explorer-1-vue.js +8960 -10011
  2. package/dist/explorer-1-vue.umd.cjs +13 -16
  3. package/dist/src/components/BaseHeading/BaseHeading.stories.d.ts +6 -11
  4. package/dist/src/components/BaseHeading/BaseHeading.vue.d.ts +6 -10
  5. package/dist/src/components/BasePlaceholder/BasePlaceholder.stories.d.ts +0 -1
  6. package/dist/src/components/BlockDialog/BlockDialog.stories.d.ts +81 -0
  7. package/dist/src/components/BlockImage/BlockImage.stories.d.ts +0 -1
  8. package/dist/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.d.ts +6 -0
  9. package/dist/src/components/BlockLinkCarousel/BlockLinkCarousel.vue.d.ts +6 -0
  10. package/dist/src/components/BlockQuote/BlockQuote.stories.d.ts +0 -1
  11. package/dist/src/components/BlockStreamfield/BlockStreamfield.stories.d.ts +58 -8
  12. package/dist/src/components/BlockVideoEmbed/BlockVideoEmbed.vue.d.ts +7 -3
  13. package/dist/src/components/HeroListingIndex/HeroListingIndex.stories.d.ts +1 -0
  14. package/dist/src/components/HeroMedium/HeroMedium.stories.d.ts +1 -0
  15. package/dist/src/components/HeroMedium/HeroSmall.stories.d.ts +1 -0
  16. package/dist/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.d.ts +1 -6
  17. package/dist/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.d.ts +31 -47
  18. package/dist/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue.d.ts +5 -1
  19. package/dist/src/components/HomepageStats/HomepageStats.stories.d.ts +19 -9
  20. package/dist/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.d.ts +6 -50
  21. package/dist/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue.d.ts +7 -1
  22. package/dist/src/components/MissionDetailAbout/MissionDetailAbout.stories.d.ts +1 -6
  23. package/dist/src/components/MissionDetailHero/MissionDetailHero.stories.d.ts +11 -11
  24. package/dist/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.d.ts +6 -6
  25. package/dist/src/components/NavDesktop/NavDesktop.stories.d.ts +3 -6
  26. package/dist/src/components/NavDesktopEdu/NavDesktopEdu.stories.d.ts +289 -0
  27. package/dist/src/components/NavLogoLinks/NavLogoLinks.stories.d.ts +0 -5
  28. package/dist/src/components/NavMobile/NavMobile.stories.d.ts +42 -9
  29. package/dist/src/components/NavMobile/NavMobile.vue.d.ts +13 -2
  30. package/dist/src/components/NavMobile/NavMobileEdu.stories.d.ts +392 -0
  31. package/dist/src/components/NavSocial/NavSocial.stories.d.ts +42 -1
  32. package/dist/src/components/NavSocial/NavSocial.vue.d.ts +42 -1
  33. package/dist/src/components/TheFooter/TheFooter.vue.d.ts +9 -1
  34. package/dist/src/components/TimelineDialog/TimelineDialog.stories.d.ts +75 -0
  35. package/dist/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.d.ts +1 -7
  36. package/dist/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.d.ts +1 -6
  37. package/dist/src/docs/foundation/typography.stories.d.ts +6 -10
  38. package/dist/src/store/curatedGallery.d.ts +6 -0
  39. package/dist/src/store/search.d.ts +10 -0
  40. package/dist/src/templates/PageAudioDetail/PageAudioDetail.stories.d.ts +102 -0
  41. package/dist/src/templates/PageContent/PageContent.stories.d.ts +2 -1
  42. package/dist/src/templates/PageContent/PageContent.vue.d.ts +8 -0
  43. package/dist/src/templates/PageEventDetail/PageEventDetail.stories.d.ts +1 -1
  44. package/dist/src/templates/PageImageDetail/PageImageDetail.stories.d.ts +141 -0
  45. package/dist/src/templates/PageNewsDetail/PageNewsDetail.stories.d.ts +1163 -228
  46. package/dist/src/templates/PageVideoDetail/PageVideoDetail.stories.d.ts +56 -0
  47. package/dist/src/templates/edu/PageContentEdu.stories.d.ts +27 -0
  48. package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +360 -0
  49. package/dist/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.d.ts +99 -0
  50. package/dist/src/templates/{edu/PageEduNewsDetail.stories.d.ts → www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.d.ts} +48 -67
  51. package/dist/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.d.ts +98 -0
  52. package/dist/src/templates/www/PageGoDirectory/PageGoDirectory.stories.d.ts +56 -0
  53. package/dist/src/templates/www/PageHomepage/PageHomepage.stories.d.ts +704 -0
  54. package/dist/src/templates/www/PageInfographicDetail/PageInfographicDetail.stories.d.ts +41 -0
  55. package/dist/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.stories.d.ts +14 -0
  56. package/dist/src/templates/www/PageMissionDetail/PageMissionDetail.stories.d.ts +875 -0
  57. package/dist/src/templates/www/PagePodcast/PagePodcast.stories.d.ts +115 -0
  58. package/dist/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.d.ts +84 -0
  59. package/dist/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.d.ts +64 -0
  60. package/dist/src/templates/www/PageProfileDetail/PageProfileDetail.stories.d.ts +60 -0
  61. package/dist/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.d.ts +170 -0
  62. package/dist/src/templates/www/PageTimeline/PageTimeline.stories.d.ts +338 -0
  63. package/dist/src/templates/www/PageTopicDetail/PageTopicDetail.stories.d.ts +297 -0
  64. package/dist/style.css +1 -1
  65. package/lib/main.ts +4 -0
  66. package/package.json +2 -1
  67. package/src/components/BaseAudio/BaseAudio.vue +0 -1
  68. package/src/components/BaseHeading/BaseHeading.stories.js +0 -1
  69. package/src/components/BaseHeading/BaseHeading.vue +5 -7
  70. package/src/components/BasePlaceholder/BasePlaceholder.stories.js +0 -1
  71. package/src/components/BlockAudio/BlockAudio.stories.js +2 -3
  72. package/src/components/BlockDialog/BlockDialog.stories.js +56 -0
  73. package/src/components/BlockDialog/BlockDialog.stories.mdx +28 -0
  74. package/src/components/BlockDialog/BlockDialog.vue +132 -0
  75. package/src/components/BlockHeading/BlockHeading.stories.js +2 -2
  76. package/src/components/BlockImage/BlockImage.stories.js +0 -1
  77. package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +0 -1
  78. package/src/components/BlockImageGallery/BlockImageGallery.vue +0 -1
  79. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +4 -2
  80. package/src/components/BlockQuote/BlockQuote.stories.js +0 -1
  81. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +20 -9
  82. package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +3 -2
  83. package/src/components/DsnWidget/DsnWidget.vue +2 -2
  84. package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.stories.js +1 -8
  85. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.stories.js +115 -118
  86. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarousel.vue +3 -23
  87. package/src/components/HomepageMissionsCarousel/HomepageMissionsCarouselItem.vue +1 -2
  88. package/src/components/HomepageStats/HomepageStats.stories.js +10 -10
  89. package/src/components/HomepageStats/HomepageStats.vue +8 -8
  90. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.stories.js +11 -18
  91. package/src/components/HomepageTeaserBlock/HomepageTeaserBlock.vue +20 -14
  92. package/src/components/HomepageTeaserBlock/HomepageTeaserBlockCardImage.vue +1 -1
  93. package/src/components/MissionDetailAbout/MissionDetailAbout.stories.js +1 -8
  94. package/src/components/MissionDetailHero/MissionDetailHero.stories.js +11 -11
  95. package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +6 -6
  96. package/src/components/MixinCarousel/MixinCarousel.docs.mdx +1 -1
  97. package/src/components/NavDesktop/NavDesktop.stories.js +1 -4
  98. package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +2 -1
  99. package/src/components/NavMobile/NavMobileEdu.stories.js +2 -1
  100. package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +1 -1
  101. package/src/components/TimelineDialog/TimelineDialog.stories.js +47 -0
  102. package/src/components/TimelineDialog/TimelineDialog.stories.mdx +26 -0
  103. package/src/components/TimelineDialog/TimelineDialog.vue +145 -0
  104. package/src/components/TopicDetailMissionSpotlight/TopicDetailMissionSpotlight.stories.js +1 -9
  105. package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.stories.js +1 -8
  106. package/src/docs/utils/ComponentItem.jsx +0 -1
  107. package/src/store/curatedGallery.ts +23 -0
  108. package/src/store/search.ts +43 -0
  109. package/src/templates/PageAudioDetail/PageAudioDetail.stories.js +106 -0
  110. package/src/templates/PageAudioDetail/PageAudioDetail.vue +375 -0
  111. package/src/templates/PageContent/PageContent.stories.js +2 -1
  112. package/src/templates/PageEventDetail/PageEventDetail.stories.js +1 -1
  113. package/src/templates/PageImageDetail/PageImageDetail.stories.js +116 -0
  114. package/src/templates/PageImageDetail/PageImageDetail.vue +444 -0
  115. package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +3 -2
  116. package/src/templates/PageNewsDetail/PageNewsDetail.vue +1 -1
  117. package/src/templates/PageVideoDetail/PageVideoDetail.stories.js +84 -0
  118. package/src/templates/PageVideoDetail/PageVideoDetail.vue +173 -0
  119. package/src/templates/edu/PageContentEdu.stories.js +1 -0
  120. package/src/templates/edu/{PageEduNewsDetail.stories.js → PageEduNewsDetail/PageEduNewsDetail.stories.js} +5 -3
  121. package/src/templates/edu/{PageEduNewsDetail.vue → PageEduNewsDetail/PageEduNewsDetail.vue} +3 -2
  122. package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.js +54 -0
  123. package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.vue +79 -0
  124. package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.js +34 -0
  125. package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.vue +56 -0
  126. package/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.js +110 -0
  127. package/src/templates/www/PageCuratedGallery/PageCuratedGallery.vue +345 -0
  128. package/src/templates/www/PageGoDirectory/PageGoDirectory.stories.js +61 -0
  129. package/src/templates/www/PageGoDirectory/PageGoDirectory.vue +76 -0
  130. package/src/templates/www/PageHomepage/PageHomepage.stories.js +101 -0
  131. package/src/templates/www/PageHomepage/PageHomepage.vue +136 -0
  132. package/src/templates/www/PageInfographicDetail/PageInfographicDetail.stories.js +46 -0
  133. package/src/templates/www/PageInfographicDetail/PageInfographicDetail.vue +125 -0
  134. package/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.stories.js +14 -0
  135. package/src/templates/www/PageMaintenanceMode/PageMaintenanceMode.vue +94 -0
  136. package/src/templates/www/PageMissionDetail/PageMissionDetail.stories.js +246 -0
  137. package/src/templates/www/PageMissionDetail/PageMissionDetail.vue +136 -0
  138. package/src/templates/www/PagePodcast/PagePodcast.stories.js +86 -0
  139. package/src/templates/www/PagePodcast/PagePodcast.vue +219 -0
  140. package/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.js +96 -0
  141. package/src/templates/www/PagePodcastSeason/PagePodcastSeason.vue +191 -0
  142. package/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.js +72 -0
  143. package/src/templates/www/PagePressKitIndex/PagePressKitIndex.vue +76 -0
  144. package/src/templates/www/PageProfileDetail/PageProfileDetail.stories.js +76 -0
  145. package/src/templates/www/PageProfileDetail/PageProfileDetail.vue +178 -0
  146. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.js +43 -0
  147. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.vue +101 -0
  148. package/src/templates/www/PageTimeline/BlockMilestone.vue +99 -0
  149. package/src/templates/www/PageTimeline/PageTimeline.stories.js +357 -0
  150. package/src/templates/www/PageTimeline/PageTimeline.vue +384 -0
  151. package/src/templates/www/PageTopicDetail/PageTopicDetail.stories.js +87 -0
  152. package/src/templates/www/PageTopicDetail/PageTopicDetail.vue +121 -0
  153. package/src/utils/mixins.ts +1 -1
  154. package/components.d.ts +0 -217
  155. package/src/templates/www/HomePage/HomePage.vue +0 -30
  156. /package/dist/src/components/{MixinDropdownToggle/MixinDropdownToggle.vue.d.ts → NavDropdownToggle/NavDropdownToggle.vue.d.ts} +0 -0
@@ -0,0 +1,191 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="ThemeVariantLight"
5
+ :class="{ '-nav-offset': data.featuredEpisode }"
6
+ >
7
+ <!-- hero image -->
8
+ <div class="max-w-screen-3xl md:mb-12 lg:mb-18 mx-auto mb-10">
9
+ <HeroMedium
10
+ v-if="data.featuredEpisode"
11
+ :custom-label="data.label"
12
+ :feature="data.featuredEpisode"
13
+ :custom-image="data.heroImage"
14
+ cta="Listen Now"
15
+ />
16
+ </div>
17
+
18
+ <!-- page headline -->
19
+ <LayoutHelper
20
+ indent="col-1"
21
+ class="3xl:px-0 lg:mt-12 px-5 mx-auto mt-5 mb-5 lg:mb-10"
22
+ >
23
+ <DetailHeadline
24
+ :title="data.title"
25
+ :publication-date="data.publicationDate"
26
+ label="Podcast Season"
27
+ schema
28
+ />
29
+ <BlockText
30
+ v-if="data.summary"
31
+ :text="data.summary"
32
+ variant="medium"
33
+ class="lg:w-2/3 mt-5"
34
+ />
35
+ </LayoutHelper>
36
+
37
+ <LayoutHelper>
38
+ <div class="col-span-12 pb-2 justify-end flex flex-row pr-0.5">
39
+ <!-- toggle gallery view -->
40
+ <div
41
+ v-if="allowGridView"
42
+ class="align-end flex text-2xl font-secondary font-semibold tracking-wider"
43
+ >
44
+ <button
45
+ class="lg:ml-6"
46
+ :class="
47
+ showGridView
48
+ ? 'text-theme-red cursor-default'
49
+ : 'text-gray-mid can-hover:hover:text-theme-red-hover cursor-pointer'
50
+ "
51
+ :aria-label="showGridView ? 'Grid View (enabled)' : 'Grid View'"
52
+ :disabled="showGridView"
53
+ @click="
54
+ isGallery
55
+ ? searchStore.updateGridViewForPodcasts(true)
56
+ : searchStore.updateGridView(true)
57
+ "
58
+ >
59
+ <span class="flex items-center">
60
+ <IconGrid />
61
+ </span>
62
+ </button>
63
+ <button
64
+ class="ml-3"
65
+ :class="
66
+ !showGridView
67
+ ? 'text-theme-red cursor-default'
68
+ : 'text-gray-mid can-hover:hover:text-theme-red-hover cursor-pointer'
69
+ "
70
+ :aria-label="!showGridView ? 'List View (enabled)' : 'List View'"
71
+ :disabled="!showGridView"
72
+ @click="
73
+ isGallery
74
+ ? searchStore.updateGridViewForPodcasts(false)
75
+ : searchStore.updateGridView(false)
76
+ "
77
+ >
78
+ <span class="flex items-center flip-horizontal">
79
+ <IconList />
80
+ </span>
81
+ </button>
82
+ </div>
83
+ </div>
84
+ </LayoutHelper>
85
+
86
+ <LayoutHelper
87
+ v-if="data.episodes && data.episodes.length"
88
+ indent="col-2"
89
+ class="border-gray-mid lg:mb-24 pt-10 mb-12 border-t"
90
+ >
91
+ <section aria-label="Podcast Episodes">
92
+ <template v-if="!showGridView">
93
+ <SearchResultCard
94
+ v-for="episode of data.episodes"
95
+ :key="episode.id"
96
+ :type="episode.series.title"
97
+ :topic="data.title"
98
+ :url="episode.url"
99
+ :image="episode.thumbnailImage"
100
+ :title="episode.title"
101
+ :summary="episode.summary"
102
+ :media="episode.uploadedMedia ? episode.uploadedMedia.file : null"
103
+ :date="$filters.displayDate(episode.publicationDate)"
104
+ :is-podcast-season="isPodcastSeason"
105
+ heading-level="h2"
106
+ />
107
+ </template>
108
+ <template v-else>
109
+ <div class="md:grid grid-cols-12 gap-10">
110
+ <div
111
+ v-for="episode of data.episodes"
112
+ :key="episode.id"
113
+ class="col-span-6 lg:col-span-4"
114
+ >
115
+ <SearchResultGridItem
116
+ :type="episode.title"
117
+ :url="episode.url"
118
+ :image="episode.thumbnailImage"
119
+ :title="episode.title"
120
+ :summary="episode.summary"
121
+ :date="$filters.displayDate(episode.firstPublishedAt)"
122
+ heading-level="h2"
123
+ />
124
+ </div>
125
+ </div>
126
+ </template>
127
+ </section>
128
+ </LayoutHelper>
129
+ </div>
130
+ </template>
131
+ <script>
132
+ import { defineComponent } from 'vue'
133
+ import { mapStores } from 'pinia'
134
+ import { useSearchStore } from '../../../store/search'
135
+ import HeroMedium from './../../../components/HeroMedium/HeroMedium.vue'
136
+ import IconGrid from './../../../components/Icons/IconGrid.vue'
137
+ import IconList from './../../../components/Icons/IconList.vue'
138
+ import SearchResultGridItem from './../../../components/SearchResultGridItem/SearchResultGridItem.vue'
139
+ import SearchResultCard from './../../../components/SearchResultCard/SearchResultCard.vue'
140
+ import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
141
+ import BlockText from './../../../components/BlockText/BlockText.vue'
142
+ import DetailHeadline from './../../../components/DetailHeadline/DetailHeadline.vue'
143
+
144
+ export default defineComponent({
145
+ name: 'PagePodcastSeason',
146
+ components: {
147
+ HeroMedium,
148
+ SearchResultCard,
149
+ SearchResultGridItem,
150
+ IconGrid,
151
+ IconList,
152
+ LayoutHelper,
153
+ BlockText,
154
+ DetailHeadline
155
+ },
156
+ props: {
157
+ data: {
158
+ type: Object,
159
+ required: false
160
+ }
161
+ },
162
+ data() {
163
+ return {
164
+ allowGridView: true,
165
+ defaultShowGridView: false,
166
+ isGallery: false,
167
+ isPodcastSeason: true
168
+ }
169
+ },
170
+ computed: {
171
+ ...mapStores(useSearchStore),
172
+ showGridView() {
173
+ if (this.isGallery) {
174
+ if (this.searchStore.showGridViewForPodcasts !== undefined) {
175
+ return this.searchStore.showGridViewForPodcasts
176
+ }
177
+ } else if (this.searchStore.showGridView !== undefined) {
178
+ return this.searchStore.showGridView
179
+ }
180
+ return this.defaultShowGridView
181
+ }
182
+ }
183
+ })
184
+ </script>
185
+
186
+ <style scoped>
187
+ .flip-horizontal > svg {
188
+ display: block;
189
+ transform: scale(-1, 1);
190
+ }
191
+ </style>
@@ -0,0 +1,72 @@
1
+ import PagePressKitIndex from './PagePressKitIndex.vue'
2
+
3
+ export default {
4
+ title: 'Templates/WWW/PagePressKitIndex',
5
+ component: PagePressKitIndex,
6
+ decorators: [
7
+ () => ({
8
+ template: `<div id="storyDecorator" class="disable-nav-offset"><story/></div>`
9
+ })
10
+ ],
11
+ tags: ['!autodocs'],
12
+ parameters: {
13
+ layout: 'fullscreen',
14
+ html: {
15
+ root: '#storyDecorator'
16
+ }
17
+ },
18
+ excludeStories: /.*(Data)$/
19
+ }
20
+
21
+ // stories
22
+ export const BaseStory = {
23
+ name: 'PagePressKitIndex', // single story hoisting
24
+ args: {
25
+ data: {
26
+ title: 'Press Kits',
27
+ summary: `Cras at velit semper, pulvinar odio eu, aliquet orci. Fusce pretium, lectus ut ultricies finibus, dui mi fermentum sapien, non accumsan lectus turpis ac nunc.`,
28
+ callToAction: [
29
+ {
30
+ heading: 'View all other press kits',
31
+ text: 'Legacy Press Kits',
32
+ page: {
33
+ url: '/who-we-are/media-information/legacy-press-kits'
34
+ },
35
+ externalLink: ''
36
+ }
37
+ ],
38
+ children: [
39
+ {
40
+ id: 1,
41
+ label: 'Label',
42
+ topicLabel: 'Topic Label',
43
+ url: '/press-kits/placeholder',
44
+ title: 'Title of the press kit homepage',
45
+ summary:
46
+ 'Maecenas tristique tortor non ornare lobortis. Nam sollicitudin sapien sit amet enim vulputate laoreet. Sed mattis dui metus, sit amet faucibus arcu volutpat ut. Vestibulum sit amet felis sem. Duis interdum risus nulla, sed varius enim viverra vitae.',
47
+ thumbnailImage: {
48
+ src: {
49
+ url: 'https://picsum.photos/560/560',
50
+ width: '560',
51
+ height: '560'
52
+ }
53
+ }
54
+ },
55
+ {
56
+ id: 2,
57
+ label: 'Label',
58
+ topicLabel: null,
59
+ url: '/press-kits/placeholder',
60
+ title: 'Title of the press kit homepage',
61
+ thumbnailImage: {
62
+ src: {
63
+ url: 'https://picsum.photos/560/560',
64
+ width: '560',
65
+ height: '560'
66
+ }
67
+ }
68
+ }
69
+ ]
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div v-if="data">
3
+ <!-- page headline -->
4
+ <LayoutHelper
5
+ indent="col-2"
6
+ class="lg:mt-12 mt-5 mb-10"
7
+ >
8
+ <DetailHeadline :title="data.title" />
9
+ </LayoutHelper>
10
+
11
+ <div
12
+ v-if="data.summary"
13
+ class="lg:BaseGrid lg:mb-18 container mx-auto mb-10"
14
+ >
15
+ <div class="lg:px-0 lg:col-end-10 xl:col-end-8 relative col-start-2 px-4">
16
+ <BlockText :text="data.summary" />
17
+ </div>
18
+ </div>
19
+
20
+ <!-- press kits listing -->
21
+ <section
22
+ v-if="data.children && data.children.length"
23
+ aria-label="Directory Listing"
24
+ class="lg:my-18 my-10"
25
+ >
26
+ <LayoutHelper indent="col-2">
27
+ <SearchResultCard
28
+ v-for="item of data.children"
29
+ :key="item.id"
30
+ :type="item.label"
31
+ :topic="item.topicLabel"
32
+ :url="item.url"
33
+ :image="item.thumbnailImage"
34
+ :title="item.title"
35
+ :summary="item.summary"
36
+ heading-level="h2"
37
+ />
38
+ <LayoutHelper
39
+ v-if="data.callToAction && data.callToAction.length > 0"
40
+ indent="col-4"
41
+ >
42
+ <BlockCta :data="data.callToAction[0]" />
43
+ </LayoutHelper>
44
+ </LayoutHelper>
45
+ </section>
46
+ </div>
47
+ </template>
48
+ <script lang="ts">
49
+ /* PressKitIndex template. Similar to the Asteroid Watch Index page
50
+ ** TODO: once we have a lot of press kits, we can easily convert this to use the search mixin
51
+ */
52
+
53
+ import { defineComponent } from 'vue'
54
+ import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
55
+ import BlockCta from './../../../components/BlockCta/BlockCta.vue'
56
+ import BlockText from './../../../components/BlockText/BlockText.vue'
57
+ import SearchResultCard from './../../../components/SearchResultCard/SearchResultCard.vue'
58
+ import DetailHeadline from './../../../components/DetailHeadline/DetailHeadline.vue'
59
+
60
+ export default defineComponent({
61
+ name: 'PagePressKitIndex',
62
+ components: {
63
+ LayoutHelper,
64
+ BlockCta,
65
+ BlockText,
66
+ SearchResultCard,
67
+ DetailHeadline
68
+ },
69
+ props: {
70
+ data: {
71
+ type: Object,
72
+ required: false
73
+ }
74
+ }
75
+ })
76
+ </script>
@@ -0,0 +1,76 @@
1
+ import { NavSecondaryData } from './../../../components/NavSecondary/NavSecondary.stories.js'
2
+ import PageProfileDetail from './PageProfileDetail.vue'
3
+
4
+ export default {
5
+ title: 'Templates/WWW/PageProfileDetail',
6
+ component: PageProfileDetail,
7
+ tags: ['!autodocs'],
8
+ decorators: [
9
+ () => ({
10
+ template: `<div id="storyDecorator" class="disable-nav-offset"><story/></div>`
11
+ })
12
+ ],
13
+ parameters: {
14
+ layout: 'fullscreen',
15
+ html: {
16
+ root: '#storyDecorator'
17
+ }
18
+ },
19
+ excludeStories: /.*(Data)$/
20
+ }
21
+
22
+ export const PageProfileDetailData = {
23
+ url: '/people/dariush-divsalar/',
24
+ breadcrumb: NavSecondaryData.breadcrumb,
25
+ displayLabel: 'Communications, Tracking & Radar',
26
+ title: 'Dariush Divsalar',
27
+ jobTitle: 'Electrical engineer',
28
+ email: 'dariush.divsalar@jpl.nasa.gov',
29
+ image: {
30
+ original: 'https://picsum.photos/312/390',
31
+ screenSm: {
32
+ url: 'https://picsum.photos/156/195',
33
+ width: '156'
34
+ },
35
+ screenMd: {
36
+ url: 'https://picsum.photos/232/290',
37
+ width: '232'
38
+ },
39
+ src: {
40
+ url: 'https://picsum.photos/312/390',
41
+ width: '312',
42
+ height: '390'
43
+ }
44
+ },
45
+ biography:
46
+ '<p>Dariush Divsalar received his Ph.D. degree in electrical engineering from the University of California, Los Angeles (UCLA) in 1978.</p>',
47
+ education: '<p>Ph.D. Electrical Engineering, University of California, Los Angeles (UCLA)</p>',
48
+ researchInterests:
49
+ '<p>Involved in research, development, study and analysis of various aspects of coding, modulations, communication theory and applications for Deep Space Communication System Techniques for Future Space Exploration Missions, Satellite Communications.</p>',
50
+ professionalExperience:
51
+ '<p>Over 40 years at JPL, contributed in areas of digital communication systems, wireless communication systems both over AWGN and Fading channels, bandwidth efficient combined coding modulation techniques, digital signal processing, satellite communications, mobile communications.</p>',
52
+ communityService:
53
+ '<p>Contributed to professional Societies such as IEEE. Journal Referee for IEEE societies of Communication and Information Theory. Member of technical committees for of IEEE communication theory and information theory societies conferences. Technical Program Chairman of Communication Theory Mini-Conference Globecom 93. Technical Program Chairman of IEEE Communication Theory workshop, Santa Cruz, April 1995. Organizer and chairman of many IEEE conference sessions in the past ten years.</p>',
54
+ selectedAwards: `
55
+ <ul>
56
+ <li>NASA Exceptional Engineering Achievement Medal in 1996.</li>
57
+ <li>IEEE Alexander Graham Bell Medal in 2014.</li>
58
+ <li>Several IEEE Journal, conference, workshop, best paper awards</li>
59
+ </ul>
60
+ `,
61
+ publications: `
62
+ <p>Total of 21593 citations for all publications. Only journal publications are provided below.</p>
63
+ <ol>
64
+ <li>D. Divsalar and M. K. Simon, "Spectral Characteristics of Convolutionally Coded Digital Signals," IEEE Trans. on Communications, February 1980.</li>
65
+ <li>D. Divsalar and M. K. Simon, "The Power Spectral Density of Digital Modulations Transmitted Over Nonlinear Channels," IEEE Trans. on Communications, Vol. COM-30, January 1982.</li>
66
+ </ol>
67
+ `
68
+ }
69
+
70
+ // stories
71
+ export const BaseStory = {
72
+ name: 'PageProfileDetail',
73
+ args: {
74
+ data: PageProfileDetailData
75
+ }
76
+ }
@@ -0,0 +1,178 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="ThemeVariantLight text-gray-dark mb-20 md:mb-40"
5
+ itemscope
6
+ itemtype="http://schema.org/Person"
7
+ >
8
+ <NavSecondary :breadcrumb="data.breadcrumb" />
9
+
10
+ <div class="BaseGrid container mx-auto lg:px-0 px-4 lg:my-20 my-10 gap-y-0">
11
+ <div class="col-start-1 col-end-13 md:hidden">
12
+ <BaseHeading
13
+ level="h1"
14
+ size="h2"
15
+ class="mb-5"
16
+ itemprop="name"
17
+ >{{ data.title }}</BaseHeading
18
+ >
19
+ <p
20
+ class="text-body-lg mb-5"
21
+ itemprop="jobTitle"
22
+ >
23
+ {{ data.jobTitle }}
24
+ </p>
25
+ </div>
26
+ <BaseImagePlaceholder
27
+ aspect-ratio="portrait"
28
+ class="col-start-1 col-end-6 lg:col-start-3 lg:col-end-6 mb-10 md:mb-0"
29
+ >
30
+ <BaseImage
31
+ v-if="data.image && data.image.src"
32
+ :src="data.image.src.url"
33
+ :srcset="getPortraitSrcset(data.image)"
34
+ :width="data.image.src.width"
35
+ :height="data.image.src.height"
36
+ image-class="w-full h-auto"
37
+ loading="eager"
38
+ alt=""
39
+ />
40
+ </BaseImagePlaceholder>
41
+
42
+ <div class="col-start-1 col-end-13 md:col-start-6 md:col-end-13 lg:col-start-6 lg:col-end-11">
43
+ <div class="hidden md:block">
44
+ <BaseHeading
45
+ level="h1"
46
+ size="h2"
47
+ class="mb-5 md:mb-7 lg:mb-10"
48
+ itemprop="name"
49
+ >{{ data.title }}</BaseHeading
50
+ >
51
+ <p
52
+ class="text-body-lg mb-5 md:mb-7 lg:mb-10"
53
+ itemprop="jobTitle"
54
+ >
55
+ {{ data.jobTitle }}
56
+ </p>
57
+ </div>
58
+ <template v-if="data.email">
59
+ <BaseHeading
60
+ level="h2"
61
+ size="h4"
62
+ class="mb-2"
63
+ >
64
+ <IconEnvelope class="inline relative -top-0.5" />
65
+ Email
66
+ </BaseHeading>
67
+ <p class="text-h6">
68
+ <a
69
+ class="font-normal underline break-all"
70
+ itemprop="email"
71
+ :href="`mailto:${data.email}`"
72
+ >
73
+ {{ data.email }}
74
+ </a>
75
+ </p>
76
+ </template>
77
+ </div>
78
+ </div>
79
+
80
+ <LayoutHelper indent="col-3">
81
+ <ProfileDetailSectionGroup
82
+ v-for="section in topLevel"
83
+ :key="section.id"
84
+ :section="section"
85
+ :data="data"
86
+ />
87
+ </LayoutHelper>
88
+ </div>
89
+ </template>
90
+
91
+ <script>
92
+ import { defineComponent } from 'vue'
93
+ import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
94
+ import NavSecondary from './../../../components/NavSecondary/NavSecondary.vue'
95
+ import BaseHeading from './../../../components/BaseHeading/BaseHeading.vue'
96
+ import BaseImagePlaceholder from './../../../components/BaseImagePlaceholder/BaseImagePlaceholder.vue'
97
+ import BaseImage from './../../../components/BaseImage/BaseImage.vue'
98
+ import IconEnvelope from './../../../components/Icons/IconEnvelope.vue'
99
+ import ProfileDetailSectionGroup from './../../../components/ProfileDetailSectionGroup/ProfileDetailSectionGroup.vue'
100
+
101
+ export default defineComponent({
102
+ name: 'PageProfileDetail',
103
+ components: {
104
+ LayoutHelper,
105
+ NavSecondary,
106
+ BaseHeading,
107
+ BaseImagePlaceholder,
108
+ BaseImage,
109
+ IconEnvelope,
110
+ ProfileDetailSectionGroup
111
+ },
112
+ props: {
113
+ data: {
114
+ type: Object,
115
+ required: false
116
+ }
117
+ },
118
+
119
+ data() {
120
+ return {
121
+ topLevel: [
122
+ {
123
+ title: 'About',
124
+ id: 'about',
125
+ subsections: [
126
+ {
127
+ title: 'Biography',
128
+ prop: 'biography',
129
+ icon: 'IconBookUser'
130
+ },
131
+ { title: 'Education', prop: 'education', icon: 'IconUniversity' },
132
+ {
133
+ title: 'Research Interests',
134
+ prop: 'researchInterests',
135
+ icon: 'IconMagnifyingGlass'
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ title: 'Experience',
141
+ id: 'experience',
142
+ subsections: [
143
+ {
144
+ title: 'Professional Experience',
145
+ prop: 'professionalExperience',
146
+ icon: 'IconBriefcase'
147
+ },
148
+ {
149
+ title: 'Community Service',
150
+ prop: 'communityService',
151
+ icon: 'IconHand'
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ title: 'Achievements',
157
+ id: 'achievements',
158
+ subsections: [
159
+ {
160
+ title: 'Selected Awards',
161
+ prop: 'selectedAwards',
162
+ icon: 'IconMedal'
163
+ },
164
+ { title: 'Publications', prop: 'publications', icon: 'IconBook' }
165
+ ]
166
+ }
167
+ ]
168
+ }
169
+ },
170
+
171
+ methods: {
172
+ // Generate the srcset manually as the image renditions use a portrait aspect ratio.
173
+ getPortraitSrcset(image) {
174
+ return `${image.screenSm.url} ${image.screenSm.width}w, ${image.screenMd.url} ${image.screenMd.width}w, ${image.src.url} ${image.src.width}w`
175
+ }
176
+ }
177
+ })
178
+ </script>
@@ -0,0 +1,43 @@
1
+ import { HeroLargeData } from './../../../components/HeroLarge/HeroLarge.stories.js'
2
+ import { RoboticsDetailStatsData } from './../../../components/RoboticsDetailStats/RoboticsDetailStats.stories.js'
3
+ import { BlockCardGroupData } from './../../../components/BlockCardGroup/BlockCardGroup.stories.js'
4
+ import { BlockLinkTileCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
5
+ import { BlockRelatedLinksData } from './../../../components/BlockRelatedLinks/BlockRelatedLinks.stories.js'
6
+ import { BlockStreamfieldTruncatedData } from './../../../components/BlockStreamfield/BlockStreamfield.stories'
7
+
8
+ import PageRoboticsDetail from './PageRoboticsDetail.vue'
9
+
10
+ export default {
11
+ title: 'Templates/WWW/PageRoboticsDetail',
12
+ component: PageRoboticsDetail,
13
+ tags: ['!autodocs'],
14
+ decorators: [
15
+ () => ({
16
+ template: `<div id="storyDecorator" class="disable-nav-offset"><story/></div>`
17
+ })
18
+ ],
19
+ parameters: {
20
+ layout: 'fullscreen',
21
+ html: {
22
+ root: '#storyDecorator'
23
+ }
24
+ },
25
+ excludeStories: /.*(Data)$/
26
+ }
27
+
28
+ // stories
29
+ export const Template = {
30
+ name: 'PageRoboticsDetail',
31
+ args: {
32
+ data: {
33
+ ...HeroLargeData,
34
+ ...RoboticsDetailStatsData,
35
+ introduction:
36
+ 'FreeClimber: LEMUR 3 belongs to a new generation of robots being built at JPL that can crawl, walk and even climb rock walls. This robot was designed to operate in extreme terrains, demonstrating the applicability of its systems for possible missions to Mars, the Moon, and small bodies. It was developed under sponsorship of NASA Science Mission Directorate.',
37
+ ...BlockStreamfieldTruncatedData,
38
+ relatedLinks: [BlockRelatedLinksData.data],
39
+ moreRobots: BlockLinkTileCarouselData,
40
+ facts: BlockCardGroupData
41
+ }
42
+ }
43
+ }