@strapi/content-manager 0.0.0-experimental.65b9961ce81496e349024ceb95be1d5946f2c429 → 0.0.0-experimental.691d2b5196cc7faea5a7c4d25476984d37d7c3a4

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 (179) 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-CO977CPh.js → ComponentConfigurationPage-2VkuOOYr.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-CO977CPh.js.map → ComponentConfigurationPage-2VkuOOYr.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CQroR9Qk.mjs → ComponentConfigurationPage-SrapFfwJ.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-CQroR9Qk.mjs.map → ComponentConfigurationPage-SrapFfwJ.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-tVCJ5vWC.mjs → EditConfigurationPage-BaXHpoyN.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-tVCJ5vWC.mjs.map → EditConfigurationPage-BaXHpoyN.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-BPgoE-kf.js → EditConfigurationPage-Djm8wb1Y.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-BPgoE-kf.js.map → EditConfigurationPage-Djm8wb1Y.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-BMVgUNOX.js → EditViewPage-CZ4LrV-l.js} +38 -9
  15. package/dist/_chunks/EditViewPage-CZ4LrV-l.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-8mOu02ji.mjs → EditViewPage-Wiz1gQp3.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-Wiz1gQp3.mjs.map +1 -0
  18. package/dist/_chunks/{Field-CdSLKFQk.js → Field-DJoWPKVJ.js} +151 -72
  19. package/dist/_chunks/Field-DJoWPKVJ.js.map +1 -0
  20. package/dist/_chunks/{Field-CJPYzwD7.mjs → Field-OWmo5QQW.mjs} +149 -70
  21. package/dist/_chunks/Field-OWmo5QQW.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-DJOJ-GF1.mjs → Form-BhecEYBS.mjs} +3 -3
  25. package/dist/_chunks/{Form-DJOJ-GF1.mjs.map → Form-BhecEYBS.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-eP5bZwap.js → Form-XGWM-zvH.js} +5 -6
  27. package/dist/_chunks/{Form-eP5bZwap.js.map → Form-XGWM-zvH.js.map} +1 -1
  28. package/dist/_chunks/{History-MnQLtk1g.mjs → History-B1s27OP8.mjs} +23 -93
  29. package/dist/_chunks/History-B1s27OP8.mjs.map +1 -0
  30. package/dist/_chunks/{History-B-Mrquzu.js → History-BRlM_ftM.js} +23 -94
  31. package/dist/_chunks/History-BRlM_ftM.js.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-C0n4rUzH.js → ListConfigurationPage-B4AZXRwe.js} +6 -6
  33. package/dist/_chunks/ListConfigurationPage-B4AZXRwe.js.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-BcycI8Lw.mjs → ListConfigurationPage-QfLx0B1W.mjs} +6 -5
  35. package/dist/_chunks/ListConfigurationPage-QfLx0B1W.mjs.map +1 -0
  36. package/dist/_chunks/{ListViewPage-q0SHVPUS.js → ListViewPage-CVP6oaIp.js} +63 -41
  37. package/dist/_chunks/ListViewPage-CVP6oaIp.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-CRXONXwZ.mjs → ListViewPage-cKB332iw.mjs} +62 -39
  39. package/dist/_chunks/ListViewPage-cKB332iw.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-ukzFRF3z.mjs → NoContentTypePage-CbB86Gae.mjs} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-ukzFRF3z.mjs.map → NoContentTypePage-CbB86Gae.mjs.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-Bh3komDV.js → NoContentTypePage-g1Ehw2a0.js} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-Bh3komDV.js.map → NoContentTypePage-g1Ehw2a0.js.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-B4sD7Ble.mjs → NoPermissionsPage-BqlR5MlW.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-B4sD7Ble.mjs.map → NoPermissionsPage-BqlR5MlW.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-BGBpj_Y1.js → NoPermissionsPage-ftLrJ4GX.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-BGBpj_Y1.js.map → NoPermissionsPage-ftLrJ4GX.js.map} +1 -1
  48. package/dist/_chunks/Preview-Bs0qQJIk.mjs +294 -0
  49. package/dist/_chunks/Preview-Bs0qQJIk.mjs.map +1 -0
  50. package/dist/_chunks/Preview-DgfJYT-q.js +312 -0
  51. package/dist/_chunks/Preview-DgfJYT-q.js.map +1 -0
  52. package/dist/_chunks/{Relations-CIexb8gr.mjs → Relations-7-hdL6ij.mjs} +47 -22
  53. package/dist/_chunks/Relations-7-hdL6ij.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-B53wYe8g.js → Relations-CdzluOWH.js} +47 -23
  55. package/dist/_chunks/Relations-CdzluOWH.js.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-DbT2sx-Q.js → index-092_Fn90.js} +349 -179
  70. package/dist/_chunks/index-092_Fn90.js.map +1 -0
  71. package/dist/_chunks/{index-CJ2vYwuT.mjs → index-ChZpuvhX.mjs} +351 -181
  72. package/dist/_chunks/index-ChZpuvhX.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-vzKSrr7p.mjs → layout-BH5DUsgt.mjs} +4 -4
  78. package/dist/_chunks/{layout-vzKSrr7p.mjs.map → layout-BH5DUsgt.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-CeBSIkmP.js → layout-Ur1fMqO3.js} +5 -6
  80. package/dist/_chunks/{layout-CeBSIkmP.js.map → layout-Ur1fMqO3.js.map} +1 -1
  81. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  82. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  83. package/dist/_chunks/{relations-Cl-6t9iz.js → relations-BacnkRuU.js} +6 -7
  84. package/dist/_chunks/relations-BacnkRuU.js.map +1 -0
  85. package/dist/_chunks/{relations-DI0lguF0.mjs → relations-D6hi0DM0.mjs} +6 -7
  86. package/dist/_chunks/relations-D6hi0DM0.mjs.map +1 -0
  87. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  88. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  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/admin/index.js +1 -1
  94. package/dist/admin/index.mjs +4 -4
  95. package/dist/admin/src/content-manager.d.ts +3 -2
  96. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  97. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  98. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  99. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  100. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  101. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  102. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  103. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  104. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -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 +405 -180
  112. package/dist/server/index.js.map +1 -1
  113. package/dist/server/index.mjs +405 -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/controllers/index.d.ts +2 -0
  125. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  126. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  127. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  128. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  129. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  130. package/dist/server/src/preview/index.d.ts +4 -0
  131. package/dist/server/src/preview/index.d.ts.map +1 -0
  132. package/dist/server/src/preview/routes/index.d.ts +8 -0
  133. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  134. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  135. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  136. package/dist/server/src/preview/services/index.d.ts +16 -0
  137. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  138. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  139. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  140. package/dist/server/src/preview/services/preview.d.ts +12 -0
  141. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  142. package/dist/server/src/preview/utils.d.ts +19 -0
  143. package/dist/server/src/preview/utils.d.ts.map +1 -0
  144. package/dist/server/src/register.d.ts.map +1 -1
  145. package/dist/server/src/routes/index.d.ts.map +1 -1
  146. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  147. package/dist/server/src/services/document-metadata.d.ts +8 -8
  148. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  149. package/dist/server/src/services/index.d.ts +4 -4
  150. package/dist/server/src/services/index.d.ts.map +1 -1
  151. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  152. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  153. package/dist/server/src/utils/index.d.ts +2 -0
  154. package/dist/server/src/utils/index.d.ts.map +1 -1
  155. package/dist/shared/contracts/index.d.ts +1 -0
  156. package/dist/shared/contracts/index.d.ts.map +1 -1
  157. package/dist/shared/contracts/preview.d.ts +27 -0
  158. package/dist/shared/contracts/preview.d.ts.map +1 -0
  159. package/dist/shared/index.js +4 -0
  160. package/dist/shared/index.js.map +1 -1
  161. package/dist/shared/index.mjs +4 -0
  162. package/dist/shared/index.mjs.map +1 -1
  163. package/package.json +13 -11
  164. package/dist/_chunks/EditViewPage-8mOu02ji.mjs.map +0 -1
  165. package/dist/_chunks/EditViewPage-BMVgUNOX.js.map +0 -1
  166. package/dist/_chunks/Field-CJPYzwD7.mjs.map +0 -1
  167. package/dist/_chunks/Field-CdSLKFQk.js.map +0 -1
  168. package/dist/_chunks/History-B-Mrquzu.js.map +0 -1
  169. package/dist/_chunks/History-MnQLtk1g.mjs.map +0 -1
  170. package/dist/_chunks/ListConfigurationPage-BcycI8Lw.mjs.map +0 -1
  171. package/dist/_chunks/ListConfigurationPage-C0n4rUzH.js.map +0 -1
  172. package/dist/_chunks/ListViewPage-CRXONXwZ.mjs.map +0 -1
  173. package/dist/_chunks/ListViewPage-q0SHVPUS.js.map +0 -1
  174. package/dist/_chunks/Relations-B53wYe8g.js.map +0 -1
  175. package/dist/_chunks/Relations-CIexb8gr.mjs.map +0 -1
  176. package/dist/_chunks/index-CJ2vYwuT.mjs.map +0 -1
  177. package/dist/_chunks/index-DbT2sx-Q.js.map +0 -1
  178. package/dist/_chunks/relations-Cl-6t9iz.js.map +0 -1
  179. package/dist/_chunks/relations-DI0lguF0.mjs.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
  }, []);
