@strapi/content-manager 0.0.0-experimental.86fea32ae4240d73f76516d7238e302b6b927e88 → 0.0.0-experimental.8e4302929d7fe147203ed0266450d0a565c69660

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 (205) 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-B2g3icXu.mjs → ComponentConfigurationPage-D4H-v0et.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-B2g3icXu.mjs.map → ComponentConfigurationPage-D4H-v0et.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js → ComponentConfigurationPage-DdkVGfXC.js} +5 -6
  6. package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js.map → ComponentConfigurationPage-DdkVGfXC.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-DSA1zONV.mjs → EditConfigurationPage-D1nvB7Br.mjs} +4 -4
  11. package/dist/_chunks/{EditConfigurationPage-DSA1zONV.mjs.map → EditConfigurationPage-D1nvB7Br.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js → EditConfigurationPage-LYEvR4fW.js} +5 -6
  13. package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js.map → EditConfigurationPage-LYEvR4fW.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-Ca2EmJpb.mjs → EditViewPage-Bcnff6Vd.mjs} +21 -54
  15. package/dist/_chunks/EditViewPage-Bcnff6Vd.mjs.map +1 -0
  16. package/dist/_chunks/{EditViewPage-BvcMXaP2.js → EditViewPage-DqelJ9UK.js} +23 -57
  17. package/dist/_chunks/EditViewPage-DqelJ9UK.js.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-DAUpPBVM.js → Form-CnHfBeiB.js} +5 -6
  21. package/dist/_chunks/{Form-DAUpPBVM.js.map → Form-CnHfBeiB.js.map} +1 -1
  22. package/dist/_chunks/{Form-BJVbU6w4.mjs → Form-CzPCJi3B.mjs} +3 -3
  23. package/dist/_chunks/{Form-BJVbU6w4.mjs.map → Form-CzPCJi3B.mjs.map} +1 -1
  24. package/dist/_chunks/{History-M6Pk9CoY.mjs → History-CcmSn3Mj.mjs} +51 -97
  25. package/dist/_chunks/History-CcmSn3Mj.mjs.map +1 -0
  26. package/dist/_chunks/{History-Bw9vfT1k.js → History-zArjENzj.js} +62 -109
  27. package/dist/_chunks/History-zArjENzj.js.map +1 -0
  28. package/dist/_chunks/{Field-CmaWxdpf.js → Input-CDHKQd7o.js} +1259 -1236
  29. package/dist/_chunks/Input-CDHKQd7o.js.map +1 -0
  30. package/dist/_chunks/{Field-BEYkgCZ0.mjs → Input-aV8SSoTa.mjs} +1334 -1311
  31. package/dist/_chunks/Input-aV8SSoTa.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-D7ior2zq.mjs → ListConfigurationPage-BPvzENJJ.mjs} +7 -6
  33. package/dist/_chunks/ListConfigurationPage-BPvzENJJ.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DBVqF5fc.js → ListConfigurationPage-ByZAO_9H.js} +7 -7
  35. package/dist/_chunks/ListConfigurationPage-ByZAO_9H.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-MZu-8OKX.js → ListViewPage-BVKBeQAA.js} +73 -48
  37. package/dist/_chunks/ListViewPage-BVKBeQAA.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-BH37wONY.mjs → ListViewPage-HljQVnFH.mjs} +67 -41
  39. package/dist/_chunks/ListViewPage-HljQVnFH.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js → NoContentTypePage-BV5zfDxr.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js.map → NoContentTypePage-BV5zfDxr.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs → NoContentTypePage-BfHaSM-K.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs.map → NoContentTypePage-BfHaSM-K.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs → NoPermissionsPage-D6ze2nQL.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs.map → NoPermissionsPage-D6ze2nQL.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-COs61PpB.js → NoPermissionsPage-vdNpc6jb.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-COs61PpB.js.map → NoPermissionsPage-vdNpc6jb.js.map} +1 -1
  48. package/dist/_chunks/Preview-DEHdENT1.js +305 -0
  49. package/dist/_chunks/Preview-DEHdENT1.js.map +1 -0
  50. package/dist/_chunks/Preview-vfWOtPG5.mjs +287 -0
  51. package/dist/_chunks/Preview-vfWOtPG5.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-68XxIzPI.mjs → Relations-B7_hbF0w.mjs} +33 -19
  53. package/dist/_chunks/Relations-B7_hbF0w.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-CsGlulU_.js → Relations-DcoOBejP.js} +33 -20
  55. package/dist/_chunks/Relations-DcoOBejP.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-oDq3VO9j.js → index-CxLSGwnk.js} +614 -237
  70. package/dist/_chunks/index-CxLSGwnk.js.map +1 -0
  71. package/dist/_chunks/{index-CsfwpRfc.mjs → index-EH8ZtHd5.mjs} +631 -253
  72. package/dist/_chunks/index-EH8ZtHd5.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-C5uSVTqi.mjs → layout-CxDMdJ13.mjs} +4 -4
  78. package/dist/_chunks/{layout-C5uSVTqi.mjs.map → layout-CxDMdJ13.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-Euka-kfv.js → layout-DSeUTfMv.js} +5 -6
  80. package/dist/_chunks/{layout-Euka-kfv.js.map → layout-DSeUTfMv.js.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-BpHVgFuV.mjs → relations-B8_Uu38Q.mjs} +21 -8
  86. package/dist/_chunks/relations-B8_Uu38Q.mjs.map +1 -0
  87. package/dist/_chunks/{relations-DG7kmxa0.js → relations-S5nNKdN3.js} +20 -7
  88. package/dist/_chunks/relations-S5nNKdN3.js.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-CtcjDB3L.js → usePrev-B9w_-eYc.js} +1 -14
  94. package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
  95. package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
  96. package/dist/_chunks/usePrev-DH6iah0A.mjs.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 +561 -323
  130. package/dist/server/index.js.map +1 -1
  131. package/dist/server/index.mjs +562 -323
  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-BvcMXaP2.js.map +0 -1
  188. package/dist/_chunks/EditViewPage-Ca2EmJpb.mjs.map +0 -1
  189. package/dist/_chunks/Field-BEYkgCZ0.mjs.map +0 -1
  190. package/dist/_chunks/Field-CmaWxdpf.js.map +0 -1
  191. package/dist/_chunks/History-Bw9vfT1k.js.map +0 -1
  192. package/dist/_chunks/History-M6Pk9CoY.mjs.map +0 -1
  193. package/dist/_chunks/ListConfigurationPage-D7ior2zq.mjs.map +0 -1
  194. package/dist/_chunks/ListConfigurationPage-DBVqF5fc.js.map +0 -1
  195. package/dist/_chunks/ListViewPage-BH37wONY.mjs.map +0 -1
  196. package/dist/_chunks/ListViewPage-MZu-8OKX.js.map +0 -1
  197. package/dist/_chunks/Relations-68XxIzPI.mjs.map +0 -1
  198. package/dist/_chunks/Relations-CsGlulU_.js.map +0 -1
  199. package/dist/_chunks/index-CsfwpRfc.mjs.map +0 -1
  200. package/dist/_chunks/index-oDq3VO9j.js.map +0 -1
  201. package/dist/_chunks/relations-BpHVgFuV.mjs.map +0 -1
  202. package/dist/_chunks/relations-DG7kmxa0.js.map +0 -1
  203. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
  204. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +0 -29
  205. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
