@strapi/content-manager 0.0.0-experimental.afa3b513b8f95459043f33fb94f4bac03af1474f → 0.0.0-experimental.b0db56479de441dfe8feb37a43c7f6f6fecf75c1

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 (168) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js → ComponentConfigurationPage-Cjr64OS0.js} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js.map → ComponentConfigurationPage-Cjr64OS0.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs → ComponentConfigurationPage-DKuCF_uX.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs.map → ComponentConfigurationPage-DKuCF_uX.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js → EditConfigurationPage-BeikGxvq.js} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js.map → EditConfigurationPage-BeikGxvq.js.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs → EditConfigurationPage-CyqSP6ru.mjs} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs.map → EditConfigurationPage-CyqSP6ru.mjs.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-zFjJK0s8.mjs → EditViewPage-PrPHZN_9.mjs} +50 -10
  10. package/dist/_chunks/EditViewPage-PrPHZN_9.mjs.map +1 -0
  11. package/dist/_chunks/{EditViewPage-CHgoNwlc.js → EditViewPage-pyqEgLgP.js} +49 -9
  12. package/dist/_chunks/EditViewPage-pyqEgLgP.js.map +1 -0
  13. package/dist/_chunks/{Field-DPAzUS1M.mjs → Field-DuAYQka5.mjs} +93 -29
  14. package/dist/_chunks/Field-DuAYQka5.mjs.map +1 -0
  15. package/dist/_chunks/{Field-9DePZh-0.js → Field-fKtb7rWK.js} +93 -29
  16. package/dist/_chunks/Field-fKtb7rWK.js.map +1 -0
  17. package/dist/_chunks/{Form-DPm-KZ1A.js → Form-BPXw-S-J.js} +3 -3
  18. package/dist/_chunks/Form-BPXw-S-J.js.map +1 -0
  19. package/dist/_chunks/{Form-CEkENbkF.mjs → Form-Dxh71ckp.mjs} +3 -3
  20. package/dist/_chunks/Form-Dxh71ckp.mjs.map +1 -0
  21. package/dist/_chunks/{History-DXSbTWez.js → History-BGGn9JGY.js} +38 -97
  22. package/dist/_chunks/History-BGGn9JGY.js.map +1 -0
  23. package/dist/_chunks/{History-utls71em.mjs → History-CGblSVMc.mjs} +39 -98
  24. package/dist/_chunks/History-CGblSVMc.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js → ListConfigurationPage-D3Avyi4t.js} +3 -3
  26. package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js.map → ListConfigurationPage-D3Avyi4t.js.map} +1 -1
  27. package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs → ListConfigurationPage-TIM0JveM.mjs} +3 -3
  28. package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs.map → ListConfigurationPage-TIM0JveM.mjs.map} +1 -1
  29. package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs → ListViewPage-C975eW-t.mjs} +29 -7
  30. package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs.map → ListViewPage-C975eW-t.mjs.map} +1 -1
  31. package/dist/_chunks/{ListViewPage-DfuwH1tt.js → ListViewPage-DtAHWFMV.js} +29 -7
  32. package/dist/_chunks/ListViewPage-DtAHWFMV.js.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js → NoContentTypePage-BFjWZX0i.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js.map → NoContentTypePage-BFjWZX0i.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs → NoContentTypePage-SgNTVGjF.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs.map → NoContentTypePage-SgNTVGjF.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs → NoPermissionsPage-D4XYRoPf.mjs} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs.map → NoPermissionsPage-D4XYRoPf.mjs.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js → NoPermissionsPage-j7oulOpl.js} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js.map → NoPermissionsPage-j7oulOpl.js.map} +1 -1
  41. package/dist/_chunks/Preview-Bx1WfmKJ.js +256 -0
  42. package/dist/_chunks/Preview-Bx1WfmKJ.js.map +1 -0
  43. package/dist/_chunks/Preview-Cy6fuAnd.mjs +237 -0
  44. package/dist/_chunks/Preview-Cy6fuAnd.mjs.map +1 -0
  45. package/dist/_chunks/{Relations-CFjTESWQ.js → Relations-CXQqwRXC.js} +71 -35
  46. package/dist/_chunks/Relations-CXQqwRXC.js.map +1 -0
  47. package/dist/_chunks/{Relations-QP5yn9_z.mjs → Relations-DUrYWw0N.mjs} +72 -36
  48. package/dist/_chunks/Relations-DUrYWw0N.mjs.map +1 -0
  49. package/dist/_chunks/{en-CPTj6CjC.mjs → en-69jRDM9j.mjs} +20 -10
  50. package/dist/_chunks/{en-CPTj6CjC.mjs.map → en-69jRDM9j.mjs.map} +1 -1
  51. package/dist/_chunks/{en-BVzUkPxZ.js → en-DAgtrRoa.js} +20 -10
  52. package/dist/_chunks/{en-BVzUkPxZ.js.map → en-DAgtrRoa.js.map} +1 -1
  53. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  54. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  55. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  56. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  57. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  58. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  59. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  60. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  61. package/dist/_chunks/{index-BHfS6_D5.mjs → index-Ta--2bRa.mjs} +858 -722
  62. package/dist/_chunks/index-Ta--2bRa.mjs.map +1 -0
  63. package/dist/_chunks/{index-DXiHxy70.js → index-_j7lH3CO.js} +855 -718
  64. package/dist/_chunks/index-_j7lH3CO.js.map +1 -0
  65. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  66. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  67. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  68. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  69. package/dist/_chunks/{layout-bE-WUnQ0.js → layout-BDwU2I_y.js} +3 -3
  70. package/dist/_chunks/{layout-bE-WUnQ0.js.map → layout-BDwU2I_y.js.map} +1 -1
  71. package/dist/_chunks/{layout-DX_52HSH.mjs → layout-C8H4oKDo.mjs} +3 -3
  72. package/dist/_chunks/{layout-DX_52HSH.mjs.map → layout-C8H4oKDo.mjs.map} +1 -1
  73. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  74. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  75. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  76. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  77. package/dist/_chunks/{relations-D706vblp.js → relations-CPfMNzM6.js} +6 -7
  78. package/dist/_chunks/relations-CPfMNzM6.js.map +1 -0
  79. package/dist/_chunks/{relations-SCVAL_aJ.mjs → relations-Ch70q86O.mjs} +6 -7
  80. package/dist/_chunks/relations-Ch70q86O.mjs.map +1 -0
  81. package/dist/admin/index.js +2 -1
  82. package/dist/admin/index.js.map +1 -1
  83. package/dist/admin/index.mjs +4 -3
  84. package/dist/admin/src/exports.d.ts +1 -1
  85. package/dist/admin/src/hooks/useDocument.d.ts +32 -1
  86. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  87. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  88. package/dist/admin/src/pages/EditView/components/Header.d.ts +1 -0
  89. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  90. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  91. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  92. package/dist/admin/src/preview/constants.d.ts +1 -0
  93. package/dist/admin/src/preview/index.d.ts +4 -0
  94. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  95. package/dist/admin/src/preview/routes.d.ts +3 -0
  96. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  97. package/dist/admin/src/router.d.ts +1 -1
  98. package/dist/server/index.js +371 -158
  99. package/dist/server/index.js.map +1 -1
  100. package/dist/server/index.mjs +371 -158
  101. package/dist/server/index.mjs.map +1 -1
  102. package/dist/server/src/bootstrap.d.ts.map +1 -1
  103. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  104. package/dist/server/src/controllers/index.d.ts.map +1 -1
  105. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  106. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  107. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  108. package/dist/server/src/history/services/history.d.ts.map +1 -1
  109. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  110. package/dist/server/src/history/services/utils.d.ts +2 -3
  111. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  112. package/dist/server/src/index.d.ts +4 -4
  113. package/dist/server/src/preview/constants.d.ts +2 -0
  114. package/dist/server/src/preview/constants.d.ts.map +1 -0
  115. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  116. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  117. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  118. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  119. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  120. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  121. package/dist/server/src/preview/index.d.ts +4 -0
  122. package/dist/server/src/preview/index.d.ts.map +1 -0
  123. package/dist/server/src/preview/routes/index.d.ts +8 -0
  124. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  125. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  126. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  127. package/dist/server/src/preview/services/index.d.ts +15 -0
  128. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  129. package/dist/server/src/preview/services/preview-config.d.ts +30 -0
  130. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  131. package/dist/server/src/preview/services/preview.d.ts +12 -0
  132. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  133. package/dist/server/src/preview/utils.d.ts +18 -0
  134. package/dist/server/src/preview/utils.d.ts.map +1 -0
  135. package/dist/server/src/routes/index.d.ts.map +1 -1
  136. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  137. package/dist/server/src/services/document-metadata.d.ts +8 -8
  138. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  139. package/dist/server/src/services/index.d.ts +4 -4
  140. package/dist/server/src/services/index.d.ts.map +1 -1
  141. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  142. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  143. package/dist/server/src/utils/index.d.ts +2 -0
  144. package/dist/server/src/utils/index.d.ts.map +1 -1
  145. package/dist/shared/contracts/index.d.ts +1 -0
  146. package/dist/shared/contracts/index.d.ts.map +1 -1
  147. package/dist/shared/contracts/preview.d.ts +27 -0
  148. package/dist/shared/contracts/preview.d.ts.map +1 -0
  149. package/dist/shared/index.js +4 -0
  150. package/dist/shared/index.js.map +1 -1
  151. package/dist/shared/index.mjs +4 -0
  152. package/dist/shared/index.mjs.map +1 -1
  153. package/package.json +10 -10
  154. package/dist/_chunks/EditViewPage-CHgoNwlc.js.map +0 -1
  155. package/dist/_chunks/EditViewPage-zFjJK0s8.mjs.map +0 -1
  156. package/dist/_chunks/Field-9DePZh-0.js.map +0 -1
  157. package/dist/_chunks/Field-DPAzUS1M.mjs.map +0 -1
  158. package/dist/_chunks/Form-CEkENbkF.mjs.map +0 -1
  159. package/dist/_chunks/Form-DPm-KZ1A.js.map +0 -1
  160. package/dist/_chunks/History-DXSbTWez.js.map +0 -1
  161. package/dist/_chunks/History-utls71em.mjs.map +0 -1
  162. package/dist/_chunks/ListViewPage-DfuwH1tt.js.map +0 -1
  163. package/dist/_chunks/Relations-CFjTESWQ.js.map +0 -1
  164. package/dist/_chunks/Relations-QP5yn9_z.mjs.map +0 -1
  165. package/dist/_chunks/index-BHfS6_D5.mjs.map +0 -1
  166. package/dist/_chunks/index-DXiHxy70.js.map +0 -1
  167. package/dist/_chunks/relations-D706vblp.js.map +0 -1
  168. package/dist/_chunks/relations-SCVAL_aJ.mjs.map +0 -1
