@eeacms/volto-eea-design-system 0.7.3 → 0.8.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 (34) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/package.json +1 -1
  3. package/src/ui/Card/AvatarGrid/AvatarGrid.jsx +25 -13
  4. package/src/ui/Card/AvatarGrid/AvatarGrid.stories.jsx +33 -13
  5. package/src/ui/Card/Card.stories.jsx +173 -77
  6. package/src/ui/Card/IconCard/IconCard.stories.jsx +195 -0
  7. package/src/ui/Card/PublicationCard.stories.jsx +15 -3
  8. package/src/ui/Card/RelatedContent/RelatedContent.jsx +30 -8
  9. package/src/ui/Card/RelatedContent/RelatedContent.stories.jsx +20 -0
  10. package/src/ui/Card/RoundedCard.stories.jsx +46 -20
  11. package/src/ui/Footer/Contact.jsx +11 -7
  12. package/src/ui/Footer/Footer.jsx +1 -1
  13. package/src/ui/Footer/FooterActions.jsx +24 -7
  14. package/src/ui/Footer/FooterHeader.jsx +1 -1
  15. package/src/ui/Footer/FooterSites.jsx +22 -10
  16. package/src/ui/Footer/SubFooter.jsx +42 -38
  17. package/src/ui/Header/HeaderMenuPopUp.js +63 -47
  18. package/theme/themes/eea/assets/images/Footer/Extras/footervisual.svg +2041 -1731
  19. package/theme/themes/eea/collections/breadcrumb.overrides +4 -0
  20. package/theme/themes/eea/collections/breadcrumb.variables +1 -1
  21. package/theme/themes/eea/extras/banner.less +0 -8
  22. package/theme/themes/eea/extras/custom.overrides +4 -1
  23. package/theme/themes/eea/extras/footer.less +93 -59
  24. package/theme/themes/eea/extras/footer.variables +31 -34
  25. package/theme/themes/eea/extras/header.less +13 -4
  26. package/theme/themes/eea/extras/header.variables +7 -4
  27. package/theme/themes/eea/globals/site.overrides +20 -0
  28. package/theme/themes/eea/globals/site.variables +9 -8
  29. package/theme/themes/eea/globals/utilities.less +6 -1
  30. package/theme/themes/eea/tokens/fonts.less +18 -17
  31. package/theme/themes/eea/views/card.overrides +179 -123
  32. package/theme/themes/eea/views/card.variables +34 -33
  33. package/theme/themes/eea/views/item.overrides +15 -1
  34. package/theme/themes/eea/views/item.variables +5 -2
