@kitconcept/core 2.0.0-alpha.11 → 2.0.0-alpha.13

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,16 +1,17 @@
1
- ## 2.0.0-alpha.11 (2026-02-26)
1
+ ## 2.0.0-alpha.13 (2026-03-14)
2
+
3
+ ### Breaking
4
+
5
+ - Removed add-ons from frontend, moved to the distributions. @sneridagh
6
+ - Replaced support of `@mbarde/volto-image-crop-widget` with `@plone-collective/volto-image-editor`. @sneridagh
2
7
 
3
8
  ### Feature
4
9
 
5
- - Include `scripts` folder with the files needed to setup a project based on a distribution. @sneridagh [#101](https://github.com/kitconcept/kitconcept-core/issue/101)
6
- - Add controlpanel to export and import content. @iFlameing
10
+ - Improve UX on Export Import control panel and add missing German translations. @danalvrz
7
11
 
8
12
  ### Internal
9
13
 
10
- - Added pt_BR Translations. @humanaice [#105](https://github.com/kitconcept/kitconcept-core/issue/105)
11
- - Remove VLT as a direct dependency of `@kitconcept/core`.
12
- The specific version should be managed in a distribution instead.
13
- This avoids the need to release `@kitconcept/core` just to include a new release of VLT.
14
- @davisagli
14
+ - Use Volto 19a27.
15
+ See https://github.com/plone/volto/releases/tag/19.0.0-alpha.27 @sneridagh
15
16
 
16
17
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,28 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 2.0.0-alpha.13 (2026-03-14)
12
+
13
+ ### Breaking
14
+
15
+ - Removed add-ons from frontend, moved to the distributions. @sneridagh
16
+ - Replaced support of `@mbarde/volto-image-crop-widget` with `@plone-collective/volto-image-editor`. @sneridagh
17
+
18
+ ### Feature
19
+
20
+ - Improve UX on Export Import control panel and add missing German translations. @danalvrz
21
+
22
+ ### Internal
23
+
24
+ - Use Volto 19a27.
25
+ See https://github.com/plone/volto/releases/tag/19.0.0-alpha.27 @sneridagh
26
+
27
+ ## 2.0.0-alpha.12 (2026-02-27)
28
+
29
+ ### Bugfix
30
+
31
+ - Fix content export. @davisagli
32
+
11
33
  ## 2.0.0-alpha.11 (2026-02-26)
12
34
 
13
35
  ### Feature
@@ -22,6 +22,11 @@ msgstr ""
22
22
  msgid "Back"
23
23
  msgstr "Zurück"
24
24
 
25
+ #. Default: "Choose file"
26
+ #: components/Controlpanels/ExportImport
27
+ msgid "Choose file"
28
+ msgstr "Datai auswählen"
29
+
25
30
  #. Default: "Configuration Versions"
26
31
  #: components/Controlpanels/UpgradeControlPanel
27
32
  msgid "Configuration Versions"
@@ -55,7 +60,7 @@ msgstr "Inhalt exportieren"
55
60
  #. Default: "Export Site"
56
61
  #: components/Controlpanels/ExportImport
57
62
  msgid "Export Site"
58
- msgstr "Export-Standort"
63
+ msgstr "Website exportieren"
59
64
 
60
65
  #. Default: "Export successful"
61
66
  #: components/Controlpanels/ExportImport
@@ -65,7 +70,7 @@ msgstr "Export erfolgreich"
65
70
  #. Default: "Exporting…"
66
71
  #: components/Controlpanels/ExportImport
67
72
  msgid "Exporting…"
68
- msgstr ""
73
+ msgstr "Exportieren..."
69
74
 
70
75
  #. Default: "Import Content"
71
76
  #: components/Controlpanels/ExportImport
@@ -75,7 +80,7 @@ msgstr "Inhalt importieren"
75
80
  #. Default: "Import Site"
76
81
  #: components/Controlpanels/ExportImport
77
82
  msgid "Import Site"
78
- msgstr "Importieren Sie die Website"
83
+ msgstr "Website Importieren"
79
84
 
80
85
  #. Default: "Import successful"
81
86
  #: components/Controlpanels/ExportImport
@@ -85,7 +90,7 @@ msgstr "Import erfolgreich"
85
90
  #. Default: "Importing…"
86
91
  #: components/Controlpanels/ExportImport
87
92
  msgid "Importing…"
88
- msgstr ""
93
+ msgstr "Importieren..."
89
94
 
90
95
  #. Default: "Latest available configuration"
91
96
  #: components/Controlpanels/UpgradeControlPanel
@@ -102,6 +107,11 @@ msgstr ""
102
107
  msgid "No addons found"
103
108
  msgstr ""
104
109
 
110
+ #. Default: "No file selected"
111
+ #: components/Controlpanels/ExportImport
112
+ msgid "No file selected"
113
+ msgstr "Keine Datei ausgewählt"
114
+
105
115
  #. Default: "Package Version"
106
116
  #: components/Controlpanels/VersionOverview
107
117
  msgid "Package Version"
@@ -22,6 +22,11 @@ msgstr ""
22
22
  msgid "Back"
23
23
  msgstr ""
24
24
 
25
+ #. Default: "Choose file"
26
+ #: components/Controlpanels/ExportImport
27
+ msgid "Choose file"
28
+ msgstr ""
29
+
25
30
  #. Default: "Configuration Versions"
26
31
  #: components/Controlpanels/UpgradeControlPanel
27
32
  msgid "Configuration Versions"
@@ -102,6 +107,11 @@ msgstr ""
102
107
  msgid "No addons found"
103
108
  msgstr ""
104
109
 
110
+ #. Default: "No file selected"
111
+ #: components/Controlpanels/ExportImport
112
+ msgid "No file selected"
113
+ msgstr ""
114
+
105
115
  #. Default: "Package Version"
106
116
  #: components/Controlpanels/VersionOverview
107
117
  msgid "Package Version"
@@ -29,6 +29,11 @@ msgstr ""
29
29
  msgid "Back"
30
30
  msgstr ""
31
31
 
32
+ #. Default: "Choose file"
33
+ #: components/Controlpanels/ExportImport
34
+ msgid "Choose file"
35
+ msgstr ""
36
+
32
37
  #. Default: "Configuration Versions"
33
38
  #: components/Controlpanels/UpgradeControlPanel
34
39
  msgid "Configuration Versions"
@@ -109,6 +114,11 @@ msgstr ""
109
114
  msgid "No addons found"
110
115
  msgstr ""
111
116
 
117
+ #. Default: "No file selected"
118
+ #: components/Controlpanels/ExportImport
119
+ msgid "No file selected"
120
+ msgstr ""
121
+
112
122
  #. Default: "Package Version"
113
123
  #: components/Controlpanels/VersionOverview
114
124
  msgid "Package Version"
@@ -27,6 +27,11 @@ msgstr "Complementos"
27
27
  msgid "Back"
28
28
  msgstr "Voltar"
29
29
 
30
+ #. Default: "Choose file"
31
+ #: components/Controlpanels/ExportImport
32
+ msgid "Choose file"
33
+ msgstr ""
34
+
30
35
  #. Default: "Configuration Versions"
31
36
  #: components/Controlpanels/UpgradeControlPanel
32
37
  msgid "Configuration Versions"
@@ -107,6 +112,11 @@ msgstr "Mais informações sobre o procedimento de atualização podem ser encon
107
112
  msgid "No addons found"
108
113
  msgstr "Nenhum complemento encontrado"
109
114
 
115
+ #. Default: "No file selected"
116
+ #: components/Controlpanels/ExportImport
117
+ msgid "No file selected"
118
+ msgstr ""
119
+
110
120
  #. Default: "Package Version"
111
121
  #: components/Controlpanels/VersionOverview
112
122
  msgid "Package Version"
package/locales/volto.pot CHANGED
@@ -1,7 +1,7 @@
1
1
  msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: Plone\n"
4
- "POT-Creation-Date: 2026-02-24T11:06:04.840Z\n"
4
+ "POT-Creation-Date: 2026-03-09T12:12:02.110Z\n"
5
5
  "Last-Translator: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
6
6
  "Language-Team: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
7
7
  "Content-Type: text/plain; charset=utf-8\n"
@@ -24,6 +24,11 @@ msgstr ""
24
24
  msgid "Back"
25
25
  msgstr ""
26
26
 
27
+ #. Default: "Choose file"
28
+ #: components/Controlpanels/ExportImport
29
+ msgid "Choose file"
30
+ msgstr ""
31
+
27
32
  #. Default: "Configuration Versions"
28
33
  #: components/Controlpanels/UpgradeControlPanel
29
34
  msgid "Configuration Versions"
@@ -104,6 +109,11 @@ msgstr ""
104
109
  msgid "No addons found"
105
110
  msgstr ""
106
111
 
112
+ #. Default: "No file selected"
113
+ #: components/Controlpanels/ExportImport
114
+ msgid "No file selected"
115
+ msgstr ""
116
+
107
117
  #. Default: "Package Version"
108
118
  #: components/Controlpanels/VersionOverview
109
119
  msgid "Package Version"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitconcept/core",
3
- "version": "2.0.0-alpha.11",
3
+ "version": "2.0.0-alpha.13",
4
4
  "description": "Core setup for kitconcept GmbH distributions built on top of Plone",
5
5
  "main": "src/index.ts",
6
6
  "license": "MIT",
@@ -20,9 +20,7 @@
20
20
  "access": "public"
21
21
  },
22
22
  "dependencies": {
23
- "@mbarde/volto-image-crop-widget": "^0.5.1",
24
- "@plone-collective/volto-authomatic": "3.0.0-alpha.6",
25
- "@plone/components": "^3.0.2"
23
+ "@plone/components": "^4.0.0-alpha.6"
26
24
  },
27
25
  "peerDependencies": {
28
26
  "react": "^18.2.0",
@@ -39,7 +37,7 @@
39
37
  "release-it": "^19.0.5",
40
38
  "typescript": "^5.7.3",
41
39
  "vitest": "^3.1.2",
42
- "@plone/types": "1.4.5"
40
+ "@plone/types": "2.0.0-alpha.14"
43
41
  },
44
42
  "scripts": {
45
43
  "i18n": "rm -rf build/messages && NODE_ENV=production i18n --addon",
@@ -1,14 +1,4 @@
1
- import { POST_IMPORT, POST_EXPORT } from '../../constants/ActionTypes';
2
-
3
- export const exportContent = () => {
4
- return {
5
- type: POST_EXPORT,
6
- request: {
7
- op: 'post',
8
- path: '/@export',
9
- },
10
- };
11
- };
1
+ import { POST_IMPORT } from '../../constants/ActionTypes';
12
2
 
13
3
  export const importContent = (file) => {
14
4
  const formData = new FormData();
@@ -3,7 +3,7 @@
3
3
  * using @plone/components (React Aria based)
4
4
  */
5
5
 
6
- import React, { useState } from 'react';
6
+ import React, { useRef, useState } from 'react';
7
7
  import Toolbar from '@plone/volto/components/manage/Toolbar/Toolbar';
8
8
  import Icon from '@plone/volto/components/theme/Icon/Icon';
9
9
  import { Link } from 'react-router-dom';
@@ -14,14 +14,11 @@ import { Button, Container } from '@plone/components';
14
14
  import { toast } from 'react-toastify';
15
15
  import { createPortal } from 'react-dom';
16
16
 
17
- import { useDispatch } from 'react-redux';
18
- import {
19
- exportContent,
20
- importContent,
21
- } from '../../actions/exportImport/exportImport';
17
+ import { useDispatch, useSelector } from 'react-redux';
18
+ import { importContent } from '../../actions/exportImport/exportImport';
22
19
 
23
- import uploadSVG from '@plone/volto/icons/upload.svg';
24
- import downloadSVG from '@plone/volto/icons/download.svg';
20
+ import importSVG from '../../icons/import.svg';
21
+ import exportSVG from '../../icons/export.svg';
25
22
  import backSVG from '@plone/volto/icons/back.svg';
26
23
 
27
24
  import { defineMessages, useIntl } from 'react-intl';
@@ -75,13 +72,23 @@ const messages = defineMessages({
75
72
  id: 'Importing…',
76
73
  defaultMessage: 'Importing…',
77
74
  },
75
+ chooseFile: {
76
+ id: 'Choose file',
77
+ defaultMessage: 'Choose file',
78
+ },
79
+ noFileSelected: {
80
+ id: 'No file selected',
81
+ defaultMessage: 'No file selected',
82
+ },
78
83
  });
79
84
 
80
85
  const ContentTransfer = ({ pathname }) => {
81
86
  const [file, setFile] = useState(null);
87
+ const fileInputRef = useRef(null);
82
88
  const intl = useIntl();
83
89
  const isClient = useClient();
84
90
  const dispatch = useDispatch();
91
+ const token = useSelector((state) => state.userSession.token);
85
92
 
86
93
  const [exporting, setExporting] = useState(false);
87
94
  const [importing, setImporting] = useState(false);
@@ -90,7 +97,12 @@ const ContentTransfer = ({ pathname }) => {
90
97
  try {
91
98
  setExporting(true);
92
99
 
93
- const res = await dispatch(exportContent());
100
+ const res = await fetch('/++api++/@export', {
101
+ method: 'POST',
102
+ headers: {
103
+ Authorization: `Bearer ${token}`,
104
+ },
105
+ });
94
106
 
95
107
  if (!res.ok) throw new Error('Export failed');
96
108
 
@@ -165,13 +177,15 @@ const ContentTransfer = ({ pathname }) => {
165
177
  <div className="grid-container">
166
178
  <div className="grid-column export">
167
179
  <h2>{intl.formatMessage(messages.exportContent)}</h2>
180
+ <span>
181
+ <Icon name={exportSVG} size="50px" />
182
+ </span>
168
183
 
169
184
  <Button
170
185
  variant="primary"
171
186
  isDisabled={exporting}
172
187
  onPress={handleExport}
173
188
  >
174
- <Icon name={downloadSVG} size="20px" />
175
189
  {exporting ? (
176
190
  <span>{intl.formatMessage(messages.exporting)}</span>
177
191
  ) : (
@@ -182,19 +196,38 @@ const ContentTransfer = ({ pathname }) => {
182
196
 
183
197
  <div className="grid-column import">
184
198
  <h2>{intl.formatMessage(messages.importContent)}</h2>
199
+ <span>
200
+ <Icon name={importSVG} size="50px" />
201
+ </span>
185
202
 
186
- <input
187
- type="file"
188
- accept=".zip"
189
- onChange={(e) => setFile(e.target.files[0])}
190
- />
203
+ <div className="file-input-wrapper">
204
+ <input
205
+ ref={fileInputRef}
206
+ type="file"
207
+ accept=".zip"
208
+ onChange={(e) => setFile(e.target.files[0])}
209
+ hidden
210
+ />
211
+ <Button
212
+ variant="secondary"
213
+ onPress={() => fileInputRef.current?.click()}
214
+ >
215
+ {intl.formatMessage(messages.chooseFile)}
216
+ </Button>
217
+ <span className="file-input-name">
218
+ {file
219
+ ? file.name.length > 48
220
+ ? `${file.name.slice(0, 35)}…${file.name.slice(-12)}`
221
+ : file.name
222
+ : intl.formatMessage(messages.noFileSelected)}
223
+ </span>
224
+ </div>
191
225
 
192
226
  <Button
193
227
  variant="primary"
194
228
  isDisabled={!file || importing}
195
229
  onPress={handleImport}
196
230
  >
197
- <Icon name={uploadSVG} size="20px" />
198
231
  {importing ? (
199
232
  <span>{intl.formatMessage(messages.importing)}</span>
200
233
  ) : (
@@ -3,5 +3,4 @@
3
3
  * @module constants/ActionTypes
4
4
  */
5
5
 
6
- export const POST_EXPORT = 'POST_EXPORT';
7
6
  export const POST_IMPORT = 'POST_IMPORT';
@@ -0,0 +1,11 @@
1
+ <svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_22614_98210)">
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M21.1539 0V3.84615H43.4423L15.9423 31.3269L18.6731 34.0577L46.1539 6.55769V28.8462H50V0H21.1539Z" fill="black"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M34.6154 46.1538H3.84615V15.3846H25V11.5385H0V50H38.4615V25H34.6154V46.1538Z" fill="black"/>
5
+ </g>
6
+ <defs>
7
+ <clipPath id="clip0_22614_98210">
8
+ <rect width="50" height="50" fill="white"/>
9
+ </clipPath>
10
+ </defs>
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_22614_98218)">
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M28.8462 50L28.8462 46.1539L6.55774 46.1538L34.0577 18.6731L31.327 15.9423L3.8462 43.4423L3.8462 21.1538L5.21129e-05 21.1538L4.95911e-05 50L28.8462 50Z" fill="black"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M15.3846 3.84616L46.1538 3.84616L46.1538 34.6154L25 34.6154L25 38.4616L50 38.4616L50 1.20005e-05L11.5385 8.63812e-06L11.5385 25L15.3846 25L15.3846 3.84616Z" fill="black"/>
5
+ </g>
6
+ <defs>
7
+ <clipPath id="clip0_22614_98218">
8
+ <rect width="50" height="50" fill="white" transform="translate(50 50) rotate(-180)"/>
9
+ </clipPath>
10
+ </defs>
11
+ </svg>