@eeacms/volto-eea-design-system 1.40.3 → 1.50.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.
Files changed (66) hide show
  1. package/.eslintrc.js +30 -16
  2. package/CHANGELOG.md +26 -0
  3. package/DEVELOP.md +19 -17
  4. package/README.md +33 -19
  5. package/docker-compose.yml +1 -1
  6. package/jest-addon.config.js +8 -4
  7. package/package.json +1 -1
  8. package/src/helpers/useFirstVisited.js +4 -2
  9. package/src/ui/Accordion/Accordion.stories.test.js +1 -1
  10. package/src/ui/Banner/Banner.test.jsx +1 -1
  11. package/src/ui/CallToAction/CallToAction.stories.test.jsx +1 -1
  12. package/src/ui/Card/Card.stories.test.jsx +1 -1
  13. package/src/ui/Card/IconCard/IconCard.stories.test.jsx +1 -1
  14. package/src/ui/Card/RelatedContent/RelatedContent.stories.test.jsx +1 -1
  15. package/src/ui/Confirm/Confirm.stories.test.js +1 -1
  16. package/src/ui/ContextNavigation/ContextNavigation.stories.test.jsx +1 -1
  17. package/src/ui/Divider/Divider.stories.test.jsx +1 -1
  18. package/src/ui/DownloadLabeledIcon/DownloadLabeledIcon.stories.test.jsx +1 -1
  19. package/src/ui/Footer/Description.test.jsx +1 -1
  20. package/src/ui/Footer/Footer.stories.test.js +1 -1
  21. package/src/ui/Footer/FooterActions.jsx +1 -1
  22. package/src/ui/Footer/FooterSitesButton.jsx +1 -1
  23. package/src/ui/Footer/Social.test.jsx +1 -1
  24. package/src/ui/Footer/SubFooter.jsx +2 -2
  25. package/src/ui/Form/Button/Button.stories.test.jsx +1 -1
  26. package/src/ui/Form/Checkbox.stories.test.js +1 -1
  27. package/src/ui/Form/Dropdown.stories.test.js +1 -1
  28. package/src/ui/Form/Radio.stories.test.js +1 -1
  29. package/src/ui/Form/Textarea.stories.test.js +1 -1
  30. package/src/ui/Form/input.stories.test.js +1 -1
  31. package/src/ui/Grid/ComponentGrid.stories.js +2 -2
  32. package/src/ui/Grid/ComponentGrid.stories.test.js +1 -1
  33. package/src/ui/Header/Header.jsx +4 -4
  34. package/src/ui/Header/Header.stories.test.js +1 -1
  35. package/src/ui/Header/Header.test.jsx +2 -2
  36. package/src/ui/Header/HeaderMenuPopUp.js +2 -1
  37. package/src/ui/Header/HeaderMenuPopUp.test.js +1 -1
  38. package/src/ui/Header/HeaderSearchPopUp.test.js +1 -1
  39. package/src/ui/Hero/Hero.stories.jsx +2 -4
  40. package/src/ui/Hero/Hero.stories.test.jsx +1 -1
  41. package/src/ui/InpageNavigation/InpageNavigation.jsx +1 -1
  42. package/src/ui/InpageNavigation/InpageNavigation.stories.test.jsx +1 -1
  43. package/src/ui/InpageNavigation/InpageNavigation.test.jsx +1 -1
  44. package/src/ui/Item/Item.stories.test.js +1 -1
  45. package/src/ui/Item/ItemGroupWithIcons.stories.test.js +1 -1
  46. package/src/ui/Label/Label.stories.test.js +1 -1
  47. package/src/ui/LabeledIconGroup/LabeledIconGroup.stories.test.jsx +1 -1
  48. package/src/ui/LanguageLabeledIcon/LanguangeLabeledIcon.test.jsx +1 -1
  49. package/src/ui/Loader/Loader.stories.test.jsx +1 -1
  50. package/src/ui/Logo/Logo.stories.test.jsx +1 -1
  51. package/src/ui/Media/Image.stories.test.js +1 -1
  52. package/src/ui/Message/Message.stories.test.js +1 -1
  53. package/src/ui/Modal/Modal.stories.test.js +1 -1
  54. package/src/ui/Popup/Popup.test.jsx +1 -1
  55. package/src/ui/Progress/Progress.stories.test.js +1 -1
  56. package/src/ui/Quote/Testimonial/Testimonial.stories.test.jsx +1 -1
  57. package/src/ui/Statistic/Statistic.stories.js +12 -4
  58. package/src/ui/Statistic/Statistic.stories.test.js +1 -1
  59. package/src/ui/Tab/Tab.stories.test.js +1 -1
  60. package/src/ui/Table/Table.stories.js +2 -2
  61. package/src/ui/Table/Table.stories.test.js +1 -1
  62. package/src/ui/Tag/Tag.jsx +1 -1
  63. package/src/ui/Timeline/Timeline.stories.test.jsx +1 -1
  64. package/src/ui/Video/Video.jsx +1 -1
  65. package/theme/themes/eea/assets/images/Header/ai-search.svg +6 -0
  66. package/theme/themes/eea/extras/header.less +1 -0
