@kitconcept/website 2.0.0-alpha.8 → 2.0.0-beta.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.
- package/.changelog.draft +4 -3
- package/.release-it.json +7 -4
- package/CHANGELOG.md +129 -0
- package/package.json +20 -15
- 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 +1 -3
- package/src/index.ts +6 -0
- package/src/theme/_main.scss +6 -0
- package/src/theme/components/_person.scss +214 -0
- package/tsconfig.json +4 -1
package/.changelog.draft
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
## 2.0.0-
|
|
1
|
+
## 2.0.0-beta.1 (2026-06-23)
|
|
2
2
|
|
|
3
|
-
###
|
|
3
|
+
### Feature
|
|
4
4
|
|
|
5
|
-
-
|
|
5
|
+
- Add Person content type styled @iRohitSingh [#41](https://github.com/kitconcept/kitconcept-website/issue/41)
|
|
6
|
+
- Upgrade kitconcept-core to version 2.0.0-beta.1. @ericof [#66](https://github.com/kitconcept/kitconcept-website/issue/66)
|
|
6
7
|
|
|
7
8
|
|
package/.release-it.json
CHANGED
|
@@ -4,15 +4,18 @@
|
|
|
4
4
|
},
|
|
5
5
|
"hooks": {
|
|
6
6
|
"after:bump": [
|
|
7
|
-
"
|
|
8
|
-
"
|
|
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
|
+
"git add package.json",
|
|
9
|
+
"uvx towncrier build --draft --yes --version ${version} > .changelog.draft",
|
|
10
|
+
"uvx towncrier build --yes --version ${version}",
|
|
9
11
|
"cp ../../README.md ./ && cp CHANGELOG.md ../../CHANGELOG.md",
|
|
10
|
-
"
|
|
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"
|
|
11
14
|
],
|
|
12
15
|
"after:release": "rm .changelog.draft README.md"
|
|
13
16
|
},
|
|
14
17
|
"git": {
|
|
15
|
-
"changelog": "
|
|
18
|
+
"changelog": "uvx towncrier build --draft --yes --version 0.0.0",
|
|
16
19
|
"commit": false,
|
|
17
20
|
"tag": false
|
|
18
21
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,135 @@
|
|
|
8
8
|
|
|
9
9
|
<!-- towncrier release notes start -->
|
|
10
10
|
|
|
11
|
+
## 2.0.0-beta.1 (2026-06-23)
|
|
12
|
+
|
|
13
|
+
### Feature
|
|
14
|
+
|
|
15
|
+
- Add Person content type styled @iRohitSingh [#41](https://github.com/kitconcept/kitconcept-website/issue/41)
|
|
16
|
+
- Upgrade kitconcept-core to version 2.0.0-beta.1. @ericof [#66](https://github.com/kitconcept/kitconcept-website/issue/66)
|
|
17
|
+
|
|
18
|
+
## 2.0.0-alpha.27 (2026-06-12)
|
|
19
|
+
|
|
20
|
+
### Bugfix
|
|
21
|
+
|
|
22
|
+
- Removes the "View" select from the "More" menu in the Toolbar.
|
|
23
|
+
Upgrade to Volto 19.1.4.
|
|
24
|
+
See https://github.com/plone/volto/releases/tag/19.1.4
|
|
25
|
+
See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a30 @sneridagh
|
|
26
|
+
- Update to VLT and Volto 19.1.2. @sneridagh
|
|
27
|
+
|
|
28
|
+
See https://github.com/plone/volto/releases/tag/19.1.2
|
|
29
|
+
See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a29
|
|
30
|
+
|
|
31
|
+
## 2.0.0-alpha.26 (2026-06-08)
|
|
32
|
+
|
|
33
|
+
### Bugfix
|
|
34
|
+
|
|
35
|
+
- Fixed accordion does not work with the "Order" tab. Use `@eea/volto-accordion-block` 12.0.0. @Tishasoumya-02
|
|
36
|
+
- Upgrade Volto 19.1.0 @sneridagh
|
|
37
|
+
|
|
38
|
+
### Internal
|
|
39
|
+
|
|
40
|
+
- Added acceptance tests infrastructure. @sneridagh [#30](https://github.com/kitconcept/kitconcept-website/issue/30)
|
|
41
|
+
|
|
42
|
+
## 2.0.0-alpha.25 (2026-05-26)
|
|
43
|
+
|
|
44
|
+
## 2.0.0-alpha.24 (2026-05-15)
|
|
45
|
+
|
|
46
|
+
### Bugfix
|
|
47
|
+
|
|
48
|
+
- Update to core 2a18 and VLT 2a28. @sneridagh
|
|
49
|
+
|
|
50
|
+
## 2.0.0-alpha.23 (2026-05-06)
|
|
51
|
+
|
|
52
|
+
### Internal
|
|
53
|
+
|
|
54
|
+
- Update to @kitconcept/core 2.0.0a18 (no significant frontend changes). @davisagli
|
|
55
|
+
|
|
56
|
+
## 2.0.0-alpha.22 (2026-05-06)
|
|
57
|
+
|
|
58
|
+
### Bugfix
|
|
59
|
+
|
|
60
|
+
- Update to k.core 2a16.
|
|
61
|
+
https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a15
|
|
62
|
+
https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a16 @sneridagh
|
|
63
|
+
|
|
64
|
+
## 2.0.0-alpha.21 (2026-05-04)
|
|
65
|
+
|
|
66
|
+
### Bugfix
|
|
67
|
+
|
|
68
|
+
- Upgrade to Volto 19a33.
|
|
69
|
+
Language fix. @sneridagh
|
|
70
|
+
|
|
71
|
+
## 2.0.0-alpha.20 (2026-04-30)
|
|
72
|
+
|
|
73
|
+
### Bugfix
|
|
74
|
+
|
|
75
|
+
- Update to Volto 19a32.
|
|
76
|
+
https://github.com/plone/volto/releases/tag/19.0.0-alpha.32 @sneridagh
|
|
77
|
+
|
|
78
|
+
## 2.0.0-alpha.19 (2026-04-30)
|
|
79
|
+
|
|
80
|
+
### Bugfix
|
|
81
|
+
|
|
82
|
+
- Upgrade Volto 19a31 and VLT 8a24.
|
|
83
|
+
https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a24 @sneridagh
|
|
84
|
+
|
|
85
|
+
## 2.0.0-alpha.18 (2026-04-22)
|
|
86
|
+
|
|
87
|
+
## 2.0.0-alpha.17 (2026-04-22)
|
|
88
|
+
|
|
89
|
+
### Internal
|
|
90
|
+
|
|
91
|
+
- Rerelease of 2a16. @sneridagh
|
|
92
|
+
|
|
93
|
+
## 2.0.0-alpha.16 (2026-04-21)
|
|
94
|
+
|
|
95
|
+
## 2.0.0-alpha.15 (2026-04-21)
|
|
96
|
+
|
|
97
|
+
### Bugfix
|
|
98
|
+
|
|
99
|
+
- Update to volto-light-theme 8.0.0a20 (footer improvements). @davisagli
|
|
100
|
+
|
|
101
|
+
## 2.0.0-alpha.14 (2026-04-17)
|
|
102
|
+
|
|
103
|
+
### Bugfix
|
|
104
|
+
|
|
105
|
+
- Update VLT 8a19 and Volto 19a29. @sneridagh
|
|
106
|
+
|
|
107
|
+
## 2.0.0-alpha.13 (2026-03-31)
|
|
108
|
+
|
|
109
|
+
### Feature
|
|
110
|
+
|
|
111
|
+
- Add ContactList block. @iFlameing
|
|
112
|
+
- See https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a14 @sneridagh
|
|
113
|
+
|
|
114
|
+
## 2.0.0-alpha.12 (2026-03-09)
|
|
115
|
+
|
|
116
|
+
### Feature
|
|
117
|
+
|
|
118
|
+
- Added add-on @plone-collective/volto-image-editor. @sneridagh
|
|
119
|
+
|
|
120
|
+
## 2.0.0-alpha.11 (2026-03-04)
|
|
121
|
+
|
|
122
|
+
### Feature
|
|
123
|
+
|
|
124
|
+
- Update to VLT 8a17.
|
|
125
|
+
See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a17 @sneridagh [#vlt8a17](https://github.com/kitconcept/kitconcept-website/issue/vlt8a17)
|
|
126
|
+
|
|
127
|
+
### Internal
|
|
128
|
+
|
|
129
|
+
- Added command for upgrading dependencies. @davisagli @sneridagh
|
|
130
|
+
|
|
131
|
+
## 2.0.0-alpha.10 (2026-02-16)
|
|
132
|
+
|
|
133
|
+
### Bugfix
|
|
134
|
+
|
|
135
|
+
- Update to core 2a10.
|
|
136
|
+
See https://github.com/kitconcept/kitconcept-core/releases/tag/2.0.0a10 @sneridagh
|
|
137
|
+
|
|
138
|
+
## 2.0.0-alpha.9 (2026-02-09)
|
|
139
|
+
|
|
11
140
|
## 2.0.0-alpha.8 (2026-02-06)
|
|
12
141
|
|
|
13
142
|
### Bugfix
|
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.1",
|
|
4
4
|
"description": "A CMS solution for public websites. Created by kitconcept.",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"release-it": "^19.0.5",
|
|
33
33
|
"typescript": "^5.7.3",
|
|
34
34
|
"vitest": "^3.1.2",
|
|
35
|
-
"@plone/scripts": "4.0.
|
|
36
|
-
"@plone/types": "2.0.0
|
|
35
|
+
"@plone/scripts": "4.0.1",
|
|
36
|
+
"@plone/types": "2.0.0"
|
|
37
37
|
},
|
|
38
38
|
"addons": [
|
|
39
39
|
"@eeacms/volto-accordion-block",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"@kitconcept/volto-bm3-compat",
|
|
42
42
|
"@kitconcept/volto-button-block",
|
|
43
43
|
"@kitconcept/volto-calendar-block",
|
|
44
|
+
"@kitconcept/volto-contact-block",
|
|
44
45
|
"@kitconcept/volto-carousel-block",
|
|
45
46
|
"@kitconcept/volto-dsgvo-banner",
|
|
46
47
|
"@kitconcept/volto-heading-block",
|
|
@@ -51,28 +52,32 @@
|
|
|
51
52
|
"@kitconcept/volto-slider-block",
|
|
52
53
|
"@plonegovbr/volto-social-media",
|
|
53
54
|
"@plone/volto-form-block",
|
|
55
|
+
"@plone-collective/volto-image-editor",
|
|
54
56
|
"@kitconcept/volto-light-theme",
|
|
55
57
|
"@kitconcept/core"
|
|
56
58
|
],
|
|
57
59
|
"dependencies": {
|
|
58
|
-
"@eeacms/volto-accordion-block": "^
|
|
60
|
+
"@eeacms/volto-accordion-block": "^12.0.0",
|
|
59
61
|
"@plonegovbr/volto-social-media": "^3.0.0-alpha.0",
|
|
60
62
|
"@plone/volto-form-block": "^1.0.0-alpha.0",
|
|
61
|
-
"@
|
|
62
|
-
"@kitconcept/core": "2.0.0-
|
|
63
|
-
"@kitconcept/volto-
|
|
64
|
-
"@kitconcept/volto-calendar-block": "1.0.0-alpha.6",
|
|
65
|
-
"@kitconcept/volto-banner-block": "1.1.0",
|
|
66
|
-
"@kitconcept/volto-carousel-block": "3.0.0-alpha.0",
|
|
63
|
+
"@plone-collective/volto-image-editor": "1.0.1",
|
|
64
|
+
"@kitconcept/core": "2.0.0-beta.1",
|
|
65
|
+
"@kitconcept/volto-light-theme": "8.0.0-alpha.30",
|
|
67
66
|
"@kitconcept/volto-bm3-compat": "1.0.0-alpha.1",
|
|
67
|
+
"@kitconcept/volto-contact-block": "1.0.0-alpha.5",
|
|
68
|
+
"@kitconcept/volto-calendar-block": "1.0.0-alpha.9",
|
|
69
|
+
"@kitconcept/volto-banner-block": "1.2.0",
|
|
70
|
+
"@kitconcept/volto-dsgvo-banner": "4.0.0-alpha.1",
|
|
68
71
|
"@kitconcept/volto-heading-block": "2.5.0",
|
|
69
|
-
"@kitconcept/volto-
|
|
70
|
-
"@kitconcept/volto-
|
|
71
|
-
"@kitconcept/volto-
|
|
72
|
-
"@kitconcept/volto-
|
|
72
|
+
"@kitconcept/volto-button-block": "5.0.0-alpha.2",
|
|
73
|
+
"@kitconcept/volto-carousel-block": "3.0.0-alpha.1",
|
|
74
|
+
"@kitconcept/volto-introduction-block": "1.4.1",
|
|
75
|
+
"@kitconcept/volto-highlight-block": "5.0.0-alpha.0",
|
|
76
|
+
"@kitconcept/volto-logos-block": "4.0.0-alpha.1",
|
|
73
77
|
"@kitconcept/volto-separator-block": "5.0.0-alpha.0",
|
|
74
|
-
"@kitconcept/volto-
|
|
78
|
+
"@kitconcept/volto-slider-block": "7.0.0-alpha.1"
|
|
75
79
|
},
|
|
80
|
+
"volto_version": "19.1.4",
|
|
76
81
|
"scripts": {
|
|
77
82
|
"i18n": "rm -rf build/messages && NODE_ENV=production i18n --addon",
|
|
78
83
|
"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,7 @@
|
|
|
1
1
|
import { ConfigType } from '@plone/registry';
|
|
2
2
|
|
|
3
3
|
export default function install(config: ConfigType) {
|
|
4
|
-
config.settings.
|
|
5
|
-
config.settings.supportedLanguages = ['en'];
|
|
6
|
-
config.settings.defaultLanguage = 'en';
|
|
4
|
+
config.settings.supportedLanguages = ['de', 'en'];
|
|
7
5
|
|
|
8
6
|
// Volto Light Theme Configuration
|
|
9
7
|
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/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"],
|