@strapi/content-manager 0.0.0-experimental.fdacf4285d1cada9d94ab4dcd756c5362cba1b54 → 0.0.0-next.008421e40e4f0fb98aab7504cea5a2b8ef7099d5

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 (204) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CVfoYQ9p.mjs → ComponentConfigurationPage-9_4yUE9L.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-CVfoYQ9p.mjs.map → ComponentConfigurationPage-9_4yUE9L.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CI7K072v.js → ComponentConfigurationPage-DBSh-kET.js} +5 -6
  6. package/dist/_chunks/{ComponentConfigurationPage-CI7K072v.js.map → ComponentConfigurationPage-DBSh-kET.js.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-CtnhGgIx.js → EditConfigurationPage-Bl_U2JgH.js} +5 -6
  11. package/dist/_chunks/{EditConfigurationPage-CtnhGgIx.js.map → EditConfigurationPage-Bl_U2JgH.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-Cg1Esg_N.mjs → EditConfigurationPage-COe6hjPC.mjs} +4 -4
  13. package/dist/_chunks/{EditConfigurationPage-Cg1Esg_N.mjs.map → EditConfigurationPage-COe6hjPC.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-MURPhGdY.js → EditViewPage-D4yFJET6.js} +15 -57
  15. package/dist/_chunks/EditViewPage-D4yFJET6.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-C_iuCG0Z.mjs → EditViewPage-DrmVmYN0.mjs} +13 -54
  17. package/dist/_chunks/EditViewPage-DrmVmYN0.mjs.map +1 -0
  18. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  19. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  20. package/dist/_chunks/{Form-D1cecnu3.js → Form-C4rSaGsz.js} +5 -6
  21. package/dist/_chunks/{Form-D1cecnu3.js.map → Form-C4rSaGsz.js.map} +1 -1
  22. package/dist/_chunks/{Form-oLrvgmvM.mjs → Form-DamaxNpG.mjs} +3 -3
  23. package/dist/_chunks/{Form-oLrvgmvM.mjs.map → Form-DamaxNpG.mjs.map} +1 -1
  24. package/dist/_chunks/{History-5VbTZWYl.mjs → History-D1PreDSY.mjs} +51 -97
  25. package/dist/_chunks/History-D1PreDSY.mjs.map +1 -0
  26. package/dist/_chunks/{History-DJpjbGJZ.js → History-DTm8UCCQ.js} +62 -109
  27. package/dist/_chunks/History-DTm8UCCQ.js.map +1 -0
  28. package/dist/_chunks/{Field-D1c7z74Q.js → Input-B7sapvBG.js} +1258 -1236
  29. package/dist/_chunks/Input-B7sapvBG.js.map +1 -0
  30. package/dist/_chunks/{Field-55cGR9kd.mjs → Input-CZ1YvjHR.mjs} +1333 -1311
  31. package/dist/_chunks/Input-CZ1YvjHR.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-BNs0g27c.mjs → ListConfigurationPage-Bbi32isk.mjs} +7 -6
  33. package/dist/_chunks/ListConfigurationPage-Bbi32isk.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DylRESaU.js → ListConfigurationPage-ysFMjKI3.js} +7 -7
  35. package/dist/_chunks/ListConfigurationPage-ysFMjKI3.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-DelIyZ5D.mjs → ListViewPage-Bud_jBDQ.mjs} +67 -41
  37. package/dist/_chunks/ListViewPage-Bud_jBDQ.mjs.map +1 -0
  38. package/dist/_chunks/{ListViewPage-MbdmfkXa.js → ListViewPage-DTuuxU3n.js} +73 -48
  39. package/dist/_chunks/ListViewPage-DTuuxU3n.js.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-BDQ1MdsC.js → NoContentTypePage-CL7VVeYs.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-BDQ1MdsC.js.map → NoContentTypePage-CL7VVeYs.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-CoXa1X8-.mjs → NoContentTypePage-DVhkugsf.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-CoXa1X8-.mjs.map → NoContentTypePage-DVhkugsf.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-GgkDXRq3.mjs → NoPermissionsPage-CMdM-dCo.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-GgkDXRq3.mjs.map → NoPermissionsPage-CMdM-dCo.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-CnnuMd2Y.js → NoPermissionsPage-v7I599vC.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-CnnuMd2Y.js.map → NoPermissionsPage-v7I599vC.js.map} +1 -1
  48. package/dist/_chunks/Preview-BNuU0SuQ.mjs +287 -0
  49. package/dist/_chunks/Preview-BNuU0SuQ.mjs.map +1 -0
  50. package/dist/_chunks/Preview-Cxq-uI6D.js +305 -0
  51. package/dist/_chunks/Preview-Cxq-uI6D.js.map +1 -0
  52. package/dist/_chunks/{Relations-BKnC9peY.mjs → Relations-C2Ahkrdg.mjs} +47 -22
  53. package/dist/_chunks/Relations-C2Ahkrdg.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-DVeWgAT4.js → Relations-CWS79QQn.js} +47 -23
  55. package/dist/_chunks/Relations-CWS79QQn.js.map +1 -0
  56. package/dist/_chunks/{en-Bm0D0IWz.js → en-BR48D_RH.js} +23 -4
  57. package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BR48D_RH.js.map} +1 -1
  58. package/dist/_chunks/{en-DKV44jRb.mjs → en-D65uIF6Y.mjs} +23 -4
  59. package/dist/_chunks/{en-DKV44jRb.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
  60. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  61. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  62. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  63. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  64. package/dist/_chunks/{fr-B7kGGg3E.js → fr-C43IbhA_.js} +16 -3
  65. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-C43IbhA_.js.map} +1 -1
  66. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr-DBseuRuB.mjs} +16 -3
  67. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-B9u01WiI.js → index-DQsvBb_N.js} +629 -238
  70. package/dist/_chunks/index-DQsvBb_N.js.map +1 -0
  71. package/dist/_chunks/{index-jwACjpe1.mjs → index-ZKrsjv-2.mjs} +645 -254
  72. package/dist/_chunks/index-ZKrsjv-2.mjs.map +1 -0
  73. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  74. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  75. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  76. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  77. package/dist/_chunks/{layout-DDtbDqUd.js → layout-Cl0NhlQB.js} +5 -6
  78. package/dist/_chunks/{layout-DDtbDqUd.js.map → layout-Cl0NhlQB.js.map} +1 -1
  79. package/dist/_chunks/{layout-D51YDRJV.mjs → layout-fQk1rMk9.mjs} +4 -4
  80. package/dist/_chunks/{layout-D51YDRJV.mjs.map → layout-fQk1rMk9.mjs.map} +1 -1
  81. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  82. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  83. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  84. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  85. package/dist/_chunks/{relations-DtsF4GJw.js → relations-BRfBxVbX.js} +6 -7
  86. package/dist/_chunks/relations-BRfBxVbX.js.map +1 -0
  87. package/dist/_chunks/{relations-Bgc8jKKt.mjs → relations-BakOFl_1.mjs} +6 -7
  88. package/dist/_chunks/relations-BakOFl_1.mjs.map +1 -0
  89. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  90. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  91. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  92. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  93. package/dist/_chunks/{useDebounce-DmuSJIF3.mjs → usePrev-CZGy2Vjf.mjs} +11 -11
  94. package/dist/_chunks/usePrev-CZGy2Vjf.mjs.map +1 -0
  95. package/dist/_chunks/{useDebounce-CtcjDB3L.js → usePrev-D5J_2fEu.js} +8 -8
  96. package/dist/_chunks/usePrev-D5J_2fEu.js.map +1 -0
  97. package/dist/admin/index.js +2 -1
  98. package/dist/admin/index.js.map +1 -1
  99. package/dist/admin/index.mjs +6 -5
  100. package/dist/admin/src/content-manager.d.ts +3 -2
  101. package/dist/admin/src/exports.d.ts +1 -0
  102. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocument.d.ts +19 -2
  104. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  105. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  107. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  108. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  109. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  110. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  111. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  112. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
  113. package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
  114. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  115. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  116. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  117. package/dist/admin/src/preview/index.d.ts +4 -0
  118. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  119. package/dist/admin/src/preview/routes.d.ts +3 -0
  120. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  121. package/dist/admin/src/router.d.ts +1 -1
  122. package/dist/admin/src/services/api.d.ts +1 -1
  123. package/dist/admin/src/services/components.d.ts +2 -2
  124. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  125. package/dist/admin/src/services/documents.d.ts +16 -19
  126. package/dist/admin/src/services/init.d.ts +1 -1
  127. package/dist/admin/src/services/relations.d.ts +2 -2
  128. package/dist/admin/src/services/uid.d.ts +3 -3
  129. package/dist/server/index.js +560 -317
  130. package/dist/server/index.js.map +1 -1
  131. package/dist/server/index.mjs +561 -317
  132. package/dist/server/index.mjs.map +1 -1
  133. package/dist/server/src/bootstrap.d.ts.map +1 -1
  134. package/dist/server/src/controllers/index.d.ts.map +1 -1
  135. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  136. package/dist/server/src/controllers/utils/metadata.d.ts +16 -1
  137. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  138. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  139. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  140. package/dist/server/src/history/services/history.d.ts +3 -3
  141. package/dist/server/src/history/services/history.d.ts.map +1 -1
  142. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  143. package/dist/server/src/history/services/utils.d.ts +6 -11
  144. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  145. package/dist/server/src/index.d.ts +7 -6
  146. package/dist/server/src/index.d.ts.map +1 -1
  147. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  148. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  149. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  150. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  151. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  152. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  153. package/dist/server/src/preview/index.d.ts +4 -0
  154. package/dist/server/src/preview/index.d.ts.map +1 -0
  155. package/dist/server/src/preview/routes/index.d.ts +8 -0
  156. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  157. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  158. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  159. package/dist/server/src/preview/services/index.d.ts +16 -0
  160. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  161. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  162. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  163. package/dist/server/src/preview/services/preview.d.ts +12 -0
  164. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  165. package/dist/server/src/preview/utils.d.ts +19 -0
  166. package/dist/server/src/preview/utils.d.ts.map +1 -0
  167. package/dist/server/src/register.d.ts.map +1 -1
  168. package/dist/server/src/routes/index.d.ts.map +1 -1
  169. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  170. package/dist/server/src/services/document-metadata.d.ts +12 -10
  171. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  172. package/dist/server/src/services/index.d.ts +7 -6
  173. package/dist/server/src/services/index.d.ts.map +1 -1
  174. package/dist/server/src/services/utils/populate.d.ts +2 -2
  175. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  176. package/dist/server/src/utils/index.d.ts +2 -0
  177. package/dist/server/src/utils/index.d.ts.map +1 -1
  178. package/dist/shared/contracts/index.d.ts +1 -0
  179. package/dist/shared/contracts/index.d.ts.map +1 -1
  180. package/dist/shared/contracts/preview.d.ts +27 -0
  181. package/dist/shared/contracts/preview.d.ts.map +1 -0
  182. package/dist/shared/index.js +4 -0
  183. package/dist/shared/index.js.map +1 -1
  184. package/dist/shared/index.mjs +4 -0
  185. package/dist/shared/index.mjs.map +1 -1
  186. package/package.json +13 -12
  187. package/dist/_chunks/EditViewPage-C_iuCG0Z.mjs.map +0 -1
  188. package/dist/_chunks/EditViewPage-MURPhGdY.js.map +0 -1
  189. package/dist/_chunks/Field-55cGR9kd.mjs.map +0 -1
  190. package/dist/_chunks/Field-D1c7z74Q.js.map +0 -1
  191. package/dist/_chunks/History-5VbTZWYl.mjs.map +0 -1
  192. package/dist/_chunks/History-DJpjbGJZ.js.map +0 -1
  193. package/dist/_chunks/ListConfigurationPage-BNs0g27c.mjs.map +0 -1
  194. package/dist/_chunks/ListConfigurationPage-DylRESaU.js.map +0 -1
  195. package/dist/_chunks/ListViewPage-DelIyZ5D.mjs.map +0 -1
  196. package/dist/_chunks/ListViewPage-MbdmfkXa.js.map +0 -1
  197. package/dist/_chunks/Relations-BKnC9peY.mjs.map +0 -1
  198. package/dist/_chunks/Relations-DVeWgAT4.js.map +0 -1
  199. package/dist/_chunks/index-B9u01WiI.js.map +0 -1
  200. package/dist/_chunks/index-jwACjpe1.mjs.map +0 -1
  201. package/dist/_chunks/relations-Bgc8jKKt.mjs.map +0 -1
  202. package/dist/_chunks/relations-DtsF4GJw.js.map +0 -1
  203. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
  204. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
