@kitconcept/volto-light-theme 7.3.1 → 8.0.0-alpha.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.
package/.changelog.draft CHANGED
@@ -1,7 +1,15 @@
1
- ## 7.3.1 (2025-10-08)
1
+ ## 8.0.0-alpha.0 (2025-10-24)
2
2
 
3
- ### Bugfix
3
+ ### Breaking
4
4
 
5
- - Several fixes. Update to use Volto 18.28.0. @sneridagh
5
+ - Use Volto 19a9. @sneridagh
6
+ Use `@plone/components` 4.0.0 alpha.
7
+ Recommended add-ons are not included by default as `peerDependencies`.
8
+
9
+ Breaking change: Please, check the [upgrade guide](https://volto-light-theme.readthedocs.io/how-to-guides/upgrade-guide.html) for more information. [#693](https://github.com/kitconcept/volto-light-theme/pull/693)
10
+
11
+ ### Feature
12
+
13
+ - To reduce the size of the main VLT repository, snapshots for visual regression testing are now stored in a separate repository (kitconcept/vlt-visual-regression). @sneridagh [#690](https://github.com/kitconcept/volto-light-theme/pull/690)
6
14
 
7
15
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,20 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 8.0.0-alpha.0 (2025-10-24)
12
+
13
+ ### Breaking
14
+
15
+ - Use Volto 19a9. @sneridagh
16
+ Use `@plone/components` 4.0.0 alpha.
17
+ Recommended add-ons are not included by default as `peerDependencies`.
18
+
19
+ Breaking change: Please, check the [upgrade guide](https://volto-light-theme.readthedocs.io/how-to-guides/upgrade-guide.html) for more information. [#693](https://github.com/kitconcept/volto-light-theme/pull/693)
20
+
21
+ ### Feature
22
+
23
+ - To reduce the size of the main VLT repository, snapshots for visual regression testing are now stored in a separate repository (kitconcept/vlt-visual-regression). @sneridagh [#690](https://github.com/kitconcept/volto-light-theme/pull/690)
24
+
11
25
  ## 7.3.1 (2025-10-08)
12
26
 
13
27
  ### Bugfix
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitconcept/volto-light-theme",
3
- "version": "7.3.1",
3
+ "version": "8.0.0-alpha.0",
4
4
  "description": "Volto Light Theme by kitconcept",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -45,7 +45,7 @@
45
45
  "release-it": "^19.0.3",
46
46
  "typescript": "^5.7.3",
47
47
  "vitest": "^3.1.2",
48
- "@plone/types": "1.4.5"
48
+ "@plone/types": "2.0.0-alpha.7"
49
49
  },
50
50
  "dependencies": {
51
51
  "@dnd-kit/core": "6.0.8",
@@ -57,23 +57,10 @@
57
57
  "react-aria-components": "^1.7.0",
58
58
  "react-colorful": "^5.6.1",
59
59
  "uuid": "^11.0.0",
60
- "@plone/components": "^3.0.2"
60
+ "@plone/components": "^4.0.0-alpha.1"
61
61
  },
62
62
  "peerDependencies": {
63
- "@eeacms/volto-accordion-block": "^10.4.6",
64
- "@kitconcept/volto-banner-block": "^1.1.0",
65
- "@kitconcept/volto-bm3-compat": "^1.0.0-alpha.1",
66
- "@kitconcept/volto-button-block": "^4.0.0-alpha.0",
67
- "@kitconcept/volto-carousel-block": "^2.0.0-alpha.3",
68
- "@kitconcept/volto-dsgvo-banner": "^2.5.1",
69
- "@kitconcept/volto-heading-block": "^2.5.0",
70
- "@kitconcept/volto-highlight-block": "^4.4.0",
71
- "@kitconcept/volto-introduction-block": "^1.1.0",
72
- "@kitconcept/volto-logos-block": "^3.0.0-alpha.1",
73
- "@kitconcept/volto-separator-block": "^4.2.1",
74
- "@kitconcept/volto-slider-block": "^6.4.0",
75
- "@plonegovbr/volto-social-media": "^2.0.0-alpha.10",
76
- "classnames": "^2.2.6",
63
+ "classnames": "^2.5.1",
77
64
  "lodash": "4.17.21",
78
65
  "react": "18.2.0",
79
66
  "react-dom": "18.2.0",
@@ -151,7 +151,7 @@ export class Edit extends Component {
151
151
  */
152
152
  render() {
153
153
  const { blocksConfig = config.blocks.blocksConfig } = this.props;
154
- const { editable, type } = this.props;
154
+ const { editable, type, isContainer: parentIsContainer } = this.props;
155
155
  const required = isBoolean(this.props.data.required)
156
156
  ? this.props.data.required
157
157
  : includes(config.blocks.requiredBlocks, type);
@@ -275,6 +275,7 @@ export class Edit extends Component {
275
275
  selected: this.props.selected || this.props.multiSelected,
276
276
  multiSelected: this.props.multiSelected,
277
277
  hovered: this.props.hovered === this.props.id,
278
+ error: !!this.props.blocksErrors?.[this.props.id],
278
279
  },
279
280
  )}
280
281
  ref={this.blockNode}
@@ -291,6 +292,7 @@ export class Edit extends Component {
291
292
  {...this.props}
292
293
  blockNode={this.blockNode}
293
294
  data={this.props.data}
295
+ className={cx({ contained: parentIsContainer })}
294
296
  />
295
297
  </MaybeWrap>
296
298
 
@@ -433,6 +435,7 @@ export class Edit extends Component {
433
435
  selected: this.props.selected || this.props.multiSelected,
434
436
  multiSelected: this.props.multiSelected,
435
437
  hovered: this.props.hovered === this.props.id,
438
+ error: !!this.props.blocksErrors?.[this.props.id],
436
439
  })}
437
440
  // END CUSTOMIZATION
438
441
  style={{ outline: 'none' }}
@@ -21,9 +21,13 @@ import BlockChooserButton from '@plone/volto/components/manage/BlockChooser/Bloc
21
21
  import trashSVG from '@plone/volto/icons/delete.svg';
22
22
 
23
23
  const messages = defineMessages({
24
- delete: {
25
- id: 'delete',
26
- defaultMessage: 'delete',
24
+ delete_block: {
25
+ id: 'delete_block',
26
+ defaultMessage: 'delete {type} block',
27
+ },
28
+ drag_block: {
29
+ id: 'drag_block',
30
+ defaultMessage: 'drag {type} block',
27
31
  },
28
32
  });
29
33
 
@@ -99,6 +103,7 @@ const EditBlockWrapper = (props) => {
99
103
  }}
100
104
  {...draginfo.dragHandleProps}
101
105
  className="drag handle wrapper"
106
+ aria-label={intl.formatMessage(messages.drag_block, { type })}
102
107
  >
103
108
  <Icon name={dragSVG} size="18px" />
104
109
  </div>
@@ -111,7 +116,7 @@ const EditBlockWrapper = (props) => {
111
116
  basic
112
117
  onClick={() => onDeleteBlock(block, true)}
113
118
  className="delete-button"
114
- aria-label={intl.formatMessage(messages.delete)}
119
+ aria-label={intl.formatMessage(messages.delete_block, { type })}
115
120
  >
116
121
  <Icon name={trashSVG} size="18px" />
117
122
  </Button>
@@ -11,7 +11,15 @@ import imageSVG from '@plone/volto/icons/image.svg';
11
11
  import trashSVG from '@plone/volto/icons/delete.svg';
12
12
 
13
13
  const ImageSidebar = (props) => {
14
- const { blocksConfig, data, block, onChangeBlock } = props;
14
+ const {
15
+ blocksConfig,
16
+ blocksErrors,
17
+ data,
18
+ block,
19
+ onChangeBlock,
20
+ navRoot,
21
+ contentType,
22
+ } = props;
15
23
  const intl = useIntl();
16
24
  const schema = ImageSchema({ formData: data, intl });
17
25
  // START CUSTOMIZATION
@@ -26,6 +34,7 @@ const ImageSidebar = (props) => {
26
34
  </h2>
27
35
  <Button.Group>
28
36
  <Button
37
+ type="button"
29
38
  title={intl.formatMessage(messages.clear)}
30
39
  basic
31
40
  disabled={!data.url}
@@ -107,6 +116,9 @@ const ImageSidebar = (props) => {
107
116
  formData={data}
108
117
  block={block}
109
118
  blocksConfig={blocksConfig}
119
+ navRoot={navRoot}
120
+ contentType={contentType}
121
+ errors={blocksErrors}
110
122
  />
111
123
  </>
112
124
  );
@@ -30,6 +30,7 @@ const messages = defineMessages({
30
30
  },
31
31
  });
32
32
 
33
+ // eslint-disable-next-line no-restricted-syntax
33
34
  const DefaultImage = (props) => <img {...props} alt={props.alt || ''} />;
34
35
 
35
36
  const SliderBody = ({
@@ -78,7 +79,7 @@ const SliderBody = ({
78
79
  {!href && isEditMode && (
79
80
  <Message>
80
81
  <div className="grid-teaser-item default">
81
- <img src={imageBlockSVG} alt="" />
82
+ <Image src={imageBlockSVG} alt="" />
82
83
  <p>{intl.formatMessage(messages.PleaseChooseContent)}</p>
83
84
  <div className="toolbar-inner">
84
85
  <Button.Group>
@@ -30,6 +30,7 @@ const messages = defineMessages({
30
30
  },
31
31
  });
32
32
 
33
+ // eslint-disable-next-line no-restricted-syntax
33
34
  const DefaultImage = (props) => <img {...props} alt={props.alt || ''} />;
34
35
 
35
36
  const SliderVariants = ({
@@ -78,7 +79,7 @@ const SliderVariants = ({
78
79
  {!href && isEditMode && (
79
80
  <Message>
80
81
  <div className="grid-teaser-item default">
81
- <img src={imageBlockSVG} alt="" />
82
+ <Image src={imageBlockSVG} alt="" />
82
83
  <p>{intl.formatMessage(messages.PleaseChooseContent)}</p>
83
84
  <div className="toolbar-inner">
84
85
  <Button.Group>
@@ -116,6 +116,7 @@ const SliderView = (props) => {
116
116
  {(data.slides?.length === 0 || !data.slides) && isEditMode && (
117
117
  <Message>
118
118
  <div className="teaser-item default">
119
+ {/* eslint-disable-next-line no-restricted-syntax */}
119
120
  <img src={teaserTemplate} alt="" />
120
121
  <p>{intl.formatMessage(messages.PleaseChooseContent)}</p>
121
122
  </div>
@@ -80,6 +80,7 @@ const RenderBlocks = (props) => {
80
80
  content={content}
81
81
  data={blockData}
82
82
  blocksConfig={blocksConfig}
83
+ isContainer={isContainer}
83
84
  >
84
85
  <Block
85
86
  id={block}
@@ -1,7 +1,8 @@
1
1
  import FormFieldWrapper from '@plone/volto/components/manage/Widgets/FormFieldWrapper';
2
2
  import { HexColorPicker, HexColorInput } from 'react-colorful';
3
3
  import { Button, Dialog, DialogTrigger, Popover } from 'react-aria-components';
4
- import { ColorSwatch, CloseIcon } from '@plone/components';
4
+ import { ColorSwatch } from '@plone/components';
5
+ import { CloseIcon } from '@plone/components/Icons';
5
6
  import ColorContrastChecker from './ColorContrastChecker';
6
7
  import config from '@plone/volto/registry';
7
8
 
@@ -1,76 +0,0 @@
1
- /**
2
- * Language selector component.
3
- * @module components/LanguageSelector/LanguageSelector
4
- */
5
-
6
- import React from 'react';
7
- import PropTypes from 'prop-types';
8
- import { Link } from 'react-router-dom';
9
-
10
- import { useSelector } from 'react-redux';
11
- import cx from 'classnames';
12
- import { find, map } from 'lodash';
13
-
14
- import Helmet from '@plone/volto/helpers/Helmet/Helmet';
15
- import langmap from '@plone/volto/helpers/LanguageMap/LanguageMap';
16
- import { flattenToAppURL } from '@plone/volto/helpers/Url/Url';
17
- import { toReactIntlLang } from '@plone/volto/helpers/Utils/Utils';
18
-
19
- import config from '@plone/volto/registry';
20
-
21
- import { defineMessages, useIntl } from 'react-intl';
22
-
23
- const messages = defineMessages({
24
- switchLanguageTo: {
25
- id: 'Switch to',
26
- defaultMessage: 'Switch to',
27
- },
28
- });
29
-
30
- const LanguageSelector = (props) => {
31
- const intl = useIntl();
32
- const currentLang = useSelector((state) => state.intl.locale);
33
- const translations = useSelector(
34
- (state) => state.content.data?.['@components']?.translations?.items,
35
- );
36
-
37
- const { settings } = config;
38
-
39
- return settings.isMultilingual ? (
40
- <div className="language-selector">
41
- {map(settings.supportedLanguages, (lang) => {
42
- const translation = find(translations, { language: lang });
43
- return (
44
- <Link
45
- aria-label={`${intl.formatMessage(
46
- messages.switchLanguageTo,
47
- )} ${langmap[lang].nativeName.toLowerCase()}`}
48
- className={cx({ selected: toReactIntlLang(lang) === currentLang })}
49
- to={translation ? flattenToAppURL(translation['@id']) : `/${lang}`}
50
- title={langmap[lang].nativeName}
51
- onClick={() => {
52
- props.onClickAction();
53
- }}
54
- key={`language-selector-${lang}`}
55
- >
56
- {langmap[lang].nativeName}
57
- </Link>
58
- );
59
- })}
60
- </div>
61
- ) : (
62
- <Helmet>
63
- <html lang={toReactIntlLang(settings.defaultLanguage)} />
64
- </Helmet>
65
- );
66
- };
67
-
68
- LanguageSelector.propTypes = {
69
- onClickAction: PropTypes.func,
70
- };
71
-
72
- LanguageSelector.defaultProps = {
73
- onClickAction: () => {},
74
- };
75
-
76
- export default LanguageSelector;
@@ -1,11 +0,0 @@
1
- /**
2
- * OVERRIDE LanguageSelector.js
3
- * REASON: This theme uses a custom pre-@plone/components component
4
- * SemanticUI-free located at the components folder.
5
- * To override it, override the @kitconcept/volto-light-theme one instead of
6
- * this one.
7
- */
8
-
9
- import LanguageSelector from '../../../../../components/LanguageSelector/LanguageSelector';
10
-
11
- export default LanguageSelector;