@strapi/content-manager 0.0.0-next.b558642be856459a3e6c076f5d76fffbfc5fc5a1 → 0.0.0-next.b6435ada233136a0d0b14fba67961ff8f16cdac2

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 (171) 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-gsCd80MU.js → ComponentConfigurationPage-BlzvDpbX.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-BlzvDpbX.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-DaPOlQaD.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-DaPOlQaD.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-BglmD_BF.mjs → EditConfigurationPage-BZPXItXo.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-BZPXItXo.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-uy-v43AR.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-uy-v43AR.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-DT6A4ayX.js} +38 -9
  15. package/dist/_chunks/EditViewPage-DT6A4ayX.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-oOLeTySr.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-oOLeTySr.mjs.map +1 -0
  18. package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-D7dv2aUX.mjs} +169 -117
  19. package/dist/_chunks/Field-D7dv2aUX.mjs.map +1 -0
  20. package/dist/_chunks/{Field-DhXEK8y1.js → Field-kYFVIGiP.js} +171 -119
  21. package/dist/_chunks/Field-kYFVIGiP.js.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-CmNesrvR.mjs → Form-BxR6sc29.mjs} +3 -3
  25. package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-BxR6sc29.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-CwmJ4sWe.js → Form-CCijSg3V.js} +5 -6
  27. package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-CCijSg3V.js.map} +1 -1
  28. package/dist/_chunks/{History-BLCCNgCt.js → History-BMndx49M.js} +22 -93
  29. package/dist/_chunks/History-BMndx49M.js.map +1 -0
  30. package/dist/_chunks/{History-D-99Wh30.mjs → History-D8F7aYQU.mjs} +22 -92
  31. package/dist/_chunks/History-D8F7aYQU.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-DouY1EWM.js} +6 -6
  33. package/dist/_chunks/ListConfigurationPage-DouY1EWM.js.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-DqAdSPwC.mjs} +6 -5
  35. package/dist/_chunks/ListConfigurationPage-DqAdSPwC.mjs.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-BPVmh9pq.js} +64 -53
  37. package/dist/_chunks/ListViewPage-BPVmh9pq.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-C73F0jPh.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-C73F0jPh.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-B5w7iJOF.mjs} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-B5w7iJOF.mjs.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-BwcL--4H.js} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-BwcL--4H.js.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-BMFKVcwJ.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-BMFKVcwJ.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-UnEgMGK4.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-UnEgMGK4.mjs.map} +1 -1
  48. package/dist/_chunks/Preview-B7PR3Ok_.js +312 -0
  49. package/dist/_chunks/Preview-B7PR3Ok_.js.map +1 -0
  50. package/dist/_chunks/Preview-DECOhK0D.mjs +294 -0
  51. package/dist/_chunks/Preview-DECOhK0D.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-DinMQJ4B.mjs} +9 -8
  53. package/dist/_chunks/Relations-DinMQJ4B.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-lndx3aQk.js} +10 -10
  55. package/dist/_chunks/Relations-lndx3aQk.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-BrUzbQ30.mjs → index-C2SagWVW.mjs} +327 -183
  70. package/dist/_chunks/index-C2SagWVW.mjs.map +1 -0
  71. package/dist/_chunks/{index-BIWDoFLK.js → index-Cnw4gqee.js} +324 -181
  72. package/dist/_chunks/index-Cnw4gqee.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-_5-cXs34.mjs → layout-DY_D9MGA.mjs} +4 -4
  78. package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-DY_D9MGA.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-lMc9i1-Z.js → layout-ivwIVPnV.js} +5 -6
  80. package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-ivwIVPnV.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-BRHithi8.js → relations-B7C7O_Pv.js} +6 -3
  84. package/dist/_chunks/relations-B7C7O_Pv.js.map +1 -0
  85. package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-Boc5Y9kX.mjs} +6 -3
  86. package/dist/_chunks/relations-Boc5Y9kX.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 +1 -1
  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 +384 -233
  112. package/dist/server/index.js.map +1 -1
  113. package/dist/server/index.mjs +385 -233
  114. package/dist/server/index.mjs.map +1 -1
  115. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  116. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  117. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  118. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  119. package/dist/server/src/index.d.ts +3 -2
  120. package/dist/server/src/index.d.ts.map +1 -1
  121. package/dist/server/src/preview/controllers/preview.d.ts +6 -2
  122. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  123. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  124. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  125. package/dist/server/src/preview/index.d.ts.map +1 -1
  126. package/dist/server/src/preview/services/index.d.ts +13 -1
  127. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  128. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  129. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  130. package/dist/server/src/preview/services/preview.d.ts +7 -1
  131. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  132. package/dist/server/src/preview/utils.d.ts +13 -1
  133. package/dist/server/src/preview/utils.d.ts.map +1 -1
  134. package/dist/server/src/register.d.ts.map +1 -1
  135. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  136. package/dist/server/src/services/document-metadata.d.ts +4 -2
  137. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  138. package/dist/server/src/services/index.d.ts +3 -2
  139. package/dist/server/src/services/index.d.ts.map +1 -1
  140. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  141. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  142. package/dist/server/src/services/utils/populate.d.ts +2 -2
  143. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  144. package/dist/shared/contracts/index.d.ts +1 -0
  145. package/dist/shared/contracts/index.d.ts.map +1 -1
  146. package/dist/shared/contracts/preview.d.ts +27 -0
  147. package/dist/shared/contracts/preview.d.ts.map +1 -0
  148. package/dist/shared/index.js +4 -0
  149. package/dist/shared/index.js.map +1 -1
  150. package/dist/shared/index.mjs +4 -0
  151. package/dist/shared/index.mjs.map +1 -1
  152. package/package.json +13 -11
  153. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +0 -1
  154. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +0 -1
  155. package/dist/_chunks/Field-DIjL1b5d.mjs.map +0 -1
  156. package/dist/_chunks/Field-DhXEK8y1.js.map +0 -1
  157. package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
  158. package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
  159. package/dist/_chunks/ListConfigurationPage-DxWpeZrO.js.map +0 -1
  160. package/dist/_chunks/ListConfigurationPage-JPWZz7Kg.mjs.map +0 -1
  161. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +0 -1
  162. package/dist/_chunks/ListViewPage-DSK3f0ST.mjs.map +0 -1
  163. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
  164. package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
  165. package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
  166. package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
  167. package/dist/_chunks/relations-BRHithi8.js.map +0 -1
  168. package/dist/_chunks/relations-B_VLk-DD.mjs.map +0 -1
  169. package/dist/admin/src/preview/constants.d.ts +0 -1
  170. package/dist/server/src/preview/constants.d.ts +0 -2
  171. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -7,16 +7,15 @@ const designSystem = require("@strapi/design-system");
