@explorer-1/vue 0.2.5 → 0.2.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.
- package/dist/explorer-1-vue.js +2612 -2556
- package/dist/explorer-1-vue.umd.cjs +14 -12
- package/dist/src/components/CalendarButton/CalendarButton.vue.d.ts +3 -2
- package/dist/src/components/EventCard/EventCard.vue.d.ts +9 -4
- package/dist/src/components/EventDetailHero/EventDetailHero.vue.d.ts +11 -0
- package/dist/src/components/NavDesktopEdu/NavDesktopEdu.stories.d.ts +58 -11
- package/dist/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.d.ts +57 -29
- package/dist/src/utils/mixins.d.ts +2 -0
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/components/BaseButton/BaseButton.vue +1 -1
- package/src/components/BaseImage/BaseImage.vue +1 -1
- package/src/components/BaseTag/BaseTag.vue +2 -2
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +3 -2
- package/src/components/BlockImage/BlockImageStandard.vue +1 -1
- package/src/components/BlockKeyPoints/BlockKeyPoints.vue +2 -2
- package/src/components/BlockLinkCard/BlockLinkCard.vue +1 -0
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +29 -27
- package/src/components/BlockRelatedLinks/RelatedLink.vue +3 -3
- package/src/components/BlockVideo/BlockVideo.vue +1 -1
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +1 -1
- package/src/components/CalendarButton/CalendarButton.vue +9 -10
- package/src/components/EventCard/EventCard.vue +22 -8
- package/src/components/EventDetailHero/EventDetailHero.vue +45 -21
- package/src/components/HeroMedia/HeroMedia.vue +2 -2
- package/src/components/MixinCarousel/MixinCarousel.vue +2 -2
- package/src/components/NavDesktop/NavDesktopDropdown.vue +1 -1
- package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +6 -15
- package/src/components/NavDesktopEdu/NavDesktopEdu.vue +35 -9
- package/src/components/NavHeading/NavHeading.stories.js +1 -1
- package/src/components/NavHeading/NavHeading.vue +1 -1
- package/src/components/NavLinkList/NavLinkList.vue +1 -1
- package/src/components/NavMobile/NavMobile.vue +36 -11
- package/src/components/ShareButtons/ShareButtons.vue +1 -1
- package/src/components/ShareButtonsEdu/ShareButtonsEdu.vue +1 -1
- package/src/components/TheFooter/TheFooter.vue +18 -2
- package/src/templates/PageEventDetail/PageEventDetail.vue +2 -1
- package/src/templates/PageNewsDetail/PageNewsDetail.vue +3 -1
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +146 -104
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.vue +101 -50
- package/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.vue +1 -1
- package/src/utils/mixins.ts +18 -14
- package/tsconfig.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorer-1/vue",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"vue": "^3.4.21",
|
|
30
30
|
"vue-observe-visibility": "^1.0.0",
|
|
31
31
|
"vue3-compare-image": "^1.2.5",
|
|
32
|
-
"@explorer-1/common": "1.1.
|
|
32
|
+
"@explorer-1/common": "1.1.3"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@vitejs/plugin-vue": "^5.0.4",
|
|
@@ -94,7 +94,7 @@ export default defineComponent({
|
|
|
94
94
|
<template>
|
|
95
95
|
<component
|
|
96
96
|
:is="tag"
|
|
97
|
-
class="BaseButton text-contrast-none"
|
|
97
|
+
class="BaseButton text-contrast-none print:border print:!border-gray-dark print:text-center"
|
|
98
98
|
:class="variantClass"
|
|
99
99
|
:aria-label="ariaLabel"
|
|
100
100
|
:disabled="disabled"
|
|
@@ -11,7 +11,7 @@ const variantMap: Attributes = {
|
|
|
11
11
|
const sizeMap: Attributes = {
|
|
12
12
|
sm: 'text-xs border-t-2 py-1 px-2.5',
|
|
13
13
|
md: 'text-xs lg:text-base border-t py-1.5 px-3.5',
|
|
14
|
-
lg: 'text-base lg:text-lg border-t
|
|
14
|
+
lg: 'text-base lg:text-lg border-t pt-1.5 pb-1 px-5'
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
interface BaseTagProps {
|
|
@@ -28,7 +28,7 @@ const props = withDefaults(defineProps<BaseTagProps>(), {
|
|
|
28
28
|
<template>
|
|
29
29
|
<p
|
|
30
30
|
:class="`${variantMap[props.variant]} ${sizeMap[props.size]}`"
|
|
31
|
-
class="ThemeVariantLight text-contrast-none inline-block text-white font-bold edu:font-extrabold rounded-full leading-tight m-0 uppercase"
|
|
31
|
+
class="ThemeVariantLight text-contrast-none inline-block text-white font-bold edu:font-extrabold rounded-full leading-tight m-0 uppercase print:border-none print:px-0"
|
|
32
32
|
>
|
|
33
33
|
<slot />
|
|
34
34
|
<span class="sr-only">.</span>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
v-if="data.url"
|
|
6
6
|
ref="BlockIframeEmbed"
|
|
7
7
|
loading="lazy"
|
|
8
|
-
class="w-full border-none"
|
|
8
|
+
class="w-full border-none print:!border print:border-gray-dark"
|
|
9
9
|
:class="{ lazyload: !lazyNative }"
|
|
10
10
|
:title="data.title"
|
|
11
11
|
:data-src="data.url"
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<template v-else>
|
|
19
19
|
<BaseImagePlaceholder
|
|
20
20
|
v-if="data.url"
|
|
21
|
+
class="print:border print:border-gray-dark"
|
|
21
22
|
aspect-ratio="16:9"
|
|
22
23
|
dark-mode
|
|
23
24
|
>
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
</template>
|
|
40
41
|
<div
|
|
41
42
|
v-if="data.caption && data.caption.length > 2"
|
|
42
|
-
class="lg:px-0 p-4 pb-0"
|
|
43
|
+
class="lg:px-0 p-4 pb-0 print:pl-0"
|
|
43
44
|
>
|
|
44
45
|
<BaseImageCaption :data="data" />
|
|
45
46
|
</div>
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
class="mb-5"
|
|
8
8
|
:data="{ heading: data.heading }"
|
|
9
9
|
/>
|
|
10
|
-
<ul>
|
|
10
|
+
<ul class="print:!list-disc">
|
|
11
11
|
<li
|
|
12
12
|
v-for="(item, index) in data.listItem"
|
|
13
13
|
:key="index"
|
|
14
|
-
class="flex"
|
|
14
|
+
class="flex print:!list-item print:ml-4"
|
|
15
15
|
:class="index + 1 === data.listItem.length ? 'mb-0' : 'mb-4'"
|
|
16
16
|
>
|
|
17
17
|
<BlockText
|
|
@@ -8,36 +8,38 @@
|
|
|
8
8
|
>
|
|
9
9
|
{{ data.heading }}
|
|
10
10
|
</BaseHeading>
|
|
11
|
-
<
|
|
11
|
+
<ul
|
|
12
12
|
v-for="(link, index) in data.links"
|
|
13
13
|
:key="index"
|
|
14
|
-
class="sm:w-3/4 md:w-2/3 lg:w-3/4 xl:w-2/3 mb-2"
|
|
14
|
+
class="sm:w-3/4 md:w-2/3 lg:w-3/4 xl:w-2/3 mb-2 print:list-disc print:ml-4"
|
|
15
15
|
>
|
|
16
|
-
<
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
16
|
+
<li>
|
|
17
|
+
<template v-if="link.externalLink">
|
|
18
|
+
<RelatedLink
|
|
19
|
+
variant="external"
|
|
20
|
+
:href="link.externalLink"
|
|
21
|
+
>
|
|
22
|
+
{{ link.text }}
|
|
23
|
+
</RelatedLink>
|
|
24
|
+
</template>
|
|
25
|
+
<template v-else-if="link.document">
|
|
26
|
+
<RelatedLink
|
|
27
|
+
variant="document"
|
|
28
|
+
:href="link.document.url"
|
|
29
|
+
>
|
|
30
|
+
{{ link.text }}
|
|
31
|
+
</RelatedLink>
|
|
32
|
+
</template>
|
|
33
|
+
<template v-else-if="link.page">
|
|
34
|
+
<RelatedLink
|
|
35
|
+
variant="page"
|
|
36
|
+
:to="link.page.url"
|
|
37
|
+
>
|
|
38
|
+
{{ link.text }}
|
|
39
|
+
</RelatedLink>
|
|
40
|
+
</template>
|
|
41
|
+
</li>
|
|
42
|
+
</ul>
|
|
41
43
|
</div>
|
|
42
44
|
</template>
|
|
43
45
|
<script lang="ts">
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
:is="tag"
|
|
4
4
|
:to="to"
|
|
5
5
|
:href="href"
|
|
6
|
-
class="bg-gray-light group text-body-lg flex items-center justify-between px-4 py-4 cursor-pointer"
|
|
6
|
+
class="bg-gray-light group text-body-lg flex items-center justify-between px-4 py-4 cursor-pointer print:px-0 print:py-0 print:block"
|
|
7
7
|
:target="target"
|
|
8
8
|
rel="noopener"
|
|
9
9
|
>
|
|
10
|
-
<span class="can-hover:group-hover:underline min-w-12 block w-auto break-words">
|
|
10
|
+
<span class="can-hover:group-hover:underline min-w-12 block w-auto break-words print:inline">
|
|
11
11
|
<slot />
|
|
12
12
|
</span>
|
|
13
13
|
<component
|
|
14
14
|
:is="icon"
|
|
15
|
-
class="text-action xl:mx-4 flex-none ml-4 text-2xl leading-normal"
|
|
15
|
+
class="text-action xl:mx-4 flex-none ml-4 text-2xl leading-normal print:inline print:text-sm print:mx-2"
|
|
16
16
|
:class="variant === 'external' ? 'text-lg' : 'text-3xl'"
|
|
17
17
|
/>
|
|
18
18
|
</component>
|
|
@@ -64,13 +64,18 @@ export default defineComponent({
|
|
|
64
64
|
options: undefined
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
+
computed: {
|
|
68
|
+
icsDescription() {
|
|
69
|
+
return `${(this.description ? this.description + '\n\n' : '') + window?.location.href}`
|
|
70
|
+
}
|
|
71
|
+
},
|
|
67
72
|
|
|
68
73
|
mounted() {
|
|
69
74
|
this.init()
|
|
70
75
|
},
|
|
71
76
|
methods: {
|
|
72
77
|
init() {
|
|
73
|
-
let recurrence =
|
|
78
|
+
let recurrence = undefined
|
|
74
79
|
if (this.endDatetime && this.isAllDay) {
|
|
75
80
|
// Calculate how many full days
|
|
76
81
|
const startDateDayjs = dayjs(this.startDatetime)
|
|
@@ -81,21 +86,15 @@ export default defineComponent({
|
|
|
81
86
|
|
|
82
87
|
this.options = {
|
|
83
88
|
title: this.title ? this.title : undefined,
|
|
84
|
-
location: this.location ? this.
|
|
85
|
-
description: this.
|
|
89
|
+
location: this.location ? this.location : undefined,
|
|
90
|
+
description: this.icsDescription,
|
|
86
91
|
start: new Date(this.startDatetime),
|
|
87
92
|
end: !this.isAllDay && this.endDatetime ? new Date(this.endDatetime) : undefined,
|
|
88
93
|
recurrence
|
|
89
94
|
}
|
|
95
|
+
|
|
90
96
|
this.icalendar = new ICalendar(this.options)
|
|
91
97
|
},
|
|
92
|
-
addSlashes(string: string): string {
|
|
93
|
-
// Escape special characters COMMA, SEMI-COLON and BACKSLASH
|
|
94
|
-
// as temporary fix for this issue https://github.com/jshor/datebook/issues/179
|
|
95
|
-
// regex based of https://stackoverflow.com/a/770533
|
|
96
|
-
// eslint-disable-next-line
|
|
97
|
-
return string.replace(/[,;\\]/g, '\\$&').replace(/\u0000/g, '\\0')
|
|
98
|
-
},
|
|
99
98
|
handleDownload() {
|
|
100
99
|
const ics = this.icalendar.render()
|
|
101
100
|
const blob = new Blob([ics], {
|
|
@@ -65,12 +65,22 @@
|
|
|
65
65
|
v-if="splitDate"
|
|
66
66
|
class="hidden md:block absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary"
|
|
67
67
|
>
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
<template v-if="themeStore.isEdu">
|
|
69
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider">
|
|
70
|
+
{{ splitDate.month }}
|
|
71
|
+
</div>
|
|
72
|
+
<div class="text-subtitle">
|
|
73
|
+
{{ splitDate.year }}
|
|
74
|
+
</div>
|
|
75
|
+
</template>
|
|
76
|
+
<template v-else>
|
|
77
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider">
|
|
78
|
+
{{ splitDate.day }}
|
|
79
|
+
</div>
|
|
80
|
+
<div class="text-subtitle">
|
|
81
|
+
{{ splitDate.monthAndYear }}
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
74
84
|
</div>
|
|
75
85
|
</BaseImagePlaceholder>
|
|
76
86
|
</div>
|
|
@@ -84,8 +94,11 @@ import { defineComponent } from 'vue'
|
|
|
84
94
|
import {
|
|
85
95
|
mixinFormatEventDates,
|
|
86
96
|
mixinFormatSplitEventDates,
|
|
87
|
-
mixinFormatEventTimeInHoursAndMinutes
|
|
97
|
+
mixinFormatEventTimeInHoursAndMinutes,
|
|
98
|
+
type EventDateObject
|
|
88
99
|
} from './../../utils/mixins'
|
|
100
|
+
import { mapStores } from 'pinia'
|
|
101
|
+
import { useThemeStore } from '../../store/theme'
|
|
89
102
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
90
103
|
import BaseHeading from './../BaseHeading/BaseHeading.vue'
|
|
91
104
|
import BaseImage from './../BaseImage/BaseImage.vue'
|
|
@@ -145,7 +158,8 @@ export default defineComponent({
|
|
|
145
158
|
}
|
|
146
159
|
},
|
|
147
160
|
computed: {
|
|
148
|
-
|
|
161
|
+
...mapStores(useThemeStore),
|
|
162
|
+
splitDate(): EventDateObject | null {
|
|
149
163
|
if (this.startDate) {
|
|
150
164
|
return mixinFormatSplitEventDates(this.startDate, this.endDate)
|
|
151
165
|
}
|
|
@@ -4,41 +4,55 @@
|
|
|
4
4
|
class="EventDetailHero mb-10 md:mb-10 lg:mb-14 -mx-4 lg:mx-0"
|
|
5
5
|
>
|
|
6
6
|
<div class="hero">
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
:srcset="getSrcSet"
|
|
11
|
-
:width="image.src.width"
|
|
12
|
-
:height="image.src.height"
|
|
13
|
-
:alt="image.alt"
|
|
14
|
-
image-class="w-full h-auto"
|
|
15
|
-
object-fit-class="cover"
|
|
16
|
-
loading="lazy"
|
|
17
|
-
/>
|
|
18
|
-
<div
|
|
19
|
-
v-if="startDateSplit"
|
|
20
|
-
class="ThemeVariantLight absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary"
|
|
7
|
+
<BaseImagePlaceholder
|
|
8
|
+
:aspect-ratio="constrain ? '16:9' : 'none'"
|
|
9
|
+
dark-mode
|
|
21
10
|
>
|
|
22
|
-
<
|
|
23
|
-
|
|
11
|
+
<BaseImage
|
|
12
|
+
v-if="image.src"
|
|
13
|
+
:src="image.src.url"
|
|
14
|
+
:srcset="getSrcSet"
|
|
15
|
+
:width="image.src.width"
|
|
16
|
+
:height="image.src.height"
|
|
17
|
+
:alt="image.alt"
|
|
18
|
+
image-class="w-full h-auto"
|
|
19
|
+
object-fit-class="cover"
|
|
20
|
+
loading="lazy"
|
|
21
|
+
/>
|
|
22
|
+
<div
|
|
23
|
+
v-if="startDateSplit || ongoing"
|
|
24
|
+
class="ThemeVariantLight absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary print:hidden"
|
|
25
|
+
>
|
|
26
|
+
<template v-if="ongoing">
|
|
27
|
+
<div class="text-subtitle">Ongoing</div>
|
|
28
|
+
</template>
|
|
29
|
+
<template v-else>
|
|
30
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider uppercase">
|
|
31
|
+
{{ themeStore.isEdu ? startDateSplit?.month : startDateSplit?.day }}
|
|
32
|
+
</div>
|
|
33
|
+
<div class="text-subtitle">
|
|
34
|
+
{{ themeStore.isEdu ? startDateSplit?.year : startDateSplit?.monthAndYear }}
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
24
37
|
</div>
|
|
25
|
-
|
|
26
|
-
{{ startDateSplit.monthAndYear }}
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
38
|
+
</BaseImagePlaceholder>
|
|
29
39
|
</div>
|
|
30
40
|
</div>
|
|
31
41
|
</template>
|
|
32
42
|
<script lang="ts">
|
|
33
43
|
import { defineComponent } from 'vue'
|
|
44
|
+
import { mapStores } from 'pinia'
|
|
45
|
+
import { useThemeStore } from '../../store/theme'
|
|
34
46
|
import BaseImage from '../BaseImage/BaseImage.vue'
|
|
47
|
+
import BaseImagePlaceholder from '../BaseImagePlaceholder/BaseImagePlaceholder.vue'
|
|
35
48
|
import { mixinGetSrcSet, type EventDateObject } from './../../utils/mixins'
|
|
36
49
|
import type { PropType } from 'vue'
|
|
37
50
|
|
|
38
51
|
export default defineComponent({
|
|
39
52
|
name: 'EventDetailHero',
|
|
40
53
|
components: {
|
|
41
|
-
BaseImage
|
|
54
|
+
BaseImage,
|
|
55
|
+
BaseImagePlaceholder
|
|
42
56
|
},
|
|
43
57
|
props: {
|
|
44
58
|
data: {
|
|
@@ -50,13 +64,23 @@ export default defineComponent({
|
|
|
50
64
|
type: Object as PropType<EventDateObject | undefined>,
|
|
51
65
|
required: true
|
|
52
66
|
},
|
|
67
|
+
ongoing: {
|
|
68
|
+
type: Boolean,
|
|
69
|
+
default: false
|
|
70
|
+
},
|
|
53
71
|
image: {
|
|
54
72
|
type: Object,
|
|
55
73
|
required: false,
|
|
56
74
|
default: undefined
|
|
75
|
+
},
|
|
76
|
+
constrain: {
|
|
77
|
+
type: Boolean,
|
|
78
|
+
required: false,
|
|
79
|
+
default: false
|
|
57
80
|
}
|
|
58
81
|
},
|
|
59
82
|
computed: {
|
|
83
|
+
...mapStores(useThemeStore),
|
|
60
84
|
getSrcSet() {
|
|
61
85
|
return this.image ? mixinGetSrcSet(this.image) : undefined
|
|
62
86
|
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</div>
|
|
26
26
|
<div
|
|
27
27
|
v-if="hasCaptionArea"
|
|
28
|
-
class="lg:hidden absolute bottom-0 left-0 w-full h-auto mx-auto"
|
|
28
|
+
class="lg:hidden absolute bottom-0 left-0 w-full h-auto mx-auto print:hidden"
|
|
29
29
|
>
|
|
30
30
|
<button
|
|
31
31
|
class="bg-opacity-90 text-gray-dark flex items-center justify-center w-12 h-12 ml-auto bg-white cursor-pointer"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<div
|
|
45
45
|
v-if="hasCaptionArea"
|
|
46
46
|
:class="captionVisibilityClass"
|
|
47
|
-
class="max-w-screen-3xl ThemeVariantGray bg-gray-light bg-opacity-90 lg:bg-opacity-100 ThemeVariantGray lg:block lg:pb-4 lg:px-3 xl:px-8 lg:pt-4 items-start p-4 mx-auto"
|
|
47
|
+
class="max-w-screen-3xl ThemeVariantGray bg-gray-light bg-opacity-90 lg:bg-opacity-100 ThemeVariantGray lg:block lg:pb-4 lg:px-3 xl:px-8 lg:pt-4 items-start p-4 mx-auto print:block"
|
|
48
48
|
>
|
|
49
49
|
<BaseImageCaption :data="theImageData || customCaption" />
|
|
50
50
|
</div>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<div
|
|
13
13
|
v-if="heading || link"
|
|
14
14
|
:class="colStart"
|
|
15
|
-
class="lg:pl-0 col-start-1 col-end-13 px-4 mb-1"
|
|
15
|
+
class="lg:pl-0 col-start-1 col-end-13 px-4 mb-1 print:px-0"
|
|
16
16
|
>
|
|
17
17
|
<div class="sm:flex flex-wrap items-center justify-between">
|
|
18
18
|
<h2
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</div>
|
|
36
36
|
<div
|
|
37
37
|
:class="colStart"
|
|
38
|
-
class="lg:pl-0 sm:col-end-11 3xl:col-end-12 col-start-1 col-end-13 pl-4 overflow-x-visible"
|
|
38
|
+
class="lg:pl-0 sm:col-end-11 3xl:col-end-12 col-start-1 col-end-13 pl-4 print:pl-0 overflow-x-visible"
|
|
39
39
|
>
|
|
40
40
|
<!-- Slider main container -->
|
|
41
41
|
<div
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<NavDropdownToggle
|
|
4
4
|
v-click-outside="closeDropdown"
|
|
5
5
|
:aria-expanded="dropdownVisible ? true : false"
|
|
6
|
-
class="group relative z-20 px-4 font-medium border-t-2 border-transparent"
|
|
6
|
+
class="group relative z-20 px-4 font-medium border-t-2 border-transparent edu:text-sm edu:xl:text-base edu:px-2 edu:xl:px-4"
|
|
7
7
|
:class="{
|
|
8
8
|
'-open': dropdownVisible
|
|
9
9
|
}"
|
|
@@ -56,16 +56,8 @@ export const NavDesktopDropdownContentData = {
|
|
|
56
56
|
description: 'Lorem ipsum dolor sit amet.',
|
|
57
57
|
title: 'About'
|
|
58
58
|
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
heading: null,
|
|
62
|
-
headingPage: null
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
...MenuLinkColumnWithHeaderData,
|
|
66
|
-
heading: null,
|
|
67
|
-
headingPage: null
|
|
68
|
-
}
|
|
59
|
+
MenuLinkColumnWithHeaderData,
|
|
60
|
+
MenuLinkColumnWithHeaderData
|
|
69
61
|
]
|
|
70
62
|
}
|
|
71
63
|
// combined dropdown data for "more" menu
|
|
@@ -106,12 +98,11 @@ export const NavDesktopData = {
|
|
|
106
98
|
'{"/": [{"path": "http://www.jpl.nasa.gov/", "title": "Asteroid watch"}, {"path": "http://www.jpl.nasa.gov/", "title": "Asteroid fast facts"}, {"path": "http://www.jpl.nasa.gov/", "title": "Meteor shower viewing guide"}, {"path": "http://www.jpl.nasa.gov/", "title": "Yeoman\'s top 10"}, {"path": "http://www.jpl.nasa.gov/", "title": "Glossary of space rocks"}, {"path": "/robotics-at-jpl/", "title": "Robotics"}, {"path": "http://www.jpl.nasa.gov/", "title": "Apps"}, {"path": "/jpl-life/", "title": "JPL Life"}, {"path": "/stars-and-galaxies/", "title": "Stars and Galaxies"}, {"path": "/exoplanets/", "title": "Exoplanets"}, {"path": "/solar-system/", "title": "Solar System"}, {"path": "/asteroids/", "title": "Asteroids"}, {"path": "/comets/", "title": "Comets"}, {"path": "/technology/", "title": "Technology"}, {"path": "/mars/", "title": "Mars"}, {"path": "/earth/", "title": "Earth"}, {"path": "/climate-change/", "title": "Climate Change"}, {"path": "/earthquakes/", "title": "Earthquakes"}, {"path": "/weather/", "title": "Weather"}, {"path": "/robotics/", "title": "Robotics"}], "/missions/": [{"path": "/missions/", "title": "Current"}, {"path": "/missions/", "title": "Past"}, {"path": "/missions/", "title": "Future"}, {"path": "/missions/", "title": "Proposed"}, {"path": "/missions/", "title": "All"}], "/news/": [{"path": "/news/", "title": "All news"}, {"path": "/news/", "title": "Press kits"}, {"path": "/news/", "title": "Fact sheets"}, {"path": "/news/", "title": "Media Information"}, {"path": "/news/", "title": "JPL newsletter"}]}',
|
|
107
99
|
...NavDesktopTopHatData,
|
|
108
100
|
primaryNavigation: [
|
|
109
|
-
NavDesktopDropdownContentData,
|
|
110
101
|
{
|
|
111
102
|
...NavDesktopDropdownContentData,
|
|
112
103
|
titleLink: {
|
|
113
104
|
linkPage: {
|
|
114
|
-
title: '
|
|
105
|
+
title: 'K-12 Resources',
|
|
115
106
|
url: '/missions/'
|
|
116
107
|
},
|
|
117
108
|
title: null
|
|
@@ -139,7 +130,7 @@ export const NavDesktopData = {
|
|
|
139
130
|
...NavDesktopDropdownContentData,
|
|
140
131
|
titleLink: {
|
|
141
132
|
linkPage: {
|
|
142
|
-
title: '
|
|
133
|
+
title: 'Internships',
|
|
143
134
|
url: '/news/'
|
|
144
135
|
},
|
|
145
136
|
title: null
|
|
@@ -149,7 +140,7 @@ export const NavDesktopData = {
|
|
|
149
140
|
...NavDesktopDropdownContentData,
|
|
150
141
|
titleLink: {
|
|
151
142
|
linkPage: {
|
|
152
|
-
title: '
|
|
143
|
+
title: 'News & Events',
|
|
153
144
|
url: '/galleries/'
|
|
154
145
|
},
|
|
155
146
|
title: null
|
|
@@ -159,7 +150,7 @@ export const NavDesktopData = {
|
|
|
159
150
|
...NavDesktopDropdownContentData,
|
|
160
151
|
titleLink: {
|
|
161
152
|
linkPage: {
|
|
162
|
-
title: '
|
|
153
|
+
title: 'About',
|
|
163
154
|
url: '/engage/'
|
|
164
155
|
},
|
|
165
156
|
title: null
|
|
@@ -19,14 +19,29 @@
|
|
|
19
19
|
<NavLogoLinks class="w-[17rem] z-20 flex flex-shrink-0 my-2 -ml-1">
|
|
20
20
|
<img
|
|
21
21
|
:src="LogoWhite"
|
|
22
|
+
class="print:hidden"
|
|
23
|
+
alt="JPL Logo"
|
|
24
|
+
width="324"
|
|
25
|
+
height="72"
|
|
26
|
+
/>
|
|
27
|
+
<img
|
|
28
|
+
:src="LogoColor"
|
|
29
|
+
class="hidden print:block"
|
|
22
30
|
alt="JPL Logo"
|
|
23
31
|
width="324"
|
|
24
32
|
height="72"
|
|
25
33
|
/>
|
|
26
34
|
</NavLogoLinks>
|
|
27
35
|
<!-- site title -->
|
|
28
|
-
<div class="ml-3 pl-5 border-l border-white border-opacity-30 z-20">
|
|
29
|
-
<
|
|
36
|
+
<div class="ml-2 pl-3 xl:ml-3 xl:pl-5 border-l border-white border-opacity-30 z-20">
|
|
37
|
+
<BaseLink
|
|
38
|
+
class="text-white font-bold text-2xl xl:text-3xl"
|
|
39
|
+
to="/edu/"
|
|
40
|
+
link-class="py-2"
|
|
41
|
+
variant="none"
|
|
42
|
+
>
|
|
43
|
+
Education
|
|
44
|
+
</BaseLink>
|
|
30
45
|
</div>
|
|
31
46
|
<!-- main nav with dropdowns -->
|
|
32
47
|
<nav
|
|
@@ -51,6 +66,16 @@
|
|
|
51
66
|
<NavDesktopDropdownContent :data="item" />
|
|
52
67
|
</NavDesktopDropdown>
|
|
53
68
|
</template>
|
|
69
|
+
<BaseLink
|
|
70
|
+
href="https://www.nasa.gov/learning-resources/"
|
|
71
|
+
variant="none"
|
|
72
|
+
class="NavDesktopLink group relative z-20 font-medium border-t-2 border-transparent text-sm xl:text-base px-2 xl:px-4"
|
|
73
|
+
link-class="inline-block py-2 transition-colors duration-100 ease-in border-b-2 border-transparent group-hover:border-white flex flex-wrap-none items-center"
|
|
74
|
+
external-target-blank
|
|
75
|
+
>
|
|
76
|
+
NASA OSTEM
|
|
77
|
+
<IconExternal class="text-sm -mt-0.5 ml-2" />
|
|
78
|
+
</BaseLink>
|
|
54
79
|
</div>
|
|
55
80
|
<!-- search -->
|
|
56
81
|
<div
|
|
@@ -93,13 +118,16 @@
|
|
|
93
118
|
import { defineComponent } from 'vue'
|
|
94
119
|
import { mapStores } from 'pinia'
|
|
95
120
|
import { useHeaderStore } from './../../store/header'
|
|
121
|
+
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
96
122
|
import NavDesktopDropdown from './../NavDesktop/NavDesktopDropdown.vue'
|
|
97
123
|
import NavDesktopDropdownContent from './../NavDesktop/NavDesktopDropdownContent.vue'
|
|
98
124
|
import NavLogoLinks from './../NavLogoLinks/NavLogoLinks.vue'
|
|
99
125
|
import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
|
|
126
|
+
import IconExternal from './../Icons/IconExternal.vue'
|
|
100
127
|
import IconSearch from './../Icons/IconSearch.vue'
|
|
101
128
|
import IconClose from './../Icons/IconClose.vue'
|
|
102
129
|
import type { LinkObject, BreadcrumbObject } from './../../utils/mixins'
|
|
130
|
+
import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
|
|
103
131
|
import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
|
|
104
132
|
import type { BreadcrumbPathObject } from '../../interfaces'
|
|
105
133
|
import {
|
|
@@ -112,12 +140,14 @@ import {
|
|
|
112
140
|
export default defineComponent({
|
|
113
141
|
name: 'NavDesktop',
|
|
114
142
|
components: {
|
|
143
|
+
BaseLink,
|
|
115
144
|
NavDesktopDropdown,
|
|
116
145
|
NavDesktopDropdownContent,
|
|
117
146
|
NavLogoLinks,
|
|
118
147
|
NavSearchForm,
|
|
119
148
|
IconSearch,
|
|
120
|
-
IconClose
|
|
149
|
+
IconClose,
|
|
150
|
+
IconExternal
|
|
121
151
|
},
|
|
122
152
|
props: {
|
|
123
153
|
data: {
|
|
@@ -158,7 +188,8 @@ export default defineComponent({
|
|
|
158
188
|
// This is used in transition logic to avoid distracting animations on route changes
|
|
159
189
|
// without this check, the nav would swoop in/out on a route change if it was visible before the route change occured (e.g. partially scrolled up on a page)
|
|
160
190
|
scrolledCurrentPage: false,
|
|
161
|
-
LogoWhite: LogoWhite
|
|
191
|
+
LogoWhite: LogoWhite,
|
|
192
|
+
LogoColor: LogoColor
|
|
162
193
|
}
|
|
163
194
|
},
|
|
164
195
|
computed: {
|
|
@@ -278,11 +309,6 @@ export default defineComponent({
|
|
|
278
309
|
.main-navigation {
|
|
279
310
|
> * {
|
|
280
311
|
@apply text-white;
|
|
281
|
-
|
|
282
|
-
.NavDesktopDropdown > button {
|
|
283
|
-
// mimics .text-contrast class
|
|
284
|
-
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);
|
|
285
|
-
}
|
|
286
312
|
}
|
|
287
313
|
}
|
|
288
314
|
}
|
|
@@ -6,7 +6,7 @@ export default {
|
|
|
6
6
|
component: NavHeading,
|
|
7
7
|
decorators: [
|
|
8
8
|
() => ({
|
|
9
|
-
template: `<div id="storyDecorator" class="p-8 bg-jpl-blue-darker"><story/></div>`
|
|
9
|
+
template: `<div id="storyDecorator" class="p-8 bg-jpl-blue-darker edu:bg-primary-dark"><story/></div>`
|
|
10
10
|
})
|
|
11
11
|
],
|
|
12
12
|
parameters: {
|