@@ -1682,10 +1687,10 @@ const useDocumentActions = () => {
1682
1687
  update
1683
1688
  };
1684
1689
  };
1685
- const ProtectedHistoryPage = React.lazy(
1686
- () => Promise.resolve().then(() => require("./History-B-Mrquzu.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
+ const ProtectedHistoryPage = React__namespace.lazy(
1691
+ () => Promise.resolve().then(() => require("./History-BRlM_ftM.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1687
1692
  );
1688
- const routes$1 = [
1693
+ const routes$2 = [
1689
1694
  {
1690
1695
  path: ":collectionType/:slug/:id/history",
1691
1696
  Component: ProtectedHistoryPage
@@ -1695,32 +1700,45 @@ const routes$1 = [
1695
1700
  Component: ProtectedHistoryPage
1696
1701
  }
1697
1702
  ];
1703
+ const ProtectedPreviewPage = React__namespace.lazy(
1704
+ () => Promise.resolve().then(() => require("./Preview-DgfJYT-q.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
+ ];
1698
1716
  const ProtectedEditViewPage = React.lazy(
1699
- () => Promise.resolve().then(() => require("./EditViewPage-BMVgUNOX.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1717
+ () => Promise.resolve().then(() => require("./EditViewPage-CZ4LrV-l.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1700
1718
  );
1701
1719
  const ProtectedListViewPage = React.lazy(
1702
- () => Promise.resolve().then(() => require("./ListViewPage-q0SHVPUS.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1720
+ () => Promise.resolve().then(() => require("./ListViewPage-CVP6oaIp.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1703
1721
  );
1704
1722
  const ProtectedListConfiguration = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListConfigurationPage-C0n4rUzH.js")).then((mod) => ({
1723
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-B4AZXRwe.js")).then((mod) => ({
1706
1724
  default: mod.ProtectedListConfiguration
1707
1725
  }))
1708
1726
  );
1709
1727
  const ProtectedEditConfigurationPage = React.lazy(
1710
- () => Promise.resolve().then(() => require("./EditConfigurationPage-BPgoE-kf.js")).then((mod) => ({
1728
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-Djm8wb1Y.js")).then((mod) => ({
1711
1729
  default: mod.ProtectedEditConfigurationPage
1712
1730
  }))
1713
1731
  );
1714
1732
  const ProtectedComponentConfigurationPage = React.lazy(
1715
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-CO977CPh.js")).then((mod) => ({
1733
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-2VkuOOYr.js")).then((mod) => ({
1716
1734
  default: mod.ProtectedComponentConfigurationPage
1717
1735
  }))
1718
1736
  );
1719
1737
  const NoPermissions = React.lazy(
1720
- () => Promise.resolve().then(() => require("./NoPermissionsPage-BGBpj_Y1.js")).then((mod) => ({ default: mod.NoPermissions }))
1738
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-ftLrJ4GX.js")).then((mod) => ({ default: mod.NoPermissions }))
1721
1739
  );
1722
1740
  const NoContentType = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoContentTypePage-Bh3komDV.js")).then((mod) => ({ default: mod.NoContentType }))
1741
+ () => Promise.resolve().then(() => require("./NoContentTypePage-g1Ehw2a0.js")).then((mod) => ({ default: mod.NoContentType }))
1724
1742
  );
1725
1743
  const CollectionTypePages = () => {
1726
1744
  const { collectionType } = reactRouterDom.useParams();
@@ -1732,7 +1750,7 @@ const CollectionTypePages = () => {
1732
1750
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1733
1751
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1734
1752
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1735
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1753
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1736
1754
  const routes = [
1737
1755
  {
1738
1756
  path: LIST_RELATIVE_PATH,
@@ -1766,6 +1784,7 @@ const routes = [
1766
1784
  path: "no-content-types",
1767
1785
  Component: NoContentType
1768
1786
  },
1787
+ ...routes$2,
1769
1788
  ...routes$1
1770
1789
  ];
1771
1790
  const DocumentActions = ({ actions: actions2 }) => {
@@ -1864,6 +1883,11 @@ const DocumentActionButton = (action) => {
1864
1883
  ) : null
1865
1884
  ] });
1866
1885
  };
1886
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
1887
+ &:hover {
1888
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
1889
+ }
1890
+ `;
1867
1891
  const DocumentActionsMenu = ({
1868
1892
  actions: actions2,
1869
1893
  children,
@@ -1922,48 +1946,32 @@ const DocumentActionsMenu = ({
1922
1946
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1923
1947
  actions2.map((action) => {
1924
1948
  return /* @__PURE__ */ jsxRuntime.jsx(
1925
- designSystem.Menu.Item,
1949
+ MenuItem,
1926
1950
  {
1927
1951
  disabled: action.disabled,
1928
1952
  onSelect: handleClick(action),
1929
1953
  display: "block",
1930
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1931
- /* @__PURE__ */ jsxRuntime.jsxs(
1932
- designSystem.Flex,
1933
- {
1934
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1935
- gap: 2,
1936
- tag: "span",
1937
- children: [
1938
- /* @__PURE__ */ jsxRuntime.jsx(
1939
- designSystem.Flex,
1940
- {
1941
- tag: "span",
1942
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1943
- children: action.icon
1944
- }
1945
- ),
1946
- action.label
1947
- ]
1948
- }
1949
- ),
1950
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1951
- designSystem.Flex,
1952
- {
1953
- alignItems: "center",
1954
- background: "alternative100",
1955
- borderStyle: "solid",
1956
- borderColor: "alternative200",
1957
- borderWidth: "1px",
1958
- height: 5,
1959
- paddingLeft: 2,
1960
- paddingRight: 2,
1961
- hasRadius: true,
1962
- color: "alternative600",
1963
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1964
- }
1965
- )
1966
- ] })
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
+ ) })
1967
1975
  },
1968
1976
  action.id
1969
1977
  );
@@ -2074,6 +2082,18 @@ const DocumentActionModal = ({
2074
2082
  typeof Footer === "function" ? /* @__PURE__ */ jsxRuntime.jsx(Footer, { onClose: handleClose }) : Footer
2075
2083
  ] }) });
2076
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
+ };
2077
2097
  const PublishAction$1 = ({
2078
2098
  activeTab,
2079
2099
  documentId,
@@ -2088,6 +2108,7 @@ const PublishAction$1 = ({
2088
2108
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2089
2109
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2090
2110
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2111
+ const { id } = reactRouterDom.useParams();
2091
2112
  const { formatMessage } = reactIntl.useIntl();
2092
2113
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2093
2114
  const { publish } = useDocumentActions();
@@ -2187,13 +2208,15 @@ const PublishAction$1 = ({
2187
2208
  documentId,
2188
2209
  params
2189
2210
  },
2190
- formValues
2211
+ transformData(formValues)
2191
2212
  );
2192
2213
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2193
- navigate({
2194
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2195
- search: rawQuery
2196
- });
2214
+ if (id === "create") {
2215
+ navigate({
2216
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2217
+ search: rawQuery
2218
+ });
2219
+ }
2197
2220
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2198
2221
  setErrors(formatValidationErrors(res.error));
2199
2222
  }
@@ -2246,6 +2269,7 @@ const PublishAction$1 = ({
2246
2269
  };
2247
2270
  };
2248
2271
  PublishAction$1.type = "publish";
2272
+ PublishAction$1.position = "panel";
2249
2273
  const UpdateAction = ({
2250
2274
  activeTab,
2251
2275
  documentId,
@@ -2268,96 +2292,134 @@ const UpdateAction = ({
2268
2292
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2269
2293
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2270
2294
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2271
- return {
2272
- /**
2273
- * Disabled when:
2274
- * - the form is submitting
2275
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2276
- * - the active tab is the published tab
2277
- */
2278
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2279
- label: formatMessage({
2280
- id: "content-manager.containers.Edit.save",
2281
- defaultMessage: "Save"
2282
- }),
2283
- onClick: async () => {
2284
- setSubmitting(true);
2285
- try {
2286
- const { errors } = await validate(true, {
2287
- status: "draft"
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
+ })
2288
2311
  });
2289
- if (errors) {
2290
- toggleNotification({
2291
- type: "danger",
2292
- message: formatMessage({
2293
- id: "content-manager.validation.error",
2294
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2295
- })
2296
- });
2297
- return;
2298
- }
2299
- if (isCloning) {
2300
- const res = await clone(
2301
- {
2302
- model,
2303
- documentId: cloneMatch.params.origin,
2304
- params
2305
- },
2306
- document
2307
- );
2308
- if ("data" in res) {
2309
- navigate(
2310
- {
2311
- pathname: `../${res.data.documentId}`,
2312
- search: rawQuery
2313
- },
2314
- { relative: "path" }
2315
- );
2316
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2317
- setErrors(formatValidationErrors(res.error));
2318
- }
2319
- } else if (documentId || collectionType === SINGLE_TYPES) {
2320
- const res = await update(
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(
2321
2325
  {
2322
- collectionType,
2323
- model,
2324
- documentId,
2325
- params
2326
+ pathname: `../${res.data.documentId}`,
2327
+ search: rawQuery
2326
2328
  },
2327
- document
2329
+ { relative: "path" }
2328
2330
  );
2329
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2330
- setErrors(formatValidationErrors(res.error));
2331
- } else {
2332
- resetForm();
2333
- }
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));
2334
2346
  } else {
2335
- 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(
2336
2359
  {
2337
- model,
2338
- params
2360
+ pathname: `../${res.data.documentId}`,
2361
+ search: rawQuery
2339
2362
  },
2340
- document
2363
+ { replace: true, relative: "path" }
2341
2364
  );
2342
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2343
- navigate(
2344
- {
2345
- pathname: `../${res.data.documentId}`,
2346
- search: rawQuery
2347
- },
2348
- { replace: true, relative: "path" }
2349
- );
2350
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2351
- setErrors(formatValidationErrors(res.error));
2352
- }
2365
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2366
+ setErrors(formatValidationErrors(res.error));
2353
2367
  }
2354
- } finally {
2355
- setSubmitting(false);
2356
2368
  }
2369
+ } finally {
2370
+ setSubmitting(false);
2357
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
2358
2419
  };
2359
2420
  };
2360
2421
  UpdateAction.type = "update";
2422
+ UpdateAction.position = "panel";
2361
2423
  const UNPUBLISH_DRAFT_OPTIONS = {
2362
2424
  KEEP: "keep",
2363
2425
  DISCARD: "discard"
@@ -2480,6 +2542,7 @@ const UnpublishAction$1 = ({
2480
2542
  };
2481
2543
  };
2482
2544
  UnpublishAction$1.type = "unpublish";
2545
+ UnpublishAction$1.position = "panel";
2483
2546
  const DiscardAction = ({
2484
2547
  activeTab,
2485
2548
  documentId,
@@ -2530,6 +2593,7 @@ const DiscardAction = ({
2530
2593
  };
2531
2594
  };
2532
2595
  DiscardAction.type = "discard";
2596
+ DiscardAction.position = "panel";
2533
2597
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2534
2598
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2535
2599
  const RelativeTime = React__namespace.forwardRef(
@@ -2542,7 +2606,7 @@ const RelativeTime = React__namespace.forwardRef(
2542
2606
  });
2543
2607
  const unit = intervals.find((intervalUnit) => {
2544
2608
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2545
- });
2609
+ }) ?? "seconds";
2546
2610
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2547
2611
  const customInterval = customIntervals.find(
2548
2612
  (custom) => interval[custom.unit] < custom.threshold
@@ -2576,19 +2640,29 @@ const getDisplayName = ({
2576
2640
  return email ?? "";
2577
2641
  };
2578
2642
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2579
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2643
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2580
2644
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2581
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
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
+ }) }) });
2582
2650
  };
2583
2651
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2584
2652
  const { formatMessage } = reactIntl.useIntl();
2585
2653
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2654
+ const params = reactRouterDom.useParams();
2586
2655
  const title = isCreating ? formatMessage({
2587
2656
  id: "content-manager.containers.edit.title.new",
2588
2657
  defaultMessage: "Create an entry"
2589
2658
  }) : documentTitle;
2590
2659
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2591
- /* @__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
+ ),
2592
2666
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2593
2667
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2594
2668
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2639,7 +2713,7 @@ const HeaderToolbar = () => {
2639
2713
  meta: isCloning ? void 0 : meta,
2640
2714
  collectionType
2641
2715
  },
2642
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2716
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2643
2717
  children: (actions2) => {
2644
2718
  const headerActions = actions2.filter((action) => {
2645
2719
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2847,6 +2921,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2847
2921
  };
2848
2922
  };
2849
2923
  ConfigureTheViewAction.type = "configure-the-view";
2924
+ ConfigureTheViewAction.position = "header";
2850
2925
  const EditTheModelAction = ({ model }) => {
2851
2926
  const navigate = reactRouterDom.useNavigate();
2852
2927
  const { formatMessage } = reactIntl.useIntl();
@@ -2863,6 +2938,7 @@ const EditTheModelAction = ({ model }) => {
2863
2938
  };
2864
2939
  };
2865
2940
  EditTheModelAction.type = "edit-the-model";
2941
+ EditTheModelAction.position = "header";
2866
2942
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2867
2943
  const navigate = reactRouterDom.useNavigate();
2868
2944
  const { formatMessage } = reactIntl.useIntl();
@@ -2936,6 +3012,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2936
3012
  };
2937
3013
  };
2938
3014
  DeleteAction$1.type = "delete";
3015
+ DeleteAction$1.position = ["header", "table-row"];
2939
3016
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2940
3017
  const Panels = () => {
2941
3018
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -2998,7 +3075,7 @@ const ActionsPanelContent = () => {
2998
3075
  strapiAdmin.DescriptionComponentRenderer,
2999
3076
  {
3000
3077
  props,
3001
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3078
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3002
3079
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3003
3080
  }
3004
3081
  ),
@@ -3025,7 +3102,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
3025
3102
  justifyContent: "stretch",
3026
3103
  alignItems: "flex-start",
3027
3104
  children: [
3028
- /* @__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 }),
3029
3106
  children
3030
3107
  ]
3031
3108
  }
@@ -3275,18 +3352,10 @@ const SelectedEntriesTableContent = ({
3275
3352
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3276
3353
  },
3277
3354
  state: { from: pathname },
3278
- label: formatMessage(
3279
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3280
- {
3281
- target: formatMessage(
3282
- {
3283
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3284
- defaultMessage: "item line {number}"
3285
- },
3286
- { number: index2 + 1 }
3287
- )
3288
- }
3289
- ),
3355
+ label: formatMessage({
3356
+ id: "content-manager.bulk-publish.edit",
3357
+ defaultMessage: "Edit"
3358
+ }),
3290
3359
  target: "_blank",
3291
3360
  marginLeft: "auto",
3292
3361
  variant: "ghost",
@@ -3460,8 +3529,7 @@ const PublishAction = ({ documents, model }) => {
3460
3529
  const refetchList = () => {
3461
3530
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3462
3531
  };
3463
- if (!showPublishButton)
3464
- return null;
3532
+ if (!showPublishButton) return null;
3465
3533
  return {
3466
3534
  actionType: "publish",
3467
3535
  variant: "tertiary",
@@ -3529,8 +3597,7 @@ const DeleteAction = ({ documents, model }) => {
3529
3597
  selectRow([]);
3530
3598
  }
3531
3599
  };
3532
- if (!hasDeletePermission)
3533
- return null;
3600
+ if (!hasDeletePermission) return null;
3534
3601
  return {
3535
3602
  variant: "danger-light",
3536
3603
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3579,8 +3646,7 @@ const UnpublishAction = ({ documents, model }) => {
3579
3646
  }
3580
3647
  };
3581
3648
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3582
- if (!showUnpublishButton)
3583
- return null;
3649
+ if (!showUnpublishButton) return null;
3584
3650
  return {
3585
3651
  variant: "tertiary",
3586
3652
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3685,7 +3751,7 @@ const TableActions = ({ document }) => {
3685
3751
  strapiAdmin.DescriptionComponentRenderer,
3686
3752
  {
3687
3753
  props,
3688
- 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"),
3689
3755
  children: (actions2) => {
3690
3756
  const tableRowActions = actions2.filter((action) => {
3691
3757
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3744,6 +3810,7 @@ const EditAction = ({ documentId }) => {
3744
3810
  };
3745
3811
  };
3746
3812
  EditAction.type = "edit";
3813
+ EditAction.position = "table-row";
3747
3814
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3748
3815
  path {
3749
3816
  fill: currentColor;
@@ -3820,6 +3887,7 @@ const CloneAction = ({ model, documentId }) => {
3820
3887
  };
3821
3888
  };
3822
3889
  CloneAction.type = "clone";
3890
+ CloneAction.position = "table-row";
3823
3891
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3824
3892
  path {
3825
3893
  fill: currentColor;
@@ -3906,7 +3974,14 @@ class ContentManagerPlugin {
3906
3974
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3907
3975
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3908
3976
  getBulkActions: () => this.bulkActions,
3909
- 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
+ },
3910
3985
  getEditViewSidePanels: () => this.editViewSidePanels,
3911
3986
  getHeaderActions: () => this.headerActions
3912
3987
  }
@@ -3916,10 +3991,8 @@ class ContentManagerPlugin {
3916
3991
  const getPrintableType = (value) => {
3917
3992
  const nativeType = typeof value;
3918
3993
  if (nativeType === "object") {
3919
- if (value === null)
3920
- return "null";
3921
- if (Array.isArray(value))
3922
- return "array";
3994
+ if (value === null) return "null";
3995
+ if (Array.isArray(value)) return "array";
3923
3996
  if (value instanceof Object && value.constructor.name !== "Object") {
3924
3997
  return value.constructor.name;
3925
3998
  }
@@ -3930,17 +4003,27 @@ const HistoryAction = ({ model, document }) => {
3930
4003
  const { formatMessage } = reactIntl.useIntl();
3931
4004
  const [{ query }] = strapiAdmin.useQueryParams();
3932
4005
  const navigate = reactRouterDom.useNavigate();
4006
+ const { trackUsage } = strapiAdmin.useTracking();
4007
+ const { pathname } = reactRouterDom.useLocation();
3933
4008
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3934
4009
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3935
4010
  return null;
3936
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
+ };
3937
4020
  return {
3938
4021
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3939
4022
  label: formatMessage({
3940
4023
  id: "content-manager.history.document-action",
3941
4024
  defaultMessage: "Content History"
3942
4025
  }),
3943
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4026
+ onClick: handleOnClick,
3944
4027
  disabled: (
3945
4028
  /**
3946
4029
  * The user is creating a new document.
@@ -3962,6 +4045,7 @@ const HistoryAction = ({ model, document }) => {
3962
4045
  };
3963
4046
  };
3964
4047
  HistoryAction.type = "history";
4048
+ HistoryAction.position = "header";
3965
4049
  const historyAdmin = {
3966
4050
  bootstrap(app) {
3967
4051
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4008,6 +4092,88 @@ const { setInitialData } = actions;
4008
4092
  const reducer = toolkit.combineReducers({
4009
4093
  app: reducer$1
4010
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(
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(designSystem.Box, { cursor: "not-allowed", width: "100%", 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
+ width: "100%",
4158
+ disabled: isModified,
4159
+ pointerEvents: isModified ? "none" : void 0,
4160
+ tabIndex: isModified ? -1 : void 0,
4161
+ children: formatMessage({
4162
+ id: "content-manager.preview.panel.button",
4163
+ defaultMessage: "Open preview"
4164
+ })
4165
+ }
4166
+ ) })
4167
+ }
4168
+ )
4169
+ };
4170
+ };
4171
+ const previewAdmin = {
4172
+ bootstrap(app) {
4173
+ const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4174
+ contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4175
+ }
4176
+ };
4011
4177
  const index = {
4012
4178
  register(app) {
4013
4179
  const cm = new ContentManagerPlugin();
@@ -4027,7 +4193,7 @@ const index = {
4027
4193
  app.router.addRoute({
4028
4194
  path: "content-manager/*",
4029
4195
  lazy: async () => {
4030
- const { Layout } = await Promise.resolve().then(() => require("./layout-CeBSIkmP.js"));
4196
+ const { Layout } = await Promise.resolve().then(() => require("./layout-Ur1fMqO3.js"));
4031
4197
  return {
4032
4198
  Component: Layout
4033
4199
  };
@@ -4040,11 +4206,14 @@ const index = {
4040
4206
  if (typeof historyAdmin.bootstrap === "function") {
4041
4207
  historyAdmin.bootstrap(app);
4042
4208
  }
4209
+ if (typeof previewAdmin.bootstrap === "function") {
4210
+ previewAdmin.bootstrap(app);
4211
+ }
4043
4212
  },
4044
4213
  async registerTrads({ locales }) {
4045
4214
  const importedTrads = await Promise.all(
4046
4215
  locales.map((locale) => {
4047
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-Bm0D0IWz.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-EUonQTon.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-B7kGGg3E.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-CcFe8diO.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
4216
+ 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 }) => {
4048
4217
  return {
4049
4218
  data: prefixPluginTranslations(data, PLUGIN_ID),
4050
4219
  locale
@@ -4102,5 +4271,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4102
4271
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4103
4272
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4104
4273
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4274
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4105
4275
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4106
- //# sourceMappingURL=index-DbT2sx-Q.js.map
4276
+ //# sourceMappingURL=index-092_Fn90.js.map