@eeacms/volto-eea-design-system 1.0.6 → 1.11.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.
- package/CHANGELOG.md +119 -1
- package/package.json +1 -1
- package/src/semantic.less +0 -4
- package/src/ui/Accordion/Accordion.stories.js +52 -123
- package/src/ui/Breadcrumbs/Breadcrumb.stories.jsx +6 -34
- package/src/ui/Breadcrumbs/Breadcrumbs.jsx +24 -24
- package/src/ui/Card/Card.stories.jsx +159 -13
- package/src/ui/Comment/Comment.stories.js +25 -19
- package/src/ui/ContextNavigation/ContextNavigation.stories.jsx +18 -4
- package/src/ui/DownloadLabeledIcon/DownloadLabeledIcon.stories.jsx +3 -2
- package/src/ui/Footer/Contact.jsx +31 -6
- package/src/ui/Footer/Footer.stories.js +76 -25
- package/src/ui/Form/Button/Button.stories.jsx +1 -1
- package/src/ui/Header/Header.jsx +22 -6
- package/src/ui/Header/Header.stories.js +112 -210
- package/src/ui/Header/HeaderMenuPopUp.js +72 -63
- package/src/ui/Header/HeaderSearchPopUp.js +2 -1
- package/src/ui/InpageNavigation/InpageNavigation.jsx +4 -4
- package/src/ui/InpageNavigation/InpageNavigation.stories.jsx +5 -4
- package/src/ui/Label/Label.stories.js +3 -1
- package/src/ui/LabeledIconGroup/LabeledIconGroup.jsx +5 -4
- package/src/ui/LanguageLabeledIcon/LanguageLabeledIcon.stories.jsx +3 -2
- package/src/ui/Modal/Modal.stories.js +9 -2
- package/src/ui/NewTabLabeledIcon/NewTabLabeledIcon.jsx +9 -3
- package/src/ui/Tag/Tag.stories.jsx +1 -1
- package/src/ui/Video/Video.jsx +44 -0
- package/src/ui/Video/Video.stories.jsx +53 -0
- package/src/ui/index.js +2 -2
- package/theme/theme.config +0 -3
- package/theme/themes/eea/assets/logo/eionet.svg +80 -11
- package/theme/themes/eea/assets/video/demo-track-el.vtt +11 -0
- package/theme/themes/eea/assets/video/demo-track-en.vtt +11 -0
- package/theme/themes/eea/assets/video/demo-track-ro.vtt +11 -0
- package/theme/themes/eea/collections/breadcrumb.overrides +11 -0
- package/theme/themes/eea/collections/table.variables +1 -1
- package/theme/themes/eea/elements/button.overrides +26 -7
- package/theme/themes/eea/elements/button.variables +1 -0
- package/theme/themes/eea/elements/image.overrides +6 -0
- package/theme/themes/eea/elements/image.variables +1 -0
- package/theme/themes/eea/elements/label.overrides +12 -8
- package/theme/themes/eea/extras/contextNavigation.less +4 -2
- package/theme/themes/eea/extras/contextNavigation.variables +1 -1
- package/theme/themes/eea/extras/downloadLabeledIcon.less +31 -22
- package/theme/themes/eea/extras/downloadLabeledIcon.variables +16 -14
- package/theme/themes/eea/extras/header.less +8 -2
- package/theme/themes/eea/extras/header.variables +4 -1
- package/theme/themes/eea/extras/inpageNavigation.less +2 -0
- package/theme/themes/eea/extras/inpageNavigation.variables +2 -0
- package/theme/themes/eea/extras/labeledIconGroup.variables +3 -3
- package/theme/themes/eea/extras/languageLabeledIcon.less +28 -20
- package/theme/themes/eea/extras/languageLabeledIcon.variables +18 -16
- package/theme/themes/eea/extras/newTabLabeledIcon.less +21 -15
- package/theme/themes/eea/extras/newTabLabeledIcon.variables +7 -5
- package/theme/themes/eea/globals/mixins.less +8 -0
- package/theme/themes/eea/globals/site.overrides +4 -1
- package/theme/themes/eea/globals/utilities.less +47 -0
- package/theme/themes/eea/modules/accordion.overrides +7 -0
- package/theme/themes/eea/modules/checkbox.overrides +6 -0
- package/theme/themes/eea/modules/checkbox.variables +3 -3
- package/theme/themes/eea/modules/modal.overrides +13 -0
- package/theme/themes/eea/modules/modal.variables +5 -1
- package/theme/themes/eea/views/card.overrides +20 -8
- package/theme/themes/eea/views/card.variables +6 -2
- package/theme/themes/eea/views/item.overrides +2 -2
- package/src/ui/Card/AvatarGrid/AvatarGrid.jsx +0 -61
- package/src/ui/Card/AvatarGrid/AvatarGrid.stories.jsx +0 -89
- package/src/ui/Card/RoundedCard.stories.jsx +0 -122
- package/theme/themes/eea/extras/avatar.variables +0 -28
- package/theme/themes/eea/extras/avatarGrid.less +0 -43
- package/theme/themes/eea/extras/avatarGrid.variables +0 -16
|
@@ -43,23 +43,85 @@ export default {
|
|
|
43
43
|
type: { summary: 'boolean' },
|
|
44
44
|
},
|
|
45
45
|
},
|
|
46
|
+
rounded: {
|
|
47
|
+
table: {
|
|
48
|
+
defaultValue: { summary: 'false' },
|
|
49
|
+
type: { summary: 'boolean' },
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
objectFit: {
|
|
53
|
+
name: 'Image fit',
|
|
54
|
+
options: ['unset', 'cover', 'contain', 'fill', 'scale-down'],
|
|
55
|
+
control: { type: 'select' },
|
|
56
|
+
table: {
|
|
57
|
+
category: 'Image',
|
|
58
|
+
defaultValue: { summary: 'cover' },
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
objectPosition: {
|
|
62
|
+
name: 'Image position',
|
|
63
|
+
options: ['none', 'center', 'top', 'bottom', 'left', 'right'],
|
|
64
|
+
control: { type: 'select' },
|
|
65
|
+
table: {
|
|
66
|
+
category: 'Image',
|
|
67
|
+
defaultValue: { summary: 'center' },
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
titleMaxLines: {
|
|
71
|
+
name: 'Title max lines',
|
|
72
|
+
options: ['none', '1', '2', '3', '4', '5'],
|
|
73
|
+
control: { type: 'select' },
|
|
74
|
+
table: {
|
|
75
|
+
category: 'Content',
|
|
76
|
+
defaultValue: { summary: '2' },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
maxLines: {
|
|
80
|
+
name: 'Content max lines',
|
|
81
|
+
options: ['none', '1', '2', '3', '4', '5'],
|
|
82
|
+
control: { type: 'select' },
|
|
83
|
+
table: {
|
|
84
|
+
category: 'Content',
|
|
85
|
+
defaultValue: { summary: '2' },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
46
88
|
cards: {
|
|
89
|
+
name: 'Cards content',
|
|
47
90
|
table: {
|
|
48
91
|
type: {
|
|
49
92
|
summary: 'Object',
|
|
50
93
|
},
|
|
94
|
+
category: 'Content',
|
|
51
95
|
defaultValue: { summary: ' "" ' },
|
|
52
96
|
},
|
|
53
97
|
},
|
|
54
98
|
},
|
|
55
99
|
};
|
|
56
100
|
|
|
57
|
-
const CardTemplate = ({
|
|
101
|
+
const CardTemplate = ({
|
|
102
|
+
variant,
|
|
103
|
+
inverted,
|
|
104
|
+
titleOnImage,
|
|
105
|
+
rounded,
|
|
106
|
+
objectFit,
|
|
107
|
+
objectPosition,
|
|
108
|
+
titleMaxLines,
|
|
109
|
+
maxLines,
|
|
110
|
+
card,
|
|
111
|
+
}) => (
|
|
58
112
|
<Card
|
|
59
113
|
fluid={card.fluid}
|
|
60
|
-
className={
|
|
114
|
+
className={`u-card ${variant === 'default' ? '' : variant} ${
|
|
61
115
|
inverted ? 'inverted' : ''
|
|
62
|
-
}
|
|
116
|
+
} ${variant} ${rounded ? 'rounded' : ''} ${
|
|
117
|
+
objectFit === 'unset' ? '' : 'has--object-fit--' + objectFit
|
|
118
|
+
} ${
|
|
119
|
+
objectPosition === 'none' ? '' : 'has--object-position--' + objectPosition
|
|
120
|
+
} ${
|
|
121
|
+
titleMaxLines === 'none'
|
|
122
|
+
? 'title-max-0-lines'
|
|
123
|
+
: 'title-max-' + titleMaxLines + '-lines'
|
|
124
|
+
} ${maxLines === 'none' ? 'max-0-lines' : 'max-' + maxLines + '-lines'}`}
|
|
63
125
|
>
|
|
64
126
|
{/* Card Image */}
|
|
65
127
|
{card.hasImage ? (
|
|
@@ -86,7 +148,9 @@ const CardTemplate = ({ variant, inverted, titleOnImage, card }) => (
|
|
|
86
148
|
|
|
87
149
|
{/* Title */}
|
|
88
150
|
{!titleOnImage || !card.hasImage ? (
|
|
89
|
-
<Card.Header>
|
|
151
|
+
<Card.Header>
|
|
152
|
+
<a href={card.href}>{card.title}</a>
|
|
153
|
+
</Card.Header>
|
|
90
154
|
) : (
|
|
91
155
|
''
|
|
92
156
|
)}
|
|
@@ -125,6 +189,11 @@ const Template = (args) => (
|
|
|
125
189
|
variant={args.variant}
|
|
126
190
|
titleOnImage={args.titleOnImage}
|
|
127
191
|
inverted={args.inverted}
|
|
192
|
+
rounded={args.rounded}
|
|
193
|
+
objectFit={args.objectFit}
|
|
194
|
+
objectPosition={args.objectPosition}
|
|
195
|
+
titleMaxLines={args.titleMaxLines}
|
|
196
|
+
maxLines={args.maxLines}
|
|
128
197
|
card={card}
|
|
129
198
|
key={index}
|
|
130
199
|
/>
|
|
@@ -137,6 +206,11 @@ Default.args = {
|
|
|
137
206
|
titleOnImage: false,
|
|
138
207
|
variant: 'default',
|
|
139
208
|
inverted: false,
|
|
209
|
+
rounded: false,
|
|
210
|
+
objectFit: 'cover',
|
|
211
|
+
objectPosition: 'center',
|
|
212
|
+
titleMaxLines: '2',
|
|
213
|
+
maxLines: '2',
|
|
140
214
|
cards: [
|
|
141
215
|
{
|
|
142
216
|
title: 'Economy and resources',
|
|
@@ -162,6 +236,11 @@ const GridTemplate = (args) => (
|
|
|
162
236
|
variant={args.variant}
|
|
163
237
|
titleOnImage={args.titleOnImage}
|
|
164
238
|
inverted={args.inverted}
|
|
239
|
+
rounded={args.rounded}
|
|
240
|
+
objectFit={args.objectFit}
|
|
241
|
+
objectPosition={args.objectPosition}
|
|
242
|
+
titleMaxLines={args.titleMaxLines}
|
|
243
|
+
maxLines={args.maxLines}
|
|
165
244
|
card={card}
|
|
166
245
|
key={index}
|
|
167
246
|
/>
|
|
@@ -176,6 +255,11 @@ CardGrid.args = {
|
|
|
176
255
|
titleOnImage: false,
|
|
177
256
|
variant: 'default',
|
|
178
257
|
inverted: false,
|
|
258
|
+
rounded: false,
|
|
259
|
+
objectFit: 'cover',
|
|
260
|
+
objectPosition: 'center',
|
|
261
|
+
titleMaxLines: '2',
|
|
262
|
+
maxLines: '2',
|
|
179
263
|
cards: [
|
|
180
264
|
{
|
|
181
265
|
title: 'Nature',
|
|
@@ -221,6 +305,11 @@ ImageGrid.args = {
|
|
|
221
305
|
titleOnImage: true,
|
|
222
306
|
variant: 'default',
|
|
223
307
|
inverted: false,
|
|
308
|
+
rounded: false,
|
|
309
|
+
objectFit: 'center',
|
|
310
|
+
objectPosition: 'cover',
|
|
311
|
+
titleMaxLines: '2',
|
|
312
|
+
maxLines: '2',
|
|
224
313
|
cards: [
|
|
225
314
|
{
|
|
226
315
|
title: 'Nature',
|
|
@@ -257,6 +346,11 @@ const FluidGridTemplate = (args) => (
|
|
|
257
346
|
variant={args.variant}
|
|
258
347
|
titleOnImage={args.titleOnImage}
|
|
259
348
|
inverted={args.inverted}
|
|
349
|
+
rounded={args.rounded}
|
|
350
|
+
objectFit={args.objectFit}
|
|
351
|
+
objectPosition={args.objectPosition}
|
|
352
|
+
titleMaxLines={args.titleMaxLines}
|
|
353
|
+
maxLines={args.maxLines}
|
|
260
354
|
card={card}
|
|
261
355
|
key={index}
|
|
262
356
|
/>
|
|
@@ -270,6 +364,11 @@ FluidGrid.args = {
|
|
|
270
364
|
titleOnImage: false,
|
|
271
365
|
variant: 'default',
|
|
272
366
|
inverted: false,
|
|
367
|
+
rounded: false,
|
|
368
|
+
objectFit: 'cover',
|
|
369
|
+
objectPosition: 'center',
|
|
370
|
+
titleMaxLines: '2',
|
|
371
|
+
maxLines: '2',
|
|
273
372
|
cards: [
|
|
274
373
|
{
|
|
275
374
|
title: 'Nature',
|
|
@@ -347,7 +446,12 @@ function CarouselCardsContent({
|
|
|
347
446
|
titleOnImage,
|
|
348
447
|
variant,
|
|
349
448
|
inverted,
|
|
449
|
+
rounded,
|
|
450
|
+
objectFit,
|
|
350
451
|
settings,
|
|
452
|
+
objectPosition,
|
|
453
|
+
titleMaxLines,
|
|
454
|
+
maxLines,
|
|
351
455
|
cards,
|
|
352
456
|
}) {
|
|
353
457
|
const slider = React.useRef(null);
|
|
@@ -359,6 +463,11 @@ function CarouselCardsContent({
|
|
|
359
463
|
variant={variant}
|
|
360
464
|
titleOnImage={titleOnImage}
|
|
361
465
|
inverted={inverted}
|
|
466
|
+
rounded={rounded}
|
|
467
|
+
objectFit={objectFit}
|
|
468
|
+
objectPosition={objectPosition}
|
|
469
|
+
titleMaxLines={titleMaxLines}
|
|
470
|
+
maxLines={maxLines}
|
|
362
471
|
card={card}
|
|
363
472
|
key={index}
|
|
364
473
|
/>
|
|
@@ -380,6 +489,11 @@ CarouselCards.args = {
|
|
|
380
489
|
titleOnImage: false,
|
|
381
490
|
variant: 'default',
|
|
382
491
|
inverted: false,
|
|
492
|
+
rounded: false,
|
|
493
|
+
objectFit: 'cover',
|
|
494
|
+
objectPosition: 'center',
|
|
495
|
+
titleMaxLines: '2',
|
|
496
|
+
maxLines: '2',
|
|
383
497
|
settings: {
|
|
384
498
|
dots: true,
|
|
385
499
|
infinite: true,
|
|
@@ -465,17 +579,37 @@ CarouselCards.argTypes = {
|
|
|
465
579
|
},
|
|
466
580
|
};
|
|
467
581
|
|
|
468
|
-
const TeaserCard = ({
|
|
582
|
+
const TeaserCard = ({
|
|
583
|
+
variant,
|
|
584
|
+
titleOnImage,
|
|
585
|
+
inverted,
|
|
586
|
+
rounded,
|
|
587
|
+
objectFit,
|
|
588
|
+
objectPosition,
|
|
589
|
+
titleMaxLines,
|
|
590
|
+
maxLines,
|
|
591
|
+
card,
|
|
592
|
+
}) => (
|
|
469
593
|
<div className="column grid-block-teaser">
|
|
470
594
|
<div
|
|
471
|
-
className={`styled-teaser styled ${
|
|
472
|
-
variant === 'default' ? '' : variant
|
|
473
|
-
} ${inverted ? 'inverted' : ''}`}
|
|
595
|
+
className={`styled-teaser styled ${variant === 'default' ? '' : variant}`}
|
|
474
596
|
>
|
|
475
597
|
<div
|
|
476
|
-
className={`ui card u-card
|
|
477
|
-
|
|
478
|
-
} ${variant}
|
|
598
|
+
className={`ui card u-card ${card.fluid ? 'fluid' : ''} ${
|
|
599
|
+
inverted ? 'inverted' : ''
|
|
600
|
+
} ${variant} ${rounded ? 'rounded' : ''} ${
|
|
601
|
+
objectFit === 'unset' ? '' : 'has--object-fit--' + objectFit
|
|
602
|
+
} ${
|
|
603
|
+
objectPosition === 'none'
|
|
604
|
+
? ''
|
|
605
|
+
: 'has--object-position--' + objectPosition
|
|
606
|
+
} ${
|
|
607
|
+
titleMaxLines === 'none'
|
|
608
|
+
? 'title-max-0-lines'
|
|
609
|
+
: 'title-max-' + titleMaxLines + '-lines'
|
|
610
|
+
} ${
|
|
611
|
+
maxLines === 'none' ? 'max-0-lines' : 'max-' + maxLines + '-lines'
|
|
612
|
+
}`}
|
|
479
613
|
>
|
|
480
614
|
<a className="image" href={card.href}>
|
|
481
615
|
<img src={card.imgUrl} alt={card.title} className="ui image" />
|
|
@@ -488,7 +622,9 @@ const TeaserCard = ({ variant, inverted, titleOnImage, card }) => (
|
|
|
488
622
|
|
|
489
623
|
{!titleOnImage && (
|
|
490
624
|
<div className="content">
|
|
491
|
-
<div className="header">
|
|
625
|
+
<div className="header">
|
|
626
|
+
<a href={card.href}>{card.title}</a>
|
|
627
|
+
</div>
|
|
492
628
|
<Card.Description>{card.description}</Card.Description>
|
|
493
629
|
</div>
|
|
494
630
|
)}
|
|
@@ -506,6 +642,11 @@ const TeaserTemplate = (args) => (
|
|
|
506
642
|
variant={args.variant}
|
|
507
643
|
titleOnImage={args.titleOnImage}
|
|
508
644
|
inverted={args.inverted}
|
|
645
|
+
rounded={args.rounded}
|
|
646
|
+
objectFit={args.objectFit}
|
|
647
|
+
objectPosition={args.objectPosition}
|
|
648
|
+
titleMaxLines={args.titleMaxLines}
|
|
649
|
+
maxLines={args.maxLines}
|
|
509
650
|
card={card}
|
|
510
651
|
key={index}
|
|
511
652
|
/>
|
|
@@ -520,6 +661,11 @@ TeaserCardGrid.args = {
|
|
|
520
661
|
titleOnImage: false,
|
|
521
662
|
variant: 'default',
|
|
522
663
|
inverted: false,
|
|
664
|
+
rounded: false,
|
|
665
|
+
objectFit: 'cover',
|
|
666
|
+
objectPosition: 'center',
|
|
667
|
+
titleMaxLines: '2',
|
|
668
|
+
maxLines: '2',
|
|
523
669
|
cards: [
|
|
524
670
|
{
|
|
525
671
|
title: "State of Europe's environment",
|
|
@@ -534,7 +680,7 @@ TeaserCardGrid.args = {
|
|
|
534
680
|
{
|
|
535
681
|
title: 'Climate',
|
|
536
682
|
imgUrl:
|
|
537
|
-
'https://www.eea.europa.eu/
|
|
683
|
+
'https://www.eea.europa.eu/publications/eea-eionet-strategy-2021-2030/image_mini',
|
|
538
684
|
hasImage: true,
|
|
539
685
|
description:
|
|
540
686
|
'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
|
|
@@ -45,32 +45,38 @@ function CommentEEA({ title, comments, threaded, minimal, size }) {
|
|
|
45
45
|
<Comment key={comIndex}>
|
|
46
46
|
<Comment.Avatar src={comment.src} alt="user avatar" />
|
|
47
47
|
<Comment.Content>
|
|
48
|
-
<Comment.Author
|
|
48
|
+
<Comment.Author>{comment.author}</Comment.Author>
|
|
49
49
|
<Comment.Metadata>
|
|
50
50
|
<div>{comment.time}</div>
|
|
51
51
|
</Comment.Metadata>
|
|
52
52
|
<Comment.Text>{comment.text}</Comment.Text>
|
|
53
53
|
<Comment.Actions>
|
|
54
|
-
<Comment.Action>
|
|
54
|
+
<Comment.Action as="button" className="ui button text">
|
|
55
|
+
Reply
|
|
56
|
+
</Comment.Action>
|
|
55
57
|
</Comment.Actions>
|
|
56
58
|
</Comment.Content>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<Comment
|
|
61
|
-
|
|
62
|
-
<Comment.
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
<Comment.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
{comment.replies.length > 0 && (
|
|
60
|
+
<Comment.Group>
|
|
61
|
+
{comment.replies.map((reply, repIndex) => (
|
|
62
|
+
<Comment key={repIndex}>
|
|
63
|
+
<Comment.Avatar src={comment.src} alt="user avatar" />
|
|
64
|
+
<Comment.Content>
|
|
65
|
+
<Comment.Author>{reply.author}</Comment.Author>
|
|
66
|
+
<Comment.Metadata>
|
|
67
|
+
<div>{reply.time}</div>
|
|
68
|
+
</Comment.Metadata>
|
|
69
|
+
<Comment.Text>{reply.text}</Comment.Text>
|
|
70
|
+
<Comment.Actions>
|
|
71
|
+
<Comment.Action as="button" className="ui button text">
|
|
72
|
+
Reply
|
|
73
|
+
</Comment.Action>
|
|
74
|
+
</Comment.Actions>
|
|
75
|
+
</Comment.Content>
|
|
76
|
+
</Comment>
|
|
77
|
+
))}
|
|
78
|
+
</Comment.Group>
|
|
79
|
+
)}
|
|
74
80
|
</Comment>
|
|
75
81
|
))}
|
|
76
82
|
</Comment.Group>
|
|
@@ -125,14 +125,15 @@ function Template({ ...args }) {
|
|
|
125
125
|
return (
|
|
126
126
|
<Container>
|
|
127
127
|
<nav className="context-navigation">
|
|
128
|
-
<div className="context-navigation-header">
|
|
128
|
+
<div className="context-navigation-header" id="Navigation">
|
|
129
129
|
{args?.header ? <a href="/#">{args?.header}</a> : 'Navigation'}
|
|
130
130
|
</div>
|
|
131
|
-
<div role="list" className="ui list">
|
|
131
|
+
<div role="list" className="ui list" aria-labelledby="Navigation">
|
|
132
132
|
{args.sidenavItems &&
|
|
133
133
|
args.sidenavItems.map((element, index) => {
|
|
134
134
|
return (
|
|
135
135
|
<div
|
|
136
|
+
key={index}
|
|
136
137
|
role="listitem"
|
|
137
138
|
className={
|
|
138
139
|
(element.is_current ? 'active ' : '') +
|
|
@@ -142,6 +143,7 @@ function Template({ ...args }) {
|
|
|
142
143
|
>
|
|
143
144
|
<div className="content">
|
|
144
145
|
<a
|
|
146
|
+
id={element['@id']}
|
|
145
147
|
title={element.title}
|
|
146
148
|
className={
|
|
147
149
|
element?.items?.length > 0
|
|
@@ -155,7 +157,12 @@ function Template({ ...args }) {
|
|
|
155
157
|
{element?.items?.length > 0
|
|
156
158
|
? element.items.map((subelement, index) => {
|
|
157
159
|
return (
|
|
158
|
-
<div
|
|
160
|
+
<div
|
|
161
|
+
className="list"
|
|
162
|
+
role="list"
|
|
163
|
+
key={index}
|
|
164
|
+
aria-labelledby={element['@id']}
|
|
165
|
+
>
|
|
159
166
|
<div
|
|
160
167
|
role="listitem"
|
|
161
168
|
className={
|
|
@@ -166,6 +173,7 @@ function Template({ ...args }) {
|
|
|
166
173
|
>
|
|
167
174
|
<div className="content">
|
|
168
175
|
<a
|
|
176
|
+
id={subelement['@id']}
|
|
169
177
|
title={subelement.title}
|
|
170
178
|
className="contenttype-document"
|
|
171
179
|
href={subelement.url}
|
|
@@ -176,7 +184,12 @@ function Template({ ...args }) {
|
|
|
176
184
|
subelement.items.map(
|
|
177
185
|
(subparelement, index) => {
|
|
178
186
|
return (
|
|
179
|
-
<div
|
|
187
|
+
<div
|
|
188
|
+
className="list"
|
|
189
|
+
role="list"
|
|
190
|
+
key={index}
|
|
191
|
+
aria-labelledby={subelement['@id']}
|
|
192
|
+
>
|
|
180
193
|
<div
|
|
181
194
|
role="listitem"
|
|
182
195
|
className={
|
|
@@ -187,6 +200,7 @@ function Template({ ...args }) {
|
|
|
187
200
|
>
|
|
188
201
|
<div className="content">
|
|
189
202
|
<a
|
|
203
|
+
id={subparelement['@id']}
|
|
190
204
|
title={subparelement.title}
|
|
191
205
|
className="contenttype-document"
|
|
192
206
|
href={subparelement.url}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { Button } from 'semantic-ui-react';
|
|
2
3
|
import DownloadLabeledIcon from './DownloadLabeledIcon';
|
|
3
4
|
import LabeledIconGroup from '../LabeledIconGroup/LabeledIconGroup';
|
|
4
5
|
|
|
@@ -42,12 +43,12 @@ const DefaultTemplate = (args) => (
|
|
|
42
43
|
<DownloadLabeledIcon
|
|
43
44
|
{...args}
|
|
44
45
|
trigger={
|
|
45
|
-
<
|
|
46
|
+
<Button className="text">
|
|
46
47
|
<DownloadLabeledIcon.Icon {...args}>
|
|
47
48
|
{args.icon}
|
|
48
49
|
</DownloadLabeledIcon.Icon>
|
|
49
50
|
<DownloadLabeledIcon.Label>{args.label}</DownloadLabeledIcon.Label>
|
|
50
|
-
</
|
|
51
|
+
</Button>
|
|
51
52
|
}
|
|
52
53
|
>
|
|
53
54
|
<DownloadLabeledIcon.Dropdown {...args}></DownloadLabeledIcon.Dropdown>
|
|
@@ -2,6 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { Link } from 'react-router-dom';
|
|
4
4
|
|
|
5
|
+
import { isInternalURL } from '@plone/volto/helpers/Url/Url';
|
|
6
|
+
|
|
5
7
|
const Contact = ({ children, contacts }) =>
|
|
6
8
|
children?.length ? (
|
|
7
9
|
children
|
|
@@ -9,15 +11,38 @@ const Contact = ({ children, contacts }) =>
|
|
|
9
11
|
<div className="contact-block">
|
|
10
12
|
{contacts?.map((contact, index) => (
|
|
11
13
|
<div className="contact" key={index}>
|
|
12
|
-
|
|
13
|
-
{contact.
|
|
14
|
-
|
|
14
|
+
{isInternalURL(contact.link) ? (
|
|
15
|
+
<Link to={contact.link} className="bold">
|
|
16
|
+
{contact.text}
|
|
17
|
+
</Link>
|
|
18
|
+
) : (
|
|
19
|
+
<a
|
|
20
|
+
href={contact.link}
|
|
21
|
+
target={'_blank'}
|
|
22
|
+
rel="noopener noreferrer"
|
|
23
|
+
className={'bold'}
|
|
24
|
+
>
|
|
25
|
+
{contact.text}
|
|
26
|
+
</a>
|
|
27
|
+
)}
|
|
15
28
|
{contact.children && (
|
|
16
29
|
<div className="subcontact">
|
|
17
30
|
{contact.children.map((child, index) => (
|
|
18
|
-
|
|
19
|
-
{child.
|
|
20
|
-
|
|
31
|
+
<>
|
|
32
|
+
{isInternalURL(child.link) ? (
|
|
33
|
+
<Link to={child.link} key={index}>
|
|
34
|
+
{child.text}
|
|
35
|
+
</Link>
|
|
36
|
+
) : (
|
|
37
|
+
<a
|
|
38
|
+
href={child.link}
|
|
39
|
+
target={'_blank'}
|
|
40
|
+
rel="noopener noreferrer"
|
|
41
|
+
>
|
|
42
|
+
{child.text}
|
|
43
|
+
</a>
|
|
44
|
+
)}
|
|
45
|
+
</>
|
|
21
46
|
))}
|
|
22
47
|
</div>
|
|
23
48
|
)}
|
|
@@ -33,29 +33,60 @@ Default.args = {
|
|
|
33
33
|
header: 'Environmental information systems',
|
|
34
34
|
description: '',
|
|
35
35
|
actions: [
|
|
36
|
-
{ link: '
|
|
37
|
-
{ link: '
|
|
38
|
-
{ link: '
|
|
36
|
+
{ link: '/privacy', title: 'Privacy' },
|
|
37
|
+
{ link: '/sitemap', title: 'Sitemap' },
|
|
38
|
+
{ link: 'https://www.eea.europa.eu/en/login', title: 'CMS Login' },
|
|
39
39
|
],
|
|
40
40
|
copyright: [
|
|
41
41
|
{ link: 'https://status.eea.europa.eu/', title: 'System status' },
|
|
42
|
-
{
|
|
42
|
+
{
|
|
43
|
+
link: '/copyright',
|
|
44
|
+
title: '© Copyright 2023 EEA',
|
|
45
|
+
},
|
|
43
46
|
],
|
|
44
47
|
sites: [
|
|
45
|
-
{ link: '
|
|
46
|
-
{
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
{ link: 'https://water.europa.eu/marine', src: Marine, alt: 'WISE marine' },
|
|
49
|
+
{
|
|
50
|
+
link: 'https://water.europa.eu/freshwater',
|
|
51
|
+
src: Freshwater,
|
|
52
|
+
alt: 'WISE freshwater',
|
|
53
|
+
},
|
|
54
|
+
{ link: 'https://biodiversity.europa.eu/', src: Bise, alt: 'Biodiversity' },
|
|
49
55
|
{
|
|
50
|
-
link: '
|
|
56
|
+
link: 'https://forest.eea.europa.eu/',
|
|
57
|
+
src: Fise,
|
|
58
|
+
alt: 'Forest information system for europe',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
link: 'https://climate-adapt.eea.europa.eu/observatory',
|
|
51
62
|
src: ClimateHealth,
|
|
52
63
|
alt: 'Information platform for chemical monitoring',
|
|
53
64
|
},
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
{
|
|
66
|
+
link: 'https://climate-adapt.eea.europa.eu/',
|
|
67
|
+
src: Cca,
|
|
68
|
+
alt: 'Climate adapt',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
link: 'https://industry.eea.europa.eu/',
|
|
72
|
+
src: Industry,
|
|
73
|
+
alt: 'European industrial emissions portal',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
link: 'https://climate-energy.eea.europa.eu/',
|
|
77
|
+
src: Energy,
|
|
78
|
+
alt: 'Climate and energy in the EU',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
link: 'https://land.copernicus.eu/',
|
|
82
|
+
src: Copernicus,
|
|
83
|
+
alt: 'Copernicus land monitoring service',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
link: 'https://insitu.copernicus.eu/',
|
|
87
|
+
src: Insitu,
|
|
88
|
+
alt: 'Copernicus in situ',
|
|
89
|
+
},
|
|
59
90
|
],
|
|
60
91
|
managedBy: [
|
|
61
92
|
{
|
|
@@ -82,23 +113,43 @@ Default.args = {
|
|
|
82
113
|
},
|
|
83
114
|
],
|
|
84
115
|
social: [
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{
|
|
116
|
+
{
|
|
117
|
+
name: 'twitter',
|
|
118
|
+
icon: 'ri-twitter-fill',
|
|
119
|
+
link: 'https://twitter.com/euenvironment',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'facebook',
|
|
123
|
+
icon: 'ri-facebook-box-fill',
|
|
124
|
+
link: 'https://www.facebook.com/European.Environment.Agency',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'linkedin',
|
|
128
|
+
icon: 'ri-linkedin-fill',
|
|
129
|
+
link: 'https://www.linkedin.com/company/european-environment-agency',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'youtube',
|
|
133
|
+
icon: 'ri-youtube-fill',
|
|
134
|
+
link: 'https://www.youtube.com/user/EEAvideos',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'instagram',
|
|
138
|
+
icon: 'ri-instagram-fill',
|
|
139
|
+
link: 'https://www.instagram.com/ourplanet_eu',
|
|
140
|
+
},
|
|
141
|
+
{ name: 'rss', icon: 'ri-rss-fill', link: '/subscription/news-feeds' },
|
|
91
142
|
],
|
|
92
143
|
contacts: [
|
|
93
144
|
{
|
|
94
145
|
text: 'About us',
|
|
95
|
-
link: '
|
|
146
|
+
link: '/about',
|
|
96
147
|
children: [
|
|
97
|
-
{ text: 'FAQs', link: '
|
|
98
|
-
{ text: 'Careers', link: '
|
|
148
|
+
{ text: 'FAQs', link: 'http://external.site' },
|
|
149
|
+
{ text: 'Careers', link: '/careers' },
|
|
99
150
|
],
|
|
100
151
|
},
|
|
101
|
-
{ text: 'Contact us', link: '
|
|
102
|
-
{ text: 'Sign up to our newsletter', link: '
|
|
152
|
+
{ text: 'Contact us', link: '/contact-us' },
|
|
153
|
+
{ text: 'Sign up to our newsletter', link: '/newsletter' },
|
|
103
154
|
],
|
|
104
155
|
};
|