@explorer-1/vue 0.2.0 → 0.2.2

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 (56) hide show
  1. package/components.d.ts +1 -0
  2. package/dist/explorer-1-vue.js +3759 -3729
  3. package/dist/explorer-1-vue.umd.cjs +12 -12
  4. package/dist/src/components/BlockCard/BlockCard.vue.d.ts +9 -0
  5. package/dist/src/components/BlockLinkCard/BlockLinkCard.vue.d.ts +30 -0
  6. package/dist/src/components/BlockRelatedLinks/BlockRelatedLinks.vue.d.ts +11 -0
  7. package/dist/src/components/BlockStreamfield/BlockStreamfield.stories.d.ts +17 -0
  8. package/dist/src/components/CalendarButton/CalendarButton.stories.d.ts +2 -62
  9. package/dist/src/components/CalendarButton/CalendarButton.vue.d.ts +26 -7
  10. package/dist/src/components/EventDetailHero/EventDetailHero.vue.d.ts +8 -1
  11. package/dist/src/templates/PageEventDetail/PageEventDetail.stories.d.ts +3 -1
  12. package/dist/src/templates/PageImageDetail/PageImageDetail.stories.d.ts +19 -27
  13. package/dist/src/templates/PageNewsDetail/PageNewsDetail.stories.d.ts +136 -0
  14. package/dist/src/templates/edu/PageContentEdu.stories.d.ts +1 -0
  15. package/dist/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.d.ts +128 -0
  16. package/dist/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.d.ts +51 -0
  17. package/dist/src/templates/edu/PageEduResourceArticle/PageEduResourceArticle.stories.d.ts +17 -0
  18. package/dist/src/templates/www/PageCuratedGallery/PageCuratedGallery.stories.d.ts +17 -0
  19. package/dist/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.d.ts +17 -0
  20. package/dist/style.css +1 -1
  21. package/lib/main.ts +4 -4
  22. package/package.json +1 -1
  23. package/src/components/BaseTag/BaseTag.vue +2 -2
  24. package/src/components/{BlockCardGroup/BlockCardGroup.stories.js → BlockCardGrid/BlockCardGrid.stories.js} +21 -12
  25. package/src/components/BlockCardGrid/BlockCardGrid.vue +70 -0
  26. package/src/components/{BlockCard/BlockCard.stories.js → BlockCardGridItem/BlockCardGridItem.stories.js} +14 -6
  27. package/src/components/BlockCardGridItem/BlockCardGridItem.vue +40 -0
  28. package/src/components/{BlockCard/BlockCard.vue → BlockCardGridItem/BlockCardGridItemElement.vue} +36 -20
  29. package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +2 -1
  30. package/src/components/BlockInlineImage/BlockInlineImage.vue +1 -1
  31. package/src/components/BlockLinkCard/BlockLinkCard.stories.js +2 -1
  32. package/src/components/BlockLinkCard/BlockLinkCard.vue +33 -13
  33. package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +0 -1
  34. package/src/components/BlockLinkTile/BlockLinkTile.stories.js +3 -2
  35. package/src/components/BlockListCards/BlockListCards.stories.js +1 -0
  36. package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +6 -1
  37. package/src/components/BlockStreamfield/BlockStreamfield.stories.js +8 -1
  38. package/src/components/BlockStreamfield/BlockStreamfield.vue +17 -4
  39. package/src/components/CalendarButton/CalendarButton.stories.js +1 -19
  40. package/src/components/CalendarButton/CalendarButton.vue +43 -17
  41. package/src/components/EventDetailHero/EventDetailHero.vue +26 -31
  42. package/src/components/LayoutHelper/LayoutHelper.vue +7 -1
  43. package/src/components/MixinCarousel/MixinCarousel.vue +1 -1
  44. package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +1 -0
  45. package/src/docs/overviews/blocks.docs.mdx.disabled +7 -7
  46. package/src/docs/overviews/cards.docs.mdx +81 -0
  47. package/src/interfaces.ts +7 -2
  48. package/src/templates/PageEventDetail/PageEventDetail.stories.js +3 -1
  49. package/src/templates/PageEventDetail/PageEventDetail.vue +3 -3
  50. package/src/templates/PageImageDetail/PageImageDetail.stories.js +1 -1
  51. package/src/templates/edu/PageContentEdu.stories.js +1 -0
  52. package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +130 -0
  53. package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.vue +419 -0
  54. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.js +2 -2
  55. package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.vue +4 -4
  56. package/src/components/BlockCardGroup/BlockCardGroup.vue +0 -61
