@strapi/i18n 0.0.0-experimental.7afdc9b682bc83a53ce599c4fb7c9e4506b31fff → 0.0.0-experimental.7b750d18de359d0a42233cb8707e3c31c5983345

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 (47) hide show
  1. package/LICENSE +18 -3
  2. package/dist/_chunks/{SettingsPage-DNucKxbi.mjs → SettingsPage-BIZrSFGY.mjs} +93 -106
  3. package/dist/_chunks/SettingsPage-BIZrSFGY.mjs.map +1 -0
  4. package/dist/_chunks/{SettingsPage-CG_qq0Tx.js → SettingsPage-kMDCxWLw.js} +91 -104
  5. package/dist/_chunks/SettingsPage-kMDCxWLw.js.map +1 -0
  6. package/dist/_chunks/{en-Kv6y9zPQ.js → en-B6327hMz.js} +10 -2
  7. package/dist/_chunks/en-B6327hMz.js.map +1 -0
  8. package/dist/_chunks/{en-18tWw4P6.mjs → en-DZXpOMHo.mjs} +10 -2
  9. package/dist/_chunks/en-DZXpOMHo.mjs.map +1 -0
  10. package/dist/_chunks/{index-BYDzOiHE.mjs → index-DXrgAtCA.mjs} +381 -191
  11. package/dist/_chunks/index-DXrgAtCA.mjs.map +1 -0
  12. package/dist/_chunks/{index-DWAqdQ--.js → index-Dncj9Inq.js} +387 -197
  13. package/dist/_chunks/index-Dncj9Inq.js.map +1 -0
  14. package/dist/admin/index.js +1 -1
  15. package/dist/admin/index.mjs +1 -1
  16. package/dist/admin/src/components/BulkLocaleActionModal.d.ts +2 -1
  17. package/dist/admin/src/components/CMHeaderActions.d.ts +27 -3
  18. package/dist/admin/src/components/EditLocale.d.ts +5 -4
  19. package/dist/admin/src/utils/clean.d.ts +4 -0
  20. package/dist/admin/src/utils/schemas.d.ts +1 -0
  21. package/dist/server/index.js +63 -98
  22. package/dist/server/index.js.map +1 -1
  23. package/dist/server/index.mjs +64 -99
  24. package/dist/server/index.mjs.map +1 -1
  25. package/dist/server/src/bootstrap.d.ts +1 -4
  26. package/dist/server/src/bootstrap.d.ts.map +1 -1
  27. package/dist/server/src/index.d.ts +15 -13
  28. package/dist/server/src/index.d.ts.map +1 -1
  29. package/dist/server/src/services/index.d.ts +14 -10
  30. package/dist/server/src/services/index.d.ts.map +1 -1
  31. package/dist/server/src/services/permissions/actions.d.ts +14 -2
  32. package/dist/server/src/services/permissions/actions.d.ts.map +1 -1
  33. package/dist/server/src/services/permissions.d.ts +14 -2
  34. package/dist/server/src/services/permissions.d.ts.map +1 -1
  35. package/dist/server/src/utils/index.d.ts +0 -2
  36. package/dist/server/src/utils/index.d.ts.map +1 -1
  37. package/package.json +9 -9
  38. package/dist/_chunks/SettingsPage-CG_qq0Tx.js.map +0 -1
  39. package/dist/_chunks/SettingsPage-DNucKxbi.mjs.map +0 -1
  40. package/dist/_chunks/en-18tWw4P6.mjs.map +0 -1
  41. package/dist/_chunks/en-Kv6y9zPQ.js.map +0 -1
  42. package/dist/_chunks/index-BYDzOiHE.mjs.map +0 -1
  43. package/dist/_chunks/index-DWAqdQ--.js.map +0 -1
  44. package/dist/admin/src/components/Initializer.d.ts +0 -5
  45. package/dist/server/src/services/entity-service-decorator.d.ts +0 -29
  46. package/dist/server/src/services/entity-service-decorator.d.ts.map +0 -1
  47. package/strapi-server.js +0 -3
@@ -1,12 +1,13 @@
1
1
  import get from "lodash/get";
2
2
  import * as yup from "yup";
3
- import { jsxs, Fragment, jsx } from "react/jsx-runtime";
3
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
4
4
  import * as React from "react";
5
- import { Typography, Field, Checkbox, Dialog, DialogBody, Flex, DialogFooter, Button as Button$1, Box, Status, IconButton, Tooltip, SingleSelect, SingleSelectOption, VisuallyHidden, useCollator, Popover } from "@strapi/design-system";
6
- import { WarningCircle, Pencil, CrossCircle, CheckCircle, ArrowsCounterClockwise, Trash, ListPlus, Earth, EarthStriked, CaretDown } from "@strapi/icons";
5
+ import { Typography, Dialog, Field, Checkbox, Flex, Button, Modal, Box, Status, IconButton, Tooltip, SingleSelect, SingleSelectOption, VisuallyHidden, useCollator, Popover } from "@strapi/design-system";
6
+ import { WarningCircle, Pencil, CrossCircle, CheckCircle, ArrowsCounterClockwise, Trash, Download, ListPlus, Cross, Earth, EarthStriked, CaretDown } from "@strapi/icons";
7
7
  import { useIntl } from "react-intl";
8
8
  import { styled } from "styled-components";
9
- import { useAuth, adminApi, useTable, Table, useQueryParams, useNotification, useAPIErrorHandler } from "@strapi/admin/strapi-admin";
9
+ import { skipToken } from "@reduxjs/toolkit/query";
10
+ import { useAuth, adminApi, useTable, Table, useQueryParams, useForm, useNotification, useAPIErrorHandler } from "@strapi/admin/strapi-admin";
10
11
  import { unstable_useDocument, unstable_useDocumentActions, buildValidParams } from "@strapi/content-manager/strapi-admin";