@@ -4,18 +4,19 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const React = require("react");
6
6
  const designSystem = require("@strapi/design-system");
7
+ const mapValues = require("lodash/fp/mapValues");
7
8
  const reactIntl = require("react-intl");
8
9
  const reactRouterDom = require("react-router-dom");
10
+ const styledComponents = require("styled-components");
9
11
  const yup = require("yup");
12
+ const fractionalIndexing = require("fractional-indexing");
10
13
  const pipe = require("lodash/fp/pipe");
11
- const dateFns = require("date-fns");
12
- const styledComponents = require("styled-components");
13
14
  const qs = require("qs");
15
+ const dateFns = require("date-fns");
14
16
  const toolkit = require("@reduxjs/toolkit");
15
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
16
18
  function _interopNamespace(e) {
17
- if (e && e.__esModule)
18
- return e;
19
+ if (e && e.__esModule) return e;
19
20
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
20
21
  if (e) {
21
22
  for (const k in e) {
@@ -32,15 +33,23 @@ function _interopNamespace(e) {
32
33
  return Object.freeze(n);
33
34
  }
34
35
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
36
+ const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
35
37
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
36
38
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
37
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
39
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
38
40
  const v = glob[path];
39
41
  if (v) {
40
42
  return typeof v === "function" ? v() : Promise.resolve(v);
41
43
  }
42
44
  return new Promise((_, reject) => {
43
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
45
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
46
+ reject.bind(
47
+ null,
48
+ new Error(
49
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
50
+ )
51
+ )
52
+ );
44
53
  });
45
54
  };
46
55
  const PLUGIN_ID = "content-manager";
@@ -179,6 +188,113 @@ const extractAndDedupeFields = (permissions = []) => permissions.flatMap((permis
179
188
  (field, index2, arr) => arr.indexOf(field) === index2 && typeof field === "string"
180
189
  );
181
190
  const removeNumericalStrings = (arr) => arr.filter((item) => isNaN(Number(item)));
191
+ const BLOCK_LIST_ATTRIBUTE_KEYS = ["__component", "__temp_key__"];
192
+ const traverseData = (predicate, transform) => (schema, components = {}) => (data = {}) => {
193
+ const traverse = (datum, attributes) => {
194
+ return Object.entries(datum).reduce((acc, [key, value]) => {
195
+ const attribute = attributes[key];
196
+ if (BLOCK_LIST_ATTRIBUTE_KEYS.includes(key) || value === null || value === void 0) {
197
+ acc[key] = value;
198
+ return acc;
199
+ }
200
+ if (attribute.type === "component") {
201
+ if (attribute.repeatable) {
202
+ const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
203
+ acc[key] = componentValue.map(
204
+ (componentData) => traverse(componentData, components[attribute.component]?.attributes ?? {})
205
+ );
206
+ } else {
207
+ const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
208
+ acc[key] = traverse(componentValue, components[attribute.component]?.attributes ?? {});
209
+ }
210
+ } else if (attribute.type === "dynamiczone") {
211
+ const dynamicZoneValue = predicate(attribute, value) ? transform(value, attribute) : value;
212
+ acc[key] = dynamicZoneValue.map(
213
+ (componentData) => traverse(componentData, components[componentData.__component]?.attributes ?? {})
214
+ );
215
+ } else if (predicate(attribute, value)) {
216
+ acc[key] = transform(value, attribute);
217
+ } else {
218
+ acc[key] = value;
219
+ }
220
+ return acc;
221
+ }, {});
222
+ };
223
+ return traverse(data, schema.attributes);
224
+ };
225
+ const removeProhibitedFields = (prohibitedFields) => traverseData(
226
+ (attribute) => prohibitedFields.includes(attribute.type),
227
+ () => ""
228
+ );
229
+ const prepareRelations = traverseData(
230
+ (attribute) => attribute.type === "relation",
231
+ () => ({
232
+ connect: [],
233
+ disconnect: []
234
+ })
235
+ );
236
+ const prepareTempKeys = traverseData(
237
+ (attribute) => attribute.type === "component" && attribute.repeatable || attribute.type === "dynamiczone",
238
+ (data) => {
239
+ if (Array.isArray(data) && data.length > 0) {
240
+ const keys = fractionalIndexing.generateNKeysBetween(void 0, void 0, data.length);
241
+ return data.map((datum, index2) => ({
242
+ ...datum,
243
+ __temp_key__: keys[index2]
244
+ }));
245
+ }
246
+ return data;
247
+ }
248
+ );
249
+ const removeFieldsThatDontExistOnSchema = (schema) => (data) => {
250
+ const schemaKeys = Object.keys(schema.attributes);
251
+ const dataKeys = Object.keys(data);
252
+ const keysToRemove = dataKeys.filter((key) => !schemaKeys.includes(key));
253
+ const revisedData = [...keysToRemove, ...DOCUMENT_META_FIELDS].reduce((acc, key) => {
254
+ delete acc[key];
255
+ return acc;
256
+ }, structuredClone(data));
257
+ return revisedData;
258
+ };
259
+ const removeNullValues = (data) => {
260
+ return Object.entries(data).reduce((acc, [key, value]) => {
261
+ if (value === null) {
262
+ return acc;
263
+ }
264
+ acc[key] = value;
265
+ return acc;
266
+ }, {});
267
+ };
268
+ const transformDocument = (schema, components = {}) => (document) => {
269
+ const transformations = pipe__default.default(
270
+ removeFieldsThatDontExistOnSchema(schema),
271
+ removeProhibitedFields(["password"])(schema, components),
272
+ removeNullValues,
273
+ prepareRelations(schema, components),
274
+ prepareTempKeys(schema, components)
275
+ );
276
+ return transformations(document);
277
+ };
278
+ const createDefaultForm = (contentType, components = {}) => {
279
+ const traverseSchema = (attributes) => {
280
+ return Object.entries(attributes).reduce((acc, [key, attribute]) => {
281
+ if ("default" in attribute) {
282
+ acc[key] = attribute.default;
283
+ } else if (attribute.type === "component" && attribute.required) {
284
+ const defaultComponentForm = traverseSchema(components[attribute.component].attributes);
285
+ if (attribute.repeatable) {
286
+ acc[key] = attribute.min ? [...Array(attribute.min).fill(defaultComponentForm)] : [];
287
+ } else {
288
+ acc[key] = defaultComponentForm;
289
+ }
290
+ } else if (attribute.type === "dynamiczone" && attribute.required) {
291
+ acc[key] = [];
292
+ }
293
+ return acc;
294
+ }, {});
295
+ };
296
+ return traverseSchema(contentType.attributes);
297
+ };
182
298
  const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
183
299
  addTagTypes: [
184
300
  "ComponentConfiguration",
@@ -188,7 +304,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
188
304
  "InitialData",
189
305
  "HistoryVersion",
190
306
  "Relations",
191
- "UidAvailability"
307
+ "UidAvailability",
308
+ "RecentDocumentList"
192
309
  ]
193
310
  });
