@strapi/content-manager 0.0.0-next.f6dca5adf05ef6bed9605a1535999ab0bbbf063e → 0.0.0-next.fc1775f7731f8999840e56e298a216b9a6c5c4ad

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 (153) 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--MCP7Aew.js → ComponentConfigurationPage-BLWQy8ru.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage--MCP7Aew.js.map → ComponentConfigurationPage-BLWQy8ru.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-DT41asyM.mjs → ComponentConfigurationPage-CtIa3aa2.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-DT41asyM.mjs.map → ComponentConfigurationPage-CtIa3aa2.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-DznPxn9p.mjs → EditConfigurationPage-DsPR2DVk.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-DznPxn9p.mjs.map → EditConfigurationPage-DsPR2DVk.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-qgnNvv_u.js → EditConfigurationPage-RQkymxCy.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-qgnNvv_u.js.map → EditConfigurationPage-RQkymxCy.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-Bb4S7p8c.js → EditViewPage-B-kExt8C.js} +36 -8
  15. package/dist/_chunks/EditViewPage-B-kExt8C.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-B_k7z288.mjs → EditViewPage-BPyVuPfM.mjs} +35 -6
  17. package/dist/_chunks/EditViewPage-BPyVuPfM.mjs.map +1 -0
  18. package/dist/_chunks/{Field-ByR1mllE.js → Field-DPIsQRre.js} +177 -122
  19. package/dist/_chunks/Field-DPIsQRre.js.map +1 -0
  20. package/dist/_chunks/{Field-DmwbE0TL.mjs → Field-Dltnt1km.mjs} +175 -120
  21. package/dist/_chunks/Field-Dltnt1km.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-BpeyAyS1.js → Form-BFi4MXMT.js} +5 -6
  25. package/dist/_chunks/{Form-BpeyAyS1.js.map → Form-BFi4MXMT.js.map} +1 -1
  26. package/dist/_chunks/{Form-Dvt5eouJ.mjs → Form-C1IcWm1u.mjs} +3 -3
  27. package/dist/_chunks/{Form-Dvt5eouJ.mjs.map → Form-C1IcWm1u.mjs.map} +1 -1
  28. package/dist/_chunks/{History-CAERKpYl.mjs → History-04ChQ4pl.mjs} +37 -60
  29. package/dist/_chunks/History-04ChQ4pl.mjs.map +1 -0
  30. package/dist/_chunks/{History-d-IgDGPl.js → History-wjcK4L0C.js} +37 -61
  31. package/dist/_chunks/History-wjcK4L0C.js.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-CVVT45M8.mjs → ListConfigurationPage-BYqPYLSU.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-BYqPYLSU.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DSX98CYb.js → ListConfigurationPage-CRbxIC3J.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-CRbxIC3J.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-C9gPPp-V.js → ListViewPage-D5NY9183.js} +64 -53
  37. package/dist/_chunks/ListViewPage-D5NY9183.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-Q4g6kHDl.mjs → ListViewPage-FU2LBuhl.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-FU2LBuhl.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-D09gppmy.js → NoContentTypePage-BgQVE_Qb.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-D09gppmy.js.map → NoContentTypePage-BgQVE_Qb.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-BY4YRGs0.mjs → NoContentTypePage-DCKUkwb8.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-BY4YRGs0.mjs.map → NoContentTypePage-DCKUkwb8.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-32WgThJG.js → NoPermissionsPage-C5jwn70o.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-32WgThJG.js.map → NoPermissionsPage-C5jwn70o.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-CyM16RKL.mjs → NoPermissionsPage-jqve7C8l.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-CyM16RKL.mjs.map → NoPermissionsPage-jqve7C8l.mjs.map} +1 -1
  48. package/dist/_chunks/{Preview-C2WFq4S8.mjs → Preview-BMYN548c.mjs} +100 -73
  49. package/dist/_chunks/Preview-BMYN548c.mjs.map +1 -0
  50. package/dist/_chunks/{Preview-PpV3g9wJ.js → Preview-DaOihysv.js} +98 -72
  51. package/dist/_chunks/Preview-DaOihysv.js.map +1 -0
  52. package/dist/_chunks/{Relations-mWaebC5t.js → Relations-CTGM7Hv5.js} +7 -10
  53. package/dist/_chunks/{Relations-mWaebC5t.js.map → Relations-CTGM7Hv5.js.map} +1 -1
  54. package/dist/_chunks/{Relations-B_Yn9xGB.mjs → Relations-gscPkxjF.mjs} +6 -8
  55. package/dist/_chunks/{Relations-B_Yn9xGB.mjs.map → Relations-gscPkxjF.mjs.map} +1 -1
  56. package/dist/_chunks/{en-CHOp_xJv.js → en-BzQmavmK.js} +11 -3
  57. package/dist/_chunks/{en-CHOp_xJv.js.map → en-BzQmavmK.js.map} +1 -1
  58. package/dist/_chunks/{en-D_BMf0hT.mjs → en-CSxLmrh1.mjs} +11 -3
  59. package/dist/_chunks/{en-D_BMf0hT.mjs.map → en-CSxLmrh1.mjs.map} +1 -1
  60. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  61. package/dist/_chunks/{index-iun2i4xv.js → index-Ca7YWlAA.js} +300 -204
  62. package/dist/_chunks/index-Ca7YWlAA.js.map +1 -0
  63. package/dist/_chunks/{index-CbytGVdz.mjs → index-DqasUQ6Q.mjs} +300 -203
  64. package/dist/_chunks/index-DqasUQ6Q.mjs.map +1 -0
  65. package/dist/_chunks/{layout-CkaP4K5_.js → layout-BW80JSCd.js} +5 -6
  66. package/dist/_chunks/{layout-CkaP4K5_.js.map → layout-BW80JSCd.js.map} +1 -1
  67. package/dist/_chunks/{layout-Btu_cMRF.mjs → layout-W3clJSCy.mjs} +4 -4
  68. package/dist/_chunks/{layout-Btu_cMRF.mjs.map → layout-W3clJSCy.mjs.map} +1 -1
  69. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  70. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  71. package/dist/_chunks/{relations-Cn5re8ia.mjs → relations-BlDkoeWh.mjs} +2 -2
  72. package/dist/_chunks/{relations-Cn5re8ia.mjs.map → relations-BlDkoeWh.mjs.map} +1 -1
  73. package/dist/_chunks/{relations-O_v9g0v_.js → relations-C9Usz9k5.js} +2 -2
  74. package/dist/_chunks/{relations-O_v9g0v_.js.map → relations-C9Usz9k5.js.map} +1 -1
  75. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  76. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  77. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  78. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  79. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  80. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  81. package/dist/admin/index.js +2 -1
  82. package/dist/admin/index.js.map +1 -1
  83. package/dist/admin/index.mjs +2 -1
  84. package/dist/admin/src/content-manager.d.ts +3 -2
  85. package/dist/admin/src/exports.d.ts +1 -0
  86. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  87. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  88. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  89. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  90. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  91. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  92. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  93. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  94. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  95. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  96. package/dist/admin/src/router.d.ts +1 -1
  97. package/dist/admin/src/services/api.d.ts +1 -1
  98. package/dist/admin/src/services/components.d.ts +2 -2
  99. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  100. package/dist/admin/src/services/documents.d.ts +16 -19
  101. package/dist/admin/src/services/init.d.ts +1 -1
  102. package/dist/admin/src/services/relations.d.ts +2 -2
  103. package/dist/admin/src/services/uid.d.ts +3 -3
  104. package/dist/server/index.js +230 -187
  105. package/dist/server/index.js.map +1 -1
  106. package/dist/server/index.mjs +231 -187
  107. package/dist/server/index.mjs.map +1 -1
  108. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  109. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  110. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  111. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  112. package/dist/server/src/history/services/history.d.ts +3 -3
  113. package/dist/server/src/history/services/history.d.ts.map +1 -1
  114. package/dist/server/src/history/services/utils.d.ts +6 -10
  115. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  116. package/dist/server/src/index.d.ts +3 -2
  117. package/dist/server/src/index.d.ts.map +1 -1
  118. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  119. package/dist/server/src/preview/index.d.ts.map +1 -1
  120. package/dist/server/src/preview/services/index.d.ts +1 -0
  121. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  122. package/dist/server/src/preview/services/preview-config.d.ts +2 -0
  123. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  124. package/dist/server/src/preview/utils.d.ts +1 -0
  125. package/dist/server/src/preview/utils.d.ts.map +1 -1
  126. package/dist/server/src/register.d.ts.map +1 -1
  127. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  128. package/dist/server/src/services/document-metadata.d.ts +4 -2
  129. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  130. package/dist/server/src/services/index.d.ts +3 -2
  131. package/dist/server/src/services/index.d.ts.map +1 -1
  132. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  133. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  134. package/dist/server/src/services/utils/populate.d.ts +2 -2
  135. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  136. package/package.json +12 -11
  137. package/dist/_chunks/EditViewPage-B_k7z288.mjs.map +0 -1
  138. package/dist/_chunks/EditViewPage-Bb4S7p8c.js.map +0 -1
  139. package/dist/_chunks/Field-ByR1mllE.js.map +0 -1
  140. package/dist/_chunks/Field-DmwbE0TL.mjs.map +0 -1
  141. package/dist/_chunks/History-CAERKpYl.mjs.map +0 -1
  142. package/dist/_chunks/History-d-IgDGPl.js.map +0 -1
  143. package/dist/_chunks/ListConfigurationPage-CVVT45M8.mjs.map +0 -1
  144. package/dist/_chunks/ListConfigurationPage-DSX98CYb.js.map +0 -1
  145. package/dist/_chunks/ListViewPage-C9gPPp-V.js.map +0 -1
  146. package/dist/_chunks/ListViewPage-Q4g6kHDl.mjs.map +0 -1
  147. package/dist/_chunks/Preview-C2WFq4S8.mjs.map +0 -1
  148. package/dist/_chunks/Preview-PpV3g9wJ.js.map +0 -1
  149. package/dist/_chunks/index-CbytGVdz.mjs.map +0 -1
  150. package/dist/_chunks/index-iun2i4xv.js.map +0 -1
  151. package/dist/admin/src/preview/constants.d.ts +0 -1
  152. package/dist/server/src/preview/constants.d.ts +0 -2
  153. 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";