@@ -7,16 +7,16 @@ const designSystem = require("@strapi/design-system");
7
7
  const mapValues = require("lodash/fp/mapValues");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
+ const styledComponents = require("styled-components");
10
11
  const yup = require("yup");
12
+ const fractionalIndexing = require("fractional-indexing");
11
13
  const pipe = require("lodash/fp/pipe");
12
- const dateFns = require("date-fns");
13
- const styledComponents = require("styled-components");
14
14
  const qs = require("qs");
15
+ const dateFns = require("date-fns");
15
16
  const toolkit = require("@reduxjs/toolkit");
16
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
18
  function _interopNamespace(e) {
18
- if (e && e.__esModule)
19
- return e;
19
+ if (e && e.__esModule) return e;
20
20
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
21
21
  if (e) {
22
22
  for (const k in e) {
@@ -36,13 +36,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
36
36
  const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
37
37
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
38
38
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
39
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
39
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
40
40
  const v = glob[path];
41
41
  if (v) {
42
42
  return typeof v === "function" ? v() : Promise.resolve(v);
43
43
  }
44
44
  return new Promise((_, reject) => {
45
- (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
+ );
46
53
  });
47
54
  };
48
55
  const PLUGIN_ID = "content-manager";
@@ -181,6 +188,113 @@ const extractAndDedupeFields = (permissions = []) => permissions.flatMap((permis
181
188
  (field, index2, arr) => arr.indexOf(field) === index2 && typeof field === "string"
182
189
  );
183
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
+ };
184
298
  const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
185
299
  addTagTypes: [
186
300
  "ComponentConfiguration",
@@ -190,7 +304,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
190
304
  "InitialData",
191
305
  "HistoryVersion",
192
306
  "Relations",
193
- "UidAvailability"
307
+ "UidAvailability",
308
+ "RecentDocumentList"
194
309
  ]
195
310
  });
