@explorer-1/vue 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.d.ts +3 -1
- package/dist/explorer-1-vue.js +4677 -4526
- package/dist/explorer-1-vue.umd.cjs +12 -12
- package/dist/src/components/BlockHeading/BlockHeading.vue.d.ts +25 -2
- package/dist/src/components/DetailHeadline/DetailHeadline.stories.d.ts +29 -1
- package/dist/src/components/DetailHeadline/DetailHeadline.vue.d.ts +26 -0
- package/dist/src/components/NavDesktop/NavDesktop.stories.d.ts +3 -0
- package/dist/src/components/NavDesktop/NavDesktop.vue.d.ts +1 -0
- package/dist/src/components/NavDesktop/NavDesktopDropdown.vue.d.ts +1 -0
- package/dist/src/components/NavDesktopEdu/NavDesktopEdu.stories.d.ts +1 -0
- package/dist/src/components/NavDropdownToggle/NavDropdownToggle.vue.d.ts +19 -6
- package/dist/src/components/NavJumpMenu/NavJumpMenu.stories.d.ts +31 -0
- package/dist/src/components/NavMobile/NavMobile.stories.d.ts +30 -3
- package/dist/src/components/NavMobile/NavMobile.vue.d.ts +1 -0
- package/dist/src/components/NavMobile/NavMobileDropdown.vue.d.ts +9 -1
- package/dist/src/components/NavMobile/NavMobileEdu.stories.d.ts +3 -0
- package/dist/src/components/NavMobile/NavMobileSecondaryDropdown.vue.d.ts +7 -0
- package/dist/src/components/NavSecondary/NavSecondary.stories.d.ts +8 -0
- package/dist/src/components/NavSecondary/NavSecondary.vue.d.ts +23 -1
- package/dist/src/components/NavSecondary/NavSecondaryDropdown.vue.d.ts +33 -2
- package/dist/src/components/NavSecondary/NavSecondaryDropdownContent.vue.d.ts +11 -1
- package/dist/src/components/NavSecondary/NavSecondaryLink.vue.d.ts +21 -3
- package/dist/src/interfaces.d.ts +7 -1
- package/dist/src/store/header.d.ts +2 -0
- package/dist/src/templates/edu/{PageEduResourceArticle/PageEduResourceArticle.stories.d.ts → PageEduExplainerArticle/PageEduExplainerArticle.stories.d.ts} +3 -2
- package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +1004 -6
- package/dist/src/utils/eventBus.d.ts +1 -0
- package/dist/src/utils/getHeadingId.d.ts +1 -0
- package/dist/src/utils/mixins.d.ts +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -2
- package/src/components/BaseAudio/BaseAudio.vue +3 -4
- package/src/components/BaseLink/BaseLink.vue +2 -0
- package/src/components/BaseTag/BaseTag.vue +4 -4
- package/src/components/BlockHeading/BlockHeading.vue +28 -0
- package/src/components/BlockStreamfield/BlockStreamfield.vue +5 -1
- package/src/components/DetailHeadline/DetailHeadline.stories.js +27 -2
- package/src/components/DetailHeadline/DetailHeadline.vue +76 -33
- package/src/components/NavDesktop/NavDesktopDropdown.vue +3 -5
- package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +6 -15
- package/src/components/NavDesktopEdu/NavDesktopEdu.vue +24 -8
- package/src/components/NavDropdownToggle/NavDropdownToggle.vue +8 -3
- package/src/components/NavHeading/NavHeading.stories.js +1 -1
- package/src/components/NavHeading/NavHeading.vue +1 -1
- package/src/components/NavJumpMenu/NavJumpMenu.stories.js +47 -0
- package/src/components/NavJumpMenu/NavJumpMenu.vue +141 -0
- package/src/components/NavJumpMenu/NavJumpMenuContent.vue +74 -0
- package/src/components/NavLinkList/NavLinkList.vue +1 -1
- package/src/components/NavMobile/NavMobile.vue +19 -5
- package/src/components/NavMobile/NavMobileDropdown.vue +8 -4
- package/src/components/NavMobile/NavMobileSecondaryDropdown.vue +4 -1
- package/src/components/NavSecondary/NavSecondary.stories.js +8 -3
- package/src/components/NavSecondary/NavSecondary.vue +26 -6
- package/src/components/NavSecondary/NavSecondaryDropdown.vue +52 -17
- package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +5 -1
- package/src/components/NavSecondary/NavSecondaryLink.vue +38 -11
- package/src/components/TheFooter/TheFooter.vue +15 -1
- package/src/interfaces.ts +7 -1
- package/src/store/header.ts +6 -1
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.vue +2 -2
- package/src/templates/edu/{PageEduResourceArticle/PageEduResourceArticle.stories.js → PageEduExplainerArticle/PageEduExplainerArticle.stories.js} +6 -6
- package/src/templates/edu/{PageEduResourceArticle/PageEduResourceArticle.vue → PageEduExplainerArticle/PageEduExplainerArticle.vue} +4 -2
- package/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.js +6 -4
- package/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.vue +16 -2
- package/src/utils/eventBus.ts +3 -0
- package/src/utils/getHeadingId.ts +5 -0
- package/src/utils/mixins.ts +5 -1
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<BaseLink
|
|
3
|
-
:href="isExternal(item.path) ? item.path :
|
|
4
|
-
:to="!isExternal(item.path) ? item.path :
|
|
3
|
+
:href="isExternal(item.path) ? item.path : undefined"
|
|
4
|
+
:to="!isExternal(item.path) ? item.path : undefined"
|
|
5
5
|
link-class="block px-3 py-2"
|
|
6
6
|
variant="none"
|
|
7
7
|
class="NavSecondaryLink border-t-2 border-transparent"
|
|
8
|
-
:class="index
|
|
8
|
+
:class="baseLinkClasses(index)"
|
|
9
9
|
>
|
|
10
10
|
<span
|
|
11
11
|
class="inline-block pt-2 pb-1 mb-1 transition-colors duration-100 ease-in border-b-2 border-transparent"
|
|
12
|
-
:class="
|
|
13
|
-
index === 0
|
|
14
|
-
? 'can-hover:group-hover:border-primary'
|
|
15
|
-
: 'can-hover:group-hover:border-gray-mid-dark can-hover:group-hover:text-gray-mid-dark '
|
|
16
|
-
"
|
|
12
|
+
:class="spanClasses(index)"
|
|
17
13
|
>
|
|
18
14
|
{{ item.title }}
|
|
19
15
|
</span>
|
|
@@ -21,7 +17,8 @@
|
|
|
21
17
|
</template>
|
|
22
18
|
|
|
23
19
|
<script lang="ts">
|
|
24
|
-
import { defineComponent } from 'vue'
|
|
20
|
+
import { defineComponent, type PropType } from 'vue'
|
|
21
|
+
import type { BasicLinkObject } from './../../interfaces'
|
|
25
22
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
26
23
|
export default defineComponent({
|
|
27
24
|
name: 'NavSecondaryLink',
|
|
@@ -32,12 +29,17 @@ export default defineComponent({
|
|
|
32
29
|
// the index from the v-for loop
|
|
33
30
|
index: {
|
|
34
31
|
type: Number,
|
|
35
|
-
required: false
|
|
32
|
+
required: false,
|
|
33
|
+
default: undefined
|
|
36
34
|
},
|
|
37
35
|
// the nav item object that includes path and title
|
|
38
36
|
item: {
|
|
39
|
-
type: Object
|
|
37
|
+
type: Object as PropType<BasicLinkObject>,
|
|
40
38
|
required: true
|
|
39
|
+
},
|
|
40
|
+
invert: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: false
|
|
41
43
|
}
|
|
42
44
|
},
|
|
43
45
|
methods: {
|
|
@@ -46,6 +48,23 @@ export default defineComponent({
|
|
|
46
48
|
return true
|
|
47
49
|
}
|
|
48
50
|
return false
|
|
51
|
+
},
|
|
52
|
+
baseLinkClasses(index: number | undefined) {
|
|
53
|
+
let rootClasses = 'mr-auto font-semibold secondary-root'
|
|
54
|
+
rootClasses = this.invert
|
|
55
|
+
? `${rootClasses} text-white -invert`
|
|
56
|
+
: `${rootClasses} text-primary`
|
|
57
|
+
const regularClasses = this.invert ? 'text-white -invert' : 'text-gray-dark'
|
|
58
|
+
return index === 0 ? rootClasses : regularClasses
|
|
59
|
+
},
|
|
60
|
+
spanClasses(index: number | undefined) {
|
|
61
|
+
const rootClasses = this.invert
|
|
62
|
+
? 'can-hover:group-hover:border-white'
|
|
63
|
+
: 'can-hover:group-hover:border-primary'
|
|
64
|
+
const regularClasses = this.invert
|
|
65
|
+
? 'can-hover:group-hover:border-white can-hover:group-hover:text-white'
|
|
66
|
+
: 'can-hover:group-hover:border-gray-mid-dark can-hover:group-hover:text-gray-mid-dark'
|
|
67
|
+
return index === 0 ? rootClasses : regularClasses
|
|
49
68
|
}
|
|
50
69
|
}
|
|
51
70
|
})
|
|
@@ -58,5 +77,13 @@ export default defineComponent({
|
|
|
58
77
|
@apply border-primary #{!important};
|
|
59
78
|
}
|
|
60
79
|
}
|
|
80
|
+
&.-invert {
|
|
81
|
+
.nuxt-link-exact-active {
|
|
82
|
+
span {
|
|
83
|
+
@apply font-bold text-white;
|
|
84
|
+
@apply border-white #{!important};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
61
88
|
}
|
|
62
89
|
</style>
|
|
@@ -26,6 +26,18 @@
|
|
|
26
26
|
{{ getLinkText(link) }}
|
|
27
27
|
</BaseLink>
|
|
28
28
|
</div>
|
|
29
|
+
<template v-if="themeStore.isEdu">
|
|
30
|
+
<BaseLink
|
|
31
|
+
variant="none"
|
|
32
|
+
href="https://www.nasa.gov/learning-resources/"
|
|
33
|
+
class="text-subtitle text-blue edu:text-white mb-3"
|
|
34
|
+
link-class="flex flex-wrap-none overflow-visible whitespace-nowrap items-center"
|
|
35
|
+
external-target-blank
|
|
36
|
+
>
|
|
37
|
+
<span class="pr-2">NASA OSTEM</span>
|
|
38
|
+
<IconExternal class="shrink-0 text-sm -mt-0.5" />
|
|
39
|
+
</BaseLink>
|
|
40
|
+
</template>
|
|
29
41
|
</div>
|
|
30
42
|
</div>
|
|
31
43
|
<!-- footer extras -->
|
|
@@ -180,6 +192,7 @@ import { defineComponent } from 'vue'
|
|
|
180
192
|
import { mapStores } from 'pinia'
|
|
181
193
|
import { useThemeStore } from './../../store/theme'
|
|
182
194
|
import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
|
|
195
|
+
import IconExternal from './../Icons/IconExternal.vue'
|
|
183
196
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
184
197
|
import BaseButton from './../BaseButton/BaseButton.vue'
|
|
185
198
|
import NavSocial from './../NavSocial/NavSocial.vue'
|
|
@@ -193,7 +206,8 @@ export default defineComponent({
|
|
|
193
206
|
BaseButton,
|
|
194
207
|
NavSocial,
|
|
195
208
|
TheFooterSignUp,
|
|
196
|
-
LogoCaltech
|
|
209
|
+
LogoCaltech,
|
|
210
|
+
IconExternal
|
|
197
211
|
},
|
|
198
212
|
props: {
|
|
199
213
|
data: {
|
package/src/interfaces.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
export interface BreadcrumbPathObject {
|
|
2
2
|
path: string
|
|
3
3
|
title: string
|
|
4
|
-
children:
|
|
4
|
+
children: BreadcrumbPathObject[]
|
|
5
|
+
}
|
|
6
|
+
export interface BasicLinkObject {
|
|
7
|
+
title: string
|
|
8
|
+
path: string
|
|
5
9
|
}
|
|
6
10
|
|
|
7
11
|
export interface BlockData {
|
|
8
12
|
blockType: string
|
|
9
13
|
field?: string
|
|
14
|
+
heading?: string
|
|
15
|
+
level?: string
|
|
10
16
|
items?: any[]
|
|
11
17
|
}
|
|
12
18
|
export interface ImageSrcObject {
|
package/src/store/header.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface State {
|
|
|
11
11
|
highlightPrimary: boolean
|
|
12
12
|
globalChildren?: any | null
|
|
13
13
|
secondaryNav?: any | null
|
|
14
|
+
secondaryNavIsJumpMenu: boolean
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export const useHeaderStore = defineStore('header', {
|
|
@@ -19,7 +20,8 @@ export const useHeaderStore = defineStore('header', {
|
|
|
19
20
|
headerTransparent: false,
|
|
20
21
|
highlightPrimary: true,
|
|
21
22
|
globalChildren: null,
|
|
22
|
-
secondaryNav: null
|
|
23
|
+
secondaryNav: null,
|
|
24
|
+
secondaryNavIsJumpMenu: false
|
|
23
25
|
}
|
|
24
26
|
},
|
|
25
27
|
actions: {
|
|
@@ -35,6 +37,9 @@ export const useHeaderStore = defineStore('header', {
|
|
|
35
37
|
},
|
|
36
38
|
updateSecondary(value: any) {
|
|
37
39
|
this.secondaryNav = value
|
|
40
|
+
},
|
|
41
|
+
updateSecondaryNavIsJumpMenu(value: boolean) {
|
|
42
|
+
this.secondaryNavIsJumpMenu = value
|
|
38
43
|
}
|
|
39
44
|
}
|
|
40
45
|
})
|
|
@@ -8,11 +8,11 @@ import { BlockVideoEmbedData } from './../../../components/BlockVideoEmbed/Block
|
|
|
8
8
|
import { BlockRelatedLinksData } from './../../../components/BlockRelatedLinks/BlockRelatedLinks.stories.js'
|
|
9
9
|
import { BlockLinkCardCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
|
|
10
10
|
import { BlockStreamfieldTruncatedData } from './../../../components/BlockStreamfield/BlockStreamfield.stories'
|
|
11
|
-
import
|
|
11
|
+
import PageEduExplainerArticle from './PageEduExplainerArticle.vue'
|
|
12
12
|
|
|
13
13
|
export default {
|
|
14
|
-
title: 'Templates/EDU/
|
|
15
|
-
component:
|
|
14
|
+
title: 'Templates/EDU/PageEduExplainerArticle',
|
|
15
|
+
component: PageEduExplainerArticle,
|
|
16
16
|
decorators: [
|
|
17
17
|
() => ({
|
|
18
18
|
template: `<div id="storyDecorator" class="disable-nav-offset"><story/></div>`
|
|
@@ -30,9 +30,9 @@ export default {
|
|
|
30
30
|
export const BaseStory = {
|
|
31
31
|
args: {
|
|
32
32
|
data: {
|
|
33
|
-
__typename: '
|
|
34
|
-
pageType: '
|
|
35
|
-
contentType: 'edu_resources.
|
|
33
|
+
__typename: 'EDUExplainerArticlePage',
|
|
34
|
+
pageType: 'EDUExplainerArticlePage',
|
|
35
|
+
contentType: 'edu_resources.EDUExplainerArticlePage',
|
|
36
36
|
seoTitle: 'Test Resource',
|
|
37
37
|
searchDescription: '',
|
|
38
38
|
slug: 'test-resource',
|
|
@@ -14,7 +14,7 @@ import BlockIframeEmbed from '../../../components/BlockIframeEmbed/BlockIframeEm
|
|
|
14
14
|
import BlockRelatedLinks from '../../../components/BlockRelatedLinks/BlockRelatedLinks.vue'
|
|
15
15
|
|
|
16
16
|
export default defineComponent({
|
|
17
|
-
name: '
|
|
17
|
+
name: 'PageEduExplainerArticle',
|
|
18
18
|
components: {
|
|
19
19
|
HeroMedia,
|
|
20
20
|
BaseImagePlaceholder,
|
|
@@ -107,8 +107,10 @@ export default defineComponent({
|
|
|
107
107
|
:publication-date="data.publicationDate"
|
|
108
108
|
:publication-time="data.publicationTime"
|
|
109
109
|
:author="data.author"
|
|
110
|
-
|
|
110
|
+
label="Explainer Article"
|
|
111
|
+
pill-color="secondary"
|
|
111
112
|
schema
|
|
113
|
+
pill
|
|
112
114
|
/>
|
|
113
115
|
<ShareButtonsEdu
|
|
114
116
|
v-if="data?.url"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HeroMediaData } from './../../../components/HeroMedia/HeroMedia.stories'
|
|
2
|
-
import {
|
|
2
|
+
import { BlockStreamfieldData } from './../../../components/BlockStreamfield/BlockStreamfield.stories'
|
|
3
3
|
import PageEduNewsDetail from './PageEduNewsDetail.vue'
|
|
4
4
|
|
|
5
5
|
export default {
|
|
@@ -56,7 +56,7 @@ export const BaseStory = {
|
|
|
56
56
|
heroPosition: 'full_bleed',
|
|
57
57
|
heroImage: HeroMediaData.image,
|
|
58
58
|
heroImageInline: HeroMediaData.imageInline,
|
|
59
|
-
...
|
|
59
|
+
...BlockStreamfieldData
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -65,7 +65,8 @@ export const InlineHero = {
|
|
|
65
65
|
args: {
|
|
66
66
|
data: {
|
|
67
67
|
...BaseStory.args.data,
|
|
68
|
-
heroPosition: 'inline'
|
|
68
|
+
heroPosition: 'inline',
|
|
69
|
+
showJumpMenu: true
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
}
|
|
@@ -74,7 +75,8 @@ export const NoHero = {
|
|
|
74
75
|
args: {
|
|
75
76
|
data: {
|
|
76
77
|
...BaseStory.args.data,
|
|
77
|
-
hero: []
|
|
78
|
+
hero: [],
|
|
79
|
+
showJumpMenu: true
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
2
|
+
import { computed, ref, defineExpose } from 'vue'
|
|
3
3
|
import isEmpty from 'lodash/isEmpty.js'
|
|
4
4
|
import type { StreamfieldBlockData } from './../../../components/BlockStreamfield/BlockStreamfield.vue'
|
|
5
5
|
import type {
|
|
@@ -17,6 +17,7 @@ import ShareButtonsEdu from './../../../components/ShareButtonsEdu/ShareButtonsE
|
|
|
17
17
|
import BlockImageStandard from './../../../components/BlockImage/BlockImageStandard.vue'
|
|
18
18
|
import BlockText from './../../../components/BlockText/BlockText.vue'
|
|
19
19
|
import BlockStreamfield from './../../../components/BlockStreamfield/BlockStreamfield.vue'
|
|
20
|
+
import NavJumpMenu from './../../../components/NavJumpMenu/NavJumpMenu.vue'
|
|
20
21
|
|
|
21
22
|
interface PageEduNewsDetailObject extends PageResponseObject {
|
|
22
23
|
readTime: string
|
|
@@ -35,6 +36,7 @@ interface PageEduNewsDetailObject extends PageResponseObject {
|
|
|
35
36
|
topper: string
|
|
36
37
|
relatedLinks: RelatedLinkObject[]
|
|
37
38
|
body: StreamfieldBlockData[]
|
|
39
|
+
showJumpMenu: boolean
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
interface PageEduNewsDetailProps {
|
|
@@ -44,6 +46,8 @@ interface PageEduNewsDetailProps {
|
|
|
44
46
|
// define props
|
|
45
47
|
const props = defineProps<PageEduNewsDetailProps>()
|
|
46
48
|
|
|
49
|
+
const PageEduNewsDetailJumpMenu = ref()
|
|
50
|
+
|
|
47
51
|
const heroEmpty = computed(() => {
|
|
48
52
|
return isEmpty(props.data?.heroImage)
|
|
49
53
|
})
|
|
@@ -67,6 +71,10 @@ const computedClass = computed(() => {
|
|
|
67
71
|
const dateTimeArray = computed(() => {
|
|
68
72
|
return props.data.publicationDate.split(' ')
|
|
69
73
|
})
|
|
74
|
+
|
|
75
|
+
defineExpose({
|
|
76
|
+
PageEduNewsDetailJumpMenu
|
|
77
|
+
})
|
|
70
78
|
</script>
|
|
71
79
|
<template>
|
|
72
80
|
<div
|
|
@@ -76,6 +84,13 @@ const dateTimeArray = computed(() => {
|
|
|
76
84
|
itemscope
|
|
77
85
|
itemtype="http://schema.org/Article"
|
|
78
86
|
>
|
|
87
|
+
<NavJumpMenu
|
|
88
|
+
ref="PageEduNewsDetailJumpMenu"
|
|
89
|
+
:title="data.title"
|
|
90
|
+
:blocks="data.body"
|
|
91
|
+
:enabled="true"
|
|
92
|
+
/>
|
|
93
|
+
|
|
79
94
|
<!-- schema.org -->
|
|
80
95
|
<meta
|
|
81
96
|
v-if="data.thumbnailImage && data.thumbnailImage.original"
|
|
@@ -147,7 +162,6 @@ const dateTimeArray = computed(() => {
|
|
|
147
162
|
{{ data.summary }}
|
|
148
163
|
</p>
|
|
149
164
|
</LayoutHelper>
|
|
150
|
-
|
|
151
165
|
<!-- streamfield blocks -->
|
|
152
166
|
<BlockStreamfield
|
|
153
167
|
itemprop="articleBody"
|
package/src/utils/mixins.ts
CHANGED
|
@@ -123,9 +123,13 @@ export const mixinUpdateGlobalChildren = (value: [BreadcrumbPathObject] | null)
|
|
|
123
123
|
/* -- mixinUpdateSecondary --
|
|
124
124
|
This mixin is used by the navigation to share secondary nav override items between components
|
|
125
125
|
*/
|
|
126
|
-
export const mixinUpdateSecondary = (
|
|
126
|
+
export const mixinUpdateSecondary = (
|
|
127
|
+
value: BreadcrumbPathObject[] | undefined,
|
|
128
|
+
isJumpMenu: boolean = false
|
|
129
|
+
) => {
|
|
127
130
|
const headerStore = useHeaderStore()
|
|
128
131
|
headerStore.updateSecondary(value)
|
|
132
|
+
headerStore.updateSecondaryNavIsJumpMenu(isJumpMenu)
|
|
129
133
|
}
|
|
130
134
|
/* -- mixinHighlightPrimary --
|
|
131
135
|
This mixin is used to specify if active primary navigation items should be highlighted/underlined
|