@@ -7,8 +7,8 @@ const designSystem = require("@strapi/design-system");
7
7
  const reactIntl = require("react-intl");
8
8
  const reactRouterDom = require("react-router-dom");
9
9
  const styledComponents = require("styled-components");
10
- const index = require("./index-DXiHxy70.js");
11
- const Field = require("./Field-9DePZh-0.js");
10
+ const index = require("./index-_j7lH3CO.js");
11
+ const Field = require("./Field-fKtb7rWK.js");
12
12
  function _interopNamespace(e) {
13
13
  if (e && e.__esModule)
14
14
  return e;
@@ -31,11 +31,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
31
31
  const useOnce = (effect) => React__namespace.useEffect(effect, emptyDeps);
32
32
  const emptyDeps = [];
33
33
  const FormLayout = ({ layout }) => {
34
+ const { formatMessage } = reactIntl.useIntl();
35
+ const { model } = index.useDoc();
34
36
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((panel, index2) => {
35
37
  if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
36
38
  const [row] = panel;
37
39
  const [field] = row;
38
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...field }) }) }, field.name);
40
+ const fieldWithTranslatedLabel = {
41
+ ...field,
42
+ label: formatMessage({
43
+ id: `content-manager.content-types.${model}.${field.name}`,
44
+ defaultMessage: field.label
45
+ })
46
+ };
47
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel }) }) }, field.name);
39
48
  }