196
311
  const documentApi = contentManagerApi.injectEndpoints({
@@ -208,7 +323,7 @@ const documentApi = contentManagerApi.injectEndpoints({
208
323
  if (error) {
209
324
  return [];
210
325
  }
211
- return [{ type: "Document", id: `${model}_LIST` }];
326
+ return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
212
327
  }
213
328
  }),
214
329
  cloneDocument: builder.mutation({
@@ -222,7 +337,8 @@ const documentApi = contentManagerApi.injectEndpoints({
222
337
  }),
223
338
  invalidatesTags: (_result, _error, { model }) => [
224
339
  { type: "Document", id: `${model}_LIST` },
225
- { type: "UidAvailability", id: model }
340
+ { type: "UidAvailability", id: model },
341
+ "RecentDocumentList"
226
342
  ]
227
343
  }),
228
344
  /**
@@ -241,8 +357,21 @@ const documentApi = contentManagerApi.injectEndpoints({
241
357
  invalidatesTags: (result, _error, { model }) => [
242
358
  { type: "Document", id: `${model}_LIST` },
243
359
  "Relations",
244
- { type: "UidAvailability", id: model }
245
- ]
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
+ }
246
375
  }),
247
376
  deleteDocument: builder.mutation({
248
377
  query: ({ collectionType, model, documentId, params }) => ({
@@ -253,7 +382,8 @@ const documentApi = contentManagerApi.injectEndpoints({
253
382
  }
254
383
  }),
255
384
  invalidatesTags: (_result, _error, { collectionType, model }) => [
256
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
385
+ { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
386
+ "RecentDocumentList"
257
387
  ]
258
388
  }),
259
389
  deleteManyDocuments: builder.mutation({
@@ -265,7 +395,10 @@ const documentApi = contentManagerApi.injectEndpoints({
265
395
  params
266
396
  }
267
397
  }),
268
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
398
+ invalidatesTags: (_res, _error, { model }) => [
399
+ { type: "Document", id: `${model}_LIST` },
400
+ "RecentDocumentList"
401
+ ]
269
402
  }),
270
403
  discardDocument: builder.mutation({
271
404
  query: ({ collectionType, model, documentId, params }) => ({
@@ -283,7 +416,8 @@ const documentApi = contentManagerApi.injectEndpoints({
283
416
  },
284
417
  { type: "Document", id: `${model}_LIST` },
285
418
  "Relations",
286
- { type: "UidAvailability", id: model }
419
+ { type: "UidAvailability", id: model },
420
+ "RecentDocumentList"
287
421
  ];
288
422
  }
289
423
  }),
@@ -296,7 +430,7 @@ const documentApi = contentManagerApi.injectEndpoints({
296
430
  url: `/content-manager/collection-types/${model}`,
297
431
  method: "GET",
298
432
  config: {
299
- params
433
+ params: qs.stringify(params, { encode: true })
300
434
  }
301
435
  }),
302
436
  providesTags: (result, _error, arg) => {
@@ -378,7 +512,8 @@ const documentApi = contentManagerApi.injectEndpoints({
378
512
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
379
513
  },
380
514
  { type: "Document", id: `${model}_LIST` },
381
- "Relations"
515
+ "Relations",
516
+ "RecentDocumentList"
382
517
  ];
383
518
  }
384
519
  }),
@@ -409,7 +544,9 @@ const documentApi = contentManagerApi.injectEndpoints({
409
544
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
410
545
  },
411
546
  "Relations",
412
- { type: "UidAvailability", id: model }
547
+ { type: "UidAvailability", id: model },
548
+ "RecentDocumentList",
549
+ "RecentDocumentList"
413
550
  ];
414
551
  },
415
552
  async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
@@ -439,7 +576,8 @@ const documentApi = contentManagerApi.injectEndpoints({
439
576
  {
440
577
  type: "Document",
441
578
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
442
- }
579
+ },
580
+ "RecentDocumentList"
443
581
  ];
444
582
  }
445
583
  }),
@@ -452,7 +590,10 @@ const documentApi = contentManagerApi.injectEndpoints({
452
590
  params
453
591
  }
454
592
  }),
455
- 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
+ ]
456
597
  })
457
598
  })
458
599
  });
@@ -475,8 +616,7 @@ const {
475
616
  useUnpublishManyDocumentsMutation
476
617
  } = documentApi;
477
618
  const buildValidParams = (query) => {
478
- if (!query)
479
- return query;
619
+ if (!query) return query;
480
620
  const { plugins: _, ...validQueryParams } = {
481
621
  ...query,
482
622
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -484,9 +624,6 @@ const buildValidParams = (query) => {
484
624
  {}
485
625
  )
486
626
  };
487
- if ("_q" in validQueryParams) {
488
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
489
- }
490
627
  return validQueryParams;
491
628
  };
492
629
  const isBaseQueryError = (error) => {
@@ -991,9 +1128,10 @@ const formatEditLayout = (data, {
991
1128
  currentPanelIndex += 2;
992
1129
  } else {
993
1130
  if (!panels[currentPanelIndex]) {
994
- panels.push([]);
1131
+ panels.push([row]);
1132
+ } else {
1133
+ panels[currentPanelIndex].push(row);
995
1134
  }
996
- panels[currentPanelIndex].push(row);
997
1135
  }
998
1136
  return panels;
999
1137
  }, []);
@@ -1126,6 +1264,7 @@ const convertListLayoutToFieldLayouts = (columns, attributes = {}, metadatas, co
1126
1264
  const useDocument = (args, opts) => {
1127
1265
  const { toggleNotification } = strapiAdmin.useNotification();
1128
1266
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
1267
+ const { formatMessage } = reactIntl.useIntl();
1129
1268
  const {
1130
1269
  currentData: data,
1131
1270
  isLoading: isLoadingDocument,
@@ -1135,12 +1274,27 @@ const useDocument = (args, opts) => {
1135
1274
  ...opts,
1136
1275
  skip: !args.documentId && args.collectionType !== SINGLE_TYPES || opts?.skip
1137
1276
  });
1277
+ const document = data?.data;
1278
+ const meta = data?.meta;
1138
1279
  const {
1139
1280
  components,
1140
1281
  schema,
1141
1282
  schemas,
1142
1283
  isLoading: isLoadingSchema
1143
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
+ };
1144
1298
  React__namespace.useEffect(() => {
1145
1299
  if (error) {
1146
1300
  toggleNotification({
@@ -1156,14 +1310,14 @@ const useDocument = (args, opts) => {
1156
1310
  return createYupSchema(schema.attributes, components);
1157
1311
  }, [schema, components]);
1158
1312
  const validate = React__namespace.useCallback(
1159
- (document) => {
1313
+ (document2) => {
1160
1314
  if (!validationSchema) {
1161
1315
  throw new Error(
1162
1316
  "There is no validation schema generated, this is likely due to the schema not being loaded yet."
1163
1317
  );
1164
1318
  }
1165
1319
  try {
1166
- validationSchema.validateSync(document, { abortEarly: false, strict: true });
1320
+ validationSchema.validateSync(document2, { abortEarly: false, strict: true });
1167
1321
  return null;
1168
1322
  } catch (error2) {
1169
1323
  if (error2 instanceof yup.ValidationError) {
@@ -1174,17 +1328,29 @@ const useDocument = (args, opts) => {
1174
1328
  },
1175
1329
  [validationSchema]
1176
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
+ );
1177
1341
  const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
1178
1342
  const hasError = !!error;
1179
1343
  return {
1180
1344
  components,
1181
- document: data?.data,
1182
- meta: data?.meta,
1345
+ document,
1346
+ meta,
1183
1347
  isLoading,
1184
1348
  hasError,
1185
1349
  schema,
1186
1350
  schemas,
1187
- validate
1351
+ validate,
1352
+ getTitle,
1353
+ getInitialFormValues
1188
1354
  };
1189
1355
  };
1190
1356
  const useDoc = () => {
@@ -1251,9 +1417,6 @@ const useContentManagerContext = () => {
1251
1417
  };
1252
1418
  };
1253
1419
  const prefixPluginTranslations = (trad, pluginId) => {
1254
- if (!pluginId) {
1255
- throw new TypeError("pluginId can't be empty");
1256
- }
1257
1420
  return Object.keys(trad).reduce((acc, current) => {
1258
1421
  acc[`${pluginId}.${current}`] = trad[current];
1259
1422
  return acc;
@@ -1687,10 +1850,10 @@ const useDocumentActions = () => {
1687
1850
  update
1688
1851
  };
1689
1852
  };
1690
- const ProtectedHistoryPage = React.lazy(
1691
- () => Promise.resolve().then(() => require("./History-Bw9vfT1k.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1853
+ const ProtectedHistoryPage = React__namespace.lazy(
1854
+ () => Promise.resolve().then(() => require("./History-zArjENzj.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1692
1855
  );
1693
- const routes$1 = [
1856
+ const routes$2 = [
1694
1857
  {
1695
1858
  path: ":collectionType/:slug/:id/history",
1696
1859
  Component: ProtectedHistoryPage
@@ -1700,32 +1863,45 @@ const routes$1 = [
1700
1863
  Component: ProtectedHistoryPage
1701
1864
  }
1702
1865
  ];
1866
+ const ProtectedPreviewPage = React__namespace.lazy(
1867
+ () => Promise.resolve().then(() => require("./Preview-DEHdENT1.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
+ ];
1703
1879
  const ProtectedEditViewPage = React.lazy(
1704
- () => Promise.resolve().then(() => require("./EditViewPage-BvcMXaP2.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1880
+ () => Promise.resolve().then(() => require("./EditViewPage-DqelJ9UK.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1705
1881
  );
1706
1882
  const ProtectedListViewPage = React.lazy(
1707
- () => Promise.resolve().then(() => require("./ListViewPage-MZu-8OKX.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1883
+ () => Promise.resolve().then(() => require("./ListViewPage-BVKBeQAA.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1708
1884
  );
1709
1885
  const ProtectedListConfiguration = React.lazy(
1710
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DBVqF5fc.js")).then((mod) => ({
1886
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-ByZAO_9H.js")).then((mod) => ({
1711
1887
  default: mod.ProtectedListConfiguration
1712
1888
  }))
1713
1889
  );
1714
1890
  const ProtectedEditConfigurationPage = React.lazy(
1715
- () => Promise.resolve().then(() => require("./EditConfigurationPage-Bcbi6r5y.js")).then((mod) => ({
1891
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-LYEvR4fW.js")).then((mod) => ({
1716
1892
  default: mod.ProtectedEditConfigurationPage
1717
1893
  }))
1718
1894
  );
1719
1895
  const ProtectedComponentConfigurationPage = React.lazy(
1720
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-CzDn8Uxh.js")).then((mod) => ({
1896
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-DdkVGfXC.js")).then((mod) => ({
1721
1897
  default: mod.ProtectedComponentConfigurationPage
1722
1898
  }))
1723
1899
  );
1724
1900
  const NoPermissions = React.lazy(
1725
- () => Promise.resolve().then(() => require("./NoPermissionsPage-COs61PpB.js")).then((mod) => ({ default: mod.NoPermissions }))
1901
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-vdNpc6jb.js")).then((mod) => ({ default: mod.NoPermissions }))
1726
1902
  );
1727
1903
  const NoContentType = React.lazy(
1728
- () => Promise.resolve().then(() => require("./NoContentTypePage-C9lRMTCa.js")).then((mod) => ({ default: mod.NoContentType }))
1904
+ () => Promise.resolve().then(() => require("./NoContentTypePage-BV5zfDxr.js")).then((mod) => ({ default: mod.NoContentType }))
1729
1905
  );
1730
1906
  const CollectionTypePages = () => {
1731
1907
  const { collectionType } = reactRouterDom.useParams();
@@ -1737,7 +1913,7 @@ const CollectionTypePages = () => {
1737
1913
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1738
1914
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1739
1915
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1740
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1916
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1741
1917
  const routes = [
1742
1918
  {
1743
1919
  path: LIST_RELATIVE_PATH,
@@ -1771,6 +1947,7 @@ const routes = [
1771
1947
  path: "no-content-types",
1772
1948
  Component: NoContentType
1773
1949
  },
1950
+ ...routes$2,
1774
1951
  ...routes$1
1775
1952
  ];
1776
1953
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1869,6 +2046,11 @@ const DocumentActionButton = (action) => {
1869
2046
  ) : null
1870
2047
  ] });
1871
2048
  };
2049
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
2050
+ &:hover {
2051
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
2052
+ }
2053
+ `;
1872
2054
  const DocumentActionsMenu = ({
1873
2055
  actions: actions2,
1874
2056
  children,
@@ -1927,48 +2109,32 @@ const DocumentActionsMenu = ({
1927
2109
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1928
2110
  actions2.map((action) => {
1929
2111
  return /* @__PURE__ */ jsxRuntime.jsx(
1930
- designSystem.Menu.Item,
2112
+ MenuItem,
1931
2113
  {
1932
2114
  disabled: action.disabled,
1933
2115
  onSelect: handleClick(action),
1934
2116
  display: "block",
1935
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1936
- /* @__PURE__ */ jsxRuntime.jsxs(
1937
- designSystem.Flex,
1938
- {
1939
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1940
- gap: 2,
1941
- tag: "span",
1942
- children: [
1943
- /* @__PURE__ */ jsxRuntime.jsx(
1944
- designSystem.Flex,
1945
- {
1946
- tag: "span",
1947
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1948
- children: action.icon
1949
- }
1950
- ),
1951
- action.label
1952
- ]
1953
- }
1954
- ),
1955
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1956
- designSystem.Flex,
1957
- {
1958
- alignItems: "center",
1959
- background: "alternative100",
1960
- borderStyle: "solid",
1961
- borderColor: "alternative200",
1962
- borderWidth: "1px",
1963
- height: 5,
1964
- paddingLeft: 2,
1965
- paddingRight: 2,
1966
- hasRadius: true,
1967
- color: "alternative600",
1968
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1969
- }
1970
- )
1971
- ] })
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
+ ) })
1972
2138
  },
