@eeacms/volto-eea-design-system 1.18.3 → 1.20.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 (37) hide show
  1. package/CHANGELOG.md +82 -19
  2. package/RELEASE.md +14 -14
  3. package/package.json +3 -3
  4. package/src/ui/Card/Card.stories.jsx +104 -50
  5. package/src/ui/Card/Card.stories.test.jsx +196 -0
  6. package/src/ui/Footer/FooterSites.jsx +2 -2
  7. package/src/ui/Header/Header.stories.js +14 -10
  8. package/src/ui/Tab/Tab.stories.js +21 -5
  9. package/src/ui/Tab/Tab.stories.test.js +10 -0
  10. package/theme/themes/eea/collections/breadcrumb.overrides +4 -3
  11. package/theme/themes/eea/collections/menu.overrides +201 -15
  12. package/theme/themes/eea/collections/menu.variables +43 -28
  13. package/theme/themes/eea/collections/message.overrides +1 -1
  14. package/theme/themes/eea/collections/table.overrides +9 -15
  15. package/theme/themes/eea/elements/button.overrides +2 -2
  16. package/theme/themes/eea/elements/container.overrides +39 -34
  17. package/theme/themes/eea/elements/divider.overrides +13 -9
  18. package/theme/themes/eea/elements/image.overrides +5 -6
  19. package/theme/themes/eea/elements/label.overrides +16 -16
  20. package/theme/themes/eea/elements/list.overrides +3 -1
  21. package/theme/themes/eea/elements/segment.overrides +4 -4
  22. package/theme/themes/eea/extras/custom.overrides +43 -22
  23. package/theme/themes/eea/extras/header.variables +1 -1
  24. package/theme/themes/eea/globals/site.overrides +63 -35
  25. package/theme/themes/eea/globals/site.variables +2 -5
  26. package/theme/themes/eea/modules/accordion.overrides +36 -24
  27. package/theme/themes/eea/modules/accordion.variables +4 -4
  28. package/theme/themes/eea/modules/checkbox.overrides +2 -2
  29. package/theme/themes/eea/modules/modal.overrides +2 -2
  30. package/theme/themes/eea/modules/search.overrides +4 -0
  31. package/theme/themes/eea/modules/tab.overrides +6 -12
  32. package/theme/themes/eea/modules/tab.variables +2 -1
  33. package/theme/themes/eea/tokens/colors.less +2 -2
  34. package/theme/themes/eea/views/card.overrides +49 -35
  35. package/theme/themes/eea/views/card.variables +5 -0
  36. package/theme/themes/eea/views/item.overrides +15 -13
  37. package/theme/themes/eea/views/statistic.overrides +13 -3
@@ -1,14 +1,48 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
+ import '@testing-library/jest-dom/extend-expect';
3
4
  import {
4
5
  TeaserCardGrid,
5
6
  CarouselCards,
6
7
  FluidGrid,
7
8
  CardGrid,
9
+ ImageGrid,
8
10
  Default,
9
11
  } from './Card.stories';
10
12
 