@@ -0,0 +1,419 @@
1
+ <template>
2
+ <div
3
+ v-if="data"
4
+ class="PageEduEventDetail pt-5 ThemeVariantLight lg:pt-12"
5
+ itemscope
6
+ itemtype="http://schema.org/Event"
7
+ >
8
+ <!-- schema.org -->
9
+ <meta
10
+ v-if="data.thumbnailImage && data.thumbnailImage.original"
11
+ itemprop="thumbnailUrl"
12
+ :content="data.thumbnailImage.original"
13
+ />
14
+ <meta
15
+ itemprop="startDate"
16
+ :content="data.startDatetime"
17
+ />
18
+ <meta
19
+ v-if="data.endDatetime"
20
+ itemprop="endDate"
21
+ :content="data.endDatetime"
22
+ />
23
+ <meta
24
+ v-if="data.summary || data.body"
25
+ itemprop="description"
26
+ :content="data.summary || data.body"
27
+ />
28
+
29
+ <LayoutHelper
30
+ indent="col-2"
31
+ class="mb-6 lg:mb-12"
32
+ >
33
+ <div
34
+ v-if="data.eventType"
35
+ class="flex flex-wrap items-start mb-3"
36
+ >
37
+ <BaseTag
38
+ variant="primary"
39
+ size="md"
40
+ >
41
+ {{ data.eventType }}
42
+ </BaseTag>
43
+ </div>
44
+ <BaseHeading
45
+ level="h1"
46
+ itemprop="name"
47
+ >
48
+ {{ data.title }}
49
+ </BaseHeading>
50
+ <ShareButtonsEdu
51
+ class="mt-4"
52
+ :title="data.title"
53
+ :url="data.url"
54
+ />
55
+ </LayoutHelper>
56
+
57
+ <LayoutHelper indent="col-2">
58
+ <EventDetailHero
59
+ :image="data.eventImage"
60
+ :start-date-split="formattedSplitEventDates"
61
+ />
62
+
63
+ <!-- Event details -->
64
+ <div>
65
+ <div
66
+ class="py-1 mb-10 text-xl lg:mb-0 lg:flex"
67
+ :class="data.registerLink && data.registerLink.length > 0 ? '' : 'lg:mb-10'"
68
+ >
69
+ <div
70
+ v-if="formattedEventDates || data.customDate"
71
+ class="PageEduEventDetail__Metadata text-primary"
72
+ >
73
+ <IconCalendar class="relative mr-3 text-[1.2rem]" />
74
+ <span>{{ formattedEventDates || data.customDate }}</span>
75
+ </div>
76
+ <div
77
+ v-show="displayTime"
78
+ class="PageEduEventDetail__Metadata text-primary"
79
+ >
80
+ <IconTime class="relative mr-3" />
81
+ <span>{{ displayTime }}</span>
82
+ </div>
83
+ <!--Virtual location -->
84
+ <div
85
+ v-if="data.isVirtualEvent && data.locationLink"
86
+ itemprop="location"
87
+ itemscope
88
+ itemtype="https://schema.org/VirtualLocation"
89
+ class="PageEduEventDetail__Metadata text-primary"
90
+ >
91
+ <link
92
+ itemprop="url"
93
+ :href="data.locationLink"
94
+ />
95
+ <meta
96
+ itemprop="name"
97
+ :content="data.locationName"
98
+ />
99
+ <IconLocation class="relative mr-3" />
100
+ <BaseLink
101
+ variant="none"
102
+ class="text-action"
103
+ :href="data.locationLink"
104
+ external-target-blank
105
+ >
106
+ {{ data.locationName }}
107
+ </BaseLink>
108
+ </div>
109
+ <!-- Normal location -->
110
+ <div
111
+ v-else-if="data.locationName"
112
+ class="PageEduEventDetail__Metadata text-primary"
113
+ >
114
+ <meta
115
+ itemprop="location"
116
+ :content="data.locationName"
117
+ />
118
+ <IconLocation class="relative mr-3" />
119
+ <BaseLink
120
+ v-if="data.locationLink"
121
+ variant="none"
122
+ :href="data.locationLink"
123
+ external-target-blank
124
+ >
125
+ {{ data.locationName }}
126
+ </BaseLink>
127
+ <span v-else>{{ data.locationName }}</span>
128
+ </div>
129
+ <div
130
+ v-if="data.targetAudience"
131
+ class="PageEduEventDetail__Metadata text-primary"
132
+ >
133
+ <IconUser class="relative mr-3 text-[.9rem]" />
134
+ <span>{{ data.targetAudience }}</span>
135
+ </div>
136
+
137
+ <div class="PageEduEventDetail__Buttons">
138
+ <BaseButton
139
+ v-if="
140
+ data.registerLink &&
141
+ data.registerLink.length > 0 &&
142
+ ((data.registerLink[0].page && data.registerLink[0].page.url) ||
143
+ data.registerLink[0].externalLink)
144
+ "
145
+ class="w-full px-0 mb-5"
146
+ :href="data.registerLink[0].externalLink ? data.registerLink[0].externalLink : null"
147
+ :to="
148
+ data.registerLink[0].page && data.registerLink[0].page.url
149
+ ? data.registerLink[0].page.url
150
+ : null
151
+ "
152
+ :target="data.registerLink[0].externalLink ? '_blank' : '_self'"
153
+ compact
154
+ >Register for event
155
+ </BaseButton>
156
+ <!-- Todo IF VIRTUAL EVENT passes url as string to location prop -->
157
+ <!-- location= location name and link -->
158
+ <CalendarButton
159
+ v-if="data.startDatetime"
160
+ :start-datetime="data.startDatetime"
161
+ :end-datetime="data.endDatetime ? data.endDatetime : null"
162
+ :title="data.title ? data.title : null"
163
+ :location="data.locationName ? data.locationName : null"
164
+ :description="data.summary ? data.summary : null"
165
+ />
166
+ </div>
167
+ </div>
168
+
169
+ <!-- Body -->
170
+ <div
171
+ v-if="data.body || data.summary"
172
+ class="grid-cols-10 lg:grid -mx-4 lg:mx-0"
173
+ >
174
+ <div class="col-span-7">
175
+ <p
176
+ v-if="data.summary"
177
+ class="BlockText text-body-lg mb-8 px-4 lg:px-0 font-semibold"
178
+ >
179
+ {{ data.summary }}
180
+ </p>
181
+ <BlockStreamfield
182
+ v-if="data.body"
183
+ variant="fluid"
184
+ :data="data.body"
185
+ />
186
+ </div>
187
+ </div>
188
+ </div>
189
+ </LayoutHelper>
190
+
191
+ <!-- Speakers -->
192
+ <LayoutHelper
193
+ v-if="data.speakers && data.speakers.length > 0"
194
+ indent="col-2"
195
+ class="mb-12 lg:mb-16"
196
+ >
197
+ <div class="grid-cols-10 lg:grid">
198
+ <div class="col-span-7">
199
+ <BaseHeading
200
+ level="h2"
201
+ size="h3"
202
+ class="mb-5 md:mb-8"
203
+ >Speakers</BaseHeading
204
+ >
205
+ <div class="flex flex-col flex-wrap justify-start md:flex-row md:-mx-4">
206
+ <div
207
+ v-for="(speaker, index) in data.speakers"
208
+ :key="index"
209
+ class="flex flex-1 mb-6 md:flex-none md:flex-wrap md:mx-4 md:w-56"
210
+ >
211
+ <div class="w-40 mr-6 md:mr-0 md:w-56">
212
+ <BaseImagePlaceholder
213
+ aspect-ratio="1:1"
214
+ class="relative overflow-hidden bg-gray-light-mid"
215
+ transparent-mode
216
+ >
217
+ <BaseImage
218
+ v-if="speaker.image && speaker.image.src"
219
+ :src="speaker.image.src.url"
220
+ :width="speaker.image.src.width"
221
+ :height="speaker.image.src.height"
222
+ alt=""
223
+ class="object-cover"
224
+ loading="lazy"
225
+ />
226
+ <img
227
+ v-else
228
+ :src="PlaceholderPortrait"
229
+ alt=""
230
+ />
231
+ </BaseImagePlaceholder>
232
+ </div>
233
+ <div class="flex-1 h-full">
234
+ <h3
235
+ v-if="speaker.name"
236
+ class="my-3 text-lg !font-normal !tracking-normal leading-none"
237
+ >
238
+ <BaseLink
239
+ v-if="speaker.internalLink || speaker.externalLink"
240
+ link-class="no-underline normal-case"
241
+ :to="speaker.internalLink ? speaker.internalLink.url : null"
242
+ :href="speaker.externalLink ? speaker.externalLink : null"
243
+ external-target-blank
244
+ >
245
+ {{ speaker.name }}
246
+ </BaseLink>
247
+ <template v-else>
248
+ {{ speaker.name }}
249
+ </template>
250
+ </h3>
251
+ <p
252
+ v-if="speaker.title"
253
+ class="mb-3 text-gray-mid-dark"
254
+ >
255
+ {{ speaker.title }}
256
+ </p>
257
+ <p class="text-action capitalize">
258
+ {{ speaker.host }}
259
+ </p>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </div>
265
+ </LayoutHelper>
266
+
267
+ <!-- Webcast -->
268
+ <LayoutHelper
269
+ v-if="data.relatedLinks && data.relatedLinks.length > 0"
270
+ indent="col-2"
271
+ class="my-12 lg:my-16"
272
+ >
273
+ <BlockRelatedLinks
274
+ :data="data.relatedLinks[0]"
275
+ size="h3"
276
+ />
277
+ </LayoutHelper>
278
+
279
+ <!-- Related Events -->
280
+ <LayoutHelper
281
+ v-if="data.relatedEvents?.length"
282
+ indent="col-1"
283
+ class="my-12 lg:my-16"
284
+ >
285
+ <BlockLinkCarousel
286
+ item-type="cards"
287
+ size="h3"
288
+ heading="Related Events"
289
+ :items="data.relatedEvents"
290
+ />
291
+ </LayoutHelper>
292
+ <!-- Related Content -->
293
+ <div
294
+ v-if="data.relatedContent?.length"
295
+ class="bg-stars bg-[#15003B] lg:py-24 lg:mt-24 py-12 mt-12"
296
+ >
297
+ <BlockLinkCarousel
298
+ class="ThemeVariantDark"
299
+ item-type="cards"
300
+ heading="Explore More"
301
+ :items="data.relatedContent"
302
+ />
303
+ </div>
304
+ </div>
305
+ </template>
306
+ <script lang="ts">
307
+ import { defineComponent } from 'vue'
308
+ import {
309
+ mixinFormatEventDates,
310
+ mixinFormatEventTimeInHoursAndMinutes,
311
+ mixinFormatSplitEventDates
312
+ } from '../../../utils/mixins'
313
+ import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
314
+ import BaseHeading from './../../../components/BaseHeading/BaseHeading.vue'
315
+ import BaseTag from './../../../components/BaseTag/BaseTag.vue'
316
+ import ShareButtonsEdu from './../../../components/ShareButtonsEdu/ShareButtonsEdu.vue'
317
+ import EventDetailHero from './../../../components/EventDetailHero/EventDetailHero.vue'
318
+ import IconCalendar from './../../../components/Icons/IconCalendar.vue'
319
+ import IconLocation from './../../../components/Icons/IconLocation.vue'
320
+ import IconTime from './../../../components/Icons/IconTime.vue'
321
+ import IconUser from './../../../components/Icons/IconUser.vue'
322
+ import BaseLink from './../../../components/BaseLink/BaseLink.vue'
323
+ import BaseButton from './../../../components/BaseButton/BaseButton.vue'
324
+ import CalendarButton from './../../../components/CalendarButton/CalendarButton.vue'
325
+ import BlockStreamfield from './../../../components/BlockStreamfield/BlockStreamfield.vue'
326
+ import BaseImagePlaceholder from './../../../components/BaseImagePlaceholder/BaseImagePlaceholder.vue'
327
+ import BaseImage from './../../../components/BaseImage/BaseImage.vue'
328
+ import BlockRelatedLinks from './../../../components/BlockRelatedLinks/BlockRelatedLinks.vue'
329
+ import BlockLinkCarousel from './../../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
330
+ // @ts-ignore
331
+ import PlaceholderPortrait from '@explorer-1/common/src/images/svg/placeholder-portrait.svg'
332
+
333
+ export default defineComponent({
334
+ name: 'PageEduEventDetail',
335
+ components: {
336
+ LayoutHelper,
337
+ BaseHeading,
338
+ BaseTag,
339
+ ShareButtonsEdu,
340
+ EventDetailHero,
341
+ IconCalendar,
342
+ IconLocation,
343
+ IconTime,
344
+ IconUser,
345
+ BaseLink,
346
+ BaseButton,
347
+ CalendarButton,
348
+ BlockStreamfield,
349
+ BaseImagePlaceholder,
350
+ BaseImage,
351
+ BlockRelatedLinks,
352
+ BlockLinkCarousel
353
+ },
354
+ props: {
355
+ data: {
356
+ type: Object,
357
+ required: false,
358
+ default: undefined
359
+ }
360
+ },
361
+ data() {
362
+ return {
363
+ PlaceholderPortrait: PlaceholderPortrait
364
+ }
365
+ },
366
+ computed: {
367
+ displayTime(): string {
368
+ return this.data
369
+ ? mixinFormatEventTimeInHoursAndMinutes(
370
+ this.data.startDatetime,
371
+ this.data.endDatetime,
372
+ this.data.endTime
373
+ )
374
+ : ''
375
+ },
376
+ formattedEventDates(): string {
377
+ return this.data ? mixinFormatEventDates(this.data.startDatetime, this.data.endDatetime) : ''
378
+ },
379
+ formattedSplitEventDates() {
380
+ return this.data
381
+ ? mixinFormatSplitEventDates(this.data.startDatetime, this.data.endDatetime)
382
+ : undefined
383
+ }
384
+ }
385
+ })
386
+ </script>
387
+ <style lang="scss">
388
+ .PageEduEventDetail {
389
+ .PageEduEventDetail__Metadata {
390
+ @apply flex;
391
+ @apply items-baseline;
392
+ @apply mr-12 md:mr-8 lg:mr-12;
393
+ @apply mb-5 lg:mb-7;
394
+
395
+ span {
396
+ max-width: 230px;
397
+ min-width: 110px;
398
+ @apply text-gray-dark;
399
+ }
400
+
401
+ svg {
402
+ min-width: 1.25rem;
403
+ @apply top-0.5;
404
+ }
405
+ }
406
+
407
+ .PageEduEventDetail__Buttons {
408
+ @apply text-base;
409
+ @apply lg:ml-auto;
410
+ @apply mt-10;
411
+ @apply lg:mt-0;
412
+
413
+ max-width: 260px;
414
+ }
415
+ .bg-stars .MixinCarousel__Heading {
416
+ @apply text-white;
417
+ }
418
+ }
419
+ </style>
@@ -1,6 +1,6 @@
1
1
  import { HeroLargeData } from './../../../components/HeroLarge/HeroLarge.stories.js'