package/.eslintrc.js CHANGED
@@ -4,37 +4,43 @@ const path = require('path');
4
4
  const projectRootPath = fs.existsSync('./project')
5
5
  ? fs.realpathSync('./project')
6
6
  : fs.realpathSync(__dirname + '/../../../');
7
- const jsConfig = require(
8
- path.join(projectRootPath, 'jsconfig.json'),
9
- ).compilerOptions;
10
-
11
- const pathsConfig = jsConfig.paths;
12
7
 
13
8
  let voltoPath = path.join(projectRootPath, 'node_modules/@plone/volto');
9
+ let configFile;
10
+ if (fs.existsSync(`${projectRootPath}/tsconfig.json`))
11
+ configFile = `${projectRootPath}/tsconfig.json`;
12
+ else if (fs.existsSync(`${projectRootPath}/jsconfig.json`))
13
+ configFile = `${projectRootPath}/jsconfig.json`;
14
+
15
+ if (configFile) {
16
+ const jsConfig = require(configFile).compilerOptions;
17
+ const pathsConfig = jsConfig.paths;
18
+ if (pathsConfig['@plone/volto'])
19
+ voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`;
20
+ }
14
21
 
15
- Object.keys(pathsConfig).forEach((pkg) => {
16
- if (pkg === '@plone/volto') {
17
- voltoPath = `./${jsConfig.baseUrl}/${pathsConfig[pkg][0]}`;
18
- }
19
- });
20
- const AddonConfigurationRegistry = require(`${voltoPath}/addon-registry.js`);
21
- const reg = new AddonConfigurationRegistry(projectRootPath);
22
+ const { AddonRegistry } = require('@plone/registry/addon-registry');
23
+ const { registry } = AddonRegistry.init(projectRootPath);
22
24
 
23
25
  // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons
24
- const addonAliases = Object.keys(reg.packages).map((o) => [
26
+ const addonAliases = Object.keys(registry.packages).map((o) => [
25
27
  o,
26
- reg.packages[o].modulePath,
28
+ registry.packages[o].modulePath,
27
29
  ]);
28
30
 
29
- module.exports = {
30
- extends: `${projectRootPath}/node_modules/@plone/volto/.eslintrc`,
31
+ const addonExtenders = registry.getEslintExtenders().map((m) => require(m));
32
+
33
+ const defaultConfig = {
34
+ extends: `${voltoPath}/.eslintrc`,
31
35
  settings: {
32
36
  'import/resolver': {
33
37
  alias: {
34
38
  map: [
35
39
  ['@plone/volto', '@plone/volto/src'],
40
+ ['@plone/volto-slate', '@plone/volto-slate/src'],
36
41
  ...addonAliases,
37
42
  ['@package', `${__dirname}/src`],
43
+ ['@root', `${__dirname}/src`],
38
44
  ['~', `${__dirname}/src`],
39
45
  ],
40
46
  extensions: ['.js', '.jsx', '.json'],
@@ -45,6 +51,14 @@ module.exports = {
45
51
  },
46
52
  },
47
53
  rules: {
54
+ 'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }],
48
55
  'react/jsx-no-target-blank': 'off',
49
56
  },
50
57
  };
58
+
59
+ const config = addonExtenders.reduce(
60
+ (acc, extender) => extender.modify(acc),
61
+ defaultConfig,
62
+ );
63
+
64
+ module.exports = config;
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ 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.1](https://github.com/eea/volto-eea-design-system/compare/1.50.0...1.50.1) - 7 April 2026
8
+
9
+ #### :bug: Bug Fixes
10
+
11
+ - fix: megamenu breaking columns - refs #302209 [Teodor Voicu - [`5dd05ba`](https://github.com/eea/volto-eea-design-system/commit/5dd05ba4925e96c37ed0801df5376185c821d0ed)]
12
+ - fix: make test [Alin V. (Claudiu) - [`98dc41b`](https://github.com/eea/volto-eea-design-system/commit/98dc41b32de9bab9680105e4549e7b68c2116072)]
13
+
14
+ #### :house: Internal changes
15
+
16
+ - chore: Volto 18 eslint update - refs #301881 [Teodor Voicu - [`0446edb`](https://github.com/eea/volto-eea-design-system/commit/0446edbb5552608f7658f61fbe4a5d58f71b62b4)]
17
+
18
+ ### [1.50.0](https://github.com/eea/volto-eea-design-system/compare/1.40.3...1.50.0) - 25 March 2026
19
+
20
+ #### :rocket: New Features
21
+
22
+ - feat: Volto 18 support - refs #287700 [Alin Voinea - [`6d4f49c`](https://github.com/eea/volto-eea-design-system/commit/6d4f49c3c2a2bfae2ff1b01df6c9e1ec3b13efc5)]
23
+ - feat(Header): replace search icon with ai variant [Miu Razvan - [`af211a9`](https://github.com/eea/volto-eea-design-system/commit/af211a933bb5499036b7be24b75a2949fa791cea)]
24
+
25
+ #### :house: Internal changes
26
+
27
+ - chore: [JENKINSFILE] add package version in sonarqube [valentinab25 - [`a2500ee`](https://github.com/eea/volto-eea-design-system/commit/a2500ee91c3d926183403b7e55ef717f697eb736)]
28
+ - chore: [JENKINSFILE] use sonarqube branches [EEA Jenkins - [`79058be`](https://github.com/eea/volto-eea-design-system/commit/79058be6ad228970127ee388bbc78ad69b92465b)]
29
+
30
+ #### :hammer_and_wrench: Others
31
+
32
+ - tests: Fix Sonar Qube tags - refs #297339 [Alin Voinea - [`248553d`](https://github.com/eea/volto-eea-design-system/commit/248553d47d053514f512178793f64d382711c57e)]
7
33
  ### [1.40.3](https://github.com/eea/volto-eea-design-system/compare/1.40.2...1.40.3) - 11 February 2026
8
34
 
9
35
  #### :bug: Bug Fixes
package/DEVELOP.md CHANGED
@@ -26,21 +26,20 @@
26
26
 
27
27
  ### Or add @eeacms/volto-eea-design-system to your Volto project
28
28
 
29
- Before starting make sure your development environment is properly set. See [Volto Developer Documentation](https://docs.voltocms.com/getting-started/install/)
29
+ Before starting make sure your development environment is properly set. See the official Plone documentation for [creating a project with Cookieplone](https://6.docs.plone.org/install/create-project-cookieplone.html) and [installing an add-on in development mode in Volto 18 and 19](https://6.docs.plone.org/volto/development/add-ons/install-an-add-on-dev-18.html).
30
30
 
31
- 1. Make sure you have installed `yo`, `@plone/generator-volto` and `mrs-developer`
31
+ For new Volto 18+ projects, use Cookieplone. It includes `mrs-developer` by default.
32
32
 
33
- npm install -g yo @plone/generator-volto mrs-developer
33
+ 1. Create a new Volto project with Cookieplone
34
34
 
35
- 1. Create new volto app
36
-
37
- yo @plone/volto my-volto-project --addon @eeacms/volto-eea-design-system --skip-install
38
- cd my-volto-project
35
+ uvx cookieplone project
36
+ cd project-title
39
37
 
40
38
  1. Add the following to `mrs.developer.json`:
41
39
 
42
40
  {
43
41
  "volto-eea-design-system": {
42
+ "output": "packages",
44
43
  "url": "https://github.com/eea/volto-eea-design-system.git",
45
44
  "package": "@eeacms/volto-eea-design-system",
46
45
  "branch": "develop",
@@ -48,28 +47,31 @@ Before starting make sure your development environment is properly set. See [Vol
48
47
  }
49
48
  }
50
49
 
51
- 1. Install
50
+ 1. Add `@eeacms/volto-eea-design-system` to the `addons` key in your project `volto.config.js`
51
+
52
+ 1. Install or refresh the project setup
52
53
 
53
- make develop
54
- yarn
54
+ make install
55
55
 
56
- 1. Start backend
56
+ 1. Start backend in one terminal
57
57
 
58
- docker run --pull always -it --rm --name plone -p 8080:8080 -e SITE=Plone plone/plone-backend
58
+ make backend-start
59
59
 
60
- ...wait for backend to setup and start - `Ready to handle requests`:
60
+ ...wait for backend to setup and start, ending with `Ready to handle requests`
61
61
 
62
62
  ...you can also check http://localhost:8080/Plone
63
63
 
64
- 1. Start frontend
64
+ 1. Start frontend in a second terminal
65
65
 
66
- yarn start
66
+ make frontend-start
67
67
 
68
68
  1. Go to http://localhost:3000
69
69
 
70
70
  1. Happy hacking!
71
71
 
72
- cd src/addons/volto-eea-design-system/
72
+ cd packages/volto-eea-design-system
73
+
74
+ For legacy Volto 17 projects, keep using the yarn-based workflow from the Volto 17 documentation.
73
75
 
74
76
  ## Cypress
75
77
 
@@ -81,7 +83,7 @@ project where you added `volto-eea-design-system` to `mrs.developer.json`
81
83
  Go to:
82
84
 
83
85
  ```BASH
84
- cd src/addons/volto-eea-design-system/
86
+ cd packages/volto-eea-design-system/
85
87
  ```
86
88
 
87
89
  Start:
package/README.md CHANGED
@@ -3,16 +3,16 @@
3
3
  [![Releases](https://img.shields.io/github/v/release/eea/volto-eea-design-system)](https://github.com/eea/volto-eea-design-system/releases)
4
4
 
5
5
  [![Pipeline](https://ci.eionet.europa.eu/buildStatus/icon?job=volto-addons%2Fvolto-eea-design-system%2Fmaster&subject=master)](https://ci.eionet.europa.eu/view/Github/job/volto-addons/job/volto-eea-design-system/job/master/display/redirect)
6
- [![Lines of Code](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-master&metric=ncloc)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-master)
7
- [![Coverage](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-master&metric=coverage)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-master)
8
- [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-master&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-master)
9
- [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-master&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-master)
6
+ [![Lines of Code](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&metric=ncloc)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system)
7
+ [![Coverage](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&metric=coverage)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system)
8
+ [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system)
9
+ [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system)
10
10
 
11
11
  [![Pipeline](https://ci.eionet.europa.eu/buildStatus/icon?job=volto-addons%2Fvolto-eea-design-system%2Fdevelop&subject=develop)](https://ci.eionet.europa.eu/view/Github/job/volto-addons/job/volto-eea-design-system/job/develop/display/redirect)
12
- [![Lines of Code](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-develop&metric=ncloc)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-develop)
13
- [![Coverage](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-develop&metric=coverage)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-develop)
14
- [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-develop&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-develop)
15
- [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system-develop&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system-develop)
12
+ [![Lines of Code](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&branch=develop&metric=ncloc)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system&branch=develop)
13
+ [![Coverage](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&branch=develop&metric=coverage)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system&branch=develop)
14
+ [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&branch=develop&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system&branch=develop)
15
+ [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-eea-design-system&branch=develop&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-eea-design-system&branch=develop)
16
16
 
17
17
 
18
18
  [Volto](https://github.com/plone/volto) EEA Design System
@@ -52,6 +52,11 @@ See [Storybook](https://eea.github.io/eea-storybook/).
52
52
 
53
53
  Go to http://localhost:3000
54
54
 
55
+ `make start` now defaults to Volto 18. To run the same setup against Volto 17, use:
56
+
57
+ VOLTO_VERSION=17 make
58
+ VOLTO_VERSION=17 make start
59
+
55
60
  ### Add volto-eea-design-system to your Volto project
56
61
 
57
62
  1. Make sure you have a [Plone backend](https://plone.org/download) up-and-running at http://localhost:8080/Plone
@@ -65,30 +70,39 @@ Go to http://localhost:3000
65
70
  * If you already have a volto project, just update `package.json`:
66
71
 
67
72
  ```JSON
68
- "addons": [
69
- "@eeacms/volto-eea-design-system"
70
- ],
71
-
72
73
  "dependencies": {
73
74
  "@eeacms/volto-eea-design-system": "*"
74
75
  }
75
76
  ```
76
77
 
77
- * If not, create one:
78
+ and `volto.config.js`:
79
+
80
+ ```JavaScript
81
+ const addons = ['@eeacms/volto-eea-design-system'];
82
+ ```
83
+
84
+ * If not, create one with Cookieplone, as recommended by the official Plone documentation for Volto 18+:
78
85
 
79
86
  ```
80
- npm install -g yo @plone/generator-volto
81
- yo @plone/volto my-volto-project --canary --addon @eeacms/volto-eea-design-system
82
- cd my-volto-project
87
+ uvx cookieplone project
88
+ cd project-title
83
89
  ```
84
90
 
85
- 1. Install new add-ons and restart Volto:
91
+ 1. Install or update dependencies, then start the project:
86
92
 
87
93
  ```
88
- yarn
89
- yarn start
94
+ make install
90
95
  ```
91
96
 
97
+ For a Cookieplone project, start the backend and frontend in separate terminals:
98
+
99
+ ```
100
+ make backend-start
101
+ make frontend-start
102
+ ```
103
+
104
+ For a legacy Volto 17 project, install the package with `yarn` and restart the frontend as usual.
105
+
92
106
  1. Go to http://localhost:3000
93
107
 
94
108
  1. Happy editing!
@@ -15,7 +15,7 @@ services:
15
15
  args:
16
16
  ADDON_NAME: "${ADDON_NAME}"
17
17
  ADDON_PATH: "${ADDON_PATH}"
18
- VOLTO_VERSION: ${VOLTO_VERSION:-16}
18
+ VOLTO_VERSION: ${VOLTO_VERSION:-18-yarn}
19
19
  ports:
20
20
  - "3000:3000"
21
21
  - "3001:3001"
@@ -19,6 +19,12 @@ const path = require('path');
19
19
  const fs = require('fs');
20
20
  const fg = require('fast-glob');
21
21
 
22
+ const voltoSlatePath = fs.existsSync(
23
+ path.join(__dirname, '../../../node_modules/@plone/volto-slate/src'),
24
+ )
25
+ ? '<rootDir>/node_modules/@plone/volto-slate/src'
26
+ : '<rootDir>/node_modules/@plone/volto/packages/volto-slate/src';
27
+
22
28
  // Get the addon name from the current file path
23
29
  const pathParts = __filename.split(path.sep);
24
30
  const addonsIdx = pathParts.lastIndexOf('addons');
@@ -424,10 +430,8 @@ module.exports = {
424
430
  '@eeacms/countup': '<rootDir>/node_modules/@eeacms/countup/lib',
425
431
  '@eeacms/(.*?)/(.*)$': '<rootDir>/node_modules/@eeacms/$1/src/$2',
426
432
  '@eeacms/(.*?)$': '<rootDir>/node_modules/@eeacms/$1/src',
427
- '@plone/volto-slate$':
428
- '<rootDir>/node_modules/@plone/volto/packages/volto-slate/src',
429
- '@plone/volto-slate/(.*)$':
430
- '<rootDir>/node_modules/@plone/volto/packages/volto-slate/src/$1',
433
+ '@plone/volto-slate$': voltoSlatePath,
434
+ '@plone/volto-slate/(.*)$': `${voltoSlatePath}/$1`,
431
435
  '~/(.*)$': '<rootDir>/src/$1',
432
436
  'load-volto-addons':
433
437
  '<rootDir>/node_modules/@plone/volto/jest-addons-loader.js',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-eea-design-system",
3
- "version": "1.40.3",
3
+ "version": "1.50.1",
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",
@@ -20,10 +20,12 @@ function useFirstVisited(ref, rootMargin = '0px') {
20
20
  observer.observe(ref.current);
21
21
  }
22
22
  return () => {
23
- if (ref?.current) {
23
+ if (ref?.current && typeof observer.unobserve === 'function') {
24
24
  observer.unobserve(ref.current);
25
25
  }
26
- observer.disconnect();
26
+ if (typeof observer.disconnect === 'function') {
27
+ observer.disconnect();
28
+ }
27
29
  };
28
30
  }, [ref, rootMargin, intersected]);
29
31
  return intersected;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import { Default } from './Accordion.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Default component', () => {
7
7
  it('renders correctly and fires keyDown Enter events', () => {
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import Banner from './Banner';
4
4
  import { sharePage, getImageSource } from './Banner';
5
- import '@testing-library/jest-dom/extend-expect';
5
+ import '@testing-library/jest-dom';
6
6
 
7
7
  describe('Banner', () => {
8
8
  it('renders without errors', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default, Inverted, Link, Labeled } from './CallToAction.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Link', () => {
7
7
  it('renders correctly', () => {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom/extend-expect';
3
+ import '@testing-library/jest-dom';
4
4
  import {
5
5
  TeaserCardGrid,
6
6
  CarouselCards,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { GridIconCard, Default } from './IconCard.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('GridIconCard component', () => {
7
7
  it('renders correctly', () => {
@@ -5,7 +5,7 @@ import {
5
5
  DefaultOdd,
6
6
  DefaultEven,
7
7
  } from './RelatedContent.stories';
8
- import '@testing-library/jest-dom/extend-expect';
8
+ import '@testing-library/jest-dom';
9
9
 
10
10
  describe('RelatedContentInTab component', () => {
11
11
  it('renders corectly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import { Default } from './Confirm.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Default component', () => {
7
7
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default } from './ContextNavigation.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  const sidenavItems = [
7
7
  {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { DividerWithContent, Default } from './Divider.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('DividerWithContent component', () => {
7
7
  it('renders correctly', () => {
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default } from './DownloadLabeledIcon.stories';
4
4
  import DownloadLabeledIcon from './DownloadLabeledIcon';
5
- import '@testing-library/jest-dom/extend-expect';
5
+ import '@testing-library/jest-dom';
6
6
 
7
7
  describe('Default component', () => {
8
8
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import Description from './Description';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Description component', () => {
7
7
  it('renders corectly with children', () => {
@@ -5,7 +5,7 @@ import { Router } from 'react-router-dom';
5
5
  import { Default } from './Footer.stories';
6
6
  import { Provider } from 'react-redux';
7
7
  import Footer from './Footer';
8
- import '@testing-library/jest-dom/extend-expect';
8
+ import '@testing-library/jest-dom';
9
9
  import configureStore from 'redux-mock-store';
10
10
 
11
11
  describe('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,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import Social from './Social';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Social component', () => {
7
7
  it('renders corectly with 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
  )}
@@ -8,7 +8,7 @@ import {
8
8
  Primary,
9
9
  Default,
10
10
  } from './Button.stories';
11
- import '@testing-library/jest-dom/extend-expect';
11
+ import '@testing-library/jest-dom';
12
12
 
13
13
  describe('Text component', () => {
14
14
  it('renders a button with label', () => {
@@ -5,7 +5,7 @@ import {
5
5
  optional as Optional,
6
6
  invalid as Invalid,
7
7
  } from './Checkbox.stories';
8
- import '@testing-library/jest-dom/extend-expect';
8
+ import '@testing-library/jest-dom';
9
9
 
10
10
  describe('Single', () => {
11
11
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { ErrorDropdown, Default } from './Dropdown.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('ErrorDropdown component', () => {
7
7
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import { Default, invalid as Invalid, BinaryRadio } from './Radio.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('BinaryRadio component', () => {
7
7
  it('renders corectly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { ErrorTextArea, LabeledTextArea, Default } from './Textarea.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('ErrorTextArea component', () => {
7
7
  it('renders correctly', () => {
@@ -7,7 +7,7 @@ import {
7
7
  LoadingInput,
8
8
  ErrorInput,
9
9
  } from './Input.stories';
10
- import '@testing-library/jest-dom/extend-expect';
10
+ import '@testing-library/jest-dom';
11
11
 
12
12
  describe('ErrorInput component', () => {
13
13
  it('renders corectly', () => {
@@ -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>
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { GridExamples, Basic12 } from './ComponentGrid.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('GridExamples component', () => {
7
7
  it('renders corectly', () => {
@@ -9,15 +9,15 @@ import cx from 'classnames';
9
9
  import { Container, Image, Menu, Grid, Dropdown } from 'semantic-ui-react'; // Dropdown,
10
10
 
11
11
  import closeIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/close-line.svg';
12
- import searchIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/search-line.svg';
12
+ import searchIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/ai-search.svg';
13
13
  import burgerIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/menu-line.svg';
14
14
 
15
15
  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}
@@ -3,7 +3,7 @@ import { createMemoryHistory } from 'history';
3
3
  import { Router } from 'react-router-dom';
4
4
  import { render, fireEvent, act } from '@testing-library/react';
5
5
  import { Default } from './Header.stories';
6
- import '@testing-library/jest-dom/extend-expect';
6
+ import '@testing-library/jest-dom';
7
7
 
8
8
  global.ResizeObserver = require('resize-observer-polyfill');
9
9
 
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { render, screen, fireEvent, waitFor } from '@testing-library/react';
3
- import '@testing-library/jest-dom/extend-expect';
3
+ import '@testing-library/jest-dom';
4
4
 
5
5
  import { createMemoryHistory } from 'history';
6
6
  import { Router } from 'react-router-dom';
7
- import '@testing-library/jest-dom/extend-expect';
7
+ import '@testing-library/jest-dom';
8
8
 
9
9
  // Mock subcomponents that pull in ESM helpers not transformed by Jest here
10
10
  jest.doMock('./HeaderSearchPopUp', () => () => null);
@@ -8,7 +8,8 @@ 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
15
  import { numbersToMenuItemColumns } from '../Header/utils';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { render, screen, fireEvent, waitFor } from '@testing-library/react';
3
- import '@testing-library/jest-dom/extend-expect';
3
+ import '@testing-library/jest-dom';
4
4
  import { createMemoryHistory } from 'history';
5
5
  import { Router } from 'react-router-dom';
6
6
  import HeaderMenuPopUp, { StandardMegaMenuGrid } from './HeaderMenuPopUp';
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/react';
3
3
  import { createMemoryHistory } from 'history';
4
4
  import { Router } from 'react-router-dom';
5
5
  import HeaderSearchPopUp from './HeaderSearchPopUp';
6
- import '@testing-library/jest-dom/extend-expect';
6
+ import '@testing-library/jest-dom';
7
7
 
8
8
  describe('HeaderSearchPopUp', () => {
9
9
  let history;
@@ -120,8 +120,7 @@ Default.args = {
120
120
  fullHeight: true,
121
121
  image: true,
122
122
  quoted: true,
123
- text:
124
- 'Forests are a key part of the solution to combat climate change and biodiversity loss.',
123
+ text: 'Forests are a key part of the solution to combat climate change and biodiversity loss.',
125
124
  textVariant: 'tertiary',
126
125
  textAlign: 'left',
127
126
  metaAlign: 'left',
@@ -158,8 +157,7 @@ Playground.args = {
158
157
  fullHeight: true,
159
158
  image: true,
160
159
  quoted: false,
161
- text:
162
- 'Forests are a key part of the solution to combat climate change and biodiversity loss.',
160
+ text: 'Forests are a key part of the solution to combat climate change and biodiversity loss.',
163
161
  textVariant: 'tertiary',
164
162
  textAlign: 'left',
165
163
  metaAlign: 'left',
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Playground, Default } from './Hero.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Playground component', () => {
7
7
  it('renders correctly', () => {
@@ -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,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default } from './InpageNavigation.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Default component', () => {
7
7
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import InpageNavigation from './InpageNavigation';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('InpageNavigation', () => {
7
7
  let scrollToMock;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { DefaultGroup, DefaultItem, Default } from './Item.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('DefaultGroup Component', () => {
7
7
  it('renders correctly', () => {
@@ -5,7 +5,7 @@ import {
5
5
  DefaultGroup,
6
6
  DefaultItem,
7
7
  } from './ItemGroupWithIcons.stories';
8
- import '@testing-library/jest-dom/extend-expect';
8
+ import '@testing-library/jest-dom';
9
9
 
10
10
  describe('FlexGroup component', () => {
11
11
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default, Basic, Corner, Ribbon } from './Label.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Basic component', () => {
7
7
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default } from './LabeledIconGroup.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Default component', () => {
7
7
  it('renders corectly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import LanguageLabeledIcon from './LanguageLabeledIcon';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  jest.mock('semantic-ui-react', () => {
7
7
  return {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { FullPageLoader, Default } from './Loader.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('FullPageLoader component', () => {
7
7
  it('renders corectly', () => {
@@ -3,7 +3,7 @@ import { render } from '@testing-library/react';
3
3
  import { Logo } from './Logo.stories';
4
4
  import { createMemoryHistory } from 'history';
5
5
  import { Router } from 'react-router-dom';
6
- import '@testing-library/jest-dom/extend-expect';
6
+ import '@testing-library/jest-dom';
7
7
 
8
8
  describe('FluidGrid component', () => {
9
9
  let history;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Playground, Link, Default } from './Image.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Playground component', () => {
7
7
  it('renders correctly', () => {
@@ -7,7 +7,7 @@ import {
7
7
  Success,
8
8
  Default,
9
9
  } from './Message.stories';
10
- import '@testing-library/jest-dom/extend-expect';
10
+ import '@testing-library/jest-dom';
11
11
 
12
12
  describe('Info component', () => {
13
13
  it('renders a Message component', () => {
@@ -1,7 +1,7 @@
1
1
  import { render, fireEvent } from '@testing-library/react';
2
2
  import { Default } from './Modal.stories';
3
3
  import { Button } from 'semantic-ui-react';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Default component', () => {
7
7
  it('renders corectly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import Popup from './Popup';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  jest.mock('@popperjs/core', () => {
7
7
  const originalModule = jest.requireActual('@popperjs/core');
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default, ProgressWithValue, CustomColor } from './Progress.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('CustomColor component', () => {
7
7
  it('renders correctly', () => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Inline } from './Testimonial.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Inline component', () => {
7
7
  it('renders corectly', () => {
@@ -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>
@@ -7,7 +7,7 @@ import {
7
7
  Animation,
8
8
  AnimationGroup,
9
9
  } from './Statistic.stories';
10
- import '@testing-library/jest-dom/extend-expect';
10
+ import '@testing-library/jest-dom';
11
11
 
12
12
  describe('AnimationGroup component', () => {
13
13
  let observe;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { Default } from './Tab.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('It renderes corectly', () => {
7
7
  it('renders corectly', () => {
@@ -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,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent } from '@testing-library/react';
3
3
  import { Default, Sortable, Responsive } from './Table.stories';
4
- import '@testing-library/jest-dom/extend-expect';
4
+ import '@testing-library/jest-dom';
5
5
 
6
6
  describe('Responsive component', () => {
7
7
  it('renders corectly', () => {
@@ -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 }) {
@@ -6,7 +6,7 @@ import {
6
6
  Multiple,
7
7
  MultipleReversed,
8
8
  } from './Timeline.stories';
9
- import '@testing-library/jest-dom/extend-expect';
9
+ import '@testing-library/jest-dom';
10
10
 
11
11
  describe('MultipleReversed component', () => {
12
12
  it('renders corectly', () => {
@@ -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;
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="20px" viewBox="0 -960 960 960" width="20px">
2
+ <path
3
+ d="M740-560q-1 0-8-6-16-61-60.5-105.5T566-732q-2-1-6-8 0-2 6-8 61-16 105.5-60.5T732-914q1-2 8-6 2 0 8 6 17 61 61 105.5T914-748q2 0 6 8 0 1-6 8-61 16-105.5 60.5T748-566q0 2-8 6Zm44 440L532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q29 0 57 6t53 18l-10 87q-22-15-47-23t-53-8q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400q66 0 115.5-42.5T557-555l72 50q-7 22-17.5 41T588-428l252 252-56 56Z"
4
+ fill="rgba(255,255,255,1)">
5
+ </path>
6
+ </svg>
@@ -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 {