@eeacms/volto-eea-design-system 1.50.0 → 1.50.2

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 (31) hide show
  1. package/.eslintrc.js +7 -6
  2. package/CHANGELOG.md +18 -0
  3. package/package.json +1 -1
  4. package/src/ui/Banner/Banner.stories.jsx +1 -1
  5. package/src/ui/Card/Card.stories.jsx +2 -2
  6. package/src/ui/DownloadLabeledIcon/DownloadLabeledIcon.stories.jsx +1 -1
  7. package/src/ui/DraftContent/DraftContent.stories.jsx +4 -1
  8. package/src/ui/Footer/FooterActions.jsx +1 -1
  9. package/src/ui/Footer/FooterSitesButton.jsx +1 -1
  10. package/src/ui/Footer/SubFooter.jsx +2 -2
  11. package/src/ui/Form/Dropdown.stories.js +1 -1
  12. package/src/ui/Form/Input.stories.js +1 -1
  13. package/src/ui/Form/Textarea.stories.js +1 -1
  14. package/src/ui/Grid/ComponentGrid.stories.js +2 -2
  15. package/src/ui/Header/Header.jsx +3 -3
  16. package/src/ui/Header/HeaderMenuPopUp.js +3 -2
  17. package/src/ui/Hero/Hero.jsx +1 -1
  18. package/src/ui/InpageNavigation/InpageNavigation.jsx +1 -1
  19. package/src/ui/LabeledIconGroup/LabeledIconGroup.jsx +3 -3
  20. package/src/ui/LanguageLabeledIcon/LanguageLabeledIcon.stories.jsx +1 -1
  21. package/src/ui/NewTabLabeledIcon/NewTabLabeledIcon.stories.jsx +1 -1
  22. package/src/ui/Quote/Testimonial/Testimonial.jsx +1 -1
  23. package/src/ui/Statistic/Statistic.stories.js +12 -4
  24. package/src/ui/Table/Table.stories.js +2 -2
  25. package/src/ui/Tag/Tag.jsx +1 -1
  26. package/src/ui/TagList/TagList.stories.jsx +1 -1
  27. package/src/ui/UnderlinedTitle/UnderlinedTitle.stories.jsx +1 -1
  28. package/src/ui/Video/Video.jsx +1 -1
  29. package/theme/themes/eea/collections/menu.overrides +1 -1
  30. package/theme/themes/eea/extras/copyright.variables +1 -1
  31. package/theme/themes/eea/extras/header.less +2 -1