2
2
  import { RoboticsDetailStatsData } from './../../../components/RoboticsDetailStats/RoboticsDetailStats.stories.js'
3
- import { BlockCardGroupData } from './../../../components/BlockCardGroup/BlockCardGroup.stories.js'
3
+ import { BlockCardGridData } from './../../../components/BlockCardGrid/BlockCardGrid.stories.js'
4
4
  import { BlockLinkTileCarouselData } from './../../../components/BlockLinkCarousel/BlockLinkCarousel.stories.js'
5
5
  import { BlockRelatedLinksData } from './../../../components/BlockRelatedLinks/BlockRelatedLinks.stories.js'
6
6
  import { BlockStreamfieldTruncatedData } from './../../../components/BlockStreamfield/BlockStreamfield.stories'
@@ -37,7 +37,7 @@ export const Template = {
37
37
  ...BlockStreamfieldTruncatedData,
38
38
  relatedLinks: [BlockRelatedLinksData.data],
39
39
  moreRobots: BlockLinkTileCarouselData,
40
- facts: BlockCardGroupData
40
+ facts: BlockCardGridData
41
41
  }
42
42
  }
43
43
  }
@@ -36,10 +36,10 @@
36
36
  </p>
37
37
  </div>
38
38
  <!-- facts -->
39
- <BlockCardGroup
39
+ <BlockCardGrid
40
40
  v-if="data.facts"