40
49
  return /* @__PURE__ */ jsxRuntime.jsx(
41
50
  designSystem.Box,
@@ -49,6 +58,13 @@ const FormLayout = ({ layout }) => {
49
58
  paddingBottom: 6,
50
59
  borderColor: "neutral150",
51
60
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
61
+ const fieldWithTranslatedLabel = {
62
+ ...field,
63
+ label: formatMessage({
64
+ id: `content-manager.content-types.${model}.${field.name}`,
65
+ defaultMessage: field.label
66
+ })
67
+ };
52
68
  return /* @__PURE__ */ jsxRuntime.jsx(
53
69
  designSystem.Grid.Item,
54
70
  {
@@ -57,7 +73,7 @@ const FormLayout = ({ layout }) => {
57
73
  xs: 12,
58
74
  direction: "column",
59
75
  alignItems: "stretch",
60
- children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...field })
76
+ children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel })
61
77
  },
62
78
  field.name
63
79
  );
@@ -87,7 +103,8 @@ const EditViewPage = () => {
87
103
  components,
88
104
  collectionType,
89
105
  id,
90
- model
106
+ model,
107
+ hasError
91
108
  } = index.useDoc();
92
109
  const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
93
110
  useOnce(() => {
@@ -118,6 +135,9 @@ const EditViewPage = () => {
118
135
  const form = document?.id ? document : Field.createDefaultForm(schema, components);
119
136
  return Field.transformDocument(schema, components)(form);
120
137
  }, [document, isCreatingDocument, isSingleType, schema, components]);
138
+ if (hasError) {
139
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
140
+ }
121
141
  if (isLoading && !document?.documentId) {
122
142
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
123
143
  }
@@ -129,16 +149,35 @@ const EditViewPage = () => {
129
149
  setQuery({ status: status2 }, "push", true);
130
150
  }
131
151
  };
