@kitconcept/website 2.0.0-alpha.9 → 2.0.0-beta.10

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,3 +1,12 @@
1
- ## 2.0.0-alpha.9 (2026-02-09)
1
+ ## 2.0.0-beta.10 (2026-09-10)
2
+
3
+ ### Internal
4
+
5
+ - Enforce the mandatory OVERRIDE header on shadowed components in CI (shadow-headers check).
6
+ - Upgrade Volto to 19.4.1 and Volto Light Theme to 8.0.0a32. @sneridagh
7
+
8
+ ### Test
9
+
10
+ - Add a Playwright acceptance test for the Subsite content type: it verifies a Subsite renders its own header logo (distinct from the site root) and that a descendant page inherits it, confirming the logo resolves from the nearest navigation root. @sneridagh [#86](https://gitlab.kitconcept.io/kitconcept/distribution-kitconcept-website/-/work_items/86)
2
11
 
3
12
 
package/.release-it.json CHANGED
@@ -6,15 +6,16 @@
6
6
  "after:bump": [
7
7
  "node -e \"const fs=require('fs');const m=JSON.parse(fs.readFileSync('../../mrs.developer.json','utf8'));if(!m.core||!m.core.tag){console.error('Missing mrs.developer core.tag');process.exit(1);}const p=JSON.parse(fs.readFileSync('package.json','utf8'));p.volto_version=m.core.tag;fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n');\"",
8
8
  "git add package.json",
9
- "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft",
10
- "pipx run towncrier build --yes --version ${version}",
9
+ "uvx towncrier build --draft --yes --version ${version} > .changelog.draft",
10
+ "uvx towncrier build --yes --version ${version}",
11
11
  "cp ../../README.md ./ && cp CHANGELOG.md ../../CHANGELOG.md",
12
- "git add ../../CHANGELOG.md"
12
+ "python3 -c 'import json; data = json.load(open(\"../../package.json\")); data[\"version\"] = \"${version}\"; json.dump(data, open(\"../../package.json\", \"w\"), indent=2)'",
13
+ "git add ../../CHANGELOG.md ../../package.json"
13
14
  ],
14
15
  "after:release": "rm .changelog.draft README.md"
15
16
  },
