@eeacms/volto-eea-design-system 1.13.2 → 1.14.0

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.
@@ -8,6 +8,72 @@ import 'slick-carousel/slick/slick-theme.css';
8
8
  const tabletBreakpoint = 835;
9
9
  const mobileBreakpoint = 480;
10
10
 
11
+ let cardModels = [
12
+ {
13
+ title: 'Economy and resources',
14
+ imgUrl:
15
+ 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
16
+ description:
17
+ 'The economy plays a vital role in our lives by providing access to employment, ' +
18
+ 'products and services that help us thrive. Unfortunately, with its key sectors like agriculture,' +
19
+ ' energy and transport, our economy also harms the environment and causes climate change. ' +
20
+ 'Europe needs a circular, carbon-neutral and zero-pollution economy. ',
21
+ meta: 'Article',
22
+ metaRight: '20/05/2022',
23
+ href: '/#',
24
+ },
25
+ {
26
+ title: 'Health',
27
+ imgUrl:
28
+ 'https://www.eea.europa.eu/en/topics/at-a-glance/health/@@images/image/preview',
29
+ description:
30
+ 'By improving air, water, and soil quality and limiting pollution released to nature, ' +
31
+ 'the EU has significantly contributed to enhancing human health in the last five ' +
32
+ 'decades. Yet, many vulnerable groups continue to be impacted by environmental ' +
33
+ 'degradation and climate change. Further improvements can help keep Europeans ' +
34
+ 'healthier and better equipped to cope with climate change impacts.',
35
+ meta: 'Article',
36
+ metaRight: '30/06/2023',
37
+ href: '/#',
38
+ },
39
+ {
40
+ title: 'Nature',
41
+ imgUrl:
42
+ 'https://www.eea.europa.eu/en/topics/at-a-glance/nature/@@images/image/preview',
43
+ description:
44
+ 'Europe’s nature is filled with forests, mountains, vast plains, long rivers, deep blue seas and ' +
45
+ 'refreshing lakes. But it also is under threat. Unsustainable farming and forestry practices, ' +
46
+ 'pollution, climate change and invasive species are stressing and destabilising all natural ' +
47
+ 'systems in Europe. The result is a biodiversity crisis. The EU is taking steps to protect and restore nature.',
48
+ meta: 'Article',
49
+ metaRight: '10/04/2022',
50
+ href: '/#',
51
+ },
52
+ {
53
+ title: 'Climate',
54
+ meta: 'Article',
55
+ imgUrl:
56
+ 'https://www.eea.europa.eu/en/topics/at-a-glance/climate/@@images/image/preview',
57
+ description:
58
+ 'Climate change affects us all and is accelerating. Its impacts will become even more severe if ' +
59
+ 'the increase in global temperature is not kept below 1.5°C. The EU and its Member States are ' +
60
+ 'taking important steps to rapidly reduce greenhouse gas emissions and adapt to climate change.',
61
+ href: '/#',
62
+ },
63
+ {
64
+ title: "State of Europe's environment",
65
+ imgUrl:
66
+ 'https://www.eea.europa.eu/en/topics/at-a-glance/state-of-europes-environment/@@images/image/preview',
67
+ description:
68
+ 'EU environment and climate policies have delivered substantial benefits over recent ' +
69
+ 'decades, such as cleaner air and water. Nevertheless, Europe, as well as the rest ' +
70
+ 'of the globe, is facing environmental challenges of unprecedented scale and urgency.',
71
+ meta: 'Article',
72
+ metaRight: '16/03/2022',
73
+ href: '/#',
74
+ },
75
+ ];
76
+
11
77
  export default {
12
78
  title: 'Components/Card/Default',
13
79
  component: Card,
@@ -49,6 +115,12 @@ export default {
49
115
  type: { summary: 'boolean' },
50
116
  },
51
117
  },
118
+ fluid: {
119
+ table: {
120
+ defaultValue: { summary: 'false' },
121
+ type: { summary: 'boolean' },
122
+ },
123
+ },
52
124
  objectFit: {
53
125
  name: 'Image fit',
54
126
  options: ['unset', 'cover', 'contain', 'fill', 'scale-down'],
@@ -67,6 +139,15 @@ export default {
67
139
  defaultValue: { summary: 'center' },
68
140
  },
69
141
  },
