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

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,11 +1,16 @@
1
- ## 2.0.0-alpha.1 (2025-11-11)
1
+ ## 2.0.0-alpha.11 (2026-02-26)
2
2
 
3
3
  ### Feature
4
4
 
5
- - New styleDefinitions registry powered. Improved ColorSwatch component. @sneridagh [#vlt8a5](https://github.com/kitconcept/kitconcept-core/issue/vlt8a5)
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
6
7
 
7
- ### Bugfix
8
+ ### Internal
8
9
 
9
- - Fixed intranet header. Fixed sticky menu. @sneridagh [#vlt8a5](https://github.com/kitconcept/kitconcept-core/issue/vlt8a5)
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
10
15
 
11
16
 
package/CHANGELOG.md CHANGED
@@ -8,6 +8,77 @@
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## 2.0.0-alpha.11 (2026-02-26)
12
+
13
+ ### Feature
14
+
15
+ - 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)
16
+ - Add controlpanel to export and import content. @iFlameing
17
+
18
+ ### Internal
19
+
20
+ - Added pt_BR Translations. @humanaice [#105](https://github.com/kitconcept/kitconcept-core/issue/105)
21
+ - Remove VLT as a direct dependency of `@kitconcept/core`.
22
+ The specific version should be managed in a distribution instead.
23
+ This avoids the need to release `@kitconcept/core` just to include a new release of VLT.
24
+ @davisagli
25
+
26
+ ## 2.0.0-alpha.10 (2026-02-16)
27
+
28
+ ### Bugfix
29
+
30
+ - Volto 19a25 VLT 8a16.
31
+ See https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a16 @sneridagh
32
+
33
+ ## 2.0.0-alpha.9 (2026-01-26)
34
+
35
+ ### Internal
36
+
37
+ - Update to VLT 8a9: https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a13 @sneridagh
38
+
39
+ ## 2.0.0-alpha.8 (2026-01-15)
40
+
41
+ ### Internal
42
+
43
+ - Remove `Contents` customization for the D&D files, since it's core now. @sneridagh
44
+
45
+ ## 2.0.0-alpha.7 (2026-01-14)
46
+
47
+ ### Bugfix
48
+
49
+ - Fixed sticky menu cut off at the bottom on smaller screens @iRohitSingh
50
+ Fixed double navigation in cards that contains inner links in its body. @sneridagh
51
+ Fixed rearrangement of files in drag-and-drop of folderish content. @Tishasoumya-02
52
+
53
+ ## 2.0.0-alpha.6 (2025-12-11)
54
+
55
+ ## 2.0.0-alpha.5 (2025-12-08)
56
+
57
+ ### Feature
58
+
59
+ - Add feature of drag and drop files in folder contents @Tishasoumya-02
60
+ - Update to VLT 8a9:
61
+ https://github.com/kitconcept/volto-light-theme/releases/tag/8.0.0a9 @sneridagh
62
+
63
+ ## 2.0.0-alpha.4 (2025-12-01)
64
+
65
+ ### Internal
66
+
67
+ - Several bugfixes. Update to VLT8a8. @sneridagh
68
+
69
+ ## 2.0.0-alpha.3 (2025-11-27)
70
+
71
+ ### Internal
72
+
73
+ - Update to VLT 8a7 (Razzle fork). @sneridagh
74
+
75
+ ## 2.0.0-alpha.2 (2025-11-13)
76
+
77
+ ### Internal
78
+
79
+ - Update to VLT8a6. @sneridagh
80
+ - Update to Volto 19a13. @sneridagh
81
+
11
82
  ## 2.0.0-alpha.1 (2025-11-11)
12
83
 
13
84
  ### Feature
package/babel.config.js CHANGED
@@ -1,6 +1,6 @@
1
1
  module.exports = function (api) {
2
2
  api.cache(true);
3
- const presets = ['razzle'];
3
+ const presets = ['@plone/razzle'];
4
4
  const plugins = [
5
5
  [
6
6
  'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work
@@ -17,15 +17,21 @@ msgid "Add-ons"
17
17
  msgstr ""
18
18
 
19
19
  #. Default: "Back"
20
+ #: components/Controlpanels/ExportImport
20
21
  #: components/Controlpanels/UpgradeControlPanel
21
22
  msgid "Back"
22
- msgstr ""
23
+ msgstr "Zurück"
23
24
 
24
25
  #. Default: "Configuration Versions"
25
26
  #: components/Controlpanels/UpgradeControlPanel
26
27
  msgid "Configuration Versions"
27
28
  msgstr ""
28
29
 
30
+ #. Default: "Content Transfer"
31
+ #: config/controlPanels
32
+ msgid "Content Transfer"
33
+ msgstr "Inhaltsübertragung"
34
+
29
35
  #. Default: "Current active configuration"
30
36
  #: components/Controlpanels/UpgradeControlPanel
31
37
  msgid "Current active configuration"
@@ -36,6 +42,51 @@ msgstr ""
36
42
  msgid "Dry run selected, transaction aborted."
37
43
  msgstr ""
38
44
 
45
+ #. Default: "Error"
46
+ #: components/Controlpanels/ExportImport
47
+ msgid "Error"
48
+ msgstr "Fehler"
49
+
50
+ #. Default: "Export Content"
51
+ #: components/Controlpanels/ExportImport
52
+ msgid "Export Content"
53
+ msgstr "Inhalt exportieren"
54
+
55
+ #. Default: "Export Site"
56
+ #: components/Controlpanels/ExportImport
57
+ msgid "Export Site"
58
+ msgstr "Export-Standort"
59
+
60
+ #. Default: "Export successful"
61
+ #: components/Controlpanels/ExportImport
62
+ msgid "Export successful"
63
+ msgstr "Export erfolgreich"
64
+
65
+ #. Default: "Exporting…"
66
+ #: components/Controlpanels/ExportImport
67
+ msgid "Exporting…"
68
+ msgstr ""
69
+
70
+ #. Default: "Import Content"
71
+ #: components/Controlpanels/ExportImport
72
+ msgid "Import Content"
73
+ msgstr "Inhalt importieren"
74
+
75
+ #. Default: "Import Site"
76
+ #: components/Controlpanels/ExportImport
77
+ msgid "Import Site"
78
+ msgstr "Importieren Sie die Website"
79
+
80
+ #. Default: "Import successful"
81
+ #: components/Controlpanels/ExportImport
82
+ msgid "Import successful"
83
+ msgstr "Import erfolgreich"
84
+
85
+ #. Default: "Importing…"
86
+ #: components/Controlpanels/ExportImport
87
+ msgid "Importing…"
88
+ msgstr ""
89
+
39
90
  #. Default: "Latest available configuration"
40
91
  #: components/Controlpanels/UpgradeControlPanel
41
92
  msgid "Latest available configuration"
@@ -71,6 +122,16 @@ msgstr ""
71
122
  msgid "Profile Version (Installed)"
72
123
  msgstr ""
73
124
 
125
+ #. Default: "Select a file first"
126
+ #: components/Controlpanels/ExportImport
127
+ msgid "Select a file first"
128
+ msgstr "Wählen Sie zuerst eine Datei aus."
129
+
130
+ #. Default: "Success"
131
+ #: components/Controlpanels/ExportImport
132
+ msgid "Success"
133
+ msgstr "Erfolg"
134
+
74
135
  #. Default: "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
75
136
  #: components/Controlpanels/UpgradeControlPanel
76
137
  msgid "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
@@ -17,6 +17,7 @@ msgid "Add-ons"
17
17
  msgstr ""
18
18
 
19
19
  #. Default: "Back"
20
+ #: components/Controlpanels/ExportImport
20
21
  #: components/Controlpanels/UpgradeControlPanel
21
22
  msgid "Back"
22
23
  msgstr ""
@@ -26,6 +27,11 @@ msgstr ""
26
27
  msgid "Configuration Versions"
27
28
  msgstr ""
28
29
 
30
+ #. Default: "Content Transfer"
31
+ #: config/controlPanels
32
+ msgid "Content Transfer"
33
+ msgstr ""
34
+
29
35
  #. Default: "Current active configuration"
30
36
  #: components/Controlpanels/UpgradeControlPanel
31
37
  msgid "Current active configuration"
@@ -36,6 +42,51 @@ msgstr ""
36
42
  msgid "Dry run selected, transaction aborted."
37
43
  msgstr ""
38
44
 
45
+ #. Default: "Error"
46
+ #: components/Controlpanels/ExportImport
47
+ msgid "Error"
48
+ msgstr ""
49
+
50
+ #. Default: "Export Content"
51
+ #: components/Controlpanels/ExportImport
52
+ msgid "Export Content"
53
+ msgstr ""
54
+
55
+ #. Default: "Export Site"
56
+ #: components/Controlpanels/ExportImport
57
+ msgid "Export Site"
58
+ msgstr ""
59
+
60
+ #. Default: "Export successful"
61
+ #: components/Controlpanels/ExportImport
62
+ msgid "Export successful"
63
+ msgstr ""
64
+
65
+ #. Default: "Exporting…"
66
+ #: components/Controlpanels/ExportImport
67
+ msgid "Exporting…"
68
+ msgstr ""
69
+
70
+ #. Default: "Import Content"
71
+ #: components/Controlpanels/ExportImport
72
+ msgid "Import Content"
73
+ msgstr ""
74
+
75
+ #. Default: "Import Site"
76
+ #: components/Controlpanels/ExportImport
77
+ msgid "Import Site"
78
+ msgstr ""
79
+
80
+ #. Default: "Import successful"
81
+ #: components/Controlpanels/ExportImport
82
+ msgid "Import successful"
83
+ msgstr ""
84
+
85
+ #. Default: "Importing…"
86
+ #: components/Controlpanels/ExportImport
87
+ msgid "Importing…"
88
+ msgstr ""
89
+
39
90
  #. Default: "Latest available configuration"
40
91
  #: components/Controlpanels/UpgradeControlPanel
41
92
  msgid "Latest available configuration"
@@ -71,6 +122,16 @@ msgstr ""
71
122
  msgid "Profile Version (Installed)"
72
123
  msgstr ""
73
124
 
125
+ #. Default: "Select a file first"
126
+ #: components/Controlpanels/ExportImport
127
+ msgid "Select a file first"
128
+ msgstr ""
129
+
130
+ #. Default: "Success"
131
+ #: components/Controlpanels/ExportImport
132
+ msgid "Success"
133
+ msgstr ""
134
+
74
135
  #. Default: "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
75
136
  #: components/Controlpanels/UpgradeControlPanel
76
137
  msgid "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
@@ -24,6 +24,7 @@ msgid "Add-ons"
24
24
  msgstr ""
25
25
 
26
26
  #. Default: "Back"
27
+ #: components/Controlpanels/ExportImport
27
28
  #: components/Controlpanels/UpgradeControlPanel
28
29
  msgid "Back"
29
30
  msgstr ""
@@ -33,6 +34,11 @@ msgstr ""
33
34
  msgid "Configuration Versions"
34
35
  msgstr ""
35
36
 
37
+ #. Default: "Content Transfer"
38
+ #: config/controlPanels
39
+ msgid "Content Transfer"
40
+ msgstr ""
41
+
36
42
  #. Default: "Current active configuration"
37
43
  #: components/Controlpanels/UpgradeControlPanel
38
44
  msgid "Current active configuration"
@@ -43,6 +49,51 @@ msgstr ""
43
49
  msgid "Dry run selected, transaction aborted."
44
50
  msgstr ""
45
51
 
52
+ #. Default: "Error"
53
+ #: components/Controlpanels/ExportImport
54
+ msgid "Error"
55
+ msgstr ""
56
+
57
+ #. Default: "Export Content"
58
+ #: components/Controlpanels/ExportImport
59
+ msgid "Export Content"
60
+ msgstr ""
61
+
62
+ #. Default: "Export Site"
63
+ #: components/Controlpanels/ExportImport
64
+ msgid "Export Site"
65
+ msgstr ""
66
+
67
+ #. Default: "Export successful"
68
+ #: components/Controlpanels/ExportImport
69
+ msgid "Export successful"
70
+ msgstr ""
71
+
72
+ #. Default: "Exporting…"
73
+ #: components/Controlpanels/ExportImport
74
+ msgid "Exporting…"
75
+ msgstr ""
76
+
77
+ #. Default: "Import Content"
78
+ #: components/Controlpanels/ExportImport
79
+ msgid "Import Content"
80
+ msgstr ""
81
+
82
+ #. Default: "Import Site"
83
+ #: components/Controlpanels/ExportImport
84
+ msgid "Import Site"
85
+ msgstr ""
86
+
87
+ #. Default: "Import successful"
88
+ #: components/Controlpanels/ExportImport
89
+ msgid "Import successful"
90
+ msgstr ""
91
+
92
+ #. Default: "Importing…"
93
+ #: components/Controlpanels/ExportImport
94
+ msgid "Importing…"
95
+ msgstr ""
96
+
46
97
  #. Default: "Latest available configuration"
47
98
  #: components/Controlpanels/UpgradeControlPanel
48
99
  msgid "Latest available configuration"
@@ -78,6 +129,16 @@ msgstr ""
78
129
  msgid "Profile Version (Installed)"
79
130
  msgstr ""
80
131
 
132
+ #. Default: "Select a file first"
133
+ #: components/Controlpanels/ExportImport
134
+ msgid "Select a file first"
135
+ msgstr ""
136
+
137
+ #. Default: "Success"
138
+ #: components/Controlpanels/ExportImport
139
+ msgid "Success"
140
+ msgstr ""
141
+
81
142
  #. Default: "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
82
143
  #: components/Controlpanels/UpgradeControlPanel
83
144
  msgid "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
@@ -19,119 +19,180 @@ msgstr ""
19
19
  #. Default: "Add-ons"
20
20
  #: components/Controlpanels/VersionOverview
21
21
  msgid "Add-ons"
22
- msgstr ""
22
+ msgstr "Complementos"
23
23
 
24
24
  #. Default: "Back"
25
+ #: components/Controlpanels/ExportImport
25
26
  #: components/Controlpanels/UpgradeControlPanel
26
27
  msgid "Back"
27
- msgstr ""
28
+ msgstr "Voltar"
28
29
 
29
30
  #. Default: "Configuration Versions"
30
31
  #: components/Controlpanels/UpgradeControlPanel
31
32
  msgid "Configuration Versions"
33
+ msgstr "Versões de configuração"
34
+
35
+ #. Default: "Content Transfer"
36
+ #: config/controlPanels
37
+ msgid "Content Transfer"
32
38
  msgstr ""
33
39
 
34
40
  #. Default: "Current active configuration"
35
41
  #: components/Controlpanels/UpgradeControlPanel
36
42
  msgid "Current active configuration"
37
- msgstr ""
43
+ msgstr "Configuração ativa atual"
38
44
 
39
45
  #. Default: "Dry run selected, transaction aborted."
40
46
  #: components/Controlpanels/UpgradeControlPanel
41
47
  msgid "Dry run selected, transaction aborted."
48
+ msgstr "Execução de teste selecionada, transação cancelada."
49
+
50
+ #. Default: "Error"
51
+ #: components/Controlpanels/ExportImport
52
+ msgid "Error"
53
+ msgstr ""
54
+
55
+ #. Default: "Export Content"
56
+ #: components/Controlpanels/ExportImport
57
+ msgid "Export Content"
58
+ msgstr ""
59
+
60
+ #. Default: "Export Site"
61
+ #: components/Controlpanels/ExportImport
62
+ msgid "Export Site"
63
+ msgstr ""
64
+
65
+ #. Default: "Export successful"
66
+ #: components/Controlpanels/ExportImport
67
+ msgid "Export successful"
68
+ msgstr ""
69
+
70
+ #. Default: "Exporting…"
71
+ #: components/Controlpanels/ExportImport
72
+ msgid "Exporting…"
73
+ msgstr ""
74
+
75
+ #. Default: "Import Content"
76
+ #: components/Controlpanels/ExportImport
77
+ msgid "Import Content"
78
+ msgstr ""
79
+
80
+ #. Default: "Import Site"
81
+ #: components/Controlpanels/ExportImport
82
+ msgid "Import Site"
83
+ msgstr ""
84
+
85
+ #. Default: "Import successful"
86
+ #: components/Controlpanels/ExportImport
87
+ msgid "Import successful"
88
+ msgstr ""
89
+
90
+ #. Default: "Importing…"
91
+ #: components/Controlpanels/ExportImport
92
+ msgid "Importing…"
42
93
  msgstr ""
43
94
 
44
95
  #. Default: "Latest available configuration"
45
96
  #: components/Controlpanels/UpgradeControlPanel
46
97
  msgid "Latest available configuration"
47
- msgstr ""
98
+ msgstr "Configuração mais recente disponível"
48
99
 
49
100
  #. Default: "More information about the upgrade procedure can be found in the documentation section of plone.org in the Upgrade Guide."
50
101
  #: components/Controlpanels/UpgradeControlPanel
51
102
  msgid "More information about the upgrade procedure can be found in the documentation section of plone.org in the Upgrade Guide."
52
- msgstr ""
103
+ msgstr "Mais informações sobre o procedimento de atualização podem ser encontradas na seção de documentação do plone.org no Guia de Atualização."
53
104
 
54
105
  #. Default: "No addons found"
55
106
  #: components/Controlpanels/VersionOverview
56
107
  msgid "No addons found"
57
- msgstr ""
108
+ msgstr "Nenhum complemento encontrado"
58
109
 
59
110
  #. Default: "Package Version"
60
111
  #: components/Controlpanels/VersionOverview
61
112
  msgid "Package Version"
62
- msgstr ""
113
+ msgstr "Versão do pacote"
63
114
 
64
115
  #. Default: "Please ensure you have a backup of your site before performing the upgrade."
65
116
  #: components/Controlpanels/UpgradeControlPanel
66
117
  msgid "Please ensure you have a backup of your site before performing the upgrade."
67
- msgstr ""
118
+ msgstr "Certifique-se de ter um backup do seu site antes de realizar a atualização."
68
119
 
69
120
  #. Default: "Profile Version (File system)"
70
121
  #: components/Controlpanels/VersionOverview
71
122
  msgid "Profile Version (File system)"
72
- msgstr ""
123
+ msgstr "Versão do perfil (sistema de arquivos)"
73
124
 
74
125
  #. Default: "Profile Version (Installed)"
75
126
  #: components/Controlpanels/VersionOverview
76
127
  msgid "Profile Version (Installed)"
128
+ msgstr "Versão do perfil (instalada)"
129
+
130
+ #. Default: "Select a file first"
131
+ #: components/Controlpanels/ExportImport
132
+ msgid "Select a file first"
133
+ msgstr ""
134
+
135
+ #. Default: "Success"
136
+ #: components/Controlpanels/ExportImport
137
+ msgid "Success"
77
138
  msgstr ""
78
139
 
79
140
  #. Default: "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
80
141
  #: components/Controlpanels/UpgradeControlPanel
81
142
  msgid "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
82
- msgstr ""
143
+ msgstr "A lista a seguir mostra quais etapas de atualização serão executadas. A atualização às vezes realiza uma atualização de catálogo/segurança, que pode demorar bastante em sites grandes. Tenha paciência."
83
144
 
84
145
  #. Default: "The site configuration is outdated and needs to be upgraded."
85
146
  #: components/Controlpanels/UpgradeControlPanel
86
147
  msgid "The site configuration is outdated and needs to be upgraded."
87
- msgstr ""
148
+ msgstr "A configuração do site está desatualizada e precisa ser atualizada."
88
149
 
89
150
  #. Default: "There was an error with the upgrade."
90
151
  #: components/Controlpanels/UpgradeControlPanel
91
152
  msgid "There was an error with the upgrade."
92
- msgstr ""
153
+ msgstr "Ocorreu um erro durante a atualização."
93
154
 
94
155
  #. Default: "Upgrade"
95
156
  #: components/Controlpanels/UpgradeControlPanel
96
157
  msgid "Upgrade"
97
- msgstr ""
158
+ msgstr "Atualizar"
98
159
 
99
160
  #. Default: "Upgrade Plone Site"
100
161
  #: components/Controlpanels/UpgradeControlPanel
101
162
  msgid "Upgrade Plone Site"
102
- msgstr ""
163
+ msgstr "Atualizar site Plone"
103
164
 
104
165
  #. Default: "Upgrade Report"
105
166
  #: components/Controlpanels/UpgradeControlPanel
106
167
  msgid "Upgrade Report"
107
- msgstr ""
168
+ msgstr "Relatório de atualização"
108
169
 
109
170
  #. Default: "Upgrade Steps"
110
171
  #: components/Controlpanels/UpgradeControlPanel
111
172
  msgid "Upgrade Steps"
112
- msgstr ""
173
+ msgstr "Etapas de atualização"
113
174
 
114
175
  #. Default: "Upgrade kitconcept.core"
115
176
  #: components/Controlpanels/UpgradeControlPanel
116
177
  msgid "Upgrade kitconcept.core"
117
- msgstr ""
178
+ msgstr "Atualizar kitconcept.core"
118
179
 
119
180
  #. Default: "Upgrade your Site"
120
181
  #: components/Controlpanels/UpgradeControlPanel
121
182
  msgid "Upgrade your Site"
122
- msgstr ""
183
+ msgstr "Atualizar seu site"
123
184
 
124
185
  #. Default: "Version Overview"
125
186
  #: components/Controlpanels/UpgradeControlPanel
126
187
  msgid "Version Overview"
127
- msgstr ""
188
+ msgstr "Visão geral das versões"
128
189
 
129
190
  #. Default: "You are running in 'debug mode'. This mode is intended for sites that are under development. This allows many configuration changes to be immediately visible, but will make your site run more slowly. To turn off debug mode, stop the server, set 'debug-mode=off' in your buildout.cfg, re-run bin/buildout and then restart the server process."
130
191
  #: components/Controlpanels/VersionOverview
131
192
  msgid "Warning Regarding debug mode"
132
- msgstr ""
193
+ msgstr "Aviso sobre o modo de depuração"
133
194
 
134
195
  #. Default: "Your site is up to date."
135
196
  #: components/Controlpanels/UpgradeControlPanel
136
197
  msgid "Your site is up to date."
137
- msgstr ""
198
+ msgstr "Seu site está atualizado."
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: 2025-05-23T14:22:05.270Z\n"
4
+ "POT-Creation-Date: 2026-02-24T11:06:04.840Z\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"
@@ -19,6 +19,7 @@ msgid "Add-ons"
19
19
  msgstr ""
20
20
 
21
21
  #. Default: "Back"
22
+ #: components/Controlpanels/ExportImport
22
23
  #: components/Controlpanels/UpgradeControlPanel
23
24
  msgid "Back"
24
25
  msgstr ""
@@ -28,6 +29,11 @@ msgstr ""
28
29
  msgid "Configuration Versions"
29
30
  msgstr ""
30
31
 
32
+ #. Default: "Content Transfer"
33
+ #: config/controlPanels
34
+ msgid "Content Transfer"
35
+ msgstr ""
36
+
31
37
  #. Default: "Current active configuration"
32
38
  #: components/Controlpanels/UpgradeControlPanel
33
39
  msgid "Current active configuration"
@@ -38,6 +44,51 @@ msgstr ""
38
44
  msgid "Dry run selected, transaction aborted."
39
45
  msgstr ""
40
46
 
47
+ #. Default: "Error"
48
+ #: components/Controlpanels/ExportImport
49
+ msgid "Error"
50
+ msgstr ""
51
+
52
+ #. Default: "Export Content"
53
+ #: components/Controlpanels/ExportImport
54
+ msgid "Export Content"
55
+ msgstr ""
56
+
57
+ #. Default: "Export Site"
58
+ #: components/Controlpanels/ExportImport
59
+ msgid "Export Site"
60
+ msgstr ""
61
+
62
+ #. Default: "Export successful"
63
+ #: components/Controlpanels/ExportImport
64
+ msgid "Export successful"
65
+ msgstr ""
66
+
67
+ #. Default: "Exporting…"
68
+ #: components/Controlpanels/ExportImport
69
+ msgid "Exporting…"
70
+ msgstr ""
71
+
72
+ #. Default: "Import Content"
73
+ #: components/Controlpanels/ExportImport
74
+ msgid "Import Content"
75
+ msgstr ""
76
+
77
+ #. Default: "Import Site"
78
+ #: components/Controlpanels/ExportImport
79
+ msgid "Import Site"
80
+ msgstr ""
81
+
82
+ #. Default: "Import successful"
83
+ #: components/Controlpanels/ExportImport
84
+ msgid "Import successful"
85
+ msgstr ""
86
+
87
+ #. Default: "Importing…"
88
+ #: components/Controlpanels/ExportImport
89
+ msgid "Importing…"
90
+ msgstr ""
91
+
41
92
  #. Default: "Latest available configuration"
42
93
  #: components/Controlpanels/UpgradeControlPanel
43
94
  msgid "Latest available configuration"
@@ -73,6 +124,16 @@ msgstr ""
73
124
  msgid "Profile Version (Installed)"
74
125
  msgstr ""
75
126
 
127
+ #. Default: "Select a file first"
128
+ #: components/Controlpanels/ExportImport
129
+ msgid "Select a file first"
130
+ msgstr ""
131
+
132
+ #. Default: "Success"
133
+ #: components/Controlpanels/ExportImport
134
+ msgid "Success"
135
+ msgstr ""
136
+
76
137
  #. Default: "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
77
138
  #: components/Controlpanels/UpgradeControlPanel
78
139
  msgid "The following list shows which upgrade steps are going to be run. Upgrading sometimes performs a catalog/security update, which may take a long time on large sites. Be patient."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitconcept/core",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0-alpha.11",
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,26 +20,26 @@
20
20
  "access": "public"
21
21
  },
22
22
  "dependencies": {
23
+ "@mbarde/volto-image-crop-widget": "^0.5.1",
23
24
  "@plone-collective/volto-authomatic": "3.0.0-alpha.6",
24
- "@kitconcept/volto-light-theme": "^8.0.0-alpha.5",
25
- "@mbarde/volto-image-crop-widget": "^0.5.1"
25
+ "@plone/components": "^3.0.2"
26
26
  },
27
27
  "peerDependencies": {
28
- "react": "18.2.0",
29
- "react-dom": "18.2.0",
28
+ "react": "^18.2.0",
29
+ "react-dom": "^18.2.0",
30
30
  "react-intl": "^3.12.1",
31
31
  "react-redux": "^8.1.2"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@plone/scripts": "^3.6.1",
35
35
  "@types/lodash": "^4.14.201",
36
- "@types/react": "^18.3.12",
36
+ "@types/react": "^18.3.1",
37
37
  "@types/react-dom": "^18.3.1",
38
38
  "lodash": "4.17.21",
39
- "release-it": "^19.0.4",
39
+ "release-it": "^19.0.5",
40
40
  "typescript": "^5.7.3",
41
41
  "vitest": "^3.1.2",
42
- "@plone/types": "2.0.0-alpha.10"
42
+ "@plone/types": "1.4.5"
43
43
  },
44
44
  "scripts": {
45
45
  "i18n": "rm -rf build/messages && NODE_ENV=production i18n --addon",
@@ -0,0 +1,25 @@
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
+ };
12
+
13
+ export const importContent = (file) => {
14
+ const formData = new FormData();
15
+ formData.append('file', file);
16
+
17
+ return {
18
+ type: POST_IMPORT,
19
+ request: {
20
+ op: 'post',
21
+ path: '/@import',
22
+ data: formData,
23
+ },
24
+ };
25
+ };
@@ -0,0 +1,233 @@
1
+ /**
2
+ * ContentTransfer control panel
3
+ * using @plone/components (React Aria based)
4
+ */
5
+
6
+ import React, { useState } from 'react';
7
+ import Toolbar from '@plone/volto/components/manage/Toolbar/Toolbar';
8
+ import Icon from '@plone/volto/components/theme/Icon/Icon';
9
+ import { Link } from 'react-router-dom';
10
+ import { useClient } from '@plone/volto/hooks/client/useClient';
11
+ import Toast from '@plone/volto/components/manage/Toast/Toast';
12
+
13
+ import { Button, Container } from '@plone/components';
14
+ import { toast } from 'react-toastify';
15
+ import { createPortal } from 'react-dom';
16
+
17
+ import { useDispatch } from 'react-redux';
18
+ import {
19
+ exportContent,
20
+ importContent,
21
+ } from '../../actions/exportImport/exportImport';
22
+
23
+ import uploadSVG from '@plone/volto/icons/upload.svg';
24
+ import downloadSVG from '@plone/volto/icons/download.svg';
25
+ import backSVG from '@plone/volto/icons/back.svg';
26
+
27
+ import { defineMessages, useIntl } from 'react-intl';
28
+
29
+ const messages = defineMessages({
30
+ back: {
31
+ id: 'Back',
32
+ defaultMessage: 'Back',
33
+ },
34
+ success: {
35
+ id: 'Success',
36
+ defaultMessage: 'Success',
37
+ },
38
+ exportSuccess: {
39
+ id: 'Export successful',
40
+ defaultMessage: 'Export successful',
41
+ },
42
+ exportContent: {
43
+ id: 'Export Content',
44
+ defaultMessage: 'Export Content',
45
+ },
46
+ exportSite: {
47
+ id: 'Export Site',
48
+ defaultMessage: 'Export Site',
49
+ },
50
+ importContent: {
51
+ id: 'Import Content',
52
+ defaultMessage: 'Import Content',
53
+ },
54
+ importSite: {
55
+ id: 'Import Site',
56
+ defaultMessage: 'Import Site',
57
+ },
58
+ fileFirst: {
59
+ id: 'Select a file first',
60
+ defaultMessage: 'Select a file first',
61
+ },
62
+ error: {
63
+ id: 'Error',
64
+ defaultMessage: 'Error',
65
+ },
66
+ importSuccess: {
67
+ id: 'Import successful',
68
+ defaultMessage: 'Import successful',
69
+ },
70
+ exporting: {
71
+ id: 'Exporting…',
72
+ defaultMessage: 'Exporting…',
73
+ },
74
+ importing: {
75
+ id: 'Importing…',
76
+ defaultMessage: 'Importing…',
77
+ },
78
+ });
79
+
80
+ const ContentTransfer = ({ pathname }) => {
81
+ const [file, setFile] = useState(null);
82
+ const intl = useIntl();
83
+ const isClient = useClient();
84
+ const dispatch = useDispatch();
85
+
86
+ const [exporting, setExporting] = useState(false);
87
+ const [importing, setImporting] = useState(false);
88
+
89
+ const handleExport = async () => {
90
+ try {
91
+ setExporting(true);
92
+
93
+ const res = await dispatch(exportContent());
94
+
95
+ if (!res.ok) throw new Error('Export failed');
96
+
97
+ const blob = await res.blob();
98
+
99
+ const url = window.URL.createObjectURL(blob);
100
+
101
+ const a = document.createElement('a');
102
+ a.href = url;
103
+ a.download = 'export.zip';
104
+ a.click();
105
+
106
+ window.URL.revokeObjectURL(url);
107
+
108
+ toast.success(
109
+ <Toast
110
+ success
111
+ title={intl.formatMessage(messages.success)}
112
+ content={intl.formatMessage(messages.exportSuccess)}
113
+ />,
114
+ );
115
+ } catch (e) {
116
+ toast.error(
117
+ <Toast
118
+ error
119
+ title={intl.formatMessage(messages.error)}
120
+ content={e.message}
121
+ />,
122
+ );
123
+ } finally {
124
+ setExporting(false);
125
+ }
126
+ };
127
+
128
+ const handleImport = async () => {
129
+ if (!file) {
130
+ toast.error(
131
+ <Toast
132
+ error
133
+ title={intl.formatMessage(messages.error)}
134
+ content={intl.formatMessage(messages.fileFirst)}
135
+ />,
136
+ );
137
+ return;
138
+ }
139
+ try {
140
+ setImporting(true);
141
+ await dispatch(importContent(file));
142
+ toast.success(
143
+ <Toast
144
+ success
145
+ title={intl.formatMessage(messages.success)}
146
+ content={intl.formatMessage(messages.importSuccess)}
147
+ />,
148
+ );
149
+ } catch (e) {
150
+ toast.error(
151
+ <Toast
152
+ error
153
+ title={intl.formatMessage(messages.error)}
154
+ content={e.message}
155
+ />,
156
+ );
157
+ } finally {
158
+ setImporting(false);
159
+ }
160
+ };
161
+
162
+ return (
163
+ <div id="page-controlpanel-content-transfer">
164
+ <Container width="layout">
165
+ <div className="grid-container">
166
+ <div className="grid-column export">
167
+ <h2>{intl.formatMessage(messages.exportContent)}</h2>
168
+
169
+ <Button
170
+ variant="primary"
171
+ isDisabled={exporting}
172
+ onPress={handleExport}
173
+ >
174
+ <Icon name={downloadSVG} size="20px" />
175
+ {exporting ? (
176
+ <span>{intl.formatMessage(messages.exporting)}</span>
177
+ ) : (
178
+ <span>{intl.formatMessage(messages.exportSite)}</span>
179
+ )}
180
+ </Button>
181
+ </div>
182
+
183
+ <div className="grid-column import">
184
+ <h2>{intl.formatMessage(messages.importContent)}</h2>
185
+
186
+ <input
187
+ type="file"
188
+ accept=".zip"
189
+ onChange={(e) => setFile(e.target.files[0])}
190
+ />
191
+
192
+ <Button
193
+ variant="primary"
194
+ isDisabled={!file || importing}
195
+ onPress={handleImport}
196
+ >
197
+ <Icon name={uploadSVG} size="20px" />
198
+ {importing ? (
199
+ <span>{intl.formatMessage(messages.importing)}</span>
200
+ ) : (
201
+ <span>{intl.formatMessage(messages.importSite)}</span>
202
+ )}
203
+ </Button>
204
+ </div>
205
+ </div>
206
+ </Container>
207
+
208
+ {isClient &&
209
+ createPortal(
210
+ <Toolbar
211
+ pathname={pathname}
212
+ hideDefaultViewButtons
213
+ inner={
214
+ <>
215
+ <Link to="/controlpanel" className="item">
216
+ <Icon
217
+ name={backSVG}
218
+ aria-label={intl.formatMessage(messages.back)}
219
+ className="contents circled"
220
+ size="30px"
221
+ title={intl.formatMessage(messages.back)}
222
+ />
223
+ </Link>
224
+ </>
225
+ }
226
+ />,
227
+ document.getElementById('toolbar'),
228
+ )}
229
+ </div>
230
+ );
231
+ };
232
+
233
+ export default ContentTransfer;
@@ -0,0 +1,38 @@
1
+ import type { ConfigType } from '@plone/registry';
2
+ import ExportImport from '../components/Controlpanels/ExportImport';
3
+ import syncSVG from '@plone/volto/icons/sync.svg';
4
+
5
+ import { defineMessages } from 'react-intl';
6
+
7
+ defineMessages({
8
+ 'Content Transfer': {
9
+ id: 'Content Transfer',
10
+ defaultMessage: 'Content Transfer',
11
+ },
12
+ });
13
+
14
+ export default function install(config: ConfigType) {
15
+ config.settings.controlpanels = [
16
+ ...config.settings.controlpanels,
17
+ {
18
+ '@id': '/import-export',
19
+ group: 'General',
20
+ title: 'Import/Export',
21
+ },
22
+ ];
23
+
24
+ config.settings.controlPanelsIcons = {
25
+ ...config.settings.controlPanelsIcons,
26
+ 'import-export': syncSVG,
27
+ };
28
+
29
+ config.addonRoutes = [
30
+ ...config.addonRoutes,
31
+ {
32
+ path: '/controlpanel/import-export',
33
+ component: ExportImport,
34
+ },
35
+ ];
36
+
37
+ return config;
38
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Action types.
3
+ * @module constants/ActionTypes
4
+ */
5
+
6
+ export const POST_EXPORT = 'POST_EXPORT';
7
+ export const POST_IMPORT = 'POST_IMPORT';
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ import type { ConfigType } from '@plone/registry';
2
2
  import type { CustomInheritBehavior, BlocksConfigSettings } from './types';
3
3
  import installSettings from './config/settings';
4
4
  import installSlots from './config/slots';
5
+ import installControlPanels from './config/controlPanels';
5
6
 
6
7
  declare module '@plone/types' {
7
8
  export interface GetSiteResponse {
@@ -18,6 +19,8 @@ declare module '@plone/types' {
18
19
  const applyConfig = (config: ConfigType) => {
19
20
  installSettings(config);
20
21
  installSlots(config);
22
+ installControlPanels(config);
23
+
21
24
  return config;
22
25
  };
23
26
 
@@ -1,2 +1,4 @@
1
1
  // This theme extends the volto-light-theme
2
2
  @import 'components/version_overview';
3
+ @import 'components/dragDropFolderContent.scss';
4
+ @import 'components/export_import.scss';
@@ -0,0 +1,27 @@
1
+ #page-controlpanel-content-transfer {
2
+ h2 {
3
+ @include text-heading-h2();
4
+ }
5
+ .grid-container {
6
+ display: grid;
7
+ gap: 16px;
8
+ grid-template-columns: 1fr 1fr;
9
+ }
10
+ button,
11
+ input[type='file']::file-selector-button {
12
+ @include button-style;
13
+
14
+ svg.icon {
15
+ margin-right: 5px;
16
+ }
17
+ }
18
+
19
+ button[data-disabled] {
20
+ border-color: var(--border-color-disabled);
21
+ color: var(--text-color-disabled);
22
+ }
23
+
24
+ input[type='file']::file-selector-button {
25
+ margin-right: 5px;
26
+ }
27
+ }
@@ -0,0 +1,62 @@
1
+ .contents-dropzone {
2
+ position: relative;
3
+
4
+ &.drag-over {
5
+ overflow: hidden;
6
+ }
7
+ }
8
+
9
+ .dropzone-overlay {
10
+ position: absolute;
11
+ z-index: 10;
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ border: 3px dashed black;
16
+ animation: fadeIn 0.3s ease-in;
17
+ backdrop-filter: blur(2px);
18
+ inset: 0;
19
+ }
20
+
21
+ .dropzone-content {
22
+ animation: scaleIn 0.3s ease-out;
23
+ color: black;
24
+ text-align: center;
25
+
26
+ h3 {
27
+ margin-top: 16px;
28
+ font-size: 24px;
29
+ font-weight: 600;
30
+ }
31
+
32
+ p {
33
+ font-size: 18px;
34
+ }
35
+
36
+ h3,
37
+ p {
38
+ color: black;
39
+ }
40
+ }
41
+
42
+ @keyframes fadeIn {
43
+ from {
44
+ opacity: 0;
45
+ }
46
+
47
+ to {
48
+ opacity: 1;
49
+ }
50
+ }
51
+
52
+ @keyframes scaleIn {
53
+ from {
54
+ opacity: 0;
55
+ transform: scale(0.9);
56
+ }
57
+
58
+ to {
59
+ opacity: 1;
60
+ transform: scale(1);
61
+ }
62
+ }