16
17
  "git": {
17
- "changelog": "pipx run towncrier build --draft --yes --version 0.0.0",
18
+ "changelog": "uvx towncrier build --draft --yes --version 0.0.0",
18
19
  "commit": false,
19
20
  "tag": false
20
21
  },
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## 2.0.0-beta.10 (2026-09-10)
2
+
3
+ ### Internal
4
+
5
+ - Enforce the mandatory OVERRIDE header on shadowed components in CI (shadow-headers check).
6
+ - Upgrade Volto to 19.4.1 and Volto Light Theme to 8.0.0a32. @sneridagh
7
+
8
+ ### Test
9
+
10
+ - Add a Playwright acceptance test for the Subsite content type: it verifies a Subsite renders its own header logo (distinct from the site root) and that a descendant page inherits it, confirming the logo resolves from the nearest navigation root. @sneridagh [#86](https://gitlab.kitconcept.io/kitconcept/distribution-kitconcept-website/-/work_items/86)
11
+
12
+ ## 2.0.0-beta.9 (2026-09-04)
13
+
14
+ ### Feature
15
+
16
+ - Add a Playwright-based acceptance test setup with backend reset, cookie consent, login, content, and accessibility helpers, smoke tests, Makefile targets, and CI integration. @sneridagh
17
+
18
+ ### Internal
19
+
20
+ - Upgrade @plone/volto to version 19.3.1. @ericof [#87](https://gitlab.kitconcept.io/kitconcept/distribution-kitconcept-website/-/work_items/87)
21
+ - Upgrade @kitconcept/volto-contact-block to version 1.0.0-alpha.6. @ericof
22
+ - Upgrade @kitconcept/volto-iframe-block to version 2.4.1. @ericof
23
+
24
+ ### Test
25
+
26
+ - Run block accessibility checks against the retained ``/qa/block`` fixtures and remove checks for fixtures that no longer exist. @sneridagh
27
+
1
28
  # Changelog
2
29
 
3
30
  <!-- You should *NOT* be adding new change log entries to this file.
@@ -6,7 +33,181 @@
6
33
  https://6.docs.plone.org/volto/developer-guidelines/contributing.html#create-a-pull-request
7
34
  -->
8
35
 
9
- <!-- towncrier release notes start -->
36
+ <!-- towncrier release notes start -->
37
+
38
+ ## 2.0.0-beta.8 (2026-07-28)
39
+
40
+ ### Feature
41
+
42
+ - Add control panel for GDPR / DSGVO settings. @davisagli
43
+ - Add tracker, tracker options and privacy URL fields to the DSGVO control panel. @iFlameing
44
+
45
+ ### Internal
46
+
47
+ - Upgrade to @kitconcept/core 2.0.0-beta.7 @ericof [#81](https://gitlab.kitconcept.io/kitconcept/distribution-kitconcept-website/-/work_items/81)
48
+
49
+ ## 2.0.0-beta.7 (2026-07-14)
50
+
51
+ ## 2.0.0-beta.6 (2026-07-10)
52
+
53
+ ### Feature
54
+
55
+ - Upgrade @plone/volto-form-block to version 1.0.0-alpha.3 @ericof [#73](https://github.com/kitconcept/kitconcept-website/issue/73)
56
+
57
+ ### Internal
58
+
59
+ - Upgrade to @kitconcept/core 2.0.0-beta.4 @ericof [#73](https://github.com/kitconcept/kitconcept-website/issue/73)
60
+
61
+ ## 2.0.0-beta.5 (2026-07-06)
62
+
63
+ ### Feature
64
+
65
+ - Upgrade to @kitconcept/core 2.0.0-beta.3 @ericof [#72](https://github.com/kitconcept/kitconcept-website/issue/72)
66
+
67
+ ### Internal
68
+
69
+ - Volto 19.1.5. @sneridagh
70
+
71
+ ## 2.0.0-beta.4 (2026-07-02)
72
+
73
+ ### Feature
74
+
75
+ - Upgraded @kitconcept/core to version 2.0.0-beta.2. @ericof [#70](https://github.com/kitconcept/kitconcept-website/issue/70)
76
+
77
+ ## 2.0.0-beta.3 (2026-06-30)
78
+
79
+ ## 2.0.0-beta.2 (2026-06-25)
80
+
81
+ ### Internal
82
+
83
+ - Fix tests for Plone 6.2.0 @sneridagh [#43](https://github.com/kitconcept/kitconcept-website/issue/43)
84
+
85
+ ## 2.0.0-beta.1 (2026-06-23)
86
+
87
+ ### Feature
88
+
89
+ - Add Person content type styled @iRohitSingh [#41](https://github.com/kitconcept/kitconcept-website/issue/41)
90
+ - Upgrade kitconcept-core to version 2.0.0-beta.1. @ericof [#66](https://github.com/kitconcept/kitconcept-website/issue/66)
91
+
92
+ ## 2.0.0-alpha.27 (2026-06-12)
93
+
94
+ ### Bugfix
95
+
96
+ - Removes the "View" select from the "More" menu in the Toolbar.
97
+ Upgrade to Volto 19.1.4.
98
+ See https://github.com/plone/volto/releases/tag/19.1.4
99
+ See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a30 @sneridagh
100
+ - Update to VLT and Volto 19.1.2. @sneridagh
101
+
102
+ See https://github.com/plone/volto/releases/tag/19.1.2
103
+ See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a29
104
+
105
+ ## 2.0.0-alpha.26 (2026-06-08)
106
+
107
+ ### Bugfix
108
+
109
+ - Fixed accordion does not work with the "Order" tab. Use `@eea/volto-accordion-block` 12.0.0. @Tishasoumya-02
110
+ - Upgrade Volto 19.1.0 @sneridagh
111
+
112
+ ### Internal
113
+
114
+ - Added acceptance tests infrastructure. @sneridagh [#30](https://github.com/kitconcept/kitconcept-website/issue/30)
115
+
116
+ ## 2.0.0-alpha.25 (2026-05-26)
117
+
118
+ ## 2.0.0-alpha.24 (2026-05-15)
119
+
120
+ ### Bugfix
121
+
122
+ - Update to core 2a18 and VLT 2a28. @sneridagh
123
+
124
+ ## 2.0.0-alpha.23 (2026-05-06)
125
+
126
+ ### Internal
127
+
128
+ - Update to @kitconcept/core 2.0.0a18 (no significant frontend changes). @davisagli
129
+
130
+ ## 2.0.0-alpha.22 (2026-05-06)
131
+
132
+ ### Bugfix
133
+
134
+ - Update to k.core 2a16.
135
+ https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a15
136
+ https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a16 @sneridagh
137
+
138
+ ## 2.0.0-alpha.21 (2026-05-04)
139
+
140
+ ### Bugfix
141
+
142
+ - Upgrade to Volto 19a33.
143
+ Language fix. @sneridagh
144
+
145
+ ## 2.0.0-alpha.20 (2026-04-30)
146
+
147
+ ### Bugfix
148
+
149
+ - Update to Volto 19a32.
150
+ https://github.com/plone/volto/releases/tag/19.0.0-alpha.32 @sneridagh
151
+
152
+ ## 2.0.0-alpha.19 (2026-04-30)
153
+
154
+ ### Bugfix
155
+
156
+ - Upgrade Volto 19a31 and VLT 8a24.
157
+ https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a24 @sneridagh
158
+
159
+ ## 2.0.0-alpha.18 (2026-04-22)
160
+
161
+ ## 2.0.0-alpha.17 (2026-04-22)
162
+
163
+ ### Internal
164
+
165
+ - Rerelease of 2a16. @sneridagh
166
+
167
+ ## 2.0.0-alpha.16 (2026-04-21)
168
+
169
+ ## 2.0.0-alpha.15 (2026-04-21)
170
+
171
+ ### Bugfix
172
+
173
+ - Update to volto-light-theme 8.0.0a20 (footer improvements). @davisagli
174
+
175
+ ## 2.0.0-alpha.14 (2026-04-17)
176
+
177
+ ### Bugfix
178
+
179
+ - Update VLT 8a19 and Volto 19a29. @sneridagh
180
+
181
+ ## 2.0.0-alpha.13 (2026-03-31)
182
+
183
+ ### Feature
184
+
185
+ - Add ContactList block. @iFlameing
186
+ - See https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a14 @sneridagh
187
+
188
+ ## 2.0.0-alpha.12 (2026-03-09)
189
+
190
+ ### Feature
191
+
192
+ - Added add-on @plone-collective/volto-image-editor. @sneridagh
193
+
194
+ ## 2.0.0-alpha.11 (2026-03-04)
195
+
196
+ ### Feature
197
+
198
+ - Update to VLT 8a17.
199
+ See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a17 @sneridagh [#vlt8a17](https://github.com/kitconcept/kitconcept-website/issue/vlt8a17)
200
+
201
+ ### Internal
202
+
203
+ - Added command for upgrading dependencies. @davisagli @sneridagh
204
+
205
+ ## 2.0.0-alpha.10 (2026-02-16)
206
+
207
+ ### Bugfix
208
+
209
+ - Update to core 2a10.
210
+ See https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a10 @sneridagh
10
211
 
11
212
  ## 2.0.0-alpha.9 (2026-02-09)
12
213
 
package/README.md CHANGED
@@ -194,4 +194,4 @@ The project is licensed under the MIT license.
194
194
 
195
195
  ## Credits and Acknowledgements 🙏
196
196
 
197
- Crafted with care by **This was generated by [cookiecutter-volto](https://github.com/plone/cookiecutter-volto/frontend_addon) on 2024-05-28 22:07:18**. A special thanks to all contributors and supporters!
197
+ Crafted with care by **This was generated by [cookiecutter-volto](https://github.com/plone/cookiecutter-volto/frontend_addon) on 2024-05-28 22:07:18**. A special thanks to all contributors and supporters!!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitconcept/website",
3
- "version": "2.0.0-alpha.9",
3
+ "version": "2.0.0-beta.10",
4
4
  "description": "A CMS solution for public websites. Created by kitconcept.",
5
5
  "main": "src/index.ts",
6
6
  "license": "MIT",
@@ -26,14 +26,17 @@
26
26
  "react-redux": "^8.1.2"
27
27
  },
28
28
  "devDependencies": {
29
+ "@axe-core/playwright": "^4.12.1",
30
+ "@playwright/test": "^1.60.0",
29
31
  "@types/node": "^24",
30
32
  "@types/react": "^18.3.12",
31
33
  "@types/react-dom": "^18.3.1",
34
+ "playwright": "^1.60.0",
32
35
  "release-it": "^19.0.5",
33
36
  "typescript": "^5.7.3",
34
37
  "vitest": "^3.1.2",
35
- "@plone/scripts": "4.0.0-alpha.4",
36
- "@plone/types": "2.0.0-alpha.14"
38
+ "@plone/scripts": "4.0.1",
39
+ "@plone/types": "2.0.1"
37
40
  },
38
41
  "addons": [
39
42
  "@eeacms/volto-accordion-block",
@@ -41,6 +44,7 @@
41
44
  "@kitconcept/volto-bm3-compat",
42
45
  "@kitconcept/volto-button-block",
43
46
  "@kitconcept/volto-calendar-block",
47
+ "@kitconcept/volto-contact-block",
44
48
  "@kitconcept/volto-carousel-block",
45
49
  "@kitconcept/volto-dsgvo-banner",
46
50
  "@kitconcept/volto-heading-block",
@@ -51,29 +55,32 @@
51
55
  "@kitconcept/volto-slider-block",
52
56
  "@plonegovbr/volto-social-media",
53
57
  "@plone/volto-form-block",
58
+ "@plone-collective/volto-image-editor",
54
59
  "@kitconcept/volto-light-theme",
55
60
  "@kitconcept/core"
56
61
  ],
57
62
  "dependencies": {
58
- "@eeacms/volto-accordion-block": "^10.4.6",
63
+ "@eeacms/volto-accordion-block": "^12.0.0",
59
64
  "@plonegovbr/volto-social-media": "^3.0.0-alpha.0",
60
- "@plone/volto-form-block": "^1.0.0-alpha.0",
61
- "@kitconcept/core": "2.0.0-alpha.9",
62
- "@kitconcept/volto-button-block": "5.0.0-alpha.0",
63
- "@kitconcept/volto-light-theme": "8.0.0-alpha.15",
64
- "@kitconcept/volto-banner-block": "1.1.0",
65
+ "@plone/volto-form-block": "^1.0.0-alpha.3",
66
+ "@plone-collective/volto-image-editor": "1.0.1",
67
+ "@kitconcept/volto-banner-block": "1.2.1",
68
+ "@kitconcept/volto-button-block": "5.0.0-alpha.2",
69
+ "@kitconcept/volto-light-theme": "8.0.0-alpha.32",
70
+ "@kitconcept/core": "2.0.0-beta.7",
65
71
  "@kitconcept/volto-bm3-compat": "1.0.0-alpha.1",
66
- "@kitconcept/volto-carousel-block": "3.0.0-alpha.0",
72
+ "@kitconcept/volto-contact-block": "1.0.0-alpha.6",
67
73
  "@kitconcept/volto-heading-block": "2.5.0",
68
- "@kitconcept/volto-highlight-block": "4.5.1",
69
- "@kitconcept/volto-introduction-block": "1.3.0",
70
- "@kitconcept/volto-logos-block": "4.0.0-alpha.0",
74
+ "@kitconcept/volto-calendar-block": "1.0.0-alpha.9",
75
+ "@kitconcept/volto-carousel-block": "3.0.0-alpha.1",
76
+ "@kitconcept/volto-highlight-block": "5.0.0-alpha.2",
77
+ "@kitconcept/volto-dsgvo-banner": "4.0.0-alpha.3",
78
+ "@kitconcept/volto-introduction-block": "1.4.1",
79
+ "@kitconcept/volto-logos-block": "4.0.0-alpha.1",
71
80
  "@kitconcept/volto-separator-block": "5.0.0-alpha.0",
72
- "@kitconcept/volto-calendar-block": "1.0.0-alpha.6",
73
- "@kitconcept/volto-slider-block": "7.0.0-alpha.0",
74
- "@kitconcept/volto-dsgvo-banner": "3.0.1"
81
+ "@kitconcept/volto-slider-block": "7.0.0-alpha.1"
75
82
  },
76
- "volto_version": "19.0.0-alpha.23",
83
+ "volto_version": "19.4.1",
77
84
  "scripts": {
78
85
  "i18n": "rm -rf build/messages && NODE_ENV=production i18n --addon",
79
86
  "dry-release": "release-it --dry-run",
@@ -0,0 +1,11 @@
1
+ import { defaultStylingSchema } from '@kitconcept/volto-light-theme/components/Blocks/schema';
2
+ import type { JSONSchema, SchemaEnhancerArgs } from '@plone/types';
3
+ export const ContactListStylingSchema = ({
4
+ schema,
5
+ formData,
6
+ intl,
7
+ }: SchemaEnhancerArgs): JSONSchema => {
8
+ defaultStylingSchema({ schema, formData, intl });
9
+
10
+ return schema;
11
+ };
@@ -0,0 +1,272 @@
1
+ /**
2
+ * PersonView view component.
3
+ * @module components/theme/View/PersonView
4
+ */
5
+
6
+ import React from 'react';
7
+ import { FormattedMessage } from 'react-intl';
8
+ import config from '@plone/volto/registry';
9
+ import mobilePhoneSVG from '@plone/volto/icons/mobile.svg';
10
+ import officePhoneSVG from '@plone/volto/icons/headset.svg';
11
+ import mailSVG from '@plone/volto/icons/email.svg';
12
+ import worldSVG from '@plone/volto/icons/world.svg';
13
+ import faxSVG from '@plone/volto/icons/printer.svg';
14
+
15
+ import Icon from '@plone/volto/components/theme/Icon/Icon';
16
+
17
+ interface PersonViewProps {
18
+ content: {
19
+ first_name: string;
20
+ last_name?: string;
21
+ description?: string;
22
+ text?: {
23
+ data: string;
24
+ };
25
+ image?: {
26
+ scales?: {
27
+ preview?: {
28
+ download: string;
29
+ };
30
+ };
31
+ download?: string;
32
+ };
33
+ contact_name?: string;
34
+ contact_email?: string;
35
+ contact_phone?: string;
36
+ contact_website?: string;
37
+ contact_building?: string;
38
+ contact_room?: string;
39
+ office_phone?: string;
40
+ fax?: string;
41
+ address?: string;
42
+ };
43
+ }
44
+
45
+ /**
46
+ * PersonView view component class.
47
+ * @function PersonView
48
+ * @params {object} content Content object.
49
+ * @returns {string} Markup of the component.
50
+ */
51
+ const PersonView: React.FC<PersonViewProps> = ({ content }) => {
52
+ const Container = config.getComponent({ name: 'Container' }).component;
53
+ const Image = config.getComponent({ name: 'Image' }).component;
54
+
55
+ const profile = {
56
+ fullName: content.last_name
57
+ ? `${content.first_name} ${content.last_name}`
58
+ : content.first_name,
59
+ };
60
+
61
+ const contact = {
62
+ officePhone: content.office_phone ?? null,
63
+ mobilePhone: content.contact_phone ?? null,
64
+ fax: content.fax ?? null,
65
+ email: content.contact_email ?? null,
66
+ website: content.contact_website ?? null,
67
+ contactBuilding: content.contact_building ?? null,
68
+ contactRoom: content.contact_room ?? null,
69
+ };
70
+
71
+ return (
72
+ <Container id="page-document" className="view-wrapper person-view">
73
+ <div className="person-profile">
74
+ <header className="profile-header">
75
+ {content.image?.download && (
76
+ <Image
77
+ className="profile-image"
78
+ item={content}
79
+ imageField="image"
80
+ alt={profile.fullName}
81
+ />
82
+ )}
83
+
84
+ <div className="profile-info">
85
+ <h1>{profile.fullName}</h1>
86
+ </div>
87
+ </header>
88
+
89
+ {(contact.officePhone ||
90
+ contact.mobilePhone ||
91
+ contact.fax ||
92
+ contact.email ||
93
+ contact.website) && (
94
+ <div className="contact-wrapper">
95
+ <section aria-labelledby="contact-heading">
96
+ <h2 id="contact-heading">
97
+ <FormattedMessage id="Contact" defaultMessage="Contact" />
98
+ </h2>
99
+ <div className="contact-list">
100
+ {contact.officePhone && (
101
+ <div className="contact-item">
102
+ <Icon
103
+ title={
104
+ <FormattedMessage id="Phone" defaultMessage="Phone" />
105
+ }
106
+ name={officePhoneSVG}
107
+ size="36px"
108
+ />
109
+ <a
110
+ href={`tel:${contact.officePhone}`}
111
+ aria-label="Office phone"
112
+ >
113
+ {contact.officePhone}
114
+ </a>
115
+ </div>
116
+ )}
117
+
118
+ {contact.mobilePhone && (
119
+ <div className="contact-item">
120
+ <Icon
121
+ title={
122
+ <FormattedMessage id="Phone" defaultMessage="Phone" />
123
+ }
124
+ name={mobilePhoneSVG}
125
+ size="36px"
126
+ />
127
+ <a
128
+ href={`tel:${contact.mobilePhone}`}
129
+ aria-label="Mobile phone"
130
+ >
131
+ <span aria-label="Mobile phone">
132
+ {contact.mobilePhone}
133
+ </span>
134
+ </a>
135
+ </div>
136
+ )}
137
+
138
+ {contact.fax && (
139
+ <div className="contact-item">
140
+ <Icon
141
+ title={
142
+ <FormattedMessage id="Phone" defaultMessage="Phone" />
143
+ }
144
+ name={faxSVG}
145
+ size="36px"
146
+ />
147
+ <span aria-label="Fax">{contact.fax}</span>
148
+ </div>
149
+ )}
150
+
151
+ {contact.email && (
152
+ <div className="contact-item">
153
+ <Icon
154
+ title={
155
+ <FormattedMessage id="E-mail" defaultMessage="E-mail" />
156
+ }
157
+ name={mailSVG}
158
+ size="36px"
159
+ />
160
+ <a href={`mailto:${contact.email}`} aria-label="Email">
161
+ {contact.email}
162
+ </a>
163
+ </div>
164
+ )}
165
+
166
+ {contact.website && (
167
+ <div className="contact-item">
168
+ <Icon
169
+ title={
170
+ <FormattedMessage id="Site" defaultMessage="Site" />
171
+ }
172
+ name={worldSVG}
173
+ size="36px"
174
+ />
175
+ <a href={contact.website} aria-label="Website">
176
+ {contact.website}
177
+ </a>
178
+ </div>
179
+ )}
180
+ </div>
181
+ </section>
182
+
183
+ {(content.address ||
184
+ contact.contactBuilding ||
185
+ contact.contactRoom) && (
186
+ <section aria-labelledby="address-heading">
187
+ <h2 id="address-heading">
188
+ <FormattedMessage id="Address" defaultMessage="Address" />
189
+ </h2>
190
+ <address>
191
+ <div className="building-room">
192
+ {contact.contactBuilding && (
193
+ <div>
194
+ <FormattedMessage
195
+ id="Building"
196
+ defaultMessage="Building"
197
+ />{' '}
198
+ {contact.contactBuilding}
199
+ {contact.contactRoom && (
200
+ <span>
201
+ {' '}
202
+ /{' '}
203
+ <FormattedMessage
204
+ id="Room"
205
+ defaultMessage="Room"
206
+ />{' '}
207
+ {contact.contactRoom}
208
+ </span>
209
+ )}
210
+ </div>
211
+ )}
212
+ </div>
213
+
214
+ {content.address && (
215
+ <p className="address">{content.address}</p>
216
+ )}
217
+ </address>
218
+ </section>
219
+ )}
220
+ </div>
221
+ )}
222
+
223
+ {content.text && (
224
+ <section className="bio-section" aria-labelledby="bio-heading">
225
+ <h2 id="bio-heading">
226
+ <FormattedMessage id="Bio" defaultMessage="Bio" />
227
+ </h2>
228
+ <div className="bio-content">
229
+ <p dangerouslySetInnerHTML={{ __html: content.text.data }} />
230
+ </div>
231
+ <svg
232
+ className="bio-section-border bio-section-border--desktop"
233
+ viewBox="0 0 948 63"
234
+ fill="none"
235
+ xmlns="http://www.w3.org/2000/svg"
236
+ >
237
+ <path
238
+ d="M0.582031 1H117.744V60.9434L177.688 1H947.416"
239
+ stroke="black"
240
+ />
241
+ </svg>
242
+ <svg
243
+ className="bio-section-border bio-section-border--tablet"
244
+ width="730"
245
+ height="63"
246
+ viewBox="0 0 730 63"
247
+ fill="none"
248
+ xmlns="http://www.w3.org/2000/svg"
249
+ >
250
+ <path d="M0 1H56.7997V60.9434L116.766 1H730" stroke="black" />
251
+ </svg>
252
+ <svg
253
+ className="bio-section-border bio-section-border--mobile"
254
+ width="335"
255
+ height="63"
256
+ viewBox="0 0 335 63"
257
+ fill="none"
258
+ xmlns="http://www.w3.org/2000/svg"
259
+ >
260
+ <path
261
+ d="M0.652344 1H57.4304V60.9434L117.374 1H334.347"
262
+ stroke="black"
263
+ />
264
+ </svg>
265
+ </section>
266
+ )}
267
+ </div>
268
+ </Container>
269
+ );
270
+ };
271
+
272
+ export default PersonView;
@@ -0,0 +1,26 @@
1
+ import type { ConfigType } from '@plone/registry';
2
+ import type { StyleDefinition } from '@plone/types';
3
+ import { ContactListStylingSchema } from '../components/Blocks/ContactList/schema';
4
+
5
+ declare module '@plone/types' {
6
+ export interface BlocksConfigData {
7
+ contactList: BlockConfigBase;
8
+ }
9
+
10
+ export interface BlockConfigBase {
11
+ themes?: StyleDefinition[];
12
+ templates: {
13
+ [key: string]: {
14
+ label: string;
15
+ template: any;
16
+ };
17
+ };
18
+ }
19
+ }
20
+
21
+ export default function install(config: ConfigType) {
22
+ config.blocks.blocksConfig.contactList.schemaEnhancer =
23
+ ContactListStylingSchema;
24
+
25
+ return config;
26
+ }
@@ -1,9 +1,19 @@
1
1
  import { ConfigType } from '@plone/registry';
2
+ import newsSVG from '@plone/volto/icons/news.svg';
2
3
 
3
4
  export default function install(config: ConfigType) {
4
- config.settings.isMultilingual = false;
5
- config.settings.supportedLanguages = ['en'];
6
- config.settings.defaultLanguage = 'en';
5
+ config.settings.supportedLanguages = ['de', 'en'];
6
+
7
+ // Clear DSGVO add-on settings so it gets them from the `@site` endpoint
8
+ const dsgvoSettings = config.settings.DSGVOBanner as {
9
+ showBanner?: boolean;
10
+ modules?: Array<string>;
11
+ };
12
+ delete dsgvoSettings.showBanner;
13
+ delete dsgvoSettings.modules;
14
+ delete dsgvoSettings.tracker;
15
+ delete dsgvoSettings.privacy_url;
16
+ config.settings.controlPanelsIcons['dsgvo-settings'] = newsSVG;
7
17
 
8
18
  // Volto Light Theme Configuration
9
19
  config.settings.siteHeader = true;
package/src/index.ts CHANGED
@@ -1,8 +1,14 @@
1
1
  import { ConfigType } from '@plone/registry';
2
2
  import installSettings from './config/settings';
3
+ import installBlocks from './config/blocks';
4
+ import PersonView from './components/theme/PersonView';
3
5
 
4
6
  const applyConfig = (config: ConfigType) => {
5
7
  installSettings(config);
8
+ installBlocks(config);
9
+
10
+ config.views.contentTypesViews.Person = PersonView;
11
+
6
12
  return config;
7
13
  };
8
14
 
@@ -0,0 +1,6 @@
1
+ @import 'components/person';
2
+
3
+ // Removes the "View" from the "More" menu in the Toolbar.
4
+ .inline.field.field-wrapper-display-select {
5
+ display: none;
6
+ }
@@ -0,0 +1,214 @@
1
+ #page-document.view-wrapper.person-view {
2
+ .person-profile {
3
+ background: var(--accent-color);
4
+ color: var(--accent-foreground-color);
5
+ }
6
+
7
+ header.profile-header,
8
+ .contact-wrapper,
9
+ .bio-section {
10
+ max-width: var(--default-container-width);
11
+ margin: 0 auto;
12
+ }
13
+ }
14
+
15
+ .profile-header {
16
+ display: flex;
17
+ align-items: center;
18
+ padding-top: $spacing-large;
19
+ padding-bottom: $spacing-xlarge;
20
+ border-top: 1px solid var(--accent-foreground-color);
21
+ margin-bottom: $spacing-large;
22
+ gap: $spacing-small;
23
+ }
24
+
25
+ .profile-image {
26
+ width: 300px;
27
+ height: 300px;
28
+ flex-shrink: 0;
29
+ border-radius: 50%;
30
+ object-fit: cover;
31
+ }
32
+
33
+ .profile-info {
34
+ h1 {
35
+ font-size: 48px;
36
+ font-style: normal;
37
+ font-weight: 700;
38
+ line-height: 60px;
39
+ }
40
+ }
41
+
42
+ .contact-wrapper {
43
+ display: grid;
44
+ padding-bottom: $spacing-large;
45
+ gap: $spacing-large;
46
+ grid-template-columns: 1fr 1fr;
47
+ }
48
+
49
+ .contact-wrapper,
50
+ .bio-section {
51
+ h2 {
52
+ padding-bottom: $spacing-small;
53
+ border-bottom: 1px solid var(--accent-foreground-color);
54
+ margin: 0;
55
+ font-size: 18px;
56
+ font-weight: 700;
57
+ letter-spacing: 1px;
58
+ text-transform: uppercase;
59
+ }
60
+ }
61
+
62
+ .contact-list {
63
+ display: flex;
64
+ flex-direction: column;
65
+ padding-top: $spacing-medium;
66
+ gap: $spacing-small;
67
+
68
+ .contact-item {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 10px;
72
+ svg path {
73
+ fill: var(--accent-foreground-color);
74
+ }
75
+ }
76
+
77
+ a {
78
+ color: inherit;
79
+ text-decoration: underline;
80
+ }
81
+ }
82
+
83
+ address {
84
+ padding-top: $spacing-medium;
85
+ font-style: normal;
86
+
87
+ h3 {
88
+ font-size: 18px;
89
+ font-style: normal;
90
+ font-weight: 700;
91
+ line-height: 24px;
92
+ }
93
+ }
94
+
95
+ .bio-section {
96
+ padding-top: $spacing-large;
97
+ padding-bottom: $spacing-large;
98
+
99
+ .bio-content {
100
+ padding: $spacing-medium 0;
101
+
102
+ p {
103
+ font-size: 24px;
104
+ font-weight: 300;
105
+ line-height: 33px;
106
+ a {
107
+ font: inherit;
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ // Bio section border responsive display
114
+ .bio-section-border--desktop,
115
+ .bio-section-border--tablet,
116
+ .bio-section-border--mobile {
117
+ width: 100%;
118
+ height: auto;
119
+ path {
120
+ stroke: var(--accent-foreground-color);
121
+ }
122
+ }
123
+
124
+ .bio-section-border--desktop {
125
+ display: block;
126
+ }
127
+
128
+ .bio-section-border--tablet,
129
+ .bio-section-border--mobile {
130
+ display: none;
131
+ }
132
+
133
+ @media (max-width: 730px) {
134
+ .bio-section-border--desktop {
135
+ display: none;
136
+ }
137
+ .bio-section-border--tablet {
138
+ display: block;
139
+ }
140
+ }
141
+
142
+ @media (max-width: 980px) {
143
+ .person-profile {
144
+ padding: 0 $spacing-small;
145
+
146
+ .profile-header {
147
+ padding-bottom: $spacing-large;
148
+
149
+ .profile-info {
150
+ h1 {
151
+ margin-top: 25px;
152
+ margin-bottom: $spacing-small;
153
+ font-size: 30px;
154
+ font-weight: $bold;
155
+ line-height: 36px;
156
+ }
157
+ }
158
+ }
159
+
160
+ .profile-image {
161
+ width: 210px;
162
+ height: 210px;
163
+ }
164
+ .contact-wrapper,
165
+ .bio-section {
166
+ padding-bottom: $spacing-large;
167
+
168
+ h2 {
169
+ font-size: 14px;
170
+ line-height: 18px;
171
+ }
172
+ }
173
+ .bio-section {
174
+ padding-top: 30px;
175
+ }
176
+ }
177
+ }
178
+
179
+ @media (max-width: 500px) {
180
+ .bio-section-border--tablet {
181
+ display: none;
182
+ }
183
+ .bio-section-border--mobile {
184
+ display: block;
185
+ }
186
+ }
187
+
188
+ @media (max-width: $largest-mobile-screen) {
189
+ .person-profile {
190
+ .profile-header {
191
+ flex-direction: column;
192
+ align-items: start;
193
+ padding-bottom: $spacing-small;
194
+ gap: $spacing-small;
195
+ text-align: left;
196
+
197
+ .profile-info h1 {
198
+ margin-bottom: $spacing-medium !important;
199
+ }
200
+ }
201
+ .contact-wrapper {
202
+ gap: $spacing-small;
203
+ grid-template-columns: 1fr;
204
+
205
+ section {
206
+ padding-top: $spacing-medium;
207
+ }
208
+ }
209
+ .bio-section {
210
+ padding-top: 0;
211
+ padding-bottom: $spacing-medium;
212
+ }
213
+ }
214
+ }
package/towncrier.toml CHANGED
@@ -5,7 +5,7 @@ title_format = "## {version} ({project_date})"
5
5
  underlines = ["", "", ""]
6
6
  template = "./node_modules/@plone/scripts/templates/towncrier_template.jinja"
7
7
  start_string = "<!-- towncrier release notes start -->\n"
8
- issue_format = "[#{issue}](https://github.com/kitconcept/kitconcept-website/issue/{issue})"
8
+ issue_format = "[#{issue}](https://gitlab.kitconcept.io/kitconcept/distribution-kitconcept-website/-/work_items/{issue})"
9
9
 
10
10
  [[tool.towncrier.type]]
11
11
  directory = "breaking"
package/tsconfig.json CHANGED
@@ -17,7 +17,10 @@
17
17
  "jsx": "react-jsx",
18
18
  "paths": {
19
19
  "@plone/volto/*": ["../../core/packages/volto/src/*"],
20
- "@kitconcept/website/*": ["./src/*"]
20
+ "@kitconcept/website/*": ["./src/*"],
21
+ "@kitconcept/volto-light-theme/*": [
22
+ "./node_modules/@kitconcept/volto-light-theme/src/*"
23
+ ]
21
24
  }
22
25
  },
23
26
  "include": ["src", "src/**/*.js"],