@ecl/site-header 5.0.0-RC1

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