1973
2139
  action.id
1974
2140
  );
@@ -2105,6 +2271,7 @@ const PublishAction$1 = ({
2105
2271
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2106
2272
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2107
2273
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2274
+ const { id } = reactRouterDom.useParams();
2108
2275
  const { formatMessage } = reactIntl.useIntl();
2109
2276
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2110
2277
  const { publish } = useDocumentActions();
@@ -2207,10 +2374,12 @@ const PublishAction$1 = ({
2207
2374
  transformData(formValues)
2208
2375
  );
2209
2376
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2210
- navigate({
2211
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2212
- search: rawQuery
2213
- });
2377
+ if (id === "create") {
2378
+ navigate({
2379
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2380
+ search: rawQuery
2381
+ });
2382
+ }
2214
2383
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2215
2384
  setErrors(formatValidationErrors(res.error));
2216
2385
  }
@@ -2263,6 +2432,7 @@ const PublishAction$1 = ({
2263
2432
  };
2264
2433
  };
2265
2434
  PublishAction$1.type = "publish";
2435
+ PublishAction$1.position = "panel";
2266
2436
  const UpdateAction = ({
2267
2437
  activeTab,
2268
2438
  documentId,
@@ -2285,96 +2455,134 @@ const UpdateAction = ({
2285
2455
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2286
2456
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2287
2457
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2288
- return {
2289
- /**
2290
- * Disabled when:
2291
- * - the form is submitting
2292
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2293
- * - the active tab is the published tab
2294
- */
2295
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2296
- label: formatMessage({
2297
- id: "content-manager.containers.Edit.save",
2298
- defaultMessage: "Save"
2299
- }),
2300
- onClick: async () => {
2301
- setSubmitting(true);
2302
- try {
2303
- const { errors } = await validate(true, {
2304
- 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
+ })
2305
2474
  });
2306
- if (errors) {
2307
- toggleNotification({
2308
- type: "danger",
2309
- message: formatMessage({
2310
- id: "content-manager.validation.error",
2311
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2312
- })
2313
- });
2314
- return;
2315
- }
2316
- if (isCloning) {
2317
- const res = await clone(
2318
- {
2319
- model,
2320
- documentId: cloneMatch.params.origin,
2321
- params
2322
- },
2323
- transformData(document)
2324
- );
2325
- if ("data" in res) {
2326
- navigate(
2327
- {
2328
- pathname: `../${res.data.documentId}`,
2329
- search: rawQuery
2330
- },
2331
- { relative: "path" }
2332
- );
2333
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2334
- setErrors(formatValidationErrors(res.error));
2335
- }
2336
- } else if (documentId || collectionType === SINGLE_TYPES) {
2337
- 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(
2338
2488
  {
2339
- collectionType,
2340
- model,
2341
- documentId,
2342
- params
2489
+ pathname: `../${res.data.documentId}`,
2490
+ search: rawQuery
2343
2491
  },
2344
- transformData(document)
2492
+ { relative: "path" }
2345
2493
  );
2346
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2347
- setErrors(formatValidationErrors(res.error));
2348
- } else {
2349
- resetForm();
2350
- }
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));
2351
2509
  } else {
2352
- 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(
2353
2522
  {
2354
- model,
2355
- params
2523
+ pathname: `../${res.data.documentId}`,
2524
+ search: rawQuery
2356
2525
  },
2357
- transformData(document)
2526
+ { replace: true, relative: "path" }
2358
2527
  );
2359
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2360
- navigate(
2361
- {
2362
- pathname: `../${res.data.documentId}`,
2363
- search: rawQuery
2364
- },
2365
- { replace: true, relative: "path" }
2366
- );
2367
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2368
- setErrors(formatValidationErrors(res.error));
2369
- }
2528
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2529
+ setErrors(formatValidationErrors(res.error));
2370
2530
  }
2371
- } finally {
2372
- setSubmitting(false);
2373
2531
  }
2532
+ } finally {
2533
+ setSubmitting(false);
2374
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
2375
2582
  };
2376
2583
  };