142
+ numberOfCards: {
143
+ name: 'Number of cards',
144
+ options: [1, 2, 3, 4, 5],
145
+ control: { type: 'select' },
146
+ table: {
147
+ defaultValue: { summary: 3 },
148
+ type: { summary: 'number' },
149
+ },
150
+ },
70
151
  titleMaxLines: {
71
152
  name: 'Title max lines',
72
153
  options: ['none', '1', '2', '3', '4', '5'],
@@ -98,6 +179,19 @@ export default {
98
179
  },
99
180
  };
100
181
 
182
+ const CardImage = (card) => (
183
+ <a href={card.href} className={'image'}>
184
+ <Image src={card.imgUrl} ui={false} alt="card image" />
185
+ <div className="gradient">
186
+ <Card.Header>{card.title}</Card.Header>
187
+ </div>
188
+ </a>
189
+ );
190
+
191
+ const MetaRight = (args) => (
192
+ <span className="bold text-right">{args.metaRight}</span>
193
+ );
194
+
101
195
  const CardTemplate = ({
102
196
  variant,
103
197
  inverted,
@@ -107,10 +201,11 @@ const CardTemplate = ({
107
201
  objectPosition,
108
202
  titleMaxLines,
109
203
  maxLines,
204
+ fluid,
110
205
  card,
111
206
  }) => (
112
207
  <Card
113
- fluid={card.fluid}
208
+ fluid={fluid}
114
209
  className={`u-card ${variant === 'default' ? '' : variant} ${
115
210
  inverted ? 'inverted' : ''
116
211
  } ${variant} ${rounded ? 'rounded' : ''} ${
@@ -118,27 +213,21 @@ const CardTemplate = ({
118
213
  } ${
119
214
  objectPosition === 'none' ? '' : 'has--object-position--' + objectPosition
120
215
  } ${
121
- titleMaxLines === 'none'
122
- ? 'title-max-0-lines'
123
- : 'title-max-' + titleMaxLines + '-lines'
124
- } ${maxLines === 'none' ? 'max-0-lines' : 'max-' + maxLines + '-lines'}`}
216
+ titleMaxLines === 'none' ? '' : 'title-max-' + titleMaxLines + '-lines'
217
+ } ${maxLines === 'none' ? '' : 'max-' + maxLines + '-lines'}`}
125
218
  >
126
219
  {/* Card Image */}
127
- {card.hasImage ? (
128
- titleOnImage ? (
129
- <CardImage {...card} />
130
- ) : (
131
- <Image
132
- as="a"
133
- href={card.href}
134
- src={card.imgUrl}
135
- wrapped
136
- ui={false}
137
- alt="card image"
138
- />
139
- )
220
+ {titleOnImage ? (
221
+ <CardImage {...card} />
140
222
  ) : (
141
- ''
223
+ <Image
224
+ as="a"
225
+ href={card.href}
226
+ src={card.imgUrl}
227
+ wrapped
228
+ ui={false}
229
+ alt="card image"
230
+ />
142
231
  )}
143
232
  <Card.Content>
144
233
  {/* Type & Date */}
@@ -147,7 +236,7 @@ const CardTemplate = ({
147
236
  </Card.Meta>
148
237
 
149
238
  {/* Title */}
150
- {!titleOnImage || !card.hasImage ? (
239
+ {!titleOnImage ? (
151
240
  <Card.Header>
152
241
  <a href={card.href}>{card.title}</a>
153
242
  </Card.Header>
@@ -169,34 +258,10 @@ const CardTemplate = ({
169
258
  </Card>
170
259
  );
171
260
 
172
- const CardImage = (card) => (
173
- <a href={card.href} className={'image'}>
174
- <Image src={card.imgUrl} ui={false} alt="card image" />
175
- <div className="gradient">
176
- <Card.Header>{card.title}</Card.Header>
177
- </div>
178
- </a>
179
- );
180
-
181
- const MetaRight = (args) => (
182
- <span className="bold text-right">{args.metaRight}</span>
183
- );
184
-
185
261
  const Template = (args) => (
186
262
  <Container>
187
- {args.cards.map((card, index) => (
188
- <CardTemplate
189
- variant={args.variant}
190
- titleOnImage={args.titleOnImage}
191
- inverted={args.inverted}
192
- rounded={args.rounded}
193
- objectFit={args.objectFit}
194
- objectPosition={args.objectPosition}
195
- titleMaxLines={args.titleMaxLines}
196
- maxLines={args.maxLines}
197
- card={card}
198
- key={index}
199
- />
263
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
264
+ <CardTemplate {...args} card={card} key={index} />
200
265
  ))}
201
266
  </Container>
202
267
  );
@@ -211,39 +276,16 @@ Default.args = {
211
276
  objectPosition: 'center',
212
277
  titleMaxLines: '2',
213
278
  maxLines: '2',
214
- cards: [
215
- {
216
- title: 'Economy and resources',
217
- imgUrl:
218
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
219
- description:
220
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
221
- hasImage: true,
222
- meta: 'Article',
223
- metaRight: '30/07/2022',
224
- href: '/#',
225
- fluid: false,
226
- },
227
- ],
279
+ numberOfCards: 1,
280
+ fluid: false,
281
+ cards: [...cardModels],
228
282
  };
229
-
230
283
  const GridTemplate = (args) => (
231
284
  <Container>
232
285
  <Grid>
233
- {args.cards.map((card, index) => (
286
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
234
287
  <Grid.Column mobile={12} tablet={6} computer={4} key={index}>
235
- <CardTemplate
236
- variant={args.variant}
237
- titleOnImage={args.titleOnImage}
238
- inverted={args.inverted}
239
- rounded={args.rounded}
240
- objectFit={args.objectFit}
241
- objectPosition={args.objectPosition}
242
- titleMaxLines={args.titleMaxLines}
243
- maxLines={args.maxLines}
244
- card={card}
245
- key={index}
246
- />
288
+ <CardTemplate {...args} card={card} key={index} />
247
289
  </Grid.Column>
248
290
  ))}
249
291
  </Grid>
@@ -260,100 +302,79 @@ CardGrid.args = {
260
302
  objectPosition: 'center',
261
303
  titleMaxLines: '2',
262
304
  maxLines: '2',
263
- cards: [
264
- {
265
- title: 'Nature',
266
- imgUrl:
267
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
268
- description:
269
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
270
- hasImage: true,
271
- meta: 'Article',
272
- metaRight: '30/07/2022',
273
- href: '/#',
274
- fluid: true,
275
- },
276
- {
277
- title: 'Economy and resources',
278
- imgUrl:
279
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
280
- description:
281
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
282
- hasImage: true,
283
- meta: 'Article',
284
- metaRight: '30/07/2022',
285
- href: '/#',
286
- fluid: true,
287
- },
288
- {
289
- title: "State of Europe's environment",
290
- imgUrl:
291
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
292
- description:
293
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
294
- hasImage: true,
295
- meta: 'Article',
296
- metaRight: '30/07/2022',
297
- href: '/#',
298
- fluid: true,
299
- },
300
- ],
305
+ fluid: true,
306
+ numberOfCards: 5,
307
+ cards: [...cardModels],
301
308
  };
302
309
 
303
- export const ImageGrid = GridTemplate.bind({});
310
+ const ImageCard = ({
311
+ variant,
312
+ inverted,
313
+ rounded,
314
+ objectFit,
315
+ objectPosition,
316
+ fluid,
317
+ card,
318
+ }) => (
319
+ <div
320
+ className={`ui card u-card ${fluid ? 'fluid' : ''} ${
321
+ inverted ? 'inverted' : ''
322
+ } ${variant} ${rounded ? 'rounded' : ''} ${
323
+ objectFit === 'unset' ? '' : 'has--object-fit--' + objectFit
324
+ } ${
325
+ objectPosition === 'none' ? '' : 'has--object-position--' + objectPosition
326
+ } `}
327
+ >
328
+ <a className="image" href={card.href}>
329
+ <img src={card.imgUrl} alt={card.title} className="ui image" />
330
+ </a>
331
+ </div>
332
+ );
333
+
334
+ const ImageCardTemplate = (args) => (
335
+ <Container>
336
+ <div className="items imageCard-items">
337
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
338
+ <ImageCard {...args} card={card} key={index} />
339
+ ))}
340
+ </div>
341
+ </Container>
342
+ );
343
+ export const ImageGrid = ImageCardTemplate.bind({});
304
344
  ImageGrid.args = {
305
- titleOnImage: true,
306
345
  variant: 'default',
307
346
  inverted: false,
308
347
  rounded: false,
309
348
  objectFit: 'center',
310
349
  objectPosition: 'cover',
311
- titleMaxLines: '2',
312
- maxLines: '2',
313
- cards: [
314
- {
315
- title: 'Nature',
316
- imgUrl:
317
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
318
- hasImage: true,
319
- href: '/#',
320
- fluid: true,
350
+ fluid: true,
351
+ cards: [...cardModels],
352
+ numberOfCards: 5,
353
+ };
354
+
355
+ ImageGrid.argTypes = {
356
+ titleOnImage: {
357
+ table: {
358
+ disable: true,
321
359
  },
322
- {
323
- title: 'Economy and resources',
324
- imgUrl:
325
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
326
- hasImage: true,
327
- href: '/#',
328
- fluid: true,
360
+ },
361
+ titleMaxLines: {
362
+ table: {
363
+ disable: true,
329
364
  },
330
- {
331
- title: "State of Europe's environment",
332
- imgUrl:
333
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
334
- hasImage: true,
335
- href: '/#',
336
- fluid: true,
365
+ },
366
+ maxLines: {
367
+ table: {
368
+ disable: true,
337
369
  },
338
- ],
370
+ },
339
371
  };
340
372
 
341
373
  const FluidGridTemplate = (args) => (
342
374
  <Container>
343
375
  <div className="fluid-card-row">
344
- {args.cards.map((card, index) => (
345
- <CardTemplate
346
- variant={args.variant}
347
- titleOnImage={args.titleOnImage}
348
- inverted={args.inverted}
349
- rounded={args.rounded}
350
- objectFit={args.objectFit}
351
- objectPosition={args.objectPosition}
352
- titleMaxLines={args.titleMaxLines}
353
- maxLines={args.maxLines}
354
- card={card}
355
- key={index}
356
- />
376
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
377
+ <CardTemplate {...args} card={card} key={index} />
357
378
  ))}
358
379
  </div>
359
380
  </Container>
@@ -369,44 +390,9 @@ FluidGrid.args = {
369
390
  objectPosition: 'center',
370
391
  titleMaxLines: '2',
371
392
  maxLines: '2',
372
- cards: [
373
- {
374
- title: 'Nature',
375
- imgUrl:
376
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
377
- description:
378
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
379
- hasImage: true,
380
- meta: 'Article',
381
- metaRight: '30/07/2022',
382
- href: '/#',
383
- fluid: true,
384
- },
385
- {
386
- title: 'Health',
387
- imgUrl:
388
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
389
- description:
390
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
391
- hasImage: true,
392
- meta: 'Article',
393
- metaRight: '30/07/2022',
394
- href: '/#',
395
- fluid: true,
396
- },
397
- {
398
- title: "State of Europe's environment",
399
- imgUrl:
400
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
401
- description:
402
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
403
- hasImage: true,
404
- meta: 'Article',
405
- metaRight: '30/07/2022',
406
- href: '/#',
407
- fluid: true,
408
- },
409
- ],
393
+ numberOfCards: 3,
394
+ fluid: true,
395
+ cards: [...cardModels],
410
396
  };
411
397
 
412
398
  const Arrows = (props) => {
@@ -442,35 +428,13 @@ const Arrows = (props) => {
442
428
  );
443
429
  };
444
430
 
445
- function CarouselCardsContent({
446
- titleOnImage,
447
- variant,
448
- inverted,
449
- rounded,
450
- objectFit,
451
- settings,
452
- objectPosition,
453
- titleMaxLines,
454
- maxLines,
455
- cards,
456
- }) {
431
+ function CarouselCardsContent(args) {
457
432
  const slider = React.useRef(null);
458
433
  return (
459
434
  <div className="cards-carousel">
460
- <Slider {...settings} ref={slider}>
461
- {cards.map((card, index) => (
462
- <CardTemplate
463
- variant={variant}
464
- titleOnImage={titleOnImage}
465
- inverted={inverted}
466
- rounded={rounded}
467
- objectFit={objectFit}
468
- objectPosition={objectPosition}
469
- titleMaxLines={titleMaxLines}
470
- maxLines={maxLines}
471
- card={card}
472
- key={index}
473
- />
435
+ <Slider {...args.settings} ref={slider}>
436
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
437
+ <CardTemplate {...args} card={card} key={index} />
474
438
  ))}
475
439
  </Slider>
476
440
  <Arrows slider={slider} />
@@ -494,6 +458,7 @@ CarouselCards.args = {
494
458
  objectPosition: 'center',
495
459
  titleMaxLines: '2',
496
460
  maxLines: '2',
461
+ fluid: true,
497
462
  settings: {
498
463
  dots: true,
499
464
  infinite: true,
@@ -519,53 +484,8 @@ CarouselCards.args = {
519
484
  },
520
485
  ],
521
486
  },
522
- cards: [
523
- {
524
- title: "State of Europe's environment",
525
- meta: 'March 20, 2022.',
526
- imgUrl:
527
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
528
- hasImage: true,
529
- href: '/#',
530
- fluid: true,
531
- },
532
- {
533
- title: 'Nature',
534
- meta: 'March 20, 2022.',
535
- imgUrl:
536
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
537
- hasImage: true,
538
- href: '/#',
539
- fluid: true,
540
- },
541
- {
542
- title: 'Health',
543
- meta: 'March 20, 2022.',
544
- imgUrl:
545
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
546
- hasImage: true,
547
- href: '/#',
548
- fluid: true,
549
- },
550
- {
551
- title: 'Climate',
552
- meta: 'March 20, 2022.',
553
- imgUrl:
554
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
555
- hasImage: true,
556
- href: '/#',
557
- fluid: true,
558
- },
559
- {
560
- title: 'Economy and resources',
561
- meta: 'March 20, 2022.',
562
- imgUrl:
563
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
564
- hasImage: true,
565
- href: '/#',
566
- fluid: true,
567
- },
568
- ],
487
+ numberOfCards: 5,
488
+ cards: [...cardModels],
569
489
  };
570
490
  CarouselCards.argTypes = {
571
491
  settings: {
@@ -587,6 +507,7 @@ const TeaserCard = ({
587
507
  objectFit,
588
508
  objectPosition,
589
509
  titleMaxLines,
510
+ fluid,
590
511
  maxLines,
591
512
  card,
592
513
  }) => (
@@ -595,7 +516,7 @@ const TeaserCard = ({
595
516
  className={`styled-teaser styled ${variant === 'default' ? '' : variant}`}
596
517
  >
597
518
  <div
598
- className={`ui card u-card ${card.fluid ? 'fluid' : ''} ${
519
+ className={`ui card u-card ${fluid ? 'fluid' : ''} ${
599
520
  inverted ? 'inverted' : ''
600
521
  } ${variant} ${rounded ? 'rounded' : ''} ${
601
522
  objectFit === 'unset' ? '' : 'has--object-fit--' + objectFit
@@ -633,28 +554,28 @@ const TeaserCard = ({
633
554
  </div>
634
555
  );
635
556
 
636
- const TeaserTemplate = (args) => (
637
- <Container>
638
- <div className="block __grid teaserGrid centered three">
639
- <div className="ui stackable stretched three column grid">
640
- {args.cards.map((card, index) => (
641
- <TeaserCard
642
- variant={args.variant}
643
- titleOnImage={args.titleOnImage}
644
- inverted={args.inverted}
645
- rounded={args.rounded}
646
- objectFit={args.objectFit}
647
- objectPosition={args.objectPosition}
648
- titleMaxLines={args.titleMaxLines}
649
- maxLines={args.maxLines}
650
- card={card}
651
- key={index}
652
- />
653
- ))}
557
+ const TeaserTemplate = (args) => {
558
+ const columnCount = { 1: 'one', 2: 'two', 3: 'three', 4: 'four' };
559
+ return (
560
+ <Container>
561
+ <div
562
+ className={`block __grid teaserGrid centered ${
563
+ columnCount[args.numberOfCards]
564
+ }`}
565
+ >
566
+ <div
567
+ className={`ui stackable stretched ${
568
+ columnCount[args.numberOfCards]
569
+ } column grid`}
570
+ >
571
+ {args.cards.slice(0, args.numberOfCards).map((card, index) => (
572
+ <TeaserCard {...args} card={card} key={index} />
573
+ ))}
574
+ </div>
654
575
  </div>
655
- </div>
656
- </Container>
657
- );
576
+ </Container>
577
+ );
578
+ };
658
579
 
659
580
  export const TeaserCardGrid = TeaserTemplate.bind({});
660
581
  TeaserCardGrid.args = {
@@ -666,36 +587,7 @@ TeaserCardGrid.args = {
666
587
  objectPosition: 'center',
667
588
  titleMaxLines: '2',
668
589
  maxLines: '2',
669
- cards: [
670
- {
671
- title: "State of Europe's environment",
672
- imgUrl:
673
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
674
- description:
675
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
676
- hasImage: true,
677
- href: '/#',
678
- fluid: true,
679
- },
680
- {
681
- title: 'Climate',
682
- imgUrl:
683
- 'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
684
- hasImage: true,
685
- description:
686
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
687
- href: '/#',
688
- fluid: true,
689
- },
690
- {
691
- title: 'Economy and resources',
692
- imgUrl:
693
- 'https://www.eea.europa.eu/media/pictures/european-environment-agency-building-with/image_large',
694
- hasImage: true,
695
- description:
696
- 'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
697
- href: '/#',
698
- fluid: true,
699
- },
700
- ],
590
+ fluid: true,
591
+ numberOfCards: 3,
592
+ cards: [...cardModels],
701
593
  };