@plone/volto 19.1.0 → 19.1.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.
package/CHANGELOG.md
CHANGED
|
@@ -17,6 +17,21 @@ myst:
|
|
|
17
17
|
|
|
18
18
|
<!-- towncrier release notes start -->
|
|
19
19
|
|
|
20
|
+
## 19.1.2 (2026-06-08)
|
|
21
|
+
|
|
22
|
+
### Bugfix
|
|
23
|
+
|
|
24
|
+
- Increase home icon size to comply with WCAG 2.2 accessibility. @polyester [#8297](https://github.com/plone/volto/issues/8297)
|
|
25
|
+
- Fix layout regression in `FormFieldWrapper` where the empty `aria-live` container was acting as an extra flex item, breaking widget layouts like `SizeWidget`. @Wagner3UB [#8319](https://github.com/plone/volto/issues/8319)
|
|
26
|
+
- Fix "Cannot POST" error on login form if it was submitted before hydration
|
|
27
|
+
finished, by disabling the submit button until then. @davisagli
|
|
28
|
+
|
|
29
|
+
## 19.1.1 (2026-05-28)
|
|
30
|
+
|
|
31
|
+
### Internal
|
|
32
|
+
|
|
33
|
+
- Update devDependency: `@testing-library/react` 16.3.2. @wesleybl [#8294](https://github.com/plone/volto/issues/8294)
|
|
34
|
+
|
|
20
35
|
## 19.1.0 (2026-05-28)
|
|
21
36
|
|
|
22
37
|
### Feature
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
}
|
|
10
10
|
],
|
|
11
11
|
"license": "MIT",
|
|
12
|
-
"version": "19.1.
|
|
12
|
+
"version": "19.1.2",
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "git@github.com:plone/volto.git"
|
|
@@ -177,10 +177,10 @@
|
|
|
177
177
|
"url": "^0.11.3",
|
|
178
178
|
"use-deep-compare-effect": "1.8.1",
|
|
179
179
|
"uuid": "^14.0.0",
|
|
180
|
-
"@plone/components": "4.
|
|
180
|
+
"@plone/components": "4.2.0",
|
|
181
181
|
"@plone/registry": "3.0.1",
|
|
182
182
|
"@plone/scripts": "4.0.1",
|
|
183
|
-
"@plone/volto-slate": "19.0.
|
|
183
|
+
"@plone/volto-slate": "19.0.2"
|
|
184
184
|
},
|
|
185
185
|
"devDependencies": {
|
|
186
186
|
"@babel/core": "^7.28.5",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"@storybook/theming": "^8.0.4",
|
|
206
206
|
"@testing-library/cypress": "10.1.0",
|
|
207
207
|
"@testing-library/jest-dom": "^6.9.1",
|
|
208
|
-
"@testing-library/react": "
|
|
208
|
+
"@testing-library/react": "^16.3.2",
|
|
209
209
|
"@testing-library/react-hooks": "8.0.1",
|
|
210
210
|
"@types/history": "^4.7.11",
|
|
211
211
|
"@types/loadable__component": "^5.13.10",
|
|
@@ -288,11 +288,11 @@
|
|
|
288
288
|
"webpack-bundle-analyzer": "4.10.1",
|
|
289
289
|
"webpack-dev-server": "^5.2.4",
|
|
290
290
|
"webpack-node-externals": "3.0.0",
|
|
291
|
-
"@plone/razzle": "1.0.0",
|
|
292
291
|
"@plone/babel-preset-razzle": "^1.0.1",
|
|
292
|
+
"@plone/types": "2.0.0",
|
|
293
293
|
"@plone/razzle-dev-utils": "1.0.0",
|
|
294
294
|
"@plone/volto-coresandbox": "1.0.0",
|
|
295
|
-
"@plone/
|
|
295
|
+
"@plone/razzle": "1.0.0"
|
|
296
296
|
},
|
|
297
297
|
"scripts": {
|
|
298
298
|
"analyze": "BUNDLE_ANALYZE=true razzle build",
|
|
@@ -36,13 +36,13 @@ config.blocks.blocksConfig = {
|
|
|
36
36
|
|
|
37
37
|
describe('Image View Component', () => {
|
|
38
38
|
test('renders a view image component with a local image', () => {
|
|
39
|
-
const {
|
|
40
|
-
const img =
|
|
39
|
+
const { container } = render(<View data={{ url: '/image.jpg' }} />);
|
|
40
|
+
const img = container.querySelector('img');
|
|
41
41
|
expect(img).toHaveAttribute('src', '/image.jpg/@@images/image');
|
|
42
42
|
expect(img).toHaveAttribute('loading', 'lazy');
|
|
43
43
|
});
|
|
44
44
|
test('renders a view image component with a local image with a link', () => {
|
|
45
|
-
const { container
|
|
45
|
+
const { container } = render(
|
|
46
46
|
<Provider store={store}>
|
|
47
47
|
<MemoryRouter>
|
|
48
48
|
<View
|
|
@@ -51,22 +51,22 @@ describe('Image View Component', () => {
|
|
|
51
51
|
</MemoryRouter>
|
|
52
52
|
</Provider>,
|
|
53
53
|
);
|
|
54
|
-
const img =
|
|
54
|
+
const img = container.querySelector('img');
|
|
55
55
|
const a = container.querySelector('a');
|
|
56
56
|
expect(img).toHaveAttribute('src', '/image.jpg/@@images/image');
|
|
57
57
|
expect(a).toHaveAttribute('href', '/front-page');
|
|
58
58
|
});
|
|
59
59
|
test('renders a view image component with an external image', () => {
|
|
60
|
-
const {
|
|
60
|
+
const { container } = render(
|
|
61
61
|
<Provider store={store}>
|
|
62
62
|
<View data={{ url: 'https://plone.org/logo.jpg' }} />
|
|
63
63
|
</Provider>,
|
|
64
64
|
);
|
|
65
|
-
const img =
|
|
65
|
+
const img = container.querySelector('img');
|
|
66
66
|
expect(img).toHaveAttribute('src', 'https://plone.org/logo.jpg');
|
|
67
67
|
});
|
|
68
68
|
test('renders a view image component with an external image with a link', () => {
|
|
69
|
-
const { container
|
|
69
|
+
const { container } = render(
|
|
70
70
|
<Provider store={store}>
|
|
71
71
|
<View
|
|
72
72
|
data={{
|
|
@@ -76,7 +76,7 @@ describe('Image View Component', () => {
|
|
|
76
76
|
/>
|
|
77
77
|
</Provider>,
|
|
78
78
|
);
|
|
79
|
-
const img =
|
|
79
|
+
const img = container.querySelector('img');
|
|
80
80
|
const a = container.querySelector('a');
|
|
81
81
|
expect(img).toHaveAttribute('src', 'https://plone.org/logo.jpg');
|
|
82
82
|
expect(a).toHaveAttribute('href', 'http://front-page');
|
|
@@ -61,7 +61,11 @@ const FormFieldWrapper = ({
|
|
|
61
61
|
<>
|
|
62
62
|
{children}
|
|
63
63
|
|
|
64
|
-
<div
|
|
64
|
+
<div
|
|
65
|
+
aria-live="polite"
|
|
66
|
+
aria-atomic="true"
|
|
67
|
+
className={cx({ 'visually-hidden': !error?.length })}
|
|
68
|
+
>
|
|
65
69
|
{map(error, (message) => (
|
|
66
70
|
<Label key={message} basic color="red" className="form-error-label">
|
|
67
71
|
{message}
|
|
@@ -67,7 +67,7 @@ const BreadcrumbsComponent = ({ pathname }) => {
|
|
|
67
67
|
className="section"
|
|
68
68
|
title={intl.formatMessage(messages.home)}
|
|
69
69
|
>
|
|
70
|
-
<Icon name={homeSVG} size="
|
|
70
|
+
<Icon name={homeSVG} size="24px" />
|
|
71
71
|
</Link>
|
|
72
72
|
{items.map((item, index, items) => [
|
|
73
73
|
<Breadcrumb.Divider key={`divider-${item.url}`} />,
|
|
@@ -14,6 +14,7 @@ import qs from 'query-string';
|
|
|
14
14
|
|
|
15
15
|
import Helmet from '@plone/volto/helpers/Helmet/Helmet';
|
|
16
16
|
import { usePrevious } from '@plone/volto/helpers/Utils/usePrevious';
|
|
17
|
+
import { useClient } from '@plone/volto/hooks/client/useClient';
|
|
17
18
|
import config from '@plone/volto/registry';
|
|
18
19
|
import Icon from '@plone/volto/components/theme/Icon/Icon';
|
|
19
20
|
import {
|
|
@@ -84,6 +85,7 @@ const Login = (props) => {
|
|
|
84
85
|
location.pathname.replace(/\/[^/]*\/?$/, '') ||
|
|
85
86
|
'/';
|
|
86
87
|
const previousToken = usePrevious(token);
|
|
88
|
+
const isClient = useClient();
|
|
87
89
|
|
|
88
90
|
useEffect(() => {
|
|
89
91
|
if (location?.state?.isLogout) {
|
|
@@ -252,6 +254,7 @@ const Login = (props) => {
|
|
|
252
254
|
aria-label={intl.formatMessage(messages.login)}
|
|
253
255
|
title={intl.formatMessage(messages.login)}
|
|
254
256
|
loading={loading}
|
|
257
|
+
disabled={!isClient}
|
|
255
258
|
>
|
|
256
259
|
<Icon className="circled" name={aheadSVG} size="30px" />
|
|
257
260
|
</Button>
|