@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +119 -1
  2. package/package.json +1 -1
  3. package/src/semantic.less +0 -4
  4. package/src/ui/Accordion/Accordion.stories.js +52 -123
  5. package/src/ui/Breadcrumbs/Breadcrumb.stories.jsx +6 -34
  6. package/src/ui/Breadcrumbs/Breadcrumbs.jsx +24 -24
  7. package/src/ui/Card/Card.stories.jsx +159 -13
  8. package/src/ui/Comment/Comment.stories.js +25 -19
  9. package/src/ui/ContextNavigation/ContextNavigation.stories.jsx +18 -4
  10. package/src/ui/DownloadLabeledIcon/DownloadLabeledIcon.stories.jsx +3 -2
  11. package/src/ui/Footer/Contact.jsx +31 -6
  12. package/src/ui/Footer/Footer.stories.js +76 -25
  13. package/src/ui/Form/Button/Button.stories.jsx +1 -1
  14. package/src/ui/Header/Header.jsx +22 -6
  15. package/src/ui/Header/Header.stories.js +112 -210
  16. package/src/ui/Header/HeaderMenuPopUp.js +72 -63
  17. package/src/ui/Header/HeaderSearchPopUp.js +2 -1
  18. package/src/ui/InpageNavigation/InpageNavigation.jsx +4 -4
  19. package/src/ui/InpageNavigation/InpageNavigation.stories.jsx +5 -4
  20. package/src/ui/Label/Label.stories.js +3 -1
  21. package/src/ui/LabeledIconGroup/LabeledIconGroup.jsx +5 -4
  22. package/src/ui/LanguageLabeledIcon/LanguageLabeledIcon.stories.jsx +3 -2
  23. package/src/ui/Modal/Modal.stories.js +9 -2
  24. package/src/ui/NewTabLabeledIcon/NewTabLabeledIcon.jsx +9 -3
  25. package/src/ui/Tag/Tag.stories.jsx +1 -1
  26. package/src/ui/Video/Video.jsx +44 -0
  27. package/src/ui/Video/Video.stories.jsx +53 -0
  28. package/src/ui/index.js +2 -2
  29. package/theme/theme.config +0 -3
  30. package/theme/themes/eea/assets/logo/eionet.svg +80 -11
  31. package/theme/themes/eea/assets/video/demo-track-el.vtt +11 -0
  32. package/theme/themes/eea/assets/video/demo-track-en.vtt +11 -0
  33. package/theme/themes/eea/assets/video/demo-track-ro.vtt +11 -0
  34. package/theme/themes/eea/collections/breadcrumb.overrides +11 -0
  35. package/theme/themes/eea/collections/table.variables +1 -1
  36. package/theme/themes/eea/elements/button.overrides +26 -7
  37. package/theme/themes/eea/elements/button.variables +1 -0
  38. package/theme/themes/eea/elements/image.overrides +6 -0
  39. package/theme/themes/eea/elements/image.variables +1 -0
  40. package/theme/themes/eea/elements/label.overrides +12 -8
  41. package/theme/themes/eea/extras/contextNavigation.less +4 -2
  42. package/theme/themes/eea/extras/contextNavigation.variables +1 -1
  43. package/theme/themes/eea/extras/downloadLabeledIcon.less +31 -22
  44. package/theme/themes/eea/extras/downloadLabeledIcon.variables +16 -14
  45. package/theme/themes/eea/extras/header.less +8 -2
  46. package/theme/themes/eea/extras/header.variables +4 -1
  47. package/theme/themes/eea/extras/inpageNavigation.less +2 -0
  48. package/theme/themes/eea/extras/inpageNavigation.variables +2 -0
  49. package/theme/themes/eea/extras/labeledIconGroup.variables +3 -3
  50. package/theme/themes/eea/extras/languageLabeledIcon.less +28 -20
  51. package/theme/themes/eea/extras/languageLabeledIcon.variables +18 -16
  52. package/theme/themes/eea/extras/newTabLabeledIcon.less +21 -15
  53. package/theme/themes/eea/extras/newTabLabeledIcon.variables +7 -5
  54. package/theme/themes/eea/globals/mixins.less +8 -0
  55. package/theme/themes/eea/globals/site.overrides +4 -1
  56. package/theme/themes/eea/globals/utilities.less +47 -0
  57. package/theme/themes/eea/modules/accordion.overrides +7 -0
  58. package/theme/themes/eea/modules/checkbox.overrides +6 -0
  59. package/theme/themes/eea/modules/checkbox.variables +3 -3
  60. package/theme/themes/eea/modules/modal.overrides +13 -0
  61. package/theme/themes/eea/modules/modal.variables +5 -1
  62. package/theme/themes/eea/views/card.overrides +20 -8
  63. package/theme/themes/eea/views/card.variables +6 -2
  64. package/theme/themes/eea/views/item.overrides +2 -2
  65. package/src/ui/Card/AvatarGrid/AvatarGrid.jsx +0 -61
  66. package/src/ui/Card/AvatarGrid/AvatarGrid.stories.jsx +0 -89
  67. package/src/ui/Card/RoundedCard.stories.jsx +0 -122
  68. package/theme/themes/eea/extras/avatar.variables +0 -28
  69. package/theme/themes/eea/extras/avatarGrid.less +0 -43
  70. 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 = ({ variant, inverted, titleOnImage, card }) => (
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={`${variant === 'default' ? '' : variant} ${
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>{card.title}</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 = ({ variant, inverted, titleOnImage, card }) => (
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 max-3-lines title-max-3-lines ${
477
- card.fluid ? 'fluid' : ''
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">{card.title}</div>
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/media/pictures/european-environment-agency-building-with/image_large',
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 as="a">{comment.author}</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>Reply</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
- <Comment.Group>
58
- {comment.replies.map((reply, repIndex) => (
59
- <Comment key={repIndex}>
60
- <Comment.Avatar src={comment.src} alt="user avatar" />
61
- <Comment.Content>
62
- <Comment.Author as="a">{reply.author}</Comment.Author>
63
- <Comment.Metadata>
64
- <div>{reply.time}</div>
65
- </Comment.Metadata>
66
- <Comment.Text>{reply.text}</Comment.Text>
67
- <Comment.Actions>
68
- <Comment.Action>Reply</Comment.Action>
69
- </Comment.Actions>
70
- </Comment.Content>
71
- </Comment>
72
- ))}
73
- </Comment.Group>
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 className="list" role="list">
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 className="list" role="list">
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
- <div>
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
- </div>
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
- <Link to={contact.link} className="bold">
13
- {contact.text}
14
- </Link>
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
- <Link to={child.link} key={index}>
19
- {child.text}
20
- </Link>
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: '/#', title: 'Privacy' },
37
- { link: '/#', title: 'Sitemap' },
38
- { link: '/#', title: 'CMS Login' },
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
- { link: '/#', title: '© Copyright 2023 EEA' },
42
+ {
43
+ link: '/copyright',
44
+ title: '© Copyright 2023 EEA',
45
+ },
43
46
  ],
44
47
  sites: [
45
- { link: '/#', src: Marine, alt: 'WISE marine' },
46
- { link: '/#', src: Freshwater, alt: 'WISE freshwater' },
47
- { link: '/#', src: Bise, alt: 'Biodiversity' },
48
- { link: '/#', src: Fise, alt: 'Forest information system for europe' },
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
- { link: '/#', src: Cca, alt: 'Climate adapt' },
55
- { link: '/#', src: Industry, alt: 'European industrial emissions portal' },
56
- { link: '/#', src: Energy, alt: 'Climate and energy in the EU' },
57
- { link: '/#', src: Copernicus, alt: 'Copernicus land monitoring service' },
58
- { link: '/#', src: Insitu, alt: 'Copernicus in situ' },
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
- { name: 'twitter', icon: 'ri-twitter-fill', link: '/#' },
86
- { name: 'facebook', icon: 'ri-facebook-box-fill', link: '/#' },
87
- { name: 'linkedin', icon: 'ri-linkedin-fill', link: '/#' },
88
- { name: 'youtube', icon: 'ri-youtube-fill', link: '/#' },
89
- { name: 'instagram', icon: 'ri-instagram-fill', link: '/#' },
90
- { name: 'rss', icon: 'ri-rss-fill', link: '/#' },
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
  };
@@ -189,7 +189,7 @@ Labeled.argTypes = {
189
189
  export const Text = (args) => {
190
190
  return (
191
191
  <Container>
192
- <Button as="p" disabled={args.disabled}>
192
+ <Button className="text" disabled={args.disabled}>
193
193
  {args.label}
194
194
  </Button>
195
195
  </Container>