@eeacms/volto-eea-design-system 1.0.7 → 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 +60 -1
- package/package.json +1 -1
- package/src/semantic.less +0 -4
- package/src/ui/Accordion/Accordion.stories.js +52 -123
- package/src/ui/Card/Card.stories.jsx +153 -11
- package/src/ui/Footer/Contact.jsx +31 -6
- package/src/ui/Footer/Footer.stories.js +76 -25
- package/src/ui/Header/Header.jsx +9 -3
- package/src/ui/Header/HeaderMenuPopUp.js +22 -8
- package/src/ui/Header/HeaderSearchPopUp.js +2 -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/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/table.variables +1 -1
- package/theme/themes/eea/elements/image.overrides +6 -0
- package/theme/themes/eea/elements/image.variables +1 -0
- package/theme/themes/eea/extras/header.less +0 -2
- package/theme/themes/eea/globals/mixins.less +8 -0
- package/theme/themes/eea/globals/utilities.less +47 -0
- package/theme/themes/eea/modules/accordion.overrides +7 -0
- package/theme/themes/eea/views/card.overrides +14 -11
- 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
|
@@ -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
|
};
|
package/src/ui/Header/Header.jsx
CHANGED
|
@@ -138,6 +138,7 @@ const Main = ({
|
|
|
138
138
|
transparency,
|
|
139
139
|
inverted,
|
|
140
140
|
hideSearch,
|
|
141
|
+
isMultilingual,
|
|
141
142
|
}) => {
|
|
142
143
|
const history = useHistory();
|
|
143
144
|
const [activeItem, setActiveItem] = React.useState(pathname);
|
|
@@ -154,10 +155,15 @@ const Main = ({
|
|
|
154
155
|
setSearchIsActive(false);
|
|
155
156
|
setBurger('');
|
|
156
157
|
// remove active menu when we have no pathname which means we hit logo to go home
|
|
157
|
-
if
|
|
158
|
+
//remove the lang route in order to check if empty
|
|
159
|
+
//setActiveItem as pathname when pathname changed
|
|
160
|
+
if (
|
|
161
|
+
!pathname ||
|
|
162
|
+
(isMultilingual === true && !pathname?.split('/')?.slice(2)?.join('/'))
|
|
163
|
+
) {
|
|
158
164
|
setActiveItem('');
|
|
159
|
-
}
|
|
160
|
-
}, [pathname]);
|
|
165
|
+
} else setActiveItem(pathname);
|
|
166
|
+
}, [isMultilingual, pathname]);
|
|
161
167
|
|
|
162
168
|
React.useEffect(() => {
|
|
163
169
|
if (searchIsActive) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
2
|
import { Transition } from 'semantic-ui-react';
|
|
3
3
|
import { Container, Grid, List, Icon, Accordion } from 'semantic-ui-react';
|
|
4
4
|
|
|
@@ -244,17 +244,31 @@ const SecondLevelContent = ({ element, topics = false, renderMenuItem }) => {
|
|
|
244
244
|
};
|
|
245
245
|
|
|
246
246
|
const NestedAccordion = ({ menuItems, renderMenuItem, pathName }) => {
|
|
247
|
-
|
|
247
|
+
const [activeIndex, setActiveIndex] = useState(-1);
|
|
248
|
+
|
|
249
|
+
useEffect(() => {
|
|
250
|
+
let index = 0;
|
|
251
|
+
menuItems.forEach((menuItem) => {
|
|
252
|
+
if (pathName.includes(menuItem.url)) setActiveIndex(index);
|
|
253
|
+
++index;
|
|
254
|
+
});
|
|
255
|
+
}, [menuItems, pathName]);
|
|
256
|
+
|
|
248
257
|
const rootPanels = [];
|
|
249
258
|
menuItems.forEach((element, index) => {
|
|
250
259
|
let x = {};
|
|
251
260
|
x.key = index;
|
|
252
|
-
|
|
253
|
-
if (pathName.indexOf(element.url) !== -1) {
|
|
254
|
-
defaultIndex = index;
|
|
255
|
-
}
|
|
256
261
|
x.title = (
|
|
257
|
-
<Accordion.Title
|
|
262
|
+
<Accordion.Title
|
|
263
|
+
key={`title-${index}`}
|
|
264
|
+
index={index}
|
|
265
|
+
as="button"
|
|
266
|
+
onClick={() => {
|
|
267
|
+
if (activeIndex === index) {
|
|
268
|
+
setActiveIndex(-1);
|
|
269
|
+
} else setActiveIndex(index);
|
|
270
|
+
}}
|
|
271
|
+
>
|
|
258
272
|
{element.title}
|
|
259
273
|
<Icon className="ri-arrow-down-s-line" size="small" />
|
|
260
274
|
</Accordion.Title>
|
|
@@ -289,7 +303,7 @@ const NestedAccordion = ({ menuItems, renderMenuItem, pathName }) => {
|
|
|
289
303
|
rootPanels.push(x);
|
|
290
304
|
});
|
|
291
305
|
|
|
292
|
-
return <Accordion
|
|
306
|
+
return <Accordion activeIndex={activeIndex} panels={rootPanels} />;
|
|
293
307
|
};
|
|
294
308
|
|
|
295
309
|
function HeaderMenuPopUp({
|
|
@@ -30,6 +30,7 @@ function HeaderSearchPopUp({
|
|
|
30
30
|
const {
|
|
31
31
|
path = '',
|
|
32
32
|
buttonTitle,
|
|
33
|
+
buttonUrl,
|
|
33
34
|
description,
|
|
34
35
|
placeholder = 'Search',
|
|
35
36
|
searchSuggestions,
|
|
@@ -115,7 +116,7 @@ function HeaderSearchPopUp({
|
|
|
115
116
|
<Container>
|
|
116
117
|
<div>{description}</div>
|
|
117
118
|
<a
|
|
118
|
-
href={defaultView[0].path}
|
|
119
|
+
href={buttonUrl || defaultView[0].path}
|
|
119
120
|
className="ui button white inverted"
|
|
120
121
|
title="Advanced search"
|
|
121
122
|
>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import cx from 'classnames';
|
|
3
|
+
|
|
4
|
+
function Video({ children, align }) {
|
|
5
|
+
return <div className={cx('block video align', align)}>{children}</div>;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
Video.Body = ({ children, align }) => (
|
|
9
|
+
<div className={cx('video-inner', { 'full-width': align === 'full' })}>
|
|
10
|
+
{children}
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
Video.Embed = ({
|
|
15
|
+
children,
|
|
16
|
+
url,
|
|
17
|
+
loop,
|
|
18
|
+
autoPlay,
|
|
19
|
+
align,
|
|
20
|
+
placeholder_image,
|
|
21
|
+
required_caption,
|
|
22
|
+
}) => {
|
|
23
|
+
return (
|
|
24
|
+
<video
|
|
25
|
+
src={url}
|
|
26
|
+
controls={!autoPlay}
|
|
27
|
+
autoPlay={autoPlay}
|
|
28
|
+
muted={autoPlay}
|
|
29
|
+
loop={loop}
|
|
30
|
+
poster={placeholder_image}
|
|
31
|
+
type="video/mp4"
|
|
32
|
+
>
|
|
33
|
+
<track kind="captions" {...required_caption} />
|
|
34
|
+
{children}
|
|
35
|
+
</video>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
Video.Track = ({ tracks }) =>
|
|
40
|
+
tracks.map((track, index) => {
|
|
41
|
+
return <track {...track} />;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export default Video;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Container } from 'semantic-ui-react';
|
|
3
|
+
import Video from './Video';
|
|
4
|
+
import englishTrack from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/video/demo-track-en.vtt';
|
|
5
|
+
import romanianTrack from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/video/demo-track-ro.vtt';
|
|
6
|
+
import greekTrack from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/video/demo-track-el.vtt';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title: 'Components/Video',
|
|
10
|
+
component: Video,
|
|
11
|
+
argTypes: {
|
|
12
|
+
align: {
|
|
13
|
+
options: ['center', 'right', 'left'],
|
|
14
|
+
control: {
|
|
15
|
+
type: 'select',
|
|
16
|
+
labels: {
|
|
17
|
+
'': 'default',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultValue: 'center',
|
|
21
|
+
table: {
|
|
22
|
+
defaultValue: { summary: 'center' },
|
|
23
|
+
type: { summary: 'string' },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const Template = (args) => (
|
|
30
|
+
<Container>
|
|
31
|
+
<Video align={args.align}>
|
|
32
|
+
<Video.Body align={args.align}>
|
|
33
|
+
<Video.Embed {...args}>
|
|
34
|
+
<Video.Track tracks={args.tracks} />
|
|
35
|
+
</Video.Embed>
|
|
36
|
+
</Video.Body>
|
|
37
|
+
</Video>
|
|
38
|
+
</Container>
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
export const Default = Template.bind({});
|
|
42
|
+
Default.args = {
|
|
43
|
+
url: 'https://cmshare.eea.europa.eu/s/Xw7kH2TJGCibHJf/download',
|
|
44
|
+
autoPlay: false,
|
|
45
|
+
loop: false,
|
|
46
|
+
align: 'center',
|
|
47
|
+
placeholder_image: '',
|
|
48
|
+
required_caption: { src: englishTrack, srclang: 'en', label: 'English' },
|
|
49
|
+
tracks: [
|
|
50
|
+
{ src: romanianTrack, kind: 'captions', srclang: 'ro', label: 'Română' },
|
|
51
|
+
{ src: greekTrack, kind: 'captions', srclang: 'el', label: 'Ελλήνικά' },
|
|
52
|
+
],
|
|
53
|
+
};
|
package/src/ui/index.js
CHANGED
|
@@ -22,8 +22,6 @@ export Timeline from './Timeline/Timeline';
|
|
|
22
22
|
|
|
23
23
|
export Testimonial from './Quote/Testimonial/Testimonial';
|
|
24
24
|
|
|
25
|
-
export AvatarGrid from './Card/AvatarGrid/AvatarGrid';
|
|
26
|
-
|
|
27
25
|
export KeyContent from './KeyContent/KeyContent';
|
|
28
26
|
|
|
29
27
|
export DownloadLabeledIcon from './DownloadLabeledIcon/DownloadLabeledIcon';
|
|
@@ -39,3 +37,5 @@ export RelatedContent from './Card/RelatedContent/RelatedContent';
|
|
|
39
37
|
export Hero from './Hero/Hero';
|
|
40
38
|
|
|
41
39
|
export Copyright from './Copyright/Copyright';
|
|
40
|
+
|
|
41
|
+
export Video from './Video/Video';
|
package/theme/theme.config
CHANGED
|
@@ -88,10 +88,8 @@
|
|
|
88
88
|
@tagList : 'eea';
|
|
89
89
|
@inpageNavigation : 'eea';
|
|
90
90
|
@contextNavigation : 'eea';
|
|
91
|
-
@avatar : 'eea';
|
|
92
91
|
@divider : 'eea';
|
|
93
92
|
@testimonial : 'eea';
|
|
94
|
-
@avatarGrid : 'eea';
|
|
95
93
|
@keyContent : 'eea';
|
|
96
94
|
@publicationCard : 'eea';
|
|
97
95
|
@contentBox : 'eea';
|
|
@@ -135,5 +133,4 @@
|
|
|
135
133
|
@import (optional) "@{siteFolder}/@{addon}/@{addontype}s/@{addonelement}.overrides";
|
|
136
134
|
}
|
|
137
135
|
|
|
138
|
-
|
|
139
136
|
/* End Config */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
WEBVTT
|
|
2
|
+
|
|
3
|
+
00:00:00.000 --> 00:00:11.999 line:80%
|
|
4
|
+
[ΜΟΥΣΙΚΗ]
|
|
5
|
+
|
|
6
|
+
00:00:12.000 --> 00:01:35.999 line:80%
|
|
7
|
+
Αυτά τα components χρησιμοποιούνται ως παράδειγμα χρήσης.
|
|
8
|
+
Αυτοί οι υπότιτλοι έχουν σκοπό την επίδειξη της λειτουργικότητας.
|
|
9
|
+
|
|
10
|
+
00:01:36.000 --> 00:01:47.999 line:80%
|
|
11
|
+
[ΜΟΥΣΙΚΗ]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
WEBVTT
|
|
2
|
+
|
|
3
|
+
00:00:00.000 --> 00:00:11.999 line:80%
|
|
4
|
+
[MUSIC]
|
|
5
|
+
|
|
6
|
+
00:00:12.000 --> 00:01:35.999 line:80%
|
|
7
|
+
These components are used for demo purposes.
|
|
8
|
+
This track is an example to demonstrate the functionality.
|
|
9
|
+
|
|
10
|
+
00:01:36.000 --> 00:01:47.999 line:80%
|
|
11
|
+
[MUSIC]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
WEBVTT
|
|
2
|
+
|
|
3
|
+
00:00:00.000 --> 00:00:11.999 line:80%
|
|
4
|
+
[MUZICĂ]
|
|
5
|
+
|
|
6
|
+
00:00:12.000 --> 00:01:35.999 line:80%
|
|
7
|
+
Aceste componente sunt utilizate în scopuri demonstrative.
|
|
8
|
+
Această piesă este un exemplu pentru a demonstra funcționalitatea.
|
|
9
|
+
|
|
10
|
+
00:01:36.000 --> 00:01:47.999 line:80%
|
|
11
|
+
[MUZICĂ]
|
|
@@ -88,6 +88,12 @@
|
|
|
88
88
|
position: relative;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
// https://www.eea.europa.eu/en/newsroom/photo-competitions
|
|
92
|
+
// ensure link focus goes over the image
|
|
93
|
+
.image-block-container > a {
|
|
94
|
+
display: @imageBlockContainerLinkDisplay;
|
|
95
|
+
}
|
|
96
|
+
|
|
91
97
|
/* if the image is smaller than the content area the copyright
|
|
92
98
|
isn't as big as the image unless the image is inline-block
|
|
93
99
|
*/
|
|
@@ -825,8 +825,6 @@
|
|
|
825
825
|
padding: @megaMenuAccordionTitlePadding;
|
|
826
826
|
border-bottom: @megaMenuAccordionTitleBorderBottom;
|
|
827
827
|
color: @megaMenuTextColor;
|
|
828
|
-
color: @megaMenuTextColor;
|
|
829
|
-
font-size: @megaMenuAccordionTitleFontSize;
|
|
830
828
|
font-size: @megaMenuAccordionTitleFontSize;
|
|
831
829
|
font-weight: @megaMenuAccordionTitleFontWeight;
|
|
832
830
|
|
|
@@ -14,3 +14,11 @@
|
|
|
14
14
|
.image-overlay-gradient() {
|
|
15
15
|
.gradientMix(linear; rgba(46, 62, 76, 0.65) 38.6%, rgba(46, 62, 76, 0.169) 59.52%, rgba(69, 95, 106, 0) 79.64%; 13.39deg)
|
|
16
16
|
}
|
|
17
|
+
|
|
18
|
+
.useTitleMaxLines(@value: 2) {
|
|
19
|
+
display: -webkit-box !important;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
|
|
22
|
+
-webkit-box-orient: vertical;
|
|
23
|
+
-webkit-line-clamp: var(--title-max-lines, @value);
|
|
24
|
+
}
|
|
@@ -37,15 +37,19 @@ h1, h2, h3, h4, h5, h6, p, span, .header {
|
|
|
37
37
|
.text-left,
|
|
38
38
|
.has--text--left,
|
|
39
39
|
.has--textAlign--left { text-align: left !important; }
|
|
40
|
+
|
|
40
41
|
.text-center,
|
|
41
42
|
.has--text--center,
|
|
42
43
|
.has--textAlign--center { text-align: center !important;}
|
|
44
|
+
|
|
43
45
|
.text-right,
|
|
44
46
|
.has--text--right,
|
|
45
47
|
.has--textAlign--right { text-align: right !important; }
|
|
48
|
+
|
|
46
49
|
.text-justify,
|
|
47
50
|
.has--text--justify,
|
|
48
51
|
.has--textAlign--justify { text-align: justify !important; }
|
|
52
|
+
|
|
49
53
|
.bold { font-weight: bold !important; }
|
|
50
54
|
|
|
51
55
|
.has--text--left {
|
|
@@ -57,6 +61,49 @@ h1, h2, h3, h4, h5, h6, p, span, .header {
|
|
|
57
61
|
--justify-content: space-evenly;
|
|
58
62
|
}
|
|
59
63
|
|
|
64
|
+
/*******************************
|
|
65
|
+
Image properties utilities
|
|
66
|
+
*******************************/
|
|
67
|
+
|
|
68
|
+
// image object fit
|
|
69
|
+
.has--object-fit--contain {
|
|
70
|
+
--image-object-fit: contain;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.has--object-fit--cover {
|
|
74
|
+
--image-object-fit: cover;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.has--object-fit--fill {
|
|
78
|
+
--image-object-fit: fill;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.has--object-fit--scale-down {
|
|
82
|
+
--image-object-fit: scale-down;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// image object position
|
|
86
|
+
.has--object-position--top {
|
|
87
|
+
--image-object-position: top;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.has--object-position--bottom {
|
|
91
|
+
--image-object-position: bottom;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.has--object-position--left {
|
|
95
|
+
--image-object-position: left;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.has--object-position--right {
|
|
99
|
+
--image-object-position: right;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.has--object-position--center {
|
|
103
|
+
--image-object-position: center;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
60
107
|
// background position utilities
|
|
61
108
|
.has--bg--top {
|
|
62
109
|
background-position: top !important;
|
|
@@ -158,3 +158,10 @@
|
|
|
158
158
|
.ui.accordion.tertiary .title:not(.active):focus-visible i {
|
|
159
159
|
color: @tertiaryColorCSSVar;
|
|
160
160
|
}
|
|
161
|
+
|
|
162
|
+
@media only screen and (max-width: @largestMobileScreen) {
|
|
163
|
+
.accordion-block h1 * { font-size: @mobileH1; }
|
|
164
|
+
.accordion-block h2 * { font-size: @mobileH2; }
|
|
165
|
+
.accordion-block h3 * { font-size: @mobileH3; }
|
|
166
|
+
.accordion-block h4 * { font-size: @mobileH4; }
|
|
167
|
+
}
|
|
@@ -32,11 +32,14 @@
|
|
|
32
32
|
img {
|
|
33
33
|
width: var(--card-image-width, @imageWidth);
|
|
34
34
|
height: var(--card-image-width, @imageHeight);
|
|
35
|
-
object-fit: @imageObjectFit;
|
|
36
|
-
object-position: @imageObjectPosition;
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
|
|
38
|
+
.ui.card img, img.ui.image {
|
|
39
|
+
object-fit: var(--image-object-fit, @imageObjectFit);
|
|
40
|
+
object-position: var(--image-object-position, @imageObjectPosition);
|
|
41
|
+
}
|
|
42
|
+
|
|
40
43
|
|
|
41
44
|
.ui.cards > .card > .content > *:not(:last-child),
|
|
42
45
|
.ui.card > .content > *:not(:last-child) {
|
|
@@ -150,6 +153,8 @@
|
|
|
150
153
|
width: @roundedImageWidth;
|
|
151
154
|
height: @roundedImageHeight;
|
|
152
155
|
border-radius: @roundedImageBorderRadius !important;
|
|
156
|
+
object-fit: var(--image-object-fit, @imageObjectFit);
|
|
157
|
+
object-position: var(--image-object-position, @imageObjectPosition);
|
|
153
158
|
}
|
|
154
159
|
|
|
155
160
|
.content {
|
|
@@ -434,24 +439,22 @@
|
|
|
434
439
|
padding-left: @tabletTeaserCardPaddingInline;
|
|
435
440
|
padding-right: @tabletTeaserCardPaddingInline;
|
|
436
441
|
}
|
|
442
|
+
|
|
437
443
|
.grid-block-teaser .ui.card {
|
|
438
444
|
min-width: @tabletTeaserCardMinWidth;
|
|
439
445
|
}
|
|
440
446
|
}
|
|
441
447
|
|
|
442
|
-
// Added from listing-cards.less
|
|
443
|
-
.grid-block-teaser .ui.card.u-card .header {
|
|
444
|
-
display: -webkit-box !important;
|
|
445
|
-
overflow: hidden;
|
|
446
|
-
-webkit-box-orient: vertical;
|
|
447
|
-
-webkit-line-clamp: var(--title-max-lines, 3);
|
|
448
|
-
}
|
|
449
|
-
|
|
450
448
|
// Spacing adjustment to display outline with overflow hidden
|
|
451
449
|
.ui.card .header {
|
|
452
450
|
padding: @headerPadding;
|
|
453
451
|
}
|
|
452
|
+
|
|
454
453
|
.ui.card .header > a {
|
|
455
|
-
|
|
454
|
+
.useTitleMaxLines();
|
|
456
455
|
}
|
|
457
456
|
|
|
457
|
+
// Meta align fix
|
|
458
|
+
.ui.card.u-card .meta:after {
|
|
459
|
+
content: none;
|
|
460
|
+
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Grid, Card, Image } from 'semantic-ui-react';
|
|
3
|
-
|
|
4
|
-
function AvatarGrid({ children, ...rest }) {
|
|
5
|
-
return (
|
|
6
|
-
<div className="eea avatar-grid" {...rest}>
|
|
7
|
-
<div className="wrapper">{children}</div>
|
|
8
|
-
</div>
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
AvatarGrid.Content = ({ children }) => {
|
|
13
|
-
return <div className="content">{children}</div>;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
AvatarGrid.Group = ({ children, ...rest }) => {
|
|
17
|
-
let avatars = rest.avatars;
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<div className="avatar group">
|
|
21
|
-
<Grid>
|
|
22
|
-
{avatars.map((avatar, index) => (
|
|
23
|
-
<Grid.Column key={index} mobile={12} tablet={4} computer={4}>
|
|
24
|
-
<div className="avatar-wrapper">
|
|
25
|
-
<Card
|
|
26
|
-
className={`eea rounded ${
|
|
27
|
-
rest.variant === 'default' ? '' : rest.variant
|
|
28
|
-
} ${rest.inverted ? 'inverted' : ''}`}
|
|
29
|
-
fluid={rest.fluid}
|
|
30
|
-
>
|
|
31
|
-
{rest.hasLink ? (
|
|
32
|
-
<Image
|
|
33
|
-
as="a"
|
|
34
|
-
href={rest.href}
|
|
35
|
-
src={avatar.src}
|
|
36
|
-
wrapped
|
|
37
|
-
ui={false}
|
|
38
|
-
alt="card image"
|
|
39
|
-
/>
|
|
40
|
-
) : (
|
|
41
|
-
<Image src={avatar.src} wrapped ui={false} alt="card image" />
|
|
42
|
-
)}
|
|
43
|
-
<Card.Content>
|
|
44
|
-
{rest.hasLink ? (
|
|
45
|
-
<Card.Header>
|
|
46
|
-
<a href={rest.href}>{avatar.title}</a>
|
|
47
|
-
</Card.Header>
|
|
48
|
-
) : (
|
|
49
|
-
<Card.Header>{avatar.title}</Card.Header>
|
|
50
|
-
)}
|
|
51
|
-
<Card.Description>{avatar.description}</Card.Description>
|
|
52
|
-
</Card.Content>
|
|
53
|
-
</Card>
|
|
54
|
-
</div>
|
|
55
|
-
</Grid.Column>
|
|
56
|
-
))}
|
|
57
|
-
</Grid>
|
|
58
|
-
</div>
|
|
59
|
-
);
|
|
60
|
-
};
|
|
61
|
-
export default AvatarGrid;
|