7
7
  const mapValues = require("lodash/fp/mapValues");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
+ const styledComponents = require("styled-components");
10
11
  const yup = require("yup");
12
+ const qs = require("qs");
11
13
  const pipe = require("lodash/fp/pipe");
12
14
  const dateFns = require("date-fns");
13
- const styledComponents = require("styled-components");
14
- const qs = require("qs");
15
15
  const toolkit = require("@reduxjs/toolkit");
16
16
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
17
  function _interopNamespace(e) {
18
- if (e && e.__esModule)
19
- return e;
18
+ if (e && e.__esModule) return e;
20
19
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
21
20
  if (e) {
22
21
  for (const k in e) {
@@ -36,13 +35,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
36
35
  const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
37
36
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
38
37
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
39
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
38
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
40
39
  const v = glob[path];
41
40
  if (v) {
42
41
  return typeof v === "function" ? v() : Promise.resolve(v);
43
42
  }
44
43
  return new Promise((_, reject) => {
45
- (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
+ );
46
52
  });
47
53
  };
48
54
  const PLUGIN_ID = "content-manager";
@@ -293,10 +299,10 @@ const documentApi = contentManagerApi.injectEndpoints({
293
299
  */
294
300
  getAllDocuments: builder.query({
295
301
  query: ({ model, params }) => ({
296
- url: `/content-manager/collection-types/${model}${params ? `?${params}` : ""}`,
302
+ url: `/content-manager/collection-types/${model}`,
297
303
  method: "GET",
298
304
  config: {
299
- params
305
+ params: qs.stringify(params, { encode: true })
300
306
  }
301
307
  }),
302
308
  providesTags: (result, _error, arg) => {
@@ -475,8 +481,7 @@ const {
475
481
  useUnpublishManyDocumentsMutation
476
482
  } = documentApi;
477
483
  const buildValidParams = (query) => {
478
- if (!query)
479
- return query;
484
+ if (!query) return query;
480
485
  const { plugins: _, ...validQueryParams } = {
481
486
  ...query,
482
487
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -484,9 +489,6 @@ const buildValidParams = (query) => {
484
489
  {}
485
490
  )
486
491
  };
487
- if ("_q" in validQueryParams) {
488
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
489
- }
490
492
  return validQueryParams;
491
493
  };
492
494
  const isBaseQueryError = (error) => {
@@ -1685,10 +1687,10 @@ const useDocumentActions = () => {
1685
1687
  update
1686
1688
  };
1687
1689
  };
1688
- const ProtectedHistoryPage = React.lazy(
1689
- () => Promise.resolve().then(() => require("./History-BLCCNgCt.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
+ const ProtectedHistoryPage = React__namespace.lazy(
1691
+ () => Promise.resolve().then(() => require("./History-BMndx49M.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-B7PR3Ok_.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-C4iTxUPU.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1717
+ () => Promise.resolve().then(() => require("./EditViewPage-DT6A4ayX.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1703
1718
  );
1704
1719
  const ProtectedListViewPage = React.lazy(
1705
- () => Promise.resolve().then(() => require("./ListViewPage-CIQekSFz.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1720
+ () => Promise.resolve().then(() => require("./ListViewPage-BPVmh9pq.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1706
1721
  );
1707
1722
  const ProtectedListConfiguration = React.lazy(
1708
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DxWpeZrO.js")).then((mod) => ({
1723
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-DouY1EWM.js")).then((mod) => ({
1709
1724
  default: mod.ProtectedListConfiguration
1710
1725
  }))
1711
1726
  );
1712
1727
  const ProtectedEditConfigurationPage = React.lazy(
1713
- () => Promise.resolve().then(() => require("./EditConfigurationPage-DHDQKBzw.js")).then((mod) => ({
1728
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-uy-v43AR.js")).then((mod) => ({
1714
1729
  default: mod.ProtectedEditConfigurationPage
1715
1730
  }))
1716
1731
  );
1717
1732
  const ProtectedComponentConfigurationPage = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage-gsCd80MU.js")).then((mod) => ({
1733
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-BlzvDpbX.js")).then((mod) => ({
1719
1734
  default: mod.ProtectedComponentConfigurationPage
1720
1735
  }))
1721
1736
  );
1722
1737
  const NoPermissions = React.lazy(
1723
- () => Promise.resolve().then(() => require("./NoPermissionsPage-Oy4tmUrW.js")).then((mod) => ({ default: mod.NoPermissions }))
1738
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-BMFKVcwJ.js")).then((mod) => ({ default: mod.NoPermissions }))
1724
1739
  );
1725
1740
  const NoContentType = React.lazy(
1726
- () => Promise.resolve().then(() => require("./NoContentTypePage-C5cxKvC2.js")).then((mod) => ({ default: mod.NoContentType }))
1741
+ () => Promise.resolve().then(() => require("./NoContentTypePage-BwcL--4H.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
  );
@@ -2103,6 +2108,7 @@ const PublishAction$1 = ({
2103
2108
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2104
2109
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2105
2110
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2111
+ const { id } = reactRouterDom.useParams();
2106
2112
  const { formatMessage } = reactIntl.useIntl();
2107
2113
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2108
2114
  const { publish } = useDocumentActions();
@@ -2205,10 +2211,12 @@ const PublishAction$1 = ({
2205
2211
  transformData(formValues)
2206
2212
  );
2207
2213
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2208
- navigate({
2209
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2210
- search: rawQuery
2211
- });
2214
+ if (id === "create") {
2215
+ navigate({
2216
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2217
+ search: rawQuery
2218
+ });
2219
+ }
2212
2220
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2213
2221
  setErrors(formatValidationErrors(res.error));
2214
2222
  }
@@ -2261,6 +2269,7 @@ const PublishAction$1 = ({
2261
2269
  };
2262
2270
  };
2263
2271
  PublishAction$1.type = "publish";
2272
+ PublishAction$1.position = "panel";
2264
2273
  const UpdateAction = ({
2265
2274
  activeTab,
2266
2275
  documentId,
@@ -2283,96 +2292,134 @@ const UpdateAction = ({
2283
2292
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2284
2293
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2285
2294
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2286
- return {
2287
- /**
2288
- * Disabled when:
2289
- * - the form is submitting
2290
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2291
- * - the active tab is the published tab
2292
- */
2293
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2294
- label: formatMessage({
2295
- id: "content-manager.containers.Edit.save",
2296
- defaultMessage: "Save"
2297
- }),
2298
- onClick: async () => {
2299
- setSubmitting(true);
2300
- try {
2301
- const { errors } = await validate(true, {
2302
- 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
+ })
2303
2311
  });
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
- })
2311
- });
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(
2325
- {
2326
- pathname: `../${res.data.documentId}`,
2327
- search: rawQuery
2328
- },
2329
- { relative: "path" }
2330
- );
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(
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(
2336
2325
  {
2337
- collectionType,
2338
- model,
2339
- documentId,
2340
- params
2326
+ pathname: `../${res.data.documentId}`,
2327
+ search: rawQuery
2341
2328
  },
2342
- transformData(document)
2329
+ { relative: "path" }
2343
2330
  );
2344
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2345
- setErrors(formatValidationErrors(res.error));
2346
- } else {
2347
- resetForm();
2348
- }
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));
2349
2346
  } else {
2350
- 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(
2351
2359
  {
2352
- model,
2353
- params
2360
+ pathname: `../${res.data.documentId}`,
2361
+ search: rawQuery
2354
2362
  },
2355
- transformData(document)
2363
+ { replace: true, relative: "path" }
2356
2364
  );
2357
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2358
- navigate(
2359
- {
2360
- pathname: `../${res.data.documentId}`,
2361
- search: rawQuery
2362
- },
2363
- { replace: true, relative: "path" }
2364
- );
2365
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2366
- setErrors(formatValidationErrors(res.error));
2367
- }
2365
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2366
+ setErrors(formatValidationErrors(res.error));
2368
2367
  }
2369
- } finally {
2370
- setSubmitting(false);
2371
2368
  }
2369
+ } finally {
2370
+ setSubmitting(false);
2372
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
2373
2419
  };
2374
2420
  };
2375
2421
  UpdateAction.type = "update";
2422
+ UpdateAction.position = "panel";
2376
2423
  const UNPUBLISH_DRAFT_OPTIONS = {
2377
2424
  KEEP: "keep",
2378
2425
  DISCARD: "discard"
@@ -2495,6 +2542,7 @@ const UnpublishAction$1 = ({
2495
2542
  };
2496
2543
  };
2497
2544
  UnpublishAction$1.type = "unpublish";
2545
+ UnpublishAction$1.position = "panel";
2498
2546
  const DiscardAction = ({
2499
2547
  activeTab,
2500
2548
  documentId,
@@ -2545,6 +2593,7 @@ const DiscardAction = ({
2545
2593
  };
2546
2594
  };
2547
2595
  DiscardAction.type = "discard";
2596
+ DiscardAction.position = "panel";
2548
2597
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2549
2598
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2550
2599
  const RelativeTime = React__namespace.forwardRef(
@@ -2557,7 +2606,7 @@ const RelativeTime = React__namespace.forwardRef(
2557
2606
  });
2558
2607
  const unit = intervals.find((intervalUnit) => {
2559
2608
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2560
- });
2609
+ }) ?? "seconds";
2561
2610
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2562
2611
  const customInterval = customIntervals.find(
2563
2612
  (custom) => interval[custom.unit] < custom.threshold
@@ -2591,19 +2640,29 @@ const getDisplayName = ({
2591
2640
  return email ?? "";
2592
2641
  };
2593
2642
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2594
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2643
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2595
2644
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2596
- 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
+ }) }) });
2597
2650
  };
2598
2651
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2599
2652
  const { formatMessage } = reactIntl.useIntl();
2600
2653
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2654
+ const params = reactRouterDom.useParams();
2601
2655
  const title = isCreating ? formatMessage({
2602
2656
  id: "content-manager.containers.edit.title.new",
2603
2657
  defaultMessage: "Create an entry"
2604
2658
  }) : documentTitle;
2605
2659
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2606
- /* @__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
+ ),
2607
2666
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2608
2667
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2609
2668
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2654,7 +2713,7 @@ const HeaderToolbar = () => {
2654
2713
  meta: isCloning ? void 0 : meta,
2655
2714
  collectionType
2656
2715
  },
2657
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2716
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2658
2717
  children: (actions2) => {
2659
2718
  const headerActions = actions2.filter((action) => {
2660
2719
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2862,6 +2921,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2862
2921
  };
2863
2922
  };
2864
2923
  ConfigureTheViewAction.type = "configure-the-view";
2924
+ ConfigureTheViewAction.position = "header";
2865
2925
  const EditTheModelAction = ({ model }) => {
2866
2926
  const navigate = reactRouterDom.useNavigate();
2867
2927
  const { formatMessage } = reactIntl.useIntl();
@@ -2878,6 +2938,7 @@ const EditTheModelAction = ({ model }) => {
2878
2938
  };
2879
2939
  };
2880
2940
  EditTheModelAction.type = "edit-the-model";
2941
+ EditTheModelAction.position = "header";
2881
2942
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2882
2943
  const navigate = reactRouterDom.useNavigate();
2883
2944
  const { formatMessage } = reactIntl.useIntl();
@@ -2951,6 +3012,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2951
3012
  };
2952
3013
  };
2953
3014
  DeleteAction$1.type = "delete";
3015
+ DeleteAction$1.position = ["header", "table-row"];
2954
3016
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2955
3017
  const Panels = () => {
2956
3018
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3013,7 +3075,7 @@ const ActionsPanelContent = () => {
3013
3075
  strapiAdmin.DescriptionComponentRenderer,
3014
3076
  {
3015
3077
  props,
3016
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3078
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3017
3079
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3018
3080
  }
3019
3081
  ),
@@ -3290,18 +3352,10 @@ const SelectedEntriesTableContent = ({
3290
3352
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3291
3353
  },
3292
3354
  state: { from: pathname },
3293
- label: formatMessage(
3294
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3295
- {
3296
- target: formatMessage(
3297
- {
3298
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3299
- defaultMessage: "item line {number}"
3300
- },
3301
- { number: index2 + 1 }
3302
- )
3303
- }
3304
- ),
3355
+ label: formatMessage({
3356
+ id: "content-manager.bulk-publish.edit",
3357
+ defaultMessage: "Edit"
3358
+ }),
3305
3359
  target: "_blank",
3306
3360
  marginLeft: "auto",
3307
3361
  variant: "ghost",
@@ -3475,8 +3529,7 @@ const PublishAction = ({ documents, model }) => {
3475
3529
  const refetchList = () => {
3476
3530
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3477
3531
  };
3478
- if (!showPublishButton)
3479
- return null;
3532
+ if (!showPublishButton) return null;
3480
3533
  return {
3481
3534
  actionType: "publish",
3482
3535
  variant: "tertiary",
@@ -3544,8 +3597,7 @@ const DeleteAction = ({ documents, model }) => {
3544
3597
  selectRow([]);
3545
3598
  }
3546
3599
  };
3547
- if (!hasDeletePermission)
3548
- return null;
3600
+ if (!hasDeletePermission) return null;
3549
3601
  return {
3550
3602
  variant: "danger-light",
3551
3603
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3594,8 +3646,7 @@ const UnpublishAction = ({ documents, model }) => {
3594
3646
  }
3595
3647
  };
3596
3648
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3597
- if (!showUnpublishButton)
3598
- return null;
3649
+ if (!showUnpublishButton) return null;
3599
3650
  return {
3600
3651
  variant: "tertiary",
3601
3652
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3700,7 +3751,7 @@ const TableActions = ({ document }) => {
3700
3751
  strapiAdmin.DescriptionComponentRenderer,
3701
3752
  {
3702
3753
  props,
3703
- 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"),
3704
3755
  children: (actions2) => {
3705
3756
  const tableRowActions = actions2.filter((action) => {
3706
3757
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3759,6 +3810,7 @@ const EditAction = ({ documentId }) => {
3759
3810
  };
3760
3811
  };
3761
3812
  EditAction.type = "edit";
3813
+ EditAction.position = "table-row";
3762
3814
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3763
3815
  path {
3764
3816
  fill: currentColor;
@@ -3835,6 +3887,7 @@ const CloneAction = ({ model, documentId }) => {
3835
3887
  };
3836
3888
  };
3837
3889
  CloneAction.type = "clone";
3890
+ CloneAction.position = "table-row";
3838
3891
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3839
3892
  path {
3840
3893
  fill: currentColor;
@@ -3921,7 +3974,14 @@ class ContentManagerPlugin {
3921
3974
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3922
3975
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3923
3976
  getBulkActions: () => this.bulkActions,
3924
- 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
+ },
3925
3985
  getEditViewSidePanels: () => this.editViewSidePanels,
3926
3986
  getHeaderActions: () => this.headerActions
3927
3987
  }
@@ -3931,10 +3991,8 @@ class ContentManagerPlugin {
3931
3991
  const getPrintableType = (value) => {
3932
3992
  const nativeType = typeof value;
3933
3993
  if (nativeType === "object") {
3934
- if (value === null)
3935
- return "null";
3936
- if (Array.isArray(value))
3937
- return "array";
3994
+ if (value === null) return "null";
3995
+ if (Array.isArray(value)) return "array";
3938
3996
  if (value instanceof Object && value.constructor.name !== "Object") {
3939
3997
  return value.constructor.name;
3940
3998
  }
@@ -3945,17 +4003,27 @@ const HistoryAction = ({ model, document }) => {
3945
4003
  const { formatMessage } = reactIntl.useIntl();
3946
4004
  const [{ query }] = strapiAdmin.useQueryParams();
3947
4005
  const navigate = reactRouterDom.useNavigate();
4006
+ const { trackUsage } = strapiAdmin.useTracking();
4007
+ const { pathname } = reactRouterDom.useLocation();
3948
4008
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3949
4009
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3950
4010
  return null;
3951
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
+ };
3952
4020
  return {
3953
4021
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3954
4022
  label: formatMessage({
3955
4023
  id: "content-manager.history.document-action",
3956
4024
  defaultMessage: "Content History"
3957
4025
  }),
3958
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4026
+ onClick: handleOnClick,
3959
4027
  disabled: (
3960
4028
  /**
3961
4029
  * The user is creating a new document.
@@ -3977,6 +4045,7 @@ const HistoryAction = ({ model, document }) => {
3977
4045
  };
3978
4046
  };
3979
4047
  HistoryAction.type = "history";
4048
+ HistoryAction.position = "header";
3980
4049
  const historyAdmin = {
3981
4050
  bootstrap(app) {
3982
4051
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4023,13 +4092,86 @@ const { setInitialData } = actions;
4023
4092
  const reducer = toolkit.combineReducers({
4024
4093
  app: reducer$1
4025
4094
  });
4026
- const FEATURE_ID = "preview";
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
+ };
4027
4171
  const previewAdmin = {
4028
4172
  bootstrap(app) {
4029
- if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4030
- return {};
4031
- }
4032
- console.log("Bootstrapping preview admin");
4173
+ const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4174
+ contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4033
4175
  }
4034
4176
  };
4035
4177
  const index = {
@@ -4051,7 +4193,7 @@ const index = {
4051
4193
  app.router.addRoute({
4052
4194
  path: "content-manager/*",
4053
4195
  lazy: async () => {
4054
- const { Layout } = await Promise.resolve().then(() => require("./layout-lMc9i1-Z.js"));
4196
+ const { Layout } = await Promise.resolve().then(() => require("./layout-ivwIVPnV.js"));
4055
4197
  return {
4056
4198
  Component: Layout
4057
4199
  };
@@ -4071,7 +4213,7 @@ const index = {
4071
4213
  async registerTrads({ locales }) {
4072
4214
  const importedTrads = await Promise.all(
4073
4215
  locales.map((locale) => {
4074
- 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 }) => {
4075
4217
  return {
4076
4218
  data: prefixPluginTranslations(data, PLUGIN_ID),
4077
4219
  locale
@@ -4129,5 +4271,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
4129
4271
  exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4130
4272
  exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4131
4273
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4274
+ exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4132
4275
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4133
- //# sourceMappingURL=index-BIWDoFLK.js.map
4276
+ //# sourceMappingURL=index-Cnw4gqee.js.map