@plone/volto 16.21.3 → 16.22.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.
Files changed (96) hide show
  1. package/.changelog.draft +21 -4
  2. package/.gitignore~ +71 -0
  3. package/.yarn/install-state.gz +0 -0
  4. package/CHANGELOG.md +60 -1
  5. package/cypress/support/commands.js +17 -0
  6. package/locales/ca/LC_MESSAGES/volto.po +37 -2
  7. package/locales/ca.json +1 -1
  8. package/locales/de/LC_MESSAGES/volto.po +38 -3
  9. package/locales/de.json +1 -1
  10. package/locales/en/LC_MESSAGES/volto.po +37 -2
  11. package/locales/en.json +1 -1
  12. package/locales/es/LC_MESSAGES/volto.po +37 -2
  13. package/locales/es.json +1 -1
  14. package/locales/eu/LC_MESSAGES/volto.po +37 -2
  15. package/locales/eu.json +1 -1
  16. package/locales/fi/LC_MESSAGES/volto.po +37 -2
  17. package/locales/fi.json +1 -1
  18. package/locales/fr/LC_MESSAGES/volto.po +37 -2
  19. package/locales/fr.json +1 -1
  20. package/locales/it/LC_MESSAGES/volto.po +229 -194
  21. package/locales/it.json +1 -1
  22. package/locales/ja/LC_MESSAGES/volto.po +37 -2
  23. package/locales/ja.json +1 -1
  24. package/locales/nl/LC_MESSAGES/volto.po +37 -2
  25. package/locales/nl.json +1 -1
  26. package/locales/pt/LC_MESSAGES/volto.po +37 -2
  27. package/locales/pt.json +1 -1
  28. package/locales/pt_BR/LC_MESSAGES/volto.po +37 -2
  29. package/locales/pt_BR.json +1 -1
  30. package/locales/ro/LC_MESSAGES/volto.po +37 -2
  31. package/locales/ro.json +1 -1
  32. package/locales/volto.pot +38 -3
  33. package/locales/volto.pot~ +4705 -0
  34. package/locales/zh_CN/LC_MESSAGES/volto.po +37 -2
  35. package/locales/zh_CN.json +1 -1
  36. package/news/4547.breaking~ +1 -0
  37. package/package.json +1 -1
  38. package/package.json~ +444 -0
  39. package/packages/volto-slate/package.json +1 -1
  40. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
  41. package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
  42. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
  43. package/packages/volto-slate/src/utils/blocks.js +7 -0
  44. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
  45. package/src/components/manage/Blocks/Image/schema.js +5 -1
  46. package/src/components/manage/Blocks/Search/components/Facets.jsx +6 -2
  47. package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
  48. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +12 -1
  49. package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
  50. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +142 -8
  51. package/src/components/manage/Contents/Contents.jsx +8 -6
  52. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +1 -13
  53. package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
  54. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +2 -2
  55. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +25 -10
  56. package/src/components/manage/UniversalLink/UniversalLink.jsx +2 -6
  57. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +36 -0
  58. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +1 -1
  59. package/src/components/manage/Widgets/SelectUtils.js +1 -1
  60. package/src/components/theme/Error/ServerError.jsx +29 -0
  61. package/src/components/theme/Login/Login.jsx +1 -1
  62. package/src/components/theme/View/AlbumView.jsx +9 -1
  63. package/src/components/theme/View/EventView.jsx +6 -2
  64. package/src/components/theme/View/FileView.jsx +23 -18
  65. package/src/components/theme/View/ImageView.jsx +37 -32
  66. package/src/components/theme/View/LinkView.jsx +4 -1
  67. package/src/components/theme/View/ListingView.jsx +33 -27
  68. package/src/components/theme/View/SummaryView.jsx +47 -38
  69. package/src/components/theme/View/TabularView.jsx +59 -53
  70. package/src/config/Views.jsx +2 -0
  71. package/src/config/index.js +1 -0
  72. package/src/config/index.js~ +223 -0
  73. package/src/config/server.js +2 -0
  74. package/src/express-middleware/files.js +8 -6
  75. package/src/express-middleware/images.js +7 -1
  76. package/src/express-middleware/ok.js +16 -0
  77. package/src/helpers/Url/Url.js +22 -1
  78. package/src/helpers/Url/Url.test.js +41 -0
  79. package/src/middleware/api.js +14 -2
  80. package/src/reducers/actions/actions.js +7 -5
  81. package/src/reducers/actions/actions.test.js +70 -0
  82. package/src/server.jsx +9 -0
  83. package/theme/themes/pastanaga/extras/main.less +2 -1
  84. package/theme/themes/pastanaga/extras/toc.less +29 -0
  85. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
  86. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
  87. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
  88. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
  89. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
  90. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
  91. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
  92. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
  93. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
  94. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
  95. package/pyvenv.cfg +0 -3
  96. package/share/man/man1/ttx.1 +0 -225