@@ -28,10 +28,21 @@ export default {
28
28
  const Template = (args) => (
29
29
  <Container>
30
30
  <Card className="publication tertiary">
31
- <Image src={args.image} wrapped ui={false} alt="card image" />
31
+ <Image
32
+ as="a"
33
+ href={args.href}
34
+ src={args.image}
35
+ wrapped
36
+ ui={false}
37
+ alt="card image"
38
+ />
32
39
  <Card.Content>
33
- <Card.Meta>{args.tag}</Card.Meta>
34
- <Card.Description>{args.description}</Card.Description>
40
+ <Card.Meta>
41
+ <a href={args.href}>{args.tag}</a>
42
+ </Card.Meta>
43
+ <Card.Description>
44
+ <a href={args.href}>{args.description}</a>
45
+ </Card.Description>
35
46
  </Card.Content>
36
47
  </Card>
37
48
  </Container>
@@ -43,4 +54,5 @@ PublicationCard.args = {
43
54
  description:
44
55
  '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. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
45
56
  image: imageUrl,
57
+ href: '/#',
46
58
  };
@@ -32,11 +32,22 @@ RelatedContent.Grid = ({ children, ...rest }) => {
32
32
  mobile={12}
33
33
  >
34
34
  {row.map((item, index) => (
35
- <Card className="publication" key={index}>
36
- <Image src={item.image} wrapped ui={false} alt="card image" />
35
+ <Card className="publication tertiary" key={index}>
36
+ <Image
37
+ as="a"
38
+ href={item.href}
39
+ src={item.image}
40
+ wrapped
41
+ ui={false}
42
+ alt="card image"
43
+ />
37
44
  <Card.Content>
38
- <Card.Meta>{item.tag}</Card.Meta>
39
- <Card.Description>{item.description}</Card.Description>
45
+ <Card.Meta>
46
+ <a href={item.href}>{item.tag}</a>
47
+ </Card.Meta>
48
+ <Card.Description>
49
+ <a href={item.href}>{item.description}</a>
50
+ </Card.Description>
40
51
  </Card.Content>
41
52
  </Card>
42
53
  ))}
@@ -50,11 +61,22 @@ RelatedContent.Grid = ({ children, ...rest }) => {
50
61
  tablet={12}
51
62
  mobile={12}
52
63
  >
53
- <Card className="publication">
54
- <Image src={item.image} wrapped ui={false} alt="card image" />
64
+ <Card className="publication tertiary">
65
+ <Image
66
+ as="a"
67
+ href={item.href}
68
+ src={item.image}
69
+ wrapped
70
+ ui={false}
71
+ alt="card image"
72
+ />
55
73
  <Card.Content>
56
- <Card.Meta>{item.tag}</Card.Meta>
57
- <Card.Description>{item.description}</Card.Description>
74
+ <Card.Meta>
75
+ <a href={item.href}>{item.tag}</a>
76
+ </Card.Meta>
77
+ <Card.Description>
78
+ <a href={item.href}>{item.description}</a>
79
+ </Card.Description>
58
80
  </Card.Content>
59
81
  </Card>
60
82
  </Grid.Column>
@@ -31,29 +31,34 @@ DefaultEven.args = {
31
31
  description:
32
32
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
33
33
  image: imageUrl,
34
+ href: '/#',
34
35
  },
35
36
  {
36
37
  tag: '#Publication',
37
38
  description: 'Leo fermentum sollicitudin suspendisse iaculis feugiat.',
38
39
  image: imageUrl,
40
+ href: '/#',
39
41
  },
40
42
  {
41
43
  tag: '#Publication',
42
44
  description:
43
45
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. ',
44
46
  image: imageUrl,
47
+ href: '/#',
45
48
  },
46
49
  {
47
50
  tag: '#Publication',
48
51
  description:
49
52
  '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. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. ',
50
53
  image: imageUrl,
54
+ href: '/#',
51
55
  },
52
56
  {
53
57
  tag: '#Publication',
54
58
  description:
55
59
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
56
60
  image: imageUrl,
61
+ href: '/#',
57
62
  },
58
63
  ],
59
64
  buttonText: 'See All',
@@ -104,17 +109,20 @@ DefaultOdd.args = {
104
109
  description:
105
110
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
106
111
  image: imageUrl,
112
+ href: '/#',
107
113
  },
108
114
  {
109
115
  tag: '#Publication',
110
116
  description: 'Leo fermentum sollicitudin suspendisse iaculis feugiat.',
111
117
  image: imageUrl,
118
+ href: '/#',
112
119
  },
113
120
  {
114
121
  tag: '#Publication',
115
122
  description:
116
123
  '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. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. ',
117
124
  image: imageUrl,
125
+ href: '/#',
118
126
  },
119
127
  ],
120
128
  buttonText: 'See All',
@@ -190,6 +198,7 @@ function TabWithRelatedContent({ panes }) {
190
198
  menu={{
191
199
  secondary: true,
192
200
  pointing: true,
201
+ tabIndex: 0,
193
202
  }}
194
203
  />
195
204
  </Container>
@@ -209,6 +218,7 @@ RelatedContentInTab.args = {
209
218
  description:
210
219
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
211
220
  image: imageUrl,
221
+ href: '/#',
212
222
  },
213
223
  ],
214
224
  buttonText: 'See All',
@@ -222,12 +232,14 @@ RelatedContentInTab.args = {
222
232
  description:
223
233
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
224
234
  image: imageUrl,
235
+ href: '/#',
225
236
  },
226
237
  {
227
238
  tag: '#Publication',
228
239
  description:
229
240
  'Leo fermentum sollicitudin suspendisse iaculis feugiat.',
230
241
  image: imageUrl,
242
+ href: '/#',
231
243
  },
232
244
  ],
233
245
  buttonText: 'See All',
@@ -241,18 +253,21 @@ RelatedContentInTab.args = {
241
253
  description:
242
254
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
243
255
  image: imageUrl,
256
+ href: '/#',
244
257
  },
245
258
  {
246
259
  tag: '#Publication',
247
260
  description:
248
261
  'Leo fermentum sollicitudin suspendisse iaculis feugiat.',
249
262
  image: imageUrl,
263
+ href: '/#',
250
264
  },
251
265
  {
252
266
  tag: '#Publication',
253
267
  description:
254
268
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. ',
255
269
  image: imageUrl,
270
+ href: '/#',
256
271
  },
257
272
  ],
