@strapi/content-manager 0.0.0-experimental.fdacf4285d1cada9d94ab4dcd756c5362cba1b54 → 0.0.0-next.03640aa70ec25f95e1f09348e1baadbf150bf0c5

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 (181) 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-CI7K072v.js → ComponentConfigurationPage-4TPewfw0.js} +5 -6
  4. package/dist/_chunks/{ComponentConfigurationPage-CI7K072v.js.map → ComponentConfigurationPage-4TPewfw0.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CVfoYQ9p.mjs → ComponentConfigurationPage-Cw9zmV1T.mjs} +4 -4
  6. package/dist/_chunks/{ComponentConfigurationPage-CVfoYQ9p.mjs.map → ComponentConfigurationPage-Cw9zmV1T.mjs.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-Cg1Esg_N.mjs → EditConfigurationPage-B98IU2Ul.mjs} +4 -4
  11. package/dist/_chunks/{EditConfigurationPage-Cg1Esg_N.mjs.map → EditConfigurationPage-B98IU2Ul.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-CtnhGgIx.js → EditConfigurationPage-BfXCCaoj.js} +5 -6
  13. package/dist/_chunks/{EditConfigurationPage-CtnhGgIx.js.map → EditConfigurationPage-BfXCCaoj.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C_iuCG0Z.mjs → EditViewPage-D5NJMgTB.mjs} +30 -8
  15. package/dist/_chunks/EditViewPage-D5NJMgTB.mjs.map +1 -0
  16. package/dist/_chunks/{EditViewPage-MURPhGdY.js → EditViewPage-z4N1z6hE.js} +30 -9
  17. package/dist/_chunks/EditViewPage-z4N1z6hE.js.map +1 -0
  18. package/dist/_chunks/{Field-D1c7z74Q.js → Field-B35qWmBP.js} +65 -66
  19. package/dist/_chunks/Field-B35qWmBP.js.map +1 -0
  20. package/dist/_chunks/{Field-55cGR9kd.mjs → Field-CuvC32FT.mjs} +64 -64
  21. package/dist/_chunks/Field-CuvC32FT.mjs.map +1 -0
  22. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  23. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  24. package/dist/_chunks/{Form-oLrvgmvM.mjs → Form-B1DVIq72.mjs} +3 -3
  25. package/dist/_chunks/{Form-oLrvgmvM.mjs.map → Form-B1DVIq72.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-D1cecnu3.js → Form-DM3cOoGs.js} +5 -6
  27. package/dist/_chunks/{Form-D1cecnu3.js.map → Form-DM3cOoGs.js.map} +1 -1
  28. package/dist/_chunks/{History-5VbTZWYl.mjs → History-Bbxb1MFm.mjs} +23 -93
  29. package/dist/_chunks/History-Bbxb1MFm.mjs.map +1 -0
  30. package/dist/_chunks/{History-DJpjbGJZ.js → History-DpsAiewY.js} +23 -94
  31. package/dist/_chunks/History-DpsAiewY.js.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-BNs0g27c.mjs → ListConfigurationPage-Bg3gL7PO.mjs} +7 -6
  33. package/dist/_chunks/ListConfigurationPage-Bg3gL7PO.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DylRESaU.js → ListConfigurationPage-QgEe3A5Q.js} +7 -7
  35. package/dist/_chunks/ListConfigurationPage-QgEe3A5Q.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-MbdmfkXa.js → ListViewPage-CCiBxdYh.js} +63 -41
  37. package/dist/_chunks/ListViewPage-CCiBxdYh.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DelIyZ5D.mjs → ListViewPage-CkEvkdm7.mjs} +62 -39
  39. package/dist/_chunks/ListViewPage-CkEvkdm7.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-CoXa1X8-.mjs → NoContentTypePage-BHlUUnaH.mjs} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-CoXa1X8-.mjs.map → NoContentTypePage-BHlUUnaH.mjs.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-BDQ1MdsC.js → NoContentTypePage-DMqJwbCS.js} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-BDQ1MdsC.js.map → NoContentTypePage-DMqJwbCS.js.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-CnnuMd2Y.js → NoPermissionsPage-CGThcHIp.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-CnnuMd2Y.js.map → NoPermissionsPage-CGThcHIp.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-GgkDXRq3.mjs → NoPermissionsPage-lfWiEoK1.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-GgkDXRq3.mjs.map → NoPermissionsPage-lfWiEoK1.mjs.map} +1 -1
  48. package/dist/_chunks/Preview-BUiUISol.mjs +272 -0
  49. package/dist/_chunks/Preview-BUiUISol.mjs.map +1 -0
  50. package/dist/_chunks/Preview-DOdb2qG8.js +290 -0
  51. package/dist/_chunks/Preview-DOdb2qG8.js.map +1 -0
  52. package/dist/_chunks/{Relations-DVeWgAT4.js → Relations-Bhki9PTq.js} +47 -23
  53. package/dist/_chunks/Relations-Bhki9PTq.js.map +1 -0
  54. package/dist/_chunks/{Relations-BKnC9peY.mjs → Relations-DXV77Rwu.mjs} +47 -22
  55. package/dist/_chunks/Relations-DXV77Rwu.mjs.map +1 -0
  56. package/dist/_chunks/{en-Bm0D0IWz.js → en-BK8Xyl5I.js} +16 -4
  57. package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-DKV44jRb.mjs → en-Dtk_ot79.mjs} +16 -4
  59. package/dist/_chunks/{en-DKV44jRb.mjs.map → en-Dtk_ot79.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-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  65. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  66. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  67. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-jwACjpe1.mjs → index-D5Kyqqml.mjs} +353 -184
  70. package/dist/_chunks/index-D5Kyqqml.mjs.map +1 -0
  71. package/dist/_chunks/{index-B9u01WiI.js → index-hR3DeJ4w.js} +351 -182
  72. package/dist/_chunks/index-hR3DeJ4w.js.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-D51YDRJV.mjs → layout-DaHFw5kD.mjs} +4 -4
  78. package/dist/_chunks/{layout-D51YDRJV.mjs.map → layout-DaHFw5kD.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-DDtbDqUd.js → layout-aYm7fih0.js} +5 -6
  80. package/dist/_chunks/{layout-DDtbDqUd.js.map → layout-aYm7fih0.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-Bgc8jKKt.mjs → relations-BaJei9O4.mjs} +6 -7
  86. package/dist/_chunks/relations-BaJei9O4.mjs.map +1 -0
  87. package/dist/_chunks/{relations-DtsF4GJw.js → relations-CgGEzgRk.js} +6 -7
  88. package/dist/_chunks/relations-CgGEzgRk.js.map +1 -0
  89. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  90. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  91. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  92. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  93. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  94. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  95. package/dist/admin/index.js +1 -1
  96. package/dist/admin/index.mjs +4 -4
  97. package/dist/admin/src/content-manager.d.ts +3 -2
  98. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  99. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  100. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  101. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  102. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  103. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  104. package/dist/admin/src/preview/constants.d.ts +1 -0
  105. package/dist/admin/src/preview/index.d.ts +4 -0
  106. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  107. package/dist/admin/src/preview/routes.d.ts +3 -0
  108. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  109. package/dist/admin/src/router.d.ts +1 -1
  110. package/dist/admin/src/services/documents.d.ts +0 -3
  111. package/dist/server/index.js +409 -180
  112. package/dist/server/index.js.map +1 -1
  113. package/dist/server/index.mjs +409 -179
  114. package/dist/server/index.mjs.map +1 -1
  115. package/dist/server/src/bootstrap.d.ts.map +1 -1
  116. package/dist/server/src/controllers/index.d.ts.map +1 -1
  117. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  118. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  119. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  120. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  121. package/dist/server/src/history/services/utils.d.ts +2 -3
  122. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  123. package/dist/server/src/index.d.ts +4 -4
  124. package/dist/server/src/preview/constants.d.ts +2 -0
  125. package/dist/server/src/preview/constants.d.ts.map +1 -0
  126. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  127. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  128. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  129. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  130. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  131. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  132. package/dist/server/src/preview/index.d.ts +4 -0
  133. package/dist/server/src/preview/index.d.ts.map +1 -0
  134. package/dist/server/src/preview/routes/index.d.ts +8 -0
  135. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  136. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  137. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  138. package/dist/server/src/preview/services/index.d.ts +16 -0
  139. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  140. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  141. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  142. package/dist/server/src/preview/services/preview.d.ts +12 -0
  143. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  144. package/dist/server/src/preview/utils.d.ts +19 -0
  145. package/dist/server/src/preview/utils.d.ts.map +1 -0
  146. package/dist/server/src/register.d.ts.map +1 -1
  147. package/dist/server/src/routes/index.d.ts.map +1 -1
  148. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  149. package/dist/server/src/services/document-metadata.d.ts +8 -8
  150. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  151. package/dist/server/src/services/index.d.ts +4 -4
  152. package/dist/server/src/services/index.d.ts.map +1 -1
  153. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  154. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  155. package/dist/server/src/utils/index.d.ts +2 -0
  156. package/dist/server/src/utils/index.d.ts.map +1 -1
  157. package/dist/shared/contracts/index.d.ts +1 -0
  158. package/dist/shared/contracts/index.d.ts.map +1 -1
  159. package/dist/shared/contracts/preview.d.ts +27 -0
  160. package/dist/shared/contracts/preview.d.ts.map +1 -0
  161. package/dist/shared/index.js +4 -0
  162. package/dist/shared/index.js.map +1 -1
  163. package/dist/shared/index.mjs +4 -0
  164. package/dist/shared/index.mjs.map +1 -1
  165. package/package.json +11 -11
  166. package/dist/_chunks/EditViewPage-C_iuCG0Z.mjs.map +0 -1
  167. package/dist/_chunks/EditViewPage-MURPhGdY.js.map +0 -1
  168. package/dist/_chunks/Field-55cGR9kd.mjs.map +0 -1
  169. package/dist/_chunks/Field-D1c7z74Q.js.map +0 -1
  170. package/dist/_chunks/History-5VbTZWYl.mjs.map +0 -1
  171. package/dist/_chunks/History-DJpjbGJZ.js.map +0 -1
  172. package/dist/_chunks/ListConfigurationPage-BNs0g27c.mjs.map +0 -1
  173. package/dist/_chunks/ListConfigurationPage-DylRESaU.js.map +0 -1
  174. package/dist/_chunks/ListViewPage-DelIyZ5D.mjs.map +0 -1
  175. package/dist/_chunks/ListViewPage-MbdmfkXa.js.map +0 -1
  176. package/dist/_chunks/Relations-BKnC9peY.mjs.map +0 -1
  177. package/dist/_chunks/Relations-DVeWgAT4.js.map +0 -1
  178. package/dist/_chunks/index-B9u01WiI.js.map +0 -1
  179. package/dist/_chunks/index-jwACjpe1.mjs.map +0 -1
  180. package/dist/_chunks/relations-Bgc8jKKt.mjs.map +0 -1
  181. package/dist/_chunks/relations-DtsF4GJw.js.map +0 -1