@@ -190,7 +196,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
190
196
  "InitialData",
191
197
  "HistoryVersion",
192
198
  "Relations",
193
- "UidAvailability"
199
+ "UidAvailability",
200
+ "RecentDocumentList"
194
201
  ]
195
202
  });
196
203
  const documentApi = contentManagerApi.injectEndpoints({
@@ -208,7 +215,7 @@ const documentApi = contentManagerApi.injectEndpoints({
208
215
  if (error) {
209
216
  return [];
210
217
  }
211
- return [{ type: "Document", id: `${model}_LIST` }];
218
+ return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
212
219
  }
213
220
  }),
214
221
  cloneDocument: builder.mutation({
@@ -222,7 +229,8 @@ const documentApi = contentManagerApi.injectEndpoints({
222
229
  }),
223
230
  invalidatesTags: (_result, _error, { model }) => [
224
231
  { type: "Document", id: `${model}_LIST` },
225
- { type: "UidAvailability", id: model }
232
+ { type: "UidAvailability", id: model },
233
+ "RecentDocumentList"
226
234
  ]
227
235
  }),
228
236
  /**
@@ -241,8 +249,21 @@ const documentApi = contentManagerApi.injectEndpoints({
241
249
  invalidatesTags: (result, _error, { model }) => [
242
250
  { type: "Document", id: `${model}_LIST` },
243
251
  "Relations",
244
- { type: "UidAvailability", id: model }
245
- ]
252
+ { type: "UidAvailability", id: model },
253
+ "RecentDocumentList"
254
+ ],
255
+ transformResponse: (response, meta, arg) => {
256
+ if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
257
+ return {
258
+ data: response,
259
+ meta: {
260
+ availableStatus: [],
261
+ availableLocales: []
262
+ }
263
+ };
264
+ }
265
+ return response;
266
+ }
246
267
  }),
247
268
  deleteDocument: builder.mutation({
248
269
  query: ({ collectionType, model, documentId, params }) => ({
@@ -253,7 +274,8 @@ const documentApi = contentManagerApi.injectEndpoints({
253
274
  }
254
275
  }),
255
276
  invalidatesTags: (_result, _error, { collectionType, model }) => [
256
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
277
+ { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
278
+ "RecentDocumentList"
257
279
  ]
258
280
  }),
259
281
  deleteManyDocuments: builder.mutation({
@@ -265,7 +287,10 @@ const documentApi = contentManagerApi.injectEndpoints({
265
287
  params
266
288
  }
267
289
  }),
268
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
290
+ invalidatesTags: (_res, _error, { model }) => [
291
+ { type: "Document", id: `${model}_LIST` },
292
+ "RecentDocumentList"
293
+ ]
269
294
  }),
270
295
  discardDocument: builder.mutation({
271
296
  query: ({ collectionType, model, documentId, params }) => ({
@@ -283,7 +308,8 @@ const documentApi = contentManagerApi.injectEndpoints({
283
308
  },
284
309
  { type: "Document", id: `${model}_LIST` },
285
310
  "Relations",
286
- { type: "UidAvailability", id: model }
311
+ { type: "UidAvailability", id: model },
312
+ "RecentDocumentList"
287
313
  ];
288
314
  }
289
315
  }),
@@ -296,7 +322,7 @@ const documentApi = contentManagerApi.injectEndpoints({
296
322
  url: `/content-manager/collection-types/${model}`,
297
323
  method: "GET",
298
324
  config: {
299
- params
325
+ params: qs.stringify(params, { encode: true })
300
326
  }
301
327
  }),
302
328
  providesTags: (result, _error, arg) => {
@@ -378,7 +404,8 @@ const documentApi = contentManagerApi.injectEndpoints({
378
404
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
379
405
  },
380
406
  { type: "Document", id: `${model}_LIST` },
381
- "Relations"
407
+ "Relations",
408
+ "RecentDocumentList"
382
409
  ];
383
410
  }
384
411
  }),
@@ -409,7 +436,9 @@ const documentApi = contentManagerApi.injectEndpoints({
409
436
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
410
437
  },
411
438
  "Relations",
412
- { type: "UidAvailability", id: model }
439
+ { type: "UidAvailability", id: model },
440
+ "RecentDocumentList",
441
+ "RecentDocumentList"
413
442
  ];
414
443
  },
415
444
  async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
@@ -439,7 +468,8 @@ const documentApi = contentManagerApi.injectEndpoints({
439
468
  {
440
469
  type: "Document",
441
470
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
442
- }
471
+ },
472
+ "RecentDocumentList"
443
473
  ];
444
474
  }
445
475
  }),
@@ -452,7 +482,10 @@ const documentApi = contentManagerApi.injectEndpoints({
452
482
  params
453
483
  }
454
484
  }),
455
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
485
+ invalidatesTags: (_res, _error, { model, documentIds }) => [
486
+ ...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
487
+ "RecentDocumentList"
488
+ ]
456
489
  })
457
490
  })
458
491
  });
@@ -475,8 +508,7 @@ const {
475
508
  useUnpublishManyDocumentsMutation
476
509
  } = documentApi;
477
510
  const buildValidParams = (query) => {
478
- if (!query)
479
- return query;
511
+ if (!query) return query;
480
512
  const { plugins: _, ...validQueryParams } = {
481
513
  ...query,
482
514
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -484,9 +516,6 @@ const buildValidParams = (query) => {
484
516
  {}
485
517
  )
486
518
  };
487
- if ("_q" in validQueryParams) {
488
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
489
- }
490
519
  return validQueryParams;
491
520
  };
492
521
  const isBaseQueryError = (error) => {
@@ -1686,7 +1715,7 @@ const useDocumentActions = () => {
1686
1715
  };
1687
1716
  };
1688
1717
  const ProtectedHistoryPage = React__namespace.lazy(
1689
- () => Promise.resolve().then(() => require("./History-d-IgDGPl.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1718
+ () => Promise.resolve().then(() => require("./History-wjcK4L0C.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
1690
1719
  );
1691
1720
  const routes$2 = [
1692
1721
  {
@@ -1699,7 +1728,7 @@ const routes$2 = [
1699
1728
  }
1700
1729
  ];
1701
1730
  const ProtectedPreviewPage = React__namespace.lazy(
1702
- () => Promise.resolve().then(() => require("./Preview-PpV3g9wJ.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1731
+ () => Promise.resolve().then(() => require("./Preview-DaOihysv.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
1703
1732
  );
1704
1733
  const routes$1 = [
1705
1734
  {
@@ -1712,31 +1741,31 @@ const routes$1 = [
1712
1741
  }
1713
1742
  ];
1714
1743
  const ProtectedEditViewPage = React.lazy(
1715
- () => Promise.resolve().then(() => require("./EditViewPage-Bb4S7p8c.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1744
+ () => Promise.resolve().then(() => require("./EditViewPage-B-kExt8C.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
1716
1745
  );
1717
1746
  const ProtectedListViewPage = React.lazy(
1718
- () => Promise.resolve().then(() => require("./ListViewPage-C9gPPp-V.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1747
+ () => Promise.resolve().then(() => require("./ListViewPage-D5NY9183.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
1719
1748
  );
1720
1749
  const ProtectedListConfiguration = React.lazy(
1721
- () => Promise.resolve().then(() => require("./ListConfigurationPage-DSX98CYb.js")).then((mod) => ({
1750
+ () => Promise.resolve().then(() => require("./ListConfigurationPage-CRbxIC3J.js")).then((mod) => ({
1722
1751
  default: mod.ProtectedListConfiguration
1723
1752
  }))
1724
1753
  );
1725
1754
  const ProtectedEditConfigurationPage = React.lazy(
1726
- () => Promise.resolve().then(() => require("./EditConfigurationPage-qgnNvv_u.js")).then((mod) => ({
1755
+ () => Promise.resolve().then(() => require("./EditConfigurationPage-RQkymxCy.js")).then((mod) => ({
1727
1756
  default: mod.ProtectedEditConfigurationPage
1728
1757
  }))
1729
1758
  );
1730
1759
  const ProtectedComponentConfigurationPage = React.lazy(
1731
- () => Promise.resolve().then(() => require("./ComponentConfigurationPage--MCP7Aew.js")).then((mod) => ({
1760
+ () => Promise.resolve().then(() => require("./ComponentConfigurationPage-BLWQy8ru.js")).then((mod) => ({
1732
1761
  default: mod.ProtectedComponentConfigurationPage
1733
1762
  }))
1734
1763
  );
1735
1764
  const NoPermissions = React.lazy(
1736
- () => Promise.resolve().then(() => require("./NoPermissionsPage-32WgThJG.js")).then((mod) => ({ default: mod.NoPermissions }))
1765
+ () => Promise.resolve().then(() => require("./NoPermissionsPage-C5jwn70o.js")).then((mod) => ({ default: mod.NoPermissions }))
1737
1766
  );
1738
1767
  const NoContentType = React.lazy(
1739
- () => Promise.resolve().then(() => require("./NoContentTypePage-D09gppmy.js")).then((mod) => ({ default: mod.NoContentType }))
1768
+ () => Promise.resolve().then(() => require("./NoContentTypePage-BgQVE_Qb.js")).then((mod) => ({ default: mod.NoContentType }))
1740
1769
  );
1741
1770
  const CollectionTypePages = () => {
1742
1771
  const { collectionType } = reactRouterDom.useParams();
@@ -1748,7 +1777,7 @@ const CollectionTypePages = () => {
1748
1777
  const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
1749
1778
  const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
1750
1779
  const LIST_RELATIVE_PATH = ":collectionType/:slug";
1751
- const LIST_PATH = `/content-manager/${LIST_RELATIVE_PATH}`;
1780
+ const LIST_PATH = `/content-manager/collection-types/:slug`;
1752
1781
  const routes = [
1753
1782
  {
1754
1783
  path: LIST_RELATIVE_PATH,
@@ -1881,6 +1910,11 @@ const DocumentActionButton = (action) => {
1881
1910
  ) : null
1882
1911
  ] });
1883
1912
  };
1913
+ const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
1914
+ &:hover {
1915
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
1916
+ }
1917
+ `;
1884
1918
  const DocumentActionsMenu = ({
1885
1919
  actions: actions2,
1886
1920
  children,
@@ -1939,48 +1973,32 @@ const DocumentActionsMenu = ({
1939
1973
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1940
1974
  actions2.map((action) => {
1941
1975
  return /* @__PURE__ */ jsxRuntime.jsx(
1942
- designSystem.Menu.Item,
1976
+ MenuItem,
1943
1977
  {
1944
1978
  disabled: action.disabled,
1945
1979
  onSelect: handleClick(action),
1946
1980
  display: "block",
1947
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: [
1948
- /* @__PURE__ */ jsxRuntime.jsxs(
1949
- designSystem.Flex,
1950
- {
1951
- color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1952
- gap: 2,
1953
- tag: "span",
1954
- children: [
1955
- /* @__PURE__ */ jsxRuntime.jsx(
1956
- designSystem.Flex,
1957
- {
1958
- tag: "span",
1959
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1960
- children: action.icon
1961
- }
1962
- ),
1963
- action.label
1964
- ]
1965
- }
1966
- ),
1967
- action.id.startsWith("HistoryAction") && /* @__PURE__ */ jsxRuntime.jsx(
1968
- designSystem.Flex,
1969
- {
1970
- alignItems: "center",
1971
- background: "alternative100",
1972
- borderStyle: "solid",
1973
- borderColor: "alternative200",
1974
- borderWidth: "1px",
1975
- height: 5,
1976
- paddingLeft: 2,
1977
- paddingRight: 2,
1978
- hasRadius: true,
1979
- color: "alternative600",
1980
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
1981
- }
1982
- )
1983
- ] })
1981
+ isVariantDanger: action.variant === "danger",
1982
+ isDisabled: action.disabled,
1983
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(
1984
+ designSystem.Flex,
1985
+ {
1986
+ color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
1987
+ gap: 2,
1988
+ tag: "span",
1989
+ children: [
1990
+ /* @__PURE__ */ jsxRuntime.jsx(
1991
+ designSystem.Flex,
1992
+ {
1993
+ tag: "span",
1994
+ color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
1995
+ children: action.icon
1996
+ }
1997
+ ),
1998
+ action.label
1999
+ ]
2000
+ }
2001
+ ) })
1984
2002
  },