11
13
  describe('TeaserCardGrid component', () => {
14
+ it('renders correctly', () => {
15
+ const { container } = render(<TeaserCardGrid {...TeaserCardGrid.args} />);
16
+
17
+ expect(container.querySelector('.image')).toBeInTheDocument();
18
+ expect(container.querySelector('.header')).toBeInTheDocument();
19
+ expect(container.querySelector('.description')).toBeInTheDocument();
20
+
21
+ expect(
22
+ container.querySelector(`.ui.card.u-card.${TeaserCardGrid.args.variant}`),
23
+ ).toBeInTheDocument();
24
+ expect(
25
+ container.querySelector(
26
+ `.ui.card.u-card.max-${TeaserCardGrid.args.maxLines}-lines`,
27
+ ),
28
+ ).toBeInTheDocument();
29
+ expect(
30
+ container.querySelector(
31
+ `.ui.card.u-card.title-max-${TeaserCardGrid.args.maxLines}-lines`,
32
+ ),
33
+ ).toBeInTheDocument();
34
+ expect(
35
+ container.querySelector(
36
+ `.ui.card.u-card.has--object-fit--${TeaserCardGrid.args.objectFit}`,
37
+ ),
38
+ ).toBeInTheDocument();
39
+ expect(
40
+ container.querySelector(
41
+ `.ui.card.u-card.has--object-position--${TeaserCardGrid.args.objectPosition}`,
42
+ ),
43
+ ).toBeInTheDocument();
44
+ });
45
+
12
46
  it('renders the teaser card grid with correct number of cards', () => {
13
47
  const { container } = render(<TeaserCardGrid {...TeaserCardGrid.args} />);
14
48
  const teaserCards = container.querySelectorAll('.column.grid-block-teaser');
@@ -26,6 +60,39 @@ describe('TeaserCardGrid component', () => {
26
60
  });
27
61
 
28
62
  describe('CarouselCards component', () => {
63
+ it('renders correctly', () => {
64
+ const { container } = render(<CarouselCards {...CarouselCards.args} />);
65
+
66
+ expect(container.querySelector('.image')).toBeInTheDocument();
67
+ expect(container.querySelector('.header')).toBeInTheDocument();
68
+ expect(container.querySelector('.meta')).toBeInTheDocument();
69
+ expect(container.querySelector('.description')).toBeInTheDocument();
70
+
71
+ expect(
72
+ container.querySelector(`.ui.card.u-card.${CarouselCards.args.variant}`),
73
+ ).toBeInTheDocument();
74
+ expect(
75
+ container.querySelector(
76
+ `.ui.card.u-card.max-${CarouselCards.args.maxLines}-lines`,
77
+ ),
78
+ ).toBeInTheDocument();
79
+ expect(
80
+ container.querySelector(
81
+ `.ui.card.u-card.title-max-${CarouselCards.args.maxLines}-lines`,
82
+ ),
83
+ ).toBeInTheDocument();
84
+ expect(
85
+ container.querySelector(
86
+ `.ui.card.u-card.has--object-fit--${CarouselCards.args.objectFit}`,
87
+ ),
88
+ ).toBeInTheDocument();
89
+ expect(
90
+ container.querySelector(
91
+ `.ui.card.u-card.has--object-position--${CarouselCards.args.objectPosition}`,
92
+ ),
93
+ ).toBeInTheDocument();
94
+ });
95
+
29
96
  it('renders the carousel with correct number of cards', () => {
30
97
  const { container } = render(<CarouselCards {...CarouselCards.args} />);
31
98
  const carouselCards = container.querySelectorAll(
@@ -47,6 +114,39 @@ describe('CarouselCards component', () => {
47
114
  });
48
115
 
49
116
  describe('FluidGrid component', () => {
117
+ it('renders correctly', () => {
118
+ const { container } = render(<FluidGrid {...FluidGrid.args} />);
119
+
120
+ expect(container.querySelector('.image')).toBeInTheDocument();
121
+ expect(container.querySelector('.header')).toBeInTheDocument();
122
+ expect(container.querySelector('.meta')).toBeInTheDocument();
123
+ expect(container.querySelector('.description')).toBeInTheDocument();
124
+
125
+ expect(
126
+ container.querySelector(`.ui.card.u-card.${FluidGrid.args.variant}`),
127
+ ).toBeInTheDocument();
128
+ expect(
129
+ container.querySelector(
130
+ `.ui.card.u-card.max-${FluidGrid.args.maxLines}-lines`,
131
+ ),
132
+ ).toBeInTheDocument();
133
+ expect(
134
+ container.querySelector(
135
+ `.ui.card.u-card.title-max-${FluidGrid.args.maxLines}-lines`,
136
+ ),
137
+ ).toBeInTheDocument();
138
+ expect(
139
+ container.querySelector(
140
+ `.ui.card.u-card.has--object-fit--${FluidGrid.args.objectFit}`,
141
+ ),
142
+ ).toBeInTheDocument();
143
+ expect(
144
+ container.querySelector(
145
+ `.ui.card.u-card.has--object-position--${FluidGrid.args.objectPosition}`,
146
+ ),
147
+ ).toBeInTheDocument();
148
+ });
149
+
50
150
  it('renders fluid grid with correct number of cards', () => {
51
151
  const { container } = render(<FluidGrid {...FluidGrid.args} />);
52
152
  const fluidGridCards = container.querySelectorAll(
@@ -58,6 +158,39 @@ describe('FluidGrid component', () => {
58
158
  });
59
159
 
60
160
  describe('CardGrid component', () => {
161
+ it('renders correctly', () => {
162
+ const { container } = render(<CardGrid {...CardGrid.args} />);
163
+
164
+ expect(container.querySelector('.image')).toBeInTheDocument();
165
+ expect(container.querySelector('.header')).toBeInTheDocument();
166
+ expect(container.querySelector('.meta')).toBeInTheDocument();
167
+ expect(container.querySelector('.description')).toBeInTheDocument();
168
+
169
+ expect(
170
+ container.querySelector(`.ui.card.u-card.${CardGrid.args.variant}`),
171
+ ).toBeInTheDocument();
172
+ expect(
173
+ container.querySelector(
174
+ `.ui.card.u-card.max-${CardGrid.args.maxLines}-lines`,
175
+ ),
176
+ ).toBeInTheDocument();
177
+ expect(
178
+ container.querySelector(
179
+ `.ui.card.u-card.title-max-${CardGrid.args.maxLines}-lines`,
180
+ ),
181
+ ).toBeInTheDocument();
182
+ expect(
183
+ container.querySelector(
184
+ `.ui.card.u-card.has--object-fit--${CardGrid.args.objectFit}`,
185
+ ),
186
+ ).toBeInTheDocument();
187
+ expect(
188
+ container.querySelector(
189
+ `.ui.card.u-card.has--object-position--${CardGrid.args.objectPosition}`,
190
+ ),
191
+ ).toBeInTheDocument();
192
+ });
193
+
61
194
  it('renders the card grid with correct number of cards', () => {
62
195
  const { container } = render(<CardGrid {...CardGrid.args} />);
63
196
  const cardGridCards = container.querySelectorAll(
@@ -67,7 +200,70 @@ describe('CardGrid component', () => {
67
200
  });
68
201
  });
69
202
 
203
+ describe('ImageGrid component', () => {
204
+ it('renders correctly', () => {
205
+ const { container } = render(<ImageGrid {...ImageGrid.args} />);
206
+
207
+ expect(container.querySelector('.ui.image')).toBeInTheDocument();
208
+
209
+ expect(
210
+ container.querySelector(`.ui.card.u-card.${ImageGrid.args.variant}`),
211
+ ).toBeInTheDocument();
212
+ expect(
213
+ container.querySelector(
214
+ `.ui.card.u-card.has--object-fit--${ImageGrid.args.objectFit}`,
215
+ ),
216
+ ).toBeInTheDocument();
217
+ expect(
218
+ container.querySelector(
219
+ `.ui.card.u-card.has--object-position--${ImageGrid.args.objectPosition}`,
220
+ ),
221
+ ).toBeInTheDocument();
222
+ });
223
+
224
+ it('renders the image grid with correct number of cards', () => {
225
+ const { container } = render(<ImageGrid {...ImageGrid.args} />);
226
+ const imageGridCards = container.querySelectorAll(
227
+ '.ui.card.u-card.default .ui.image',
228
+ );
229
+ expect(imageGridCards.length).toBe(5);
230
+ });
231
+ });
232
+
70
233
  describe('Default component', () => {
234
+ it('renders correctly', () => {
235
+ const { container } = render(<Default {...Default.args} />);
236
+
237
+ expect(container.querySelector('.image')).toBeInTheDocument();
238
+ expect(container.querySelector('.header')).toBeInTheDocument();
239
+ expect(container.querySelector('.meta')).toBeInTheDocument();
240
+ expect(container.querySelector('.description')).toBeInTheDocument();
241
+
242
+ expect(
243
+ container.querySelector(`.ui.card.u-card.${Default.args.variant}`),
244
+ ).toBeInTheDocument();
245
+ expect(
246
+ container.querySelector(
247
+ `.ui.card.u-card.max-${Default.args.maxLines}-lines`,
248
+ ),
249
+ ).toBeInTheDocument();
250
+ expect(
251
+ container.querySelector(
252
+ `.ui.card.u-card.title-max-${Default.args.maxLines}-lines`,
253
+ ),
254
+ ).toBeInTheDocument();
255
+ expect(
256
+ container.querySelector(
257
+ `.ui.card.u-card.has--object-fit--${Default.args.objectFit}`,
258
+ ),
259
+ ).toBeInTheDocument();
260
+ expect(
261
+ container.querySelector(
262
+ `.ui.card.u-card.has--object-position--${Default.args.objectPosition}`,
263
+ ),
264
+ ).toBeInTheDocument();
265
+ });
266
+
71
267
  it('renders the default with correct number of cards', () => {
72
268
  const { container } = render(<Default {...Default.args} />);
73
269
  const defaultCards = container.querySelectorAll(
@@ -12,7 +12,7 @@ const Sites = (props) => {
12
12
  const nextItem = logos[i + 1];
13
13
  column.push(
14
14
  <Grid.Column className="logo" key={i}>
15
- <a className="logo" href={item.url}>
15
+ <a className="logo" href={item.url} aria-label={item.alt}>
16
16
  <LazyLoadComponent>
17
17
  <Image
18
18
  className={item.className}
@@ -21,7 +21,7 @@ const Sites = (props) => {
21
21
  ></Image>
22
22
  </LazyLoadComponent>
23
23
  </a>
24
- <a className="logo" href={nextItem.url}>
24
+ <a className="logo" href={nextItem.url} aria-label={item.alt}>
25
25
  <LazyLoadComponent>
26
26
  <Image
27
27
  className={nextItem.className}
@@ -58,16 +58,20 @@ const logoProps = {
58
58
  };
59
59
 
60
60
  const links = [
61
- { title: 'EEA Main Portal', href: '/#' },
62
- { title: 'Biodiversity Information System for Europe', href: '/#' },
63
- { title: 'Climate Adaptation Platform', href: '/#' },
64
- { title: 'Copernicus in situ component', href: '/#' },
65
- { title: 'Copernicus land monitoring', href: '/#' },
61
+ { title: 'European Environment Agency website', href: '/#' },
62
+ { title: 'WISE marine - Marine information system for Europe', href: '/#' },
63
+ {
64
+ title: 'WISE freshwater - Freshwater information system for Europe',
65
+ href: '/#',
66
+ },
67
+ { title: 'BISE - Biodiversity information system for Europe', href: '/#' },
68
+ { title: 'FISE - Forest information system for Europe', href: '/#' },
69
+ { title: 'European Climate and health observatory', href: '/#' },
70
+ { title: 'ClimateADAPT', href: '/#' },
66
71
  { title: 'European Industrial Emissions Portal', href: '/#' },
67
- { title: 'Forest Information System for Europe', href: '/#' },
68
- { title: 'Information Platform for Chemical Monitoring', href: '/#' },
69
- { title: 'Marine Water Information System for Europe', href: '/#' },
70
- { title: 'Fresh Water Information System for Europe', href: '/#' },
72
+ { title: 'Climate and Energy in the EU', href: '/#' },
73
+ { title: 'Copernicus Land Monitoring Service', href: '/#' },
74
+ { title: 'Copernicus InSitu', href: '/#' },
71
75
  ];
72
76
 
73
77
  const languages = [
@@ -1234,7 +1238,7 @@ const Template = (args) => {
1234
1238
  <Header>
1235
1239
  <Header.TopHeader>
1236
1240
  <Header.TopItem className="official-union">
1237
- <Image src={eeaFlag} alt="eea flag"></Image>
1241
+ <Image src={eeaFlag} alt="European Union flag"></Image>
1238
1242
  <Header.TopDropdownMenu
1239
1243
  text="An official website of the European Union | How do you know?"
1240
1244
  tabletText="An official website of the European Union"
@@ -10,6 +10,16 @@ export default {
10
10
  },
11
11
  },
12
12
  argTypes: {
13
+ variant: {
14
+ name: 'Variation',
15
+ defaultValue: 'secondary',
16
+ options: ['primary', 'secondary', 'tertiary'],
17
+ control: { type: 'select' },
18
+ table: {
19
+ defaultValue: { summary: 'secondary' },
20
+ type: { summary: 'string' },
21
+ },
22
+ },
13
23
  panes: {
14
24
  description: 'tab names and content array',
15
25
  table: {
@@ -26,11 +36,11 @@ export default {
26
36
 
27
37
  function TabContent({
28
38
  panes,
39
+ variant,
29
40
  renderActive,
30
- text,
31
- attached,
32
- borderless,
41
+ inverted,
33
42
  vertical,
43
+ pointing,
34
44
  fluid,
35
45
  grid,
36
46
  }) {
@@ -39,10 +49,11 @@ function TabContent({
39
49
  panes={panes}
40
50
  renderActiveOnly={renderActive}
41
51
  menu={{
42
- secondary: true,
43
- pointing: true,
44
52
  vertical: vertical,
53
+ inverted: inverted,
54
+ pointing: pointing,
45
55
  fluid: fluid,
56
+ className: variant,
46
57
  tabIndex: 0,
47
58
  }}
48
59
  grid={grid}
@@ -59,6 +70,7 @@ const Template = (args) => (
59
70
  export const Default = Template.bind({});
60
71
  Default.args = {
61
72
  renderActive: false,
73
+ inverted: false,
62
74
  panes: [
63
75
  {
64
76
  menuItem: 'Tab 1',
@@ -81,8 +93,10 @@ Default.args = {
81
93
 
82
94
  export const Vertical = Template.bind({});
83
95
  Vertical.args = {
96
+ variant: 'secondary',
84
97
  renderActive: true,
85
98
  vertical: true,
99
+ pointing: false,
86
100
  fluid: true,
87
101
  grid: { paneWidth: 7, tabWidth: 5 },
88
102
  panes: [
@@ -165,6 +179,8 @@ Vertical.args = {
165
179
  };
166
180
 
167
181
  Vertical.argTypes = {
182
+ variant: 'secondary',
183
+ inverted: false,
168
184
  vertical: {
169
185
  description: 'vertical tab',
170
186
  table: {
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { Default } from './Tab.stories';
4
+ import '@testing-library/jest-dom/extend-expect';
5
+
6
+ describe('It renderes corectly', () => {
7
+ it('renders corectly', () => {
8
+ render(<Default {...Default.args} />);
9
+ });
10
+ });
@@ -12,10 +12,11 @@
12
12
  }
13
13
 
14
14
  .ui.breadcrumb ol {
15
- list-style: none;
15
+ padding-top: @space-025;
16
16
  padding-left: 0;
17
17
  margin: 0;
18
- padding-top: @space-025;
18
+ list-style: none;
19
+
19
20
  li {
20
21
  display: inline-block;
21
22
  }
@@ -28,10 +29,10 @@
28
29
  .ui.breadcrumb {
29
30
  .section {
30
31
  overflow: hidden;
32
+ max-width: @breadcrumbItemMaxWidth;
31
33
 
32
34
  /* Max breadcrumb length */
33
35
  min-height: @breadcrumbItemMinHeight;
34
- max-width: @breadcrumbItemMaxWidth;
35
36
  padding: @mobileBreadcrumbPadding;
36
37
  text-overflow: ellipsis;
37
38
  white-space: nowrap;
@@ -203,7 +203,6 @@
203
203
  }
204
204
  }
205
205
 
206
-
207
206
  /*************/
208
207
  /* EEA Theme */
209
208
  /*************/
@@ -280,33 +279,220 @@
280
279
  Tabs
281
280
  ***********/
282
281
 
282
+ .vertical.border-left {
283
+ --vertical-menu-border: @verticalMenuBorderOnLeftSide;
284
+ --vertical-item-border: @verticalItemBorderOnLeftSide;
285
+ --vertical-item-border-style: @verticalItemBorderStyleOnLeft;
286
+ --vertical-item-margin: @verticalItemMarginOnLeft;
287
+ }
288
+
289
+ .ui.menu.vertical {
290
+ border-width: @verticalMenuBorderWidth !important;
291
+ border-style: @verticalItemBorderStyle !important;
292
+ border-color: @verticalMenuBorderColor !important;
293
+ margin: 0;
294
+ box-shadow: none;
295
+ }
296
+
297
+ .ui.secondary.vertical.menu > .item,
298
+ .ui.vertical.menu .item {
299
+ padding: @verticalItemPadding;
300
+ border-width: @verticalItemBorder;
301
+ border-style: @verticalItemBorderStyle;
302
+ border-color: transparent;
303
+ margin: @verticalItemMargin;
304
+ word-break: break-word;
305
+ }
306
+
307
+ .ui.vertical.menu .item.active {
308
+ border-right: @verticalItemActiveBorder;
309
+ }
310
+
283
311
  /* Tab active item custom border design */
284
- .ui.secondary.pointing.menu:not(.vertical):not(.pagination) .active.item,
285
- .ui.secondary.pointing.menu:not(.vertical):not(.pagination) .item:active {
286
- padding: (@secondaryPointingItemVerticalPadding - @1px)
287
- @secondaryPointingItemHorizontalPadding;
288
- border-bottom: @secondaryPointingActiveBorderWidth solid @secondaryColor;
289
- margin-bottom: -@secondaryPointingctiveItemMarginBottom;
312
+ .ui.menu[class*='ary']:not(.vertical, .inverted):not(.pagination) .item.active,
313
+ .ui.menu[class*='ary']:not(.vertical, .inverted):not(.pagination) .item:active {
314
+ border-bottom: @secondaryPointingActiveBorderWidth solid
315
+ var(--text-color, transparent);
316
+ margin-bottom: -@secondaryPointingActiveItemMarginBottom;
317
+ }
318
+
319
+ .block-editor-tabs_block .ui.menu a.active.item,
320
+ .block-editor-tabs_block .ui.menu a.item:hover {
321
+ background-color: transparent !important;
322
+ }
323
+
324
+ .block-editor-tabs_block .ui.inverted.menu .item:not(a):hover {
325
+ background-color: @strongTransparentBlack;
326
+ }
327
+
328
+ .tabs-block .ui.pointing.menu .item::after {
329
+ display: none;
330
+ }
331
+
332
+ .ui.menu[class*='ary']:not(.inverted) .ui.item:active {
290
333
  color: var(--text-color, @secondaryPointingActiveTextColor);
291
334
  }
292
335
 
293
336
  /* Menu items custom border for responsive issues */
294
- .ui.secondary.pointing.menu:not(.vertical) {
337
+ .ui.menu[class*='ary']:not(.vertical) {
295
338
  position: relative;
296
- overflow: auto; // Horizontal scolling of links
339
+ overflow: auto; // Horizontal scrolling of links
297
340
  height: auto; // height ensures that scrollable region has keyboard access
298
341
  padding-bottom: @2px; // Leave room for the active border item
299
342
  border-bottom: none; // Border comes from before pseudo-element
300
- margin-right: 0em;
301
- margin-left: 0em;
343
+ margin-right: 0;
344
+ margin-left: 0;
302
345
 
303
- a.item {
346
+ .item {
304
347
  max-width: @secondaryPointingItemMaxWidth;
348
+ padding: @secondaryItemVerticalPadding @secondaryItemHorizontalPadding;
305
349
  border-bottom: @secondaryPointingItemBorderBottom;
350
+ margin: @secondaryPointingItemMargin;
306
351
  }
307
352
  }
308
353
 
309
- .ui.pointing.secondary.menu:not(.vertical):before {
354
+ .ui.menu:not(.inverted) .active.item:hover {
355
+ background-color: transparent;
356
+ }
357
+
358
+ .ui.menu .item:hover {
359
+ cursor: pointer;
360
+ }
361
+
362
+ .ui.menu[class*='ary']:not(.inverted, .vertical) {
363
+ border: none;
364
+ box-shadow: none;
365
+ }
366
+
367
+ .ui.menu.vertical .item:before,
368
+ .ui.menu[class*='ary'] .item:before {
369
+ display: none;
370
+ }
371
+
372
+ .primary.menu {
373
+ --text-color: @primaryColorCSSVar;
374
+ }
375
+
376
+ .primary.secondary.menu {
377
+ --text-color-secondary: @primaryColorCSSVar;
378
+ }
379
+
380
+ .primary.inverted.menu {
381
+ --bg-color: @primaryColorCSSVar;
382
+ }
383
+
384
+ .secondary.menu {
385
+ --text-color: @secondaryColorCSSVar;
386
+ }
387
+
388
+ // color options from semantic tabs
389
+ .red.inverted.menu {
390
+ --bg-color: @red;
391
+ --text-color: @red;
392
+ }
393
+
394
+ .orange.inverted.menu {
395
+ --bg-color: @orange;
396
+ --text-color: @orange;
397
+ }
398
+
399
+ .yellow.inverted.menu {
400
+ --bg-color: @yellow;
401
+ --text-color: @yellow;
402
+ }
403
+
404
+ .olive.inverted.menu {
405
+ --bg-color: @olive;
406
+ --text-color: @olive;
407
+ }
408
+
409
+ .green.inverted.menu {
410
+ --bg-color: @green;
411
+ --text-color: @green;
412
+ }
413
+
414
+ .teal.inverted.menu {
415
+ --bg-color: @teal;
416
+ --text-color: @teal;
417
+ }
418
+
419
+ .blue.inverted.menu {
420
+ --bg-color: @blue;
421
+ --text-color: @blue;
422
+ }
423
+
424
+ .violet.inverted.menu {
425
+ --bg-color: @violet;
426
+ --text-color: @violet;
427
+ }
428
+
429
+ .purple.inverted.menu {
430
+ --bg-color: @purple;
431
+ --text-color: @purple;
432
+ }
433
+
434
+ .pink.inverted.menu {
435
+ --bg-color: @pink;
436
+ --text-color: @pink;
437
+ }
438
+
439
+ .grey.inverted.menu {
440
+ --bg-color: @grey;
441
+ --text-color: @grey;
442
+ }
443
+
444
+ .brown.inverted.menu {
445
+ --bg-color: @brown;
446
+ --text-color: @brown;
447
+ }
448
+
449
+ .black.menu,
450
+ .black.inverted.menu {
451
+ --bg-color: @black;
452
+ --text-color: @black;
453
+ }
454
+
455
+ .ui.inverted.menu {
456
+ --tab-inverted-text-color: @invertedItemTextColor;
457
+ --tab-inverted-active-text-color: @white;
458
+ --tab-inverted-hover-text-color: @white;
459
+ --tab-inverted-bg-color: var(--bg-color, @secondaryColorCSSVar);
460
+ --tab-inverted-secondary-active-border-color: @secondaryPointingInvertedBorderColor;
461
+ }
462
+
463
+ .ui.secondary.pointing.menu {
464
+ background-color: var(--tab-inverted-bg-color);
465
+ }
466
+
467
+ .tertiary.menu {
468
+ --text-color: @tertiaryColorCSSVar;
469
+ }
470
+
471
+ .tertiary.secondary.menu {
472
+ --text-color-secondary: @tertiaryColorCSSVar;
473
+ }
474
+
475
+ .menu.inverted {
476
+ --text-active-color: @white;
477
+ }
478
+
479
+ .menu.inverted input {
480
+ --text-color: @white;
481
+ }
482
+
483
+ .tertiary.inverted.menu {
484
+ --bg-color: @tertiaryColorCSSVar;
485
+ }
486
+
487
+ .ui.pointing.menu.inverted .active.title {
488
+ background-color: @invertedColoredActiveBackground;
489
+ }
490
+
491
+ .ui.inverted.menu .ui.item.active:hover {
492
+ background-color: @invertedActiveBackground;
493
+ }
494
+
495
+ .ui.menu[class*='ary']:not(.vertical):before {
310
496
  position: absolute;
311
497
  z-index: 0;
312
498
  right: 0;
@@ -318,7 +504,7 @@
318
504
  }
319
505
 
320
506
  // edit page, normalize font size of tab headers from the sidebar
321
- .section-edit .ui.pointing.secondary.menu .item,
322
- .tabs-wrapper .ui.pointing.secondary.menu .item {
507
+ .section-edit .menu[class*='ary'] .item,
508
+ .tabs-wrapper .menu[class*='ary'] .item {
323
509
  font-size: 1.25rem;
324
510
  }