194
311
  const documentApi = contentManagerApi.injectEndpoints({
@@ -206,7 +323,7 @@ const documentApi = contentManagerApi.injectEndpoints({
206
323
  if (error) {
207
324
  return [];
208
325
  }
209
- return [{ type: "Document", id: `${model}_LIST` }];
326
+ return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
210
327
  }
211
328
  }),
212
329
  cloneDocument: builder.mutation({
@@ -220,7 +337,8 @@ const documentApi = contentManagerApi.injectEndpoints({
220
337
  }),
221
338
  invalidatesTags: (_result, _error, { model }) => [
222
339
  { type: "Document", id: `${model}_LIST` },
223
- { type: "UidAvailability", id: model }
340
+ { type: "UidAvailability", id: model },
341
+ "RecentDocumentList"
224
342
  ]
225
343
  }),
226
344
  /**
@@ -239,8 +357,21 @@ const documentApi = contentManagerApi.injectEndpoints({
239
357
  invalidatesTags: (result, _error, { model }) => [
240
358
  { type: "Document", id: `${model}_LIST` },
241
359
  "Relations",
242
- { type: "UidAvailability", id: model }
243
- ]
360
+ { type: "UidAvailability", id: model },
361
+ "RecentDocumentList"
362
+ ],
363
+ transformResponse: (response, meta, arg) => {
364
+ if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
365
+ return {
366
+ data: response,
367
+ meta: {
368
+ availableStatus: [],
369
+ availableLocales: []
370
+ }
371
+ };
372
+ }
373
+ return response;
374
+ }
244
375
  }),
245
376
  deleteDocument: builder.mutation({
246
377
  query: ({ collectionType, model, documentId, params }) => ({
@@ -251,7 +382,8 @@ const documentApi = contentManagerApi.injectEndpoints({
251
382
  }
252
383
  }),
253
384
  invalidatesTags: (_result, _error, { collectionType, model }) => [
254
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
385
+ { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
386
+ "RecentDocumentList"
255
387
  ]
256
388
  }),
257
389
  deleteManyDocuments: builder.mutation({
@@ -263,7 +395,10 @@ const documentApi = contentManagerApi.injectEndpoints({
263
395
  params
264
396
  }
265
397
  }),
266
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
398
+ invalidatesTags: (_res, _error, { model }) => [
399
+ { type: "Document", id: `${model}_LIST` },
400
+ "RecentDocumentList"
401
+ ]
267
402
  }),
268
403
  discardDocument: builder.mutation({
269
404
  query: ({ collectionType, model, documentId, params }) => ({
@@ -281,7 +416,8 @@ const documentApi = contentManagerApi.injectEndpoints({
281
416
  },
282
417
  { type: "Document", id: `${model}_LIST` },
283
418
  "Relations",
284
- { type: "UidAvailability", id: model }
419
+ { type: "UidAvailability", id: model },
420
+ "RecentDocumentList"
285
421
  ];
286
422
  }
287
423
  }),
@@ -294,7 +430,7 @@ const documentApi = contentManagerApi.injectEndpoints({
294
430
  url: `/content-manager/collection-types/${model}`,
295
431
  method: "GET",
296
432
  config: {
297
- params
433
+ params: qs.stringify(params, { encode: true })
298
434
  }
299
435
  }),
300
436
  providesTags: (result, _error, arg) => {
@@ -376,7 +512,8 @@ const documentApi = contentManagerApi.injectEndpoints({
376
512
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
377
513
  },
378
514
  { type: "Document", id: `${model}_LIST` },
379
- "Relations"
515
+ "Relations",
516
+ "RecentDocumentList"
380
517
  ];
381
518
  }
382
519
  }),
@@ -407,7 +544,9 @@ const documentApi = contentManagerApi.injectEndpoints({
407
544
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
408
545
  },
409
546
  "Relations",
410
- { type: "UidAvailability", id: model }
547
+ { type: "UidAvailability", id: model },
548
+ "RecentDocumentList",
549
+ "RecentDocumentList"
411
550
  ];
412
551
  },
413
552
  async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
@@ -437,7 +576,8 @@ const documentApi = contentManagerApi.injectEndpoints({
437
576
  {
438
577
  type: "Document",
439
578
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
440
- }
579
+ },
580
+ "RecentDocumentList"
441
581
  ];
442
582
  }
443
583
  }),
@@ -450,7 +590,10 @@ const documentApi = contentManagerApi.injectEndpoints({
450
590
  params
451
591
  }
452
592
  }),
453
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
593
+ invalidatesTags: (_res, _error, { model, documentIds }) => [
594
+ ...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
595
+ "RecentDocumentList"
596
+ ]
454
597
  })
455
598
  })
456
599
  });
@@ -473,8 +616,7 @@ const {
473
616
  useUnpublishManyDocumentsMutation
474
617
  } = documentApi;
475
618
  const buildValidParams = (query) => {
476
- if (!query)
477
- return query;
619
+ if (!query) return query;
478
620
  const { plugins: _, ...validQueryParams } = {
479
621
  ...query,
480
622
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -482,9 +624,6 @@ const buildValidParams = (query) => {
482
624
  {}
483
625
  )
484
626
  };
485
- if ("_q" in validQueryParams) {
486
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
487
- }
488
627
  return validQueryParams;
489
628
  };
490
629
  const isBaseQueryError = (error) => {
@@ -989,9 +1128,10 @@ const formatEditLayout = (data, {
989
1128
  currentPanelIndex += 2;
990
1129
  } else {
991
1130
  if (!panels[currentPanelIndex]) {
992
- panels.push([]);
1131
+ panels.push([row]);
1132
+ } else {
1133
+ panels[currentPanelIndex].push(row);
993
1134
  }
994
- panels[currentPanelIndex].push(row);
995
1135
  }
996
1136
  return panels;
997
1137
  }, []);
@@ -1124,6 +1264,7 @@ const convertListLayoutToFieldLayouts = (columns, attributes = {}, metadatas, co
1124
1264
  const useDocument = (args, opts) => {
1125
1265
  const { toggleNotification } = strapiAdmin.useNotification();
1126
1266
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
1267
+ const { formatMessage } = reactIntl.useIntl();
1127
1268
  const {
1128
1269
  currentData: data,
1129
1270
  isLoading: isLoadingDocument,
@@ -1133,12 +1274,27 @@ const useDocument = (args, opts) => {
1133
1274
  ...opts,
1134
1275
  skip: !args.documentId && args.collectionType !== SINGLE_TYPES || opts?.skip
1135
1276
  });
1277
+ const document = data?.data;
1278
+ const meta = data?.meta;
1136
1279
  const {
1137
1280
  components,
1138
1281
  schema,
1139
1282
  schemas,
1140
1283
  isLoading: isLoadingSchema
1141
1284
  } = useContentTypeSchema(args.model);
1285
+ const isSingleType = schema?.kind === "singleType";
1286
+ const getTitle = (mainField) => {
1287
+ if (mainField !== "id" && document?.[mainField]) {
1288
+ return document[mainField];
1289
+ }
1290
+ if (isSingleType && schema?.info.displayName) {
1291
+ return schema.info.displayName;
1292
+ }
1293
+ return formatMessage({
1294
+ id: "content-manager.containers.untitled",
1295
+ defaultMessage: "Untitled"
1296
+ });
1297
+ };
1142
1298
  React__namespace.useEffect(() => {
1143
1299
  if (error) {
1144
1300
  toggleNotification({
@@ -1154,14 +1310,14 @@ const useDocument = (args, opts) => {
1154
1310
  return createYupSchema(schema.attributes, components);
1155
1311
  }, [schema, components]);
1156
1312
  const validate = React__namespace.useCallback(
1157
- (document) => {
1313
+ (document2) => {
1158
1314
  if (!validationSchema) {
1159
1315
  throw new Error(
1160
1316
  "There is no validation schema generated, this is likely due to the schema not being loaded yet."
1161
1317
  );
1162
1318
  }
1163
1319
  try {
1164
- validationSchema.validateSync(document, { abortEarly: false, strict: true });
1320
+ validationSchema.validateSync(document2, { abortEarly: false, strict: true });
1165
1321
  return null;
1166
1322
  } catch (error2) {
1167
1323
  if (error2 instanceof yup.ValidationError) {
@@ -1172,17 +1328,29 @@ const useDocument = (args, opts) => {
1172
1328
  },
1173
1329
  [validationSchema]
1174
1330
  );
1331
+ const getInitialFormValues = React__namespace.useCallback(
1332
+ (isCreatingDocument = false) => {
1333
+ if (!document && !isCreatingDocument && !isSingleType || !schema) {
1334
+ return void 0;
1335
+ }
1336
+ const form = document?.id ? document : createDefaultForm(schema, components);
1337
+ return transformDocument(schema, components)(form);
1338
+ },
1339
+ [document, isSingleType, schema, components]
1340
+ );
1175
1341
  const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
1176
1342
  const hasError = !!error;
1177
1343
  return {
1178
1344
  components,
1179
- document: data?.data,
1180
- meta: data?.meta,
1345
+ document,
1346
+ meta,
1181
1347
  isLoading,
1182
1348
  hasError,
1183
1349
  schema,
1184
1350
  schemas,
1185
- validate
1351
+ validate,
1352
+ getTitle,
1353
+ getInitialFormValues
1186
1354
  };
1187
1355
  };
1188
1356
  const useDoc = () => {
@@ -1249,9 +1417,6 @@ const useContentManagerContext = () => {
1249
1417
  };
1250
1418
  };
1251
1419
  const prefixPluginTranslations = (trad, pluginId) => {
1252
- if (!pluginId) {
1253
- throw new TypeError("pluginId can't be empty");
1254
- }
1255
1420
  return Object.keys(trad).reduce((acc, current) => {
1256
1421
  acc[`${pluginId}.${current}`] = trad[current];
1257
1422
  return acc;
@@ -1685,10 +1850,10 @@ const useDocumentActions = () => {
1685
1850
  update
1686
1851
  };
1687
1852
  };
1688
- const ProtectedHistoryPage = React.lazy(
1689
- () => Promise.resolve().then(() => require("./History-DJpjbGJZ.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1853
+ const ProtectedHistoryPage = React__namespace.lazy(
1854
+ () => Promise.resolve().then(() => require("./History-DTm8UCCQ.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
1855
  );
1691
- const routes$1 = [
1856
+ const routes$2 = [
1692
1857
  {
1693
1858
  path: ":collectionType/:slug/:id/history",
1694
1859
  Component: ProtectedHistoryPage
@@ -1698,32 +1863,45 @@ const routes$1 = [
1698
1863
  Component: ProtectedHistoryPage
1699
1864
  }
1700
1865
  ];
1866
+ const ProtectedPreviewPage = React__namespace.lazy(
1867
+ () => Promise.resolve().then(() => require("./Preview-Cxq-uI6D.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1868
+ );
1869
+ const routes$1 = [
1870
+ {
1871
+ path: ":collectionType/:slug/:id/preview",
1872
+ Component: ProtectedPreviewPage
1873
+ },
1874
+ {
1875
+ path: ":collectionType/:slug/preview",
1876
+ Component: ProtectedPreviewPage
1877
+ }
1878
+ ];
1701
1879
  const ProtectedEditViewPage = React.lazy(
1702
- () => Promise.resolve().then(() => require("./EditViewPage-MURPhGdY.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1880
+ () => Promise.resolve().then(() => require("./EditViewPage-D4yFJET6.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1703
1881
  );
1704
1882
  const ProtectedListViewPage = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListViewPage-MbdmfkXa.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1883
+ () => Promise.resolve().then(() => require("./ListViewPage-DTuuxU3n.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1706
1884
  );
1707
1885
  const ProtectedListConfiguration = React.lazy(
1708
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DylRESaU.js")).then((mod) => ({
1886
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-ysFMjKI3.js")).then((mod) => ({
1709
1887
  default: mod.ProtectedListConfiguration
1710
1888
  }))
1711
1889
  );
1712
1890
  const ProtectedEditConfigurationPage = React.lazy(
1713
- () => Promise.resolve().then(() => require("./EditConfigurationPage-CtnhGgIx.js")).then((mod) => ({
1891
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-Bl_U2JgH.js")).then((mod) => ({
1714
1892
  default: mod.ProtectedEditConfigurationPage
1715
1893
  }))
1716
1894
  );
1717
1895
  const ProtectedComponentConfigurationPage = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-CI7K072v.js")).then((mod) => ({
1896
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-DBSh-kET.js")).then((mod) => ({
1719
1897
  default: mod.ProtectedComponentConfigurationPage
1720
1898
  }))
1721
1899
  );
1722
1900
  const NoPermissions = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoPermissionsPage-CnnuMd2Y.js")).then((mod) => ({ default: mod.NoPermissions }))
1901
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-v7I599vC.js")).then((mod) => ({ default: mod.NoPermissions }))
1724
1902
  );
1725
1903
  const NoContentType = React.lazy(
1726
- () => Promise.resolve().then(() => require("./NoContentTypePage-BDQ1MdsC.js")).then((mod) => ({ default: mod.NoContentType }))
1904
+ () => Promise.resolve().then(() => require("./NoContentTypePage-CL7VVeYs.js")).then((mod) => ({ default: mod.NoContentType }))
1727
1905
  );
1728
1906
  const CollectionTypePages = () => {
1729
1907
  const { collectionType } = reactRouterDom.useParams();
@@ -1735,7 +1913,7 @@ const CollectionTypePages = () => {
1735
1913
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1736
1914
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1737
1915
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1738
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1916
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1739
1917
  const routes = [
1740
1918
  {
1741
1919
  path: LIST_RELATIVE_PATH,
@@ -1769,6 +1947,7 @@ const routes = [
1769
1947
  path: "no-content-types",
1770
1948
  Component: NoContentType
1771
1949
  },
1950
+ ...routes$2,
1772
1951
  ...routes$1
1773
1952
  ];
1774
1953
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1867,6 +2046,11 @@ const DocumentActionButton = (action) => {
1867
2046
  ) : null
1868
2047
  ] });
1869
2048
  };
2049
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
2050
+ &:hover {
2051
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
2052
+ }
2053
+ `;
1870
2054
  const DocumentActionsMenu = ({
1871
2055
  actions: actions2,
1872
2056
  children,
@@ -1925,48 +2109,32 @@ const DocumentActionsMenu = ({
1925
2109
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1926
2110
  actions2.map((action) => {
1927
2111
  return /* @__PURE__ */ jsxRuntime.jsx(
1928
- designSystem.Menu.Item,
2112
+ MenuItem,
1929
2113
  {
1930
2114
  disabled: action.disabled,
1931
2115
  onSelect: handleClick(action),
1932
2116
  display: "block",
1933
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1934
- /* @__PURE__ */ jsxRuntime.jsxs(
1935
- designSystem.Flex,
1936
- {
1937
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1938
- gap: 2,
1939
- tag: "span",
1940
- children: [
1941
- /* @__PURE__ */ jsxRuntime.jsx(
1942
- designSystem.Flex,
1943
- {
1944
- tag: "span",
1945
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1946
- children: action.icon
1947
- }
1948
- ),
1949
- action.label
1950
- ]
1951
- }
1952
- ),
1953
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1954
- designSystem.Flex,
1955
- {
1956
- alignItems: "center",
1957
- background: "alternative100",
1958
- borderStyle: "solid",
1959
- borderColor: "alternative200",
1960
- borderWidth: "1px",
1961
- height: 5,
1962
- paddingLeft: 2,
1963
- paddingRight: 2,
1964
- hasRadius: true,
1965
- color: "alternative600",
1966
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1967
- }
1968
- )
1969
- ] })
2117
+ isVariantDanger: action.variant === "danger",
2118
+ isDisabled: action.disabled,
2119
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(
2120
+ designSystem.Flex,
2121
+ {
2122
+ color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
2123
+ gap: 2,
2124
+ tag: "span",
2125
+ children: [
2126
+ /* @__PURE__ */ jsxRuntime.jsx(
2127
+ designSystem.Flex,
2128
+ {
2129
+ tag: "span",
2130
+ color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
2131
+ children: action.icon
2132
+ }
2133
+ ),
2134
+ action.label
2135
+ ]
2136
+ }
2137
+ ) })
1970
2138
  },
