@strapi/content-manager 0.0.0-experimental.af7e4e2471a04cc7f17b8ed3474530810efc02bc → 0.0.0-experimental.b0240412a007bea5d73c29b17c8ce04802fca919

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 (146) 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-_EzKh4uq.js → ComponentConfigurationPage-BLWQy8ru.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-_EzKh4uq.js.map → ComponentConfigurationPage-BLWQy8ru.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-aeNlfgi9.mjs → ComponentConfigurationPage-CtIa3aa2.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-aeNlfgi9.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-DBVSBjCB.mjs → EditConfigurationPage-DsPR2DVk.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-DBVSBjCB.mjs.map → EditConfigurationPage-DsPR2DVk.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-DaK5-ltL.js → EditConfigurationPage-RQkymxCy.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-DaK5-ltL.js.map → EditConfigurationPage-RQkymxCy.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C3qKSunQ.js → EditViewPage-B-kExt8C.js} +4 -5
  15. package/dist/_chunks/{EditViewPage-C3qKSunQ.js.map → EditViewPage-B-kExt8C.js.map} +1 -1
  16. package/dist/_chunks/{EditViewPage-BeRi9xCR.mjs → EditViewPage-BPyVuPfM.mjs} +3 -3
  17. package/dist/_chunks/{EditViewPage-BeRi9xCR.mjs.map → EditViewPage-BPyVuPfM.mjs.map} +1 -1
  18. package/dist/_chunks/{Field-BwLr5b0V.js → Field-DPIsQRre.js} +155 -120
  19. package/dist/_chunks/Field-DPIsQRre.js.map +1 -0
  20. package/dist/_chunks/{Field-CfbMEZLv.mjs → Field-Dltnt1km.mjs} +153 -118
  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-BSInvgp4.js → Form-BFi4MXMT.js} +5 -6
  25. package/dist/_chunks/{Form-BSInvgp4.js.map → Form-BFi4MXMT.js.map} +1 -1
  26. package/dist/_chunks/{Form-Br-9I4vG.mjs → Form-C1IcWm1u.mjs} +3 -3
  27. package/dist/_chunks/{Form-Br-9I4vG.mjs.map → Form-C1IcWm1u.mjs.map} +1 -1
  28. package/dist/_chunks/{History-BQ721fHN.mjs → History-04ChQ4pl.mjs} +36 -10
  29. package/dist/_chunks/History-04ChQ4pl.mjs.map +1 -0
  30. package/dist/_chunks/{History-BHH0axCz.js → History-wjcK4L0C.js} +36 -11
  31. package/dist/_chunks/History-wjcK4L0C.js.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-BVtVADtP.mjs → ListConfigurationPage-BYqPYLSU.mjs} +3 -3
  33. package/dist/_chunks/{ListConfigurationPage-BVtVADtP.mjs.map → ListConfigurationPage-BYqPYLSU.mjs.map} +1 -1
  34. package/dist/_chunks/{ListConfigurationPage-B7VtZkjG.js → ListConfigurationPage-CRbxIC3J.js} +4 -5
  35. package/dist/_chunks/{ListConfigurationPage-B7VtZkjG.js.map → ListConfigurationPage-CRbxIC3J.js.map} +1 -1
  36. package/dist/_chunks/{ListViewPage-C4UCZKeD.js → ListViewPage-D5NY9183.js} +51 -51
  37. package/dist/_chunks/ListViewPage-D5NY9183.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-Dq7nBEKD.mjs → ListViewPage-FU2LBuhl.mjs} +50 -49
  39. package/dist/_chunks/ListViewPage-FU2LBuhl.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-YNlmMHbx.js → NoContentTypePage-BgQVE_Qb.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-YNlmMHbx.js.map → NoContentTypePage-BgQVE_Qb.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-CQlgc_9h.mjs → NoContentTypePage-DCKUkwb8.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-CQlgc_9h.mjs.map → NoContentTypePage-DCKUkwb8.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-CERDW9_P.js → NoPermissionsPage-C5jwn70o.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-CERDW9_P.js.map → NoPermissionsPage-C5jwn70o.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-CT2YbxJK.mjs → NoPermissionsPage-jqve7C8l.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-CT2YbxJK.mjs.map → NoPermissionsPage-jqve7C8l.mjs.map} +1 -1
  48. package/dist/_chunks/{Preview-GZFXtAgo.mjs → Preview-BMYN548c.mjs} +51 -13
  49. package/dist/_chunks/Preview-BMYN548c.mjs.map +1 -0
  50. package/dist/_chunks/{Preview-D9FlX2H8.js → Preview-DaOihysv.js} +50 -13
  51. package/dist/_chunks/Preview-DaOihysv.js.map +1 -0
  52. package/dist/_chunks/{Relations-CcJBqH7I.js → Relations-CTGM7Hv5.js} +7 -10
  53. package/dist/_chunks/{Relations-CcJBqH7I.js.map → Relations-CTGM7Hv5.js.map} +1 -1
  54. package/dist/_chunks/{Relations-49C4HPsL.mjs → Relations-gscPkxjF.mjs} +6 -8
  55. package/dist/_chunks/{Relations-49C4HPsL.mjs.map → Relations-gscPkxjF.mjs.map} +1 -1
  56. package/dist/_chunks/{en-DTWPCdTS.js → en-BzQmavmK.js} +9 -3
  57. package/dist/_chunks/{en-DTWPCdTS.js.map → en-BzQmavmK.js.map} +1 -1
  58. package/dist/_chunks/{en-CfIXaZf9.mjs → en-CSxLmrh1.mjs} +9 -3
  59. package/dist/_chunks/{en-CfIXaZf9.mjs.map → en-CSxLmrh1.mjs.map} +1 -1
  60. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  61. package/dist/_chunks/{index-DUjGm1xz.js → index-Ca7YWlAA.js} +266 -150
  62. package/dist/_chunks/index-Ca7YWlAA.js.map +1 -0
  63. package/dist/_chunks/{index-CP5EOEiH.mjs → index-DqasUQ6Q.mjs} +266 -149
  64. package/dist/_chunks/index-DqasUQ6Q.mjs.map +1 -0
  65. package/dist/_chunks/{layout-zHc8BsKI.js → layout-BW80JSCd.js} +5 -6
  66. package/dist/_chunks/{layout-zHc8BsKI.js.map → layout-BW80JSCd.js.map} +1 -1
  67. package/dist/_chunks/{layout-B3LdnMTA.mjs → layout-W3clJSCy.mjs} +4 -4
  68. package/dist/_chunks/{layout-B3LdnMTA.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-DnT2jc-S.mjs → relations-BlDkoeWh.mjs} +2 -2
  72. package/dist/_chunks/{relations-DnT2jc-S.mjs.map → relations-BlDkoeWh.mjs.map} +1 -1
  73. package/dist/_chunks/{relations-DrsZXRl-.js → relations-C9Usz9k5.js} +2 -2
  74. package/dist/_chunks/{relations-DrsZXRl-.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 +1 -1
  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/services/preview.d.ts +1 -1
  95. package/dist/admin/src/services/api.d.ts +1 -1
  96. package/dist/admin/src/services/components.d.ts +2 -2
  97. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  98. package/dist/admin/src/services/documents.d.ts +16 -19
  99. package/dist/admin/src/services/init.d.ts +1 -1
  100. package/dist/admin/src/services/relations.d.ts +2 -2
  101. package/dist/admin/src/services/uid.d.ts +3 -3
  102. package/dist/server/index.js +230 -187
  103. package/dist/server/index.js.map +1 -1
  104. package/dist/server/index.mjs +231 -187
  105. package/dist/server/index.mjs.map +1 -1
  106. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  107. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  108. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  109. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  110. package/dist/server/src/history/services/history.d.ts +3 -3
  111. package/dist/server/src/history/services/history.d.ts.map +1 -1
  112. package/dist/server/src/history/services/utils.d.ts +6 -10
  113. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  114. package/dist/server/src/index.d.ts +3 -2
  115. package/dist/server/src/index.d.ts.map +1 -1
  116. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  117. package/dist/server/src/preview/index.d.ts.map +1 -1
  118. package/dist/server/src/preview/services/index.d.ts +1 -0
  119. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  120. package/dist/server/src/preview/services/preview-config.d.ts +2 -0
  121. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  122. package/dist/server/src/preview/utils.d.ts +1 -0
  123. package/dist/server/src/preview/utils.d.ts.map +1 -1
  124. package/dist/server/src/register.d.ts.map +1 -1
  125. package/dist/server/src/services/document-metadata.d.ts +4 -2
  126. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  127. package/dist/server/src/services/index.d.ts +3 -2
  128. package/dist/server/src/services/index.d.ts.map +1 -1
  129. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  130. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  131. package/dist/server/src/services/utils/populate.d.ts +2 -2
  132. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  133. package/package.json +12 -11
  134. package/dist/_chunks/Field-BwLr5b0V.js.map +0 -1
  135. package/dist/_chunks/Field-CfbMEZLv.mjs.map +0 -1
  136. package/dist/_chunks/History-BHH0axCz.js.map +0 -1
  137. package/dist/_chunks/History-BQ721fHN.mjs.map +0 -1
  138. package/dist/_chunks/ListViewPage-C4UCZKeD.js.map +0 -1
  139. package/dist/_chunks/ListViewPage-Dq7nBEKD.mjs.map +0 -1
  140. package/dist/_chunks/Preview-D9FlX2H8.js.map +0 -1
  141. package/dist/_chunks/Preview-GZFXtAgo.mjs.map +0 -1
  142. package/dist/_chunks/index-CP5EOEiH.mjs.map +0 -1
  143. package/dist/_chunks/index-DUjGm1xz.js.map +0 -1
  144. package/dist/admin/src/preview/constants.d.ts +0 -1
  145. package/dist/server/src/preview/constants.d.ts +0 -2
  146. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -3,24 +3,31 @@ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
3
3
  import { useStrapiApp, createContext, useQueryParams, useAuth, useRBAC, Page, adminApi, translatedErrors, useNotification, useAPIErrorHandler, getYupValidationErrors, useForm, useTracking, useGuidedTour, BackButton, DescriptionComponentRenderer, useTable, Table } from "@strapi/admin/strapi-admin";
4
4
  import * as React from "react";
5
5
  import { lazy } from "react";
6
- import { Button, Menu, VisuallyHidden, Flex, Dialog, Modal, Typography, Radio, Status, Box, SingleSelect, SingleSelectOption, IconButton, Loader, Tooltip, LinkButton } from "@strapi/design-system";
6
+ import { Menu, Button, VisuallyHidden, Flex, Dialog, Modal, Typography, Radio, Status, Box, SingleSelect, SingleSelectOption, IconButton, Loader, Tooltip, LinkButton } from "@strapi/design-system";
7
7
  import mapValues from "lodash/fp/mapValues";
8
8
  import { useIntl } from "react-intl";
9
9
  import { useParams, useNavigate, Navigate, useMatch, useLocation, Link, NavLink } from "react-router-dom";
10
+ import { styled } from "styled-components";
10
11
  import * as yup from "yup";
11
12
  import { ValidationError } from "yup";
13
+ import { stringify } from "qs";
12
14
  import pipe from "lodash/fp/pipe";
13
15
  import { intervalToDuration, isPast } from "date-fns";
14
- import { styled } from "styled-components";
15
- import { stringify } from "qs";
16
16
  import { createSlice, combineReducers } from "@reduxjs/toolkit";
17
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
17
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
18
18
  const v = glob[path];
19
19
  if (v) {
20
20
  return typeof v === "function" ? v() : Promise.resolve(v);
21
21
  }
22
22
  return new Promise((_, reject) => {
23
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
23
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
24
+ reject.bind(
25
+ null,
26
+ new Error(
27
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
28
+ )
29
+ )
30
+ );
24
31
  });