package/.eslintrc.js CHANGED
@@ -19,16 +19,16 @@ if (configFile) {
19
19
  voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`;
20
20
  }
21
21
 
22
- const AddonConfigurationRegistry = require(`${voltoPath}/addon-registry.js`);
23
- const reg = new AddonConfigurationRegistry(projectRootPath);
22
+ const { AddonRegistry } = require('@plone/registry/addon-registry');
23
+ const { registry } = AddonRegistry.init(projectRootPath);
24
24
 
25
25
  // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons
26
- const addonAliases = Object.keys(reg.packages).map((o) => [
26
+ const addonAliases = Object.keys(registry.packages).map((o) => [
27
27
  o,
28
- reg.packages[o].modulePath,
28
+ registry.packages[o].modulePath,
29
29
  ]);
30
30
 
31
- const addonExtenders = reg.getEslintExtenders().map((m) => require(m));
31
+ const addonExtenders = registry.getEslintExtenders().map((m) => require(m));
32
32
 
33
33
  const defaultConfig = {
34
34
  extends: `${voltoPath}/.eslintrc`,
@@ -37,7 +37,7 @@ const defaultConfig = {
37
37
  alias: {
38
38
  map: [
39
39
  ['@plone/volto', '@plone/volto/src'],
40
- ['@plone/volto-slate', '@plone/volto/packages/volto-slate/src'],
40
+ ['@plone/volto-slate', '@plone/volto-slate/src'],
41
41
  ...addonAliases,
42
42
  ['@package', `${__dirname}/src`],
43
43
  ['@root', `${__dirname}/src`],
@@ -51,6 +51,7 @@ const defaultConfig = {
51
51
  },
52
52
  },
53
53
  rules: {
54
+ 'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }],
54
55
  'react/jsx-no-target-blank': 'off',
55
56
  },
56
57
  };
package/CHANGELOG.md CHANGED
@@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ ### [1.50.2](https://github.com/eea/volto-eea-design-system/compare/1.50.1...1.50.2) - 9 April 2026
8
+
9
+ #### :bug: Bug Fixes
10
+
11
+ - fix: Docusaurus build [Alin Voinea - [`0339369`](https://github.com/eea/volto-eea-design-system/commit/0339369cda49e3772b164eff3345523f7cba551e)]
12
+ - fix: warnings [Alin Voinea - [`a1e035d`](https://github.com/eea/volto-eea-design-system/commit/a1e035d47b822d755414cf436aa052e85066e197)]
13
+
14
+ ### [1.50.1](https://github.com/eea/volto-eea-design-system/compare/1.50.0...1.50.1) - 7 April 2026
15
+
16
+ #### :bug: Bug Fixes
17
+
18
+ - fix: megamenu breaking columns - refs #302209 [Teodor Voicu - [`5dd05ba`](https://github.com/eea/volto-eea-design-system/commit/5dd05ba4925e96c37ed0801df5376185c821d0ed)]
19
+ - fix: make test [Alin V. (Claudiu) - [`98dc41b`](https://github.com/eea/volto-eea-design-system/commit/98dc41b32de9bab9680105e4549e7b68c2116072)]
20
+
21
+ #### :house: Internal changes
22
+
23
+ - chore: Volto 18 eslint update - refs #301881 [Teodor Voicu - [`0446edb`](https://github.com/eea/volto-eea-design-system/commit/0446edbb5552608f7658f61fbe4a5d58f71b62b4)]
24
+
7
25
  ### [1.50.0](https://github.com/eea/volto-eea-design-system/compare/1.40.3...1.50.0) - 25 March 2026
8
26
 
9
27
  #### :rocket: New Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-eea-design-system",
3
- "version": "1.50.0",
3
+ "version": "1.50.2",
4
4
  "description": "@eeacms/volto-eea-design-system: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -5,7 +5,7 @@ import Banner from './Banner';
5
5
  import imgUrl from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/banner.png';
6
6
  import { Icon, Container } from 'semantic-ui-react';
7
7
  import Popup from '@eeacms/volto-eea-design-system/ui/Popup/Popup';
8
- import Copyright from '../Copyright/Copyright';
8
+ import Copyright from '@eeacms/volto-eea-design-system/ui/Copyright/Copyright';
9
9
 
10
10
  export default {
11
11
  title: 'Components/Page Header',
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Card, Image, Grid, Container, Icon, Button } from 'semantic-ui-react';
3
3
  import Slider from 'react-slick';
4
- import TagList from '../TagList/TagList';
5
- import Tag from '../Tag/Tag';
4
+ import TagList from '@eeacms/volto-eea-design-system/ui/TagList/TagList';
5
+ import Tag from '@eeacms/volto-eea-design-system/ui/Tag/Tag';
6
6
 
7
7
  import 'slick-carousel/slick/slick.css';
8
8
  import 'slick-carousel/slick/slick-theme.css';
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Button } from 'semantic-ui-react';
3
3
  import DownloadLabeledIcon from './DownloadLabeledIcon';
4
- import LabeledIconGroup from '../LabeledIconGroup/LabeledIconGroup';
4
+ import LabeledIconGroup from '@eeacms/volto-eea-design-system/ui/LabeledIconGroup/LabeledIconGroup';
5
5
 
6
6
  export default {
7
7
  title: 'Components/Labeled Icons/Download',
@@ -1,5 +1,8 @@
1
1
  import React from 'react';
2
- import { Default as HeaderDefault, HeaderArgs } from '../Header/Header.stories';
2
+ import {
3
+ Default as HeaderDefault,
4
+ HeaderArgs,
5
+ } from '@eeacms/volto-eea-design-system/ui/Header/Header.stories';
3
6
  import './draft.css';
4
7
 
5
8
  export default {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Link } from 'react-router-dom';
3
3
  import { Grid } from 'semantic-ui-react';
4
- import { isInternalURL } from '@plone/volto/helpers';
4
+ import { isInternalURL } from '@plone/volto/helpers/Url/Url';
5
5
 
6
6
  const FooterActions = (props) => {
7
7
  if (props.children) {
@@ -1,5 +1,5 @@
1
1
  import PropTypes from 'prop-types';
2
- import { UniversalLink } from '@plone/volto/components';
2
+ import UniversalLink from '@plone/volto/components/manage/UniversalLink/UniversalLink';
3
3
 
4
4
  const SitesButton = (props) => {
5
5
  if (props.children) {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import Footer from './Footer';
2
+ import Contact from './Contact';
3
3
 
4
4
  import { Grid, Image } from 'semantic-ui-react';
5
5
 
@@ -39,7 +39,7 @@ const SubFooter = (props) => {
39
39
  {props.contacts?.length > 0 && (
40
40
  <Grid.Column mobile={12} tablet={12} computer={4}>
41
41
  <div className="item">
42
- <Footer.Contact contacts={props.contacts} />
42
+ <Contact contacts={props.contacts} />
43
43
  </div>
44
44
  </Grid.Column>
45
45
  )}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Dropdown, Form, Container } from 'semantic-ui-react';
3
- import FormFieldWrapper from '../FormFieldWrapper/FormFieldWrapper';
3
+ import FormFieldWrapper from '@eeacms/volto-eea-design-system/ui/FormFieldWrapper/FormFieldWrapper';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Forms/Dropdown',
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Input, Form, Container } from 'semantic-ui-react';
3
- import FormFieldWrapper from '../FormFieldWrapper/FormFieldWrapper';
3
+ import FormFieldWrapper from '@eeacms/volto-eea-design-system/ui/FormFieldWrapper/FormFieldWrapper';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Forms/Input',
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { TextArea, Form, Container } from 'semantic-ui-react';
3
- import FormFieldWrapper from '../FormFieldWrapper/FormFieldWrapper';
3
+ import FormFieldWrapper from '@eeacms/volto-eea-design-system/ui/FormFieldWrapper/FormFieldWrapper';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Forms/Text Area',
@@ -1,4 +1,4 @@
1
- import _ from 'lodash';
1
+ import times from 'lodash/times';
2
2
  import React from 'react';
3
3
  import { Grid, Container } from 'semantic-ui-react';
4
4
 
@@ -9,7 +9,7 @@ export default {
9
9
  };
10
10
 
11
11
  const getColumns = (number, text) => {
12
- const columns = _.times(number, (i) => (
12
+ const columns = times(number, (i) => (
13
13
  <Grid.Column key={i}>
14
14
  <div className="col-example">{text}</div>
15
15
  </Grid.Column>
@@ -16,8 +16,8 @@ import HeaderSearchPopUp from './HeaderSearchPopUp';
16
16
  import HeaderMenuPopUp from './HeaderMenuPopUp';
17
17
  import { findBestMatchingMenuItem, isMenuItemActive } from './utils';
18
18
  import PropTypes from 'prop-types';
19
- import _ from 'lodash';
20
- import { isInternalURL } from '@plone/volto/helpers';
19
+ import omit from 'lodash/omit';
20
+ import { isInternalURL } from '@plone/volto/helpers/Url/Url';
21
21
  import config from '@plone/volto/registry';
22
22
 
23
23
  Header.propTypes = {
@@ -390,7 +390,7 @@ const BurgerAction = React.forwardRef((props, ref) => (
390
390
  <button
391
391
  ref={ref}
392
392
  className={`burger-action ${props.className}`}
393
- {..._.omit(props, ['onClick', 'children', 'className', 'ref'])}
393
+ {...omit(props, ['onClick', 'children', 'className', 'ref'])}
394
394
  onClick={props.onClick}
395
395
  >
396
396
  {props.children}
@@ -8,10 +8,11 @@ import {
8
8
  Transition,
9
9
  } from 'semantic-ui-react';
10
10
 
11
- import { cloneDeep, kebabCase } from 'lodash';
11
+ import cloneDeep from 'lodash/cloneDeep';
12
+ import kebabCase from 'lodash/kebabCase';
12
13
 
13
14
  import { useClickOutside } from '@eeacms/volto-eea-design-system/helpers';
14
- import { numbersToMenuItemColumns } from '../Header/utils';
15
+ import { numbersToMenuItemColumns } from '@eeacms/volto-eea-design-system/ui/Header/utils';
15
16
 
16
17
  const generateCssClassFromUrl = (url) => {
17
18
  if (!url) return '';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
4
  import { Icon } from 'semantic-ui-react';
5
- import Copyright from '../Copyright/Copyright';
5
+ import Copyright from '@eeacms/volto-eea-design-system/ui/Copyright/Copyright';
6
6
 
7
7
  Hero.propTypes = {
8
8
  image: PropTypes.bool,
@@ -1,6 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import { Container, Button, Icon } from 'semantic-ui-react';
3
- import { debounce } from 'lodash';
3
+ import debounce from 'lodash/debounce';
4
4
 
5
5
  class InpageNavigation extends Component {
6
6
  constructor(props) {
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Button } from 'semantic-ui-react';
3
- import NewTabLabeledIcon from '../NewTabLabeledIcon/NewTabLabeledIcon';
4
- import DownloadLabeledIcon from '../DownloadLabeledIcon/DownloadLabeledIcon';
5
- import LanguageLabeledIcon from '../LanguageLabeledIcon/LanguageLabeledIcon';
3
+ import NewTabLabeledIcon from '@eeacms/volto-eea-design-system/ui/NewTabLabeledIcon/NewTabLabeledIcon';
4
+ import DownloadLabeledIcon from '@eeacms/volto-eea-design-system/ui/DownloadLabeledIcon/DownloadLabeledIcon';
5
+ import LanguageLabeledIcon from '@eeacms/volto-eea-design-system/ui/LanguageLabeledIcon/LanguageLabeledIcon';
6
6
 
7
7
  function LabeledIconGroup({ children, ...rest }) {
8
8
  return (
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Button } from 'semantic-ui-react';
3
3
  import LanguageLabeledIcon from './LanguageLabeledIcon';
4
- import LabeledIconGroup from '../LabeledIconGroup/LabeledIconGroup';
4
+ import LabeledIconGroup from '@eeacms/volto-eea-design-system/ui/LabeledIconGroup/LabeledIconGroup';
5
5
 
6
6
  export default {
7
7
  title: 'Components/Labeled Icons/Language',
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import NewTabLabeledIcon from './NewTabLabeledIcon';
3
- import LabeledIconGroup from '../LabeledIconGroup/LabeledIconGroup';
3
+ import LabeledIconGroup from '@eeacms/volto-eea-design-system/ui/LabeledIconGroup/LabeledIconGroup';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Labeled Icons/New Tab',
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
- import Quote from '../Quote';
4
+ import Quote from '@eeacms/volto-eea-design-system/ui/Quote/Quote';
5
5
  import { Grid, Card, Image, Divider } from 'semantic-ui-react';
6
6
 
7
7
  Testimonial.propTypes = {
@@ -227,8 +227,12 @@ const CustomTemplate = (args) => (
227
227
  <Container>
228
228
  <Statistic.Group {...args}>
229
229
  {args.elements &&
230
- args.elements.map((element) => (
231
- <a href={element.href} className="ui small statistic">
230
+ args.elements.map((element, index) => (
231
+ <a
232
+ key={element.href ?? `${element.label}-${index}`}
233
+ href={element.href}
234
+ className="ui small statistic"
235
+ >
232
236
  <div className={`value ${args.valueVariation}`}>
233
237
  {element.value}
234
238
  </div>
@@ -429,8 +433,12 @@ const CountUpStatistics = (args) => (
429
433
  <Container>
430
434
  <Statistic.Group id="counter" {...args}>
431
435
  {args.elements &&
432
- args.elements.map((element) => (
433
- <a href={element.href} className="ui small statistic">
436
+ args.elements.map((element, index) => (
437
+ <a
438
+ key={element.href ?? `${element.label}-${index}`}
439
+ href={element.href}
440
+ className="ui small statistic"
441
+ >
434
442
  <div className={`value ${args.valueVariation}`}>
435
443
  <CountUp end={element.value} isCounting={true} />
436
444
  </div>
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Table, Container } from 'semantic-ui-react';
3
- import _ from 'lodash';
3
+ import sortBy from 'lodash/sortBy';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Table',
@@ -224,7 +224,7 @@ function reducer(state, action) {
224
224
 
225
225
  return {
226
226
  column: action.column,
227
- data: _.sortBy(state.data, [action.column]),
227
+ data: sortBy(state.data, [action.column]),
228
228
  direction: 'ascending',
229
229
  };
230
230
  default:
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Icon } from 'semantic-ui-react';
3
- import { ConditionalLink } from '@plone/volto/components';
3
+ import ConditionalLink from '@plone/volto/components/manage/ConditionalLink/ConditionalLink';
4
4
  import { getFieldURL } from '@plone/volto/helpers/Url/Url';
5
5
 
6
6
  function Tag({ href, children }) {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import TagList from './TagList';
3
- import Tag from '../Tag/Tag';
3
+ import Tag from '@eeacms/volto-eea-design-system/ui/Tag/Tag';
4
4
  import { Container } from 'semantic-ui-react';
5
5
  import configureStore from 'redux-mock-store';
6
6
  import { Provider } from 'react-redux';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Header, Divider, Container } from 'semantic-ui-react';
3
- import ContentBox from '../ContentBox/ContentBox';
3
+ import ContentBox from '@eeacms/volto-eea-design-system/ui/ContentBox/ContentBox';
4
4
 
5
5
  export default {
6
6
  title: 'Components/Heading/Underlined',
@@ -38,7 +38,7 @@ Video.Embed = ({
38
38
 
39
39
  Video.Track = ({ tracks }) =>
40
40
  tracks.map((track, index) => {
41
- return <track {...track} />;
41
+ return <track key={track.src ?? track.srcLang ?? index} {...track} />;
42
42
  });
43
43
 
44
44
  export default Video;
@@ -230,7 +230,7 @@
230
230
  .ui.pagination.pointing.secondary, .ui.pagination {
231
231
  display: flex;
232
232
  width: @paginationWidth;
233
- justify-content: start;
233
+ justify-content: flex-start;
234
234
 
235
235
  @media only screen and (min-width: @tabletBreakpoint) {
236
236
  justify-content: center;
@@ -12,7 +12,7 @@
12
12
  @copyrightWrapperPaddingLeft: @rem-space-3;
13
13
  @copyrightWrapperPaddingRight: @rem-space-3;
14
14
  @copyrightWrapperBottom: @rem-space-4;
15
- @copyrightAlignItems: start;
15
+ @copyrightAlignItems: flex-start;
16
16
 
17
17
  /* Image block */
18
18
  @floatImageLeftMaxWidth: 50%;
@@ -664,7 +664,7 @@
664
664
  display: flex;
665
665
  max-height: 100%;
666
666
  flex-wrap: wrap;
667
- justify-content: end;
667
+ justify-content: flex-end;
668
668
  margin: 0;
669
669
  padding-left: 0;
670
670
 
@@ -771,6 +771,7 @@
771
771
  padding: @megaMenuListItemPadding;
772
772
  font-size: @megaMenuListItemFontSize;
773
773
  font-weight: @megaMenuListItemFontWeight;
774
+ break-inside: avoid;
774
775
  }
775
776
 
776
777
  #mega-menu a.item {