1971
2139
  action.id
1972
2140
  );
@@ -2077,6 +2245,18 @@ const DocumentActionModal = ({
2077
2245
  typeof Footer === "function" ? /* @__PURE__ */ jsxRuntime.jsx(Footer, { onClose: handleClose }) : Footer
2078
2246
  ] }) });
2079
2247
  };
2248
+ const transformData = (data) => {
2249
+ if (Array.isArray(data)) {
2250
+ return data.map(transformData);
2251
+ }
2252
+ if (typeof data === "object" && data !== null) {
2253
+ if ("apiData" in data) {
2254
+ return data.apiData;
2255
+ }
2256
+ return mapValues__default.default(transformData)(data);
2257
+ }
2258
+ return data;
2259
+ };
2080
2260
  const PublishAction$1 = ({
2081
2261
  activeTab,
2082
2262
  documentId,
@@ -2091,6 +2271,7 @@ const PublishAction$1 = ({
2091
2271
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2092
2272
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2093
2273
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2274
+ const { id } = reactRouterDom.useParams();
2094
2275
  const { formatMessage } = reactIntl.useIntl();
2095
2276
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2096
2277
  const { publish } = useDocumentActions();
@@ -2190,13 +2371,15 @@ const PublishAction$1 = ({
2190
2371
  documentId,
2191
2372
  params
2192
2373
  },
2193
- formValues
2374
+ transformData(formValues)
2194
2375
  );
2195
2376
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2196
- navigate({
2197
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2198
- search: rawQuery
2199
- });
2377
+ if (id === "create") {
2378
+ navigate({
2379
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2380
+ search: rawQuery
2381
+ });
2382
+ }
2200
2383
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2201
2384
  setErrors(formatValidationErrors(res.error));
2202
2385
  }
@@ -2249,6 +2432,7 @@ const PublishAction$1 = ({
2249
2432
  };
2250
2433
  };
2251
2434
  PublishAction$1.type = "publish";
2435
+ PublishAction$1.position = "panel";
2252
2436
  const UpdateAction = ({
2253
2437
  activeTab,
2254
2438
  documentId,
@@ -2271,96 +2455,134 @@ const UpdateAction = ({
2271
2455
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2272
2456
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2273
2457
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2274
- return {
2275
- /**
2276
- * Disabled when:
2277
- * - the form is submitting
2278
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2279
- * - the active tab is the published tab
2280
- */
2281
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2282
- label: formatMessage({
2283
- id: "content-manager.containers.Edit.save",
2284
- defaultMessage: "Save"
2285
- }),
2286
- onClick: async () => {
2287
- setSubmitting(true);
2288
- try {
2289
- const { errors } = await validate(true, {
2290
- status: "draft"
2458
+ const handleUpdate = React__namespace.useCallback(async () => {
2459
+ setSubmitting(true);
2460
+ try {
2461
+ if (!modified) {
2462
+ return;
2463
+ }
2464
+ const { errors } = await validate(true, {
2465
+ status: "draft"
2466
+ });
2467
+ if (errors) {
2468
+ toggleNotification({
2469
+ type: "danger",
2470
+ message: formatMessage({
2471
+ id: "content-manager.validation.error",
2472
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2473
+ })
2291
2474
  });
2292
- if (errors) {
2293
- toggleNotification({
2294
- type: "danger",
2295
- message: formatMessage({
2296
- id: "content-manager.validation.error",
2297
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2298
- })
2299
- });
2300
- return;
2301
- }
2302
- if (isCloning) {
2303
- const res = await clone(
2304
- {
2305
- model,
2306
- documentId: cloneMatch.params.origin,
2307
- params
2308
- },
2309
- document
2310
- );
2311
- if ("data" in res) {
2312
- navigate(
2313
- {
2314
- pathname: `../${res.data.documentId}`,
2315
- search: rawQuery
2316
- },
2317
- { relative: "path" }
2318
- );
2319
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2320
- setErrors(formatValidationErrors(res.error));
2321
- }
2322
- } else if (documentId || collectionType === SINGLE_TYPES) {
2323
- const res = await update(
2475
+ return;
2476
+ }
2477
+ if (isCloning) {
2478
+ const res = await clone(
2479
+ {
2480
+ model,
2481
+ documentId: cloneMatch.params.origin,
2482
+ params
2483
+ },
2484
+ transformData(document)
2485
+ );
2486
+ if ("data" in res) {
2487
+ navigate(
2324
2488
  {
2325
- collectionType,
2326
- model,
2327
- documentId,
2328
- params
2489
+ pathname: `../${res.data.documentId}`,
2490
+ search: rawQuery
2329
2491
  },
2330
- document
2492
+ { relative: "path" }
2331
2493
  );
2332
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2333
- setErrors(formatValidationErrors(res.error));
2334
- } else {
2335
- resetForm();
2336
- }
2494
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2495
+ setErrors(formatValidationErrors(res.error));
2496
+ }
2497
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2498
+ const res = await update(
2499
+ {
2500
+ collectionType,
2501
+ model,
2502
+ documentId,
2503
+ params
2504
+ },
2505
+ transformData(document)
2506
+ );
2507
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2508
+ setErrors(formatValidationErrors(res.error));
2337
2509
  } else {
2338
- const res = await create(
2510
+ resetForm();
2511
+ }
2512
+ } else {
2513
+ const res = await create(
2514
+ {
2515
+ model,
2516
+ params
2517
+ },
2518
+ transformData(document)
2519
+ );
2520
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2521
+ navigate(
2339
2522
  {
2340
- model,
2341
- params
2523
+ pathname: `../${res.data.documentId}`,
2524
+ search: rawQuery
2342
2525
  },
2343
- document
2526
+ { replace: true, relative: "path" }
2344
2527
  );
2345
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2346
- navigate(
2347
- {
2348
- pathname: `../${res.data.documentId}`,
2349
- search: rawQuery
2350
- },
2351
- { replace: true, relative: "path" }
2352
- );
2353
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2354
- setErrors(formatValidationErrors(res.error));
2355
- }
2528
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2529
+ setErrors(formatValidationErrors(res.error));
2356
2530
  }
2357
- } finally {
2358
- setSubmitting(false);
2359
2531
  }
2532
+ } finally {
2533
+ setSubmitting(false);
2360
2534
  }
2535
+ }, [
2536
+ clone,
2537
+ cloneMatch?.params.origin,
2538
+ collectionType,
2539
+ create,
2540
+ document,
2541
+ documentId,
2542
+ formatMessage,
2543
+ formatValidationErrors,
2544
+ isCloning,
2545
+ model,
2546
+ modified,
2547
+ navigate,
2548
+ params,
2549
+ rawQuery,
2550
+ resetForm,
2551
+ setErrors,
2552
+ setSubmitting,
2553
+ toggleNotification,
2554
+ update,
2555
+ validate
2556
+ ]);
2557
+ React__namespace.useEffect(() => {
2558
+ const handleKeyDown = (e) => {
2559
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2560
+ e.preventDefault();
2561
+ handleUpdate();
2562
+ }
2563
+ };
2564
+ window.addEventListener("keydown", handleKeyDown);
2565
+ return () => {
2566
+ window.removeEventListener("keydown", handleKeyDown);
2567
+ };
2568
+ }, [handleUpdate]);
2569
+ return {
2570
+ /**
2571
+ * Disabled when:
2572
+ * - the form is submitting
2573
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2574
+ * - the active tab is the published tab
2575
+ */
2576
+ disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2577
+ label: formatMessage({
2578
+ id: "global.save",
2579
+ defaultMessage: "Save"
2580
+ }),
2581
+ onClick: handleUpdate
2361
2582
  };
2362
2583
  };
2363
2584
  UpdateAction.type = "update";
2585
+ UpdateAction.position = "panel";
2364
2586
  const UNPUBLISH_DRAFT_OPTIONS = {
2365
2587
  KEEP: "keep",
2366
2588
  DISCARD: "discard"
@@ -2483,6 +2705,7 @@ const UnpublishAction$1 = ({
2483
2705
  };
2484
2706
  };
2485
2707
  UnpublishAction$1.type = "unpublish";
2708
+ UnpublishAction$1.position = "panel";
2486
2709
  const DiscardAction = ({
2487
2710
  activeTab,
2488
2711
  documentId,
@@ -2533,6 +2756,7 @@ const DiscardAction = ({
2533
2756
  };
2534
2757
  };
2535
2758
  DiscardAction.type = "discard";
2759
+ DiscardAction.position = "panel";
2536
2760
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2537
2761
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2538
2762
  const RelativeTime = React__namespace.forwardRef(
@@ -2545,7 +2769,7 @@ const RelativeTime = React__namespace.forwardRef(
2545
2769
  });
2546
2770
  const unit = intervals.find((intervalUnit) => {
2547
2771
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2548
- });
2772
+ }) ?? "seconds";
2549
2773
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2550
2774
  const customInterval = customIntervals.find(
2551
2775
  (custom) => interval[custom.unit] < custom.threshold
@@ -2579,19 +2803,29 @@ const getDisplayName = ({
2579
2803
  return email ?? "";
2580
2804
  };
2581
2805
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2582
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2806
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2583
2807
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2584
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
2808
+ const { formatMessage } = reactIntl.useIntl();
2809
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, size, variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: formatMessage({
2810
+ id: `content-manager.containers.List.${status}`,
2811
+ defaultMessage: capitalise(status)
2812
+ }) }) });
2585
2813
  };
2586
2814
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2587
2815
  const { formatMessage } = reactIntl.useIntl();
2588
2816
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2817
+ const params = reactRouterDom.useParams();
2589
2818
  const title = isCreating ? formatMessage({
2590
2819
  id: "content-manager.containers.edit.title.new",
2591
2820
  defaultMessage: "Create an entry"
2592
2821
  }) : documentTitle;
2593
2822
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2594
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
2823
+ /* @__PURE__ */ jsxRuntime.jsx(
2824
+ strapiAdmin.BackButton,
2825
+ {
2826
+ fallback: params.collectionType === SINGLE_TYPES ? void 0 : `../${COLLECTION_TYPES}/${params.slug}`
2827
+ }
2828
+ ),
2595
2829
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2596
2830
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2597
2831
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2642,7 +2876,7 @@ const HeaderToolbar = () => {
2642
2876
  meta: isCloning ? void 0 : meta,
2643
2877
  collectionType
2644
2878
  },
2645
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2879
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2646
2880
  children: (actions2) => {
2647
2881
  const headerActions = actions2.filter((action) => {
2648
2882
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2850,6 +3084,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2850
3084
  };
2851
3085
  };
2852
3086
  ConfigureTheViewAction.type = "configure-the-view";
3087
+ ConfigureTheViewAction.position = "header";
2853
3088
  const EditTheModelAction = ({ model }) => {
2854
3089
  const navigate = reactRouterDom.useNavigate();
2855
3090
  const { formatMessage } = reactIntl.useIntl();
@@ -2866,6 +3101,7 @@ const EditTheModelAction = ({ model }) => {
2866
3101
  };
2867
3102
  };
2868
3103
  EditTheModelAction.type = "edit-the-model";
3104
+ EditTheModelAction.position = "header";
2869
3105
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2870
3106
  const navigate = reactRouterDom.useNavigate();
2871
3107
  const { formatMessage } = reactIntl.useIntl();
@@ -2939,6 +3175,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2939
3175
  };
2940
3176
  };
2941
3177
  DeleteAction$1.type = "delete";
3178
+ DeleteAction$1.position = ["header", "table-row"];
2942
3179
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2943
3180
  const Panels = () => {
2944
3181
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3001,7 +3238,7 @@ const ActionsPanelContent = () => {
3001
3238
  strapiAdmin.DescriptionComponentRenderer,
3002
3239
  {
3003
3240
  props,
3004
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3241
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3005
3242
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3006
3243
  }
3007
3244
  ),
@@ -3028,7 +3265,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
3028
3265
  justifyContent: "stretch",
3029
3266
  alignItems: "flex-start",
3030
3267
  children: [
3031
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", children: title }),
3268
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", textColor: "neutral600", children: title }),
3032
3269
  children
3033
3270
  ]
3034
3271
  }
@@ -3059,7 +3296,7 @@ const ConfirmBulkActionDialog = ({
3059
3296
  ] })
3060
3297
  ] }) });