@@ -1,6 +1,7 @@
1
1
  import imagesMiddleware from '@plone/volto/express-middleware/images';
2
2
  import filesMiddleware from '@plone/volto/express-middleware/files';
3
3
  import robotstxtMiddleware from '@plone/volto/express-middleware/robotstxt';
4
+ import okMiddleware from '@plone/volto/express-middleware/ok';
4
5
  import sitemapMiddleware from '@plone/volto/express-middleware/sitemap';
5
6
  import staticsMiddleware from '@plone/volto/express-middleware/static';
6
7
  import devProxyMiddleware from '@plone/volto/express-middleware/devproxy';
@@ -11,6 +12,7 @@ const settings = {
11
12
  filesMiddleware(),
12
13
  imagesMiddleware(),
13
14
  robotstxtMiddleware(),
15
+ okMiddleware(),
14
16
  sitemapMiddleware(),
15
17
  staticsMiddleware(),
16
18
  ],
@@ -2,11 +2,13 @@ import express from 'express';
2
2
  import { getAPIResourceWithAuth } from '@plone/volto/helpers';
3
3
 
4
4
  const HEADERS = [
5
- 'Accept-Ranges',
6
- 'Cache-Control',
7
- 'Content-Disposition',
8
- 'Content-Range',
9
- 'Content-Type',
5
+ 'accept-ranges',
6
+ 'cache-control',
7
+ 'content-disposition',
8
+ 'content-range',
9
+ 'content-type',
10
+ 'x-sendfile',
11
+ 'x-accel-redirect',
10
12
  ];
11
13
 