258
273
  buttonText: 'See All',
@@ -266,30 +281,35 @@ RelatedContentInTab.args = {
266
281
  description:
267
282
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
268
283
  image: imageUrl,
284
+ href: '/#',
269
285
  },
270
286
  {
271
287
  tag: '#Publication',
272
288
  description:
273
289
  'Leo fermentum sollicitudin suspendisse iaculis feugiat.',
274
290
  image: imageUrl,
291
+ href: '/#',
275
292
  },
276
293
  {
277
294
  tag: '#Publication',
278
295
  description:
279
296
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. ',
280
297
  image: imageUrl,
298
+ href: '/#',
281
299
  },
282
300
  {
283
301
  tag: '#Publication',
284
302
  description:
285
303
  '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. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis. ',
286
304
  image: imageUrl,
305
+ href: '/#',
287
306
  },
288
307
  {
289
308
  tag: '#Publication',
290
309
  description:
291
310
  'Leo fermentum sollicitudin suspendisse iaculis feugiat. Eget tellus blandit aenean mattis.',
292
311
  image: imageUrl,
312
+ href: '/#',
293
313
  },
294
314
  ],
295
315
  buttonText: 'See All',
@@ -11,13 +11,22 @@ export default {
11
11
  },
12
12
  },
13
13
  argTypes: {
14
- hasImage: {
15
- description: 'true if card contains image',
14
+ variant: {
15
+ options: ['default', 'primary', 'secondary', 'tertiary'],
16
+ control: { type: 'select' },
17
+ description: 'card variation class',
16
18
  table: {
17
19
  type: {
18
- summary: 'boolean',
20
+ summary: 'string',
19
21
  },
20
- defaultValue: { summary: true },
22
+ defaultValue: { summary: 'null' },
23
+ },
24
+ },
25
+ inverted: {
26
+ description: 'Inverted card',
27
+ table: {
28
+ defaultValue: { summary: 'false' },
29
+ type: { summary: 'boolean' },
21
30
  },
22
31
  },
23
32
  title: {
@@ -47,11 +56,8 @@ export default {
47
56
  defaultValue: { summary: false },
48
57
  },
49
58
  },
50
- avatarVariant: {
51
- options: ['big', 'small'],
52
- control: { type: 'inline-radio' },
53
- defaultValue: 'big',
54
- description: 'rounded card size class',
59
+ src: {
60
+ description: 'rounded card image url',
55
61
  table: {
56
62
  type: {
57
63
  summary: 'string',
@@ -59,13 +65,11 @@ export default {
59
65
  defaultValue: { summary: ' "" ' },
60
66
  },
61
67
  },
62
- src: {
63
- description: 'rounded card image url',
68
+ hasLink: {
69
+ description: 'Clickable card',
64
70
  table: {
65
- type: {
66
- summary: 'string',
67
- },
68
- defaultValue: { summary: ' "" ' },
71
+ defaultValue: { summary: 'true' },
72
+ type: { summary: 'boolean' },
69
73
  },
70
74
  },
71
75
  },
@@ -73,12 +77,32 @@ export default {
73
77
 
74
78
  const AvatarTemplate = (args) => (
75
79
  <Container>
76
- <Card className={`rounded ${args.avatarVariant}`} fluid={args.fluid}>
77
- {args.hasImage && (
80
+ <Card
81
+ className={`rounded ${args.variant === 'default' ? '' : args.variant} ${
82
+ args.inverted ? 'inverted' : ''
83
+ }`}
84
+ fluid={args.fluid}
85
+ >
86
+ {args.hasLink ? (
87
+ <Image
88
+ as="a"
89
+ href={args.href}
90
+ src={args.src}
91
+ wrapped
92
+ ui={false}
93
+ alt="card image"
94
+ />
95
+ ) : (
78
96
  <Image src={args.src} wrapped ui={false} alt="card image" />
79
97
  )}
80
98
  <Card.Content>
81
- <Card.Header>{args.title}</Card.Header>
99
+ {args.hasLink ? (
100
+ <Card.Header>
101
+ <a href={args.href}>{args.title}</a>
102
+ </Card.Header>
103
+ ) : (
104
+ <Card.Header>{args.title}</Card.Header>
105
+ )}
82
106
  <Card.Description>{args.description}</Card.Description>
83
107
  </Card.Content>
84
108
  </Card>
@@ -87,10 +111,12 @@ const AvatarTemplate = (args) => (
87
111
 
88
112
  export const Default = AvatarTemplate.bind({});
89
113
  Default.args = {
90
- avatarVariant: 'big',
114
+ variant: 'default',
115
+ inverted: false,
91
116
  src: imgUrl,
92
117
  title: 'Lorem Ipsum',
93
118
  description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
94
- hasImage: true,
95
119
  fluid: false,
120
+ hasLink: true,
121
+ href: '/#',
96
122
  };
@@ -1,30 +1,34 @@
1
1
  import React from 'react';
2
- import { Icon } from 'semantic-ui-react';
3
2
  import PropTypes from 'prop-types';
4
3
  import { Link } from 'react-router-dom';
5
4
 
6
- const Contact = ({ children, contacts, header, address }) =>
5
+ const Contact = ({ children, contacts }) =>
7
6
  children?.length ? (
8
7
  children
9
8
  ) : (
10
9
  <div className="contact-block">
11
- <p className="header">{header}</p>
12
10
  {contacts?.map((contact, index) => (
13
11
  <div className="contact" key={index}>
14
- <Link to={contact.link}>
15
- <Icon className={contact.icon} size="big"></Icon>
12
+ <Link to={contact.link} className="bold">
16
13
  {contact.text}
17
14
  </Link>
15
+ {contact.children && (
16
+ <div className="subcontact">
17
+ {contact.children.map((child, index) => (
18
+ <Link to={child.link} key={index}>
19
+ {child.text}
20
+ </Link>
21
+ ))}
22
+ </div>
23
+ )}
18
24
  </div>
19
25
  ))}
20
- {address && <p className="address">{address}</p>}
21
26
  </div>
22
27
  );
23
28
 
24
29
  Contact.propTypes = {
25
30
  contacts: PropTypes.array,
26
31
  header: PropTypes.string,
27
- address: PropTypes.string,
28
32
  };
29
33
 
30
34
  export default Contact;
@@ -24,7 +24,7 @@ const Footer = (props) => {
24
24
  const { children } = props;
25
25
  return (
26
26
  <footer>
27
- <div className="wrapper">
27
+ <div className="footer-wrapper">
28
28
  <Container>{children}</Container>
29
29
  </div>
30
30
  </footer>
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Link } from 'react-router-dom';
3
+ import { Grid } from 'semantic-ui-react';
3
4
 
4
5
  const FooterActions = (props) => {
5
6
  if (props.children) {
@@ -8,13 +9,29 @@ const FooterActions = (props) => {
8
9
 
9
10
  return (
10
11
  <div className="menu">
11
- {props.actions &&
12
- props.actions.map((action, index) => (
13
- <Link to={action.link} key={index}>
14
- {action.copy && <>&copy;</>}
15
- {action.title}
16
- </Link>
17
- ))}
12
+ <Grid>
13
+ <Grid.Column mobile={12} tablet={6} computer={6}>
14
+ <div className="actions">
15
+ {props.actions &&
16
+ props.actions.map((action, index) => (
17
+ <Link to={action.link} key={index}>
18
+ {action.title}
19
+ </Link>
20
+ ))}
21
+ </div>
22
+ </Grid.Column>
23
+
24
+ <Grid.Column mobile={12} tablet={6} computer={6}>
25
+ <div className="copyright">
26
+ {props.copyright &&
27
+ props.copyright.map((copyright, index) => (
28
+ <Link to={copyright.link} key={index}>
29
+ &copy; Copyright {new Date().getFullYear()} {copyright.site}
30
+ </Link>
31
+ ))}
32
+ </div>
33
+ </Grid.Column>
34
+ </Grid>
18
35
  </div>
19
36
  );
20
37
  };
@@ -2,7 +2,7 @@ import React from 'react';
2
2
 
3
3
  const FooterHeader = (props) => {
4
4
  return (
5
- <div className="theme-sites mobile hidden">
5
+ <div className="theme-sites">
6
6
  <p className="header text-center">{props.children}</p>
7
7
  </div>
8
8
  );
@@ -3,23 +3,35 @@ import { Grid, Image } from 'semantic-ui-react';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
5
  const Sites = (props) => {
6
+ const getLogoColumns = (logos) => {
7
+ let column = [];
8
+ for (let i = 0; i < logos.length; i += 2) {
9
+ const item = logos[i];
10
+ const nextItem = logos[i + 1];
11
+ column.push(
12
+ <Grid.Column className="logo" key={i}>
13
+ <a className="logo" href={item.link}>
14
+ <Image src={item.src} alt={item.alt}></Image>
15
+ </a>
16
+ <a className="logo" href={nextItem.link}>
17
+ <Image src={nextItem.src} alt={nextItem.alt}></Image>
18
+ </a>
19
+ </Grid.Column>,
20
+ );
21
+ }
22
+ return column;
23
+ };
24
+
6
25
  if (props.children) {
7
26
  return <div>{props.children}</div>;
8
27
  }
9
28
 
10
29
  //fallback to props
11
30
  return (
12
- <div className="theme-sites mobile hidden">
31
+ <div className="theme-sites">
13
32
  <div className="logos">
14
- <Grid columns={5}>
15
- {props.sites &&
16
- props.sites.map((site, index) => (
17
- <Grid.Column className="logo" key={index}>
18
- <a href={site.link}>
19
- <Image src={site.src} alt={site.alt}></Image>
20
- </a>
21
- </Grid.Column>
22
- ))}
33
+ <Grid columns={5} stackable>
34
+ {getLogoColumns(props.sites)}
23
35
  </Grid>
24
36
  </div>
25
37
  </div>
@@ -11,51 +11,55 @@ const SubFooter = (props) => {
11
11
  return (
12
12
  <div className={'subfooter'}>
13
13
  <Grid>
14
- <Grid.Column mobile={12} tablet={5} computer={6}>
15
- <div className="item">
16
- <p className="header text-center logo-header">
17
- {props.logosHeader}
18
- </p>
14
+ {props.managedBy &&
15
+ props.managedBy.map((manager, index) => (
16
+ <Grid.Column
17
+ mobile={manager.columnSize.mobile}
18
+ tablet={manager.columnSize.tablet}
19
+ computer={manager.columnSize.computer}
20
+ key={index}
21
+ className="mobile hidden"
22
+ >
23
+ <div className="item">
24
+ <div className={manager.className}>
25
+ <a href={manager.link}>
26
+ <Image src={manager.src} alt={manager.alt}></Image>
27
+ </a>
28
+ </div>
29
+ </div>
30
+ </Grid.Column>
31
+ ))}
19
32
 
20
- <Grid>
21
- {props.managedBy &&
22
- props.managedBy.map((manager, index) => (
23
- <Grid.Column
24
- mobile={manager.columnSize.mobile}
25
- tablet={manager.columnSize.tablet}
26
- computer={manager.columnSize.computer}
27
- key={index}
28
- >
29
- <div className={manager.className}>
30
- <a href={manager.link}>
31
- <Image src={manager.src} alt={manager.alt}></Image>
32
- </a>
33
- </div>
34
- </Grid.Column>
35
- ))}
36
- </Grid>
37
- </div>
38
- </Grid.Column>
39
- <Grid.Column
40
- mobile={6}
41
- tablet={2}
42
- computer={2}
43
- className="mobile hidden"
44
- ></Grid.Column>
45
- <Grid.Column mobile={12} tablet={5} computer={4}>
33
+ <Grid.Column mobile={12} tablet={4} computer={4}>
46
34
  <div className="item">
47
- <Footer.Contact
48
- contacts={props.contacts}
49
- header={props.contactHeader}
50
- address={props.address}
51
- />
52
- <Footer.Social social={props.social} />
35
+ <Footer.Contact contacts={props.contacts} />
53
36
  </div>
54
37
  </Grid.Column>
55
38
  </Grid>
39
+
56
40
  <Grid.Row>
57
- <Footer.Actions actions={props.actions} />
41
+ <Footer.Social social={props.social} />
58
42
  </Grid.Row>
43
+
44
+ <Grid className="mobile only">
45
+ {props.managedBy &&
46
+ props.managedBy.map((manager, index) => (
47
+ <Grid.Column
48
+ mobile={manager.columnSize.mobile}
49
+ tablet={manager.columnSize.tablet}
50
+ computer={manager.columnSize.computer}
51
+ key={index}
52
+ >
53
+ <div className="item">
54
+ <div className={manager.className}>
55
+ <a href={manager.link}>
56
+ <Image src={manager.src} alt={manager.alt}></Image>
57
+ </a>
58
+ </div>
59
+ </div>
60
+ </Grid.Column>
61
+ ))}
62
+ </Grid>
59
63
  </div>
60
64
  );
61
65
  };