@ecl/site-header 5.0.0-alpha.1

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.
@@ -0,0 +1,315 @@
1
+ @use 'sass:map';
2
+ @use '@ecl/grid/mixins/breakpoints';
3
+
4
+ // Exposed variables
5
+ $theme: null !default;
6
+ $language-switcher: null !default;
7
+ $language-list: null !default;
8
+
9
+ .ecl-site-header__language {
10
+ margin: 0;
11
+ position: static;
12
+ }
13
+
14
+ @mixin with-scrollbar {
15
+ overflow-y: auto;
16
+ scrollbar-color: var(--c-n) rgba(0, 0, 0, 0);
17
+ scrollbar-width: thin;
18
+ }
19
+
20
+ @mixin arrow-up {
21
+ background-color: map.get($theme, 'color', 'white');
22
+ border: map.get($language-switcher, 'arrow-border');
23
+ box-shadow: map.get($language-switcher, 'arrow-shadow');
24
+ clip-path: polygon(
25
+ -#{map.get($language-switcher, 'shadow-size')} -#{map.get(
26
+ $language-switcher,
27
+ 'shadow-size'
28
+ )},
29
+ calc(100% + #{map.get($language-switcher, 'shadow-size')}) -#{map.get(
30
+ $language-switcher,
31
+ 'shadow-size'
32
+ )},
33
+ calc(100% + #{map.get($language-switcher, 'shadow-size')})
34
+ calc(100% + #{map.get($language-switcher, 'shadow-size')})
35
+ );
36
+ content: '';
37
+ height: map.get($language-switcher, 'arrow-size');
38
+ left: 50%;
39
+ margin-left: calc(-#{map.get($language-switcher, 'arrow-size')} / 2);
40
+ position: absolute;
41
+ top: map.get($language-switcher, 'arrow-top');
42
+ transform: translate(0%, -50%) rotate(-45deg);
43
+ width: map.get($language-switcher, 'arrow-size');
44
+ }
45
+
46
+ .ecl-site-header__language-container {
47
+ background-color: map.get($theme, 'color', 'white');
48
+ box-shadow: map.get($language-switcher, 'shadow');
49
+ color: map.get($language-list, 'color');
50
+ font: var(--f-m);
51
+ left: 0;
52
+ height: auto;
53
+ margin-top: var(--s-l);
54
+ padding-block-start: map.get(
55
+ $language-list,
56
+ 'container-padding-mobile',
57
+ 'block-start'
58
+ );
59
+ padding-block-end: map.get(
60
+ $language-list,
61
+ 'container-padding-mobile',
62
+ 'block-end'
63
+ );
64
+ padding-inline-start: map.get(
65
+ $language-list,
66
+ 'container-padding-mobile',
67
+ 'inline-start'
68
+ );
69
+ padding-inline-end: calc(
70
+ #{map.get($language-list, 'container-padding-mobile', 'inline-end')} +
71
+ #{map.get($language-list, 'item-active-border-width')}
72
+ );
73
+ position: absolute;
74
+ right: 0;
75
+ width: auto;
76
+ z-index: map.get($theme, 'z-index', 'overlay');
77
+
78
+ // arrow with border shadow
79
+ &::before {
80
+ @include arrow-up;
81
+ }
82
+ }
83
+
84
+ .ecl-site-header__language-container--push-right::before,
85
+ .ecl-site-header__language-container--full::before {
86
+ left: auto;
87
+ right: var(--ecl-language-arrow-position);
88
+ }
89
+
90
+ .ecl-site-header__language-container--push-left::before {
91
+ right: auto;
92
+ left: var(--ecl-language-arrow-position);
93
+ }
94
+
95
+ .ecl-site-header__language-header {
96
+ align-items: center;
97
+ display: flex;
98
+ justify-content: space-between;
99
+ padding-inline-start: calc(
100
+ #{map.get($language-list, 'title-padding-start')} +
101
+ #{map.get($language-list, 'item-active-border-width')}
102
+ );
103
+ }
104
+
105
+ .ecl-site-header__language-title {
106
+ font: map.get($language-list, 'header-font-mobile');
107
+ }
108
+
109
+ .ecl-site-header__language-close {
110
+ position: absolute;
111
+ right: map.get($language-switcher, 'close-right');
112
+ top: map.get($language-switcher, 'close-top');
113
+
114
+ .ecl-site-header--rtl & {
115
+ left: map.get($language-switcher, 'close-right');
116
+ right: auto;
117
+ }
118
+ }
119
+
120
+ .ecl-site-header__language-content {
121
+ display: flex;
122
+ flex-direction: column;
123
+
124
+ @include with-scrollbar;
125
+ }
126
+
127
+ .ecl-site-header__language-category-title {
128
+ font: map.get($language-list, 'category-title-font');
129
+ font-weight: map.get($language-list, 'category-title-font-weight');
130
+ padding-block-start: map.get(
131
+ $language-list,
132
+ 'category-title-padding',
133
+ 'block-start'
134
+ );
135
+ padding-block-end: map.get(
136
+ $language-list,
137
+ 'category-title-padding',
138
+ 'block-end'
139
+ );
140
+ padding-inline-start: calc(
141
+ #{map.get($language-list, 'category-title-padding', 'inline-start')} +
142
+ #{map.get($language-list, 'item-active-border-width')}
143
+ );
144
+ padding-inline-end: map.get(
145
+ $language-list,
146
+ 'category-title-padding',
147
+ 'inline-end'
148
+ );
149
+ }
150
+
151
+ .ecl-site-header__language-category:nth-child(2) {
152
+ border-top: map.get($language-list, 'category-separator');
153
+ margin-top: map.get($language-list, 'category-stack-margin');
154
+ }
155
+
156
+ .ecl-site-header__language-list {
157
+ list-style: none;
158
+ margin: 0;
159
+ padding: 0;
160
+ }
161
+
162
+ .ecl-site-header__language-link {
163
+ align-items: baseline;
164
+ border-inline-start: map.get($language-list, 'item-active-border-width') solid
165
+ transparent;
166
+ display: flex;
167
+ padding-block-start: map.get($language-list, 'item-padding', 'block-start');
168
+ padding-block-end: map.get($language-list, 'item-padding', 'block-end');
169
+ padding-inline-start: map.get($language-list, 'item-padding', 'inline-start');
170
+ padding-inline-end: map.get($language-list, 'item-padding', 'inline-end');
171
+
172
+ &:focus-visible {
173
+ outline-offset: -2px;
174
+ }
175
+
176
+ &:hover {
177
+ text-decoration: none;
178
+ }
179
+ }
180
+
181
+ .ecl-site-header__language-link-code {
182
+ color: map.get($language-list, 'code-color');
183
+ font: var(--f-m);
184
+ font-weight: map.get($language-list, 'code-font-weight');
185
+ display: inline-block;
186
+ margin-inline-end: var(--s-2xs);
187
+ text-transform: uppercase;
188
+ width: map.get($language-list, 'code-width');
189
+ }
190
+
191
+ .ecl-site-header__language-link:hover .ecl-site-header__language-link-label,
192
+ .ecl-site-header__language-link:focus-visible
193
+ .ecl-site-header__language-link-label {
194
+ text-decoration: underline;
195
+ }
196
+
197
+ .ecl-site-header__language-link--active {
198
+ background-color: map.get($language-list, 'item-active-background');
199
+ border-inline-start-color: map.get(
200
+ $language-list,
201
+ 'item-active-border-color'
202
+ );
203
+ color: map.get($language-list, 'item-active-color');
204
+
205
+ &:visited {
206
+ color: map.get($language-list, 'item-active-color');
207
+ }
208
+
209
+ .ecl-site-header__language-link-code {
210
+ font-weight: map.get($language-list, 'code-active-font-weight');
211
+ }
212
+ }
213
+
214
+ .ecl-site-header__language-link:hover.ecl-site-header__language-link--active {
215
+ color: map.get($language-list, 'item-active-color');
216
+
217
+ .ecl-site-header__language-link-label {
218
+ text-decoration: none;
219
+ }
220
+ }
221
+
222
+ @include breakpoints.up('m') {
223
+ .ecl-site-header__language {
224
+ position: relative;
225
+ }
226
+
227
+ .ecl-site-header__language-container {
228
+ left: 50%;
229
+ padding-block-start: map.get(
230
+ $language-list,
231
+ 'container-padding-desktop',
232
+ 'block-start'
233
+ );
234
+ padding-block-end: map.get(
235
+ $language-list,
236
+ 'container-padding-desktop',
237
+ 'block-end'
238
+ );
239
+ padding-inline-start: map.get(
240
+ $language-list,
241
+ 'container-padding-desktop',
242
+ 'inline-start'
243
+ );
244
+ padding-inline-end: calc(
245
+ #{map.get($language-list, 'container-padding-desktop', 'inline-end')} +
246
+ #{map.get($language-list, 'item-active-border-width')}
247
+ );
248
+ right: auto;
249
+ transform: translateX(-50%);
250
+ }
251
+
252
+ .ecl-site-header__language-title {
253
+ font: map.get($language-list, 'header-font-desktop');
254
+ }
255
+
256
+ // Horizontal position
257
+ .ecl-site-header__language-container--push-right {
258
+ left: auto;
259
+ right: 0;
260
+ transform: none;
261
+ }
262
+
263
+ .ecl-site-header__language-container--push-left {
264
+ left: 0;
265
+ right: auto;
266
+ transform: none;
267
+ }
268
+
269
+ // Horizontal sections
270
+ .ecl-site-header__language-content:not(
271
+ .ecl-site-header__language-content--stack
272
+ ) {
273
+ flex-direction: row;
274
+ margin-top: map.get($language-list, 'content-margin-desktop');
275
+
276
+ .ecl-site-header__language-category {
277
+ margin-top: 0;
278
+ }
279
+
280
+ .ecl-site-header__language-category:nth-child(2) {
281
+ border-top: none;
282
+ border-inline-start: map.get($language-list, 'category-separator');
283
+ margin-inline-start: map.get($language-list, 'column-spacing-before');
284
+ padding-inline-start: map.get($language-list, 'column-spacing-after');
285
+ }
286
+
287
+ .ecl-site-header__language-category-title {
288
+ padding-top: 0;
289
+ }
290
+ }
291
+
292
+ .ecl-site-header--rtl
293
+ .ecl-site-header__language-content:not(
294
+ .ecl-site-header__language-content--stack
295
+ ) {
296
+ overflow-x: hidden;
297
+ }
298
+
299
+ // Columns display
300
+ .ecl-site-header__language-list {
301
+ column-gap: 0;
302
+ }
303
+
304
+ .ecl-site-header__language-category--3-col .ecl-site-header__language-list {
305
+ column-count: 3;
306
+ }
307
+
308
+ .ecl-site-header__language-category--2-col .ecl-site-header__language-list {
309
+ column-count: 2;
310
+ }
311
+
312
+ .ecl-site-header__language-link {
313
+ width: calc(#{map.get($language-list, 'item-width')} - (2 * var(--s-s)));
314
+ }
315
+ }
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@ecl/site-header",
3
+ "author": "European Commission",
4
+ "license": "EUPL-1.2",
5
+ "version": "5.0.0-alpha.1",
6
+ "description": "ECL Site Header",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "main": "site-header.js",
11
+ "module": "site-header.js",
12
+ "dependencies": {
13
+ "@ecl/button": "5.0.0-alpha.1",
14
+ "@ecl/dom-utils": "5.0.0-alpha.1",
15
+ "@ecl/grid": "5.0.0-alpha.1",
16
+ "@ecl/icon": "5.0.0-alpha.1",
17
+ "@ecl/link": "5.0.0-alpha.1",
18
+ "@ecl/menu": "5.0.0-alpha.1",
19
+ "@ecl/notification": "5.0.0-alpha.1",
20
+ "@ecl/picture": "5.0.0-alpha.1",
21
+ "@ecl/search-form": "5.0.0-alpha.1",
22
+ "focus-trap": "7.6.4"
23
+ },
24
+ "devDependencies": {
25
+ "@ecl/resources-ec-logo": "5.0.0-alpha.1",
26
+ "@ecl/resources-eu-logo": "5.0.0-alpha.1"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/ec-europa/europa-component-library.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/ec-europa/europa-component-library/issues"
34
+ },
35
+ "homepage": "https://github.com/ec-europa/europa-component-library",
36
+ "keywords": [
37
+ "ecl",
38
+ "europa-component-library",
39
+ "design-system",
40
+ "twig"
41
+ ],
42
+ "gitHead": "f800b6d2de209fcfe182aadca5f7e45ad497b23a"
43
+ }