25
32
  };
26
33
  const PLUGIN_ID = "content-manager";
@@ -168,7 +175,8 @@ const contentManagerApi = adminApi.enhanceEndpoints({
168
175
  "InitialData",
169
176
  "HistoryVersion",
170
177
  "Relations",
171
- "UidAvailability"
178
+ "UidAvailability",
179
+ "RecentDocumentList"
172
180
  ]
173
181
  });
174
182
  const documentApi = contentManagerApi.injectEndpoints({
@@ -186,7 +194,7 @@ const documentApi = contentManagerApi.injectEndpoints({
186
194
  if (error) {
187
195
  return [];
188
196
  }
189
- return [{ type: "Document", id: `${model}_LIST` }];
197
+ return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
190
198
  }
191
199
  }),
192
200
  cloneDocument: builder.mutation({
@@ -200,7 +208,8 @@ const documentApi = contentManagerApi.injectEndpoints({
200
208
  }),
201
209
  invalidatesTags: (_result, _error, { model }) => [
202
210
  { type: "Document", id: `${model}_LIST` },
203
- { type: "UidAvailability", id: model }
211
+ { type: "UidAvailability", id: model },
212
+ "RecentDocumentList"
204
213
  ]
205
214
  }),
206
215
  /**
@@ -219,8 +228,21 @@ const documentApi = contentManagerApi.injectEndpoints({
219
228
  invalidatesTags: (result, _error, { model }) => [
220
229
  { type: "Document", id: `${model}_LIST` },
221
230
  "Relations",
222
- { type: "UidAvailability", id: model }
223
- ]
231
+ { type: "UidAvailability", id: model },
232
+ "RecentDocumentList"
233
+ ],
234
+ transformResponse: (response, meta, arg) => {
235
+ if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
236
+ return {
237
+ data: response,
238
+ meta: {
239
+ availableStatus: [],
240
+ availableLocales: []
241
+ }
242
+ };
243
+ }
244
+ return response;
245
+ }
224
246
  }),
225
247
  deleteDocument: builder.mutation({
226
248
  query: ({ collectionType, model, documentId, params }) => ({
@@ -231,7 +253,8 @@ const documentApi = contentManagerApi.injectEndpoints({
231
253
  }
232
254
  }),
233
255
  invalidatesTags: (_result, _error, { collectionType, model }) => [
234
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
256
+ { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
257
+ "RecentDocumentList"
235
258
  ]
236
259
  }),
237
260
  deleteManyDocuments: builder.mutation({
@@ -243,7 +266,10 @@ const documentApi = contentManagerApi.injectEndpoints({
243
266
  params
244
267
  }
245
268
  }),
246
- invalidatesTags: (_res, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
269
+ invalidatesTags: (_res, _error, { model }) => [
270
+ { type: "Document", id: `${model}_LIST` },
271
+ "RecentDocumentList"
272
+ ]
247
273
  }),
248
274
  discardDocument: builder.mutation({
249
275
  query: ({ collectionType, model, documentId, params }) => ({
@@ -261,7 +287,8 @@ const documentApi = contentManagerApi.injectEndpoints({
261
287
  },
262
288
  { type: "Document", id: `${model}_LIST` },
263
289
  "Relations",
264
- { type: "UidAvailability", id: model }
290
+ { type: "UidAvailability", id: model },
291
+ "RecentDocumentList"
265
292
  ];
266
293
  }
267
294
  }),
@@ -274,7 +301,7 @@ const documentApi = contentManagerApi.injectEndpoints({
274
301
  url: `/content-manager/collection-types/${model}`,
275
302
  method: "GET",
276
303
  config: {
277
- params
304
+ params: stringify(params, { encode: true })
278
305
  }
279
306
  }),
280
307
  providesTags: (result, _error, arg) => {
@@ -356,7 +383,8 @@ const documentApi = contentManagerApi.injectEndpoints({
356
383
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
357
384
  },
358
385
  { type: "Document", id: `${model}_LIST` },
359
- "Relations"
386
+ "Relations",
387
+ "RecentDocumentList"
360
388
  ];
361
389
  }
362
390
  }),
@@ -387,7 +415,9 @@ const documentApi = contentManagerApi.injectEndpoints({
387
415
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
388
416
  },
389
417
  "Relations",
390
- { type: "UidAvailability", id: model }
418
+ { type: "UidAvailability", id: model },
419
+ "RecentDocumentList",
420
+ "RecentDocumentList"
391
421
  ];
392
422
  },
393
423
  async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
@@ -417,7 +447,8 @@ const documentApi = contentManagerApi.injectEndpoints({
417
447
  {
418
448
  type: "Document",
419
449
  id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
420
- }
450
+ },
451
+ "RecentDocumentList"
421
452
  ];
422
453
  }
423
454
  }),
@@ -430,7 +461,10 @@ const documentApi = contentManagerApi.injectEndpoints({
430
461
  params
431
462
  }
432
463
  }),
433
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
464
+ invalidatesTags: (_res, _error, { model, documentIds }) => [
465
+ ...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
466
+ "RecentDocumentList"
467
+ ]
434
468
  })
435
469
  })
436
470
  });
@@ -453,8 +487,7 @@ const {
453
487
  useUnpublishManyDocumentsMutation
454
488
  } = documentApi;
455
489
  const buildValidParams = (query) => {
456
- if (!query)
457
- return query;
490
+ if (!query) return query;
458
491
  const { plugins: _, ...validQueryParams } = {
459
492
  ...query,
460
493
  ...Object.values(query?.plugins ?? {}).reduce(
@@ -462,9 +495,6 @@ const buildValidParams = (query) => {
462
495
  {}
463
496
  )
464
497
  };
465
- if ("_q" in validQueryParams) {
466
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
467
- }
468
498
  return validQueryParams;
469
499
  };
470
500
  const isBaseQueryError = (error) => {
@@ -1664,7 +1694,7 @@ const useDocumentActions = () => {
1664
1694
  };
1665
1695
  };
1666
1696
  const ProtectedHistoryPage = React.lazy(
1667
- () => import("./History-BQ721fHN.mjs").then((mod) => ({ default: mod.ProtectedHistoryPage }))
1697
+ () => import("./History-04ChQ4pl.mjs").then((mod) => ({ default: mod.ProtectedHistoryPage }))
1668
1698
  );
1669
1699
  const routes$2 = [
1670
1700
  {
@@ -1677,7 +1707,7 @@ const routes$2 = [
1677
1707
  }
1678
1708
  ];
1679
1709
  const ProtectedPreviewPage = React.lazy(
1680
- () => import("./Preview-GZFXtAgo.mjs").then((mod) => ({ default: mod.ProtectedPreviewPage }))
1710
+ () => import("./Preview-BMYN548c.mjs").then((mod) => ({ default: mod.ProtectedPreviewPage }))
1681
1711
  );
1682
1712
  const routes$1 = [
1683
1713
  {
@@ -1690,31 +1720,31 @@ const routes$1 = [
1690
1720
  }
1691
1721
  ];
1692
1722
  const ProtectedEditViewPage = lazy(
1693
- () => import("./EditViewPage-BeRi9xCR.mjs").then((mod) => ({ default: mod.ProtectedEditViewPage }))
1723
+ () => import("./EditViewPage-BPyVuPfM.mjs").then((mod) => ({ default: mod.ProtectedEditViewPage }))
1694
1724
  );
1695
1725
  const ProtectedListViewPage = lazy(
1696
- () => import("./ListViewPage-Dq7nBEKD.mjs").then((mod) => ({ default: mod.ProtectedListViewPage }))
1726
+ () => import("./ListViewPage-FU2LBuhl.mjs").then((mod) => ({ default: mod.ProtectedListViewPage }))
1697
1727
  );
1698
1728
  const ProtectedListConfiguration = lazy(
1699
- () => import("./ListConfigurationPage-BVtVADtP.mjs").then((mod) => ({
1729
+ () => import("./ListConfigurationPage-BYqPYLSU.mjs").then((mod) => ({
1700
1730
  default: mod.ProtectedListConfiguration
1701
1731
  }))
1702
1732
  );
1703
1733
  const ProtectedEditConfigurationPage = lazy(
1704
- () => import("./EditConfigurationPage-DBVSBjCB.mjs").then((mod) => ({
1734
+ () => import("./EditConfigurationPage-DsPR2DVk.mjs").then((mod) => ({
1705
1735
  default: mod.ProtectedEditConfigurationPage
1706
1736
  }))
1707
1737
  );
1708
1738
  const ProtectedComponentConfigurationPage = lazy(
1709
- () => import("./ComponentConfigurationPage-aeNlfgi9.mjs").then((mod) => ({
1739
+ () => import("./ComponentConfigurationPage-CtIa3aa2.mjs").then((mod) => ({
1710
1740
  default: mod.ProtectedComponentConfigurationPage
1711
1741
  }))
1712
1742
  );
1713
1743
  const NoPermissions = lazy(
1714
- () => import("./NoPermissionsPage-CT2YbxJK.mjs").then((mod) => ({ default: mod.NoPermissions }))
1744
+ () => import("./NoPermissionsPage-jqve7C8l.mjs").then((mod) => ({ default: mod.NoPermissions }))
1715
1745
  );
1716
1746
  const NoContentType = lazy(
1717
- () => import("./NoContentTypePage-CQlgc_9h.mjs").then((mod) => ({ default: mod.NoContentType }))
1747
+ () => import("./NoContentTypePage-DCKUkwb8.mjs").then((mod) => ({ default: mod.NoContentType }))
1718
1748
  );
1719
1749
  const CollectionTypePages = () => {
1720
1750
  const { collectionType } = useParams();
@@ -1859,6 +1889,11 @@ const DocumentActionButton = (action) => {
1859
1889
  ) : null
1860
1890
  ] });
1861
1891
  };
1892
+ const MenuItem = styled(Menu.Item)`
1893
+ &:hover {
1894
+ background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
1895
+ }
1896
+ `;
1862
1897
  const DocumentActionsMenu = ({
1863
1898
  actions: actions2,
1864
1899
  children,
@@ -1917,11 +1952,13 @@ const DocumentActionsMenu = ({
1917
1952
  /* @__PURE__ */ jsxs(Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
1918
1953
  actions2.map((action) => {
1919
1954
  return /* @__PURE__ */ jsx(
1920
- Menu.Item,
1955
+ MenuItem,
1921
1956
  {
1922
1957
  disabled: action.disabled,
1923
1958
  onSelect: handleClick(action),
1924
1959
  display: "block",
1960
+ isVariantDanger: action.variant === "danger",
1961
+ isDisabled: action.disabled,
1925
1962
  children: /* @__PURE__ */ jsx(Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxs(
1926
1963
  Flex,
1927
1964
  {
@@ -2077,6 +2114,7 @@ const PublishAction$1 = ({
2077
2114
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
2078
2115
  const isListView = useMatch(LIST_PATH) !== null;
2079
2116
  const isCloning = useMatch(CLONE_PATH) !== null;
2117
+ const { id } = useParams();
2080
2118
  const { formatMessage } = useIntl();
2081
2119
  const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
2082
2120
  const { publish } = useDocumentActions();
@@ -2179,10 +2217,12 @@ const PublishAction$1 = ({
2179
2217
  transformData(formValues)
2180
2218
  );
2181
2219
  if ("data" in res && collectionType !== SINGLE_TYPES) {
2182
- navigate({
2183
- pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2184
- search: rawQuery
2185
- });
2220
+ if (id === "create") {
2221
+ navigate({
2222
+ pathname: `../${collectionType}/${model}/${res.data.documentId}`,
2223
+ search: rawQuery
2224
+ });
2225
+ }
2186
2226
  } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2187
2227
  setErrors(formatValidationErrors(res.error));
2188
2228
  }
@@ -2235,6 +2275,7 @@ const PublishAction$1 = ({
2235
2275
  };
2236
2276
  };
2237
2277
  PublishAction$1.type = "publish";
2278
+ PublishAction$1.position = "panel";
2238
2279
  const UpdateAction = ({
2239
2280
  activeTab,
2240
2281
  documentId,
@@ -2257,96 +2298,134 @@ const UpdateAction = ({
2257
2298
  const validate = useForm("UpdateAction", (state) => state.validate);
2258
2299
  const setErrors = useForm("UpdateAction", (state) => state.setErrors);
2259
2300
  const resetForm = useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
2260
- return {
2261
- /**
2262
- * Disabled when:
2263
- * - the form is submitting
2264
- * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2265
- * - the active tab is the published tab
2266
- */
2267
- disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2268
- label: formatMessage({
2269
- id: "content-manager.containers.Edit.save",
2270
- defaultMessage: "Save"
2271
- }),
2272
- onClick: async () => {
2273
- setSubmitting(true);
2274
- try {
2275
- const { errors } = await validate(true, {
2276
- status: "draft"
2301
+ const handleUpdate = React.useCallback(async () => {
2302
+ setSubmitting(true);
2303
+ try {
2304
+ if (!modified) {
2305
+ return;
2306
+ }
2307
+ const { errors } = await validate(true, {
2308
+ status: "draft"
2309
+ });
2310
+ if (errors) {
2311
+ toggleNotification({
2312
+ type: "danger",
2313
+ message: formatMessage({
2314
+ id: "content-manager.validation.error",
2315
+ defaultMessage: "There are validation errors in your document. Please fix them before saving."
2316
+ })
2277
2317
  });
2278
- if (errors) {
2279
- toggleNotification({
2280
- type: "danger",
2281
- message: formatMessage({
2282
- id: "content-manager.validation.error",
2283
- defaultMessage: "There are validation errors in your document. Please fix them before saving."
2284
- })
2285
- });
2286
- return;
2287
- }
2288
- if (isCloning) {
2289
- const res = await clone(
2290
- {
2291
- model,
2292
- documentId: cloneMatch.params.origin,
2293
- params
2294
- },
2295
- transformData(document)
2296
- );
2297
- if ("data" in res) {
2298
- navigate(
2299
- {
2300
- pathname: `../${res.data.documentId}`,
2301
- search: rawQuery
2302
- },
2303
- { relative: "path" }
2304
- );
2305
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2306
- setErrors(formatValidationErrors(res.error));
2307
- }
2308
- } else if (documentId || collectionType === SINGLE_TYPES) {
2309
- const res = await update(
2318
+ return;
2319
+ }
2320
+ if (isCloning) {
2321
+ const res = await clone(
2322
+ {
2323
+ model,
2324
+ documentId: cloneMatch.params.origin,
2325
+ params
2326
+ },
2327
+ transformData(document)
2328
+ );
2329
+ if ("data" in res) {
2330
+ navigate(
2310
2331
  {
2311
- collectionType,
2312
- model,
2313
- documentId,
2314
- params
2332
+ pathname: `../${res.data.documentId}`,
2333
+ search: rawQuery
2315
2334
  },
2316
- transformData(document)
2335
+ { relative: "path" }
2317
2336
  );
2318
- if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2319
- setErrors(formatValidationErrors(res.error));
2320
- } else {
2321
- resetForm();
2322
- }
2337
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2338
+ setErrors(formatValidationErrors(res.error));
2339
+ }
2340
+ } else if (documentId || collectionType === SINGLE_TYPES) {
2341
+ const res = await update(
2342
+ {
2343
+ collectionType,
2344
+ model,
2345
+ documentId,
2346
+ params
2347
+ },
2348
+ transformData(document)
2349
+ );
2350
+ if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2351
+ setErrors(formatValidationErrors(res.error));
2323
2352
  } else {
2324
- const res = await create(
2353
+ resetForm();
2354
+ }
2355
+ } else {
2356
+ const res = await create(
2357
+ {
2358
+ model,
2359
+ params
2360
+ },
2361
+ transformData(document)
2362
+ );
2363
+ if ("data" in res && collectionType !== SINGLE_TYPES) {
2364
+ navigate(
2325
2365
  {
2326
- model,
2327
- params
2366
+ pathname: `../${res.data.documentId}`,
2367
+ search: rawQuery
2328
2368
  },
2329
- transformData(document)
2369
+ { replace: true, relative: "path" }
2330
2370
  );
2331
- if ("data" in res && collectionType !== SINGLE_TYPES) {
2332
- navigate(
2333
- {
2334
- pathname: `../${res.data.documentId}`,
2335
- search: rawQuery
2336
- },
2337
- { replace: true, relative: "path" }
2338
- );
2339
- } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2340
- setErrors(formatValidationErrors(res.error));
2341
- }
2371
+ } else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
2372
+ setErrors(formatValidationErrors(res.error));
2342
2373
  }
2343
- } finally {
2344
- setSubmitting(false);
2345
2374
  }
2375
+ } finally {
2376
+ setSubmitting(false);
2346
2377
  }
2378
+ }, [
2379
+ clone,
2380
+ cloneMatch?.params.origin,
2381
+ collectionType,
2382
+ create,
2383
+ document,
2384
+ documentId,
2385
+ formatMessage,
2386
+ formatValidationErrors,
2387
+ isCloning,
2388
+ model,
2389
+ modified,
2390
+ navigate,
2391
+ params,
2392
+ rawQuery,
2393
+ resetForm,
2394
+ setErrors,
2395
+ setSubmitting,
2396
+ toggleNotification,
2397
+ update,
2398
+ validate
2399
+ ]);
2400
+ React.useEffect(() => {
2401
+ const handleKeyDown = (e) => {
2402
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
2403
+ e.preventDefault();
2404
+ handleUpdate();
2405
+ }
2406
+ };
2407
+ window.addEventListener("keydown", handleKeyDown);
2408
+ return () => {
2409
+ window.removeEventListener("keydown", handleKeyDown);
2410
+ };
2411
+ }, [handleUpdate]);
2412
+ return {
2413
+ /**
2414
+ * Disabled when:
2415
+ * - the form is submitting
2416
+ * - the document is not modified & we're not cloning (you can save a clone entity straight away)
2417
+ * - the active tab is the published tab
2418
+ */
2419
+ disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
2420
+ label: formatMessage({
2421
+ id: "global.save",
2422
+ defaultMessage: "Save"
2423
+ }),
2424
+ onClick: handleUpdate
2347
2425
  };
2348
2426
  };
2349
2427
  UpdateAction.type = "update";
2428
+ UpdateAction.position = "panel";
2350
2429
  const UNPUBLISH_DRAFT_OPTIONS = {
2351
2430
  KEEP: "keep",
2352
2431
  DISCARD: "discard"
@@ -2469,6 +2548,7 @@ const UnpublishAction$1 = ({
2469
2548
  };
2470
2549
  };
2471
2550
  UnpublishAction$1.type = "unpublish";
2551
+ UnpublishAction$1.position = "panel";
2472
2552
  const DiscardAction = ({
2473
2553
  activeTab,
2474
2554
  documentId,
@@ -2519,6 +2599,7 @@ const DiscardAction = ({
2519
2599
  };
2520
2600
  };
2521
2601
  DiscardAction.type = "discard";
2602
+ DiscardAction.position = "panel";
2522
2603
  const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
2523
2604
  const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
2524
2605
  const RelativeTime = React.forwardRef(
@@ -2638,7 +2719,7 @@ const HeaderToolbar = () => {
2638
2719
  meta: isCloning ? void 0 : meta,
2639
2720
  collectionType
2640
2721
  },
2641
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
2722
+ descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
2642
2723
  children: (actions2) => {
2643
2724
  const headerActions = actions2.filter((action) => {
2644
2725
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -2846,6 +2927,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
2846
2927
  };
2847
2928
  };
2848
2929
  ConfigureTheViewAction.type = "configure-the-view";
2930
+ ConfigureTheViewAction.position = "header";
2849
2931
  const EditTheModelAction = ({ model }) => {
2850
2932
  const navigate = useNavigate();
2851
2933
  const { formatMessage } = useIntl();
@@ -2862,6 +2944,7 @@ const EditTheModelAction = ({ model }) => {
2862
2944
  };
2863
2945
  };
2864
2946
  EditTheModelAction.type = "edit-the-model";
2947
+ EditTheModelAction.position = "header";
2865
2948
  const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2866
2949
  const navigate = useNavigate();
2867
2950
  const { formatMessage } = useIntl();
@@ -2935,6 +3018,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
2935
3018
  };
2936
3019
  };
2937
3020
  DeleteAction$1.type = "delete";
3021
+ DeleteAction$1.position = ["header", "table-row"];
2938
3022
  const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
2939
3023
  const Panels = () => {
2940
3024
  const isCloning = useMatch(CLONE_PATH) !== null;
@@ -2997,7 +3081,7 @@ const ActionsPanelContent = () => {
2997
3081
  DescriptionComponentRenderer,
2998
3082
  {
2999
3083
  props,
3000
- descriptions: plugins["content-manager"].apis.getDocumentActions(),
3084
+ descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
3001
3085
  children: (actions2) => /* @__PURE__ */ jsx(DocumentActions, { actions: actions2 })
3002
3086
  }
3003
3087
  ),
@@ -3451,8 +3535,7 @@ const PublishAction = ({ documents, model }) => {
3451
3535
  const refetchList = () => {
3452
3536
  contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
3453
3537
  };
3454
- if (!showPublishButton)
3455
- return null;
3538
+ if (!showPublishButton) return null;
3456
3539
  return {
3457
3540
  actionType: "publish",
3458
3541
  variant: "tertiary",
@@ -3520,8 +3603,7 @@ const DeleteAction = ({ documents, model }) => {
3520
3603
  selectRow([]);
3521
3604
  }
3522
3605
  };
3523
- if (!hasDeletePermission)
3524
- return null;
3606
+ if (!hasDeletePermission) return null;
3525
3607
  return {
3526
3608
  variant: "danger-light",
3527
3609
  label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
@@ -3570,8 +3652,7 @@ const UnpublishAction = ({ documents, model }) => {
3570
3652
  }
3571
3653
  };
3572
3654
  const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
3573
- if (!showUnpublishButton)
3574
- return null;
3655
+ if (!showUnpublishButton) return null;
3575
3656
  return {
3576
3657
  variant: "tertiary",
3577
3658
  label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
@@ -3676,7 +3757,7 @@ const TableActions = ({ document }) => {
3676
3757
  DescriptionComponentRenderer,
3677
3758
  {
3678
3759
  props,
3679
- descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
3760
+ descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
3680
3761
  children: (actions2) => {
3681
3762
  const tableRowActions = actions2.filter((action) => {
3682
3763
  const positions = Array.isArray(action.position) ? action.position : [action.position];
@@ -3735,6 +3816,7 @@ const EditAction = ({ documentId }) => {
3735
3816
  };
3736
3817
  };
3737
3818
  EditAction.type = "edit";
3819
+ EditAction.position = "table-row";
3738
3820
  const StyledPencil = styled(Pencil)`
3739
3821
  path {
3740
3822
  fill: currentColor;
@@ -3811,6 +3893,7 @@ const CloneAction = ({ model, documentId }) => {
3811
3893
  };
3812
3894
  };
3813
3895
  CloneAction.type = "clone";
3896
+ CloneAction.position = "table-row";
3814
3897
  const StyledDuplicate = styled(Duplicate)`
3815
3898
  path {
3816
3899
  fill: currentColor;
@@ -3897,7 +3980,14 @@ class ContentManagerPlugin {
3897
3980
  addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
3898
3981
  addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
3899
3982
  getBulkActions: () => this.bulkActions,
3900
- getDocumentActions: () => this.documentActions,
3983
+ getDocumentActions: (position) => {
3984
+ if (position) {
3985
+ return this.documentActions.filter(
3986
+ (action) => action.position == void 0 || [action.position].flat().includes(position)
3987
+ );
3988
+ }
3989
+ return this.documentActions;
3990
+ },
3901
3991
  getEditViewSidePanels: () => this.editViewSidePanels,
3902
3992
  getHeaderActions: () => this.headerActions
3903
3993
  }
@@ -3907,10 +3997,8 @@ class ContentManagerPlugin {
3907
3997
  const getPrintableType = (value) => {
3908
3998
  const nativeType = typeof value;
3909
3999
  if (nativeType === "object") {
3910
- if (value === null)
3911
- return "null";
3912
- if (Array.isArray(value))
3913
- return "array";
4000
+ if (value === null) return "null";
4001
+ if (Array.isArray(value)) return "array";
3914
4002
  if (value instanceof Object && value.constructor.name !== "Object") {
3915
4003
  return value.constructor.name;
3916
4004
  }
@@ -3921,17 +4009,27 @@ const HistoryAction = ({ model, document }) => {
3921
4009
  const { formatMessage } = useIntl();
3922
4010
  const [{ query }] = useQueryParams();
3923
4011
  const navigate = useNavigate();
4012
+ const { trackUsage } = useTracking();
4013
+ const { pathname } = useLocation();
3924
4014
  const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });
3925
4015
  if (!window.strapi.features.isEnabled("cms-content-history")) {
3926
4016
  return null;
3927
4017
  }
4018
+ const handleOnClick = () => {
4019
+ const destination = { pathname: "history", search: pluginsQueryParams };
4020
+ trackUsage("willNavigate", {
4021
+ from: pathname,
4022
+ to: `${pathname}/${destination.pathname}`
4023
+ });
4024
+ navigate(destination);
4025
+ };
3928
4026
  return {
3929
4027
  icon: /* @__PURE__ */ jsx(ClockCounterClockwise, {}),
3930
4028
  label: formatMessage({
3931
4029
  id: "content-manager.history.document-action",
3932
4030
  defaultMessage: "Content History"
3933
4031
  }),
3934
- onClick: () => navigate({ pathname: "history", search: pluginsQueryParams }),
4032
+ onClick: handleOnClick,
3935
4033
  disabled: (
3936
4034
  /**
3937
4035
  * The user is creating a new document.
@@ -3953,6 +4051,7 @@ const HistoryAction = ({ model, document }) => {
3953
4051
  };
3954
4052
  };
3955
4053
  HistoryAction.type = "history";
4054
+ HistoryAction.position = "header";
3956
4055
  const historyAdmin = {
3957
4056
  bootstrap(app) {
3958
4057
  const { addDocumentAction } = app.getPlugin("content-manager").apis;
@@ -4015,10 +4114,18 @@ const previewApi = contentManagerApi.injectEndpoints({
4015
4114
  })
4016
4115
  });
4017
4116
  const { useGetPreviewUrlQuery } = previewApi;
4117
+ const ConditionalTooltip = ({ isShown, label, children }) => {
4118
+ if (isShown) {
4119
+ return /* @__PURE__ */ jsx(Tooltip, { label, children });
4120
+ }
4121
+ return children;
4122
+ };
4018
4123
  const PreviewSidePanel = ({ model, documentId, document }) => {
4019
4124
  const { formatMessage } = useIntl();
4020
4125
  const { trackUsage } = useTracking();
4126
+ const { pathname } = useLocation();
4021
4127
  const [{ query }] = useQueryParams();
4128
+ const isModified = useForm("PreviewSidePanel", (state) => state.modified);
4022
4129
  const { data, error } = useGetPreviewUrlQuery({
4023
4130
  params: {
4024
4131
  contentType: model
@@ -4032,33 +4139,43 @@ const PreviewSidePanel = ({ model, documentId, document }) => {
4032
4139
  if (!data?.data?.url || error) {
4033
4140
  return null;
4034
4141
  }
4035
- const handleClick = () => {
4036
- trackUsage("willOpenPreview");
4142
+ const trackNavigation = () => {
4143
+ const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
4144
+ trackUsage("willNavigate", { from: pathname, to: destinationPathname });
4037
4145
  };
4038
4146
  return {
4039
4147
  title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
4040
- content: /* @__PURE__ */ jsx(Flex, { gap: 2, width: "100%", children: /* @__PURE__ */ jsx(
4041
- Button,
4148
+ content: /* @__PURE__ */ jsx(
4149
+ ConditionalTooltip,
4042
4150
  {
4043
- variant: "tertiary",
4044
- tag: Link,
4045
- to: { pathname: "preview", search: stringify(query, { encode: false }) },
4046
- onClick: handleClick,
4047
- flex: "auto",
4048
- children: formatMessage({
4049
- id: "content-manager.preview.panel.button",
4050
- defaultMessage: "Open preview"
4051
- })
4151
+ label: formatMessage({
4152
+ id: "content-manager.preview.panel.button-disabled-tooltip",
4153
+ defaultMessage: "Please save to open the preview"
4154
+ }),
4155
+ isShown: isModified,
4156
+ children: /* @__PURE__ */ jsx(Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsx(
4157
+ Button,
4158
+ {
4159
+ variant: "tertiary",
4160
+ tag: Link,
4161
+ to: { pathname: "preview", search: stringify(query, { encode: false }) },
4162
+ onClick: trackNavigation,
4163
+ width: "100%",
4164
+ disabled: isModified,
4165
+ pointerEvents: isModified ? "none" : void 0,
4166
+ tabIndex: isModified ? -1 : void 0,
4167
+ children: formatMessage({
4168
+ id: "content-manager.preview.panel.button",
4169
+ defaultMessage: "Open preview"
4170
+ })
4171
+ }
4172
+ ) })
4052
4173
  }
4053
- ) })
4174
+ )
4054
4175
  };
4055
4176
  };
4056
- const FEATURE_ID = "preview";
4057
4177
  const previewAdmin = {
4058
4178
  bootstrap(app) {
4059
- if (!window.strapi.future.isEnabled(FEATURE_ID)) {
4060
- return;
4061
- }
4062
4179
  const contentManagerPluginApis = app.getPlugin("content-manager").apis;
4063
4180
  contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
4064
4181
  }
@@ -4082,7 +4199,7 @@ const index = {
4082
4199
  app.router.addRoute({
4083
4200
  path: "content-manager/*",
4084
4201
  lazy: async () => {
4085
- const { Layout } = await import("./layout-B3LdnMTA.mjs");
4202
+ const { Layout } = await import("./layout-W3clJSCy.mjs");
4086
4203
  return {
4087
4204
  Component: Layout
4088
4205
  };
@@ -4102,7 +4219,7 @@ const index = {
4102
4219
  async registerTrads({ locales }) {
4103
4220
  const importedTrads = await Promise.all(
4104
4221
  locales.map((locale) => {
4105
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-CCEVvqGG.mjs"), "./translations/ca.json": () => import("./ca-5U32ON2v.mjs"), "./translations/cs.json": () => import("./cs-CM2aBUar.mjs"), "./translations/de.json": () => import("./de-C72KDNOl.mjs"), "./translations/en.json": () => import("./en-CfIXaZf9.mjs"), "./translations/es.json": () => import("./es-D34tqjMw.mjs"), "./translations/eu.json": () => import("./eu-CdALomew.mjs"), "./translations/fr.json": () => import("./fr--pg5jUbt.mjs"), "./translations/gu.json": () => import("./gu-CNpaMDpH.mjs"), "./translations/hi.json": () => import("./hi-Dwvd04m3.mjs"), "./translations/hu.json": () => import("./hu-CeYvaaO0.mjs"), "./translations/id.json": () => import("./id-BtwA9WJT.mjs"), "./translations/it.json": () => import("./it-BrVPqaf1.mjs"), "./translations/ja.json": () => import("./ja-BHqhDq4V.mjs"), "./translations/ko.json": () => import("./ko-HVQRlfUI.mjs"), "./translations/ml.json": () => import("./ml-BihZwQit.mjs"), "./translations/ms.json": () => import("./ms-m_WjyWx7.mjs"), "./translations/nl.json": () => import("./nl-D4R9gHx5.mjs"), "./translations/pl.json": () => import("./pl-sbx9mSt_.mjs"), "./translations/pt-BR.json": () => import("./pt-BR-C71iDxnh.mjs"), "./translations/pt.json": () => import("./pt-BsaFvS8-.mjs"), "./translations/ru.json": () => import("./ru-BE6A4Exp.mjs"), "./translations/sa.json": () => import("./sa-Dag0k-Z8.mjs"), "./translations/sk.json": () => import("./sk-BFg-R8qJ.mjs"), "./translations/sv.json": () => import("./sv-CUnfWGsh.mjs"), "./translations/th.json": () => import("./th-BqbI8lIT.mjs"), "./translations/tr.json": () => import("./tr-CgeK3wJM.mjs"), "./translations/uk.json": () => import("./uk-CR-zDhAY.mjs"), "./translations/vi.json": () => import("./vi-DUXIk_fw.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-BPQcRIyH.mjs"), "./translations/zh.json": () => import("./zh-BWZspA60.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
4222
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-CCEVvqGG.mjs"), "./translations/ca.json": () => import("./ca-5U32ON2v.mjs"), "./translations/cs.json": () => import("./cs-CM2aBUar.mjs"), "./translations/de.json": () => import("./de-C72KDNOl.mjs"), "./translations/en.json": () => import("./en-CSxLmrh1.mjs"), "./translations/es.json": () => import("./es-D34tqjMw.mjs"), "./translations/eu.json": () => import("./eu-CdALomew.mjs"), "./translations/fr.json": () => import("./fr--pg5jUbt.mjs"), "./translations/gu.json": () => import("./gu-CNpaMDpH.mjs"), "./translations/hi.json": () => import("./hi-Dwvd04m3.mjs"), "./translations/hu.json": () => import("./hu-CeYvaaO0.mjs"), "./translations/id.json": () => import("./id-BtwA9WJT.mjs"), "./translations/it.json": () => import("./it-BrVPqaf1.mjs"), "./translations/ja.json": () => import("./ja-BHqhDq4V.mjs"), "./translations/ko.json": () => import("./ko-HVQRlfUI.mjs"), "./translations/ml.json": () => import("./ml-BihZwQit.mjs"), "./translations/ms.json": () => import("./ms-m_WjyWx7.mjs"), "./translations/nl.json": () => import("./nl-D4R9gHx5.mjs"), "./translations/pl.json": () => import("./pl-sbx9mSt_.mjs"), "./translations/pt-BR.json": () => import("./pt-BR-C71iDxnh.mjs"), "./translations/pt.json": () => import("./pt-BsaFvS8-.mjs"), "./translations/ru.json": () => import("./ru-BE6A4Exp.mjs"), "./translations/sa.json": () => import("./sa-Dag0k-Z8.mjs"), "./translations/sk.json": () => import("./sk-BFg-R8qJ.mjs"), "./translations/sv.json": () => import("./sv-CUnfWGsh.mjs"), "./translations/th.json": () => import("./th-BqbI8lIT.mjs"), "./translations/tr.json": () => import("./tr-CgeK3wJM.mjs"), "./translations/uk.json": () => import("./uk-CR-zDhAY.mjs"), "./translations/vi.json": () => import("./vi-DUXIk_fw.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-BPQcRIyH.mjs"), "./translations/zh.json": () => import("./zh-BWZspA60.mjs") }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
4106
4223
  return {
4107
4224
  data: prefixPluginTranslations(data, PLUGIN_ID),
4108
4225
  locale
@@ -4164,4 +4281,4 @@ export {
4164
4281
  capitalise as y,
4165
4282
  useUpdateContentTypeConfigurationMutation as z
4166
4283
  };
4167
- //# sourceMappingURL=index-CP5EOEiH.mjs.map
4284
+ //# sourceMappingURL=index-DqasUQ6Q.mjs.map