12
14
  function filesMiddlewareFn(req, res, next) {
@@ -14,7 +16,7 @@ function filesMiddlewareFn(req, res, next) {
14
16
  .then((resource) => {
15
17
  // Just forward the headers that we need
16
18
  HEADERS.forEach((header) => {
17
- if (resource.get(header)) {
19
+ if (resource.headers[header]) {
18
20
  res.set(header, resource.get(header));
19
21
  }
20
22
  });
@@ -1,7 +1,13 @@
1
1
  import express from 'express';
2
2
  import { getAPIResourceWithAuth } from '@plone/volto/helpers';
3
3
 
4
- const HEADERS = ['content-type', 'content-disposition', 'cache-control'];
4
+ const HEADERS = [
5
+ 'content-type',
6
+ 'content-disposition',
7
+ 'cache-control',
8
+ 'x-sendfile',
9
+ 'x-accel-redirect',
10
+ ];
5
11
 
6
12
  function imageMiddlewareFn(req, res, next) {
7
13
  getAPIResourceWithAuth(req)
@@ -0,0 +1,16 @@
1
+ import express from 'express';
2
+ import config from '@plone/volto/registry';
3
+
4
+ const ok = function (req, res, next) {
5
+ res.type('text/plain');
6
+ res.set('Expires', 'Sat, 1 Jan 2000 00:00:00 GMT');
7
+ res.set('Cache-Control', 'max-age=0, must-revalidate, private');
8
+ res.send('ok');
9
+ };
10
+
11
+ export default function () {
12
+ const middleware = express.Router();
13
+ middleware.all(config?.settings?.okRoute || '/ok', ok);
14
+ middleware.id = 'ok';
15
+ return middleware;
16
+ }
@@ -3,7 +3,7 @@
3
3
  * @module helpers/Url
4
4
  */
5
5
 
6
- import { last, memoize } from 'lodash';
6
+ import { last, memoize, isArray, isObject, isString } from 'lodash';
7
7
  import { urlRegex, telRegex, mailRegex } from './urlRegex';
8
8
  import prependHttp from 'prepend-http';
9
9
  import config from '@plone/volto/registry';
@@ -251,6 +251,27 @@ export function isUrl(url) {
251
251
  return urlRegex().test(url);
252
252
  }
253
253
 
254
+ /**
255
+ * Get field url
256
+ * @method getFieldURL
257
+ * @param {object} data
258
+ * @returns {string | any} URL string value if field is of url type or any.
259
+ */
260
+ export const getFieldURL = (data) => {
261
+ let url = data;
262
+ const _isObject = data && isObject(data) && !isArray(data);
263
+ if (_isObject && data['@type'] === 'URL') {
264
+ url = data['value'] ?? data['url'] ?? data['href'] ?? data;
265
+ } else if (_isObject) {
266
+ url = data['@id'] ?? data['url'] ?? data['href'] ?? data;
267
+ }
268
+ if (isArray(data)) {
269
+ url = data.map((item) => getFieldURL(item));
270
+ }
271
+ if (isString(url) && isInternalURL(url)) return flattenToAppURL(url);
272
+ return url;
273
+ };
274
+
254
275
  /**
255
276
  * Normalize URL, adds protocol (if required eg. user has not entered the protocol)
256
277
  * @method normalizeUrl
@@ -10,6 +10,7 @@ import {
10
10
  isCmsUi,
11
11
  isInternalURL,
12
12
  isUrl,
13
+ getFieldURL,
13
14
  normalizeUrl,
14
15
  removeProtocol,
15
16
  addAppURL,
@@ -260,6 +261,46 @@ describe('Url', () => {
260
261
  expect(isUrl(href)).toBe(false);
261
262
  });
262
263
  });
264
+ describe('getFieldURL', () => {
265
+ it('returns app URL if the field is a string', () => {
266
+ const field = `${settings.apiPath}/foo/bar`;
267
+ expect(getFieldURL(field)).toBe('/foo/bar');
268
+ });
269
+ it('returns app URL if the field is an object with "@id"', () => {
270
+ const field = { '@id': '/foo/bar' };
271
+ expect(getFieldURL(field)).toBe('/foo/bar');
272
+ });
273
+ it('returns app URL if the field is an object with type URL', () => {
274
+ const field = { '@type': 'URL', value: '/foo/bar' };
275
+ expect(getFieldURL(field)).toBe('/foo/bar');
276
+ });
277
+ it('returns app URL if the field is an object with url or href properties', () => {
278
+ const fieldUrl = { url: '/foo/bar' };
279
+ const fieldHref = { href: '/foo/bar' };
280
+ expect(getFieldURL(fieldUrl)).toBe('/foo/bar');
281
+ expect(getFieldURL(fieldHref)).toBe('/foo/bar');
282
+ });
283
+ it('returns array of app URL if the field is an array of strings', () => {
284
+ const field = [
285
+ `${settings.apiPath}/foo/bar/1`,
286
+ `${settings.apiPath}/foo/bar/2`,
287
+ ];
288
+ expect(getFieldURL(field)).toStrictEqual(['/foo/bar/1', '/foo/bar/2']);
289
+ });
290
+ it('returns array of app URL if the field is an array of objects', () => {
291
+ const field = [
292
+ {
293
+ '@type': 'URL',
294
+ value: `${settings.apiPath}/foo/bar/1`,
295
+ },
296
+ {
297
+ '@type': 'URL',
298
+ value: `${settings.apiPath}/foo/bar/2`,
299
+ },
300
+ ];
301
+ expect(getFieldURL(field)).toStrictEqual(['/foo/bar/1', '/foo/bar/2']);
302
+ });
303
+ });
263
304
  describe('normalizeUrl', () => {
264
305
  it('normalizeUrl test', () => {
265
306
  const href = `www.example.com`;
@@ -250,10 +250,22 @@ const apiMiddlewareFactory = (api) => ({ dispatch, getState }) => (next) => (
250
250
  };
251
251
  });
252
252
  }
253
- return next({ ...rest, result, type: `${type}_SUCCESS` });
253
+ try {
254
+ return next({ ...rest, result, type: `${type}_SUCCESS` });
255
+ } catch (error) {
256
+ // There was an exception while processing reducers or downstream middleware.
257
+ next({
258
+ ...rest,
259
+ error: { status: 500, error },
260
+ type: `${type}_FAIL`,
261
+ });
262
+ // Rethrow the original exception on the client side only,
263
+ // so it doesn't fall through to express on the server.
264
+ if (__CLIENT__) throw error;
265
+ }
254
266
  },
255
267
  (error) => {
256
- // Only SRR can set ECONNREFUSED
268
+ // Only SSR can set ECONNREFUSED
257
269
  if (error.code === 'ECONNREFUSED') {
258
270
  next({
259
271
  ...rest,
@@ -57,11 +57,13 @@ export default function actions(state = initialState, action = {}) {
57
57
  }
58
58
  return state;
59
59
  case `${LIST_ACTIONS}_SUCCESS`:
60
- hasExpander = hasApiExpander(
61
- 'actions',
62
- getBaseUrl(flattenToAppURL(action.result['@id'])),
63
- );
64
- if (!hasExpander) {
60
+ // Even if the expander is set or not, if the LIST_ACTIONS is
61
+ // called, we want it to store the data if the actions data is
62
+ // not set in the expander data (['@components']) but in the "normal"
63
+ // action result (we look for the object property returned by the endpoint)
64
+ // Unfortunately, this endpoint returns all the actions in a plain object
65
+ // with no structure :(
66
+ if (action.result.object) {
65
67
  return {
66
68
  ...state,
67
69
  error: null,
@@ -207,4 +207,74 @@ describe('Actions reducer - (ACTIONS)GET_CONTENT', () => {
207
207
  loading: false,
208
208
  });
209
209
  });
210
+
211
+ it('should handle (ACTIONS)LIST_ACTIONS (standalone with apiExpander enabled)', () => {
212
+ expect(
213
+ actions(undefined, {
214
+ type: `${LIST_ACTIONS}_SUCCESS`,
215
+ result: {
216
+ object: [],
217
+ object_buttons: [],
218
+ site_actions: [],
219
+ user: [
220
+ {
221
+ icon: '',
222
+ id: 'preferences',
223
+ title: 'Preferences',
224
+ },
225
+ {
226
+ icon: '',
227
+ id: 'dashboard',
228
+ title: 'Dashboard',
229
+ },
230
+ {
231
+ icon: '',
232
+ id: 'plone_setup',
233
+ title: 'Site Setup',
234
+ },
235
+ {
236
+ icon: '',
237
+ id: 'logout',
238
+ title: 'Log out',
239
+ },
240
+ ],
241
+ document_actions: [],
242
+ portal_tabs: [],
243
+ },
244
+ }),
245
+ ).toEqual({
246
+ error: null,
247
+ actions: {
248
+ object: [],
249
+ object_buttons: [],
250
+ site_actions: [],
251
+ user: [
252
+ {
253
+ icon: '',
254
+ id: 'preferences',
255
+ title: 'Preferences',
256
+ },
257
+ {
258
+ icon: '',
259
+ id: 'dashboard',
260
+ title: 'Dashboard',
261
+ },
262
+ {
263
+ icon: '',
264
+ id: 'plone_setup',
265
+ title: 'Site Setup',
266
+ },
267
+ {
268
+ icon: '',
269
+ id: 'logout',
270
+ title: 'Log out',
271
+ },
272
+ ],
273
+ document_actions: [],
274
+ portal_tabs: [],
275
+ },
276
+ loaded: true,
277
+ loading: false,
278
+ });
279
+ });
210
280
  });
package/src/server.jsx CHANGED
@@ -263,6 +263,15 @@ server.get('/*', (req, res) => {
263
263
  const readCriticalCss =
264
264
  config.settings.serverConfig.readCriticalCss || defaultReadCriticalCss;
265
265
 
266
+ // If we are showing an "old browser" warning,
267
+ // make sure it doesn't get cached in a shared cache
268
+ const browserdetect = store.getState().browserdetect;
269
+ if (config.settings.notSupportedBrowsers.includes(browserdetect?.name)) {
270
+ res.set({
271
+ 'Cache-Control': 'private',
272
+ });
273
+ }
274
+
266
275
  if (context.url) {
267
276
  res.redirect(flattenToAppURL(context.url));
268
277
  } else if (context.error_code) {
@@ -26,7 +26,7 @@ body {
26
26
  &.has-toolbar-menu-open,
27
27
  &.has-mobile-menu-open {
28
28
  // The body scroll locker when the toolbar or the mobile menu are active in mobile.
29
- @media only screen and (max-width: @largestMobileScreen) {
29
+ @media only screen and (max-width: @largestTabletScreen) {
30
30
  overflow: hidden;
31
31
  }
32
32
  }
@@ -588,4 +588,5 @@ body.has-toolbar-collapsed .mobile-menu {
588
588
  @import 'login';
589
589
  @import 'language-selector';
590
590
  @import 'views';
591
+ @import 'toc';
591
592
  .loadUIOverrides();
@@ -0,0 +1,29 @@
1
+ .table-of-contents.horizontalMenu.sticky-toc {
2
+ position: sticky;
3
+ z-index: 1;
4
+ top: 0;
5
+ }
6
+
7
+ .table-of-contents.horizontalMenu .hidden {
8
+ z-index: -1;
9
+ pointer-events: none;
10
+ visibility: hidden;
11
+ }
12
+
13
+ .table-of-contents.horizontalMenu .hidden-dropdown {
14
+ display: none !important;
15
+ }
16
+
17
+ .table-of-contents.horizontalMenu .item.dropdown {
18
+ position: absolute !important;
19
+ right: 0;
20
+ }
21
+
22
+ .table-of-contents.horizontalMenu > .ui.menu {
23
+ position: relative;
24
+ }
25
+
26
+ .table-of-contents.horizontalMenu .item.dropdown .focused > a {
27
+ border: 2px solid black !important;
28
+ border-radius: 4px;
29
+ }
@@ -1,90 +0,0 @@
1
- [
2
- {
3
- "id": "Insert row before",
4
- "defaultMessage": "Insert row before"
5
- },
6
- {
7
- "id": "Insert row after",
8
- "defaultMessage": "Insert row after"
9
- },
10
- {
11
- "id": "Delete row",
12
- "defaultMessage": "Delete row"
13
- },
14
- {
15
- "id": "Insert col before",
16
- "defaultMessage": "Insert col before"
17
- },
18
- {
19
- "id": "Insert col after",
20
- "defaultMessage": "Insert col after"
21
- },
22
- {
23
- "id": "Delete col",
24
- "defaultMessage": "Delete col"
25
- },
26
- {
27
- "id": "Hide headers",
28
- "defaultMessage": "Hide headers"
29
- },
30
- {
31
- "id": "Make the table sortable",
32
- "defaultMessage": "Make the table sortable"
33
- },
34
- {
35
- "id": "Visible only in view mode",
36
- "defaultMessage": "Visible only in view mode"
37
- },
38
- {
39
- "id": "Fixed width table cells",
40
- "defaultMessage": "Fixed width table cells"
41
- },
42
- {
43
- "id": "Make the table compact",
44
- "defaultMessage": "Make the table compact"
45
- },
46
- {
47
- "id": "Reduce complexity",
48
- "defaultMessage": "Reduce complexity"
49
- },
50
- {
51
- "id": "Divide each row into separate cells",
52
- "defaultMessage": "Divide each row into separate cells"
53
- },
54
- {
55
- "id": "Table color inverted",
56
- "defaultMessage": "Table color inverted"
57
- },
58
- {
59
- "id": "Stripe alternate rows with color",
60
- "defaultMessage": "Stripe alternate rows with color"
61
- },
62
- {
63
- "id": "Left",
64
- "defaultMessage": "Left"
65
- },
66
- {
67
- "id": "Center",
68
- "defaultMessage": "Center"
69
- },
70
- {
71
- "id": "Right",
72
- "defaultMessage": "Right"
73
- },
74
- {
75
- "id": "Bottom",
76
- "defaultMessage": "Bottom"
77
- },
78
- {
79
- "id": "Middle",
80
- "defaultMessage": "Middle"
81
- },
82
- {
83
- "id": "Top",
84
- "defaultMessage": "Top"
85
- },
86
- {
87
- "id": "Table",
88
- "defaultMessage": "Table"
89
- }
90
- ]
@@ -1,6 +0,0 @@
1
- [
2
- {
3
- "id": "Type text…",
4
- "defaultMessage": "Type text…"
5
- }
6
- ]
@@ -1,6 +0,0 @@
1
- [
2
- {
3
- "id": "Type text…",
4
- "defaultMessage": "Type text…"
5
- }
6
- ]
@@ -1,6 +0,0 @@
1
- [
2
- {
3
- "id": "No matching blocks",
4
- "defaultMessage": "No matching blocks"
5
- }
6
- ]
@@ -1,10 +0,0 @@
1
- [
2
- {
3
- "id": "Edit link",
4
- "defaultMessage": "Edit link"
5
- },
6
- {
7
- "id": "Remove link",
8
- "defaultMessage": "Remove link"
9
- }
10
- ]
@@ -1,10 +0,0 @@
1
- [
2
- {
3
- "id": "Add link",
4
- "defaultMessage": "Add link"
5
- },
6
- {
7
- "id": "Edit link",
8
- "defaultMessage": "Edit link"
9
- }
10
- ]
@@ -1,30 +0,0 @@
1
- [
2
- {
3
- "id": "Delete table",
4
- "defaultMessage": "Delete table"
5
- },
6
- {
7
- "id": "Insert row before",
8
- "defaultMessage": "Insert row before"
9
- },
10
- {
11
- "id": "Insert row after",
12
- "defaultMessage": "Insert row after"
13
- },
14
- {
15
- "id": "Delete row",
16
- "defaultMessage": "Delete row"
17
- },
18
- {
19
- "id": "Insert col before",
20
- "defaultMessage": "Insert col before"
21
- },
22
- {
23
- "id": "Insert col after",
24
- "defaultMessage": "Insert col after"
25
- },
26
- {
27
- "id": "Delete col",
28
- "defaultMessage": "Delete col"
29
- }
30
- ]
@@ -1,10 +0,0 @@
1
- [
2
- {
3
- "id": "Edit element",
4
- "defaultMessage": "Edit element"
5
- },
6
- {
7
- "id": "Remove element",
8
- "defaultMessage": "Remove element"
9
- }
10
- ]
@@ -1,6 +0,0 @@
1
- [
2
- {
3
- "id": "An error has occurred while editing \"{name}\" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator.",
4
- "defaultMessage": "An error has occurred while editing \"{name}\" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator."
5
- }
6
- ]
@@ -1,6 +0,0 @@
1
- [
2
- {
3
- "id": "An error has occurred while rendering \"{name}\" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator.",
4
- "defaultMessage": "An error has occurred while rendering \"{name}\" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator."
5
- }
6
- ]
package/pyvenv.cfg DELETED
@@ -1,3 +0,0 @@
1
- home = /opt/homebrew/opt/python@3.9/bin
2
- include-system-site-packages = false
3
- version = 3.9.16