@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 +10 -1
- package/.release-it.json +5 -4
- package/CHANGELOG.md +202 -1
- package/README.md +1 -1
- package/package.json +24 -17
- package/src/components/Blocks/ContactList/schema.ts +11 -0
- package/src/components/theme/PersonView.tsx +272 -0
- package/src/config/blocks.ts +26 -0
- package/src/config/settings.ts +13 -3
- package/src/index.ts +6 -0
- package/src/theme/_main.scss +6 -0
- package/src/theme/components/_person.scss +214 -0
- package/towncrier.toml +1 -1
- package/tsconfig.json +4 -1
package/.changelog.draft
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
## 2.0.0-
|
|
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
|
-
"
|
|
10
|
-
"
|
|
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
|
-
"
|
|
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": "
|
|
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-
|
|
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.
|
|
36
|
-
"@plone/types": "2.0.
|
|
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": "^
|
|
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.
|
|
61
|
-
"@
|
|
62
|
-
"@kitconcept/volto-
|
|
63
|
-
"@kitconcept/volto-
|
|
64
|
-
"@kitconcept/volto-
|
|
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-
|
|
72
|
+
"@kitconcept/volto-contact-block": "1.0.0-alpha.6",
|
|
67
73
|
"@kitconcept/volto-heading-block": "2.5.0",
|
|
68
|
-
"@kitconcept/volto-
|
|
69
|
-
"@kitconcept/volto-
|
|
70
|
-
"@kitconcept/volto-
|
|
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-
|
|
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.
|
|
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
|
+
}
|
package/src/config/settings.ts
CHANGED
|
@@ -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.
|
|
5
|
-
|
|
6
|
-
|
|
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,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://
|
|
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"],
|