41
41
  class="3xl:col-end-13 xl:col-end-11 md:px-4 lg:px-0 relative col-start-2 col-end-13 px-0 mt-12"
42
- :facts="data.facts"
42
+ :cards="data.facts"
43
43
  />
44
44
  </div>
45
45
 
@@ -73,7 +73,7 @@ import { defineComponent } from 'vue'
73
73
  import BaseHeading from './../../../components/BaseHeading/BaseHeading.vue'
74
74
  import HeroLarge from './../../../components/HeroLarge/HeroLarge.vue'
75
75
  import RoboticsDetailStats from './../../../components/RoboticsDetailStats/RoboticsDetailStats.vue'
76
- import BlockCardGroup from './../../../components/BlockCardGroup/BlockCardGroup.vue'
76
+ import BlockCardGrid from './../../../components/BlockCardGrid/BlockCardGrid.vue'
77
77
  import BlockRelatedLinks from './../../../components/BlockRelatedLinks/BlockRelatedLinks.vue'
78
78
  import BlockLinkCarousel from './../../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
79
79
  import LayoutHelper from './../../../components/LayoutHelper/LayoutHelper.vue'
@@ -85,7 +85,7 @@ export default defineComponent({
85
85
  BaseHeading,
86
86
  HeroLarge,
87
87
  RoboticsDetailStats,
88
- BlockCardGroup,
88
+ BlockCardGrid,
89
89
  BlockRelatedLinks,
90
90
  BlockLinkCarousel,
91
91
  LayoutHelper,
@@ -1,61 +0,0 @@
1
- <template>
2
- <div
3
- v-if="facts"
4
- class="BlockCardGroup"
5
- >
6
- <div class="md:grid md:grid-cols-2 lg:grid-cols-3 3xl:grid-cols-4 hidden gap-8">
7
- <BlockCard
8
- v-for="(fact, index) of facts"
9
- :key="`fact-${index}`"
10
- class="col-span-1"
11
- :type="fact.type"
12
- :title="fact.title"
13
- :text="fact.description"
14
- :image="fact.image"
15
- />
16
- </div>
17
- <MixinCarousel
18
- class="md:hidden sm:px-10 sm:-ml-10 py-10 -mt-10"
19
- indent="col-1"
20
- :slides-per-view="3"
21
- no-links
22
- >
23
- <BlockCard
24
- v-for="(fact, index) of facts"
25
- :key="index"
26
- :title="fact.title"
27
- :text="fact.description"
28
- :image="fact.image"
29
- class="swiper-slide mb-5"
30
- />
31
- </MixinCarousel>
32
- </div>
33
- </template>
34
- <script lang="ts">
35
- import { defineComponent } from 'vue'
36
- import type { PropType } from 'vue'
37
- import type { ImageObject } from '../../interfaces'
38
- import BlockCard from './../BlockCard/BlockCard.vue'
39
- import MixinCarousel from './../MixinCarousel/MixinCarousel.vue'
40
-
41
- interface Fact {
42
- title: string
43
- type: string
44
- description: string
45
- image: Partial<ImageObject>
46
- }
47
-
48
- export default defineComponent({
49
- name: 'BlockCardGroup',
50
- components: {
51
- MixinCarousel,
52
- BlockCard
53
- },
54
- props: {
55
- facts: {
56
- type: Array as PropType<Fact[]>,
57
- required: false
58
- }
59
- }
60
- })
61
- </script>