11
12
  import { useParams, Link, useNavigate, matchPath } from "react-router-dom";
12
13
  import * as qs from "qs";
@@ -47,9 +48,7 @@ const CheckboxConfirmation = ({
47
48
  };
48
49
  const handleConfirm = () => {
49
50
  onChange({ target: { name, value: false, type: "checkbox" } });
50
- setIsOpen(false);
51
51
  };
52
- const handleToggle = () => setIsOpen((prev) => !prev);
53
52
  const label = intlLabel.id ? formatMessage(
54
53
  { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },
55
54
  { ...intlLabel.values }
@@ -58,35 +57,36 @@ const CheckboxConfirmation = ({
58
57
  { id: description.id, defaultMessage: description.defaultMessage },
59
58
  { ...description.values }
60
59
  ) : "";
61
- return /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ return /* @__PURE__ */ jsxs(Dialog.Root, { open: isOpen, onOpenChange: setIsOpen, children: [
62
61
  /* @__PURE__ */ jsxs(Field.Root, { hint, name, children: [
63
- /* @__PURE__ */ jsx(Checkbox, { onValueChange: handleChange, value, type: "checkbox", children: label }),
62
+ /* @__PURE__ */ jsx(Checkbox, { onCheckedChange: handleChange, checked: value, children: label }),
64
63
  /* @__PURE__ */ jsx(Field.Hint, {})
65
64
  ] }),
66
- isOpen && /* @__PURE__ */ jsxs(Dialog, { onClose: handleToggle, title: "Confirmation", isOpen, children: [
67
- /* @__PURE__ */ jsx(DialogBody, { icon: /* @__PURE__ */ jsx(WarningCircle, {}), children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
68
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(TextAlignTypography, { id: "confirm-description", children: formatMessage({
65
+ /* @__PURE__ */ jsxs(Dialog.Content, { children: [
66
+ /* @__PURE__ */ jsx(Dialog.Header, { children: formatMessage({
67
+ id: getTranslation("CheckboxConfirmation.Modal.title"),
68
+ defaultMessage: "Disable localization"
69
+ }) }),
70
+ /* @__PURE__ */ jsx(Dialog.Body, { icon: /* @__PURE__ */ jsx(WarningCircle, {}), children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
71
+ /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(TextAlignTypography, { children: formatMessage({
69
72
  id: getTranslation("CheckboxConfirmation.Modal.content"),
70
73
  defaultMessage: "Disabling localization will engender the deletion of all your content but the one associated to your default locale (if existing)."
71
74
  }) }) }),
72
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", id: "confirm-description", children: formatMessage({
75
+ /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", children: formatMessage({
73
76
  id: getTranslation("CheckboxConfirmation.Modal.body"),
74
77
  defaultMessage: "Do you want to disable it?"
75
78
  }) }) })
76
79
  ] }) }),
77
- /* @__PURE__ */ jsx(
78
- DialogFooter,
79
- {
80
- startAction: /* @__PURE__ */ jsx(Button$1, { onClick: handleToggle, variant: "tertiary", children: formatMessage({
81
- id: "components.popUpWarning.button.cancel",
82
- defaultMessage: "No, cancel"
83
- }) }),
84
- endAction: /* @__PURE__ */ jsx(Button$1, { variant: "danger-light", onClick: handleConfirm, children: formatMessage({
85
- id: getTranslation("CheckboxConfirmation.Modal.button-confirm"),
86
- defaultMessage: "Yes, disable"
87
- }) })
88
- }
89
- )
80
+ /* @__PURE__ */ jsxs(Dialog.Footer, { children: [
81
+ /* @__PURE__ */ jsx(Dialog.Cancel, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", children: formatMessage({
82
+ id: "components.popUpWarning.button.cancel",
83
+ defaultMessage: "No, cancel"
84
+ }) }) }),
85
+ /* @__PURE__ */ jsx(Dialog.Action, { children: /* @__PURE__ */ jsx(Button, { variant: "danger-light", onClick: handleConfirm, children: formatMessage({
86
+ id: getTranslation("CheckboxConfirmation.Modal.button-confirm"),
87
+ defaultMessage: "Yes, disable"
88
+ }) }) })
89
+ ] })
90
90
  ] })
91
91
  ] });
92
92
  };
@@ -137,7 +137,7 @@ const useI18n = () => {
137
137
  model: params.slug
138
138
  },
139
139
  {
140
- skip: !params.slug || !params.collectionType
140
+ skip: true
141
141
  }
142
142
  );
143
143
  if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {
@@ -217,10 +217,93 @@ const relationsApi = i18nApi.injectEndpoints({
217
217
  })
218
218
  });
219
219
  const { useGetManyDraftRelationCountQuery } = relationsApi;
