@explorer-1/vue 0.2.22 → 0.2.23

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 (48) hide show
  1. package/components.d.ts +2 -0
  2. package/dist/explorer-1-vue.js +8119 -7836
  3. package/dist/explorer-1-vue.umd.cjs +14 -14
  4. package/dist/src/components/BaseAccordionItem/BaseAccordionItem.vue.d.ts +54 -0
  5. package/dist/src/components/BaseButton/BaseButton.stories.d.ts +0 -13
  6. package/dist/src/components/BaseButton/BaseButton.vue.d.ts +0 -14
  7. package/dist/src/components/BaseImageCaption/BaseImageCaption.vue.d.ts +18 -0
  8. package/dist/src/components/BaseModal/BaseModal.stories.d.ts +0 -26
  9. package/dist/src/components/BaseSwimlane/BaseSwimlane.vue.d.ts +2 -2
  10. package/dist/src/components/BaseTimer/BaseTimer.vue.d.ts +2 -2
  11. package/dist/src/components/BlockAccordion/BlockAccordion.stories.d.ts +25 -40
  12. package/dist/src/components/BlockAccordion/BlockAccordion.vue.d.ts +51 -0
  13. package/dist/src/components/BlockGist/BlockGist.stories.d.ts +19 -0
  14. package/dist/src/components/BlockGist/BlockGist.vue.d.ts +19 -0
  15. package/dist/src/components/BlockGist/GitHub404.vue.d.ts +2 -0
  16. package/dist/src/components/BlockLinkCard/BlockLinkCard.stories.d.ts +71 -15
  17. package/dist/src/components/BlockLinkCard/BlockLinkCard.vue.d.ts +10 -2
  18. package/dist/src/components/BlockStreamfield/BlockStreamfield.stories.d.ts +127 -27
  19. package/dist/src/components/BlockTeaser/BlockTeaser.vue.d.ts +3 -2
  20. package/dist/src/components/CalendarButton/CalendarButton.vue.d.ts +12 -2
  21. package/dist/src/components/LayoutHelper/LayoutHelper.vue.d.ts +1 -1
  22. package/dist/src/components/MetaPanel/MetaPanel.stories.d.ts +6 -2
  23. package/dist/src/components/MetadataEvent/MetadataEvent.vue.d.ts +8 -0
  24. package/dist/src/components/MixinFancybox/MixinFancybox.vue.d.ts +1 -1
  25. package/dist/src/components/NavDesktop/NavDesktop.stories.d.ts +49 -0
  26. package/dist/src/components/NavDropdownToggle/NavDropdownToggle.vue.d.ts +1 -1
  27. package/dist/src/docs/foundation/grid_layouthelpers.stories.d.ts +4 -4
  28. package/dist/src/interfaces.d.ts +4 -0
  29. package/dist/src/templates/PageContent/PageContent.vue.d.ts +1 -0
  30. package/dist/src/templates/edu/PageContentEdu.stories.d.ts +179 -2
  31. package/dist/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.d.ts +37 -18
  32. package/dist/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.stories.d.ts +3 -1
  33. package/dist/src/templates/edu/PageEduLesson/PageEduLesson.stories.d.ts +28 -46
  34. package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +378 -81
  35. package/dist/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.d.ts +126 -27
  36. package/dist/style.css +1 -1
  37. package/package.json +1 -1
  38. package/src/components/BaseAccordionItem/BaseAccordionItem.vue +8 -11
  39. package/src/components/BlockAccordion/BlockAccordion.stories.js +64 -19
  40. package/src/components/BlockAccordion/BlockAccordion.vue +99 -18
  41. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +2 -0
  42. package/src/components/BlockStreamfield/BlockStreamfield.vue +14 -1
  43. package/src/components/NavJumpMenu/NavJumpMenu.vue +14 -2
  44. package/src/components/NavSecondary/NavSecondaryDropdown.vue +4 -5
  45. package/src/components/NavSecondary/NavSecondaryLink.vue +6 -4
  46. package/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.vue +1 -0
  47. package/src/templates/edu/PageEduLesson/PageEduLesson.vue +1 -0
  48. package/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.vue +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorer-1/vue",
3
- "version": "0.2.22",
3
+ "version": "0.2.23",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,9 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, reactive, ref } from 'vue'
3
- import { AccordionItemObject } from './../../interfaces.ts'
3
+ import type { AccordionItemObject } from './../../interfaces.ts'
4
4
  import { uniqueId } from 'lodash'