132
- const documentTitle = mainField !== "id" && document?.[mainField] ? document[mainField] : "Untitled";
152
+ let documentTitle = "Untitled";
153
+ if (mainField !== "id" && document?.[mainField]) {
154
+ documentTitle = document[mainField];
155
+ } else if (isSingleType && schema?.info.displayName) {
156
+ documentTitle = schema.info.displayName;
157
+ }
158
+ const validateSync = (values, options) => {
159
+ const yupSchema = index.createYupSchema(schema?.attributes, components, {
160
+ status,
161
+ ...options
162
+ });
163
+ return yupSchema.validateSync(values, { abortEarly: false });
164
+ };
133
165
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { paddingLeft: 10, paddingRight: 10, children: [
134
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: `${documentTitle}` }),
166
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: documentTitle }),
135
167
  /* @__PURE__ */ jsxRuntime.jsx(
136
168
  strapiAdmin.Form,
137
169
  {
138
170
  disabled: hasDraftAndPublished && status === "published",
139
171
  initialValues,
140
172
  method: isCreatingDocument ? "POST" : "PUT",
141
- validationSchema: index.createYupSchema(schema?.attributes, components, { status }),
173
+ validate: (values, options) => {
174
+ const yupSchema = index.createYupSchema(schema?.attributes, components, {
175
+ status,
176
+ ...options
177
+ });
178
+ return yupSchema.validate(values, { abortEarly: false });
179
+ },
180
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
142
181
  children: ({ resetForm }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
143
182
  /* @__PURE__ */ jsxRuntime.jsx(
144
183
  index.Header,
@@ -230,4 +269,5 @@ const ProtectedEditViewPage = () => {
230
269
  };
231
270
  exports.EditViewPage = EditViewPage;
232
271
  exports.ProtectedEditViewPage = ProtectedEditViewPage;
233
- //# sourceMappingURL=EditViewPage-CHgoNwlc.js.map
272
+ exports.getDocumentStatus = getDocumentStatus;
273
+ //# sourceMappingURL=EditViewPage-pyqEgLgP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditViewPage-pyqEgLgP.js","sources":["../../admin/src/hooks/useOnce.ts","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDoc } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { transformDocument } from './utils/data';\nimport { createDefaultForm } from './utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n } = useDoc();\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const initialValues = React.useMemo(() => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n }, [document, isCreatingDocument, isSingleType, schema, components]);\n\n if (hasError) {\n return <Page.Error />;\n }\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n /**\n * We look to see what the mainField is from the configuration, if it's an id\n * we don't use it because it's a uuid format and not very user friendly.\n * Instead, we display the schema name for single-type documents\n * or \"Untitled\".\n */\n let documentTitle = 'Untitled';\n if (mainField !== 'id' && document?.[mainField]) {\n documentTitle = document[mainField];\n } else if (isSingleType && schema?.info.displayName) {\n documentTitle = schema.info.displayName;\n }\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{documentTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={documentTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["React","useIntl","useDoc","jsx","Flex","index","Grid","InputRenderer","Box","useLocation","useQueryParams","useNotification","useDocumentRBAC","SINGLE_TYPES","useDocumentLayout","useLazyComponents","createDefaultForm","transformDocument","Page","status","createYupSchema","jsxs","Main","Form","Fragment","Header","Tabs","getTranslation","Panels","Blocker","styled","useParams","useRBAC","PERMISSIONS","permissions","DocumentRBAC"],"mappings":"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"}
@@ -5,15 +5,15 @@ import { useStrapiApp, createContext, useField, useNotification, useForm, useAPI
5
5
  import { Box, SingleSelect, SingleSelectOption, Typography, Flex, BaseLink, Button, Popover, Field, Tooltip, IconButton, useComposedRefs, Portal, FocusTrap, Divider, VisuallyHidden, Grid as Grid$1, Accordion, TextButton, TextInput, IconButtonGroup, Menu, MenuItem } from "@strapi/design-system";
6
6
  import pipe$1 from "lodash/fp/pipe";
7
7
  import { useIntl } from "react-intl";
8
- import { m as DOCUMENT_META_FIELDS, g as getTranslation, c as useDoc, e as contentManagerApi, n as CLONE_PATH, d as buildValidParams, f as useDocumentRBAC, o as useDocLayout } from "./index-BHfS6_D5.mjs";
8
+ import { m as DOCUMENT_META_FIELDS, g as getTranslation, c as useDoc, e as contentManagerApi, n as CLONE_PATH, d as buildValidParams, f as useDocumentRBAC, S as SINGLE_TYPES, o as useDocLayout } from "./index-Ta--2bRa.mjs";
9
9
  import { generateNKeysBetween } from "fractional-indexing";
10
- import { u as useComponent, C as ComponentProvider, M as MemoizedRelationsField } from "./Relations-QP5yn9_z.mjs";
10
+ import { u as useComponent, C as ComponentProvider, M as MemoizedRelationsField } from "./Relations-DUrYWw0N.mjs";
11
11
  import { Code, HeadingOne, HeadingTwo, HeadingThree, HeadingFour, HeadingFive, HeadingSix, Image as Image$1, NumberList, BulletList, Paragraph, Quotes, Link as Link$1, Drag, Collapse, Bold, Italic, Underline, StrikeThrough, Expand, PlusCircle, Plus, Trash, EyeStriked, CheckCircle, WarningCircle, Loader, ArrowClockwise, More } from "@strapi/icons";
12
12
  import { styled, css, keyframes } from "styled-components";
13
13
  import { C as ComponentIcon, a as COMPONENT_ICONS } from "./ComponentIcon-u4bIXTFY.mjs";
14
14
  import { getEmptyImage } from "react-dnd-html5-backend";
15
15
  import { a as DIRECTIONS, u as useDragAndDrop, I as ItemTypes } from "./useDragAndDrop-DdHgKsqq.mjs";
16
- import { g as getIn } from "./objects-mKMAmfec.mjs";
16
+ import { g as getIn } from "./objects-D6yBsdmx.mjs";
17
17
  import { Editor as Editor$1, Transforms, Node, Element, Range, Path, Point, createEditor } from "slate";
18
18
  import { withHistory } from "slate-history";
19
19
  import { useFocused, useSelected, ReactEditor, Editable, useSlate, Slate, withReact } from "slate-react";
@@ -2636,7 +2636,7 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
2636
2636
  /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(CircleIcon, {}) }),
2637
2637
  /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
2638
2638
  id: getTranslation("components.empty-repeatable"),
2639
- defaultMessage: "No entry yet. Click on the button below to add one."
2639
+ defaultMessage: "No entry yet. Click to add one."
2640
2640
  }) }) })