2377
2584
  UpdateAction.type = "update";
2585
+ UpdateAction.position = "panel";
2378
2586
  const UNPUBLISH_DRAFT_OPTIONS = {
2379
2587
  KEEP: "keep",
2380
2588
  DISCARD: "discard"
@@ -2497,6 +2705,7 @@ const UnpublishAction$1 = ({
2497
2705
  };
2498
2706
  };
2499
2707
  UnpublishAction$1.type = "unpublish";
2708
+ UnpublishAction$1.position = "panel";
2500
2709
  const DiscardAction = ({
2501
2710
  activeTab,
2502
2711
  documentId,
@@ -2547,6 +2756,7 @@ const DiscardAction = ({
2547
2756
  };
2548
2757
  };
2549
2758
  DiscardAction.type = "discard";
2759
+ DiscardAction.position = "panel";
2550
2760
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2551
2761
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2552
2762
  const RelativeTime = React__namespace.forwardRef(
@@ -2559,7 +2769,7 @@ const RelativeTime = React__namespace.forwardRef(
2559
2769
  });
2560
2770
  const unit = intervals.find((intervalUnit) => {
2561
2771
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2562
- });
2772
+ }) ?? "seconds";
2563
2773
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2564
2774
  const customInterval = customIntervals.find(
2565
2775
  (custom) => interval[custom.unit] < custom.threshold
@@ -2593,19 +2803,29 @@ const getDisplayName = ({
2593
2803
  return email ?? "";
2594
2804
  };
2595
2805
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2596
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2806
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2597
2807
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2598
- 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
+ }) }) });
2599
2813
  };
