@strapi/content-manager 0.0.0-experimental.fccfa141baa6df7776ec7cb83f7fe923626ba6f5 → 0.0.0-experimental.fd51913e4ee4e81a845e6f5bcfd4916cac70ca2e

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 (202) 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-CQroR9Qk.mjs → ComponentConfigurationPage-9_4yUE9L.mjs} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-CQroR9Qk.mjs.map → ComponentConfigurationPage-9_4yUE9L.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CO977CPh.js → ComponentConfigurationPage-DBSh-kET.js} +4 -5
  6. package/dist/_chunks/{ComponentConfigurationPage-CO977CPh.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-BPgoE-kf.js → EditConfigurationPage-Bl_U2JgH.js} +4 -5
  11. package/dist/_chunks/{EditConfigurationPage-BPgoE-kf.js.map → EditConfigurationPage-Bl_U2JgH.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-tVCJ5vWC.mjs → EditConfigurationPage-COe6hjPC.mjs} +3 -3
  13. package/dist/_chunks/{EditConfigurationPage-tVCJ5vWC.mjs.map → EditConfigurationPage-COe6hjPC.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-BMVgUNOX.js → EditViewPage-D4yFJET6.js} +23 -57
  15. package/dist/_chunks/EditViewPage-D4yFJET6.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-8mOu02ji.mjs → EditViewPage-DrmVmYN0.mjs} +21 -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-eP5bZwap.js → Form-C4rSaGsz.js} +5 -6
  21. package/dist/_chunks/{Form-eP5bZwap.js.map → Form-C4rSaGsz.js.map} +1 -1
  22. package/dist/_chunks/{Form-DJOJ-GF1.mjs → Form-DamaxNpG.mjs} +3 -3
  23. package/dist/_chunks/{Form-DJOJ-GF1.mjs.map → Form-DamaxNpG.mjs.map} +1 -1
  24. package/dist/_chunks/{History-MnQLtk1g.mjs → History-D1PreDSY.mjs} +51 -97
  25. package/dist/_chunks/History-D1PreDSY.mjs.map +1 -0
  26. package/dist/_chunks/{History-B-Mrquzu.js → History-DTm8UCCQ.js} +62 -109
  27. package/dist/_chunks/History-DTm8UCCQ.js.map +1 -0
  28. package/dist/_chunks/{Field-CdSLKFQk.js → Input-B7sapvBG.js} +1293 -1271
  29. package/dist/_chunks/Input-B7sapvBG.js.map +1 -0
  30. package/dist/_chunks/{Field-CJPYzwD7.mjs → Input-CZ1YvjHR.mjs} +1332 -1310
  31. package/dist/_chunks/Input-CZ1YvjHR.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-BcycI8Lw.mjs → ListConfigurationPage-Bbi32isk.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-Bbi32isk.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-C0n4rUzH.js → ListConfigurationPage-ysFMjKI3.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-ysFMjKI3.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CRXONXwZ.mjs → ListViewPage-Bud_jBDQ.mjs} +67 -41
  37. package/dist/_chunks/ListViewPage-Bud_jBDQ.mjs.map +1 -0
  38. package/dist/_chunks/{ListViewPage-q0SHVPUS.js → ListViewPage-DTuuxU3n.js} +73 -48
  39. package/dist/_chunks/ListViewPage-DTuuxU3n.js.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-Bh3komDV.js → NoContentTypePage-CL7VVeYs.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-Bh3komDV.js.map → NoContentTypePage-CL7VVeYs.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-ukzFRF3z.mjs → NoContentTypePage-DVhkugsf.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-ukzFRF3z.mjs.map → NoContentTypePage-DVhkugsf.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-B4sD7Ble.mjs → NoPermissionsPage-CMdM-dCo.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-B4sD7Ble.mjs.map → NoPermissionsPage-CMdM-dCo.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-BGBpj_Y1.js → NoPermissionsPage-v7I599vC.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-BGBpj_Y1.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-CIexb8gr.mjs → Relations-C2Ahkrdg.mjs} +47 -22
  53. package/dist/_chunks/Relations-C2Ahkrdg.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-B53wYe8g.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-DbT2sx-Q.js → index-DQsvBb_N.js} +629 -235
  70. package/dist/_chunks/index-DQsvBb_N.js.map +1 -0
  71. package/dist/_chunks/{index-CJ2vYwuT.mjs → index-ZKrsjv-2.mjs} +645 -251
  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-CeBSIkmP.js → layout-Cl0NhlQB.js} +5 -6
  78. package/dist/_chunks/{layout-CeBSIkmP.js.map → layout-Cl0NhlQB.js.map} +1 -1
  79. package/dist/_chunks/{layout-vzKSrr7p.mjs → layout-fQk1rMk9.mjs} +4 -4
  80. package/dist/_chunks/{layout-vzKSrr7p.mjs.map → layout-fQk1rMk9.mjs.map} +1 -1
  81. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  82. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  83. package/dist/_chunks/{relations-Cl-6t9iz.js → relations-BRfBxVbX.js} +6 -7
  84. package/dist/_chunks/relations-BRfBxVbX.js.map +1 -0
  85. package/dist/_chunks/{relations-DI0lguF0.mjs → relations-BakOFl_1.mjs} +6 -7
  86. package/dist/_chunks/relations-BakOFl_1.mjs.map +1 -0
  87. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  88. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  89. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  90. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  91. package/dist/_chunks/{useDebounce-DmuSJIF3.mjs → usePrev-CZGy2Vjf.mjs} +11 -11
  92. package/dist/_chunks/usePrev-CZGy2Vjf.mjs.map +1 -0
  93. package/dist/_chunks/{useDebounce-CtcjDB3L.js → usePrev-D5J_2fEu.js} +8 -8
  94. package/dist/_chunks/usePrev-D5J_2fEu.js.map +1 -0
  95. package/dist/admin/index.js +2 -1
  96. package/dist/admin/index.js.map +1 -1
  97. package/dist/admin/index.mjs +6 -5
  98. package/dist/admin/src/content-manager.d.ts +3 -2
  99. package/dist/admin/src/exports.d.ts +1 -0
  100. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  101. package/dist/admin/src/hooks/useDocument.d.ts +19 -2
  102. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  103. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  104. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  105. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  106. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  107. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  108. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  109. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  110. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
  111. package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
  112. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  113. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  114. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  115. package/dist/admin/src/preview/index.d.ts +4 -0
  116. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  117. package/dist/admin/src/preview/routes.d.ts +3 -0
  118. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  119. package/dist/admin/src/router.d.ts +1 -1
  120. package/dist/admin/src/services/api.d.ts +1 -1
  121. package/dist/admin/src/services/components.d.ts +2 -2
  122. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  123. package/dist/admin/src/services/documents.d.ts +16 -19
  124. package/dist/admin/src/services/init.d.ts +1 -1
  125. package/dist/admin/src/services/relations.d.ts +2 -2
  126. package/dist/admin/src/services/uid.d.ts +3 -3
  127. package/dist/server/index.js +560 -317
  128. package/dist/server/index.js.map +1 -1
  129. package/dist/server/index.mjs +561 -317
  130. package/dist/server/index.mjs.map +1 -1
  131. package/dist/server/src/bootstrap.d.ts.map +1 -1
  132. package/dist/server/src/controllers/index.d.ts.map +1 -1
  133. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  134. package/dist/server/src/controllers/utils/metadata.d.ts +16 -1
  135. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  136. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  137. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  138. package/dist/server/src/history/services/history.d.ts +3 -3
  139. package/dist/server/src/history/services/history.d.ts.map +1 -1
  140. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  141. package/dist/server/src/history/services/utils.d.ts +6 -11
  142. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  143. package/dist/server/src/index.d.ts +7 -6
  144. package/dist/server/src/index.d.ts.map +1 -1
  145. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  146. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  147. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  148. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  149. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  150. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  151. package/dist/server/src/preview/index.d.ts +4 -0
  152. package/dist/server/src/preview/index.d.ts.map +1 -0
  153. package/dist/server/src/preview/routes/index.d.ts +8 -0
  154. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  155. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  156. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  157. package/dist/server/src/preview/services/index.d.ts +16 -0
  158. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  159. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  160. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  161. package/dist/server/src/preview/services/preview.d.ts +12 -0
  162. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  163. package/dist/server/src/preview/utils.d.ts +19 -0
  164. package/dist/server/src/preview/utils.d.ts.map +1 -0
  165. package/dist/server/src/register.d.ts.map +1 -1
  166. package/dist/server/src/routes/index.d.ts.map +1 -1
  167. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  168. package/dist/server/src/services/document-metadata.d.ts +12 -10
  169. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  170. package/dist/server/src/services/index.d.ts +7 -6
  171. package/dist/server/src/services/index.d.ts.map +1 -1
  172. package/dist/server/src/services/utils/populate.d.ts +2 -2
  173. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  174. package/dist/server/src/utils/index.d.ts +2 -0
  175. package/dist/server/src/utils/index.d.ts.map +1 -1
  176. package/dist/shared/contracts/index.d.ts +1 -0
  177. package/dist/shared/contracts/index.d.ts.map +1 -1
  178. package/dist/shared/contracts/preview.d.ts +27 -0
  179. package/dist/shared/contracts/preview.d.ts.map +1 -0
  180. package/dist/shared/index.js +4 -0
  181. package/dist/shared/index.js.map +1 -1
  182. package/dist/shared/index.mjs +4 -0
  183. package/dist/shared/index.mjs.map +1 -1
  184. package/package.json +13 -12
  185. package/dist/_chunks/EditViewPage-8mOu02ji.mjs.map +0 -1
  186. package/dist/_chunks/EditViewPage-BMVgUNOX.js.map +0 -1
  187. package/dist/_chunks/Field-CJPYzwD7.mjs.map +0 -1
  188. package/dist/_chunks/Field-CdSLKFQk.js.map +0 -1
  189. package/dist/_chunks/History-B-Mrquzu.js.map +0 -1
  190. package/dist/_chunks/History-MnQLtk1g.mjs.map +0 -1
  191. package/dist/_chunks/ListConfigurationPage-BcycI8Lw.mjs.map +0 -1
  192. package/dist/_chunks/ListConfigurationPage-C0n4rUzH.js.map +0 -1
  193. package/dist/_chunks/ListViewPage-CRXONXwZ.mjs.map +0 -1
  194. package/dist/_chunks/ListViewPage-q0SHVPUS.js.map +0 -1
  195. package/dist/_chunks/Relations-B53wYe8g.js.map +0 -1
  196. package/dist/_chunks/Relations-CIexb8gr.mjs.map +0 -1
  197. package/dist/_chunks/index-CJ2vYwuT.mjs.map +0 -1
  198. package/dist/_chunks/index-DbT2sx-Q.js.map +0 -1
  199. package/dist/_chunks/relations-Cl-6t9iz.js.map +0 -1
  200. package/dist/_chunks/relations-DI0lguF0.mjs.map +0 -1
  201. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
  202. 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 = () => {
@@ -1682,10 +1850,10 @@ const useDocumentActions = () => {
1682
1850
  update
1683
1851
  };
1684
1852
  };