220
+ const cleanData = (data, schema, components) => {
221
+ const cleanedData = removeFields(data, [
222
+ "createdAt",
223
+ "createdBy",
224
+ "updatedAt",
225
+ "updatedBy",
226
+ "id",
227
+ "documentId",
228
+ "publishedAt",
229
+ "strapi_stage",
230
+ "strapi_assignee",
231
+ "locale"
232
+ ]);
233
+ const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(
234
+ cleanedData,
235
+ schema,
236
+ components,
237
+ ["relation", "password"]
238
+ );
239
+ return cleanedDataWithoutPasswordAndRelation;
240
+ };
241
+ const removeFields = (data, fields) => {
242
+ return Object.keys(data).reduce((acc, current) => {
243
+ if (fields.includes(current)) {
244
+ return acc;
245
+ }
246
+ acc[current] = data[current];
247
+ return acc;
248
+ }, {});
249
+ };
250
+ const recursiveRemoveFieldTypes = (data, schema, components, fields) => {
251
+ return Object.keys(data).reduce((acc, current) => {
252
+ const attribute = schema.attributes[current] ?? { type: void 0 };
253
+ if (fields.includes(attribute.type)) {
254
+ return acc;
255
+ }
256
+ if (attribute.type === "dynamiczone") {
257
+ acc[current] = data[current].map((componentValue, index2) => {
258
+ const { id: _, ...rest } = recursiveRemoveFieldTypes(
259
+ componentValue,
260
+ components[componentValue.__component],
261
+ components,
262
+ fields
263
+ );
264
+ return {
265
+ ...rest,
266
+ __temp_key__: index2 + 1
267
+ };
268
+ });
269
+ } else if (attribute.type === "component") {
270
+ const { repeatable, component } = attribute;
271
+ if (repeatable) {
272
+ acc[current] = (data[current] ?? []).map((compoData, index2) => {
273
+ const { id: _, ...rest } = recursiveRemoveFieldTypes(
274
+ compoData,
275
+ components[component],
276
+ components,
277
+ fields
278
+ );
279
+ return {
280
+ ...rest,
281
+ __temp_key__: index2 + 1
282
+ };
283
+ });
284
+ } else {
285
+ const { id: _, ...rest } = recursiveRemoveFieldTypes(
286
+ data[current] ?? {},
287
+ components[component],
288
+ components,
289
+ fields
290
+ );
291
+ acc[current] = rest;
292
+ }
293
+ } else {
294
+ acc[current] = data[current];
295
+ }
296
+ return acc;
297
+ }, {});
298
+ };
220
299
  const isErrorMessageDescriptor = (object) => {
221
300
  return typeof object === "object" && object !== null && "id" in object && "defaultMessage" in object;
222
301
  };
223
- const EntryValidationText = ({ status = "draft", validationErrors }) => {
302
+ const EntryValidationText = ({
303
+ status = "draft",
304
+ validationErrors,
305
+ action
306
+ }) => {
224
307
  const { formatMessage } = useIntl();
225
308
  const getErrorStr = (key, value) => {
226
309
  if (typeof value === "string") {
@@ -254,30 +337,63 @@ const EntryValidationText = ({ status = "draft", validationErrors }) => {
254
337
  ) })
255
338
  ] });
256
339
  }
257
- if (status === "published") {
258
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
259
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
260
- /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
261
- id: "content-manager.bulk-publish.already-published",
262
- defaultMessage: "Already Published"
263
- }) })
264
- ] });
265
- }
266
- if (status === "modified") {
267
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
268
- /* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
269
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
270
- id: "app.utils.ready-to-publish-changes",
271
- defaultMessage: "Ready to publish changes"
272
- }) })
273
- ] });
274
- }
340
+ const getStatusMessage = () => {
341
+ if (action === "bulk-publish") {
342
+ if (status === "published") {
343
+ return {
344
+ icon: /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
345
+ text: formatMessage({
346
+ id: "content-manager.bulk-publish.already-published",
347
+ defaultMessage: "Already Published"
348
+ }),
349
+ textColor: "success600",
350
+ fontWeight: "bold"
351
+ };
352
+ } else if (status === "modified") {
353
+ return {
354
+ icon: /* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
355
+ text: formatMessage({
356
+ id: "app.utils.ready-to-publish-changes",
357
+ defaultMessage: "Ready to publish changes"
358
+ })
359
+ };
360
+ } else {
361
+ return {
362
+ icon: /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
363
+ text: formatMessage({
364
+ id: "app.utils.ready-to-publish",
365
+ defaultMessage: "Ready to publish"
366
+ })
367
+ };
368
+ }
369
+ } else {
370
+ if (status === "draft") {
371
+ return {
372
+ icon: /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
373
+ text: formatMessage({
374
+ id: "content-manager.bulk-unpublish.already-unpublished",
375
+ defaultMessage: "Already Unpublished"
376
+ }),
377
+ textColor: "success600",
378
+ fontWeight: "bold"
379
+ };
380
+ } else {
381
+ return {
382
+ icon: /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
383
+ text: formatMessage({
384
+ id: "app.utils.ready-to-unpublish-changes",
385
+ defaultMessage: "Ready to unpublish"
386
+ }),
387
+ textColor: "success600",
388
+ fontWeight: "bold"
389
+ };
390
+ }
391
+ }
392
+ };
393
+ const { icon, text, textColor = "success600", fontWeight = "normal" } = getStatusMessage();
275
394
  return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
276
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
277
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
278
- id: "app.utils.ready-to-publish",
279
- defaultMessage: "Ready to publish"
280
- }) })
395
+ icon,
396
+ /* @__PURE__ */ jsx(Typography, { textColor, fontWeight, children: text })
281
397
  ] });
282
398
  };
283
399
  const BoldChunk = (chunks) => /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", children: chunks });