3061
3298
  };
3062
- const BoldChunk$1 = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
3299
+ const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
3063
3300
  const ConfirmDialogPublishAll = ({
3064
3301
  isOpen,
3065
3302
  onToggleDialog,
@@ -3108,7 +3345,7 @@ const ConfirmDialogPublishAll = ({
3108
3345
  defaultMessage: "<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. "
3109
3346
  },
3110
3347
  {
3111
- b: BoldChunk$1,
3348
+ b: BoldChunk,
3112
3349
  count: countDraftRelations,
3113
3350
  entities: selectedEntries.length
3114
3351
  }
@@ -3147,6 +3384,16 @@ const ConfirmDialogPublishAll = ({
3147
3384
  const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
3148
3385
  max-width: 300px;
3149
3386
  `;
3387
+ const TableComponent = styledComponents.styled(designSystem.RawTable)`
3388
+ width: 100%;
3389
+ table-layout: fixed;
3390
+ td:first-child {
3391
+ border-right: 1px solid ${({ theme }) => theme.colors.neutral150};
3392
+ }
3393
+ td:first-of-type {
3394
+ padding: ${({ theme }) => theme.spaces[4]};
3395
+ }
3396
+ `;
3150
3397
  const formatErrorMessages = (errors, parentKey, formatMessage) => {
3151
3398
  const messages = [];
3152
3399
  Object.entries(errors).forEach(([key, value]) => {
@@ -3251,7 +3498,7 @@ const SelectedEntriesTableContent = ({
3251
3498
  )
3252
3499
  ] }),
3253
3500
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
3254
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: rowsToDisplay.map((row, index2) => /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Row, { children: [
3501
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: rowsToDisplay.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Row, { children: [
3255
3502
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, { id: row.id }),
3256
3503
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row.id }) }),
3257
3504
  shouldDisplayMainField && /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row[mainField] }) }),
@@ -3278,18 +3525,10 @@ const SelectedEntriesTableContent = ({
3278
3525
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3279
3526
  },
3280
3527
  state: { from: pathname },
3281
- label: formatMessage(
3282
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3283
- {
3284
- target: formatMessage(
3285
- {
3286
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3287
- defaultMessage: "item line {number}"
3288
- },
3289
- { number: index2 + 1 }
3290
- )
3291
- }
3292
- ),
3528
+ label: formatMessage({
3529
+ id: "content-manager.bulk-publish.edit",
3530
+ defaultMessage: "Edit"
3531
+ }),
3293
3532
  target: "_blank",
3294
3533
  marginLeft: "auto",
3295
3534
  variant: "ghost",
@@ -3299,7 +3538,73 @@ const SelectedEntriesTableContent = ({
3299
3538
  ] }, row.id)) })
3300
3539
  ] });
3301
3540
  };
3302
- const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
3541
+ const PublicationStatusSummary = ({ count, icon, message }) => {
3542
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", flex: 1, gap: 3, children: [
3543
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
3544
+ icon,
3545
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: message })
3546
+ ] }),
3547
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: count })
3548
+ ] });
3549
+ };
3550
+ const PublicationStatusGrid = ({
3551
+ entriesReadyToPublishCount,
3552
+ entriesPublishedCount,
3553
+ entriesModifiedCount,
3554
+ entriesWithErrorsCount
3555
+ }) => {
3556
+ const { formatMessage } = reactIntl.useIntl();
3557
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { hasRadius: true, borderColor: "neutral150", children: /* @__PURE__ */ jsxRuntime.jsx(TableComponent, { colCount: 2, rowCount: 2, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tbody, { children: [
3558
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
3559
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
3560
+ PublicationStatusSummary,
3561
+ {
3562
+ count: entriesReadyToPublishCount,
3563
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CheckCircle, { fill: "success600" }),
3564
+ message: formatMessage({
3565
+ id: "app.utils.ready-to-publish",
3566
+ defaultMessage: "Ready to publish"
3567
+ })
3568
+ }
3569
+ ) }),
3570
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
3571
+ PublicationStatusSummary,
3572
+ {
3573
+ count: entriesPublishedCount,
3574
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CheckCircle, { fill: "success600" }),
3575
+ message: formatMessage({
3576
+ id: "app.utils.already-published",
3577
+ defaultMessage: "Already published"
3578
+ })
3579
+ }
3580
+ ) })
3581
+ ] }),
3582
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
3583
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
3584
+ PublicationStatusSummary,
3585
+ {
3586
+ count: entriesModifiedCount,
3587
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ArrowsCounterClockwise, { fill: "alternative600" }),
3588
+ message: formatMessage({
3589
+ id: "content-manager.bulk-publish.modified",
3590
+ defaultMessage: "Ready to publish changes"
3591
+ })
3592
+ }
3593
+ ) }),
3594
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
3595
+ PublicationStatusSummary,
3596
+ {
3597
+ count: entriesWithErrorsCount,
3598
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CrossCircle, { fill: "danger600" }),
3599
+ message: formatMessage({
3600
+ id: "content-manager.bulk-publish.waiting-for-action",
3601
+ defaultMessage: "Waiting for action"
3602
+ })
3603
+ }
3604
+ ) })
3605
+ ] })
3606
+ ] }) }) });
3607
+ };
3303
3608
  const SelectedEntriesModalContent = ({
3304
3609
  listViewSelectedEntries,
3305
3610
  toggleModal,
@@ -3358,7 +3663,6 @@ const SelectedEntriesModalContent = ({
3358
3663
  validationErrors: {}
3359
3664
  };
3360
3665
  }, [components, data, schema]);
3361
- const [publishedCount, setPublishedCount] = React__namespace.useState(0);
3362
3666
  const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
3363
3667
  const { publishMany: bulkPublishAction } = useDocumentActions();
3364
3668
  const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
@@ -3370,53 +3674,36 @@ const SelectedEntriesModalContent = ({
3370
3674
  const selectedEntriesWithErrorsCount = selectedEntries.filter(
3371
3675
  ({ documentId }) => validationErrors[documentId]
3372
3676
  ).length;
3373
- const selectedEntriesPublished = selectedEntries.filter(
3677
+ const selectedEntriesPublishedCount = selectedEntries.filter(
3374
3678
  ({ status }) => status === "published"
3375
3679
  ).length;
3376
- const selectedEntriesWithNoErrorsCount = selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;
3680
+ const selectedEntriesModifiedCount = selectedEntries.filter(
3681
+ ({ status, documentId }) => status === "modified" && !validationErrors[documentId]
3682
+ ).length;
3683
+ const selectedEntriesWithNoErrorsCount = selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;
3377
3684
  const toggleDialog = () => setIsDialogOpen((prev) => !prev);
3378
3685
  const handleConfirmBulkPublish = async () => {
3379
3686
  toggleDialog();
3380
3687
  const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
3381
3688
  if (!("error" in res)) {
3382
- setPublishedCount(res.count);
3383
3689
  const unpublishedEntries = rows.filter((row) => {
3384
3690
  return !entriesToPublish.includes(row.documentId);
3385
3691
  });
3386
3692
  setListViewSelectedDocuments(unpublishedEntries);
3387
3693
  }
3388
3694
  };
3389
- const getFormattedCountMessage = () => {
3390
- if (publishedCount) {
3391
- return formatMessage(
3392
- {
3393
- id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
3394
- defaultMessage: "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
3395
- },
3396
- {
3397
- publishedCount,
3398
- withErrorsCount: selectedEntriesWithErrorsCount,
3399
- b: BoldChunk
3400
- }
3401
- );
3402
- }
3403
- return formatMessage(
3404
- {
3405
- id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
3406
- 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."
3407
- },
3408
- {
3409
- readyToPublishCount: selectedEntriesWithNoErrorsCount,
3410
- withErrorsCount: selectedEntriesWithErrorsCount,
3411
- alreadyPublishedCount: selectedEntriesPublished,
3412
- b: BoldChunk
3413
- }
3414
- );
3415
- };
3416
3695
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3417
3696
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
3418
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: getFormattedCountMessage() }),
3419
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 5, children: /* @__PURE__ */ jsxRuntime.jsx(
3697
+ /* @__PURE__ */ jsxRuntime.jsx(
3698
+ PublicationStatusGrid,
3699
+ {
3700
+ entriesReadyToPublishCount: selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount,
3701
+ entriesPublishedCount: selectedEntriesPublishedCount,
3702
+ entriesModifiedCount: selectedEntriesModifiedCount,
3703
+ entriesWithErrorsCount: selectedEntriesWithErrorsCount
3704
+ }
3705
+ ),
3706
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 7, children: /* @__PURE__ */ jsxRuntime.jsx(
3420
3707
  SelectedEntriesTableContent,
3421
3708
  {
3422
3709
  isPublishing: isSubmittingForm,
@@ -3437,7 +3724,7 @@ const SelectedEntriesModalContent = ({
3437
3724
  designSystem.Button,
3438
3725
  {
3439
3726
  onClick: toggleDialog,
3440
- disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublished === selectedEntries.length || isLoading,
3727
+ disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublishedCount === selectedEntries.length || isLoading,
3441
3728
  loading: isSubmittingForm,
3442
3729
  children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
3443
3730
  }
@@ -3463,8 +3750,7 @@ const PublishAction = ({ documents, model }) => {
3463
3750
  const refetchList = () => {
3464
3751
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3465
3752
  };
3466
- if (!showPublishButton)
3467
- return null;
3753
+ if (!showPublishButton) return null;
3468
3754
  return {
3469
3755
  actionType: "publish",
3470
3756
  variant: "tertiary",
@@ -3532,8 +3818,7 @@ const DeleteAction = ({ documents, model }) => {
3532
3818
  selectRow([]);
3533
3819
  }
3534
3820
  };
3535
- if (!hasDeletePermission)
3536
- return null;
3821
+ if (!hasDeletePermission) return null;
3537
3822
  return {
3538
3823
  variant: "danger-light",
3539
3824
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3582,8 +3867,7 @@ const UnpublishAction = ({ documents, model }) => {
3582
3867
  }
3583
3868
  };
3584
3869
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3585
- if (!showUnpublishButton)
3586
- return null;
3870
+ if (!showUnpublishButton) return null;
3587
3871
  return {
3588
3872
  variant: "tertiary",
3589
3873
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3688,7 +3972,7 @@ const TableActions = ({ document }) => {
3688
3972
  strapiAdmin.DescriptionComponentRenderer,
3689
3973
  {
3690
3974
  props,
3691
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3975
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3692
3976
  children: (actions2) => {
3693
3977
  const tableRowActions = actions2.filter((action) => {
3694
3978
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3747,6 +4031,7 @@ const EditAction = ({ documentId }) => {
3747
4031
  };
3748
4032
  };
3749
4033
  EditAction.type = "edit";
4034
+ EditAction.position = "table-row";
3750
4035
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3751
4036
  path {
3752
4037
  fill: currentColor;
@@ -3823,6 +4108,7 @@ const CloneAction = ({ model, documentId }) => {
3823
4108
  };
3824
4109
  };
3825
4110
  CloneAction.type = "clone";
4111
+ CloneAction.position = "table-row";
3826
4112
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3827
4113
  path {
3828
4114
  fill: currentColor;
@@ -3909,7 +4195,14 @@ class ContentManagerPlugin {
3909
4195
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3910
4196
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3911
4197
  getBulkActions: () => this.bulkActions,
3912
- getDocumentActions: () => this.documentActions,
4198
+ getDocumentActions: (position) => {
4199
+ if (position) {
4200
+ return this.documentActions.filter(
4201
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
4202
+ );
4203
+ }
4204
+ return this.documentActions;
4205
+ },
3913
4206
  getEditViewSidePanels: () => this.editViewSidePanels,
3914
4207
  getHeaderActions: () => this.headerActions
3915
4208
  }
@@ -3919,10 +4212,8 @@ class ContentManagerPlugin {
3919
4212
  const getPrintableType = (value) => {
3920
4213
  const nativeType = typeof value;
3921
4214
  if (nativeType === "object") {
3922
- if (value === null)
3923
- return "null";
3924
- if (Array.isArray(value))
3925
- return "array";
4215
+ if (value === null) return "null";
4216
+ if (Array.isArray(value)) return "array";
3926
4217
  if (value instanceof Object && value.constructor.name !== "Object") {
3927
4218
  return value.constructor.name;
3928
4219
  }
@@ -3933,17 +4224,27 @@ const HistoryAction = ({ model, document }) => {
3933
4224
  const { formatMessage } = reactIntl.useIntl();
3934
4225
  const [{ query }] = strapiAdmin.useQueryParams();
3935
4226
  const navigate = reactRouterDom.useNavigate();
4227
+ const { trackUsage } = strapiAdmin.useTracking();
4228
+ const { pathname } = reactRouterDom.useLocation();
3936
4229
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3937
4230
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3938
4231
  return null;
3939
4232
  }
4233
+ const handleOnClick = () => {
4234
+ const destination = { pathname: "history", search: pluginsQueryParams };
4235
+ trackUsage("willNavigate", {
4236
+ from: pathname,
4237
+ to: `${pathname}/${destination.pathname}`
4238
+ });
4239
+ navigate(destination);
4240
+ };
3940
4241
  return {
3941
4242
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3942
4243
  label: formatMessage({
3943
4244
  id: "content-manager.history.document-action",
3944
4245
  defaultMessage: "Content History"
3945
4246
  }),
3946
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4247
+ onClick: handleOnClick,
3947
4248
  disabled: (
3948
4249
  /**
3949
4250
  * The user is creating a new document.
@@ -3965,6 +4266,7 @@ const HistoryAction = ({ model, document }) => {
3965
4266
  };
3966
4267
  };
3967
4268
  HistoryAction.type = "history";
4269
+ HistoryAction.position = "header";
3968
4270
  const historyAdmin = {
3969
4271
  bootstrap(app) {
3970
4272
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4011,6 +4313,88 @@ const { setInitialData } = actions;
4011
4313
  const reducer = toolkit.combineReducers({
4012
4314
  app: reducer$1
4013
4315
  });
4316
+ const previewApi = contentManagerApi.injectEndpoints({
4317
+ endpoints: (builder) => ({
4318
+ getPreviewUrl: builder.query({
4319
+ query({ query, params }) {
4320
+ return {
4321
+ url: `/content-manager/preview/url/${params.contentType}`,
4322
+ method: "GET",
4323
+ config: {
4324
+ params: query
4325
+ }
4326
+ };
4327
+ }
4328
+ })
4329
+ })
4330
+ });
4331
+ const { useGetPreviewUrlQuery } = previewApi;
4332
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4333
+ if (isShown) {
4334
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
4335
+ }
4336
+ return children;
4337
+ };
4338
+ const PreviewSidePanel = ({ model, documentId, document }) => {
4339
+ const { formatMessage } = reactIntl.useIntl();
4340
+ const { trackUsage } = strapiAdmin.useTracking();
4341
+ const { pathname } = reactRouterDom.useLocation();
4342
+ const [{ query }] = strapiAdmin.useQueryParams();
4343
+ const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
4344
+ const { data, error } = useGetPreviewUrlQuery({
4345
+ params: {
4346
+ contentType: model
4347
+ },
4348
+ query: {
4349
+ documentId,
4350
+ locale: document?.locale,
4351
+ status: document?.status
4352
+ }
4353
+ });
4354
+ if (!data?.data?.url || error) {
4355
+ return null;
4356
+ }
4357
+ const trackNavigation = () => {
4358
+ const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
4359
+ trackUsage("willNavigate", { from: pathname, to: destinationPathname });
4360
+ };
4361
+ return {
4362
+ title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4363
+ content: /* @__PURE__ */ jsxRuntime.jsx(
4364
+ ConditionalTooltip,
4365
+ {
4366
+ label: formatMessage({
4367
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4368
+ defaultMessage: "Please save to open the preview"
4369
+ }),
4370
+ isShown: isModified,
4371
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4372
+ designSystem.Button,
4373
+ {
4374
+ variant: "tertiary",
4375
+ tag: reactRouterDom.Link,
4376
+ to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4377
+ onClick: trackNavigation,
4378
+ width: "100%",
4379
+ disabled: isModified,
4380
+ pointerEvents: isModified ? "none" : void 0,
4381
+ tabIndex: isModified ? -1 : void 0,
4382
+ children: formatMessage({
4383
+ id: "content-manager.preview.panel.button",
4384
+ defaultMessage: "Open preview"
4385
+ })
4386
+ }
4387
+ ) })
4388
+ }
4389
+ )
4390
+ };
4391
+ };
4392
+ const previewAdmin = {
4393
+ bootstrap(app) {
4394
+ const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4395
+ contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4396
+ }
4397
+ };
4014
4398
  const index = {
4015
4399
  register(app) {
4016
4400
  const cm = new ContentManagerPlugin();
@@ -4030,7 +4414,7 @@ const index = {
4030
4414
  app.router.addRoute({
4031
4415
  path: "content-manager/*",
4032
4416
  lazy: async () => {
4033
- const { Layout } = await Promise.resolve().then(() => require("./layout-DDtbDqUd.js"));
4417
+ const { Layout } = await Promise.resolve().then(() => require("./layout-Cl0NhlQB.js"));
4034
4418
  return {
4035
4419
  Component: Layout
4036
4420
  };
@@ -4043,11 +4427,14 @@ const index = {
4043
4427
  if (typeof historyAdmin.bootstrap === "function") {
4044
4428
  historyAdmin.bootstrap(app);
4045
4429
  }
4430
+ if (typeof previewAdmin.bootstrap === "function") {
4431
+ previewAdmin.bootstrap(app);
4432
+ }
4046
4433
  },
4047
4434
  async registerTrads({ locales }) {
4048
4435
  const importedTrads = await Promise.all(
4049
4436
  locales.map((locale) => {
4050
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-Bm0D0IWz.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-EUonQTon.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B7kGGg3E.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-CcFe8diO.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
4437
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-BR48D_RH.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-9K52xZIr.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-C43IbhA_.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-7sfIbjxE.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
4051
4438
  return {
4052
4439
  data: prefixPluginTranslations(data, PLUGIN_ID),
4053
4440
  locale
@@ -4069,7 +4456,6 @@ exports.CLONE_PATH = CLONE_PATH;
4069
4456
  exports.COLLECTION_TYPES = COLLECTION_TYPES;
4070
4457
  exports.CREATOR_FIELDS = CREATOR_FIELDS;
4071
4458
  exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
4072
- exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
4073
4459
  exports.DocumentRBAC = DocumentRBAC;
4074
4460
  exports.DocumentStatus = DocumentStatus;
4075
4461
  exports.HOOKS = HOOKS;
@@ -4086,13 +4472,17 @@ exports.checkIfAttributeIsDisplayable = checkIfAttributeIsDisplayable;
4086
4472
  exports.contentManagerApi = contentManagerApi;
4087
4473
  exports.convertEditLayoutToFieldLayouts = convertEditLayoutToFieldLayouts;
4088
4474
  exports.convertListLayoutToFieldLayouts = convertListLayoutToFieldLayouts;
4475
+ exports.createDefaultForm = createDefaultForm;
4089
4476
  exports.createYupSchema = createYupSchema;
4090
4477
  exports.extractContentTypeComponents = extractContentTypeComponents;
4091
4478
  exports.getDisplayName = getDisplayName;
4092
4479
  exports.getMainField = getMainField;
4093
4480
  exports.getTranslation = getTranslation;
4094
4481
  exports.index = index;
4482
+ exports.prepareTempKeys = prepareTempKeys;
4483
+ exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
4095
4484
  exports.setInitialData = setInitialData;
4485
+ exports.transformDocument = transformDocument;
4096
4486
  exports.useContentManagerContext = useContentManagerContext;
4097
4487
  exports.useContentTypeSchema = useContentTypeSchema;
4098
4488
  exports.useDoc = useDoc;
@@ -4105,5 +4495,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4105
4495
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4106
4496
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4107
4497
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4498
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4108
4499
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4109
- //# sourceMappingURL=index-B9u01WiI.js.map
4500
+ //# sourceMappingURL=index-DQsvBb_N.js.map