2641
2641
  ] })
2642
2642
  }
@@ -2658,6 +2658,7 @@ const NonRepeatableComponent = ({
2658
2658
  children,
2659
2659
  layout
2660
2660
  }) => {
2661
+ const { formatMessage } = useIntl();
2661
2662
  const { value } = useField(name2);
2662
2663
  const level = useComponent("NonRepeatableComponent", (state) => state.level);
2663
2664
  const isNested = level > 0;
@@ -2674,6 +2675,10 @@ const NonRepeatableComponent = ({
2674
2675
  children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index) => {
2675
2676
  return /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2676
2677
  const completeFieldName = `${name2}.${field.name}`;
2678
+ const translatedLabel = formatMessage({
2679
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2680
+ defaultMessage: field.label
2681
+ });
2677
2682
  return /* @__PURE__ */ jsx(
2678
2683
  Grid$1.Item,
2679
2684
  {
@@ -2682,7 +2687,7 @@ const NonRepeatableComponent = ({
2682
2687
  xs: 12,
2683
2688
  direction: "column",
2684
2689
  alignItems: "stretch",
2685
- children: children({ ...field, name: completeFieldName })
2690
+ children: children({ ...field, label: translatedLabel, name: completeFieldName })
2686
2691
  },
2687
2692
  completeFieldName
2688
2693
  );
@@ -2704,13 +2709,34 @@ const RepeatableComponent = ({
2704
2709
  const { search: searchString } = useLocation();
2705
2710
  const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);
2706
2711
  const { components } = useDoc();
2707
- const { value = [], error } = useField(name2);
2712
+ const {
2713
+ value = [],
2714
+ error,
2715
+ rawError
2716
+ } = useField(name2);
2708
2717
  const addFieldRow = useForm("RepeatableComponent", (state) => state.addFieldRow);
2709
2718
  const moveFieldRow = useForm("RepeatableComponent", (state) => state.moveFieldRow);
2710
2719
  const removeFieldRow = useForm("RepeatableComponent", (state) => state.removeFieldRow);
2711
2720
  const { max = Infinity } = attribute;
2712
2721
  const [collapseToOpen, setCollapseToOpen] = React.useState("");
2713
2722
  const [liveText, setLiveText] = React.useState("");
2723
+ React.useEffect(() => {
2724
+ const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
2725
+ const hasNestedValue = value && Array.isArray(value) && value.length > 0;
2726
+ if (hasNestedErrors && hasNestedValue) {
2727
+ const errorOpenItems = rawError.map((_, idx) => {
2728
+ return value[idx] ? value[idx].__temp_key__ : null;
2729
+ }).filter((value2) => !!value2);
2730
+ if (errorOpenItems && errorOpenItems.length > 0) {
2731
+ setCollapseToOpen((collapseToOpen2) => {
2732
+ if (!errorOpenItems.includes(collapseToOpen2)) {
2733
+ return errorOpenItems[0];
2734
+ }
2735
+ return collapseToOpen2;
2736
+ });
2737
+ }
2738
+ }
2739
+ }, [rawError, value]);
2714
2740
  const componentTmpKeyWithFocussedField = React.useMemo(() => {
2715
2741
  if (search.has("field")) {
2716
2742
  const fieldParam = search.get("field");
@@ -2863,6 +2889,10 @@ const RepeatableComponent = ({
2863
2889
  children: layout.map((row, index2) => {
2864
2890
  return /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2865
2891
  const completeFieldName = `${nameWithIndex}.${field.name}`;
2892
+ const translatedLabel = formatMessage({
2893
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2894
+ defaultMessage: field.label
2895
+ });
2866
2896
  return /* @__PURE__ */ jsx(
2867
2897
  Grid$1.Item,
2868
2898
  {
@@ -2871,7 +2901,11 @@ const RepeatableComponent = ({
2871
2901
  xs: 12,
2872
2902
  direction: "column",
2873
2903
  alignItems: "stretch",
2874
- children: children({ ...field, name: completeFieldName })
2904
+ children: children({
2905
+ ...field,
2906
+ label: translatedLabel,
2907
+ name: completeFieldName
2908
+ })
2875
2909
  },
2876
2910
  completeFieldName
2877
2911
  );
@@ -4925,15 +4959,19 @@ const Wysiwyg = React.forwardRef(
4925
4959
  );
4926
4960
  const MemoizedWysiwyg = React.memo(Wysiwyg);
4927
4961
  const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4928
- const { id } = useDoc();
4962
+ const { id, document: document2, collectionType } = useDoc();
4929
4963
  const isFormDisabled = useForm("InputRenderer", (state) => state.disabled);
4930
4964
  const isInDynamicZone = useDynamicZone("isInDynamicZone", (state) => state.isInDynamicZone);
4931
4965
  const canCreateFields = useDocumentRBAC("InputRenderer", (rbac) => rbac.canCreateFields);
4932
4966
  const canReadFields = useDocumentRBAC("InputRenderer", (rbac) => rbac.canReadFields);
4933
4967
  const canUpdateFields = useDocumentRBAC("InputRenderer", (rbac) => rbac.canUpdateFields);
4934
4968
  const canUserAction = useDocumentRBAC("InputRenderer", (rbac) => rbac.canUserAction);
4935
- const editableFields = id ? canUpdateFields : canCreateFields;
4936
- const readableFields = id ? canReadFields : canCreateFields;
4969
+ let idToCheck = id;
4970
+ if (collectionType === SINGLE_TYPES) {
4971
+ idToCheck = document2?.documentId;
4972
+ }
4973
+ const editableFields = idToCheck ? canUpdateFields : canCreateFields;
4974
+ const readableFields = idToCheck ? canReadFields : canCreateFields;
4937
4975
  const canUserReadField = canUserAction(props.name, readableFields, props.type);
4938
4976
  const canUserEditField = canUserAction(props.name, editableFields, props.type);
4939
4977
  const fields = useStrapiApp("InputRenderer", (app) => app.fields);
@@ -4944,6 +4982,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4944
4982
  const {
4945
4983
  edit: { components }
4946
4984
  } = useDocLayout();
4985
+ const field = useField(props.name);
4947
4986
  if (!visible) {
4948
4987
  return null;
4949
4988
  }
@@ -4954,7 +4993,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
4954
4993
  if (attributeHasCustomFieldProperty(props.attribute)) {
4955
4994
  const CustomInput = lazyComponentStore[props.attribute.customField];
4956
4995
  if (CustomInput) {
4957
- return /* @__PURE__ */ jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
4996
+ return /* @__PURE__ */ jsx(CustomInput, { ...props, ...field, hint, disabled: fieldIsDisabled });
4958
4997
  }
4959
4998
  return /* @__PURE__ */ jsx(
4960
4999
  InputRenderer$1,
@@ -5115,6 +5154,14 @@ const DynamicComponent = ({
5115
5154
  React.useEffect(() => {
5116
5155
  dragPreviewRef(getEmptyImage(), { captureDraggingState: false });
5117
5156
  }, [dragPreviewRef, index]);
5157
+ const accordionValue = React.useId();
5158
+ const { value = [], rawError } = useField(`${name2}.${index}`);
5159
+ const [collapseToOpen, setCollapseToOpen] = React.useState("");
5160
+ React.useEffect(() => {
5161
+ if (rawError && value) {
5162
+ setCollapseToOpen(accordionValue);
5163
+ }
5164
+ }, [rawError, value, accordionValue]);
5118
5165
  const composedBoxRefs = useComposedRefs(boxRef, dropRef);
5119
5166
  const accordionActions = disabled ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
5120
5167
  /* @__PURE__ */ jsx(
@@ -5180,10 +5227,9 @@ const DynamicComponent = ({
5180
5227
  ] })
5181
5228
  ] });
5182
5229
  const accordionTitle = title ? `${displayName} ${title}` : displayName;
5183
- const accordionValue = React.useId();
5184
5230
  return /* @__PURE__ */ jsxs(ComponentContainer, { tag: "li", width: "100%", children: [
5185
5231
  /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Rectangle, { background: "neutral200" }) }),
5186
- /* @__PURE__ */ jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsx(Preview, {}) : /* @__PURE__ */ jsx(Accordion.Root, { children: /* @__PURE__ */ jsxs(Accordion.Item, { value: accordionValue, children: [
5232
+ /* @__PURE__ */ jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsx(Preview, {}) : /* @__PURE__ */ jsx(Accordion.Root, { value: collapseToOpen, onValueChange: setCollapseToOpen, children: /* @__PURE__ */ jsxs(Accordion.Item, { value: accordionValue, children: [
5187
5233
  /* @__PURE__ */ jsxs(Accordion.Header, { children: [
5188
5234
  /* @__PURE__ */ jsx(
5189
5235
  Accordion.Trigger,
@@ -5194,21 +5240,39 @@ const DynamicComponent = ({
5194
5240
  ),
5195
5241
  /* @__PURE__ */ jsx(Accordion.Actions, { children: accordionActions })
5196
5242
  ] }),
5197
- /* @__PURE__ */ jsx(Accordion.Content, { children: /* @__PURE__ */ jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsx(Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
5198
- const fieldName = `${name2}.${index}.${field.name}`;
5199
- return /* @__PURE__ */ jsx(
5200
- Grid$1.Item,
5201
- {
5202
- col: size,
5203
- s: 12,
5204
- xs: 12,
5205
- direction: "column",
5206
- alignItems: "stretch",
5207
- children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...field, name: fieldName })
5208
- },
5209
- fieldName
5210
- );
5211
- }) }, rowInd)) }) }) })
5243
+ /* @__PURE__ */ jsx(Accordion.Content, { children: /* @__PURE__ */ jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsx(Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsx(
5244
+ Grid$1.Item,
5245
+ {
5246
+ col: 12,
5247
+ s: 12,
5248
+ xs: 12,
5249
+ direction: "column",
5250
+ alignItems: "stretch",
5251
+ children: /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
5252
+ const fieldName = `${name2}.${index}.${field.name}`;
5253
+ const fieldWithTranslatedLabel = {
5254
+ ...field,
5255
+ label: formatMessage({
5256
+ id: `content-manager.components.${componentUid}.${field.name}`,
5257
+ defaultMessage: field.label
5258
+ })
5259
+ };
5260
+ return /* @__PURE__ */ jsx(
5261
+ Grid$1.Item,
5262
+ {
5263
+ col: size,
5264
+ s: 12,
5265
+ xs: 12,
5266
+ direction: "column",
5267
+ alignItems: "stretch",
5268
+ children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel, name: fieldName })
5269
+ },
5270
+ fieldName
5271
+ );
5272
+ }) })
5273
+ },
5274
+ rowInd
5275
+ )) }) }) }) })
5212
5276
  ] }) }) })
5213
5277
  ] });
5214
5278
  };
@@ -5516,4 +5580,4 @@ export {
5516
5580
  transformDocument as t,
5517
5581
  useLazyComponents as u
5518
5582
  };
5519
- //# sourceMappingURL=Field-DPAzUS1M.mjs.map
5583
+ //# sourceMappingURL=Field-DuAYQka5.mjs.map