@@ -285,7 +401,8 @@ const BulkLocaleActionModal = ({
285
401
  headers,
286
402
  rows,
287
403
  localesMetadata,
288
- validationErrors = {}
404
+ validationErrors = {},
405
+ action
289
406
  }) => {
290
407
  const { formatMessage } = useIntl();
291
408
  const selectedRows = useTable(
@@ -298,27 +415,29 @@ const BulkLocaleActionModal = ({
298
415
  return acc;
299
416
  }, {});
300
417
  const localesWithErrors = Object.keys(validationErrors);
301
- const alreadyPublishedCount = selectedRows.filter(
418
+ const publishedCount = selectedRows.filter(
302
419
  ({ locale }) => currentStatusByLocale[locale] === "published"
303
420
  ).length;
304
- const readyToPublishCount = selectedRows.filter(
421
+ const draftCount = selectedRows.filter(
305
422
  ({ locale }) => (currentStatusByLocale[locale] === "draft" || currentStatusByLocale[locale] === "modified") && !localesWithErrors.includes(locale)
306
423
  ).length;
307
424
  const withErrorsCount = localesWithErrors.length;
425
+ const messageId = action === "bulk-publish" ? "content-manager.containers.list.selectedEntriesModal.selectedCount.publish" : "content-manager.containers.list.selectedEntriesModal.selectedCount.unpublish";
426
+ const defaultMessage = action === "bulk-publish" ? "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action." : "<b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} already unpublished. <b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} ready to unpublish.";
308
427
  return formatMessage(
309
428
  {
310
- id: "content-manager.containers.list.selectedEntriesModal.selectedCount",
311
- defaultMessage: "<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
429
+ id: messageId,
430
+ defaultMessage
312
431
  },
313
432
  {
314
433
  withErrorsCount,
315
- readyToPublishCount,
316
- alreadyPublishedCount,
434
+ draftCount,
435
+ publishedCount,
317
436
  b: BoldChunk
318
437
  }
319
438
  );
320
439
  };
321
- return /* @__PURE__ */ jsxs(React.Fragment, { children: [
440
+ return /* @__PURE__ */ jsxs(Modal.Body, { children: [
322
441
  /* @__PURE__ */ jsx(Typography, { children: getFormattedCountMessage() }),
323
442
  /* @__PURE__ */ jsx(Box, { marginTop: 5, children: /* @__PURE__ */ jsxs(Table.Content, { children: [
324
443
  /* @__PURE__ */ jsxs(Table.Head, { children: [
@@ -345,7 +464,7 @@ const BulkLocaleActionModal = ({
345
464
  children: /* @__PURE__ */ jsx(Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
346
465
  }
347
466
  ) }) }),
348
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(EntryValidationText, { validationErrors: error, status }) }),
467
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(EntryValidationText, { validationErrors: error, status, action }) }),
349
468
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(
350
469
  IconButton,
351
470
  {
@@ -362,7 +481,7 @@ const BulkLocaleActionModal = ({
362
481
  name: locale
363
482
  }
364
483
  ),
365
- borderWidth: 0,
484
+ variant: "ghost",
366
485
  children: /* @__PURE__ */ jsx(Pencil, {})
367
486
  }
368
487
  ) })
@@ -382,7 +501,13 @@ const LocalePickerAction = ({
382
501
  const [{ query }, setQuery] = useQueryParams();
383
502
  const { hasI18n, canCreate, canRead } = useI18n();
384
503
  const { data: locales = [] } = useGetLocalesQuery();
385
- const { schema } = unstable_useDocument({ model, collectionType, documentId });
504
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
505
+ const { schema } = unstable_useDocument({
506
+ model,
507
+ collectionType,
508
+ documentId,
509
+ params: { locale: currentDesiredLocale }
510
+ });
386
511
  const handleSelect = React.useCallback(
387
512
  (value) => {
388
513
  setQuery({
@@ -400,21 +525,20 @@ const LocalePickerAction = ({
400
525
  if (!Array.isArray(locales) || !hasI18n) {
401
526
  return;
402
527
  }
403
- const currentDesiredLocale = query.plugins?.i18n?.locale;
404
528
  const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
405
529
  const defaultLocale = locales.find((locale) => locale.isDefault);
406
530
  if (!doesLocaleExist && defaultLocale?.code) {
407
531
  handleSelect(defaultLocale.code);
408
532
  }
409
- }, [handleSelect, hasI18n, locales, query.plugins?.i18n?.locale]);
410
- if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
411
- return null;
412
- }
413
- const currentLocale = query.plugins?.i18n?.locale || locales.find((loc) => loc.isDefault)?.code;
533
+ }, [handleSelect, hasI18n, locales, currentDesiredLocale]);
534
+ const currentLocale = Array.isArray(locales) ? locales.find((locale) => locale.code === currentDesiredLocale)?.code : void 0;
414
535
  const allCurrentLocales = [
415
536
  { status: getDocumentStatus(document, meta), locale: currentLocale },
416
537
  ...meta?.availableLocales ?? []
417
538
  ];
539
+ if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
540
+ return null;
541
+ }
418
542
  return {
419
543
  label: formatMessage({
420
544
  id: getTranslation("Settings.locales.modal.locales.label"),
@@ -426,7 +550,7 @@ const LocalePickerAction = ({
426
550
  );
427
551
  const status = currentLocaleDoc?.status ?? "draft";
428
552
  const permissionsToCheck = currentLocaleDoc ? canCreate : canRead;
429
- const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
553
+ const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
430
554
  return {
431
555
  disabled: !permissionsToCheck.includes(locale.code),
432
556
  value: locale.code,
@@ -462,6 +586,95 @@ const getDocumentStatus = (document, meta) => {
462
586
  }
463
587
  return docStatus;
464
588
  };
589
+ const FillFromAnotherLocaleAction = ({
590
+ documentId,
591
+ meta,
592
+ model,
593
+ collectionType
594
+ }) => {
595
+ const { formatMessage } = useIntl();
596
+ const [{ query }] = useQueryParams();
597
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
598
+ const [localeSelected, setLocaleSelected] = React.useState(null);
599
+ const setValues = useForm("FillFromAnotherLocale", (state) => state.setValues);
600
+ const { getDocument } = unstable_useDocumentActions();
601
+ const { schema, components } = unstable_useDocument({
602
+ model,
603
+ documentId,
604
+ collectionType,
605
+ params: { locale: currentDesiredLocale }
606
+ });
607
+ const { data: locales = [] } = useGetLocalesQuery();
608
+ const availableLocales = Array.isArray(locales) ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code)) : [];
609
+ const fillFromLocale = (onClose) => async () => {
610
+ const response = await getDocument({
611
+ collectionType,
612
+ model,
613
+ documentId,
614
+ params: { locale: localeSelected }
615
+ });
616
+ if (!response || !schema) {
617
+ return;
618
+ }
619
+ const { data } = response;
620
+ const cleanedData = cleanData(data, schema, components);
621
+ setValues(cleanedData);
622
+ onClose();
623
+ };
624
+ return {
625
+ type: "icon",
626
+ icon: /* @__PURE__ */ jsx(Download, {}),
627
+ disabled: availableLocales.length === 0,
628
+ label: formatMessage({
629
+ id: getTranslation("CMEditViewCopyLocale.copy-text"),
630
+ defaultMessage: "Fill in from another locale"
631
+ }),
632
+ dialog: {
633
+ type: "dialog",
634
+ title: formatMessage({
635
+ id: getTranslation("CMEditViewCopyLocale.dialog.title"),
636
+ defaultMessage: "Confirmation"
637
+ }),
638
+ content: ({ onClose }) => /* @__PURE__ */ jsxs(Fragment, { children: [
639
+ /* @__PURE__ */ jsx(Dialog.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 3, children: [
640
+ /* @__PURE__ */ jsx(WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
641
+ /* @__PURE__ */ jsx(Typography, { textAlign: "center", children: formatMessage({
642
+ id: getTranslation("CMEditViewCopyLocale.dialog.body"),
643
+ defaultMessage: "Your current content will be erased and filled by the content of the selected locale:"
644
+ }) }),
645
+ /* @__PURE__ */ jsxs(Field.Root, { width: "100%", children: [
646
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
647
+ id: getTranslation("CMEditViewCopyLocale.dialog.field.label"),
648
+ defaultMessage: "Locale"
649
+ }) }),
650
+ /* @__PURE__ */ jsx(
651
+ SingleSelect,
652
+ {
653
+ value: localeSelected,
654
+ placeholder: formatMessage({
655
+ id: getTranslation("CMEditViewCopyLocale.dialog.field.placeholder"),
656
+ defaultMessage: "Select one locale..."
657
+ }),
658
+ onChange: (value) => setLocaleSelected(value),
659
+ children: availableLocales.map((locale) => /* @__PURE__ */ jsx(SingleSelectOption, { value: locale.code, children: locale.name }, locale.code))
660
+ }
661
+ )
662
+ ] })
663
+ ] }) }),
664
+ /* @__PURE__ */ jsx(Dialog.Footer, { children: /* @__PURE__ */ jsxs(Flex, { gap: 2, width: "100%", children: [
665
+ /* @__PURE__ */ jsx(Button, { flex: "auto", variant: "tertiary", onClick: onClose, children: formatMessage({
666
+ id: getTranslation("CMEditViewCopyLocale.cancel-text"),
667
+ defaultMessage: "No, cancel"
668
+ }) }),
669
+ /* @__PURE__ */ jsx(Button, { flex: "auto", variant: "success", onClick: fillFromLocale(onClose), children: formatMessage({
670
+ id: getTranslation("CMEditViewCopyLocale.submit-text"),
671
+ defaultMessage: "Yes, fill in"
672
+ }) })
673
+ ] }) })
674
+ ] })
675
+ }
676
+ };
677
+ };
465
678
  const DeleteLocaleAction = ({
466
679
  document,
467
680
  documentId,
@@ -473,16 +686,23 @@ const DeleteLocaleAction = ({
473
686
  const { toggleNotification } = useNotification();
474
687
  const { delete: deleteAction } = unstable_useDocumentActions();
475
688
  const { hasI18n, canDelete } = useI18n();
689
+ const [{ query }] = useQueryParams();
690
+ const { data: locales = [] } = useGetLocalesQuery();
691
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
692
+ const locale = !("error" in locales) && locales.find((loc) => loc.code === currentDesiredLocale);
476
693
  if (!hasI18n) {
477
694
  return null;
478
695
  }
479
696
  return {
480
697
  disabled: document?.locale && !canDelete.includes(document.locale) || !document || !document.id,
481
698
  position: ["header", "table-row"],
482
- label: formatMessage({
483
- id: getTranslation("actions.delete.label"),
484
- defaultMessage: "Delete locale"
485
- }),
699
+ label: formatMessage(
700
+ {
701
+ id: getTranslation("actions.delete.label"),
702
+ defaultMessage: "Delete entry ({locale})"
703
+ },
704
+ { locale: locale && locale.name }
705
+ ),
486
706
  icon: /* @__PURE__ */ jsx(StyledTrash, {}),
487
707
  variant: "danger",
488
708
  dialog: {
@@ -525,37 +745,43 @@ const DeleteLocaleAction = ({
525
745
  }
526
746
  };
527
747
  };
528
- const BulkLocalePublishAction = ({
748
+ const BulkLocaleAction = ({
529
749
  document: baseDocument,
530
750
  documentId,
531
751
  model,
532
- collectionType
752
+ collectionType,
753
+ action
533
754
  }) => {
534
755
  const baseLocale = baseDocument?.locale ?? null;
535
756
  const [{ query }] = useQueryParams();
536
757
  const params = React.useMemo(() => buildValidParams(query), [query]);
537
- const isPublishedTab = query.status === "published";
758
+ const isOnPublishedTab = query.status === "published";
538
759
  const { formatMessage } = useIntl();
539
760
  const { hasI18n, canPublish } = useI18n();
540
761
  const { toggleNotification } = useNotification();
541
762
  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
542
763
  const [selectedRows, setSelectedRows] = React.useState([]);
543
- const [isConfirmationOpen, setIsConfirmationOpen] = React.useState(false);
544
- const { publishMany: publishManyAction } = unstable_useDocumentActions();
764
+ const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] = React.useState(false);
765
+ const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } = unstable_useDocumentActions();
545
766
  const {
546
767
  document,
547
768
  meta: documentMeta,
548
769
  schema,
549
770
  validate
550
- } = unstable_useDocument({
551
- model,
552
- collectionType,
553
- documentId,
554
- params: {
555
- locale: baseLocale
771
+ } = unstable_useDocument(
772
+ {
773
+ model,
774
+ collectionType,
775
+ documentId,
776
+ params: {
777
+ locale: baseLocale
778
+ }
779
+ },
780
+ {
781
+ skip: !hasI18n || !baseLocale
556
782
  }
557
- });
558
- const { data: localesMetadata = [] } = useGetLocalesQuery();
783
+ );
784
+ const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? void 0 : skipToken);
559
785
  const headers = [
560
786
  {
561
787
  label: formatMessage({
@@ -604,12 +830,19 @@ const BulkLocalePublishAction = ({
604
830
  }, {});
605
831
  return [rowsFromMeta, errors];
606
832
  }, [document, documentMeta?.availableLocales, validate]);
607
- const localesToPublish = selectedRows.reduce((acc, selectedRow) => {
608
- if (selectedRow.status !== "published" && !Object.keys(validationErrors).includes(selectedRow.locale)) {
833
+ const isBulkPublish = action === "bulk-publish";
834
+ const localesForAction = selectedRows.reduce((acc, selectedRow) => {
835
+ const isValidLocale = (
836
+ // Validation errors are irrelevant if we are trying to unpublish
837
+ !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale)
838
+ );
839
+ const shouldAddLocale = isBulkPublish ? selectedRow.status !== "published" && isValidLocale : selectedRow.status !== "draft" && isValidLocale;
840
+ if (shouldAddLocale) {
609
841
  acc.push(selectedRow.locale);
610
842
  }
611
843
  return acc;
612
844
  }, []);
845
+ const enableDraftRelationsCount = false;
613
846
  const {
614
847
  data: draftRelationsCount = 0,
615
848
  isLoading: isDraftRelationsLoading,
@@ -618,10 +851,10 @@ const BulkLocalePublishAction = ({
618
851
  {
619
852
  model,
620
853
  documentIds: [documentId],
621
- locale: localesToPublish
854
+ locale: localesForAction
622
855
  },
623
856
  {
624
- skip: !documentId || localesToPublish.length === 0
857
+ skip: !enableDraftRelationsCount
625
858
  }
626
859
  );
627
860
  React.useEffect(() => {
@@ -647,23 +880,32 @@ const BulkLocalePublishAction = ({
647
880
  documentIds: [documentId],
648
881
  params: {
649
882
  ...params,
650
- locale: localesToPublish
883
+ locale: localesForAction
884
+ }
885
+ });
886
+ setSelectedRows([]);
887
+ };
888
+ const unpublish = async () => {
889
+ await unpublishManyAction({
890
+ model,
891
+ documentIds: [documentId],
892
+ params: {
893
+ ...params,
894
+ locale: localesForAction
651
895
  }
652
896
  });
653
897
  setSelectedRows([]);
654
898
  };
655
899
  const handleAction = async () => {
656
900
  if (draftRelationsCount > 0) {
657
- setIsConfirmationOpen(true);
658
- } else {
901
+ setIsDraftRelationConfirmationOpen(true);
902
+ } else if (isBulkPublish) {
659
903
  await publish();
904
+ } else {
905
+ await unpublish();
660
906
  }
661
907
  };
662
- const isUnpublish = document?.status === "published";
663
- if (isUnpublish) {
664
- console.warn(["I18N"], "Bulk locale unpublish modal not implemented");
665
- }
666
- if (isConfirmationOpen) {
908
+ if (isDraftRelationConfirmationOpen) {
667
909
  return {
668
910
  label: formatMessage({
669
911
  id: "app.components.ConfirmDialog.title",
@@ -672,11 +914,11 @@ const BulkLocalePublishAction = ({
672
914
  variant: "danger",
673
915
  dialog: {
674
916
  onCancel: () => {
675
- setIsConfirmationOpen(false);
917
+ setIsDraftRelationConfirmationOpen(false);
676
918
  },
677
919
  onConfirm: async () => {
678
920
  await publish();
679
- setIsConfirmationOpen(false);
921
+ setIsDraftRelationConfirmationOpen(false);
680
922
  },
681
923
  type: "dialog",
682
924
  title: formatMessage({
@@ -686,27 +928,32 @@ const BulkLocalePublishAction = ({
686
928
  content: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "center", gap: 2, children: [
687
929
  /* @__PURE__ */ jsx(WarningCircle, { width: "2.4rem", height: "2.4rem", fill: "danger600" }),
688
930
  /* @__PURE__ */ jsx(Typography, { textAlign: "center", children: formatMessage({
689
- id: "content-manager.actions.discard.dialog.body",
690
- defaultMessage: "Are you sure you want to discard the changes? This action is irreversible."
931
+ id: getTranslation("CMEditViewBulkLocale.draft-relation-warning"),
932
+ defaultMessage: "Some locales are related to draft entries. Publishing them could leave broken links in your app."
933
+ }) }),
934
+ /* @__PURE__ */ jsx(Typography, { textAlign: "center", children: formatMessage({
935
+ id: getTranslation("CMEditViewBulkLocale.continue-confirmation"),
936
+ defaultMessage: "Are you sure you want to continue?"
691
937
  }) })
692
938
  ] })
693
939
  }
694
940
  };
695
941
  }
942
+ const hasPermission = selectedRows.map(({ locale }) => locale).every((locale) => canPublish.includes(locale));
696
943
  return {
697
944
  label: formatMessage({
698
- id: getTranslation("CMEditViewBulkLocale.publish-title"),
699
- defaultMessage: "Publish Multiple Locales"
945
+ id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
946
+ defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
700
947
  }),
701
- icon: /* @__PURE__ */ jsx(ListPlus, {}),
702
- disabled: isPublishedTab || !canPublish,
948
+ variant: isBulkPublish ? "secondary" : "danger",
949
+ icon: isBulkPublish ? /* @__PURE__ */ jsx(ListPlus, {}) : /* @__PURE__ */ jsx(Cross, {}),
950
+ disabled: isOnPublishedTab || canPublish.length === 0,
703
951
  position: ["panel"],
704
- variant: "secondary",
705
952
  dialog: {
706
953
  type: "modal",
707
954
  title: formatMessage({
708
- id: getTranslation("CMEditViewBulkLocale.publish-title"),
709
- defaultMessage: "Publish Multiple Locales"
955
+ id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
956
+ defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
710
957
  }),
711
958
  content: () => {
712
959
  return /* @__PURE__ */ jsx(
@@ -725,28 +972,35 @@ const BulkLocalePublishAction = ({
725
972
  validationErrors,
726
973
  headers,
727
974
  rows,
728
- localesMetadata
975
+ localesMetadata,
976
+ action: action ?? "bulk-publish"
729
977
  }
730
978
  )
731
979
  }
732
980
  );
733
981
  },
734
- footer: () => /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(
735
- Button$1,
982
+ footer: () => /* @__PURE__ */ jsx(Modal.Footer, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(
983
+ Button,
736
984
  {
737
985
  loading: isDraftRelationsLoading,
738
- disabled: localesToPublish.length === 0,
986
+ disabled: !hasPermission || localesForAction.length === 0,
739
987
  variant: "default",
740
988
  onClick: handleAction,
741
989
  children: formatMessage({
742
- id: "app.utils.publish",
743
- defaultMessage: "Publish"
990
+ id: isBulkPublish ? "app.utils.publish" : "app.utils.unpublish",
991
+ defaultMessage: isBulkPublish ? "Publish" : "Unpublish"
744
992
  })
745
993
  }
746
994
  ) })
747
995
  }
748
996
  };
749
997
  };
998
+ const BulkLocalePublishAction = (props) => {
999
+ return BulkLocaleAction({ action: "bulk-publish", ...props });
1000
+ };
1001
+ const BulkLocaleUnpublishAction = (props) => {
1002
+ return BulkLocaleAction({ action: "bulk-unpublish", ...props });
1003
+ };
750
1004
  const StyledTrash = styled(Trash)`
751
1005
  path {
752
1006
  fill: currentColor;
@@ -803,13 +1057,6 @@ const UnpublishModalAdditionalInfo = () => {
803
1057
  }
804
1058
  ) });
805
1059
  };
806
- const Initializer = ({ setPlugin }) => {
807
- const setPluginRef = React.useRef(setPlugin);
808
- React.useEffect(() => {
809
- setPluginRef.current(pluginId);
810
- }, []);
811
- return null;
812
- };
813
1060
  const LocalePicker = () => {
814
1061
  const { formatMessage } = useIntl();
815
1062
  const [{ query }, setQuery] = useQueryParams();
@@ -869,7 +1116,7 @@ const PERMISSIONS = {
869
1116
  read: [{ action: "plugin::i18n.locale.read", subject: null }]
870
1117
  };
871
1118
  const mutateEditViewHook = ({ layout }) => {
872
- if ("i18n" in layout.options && typeof layout.options.i18n === "object" && layout.options.i18n !== null && "localized" in layout.options.i18n && !layout.options.i18n.localized) {
1119
+ if (!("i18n" in layout.options) || typeof layout.options.i18n === "object" && layout.options.i18n !== null && "localized" in layout.options.i18n && !layout.options.i18n.localized) {
873
1120
  return { layout };
874
1121
  }
875
1122
  const components = Object.entries(layout.components).reduce(
@@ -915,7 +1162,7 @@ const doesFieldHaveI18nPluginOpt = (pluginOpts) => {
915
1162
  const LabelAction = ({ title, icon }) => {
916
1163
  const { formatMessage } = useIntl();
917
1164
  return /* @__PURE__ */ jsxs(Span, { tag: "span", children: [
918
- /* @__PURE__ */ jsx(VisuallyHidden, { tag: "span", children: `(${formatMessage(title)})` }),
1165
+ /* @__PURE__ */ jsx(VisuallyHidden, { tag: "span", children: formatMessage(title) }),
919
1166
  React.cloneElement(icon, {
920
1167
  "aria-hidden": true,
921
1168
  focusable: false
@@ -950,13 +1197,7 @@ const LocaleListCell = ({
950
1197
  }
951
1198
  });
952
1199
  const { locale: language } = useIntl();
953
- const [visible, setVisible] = React.useState(false);
954
- const buttonRef = React.useRef(null);
955
1200
  const { data: locales = [] } = useGetLocalesQuery();
956
- const handleTogglePopover = (e) => {
957
- e.stopPropagation();
958
- setVisible((prev) => !prev);
959
- };
960
1201
  const formatter = useCollator(language, {
961
1202
  sensitivity: "base"
962
1203
  });
@@ -978,64 +1219,14 @@ const LocaleListCell = ({
978
1219
  }
979
1220
  return locale.name;
980
1221
  }).toSorted((a, b) => formatter.compare(a, b));
981
- return /* @__PURE__ */ jsxs(Button, { type: "button", onClick: handleTogglePopover, ref: buttonRef, children: [
982
- /* @__PURE__ */ jsxs(
983
- ActionWrapper,
984
- {
985
- minWidth: "100%",
986
- alignItems: "center",
987
- justifyContent: "center",
988
- height: "3.2rem",
989
- width: "3.2rem",
990
- children: [
991
- /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", ellipsis: true, children: localesForDocument.join(", ") }),
992
- /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(CaretDown, {}) })
993
- ]
994
- }
995
- ),
996
- visible && /* @__PURE__ */ jsx(
997
- Popover,
998
- {
999
- onDismiss: () => setVisible(false),
1000
- source: buttonRef,
1001
- spacing: 16,
1002
- centered: true,
1003
- children: /* @__PURE__ */ jsx("ul", { children: localesForDocument.map((name) => /* @__PURE__ */ jsx(Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsx(Typography, { children: name }) }, name)) })
1004
- }
1005
- )
1222
+ return /* @__PURE__ */ jsxs(Popover.Root, { children: [
1223
+ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Button, { variant: "ghost", type: "button", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs(Flex, { minWidth: "100%", alignItems: "center", justifyContent: "center", fontWeight: "regular", children: [
1224
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", ellipsis: true, marginRight: 2, children: localesForDocument.join(", ") }),
1225
+ /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(CaretDown, { width: "1.2rem", height: "1.2rem" }) })
1226
+ ] }) }) }),
1227
+ /* @__PURE__ */ jsx(Popover.Content, { sideOffset: 16, children: /* @__PURE__ */ jsx("ul", { children: localesForDocument.map((name) => /* @__PURE__ */ jsx(Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsx(Typography, { children: name }) }, name)) }) })
1006
1228
  ] });
1007
1229
  };
1008
- const Button = styled.button`
1009
- width: 100%;
1010
-
1011
- svg {
1012
- > g,
1013
- path {
1014
- fill: ${({ theme }) => theme.colors.neutral500};
1015
- }
1016
- }
1017
- &:hover {
1018
- svg {
1019
- > g,
1020
- path {
1021
- fill: ${({ theme }) => theme.colors.neutral600};
1022
- }
1023
- }
1024
- }
1025
- &:active {
1026
- svg {
1027
- > g,
1028
- path {
1029
- fill: ${({ theme }) => theme.colors.neutral400};
1030
- }
1031
- }
1032
- }
1033
- `;
1034
- const ActionWrapper = styled(Flex)`
1035
- svg {
1036
- height: 0.4rem;
1037
- }
1038
- `;
1039
1230
  const addColumnToTableHook = ({ displayedHeaders, layout }) => {
1040
1231
  const { options } = layout;
1041
1232
  const isFieldLocalized = doesPluginOptionsHaveI18nLocalized(options) ? options.i18n.localized : false;
@@ -1216,8 +1407,6 @@ const index = {
1216
1407
  app.addRBACMiddleware([localeMiddleware]);
1217
1408
  app.registerPlugin({
1218
1409
  id: pluginId,
1219
- initializer: Initializer,
1220
- isReady: false,
1221
1410
  name: pluginId
1222
1411
  });
1223
1412
  },
@@ -1235,11 +1424,11 @@ const index = {
1235
1424
  },
1236
1425
  id: "internationalization",
1237
1426
  to: "internationalization",
1238
- Component: () => import("./SettingsPage-DNucKxbi.mjs").then((mod) => ({ default: mod.ProtectedSettingsPage })),
1427
+ Component: () => import("./SettingsPage-BIZrSFGY.mjs").then((mod) => ({ default: mod.ProtectedSettingsPage })),
1239
1428
  permissions: PERMISSIONS.accessMain
1240
1429
  });
1241
1430
  const contentManager = app.getPlugin("content-manager");
1242
- contentManager.apis.addDocumentHeaderAction([LocalePickerAction]);
1431
+ contentManager.apis.addDocumentHeaderAction([LocalePickerAction, FillFromAnotherLocaleAction]);
1243
1432
  contentManager.apis.addDocumentAction((actions) => {
1244
1433
  const indexOfDeleteAction = actions.findIndex((action) => action.type === "delete");
1245
1434
  actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);
@@ -1247,6 +1436,7 @@ const index = {
1247
1436
  });
1248
1437
  contentManager.apis.addDocumentAction((actions) => {
1249
1438
  actions.splice(2, 0, BulkLocalePublishAction);
1439
+ actions.splice(5, 0, BulkLocaleUnpublishAction);
1250
1440
  return actions;
1251
1441
  });
1252
1442
  contentManager.injectComponent("listView", "actions", {
@@ -1352,7 +1542,7 @@ const index = {
1352
1542
  async registerTrads({ locales }) {
1353
1543
  const importedTrads = await Promise.all(
1354
1544
  locales.map((locale) => {
1355
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-9eCAqqrB.mjs"), "./translations/dk.json": () => import("./dk-2qBjxt-P.mjs"), "./translations/en.json": () => import("./en-18tWw4P6.mjs"), "./translations/es.json": () => import("./es-DlmMVaBG.mjs"), "./translations/fr.json": () => import("./fr-3S6ke71d.mjs"), "./translations/ko.json": () => import("./ko-qTjQ8IMw.mjs"), "./translations/pl.json": () => import("./pl-B67TSHqT.mjs"), "./translations/ru.json": () => import("./ru-hagMa57T.mjs"), "./translations/tr.json": () => import("./tr-Dw_jmkG-.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-Dyc-aR-h.mjs"), "./translations/zh.json": () => import("./zh-57YM4amO.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
1545
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-9eCAqqrB.mjs"), "./translations/dk.json": () => import("./dk-2qBjxt-P.mjs"), "./translations/en.json": () => import("./en-DZXpOMHo.mjs"), "./translations/es.json": () => import("./es-DlmMVaBG.mjs"), "./translations/fr.json": () => import("./fr-3S6ke71d.mjs"), "./translations/ko.json": () => import("./ko-qTjQ8IMw.mjs"), "./translations/pl.json": () => import("./pl-B67TSHqT.mjs"), "./translations/ru.json": () => import("./ru-hagMa57T.mjs"), "./translations/tr.json": () => import("./tr-Dw_jmkG-.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-Dyc-aR-h.mjs"), "./translations/zh.json": () => import("./zh-57YM4amO.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
1356
1546
  return {
1357
1547
  data: prefixPluginTranslations(data, pluginId),
1358
1548
  locale
@@ -1378,4 +1568,4 @@ export {
1378
1568
  index as i,
1379
1569
  useCreateLocaleMutation as u
1380
1570
  };
1381
- //# sourceMappingURL=index-BYDzOiHE.mjs.map
1571
+ //# sourceMappingURL=index-DXrgAtCA.mjs.map