1985
2003
  action.id
1986
2004
  );
@@ -2117,6 +2135,7 @@ const PublishAction$1 = ({
2117
2135
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
2118
2136
  const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
2119
2137
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2138
+ const { id } = reactRouterDom.useParams();
2120
2139
  const { formatMessage } = reactIntl.useIntl();
2121
2140
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2122
2141
  const { publish } = useDocumentActions();
@@ -2219,10 +2238,12 @@ const PublishAction$1 = ({
2219
2238
  transformData(formValues)
2220
2239
  );
2221
2240
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2222
- navigate({
2223
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2224
- search: rawQuery
2225
- });
2241
+ if (id === "create") {
2242
+ navigate({
2243
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2244
+ search: rawQuery
2245
+ });
2246
+ }
2226
2247
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2227
2248
  setErrors(formatValidationErrors(res.error));
2228
2249
  }
@@ -2275,6 +2296,7 @@ const PublishAction$1 = ({
2275
2296
  };
2276
2297
  };
2277
2298
  PublishAction$1.type = "publish";
2299
+ PublishAction$1.position = "panel";
2278
2300
  const UpdateAction = ({
2279
2301
  activeTab,
2280
2302
  documentId,
@@ -2297,96 +2319,134 @@ const UpdateAction = ({
2297
2319
  const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
2298
2320
  const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
2299
2321
  const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2300
- return {
2301
- /**
2302
- * Disabled when:
2303
- * - the form is submitting
2304
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2305
- * - the active tab is the published tab
2306
- */
2307
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2308
- label: formatMessage({
2309
- id: "content-manager.containers.Edit.save",
2310
- defaultMessage: "Save"
2311
- }),
2312
- onClick: async () => {
2313
- setSubmitting(true);
2314
- try {
2315
- const { errors } = await validate(true, {
2316
- status: "draft"
2322
+ const handleUpdate = React__namespace.useCallback(async () => {
2323
+ setSubmitting(true);
2324
+ try {
2325
+ if (!modified) {
2326
+ return;
2327
+ }
2328
+ const { errors } = await validate(true, {
2329
+ status: "draft"
2330
+ });
2331
+ if (errors) {
2332
+ toggleNotification({
2333
+ type: "danger",
2334
+ message: formatMessage({
2335
+ id: "content-manager.validation.error",
2336
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2337
+ })
2317
2338
  });
2318
- if (errors) {
2319
- toggleNotification({
2320
- type: "danger",
2321
- message: formatMessage({
2322
- id: "content-manager.validation.error",
2323
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2324
- })
2325
- });
2326
- return;
2327
- }
2328
- if (isCloning) {
2329
- const res = await clone(
2330
- {
2331
- model,
2332
- documentId: cloneMatch.params.origin,
2333
- params
2334
- },
2335
- transformData(document)
2336
- );
2337
- if ("data" in res) {
2338
- navigate(
2339
- {
2340
- pathname: `../${res.data.documentId}`,
2341
- search: rawQuery
2342
- },
2343
- { relative: "path" }
2344
- );
2345
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2346
- setErrors(formatValidationErrors(res.error));
2347
- }
2348
- } else if (documentId || collectionType === SINGLE_TYPES) {
2349
- const res = await update(
2339
+ return;
2340
+ }
2341
+ if (isCloning) {
2342
+ const res = await clone(
2343
+ {
2344
+ model,
2345
+ documentId: cloneMatch.params.origin,
2346
+ params
2347
+ },
2348
+ transformData(document)
2349
+ );
2350
+ if ("data" in res) {
2351
+ navigate(
2350
2352
  {
2351
- collectionType,
2352
- model,
2353
- documentId,
2354
- params
2353
+ pathname: `../${res.data.documentId}`,
2354
+ search: rawQuery
2355
2355
  },
2356
- transformData(document)
2356
+ { relative: "path" }
2357
2357
  );
2358
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2359
- setErrors(formatValidationErrors(res.error));
2360
- } else {
2361
- resetForm();
2362
- }
2358
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2359
+ setErrors(formatValidationErrors(res.error));
2360
+ }
2361
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2362
+ const res = await update(
2363
+ {
2364
+ collectionType,
2365
+ model,
2366
+ documentId,
2367
+ params
2368
+ },
2369
+ transformData(document)
2370
+ );
2371
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2372
+ setErrors(formatValidationErrors(res.error));
2363
2373
  } else {
2364
- const res = await create(
2374
+ resetForm();
2375
+ }
2376
+ } else {
2377
+ const res = await create(
2378
+ {
2379
+ model,
2380
+ params
2381
+ },
2382
+ transformData(document)
2383
+ );
2384
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2385
+ navigate(
2365
2386
  {
2366
- model,
2367
- params
2387
+ pathname: `../${res.data.documentId}`,
2388
+ search: rawQuery
2368
2389
  },
2369
- transformData(document)
2390
+ { replace: true, relative: "path" }
2370
2391
  );
2371
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2372
- navigate(
2373
- {
2374
- pathname: `../${res.data.documentId}`,
2375
- search: rawQuery
2376
- },
2377
- { replace: true, relative: "path" }
2378
- );
2379
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2380
- setErrors(formatValidationErrors(res.error));
2381
- }
2392
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2393
+ setErrors(formatValidationErrors(res.error));
2382
2394
  }
2383
- } finally {
2384
- setSubmitting(false);
2385
2395
  }
2396
+ } finally {
2397
+ setSubmitting(false);
2386
2398
  }
2399
+ }, [
2400
+ clone,
2401
+ cloneMatch?.params.origin,
2402
+ collectionType,
2403
+ create,
2404
+ document,
2405
+ documentId,
2406
+ formatMessage,
2407
+ formatValidationErrors,
2408
+ isCloning,
2409
+ model,
2410
+ modified,
2411
+ navigate,
2412
+ params,
2413
+ rawQuery,
2414
+ resetForm,
2415
+ setErrors,
2416
+ setSubmitting,
2417
+ toggleNotification,
2418
+ update,
2419
+ validate
2420
+ ]);
2421
+ React__namespace.useEffect(() => {
2422
+ const handleKeyDown = (e) => {
2423
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2424
+ e.preventDefault();
2425
+ handleUpdate();
2426
+ }
2427
+ };
2428
+ window.addEventListener("keydown", handleKeyDown);
2429
+ return () => {
2430
+ window.removeEventListener("keydown", handleKeyDown);
2431
+ };
2432
+ }, [handleUpdate]);
2433
+ return {
2434
+ /**
2435
+ * Disabled when:
2436
+ * - the form is submitting
2437
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2438
+ * - the active tab is the published tab
2439
+ */
2440
+ disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2441
+ label: formatMessage({
2442
+ id: "global.save",
2443
+ defaultMessage: "Save"
2444
+ }),
2445
+ onClick: handleUpdate
2387
2446
  };
2388
2447
  };
2389
2448
  UpdateAction.type = "update";
2449
+ UpdateAction.position = "panel";
2390
2450
  const UNPUBLISH_DRAFT_OPTIONS = {
2391
2451
  KEEP: "keep",
2392
2452
  DISCARD: "discard"
@@ -2509,6 +2569,7 @@ const UnpublishAction$1 = ({
2509
2569
  };
2510
2570
  };
2511
2571
  UnpublishAction$1.type = "unpublish";
2572
+ UnpublishAction$1.position = "panel";
2512
2573
  const DiscardAction = ({
2513
2574
  activeTab,
2514
2575
  documentId,
@@ -2559,6 +2620,7 @@ const DiscardAction = ({
2559
2620
  };
2560
2621
  };
2561
2622
  DiscardAction.type = "discard";
2623
+ DiscardAction.position = "panel";
2562
2624
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2563
2625
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2564
2626
  const RelativeTime = React__namespace.forwardRef(
@@ -2571,7 +2633,7 @@ const RelativeTime = React__namespace.forwardRef(
2571
2633
  });
2572
2634
  const unit = intervals.find((intervalUnit) => {
2573
2635
  return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
2574
- });
2636
+ }) ?? "seconds";
2575
2637
  const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
2576
2638
  const customInterval = customIntervals.find(
2577
2639
  (custom) => interval[custom.unit] < custom.threshold
@@ -2605,10 +2667,10 @@ const getDisplayName = ({
2605
2667
  return email ?? "";
2606
2668
  };
2607
2669
  const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
2608
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2670
+ const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
2609
2671
  const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
2610
2672
  const { formatMessage } = reactIntl.useIntl();
2611
- 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: formatMessage({
2673
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, size, variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: formatMessage({
2612
2674
  id: `content-manager.containers.List.${status}`,
2613
2675
  defaultMessage: capitalise(status)
2614
2676
  }) }) });
@@ -2616,12 +2678,18 @@ const DocumentStatus = ({ status = "draft", ...restProps }) => {
2616
2678
  const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
2617
2679
  const { formatMessage } = reactIntl.useIntl();
2618
2680
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
2681
+ const params = reactRouterDom.useParams();
2619
2682
  const title = isCreating ? formatMessage({
2620
2683
  id: "content-manager.containers.edit.title.new",
2621
2684
  defaultMessage: "Create an entry"
2622
2685
  }) : documentTitle;
2623
2686
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
2624
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.BackButton, {}),
2687
+ /* @__PURE__ */ jsxRuntime.jsx(
2688
+ strapiAdmin.BackButton,
2689
+ {
2690
+ fallback: params.collectionType === SINGLE_TYPES ? void 0 : `../${COLLECTION_TYPES}/${params.slug}`
2691
+ }
2692
+ ),
2625
2693
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
2626
2694
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
2627
2695
  /* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
@@ -2672,7 +2740,7 @@ const HeaderToolbar = () => {
2672
2740
  meta: isCloning ? void 0 : meta,
2673
2741
  collectionType
2674
2742
  },
2675
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2743
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2676
2744
  children: (actions2) => {
2677
2745
  const headerActions = actions2.filter((action) => {
2678
2746
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2880,6 +2948,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2880
2948
  };
2881
2949
  };
2882
2950
  ConfigureTheViewAction.type = "configure-the-view";
2951
+ ConfigureTheViewAction.position = "header";
2883
2952
  const EditTheModelAction = ({ model }) => {
2884
2953
  const navigate = reactRouterDom.useNavigate();
2885
2954
  const { formatMessage } = reactIntl.useIntl();
@@ -2896,6 +2965,7 @@ const EditTheModelAction = ({ model }) => {
2896
2965
  };
2897
2966
  };
2898
2967
  EditTheModelAction.type = "edit-the-model";
2968
+ EditTheModelAction.position = "header";
2899
2969
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2900
2970
  const navigate = reactRouterDom.useNavigate();
2901
2971
  const { formatMessage } = reactIntl.useIntl();
@@ -2969,6 +3039,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2969
3039
  };
2970
3040
  };
2971
3041
  DeleteAction$1.type = "delete";
3042
+ DeleteAction$1.position = ["header", "table-row"];
2972
3043
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2973
3044
  const Panels = () => {
2974
3045
  const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
@@ -3031,7 +3102,7 @@ const ActionsPanelContent = () => {
3031
3102
  strapiAdmin.DescriptionComponentRenderer,
3032
3103
  {
3033
3104
  props,
3034
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3105
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3035
3106
  children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
3036
3107
  }
3037
3108
  ),
@@ -3308,18 +3379,10 @@ const SelectedEntriesTableContent = ({
3308
3379
  search: row.locale && `?plugins[i18n][locale]=${row.locale}`
3309
3380
  },
3310
3381
  state: { from: pathname },
3311
- label: formatMessage(
3312
- { id: "app.component.HelperPluginTable.edit", defaultMessage: "Edit {target}" },
3313
- {
3314
- target: formatMessage(
3315
- {
3316
- id: "content-manager.components.ListViewHelperPluginTable.row-line",
3317
- defaultMessage: "item line {number}"
3318
- },
3319
- { number: index2 + 1 }
3320
- )
3321
- }
3322
- ),
3382
+ label: formatMessage({
3383
+ id: "content-manager.bulk-publish.edit",
3384
+ defaultMessage: "Edit"
3385
+ }),
3323
3386
  target: "_blank",
3324
3387
  marginLeft: "auto",
3325
3388
  variant: "ghost",
@@ -3493,8 +3556,7 @@ const PublishAction = ({ documents, model }) => {
3493
3556
  const refetchList = () => {
3494
3557
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3495
3558
  };
3496
- if (!showPublishButton)
3497
- return null;
3559
+ if (!showPublishButton) return null;
3498
3560
  return {
3499
3561
  actionType: "publish",
3500
3562
  variant: "tertiary",
@@ -3562,8 +3624,7 @@ const DeleteAction = ({ documents, model }) => {
3562
3624
  selectRow([]);
3563
3625
  }
3564
3626
  };
3565
- if (!hasDeletePermission)
3566
- return null;
3627
+ if (!hasDeletePermission) return null;
3567
3628
  return {
3568
3629
  variant: "danger-light",
3569
3630
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3612,8 +3673,7 @@ const UnpublishAction = ({ documents, model }) => {
3612
3673
  }
3613
3674
  };
3614
3675
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3615
- if (!showUnpublishButton)
3616
- return null;
3676
+ if (!showUnpublishButton) return null;
3617
3677
  return {
3618
3678
  variant: "tertiary",
3619
3679
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3718,7 +3778,7 @@ const TableActions = ({ document }) => {
3718
3778
  strapiAdmin.DescriptionComponentRenderer,
3719
3779
  {
3720
3780
  props,
3721
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3781
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3722
3782
  children: (actions2) => {
3723
3783
  const tableRowActions = actions2.filter((action) => {
3724
3784
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3777,6 +3837,7 @@ const EditAction = ({ documentId }) => {
3777
3837
  };
3778
3838
  };
3779
3839
  EditAction.type = "edit";
3840
+ EditAction.position = "table-row";
3780
3841
  const StyledPencil = styledComponents.styled(Icons.Pencil)`
3781
3842
  path {
3782
3843
  fill: currentColor;
@@ -3853,6 +3914,7 @@ const CloneAction = ({ model, documentId }) => {
3853
3914
  };
3854
3915
  };
3855
3916
  CloneAction.type = "clone";
3917
+ CloneAction.position = "table-row";
3856
3918
  const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
3857
3919
  path {
3858
3920
  fill: currentColor;
@@ -3939,7 +4001,14 @@ class ContentManagerPlugin {
3939
4001
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3940
4002
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3941
4003
  getBulkActions: () => this.bulkActions,
3942
- getDocumentActions: () => this.documentActions,
4004
+ getDocumentActions: (position) => {
4005
+ if (position) {
4006
+ return this.documentActions.filter(
4007
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
4008
+ );
4009
+ }
4010
+ return this.documentActions;
4011
+ },
3943
4012
  getEditViewSidePanels: () => this.editViewSidePanels,
3944
4013
  getHeaderActions: () => this.headerActions
3945
4014
  }
@@ -3949,10 +4018,8 @@ class ContentManagerPlugin {
3949
4018
  const getPrintableType = (value) => {
3950
4019
  const nativeType = typeof value;
3951
4020
  if (nativeType === "object") {
3952
- if (value === null)
3953
- return "null";
3954
- if (Array.isArray(value))
3955
- return "array";
4021
+ if (value === null) return "null";
4022
+ if (Array.isArray(value)) return "array";
3956
4023
  if (value instanceof Object && value.constructor.name !== "Object") {
3957
4024
  return value.constructor.name;
3958
4025
  }
@@ -3963,17 +4030,27 @@ const HistoryAction = ({ model, document }) => {
3963
4030
  const { formatMessage } = reactIntl.useIntl();
3964
4031
  const [{ query }] = strapiAdmin.useQueryParams();
3965
4032
  const navigate = reactRouterDom.useNavigate();
4033
+ const { trackUsage } = strapiAdmin.useTracking();
4034
+ const { pathname } = reactRouterDom.useLocation();
3966
4035
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
3967
4036
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3968
4037
  return null;
3969
4038
  }
4039
+ const handleOnClick = () => {
4040
+ const destination = { pathname: "history", search: pluginsQueryParams };
4041
+ trackUsage("willNavigate", {
4042
+ from: pathname,
4043
+ to: `${pathname}/${destination.pathname}`
4044
+ });
4045
+ navigate(destination);
4046
+ };
3970
4047
  return {
3971
4048
  icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
3972
4049
  label: formatMessage({
3973
4050
  id: "content-manager.history.document-action",
3974
4051
  defaultMessage: "Content History"
3975
4052
  }),
3976
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4053
+ onClick: handleOnClick,
3977
4054
  disabled: (
3978
4055
  /**
3979
4056
  * The user is creating a new document.
@@ -3995,6 +4072,7 @@ const HistoryAction = ({ model, document }) => {
3995
4072
  };
3996
4073
  };
3997
4074
  HistoryAction.type = "history";
4075
+ HistoryAction.position = "header";
3998
4076
  const historyAdmin = {
3999
4077
  bootstrap(app) {
4000
4078
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4057,10 +4135,18 @@ const previewApi = contentManagerApi.injectEndpoints({
4057
4135
  })
4058
4136
  });
4059
4137
  const { useGetPreviewUrlQuery } = previewApi;
4138
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4139
+ if (isShown) {
4140
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
4141
+ }
4142
+ return children;
4143
+ };
4060
4144
  const PreviewSidePanel = ({ model, documentId, document }) => {
4061
4145
  const { formatMessage } = reactIntl.useIntl();
4062
4146
  const { trackUsage } = strapiAdmin.useTracking();
4147
+ const { pathname } = reactRouterDom.useLocation();
4063
4148
  const [{ query }] = strapiAdmin.useQueryParams();
4149
+ const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
4064
4150
  const { data, error } = useGetPreviewUrlQuery({
4065
4151
  params: {
4066
4152
  contentType: model
@@ -4074,33 +4160,43 @@ const PreviewSidePanel = ({ model, documentId, document }) => {
4074
4160
  if (!data?.data?.url || error) {
4075
4161
  return null;
4076
4162
  }
4077
- const handleClick = () => {
4078
- trackUsage("willOpenPreview");
4163
+ const trackNavigation = () => {
4164
+ const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
4165
+ trackUsage("willNavigate", { from: pathname, to: destinationPathname });
4079
4166
  };
4080
4167
  return {
4081
4168
  title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4082
- content: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { gap: 2, width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4083
- designSystem.Button,
4169
+ content: /* @__PURE__ */ jsxRuntime.jsx(
4170
+ ConditionalTooltip,
4084
4171
  {
4085
- variant: "tertiary",
4086
- tag: reactRouterDom.Link,
4087
- to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4088
- onClick: handleClick,
4089
- flex: "auto",
4090
- children: formatMessage({
4091
- id: "content-manager.preview.panel.button",
4092
- defaultMessage: "Open preview"
4093
- })
4172
+ label: formatMessage({
4173
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4174
+ defaultMessage: "Please save to open the preview"
4175
+ }),
4176
+ isShown: isModified,
4177
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
4178
+ designSystem.Button,
4179
+ {
4180
+ variant: "tertiary",
4181
+ tag: reactRouterDom.Link,
4182
+ to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
4183
+ onClick: trackNavigation,
4184
+ width: "100%",
4185
+ disabled: isModified,
4186
+ pointerEvents: isModified ? "none" : void 0,
4187
+ tabIndex: isModified ? -1 : void 0,
4188
+ children: formatMessage({
4189
+ id: "content-manager.preview.panel.button",
4190
+ defaultMessage: "Open preview"
4191
+ })
4192
+ }
4193
+ ) })
4094
4194
  }
4095
- ) })
4195
+ )
4096
4196
  };
4097
4197
  };
4098
- const FEATURE_ID = "preview";
4099
4198
  const previewAdmin = {
4100
4199
  bootstrap(app) {
4101
- if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4102
- return;
4103
- }
4104
4200
  const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4105
4201
  contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4106
4202
  }
@@ -4124,7 +4220,7 @@ const index = {
4124
4220
  app.router.addRoute({
4125
4221
  path: "content-manager/*",
4126
4222
  lazy: async () => {
4127
- const { Layout } = await Promise.resolve().then(() => require("./layout-CkaP4K5_.js"));
4223
+ const { Layout } = await Promise.resolve().then(() => require("./layout-BW80JSCd.js"));
4128
4224
  return {
4129
4225
  Component: Layout
4130
4226
  };
@@ -4144,7 +4240,7 @@ const index = {
4144
4240
  async registerTrads({ locales }) {
4145
4241
  const importedTrads = await Promise.all(
4146
4242
  locales.map((locale) => {
4147
- 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-CHOp_xJv.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`).then(({ default: data }) => {
4243
+ 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-BzQmavmK.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 }) => {
4148
4244
  return {
4149
4245
  data: prefixPluginTranslations(data, PLUGIN_ID),
4150
4246
  locale
@@ -4204,4 +4300,4 @@ exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuer
4204
4300
  exports.useGetInitialDataQuery = useGetInitialDataQuery;
4205
4301
  exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
4206
4302
  exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4207
- //# sourceMappingURL=index-iun2i4xv.js.map
4303
+ //# sourceMappingURL=index-Ca7YWlAA.js.map