@@ -4,18 +4,18 @@ 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 qs = require("qs");
10
13
  const pipe = require("lodash/fp/pipe");
11
14
  const dateFns = require("date-fns");
12
- const styledComponents = require("styled-components");
13
- const qs = require("qs");
14
15
  const toolkit = require("@reduxjs/toolkit");
15
16
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
16
17
  function _interopNamespace(e) {
17
- if (e && e.__esModule)
18
- return e;
18
+ if (e && e.__esModule) return e;
19
19
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
20
20
  if (e) {
21
21
  for (const k in e) {
@@ -32,15 +32,23 @@ function _interopNamespace(e) {
32
32
  return Object.freeze(n);
33
33
  }
34
34
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
35
+ const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
35
36
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
36
37
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
37
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
38
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
38
39
  const v = glob[path];
39
40
  if (v) {
40
41
  return typeof v === "function" ? v() : Promise.resolve(v);
41
42
  }
42
43
  return new Promise((_, reject) => {
43
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
44
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
45
+ reject.bind(
46
+ null,
47
+ new Error(
48
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
49
+ )
50
+ )
51
+ );
44
52
  });
45
53
  };
46
54
  const PLUGIN_ID = "content-manager";
@@ -294,7 +302,7 @@ const documentApi = contentManagerApi.injectEndpoints({
294
302
  url: `/content-manager/collection-types/${model}`,
295
303
  method: "GET",
296
304
  config: {
297
- params
305
+ params: qs.stringify(params, { encode: true })
298
306
  }
299
307
  }),
300
308
  providesTags: (result, _error, arg) => {
@@ -473,8 +481,7 @@ const {
473
481
  useUnpublishManyDocumentsMutation
474
482
  } = documentApi;
475
483
  const buildValidParams = (query) => {
476
- if (!query)
477
- return query;
484
+ if (!query) return query;
478
485
  const { plugins: _, ...validQueryParams } = {
479
486
  ...query,
480
487
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -482,9 +489,6 @@ const buildValidParams = (query) => {
482
489
  {}
483
490
  )
484
491
  };
485
- if ("_q" in validQueryParams) {
486
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
487
- }
488
492
  return validQueryParams;
489
493
  };
490
494
  const isBaseQueryError = (error) => {
@@ -989,9 +993,10 @@ const formatEditLayout = (data, {
989
993
  currentPanelIndex += 2;
990
994
  } else {
991
995
  if (!panels[currentPanelIndex]) {
992
- panels.push([]);
996
+ panels.push([row]);
997
+ } else {
998
+ panels[currentPanelIndex].push(row);
993
999
  }
994
- panels[currentPanelIndex].push(row);
995
1000
  }
996
1001
  return panels;
997
1002
  }, []);
@@ -1249,9 +1254,6 @@ const useContentManagerContext = () => {
1249
1254
  };
1250
1255
  };
1251
1256
  const prefixPluginTranslations = (trad, pluginId) => {
1252
- if (!pluginId) {
1253
- throw new TypeError("pluginId can't be empty");
1254
- }
1255
1257
  return Object.keys(trad).reduce((acc, current) => {
1256
1258
  acc[`${pluginId}.${current}`] = trad[current];
1257
1259
  return acc;
@@ -1685,10 +1687,10 @@ const useDocumentActions = () => {
1685
1687
  update
1686
1688
  };
1687
1689
  };
1688
- const ProtectedHistoryPage = React.lazy(
1689
- () => Promise.resolve().then(() => require("./History-DJpjbGJZ.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
+ const ProtectedHistoryPage = React__namespace.lazy(
1691
+ () => Promise.resolve().then(() => require("./History-DpsAiewY.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
1692
  );
1691
- const routes$1 = [
1693
+ const routes$2 = [
1692
1694
  {
1693
1695
  path: ":collectionType/:slug/:id/history",
1694
1696
  Component: ProtectedHistoryPage
@@ -1698,32 +1700,45 @@ const routes$1 = [
1698
1700
  Component: ProtectedHistoryPage
1699
1701
  }
1700
1702
  ];
1703
+ const ProtectedPreviewPage = React__namespace.lazy(
1704
+ () => Promise.resolve().then(() => require("./Preview-DOdb2qG8.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1705
+ );
1706
+ const routes$1 = [
1707
+ {
1708
+ path: ":collectionType/:slug/:id/preview",
1709
+ Component: ProtectedPreviewPage
1710
+ },
1711
+ {
1712
+ path: ":collectionType/:slug/preview",
1713
+ Component: ProtectedPreviewPage
1714
+ }
1715
+ ];
1701
1716
  const ProtectedEditViewPage = React.lazy(
1702
- () => Promise.resolve().then(() => require("./EditViewPage-MURPhGdY.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1717
+ () => Promise.resolve().then(() => require("./EditViewPage-z4N1z6hE.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1703
1718
  );
1704
1719
  const ProtectedListViewPage = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListViewPage-MbdmfkXa.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1720
+ () => Promise.resolve().then(() => require("./ListViewPage-CCiBxdYh.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1706
1721
  );
1707
1722
  const ProtectedListConfiguration = React.lazy(
1708
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DylRESaU.js")).then((mod) => ({
1723
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-QgEe3A5Q.js")).then((mod) => ({
1709
1724
  default: mod.ProtectedListConfiguration
1710
1725
  }))
1711
1726
  );
1712
1727
  const ProtectedEditConfigurationPage = React.lazy(
1713
- () => Promise.resolve().then(() => require("./EditConfigurationPage-CtnhGgIx.js")).then((mod) => ({
1728
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-BfXCCaoj.js")).then((mod) => ({
1714
1729
  default: mod.ProtectedEditConfigurationPage
1715
1730
  }))
1716
1731
  );
1717
1732
  const ProtectedComponentConfigurationPage = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-CI7K072v.js")).then((mod) => ({
1733
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-4TPewfw0.js")).then((mod) => ({
1719
1734
  default: mod.ProtectedComponentConfigurationPage
1720
1735
  }))
1721
1736
  );
1722
1737
  const NoPermissions = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoPermissionsPage-CnnuMd2Y.js")).then((mod) => ({ default: mod.NoPermissions }))
1738
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-CGThcHIp.js")).then((mod) => ({ default: mod.NoPermissions }))
1724
1739
  );
1725
1740
  const NoContentType = React.lazy(
1726
- () => Promise.resolve().then(() => require("./NoContentTypePage-BDQ1MdsC.js")).then((mod) => ({ default: mod.NoContentType }))
1741
+ () => Promise.resolve().then(() => require("./NoContentTypePage-DMqJwbCS.js")).then((mod) => ({ default: mod.NoContentType }))
1727
1742
  );
1728
1743
  const CollectionTypePages = () => {
1729
1744
  const { collectionType } = reactRouterDom.useParams();
@@ -1735,7 +1750,7 @@ const CollectionTypePages = () => {
1735
1750
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1736
1751
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1737
1752
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1738
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1753
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1739
1754
  const routes = [
1740
1755
  {
1741
1756
  path: LIST_RELATIVE_PATH,
@@ -1769,6 +1784,7 @@ const routes = [
1769
1784
  path: "no-content-types",
1770
1785
  Component: NoContentType
1771
1786
  },
1787
+ ...routes$2,
1772
1788
  ...routes$1
1773
1789
  ];
1774
1790
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1867,6 +1883,11 @@ const DocumentActionButton = (action) => {
1867
1883
  ) : null
1868
1884
  ] });
1869
1885
  };
1886
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
1887
+ &:hover {
1888
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
1889
+ }
1890
+ `;
1870
1891
  const DocumentActionsMenu = ({
1871
1892
  actions: actions2,
1872
1893
  children,
@@ -1925,48 +1946,32 @@ const DocumentActionsMenu = ({
1925
1946
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1926
1947
  actions2.map((action) => {
1927
1948
  return /* @__PURE__ */ jsxRuntime.jsx(
1928
- designSystem.Menu.Item,
1949
+ MenuItem,
1929
1950
  {
1930
1951
  disabled: action.disabled,
1931
1952
  onSelect: handleClick(action),
1932
1953
  display: "block",
1933
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1934
- /* @__PURE__ */ jsxRuntime.jsxs(
1935
- designSystem.Flex,
1936
- {
1937
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1938
- gap: 2,
1939
- tag: "span",
1940
- children: [
1941
- /* @__PURE__ */ jsxRuntime.jsx(
1942
- designSystem.Flex,
1943
- {
1944
- tag: "span",
1945
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1946
- children: action.icon
1947
- }
1948
- ),
1949
- action.label
1950
- ]
1951
- }
1952
- ),
1953
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1954
- designSystem.Flex,
1955
- {
1956
- alignItems: "center",
1957
- background: "alternative100",
1958
- borderStyle: "solid",
1959
- borderColor: "alternative200",
1960
- borderWidth: "1px",
1961
- height: 5,
1962
- paddingLeft: 2,
1963
- paddingRight: 2,
1964
- hasRadius: true,
1965
- color: "alternative600",
1966
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1967
- }
1968
- )
1969
- ] })
1954
+ isVariantDanger: action.variant === "danger",
1955
+ isDisabled: action.disabled,
1956
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(
1957
+ designSystem.Flex,
1958
+ {
1959
+ color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1960
+ gap: 2,
1961
+ tag: "span",
1962
+ children: [
1963
+ /* @__PURE__ */ jsxRuntime.jsx(
1964
+ designSystem.Flex,
1965
+ {
1966
+ tag: "span",
1967
+ color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1968
+ children: action.icon
1969
+ }
1970
+ ),
1971
+ action.label
1972
+ ]
1973
+ }
1974
+ ) })
1970
1975
  },
1971
1976
  action.id
1972
1977
  );
@@ -2077,6 +2082,18 @@ const DocumentActionModal = ({
2077
2082
  typeof Footer === "function" ? /* @__PURE__ */ jsxRuntime.jsx(Footer, { onClose: handleClose }) : Footer
2078
2083
  ] }) });
2079
2084
  };
2085
+ const transformData = (data) => {
2086
+ if (Array.isArray(data)) {
2087
+ return data.map(transformData);
2088
+ }
2089
+ if (typeof data === "object" && data !== null) {
2090
+ if ("apiData" in data) {
2091
+ return data.apiData;
2092
+ }
2093
+ return mapValues__default.default(transformData)(data);
2094
+ }
2095
+ return data;
2096
+ };
2080
2097
  const PublishAction$1 = ({
2081
2098
  activeTab,
2082
2099
  documentId,
@@ -2091,6 +2108,7 @@ const PublishAction$1 = ({
2091
2108
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2092
2109
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2093
2110
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2111
+ const { id } = reactRouterDom.useParams();
2094
2112
  const { formatMessage } = reactIntl.useIntl();
2095
2113
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2096
2114
  const { publish } = useDocumentActions();
@@ -2190,13 +2208,15 @@ const PublishAction$1 = ({
2190
2208
  documentId,
2191
2209
  params
2192
2210
  },
2193
- formValues
2211
+ transformData(formValues)
2194
2212
  );
2195
2213
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2196
- navigate({
2197
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2198
- search: rawQuery
2199
- });
2214
+ if (id === "create") {
2215
+ navigate({
2216
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2217
+ search: rawQuery
2218
+ });
2219
+ }
2200
2220
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2201
2221
  setErrors(formatValidationErrors(res.error));
2202
2222
  }
@@ -2249,6 +2269,7 @@ const PublishAction$1 = ({
2249
2269
  };
2250
2270
  };
2251
2271
  PublishAction$1.type = "publish";
2272
+ PublishAction$1.position = "panel";
2252
2273
  const UpdateAction = ({
2253
2274
  activeTab,
2254
2275
  documentId,
@@ -2271,96 +2292,134 @@ const UpdateAction = ({
2271
2292
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2272
2293
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2273
2294
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2274
- return {
2275
- /**
2276
- * Disabled when:
2277
- * - the form is submitting
2278
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2279
- * - the active tab is the published tab
2280
- */
2281
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2282
- label: formatMessage({
2283
- id: "content-manager.containers.Edit.save",
2284
- defaultMessage: "Save"
2285
- }),
2286
- onClick: async () => {
2287
- setSubmitting(true);
2288
- try {
2289
- const { errors } = await validate(true, {
2290
- status: "draft"
2295
+ const handleUpdate = React__namespace.useCallback(async () => {
2296
+ setSubmitting(true);
2297
+ try {
2298
+ if (!modified) {
2299
+ return;
2300
+ }
2301
+ const { errors } = await validate(true, {
2302
+ status: "draft"
2303
+ });
2304
+ if (errors) {
2305
+ toggleNotification({
2306
+ type: "danger",
2307
+ message: formatMessage({
2308
+ id: "content-manager.validation.error",
2309
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2310
+ })
2291
2311
  });
2292
- if (errors) {
2293
- toggleNotification({
2294
- type: "danger",
2295
- message: formatMessage({
2296
- id: "content-manager.validation.error",
2297
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2298
- })
2299
- });
2300
- return;
2301
- }
2302
- if (isCloning) {
2303
- const res = await clone(
2304
- {
2305
- model,
2306
- documentId: cloneMatch.params.origin,
2307
- params
2308
- },
2309
- document
2310
- );
2311
- if ("data" in res) {
2312
- navigate(
2313
- {
2314
- pathname: `../${res.data.documentId}`,
2315
- search: rawQuery
2316
- },
2317
- { relative: "path" }
2318
- );
2319
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2320
- setErrors(formatValidationErrors(res.error));
2321
- }
2322
- } else if (documentId || collectionType === SINGLE_TYPES) {
2323
- const res = await update(
2312
+ return;
2313
+ }
2314
+ if (isCloning) {
2315
+ const res = await clone(
2316
+ {
2317
+ model,
2318
+ documentId: cloneMatch.params.origin,
2319
+ params
2320
+ },
2321
+ transformData(document)
2322
+ );
2323
+ if ("data" in res) {
2324
+ navigate(
2324
2325
  {
2325
- collectionType,
2326
- model,
2327
- documentId,
2328
- params
2326
+ pathname: `../${res.data.documentId}`,
2327
+ search: rawQuery
2329
2328
  },
2330
- document
2329
+ { relative: "path" }
2331
2330
  );
2332
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2333
- setErrors(formatValidationErrors(res.error));
2334
- } else {
2335
- resetForm();
2336
- }
2331
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2332
+ setErrors(formatValidationErrors(res.error));
2333
+ }
2334
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2335
+ const res = await update(
2336
+ {
2337
+ collectionType,
2338
+ model,
2339
+ documentId,
2340
+ params
2341
+ },
2342
+ transformData(document)
2343
+ );
2344
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2345
+ setErrors(formatValidationErrors(res.error));
2337
2346
  } else {
2338
- const res = await create(
2347
+ resetForm();
2348
+ }
2349
+ } else {
2350
+ const res = await create(
2351
+ {
2352
+ model,
2353
+ params
2354
+ },
2355
+ transformData(document)
2356
+ );
2357
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2358
+ navigate(
2339
2359
  {
2340
- model,
2341
- params
2360
+ pathname: `../${res.data.documentId}`,
2361
+ search: rawQuery
2342
2362
  },
2343
- document
2363
+ { replace: true, relative: "path" }
2344
2364
  );
2345
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2346
- navigate(
2347
- {
2348
- pathname: `../${res.data.documentId}`,
2349
- search: rawQuery
2350
- },
2351
- { replace: true, relative: "path" }
2352
- );
2353
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2354
- setErrors(formatValidationErrors(res.error));
2355
- }
2365
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2366
+ setErrors(formatValidationErrors(res.error));
2356
2367
  }
2357
- } finally {
2358
- setSubmitting(false);
2359
2368
  }
2369
+ } finally {
2370
+ setSubmitting(false);
2360
2371
  }
2372
+ }, [
2373
+ clone,
2374
+ cloneMatch?.params.origin,
2375
+ collectionType,
2376
+ create,
2377
+ document,
2378
+ documentId,
2379
+ formatMessage,
2380
+ formatValidationErrors,
2381
+ isCloning,
2382
+ model,
2383
+ modified,
2384
+ navigate,
2385
+ params,
2386
+ rawQuery,
2387
+ resetForm,
2388
+ setErrors,
2389
+ setSubmitting,
2390
+ toggleNotification,
2391
+ update,
2392
+ validate
2393
+ ]);
2394
+ React__namespace.useEffect(() => {
2395
+ const handleKeyDown = (e) => {
2396
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2397
+ e.preventDefault();
2398
+ handleUpdate();
2399
+ }
2400
+ };
2401
+ window.addEventListener("keydown", handleKeyDown);
2402
+ return () => {
2403
+ window.removeEventListener("keydown", handleKeyDown);
2404
+ };
2405
+ }, [handleUpdate]);
2406
+ return {
2407
+ /**
2408
+ * Disabled when:
2409
+ * - the form is submitting
2410
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2411
+ * - the active tab is the published tab
2412
+ */
2413
+ disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2414
+ label: formatMessage({
2415
+ id: "global.save",
2416
+ defaultMessage: "Save"
2417
+ }),
2418
+ onClick: handleUpdate
2361
2419
  };
2362
2420
  };
2363
2421
  UpdateAction.type = "update";
2422
+ UpdateAction.position = "panel";
2364
2423
  const UNPUBLISH_DRAFT_OPTIONS = {
2365
2424
  KEEP: "keep",
2366
2425
  DISCARD: "discard"
@@ -2483,6 +2542,7 @@ const UnpublishAction$1 = ({
2483
2542
  };
2484
2543
  };
2485
2544
  UnpublishAction$1.type = "unpublish";
2545
+ UnpublishAction$1.position = "panel";
2486
2546
  const DiscardAction = ({
2487
2547
  activeTab,
2488
2548
  documentId,
@@ -2533,6 +2593,7 @@ const DiscardAction = ({
2533
2593
  };
2534
2594
  };
2535
2595
  DiscardAction.type = "discard";
2596
+ DiscardAction.position = "panel";
2536
2597
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2537
2598
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2538
2599
  const RelativeTime = React__namespace.forwardRef(
@@ -2545,7 +2606,7 @@ const RelativeTime = React__namespace.forwardRef(
2545
2606
  });
2546
2607
  const unit = intervals.find((intervalUnit) => {
2547
2608
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2548
- });
2609
+ }) ?? "seconds";
2549
2610
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2550
2611
  const customInterval = customIntervals.find(
2551
2612
  (custom) => interval[custom.unit] < custom.threshold
@@ -2579,19 +2640,29 @@ const getDisplayName = ({
2579
2640
  return email ?? "";
2580
2641
  };
2581
2642
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2582
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2643
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2583
2644
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2584
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
2645
+ const { formatMessage } = reactIntl.useIntl();
2646
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, size, variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: formatMessage({
2647
+ id: `content-manager.containers.List.${status}`,
2648
+ defaultMessage: capitalise(status)
2649
+ }) }) });
2585
2650
  };
2586
2651
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2587
2652
  const { formatMessage } = reactIntl.useIntl();
2588
2653
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2654
+ const params = reactRouterDom.useParams();
2589
2655
  const title = isCreating ? formatMessage({
2590
2656
  id: "content-manager.containers.edit.title.new",
2591
2657
  defaultMessage: "Create an entry"
2592
2658
  }) : documentTitle;
2593
2659
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2594
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
2660
+ /* @__PURE__ */ jsxRuntime.jsx(
2661
+ strapiAdmin.BackButton,
2662
+ {
2663
+ fallback: params.collectionType === SINGLE_TYPES ? void 0 : `../${COLLECTION_TYPES}/${params.slug}`
2664
+ }
2665
+ ),
2595
2666
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2596
2667
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2597
2668
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2642,7 +2713,7 @@ const HeaderToolbar = () => {
2642
2713
  meta: isCloning ? void 0 : meta,
2643
2714
  collectionType
2644
2715
  },
2645
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2716
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2646
2717
  children: (actions2) => {
2647
2718
  const headerActions = actions2.filter((action) => {
2648
2719
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2850,6 +2921,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2850
2921
  };
2851
2922
  };
2852
2923
  ConfigureTheViewAction.type = "configure-the-view";
2924
+ ConfigureTheViewAction.position = "header";
2853
2925
  const EditTheModelAction = ({ model }) => {
2854
2926
  const navigate = reactRouterDom.useNavigate();
2855
2927
  const { formatMessage } = reactIntl.useIntl();
@@ -2866,6 +2938,7 @@ const EditTheModelAction = ({ model }) => {
2866
2938
  };
2867
2939
  };
2868
2940
  EditTheModelAction.type = "edit-the-model";
2941
+ EditTheModelAction.position = "header";
2869
2942
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2870
2943
  const navigate = reactRouterDom.useNavigate();
2871
2944
  const { formatMessage } = reactIntl.useIntl();
@@ -2939,6 +3012,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2939
3012
  };
2940
3013
  };
2941
3014
  DeleteAction$1.type = "delete";
3015
+ DeleteAction$1.position = ["header", "table-row"];
2942
3016
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2943
3017
  const Panels = () => {
2944
3018
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3001,7 +3075,7 @@ const ActionsPanelContent = () => {
3001
3075
  strapiAdmin.DescriptionComponentRenderer,
3002
3076
  {
3003
3077
  props,
3004
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3078
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3005
3079
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3006
3080
  }
3007
3081
  ),
@@ -3028,7 +3102,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
3028
3102
  justifyContent: "stretch",
3029
3103
  alignItems: "flex-start",
3030
3104
  children: [
3031
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", children: title }),
3105
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", textColor: "neutral600", children: title }),
3032
3106
  children
3033
3107
  ]
3034
3108
  }
@@ -3278,18 +3352,10 @@ const SelectedEntriesTableContent = ({
3278
3352
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3279
3353
  },
3280
3354
  state: { from: pathname },
3281
- label: formatMessage(
3282
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3283
- {
3284
- target: formatMessage(
3285
- {
3286
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3287
- defaultMessage: "item line {number}"
3288
- },
3289
- { number: index2 + 1 }
3290
- )
3291
- }
3292
- ),
3355
+ label: formatMessage({
3356
+ id: "content-manager.bulk-publish.edit",
3357
+ defaultMessage: "Edit"
3358
+ }),
3293
3359
  target: "_blank",
3294
3360
  marginLeft: "auto",
3295
3361
  variant: "ghost",
@@ -3463,8 +3529,7 @@ const PublishAction = ({ documents, model }) => {
3463
3529
  const refetchList = () => {
3464
3530
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3465
3531
  };
3466
- if (!showPublishButton)
3467
- return null;
3532
+ if (!showPublishButton) return null;
3468
3533
  return {
3469
3534
  actionType: "publish",
3470
3535
  variant: "tertiary",
@@ -3532,8 +3597,7 @@ const DeleteAction = ({ documents, model }) => {
3532
3597
  selectRow([]);
3533
3598
  }
3534
3599
  };
3535
- if (!hasDeletePermission)
3536
- return null;
3600
+ if (!hasDeletePermission) return null;
3537
3601
  return {
3538
3602
  variant: "danger-light",
3539
3603
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3582,8 +3646,7 @@ const UnpublishAction = ({ documents, model }) => {
3582
3646
  }
3583
3647
  };
3584
3648
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3585
- if (!showUnpublishButton)
3586
- return null;
3649
+ if (!showUnpublishButton) return null;
3587
3650
  return {
3588
3651
  variant: "tertiary",
3589
3652
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3688,7 +3751,7 @@ const TableActions = ({ document }) => {
3688
3751
  strapiAdmin.DescriptionComponentRenderer,
3689
3752
  {
3690
3753
  props,
3691
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3754
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3692
3755
  children: (actions2) => {
3693
3756
  const tableRowActions = actions2.filter((action) => {
3694
3757
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3747,6 +3810,7 @@ const EditAction = ({ documentId }) => {
3747
3810
  };
3748
3811
  };
3749
3812
  EditAction.type = "edit";
3813
+ EditAction.position = "table-row";
3750
3814
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3751
3815
  path {
3752
3816
  fill: currentColor;
@@ -3823,6 +3887,7 @@ const CloneAction = ({ model, documentId }) => {
3823
3887
  };
3824
3888
  };
3825
3889
  CloneAction.type = "clone";
3890
+ CloneAction.position = "table-row";
3826
3891
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3827
3892
  path {
3828
3893
  fill: currentColor;
@@ -3909,7 +3974,14 @@ class ContentManagerPlugin {
3909
3974
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3910
3975
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3911
3976
  getBulkActions: () => this.bulkActions,
3912
- getDocumentActions: () => this.documentActions,
3977
+ getDocumentActions: (position) => {
3978
+ if (position) {
3979
+ return this.documentActions.filter(
3980
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
3981
+ );
3982
+ }
3983
+ return this.documentActions;
3984
+ },
3913
3985
  getEditViewSidePanels: () => this.editViewSidePanels,
3914
3986
  getHeaderActions: () => this.headerActions
3915
3987
  }
@@ -3919,10 +3991,8 @@ class ContentManagerPlugin {
3919
3991
  const getPrintableType = (value) => {
3920
3992
  const nativeType = typeof value;
3921
3993
  if (nativeType === "object") {
3922
- if (value === null)
3923
- return "null";
3924
- if (Array.isArray(value))
3925
- return "array";
3994
+ if (value === null) return "null";
3995
+ if (Array.isArray(value)) return "array";
3926
3996
  if (value instanceof Object && value.constructor.name !== "Object") {
3927
3997
  return value.constructor.name;
3928
3998
  }
@@ -3933,17 +4003,27 @@ const HistoryAction = ({ model, document }) => {
3933
4003
  const { formatMessage } = reactIntl.useIntl();
3934
4004
  const [{ query }] = strapiAdmin.useQueryParams();
3935
4005
  const navigate = reactRouterDom.useNavigate();
4006
+ const { trackUsage } = strapiAdmin.useTracking();
4007
+ const { pathname } = reactRouterDom.useLocation();
3936
4008
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3937
4009
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3938
4010
  return null;
3939
4011
  }
4012
+ const handleOnClick = () => {
4013
+ const destination = { pathname: "history", search: pluginsQueryParams };
4014
+ trackUsage("willNavigate", {
4015
+ from: pathname,
4016
+ to: `${pathname}/${destination.pathname}`
4017
+ });
4018
+ navigate(destination);
4019
+ };
3940
4020
  return {
3941
4021
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3942
4022
  label: formatMessage({
3943
4023
  id: "content-manager.history.document-action",
3944
4024
  defaultMessage: "Content History"
3945
4025
  }),
3946
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4026
+ onClick: handleOnClick,
3947
4027
  disabled: (
3948
4028
  /**
3949
4029
  * The user is creating a new document.
@@ -3965,6 +4045,7 @@ const HistoryAction = ({ model, document }) => {
3965
4045
  };
3966
4046
  };
3967
4047
  HistoryAction.type = "history";
4048
+ HistoryAction.position = "header";
3968
4049
  const historyAdmin = {
3969
4050
  bootstrap(app) {
3970
4051
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4011,6 +4092,90 @@ const { setInitialData } = actions;
4011
4092
  const reducer = toolkit.combineReducers({
4012
4093
  app: reducer$1
4013
4094
  });
4095
+ const previewApi = contentManagerApi.injectEndpoints({
4096
+ endpoints: (builder) => ({
4097
+ getPreviewUrl: builder.query({
4098
+ query({ query, params }) {
4099
+ return {
4100
+ url: `/content-manager/preview/url/${params.contentType}`,
4101
+ method: "GET",
4102
+ config: {
4103
+ params: query
4104
+ }
4105
+ };
4106
+ }
4107
+ })
4108
+ })
4109
+ });
4110
+ const { useGetPreviewUrlQuery } = previewApi;
4111
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4112
+ if (isShown) {
4113
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
4114
+ }
4115
+ return children;
4116
+ };
4117
+ const PreviewSidePanel = ({ model, documentId, document }) => {
4118
+ const { formatMessage } = reactIntl.useIntl();
4119
+ const { trackUsage } = strapiAdmin.useTracking();
4120
+ const { pathname } = reactRouterDom.useLocation();
4121
+ const [{ query }] = strapiAdmin.useQueryParams();
4122
+ const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
4123
+ const { data, error } = useGetPreviewUrlQuery({
4124
+ params: {
4125
+ contentType: model
4126
+ },
4127
+ query: {
4128
+ documentId,
4129
+ locale: document?.locale,
4130
+ status: document?.status
4131
+ }
4132
+ });
4133
+ if (!data?.data?.url || error) {
4134
+ return null;
4135
+ }
4136
+ const trackNavigation = () => {
4137
+ const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
4138
+ trackUsage("willNavigate", { from: pathname, to: destinationPathname });
4139
+ };
4140
+ return {
4141
+ title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4142
+ content: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { gap: 2, width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4143
+ ConditionalTooltip,
4144
+ {
4145
+ label: formatMessage({
4146
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4147
+ defaultMessage: "Please save to open the preview"
4148
+ }),
4149
+ isShown: isModified,
4150
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4151
+ designSystem.Button,
4152
+ {
4153
+ variant: "tertiary",
4154
+ tag: reactRouterDom.Link,
4155
+ to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4156
+ onClick: trackNavigation,
4157
+ flex: "auto",
4158
+ disabled: isModified,
4159
+ children: formatMessage({
4160
+ id: "content-manager.preview.panel.button",
4161
+ defaultMessage: "Open preview"
4162
+ })
4163
+ }
4164
+ )
4165
+ }
4166
+ ) })
4167
+ };
4168
+ };
4169
+ const FEATURE_ID = "preview";
4170
+ const previewAdmin = {
4171
+ bootstrap(app) {
4172
+ if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4173
+ return;
4174
+ }
4175
+ const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4176
+ contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4177
+ }
4178
+ };
4014
4179
  const index = {
4015
4180
  register(app) {
4016
4181
  const cm = new ContentManagerPlugin();
@@ -4030,7 +4195,7 @@ const index = {
4030
4195
  app.router.addRoute({
4031
4196
  path: "content-manager/*",
4032
4197
  lazy: async () => {
4033
- const { Layout } = await Promise.resolve().then(() => require("./layout-DDtbDqUd.js"));
4198
+ const { Layout } = await Promise.resolve().then(() => require("./layout-aYm7fih0.js"));
4034
4199
  return {
4035
4200
  Component: Layout
4036
4201
  };
@@ -4043,11 +4208,14 @@ const index = {
4043
4208
  if (typeof historyAdmin.bootstrap === "function") {
4044
4209
  historyAdmin.bootstrap(app);
4045
4210
  }
4211
+ if (typeof previewAdmin.bootstrap === "function") {
4212
+ previewAdmin.bootstrap(app);
4213
+ }
4046
4214
  },
4047
4215
  async registerTrads({ locales }) {
4048
4216
  const importedTrads = await Promise.all(
4049
4217
  locales.map((locale) => {
4050
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-Bm0D0IWz.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-EUonQTon.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B7kGGg3E.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-CcFe8diO.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
4218
+ 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-BK8Xyl5I.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-B2Kyv8Z9.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-7sfIbjxE.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
4051
4219
  return {
4052
4220
  data: prefixPluginTranslations(data, PLUGIN_ID),
4053
4221
  locale
@@ -4105,5 +4273,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4105
4273
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4106
4274
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4107
4275
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4276
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4108
4277
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4109
- //# sourceMappingURL=index-B9u01WiI.js.map
4278
+ //# sourceMappingURL=index-hR3DeJ4w.js.map