5
5
  import IconPlus from './../Icons/IconPlus.vue'
6
- import BlockStreamfield from './../BlockStreamfield/BlockStreamfield.vue'
7
6
 
8
7
  export interface BaseAccordionItemProps {
9
8
  headingLevel?: string
@@ -58,9 +57,12 @@ const emit = defineEmits(['accordionItemOpened', 'accordionItemClosed'])
58
57
  <slot name="header">
59
58
  <div
60
59
  v-if="headingLevel && item"
61
- class="border-b border-gray-light-mid"
60
+ :class="{ 'border-b border-gray-light-mid': isHidden }"
62
61
  >
63
- <component :is="headingLevel">
62
+ <component
63
+ :is="headingLevel"
64
+ class="!font-medium"
65
+ >
64
66
  <button
65
67
  v-bind-once="{ id: headingId, 'aria-controls': panelId }"
66
68
  :aria-expanded="ariaExpanded"
@@ -91,15 +93,10 @@ const emit = defineEmits(['accordionItemOpened', 'accordionItemClosed'])
91
93
  <div
92
94
  v-bind-once="{ id: panelId, 'aria-labelledby': headingId }"
93
95
  role="region"
94
- class="BaseAccordion-panel"
96
+ class="BaseAccordion-panel border-b border-gray-light-mid"
95
97
  >
96
98
  <slot name="panelContents">
97
- <div class="px-4 pb-8">
98
- <BlockStreamfield
99
- :data="item.body"
100
- variant="fluid"
101
- />
102
- </div>
99
+ <pre>{{ item.body }}</pre>
103
100
  </slot>
104
101
  </div>
105
102
  </slot>
@@ -1,29 +1,74 @@
1
1
  import BlockAccordion from './BlockAccordion.vue'
2
- import { BlockStreamfieldTruncatedData } from '../BlockStreamfield/BlockStreamfield.stories'
2
+ import { BlockImageData } from './../BlockImage/BlockImage.stories'
3
3
 
4
4
  export default {
5
5
  title: 'Components/Blocks/BlockAccordion',
6
- component: BlockAccordion
6
+ component: BlockAccordion,
7
+ tags: ['!autodocs'],
8
+ excludeStories: /.*Data$/
7
9
  }
8
10
 
11
+ const AccordionItemStreamfieldData = [
12
+ {
13
+ blockType: 'RichTextBlock',
14
+ value:
15
+ '<p>Lorem ipsum <a href="/missions/test-mission/">dolor</a> sit amet, consectetur adipiscing elit. Quisque vitae justo quis justo malesuada molestie. Cras sed tincidunt dui.</p>\n'
16
+ },
17
+ { ...BlockImageData, blockType: 'ImageBlock' },
18
+ {
19
+ blockType: 'RichTextBlock',
20
+ value:
21
+ '<p>Integer imperdiet blandit neque vitae euismod. Nulla aliquet lacus nibh, vel tincidunt urna efficitur non. In et eros vitae ex posuere maximus quis eget urna. Suspendisse fringilla posuere velit sit amet posuere. Morbi malesuada bibendum vehicula. Donec faucibus ut erat ut mattis. Suspendisse ornare, quam at placerat cursus, dolor mi lacinia nunc, eget maximus augue nulla in dolor.</p>\n'
22
+ }
23
+ ]
24
+
25
+ export const BlockAccordionData = {
26
+ blockType: 'AccordionBlock',
27
+ accordionItemsHeadingLevel: '3',
28
+ accordionItems: [
29
+ {
30
+ blockType: 'AccordionItemBlock',
31
+ blocks: [
32
+ {
33
+ blockType: 'CharBlock',
34
+ value: 'First Accordion Item'
35
+ },
36
+ {
37
+ blockType: 'AccordionBodyStreamfieldBlock',
38
+ blocks: AccordionItemStreamfieldData
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ blockType: 'AccordionItemBlock',
44
+ blocks: [
45
+ {
46
+ blockType: 'CharBlock',
47
+ value: 'Second Accordion Item'
48
+ },
49
+ {
50
+ blockType: 'AccordionBodyStreamfieldBlock',
51
+ blocks: AccordionItemStreamfieldData
52
+ }
53
+ ]
54
+ },
55
+ {
56
+ blockType: 'AccordionItemBlock',
57
+ blocks: [
58
+ {
59
+ blockType: 'CharBlock',
60
+ value: 'Third Accordion Item'
61
+ },
62
+ {
63
+ blockType: 'AccordionBodyStreamfieldBlock',
64
+ blocks: AccordionItemStreamfieldData
65
+ }
66
+ ]
67
+ }
68
+ ]
69
+ }
9
70
  // stories
10
71
  export const BaseStory = {
11
72
  name: 'BlockAccordion',
12
- args: {
13
- headingLevel: 'h5',
14
- items: [
15
- {
16
- title: 'Title for the accordion',
17
- body: BlockStreamfieldTruncatedData.body
18
- },
19
- {
20
- title: 'Another',
21
- body: BlockStreamfieldTruncatedData.body
22
- },
23
- {
24
- title: 'Yet another',
25
- body: BlockStreamfieldTruncatedData.body
26
- }
27
- ]
28
- }
73
+ args: { data: BlockAccordionData }
29
74
  }
@@ -1,32 +1,113 @@
1
1
  <script setup lang="ts">
2
- import { reactive } from 'vue'
3
- import { AccordionItemObject } from '../../interfaces'
2
+ import { computed, reactive } from 'vue'
3
+ import type { AccordionItemObject, ImageBlock, ImageObject } from '../../interfaces'
4
4
  import BaseAccordionItem from './../BaseAccordionItem/BaseAccordionItem.vue'
5
+ import BlockImageStandard from './../BlockImage/BlockImageStandard.vue'
6
+ import BlockText from './../BlockText/BlockText.vue'
5
7
 
8
+ interface AccordionItemCharBlock {
9
+ blockType: 'CharBlock'
10
+ value: string
11
+ }
12
+ interface RichTextBlock {
13
+ blockType: 'RichTextBlock'
14
+ text: string
15
+ variant: string
16
+ }
17
+ interface AccordionBodyStreamfieldBlock {
18
+ blockType: 'AccordionBodyStreamfieldBlock'
19
+ blocks: (ImageBlock | RichTextBlock)[]
20
+ }
21
+ interface AccordionItemBlock {
22
+ blockType: 'AccordionItemBlock'
23
+ blocks: (AccordionBodyStreamfieldBlock | AccordionItemCharBlock)[]
24
+ }
25
+ export interface AccordionBlockObject {
26
+ accordionItemsHeadingLevel: string
27
+ accordionItems: AccordionItemBlock[]
28
+ }
6
29
  interface BlockAccordionProps {
7
- autoClose?: boolean
8
- headingLevel?: string
9
- items?: AccordionItemObject[]
30
+ data: AccordionBlockObject
10
31
  }
11
32
 
12
33
  // define props
13
34
  const props = withDefaults(defineProps<BlockAccordionProps>(), {
14
- autoClose: false,
15
- headingLevel: 'h2',
16
- items: undefined
35
+ data: undefined
17
36
  })
18
37
 
19
- const { headingLevel, items } = reactive(props)
38
+ const { data } = reactive(props)
39
+
40
+ const headingLevel = computed(() => {
41
+ return data ? `h${data?.accordionItemsHeadingLevel}` : undefined
42
+ })
43
+
44
+ const remappedAccordionItems = computed((): AccordionItemObject[] | undefined => {
45
+ if (data?.accordionItems) {
46
+ const remappedItems = data.accordionItems.map((item) => {
47
+ let title = ''
48
+ let body: (ImageBlock | RichTextBlock)[] = []
49
+
50
+ item.blocks.forEach((block) => {
51
+ if (block.blockType === 'CharBlock') {
52
+ title = (block as AccordionItemCharBlock).value || ''
53
+ } else if (block.blockType === 'AccordionBodyStreamfieldBlock') {
54
+ body = (block as AccordionBodyStreamfieldBlock).blocks || []
55
+ }
56
+ })
57
+ return {
58
+ title,
59
+ body
60
+ }
61
+ })
62
+ return remappedItems
63
+ }
64
+ return undefined
65
+ })
20
66
  </script>
21
67
  <template>
22
- <div class="BlockAccordion">
23
- <slot>
24
- <BaseAccordionItem
25
- v-for="(item, index) in items"
26
- :key="index"
27
- :heading-level="headingLevel"
28
- :item="item"
29
- />
30
- </slot>
68
+ <div class="BlockAccordion border-t border-gray-light-mid">
69
+ <BaseAccordionItem
70
+ v-for="(item, index) in remappedAccordionItems"
71
+ :key="index"
72
+ :heading-level="headingLevel"
73
+ :item="item"
74
+ >
75
+ <template #panelContents>
76
+ <div
77
+ v-if="item.body"
78
+ class="px-4 pb-8"
79
+ >
80
+ <div
81
+ v-for="(block, block_index) in item.body"
82
+ :key="block_index"
83
+ :class="{ 'mb-5': Number(block_index) + 1 != item.body.length }"
84
+ >
85
+ <template v-if="block.blockType === 'ImageBlock'">
86
+ <BlockImageStandard
87
+ class="AccordionItemImage"
88
+ :data="block.image as ImageObject"
89
+ :caption="block.caption"
90
+ :display-bacpotion="block.displayCaption"
91
+ />
92
+ </template>
93
+ <template v-else-if="block.blockType === 'RichTextBlock'">
94
+ <BlockText
95
+ :text="block.value"
96
+ variant="medium"
97
+ />
98
+ </template>
99
+ </div>
100
+ </div>
101
+ </template>
102
+ </BaseAccordionItem>
31
103
  </div>
32
104
  </template>
105
+ <style lang="scss">
106
+ .BlockAccordion {
107
+ .AccordionItemImage {
108
+ div.p-4 {
109
+ @apply px-0 #{!important};
110
+ }
111
+ }
112
+ }
113
+ </style>
@@ -1,3 +1,4 @@
1
+ import { BlockAccordionData } from './../BlockAccordion/BlockAccordion.stories'
1
2
  import { BlockCardGridData } from './../BlockCardGrid/BlockCardGrid.stories'
2
3
  import { BlockCtaData } from './../BlockCta/BlockCta.stories'
3
4
  import { BlockHeadingData } from './../BlockHeading/BlockHeading.stories'
@@ -86,6 +87,7 @@ export const BlockStreamfieldData = {
86
87
  heading: 'Heading 2',
87
88
  level: 'h2'
88
89
  },
90
+ BlockAccordionData,
89
91
  {
90
92
  blockType: 'HeadingBlock',
91
93
  heading: 'Heading 3',
@@ -207,6 +207,15 @@
207
207
  <BlockCardGrid :cards="block.items" />
208
208
  </div>
209
209
 
210
+ <LayoutHelper
211
+ v-else-if="block.blockType == 'AccordionBlock'"
212
+ :key="`accordionBlock${index}`"
213
+ indent="col-3"
214
+ class="lg:mb-18 mb-10"
215
+ >
216
+ <BlockAccordion :data="block as unknown as AccordionBlockObject" />
217
+ </LayoutHelper>
218
+
210
219
  <div
211
220
  v-else
212
221
  :key="index"
@@ -247,6 +256,9 @@ import BlockVideoEmbed, {
247
256
  type BlockData as VideoBlockEmbedData
248
257
  } from './../BlockVideoEmbed/BlockVideoEmbed.vue'
249
258
  import BlockAnchor from './../BlockAnchor/BlockAnchor.vue'
259
+ import BlockAccordion from './../BlockAccordion/BlockAccordion.vue'
260
+ import { type AccordionBlockObject } from './../BlockAccordion/BlockAccordion.vue'
261
+
250
262
  interface Variants {
251
263
  [key: string]: string
252
264
  }
@@ -280,7 +292,8 @@ export default defineComponent({
280
292
  BlockGist,
281
293
  BlockVideo,
282
294
  BlockVideoEmbed,
283
- BlockAnchor
295
+ BlockAnchor,
296
+ BlockAccordion
284
297
  },
285
298
  props: {
286
299
  variant: {
@@ -50,6 +50,7 @@ interface NavJumpMenuProps {
50
50
  headingLevel?: string
51
51
  invert?: boolean
52
52
  enabled?: boolean
53
+ dropdownText?: string
53
54
  }
54
55
 
55
56
  const props = withDefaults(defineProps<NavJumpMenuProps>(), {
@@ -59,7 +60,8 @@ const props = withDefaults(defineProps<NavJumpMenuProps>(), {
59
60
  headingLevel: 'h2',
60
61
  enabled: true,
61
62
  invert: true,
62
- hidden: false
63
+ hidden: false,
64
+ dropdownText: 'Jump to…'
63
65
  })
64
66
 
65
67
  const NavJumpMenuRef = ref()
@@ -102,7 +104,7 @@ const theBreadcrumbs = computed(() => {
102
104
  path: '#siteTop'
103
105
  }
104
106
  const jumpMenu: BreadcrumbPathObject = {
105
- title: 'Jump to…',
107
+ title: props.dropdownText,
106
108
  path: '#',
107
109
  children: theJumpLinks.value as BreadcrumbPathObject[]
108
110
  }
@@ -139,5 +141,15 @@ watch(
139
141
  @apply opacity-100 transition-all pointer-events-auto;
140
142
  }
141
143
  }
144
+ .NavSecondaryLink.secondary-root {
145
+ span {
146
+ @apply border-primary #{!important};
147
+ }
148
+ &.-invert {
149
+ span {
150
+ @apply border-white #{!important};
151
+ }
152
+ }
153
+ }
142
154
  }
143
155
  </style>
@@ -9,7 +9,7 @@
9
9
  <NavDropdownToggle
10
10
  :aria-expanded="dropdownVisible ? true : false"
11
11
  :path="item.path"
12
- class="font-medium border-t-2 border-transparent block px-3 py-2"
12
+ class="-t-2 border-transparent block px-3 py-2"
13
13
  :class="dropdownToggleClasses(index)"
14
14
  :invert="invert"
15
15
  @toggle-clicked="toggleDropdown()"
@@ -69,7 +69,6 @@ export default defineComponent({
69
69
  type: Object,
70
70
  required: true
71
71
  },
72
-
73
72
  invert: {
74
73
  type: Boolean,
75
74
  required: false,
@@ -121,13 +120,13 @@ export default defineComponent({
121
120
  dropdownToggleClasses(index: number) {
122
121
  return this.invert
123
122
  ? {
124
- 'mr-auto text-white font-semibold secondary-root': index === 0,
125
- 'text-white': index !== 0,
123
+ 'mr-auto text-white font-bold secondary-root': index === 0,
124
+ 'text-white font-semibold !pt-[.6rem]': index !== 0,
126
125
  '-open': this.dropdownVisible
127
126
  }
128
127
  : {
129
128
  'mr-auto text-primary font-semibold secondary-root': index === 0,
130
- 'text-gray-dark': index !== 0,
129
+ 'text-gray-dark font-medium !pt-[.6rem]': index !== 0,
131
130
  '-open': this.dropdownVisible
132
131
  }
133
132
  },
@@ -50,11 +50,13 @@ export default defineComponent({
50
50
  return false
51
51
  },
52
52
  baseLinkClasses(index: number | undefined) {
53
- let rootClasses = 'mr-auto font-semibold secondary-root'
53
+ let rootClasses = 'mr-auto secondary-root'
54
54
  rootClasses = this.invert
55
- ? `${rootClasses} text-white -invert`
56
- : `${rootClasses} text-primary`
57
- const regularClasses = this.invert ? 'text-white -invert' : 'text-gray-dark'
55
+ ? `${rootClasses} text-white font-bold -invert`
56
+ : `${rootClasses} text-primary font-semibold`
57
+ const regularClasses = this.invert
58
+ ? 'text-white -invert font-semibold'
59
+ : 'text-gray-dark font-medium'
58
60
  return index === 0 ? rootClasses : regularClasses
59
61
  },
60
62
  spanClasses(index: number | undefined) {
@@ -131,6 +131,7 @@ export default defineComponent({
131
131
  :title="data.title"
132
132
  :blocks="data.body"
133
133
  :enabled="data.showJumpMenu"
134
+ dropdown-text="In this article"
134
135
  />
135
136
  <!-- inline hero content -->
136
137
  <LayoutHelper
@@ -368,6 +368,7 @@ const consolidatedSections = computed((): EduLessonSectionObject[] => {
368
368
  :title="data.title"
369
369
  :blocks="consolidatedBlocks"
370
370
  :enabled="true"
371
+ dropdown-text="In this lesson"
371
372
  />
372
373
 
373
374
  <template
@@ -72,6 +72,7 @@ defineExpose({
72
72
  :title="data.title"
73
73
  :blocks="data.body"
74
74
  :enabled="data.showJumpMenu"
75
+ dropdown-text="In this news article"
75
76
  />
76
77
 
77
78
  <!-- schema.org -->