2600
2814
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2601
2815
  const { formatMessage } = reactIntl.useIntl();
2602
2816
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2817
+ const params = reactRouterDom.useParams();
2603
2818
  const title = isCreating ? formatMessage({
2604
2819
  id: "content-manager.containers.edit.title.new",
2605
2820
  defaultMessage: "Create an entry"
2606
2821
  }) : documentTitle;
2607
2822
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2608
- /* @__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
+ ),
2609
2829
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2610
2830
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2611
2831
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2656,7 +2876,7 @@ const HeaderToolbar = () => {
2656
2876
  meta: isCloning ? void 0 : meta,
2657
2877
  collectionType
2658
2878
  },
2659
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2879
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2660
2880
  children: (actions2) => {
2661
2881
  const headerActions = actions2.filter((action) => {
2662
2882
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2864,6 +3084,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2864
3084
  };
2865
3085
  };
2866
3086
  ConfigureTheViewAction.type = "configure-the-view";
3087
+ ConfigureTheViewAction.position = "header";
2867
3088
  const EditTheModelAction = ({ model }) => {
2868
3089
  const navigate = reactRouterDom.useNavigate();
2869
3090
  const { formatMessage } = reactIntl.useIntl();
@@ -2880,6 +3101,7 @@ const EditTheModelAction = ({ model }) => {
2880
3101
  };
2881
3102
  };
2882
3103
  EditTheModelAction.type = "edit-the-model";
3104
+ EditTheModelAction.position = "header";
2883
3105
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2884
3106
  const navigate = reactRouterDom.useNavigate();
2885
3107
  const { formatMessage } = reactIntl.useIntl();
@@ -2953,6 +3175,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2953
3175
  };
2954
3176
  };
2955
3177
  DeleteAction$1.type = "delete";
3178
+ DeleteAction$1.position = ["header", "table-row"];
2956
3179
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2957
3180
  const Panels = () => {
2958
3181
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3015,7 +3238,7 @@ const ActionsPanelContent = () => {
3015
3238
  strapiAdmin.DescriptionComponentRenderer,
3016
3239
  {
3017
3240
  props,
3018
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3241
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3019
3242
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3020
3243
  }
3021
3244
  ),
@@ -3042,7 +3265,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
3042
3265
  justifyContent: "stretch",
3043
3266
  alignItems: "flex-start",
3044
3267
  children: [
3045
- /* @__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 }),
3046
3269
  children
3047
3270
  ]
3048
3271
  }
@@ -3073,7 +3296,7 @@ const ConfirmBulkActionDialog = ({
3073
3296
  ] })
3074
3297
  ] }) });
3075
3298
  };
3076
- 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 });
3077
3300
  const ConfirmDialogPublishAll = ({
3078
3301
  isOpen,
3079
3302
  onToggleDialog,
@@ -3122,7 +3345,7 @@ const ConfirmDialogPublishAll = ({
3122
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. "
3123
3346
  },
3124
3347
  {
3125
- b: BoldChunk$1,
3348
+ b: BoldChunk,
3126
3349
  count: countDraftRelations,
3127
3350
  entities: selectedEntries.length
3128
3351
  }
@@ -3161,6 +3384,16 @@ const ConfirmDialogPublishAll = ({
3161
3384
  const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
3162
3385
  max-width: 300px;
3163
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
+ `;
3164
3397
  const formatErrorMessages = (errors, parentKey, formatMessage) => {
3165
3398
  const messages = [];
3166
3399
  Object.entries(errors).forEach(([key, value]) => {
@@ -3265,7 +3498,7 @@ const SelectedEntriesTableContent = ({
3265
3498
  )
3266
3499
  ] }),
3267
3500
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
3268
- /* @__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: [
3269
3502
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, { id: row.id }),
3270
3503
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row.id }) }),
3271
3504
  shouldDisplayMainField && /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row[mainField] }) }),
@@ -3292,18 +3525,10 @@ const SelectedEntriesTableContent = ({
3292
3525
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3293
3526
  },
3294
3527
  state: { from: pathname },
3295
- label: formatMessage(
3296
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3297
- {
3298
- target: formatMessage(
3299
- {
3300
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3301
- defaultMessage: "item line {number}"
3302
- },
3303
- { number: index2 + 1 }
3304
- )
3305
- }
3306
- ),
3528
+ label: formatMessage({
3529
+ id: "content-manager.bulk-publish.edit",
3530
+ defaultMessage: "Edit"
3531
+ }),
3307
3532
  target: "_blank",
3308
3533
  marginLeft: "auto",
3309
3534
  variant: "ghost",
@@ -3313,7 +3538,73 @@ const SelectedEntriesTableContent = ({
3313
3538
  ] }, row.id)) })
3314
3539
  ] });
3315
3540
  };
3316
- 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
+ };
3317
3608
  const SelectedEntriesModalContent = ({
3318
3609
  listViewSelectedEntries,
3319
3610
  toggleModal,
@@ -3372,7 +3663,6 @@ const SelectedEntriesModalContent = ({
3372
3663
  validationErrors: {}
3373
3664
  };
3374
3665
  }, [components, data, schema]);
3375
- const [publishedCount, setPublishedCount] = React__namespace.useState(0);
3376
3666
  const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
3377
3667
  const { publishMany: bulkPublishAction } = useDocumentActions();
3378
3668
  const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
@@ -3384,53 +3674,36 @@ const SelectedEntriesModalContent = ({
3384
3674
  const selectedEntriesWithErrorsCount = selectedEntries.filter(
3385
3675
  ({ documentId }) => validationErrors[documentId]
3386
3676
  ).length;
3387
- const selectedEntriesPublished = selectedEntries.filter(
3677
+ const selectedEntriesPublishedCount = selectedEntries.filter(
3388
3678
  ({ status }) => status === "published"
3389
3679
  ).length;
3390
- 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;
3391
3684
  const toggleDialog = () => setIsDialogOpen((prev) => !prev);
3392
3685
  const handleConfirmBulkPublish = async () => {
3393
3686
  toggleDialog();
3394
3687
  const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
3395
3688
  if (!("error" in res)) {
3396
- setPublishedCount(res.count);
3397
3689
  const unpublishedEntries = rows.filter((row) => {
3398
3690
  return !entriesToPublish.includes(row.documentId);
3399
3691
  });
3400
3692
  setListViewSelectedDocuments(unpublishedEntries);
3401
3693
  }
3402
3694
  };
3403
- const getFormattedCountMessage = () => {
3404
- if (publishedCount) {
3405
- return formatMessage(
3406
- {
3407
- id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
3408
- 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."
3409
- },
3410
- {
3411
- publishedCount,
3412
- withErrorsCount: selectedEntriesWithErrorsCount,
3413
- b: BoldChunk
3414
- }
3415
- );
3416
- }
3417
- return formatMessage(
3418
- {
3419
- id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
3420
- 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."
3421
- },
3422
- {
3423
- readyToPublishCount: selectedEntriesWithNoErrorsCount,
3424
- withErrorsCount: selectedEntriesWithErrorsCount,
3425
- alreadyPublishedCount: selectedEntriesPublished,
3426
- b: BoldChunk
3427
- }
3428
- );
3429
- };
3430
3695
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3431
3696
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
3432
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: getFormattedCountMessage() }),
3433
- /* @__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(
3434
3707
  SelectedEntriesTableContent,
3435
3708
  {
3436
3709
  isPublishing: isSubmittingForm,
@@ -3451,7 +3724,7 @@ const SelectedEntriesModalContent = ({
3451
3724
  designSystem.Button,
3452
3725
  {
3453
3726
  onClick: toggleDialog,
3454
- disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublished === selectedEntries.length || isLoading,
3727
+ disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublishedCount === selectedEntries.length || isLoading,
3455
3728
  loading: isSubmittingForm,
3456
3729
  children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
3457
3730
  }
@@ -3477,8 +3750,7 @@ const PublishAction = ({ documents, model }) => {
3477
3750
  const refetchList = () => {
3478
3751
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3479
3752
  };
3480
- if (!showPublishButton)
3481
- return null;
3753
+ if (!showPublishButton) return null;
3482
3754
  return {
3483
3755
  actionType: "publish",
3484
3756
  variant: "tertiary",
@@ -3546,8 +3818,7 @@ const DeleteAction = ({ documents, model }) => {
3546
3818
  selectRow([]);
3547
3819
  }
3548
3820
  };
3549
- if (!hasDeletePermission)
3550
- return null;
3821
+ if (!hasDeletePermission) return null;
3551
3822
  return {
3552
3823
  variant: "danger-light",
3553
3824
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3596,8 +3867,7 @@ const UnpublishAction = ({ documents, model }) => {
3596
3867
  }
3597
3868
  };
3598
3869
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3599
- if (!showUnpublishButton)
3600
- return null;
3870
+ if (!showUnpublishButton) return null;
3601
3871
  return {
3602
3872
  variant: "tertiary",
3603
3873
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3702,7 +3972,7 @@ const TableActions = ({ document }) => {
3702
3972
  strapiAdmin.DescriptionComponentRenderer,
3703
3973
  {
3704
3974
  props,
3705
- 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"),
3706
3976
  children: (actions2) => {
3707
3977
  const tableRowActions = actions2.filter((action) => {
3708
3978
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3761,6 +4031,7 @@ const EditAction = ({ documentId }) => {
3761
4031
  };
3762
4032
  };
3763
4033
  EditAction.type = "edit";
4034
+ EditAction.position = "table-row";
3764
4035
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3765
4036
  path {
3766
4037
  fill: currentColor;
@@ -3837,6 +4108,7 @@ const CloneAction = ({ model, documentId }) => {
3837
4108
  };
3838
4109
  };
3839
4110
  CloneAction.type = "clone";
4111
+ CloneAction.position = "table-row";
3840
4112
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3841
4113
  path {
3842
4114
  fill: currentColor;
@@ -3923,7 +4195,14 @@ class ContentManagerPlugin {
3923
4195
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3924
4196
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3925
4197
  getBulkActions: () => this.bulkActions,
3926
- 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
+ },
3927
4206
  getEditViewSidePanels: () => this.editViewSidePanels,
3928
4207
  getHeaderActions: () => this.headerActions
3929
4208
  }
@@ -3933,10 +4212,8 @@ class ContentManagerPlugin {
3933
4212
  const getPrintableType = (value) => {
3934
4213
  const nativeType = typeof value;
3935
4214
  if (nativeType === "object") {
3936
- if (value === null)
3937
- return "null";
3938
- if (Array.isArray(value))
3939
- return "array";
4215
+ if (value === null) return "null";
4216
+ if (Array.isArray(value)) return "array";
3940
4217
  if (value instanceof Object && value.constructor.name !== "Object") {
3941
4218
  return value.constructor.name;
3942
4219
  }
@@ -3947,17 +4224,27 @@ const HistoryAction = ({ model, document }) => {
3947
4224
  const { formatMessage } = reactIntl.useIntl();
3948
4225
  const [{ query }] = strapiAdmin.useQueryParams();
3949
4226
  const navigate = reactRouterDom.useNavigate();
4227
+ const { trackUsage } = strapiAdmin.useTracking();
4228
+ const { pathname } = reactRouterDom.useLocation();
3950
4229
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3951
4230
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3952
4231
  return null;
3953
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
+ };
3954
4241
  return {
3955
4242
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3956
4243
  label: formatMessage({
3957
4244
  id: "content-manager.history.document-action",
3958
4245
  defaultMessage: "Content History"
3959
4246
  }),
3960
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4247
+ onClick: handleOnClick,
3961
4248
  disabled: (
3962
4249
  /**
3963
4250
  * The user is creating a new document.
@@ -3979,6 +4266,7 @@ const HistoryAction = ({ model, document }) => {
3979
4266
  };
3980
4267
  };
3981
4268
  HistoryAction.type = "history";
4269
+ HistoryAction.position = "header";
3982
4270
  const historyAdmin = {
3983
4271
  bootstrap(app) {
3984
4272
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4025,6 +4313,88 @@ const { setInitialData } = actions;
4025
4313
  const reducer = toolkit.combineReducers({
4026
4314
  app: reducer$1
4027
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
+ };
4028
4398
  const index = {
4029
4399
  register(app) {
4030
4400
  const cm = new ContentManagerPlugin();
@@ -4044,7 +4414,7 @@ const index = {
4044
4414
  app.router.addRoute({
4045
4415
  path: "content-manager/*",
4046
4416
  lazy: async () => {
4047
- const { Layout } = await Promise.resolve().then(() => require("./layout-Euka-kfv.js"));
4417
+ const { Layout } = await Promise.resolve().then(() => require("./layout-DSeUTfMv.js"));
4048
4418
  return {
4049
4419
  Component: Layout
4050
4420
  };
@@ -4057,11 +4427,14 @@ const index = {
4057
4427
  if (typeof historyAdmin.bootstrap === "function") {
4058
4428
  historyAdmin.bootstrap(app);
4059
4429
  }
4430
+ if (typeof previewAdmin.bootstrap === "function") {
4431
+ previewAdmin.bootstrap(app);
4432
+ }
4060
4433
  },
4061
4434
  async registerTrads({ locales }) {
4062
4435
  const importedTrads = await Promise.all(
4063
4436
  locales.map((locale) => {
4064
- 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 }) => {
4065
4438
  return {
4066
4439
  data: prefixPluginTranslations(data, PLUGIN_ID),
4067
4440
  locale
@@ -4083,7 +4456,6 @@ exports.CLONE_PATH = CLONE_PATH;
4083
4456
  exports.COLLECTION_TYPES = COLLECTION_TYPES;
4084
4457
  exports.CREATOR_FIELDS = CREATOR_FIELDS;
4085
4458
  exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
4086
- exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
4087
4459
  exports.DocumentRBAC = DocumentRBAC;
4088
4460
  exports.DocumentStatus = DocumentStatus;
4089
4461
  exports.HOOKS = HOOKS;
@@ -4100,13 +4472,17 @@ exports.checkIfAttributeIsDisplayable = checkIfAttributeIsDisplayable;
4100
4472
  exports.contentManagerApi = contentManagerApi;
4101
4473
  exports.convertEditLayoutToFieldLayouts = convertEditLayoutToFieldLayouts;
4102
4474
  exports.convertListLayoutToFieldLayouts = convertListLayoutToFieldLayouts;
4475
+ exports.createDefaultForm = createDefaultForm;
4103
4476
  exports.createYupSchema = createYupSchema;
4104
4477
  exports.extractContentTypeComponents = extractContentTypeComponents;
4105
4478
  exports.getDisplayName = getDisplayName;
4106
4479
  exports.getMainField = getMainField;
4107
4480
  exports.getTranslation = getTranslation;
4108
4481
  exports.index = index;
4482
+ exports.prepareTempKeys = prepareTempKeys;
4483
+ exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
4109
4484
  exports.setInitialData = setInitialData;
4485
+ exports.transformDocument = transformDocument;
4110
4486
  exports.useContentManagerContext = useContentManagerContext;
4111
4487
  exports.useContentTypeSchema = useContentTypeSchema;
4112
4488
  exports.useDoc = useDoc;
@@ -4119,5 +4495,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4119
4495
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4120
4496
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4121
4497
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4498
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4122
4499
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4123
- //# sourceMappingURL=index-oDq3VO9j.js.map
4500
+ //# sourceMappingURL=index-CxLSGwnk.js.map