1685
- const ProtectedHistoryPage = React.lazy(
1686
- () => Promise.resolve().then(() => require("./History-B-Mrquzu.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 }))
1687
1855
  );
1688
- const routes$1 = [
1856
+ const routes$2 = [
1689
1857
  {
1690
1858
  path: ":collectionType/:slug/:id/history",
1691
1859
  Component: ProtectedHistoryPage
@@ -1695,32 +1863,45 @@ const routes$1 = [
1695
1863
  Component: ProtectedHistoryPage
1696
1864
  }
1697
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
+ ];
1698
1879
  const ProtectedEditViewPage = React.lazy(
1699
- () => Promise.resolve().then(() => require("./EditViewPage-BMVgUNOX.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1880
+ () => Promise.resolve().then(() => require("./EditViewPage-D4yFJET6.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1700
1881
  );
1701
1882
  const ProtectedListViewPage = React.lazy(
1702
- () => Promise.resolve().then(() => require("./ListViewPage-q0SHVPUS.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1883
+ () => Promise.resolve().then(() => require("./ListViewPage-DTuuxU3n.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1703
1884
  );
1704
1885
  const ProtectedListConfiguration = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListConfigurationPage-C0n4rUzH.js")).then((mod) => ({
1886
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-ysFMjKI3.js")).then((mod) => ({
1706
1887
  default: mod.ProtectedListConfiguration
1707
1888
  }))
1708
1889
  );
1709
1890
  const ProtectedEditConfigurationPage = React.lazy(
1710
- () => Promise.resolve().then(() => require("./EditConfigurationPage-BPgoE-kf.js")).then((mod) => ({
1891
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-Bl_U2JgH.js")).then((mod) => ({
1711
1892
  default: mod.ProtectedEditConfigurationPage
1712
1893
  }))
1713
1894
  );
1714
1895
  const ProtectedComponentConfigurationPage = React.lazy(
1715
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-CO977CPh.js")).then((mod) => ({
1896
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-DBSh-kET.js")).then((mod) => ({
1716
1897
  default: mod.ProtectedComponentConfigurationPage
1717
1898
  }))
1718
1899
  );
1719
1900
  const NoPermissions = React.lazy(
1720
- () => Promise.resolve().then(() => require("./NoPermissionsPage-BGBpj_Y1.js")).then((mod) => ({ default: mod.NoPermissions }))
1901
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-v7I599vC.js")).then((mod) => ({ default: mod.NoPermissions }))
1721
1902
  );
1722
1903
  const NoContentType = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoContentTypePage-Bh3komDV.js")).then((mod) => ({ default: mod.NoContentType }))
1904
+ () => Promise.resolve().then(() => require("./NoContentTypePage-CL7VVeYs.js")).then((mod) => ({ default: mod.NoContentType }))
1724
1905
  );
1725
1906
  const CollectionTypePages = () => {
1726
1907
  const { collectionType } = reactRouterDom.useParams();
@@ -1732,7 +1913,7 @@ const CollectionTypePages = () => {
1732
1913
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1733
1914
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1734
1915
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1735
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1916
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1736
1917
  const routes = [
1737
1918
  {
1738
1919
  path: LIST_RELATIVE_PATH,
@@ -1766,6 +1947,7 @@ const routes = [
1766
1947
  path: "no-content-types",
1767
1948
  Component: NoContentType
1768
1949
  },
1950
+ ...routes$2,
1769
1951
  ...routes$1
1770
1952
  ];
1771
1953
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1864,6 +2046,11 @@ const DocumentActionButton = (action) => {
1864
2046
  ) : null
1865
2047
  ] });
1866
2048
  };
2049
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
2050
+ &:hover {
2051
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
2052
+ }
2053
+ `;
1867
2054
  const DocumentActionsMenu = ({
1868
2055
  actions: actions2,
1869
2056
  children,
@@ -1922,48 +2109,32 @@ const DocumentActionsMenu = ({
1922
2109
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1923
2110
  actions2.map((action) => {
1924
2111
  return /* @__PURE__ */ jsxRuntime.jsx(
1925
- designSystem.Menu.Item,
2112
+ MenuItem,
1926
2113
  {
1927
2114
  disabled: action.disabled,
1928
2115
  onSelect: handleClick(action),
1929
2116
  display: "block",
1930
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1931
- /* @__PURE__ */ jsxRuntime.jsxs(
1932
- designSystem.Flex,
1933
- {
1934
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1935
- gap: 2,
1936
- tag: "span",
1937
- children: [
1938
- /* @__PURE__ */ jsxRuntime.jsx(
1939
- designSystem.Flex,
1940
- {
1941
- tag: "span",
1942
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1943
- children: action.icon
1944
- }
1945
- ),
1946
- action.label
1947
- ]
1948
- }
1949
- ),
1950
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1951
- designSystem.Flex,
1952
- {
1953
- alignItems: "center",
1954
- background: "alternative100",
1955
- borderStyle: "solid",
1956
- borderColor: "alternative200",
1957
- borderWidth: "1px",
1958
- height: 5,
1959
- paddingLeft: 2,
1960
- paddingRight: 2,
1961
- hasRadius: true,
1962
- color: "alternative600",
1963
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1964
- }
1965
- )
1966
- ] })
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
+ ) })
1967
2138
  },
1968
2139
  action.id
1969
2140
  );
@@ -2074,6 +2245,18 @@ const DocumentActionModal = ({
2074
2245
  typeof Footer === "function" ? /* @__PURE__ */ jsxRuntime.jsx(Footer, { onClose: handleClose }) : Footer
2075
2246
  ] }) });
2076
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
+ };
2077
2260
  const PublishAction$1 = ({
2078
2261
  activeTab,
2079
2262
  documentId,
@@ -2088,6 +2271,7 @@ const PublishAction$1 = ({
2088
2271
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2089
2272
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2090
2273
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2274
+ const { id } = reactRouterDom.useParams();
2091
2275
  const { formatMessage } = reactIntl.useIntl();
2092
2276
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2093
2277
  const { publish } = useDocumentActions();
@@ -2187,13 +2371,15 @@ const PublishAction$1 = ({
2187
2371
  documentId,
2188
2372
  params
2189
2373
  },
2190
- formValues
2374
+ transformData(formValues)
2191
2375
  );
2192
2376
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2193
- navigate({
2194
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2195
- search: rawQuery
2196
- });
2377
+ if (id === "create") {
2378
+ navigate({
2379
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2380
+ search: rawQuery
2381
+ });
2382
+ }
2197
2383
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2198
2384
  setErrors(formatValidationErrors(res.error));
2199
2385
  }
@@ -2246,6 +2432,7 @@ const PublishAction$1 = ({
2246
2432
  };
2247
2433
  };
2248
2434
  PublishAction$1.type = "publish";
2435
+ PublishAction$1.position = "panel";
2249
2436
  const UpdateAction = ({
2250
2437
  activeTab,
2251
2438
  documentId,
@@ -2268,96 +2455,134 @@ const UpdateAction = ({
2268
2455
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2269
2456
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2270
2457
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2271
- return {
2272
- /**
2273
- * Disabled when:
2274
- * - the form is submitting
2275
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2276
- * - the active tab is the published tab
2277
- */
2278
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2279
- label: formatMessage({
2280
- id: "content-manager.containers.Edit.save",
2281
- defaultMessage: "Save"
2282
- }),
2283
- onClick: async () => {
2284
- setSubmitting(true);
2285
- try {
2286
- const { errors } = await validate(true, {
2287
- 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
+ })
2288
2474
  });
2289
- if (errors) {
2290
- toggleNotification({
2291
- type: "danger",
2292
- message: formatMessage({
2293
- id: "content-manager.validation.error",
2294
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2295
- })
2296
- });
2297
- return;
2298
- }
2299
- if (isCloning) {
2300
- const res = await clone(
2301
- {
2302
- model,
2303
- documentId: cloneMatch.params.origin,
2304
- params
2305
- },
2306
- document
2307
- );
2308
- if ("data" in res) {
2309
- navigate(
2310
- {
2311
- pathname: `../${res.data.documentId}`,
2312
- search: rawQuery
2313
- },
2314
- { relative: "path" }
2315
- );
2316
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2317
- setErrors(formatValidationErrors(res.error));
2318
- }
2319
- } else if (documentId || collectionType === SINGLE_TYPES) {
2320
- 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(
2321
2488
  {
2322
- collectionType,
2323
- model,
2324
- documentId,
2325
- params
2489
+ pathname: `../${res.data.documentId}`,
2490
+ search: rawQuery
2326
2491
  },
2327
- document
2492
+ { relative: "path" }
2328
2493
  );
2329
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2330
- setErrors(formatValidationErrors(res.error));
2331
- } else {
2332
- resetForm();
2333
- }
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));
2334
2509
  } else {
2335
- 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(
2336
2522
  {
2337
- model,
2338
- params
2523
+ pathname: `../${res.data.documentId}`,
2524
+ search: rawQuery
2339
2525
  },
2340
- document
2526
+ { replace: true, relative: "path" }
2341
2527
  );
2342
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2343
- navigate(
2344
- {
2345
- pathname: `../${res.data.documentId}`,
2346
- search: rawQuery
2347
- },
2348
- { replace: true, relative: "path" }
2349
- );
2350
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2351
- setErrors(formatValidationErrors(res.error));
2352
- }
2528
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2529
+ setErrors(formatValidationErrors(res.error));
2353
2530
  }
2354
- } finally {
2355
- setSubmitting(false);
2356
2531
  }
2532
+ } finally {
2533
+ setSubmitting(false);
2357
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
2358
2582
  };
2359
2583
  };
2360
2584
  UpdateAction.type = "update";
2585
+ UpdateAction.position = "panel";
2361
2586
  const UNPUBLISH_DRAFT_OPTIONS = {
2362
2587
  KEEP: "keep",
2363
2588
  DISCARD: "discard"
@@ -2480,6 +2705,7 @@ const UnpublishAction$1 = ({
2480
2705
  };
2481
2706
  };
2482
2707
  UnpublishAction$1.type = "unpublish";
2708
+ UnpublishAction$1.position = "panel";
2483
2709
  const DiscardAction = ({
2484
2710
  activeTab,
2485
2711
  documentId,
@@ -2530,6 +2756,7 @@ const DiscardAction = ({
2530
2756
  };
2531
2757
  };
2532
2758
  DiscardAction.type = "discard";
2759
+ DiscardAction.position = "panel";
2533
2760
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2534
2761
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2535
2762
  const RelativeTime = React__namespace.forwardRef(
@@ -2542,7 +2769,7 @@ const RelativeTime = React__namespace.forwardRef(
2542
2769
  });
2543
2770
  const unit = intervals.find((intervalUnit) => {
2544
2771
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2545
- });
2772
+ }) ?? "seconds";
2546
2773
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2547
2774
  const customInterval = customIntervals.find(
2548
2775
  (custom) => interval[custom.unit] < custom.threshold
@@ -2576,19 +2803,29 @@ const getDisplayName = ({
2576
2803
  return email ?? "";
2577
2804
  };
2578
2805
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2579
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2806
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2580
2807
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2581
- 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
+ }) }) });
2582
2813
  };
2583
2814
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2584
2815
  const { formatMessage } = reactIntl.useIntl();
2585
2816
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2817
+ const params = reactRouterDom.useParams();
2586
2818
  const title = isCreating ? formatMessage({
2587
2819
  id: "content-manager.containers.edit.title.new",
2588
2820
  defaultMessage: "Create an entry"
2589
2821
  }) : documentTitle;
2590
2822
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2591
- /* @__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
+ ),
2592
2829
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2593
2830
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2594
2831
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2639,7 +2876,7 @@ const HeaderToolbar = () => {
2639
2876
  meta: isCloning ? void 0 : meta,
2640
2877
  collectionType
2641
2878
  },
2642
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2879
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2643
2880
  children: (actions2) => {
2644
2881
  const headerActions = actions2.filter((action) => {
2645
2882
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2847,6 +3084,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2847
3084
  };
2848
3085
  };
2849
3086
  ConfigureTheViewAction.type = "configure-the-view";
3087
+ ConfigureTheViewAction.position = "header";
2850
3088
  const EditTheModelAction = ({ model }) => {
2851
3089
  const navigate = reactRouterDom.useNavigate();
2852
3090
  const { formatMessage } = reactIntl.useIntl();
@@ -2863,6 +3101,7 @@ const EditTheModelAction = ({ model }) => {
2863
3101
  };
2864
3102
  };
2865
3103
  EditTheModelAction.type = "edit-the-model";
3104
+ EditTheModelAction.position = "header";
2866
3105
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2867
3106
  const navigate = reactRouterDom.useNavigate();
2868
3107
  const { formatMessage } = reactIntl.useIntl();
@@ -2936,6 +3175,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2936
3175
  };
2937
3176
  };
2938
3177
  DeleteAction$1.type = "delete";
3178
+ DeleteAction$1.position = ["header", "table-row"];
2939
3179
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2940
3180
  const Panels = () => {
2941
3181
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -2998,7 +3238,7 @@ const ActionsPanelContent = () => {
2998
3238
  strapiAdmin.DescriptionComponentRenderer,
2999
3239
  {
3000
3240
  props,
3001
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3241
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3002
3242
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3003
3243
  }
3004
3244
  ),
@@ -3025,7 +3265,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
3025
3265
  justifyContent: "stretch",
3026
3266
  alignItems: "flex-start",
3027
3267
  children: [
3028
- /* @__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 }),
3029
3269
  children
3030
3270
  ]
3031
3271
  }
@@ -3056,7 +3296,7 @@ const ConfirmBulkActionDialog = ({
3056
3296
  ] })
3057
3297
  ] }) });
3058
3298
  };
3059
- 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 });
3060
3300
  const ConfirmDialogPublishAll = ({
3061
3301
  isOpen,
3062
3302
  onToggleDialog,
@@ -3105,7 +3345,7 @@ const ConfirmDialogPublishAll = ({
3105
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. "
3106
3346
  },
3107
3347
  {
3108
- b: BoldChunk$1,
3348
+ b: BoldChunk,
3109
3349
  count: countDraftRelations,
3110
3350
  entities: selectedEntries.length
3111
3351
  }
@@ -3144,6 +3384,16 @@ const ConfirmDialogPublishAll = ({
3144
3384
  const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
3145
3385
  max-width: 300px;
3146
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
+ `;
3147
3397
  const formatErrorMessages = (errors, parentKey, formatMessage) => {
3148
3398
  const messages = [];
3149
3399
  Object.entries(errors).forEach(([key, value]) => {
@@ -3248,7 +3498,7 @@ const SelectedEntriesTableContent = ({
3248
3498
  )
3249
3499
  ] }),
3250
3500
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
3251
- /* @__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: [
3252
3502
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, { id: row.id }),
3253
3503
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row.id }) }),
3254
3504
  shouldDisplayMainField && /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row[mainField] }) }),
@@ -3275,18 +3525,10 @@ const SelectedEntriesTableContent = ({
3275
3525
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3276
3526
  },
3277
3527
  state: { from: pathname },
3278
- label: formatMessage(
3279
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3280
- {
3281
- target: formatMessage(
3282
- {
3283
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3284
- defaultMessage: "item line {number}"
3285
- },
3286
- { number: index2 + 1 }
3287
- )
3288
- }
3289
- ),
3528
+ label: formatMessage({
3529
+ id: "content-manager.bulk-publish.edit",
3530
+ defaultMessage: "Edit"
3531
+ }),
3290
3532
  target: "_blank",
3291
3533
  marginLeft: "auto",
3292
3534
  variant: "ghost",
@@ -3296,7 +3538,73 @@ const SelectedEntriesTableContent = ({
3296
3538
  ] }, row.id)) })
3297
3539
  ] });
3298
3540
  };
3299
- 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
+ };
3300
3608
  const SelectedEntriesModalContent = ({
3301
3609
  listViewSelectedEntries,
3302
3610
  toggleModal,
@@ -3355,7 +3663,6 @@ const SelectedEntriesModalContent = ({
3355
3663
  validationErrors: {}
3356
3664
  };
3357
3665
  }, [components, data, schema]);
3358
- const [publishedCount, setPublishedCount] = React__namespace.useState(0);
3359
3666
  const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
3360
3667
  const { publishMany: bulkPublishAction } = useDocumentActions();
3361
3668
  const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
@@ -3367,53 +3674,36 @@ const SelectedEntriesModalContent = ({
3367
3674
  const selectedEntriesWithErrorsCount = selectedEntries.filter(
3368
3675
  ({ documentId }) => validationErrors[documentId]
3369
3676
  ).length;
3370
- const selectedEntriesPublished = selectedEntries.filter(
3677
+ const selectedEntriesPublishedCount = selectedEntries.filter(
3371
3678
  ({ status }) => status === "published"
3372
3679
  ).length;
3373
- 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;
3374
3684
  const toggleDialog = () => setIsDialogOpen((prev) => !prev);
3375
3685
  const handleConfirmBulkPublish = async () => {
3376
3686
  toggleDialog();
3377
3687
  const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
3378
3688
  if (!("error" in res)) {
3379
- setPublishedCount(res.count);
3380
3689
  const unpublishedEntries = rows.filter((row) => {
3381
3690
  return !entriesToPublish.includes(row.documentId);
3382
3691
  });
3383
3692
  setListViewSelectedDocuments(unpublishedEntries);
3384
3693
  }
3385
3694
  };
3386
- const getFormattedCountMessage = () => {
3387
- if (publishedCount) {
3388
- return formatMessage(
3389
- {
3390
- id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
3391
- 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."
3392
- },
3393
- {
3394
- publishedCount,
3395
- withErrorsCount: selectedEntriesWithErrorsCount,
3396
- b: BoldChunk
3397
- }
3398
- );
3399
- }
3400
- return formatMessage(
3401
- {
3402
- id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
3403
- 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."
3404
- },
3405
- {
3406
- readyToPublishCount: selectedEntriesWithNoErrorsCount,
3407
- withErrorsCount: selectedEntriesWithErrorsCount,
3408
- alreadyPublishedCount: selectedEntriesPublished,
3409
- b: BoldChunk
3410
- }
3411
- );
3412
- };
3413
3695
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3414
3696
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
3415
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: getFormattedCountMessage() }),
3416
- /* @__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(
3417
3707
  SelectedEntriesTableContent,
3418
3708
  {
3419
3709
  isPublishing: isSubmittingForm,
@@ -3434,7 +3724,7 @@ const SelectedEntriesModalContent = ({
3434
3724
  designSystem.Button,
3435
3725
  {
3436
3726
  onClick: toggleDialog,
3437
- disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublished === selectedEntries.length || isLoading,
3727
+ disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublishedCount === selectedEntries.length || isLoading,
3438
3728
  loading: isSubmittingForm,
3439
3729
  children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
3440
3730
  }
@@ -3460,8 +3750,7 @@ const PublishAction = ({ documents, model }) => {
3460
3750
  const refetchList = () => {
3461
3751
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3462
3752
  };
3463
- if (!showPublishButton)
3464
- return null;
3753
+ if (!showPublishButton) return null;
3465
3754
  return {
3466
3755
  actionType: "publish",
3467
3756
  variant: "tertiary",
@@ -3529,8 +3818,7 @@ const DeleteAction = ({ documents, model }) => {
3529
3818
  selectRow([]);
3530
3819
  }
3531
3820
  };
3532
- if (!hasDeletePermission)
3533
- return null;
3821
+ if (!hasDeletePermission) return null;
3534
3822
  return {
3535
3823
  variant: "danger-light",
3536
3824
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3579,8 +3867,7 @@ const UnpublishAction = ({ documents, model }) => {
3579
3867
  }
3580
3868
  };
3581
3869
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3582
- if (!showUnpublishButton)
3583
- return null;
3870
+ if (!showUnpublishButton) return null;
3584
3871
  return {
3585
3872
  variant: "tertiary",
3586
3873
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3685,7 +3972,7 @@ const TableActions = ({ document }) => {
3685
3972
  strapiAdmin.DescriptionComponentRenderer,
3686
3973
  {
3687
3974
  props,
3688
- 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"),
3689
3976
  children: (actions2) => {
3690
3977
  const tableRowActions = actions2.filter((action) => {
3691
3978
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3744,6 +4031,7 @@ const EditAction = ({ documentId }) => {
3744
4031
  };
3745
4032
  };
3746
4033
  EditAction.type = "edit";
4034
+ EditAction.position = "table-row";
3747
4035
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3748
4036
  path {
3749
4037
  fill: currentColor;
@@ -3820,6 +4108,7 @@ const CloneAction = ({ model, documentId }) => {
3820
4108
  };
3821
4109
  };
3822
4110
  CloneAction.type = "clone";
4111
+ CloneAction.position = "table-row";
3823
4112
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3824
4113
  path {
3825
4114
  fill: currentColor;
@@ -3906,7 +4195,14 @@ class ContentManagerPlugin {
3906
4195
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3907
4196
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3908
4197
  getBulkActions: () => this.bulkActions,
3909
- 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
+ },
3910
4206
  getEditViewSidePanels: () => this.editViewSidePanels,
3911
4207
  getHeaderActions: () => this.headerActions
3912
4208
  }
@@ -3916,10 +4212,8 @@ class ContentManagerPlugin {
3916
4212
  const getPrintableType = (value) => {
3917
4213
  const nativeType = typeof value;
3918
4214
  if (nativeType === "object") {
3919
- if (value === null)
3920
- return "null";
3921
- if (Array.isArray(value))
3922
- return "array";
4215
+ if (value === null) return "null";
4216
+ if (Array.isArray(value)) return "array";
3923
4217
  if (value instanceof Object && value.constructor.name !== "Object") {
3924
4218
  return value.constructor.name;
3925
4219
  }
@@ -3930,17 +4224,27 @@ const HistoryAction = ({ model, document }) => {
3930
4224
  const { formatMessage } = reactIntl.useIntl();
3931
4225
  const [{ query }] = strapiAdmin.useQueryParams();
3932
4226
  const navigate = reactRouterDom.useNavigate();
4227
+ const { trackUsage } = strapiAdmin.useTracking();
4228
+ const { pathname } = reactRouterDom.useLocation();
3933
4229
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3934
4230
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3935
4231
  return null;
3936
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
+ };
3937
4241
  return {
3938
4242
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3939
4243
  label: formatMessage({
3940
4244
  id: "content-manager.history.document-action",
3941
4245
  defaultMessage: "Content History"
3942
4246
  }),
3943
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4247
+ onClick: handleOnClick,
3944
4248
  disabled: (
3945
4249
  /**
3946
4250
  * The user is creating a new document.
@@ -3962,6 +4266,7 @@ const HistoryAction = ({ model, document }) => {
3962
4266
  };
3963
4267
  };
3964
4268
  HistoryAction.type = "history";
4269
+ HistoryAction.position = "header";
3965
4270
  const historyAdmin = {
3966
4271
  bootstrap(app) {
3967
4272
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4008,6 +4313,88 @@ const { setInitialData } = actions;
4008
4313
  const reducer = toolkit.combineReducers({
4009
4314
  app: reducer$1
4010
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
+ };
4011
4398
  const index = {
4012
4399
  register(app) {
4013
4400
  const cm = new ContentManagerPlugin();
@@ -4027,7 +4414,7 @@ const index = {
4027
4414
  app.router.addRoute({
4028
4415
  path: "content-manager/*",
4029
4416
  lazy: async () => {
4030
- const { Layout } = await Promise.resolve().then(() => require("./layout-CeBSIkmP.js"));
4417
+ const { Layout } = await Promise.resolve().then(() => require("./layout-Cl0NhlQB.js"));
4031
4418
  return {
4032
4419
  Component: Layout
4033
4420
  };
@@ -4040,11 +4427,14 @@ const index = {
4040
4427
  if (typeof historyAdmin.bootstrap === "function") {
4041
4428
  historyAdmin.bootstrap(app);
4042
4429
  }
4430
+ if (typeof previewAdmin.bootstrap === "function") {
4431
+ previewAdmin.bootstrap(app);
4432
+ }
4043
4433
  },
4044
4434
  async registerTrads({ locales }) {
4045
4435
  const importedTrads = await Promise.all(
4046
4436
  locales.map((locale) => {
4047
- 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 }) => {
4048
4438
  return {
4049
4439
  data: prefixPluginTranslations(data, PLUGIN_ID),
4050
4440
  locale
@@ -4066,7 +4456,6 @@ exports.CLONE_PATH = CLONE_PATH;
4066
4456
  exports.COLLECTION_TYPES = COLLECTION_TYPES;
4067
4457
  exports.CREATOR_FIELDS = CREATOR_FIELDS;
4068
4458
  exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
4069
- exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
4070
4459
  exports.DocumentRBAC = DocumentRBAC;
4071
4460
  exports.DocumentStatus = DocumentStatus;
4072
4461
  exports.HOOKS = HOOKS;
@@ -4083,13 +4472,17 @@ exports.checkIfAttributeIsDisplayable = checkIfAttributeIsDisplayable;
4083
4472
  exports.contentManagerApi = contentManagerApi;
4084
4473
  exports.convertEditLayoutToFieldLayouts = convertEditLayoutToFieldLayouts;
4085
4474
  exports.convertListLayoutToFieldLayouts = convertListLayoutToFieldLayouts;
4475
+ exports.createDefaultForm = createDefaultForm;
4086
4476
  exports.createYupSchema = createYupSchema;
4087
4477
  exports.extractContentTypeComponents = extractContentTypeComponents;
4088
4478
  exports.getDisplayName = getDisplayName;
4089
4479
  exports.getMainField = getMainField;
4090
4480
  exports.getTranslation = getTranslation;
4091
4481
  exports.index = index;
4482
+ exports.prepareTempKeys = prepareTempKeys;
4483
+ exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
4092
4484
  exports.setInitialData = setInitialData;
4485
+ exports.transformDocument = transformDocument;
4093
4486
  exports.useContentManagerContext = useContentManagerContext;
4094
4487
  exports.useContentTypeSchema = useContentTypeSchema;
4095
4488
  exports.useDoc = useDoc;
@@ -4102,5 +4495,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4102
4495
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4103
4496
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4104
4497
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4498
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4105
4499
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4106
- //# sourceMappingURL=index-DbT2sx-Q.js.map
4500
+ //# sourceMappingURL=index-DQsvBb_N.js.map